[TOC] # Linux常用命令 ## 一、基本的日常操作 1.查看当前所在的工作目录的全路径 pwd ~~~ [test@hdp-node-01 ~]$ pwd ~~~ 2.查看当前系统的时间 date ~~~ [test@hdp-node-01 ~]$ date +%Y-%m-%d 2016-05-18 [test@hdp-node-01 ~]$ date +%Y-%m-%d --date="-1 day" #加减也可以 month | year 2016-05-17 #设置时间 date -s "2016-05-23 01:01" ## 修改时间 #修改时间后,需要写入硬件bios才能在重启之后依然生效 hwclock -w ~~~ 3.查看有谁在线(哪些人登陆到了服务器) ~~~ #who 查看当前在线 [test@hdp-node-01 ~]$ who root tty1 2016-05-18 11:46 hadoop tty3 2016-05-18 11:46 hadoop pts/0 2016-05-18 10:57 (192.168.33.1) #last 查看最近的登陆历史记录 [test@hdp-node-01 ~]$ last -3 hadoop tty3 Wed May 18 11:46 still logged in root tty1 Wed May 18 11:46 still logged in hadoop pts/0 192.168.33.1 Wed May 18 10:57 still logged in ~~~ 4、关机/重启 ~~~ ## 关机(必须用root用户) shutdown -h now ## 立刻关机 shutdown -h +10 ## 10分钟以后关机 shutdown -h 12:00:00 ##12点整的时候关机 halt # 等于立刻关机 ## 重启 shutdown -r now reboot # 等于立刻重启 ~~~ 5、清屏 ~~~ clear ## 或者用快捷键 ctrl + l ~~~ 6、退出当前进程 ~~~ ctrl+c 有些程序也可以用q键退出 ~~~ 7、挂起当前进程 ~~~ ctrl+z ## 进程会挂起到后台 bg jobid ## 让进程在后台继续执行 fg jobid ## 让进程回到前台 ~~~ 8、echo ~~~ 相当于java中System.out.println(userName) [root@localhost bbb]# a="婷婷是我的梦中情人" [root@localhost bbb]# [root@localhost bbb]# echo a a [root@localhost bbb]# echo $a 婷婷是我的梦中情人 ~~~ ## 二、目录操作 1 查看目录信息 ~~~ ls / ## 查看根目录下的子节点(文件夹和文件)信息 ls -al ## -a是显示隐藏文件 -l是以更详细的列表形式显示 ls -l 有一个别名: ll 可以直接使用ll <是两个L> ~~~ 2 切换工作目录 ~~~ cd /home/hadoop ## 切换到用户主目录 cd ~ ## 切换到用户主目录 cd 什么路径都不带,则回到用户的主目录 cd - ## 回退到上次所在的目录 ~~~ 3 创建文件夹 ~~~ mkdir aaa ## 这是相对路径的写法 mkdir /data ## 这是绝对路径的写法 mkdir -p aaa/bbb/ccc ## 级联创建目录 ~~~ 4 删除文件夹 ~~~ rmdir aaa ## 可以删除空目录 rm -r aaa ## 可以把aaa整个文件夹及其中的所有子节点全部删除 rm -rf aaa ## 强制删除aaa ~~~ 5 修改文件夹名称 ~~~ mv aaa angelababy mv本质上是移动 mv install.log aaa/ 将当前目录下的install.log 移动到aaa文件夹中去 rename 可以用来批量更改文件名 [root@localhost bbb]# ll total 0 -rw-r--r--. 1 root root 0 May 22 15:58 1.txt -rw-r--r--. 1 root root 0 May 22 15:58 2.txt -rw-r--r--. 1 root root 0 May 22 15:58 3.txt [root@localhost bbb]# rename .txt .txt.bak * [root@localhost bbb]# ll total 0 -rw-r--r--. 1 root root 0 May 22 15:58 1.txt.bak -rw-r--r--. 1 root root 0 May 22 15:58 2.txt.bak -rw-r--r--. 1 root root 0 May 22 15:58 3.txt.bak ~~~ ## 三、文件操作 1 创建文件 ~~~ touch somefile.1 创建一个空文件 echo "i miss you,my baby" > somefile.2 利用重定向“>”的功能,将一条指令的输出结果写入到一个文件中,会覆盖原文件内容,如果指定的文件不存在,则会创建出来 echo "huangxiaoming ,gun dan" >> somefile.2 将一条指令的输出结果追加到一个文件中,不会覆盖原文件内容 ~~~ 2 vi文本编辑器 1、最基本用法 vi somefile.4 1. 首先会进入“一般模式”,此模式只接受各种命令快捷键,不能编辑文件内容 2. 按i键,就会从一般模式进入编辑模式,此模式下,敲入的都是文件内容 3. 编辑完成之后,按Esc键退出编辑模式,回到一般模式; 4. 再按:,进入“底行命令模式”,输入wq命令,回车即可保存退出 2、常用快捷键 ~~~ 一些有用的快捷键(在一般模式下使用): a 在光标后一位开始插入 A 在该行的最后插入 I 在该行的最前面插入 gg 直接跳到文件的首行 G 直接跳到文件的末行 dd 删除一行 3dd 删除3行 yy 复制一行 3yy 复制3行 p 粘贴 u undo ctrl + r redo v 进入字符选择模式,选择完成后,按y复制,按p粘贴 ctrl+v 进入块选择模式,选择完成后,按y复制,按p粘贴 shift+v 进入行选择模式,选择完成后,按y复制,按p粘贴 ~~~ 3、查找并替换 ~~~ (在底行命令模式中输入) 1显示行号 :set nu 2 隐藏行号 :set nonu 3 查找关键字 :/you ## 效果:查找文件中出现的you,并定位到第一个找到的地方,按n可以定位到下一个匹配位置(按N定位到上一个) ~~~ 4 替换操作 ~~~ :s/sad/bbb 查找光标所在行的第一个sad,替换为bbb :%s/sad/bbb 查找文件中所有sad,替换为bbb :1,$s/hadoop/root/g 将第一行到最后一行的hadoop替换为root :1,$s/hadoop/root/c 将第一行到最后一行的hadoop替换为root(有提示) ~~~ 3 拷贝/删除/移动 ~~~ cp somefile.1 /home/hadoop/ rm /home/hadoop/somefile.1 rm -rf /home/hadoop/somefile.1 mv /home/hadoop/somefile.1 ../ ~~~ 4 查看文件内容 ~~~ cat somefile 一次性将文件内容全部输出(控制台) 分页查看文件的命令: more somefile 可以翻页查看, 下翻一页(空格) 上翻一页(b) 退出(q) less somefile 可以翻页查看,下翻一页(空格) 上翻一页(b),上翻一行(↑) 下翻一行(↓) 可以搜索关键字(/keyword) 跳到文件末尾: G 跳到文件首行: gg 退出less : q tail -10 install.log 查看文件尾部的10行 tail +10 install.log 查看文件 10-->末行 tail -f install.log 小f跟踪文件的唯一inode号,就算文件改名后,还是跟踪原来这个inode表示的文件 tail -F install.log 大F按照文件名来跟踪 head -10 install.log 查看文件头部的10行 ~~~ 5 打包压缩 ~~~ 1、gzip压缩 gzip a.txt 2、解压 gunzip a.txt.gz gzip -d a.txt.gz 3、bzip2压缩 bzip2 a 4、解压 bunzip2 a.bz2 bzip2 -d a.bz2 5、打包:将指定文件或文件夹 tar -cvf bak.tar ./aaa 将/etc/password追加文件到bak.tar中(r) tar -rvf bak.tar /etc/password 6、解压 tar -xvf bak.tar 7、打包并压缩 tar -zcvf a.tar.gz aaa/ 8、解包并解压缩(重要的事情说三遍!!!) tar -zxvf a.tar.gz 解压到/usr/下 tar -zxvf a.tar.gz -C /usr 9、查看压缩包内容 tar -ztvf a.tar.gz zip/unzip 10、打包并压缩成bz2 tar -jcvf a.tar.bz2 11、解压bz2 tar -jxvf a.tar.bz2 ~~~ ## 四、查找命令 1、查找可执行的命令所在的路径: ~~~ which ls ~~~ 2、查找可执行的命令和帮助的位置: ~~~ whereis ls ~~~ 3、从某个文件夹开始查找文件 ~~~ find / -name "hadooop*" find / -name "hadooop*" -ls ~~~ 5、查找并删除 ~~~ find / -name "hadooop*" -ok rm {} \; find / -name "hadooop*" -exec rm {} \; ~~~ 6、查找用户为hadoop的文件 `find /usr -user hadoop -ls` 7、查找用户为hadoop的文件夹 `find /home -user hadoop -type d -ls` 8、查找权限为777的文件 `find / -perm -777 -type d -ls` **、显示历史命令 `history` 2 grep命令 1/ 基本使用 ~~~ 查询包含hadoop的行 grep hadoop /etc/password grep aaa ./*.txt ~~~ 2/ cut截取以:分割保留第七段 `grep hadoop /etc/passwd | cut -d: -f7` 3/ 查询不包含hadoop的行 `grep -v hadoop /etc/passwd` 4/ 正则表达包含hadoop `grep 'hadoop' /etc/passwd` 5/ 正则表达(点代表任意一个字符) `grep 'h.*p' /etc/passwd` 6/ 正则表达以hadoop开头 `grep '^hadoop' /etc/passwd` 7/ 正则表达以hadoop结尾 `grep 'hadoop$' /etc/passwd` 正则表达式的简单规则: ~~~ . : 任意一个字符 a* : 任意多个a(零个或多个a) a? : 零个或一个a a+ : 一个或多个a .* : 任意多个任意字符 \. : 转义. o\{2\} : o重复两次 ~~~ 查找不是以#开头的行 `grep -v '^#' a.txt | grep -v '^$'` 以h或r开头的 `grep '^[hr]' /etc/passwd` 不是以h和r开头的 `grep '^[^hr]' /etc/passwd` 不是以h到r开头的 `grep '^[^h-r]' /etc/passwd` ## 五、文件权限操作 1 linux文件权限的描述格式解读 ~~~ drwxr-xr-x (也可以用二进制表示 111 101 101 --> 755) d:标识节点类型(d:文件夹 -:文件 l:链接) r:可读 w:可写 x:可执行 第一组rwx: ## 表示这个文件的拥有者对它的权限:可读可写可执行 第二组r-x: ## 表示这个文件的所属组用户对它的权限:可读,不可写,可执行 第三组r-x: ## 表示这个文件的其他用户(相对于上面两类用户)对它的权限:可读,不可写,可执行 ~~~ 2 修改文件权限 ~~~ chmod g-rw haha.dat ## 表示将haha.dat对所属组的rw权限取消 chmod o-rw haha.dat ## 表示将haha.dat对其他人的rw权限取消 chmod u+x haha.dat ## 表示将haha.dat对所属用户的权限增加x chmod a-x haha.dat ## 表示将haha.dat对所用户取消x权限 也可以用数字的方式来修改权限 chmod 664 haha.dat 就会修改成 rw-rw-r-- 如果要将一个文件夹的所有内容权限统一修改,则可以-R参数 chmod -R 770 aaa/ ~~~ 3 修改文件所有权 ~~~ <只有root权限能执行> chown angela aaa ## 改变所属用户 chown :angela aaa ## 改变所属组 chown angela:angela aaa/ ## 同时修改所属用户和所属组 ~~~ ~~~ 补充: r: 对文件来说,是可读取内容; 对文件夹来说,是可以ls w: 对文件来说,是可修改文件的内容;对文件夹来说,是可以在其中创建或者删除子节点 x: 对文件来说,是能否运行这个文件;对文件夹来说,是能否cd进入这个目录 ~~~ ## 六、基本的用户管理 需要我们掌握的: ~~~ 添加一个用户: 1、 useradd spark 2、 passwd spark 根据提示设置密码; 即可 删除一个用户: userdel -r spark 加一个-r就表示把用户及用户的主目录都删除 ~~~ 1 添加用户 ~~~ 添加一个tom用户,设置它属于users组,并添加注释信息 分步完成:useradd tom usermod -g users tom usermod -c "hr tom" tom 一步完成:useradd -g users -c "hr tom" tom 设置tom用户的密码 passwd tom ~~~ 2 修改用户 ~~~ 修改tom用户的登陆名为tomcat usermod -l tomcat tom 将tomcat添加到sys和root组中 usermod -G sys,root tomcat 查看tomcat的组信息 groups tomcat ~~~ 3 用户组操作 ~~~ 添加一个叫america的组 groupadd america 将jerry添加到america组中 usermod -g america jerry 将tomcat用户从root组和sys组删除 gpasswd -d tomcat root gpasswd -d tomcat sys 将america组名修改为am groupmod -n am america ~~~ 4 为用户配置sudo权限 ~~~ 用root编辑 vi /etc/sudoers 在文件的如下位置,为hadoop添加一行即可 root ALL=(ALL) ALL hadoop ALL=(ALL) ALL 然后,hadoop用户就可以用sudo来执行系统级别的指令 [hadoop@shizhan ~]$ sudo useradd huangxiaoming ~~~ ## 七、系统管理操作 1 挂载外部存储设备 可以挂载光盘、硬盘、磁带、光盘镜像文件等 1/ 挂载光驱 ~~~ mkdir /mnt/cdrom 创建一个目录,用来挂载 mount -t iso9660 -o ro /dev/cdrom /mnt/cdrom/ 将设备/dev/cdrom挂载到 挂载点 : /mnt/cdrom中 ~~~ 2/ 挂载光盘镜像文件(.iso文件) ~~~ mount -t iso9660 -o loop /home/hadoop/Centos-6.7.DVD.iso /mnt/centos 注:挂载的资源在重启后即失效,需要重新挂载。要想自动挂载,可以将挂载信息设置到/etc/fstab配置文件中,如下: /dev/cdrom /mnt/cdrom iso9660 defaults 0 0 /root/CentOS-6.7-x86_64-bin-DVD1.iso /mnt/centos iso9660 defaults,ro,loop 0 0 ~~~ 3/ 卸载 umount ~~~ umount /mnt/cdrom ** 存储空间查看 df -h ~~~ 2 统计文件或文件夹的大小 ~~~ du -sh /mnt/cdrom/packages ## 统计指定路径下的所有子目录和文件的大小 df -h 查看磁盘的剩余空间 ~~~ 3 系统服务管理 ~~~ service --status-all # 查看系统所有的后台服务进程 service sshd status # 查看指定的后台服务进程的状态 service sshd stop service sshd start service sshd restart 配置后台服务进程的开机自启 chkconfig httpd on ## 让httpd服务开机自启 chkconfig httpd off ## 让httpd服务开机不要自启 [root@localhost ~]# chkconfig httpd off [root@localhost ~]# chkconfig --list | grep httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off [root@localhost ~]# chkconfig --level 35 httpd on [root@localhost ~]# chkconfig --list | grep httpd httpd 0:off 1:off 2:off 3:on 4:off 5:on 6:off ~~~ 4 系统启动级别管理 vi /etc/inittab ~~~ # Default runlevel. The runlevels used are: # 0 - halt (Do NOT set initdefault to this) # 1 - Single user mode # 2 - Multiuser, without NFS (The same as 3, if you do not have networking) # 3 - Full multiuser mode ## 没有图形界面的全功能的多用户的启动级别 # 4 - unused # 5 - X11 ## 有图形界面的启动级别 # 6 - reboot (Do NOT set initdefault to this) # id:3:initdefault: ## 配置默认启动级别 ## 通常将默认启动级别设置为:3 5 进程管理 top free ps -ef | grep ssh kill -9 2358 ## 将指定进程号的进程杀死 注意:grep搜索关键词的时候会把自己也搜索出来,对比以下两种写法 [root@localhost ~]# ps -ef | grep sixunhuan root 2857 2465 30 02:41 pts/0 00:00:07 sh sixunhuan.sh root 2874 2858 0 02:42 pts/1 00:00:00 grep sixunhuan [root@localhost ~]# ps -ef | grep sixunhuan | grep -v grep root 2857 2465 34 02:41 pts/0 00:00:25 sh sixunhuan.sh [root@localhost ~]# kill -9 2857 ~~~ ## 八、SSH免密登陆配置 1 SSH工作机制 1、相关概念 ~~~ SSH 为 Secure Shell(安全外壳协议) 的缩写。 很多ftp、pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用心的人非常容易就可以截获这些口令和数据。而SSH就是专为远程登录会话和其他网络服务提供安全性的协议。 SSH的具体实现是由客户端和服务端的软件组成的 服务端是一个守护进程(sshd),他在后台运行并响应来自客户端的连接请求。 客户端包含ssh程序以及像scp(远程拷贝)、slogin(远程登陆)、sftp(安全文件传输)等其他的应用程序。 ~~~ 2、认证机制 ~~~ 从客户端来看,SSH提供两种级别的安全验证。  第一种方式(基于口令的安全验证) 只要你知道自己帐号和口令,就可以登录到远程主机。  第二种方式(基于密钥的安全验证) 需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。 ~~~ 3 密钥登陆方式配置 ![](https://box.kancloud.cn/923083d5af307a5ca5819f930e3daa3a_353x168.png) ~~~ 假如 A 要登陆 B 在A上操作: 1/ 首先生成密钥对 ssh-keygen (提示时,直接回车即可) 2/ 再将A自己的公钥拷贝并追加到B的授权列表文件authorized_keys中 ssh-copy-id B ~~~ ## 九、网络管理 1 主机名配置 ~~~ 1/ 查看主机名 hostname 2/ 修改主机名(重启后无效) hostname hadoop 3/ 修改主机名(重启后永久生效) vi /ect/sysconfig/network ~~~ 2 IP地址配置 ~~~ 修改IP地址 1/ 方式一:setup 用root输入setup命令,进入交互式修改界面 2/ 方式二:修改配置文件 (重启后永久生效) vi /etc/sysconfig/network-scripts/ifcfg-eth0 3/ 方式三:ifconfig命令 (重启后无效) ifconfig eth0 192.168.12.22 ~~~ 3 域名映射 ~~~ /etc/hosts文件 用于在通过主机名进行访问时做ip地址解析之用 所以,你想访问一个什么样的主机名,就需要把这个主机名和它对应的ip地址配置在/etc/hosts文件中 [root@angelababy01 ~]# vi /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 192.168.33.11 angelababy01 192.168.33.12 angelababy02 192.168.33.13 angelababy03 ~~~ 4 网络服务管理 ~~~ 1/ 后台服务管理 service network status 查看指定服务的状态 service network stop 停止指定服务 service network start 启动指定服务 service network restart 重启指定服务 service --status-all 查看系统中所有的后台服务 2/ 设置后台服务的自启配置 chkconfig 查看所有服务器自启配置 chkconfig iptables off 关掉指定服务的自动启动 chkconfig iptables on 开启指定服务的自动启动 ~~~ 5 系统中网络进程的端口监听情况 `netstat -nltp` ** 补充:Linux的网卡坏了怎么办 ~~~ 1、先删掉旧网卡 vi /etc/udev/rules.d/70-persistent-net.rules 2、halt linux系统 3、通过vmware卸载原来的网卡,再新增一块网卡 4、70-persistent-net.rules 里面会自动生成那块新网卡的硬件信息 5、编辑网卡的配置文件/etc/sysconfig/network-script/ifcfg-eth0 删掉其中的UUID HWADDR 并且修改IP配置等,如下: DEVICE="eth0" BOOTPROTO=none ONBOOT="yes" TYPE="Ethernet" IPADDR=192.168.33.20 PREFIX=24 GATEWAY=192.168.33.1 DNS1=192.168.33.1 NAME="System eth0" 6、service network restart 重启网络服务即可 ~~~ ## 十、制作基于内网web服务器的yum源 ~~~ 总结: 1、在一台机器上部署一个httpd 的 web服务器,确保httpd运行成功 2、将光盘镜像文件插入虚拟机的光驱 3、将光驱挂载到httpd的html/centos目录中 4、修改yum的repo库配置文件/etc/yum.repos.d/centos-local-web.repo,如下: [c6-local-web] name=CentOS-local-web baseurl=http://angelababy01/centos6 gpgcheck=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 5、接下来,就可以用yum安装库中拥有的任何软件了 yum install -y tomcat6.x86_64 ~~~ 详解版: 1、先安装一个http服务器: 首选httpd ~~~ 先找一下我们要的包在仓库中有没有 yum list | grep httpd yum install -y httpd ~~~ 2、安装完成后,检查httpd的运行状态 `service httpd status` 3、在httpd服务的web目录中放入rpm库 ~~~ 比如,将centos安装光盘中的rpm库放入: mkdir /var/www/html/centos cp -r /mnt/cdrom/* /var/www/html/centos/ 注:上面这种方式比较浪费空间,可以不用拷贝,其实只要创建一个软连接即可 ln -s /mnt/cdrom /var/www/html/centos ~~~ 4、用浏览器访问一下httpd服务,看是否能看到rpm库 `http://mini1/centos` 5、配置yum客户端repo地址文件 ~~~ 将本地http服务器加入repo地址 首先,将内置的源全部disable掉 cd /etc/yum.repos.d/ rename .repo .repo.bak * 然后,新建一个repo源, vi innet.repo [innet] name=innet baseurl=http://192.168.33.20/centos gpgcheck=0 enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 ~ 接下来,检查我们自定义的源是否生效 [root@shizhan01 yum.repos.d]# yum repolist Loaded plugins: fastestmirror, refresh-packagekit, security Loading mirror speeds from cached hostfile innet | 4.0 kB 00:00 innet/primary_db | 4.6 MB 00:00 repo id repo name status innet innet 6,575 repolist: 6,575 再接下来,就可以使用yum像从公网安装软件一样在内网服务器上下载软件进行安装了 yum install -y 你要的软件 ~~~ ## 十一、更换YUM源 1. 备份本地yum源 ` mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak ` 2.获取阿里yum源配置文件 ` wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo ` 3.更新cache ` yum makecache ` 4.查看 ` yum -y update` 5.最后你就可以链接国内镜像了,其实就是那个什么城XXX的 。。。 ~~~ mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum makecache yum -y update ~~~