【Linux基础命令】

命令总结

http://linux.51yip.com 通过互联网的方式获取帮助信息

1. shutdown
#以一种安全的方式关闭和重启系统

	选项:
	
	# -h	关机
		-h now/0    立即关机
		-h 10	    10分钟后关机(分钟级别)
		-h 11:00	定时关机
	# -r	重启
		-r now/0	立即重启
		-r 10		10分钟后重启(分钟级别)
		-r 11:00	定时重启
	# -c	取消当前的关机/重启操作
	
案列:
    [root@centos7 ~]# shutdown   -h  now/0    #立刻关机
	[root@centos7 ~]# shutdown   -h  10		 #10分钟后关机   
    [root@centos7 ~]# shutdown   -h  11:00	  #定时11点关机
    [root@centos7 ~]# shutdown   -r  now/0    #立刻重启
	[root@centos7 ~]# shutdown   -r  10		 #10分钟后重启   
    [root@centos7 ~]# shutdown   -r  11:00	  #定时11点重启 
    [root@centos7 ~]# shutdown 	 -c			 #取消当前的关机操
    
2. poweroff
#关机(关闭计算机操作系统并且切断系统电源)

3. halt
#关机(默认只关闭系统,不关闭电源)

选项:
	 -p	立即关机(系统和电源都关闭)
	        * p指的是poweroff
	        
4. init
#根据切换运行级别进行关机和重启

	选项:
	
	 	 0		#关机
	 	 1		#单用户模式
	 	 2		#多用户,没有NFS
	 	 3		#完全多用户模式(标准的运行级)
	 	 4		#没有用到
	 	 5		#Xll(xwindow)
		 6		#重启  
	 注意:千万不能把initdefault设置为0和6
	
5. reboot
#重启(让系统停止运作,并重新开机)

6. logout
#注销,不能退出非登录式shell

7. exit
#注销、退出

8. clear
#清屏(Ctrl键 + l)

9. man help info
#显示命令帮助信息

	man	 	显示详细的命令帮助信息
	
	help	显示系统内置的命令帮助信息
	
	info	显示命令的说明

#使用选项的方式显示命令的帮助信息

	--help	直接查看系统中的所有内置命令
	
	案列:
		[root@centos7 ~]# shutdown --help       查看shutdown的使用方法
          shutdown [OPTIONS...] [TIME] [WALL...]
		 Shut down the system.
    	 --help      Show this help
 		 -H --halt      Halt the machine
 		 -P --poweroff  Power-off the machine
 		 -r --reboot    Reboot the machine
 		 -h             Equivalent to --poweroff, overridden by --halt
 		 -k             Don't halt/power-off/reboot, just send warnings
   		  --no-wall   Don't send wall message before halt/power-off/reboot
 		 -c             Cancel a pending shutdown


10. ip
#显示ip地址的命令 (centos-7  默认的显示ip地址)

	ip  address    /   ip   a      #显示所有网卡的ip地址
	ip  address show  eth0   /   ip  a  s eth0   #显示指定网卡信息
	
案例:
	[root@centos7 ~]# ip a
	1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
	2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f2:7c:fb brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3d58:13c1:6500:a883/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

	[root@centos7 ~]# ip a s eth0
	2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f2:7c:fb brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3d58:13c1:6500:a883/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever

	

11. ifconfig
#显示ip地址的命令,默认显示所有网卡信息(centos-6默认的显示IP地址)
	
	注意:centos-7系统中需要安装软件包 yum install -y net-tools
     
	ifconfig		    #显示详细的网卡信息
	ifconfig   eth0		#显示指定网卡信息

案例:
	[root@centos7 ~]# ifconfig
	eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::3d58:13c1:6500:a883  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f2:7c:fb  txqueuelen 1000  (Ethernet)
        RX packets 10523  bytes 12079003 (11.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4035  bytes 348885 (340.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
	lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 1000  (Local Loopback)
        RX packets 4  bytes 336 (336.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4  bytes 336 (336.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
	
	[root@centos7 ~]# ifconfig eth0
	eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::3d58:13c1:6500:a883  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f2:7c:fb  txqueuelen 1000  (Ethernet)
        RX packets 10540  bytes 12080453 (11.5 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 4047  bytes 350933 (342.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0


12. hostname
#显示系统主机名 

	选项:

	-i		显示ipv6地址加ipv4地址
	-I		只显示外网ipv4地址
	
案例:
	[root@centos7 ~]# hostname			查看主机名
	centos7
	
	[root@centos7 ~]# hostname -i		显示所有网络地址,包括/etc/hosts 域名解析
	fe80::3d58:13c1:6500:a883%eth0 10.0.0.100
	
	[root@centos7 ~]# hostname -I		显示网络地址,忽略ipv6
	10.0.0.100 
	

13. history
#显示历史命令

	选项:

		-W	   	  将命令记录到文件中(.bash_history)
		-d + id	  删除指定的某一条命令记录(后面加要删除的记录前的数字)   
		-c	      清空历史记录(不会清空文件中的历史记录)
		
案例:
	[root@centos7 ~]# history -w	       保存命令到文件中
	
	[root@centos7 ~]# cat .bash_history     查看保存到文件中的历史命令
	ip a
	ifconfig
	history -w
	
	[root@centos7 ~]# history               查看历史命令记录
    1  ip a
    2  ifconfig
    3  history -w
    4  cat .bash_history 
    5  history 
    
	[root@centos7 ~]# history -d 3          删除第3条历史命令记录
	[root@centos7 ~]# history 
    1  ip a
    2  ifconfig
    3  cat .bash_history 
    4  history 
    5  history -d 3
    6  history 
    
	[root@centos7 ~]# history -c		   清空历史命令记录
	[root@centos7 ~]# history 
    1  history 

	

14. alias
#设置别名(将用户经常使用的复杂命令简单化,创建出属于自己的命令别名)
   
   注意:设置的别名不能与系统内置的命令名冲突

案例:
	[root@centos7 ~]# alias tong='ping baidu.com'     创建别名
	[root@centos7 ~]# alias							显示所有的别名信息
	alias cp='cp -i'
	alias egrep='egrep --color=auto'
	alias fgrep='fgrep --color=auto'
	alias grep='grep --color=auto'
	alias l.='ls -d .* --color=auto'
	alias ll='ls -l --color=auto'
	alias ls='ls --color=auto'
	alias mv='mv -i'
	alias rm='rm -i'
	alias tong='ping baidu.com'
	alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
	[root@centos7 ~]# tong
	PING baidu.com (220.181.38.148) 56(84) bytes of data.
	64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=1 ttl=128 time=32.1 ms
	64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=2 ttl=128 time=33.2 ms
	64 bytes from 220.181.38.148 (220.181.38.148): icmp_seq=3 ttl=128 time=33.8 ms
	^C
	--- baidu.com ping statistics ---
	3 packets transmitted, 3 received, 0% packet loss, time 2003ms
	rtt min/avg/max/mdev = 32.102/33.078/33.882/0.736 ms


15. unalias
#取消别名

案例:
	[root@centos7 ~]# unalias tong  		取消别名
	[root@centos7 ~]# tong
	-bash: tong: command not found


16. ping
#网络的扫描工具
选项:
	-c	指定抓几个包
	-t	在Windows中持续的ping(默认是4次)
	-W	超时时间(秒级)
	-f	极速的ping
	
案例:
[root@centos7 ~]# ping baidu.com		ping外网(百度)
PING baidu.com (39.156.69.79) 56(84) bytes of data.
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=1 ttl=128 time=30.7 ms
64 bytes from 39.156.69.79 (39.156.69.79): icmp_seq=2 ttl=128 time=30.5 ms
^C
--- baidu.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1002ms
rtt min/avg/max/mdev = 30.545/30.624/30.704/0.192 ms

[root@centos7 ~]# ping 10.0.0.100		ping本地IP
PING 10.0.0.100 (10.0.0.100) 56(84) bytes of data.
64 bytes from 10.0.0.100: icmp_seq=1 ttl=64 time=0.049 ms
^C
--- 10.0.0.100 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.049/0.049/0.049/0.000 ms
[root@hwh ~]# ping -c2 10.0.0.80
PING 10.0.0.80 (10.0.0.80) 56(84) bytes of data.
64 bytes from 10.0.0.80: icmp_seq=1 ttl=64 time=0.287 ms
64 bytes from 10.0.0.80: icmp_seq=2 ttl=64 time=0.242 ms

--- 10.0.0.80 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.242/0.264/0.287/0.027 ms
[root@hwh ~]# ping -W3 10.0.0.80
PING 10.0.0.80 (10.0.0.80) 56(84) bytes of data.
64 bytes from 10.0.0.80: icmp_seq=1 ttl=64 time=0.691 ms
64 bytes from 10.0.0.80: icmp_seq=2 ttl=64 time=0.565 ms
64 bytes from 10.0.0.80: icmp_seq=3 ttl=64 time=0.459 ms
^C
--- 10.0.0.80 ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2001ms
rtt min/avg/max/mdev = 0.459/0.571/0.691/0.098 ms

[root@hwh ~]# ping -f 10.0.0.80		以点的形式显示过程
PING 10.0.0.80 (10.0.0.80) 56(84) bytes of data.
.^C
--- 10.0.0.80 ping statistics ---
6604 packets transmitted, 6603 received, 0% packet loss, time 3760ms
rtt min/avg/max/mdev = 0.101/0.515/5.218/0.765 ms, ipg/ewma 0.569/0.445 ms


17. pwd
#显示当前所在的工作目录

[root@centos7 ~]# pwd
/root


18. cd
#切换目录

[root@centos7 /etc/sysconfig]# cd ~		切换到家目录
[root@centos7 ~]# cd				   快速切换到家目录
[root@centos7 ~]# cd .				   保持当前目录不变	
[root@centos7 ~]# cd ..				   切换到当前目录的上一级目录
[root@centos7 /]# cd -				   切换到上一次所在的目录
/root
[root@centos7 ~]#cd /				   切换到根目录


19. tree
#以树状型显示目录结构
安装软件:yum install -y tree

选项:
 	-a		#显示所有文件,包括隐藏文件
	-d		#只显示目录
	-F		#给不同的文件加上标识符,为了快速区分文件类型
	-L		#显示不同层级的目录结构,后面跟数字
	-f		只显示文件的全路径
	-i		不显示树杈,常与f配合使用
 	
案例:
[root@centos7 ~]# tree 			默认针对的是当前目录操作
.
├── oldboy1
├── oldboy2
├── oldboy3
└── shanghai

[root@centos7 ~]# tree -a		显示所有的文件和目录,包括隐藏文件,以点开头的文件就是隐藏文件
.
├── .bash_history
├── .bash_logout
├── .bash_profile
├── .bashrc
├── .cshrc
├── oldboy1
├── oldboy2
├── oldboy3
├── shanghai
└── .tcshrc

[root@centos7 ~]# tree -d /var/log		只显示目录文件
/var/log
├── anaconda
├── audit
├── rhsm
└── tuned

[root@centos7 ~]# tree -F /var/log/		给不同的文件加一个不同的标识符

	*		可执行的文件
	=		socket文件,套接字文件
	/		表示目录
	>		普通文件
	|		管道文件
	@		链接文件

[root@centos7 ~]# tree -L 2 /		显示目录的层级(根目录的2层目录)


[root@centos7 ~]# tree -if /root	不以树杈显示文件的全路径
/root
/root/123.txt
/root/access.log
/root/hwh.txt
/root/qls.txt
/root/secure.log
/root/test -> test.log
/root/test.log

0 directories, 7 files


20. ls
#显示目录的列表信息
* 系统别名:ll = ls -l

选项:
    -l			以长格式进行显示目录列表
	-1			数字1,以行的形式显示目录列表
	-a			显示所有,包括隐藏文件
	-h			以人类可读的形式显示文件大小
	-p			给目录加上根的标识符
	-F			给不同的文件加上不同的标识符
	-t			根据修改时间进行排序,默认最先显示时间最新的
	-S			根据文件大小进行排序
	-r			倒叙排序
	-i			显示inode号


[root@centos7 ~]# ls -l			以长格式的形式显示目录和文件的详细信息
total 0
drwxr-xr-x. 2 root root 6 Nov 29 10:40 123
drwxr-xr-x. 2 root root 6 Nov 29 10:21 oldboy1
drwxr-xr-x. 2 root root 6 Nov 29 10:21 oldboy2

[root@centos7 ~]# ls -1			数字1,以行的形式显示目录和文件的列表
123
oldboy1
oldboy2

[root@centos7 ~]# ls -a			显示所有的目录和文件,包括隐藏的
.    .bash_history  .cshrc   shanghai
..   .bash_logout   oldboy1  .tcshrc
123  .bash_profile  oldboy2
456  .bashrc        oldboy3
[root@centos7 ~]# ls -la		显示所有的目录和文件的详细信息,包括隐藏的

[root@centos7 ~]# ll -h  /var/log/		以人类可读的形式显示目录和文件的大小
total 1.1M
drwxr-xr-x. 2 root root  176 Nov 26 12:29 anaconda
drwx------. 2 root root   23 Nov 26 12:30 audit
-rw-------. 1 root root    0 Nov 29 09:13 boot.log
-rw-------. 1 root root  16K Nov 27 11:10 boot.log-20191127

[root@centos7 ~]# ll -p  /var/log/		只给目录加一个/根标识符
total 1048
drwxr-xr-x. 2 root root    176 Nov 26 12:29 anaconda/
drwx------. 2 root root     23 Nov 26 12:30 audit/
-rw-------. 1 root root      0 Nov 29 09:13 boot.log
-rw-------. 1 root root  16036 Nov 27 11:10 boot.log-20191127

[root@centos7 ~]# ll -F  /var/log/		给不同目录加不同的标识符

	*		可执行的文件
	=		socket文件,套接字文件
	/		表示目录
	>		普通文件
	|		管道文件
	@		链接文件

[root@centos7 ~]# ll -t				   根据修改时间进行排序,默认最先显示最新日期的
total 0
-rw-r--r--. 1 root root 0 Nov 29 10:45 456
drwxr-xr-x. 2 root root 6 Nov 29 10:40 123
drwxr-xr-x. 2 root root 6 Nov 29 10:21 oldboy1
[root@centos7 ~]# ll -rt			-r表示倒序
total 0
drwxr-xr-x. 2 root root 6 Nov 29 10:21 oldboy1
drwxr-xr-x. 2 root root 6 Nov 29 10:40 123
-rw-r--r--. 1 root root 0 Nov 29 10:45 456

[root@centos7 ~]# ll -S			根据目录大小排序
total 0
drwxr-xr-x. 2 root root 6 Nov 29 10:40 123
drwxr-xr-x. 2 root root 6 Nov 29 10:21 oldboy1
drwxr-xr-x. 2 root root 6 Nov 29 10:21 oldboy2

[root@centos7 ~]# ll -d			显示该目录的本身信息
dr-xr-x---. 7 root root 195 Nov 29 10:45 .

[root@centos7 ~]# ll -i			显示inode号码
total 0
    16597 drwxr-xr-x. 2 root root 6 Nov 29 10:40 123
 67157658 -rw-r--r--. 1 root root 0 Nov 29 10:45 456
 

21. mkdir
#创建目录,默认不能创建多级目录

选项:
	-p		递归创建,创建多级目录
	-m		创建目录时并设置权限
	-v		显示创建过程
	
	{}		特殊字符,通配符; 作用:生成序列
	
案例:
[root@centos7 ~]# mkdir /hwh		绝对路径创建
[root@centos7 ~]# mkdir hwh			相对路肩创建
[root@centos7 ~]# mkdir hwh			文件已存在时,再次创建会报错
mkdir: cannot create directory ‘hwh’: File exists
	
[root@centos7 ~]# mkdir -p test/data			递归创建,可以创建多级目录
[root@centos7 ~]# ll
total 0
drwxr-xr-x. 3 root root   18 Nov 29 11:32 test
[root@centos7 ~]# ll test/
total 0
drwxr-xr-x. 2 root root 6 Nov 29 11:33 data

[root@centos7 ~]# mkdir -m 700 oldboy			给新创建的目录赋予指定权限
[root@centos7 ~]# ll
total 0
-rw-r--r--. 1 root root  0 Nov 29 10:45 456
drwxr-xr-x. 2 root root  6 Nov 29 11:30 hwh
drwx------. 2 root root  6 Nov 29 11:35 oldboy

[root@centos7 ~]# mkdir -v hwh1					显示创建目录的过程
mkdir: created directory ‘hwh1’


[root@centos7 ~]# mkdir oldboy{1..3}			批量创建目录oldboy1..3
[root@centos7 ~]# ll
total 0
drwxr-xr-x. 2 root root  6 Nov 29 10:21 oldboy1
drwxr-xr-x. 2 root root  6 Nov 29 10:21 oldboy2
drwxr-xr-x. 2 root root  6 Nov 29 10:21 oldboy3
[root@centos7 ~]# mkdir oldboy{a..d}			创建按字母序列的目录

[root@centos7 ~]# mkdir shanghai{hq,zy,gl}		创建无序的多个目录,使用逗号分隔
[root@centos7 ~]# ll
total 0
drwxr-xr-x. 2 root root  6 Nov 29 11:42 shanghaigl
drwxr-xr-x. 2 root root  6 Nov 29 11:42 shanghaihq
drwxr-xr-x. 2 root root  6 Nov 29 11:42 shanghaizy

[root@centos7 ~]# mkdir -p data/test{1..3}/data{1..3}oldboy{1..3}	创建多级多个目	
[root@centos7 ~]# tree -d data/
30 directories

[root@centos7 ~]# mkdir DATA					Linux系统中,区分大小写
[root@centos7 ~]# ll
total 0
drwxr-xr-x. 5 root root 45 Nov 29 14:34 data
drwxr-xr-x. 2 root root  6 Nov 29 14:37 DATA


22. touch
#创建新文件;已存在的文件或目录,只会修改它时间戳,内容不变

案例:
[root@centos7 ~]# touch test.txt
[root@centos7 ~]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 14:42 test.txt
[root@centos7 ~]# touch test.txt				改变时间戳
[root@centos7 ~]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 14:43 test.txt

[root@centos7 ~]# mkdir data
[root@centos7 ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Nov 29 14:44 data
[root@centos7 ~]# touch data					已经存在的文件或目录,再创建只会改变时间戳
[root@centos7 ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Nov 29 14:45 data

[root@centos7 ~]# touch data{1..3}.txt			批量创建3个文件
[root@centos7 ~]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 14:47 data1.txt
-rw-r--r--. 1 root root 0 Nov 29 14:47 data2.txt
-rw-r--r--. 1 root root 0 Nov 29 14:47 data3.txt

[root@centos7 ~]# touch data{gi,ma,cj}.txt		无序的创建文件,使用逗号分隔
[root@centos7 ~]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 14:48 datacj.txt
-rw-r--r--. 1 root root 0 Nov 29 14:48 datagi.txt
-rw-r--r--. 1 root root 0 Nov 29 14:48 datama.txt


23. cp
#复制,拷贝(默认会改变时间戳)

选项:
	-p		保存文件的属性(时间、权限···)
	-P		复制时保留文件的目录结构
	-r		递归复制(主要复制目录)
	-R		递归复制目录及其子目录内的所有内容(把一个目录的子目录复制到另一个目录下)
	-d		保持软链接文件
	-a=-prd	递归复制,并保持软链接和属性
	-i		文件已存在显示是否覆盖(系统别名cp=cp -i)
	/cp		强制覆盖已存在的文件
	-t		将原目标与目标文件位置变换
	
案例:
[root@centos7 ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Nov 29 14:50 data
-rw-r--r--. 1 root root 0 Nov 29 14:56 old1.txt
-rw-r--r--. 1 root root 0 Nov 29 14:56 old2.txt
-rw-r--r--. 1 root root 0 Nov 29 14:56 old3.txt
-rw-r--r--. 1 root root 0 Nov 29 14:50 test.txt

[root@centos7 ~]# cp test.txt /mnt			将test.txt文件复制到/mnt目录下
[root@centos7 ~]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 29 14:52 test.txt

[root@centos7 ~]# cp -p old1.txt /mnt			old1.txt文件的属性保持不变(时间戳··)
[root@centos7 ~]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 29 14:56 old1.txt
-rw-r--r--. 1 root root 0 Nov 29 14:52 test.txt

[root@centos7 ~]# cp -p old2.txt /mnt/oldboy.txt	复制的同时进行重命名
[root@centos7 ~]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 29 14:56 old1.txt
-rw-r--r--. 1 root root 0 Nov 29 15:04 oldboy.txt
-rw-r--r--. 1 root root 0 Nov 29 14:52 test.txt

[root@centos7 ~]# cp old3.txt test.log			使用相对路径复制(就是复制到同一个目录下)
[root@centos7 ~]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 15:07 old3.txt
-rw-r--r--. 1 root root 0 Nov 29 15:08 test.log

[root@centos7 ~]# cp  data/   /mnt
cp: omitting directory ‘data/’
[root@centos7 ~]# cp  -r  data/  /mnt			复制目录要使用-r  递归复制
[root@centos7 ~]# ll /mnt
total 0
drwxr-xr-x. 2 root root 6 Nov 29 15:12 data
-rw-r--r--. 1 root root 0 Nov 29 14:56 old1.txt
-rw-r--r--. 1 root root 0 Nov 29 15:04 oldboy.txt
-rw-r--r--. 1 root root 0 Nov 29 14:52 test.txt
	
[root@centos7 /opt]# ll /bin
lrwxrwxrwx. 1 root root 7 Nov 26 12:23 /bin -> usr/bin
[root@centos7 /opt]# cp -d /bin ./bin.log			保持软连接
[root@centos7 /opt]# ll
total 8
lrwxrwxrwx. 1 root root   7 Nov 29 15:19 bin.log -> usr/bin
[root@centos7 /opt]# cp -rd /bin /binn				递归复制,并保持软连接
[root@centos7 /opt]# ll -d /binn
lrwxrwxrwx. 1 root root 7 Nov 29 15:21 /binn -> usr/bin
[root@centos7 /opt]# cp  -a  /bin  /binnn			-a   =  -pdr
[root@centos7 /opt]# ll -d /binn
lrwxrwxrwx. 1 root root 7 Nov 29 15:21 /binn -> usr/bin
	
[root@centos7 ~]# cp -i old1.txt /mnt				文件已存在,显示是否覆盖信息
cp: overwrite ‘/mnt/data9.txt’? n

[root@centos7 ~]# \cp  old1.txt /mnt				强制覆盖,不显示信息

[root@centos7 ~]# cp -t ./  /mnt/test.log			将原目标与目标文件位置变换

[root@centos7 ~]# cp -R /tmp/data1  /opt			将目录/data1复制到目录/opt下
[root@centos7 ~]# ll /opt
total 8
drwxr-xr-x. 2 root root  64 Nov 29 17:33 data1


24. mv
#移动(移动目录不需要递归),重命名(移动的同时可以重命名)

选项:
	-i		文件已存在时,显示是否覆盖(系统别名mv=mv -i)
	-f		强制移动并覆盖
	-t		将原目标与目标文件位置变换
	mv + 旧名 + 新名    #重命名
	
案例:
[root@centos7 ~]# mv test.log  /tmp
[root@centos7 ~]# ll /tmp/
-rw-r--r--. 1 root root   0 Nov 29 15:08 test.log

[root@centos7 ~]# mv data/ /tmp			移动目录,不需要递归操作
[root@centos7 ~]# ll /tmp
total 4
drwxr-xr-x. 2 root root   6 Nov 29 14:50 data
-rw-r--r--. 1 root root   0 Nov 29 15:08 test.log

[root@centos7 ~]# mv old1.txt /tmp/test.log		在/tmp下文件已存在时,显示是否覆盖(默认 -i)
mv: overwrite ‘/tmp/test.log’? n

[root@centos7 ~]# mv -f  old1.txt   /tmp/test.log 	#强制复制

[root@centos7 ~]# mv -t  ./  /tmp/test.log    #把源目标跟目标文件的位置进行调换	
	
	

25. rename
#重命名
                  命令 + 原字符串 + 新字符串 + 文件名

[root@centos7 ~]# rename  data10  test  data10.txt	

注意:mv + 旧名 + 新名   #重命名


26. rm
#删除

选项:
	-i		 	显示是否删除(系统别名rm=rm -i)
	-f			强制删除(只能删除文件)
	-rf			递归删除(能删除目录和文件)
	./opt/*		批量删除(删除/opt目录下的使用内容)
	
案例:
[root@centos7 ~]# rm  bin			提示是否删除  -i   系统默认的别名
rm: remove symbolic link ‘bin’? n

[root@centos7 ~]# rm  -f  bin		 强制删除
[root@centos7 ~]# rm -f  DATA/
rm: cannot remove ‘DATA/’: Is a directory
[root@centos7 ~]# rm -rf  DATA/		 递归删除 

[root@centos7 ~]# rm -rf ./*		 删除一个命令下面的所有内容

[root@centos7 ~]# rm -rf /root/*	  删除目录的下所有内容

	
注意:rm -rf /*	#删除根目录下的所有内容,禁止使用


显示文件内容的命令

27. echo
#显示你要输出的结果,所见即所得;创建新文件,写入内容到文件中,打印变量;给输出的结果加上颜色。

-n		不显示换行符
-e		支持特殊的字符
$?		返回0表示正确;返回非0表示失败(针对上一条命令的执行结果)

"单双引号及不加引号的区别"

不加引号————所见即所得,支持通配符,会解析变量,如果定义的值出现空格,不会看做是一个整体

单引号——————强引用,所见即所得

双引号——————弱引用,所见即所得,会解析变量

反引号——————``  会优先执行反引号里面的命令,将命令的输出结果交给外面的命令,``里面必须是命令, === $()


'显示特殊字符'
[root@centos7 ~]# echo  hello world					所见即所得
hello world
[root@centos7 ~]# echo -e  "hello\nworld"			\n	换行符
hello
world
[root@centos7 ~]# echo -e  "hello\tworld"			\t  tab键
hello	world
'打印变量'
[root@centos7 ~]# echo $PS1
\[\e[37;40m\][\[\e[32;40m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\$
[root@centos7 ~]# echo $SUER
root
[root@centos7 ~]# echo '$USER'
$USER
[root@centos7 ~]# echo "$USER"
root
[root@centos7 ~]# echo {1..5}
1 2 3 4 5
'创建新文件,并写入内容到文件中'  			
[root@centos7 ~]# echo  hello world  > test.txt		   >   标准输出重定向,覆盖源文件内容
[root@centos7 ~]# ll
total 4
-rw-r--r--. 1 root root 12 Dec  2 18:24 test.txt

[root@centos7 ~]# cat test.txt 
123
[root@centos7 ~]# echo  456 >>  test.txt 			  >>   标准输出追加重定向,将内容追加到文件的底部
[root@centos7 ~]# ll
total 4
-rw-r--r--. 1 root root 8 Dec  2 18:28 test.txt
[root@centos7 ~]# cat test.txt 
123
456
'关于引号的案例'
[root@centos7 ~]# echo  $USER		#打印变量
root
[root@centos7 ~]# echo  '$USER'		#强引用,所见即所得
$USER
[root@centos7 ~]# echo  "$USER"		#弱引用,所见即所得,会解析变量
root
[root@centos7 ~]# echo {1..5}		#所见即所得,支持通配符,会解析变量
1 2 3 4 5
[root@centos7 ~]# echo '{1..5}'
{1..5}
[root@centos7 ~]# echo "{1..5}"
{1..5}

[root@centos7 ~]# alias name=hostname -I		不加引号,如果定义的值出现空格,不会看做是一个整体
-bash: alias: -I: not found
[root@centos7 ~]# alias name='hostname -I'		''里是一个整体
[root@centos7 ~]# name
10.0.0.100 

[root@centos7 ~]# echo  `hostname`
centos7
[root@centos7 ~]# echo $(hostname)			必须加括号,否则不能识别特殊字符
centos7

# 给输出内容加上颜色
echo -e "\033[30m 黑色字 \033[0m"
echo -e "\033[31m 红色字 \033[0m"
echo -e "\033[32m 绿色字 \033[0m"
echo -e "\033[33m 黄色字 \033[0m"
echo -e "\033[34m 蓝色字 \033[0m"
echo -e "\033[35m 紫色字 \033[0m"
echo -e "\033[36m 天蓝字 \033[0m"
echo -e "\033[37m 白色字 \033[0m"

[root@centos7 ~]# echo -e "    好湿\n江山风景美如画;\n本想吟诗赞天下。\n奈何自己没文化;\n一句卧槽浪好大。"
    好湿
江山风景美如画;
本想吟诗赞天下。
奈何自己没文化;
一句卧槽浪好大。

28. cat
#查看文件内容,合并多个文件;创建新文件及编辑文件,显示行号。
-n		给输出的内容加上行号
-A		给输出的内容每行后面加上 $ 标识符(判断是否有空格)

 
[root@centos7 ~]# cat 123.txt 
aaa
bbb
[root@centos7 ~]# cat -n 123.txt 		前面加上行号
     1	aaa
     2	bbb
[root@centos7 ~]# cat -A 123.txt 		后面加上标识符$,判断字符后面是否存在空格
aaa$
bbb $
# 合并多个文件
[root@centos7 ~]# cat hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@centos7 ~]# cat test.txt
123
[root@centos7 ~]# cat hosts test.txt 
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
123

#编辑文件,若文件不存在,会创建一个新文件
[root@centos7 ~]# cat > 123.txt <<EOF   			> 标准输出重定向,覆盖源文件内容
> oldboy				
> 12345					
> abcde					
> EOF	'以EOF结尾退出'
[root@centos7 ~]# cat 123.txt
oldboy
12345
abcde
[root@centos7 ~]# cat >>123.txt <<eof				 >>   标准输出追加重定向,将内容追加到文件的底部
> 000000
> eof	'以eof结尾退出'
[root@centos7 ~]# cat 123.txt 
oldboy
12345
abcde
000000


28. tac
#倒着显示文件内容,按行显示

[root@centos7 ~]# tac 123.txt
000000
123456
abcde
oldboy


30. more
#分页显示文件内容(文件内容显示完成之后会自动退出)
[root@centos7 ~]# cp  /etc/services   ./	(复制文件操作,不要针对原文件操作)

-n		指定一页显示 n 行
+n		指定从 第n行 开始显示

内部命令:
		b			  #向上翻页
		空格/f		 #向下翻页
		回车键			#向下翻一行
		=			  #显示当前光标所在的行数
		/			  #搜索,不会高亮显示
			n			#向下查找
		q			  #退出
		h			  #帮助信息


31. less
#分页显示文件内容(文件内容显示完成,不会自动退出)

	-i		搜索的时候忽略大小写
	-N		给显示出来的内容加上行号
	
	内部命令:
		b			  #向上分页
		空格/f		 #向下翻页
		回车键			#向下翻一行
		=			  #显示当前页从第几行到第多少行及总行数。
					  #显示总字节大小,共显示多少个字节,及显示内容占总字节的百分比		  
		/			  #搜索,可以高亮显示
			n		#向下查找
			N		#向上查找
		q			  #退出
		

32. head
#显示文件的头部信息,默认显示前10行

	-n		取消默认输出,后面跟数字,指定显示多少行
	
	-c		显示文件的前几个字符(不换行输出命令行)

[root@centos7 ~]# head  services 
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
#
# Network services, Internet style
# IANA services version: last updated 2013-04-10
#
# Note that it is presently the policy of IANA to assign a single well-known
# port number for both TCP and UDP; hence, most entries here have two entries
# even if the protocol doesn't support UDP operations.
# Updated from RFC 1700, ``Assigned Numbers'' (October 1994).  Not all ports
[root@centos7 ~]# head  -n 1 services 		
# /etc/services:
[root@centos7 ~]# head -1 services 			n可以省略不写
# /etc/services:
[root@centos7 ~]# head -2 services 
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $

[root@centos7 ~]# head -c 5 services 			显示文件的前 5个 字符(不换行输出命令行)
# /et[root@centos7 ~]# 


33. tail
#显示文件尾部信息,默认显示最后10行内容

	-n		取消默认输出,指定显示多少行(n后面加数字,或n可省略)
	
	-c		显示文件最后几个字符(换行输出命令行)
	
	-f		实时查看文件内容的更新
	
	-F		实时查看文件内容的更新;当文件不存在时,会一直尝试读取该文件,直到文件存在或者手动退出
	
[root@centos7 ~]# tail  services
3gpp-cbsp       48049/tcp               # 3GPP Cell Broadcast Service Protocol
isnetserv       48128/tcp               # Image Systems Network Services
isnetserv       48128/udp               # Image Systems Network Services
blp5            48129/tcp               # Bloomberg locator
blp5            48129/udp               # Bloomberg locator
com-bardac-dw   48556/tcp               # com-bardac-dw
com-bardac-dw   48556/udp               # com-bardac-dw
iqobject        48619/tcp               # iqobject
iqobject        48619/udp               # iqobject
matahari        49000/tcp               # Matahari Broker
[root@centos7 ~]# tail  -n 1 services 								显示最后1行
matahari        49000/tcp               # Matahari Broker
[root@centos7 ~]# tail  -1   services 
matahari        49000/tcp               # Matahari Broker

|	"管道,将管道前面的命令的输出结果交给管道后面的命令进行处理"
[root@centos7 ~]# cat -n services  | tail -1  						显示行号,并指定显示最后一行
 11176	matahari        49000/tcp               # Matahari Broker
*[root@centos7 ~]# head -5 /etc/passwd |tail -1						显示文件前5行中的最后1行
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin


[root@centos7 ~]# tail -c5  services 		      显示最后5个字符(显示结果后有个换行符,与head -c比较)
oker
[root@centos7 ~]#      

[root@centos7 ~]# tail  -f  test.log 			   实时的查看文件的更新
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
123
456
123456 

[root@centos7 ~]# tail  -20f  /var/log/messages		#指定从最后的20行内容开始显示

[root@centos7 ~]# tail  -F  file.log		        #会实时的查看文件内容的更新,文件不存在时,会一直尝试读取,直到文件存在或者手动退出
tail: cannot open ‘file.log’ for reading: No such file or directory
tail: ‘file.log’ has appeared;  following end of new file
123
^C


34. tailf
#实时查看文件的更新,默认显示最后10行,当文件没有更新时,不会读取磁盘。减少磁盘的io读写

	-n	取消默认输出,显示指定的行数


[root@centos7 ~]# tailf  /var/log/messages			实时查看文件的更新,默认显示最后10行

[root@centos7 ~]# tailf -20   /var/log/messages		显示最后20行


文件查找及命令查找

35. grep (行)

三剑客之一

# 文本过滤(以行的形式显示),给过滤出来的内容加上颜色
选项:
		-v			排除,取反
		-i			忽略大小写(不区分大小写)
		-n			给过滤出来的内容加上行号
		-c			统计过虑出来的行数(grep -c '.*' /etc/passwd 显示/etc/passwd文件一个有多少行)
		-o			只显示匹配的内容
		-w			精确匹配整个单词
		-r			递归过滤
		-R			递归过滤
		-E			支持扩展正则(多个字符串 'A|B')
		-A			显示匹配内容的行及向下多少行 
		-B			显示匹配内容的行及向上多少行
		-C			显示匹配内容的行及向上向下各多少行
# pattern正则表达式主要参数:		
		^ 			以什么开头(如:'^abc' 以abc开头的行)
		$			以什么结尾(如:'abc$' 以abc结尾的行)
		^$			空行
		.			任意一个字符,换行符除外
		.*			显示文件所有内容
		*			匹配文件内容出现0次或0次以上
		adm*		匹配adm加颜色,并显示所有内容
		adm+		显示adm所在的行
		\			取消特殊符号的含义(如:'\.$' 以.结尾的行)
		|			扩展正则,或者
	
    	[ ]			单个字符,如[A]即A符合要求。
	    [ - ]		范围,如[A-Z],即A、B、C一直到Z都符合要求。
		\<			从匹配正则表达式的行开始。
		\>			到匹配正则表达式的行结束。


#统计当前文件夹下文件的个数,包括子文件夹里的
ll -R 文件夹 |grep "^-"|wc -l
#统计文件夹下目录的个数,包括子文件夹里的
ll -R  文件夹 |grep "^d"|wc -l
#统计当前文件夹下文件的个数
ll  文件夹 |grep "^-"|wc -l
#统计当前文件夹下目录的个数
ll  文件夹 |grep "^d"|wc -l

案例:
'/var/log下文件,不包括子文件'
[root@centos7 ~]# ll /var/log | grep '^-' |wc -l
40
'/var/log下所有文件'
[root@centos7 ~]# ll -R /var/log | grep '^-' | wc -l
51
'/var/log下所有目录'
[root@centos7 ~]# ll -R /var/log | grep '^d' | wc -l	
4
[root@centos7 ~]# mkdir -p /var/log/123
[root@centos7 ~]# ll -R /var/log | grep '^d' | wc -l
5



# grep命令使用简单实例:
$ grep ‘test’d*
显示所有以d开头的文件中包含test的行。
$ grep ‘test’aa bb cc
显示在aa,bb,cc文件中匹配test的行。
$ grep‘[a-z]\{5\}’ aa
显示所有包含每个字符串至少有5个连续小写字符的字符串的行。

[root@centos7 ~]# cp  /etc/passwd   ./

案例 1: 
已知文件123.txt内容如下:
test
OLDBOY
online
oldboy
oldboyoldboy

[root@centos7 ~]# grep oldboy 123.txt		滤出包含oldboy字符串
oldboy
oldboyoldboy
[root@centos7 ~]# grep -n 'oldboy' 123.txt    显示该行内容在文件的所在行号
	4:oldboy
	5:oldboyoldboy

[root@centos7 ~]# grep -v 'test' 123.txt 	反选
     OLDBOY
     online
     oldboy
     oldboyoldboy
 [root@centos7 ~]# grep -vn 'test' 123.txt 	过滤出文件中不包含test的行,并加上行号
	2:OLDBOY
	3:online
	4:oldboy
	5:oldboyoldboy

[root@centos7 ~]# grep -i 'oldboy' 123.txt	忽略大小写
OLDBOY
oldboy
oldboyoldboy

[root@centos7 ~]# grep -w 'oldboy' 123.txt		精确匹配(过滤出文件中包含oldboy的单词)		
oldboy

[root@centos7 ~]# grep -c 'online' 123.txt		统计匹配online共有多少行
1
[root@centos7 ~]# grep -o  'root'  passwd 		只显示匹配的内容
root
root
root
root

'***'[root@centos7 ~]# grep -o  'root'  passwd  | grep -c 'root'   统计匹配的root的次数
4

[root@centos7 ~]# mkdir   data
[root@centos7 ~]# mkdir   test
[root@centos7 ~]# echo  'root'  >>data/test.txt
[root@centos7 ~]# echo  'root'  >>test/data.txt
[root@centos7 ~]# ll
total 680
drwxr-xr-x. 2 root root     22 Dec  3 18:04 data
-rw-r--r--. 1 root root   1100 Dec  3 18:01 passwd
drwxr-xr-x. 2 root root     22 Dec  3 18:04 test
[root@centos7 ~]# grep  'root'  ./*
grep: ./data: Is a directory
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
grep: ./test: Is a directory
[root@centos7 ~]# grep  -r  'root'  ./*				#递归过滤  -R 一样
./data/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
./passwd:rootooo
./services:rootd           1094/tcp                # ROOTD
./services:rootd           1094/udp                # ROOTD
./test/data.txt:root

[root@centos7 ~]# grep  'root|adm'  passwd 
[root@centos7 ~]# egrep  'root|adm'  passwd 		    egrep = grep -E
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo
[root@centos7 ~]# grep -E  'root|adm'  passwd 			扩展正则  |  表示或者   -E  支持扩展正则
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
roott
rootooo

[root@centos7 ~]# grep   'adm'  passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@centos7 ~]# grep -A2  'adm'  passwd 				匹配内容的行及向下两行  
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

[root@centos7 ~]# grep -B2  'adm'  passwd 				匹配内容的行及向上两行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@centos7 ~]# grep -C2  'adm'  passwd 				匹配内容的行及向上向下各两行
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

[root@centos7 ~]# grep  '.'   passwd 			匹配换行符以外的任意一个字符
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

[root@centos7 ~]# grep  '\.$'  passwd 			取消特殊字符的含义
roottt.

[root@centos7 ~]# grep  '^$'  passwd 			表示空行,有空格的和tab键的空行不匹配

[root@qlscentos7 ~]# grep  '.*'  passwd			表示所有,包括空行

案例2:
已知:
[root@centos7 ~]# cat test.txt 
server {
	lisTEN 80;
	server_nAme www.oldboy.com;
	root /code/dOcs
	index INDEX.html;
}

[root@centos7 ~]# grep 'www.oldboy.com' test.txt 		过滤www.oldboy.com这段关键字
	server_nAme www.oldboy.com;
	
[root@centos7 ~]# grep -iE 'root|index' test.txt		同时过滤出root和index的行,不区分大小写
	root /code/dOcs
	index INDEX.html;
	
[root@centos7 ~]# grep  'index' test.txt			  过滤index,区分大小写
	index INDEX.html;
	
[root@centos7 ~]# grep -i [o] test.txt				 过滤出带"O"的行,不区分大小写(单个字符使用[])
cat >>test.txt<<EOF
	server_nAme www.oldboy.com;
	root /code/dOcs
	
[root@centos7 ~]# grep '^s' test.txt				过滤出以s开头的行
server {

[root@centos7 ~]# grep -c '.' test.txt				统计该文件的行数(不匹配空行)
7

36. locate
#根据本地的数据库查找文件,数据库每天更新一次
[root@centos7 ~]# yum install -y mlocate

选项:
	-i		忽略大小写
	-r		支持简单的正则使用
	-c		不显示匹配的内容,只显示匹配到的行数
	$        以什么结尾的文件
	^ + 绝对路径      绝对路径查找以什么开头

案例:
[root@centos7 ~]# updatedb				手动更新
[root@centos7 ~]# locate -i hostname	 -i,忽略大小写
/etc/hostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/selinux/targeted/active/modules/100/hostname
/etc/selinux/targeted/active/modules/100/hostname/cil
/etc/selinux/targeted/active/modules/100/hostname/hll
/etc/selinux/targeted/active/modules/100/hostname/lang_ext
/root/HOSTNAME
/usr/bin/hostname

[root@centos7 ~]# locate -r hostname$       以什么结尾的文件
/etc/hostname
/etc/selinux/targeted/active/modules/100/hostname
/usr/bin/hostname
/usr/bin/nmtui-hostname
/usr/lib64/gettext/hostname
[root@centos7 ~]# locate -r ^hostname		错误写法,无结果
[root@centos7 ~]# locate -r ^/usr/share/man/man1/hostname	绝对路径查找(以什么开头)
/usr/share/man/man1/hostname.1.gz
/usr/share/man/man1/hostnamectl.1.gz

[root@centos7 ~]# locate -c pwd            	包含pwd文件名的行数
12




37. whereis
#根据文件类型查找文件(二进制文件,man帮助文件,源代码文件)

选项:
	-b		二进制类型文件
	-m		帮助文件
	-s		源代码文件
	
案例:
[root@centos7 ~]# whereis  hostname			显示所有类型的文件
hostname: /usr/bin/hostname /etc/hostname /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz
[root@centos7 ~]# whereis -b hostname		显示二进制类型文件
hostname: /usr/bin/hostname /etc/hostname
[root@centos7 ~]# whereis -m hostname		帮助文件
hostname: /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz
[root@centos7 ~]# whereis -s hostname		源代码文件
hostname:[root@centos7 ~]#

38. which
#查找命令的绝对路径,根据path环境变量下进行查找

[root@centos7 ~]# which  hostname		查看命令的绝对路径
/usr/bin/hostname
[root@centos7 ~]# which  hostnamectl
/usr/bin/hostnamectl
[root@centos7 ~]# which  cp				查看别名
alias cp='cp -i'
	/usr/bin/cp
	

39. type
#显示不同类型的命令

选项:
	-a		显示所有类型命令的绝对路径
	-p		只显示外部命令的绝对路径,不包含其他内容(针对外部命令)

[root@centos7 ~]# type cd
cd is a shell builtin
[root@centos7 ~]# type ping
ping is /usr/bin/ping

[root@centos7 ~]# type -a cd
cd is a shell builtin
cd is /usr/bin/cd
[root@centos7 ~]# type -a ping
ping is /usr/bin/ping
[root@centos7 ~]# type -p ping
/usr/bin/ping


40. find
#查找文件

选项:
	-name		根据名称查找
	-iname		不区分大小写查找
	-maxdepth	根据指定的层级查找,后面跟数字
	-print		打印(默认的动作,可不写)
	-is			属性(动作,不加参数)
	-type		类型
		p	管道文件
		d	目录
		f	普通文件
		s	套接字文件
		l	符合链接文件
		b	块设备文件
		c	字符设备文件
		D	door

案例:
[root@centos7 ~]# find /  -name "hostname"		根据名称查找
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/usr/bin/hostname
/usr/lib64/gettext/hostname
[root@centos7 ~]# find /  -iname "hostname"		忽略大小写
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/HOSTNAME
/usr/bin/hostname
/usr/lib64/gettext/hostname
[root@centos7 ~]# find /  -iname "hostname*"	 以hostname开头的文件
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/HOSTNAME
/usr/bin/hostname
[root@centos7 ~]# find /  -iname "*hostname"	 以hostname结尾的文件
/proc/sys/kernel/hostname
/etc/hostname
/root/HOSTNAME
/usr/bin/hostname
/usr/bin/nmtui-hostname
/usr/lib64/gettext/hostname
[root@centos7 ~]# find /  -iname "*hostname*"	 内容包含hostname的文件
/proc/sys/kernel/hostname
/etc/hostname
/root/HOSTNAME

[root@centos7 ~]# find /  -iname "hostname" -print	 打印
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/HOSTNAME
/usr/bin/hostname
/usr/lib64/gettext/hostname

[root@centos7 ~]# find /etc -maxdepth 2  -iname "hostname"     在/etc下2级目录查找
/etc/hostname
[root@centos7 ~]# find / -maxdepth 2  -iname "hostname" 	   在/跟目录下2级查找
/etc/hostname
/root/HOSTNAME


文件的上传与下载

41. rz
#上传文件,不支持4G以上的文件

-E		若文件已存在,则上传时修改文件名称(在文件名的后面加上数字0 1 2 3···)

案例:
[root@centos7 ~]# rz			上传本地文件到服务器上
[root@centos7 ~]# ll
total 4440
-rw-r--r--. 1 root root    3973 Dec  3 14:27 day06作业.txt

[root@centos7 ~]# rz -E			若文件已存在,则上传时修改文件名称(在文件名的后面加上数字0 1 2 3···)
[root@centos7 ~]# ll
total 4444
-rw-r--r--. 1 root root    3973 Dec  3 14:27 day06作业.txt
-rw-r--r--. 1 root root    3973 Dec  3 14:27 day06作业.txt.0



42. sz
#下载服务器上的文件到本地

[root@centos7 ~]# sz test.txt


43. curl
#根据url规则进行文件传输,主要是用户访问的网站(传输的时候命名)

选项:
	-o		(小o)将内容写入到指定的文件中
	-s		静默输出(不显示传输过程)

'访问百度主页'
[root@centos7 ~]# curl www.baidu.com

'将文件传输到本地,并改名'
[root@centos7 ~]# curl -o baidu.html www.baidu.com
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--100  2381  100  2381    0     0  23651      0 --:--:-- --:--:-- --:--:-- 23810
[root@centos7 ~]# ll
total 672
-rw-r--r--. 1 root root   2381 Dec  3 12:13 baidu.html

'-s 静默输出'
[root@centos7 ~]# curl -s -o bd.html www.baidu.com		
[root@centos7 ~]# ll
total 676
-rw-r--r--. 1 root root   2381 Dec  3 12:13 baidu.html
-rw-r--r--. 1 root root   2381 Dec  3 12:14 bd.html

'下载nginx压缩包'
[root@centos7 ~]# curl  -o  nginx.tar.gz  http://nginx.org/download/nginx-1.16.1.tar.gz			
[root@centos7 ~]# ll
total 1688
-rw-r--r--. 1 root root    2381 Dec  3 12:13 baidu.html
-rw-r--r--. 1 root root    2381 Dec  3 12:14 bd.html
-rw-r--r--. 1 root root 1032630 Dec  3 12:17 nginx.tar.gz


#查看当前网络出口地址
[root@centos7 ~]# curl cip.cc
IP	: 101.81.161.192
地址	: 中国  上海
运营商	: 电信

数据二	: 上海市 | 电信

数据三	: 中国上海上海 | 电信

URL	: http://www.cip.cc/101.81.161.192


44. wget
#根据url路径进行下载(下载默认文件名)


[root@centos7 ~]# yum install -y wget

选项:
	-O		(大O)指定下载的路径及更改文件名称
	-q		 静默输出
	--limit-rate=20(k/m)		限速下载

'默认文件名下载'
[root@centos7 ~]# wget  http://nginx.org/download/nginx-1.16.1.tar.	

'指定文件名下载'
[root@centos7 ~]# wget  -O  e.html    https://www.cnblogs.com/yoo2767/p/6016300.html

'静默输出'  
[root@centos7 ~]# wget -q  -O  e.html    https://www.cnblogs.com/yoo2767/p/6016300.html

'限速下载'
[root@centos7 ~]# wget --limit-rate=20k/m   http://nginx.org/download/nginx-1.16.1.tar.gz


字符处理命令

45. sort (列)
#(以列的形式)排序,默认分隔符是空白字符
#默认第1个字符进行排序,将重复的行排序在一起


选项:
	-t		指定分隔符
	-k		指定以第几列进行排序,后面紧跟数值,无空格
	-n		以数值大小进行排序,默认从小到大(忽略字母顺序)
	-r		倒序排序
	
	
案例:
#根据默认进行排序。默认以第一列进行排序 
[root@centos7 ~]# sort passwd 
adm:x:3:4:adm:/var/adm:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
halt:x:7:0:halt:/sbin:/sbin/halt

#指定 :为分隔符,以第三列进行排序
[root@centos7 ~]# sort -t ":" -k3  passwd 
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
systemd-network:x:192:192:systemd Network 

#以数值的大小进行排序
[root@centos7 ~]# sort -t ":" -nk3  passwd 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin

#以数值的大小进行 倒序 排序
[root@centos7 ~]# sort -t ":" -rnk3  passwd 
polkitd:x:999:998:User polkitd:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin


[root@qls ~]# cat sort.log 
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
[root@qls ~]# sort  sort.log
abc/1
abd/11
fger/8
fgrf/2
rgrgh/66
[root@qls ~]# sort  -t "/"  -k2  sort.log 		以:为分隔符,指定以第2列进行排序
abc/1										默认以第2列的第1个字符进行排序
abd/11
fgrf/2
rgrgh/66
fger/8
[root@qls ~]# sort  -t "/"  -nk2  sort.log 		以:为分隔符,指定以第2列数值进行排序
abc/1
fgrf/2
fger/8
abd/11
rgrgh/66
[root@qls ~]# sort  -t "/"  -rnk2  sort.log 
rgrgh/66
abd/11
fger/8
fgrf/2
abc/1

[root@qls ~]# cat sort.log 
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
#将重复的行进行排列在一起
[root@qls ~]# sort  sort.log 		 
abc/1
abd/11
abd/11
fger/8
fger/8
fgrf/2
fgrf/2
rgrgh/66


46. uniq(行)
#去重复(必须是相邻的重复的行)

选项:
	-c		统计重复行的次数	
	
	
案例:
#统计重复行的次数
[root@centos7 ~]# sort  sort.log  |  uniq   -c  
      1 abc/1
      2 abd/11
      2 fger/8
      2 fgrf/2
      1 rgrgh/66
      
 #将统计重复行的次数以数值排序     
[root@centos7 ~]# sort  sort.log  |  uniq   -c  | sort -n
      1 abc/1
      1 rgrgh/66
      2 abd/11
      2 fger/8
      2 fgrf/2
 #将统计重复行的次数以数值倒序排序
[root@centos7 ~]# sort  sort.log  |  uniq   -c  | sort -rn
      2 fgrf/2
      2 fger/8
      2 abd/11
      1 rgrgh/66
      1 abc/1
	

47. cut (列)
#取列,截取字段

选项:
	-d		指定分隔符,默认以Tab为分隔符
	-f		取出指定的列,后面紧跟数字#(中间连续空格,则n个空格看做n-1列;开头连续的n个空格,看作n列)

		1,3		多个用逗号(取第1列和第3列)
		1-3		多个连续的用横杠(取第1列到第3列)
		
	-c		截取指定的单个字符#(连续空格,则每个空格看做一个字符)
		1,4		多个字符(取第1个字符和第4个字符)
		1-4		多个连续(取第1个字符到第4个字符)
		
		
案例一:
#以:为分隔符,取第7列
[root@centos7 ~]# cut -d ":" -f7 passwd 
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown

#将重复的行排序在一起
[root@centos7 ~]# cut -d ":" -f7 passwd | sort  
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin

#去除重复的行(必须是在一起的重复行,所以使用sort)
[root@centos7 ~]# cut -d ":" -f7 passwd | sort | uniq
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown

#统计重复行的次数
[root@centos7 ~]# cut -d ":" -f7 passwd | sort | uniq -c
      1 /bin/bash
      1 /bin/sync
      1 /sbin/halt
     14 /sbin/nologin
      1 /sbin/shutdown

#倒序排序重复行的次数
[root@centos7 ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -rn
     14 /sbin/nologin
      1 /sbin/shutdown
      1 /sbin/halt
      1 /bin/sync
      1 /bin/bash

案例二:
[root@centos7 ~]# cat qq.txt 
I am name is student QQ is 1238376584
#取出第3列,第8列(以空格为分隔符)
[root@centos7 ~]# cut -d " " -f3,8 qq.txt 
name 1238376584
#取出第3列到第8列
[root@centos7 ~]# cut -d " " -f3-8 qq.txt 
name is student QQ is 1238376584

#截取第1个字符(默认以空格为分隔符)
[root@centos7 ~]# cut -c 1 qq.txt 
I
#截取第1个字符和第4个字符
[root@centos7 ~]# cut -c 1,4 qq.txt 
Im
#截取第1个字符到第4个字符
[root@centos7 ~]# cut -c 1-4 qq.txt 
I am



48. tr
#替换,删除字符(只能单对单的替换)
#tr单独针对文件操作时,必须使用 < 跟文件名

选项:
	-d	删除字符(所有匹配的字符)

案例一:
[root@centos7 ~]# cat qq.txt 
I am name is student QQ is,1238376584	

#将逗号替换为空格,在取出第3列和第8列
[root@centos7 ~]# tr "," " " < qq.txt | cut -d " " -f3,8
name 1238376584

#tr单独针对文件操作时,必须使用 < 跟文件名
[root@qls ~]# tr  ","  " " < qq.txt 			将逗号替换为空格
I am name is student QQ is 1238376584

[root@centos7 ~]# tr -d "m" < qq.txt 			删除所有m这个字符
I a nae is student QQ is,1238376584

[root@centos7 ~]# tr "a" "9" < qq.txt 			将所有的a替换为9
I 9m n9me is student QQ is,1238376584

[root@centos7 ~]# tr "name" "12345" < qq.txt 	 对应替换
I 23 1234 is stud41t QQ is,1238376584

案例二:
#截取IP地址
[root@centos7 ~]# ip a s eth0		#获得IP地址信息
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f2:7c:fb brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3d58:13c1:6500:a883/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
#取出IP地址所在行
[root@centos7 ~]# ip a s eth0 | head -3 | tail -1
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@centos7 ~]# ip a s eth0 | grep -w 'inet'
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
    
 #将/替换为空格,以空格为分隔符,取出第6列(inet前有4个连续空格,看作4列)
[root@centos7 ~]# ip a s eth0 | grep -w 'inet' | tr "/" " " | cut -d " " -f6
10.0.0.100
[root@centos7 ~]# ip a s eth0 | sed -n '/255/p' | sed 's#/# #g' | cut -d " " -f6
10.0.0.100
[root@centos7 ~]# ip a s eth0 | tr "/" " " | awk -F " " 'NR==3{print $2}'
10.0.0.100


[root@centos7 ~]# ifconfig eth0		获取IP地址
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::3d58:13c1:6500:a883  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f2:7c:fb  txqueuelen 1000  (Ethernet)
        RX packets 2362  bytes 208678 (203.7 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 1447  bytes 173732 (169.6 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
#以空格为分隔符,取出第10列(inet前有8个连续空格,看作8列)
[root@centos7 ~]# ifconfig eth0 | grep -w 'inet' | cut -d " " -f10
10.0.0.100
[root@centos7 ~]# ifconfig eth0 | sed -n '/255/p'  | cut -d " " -f10
10.0.0.100
[root@centos7 ~]# ifconfig eth0 | awk -F " " 'NR==2{print $2}' 
10.0.0.100



49. wc
#统计总行数、总列数、字符的总字节大小及长度

选项:
	-l		统计总行数
	-w		统计总列数,默认以空白字符为分隔符
	-c		统计总字节大小
	-L		统计最长的一行内容的长度


案例一:
[root@centos7 ~]# cat -n hosts 
     1	127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
     2	::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@centos7 ~]# ll hosts 
-rw-r--r--. 1 root root 158 Dec  4 11:27 hosts

#显示所有的信息,总行数,总列数,总字节大小
[root@centos7 ~]# wc hosts
  2  10 158 hosts
  
#显示总行数
[root@centos7 ~]# wc -l hosts
2 hosts
[root@centos7 ~]# grep -c '.*' hosts
[root@centos7 ~]# wc hosts | cut -d " " -f1

#显示总的列数,默认以空白字符为分隔符
[root@centos7 ~]# wc -w hosts
10 hosts

#显示总字节大小
[root@centos7 ~]# wc -c hosts
158 hosts

#统计最长一行的字符数量,长度  
[root@centos7 ~]# wc -L hosts
78 hosts

案例二:
[root@centos7 ~]# echo "hello" | wc -L	 统计字符串的长度
5
[root@centos7 ~]# name=1234567891		定义一个变量
[root@centos7 ~]# echo $name		    打印变量
1234567891
[root@centos7 ~]# echo $name | wc -L	统计变量的长度
10


50. sed (行、列)
#三剑客老二,擅长增、删、改、查(以行的形式)

选项:
	-n	   取消默认输出(默认输出所有内容)
	-r	   支持扩展正则
	-e	   多项编辑
	-i	   真正替换、删除文件内容(不加-i就是筛选)

内部命令:    
		$	最后一行('$p'打印最后一行,'$d'删除最后一行)
		p	打印
		d	删除
		a	追加(后)
		i   插入(前)
		s	替换('#'分隔)
		g	全局
		;	多条命令的分割('1p;3p'打印第1行和第3行)
		,	连续的命令('1,3p'打印第1行到第3行)
		
案例:
'查'
打印
[root@centos7 ~]# sed -n '1p' passwd 				打印单行(第1行)
root:x:0:0:root:/root:/bin/bash
[root@centos7 ~]# sed -n '$p' passwd 				打印最后一行
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@centos7 ~]# sed -n '1,3p' passwd 				打印连续的多行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos7 ~]# sed -n '1p;3p' passwd 	 		打印不连续的两行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin


过滤
[root@centos7 ~]# sed -n '/root/p' passwd 			过滤包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@centos7 ~]# sed -n '/^root/p' passwd 			过滤以root开头的行
root:x:0:0:root:/root:/bin/bash

[root@centos7 ~]# sed -nr '/root|adm/p' passwd 		 过滤包含root或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@centos7 ~]# sed -n '/root/p;/adm/p' passwd 	  过滤包含roo或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin

[root@centos7 ~]# sed -n '/^root/,/adm/p' passwd 	  过滤以root开头的行 到 包含adm的行 
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@centos7 ~]# sed -n '/^root/p;/adm/p' passwd 	  过滤以root开头或者包含adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin


'显示/proc/meminfo文件中以s开头的行(忽略大小写)

[root@qls ~]# grep  -i  '^s'  /proc/meminfo 
SwapCached:            0 kB
SwapTotal:       2097148 kB

[root@qls ~]# sed -rn   '/^S|^s/p'  /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB

[root@qls ~]# sed  -n  '/^[sS]/p'  /proc/meminfo		#[]  匹配中括号中的任意一个字符
SwapCached:            0 kB
SwapTotal:       2097148 kB

[root@qls ~]# sed  -rn  '/^(SU)/p'  /proc/meminfo		#()  表示小括号中的字符是个整体
SUnreclaim:        41480 kB

[root@qls ~]# sed  -rn  '/^(S|s)/p'  /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 k

[root@qls ~]# awk  '/^[sS]/'  /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB

[root@qls ~]# awk  '/^s|^S/'  /proc/meminfo
SwapCached:            0 kB
SwapTotal:       2097148 kB

'后向引用'---截取IP地址
[root@centos7 ~]# ip a s eth0 
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 00:0c:29:f2:7c:fb brd ff:ff:ff:ff:ff:ff
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::3d58:13c1:6500:a883/64 scope link noprefixroute 
       valid_lft forever preferred_lft forever
[root@centos7 ~]# ip a s eth0 | sed -n '3s#.*t ##gp' | sed 's#/.*##g'	(p号只能在最后)
10.0.0.100
[root@centos7 ~]# ip a s eth0 | sed -nr '3s#(.*t )(.*)(/.*)#\2#gp'		\截取第几个括号里内容
10.0.0.100
[root@centos7 ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
        inet6 fe80::3d58:13c1:6500:a883  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:f2:7c:fb  txqueuelen 1000  (Ethernet)
        RX packets 395  bytes 38576 (37.6 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 276  bytes 32738 (31.9 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

[root@centos7 ~]# ifconfig eth0 | sed -n '2p'
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
[root@centos7 ~]# ifconfig eth0 | sed -nr '2s#(.*t )(.*)(  netmask.*)#\2#gp'
10.0.0.100
'后向引用-交换位置,重新排序'
#以:为分隔符,将第1列与第7列位置交换(分为三部分,重新排序)
[root@centos7 ~]# sed 's#(.*)(:x.*:)(.*)#/3/2/1#g' /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin

'多项编辑'
[root@qls ~]# sed -e  's#I.*m ##g' oldboy.txt  -e  's#,.*s##g'  -e  's# #,#g'
qls,1176494252

'删'
[root@centos7 ~]#sed  '1d'  passwd 		 			删除第一行

[root@centos7 ~]#sed  '$d'  passwd			 		删除最后一行

[root@centos7 ~]#sed  '1,20d'  passwd 		 		删除连续的多行

[root@centos7 ~]#sed  '1d;20d'  passwd		 		删除不连续的多行

[root@centos7 ~]#sed  '/root/d'  passwd 	 		删除包含root的行

[root@centos7 ~]#sed -r  '/root|adm/d'  passwd	 	 删除不连续的多行

[root@centos7 ~]# sed  '/root/d;/adm/d'  passwd 	 删除不连续的多行

[root@centos7 ~]# sed  '/^root/,/adm/d'  passwd	 	 删除以root开头的行到包含adm的行

[root@centos7 ~]# sed  '1,$d'  passwd 				删除所有

'增'
[root@centos7 ~]# cat sort.log 
abc/3
sdf/0
ffg/5
sgd/44
hhh/666

[root@centos7 ~]# sed '$aoldboy' sort.log 			在文件的最后一行后面追加oldboy
abc/3
sdf/0
ffg/5
sgd/44
hhh/666
oldboy

[root@centos7 ~]# sed '1ahewenhui' sort.log 		在文件的第一行后面追加hewenhui
abc/3
hewenhui
sdf/0
ffg/5
sgd/44
hhh/666

[root@centos7 ~]# sed '1ihwh' sort.log 				在第一行的前面插入hwh
hwh
abc/3
sdf/0
ffg/5
sgd/44
hhh/666

[root@centos7 ~]# sed '$ihwh' sort.log 				在最后一行前面插入hwh
abc/3
sdf/0
ffg/5
sgd/44
hwh
hhh/666

'替换'
[root@centos7 ~]# cat test.txt 
root
oldgirl
student
admin
root000
12345root
[root@centos7 ~]# sed '$s#root#oldboy#g' test.txt 				替换最后一行中root为oldboy
root
oldgirl
student
admin
root000
12345oldboy
[root@centos7 ~]# sed '/^r/s#root#oldboy#g' test.txt 			替换以r开头的行中root为oldboy
oldboy
oldgirl
student
admin
oldboy000
12345root
[root@centos7 ~]# sed '/t$/s#root#oldboy#g' test.txt 			替换以t结尾的行中root为oldboy
oldboy
oldgirl
student
admin
root000
12345oldboy


删除某行:
#sed  -i  '1'd  filename     		删除filename文件第一行
#sed  -i  '$'d  filename     		删除filename文件最后一行
#sed  -i  '1,2'd  filename   		删除filename文件第一行到第二行
#sed  -i  '5,$'d  filename   		删除filename文件的第五行到最后哦一行
显示某行:
#sed  -n  '1'p  filename       		显示第一行
#sed  -n  '$'p  filename       		显示最后一行
#sed  -n   '3,$'p  filename    		显示第三行到最后一行
#sed  -n  '/name/'p  filename  		显示匹配name字符的行
#sed  -n  '/.*ing/'p  filename 		显示结尾为ing字符的行

 打印/etc/passwd 文件中的第 2-5 行
第一种:
[root@centos7 ~]# cat -n /etc/passwd | sed -n '2,5'p 			显示2-5行
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
第二种:    
[root@centos7 ~]# cat -n /etc/passwd | head -5 | more +2		显示前5行,再从前5行中的第2行开始显示
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
第三种:
[root@centos7 ~]# cat -n /etc/passwd | head -5 | tail -4		显示前5行,再从前5行中显示最后4行
     2	bin:x:1:1:bin:/bin:/sbin/nologin
     3	daemon:x:2:2:daemon:/sbin:/sbin/nologin
     4	adm:x:3:4:adm:/var/adm:/sbin/nologin
     5	lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
     

51. awk(行、列)
#取列,计算,统计,数组,循环,判断

选项:
	-F		指定分隔符(默认以空白字符为分隔符)
	-vOFS	指定输出分隔符
	NR		表示行号
	NF		表示每一行的列数
	$NF		最后一列
	$(NF-3)	倒数第4列
	$0		整行内容
	$n		取出n列
	&&		并且
	||		或者
	!		排除
	,	    连续的命令
	;		多条命令的分割
	
	
案例一:'取行'
[root@centos7 ~]# awk '{print NR,$0}' passwd       显示整行内容,并加上行号
1 root:x:0:0:root:/root:/bin/bash
2 bin:x:1:1:bin:/bin:/sbin/nologin
3 daemon:x:2:2:daemon:/sbin:/sbin/nologin
4 adm:x:3:4:adm:/var/adm:/sbin/nologin
5 lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6 sync:x:5:0:sync:/sbin:/bin/sync
7 shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8 halt:x:7:0:halt:/sbin:/sbin/halt
9 mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10 operator:x:11:0:operator:/root:/sbin/nologin
11 games:x:12:100:games:/usr/games:/sbin/nologin

'根据行号取行'
[root@centos7 ~]# awk 'NR==1' passwd 			    取出第1行
root:x:0:0:root:/root:/bin/bash
[root@centos7 ~]# awk  'NR==1'  passwd 				取出第一行
root:x:0:0:root:/root:/bin/bash
[root@centos7 ~]# awk  'NR==1,NR==3'  passwd 		 取出第一行到第三行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@centos7 ~]# awk  'NR==1;NR==3' passwd 		  取出第一行和第三行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin


[root@centos7 ~]# awk 'NR<2' passwd 				取出小于第两行的内容
root:x:0:0:root:/root:/bin/bash
[root@centos7 ~]# awk 'NR<=2' passwd 				小于等于第2行
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@centos7 ~]# awk 'NR>=10' passwd 				大于等于10行
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
[root@centos7 ~]# awk 'NR>=8 && NR<=10' passwd 		大于等于第8行并且小于等于第10行
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@centos7 ~]# awk 'NR<2 || NR>10' passwd 		小于第2行或者大于第10行
root:x:0:0:root:/root:/bin/bash
games:x:12:100:games:/usr/games:/sbin/nologin


'过滤内容取行'
[root@centos7 ~]# awk '/root/' passwd 				过滤包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@centos7 ~]# awk '/^root/' passwd 				过滤以root开头的行
root:x:0:0:root:/root:/bin/bash
[root@centos7 ~]# awk '/halt$/' passwd 				过滤以halt结尾的行
halt:x:7:0:halt:/sbin:/sbin/halt
[root@centos7 ~]# awk '/root|adm/' passwd 			过滤包含root或者adm的行
root:x:0:0:root:/root:/bin/bash
adm:x:3:4:adm:/var/adm:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
[root@centos7 ~]# awk '/adm/,/sync/' passwd 		 过滤以包含adm的行到包含sync的行
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync

案例二:'取列'
#取列(没有的会空行显示)
[root@centos7 ~]# awk 'BEGIN{FS=":"}{print $7}' passwd
[root@centos7 ~]# awk -F:  '{print $7}' passwd 				以:为分隔符,取第7列
[root@centos7 ~]# awk -F '[:]' '{print $7}' passwd 		
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
[root@centos7 ~]# awk -F '[:]' '{print $NF}' passwd 		以:为分隔符,取第最后一列
/bin/bash													$NF 最后一列
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin


案例三:'支持指定多个分隔符'
[root@centos7 ~]# echo 'oldboy:123 oldboy' >>passwd 
[root@centos7 ~]# awk '{print $2}' passwd  | tail -1
oldboy
[root@centos7 ~]# awk -F: '{print $2}' passwd  | tail -1
123 oldboy
[root@centos7 ~]# awk -F '[: ]' '{print $2}' passwd  | tail -1
123

'交换列的位置'
[root@centos7 ~]# awk -F: '{print $7":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin	#以:为分隔符,将列的位置变换顺序,再在每相邻列间加:
[root@centos7 ~]# sed 's#(.*)(:x.*:)(.*)#/3/2/1#g' /etc/passwd

'获取IP地址'
[root@centos7 ~]# ip a s eth0 | awk 'NR==3'
    inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
*号的区别(加*,前面4空格是一个整体,看做一列;不加*,前面4个空格看做三列)
[root@centos7 ~]# ip a s eth0 | awk 'NR==3'| awk -F '[/ ]*' '{print $2}'
inet 
[root@centos7 ~]# ip a s eth0 | awk 'NR==3'| awk -F '[/ ]' '{print $6}'
10.0.0.100
[root@centos7 ~]# ip a s eth0 | awk 'NR==3'| awk -F '[/ ]*' '{print $3}'
10.0.0.100
默认以空白字符为分隔符,默认把开头的所有空格看做一个整体,看做一列
[root@centos7 ~]# ifconfig eth0 | awk 'NR==2'
        inet 10.0.0.100  netmask 255.255.255.0  broadcast 10.0.0.255
[root@centos7 ~]# ifconfig eth0 | awk 'NR==2'| awk '{print $2}'
10.0.0.100
[root@centos7 ~]# ifconfig eth0 | awk 'NR==2{print $2}'			简写
10.0.0.100


'过滤指定的多列'
[root@centos7 ~]# awk -F: '/^root/{print $NF}' passwd 			取出以root开头的行,并打印出改行的最后一列
/bin/bash
[root@centos7 ~]# awk -F: '/^root/{print $1,$3}' passwd 		打印第1列和第3列
root 0
[root@centos7 ~]# awk -F: '/^root/{print $1,$2,$3}' passwd 		打印第1列到第3列
root x 0

案例四:'排除,取反'
[root@centos7 ~]# cat 123.txt 
test
OLDBOY
online
oldboy
oldboyoldboy
[root@centos7 ~]# awk '!/test/' 123.txt 		不包含test的行
OLDBOY
online
oldboy
oldboyoldboy
[root@centos7 ~]# awk 'NR!=1' 123.txt 			排除第一行
OLDBOY
online
oldboy
oldboyoldboy



52. column
#排序文件的格式

选项:
	-t		以tab键的格式进行对文件内容排序
	
	
案例:
[root@centos7 ~]# awk -F: '{print $1,$NF}' passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
lp /sbin/nologin
sync /bin/sync
shutdown /sbin/shutdown
halt /sbin/halt
mail /sbin/nologin
operator /sbin/nologin
games /sbin/nologin
[root@centos7 ~]# awk -F: '{print $1,$NF}' passwd | column -t		以tab格式排序
root      /bin/bash
bin       /sbin/nologin
daemon    /sbin/nologin
adm       /sbin/nologin
lp        /sbin/nologin
sync      /bin/sync
shutdown  /sbin/shutdown
halt      /sbin/halt
mail      /sbin/nologin
operator  /sbin/nologin
games     /sbin/nologin


53. ll -i
#显示文件的属性

[root@centos7 ~]# ll -i
total 48
67157661 -rw-r--r--. 1 root root   39 Dec  3 17:26 123.txt
67157648 -rw-r--r--. 1 root root 2381 Dec  3 15:49 baidu.html

第一列:	67157661		inode号
第二列:	-rw-r--r--.		文件的类型和权限
第三列:	1			    文件的硬链接数量
第四列:	root			属主
第五列:	root			属组
第六列:	39				文件的大小,字节大小
第七-九:	Dec  3 17:26	 最后修改的时间
第十列:	123.txt			文件名(不属于文件属性)


54. ln
#创建连接文件,默认创建硬链接文件

选项:
	-s	创建软链接
	

案例:
ln + 源文件 + 硬链接文件
#多个文件指向同一个inode号的文件,我们称之互为硬链接,一个有效的入口
总结:
	1.inode号相同,文件名不同;文件的数据块指向同一个磁盘位置
	
	2. 概念:硬链接文件,就相当于改变源文件
	
	3. 创建: ln + 源文件 + 硬链接文件 
	
	4. 创建对象:只能对文件创建(可跨目录,必须写绝对路径)
	
	5. 创建硬链接,可防止误删除
	
	6. 删除硬链接,源文件不会被影响
	
	7. 删除源文件,对硬链接没有影响
	
	8. 只有文件的硬链接数量为0时,这个文件才会被真正的删除


[root@centos7 ~]# cat test.txt 
oldboy
[root@centos7 ~]# ln test.txt test.log
[root@centos7 ~]# echo 12345 >> test.log 
[root@centos7 ~]# cat test.txt 
oldboy
12345
[root@centos7 ~]# rm -f test.txt 
[root@centos7 ~]# cat test.log 
oldboy
12345


ln -s	#创建软链接

软链接概念:相当于windows上面的快捷方式(里面存放源文件的路径,及能够执行的源代码)

创建:#  ln -s  + 源文件名   + 软链接文件名

操作对象:可以对文件目录创建软链接,可以跨区

区别:跟源文件的类型不同,inode号不同

删除:rm -f 删除软链接对源文件没有任何影响
	(删除源文件,软链接任存在,但已经失效,出现红底白字闪烁状)
	
'对文件创建软链接
[root@centos7 ~]# touch test.log
[root@centos7 ~]# ll
total 0
-rw-r--r--. 1 root root 0 Dec  5 14:46 test.log
[root@centos7 ~]# ln -s test.log test			          相对路径创建软链接
[root@centos7 ~]# ll
total 0
lrwxrwxrwx. 1 root root 8 Dec  5 14:47 test -> test.log
-rw-r--r--. 1 root root 0 Dec  5 14:46 test.log
[root@centos7 ~]# ln -s /root/test.log  /root/test.txt		绝对路径创建软链接
[root@centos7 ~]# ll
total 0
lrwxrwxrwx. 1 root root  8 Dec  5 14:47 test -> test.log
-rw-r--r--. 1 root root  0 Dec  5 14:46 test.log
lrwxrwxrwx. 1 root root 14 Dec  5 14:47 test.txt -> /root/test.log
[root@centos7 ~]# cp -a test.txt  /opt/
[root@centos7 ~]# ll /opt
total 0
lrwxrwxrwx. 1 root root 14 Dec  5 14:47 test.txt -> /root/test.log
[root@centos7 ~]# cp -a test  /opt/							test是相对路径创建的,/opt/是绝对路径
[root@centos7 ~]# ll /opt
total 0
lrwxrwxrwx. 1 root root  8 Dec  5 14:47 test -> test.log     #红底白字闪烁——>失效
lrwxrwxrwx. 1 root root 14 Dec  5 14:47 test.txt -> /root/test.log

'对目录创建软链接'
[root@centos7 ~]# mkdir data
[root@centos7 ~]# ll  /root
total 0
drwxr-xr-x. 2 root root 6 Dec  5 14:51 data
[root@centos7 ~]# ln -s /root/data  /opt/data
[root@centos7 ~]# ll  /opt
total 0
lrwxrwxrwx. 1 root root 10 Dec  5 14:51 data -> /root/data


企业应用场景:
			1. 版本的升级或回退
			2. 代码上线
			3. 目录不方便移动

		&&		#前面一个命令执行成功,才会执行后面的命令

		||		#前面一个命令执行失败,才会执行后面的命令

案例:
[root@centos7 ~]# ll		现有版本
total 0
lrwxrwxrwx. 1 root root 10 Dec  5 15:06 nginx -> nginx-1.16
-rw-r--r--. 1 root root  0 Dec  5 15:04 nginx-1.16
-rw-r--r--. 1 root root  0 Dec  5 15:04 nginx-1.18
'版本升级'
[root@centos7 ~]# rm -rf nginx && ln -s nginx-1.18 nginx
[root@centos7 ~]# ll
total 0
lrwxrwxrwx. 1 root root 10 Dec  5 15:08 nginx -> nginx-1.18
-rw-r--r--. 1 root root  0 Dec  5 15:04 nginx-1.16
-rw-r--r--. 1 root root  0 Dec  5 15:04 nginx-1.18
'版本回退'
[root@centos7 ~]# rm -rf nginx && ln -s nginx-1.16 nginx
[root@centos7 ~]# ll
total 0
lrwxrwxrwx. 1 root root 10 Dec  5 15:09 nginx -> nginx-1.16
-rw-r--r--. 1 root root  0 Dec  5 15:04 nginx-1.16
-rw-r--r--. 1 root root  0 Dec  5 15:04 nginx-1.18


查看文件信息

55. file
# 查看一些文件信息

[root@centos7 ~]# file test
test: symbolic link to `test.log'
[root@centos7 ~]# file test.log 
test.log: ASCII text
[root@centos7 ~]# file hwh.txt 
hwh.txt: empty
[root@centos7 ~]# file /etc/hosts
/etc/hosts: ASCII text
[root@centos7 ~]# file /dev/sda
/dev/sda: block special
[root@centos7 ~]# file /dev/zero 
/dev/zero: character special


56. stat
#查看文件的详细信息

-f 参数是显示文件系统信息 , -c是按照规定格式输出。

其中 -c 的可用参数主要有以下几个:

%A:用文件权限代码来表示权限
%a:用数字代码来表示权限
%F:用八进制表示文件权限
%G:文件拥有者的组名 
%g:文件拥有者的属组id(gid) 
%i:inode编号 
%n:文件名 
%s:文件大小 
%U:文件拥有者名称 
%u:文件拥有者的id(uid) 
%x: 取用时间
%y: 修改时间
%z: 属性改动时间

[root@centos7 ~]# stat qls.txt 
  File: ‘qls.txt’
  Size: 342       	Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d	Inode: 67157936    Links: 1
Access: (0644/-rw-r--r--)  Uid: (    0/    root)   Gid: (    0/    root)
Context: unconfined_u:object_r:admin_home_t:s0
Access: 2019-12-05 21:42:17.993208393 +0800			#atime	访问时间
Modify: 2019-12-05 21:42:13.662208365 +0800			#mtime	修改时间
Change: 2019-12-05 21:42:13.663208365 +0800			#ctime	状态改变时间
 Birth: -




57. du -sh
#查看文件大小

[root@centos7 ~]# du -sh file1.txt 
4.0K	file1.txt

58. hash
#查看当前会话窗口的命令缓存表信息

选项:
	-d	删除指定的命令的缓存
	-r	清空hash缓存表
	

[root@centos7 ~]# hash			查看缓存表信息
hits	command
   1	/usr/bin/rm
   4	/usr/bin/vim
   1	/usr/bin/yum
   3	/usr/bin/awk
   2	/usr/bin/cp
   5	/usr/bin/ls
   
[root@centos7 ~]# hash  -d  rm		删除单个命令的缓存
[root@centos7 ~]# hash
hits	command
   4	/usr/bin/vim
   1	/usr/bin/yum
   3	/usr/bin/awk
   2	/usr/bin/cp
   5	/usr/bin/ls

[root@centos7 ~]# hash -r			清空hash缓存表
[root@centos7 ~]# hash
hash: hash table empty

59. vim
选项:
	-r 		恢复之前没有保存的状态
	-o		水平分割显示两个文件
	-O		垂直分割显示两个文件
	Ctrl + ww		#切换分屏
	+n		编辑文件时,打开并快速到达指定的行
	-d		比较两个文件不同之处(会高亮显示)
	
[root@centos7 ~]# vim -r passwd				恢复之前没有保存的状态


60. ps
ps  #查看进程的信息,静态

选项:
	a	显示所有的进程
	u	显示正确的用户或ID信息
	x	显示没有终端的进程信息
	-e	显示所有的进程
	-f	显示更多的信息
组合:
#	aux		
#	-ef	

[root@centos7 ~]# ps aux
USER        PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root          1  0.0  0.3 128004  6504 ?        Ss   08:27   0:02 /usr/lib/systemd/sys
root          2  0.0  0.0      0     0 ?        S    08:27   0:00 [kthreadd]
root          3  0.0  0.0      0     0 ?        S    08:27   0:00 

[root@centos7 ~]# ps -ef
UID         PID   PPID  C STIME TTY          TIME CMD
root          1      0  0 08:58 ?        00:00:02 /usr/lib/syst
root          2      0  0 08:58 ?        00:00:00 [kthreadd]
root          3      2  0 08:58 ?        00:00:03 [ksoftirqd/0]
root          5      2  0 08:58 ?        00:00:00 [kworker/0:0H
root          7      2  0 08:58 ?        00:00:00 [migration/0]

# ps aux每列的含义
USER       #进程运行的用户 
PID 	   #进程的ID
%CPU 	   #进程占用CPU的使用百分比
%MEM       #进程占用内存的使用百分比
VSZ   	   #虚拟内存集,进程占用虚拟内存的使用空间(实际大小)
RSS 	   #物理内存集,进程占用物理内存的使用空间

TTY         #终端
		?		表示没有终端,内核运行的一些程序(系统自带的)
		tty1	表示本地机器终端(本地虚拟机)
		pts/0	表示远程的虚拟终端	0  第一个虚拟终端
		pts/1	1 第二个虚拟终端
		
STAT 	#进程运行的状态
		S	正在休眠状态
		s	父进程,说明下面有子进程
		R	正在运行的状态
		D	无法被终止的休眠状态
		T	被暂停或被追踪的状态
		X	死掉的进程
		Z	僵尸进程
		l	字母l,以线程(进程的另种方式,轻进程)方式运行
		|	管道,多进程的
		<	优先级高的进程
		N	优先级低的进程
		+	前台运行
		
START   #进程启动的时间,以分钟计算
TIME 	#进程使用CPU的时间

COMMAND	 #执行的指令[]		内核态,系统运行的程序
		无[]		用户态,用户运行的程序
		

'案例一:PS命令查看前台进程转换到停止'
第一个窗口:vim打开 test.txt
[root@centos7 ~]# vim test.txt

第二个窗口:S:睡眠状态 +:在前台运行
[root@centos7 ~]# ps aux | grep vim
root       7276  1.1  0.2 149156  4992 pts/0    S+   10:40   0:00 vim test.txt
root       7278  0.0  0.0 112708   976 pts/1    S+   10:41   0:00 grep --color=auto vim
[root@centos7 ~]# ps aux | grep [v]im
root       7276  0.8  0.2 149156  4992 pts/0    S+   10:40   0:00 vim test.txt

第一个窗口:Ctrl + Z
[root@centos7 ~]# vim test.txt

[2]+  Stopped                 vim test.txt

第二个窗口:进程状态变成了T,暂停或被追踪的状态
[root@centos7 ~]# ps aux | grep [v]im
root       7276  0.1  0.2 149156  4992 pts/0    T    10:40   0:00 vim test.txt

'案例二:PS命令查看不可中断状态'
第一个窗口:执行
[root@centos7 ~]#  tar  czf  etc.tar.gz   /etc/  /var/   /usr/  /usr/  

第二个窗口:持续查看tar进程的状态,由S+,R+变为D+
[root@centos7 ~]# ps  aux  |  grep  [t]ar
root       7373 11.5  0.1 124896  2584 pts/0    S+   10:59   0:0etc/ /var/ /usr/ /usr/ /etc
[root@centos7 ~]# ps  aux  |  grep  [t]ar
root       7373 11.5  0.1 124896  2584 pts/0    R+   10:59   0:0etc/ /var/ /usr/ /usr/ /etc
[root@centos7 ~]# ps  aux  |  grep  [t]ar
root       7373 11.6  0.1 124896  2584 pts/0    D+   10:59   0:0etc/ /var/ /usr/ /usr/ /etc



'案例三:PS命令查看进程Ss+状态'
[root@centos7 ~]# ps aux | grep bash		再开启终端, s:包含子进程
root       6963  0.0  0.1 115572  2184 pts/0    Ss+  09:15   0:00 -bash
root       7257  0.0  0.1 115568  2140 pts/1    Ss+  11:09   0:00 -bash
root       7553  0.0  0.1 115572  2112 pts/2    Ss   14:15   0:00 -bash
root       7574  0.0  0.1 115572  2116 pts/3    Ss+  14:15   0:00 -bash


'案例四:僵尸进程'
第一个窗口:使用"vim test.c"编辑代码;代码如下
[root@centos7 ~]# vim test.c
[root@centos7 ~]# cat test.c 
#include <sys/types.h> 
#include <sys/wait.h> 
#include <errno.h> 
#include <unistd.h> 
#include <stdlib.h> 
#include <stdio.h> 
#include <string.h> 


int main(int argc, char *argv[]) 
{ 
pid_t pid; 
pid = fork(); 
if (pid == 0) { 
int iPid = (int)getpid(); 
fprintf(stderr,"I am child,%d\n",iPid); 
sleep(1); 
fprintf(stderr, "Child exits\n"); 
return EXIT_SUCCESS; 
} 
int iPid = (int)getpid(); 
fprintf(stderr,"I am parent,%d\n",iPid); 
fprintf(stderr, "sleep....\n"); 
sleep(600); 
fprintf(stderr, "parent exits\n"); 
return EXIT_SUCCESS; 
}
#编译这段代码,会在当前目录生成一个a.out的文件,使用"./a.out"执行该文件
[root@centos7 ~]# gcc test.c 
[root@centos7 ~]# ll
total 1024160
-rwxr-xr-x. 1 root root       8696 Jan  6 10:53 a.out
-rw-r--r--. 1 root root        547 Jan  6 10:50 test.c
[root@centos7 ~]# ./a.out 
I am parent,7363
sleep....
I am child,7364
Child exits

第二个窗口:新开一个终端,使用ps命令查看该僵尸进程的状态
(只有在第一个窗口Ctrl + c 结束进程,僵尸进程才能结束)
[root@centos7 ~]# ps aux | grep [a.]out
root       7363  0.0  0.0   4212   352 pts/0    S+   10:54   0:00 ./a.out
root       7364  0.0  0.0      0     0 pts/0    Z+   10:54   0:00 [a.out] <defunct>


找文件的不同

61. vimdiff
#多个文件进行比对,可以高亮显示文件不同之处

[root@centos7 ~]# vimdiff java_online1.sh java_online2.sh		不同之处会高亮显示


62. diff
#对比多个文件的不同

[root@centos7 ~]# diff java_online1.sh java_online2.sh   默认的对比方式,不推荐使用
3,5c3,5
< docker image rm java_bmjy:v1
< docker build  -t java_bmjy:v1 /java
< docker run -p 8001:8001 -d  -v /jt/online/java/bmjy:/jt/bmlg/sqllog --name bmjy --restart=always java_bmjy:v1
---
> docker image rm java_bmjy:v2
> docker build  -t java_bmjy:v2 /java
> docker run -p 8001:8001 -d  -v /jt/online/java/bmjy:/jt/bmlg/sqllog --name bmjy --restart=always java_bmjy:v2


63. md5sum
#给指定的文件加上指纹信息

	-c		检查指纹库
	
案例:
[root@centos7 ~]# md5sum passwd					给重要文件设置指纹	
004099ee535e917d82a3b5529b54f3ab  passwd
[root@centos7 ~]# md5sum passwd > finger.txt	 将文件指纹信息保存到一个文件中
[root@centos7 ~]# cat finger.txt 				文件内容不变,指纹信息不变
004099ee535e917d82a3b5529b54f3ab  passwd
[root@centos7 ~]# md5sum -c  finger.txt 		检查文件是否变化,OK表示内容不变
passwd: OK
[root@centos7 ~]# echo 1 >>passwd
[root@centos7 ~]# md5sum -c  finger.txt 		FAILED表示文件内容改变
passwd: FAILED
md5sum: WARNING: 1 computed checksum did NOT match


[root@centos7 ~]# md5sum passwd1 >> finger.txt
[root@centos7 ~]# cat finger.txt 
004099ee535e917d82a3b5529b54f3ab  passwd1
[root@centos7 ~]# md5sum passwd >> finger.txt
[root@centos7 ~]# cat finger.txt 
004099ee535e917d82a3b5529b54f3ab  passwd1
cb512cbb1ffeac1a5e079a14c87d9c7b  passwd
[root@centos7 ~]# echo hwh >>passwd1
[root@centos7 ~]# md5sum -c  finger.txt 		查看多个文件
passwd1: FAILED
passwd: OK
md5sum: WARNING: 1 computed checksum did NOT match
 
	

用户信息与管理

64. id
#显示用户的id及组id信息

[root@centos7 ~]# id							查看当前登录的用户信息
uid=0(root) gid=0(root) groups=0(root) 
[root@centos7 ~]# id hwh						查看指定的用户信息
uid=1000(hwh) gid=1000(hwh) groups=1000(hwh)
[root@centos7 ~]# id user01						 id不允许冲突
uid=1001(user01) gid=1001(user01) groups=1001(user01)




65. useradd
#创建用户,默认创建的是普通用户     adduser同理
[root@centos7 ~]# ll /usr/sbin/adduser 				(软链接)
lrwxrwxrwx. 1 root root 7 Nov 26 12:24 /usr/sbin/adduser -> useradd

选项:

	-u      指定要创建用户的UID,不允许冲突
	-g      指定用户组,写组名或者组的ID,基本组
	-G      指定要创建用户附加组,逗号隔开可添加多个附加组
	-d      指定要创建用户家目录的位置(目录不存在时)
	-s      指定要创建用户的命令解释器
	-c      添加用户的注释信息
	-M      不创建家目录
	-r      创建系统账户,默认无家目录
	
案例:
[root@centos7 ~]# useradd user01		默认创建普通用户
[root@centos7 ~]# id user01				id不允许冲突
uid=1001(user01) gid=1001(user01) groups=1001(user01)
[root@centos7 ~]# grep 'user01' /etc/passwd
user01:x:1001:1001::/home/user01:/bin/bash

'创建user02用户,UID为888,注释信息为:测试用户,指定家目录为/opt/user02'
[root@centos7 ~]# useradd -u888 -c "测试用户" -d /opt/user02 user02
[root@centos7 ~]# id user02
uid=888(user02) gid=1001(user02) groups=1001(user02)
[root@centos7 ~]# grep 'user02' /etc/passwd
user02:x:888:1001:测试用户:/opt/user02:/bin/bash
[root@centos7 ~]# ll /opt
total 0
drwx------. 2 user02 user02 62 Dec 12 14:25 user02

'创建系统用户user03,不创建家目录,指定用户的命令解释器为:/sbin/nologin'
[root@centos7 ~]# useradd -r -s /sbin/nologin user03
[root@centos7 ~]# grep 'user03' /etc/passwd
user03:x:887:887::/home/user03:/sbin/nologin
[root@centos7 ~]# ll /home/			若不指定位置,家目录在/home目录下
total 0

'创建user04普通用户,不创建家目录,指定命令解释器'
[root@centos7 ~]# useradd -M -s /sbin/nologin user04
[root@centos7 ~]# grep 'user04' /etc/passwd
user04:x:1001:1002::/home/user04:/sbin/nologin
[root@centos7 ~]# ll /home/
total 0


66. usermod
#修改用户信息

选项:

	-u       修改用户的Uid
	-g       修改用户基本组的id,Gid
	-a       添加附加组。仅与-G选项一起使用
	-G       修改用户附加组,使用逗号隔开多个附加组, 覆盖原有的附加组
	-aG		追加附加组
	-m       移动家目录到新位置。如果当前主目录不存在,则不会创建新的主目录
	-d       修改用户家目录 (若m与d一起使用,必须是先移动再修改) # -md
	-s       修改用户的命令解释器
	-c       修改用户注释信息
	-l       修改用户的登陆名
	-L       锁定用户
	-U       解锁用户


案例:
'修改用户的登录名'
[root@centos7 ~]# usermod -l oldboy user01
[root@centos7 ~]# id user01			修改后原名称不存在,其他不变
id: user01: no such user
[root@centos7 ~]# id oldboy
uid=1112(oldboy) gid=1112(user01) groups=1112(user01)
[root@centos7 ~]# grep 'oldboy' /etc/passwd
oldboy:x:1112:1112::/home/user01:/bin/bash


'修改user03用户的Uid=1111,注释信息为test,命令解释器为/bin/bash'
[root@centos7 ~]# grep 'user03' /etc/passwd
user03:x:887:887::/home/user03:/sbin/nologin
[root@centos7 ~]# usermod -u1111 -c "test" -s /bin/bash user03
[root@centos7 ~]# grep 'user03' /etc/passwd
user03:x:1111:887:test:/home/user03:/bin/bash

'移动并修改用户user02的家目录位置'
[root@centos7 ~]# grep 'user02' /etc/passwd
user02:x:888:1001:测试用户:/opt/user02:/bin/bash
[root@centos7 ~]# usermod -md /home/user02 user02
[root@centos7 ~]# ll /home/
drwx------. 2 hwh    hwh    83 Nov 30 17:28 hwh
drwx------. 2 user02 user02 62 Dec 12 14:25 user02
[root@centos7 ~]# ll /opt
total 0

'锁定与解锁用户'
[root@centos7 ~]# usermod    -L  test		锁定用户(锁定后拒绝登录)
[root@centos7 ~]# usermod    -U  test		解锁用户


67. userdel
#删除用户(默认不删除家目录信息和邮件)

选项:
	-r       删除用户同时删除它的家目录和邮件信息(慎用)
	
案例:
[root@centos7 ~]# userdel user02  
[root@centos7 ~]# grep 'user02' /etc/passwd
[root@centos7 ~]# id user02
id: user02: no such user
[root@centos7 ~]# ll /home/         默认不删除家目录信息和邮件
total 0
drwx------. 2 user01 user01 62 Dec 12 14:51 user01
drwx------. 2    888   1001 62 Dec 12 14:25 user02


[root@centos7 ~]# userdel -r user01
[root@centos7 ~]# ll /home/			删除跟用户相关的所有信息
total 0
drwx------. 2    888 1001 62 Dec 12 14:25 user02


系统用户登录信息

68. w
#显示当前系统的状态信息及用户的登录信息

选项:
	-h		去掉前两行信息列表

案例:
[root@centos7 ~]# w
 11:15:15 up  2:02,  4 users,  load average: 0.00, 0.01, 0.05
USER     TTY      FROM             LOGIN@   IDLE   JCPU   PCPU WHAT
root     tty1                      09:13    2:01m  0.04s  0.04s -bash
root     pts/0    10.0.0.1         09:13    3.00s  0.34s  0.03s w
root     pts/1    10.0.0.1         11:14   32.00s  0.01s  0.01s -bash
root     pts/2    10.0.0.1         11:15    2.00s  0.01s  0.01s -bash

#去掉前两行信息列表
[root@centos7 ~]# w | more  +3
[root@centos7 ~]# w -h
root     tty1                      09:13    2:03m  0.04s  0.04s -bash
root     pts/0    10.0.0.1         09:13    1.00s  0.31s  0.00s w -h
root     pts/1    10.0.0.1         11:14    2:06   0.01s  0.01s -bash
hwh      pts/2    10.0.0.1         11:15    1:36   0.01s  0.01s -bash

#统计用户登录的次数
[root@centos7 ~]# w -h | cut -d " " -f1 | uniq -c
      3 root
      1 hwh


69. who
[root@centos7 ~]# who
root     tty1         2019-12-13 09:29
root     pts/0        2019-12-13 09:29 (10.0.0.1) 


70. last
#显示当前用户登录信息,及过去登录信息

lastlog #过去的用户登录信息

71. whoami
#显示当前登录系统的用户

[root@centos7 ~]# whoami
root


72. uptime
#显示系统状态及用户的登录终端的数量

[root@centos7 ~]# uptime
 09:39:28 up 10 min,  2 users,  load average: 0.00, 0.06, 0.08


设置用户密码

73. passwd
'交互式设置密码

	-d	清空指定用户密码

[root@centos7 ~]# passwd			修改当前登录的用户密码
Changing password for user root.
New password: 
BAD PASSWORD: The password is a palindrome(密码太简单)
Retype new password: 
passwd: all authentication tokens updated successfully.


[root@centos7 ~]# passwd abc		修改指定用户的密码
Changing password for user abc.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.


[c:\~]$ ssh abc@10.0.0.100			#用户密码登录
Last login: Fri Dec 13 10:46:51 2019 from 10.0.0.1
[abc@centos7 ~]$ 
			


'注意'
1.只有root用户才可以修改其他用户的密码(密码可以随便设置)

2. 普通用户只能设置自己的密码(密码最少要8位,而且是无序的)

[abc@centos7 ~]$ passwd
Changing password for user abc.
Changing password for abc.
(current) UNIX password: 		 #输入旧密码
New password: 					#输入新密码
BAD PASSWORD: The password is a palindrome	
New password:
BAD PASSWORD: The password contains the user name in some form  #密码不能含用户名
BAD PASSWORD: The password fails the dictionary check - it is too simplistic/systematic       #太简单,必须是无序的
New password: 
Retype new password: 		#确认新密码
passwd: all authentication tokens updated successfully.	#修改成功

[abc@centos7 ~]$ passwd root		#不能修改其他用户的密码
passwd: Only root can specify a user name.

'免交互式设置密码'
echo将密码信息显示出来,通过管道交给后面的命令,标准输出 --stdin 用户名
 
[root@centos7 ~]# echo '1' | passwd --stdin root
Changing password for user root.
passwd: all authentication tokens updated successfully.
[root@centos7 ~]# echo '123' | passwd --stdin abc
Changing password for user abc.
passwd: all authentication tokens updated successfully.

[root@centos7 ~]# ll /dev/stdin 
lrwxrwxrwx. 1 root root 15 Dec 13 09:28 /dev/stdin -> /proc/self/fd/0


74. $RANDOM
#产生一个随机数的变量

[root@centos7 ~]# echo $RANDDM | md5sum  | cut -c 1-10 | tee pass.txt | passwd --stdin abc
Changing password for user abc.
passwd: all authentication tokens updated successfully.

[root@centos7 ~]# cat pass.txt 
68b329da98

[root@centos7 ~]# echo $RANDDM | md5sum  | cut -c 1-10 | tee -a  pass.txt | passwd --stdin abc
Changing password for user abc.
passwd: all authentication tokens updated successfully.
[root@centos7 ~]# cat pass.txt 
68b329da98
68b323da92

75. tee
#将内容输出屏幕上方的同时也会将内容保存到指定文件当中

选项:	
	-a	追加
	
案例:如上第75个命令中


76. mkpasswd
#生成一个随机密码,要求是由大小写字母、数字及特殊符号组成的
下载软件包:yum -y install expect

选项:
	-l		指定密码的位数(长度)
	-c		指定小写字母的位数
	-C		指定大写字母的位数
	-d		指定数字的位数
	-s		指定特殊的符号的位数

[root@centos7 ~]# mkpasswd -l 24
czcdeui$rjFqf0dbrK1wvdjm
[root@centos7 ~]# mkpasswd -l 24 -c 6 -C 6 -s 6 -d 6
n3a197Ku(T7*n&[=)ePMGK8t
[root@centos7 ~]# mkpasswd -l 12 -s 1 -d -5 -c 3 -C 4
tHCrurWxo;enlRfcn


[root@centos7 ~]# mkpasswd -l 12 -c 3 -C 3 -s 3 -d 3 | tee pass.txt | passwd --stdin abc
Changing password for user abc.
passwd: all authentication tokens updated successfully.
[root@centos7 ~]# cat pass.txt 
\pK+B2ic0+0K


1.企业中的用户密码   越复杂越好   24位数字字母特殊符号的组合
2.动态的密码  
3.专门一个密码管理工具

77. uname -a
#查看系统的内核版本

[root@centos7 ~]# uname -a
Linux centos7 3.10.0-957.el7.x86_64 #1 SMP Thu Nov 8 23:39:32 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux


78. pstree
#以树行的结构显示进程的深度

安装:yum  install  -y  psmisc


[root@centos7 ~]# pstree
systemd─┬─NetworkManager───2*[{NetworkManager}]
        ├─VGAuthService
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon───{dbus-daemon}
        ├─firewalld───{firewalld}
        ├─login───bash
        ├─master─┬─pickup
        │        └─qmgr
        ├─polkitd───6*[{polkitd}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd───sshd───bash───pstree
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        ├─tuned───4*[{tuned}]
        ─vmtoolsd───{vmtoolsd}


用户组管理

79. groupadd
#创建用户组
选项:
	-g	指定组id
	-r  创建系统组

'创建gid为666,名字为www的用户组'
[root@centos7 ~]# groupadd -g 666 www

'创建一个用户系统组,shanghai03'
[root@centos7 ~]# groupadd -r shanghai03
[root@centos7 ~]# grep 'shanghai03' /etc/group
shanghai03:x:996:

[root@centos7 ~]# groupadd user01			默认创建组
[root@centos7 ~]# grep 'user01' /etc/group
user01:x:1001:
[root@centos7 ~]# groupadd -g1005  user02	指定组id
[root@centos7 ~]# grep 'user02' /etc/group
user02:x:1005:
[root@centos7 ~]# groupadd -r user03		创建系统组
[root@centos7 ~]# grep 'user03' /etc/group

'批量创建10个用户,用户名为oldboy1 oldboy2 oldboy3 .... oldboy10.
[root@qls ~]# echo {1..10} | xargs -n1
1
2
3
4
5
6
7
8
9
10
[root@qls ~]# seq 10
1
2
3
4
5
6
7
8
9
10
[root@qls ~]# seq 10 |  awk  '{print "oldboy"$1}'
oldboy1
oldboy2
oldboy3
oldboy4
oldboy5
oldboy6
oldboy7
oldboy8
oldboy9
oldboy10
[root@qls ~]# seq 10 |  awk  '{print "useradd  oldboy"$1}'
useradd  oldboy1
useradd  oldboy2
useradd  oldboy3
useradd  oldboy4
useradd  oldboy5
useradd  oldboy6
useradd  oldboy7
useradd  oldboy8
useradd  oldboy9
useradd  oldboy10
[root@qls ~]# seq 10 |  awk  '{print "useradd  oldboy"$1}'  | bash 

 seq  10 | sed -r  's#(.*)#userdel  -r  oldboy\1#g' | bash

 seq  10 | sed -r  's#(.*)#userdel  -r  oldboy\1#g' | bash

'创建10个用户,前缀是你的姓,后缀为数字序列,比如qiu1等,并设置随机密码,一条命令实现(能否使用多种方法实现)。
[root@qls ~]# seq 10 | awk  '{print "useradd  oldboy"$1" &&  mkpasswd -l 12 |tee pass"$1".txt |passwd --stdin oldboy"$1}' |bash

[root@qls ~]# seq 10 | sed -r 's#(.*)#useradd  oldboy\1 \&\&  mkpasswd -l 12 |tee pass\1.txt |passwd --stdin oldboy\1#g'
useradd  oldboy1 &&  mkpasswd -l 12 |tee pass1.txt |passwd --stdin oldboy1
useradd  oldboy2 &&  mkpasswd -l 12 |tee pass2.txt |passwd --stdin oldboy2

80. groupmod
#修改组的信息

选项:
	-g		修改组的id
	-n		修改组的名称

'修改用户基本组shanghai02的GID号为1033'
[root@centos7 ~]# groupmod -g 1033 shanghai02
[root@centos7 ~]# grep 'shanghai02' /etc/group
shanghai02:x:1033:

[root@centos7 ~]# groupmod -g 2019 user01
[root@centos7 ~]# grep 'user01' /etc/group
user01:x:2019:
[root@centos7 ~]# groupmod -n user888 user01	修改组的名称

[root@centos7 ~]# grep 'user01' /etc/group		没有user01组
[root@centos7 ~]# grep 'user888' /etc/group
user888:x:2019:

81. groupdel
#删除组,该组如果是某个用户的主组,删除不了

案例:
[root@centos7 ~]# grep 'web' /etc/group
oldboy1:x:1006:web		'用户web'
web:x:1003:
[root@centos7 ~]# groupdel web
groupdel: cannot remove the primary group of user 'web'
[root@centos7 ~]# id web
uid=1003(web) gid=1005(web) groups=1005(web),1006(oldboy1)
[root@centos7 ~]# usermod -g user02 web		给web用户指定一个主组user02,此时web组不在是主组,可以删除
[root@centos7 ~]# id web
uid=1003(web) gid=1005(user02) groups=1005(user02),1006(oldboy1)
[root@centos7 ~]# grep 'web' /etc/group
oldboy1:x:1006:web     
web:x:1003:
[root@centos7 ~]# groupdel web          只能删除没有用户作为主组的组
[root@centos7 ~]# grep 'web' /etc/group
oldboy1:x:1006:web


82. groupmems
#更改和查看组中的成员

选项:
	-g 		更改为指定组(只有root可以使用)
	-a 		指定用户加入组
	-d 		从组中删除该用户
	-p 		从组中清楚所有成员
	-l 		显示组成员列表
	
案例:
#查看有哪些用户属于sales组
[root@centos7 ~]# groupmems -g sales -l
linda lisa

#从sales组中删除lisa用户        groupmems  -g  组  -d  用户
[root@centos7 ~]# groupmems -d lisa -g sales  
[root@centos7 ~]# groupmems -g sales -l
linda 
#添加用户lxj2到组里
[root@centos7 ~]# id lxj2
uid=1002(lxj2) gid=0(root) groups=0(root)
[root@centos7 ~]# groupmems -a lxj2 -g sales
[root@centos7 ~]# id lxj2
uid=1002(lxj2) gid=0(root) groups=0(root),1238(sales)


#添加用户a到组A
[root@centos7 data]#id a
uid=1001(a) gid=1001(a) groups=1001(a)
[root@centos7 data]#groupmems -a a -g A
[root@centos7 data]#id a
uid=1001(a) gid=1001(a) groups=1001(a),1005(A)

#把用户a从A组删除
[root@centos7 data]#id a
uid=1001(a) gid=1001(a) groups=1001(a),1005(A)
[root@centos7 data]#groupmems -d a -g A
[root@centos7 data]#id a
uid=1001(a) gid=1001(a) groups=1001(a)

#显示组A有哪些用户
[root@centos7 data]#groupmems -g A -l  (当前A组无用户)
[root@centos7 data]#groupmems -a a -g A
[root@centos7 data]#groupmems -a a1 -g A
[root@centos7 data]#groupmems -g A -l
a  a1 

#删除A组中所有用户
[root@centos7 data]#groupmems -g A -l
a  a1 
[root@centos7 data]#groupmems -g A -p
[root@centos7 data]#groupmems -g A -l
[root@centos7 data]#


83. gpasswd
#给用户组设置密码

选项:
	-d		从组中移除用户    (gpasswd		-d    用户   组)
	-a		把用户添加到组中
	

84. su 切换用户
#切换用户

选项:
	-	    切换用户的同时,也要切换环境
	-c		以其他用户的身份执行命令(不切换)

案例:
[root@centos7 ~]# su - test -c "pwd"		#以其他用户的身份执行命令 
/home/test

[root@centos7 ~]# su - abc      当前目录在家目录下
Last login: Fri Dec 13 10:29:04 CST 2019 on pts/0
[abc@centos7 ~]$ pwd
/home/abc
[abc@centos7 ~]$ logout
[root@centos7 ~]# su abc		当前目录在/root目录下
[abc@centos7 root]$ pwd
/root

[test@centos7 ~]$ su -		#默认切换到root用户
Password: 

'注意'
1. root用户切换到普通用户时,不需要输入密码

2. 普通用户切换到其他用户时,需要输入密码

3. su    username		切换的时候,加载的环境变量的配置文件不一样 ,只切换的用户的身份,没有切换环境

4. su  -  username		切换用户的身份的同时,也切换了环境/etc/profile 

5. su  -  username -c "命令"   #不切换,但以其他用户的身份执行命令


权限相关命令

85. sudo
#授权给用户
用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。

-l 		显示拥有root权限的命令


[root@centos7 ~]# su - test6
[test6@centos7 ~]$ sudo -l        #查看test6用户的权限

We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:

    #1) Respect the privacy of others.
    	尊重他人隐私
    #2) Think before you type.
    	打字前先想一想
    #3) With great power comes great responsibility.
		有权必有责(权利越大责任越大)
[sudo] password for test6:  	#输入test6用户密码
Matching Defaults entries for test6 on centos7:
User test6 may run the following commands on centos7:
    (ALL) ALL		#权限--所有
    

86. visudo
#编辑文件
vi  /etc/sudoers

	-c   检查语法

案例:
[root@centos7 ~]# visudo		
    100 root    ALL=(ALL)       ALL		'没有%,表示是用户'
    101 
    102 ## Allows members of the 'sys' group to run networking, software,
    103 ## service management apps and more.
    104 # %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSE        S, LOCATE, DRIVERS
    105 
    106 ## Allows people in group wheel to run all commands
    107 %wheel  ALL=(ALL)       ALL		'%表示是组,ALL所有权限'
    
[root@centos7 ~]# visudo -c			检查语法
/etc/sudoers: parsed OK


87. chmod
#设置权限

选项:
	-R  递归设置权限

第一种:'根据字母设置权限'
	
	u	属主的权限
	g	属组的权限
	o	其他人的权限
	a	所有人的权限(a可以省略不写)
	
	+	添加权限
	-	移除权限
	=	覆盖权限
	
	r	读取的权限	4
	w	写入的权限	2
	x	执行的权限	1
	=-	没有权限	 0
    
 案例:
[root@centos7 ~]# ll
total 4
-rw-r--r--. 1 root root 4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod u+x test.txt 		给属主添加可执行权限
[root@centos7 ~]# ll
total 4
-rwxr--r--. 1 root root 4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod g+w test.txt 		给属组添加可写权限
[root@centos7 ~]# ll
total 4
-rwxrw-r--. 1 root root 4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod o+wx test.txt 		给其他用户添加可写,可执行权限
[root@centos7 ~]# ll
total 4
-rwxrw-rwx. 1 root root 4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod o-x test.txt 		给其他用户移除可执行权限
[root@centos7 ~]# ll
total 4
-rwxrw-rw-. 1 root root 4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod a=r test.txt 	  给所有用户设置可读权限,覆盖原来权限
[root@centos7 ~]# ll
total 4
-r--r--r--. 1 root root 4 Dec 17 10:27 test.txt

[root@centos7 ~]# chmod a+x test.txt 	 给所有用户添加可执行权限
[root@centos7 ~]# ll
total 4
-rwxr-xr-x. 1 root root 4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod -x test.txt 	 默认给所有移除可执行权限
[root@centos7 ~]# ll
total 4
-rw-r--r--. 1 root root 4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod u=rwx test.txt 	 给属主添加可执行、可写、可执行权限
[root@centos7 ~]# ll
total 4
-rwxr--r--. 1 root root 4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod g=x test.txt 	只给属组可写权限
[root@centos7 ~]# ll
total 4
-rwx--xr--. 1 root root 4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod o=- test.txt 	移除其他用户的所有权限
[root@centos7 ~]# ll
total 4
-rwx--x---. 1 root root 4 Dec 17 10:27 test.txt

第二种:'根据数字设置权限'
[root@centos7 ~]# ll
-rwx--x---. 1 root root  4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod 644 test.txt  属主:可读、可写;属组:可读;其他:可读
[root@centos7 ~]# ll
-rw-r--r--. 1 root root  4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod 000 test.txt   移除所有权限
[root@centos7 ~]# ll
----------. 1 root root  4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod 777 test.txt 
[root@centos7 ~]# ll
-rwxrwxrwx. 1 root root  4 Dec 17 10:27 test.txt
[root@centos7 ~]# chmod 700 test.txt 
-rwx------. 1 root root  4 Dec 17 10:27 test.txt

第三种:'递归设置权限'
[root@centos7 ~]# mkdir hwh
[root@centos7 ~]# touch hwh/{1..3}.txt
[root@centos7 ~]# ll hwh
total 0
-rw-r--r--. 1 root root 0 Dec 17 10:41 1.txt
-rw-r--r--. 1 root root 0 Dec 17 10:41 2.txt
-rw-r--r--. 1 root root 0 Dec 17 10:41 3.txt
[root@centos7 ~]# ll -d hwh
drwxr-xr-x. 2 root root 45 Dec 17 10:41 hwh
[root@centos7 ~]# chmod -R 777 hwh   递归设置,给目录及目录下的文件设置权限
[root@centos7 ~]# ll -d hwh
drwxrwxrwx. 2 root root 45 Dec 17 10:41 hwh
[root@centos7 ~]# ll hwh
total 0
-rwxrwxrwx. 1 root root 0 Dec 17 10:41 1.txt
-rwxrwxrwx. 1 root root 0 Dec 17 10:41 2.txt
-rwxrwxrwx. 1 root root 0 Dec 17 10:41 3.txt



'取一个目录下的文件权限,并用数字表示
[root@centos7 /opt]# ll data
total 0
-rw-rw-r--. 1 user01 user01 0 Dec 17 15:31 123.txt
-rw-r--r--. 1 user01 user01 0 Dec 17 15:04 data3.txt
[root@centos7 /opt]# stat -c %a data/*
664
644
[root@centos7 /opt]# ll data |awk 'NR>1{print $1}' | tr "rwx-" "4210" 
0420420400.
0420400400.
[root@centos7 /opt]# ll data |awk 'NR>1{print $1}' | tr "rwx-" "4210" | awk -F "" '{print $2+$3+$4$5+$6+$7$8+$9+$10}'
664
644



88. chowm
#设置属主属组

	-R	递归设置

'注意'
1. 只有root权限才可以任意修改属主属组
2. 普通用户只能修改自己的,普通用户不能使用这个命令

案例:
[root@centos7 /opt]# ll
total 0
-rw-r--r--  1 root root  0 Dec 18 09:42 123.txt
drwxr-x-wx. 2 root root 38 Dec 17 15:32 data
drwxr-xr-x. 2 root root  6 Dec 17 16:15 test
[root@centos7 /opt]# id hwh
uid=1000(hwh) gid=1000(hwh) groups=1000(hwh)
[root@centos7 /opt]# chown hwh.hwh 123.txt 			属主.属组
[root@centos7 /opt]# ll
total 0
-rw-r--r--  1 hwh  hwh   0 Dec 18 09:42 123.txt
drwxr-x-wx. 2 root root 38 Dec 17 15:32 data
drwxr-xr-x. 2 root root  6 Dec 17 16:15 test
[root@centos7 /opt]# id user01
uid=1009(user01) gid=1009(user01) groups=1009(user01)
[root@centos7 /opt]# chown user01 test				属主
[root@centos7 /opt]# ll
total 0
-rw-r--r--  1 hwh    hwh   0 Dec 18 09:42 123.txt
drwxr-x-wx. 2 root   root 38 Dec 17 15:32 data
drwxr-xr-x. 2 user01 root  6 Dec 17 16:15 test
[root@centos7 /opt]# chown .user01 test				.属组
[root@centos7 /opt]# ll
total 0
-rw-r--r--  1 hwh    hwh     0 Dec 18 09:42 123.txt
drwxr-x-wx. 2 root   root   38 Dec 17 15:32 data
drwxr-xr-x. 2 user01 user01  6 Dec 17 16:15 test
[root@centos7 /opt]# chown root:root test
[root@centos7 /opt]# ll
total 0
-rw-r--r--  1 hwh  hwh   0 Dec 18 09:42 123.txt
drwxr-x-wx. 2 root root 38 Dec 17 15:32 data
drwxr-xr-x. 2 root root  6 Dec 17 16:15 test
[root@centos7 /opt]# chown -R user01.user01 data		递归设置
[root@centos7 /opt]# ll
total 0
-rw-r--r--  1 hwh    hwh     0 Dec 18 09:42 123.txt
drwxr-x-wx. 2 user01 user01 38 Dec 17 15:32 data
drwxr-xr-x. 2 root   root    6 Dec 17 16:15 test
[root@centos7 /opt]# ll data		查看目录下文件
total 0
-rw-rw-r--. 1 user01 user01 0 Dec 17 15:31 123.txt
-rw-r--r--. 1 user01 user01 0 Dec 17 15:04 data3.txt



89. chgrp
#设置属组

[root@centos7 /opt]# chgrp user01 123.txt 				chgrp只能设置属组
[root@centos7 /opt]# ll
total 0
-rw-r--r--  1 root    user01  0 Dec 18 09:42 123.txt


90. umask
#权限控制命令

	root用户默认 umash=022
	普通用户默认 umask=002
	

'umask计算'
1. root用户系统默认umask的值是022,通过文件的最大权限666和目录的最大权限777减去umask的值。得到的结果就是新创建文件或目录的权限。
对于文件的默认权限umask如果有奇数位,奇数位在减完后还要加1。

#临时修改,重新登录系统之后会失效
[root@centos7 ~]# umask
0022
[root@centos7 ~]# umask 033
[root@centos7 ~]# umask
0033
[root@centos7 ~]# mkdir 1
[root@centos7 ~]# touch 2.txt
[root@centos7 ~]# ll
total 0
drwxr--r-- 2 root root 6 Dec 18 10:05 1			#777-033=744
-rw-r--r-- 1 root root 0 Dec 18 09:59 123.log
-rw-r--r-- 1 root root 0 Dec 18 10:05 2.txt		#666-033=633,在奇数位加1,所以是644
drwxr-xr-x 2 root root 6 Dec 18 09:59 test

2. 普通用户系统默认umask的值是002
[hwh@centos7 ~]$ mkdir  1
[hwh@centos7 ~]$ touch 1.txt
[hwh@centos7 ~]$ ll
total 0
drwxrwxr-x 2 hwh hwh 6 Dec 18 14:08 1		#777-002=775
-rw-rw-r-- 1 hwh hwh 0 Dec 18 14:08 1.txt	#666-002=664
[hwh@centos7 ~]$ umask
0002


#永久修改(不可以随便改)
[root@centos7 ~]# vim /etc/profile
if [ $UID -gt 199 ] && [ "`/usr/bin/id -gn`" = "`/usr/bin/id -un`" ]; then
    umask 002								
else
    umask 022

91. lsattr
#显示文件的特殊(隐藏)属性

[root@centos7 ~]# lsattr test.txt 
-----a---------- test.txt


92. chattr
#设置特殊属性

a	只能追加,不能删除、移动、修改;(一般给重要的文件和日志设置)
i	什么都不能操作:不能删除、移动、修改,追加、重定向;(一般给重要的配置文件设置)

'a'
#添加a的属性
[root@centos7 ~]# ll
-rwxr-xr-x 1 root root 9 Dec 18 15:23 test.txt
[root@centos7 ~]# chattr +a test.txt 
[root@centos7 ~]# lsattr test.txt 
-----a---------- test.txt

#测试
[root@centos7 ~]# cat test.txt 			可查看
hostname
[root@centos7 ~]# ./test.txt 			可执行
centos7
[root@centos7 ~]# cp test.txt /tmp/		 可复制
[root@centos7 ~]# rm -f test.txt 		不可删除
rm: cannot remove ‘test.txt’: Operation not permitted
[root@centos7 ~]# mv test.txt /opt/		 不可移动
mv: cannot move ‘test.txt’ to ‘/opt/test.txt’: Operation not permitted
[root@centos7 ~]# vim test.txt 			不可编辑修改
[root@centos7 ~]# echo pwd > test.txt	  不可重定向
-bash: test.txt: Operation not permitted
[root@centos7 ~]# echo pwd >> test.txt		可追加
[root@centos7 ~]# cat test.txt
hostname
pwd

'i'
#添加i的属性
[root@centos7 ~]# chattr +i test.txt
[root@centos7 ~]# lsattr test.txt
----i----------- test.txt

#测试
[root@centos7 ~]# cat test.txt		    可查看
hostname
pwd
[root@centos7 ~]# ./test.txt		     可执行
centos7
/root
[root@centos7 ~]# cp test.txt /opt/		  可复制
[root@centos7 ~]# mv test.txt /mnt/		  不可移动
mv: overwrite ‘/mnt/test.txt’? y
mv: cannot move ‘test.txt’ to ‘/mnt/test.txt’: Operation not permitted
[root@centos7 ~]# rm -f test.txt		  不能删除
rm: cannot remove ‘test.txt’: Operation not permitted
[root@centos7 ~]# echo 123 > test.txt	   不能重定向
-bash: test.txt: Permission denied
[root@centos7 ~]# echo 123 >> test.txt	   不能追加
-bash: test.txt: Permission denied



93. dd 生成文件
#生成一个大文件
	if  	从哪里读取数据
	of		输出(保存)到哪里
	bs  	一次输出多少
	count	输出的次数

[root@centos7 ~]# dd if=/dev/zero of=/root/test.log bs=10M count=10
10+0 records in
10+0 records out
104857600 bytes (105 MB) copied, 1.54859 s, 67.7 MB/s
[root@centos7 ~]# ll -h test.log 
-rw-r--r-- 1 root root 100M Dec 19 11:26 test.log
[root@centos7 ~]# dd  </dev/zero  >/root/test.txt  bs=10M count=10
10+0 records in
10+0 records out
104857600 bytes (105 MB) copied, 1.50054 s, 69.9 MB/s
[root@centos7 ~]# ll -h test.txt 
-rw-r--r-- 1 root root 100M Dec 19 15:13 test.txt


94. xargs传递参数
是给其他命令传递参数的一个过滤器,也是组合多个命令的一个工具。它擅长将标准输入数据转换成命令行参数,xargs能够处理管道或者stdin并将其转换成特定命令的命令参数。xargs也可以将单行或多行文本输入转换为其他格式,例如多行变单行,单行变多行。xargs的默认命令是echo,空格是默认定界符。这意味着通过管道传递给xargs的输入将会包含换行和空白,不过通过xargs的处理,换行和空白将被空格取代。#xargs是构建单行命令的重要组件之一。

选项:
	-n   #多行输出
	-d   #可以自定义一个定界符
	-I   #指定一个替换字符串{}
	
案例:
#多行输入单行输出:
cat test.txt | xargs
a b c d e f g h i j k l m n o p q r s t u v w x y z

#多行输出:
cat test.txt | xargs -n3
a b c
d e f
g h i
j k l
m n o
p q r
s t u
v w x
y z
#自定义一个定界符:
echo "nameXnameXnameXname" | xargs -dX
name name name name
#复制所有图片文件到 /data/images 目录下:
ls *.jpg | xargs -n1 -I cp {} /data/images
#读取stdin,将格式化后的参数传递给命令
假设一个命令为 sk.sh 和一个保存参数的文件arg.txt:
#!/bin/bash
#sk.sh命令内容,打印出所有参数。
echo $*
arg.txt文件内容:
cat arg.txt
aaa
bbb
ccc
xargs的一个选项-I,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次:
cat arg.txt | xargs -I {} ./sk.sh -p {} -l
-p aaa -l
-p bbb -l
-p ccc -l
#xargs -0将\0作为定界符。
统计一个源代码目录中所有php文件的行数:
find . -type f -name "*.php" -print0 | xargs -0 wc -l
#查找所有的jpg 文件,并且压缩它们:
find . -type f -name "*.jpg" -print | xargs tar -czvf images.tar.gz

打包压缩相关命令

95. Zip
使用zip命令可以对文件进行压缩打包,解压则需要使用unzip命令
#默认情况下,没有zip和unzip工具,需要进行安装

yum install zip unzip -y

选项:
#zip命令的选项:
	-q     不显示指令执行过程;
	-r     递归处理,将指定目录下的所有文件和子目录一并处理;

#unzip命令的选项
	-l      显示压缩文件内所包含的文件;
	-q      执行时不显示任何信息;
	-d 	    指定文件解压缩后所要存储的目录;


案例:
[root@centos7 ~]# zip services.zip services 	压缩(默认压缩到当前目录)
  adding: services (deflated 80%)
[root@centos7 ~]# ll
total 792
-rw-r--r-- 1 root root 670293 Dec 24 10:43 services
-rw-r--r-- 1 root root 136227 Dec 24 10:45 services.zip
[root@centos7 ~]# zcat services.zip 		查看压缩后的文件
[root@centos7 ~]# unzip services.zip 		解压(默认解压到当前目录里)
Archive:  services.zip
replace services? [y]es, [n]o, [A]ll, [N]one, [r]ename: r
new name: service#覆盖    取消                   重命名
  inflating: service                  
[root@centos7 ~]# ll
total 1448
-rw-r--r-- 1 root root 670293 Dec 24 10:43 services
-rw-r--r-- 1 root root 136227 Dec 24 10:45 services.zip
-rw-r--r-- 1 root root 670293 Dec 24 10:43 service

[root@centos7 ~]# zip -r etc.zip /etc		递归压缩,打包目录及文件
  adding: etc/ (stored 0%)
  adding: etc/fstab (deflated 42%)
  adding: etc/crypttab (stored 0%)
  adding: etc/mtab
	zip warning:  file size changed while zipping /etc/mtab
 (stored 0%)
  adding: etc/resolv.conf (deflated 2%)

[root@centos7 ~]# zip -rq etc.zip /etc	不显示压缩过程


[root@centos7 ~]# unzip -q etc.zip		不显示解压过程

[root@centos7 ~]# unzip -l etc.zip		显示压缩文件内所包含的文件
Archive:  etc.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
        0  12-24-2019 08:48   etc/
      501  11-26-2019 12:22   etc/fstab
        0  11-26-2019 12:22   etc/crypttab
[root@centos7 ~]# unzip -q etc.zip	-d /opt/	解压到指定的目录中


96. gzip
#压缩文件,不能压缩目录 (会删除源文件,不需要指定压缩包名称)
 yum install gzip -y

选项:
	-d		解压
	-r		压缩目录下的所有文件
	-rd		解压目录下的所有压缩文件
		
	zcat	#查看gzip格式的压缩文件

案例:
[root@centos7 ~]# ll
total 668
drwxr-xr-x. 75 root root   8192 Dec 24 08:48 etc
-rw-r--r--   1 root root 670293 Dec 24 10:43 services
[root@centos7 ~]# gzip services 会删除源文件
[root@centos7 ~]# ll
total 148
drwxr-xr-x. 75 root root   8192 Dec 24 08:48 etc
-rw-r--r--   1 root root 136088 Dec 24 10:43 services.gz
[root@centos7 ~]# zcat services.gz  查看压缩后的文件

[root@centos7 ~]# gzip  -d  services.gz	解压


[root@centos7 ~]# gzip -r etc	   只能打包压缩目录里的所有文件
[root@centos7 ~]# ll
total 148
drwxr-xr-x. 75 root root   8192 Dec 24 11:06 etc
-rw-r--r--   1 root root 136088 Dec 24 10:43 services.gz
[root@centos7 ~]# ll etc
total 504
-rw-r--r--   1 root root     42 Nov 26 12:29 adjtime.gz
-rw-------   1 root root    353 Apr 11  2018 anacrontab.gz
-rw-r--r--   1 root root     87 Oct 30  2018 asound.conf.gz
drwxr-x---.  3 root root     46 Dec 24 11:06 audisp
drwxr-x---.  3 root root     92 Dec 24 11:06 audit

[root@centos7 ~]# gzip -dr etc		解压整个目录的压缩文件
gzip: etc/mtab: Too many levels of symbolic links
gzip: etc/alternatives/libnssckbi.so.x86_64: Too many levels of symbolic links


97. bzip2
#会删除源文件,默认不支持压缩目录
yum install bzip2 -y

选项:
	-d	解压
	
案例:
[root@centos7 ~]# bzip2 services 压缩(会删除源文件)
[root@centos7 ~]# ll
total 136
drwxr-xr-x. 75 root root   8192 Dec 24 11:09 etc
-rw-r--r--   1 root root 123932 Dec 24 10:43 services.bz2
[root@centos7 ~]# zcat services.bz2	查看

[root@centos7 ~]# bzip2 -d services.bz2 解压
[root@centos7 ~]# ll
total 668
drwxr-xr-x. 75 root root   8192 Dec 24 11:09 etc
-rw-r--r--   1 root root 670293 Dec 24 10:43 services




98. tar
#选项
   c            创建压缩包
   z            使用gzip压缩归档后的文件(.tar.gz)
   j            使用bzip2压缩归档后的文件(.tar.bz2)
   J            使用xz压缩归档后的文件(.tar.xz)
   v            显示创建压缩包和解压的过程
   f            指定压缩包的名称(f一定要放在这几个参数的最后)
   t            显示压缩包内容列表
   x            解压
   X            排除多个文件(写入需要排除的文件名称)
   P            使用绝对路径打包
   h            打包软连接的真实文件数据
   -C           解压到指定的目录位置
   --exclude=   排除不需要打包的文件
   --exclude-from=		指定排除的列表文件

#常用打包与压缩组合
  czf           打包tar.gz格式
  cjf           打包tar.bz2格式
  cJf           打包tar.xz格式
  xf            自动选择解压格式(覆盖源文件)
  tf            查看压缩包内容列表


案例:
'打包的格式'
[root@centos7 ~]# tar czf etc.tar.gz etc	打包压缩etc目录为.tar.gz格式
[root@centos7 ~]# ll
total 10588
drwxr-xr-x. 75 root root     8192 Dec 24 11:09 etc
-rw-r--r--   1 root root 10154057 Dec 24 11:43 etc.tar.gz

[root@centos7 ~]# tar  cjf  service.tar.bz2  services	压缩.tar.bz2格式
[root@centos7 ~]# ll
total 916
-rw-r--r--. 1 root root 670293 Dec 24 19:35 services
-rw-r--r--. 1 root root 123925 Dec 24 19:36 service.tar.bz2

[root@centos7 ~]# tar  cJf  service.tar.xz  services	压缩.tar.xz格式
[root@centos7 ~]# ll
total 1016
-rw-r--r--. 1 root root 670293 Dec 24 19:35 services
-rw-r--r--. 1 root root 100680 Dec 24 19:37 service.tar.xz

[root@centos7 ~]# tar  tf  service.tar.xz       查看压缩包列表
services
[root@centos7 ~]# tar  xf  service.tar.xz		解压到当前目录,会覆盖源文件

'解决删根'
[root@centos7 ~]# tar czf etc.tar.gz /etc/
tar: Removing leading `/' from member names		删根的操作,不是报错,防止解压的时候覆盖源文件文件

方法 1#进入根目录进行打包,使用相对路径打包
[root@centos7 ~]# cd /
[root@centos7 /]# tar czf /root/etc-1.tar.gz etc
[root@centos7 /]# ll /root
total 20500
drwxr-xr-x. 75 root root     8192 Dec 24 08:48 etc
-rw-r--r--   1 root root 10152511 Dec 24 14:23 etc-1.tar.gz
-rw-r--r--   1 root root 10152511 Dec 24 11:44 etc.tar.gz

方法 2#使用P选项
[root@centos7 ~]# tar czPf etc-2.tar.gz /etc
[root@centos7 ~]# ll
total 30416
drwxr-xr-x. 75 root root     8192 Dec 24 08:48 etc
-rw-r--r--   1 root root 10152511 Dec 24 14:23 etc-1.tar.gz
-rw-r--r--   1 root root 10152412 Dec 24 14:25 etc-2.tar.gz
-rw-r--r--   1 root root 10152511 Dec 24 11:44 etc.tar.gz
[root@centos7 ~]# tar xf etc-2.tzar.gz			解压的时候进行删根操作,主要是做一个保护机制
tar: Removing leading `/' from member names


'使用-C选项,解压到指定目录中'
[root@centos7 ~]# tar xf etc.tar.gz  -C /opt/
[root@centos7 ~]# ll /opt/
total 680
drwxr-xr-x 75 root root   8192 Dec 24 08:48 etc

#打包压缩软链接
[root@centos7 ~]# ll  /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Nov 26 12:24 /etc/grub2.cfg -> ../boot/grub2/grub.cfg   
[root@centos7 ~]# tar czf grub.tar.gz /etc/grub2.cfg 
tar: Removing leading `/' from member names
[root@centos7 ~]# tar xf grub.tar.gz 
[root@centos7 ~]# ll
-rw-r--r--   1 root root      124 Dec 24 14:30 grub.tar.gz
[root@centos7 ~]# ll /etc
lrwxrwxrwx. 1 root root 22 Nov 26 20:23 grub2.cfg -> ../boot/grub2/grub.cfg '红底白字闪烁块'

'使用h选项打包软链接的真实文件'
[root@centos7 ~]# tar czhf grub-1.tar.gz /etc/grub2.cfg 
tar: Removing leading `/' from member names
[root@centos7 ~]# ll
total 30424
-rw-r--r--   1 root root     1466 Dec 24 14:36 grub-1.tar.gz
-rw-r--r--   1 root root      124 Dec 24 14:30 grub.tar.gz
[root@centos7 ~]# tar xf grub-1.tar.gz 

'排除文件'
方法 1[root@centos7 ~]# ll
total 9916
-rw-r--r-- 1 root root 10152511 Dec 24 14:23 etc-1.tar.gz
[root@centos7 ~]# tar czf etc-2.tar.gz  --exclude=/etc/services /etc
tar: Removing leading `/' from member names
[root@centos7 ~]# ll
total 19700
-rw-r--r-- 1 root root 10152511 Dec 24 14:23 etc-1.tar.gz
-rw-r--r-- 1 root root 10017369 Dec 24 14:42 etc-2.tar.gz
[root@centos7 ~]# tar tf etc-2.tar.gz |grep services
etc/firewalld/services/

#排除多个文件
[root@centos7 ~]# tar czf etc-3.tar.gz  --exclude=/etc/{passwd,services,shadow} /etc
tar: Removing leading `/' from member names
[root@centos7 ~]# ll
total 29484
-rw-r--r-- 1 root root 10152511 Dec 24 14:23 etc-1.tar.gz
-rw-r--r-- 1 root root 10015547 Dec 24 14:46 etc-2.tar.gz
-rw-r--r-- 1 root root 10015547 Dec 24 14:46 etc-3.tar.gz

[root@centos7 ~]# tar  tf  etc-3.tar.gz  |grep -E 'services|passwd|shadow'
etc/security/opasswd
etc/gshadow-
etc/passwd-
etc/gshadow
etc/shadow-
etc/pam.d/passwd
etc/firewalld/services/

'排除两个不同路径的文件'
[root@centos7 ~]# tar  czf  etc-4.tar.gz  --exclude=/etc/services --exclude=/etc/firewalld/services   /etc
tar: Removing leading `/' from member names
ll
[root@centos7 ~]# ll
total 39268
-rw-r--r-- 1 root root 10152511 Dec 24 14:23 etc-1.tar.gz
-rw-r--r-- 1 root root 10015547 Dec 24 14:46 etc-2.tar.gz
-rw-r--r-- 1 root root 10015547 Dec 24 14:46 etc-3.tar.gz
-rw-r--r-- 1 root root 10017348 Dec 24 14:48 etc-4.tar.gz

'根据排除列表进行排除文件'
[root@centos7 ~]# vim paichu.list
[root@centos7 ~]# cat paichu.list
/etc/services
/etc/passwd
/etc/sysconfig/network-scripts
/etc/hosts
[root@centos7 ~]#  tar  czf   etc-5.tar.gz   --exclude-from=paichu.list   /etc
tar: Removing leading `/' from member names
[root@centos7 ~]# tar  tf  etc-5.tar.gz  |grep  -E 'services|passwd|network-scripts|hosts'
etc/security/opasswd
etc/passwd-
etc/hosts.allow
etc/hosts.deny
etc/pam.d/passwd
etc/selinux/targeted/active/modules/100/denyhosts/

#压缩包名要跟f选项对应    X要跟排除列表文件对应
[root@centos7 ~]# tar  czfX   etc-6.tar.gz  paichu.list   /etc
tar: Removing leading `/' from member names

'打包/etc/目录到/opt/目录下,名称要求以当前主机名和ip地址命名,例:oldboy_10.0.0.100.tar.gz'
[root@centos7 ~]# tar czf /opt/"oldboy_$(hostname -I).tar.gz" /etc
tar: Removing leading `/' from member names
[root@centos7 ~]# ll /opt
total 29568
-rw-r--r--  1 root root 10152511 Dec 24 16:41 oldboy_10.0.0.100 .tar.gz


Find与Tar打包的结合方式
#打包/tmp下所有文件
[root@qls ~]# cd /
[root@qls /]# find tmp/ -type f | xargs tar czf tmp.tar.gz

#打包/tmp下所有文件
[root@qls /]# tar czf tmp.tar.gz $(find /tmp/ -type f)

#统计文件的大小
[root@qls /]# du -sh tmp.tar.gz


99. date 时间
#显示当前时间

[root@centos7 ~]# date
Tue Dec 24 12:19:04 CST 2019
[root@centos7 ~]# date +%F		   当前日期
2019-12-24
[root@centos7 ~]# date +%T		   当前时间
12:19:14
[root@centos7 ~]# date +%Y-%m-%d	当前日期
2019-12-24
[root@centos7 ~]# date +%y-%m-%d	当前日期,没有显示世纪
19-12-24
[root@centos7 ~]# date +%H:%M:%S	当前时分秒
12:20:41
[root@centos7 ~]# date +%s			时间戳,距离1970年1月1日0点0分0秒,过了多少秒
1577161252
[root@centos7 ~]# date +%w			今天是周几
2
[root@centos7 ~]# date +%W			今年的第几周
51	
[root@centos7 ~]# date +%j			今年的第几天
358

'-d	根据自己的要求显示时间,而不是修改时间'

[root@centos7 ~]# date -d "+1 day" +%F
2019-12-25
[root@centos7 ~]# date +%F
2019-12-24
[root@centos7 ~]# date -d "-1 day" +%F
2019-12-23
[root@centos7 ~]# date -d "-1 year" +%F
2018-12-24
[root@centos7 ~]# date -d "-1 month" +%F
2019-11-24

'-s	修改时间' 
[root@centos7 ~]# date -s 2019/12/1     真正的修改时间
Sun Dec  1 00:00:00 CST 2019
[root@centos7 ~]# date +%F
2019-12-01
[root@centos7 ~]# date -s 12:25:00
Sun Dec  1 12:25:00 CST 2019
[root@centos7 ~]# date
Sun Dec  1 12:25:15 CST 2019
[root@centos7 ~]# date -s "2019/12/24 12:28:00"


#同步系统时间
yum install -y  ntpdate
[root@centos7 ~]# ntpdate ntp1.aliyun.com
24 Dec 12:29:16 ntpdate[7326]: step time server 120.25.115.20 offset 22.934497 sec
[root@centos7 ~]# date
Tue Dec 24 12:29:23 CST 2019


100. rpm
#安装包

选项:
	-i	安装
	-v	显示安装的过程
	-h	显示安装的进度
	-e	卸载软件包
	-U	升级
	-q	 查询软件包是否安装
	-qa  查询所有已安装的软件包
	-ql  查询有已安装的列表信息
	-qc	 查看软件包的相关凭证文件
	-qi  显示软件包的本身信息
	-qf  查看命令属于哪个软件包
	-qR  查看依赖哪些软件包
	

101. yum
选项:

	repolist		#显示仓库列表
		enabled		显示可用的
		disabled	显示不可用的
		all			显示所有仓库
		
	install			#安装 
		-y			    免交互方式安装
		--downloadonly	 只下载
		--downloaddir=	 指定下载之后的路径
		
	list			#显示所有可安装的软件包列表
		installed	 显示已安装
		updates		 显示可更新的
		
	deplist			#查看有哪些依赖包
	
	check-update	#显示可更新的
	update			#更新  
	info			#显示软件包详细信息  
	provides		#查询命令属于哪个软件包
	search			#搜索 
	remove			#卸载
	erase			#卸载
	
	clean			#清除
		packages     清除包的缓存
		all			清除所有
		plugins		清除插件
		
	makecache		#生成缓存  
	reinstall		#重新安装 
	localinstall	#本地安装  
	
	history			#查看历史事务
		list	显示列表
			all	显示所有  
		info	id	显示该id的详细信息
		undo	id	回滚该操作
		
	groups			#组操作 
		install		安装
		remove		卸载  
		
yum-config-manage		#yum仓库管理
	--disable		仓库名称		#禁用该仓库
	--enable		仓库名称		#启用该仓库 
	 


磁盘相关命令

102. mount
#挂载(临时)
语法:命令 + 选项 + 设备 + 挂载点

选项:
	-a	重新加载配置文件,没有挂载的进行挂载
	-o	指定挂载的参数
	-t	指定挂载的文件系统类型
	
案例:
[root@centos7 ~]# mount  -o ro  /dev/sdb1  /mbr      只读
[root@centos7 ~]# mount  -t  xfs    /dev/sdb1  /mbr

#永久挂载
#第一种:
[root@centos7 ~]# tail -2 /etc/fstab 
/dev/sdb1				  /mbr			  xfs	  defaults	  0 0	
/dev/sdc1				  /gpt			  xfs	  defaults	  0 0

第一列:挂载的设备 device(设备地址、UUID、网络地址)
第二列:挂载点(目录,设备的一个入口)
第三列:文件系统的类型
第四列:挂载的参数 defaults
	async/sync	异步/同步,默认是async
	user/nouser	普通用户是否允许使用这个命令挂载,默认是nouser
	suid/nosuid 表示是否允许存在id的属性,默认是suid
	exec/noexec 是否运行目录中的文件有执行权限,默认是exec
	auto/nuauto 是否允许mount -a这个选项自动挂载配置文件中的列表,默认是auto
	rw/ro	    读写/只读	默认是读写
	defaults    默认
	-netdev		当主机挂载时出现报错,跳过这个报错,不影响系统的启动
第五列:是否使用dump进行磁盘备份
	0	表示不备份
	1	表示每天都备份
	2	表示不定期的备份
第六列:是否使用fsck检查磁盘
	0	表示不检查
	1	表示检查,检查的顺序,检查的级别,(1优先给跟分区,第一个检查)
	2	检查


#第二种:根据UUID
[root@centos7 ~]# blkid			获得所有设备的UUID信息,文件系统信息
/dev/sr0: UUID="2018-11-25-23-54-16-00" LABEL="CentOS 7 x86_64" TYPE="iso9660" PTTYPE="dos" 
/dev/sda1: UUID="6a91cf4a-c1b5-4e77-be6a-adae387e56ff" TYPE="xfs" 
/dev/sda2: UUID="1791fdaf-e9b8-40d1-a1ea-81cc39da6150" TYPE="swap" 
/dev/sda3: UUID="5c04efaa-f9a9-4460-86ff-634f62329e87" TYPE="xfs" 
/dev/sdb1: UUID="83ee509a-9a21-40cb-9301-a5ffecc66c88" TYPE="xfs" 
/dev/sdc1: UUID="fab418c0-b599-4d33-b615-281970fdafb4" TYPE="xfs" PARTLABEL="Linux filesystem" PARTUUID="87b38dbe-d53f-4ed0-b479-f0440e8fcdd2" 

临时
[root@centos7 ~]# mount UUID="83ee509a-9a21-40cb-9301-a5ffecc66c88" /mbr
永久
[root@centos7 ~]# tail  -1  /etc/fstab
UUID=92179b63-c1a9-4dc4-a292-e3a26afbdf73 /mbr                    xfs     defaults        0 0
[root@centos7 ~]# mount -a
[root@centos7 ~]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        48G  5.3G   43G  12% /
devtmpfs        980M     0  980M   0% /dev
tmpfs           991M     0  991M   0% /dev/shm
tmpfs           991M  9.5M  981M   1% /run
tmpfs           991M     0  991M   0% /sys/fs/cgroup
/dev/sdc1       3.0T  5.0G  3.0T   1% /gpt
/dev/sda1       497M  120M  378M  25% /boot
tmpfs           199M     0  199M   0% /run/user/0
/dev/sdb1        10G   33M   10G   1% /mbr


umount	#卸载

选项:
	-l	强制卸载

案例:
[root@centos7 mbr]# umount  -l   /mbr		#强制卸载(再挂载点目录时)
[root@centos7 mbr]# df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda3        48G  1.6G   46G   4% /
devtmpfs        476M     0  476M   0% /dev
tmpfs           487M     0  487M   0% /dev/shm
tmpfs           487M  7.6M  479M   2% /run
tmpfs           487M     0  487M   0% /sys/fs/cgroup
/dev/sda1       497M  120M  378M  25% /boot
tmpfs            98M     0   98M   0% /run/user/0
/dev/sdc1       3.0T  5.0G  3.0T   1% /gpt


[root@centos7 mbr]# umount  /mbr			
umount: /mbr: target is busy.
        (In some cases useful info about processes that use
         the device is found by lsof(8) or fuser(1))
[root@centos7 mbr]# cd			#切换到其他目录再进行卸载
[root@centos7 ~]# umount /mbr/



103. fdisk
#显示所有的分区信息
[root@centos7 ~]# fdisk -l

Disk /dev/sda: 53.7 GB, 53687091200 bytes, 104857600 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0x0007ea05

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1   *        2048     1026047      512000   83  Linux
/dev/sda2         1026048     5220351     2097152   82  Linux swap / Solaris
/dev/sda3         5220352   104857599    49818624   83  Linux

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes


Disk /dev/sdc: 3298.5 GB, 3298534883328 bytes, 6442450944 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes

'针对/dev/sdb  进行分区'
[root@centos7 ~]# fdisk  /dev/sdb
Welcome to fdisk (util-linux 2.23.2).

Changes will remain in memory only, until you decide to write them.
Be careful before using the write command.

Device does not contain a recognized partition table
Building a new DOS disklabel with disk identifier 0xbf07f17f.

Command (m for help): m		#命令帮助
Command action
   a   toggle a bootable flag		
   b   edit bsd disklabel			
   c   toggle the dos compatibility flag	
   d   delete a partition			#删除分区
   g   create a new empty GPT partition table	
   G   create an IRIX (SGI) partition table
   l   list known partition types	 #显示已知的分区类型信息
   m   print this menu				#帮助菜单
   n   add a new partition			#添加一个新的分区
   o   create a new empty DOS partition table
   p   print the partition table	#显示这个区分表的信息
   q   quit without saving changes	#保存不退出
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit		#保存退出
   x   extra functionality (experts only)
Command (m for help): n		#创建新的分区
Partition type:
   p   primary (0 primary, 0 extended, 4 free)	#主分区
   e   extended	#扩展分区
Select (default p): p	#选择主分区
Partition number (1-4, default 1): 1	#分区的编号
First sector (2048-209715199, default 2048): 	#分区的扇区的起始位置 
Using default value 2048
Last sector, +sectors or +size{K,M,G} (2048-209715199, default 209715199): +10G#扇区的结束位置
Partition 1 of type Linux and of size 10 GiB is set

Command (m for help): p		#打印这个分区的信息

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xeda0e62f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux


Select (default p): e	#选择创建扩展分区
Partition number (3,4, default 3): 4
First sector (62916608-209715199, default 62916608): 	#默认
Using default value 62916608
Last sector, +sectors or +size{K,M,G} (62916608-209715199, default 209715199): +50G
Partition 4 of type Extended and of size 50 GiB is set

Command (m for help): p		#打印分区信息 

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xeda0e62f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    62916607    20971520   83  Linux
/dev/sdb4        62916608   167774207    52428800    5  Extended


Command (m for help): n
Partition type:
   p   primary (2 primary, 1 extended, 1 free)
   l   logical (numbered from 5)
Select (default p): l	#创建逻辑分区
Adding logical partition 5		#逻辑分区编号从5开始
First sector (62918656-167774207, default 62918656): 
Using default value 62918656
Last sector, +sectors or +size{K,M,G} (62918656-167774207, default 167774207): +10G
Partition 5 of type Linux and of size 10 GiB is set

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xeda0e62f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb2        20973568    62916607    20971520   83  Linux
/dev/sdb4        62916608   167774207    52428800    5  Extended
/dev/sdb5        62918656    83890175    10485760   83  Linux

Command (m for help): d		#删除分区
Partition number (1,2,4,5, default 5): 2		#指定删除的分区编号
Partition 2 is deleted

Command (m for help): p

Disk /dev/sdb: 107.4 GB, 107374182400 bytes, 209715200 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk label type: dos
Disk identifier: 0xeda0e62f

   Device Boot      Start         End      Blocks   Id  System
/dev/sdb1            2048    20973567    10485760   83  Linux
/dev/sdb4        62916608   167774207    52428800    5  Extended
/dev/sdb5        62918656    83890175    10485760   83  Linux

Command (m for help): w		#保存退出
The partition table has been altered!

Calling ioctl() to re-read partition table.
Syncing disks.

3. 检查结果
[root@centos7 ~]# ll /dev/sd*
brw-rw----. 1 root disk 8,  0 Dec 31 10:46 /dev/sda
brw-rw----. 1 root disk 8,  1 Dec 31 10:46 /dev/sda1
brw-rw----. 1 root disk 8,  2 Dec 31 10:46 /dev/sda2
brw-rw----. 1 root disk 8,  3 Dec 31 10:46 /dev/sda3
brw-rw----. 1 root disk 8, 16 Dec 31 11:27 /dev/sdb
brw-rw----. 1 root disk 8, 17 Dec 31 11:27 /dev/sdb1
brw-rw----. 1 root disk 8, 20 Dec 31 11:27 /dev/sdb4
brw-rw----. 1 root disk 8, 21 Dec 31 11:27 /dev/sdb5
brw-rw----. 1 root disk 8, 32 Dec 31 10:46 /dev/sdc
[root@centos7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0  500M  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0 47.5G  0 part /
sdb      8:16   0  100G  0 disk 
├─sdb1   8:17   0   10G  0 part 
├─sdb4   8:20   0    1K  0 part 
└─sdb5   8:21   0   10G  0 part 
sdc      8:32   0    3T  0 disk 
sr0     11:0    1  4.3G  0 rom  


104. gdisk
yum install -y gdisk

支持128主分区,支持2TB以上的分区,使用CPT的分区

1. 添加一块硬盘	3 TB
[root@centos7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0  500M  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0 47.5G  0 part /
sdb      8:16   0  100G  0 disk 
├─sdb1   8:17   0   10G  0 part /mbr
├─sdb4   8:20   0    1K  0 part 
└─sdb5   8:21   0   10G  0 part 
sdc      8:32   0    3T  0 disk 
sr0     11:0    1  4.3G  0 rom  

'针对/dev/sdc,进行分区'
2. 开始进行分区
[root@centos7 ~]# gdisk /dev/sdc
GPT fdisk (gdisk) version 0.8.10

Partition table scan:
  MBR: not present
  BSD: not present
  APM: not present
  GPT: not present

Creating new GPT entries. 

Command (? for help): m		#与?相同显示帮助信息
b	back up GPT data to a file
c	change a partition's name
d	delete a partition		#删除分区
i	show detailed information on a partition
l	list known partition types		#显示分区的类型
n	add a new partition				#添加一个新的分区
o	create a new empty GUID partition table (GPT)
p	print the partition table		#打印这个分区表
q	quit without saving changes		#保存不退出
r	recovery and transformation options (experts only)
s	sort partitions
t	change a partition's type code
v	verify disk
w	write table to disk and exit	#保存退出
x	extra functionality (experts only)
?	print this menu			#帮助菜单

Command (? for help): n		#创建新的主分区(只能创建主分区)
Partition number (1-128, default 1): #从1开始编号
First sector (34-6442450910, default = 2048) or {+-}size{KMGTP}: #扇区的起始位置
Last sector (2048-6442450910, default = 6442450910) or {+-}size{KMGTP}: #扇区的结束位置
Current type is 'Linux filesystem'
Command (? for help): p		#显示此分区的信息
Disk /dev/sdc: 6442450944 sectors, 3.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): 062FDBE5-9370-4C86-B3C9-1730D62E7FE6
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 6442450910
Partitions will be aligned on 2048-sector boundaries
Total free space is 2014 sectors (1007.0 KiB)

Number  Start (sector)    End (sector)  Size       Code  Name
   1            2048      6442450910   3.0 TiB     8300  Linux filesystem

Command (? for help): w		#保存退出

Final checks complete. About to write GPT data. THIS WILL OVERWRITE EXISTING
PARTITIONS!!

Do you want to proceed? (Y/N): y	#是否继续向下执行
OK; writing new GUID partition table (GPT) to /dev/sdc.
The operation has completed successfully.


105. swap
#虚拟内存

swapoff -a		停用
swapon -a		启用
swapon -s		显示当前哪些设备属于swap
free -m

当物理内存不足时,系统会将swap临时充当内存

OOM	#报错
Out of memory	#内存不足报错

#当系统内存不足时,大量占用swap
解决方案:
	1.加内存
	2.杀掉占用内存多的进程
	3.重启对应占用过多内存的进程
	4.临时添加swap

#临时添加swap
'第一种'
1. 添加一个1G的磁盘空间
[root@centos7 ~]# fdisk /dev/sdb
[root@centos7 ~]# partprobe		通知内核,磁盘分区表发生不变化了
[root@centos7 ~]# lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0   50G  0 disk 
├─sda1   8:1    0  500M  0 part /boot
├─sda2   8:2    0    2G  0 part [SWAP]
└─sda3   8:3    0 47.5G  0 part /
sdb      8:16   0  100G  0 disk 
├─sdb1   8:17   0   10G  0 part /mbr
├─sdb2   8:18   0   10G  0 part 
├─sdb4   8:20   0  512B  0 part 
└─sdb5   8:21   0   10G  0 part 
sdc      8:32   0    3T  0 disk 
└─sdc1   8:33   0    3T  0 part /gpt
sr0     11:0    1  4.3G  0 rom  

2. 格式化,将其创建为swap文件系统
[root@centos7 ~]# mkswap /dev/sdb2
Setting up swapspace version 1, size = 10485756 KiB
no label, UUID=748f33aa-4c82-4ddd-ab21-c339f14d24ad

3. 将其应用到swap上面
[root@centos7 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         104        1710           9         165        1697
Swap:          2047           0        2047
[root@centos7 ~]# swapon /dev/sdb2
[root@centos7 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         112        1702           9         165        1689
Swap:         12287           0       12287

4. 永久添加
写入到/etc/fstab文件中


#显示当前哪些设备属于swap
[root@centos7 ~]# swapon -s
Filename				Type		Size	Used	Priority
/dev/sda2                              	partition	2097148	0	-2
/dev/sdb2                              	partition	10485756	0	-3

5. 取消swap的添加
[root@centos7 ~]# swapoff /dev/sdb2
[root@centos7 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         104        1710           9         165        1697
Swap:          2047           0        2047
[root@centos7 ~]# swapoff -a	禁用
[root@centos7 ~]# swapon -a		启用
[root@centos7 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         104        1710           9         165        1697
Swap:          2047           0        2047

'第二种'
#生成一个大文件,不是数据文件,让这个大文件临时充当swap
1. 生成一个1G的文件
[root@centos7 ~]# dd  if=/dev/zero  of=/root/swap.log   bs=100M count=10
[root@centos7 ~]# ll -h
-rw-r--r--. 1 root root 1000M Jan  2 14:04 swap.log

2. 让这个文件变成swap文件
[root@centos7 ~]# mkswap -f swap.log 
Setting up swapspace version 1, size = 1023996 KiB
no label, UUID=16b36f85-303b-4460-834c-3ea84dd612ba
[root@centos7 ~]# file swap.log 		辨别文件类型
swap.log: Linux/i386 swap file (new style), version 1 (4K pages), size 255999 pages, no label, UUID=16b36f85-303b-4460-834c-3ea84dd612ba

3. 修改swap文件的权限为600(不改也可以执行,但会提示让我们改)
[root@centos7 ~]# swapon /root/swap.log 
swapon: /root/swap.log: insecure permissions 0644, 0600 suggested.
[root@centos7 ~]# chmod 600 swap.log

4.添加swap空间
[root@centos7 ~]# swapon /root/swap.log 
[root@centos7 ~]# free -m
              total        used        free      shared  buff/cache   available
Mem:           1980         107         676           9        1196        1669
Swap:          3047           0        3047



106. mdadm
yum install mdadm -y

mdadm  #管理软RAID的应用工具	
选项:
	-A        #激活磁盘阵列
	-C        #建立一个新阵列
	-D        #打印阵列设备的信息
	-G        #改变阵列大小或形态
	-S        #停止阵列
	-r        #移除设备
	-l        #设定磁盘阵列的级别
	-n        #指定阵列磁盘的数量
	-x        #指定阵列中备用盘的数量
	-f        #将设备状态定为故障
	-a        #添加设备到阵列
	-v        #显示详细信息软RAID:通过操作系统实现
	

107. pvcreate
将磁盘转换为物理卷
#下载安装软件包
yum -y install lvm2

[root@centos7 ~]# pvcreate /dev/sdb
WARNING: dos signature detected on /dev/sdb at offset 510. Wipe it? [y/n]: y
  Wiping dos signature on /dev/sdb.
  Physical volume "/dev/sdb" successfully created.


108. vgcreate
将/dev/sdb物理卷加入卷组(资源池) 名字:lvm_test

[root@centos7 ~]# vgcreate lvm_test /dev/sdb
  Volume group "lvm_test" successfully created

109. lvcreate
选项:
	-L	#逻辑卷的大小
	-n	#逻辑卷的名称
	
创建逻辑卷,分配名称、大小,指定卷组
[root@centos7 ~]# lvcreate -L 100M -n lv1  lvm_test


110. crontab
#编写或者定时任务的命令

选项:
	-e	编辑定时任务  vim /var/spool/cron/root(没有任务时,这个文件是不存在的)
	-l	查看定时任务  cat /var/spool/cron/root
	-r	删除定时任务	rm -f /var/spool/cron/root
	-u  指定用户执行定时任务,默认是root用户。
	

进程相关命令

111. top
#实时显示系统的各种状态信息(动态)
选项:
	-d 1      设置刷新时间为1秒,默认是3秒
	-u 用户    显示指定用户的进程信息
	-p  PID	  根据指定的pid显示进程的信息
	
内部命令:
	q	退出
	h	帮助
	z	高亮显示
	b	高亮显示正在运行状态的进程
	s	设置刷新时间
	M	根据内存的使用百分比的大小进行排序
	P	根据CPU的使用百分比的大小进行排序
	1	数字1,显示所有CPU核心的工作状态。

案例:
[root@centos7 ~]# top
top - 11:29:55 up  3:02,  2 users,  load average: 0.00, 0.01, 0.07
Tasks:  96 total,   2 running,  92 sleeping,   2 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.3 sy,  0.0 ni, 99.7 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2028088 total,    83756 free,   124340 used,  1819992 buff/cache
KiB Swap:  2097148 total,  2097148 free,        0 used.  1666712 avail Mem 

   PID USER      PR  NI    VIRT    RES    SHR S %CPU %MEM     TIME+ COMMAND          
  7309 root      20   0       0      0      0 S  0.3  0.0   0:03.23 kworker/0:0      
     1 root      20   0  128004   6532   4132 S  0.0  0.3   0:02.40 systemd          
     2 root      20   0       0      0      0 S  0.0  0.0   0:00.01 kthreadd         
     3 root      20   0       0      0      0 S  0.0  0.0   0:03.00 ksoftirqd/0      
第一行的含义
top - 
11:29:55 	#当前系统的时间
up  3:02,   #系统运行的时间,从你开机到现在总共运行了多少时间
2 users,  	#shell窗口的数量,登录的用户数量
load average: 0.00, 0.01, 0.07	#系统的平均负载  1分钟	5分钟		15分钟

第二行的含义
Tasks:  		#任务
96 total,   	总的任务数量
2 running,  	 2个正在运行中
92 sleeping,     92个处于休眠状态
2 stopped,       2个处于停止状态
0 zombie	     0个僵尸状态

第三行的含义
%Cpu(s):  	#占用CPU的使用时间的百分比
0.0 us,  	用户态,用户运行程序占用CPU的时间百分比
0.3 sy,  	内核态,系统运行程序所占用CPU的时间百分比(通常内核与硬件进行交互)
0.0 ni, 	优先级高的程序所占用CPU的时间百分比
99.7 id,  	空闲的占用CPU的时间百分比
0.0 wa,  	等待io完成的占用CPU的时间百分比
0.0 hi,  	hardirq 处理硬中断占用CPU时间百分比
0.0 si,  	softirq 处理软中断占用CPU时间百分比
0.0 st		监控程序所窃取主机的占用CPU的时间百分比

#什么是中断?
中断是系统用来影响硬件设备请求的一种机制,它会打断进程的正常调度和执行,然后调用内核中的终端处理程序来影响设备的请求。

#硬中断与软中断
硬中断:处理跟硬件的请求,特点:速度够快

软中断:内核进行处理中断请求,硬中断处理时间过长的请求,放入内存中,更新一下硬件寄存器,内存调取这个请求进行处理,以线程的方式运行  特点:延迟执行

#关于软中断的操作文件
[root@centos7 ~]# ll /proc/softirqs 
-r--r--r--. 1 root root 0 Jan  6 11:58 /proc/softirqs

发送网络包的时候,影响性能


#第四行的含义
KiB Mem :  2028088 total,    83756 free,   124340 used,  1819992 buff/cache
物理内存	总的内存空间		剩余的内存空间	  已使用的内存  缓冲,缓存占用的内存空间

#第五行的含义
KiB Swap:  2097148 total,  2097148 free,        0 used.  1666712 avail Mem 

[root@centos7 ~]# free -m		#查看内存信息
              total      used      free      shared  buff/cache    available
Mem:           1980       121       146        9        1713        1628
Swap:          2047        0        2047
			  总的	 使用的	   剩余的	共享的	  冲,缓存占用的  程序最大可用的
			  
#第六行的含义
PID 		#进程的ID
USER     	#进行运行的用户
PR  		#优先级的映射值,跟NI相差20个数	20对应NI的0
NI    		#优先级,值越小,优先级越高
VIRT    	#虚拟内存使用空间
RES    		#物理内存使用空间
SHR 		#共享内存的使用空间
S 			#进程的运行状态
%CPU 		#占用CPU的百分比
%MEM     	#占用内存的百分比
TIME+ 		#运行的时间
COMMAND		#运行的命令


[root@centos7 ~]#  pgrep -l -a vim		显示进程的pid及进程信息
7276 vim test.txt
7282 vim test.txt

[root@centos7 ~]# pidof vim				显示进程的pid
7282 7276


112. htop
#实时查看,有颜色的显示(不提倡使用)
yum insyall -y htop



113. kill
根据进程id号去终止进程,如果进程不存在,会提示

[root@centos7 ~]# ps aux | grep top
root       7002  0.6  0.1 161884  2172 pts/0    S+   10:06   0:00 top
[root@centos7 ~]# kill 7002
[root@centos7 ~]# ps aux | grep top

#根据信号输入
列出当前系统所支持的信号
[root@centos7 ~]# kill -l
 1) SIGHUP	 2) SIGINT	 3) SIGQUIT	 4) SIGILL	 5) SIGTRAP
 6) SIGABRT	 7) SIGBUS	 8) SIGFPE	 9) SIGKILL	10) SIGUSR1
11) SIGSEGV	12) SIGUSR2	13) SIGPIPE	14) SIGALRM	15) SIGTERM
16) SIGSTKFLT	17) SIGCHLD	18) SIGCONT	19) SIGSTOP	20) SIGTSTP
21) SIGTTIN	22) SIGTTOU	23) SIGURG	24) SIGXCPU	25) SIGXFSZ
26) SIGVTALRM	27) SIGPROF	28) SIGWINCH	29) SIGIO	30) SIGPWR
31) SIGSYS	34) SIGRTMIN	35) SIGRTMIN+1	36) SIGRTMIN+2	37) SIGRTMIN+3
38) SIGRTMIN+4	39) SIGRTMIN+5	40) SIGRTMIN+6	41) SIGRTMIN+7	42) SIGRTMIN+8
43) SIGRTMIN+9	44) SIGRTMIN+10	45) SIGRTMIN+11	46) SIGRTMIN+12	47) SIGRTMIN+13
48) SIGRTMIN+14	49) SIGRTMIN+15	50) SIGRTMAX-14	51) SIGRTMAX-13	52) SIGRTMAX-12
53) SIGRTMAX-11	54) SIGRTMAX-10	55) SIGRTMAX-9	56) SIGRTMAX-8	57) SIGRTMAX-7
58) SIGRTMAX-6	59) SIGRTMAX-5	60) SIGRTMAX-4	61) SIGRTMAX-3	62) SIGRTMAX-2
63) SIGRTMAX-1	64) SIGRTMAX	

1) SIGHUP		#重新加载配置文件,平滑重启reload(不是真正的重启,不会改变进程的ID)
2) SIGINT		#跟Ctrl + C一样,取消当前的进程操作
9) SIGKILL		#强制终止进程
15) SIGTERM		#终止进程,默认的信号
20) SIGTSTP		#跟Ctrl + Z一样,将前台进程暂停到后台

[root@centos7 ~]# ps aux | grep nginx
root       7276  0.0  0.1 120800  2096 ?        Ss   10:42   0:00 nginx: master process /usr/sbin/nginx
nginx      7277  0.0  0.1 121184  3120 ?        S    10:42   0:00 nginx: worker process
[root@centos7 ~]# kill -1 7276 		平滑重启,进程的ID不会改变,会重新加载配置文件

[root@centos7 ~]# ps aux | grep ping
root       7289  0.1  0.0 149972  1996 pts/1    S+   10:47   0:00 ping baidu.com
[root@centos7 ~]# kill -2 7289		取消当前的进程操作
[root@centos7 ~]# ps aux | grep ping


[root@centos7 ~]# ps aux | grep vim
root       7282  0.0  0.2 149156  5000 pts/1    S+   10:43   0:00 vim 1.txt
[root@centos7 ~]# kill -9 7282		强制终止进程
[root@centos7 ~]# ps aux | grep vim

[root@centos7 ~]# kill 7282			进程不存在
-bash: kill: (7282) - No such process



114. killall
根据进程的名称去终止进程,如果进程不存在了,会提示

yum -y install psmisc

[root@centos7 ~]# ps aux | grep top
root       7018  0.3  0.1 161884  2232 pts/1    S+   10:26   0:00 top
root       7045  1.1  0.0 122300  2016 pts/2    S+   10:27   0:00 htop
[root@centos7 ~]# killall top		精确匹配终止
[root@centos7 ~]# ps aux | grep top
root       7045  0.9  0.0 122300  2016 pts/2    S+   10:27   0:00 htop

#命令名称相同,则同时终止进程
[root@centos7 ~]# ps aux | grep vim
root       7051  0.8  0.2 149152  4968 pts/2    S+   10:29   0:00 vim 1.txt
root       7052  0.4  0.2 149152  4972 pts/1    S+   10:29   0:00 vim 2.txt
root       7054  0.0  0.0 112712   964 pts/0    R+   10:30   0:00 grep --color=auto vim
[root@centos7 ~]# killall vim       
[root@centos7 ~]# ps aux | grep vim


115. pkill
根据进程名称终止进程,如果进程不存在,不会提示,模糊匹配
#只要进程名称中包含终止进程服务的名称,就会被终止掉,特别是sh这样的进程

[root@centos7 ~]# ps aux | grep top
root       7060  0.7  0.0 122300  2028 pts/2    S+   10:32   0:00 htop
root       7066  0.2  0.1 161884  2176 pts/1    S+   10:33   0:00 top
[root@centos7 ~]# pkill top		    模糊终止
[root@centos7 ~]# ps aux | grep top


116. nohup
#后台不中断的运行程序
&		将前台执行的程序放到后台运行

#执行如下命令后断开连接
[root@centos7 ~]# nohup  tar czPf etc.tar.gz  /etc/  /var/  &
[1] 7549
[root@centos7 ~]# nohup: ignoring input and appending output to ‘nohup.out’

#重新连接,放到后台的进程完成后自动退出
[root@centos7 ~]# ps aux | grep tar			S表示在后台运行
root       7660  2.6  0.0 124216  1868 ?        S    14:52   0:00 tar czPf etc.tar.gz /etc/ /var/
root       7665  0.0  0.0 112712   964 pts/2    R+   14:52   0:00 grep --color=auto tar
[root@centos7 ~]# ps aux | grep tar
root       7668  0.0  0.0 112712   960 pts/2    R+   14:52   0:00 grep --color=auto tar


117. jobs
	jobs	#显示当前终端的后台用户执行的所有进程

    bg	%ID		让一个暂停的后台进程在后台继续运行
    fg  %ID		让一个后台的进程放回到前台运行
    
[root@centos7 ~]# vim test.txt

[1]+  Stopped                 vim test.txt
[root@centos7 ~]# jobs
[1]+  Stopped                 vim test.txt
[root@centos7 ~]# bg %1
[1]+ vim test.txt &
[root@centos7 ~]# fg %1
vim test.txt      
~      
~

118. screen
#后台管理进程命令,会生成一个新的子shell,在子shell中运行你的进程,父shell退出了,不影响子shell的运行`

yum -y install screen

选项:
	-r	进入指定的shell窗口
	-S	给这个子shell起个名字
	-x	远程演示,主窗口操作,副窗口演示

[root@centos7 ~]# screen	#随机打开一个子shell窗口

'如果出错,复制家目录环境'
bash-4.2# cp -a /etc/skel/.bash* ./
bash-4.2# bash
[root@centos7 ~]# 

Ctrl +a+d	#临时退出这个子shell窗口
exit	#是真正的退出这个子shell窗口

案例一:
#随机打开一个子shell窗口,ping百度
[root@centos7 ~]# screen
[detached from 7771.pts-0.centos7]

#临时退出,再断开连接后重新连接,显示screen的shell窗口
[root@centos7 ~]# screen -list
There is a screen on:
	7771.pts-0.centos7	(Detached)
1 Socket in /var/run/screen/S-root.

#进入指定的shell窗口
[root@centos7 ~]# screen -r 7771
[screen is terminating]
#进去后终止进程,则没有shell窗口了
[root@centos7 ~]# screen -list
No Sockets found in /var/run/screen/S-root.

案例二:
#给这个子shell起个名字
[root@centos7 ~]# screen -S tar
[detached from 7810.tar]
[root@centos7 ~]# screen -list
There is a screen on:
	7810.tar	(Detached)
1 Socket in /var/run/screen/S-root.

#可以根据指定窗口名字进入
[root@centos7 ~]# screen -r tar

案例三:
#远程演示
在一个窗口打开一个叫test的会话
[root@centos7 ~]# screen -S test
在另一个窗口进入这个会话
[root@centos7 ~]# screen -x test
在第一个会话窗口执行操作,第二个会话窗口会记录第一个会话窗口的操作(演示)


119. nice
nice	设定程序优先级
renice	修改程序的优先级


'查看所有进程的优先级'
[root@centos7 ~]# ps axo user,pid,nice,command

#系统默认给的优先级是0
[root@centos7 ~]# vim test.txt

[1]+  Stopped                 vim test.txt
[root@centos7 ~]# ps axo user,pid,nice,command | grep vim
root       7359   0 vim test.txt

#在启动一个程序时,设定该程序的优先级
[root@centos7 ~]# nice -n -10 vim test.txt

[2]+  Stopped                 nice -n -10 vim test.txt
[root@centos7 ~]# ps axo user,pid,nice,command | grep vim

root       7362 -10 vim test.txt

#修改已经存在的程序的优先级
[root@centos7 ~]# ps axo user,pid,nice,command | grep sshd
root       6679   0 /usr/sbin/sshd -D
[root@centos7 ~]# renice -n -20 6679
6679 (process ID) old priority 0, new priority -20
[root@centos7 ~]# ps axo user,pid,nice,command | grep sshd
root       6679 -20 /usr/sbin/sshd -D



120. stress
#压测
yum -y install  stress

[root@centos7 ~]# stress -c 1 -t 600

[root@centos7 ~]# watch -d uptime	另一个会话窗口实时查看平均负载的变化


121. tcpdump 抓包
#Linux中抓包命令 

yum  install  -y  tcpdump

[root@hwh ~]# tcpdump  -i  eth0  udp   port  10000 -nn

选项:
	-i		指定网卡
		tcp
		udp
		icmp
		arp
	-n	 禁止解析IP地址
	-nn  禁止解析IP地址和端口号
	-c   指定抓几个包
	-S	 禁止将seq序列号解析成相对值
	-w	 将抓到的包保存到指定的文件中
	-r	 查看抓包保存的文件中内容(.cap的文件可以使用wireshark打开)
	
	port	端口
	host	主机
	src		源
	dst		目标
	
	! not	#取反
	&& and   #与
	|| or    #或者
	
#连接时的三次握手	
[root@hwh ~]# tcpdump  -i  eth0  port 22 -c 3 -nn -w sanci.cap
[root@hwh ~]# ll
-rw-r--r--. 1 tcpdump tcpdump    264 Jan 15 18:45 sanci.cap
[root@hwh ~]# sz sanci.cap	下载到桌面使用wireshark查看

#端口时的四次挥手
[root@hwh ~]# tcpdump  -i  eth0  port 22 -nn -w sici.cap
[root@hwh ~]# ll
-rw-r--r--. 1 tcpdump tcpdump    264 Jan 15 18:45 sanci.cap
-rw-r--r--. 1 tcpdump tcpdump    642 Jan 15 18:51 sici.cap
[root@hwh ~]# sz sici.cap	下载到桌面使用wireshark查看



网络相关命令

122. nmap
#网络的扫描工具
 yum install -y nmap

案例:
[root@hwh ~]# nmap -p22 10.0.0.100		22号端口
Starting Nmap 6.40 ( http://nmap.org ) at 2020-01-15 18:35 CST
Nmap scan report for 10.0.0.100
Host is up (0.000040s latency).
PORT   STATE SERVICE
22/tcp open  ssh
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

[root@hwh ~]# nmap -p1-80 10.0.0.100	1到80号端口
Starting Nmap 6.40 ( http://nmap.org ) at 2020-01-15 18:36 CST
Nmap scan report for 10.0.0.100
Host is up (0.0000030s latency).
Not shown: 78 closed ports
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

[root@hwh ~]# nmap -p22,80 10.0.0.100	22号和80号端口
Starting Nmap 6.40 ( http://nmap.org ) at 2020-01-15 18:36 CST
Nmap scan report for 10.0.0.100
Host is up (0.000037s latency).
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http
Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

[root@hwh ~]# nmap 10.0.0.100		所有端口
Starting Nmap 6.40 ( http://nmap.org ) at 2020-01-15 18:37 CST
Nmap scan report for 10.0.0.100
Host is up (0.0000030s latency).
Not shown: 997 closed ports
PORT    STATE SERVICE
22/tcp  open  ssh
80/tcp  open  http
111/tcp open  rpcbind
Nmap done: 1 IP address (1 host up) scanned in 0.07 seconds


123. nc
#网络工具
[root@hwh ~]# rpm -qf `which nc`
nmap-ncat-6.40-19.el7.x86_64
[root@hwh ~]# yum install -y nmap-ncat

选项:
	-u	udp协议
	-l	监听某个端口
	
#服务端
[root@hwh ~]# nc -l 80
a:123
#客户机测试
[root@centos7 ~]# nc 10.0.0.100 80	(服务器端的ip,同一个端口)
a:123


124. netstat
#检测系统网络数据
选项:
	-l	列出监听的端口
	-n	禁止解析主机和端口
	-t	tcp协议
	-u	udp协议
	-p	显示pid号及进程名称
	-a	列出所有的 
	-r	显示路由表
	
	-ant	显示tcp的11种状态
	-rn		显示路由表
	
[root@hwh ~]# netstat -ant
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:111             0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN     
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN     
tcp        0      0 10.0.0.100:22           10.0.0.1:49845          ESTABLISHED
tcp6       0      0 :::111                  :::*                    LISTEN     
tcp6       0      0 :::22                   :::*                    LISTEN     
tcp6       0      0 :::23                   :::*                    LISTEN     
tcp6       0      0 ::1:25                  :::*                    LISTEN     
tcp6       0      2 10.0.0.100:23           10.0.0.1:55337          ESTABLISHED
[root@hwh ~]# netstat -rn
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
0.0.0.0         10.0.0.2        0.0.0.0         UG        0 0          0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
169.254.0.0     0.0.0.0         255.255.0.0     U         0 0          0 eth0



125. ss
#检测系统网络数据
选项:
	-l		列出监听的端口
	-n		禁止主机和端口解析
	-t		tcp协议
	-u		udp协议
	-p		显示pid号及进程名称
	-a		列出所有的
	
	-ant	显示tcp的11种状态

[root@hwh ~]# ss -lntp
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128       *:111                   *:*                   users:(("rpcbind",pid=6337,fd=4),("systemd",pid=1,fd=67))
LISTEN     0      128       *:22                    *:*                   users:(("sshd",pid=6690,fd=3))
LISTEN     0      100    127.0.0.1:25                    *:*                   users:(("master",pid=6774,fd=13))
LISTEN     0      128      :::111                  :::*                   users:(("rpcbind",pid=6337,fd=6),("systemd",pid=1,fd=69))

[root@hwh ~]# ss -ant
State      Recv-Q Send-Q Local Address:Port               Peer Address:Port              
LISTEN     0      128       *:111                   *:*                  
LISTEN     0      128       *:22                    *:*                  
LISTEN     0      100    127.0.0.1:25                    *:*                  
ESTAB      0      0      10.0.0.100:22                 10.0.0.1:49845              
LISTEN     0      128      :::111                  :::*                  
LISTEN     0      128      :::22                   :::*                  
LISTEN     0      128      :::23                   :::*                  
LISTEN     0      100     ::1:25                   :::*                  
ESTAB      0      2         ::ffff:10.0.0.100:23                  ::ffff:10.0.0.1:55337  


126. telnet
#远程连接的服务(只支持普通用户)

条件准备
[root@hwh ~]# yum install -y telnet-server
[root@hwh ~]# systemctl start telnet.socket 
[root@hwh ~]# netstat -lntp | grep 23
tcp6       0      0 :::23                   :::*                    LISTEN      1/systemd 

#服务端操作
[root@hwh ~]# useradd test
[root@hwh ~]# echo 1 | passwd --stdin test
Changing password for user test.
passwd: all authentication tokens updated successfully.

#客户端测试
[c:\~]$ telnet 10.0.0.100

Connecting to 10.0.0.100:23...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.

Kernel 3.10.0-957.el7.x86_64 on an x86_64
hwh login: root		#root用户无法登陆
Password: 
Login incorrect

hwh login: test		#使用普通用户登录
Password: 
欢迎回来!
[test@hwh ~]$
[test@hwh ~]$ su -	#切换到root用户
Password: 
[root@hwh ~]# 


#测试主机是否开放某个端口
[c:\~]$ telnet 10.0.0.100 22

Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
SSH-2.0-OpenSSH_7.4		#版本


127. iftop
#检查网卡数据的传输的流量,网卡的速率
yum install -y iftop

选项:
	-n	禁止解析主机名
	-P	禁止解析端口号
	-i	监听某一块网卡
	-B	以字节的形式显示
	

案例:
[root@hwh ~]# dd if=/dev/zero of=/root/test.log bs=10M count=50		下载大文件
50+0 records in
50+0 records out
524288000 bytes (524 MB) copied, 19.9461 s, 26.3 MB/s
[root@hwh ~]# ll
-rw-r--r--  1 root root 524288000 Jan 15 19:22 test.log
[root@hwh ~]# scp -rp /root/test.log root@10.0.0.80:/root	传输文件
The authenticity of host '10.0.0.80 (10.0.0.80)' can't be established.
ECDSA key fingerprint is SHA256:VHRANWuv3mxBsg/mOdxQE5w2itdM88f6XnSyRF6jKJ8.
ECDSA key fingerprint is MD5:56:30:78:53:fb:a0:8b:ea:ae:b1:0e:18:b7:19:2f:15.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.80' (ECDSA) to the list of known hosts.
root@10.0.0.80's password: 
test.log                                   100%  500MB  25.0MB/s   00:19    

[root@centos7 ~]# iftop -nP
interface: eth0
IP address is: 10.0.0.80
MAC address is: 00:0c:29:51:79:8a
               191Mb          381Mb           572Mb          763Mb      954Mb
-------------------------------------------------------------             
10.0.0.80:ssh            => 10.0.0.100:5704              0b    352Kb   407Kb
                         <=                              0b   93.0Mb   109Mb
10.0.0.80:ssh            => 10.0.0.1:55007            1.11Kb  1.61Kb  1.89Kb
                         <=                            184b    221b    276b
--------------------------------------------------------------
TX:             cum:	614KB   peak:	 688Krates:   1.11Kb   353Kb   409Kb
RX:                     163MB            188Mb         184b   93.0Mb   109Mb
TOTAL:                  164MB            188Mb        1.29Kb  93.3Mb   109Mb
---------------------------------------------------------------
#表示的含义:
	TX		流出的流量
	RX		流入的流量
	TOTAL	总流量
	cum		从运行iftop命令时的数据
	perk	峰值
	
	rates	2s	10s	40s	的流量

[root@hwh ~]# iftop -i eth1
interface: eth1
IP address is: 172.16.1.150
MAC address is: 00:0c:29:f2:7c:05

[root@hwh ~]# iftop -nP -B


128. glances
#实时显示系统各种状态
yum install -y glances

[root@hwh ~]# glances
hwh                                                           Uptime: 4:04:34

CPU  [  6.8%]   CPU       6.8%  MEM      8.6%  SWAP      0.0%  LOAD    1-core
MEM  [  8.6%]   user:     1.6%  total:  1.93G  total:   2.00G  1 min:    0.03
SWAP [  0.0%]   system:   1.6%  used:    170M  used:        0  5 min:    0.04
                idle:    96.8%  free:   1.77G  free:    2.00G  15 min:   0.05

NETWORK     Rx/s   Tx/s   TASKS 103 (122 thr), 3 run, 100 slp, 0 oth 
eth0        456b   12Kb
eth1          0b     0b     CPU%  MEM%   PID USER        NI S Command 
lo            0b     0b     98.0   0.7  7716 root         0 R /usr/bin/python
                             0.0   0.2  2982 root         0 S /usr/lib/system
DISK I/O     R/s    W/s      0.0   0.3  6362 root         0 S /usr/bin/vmtool
sda1           0      0      0.0   0.0  4869 root       -20 S hci0
sda2           0      0      0.0   0.0    17 root       -20 S kintegrityd
sda3           0      0      0.0   0.0    21 root       -20 S kblockd
sr0            0      0      0.0   0.1  7602 root         0 S in.telnetd: ::f
                             0.0   0.0    91 root         0 S kauditd
FILE SYS    Used  Total      0.0   0.2  6776 postfix      0 S qmgr -l -t unix
/ (sda3)   2.68G  47.5G      0.0   0.0  5058 root       -20 S xfs-buf/sda1
/boot       119M   497M      0.0   0.0    60 root       -20 S deferwq
                             0.0   0.0    18 root       -20 S bioset
                             0.0   0.1  7604 test         0 S -bash 

2020-01-15 19:38:24       No warning or critical alert detected


路由跟踪命令

129. traceroute
#Linux路由跟踪命令 
yum install -y traceroute

选项:
	-n	禁止解析域名
	
案例:
[root@hwh ~]# traceroute -n www.baidu.com
traceroute to www.baidu.com (180.101.49.12), 30 hops max, 60 byte packets
 1  10.0.0.2  0.101 ms  0.047 ms  0.054 ms
 2  * * *
 3  * * *
 4  * * *


130. tracert
#windows路由跟踪命令

选项:
	-d	不将地址解析成主机名
	
案例:
C:\Users\hwh> tracert -d www.baidu.com

通过最多 30 个跃点跟踪
到 www.a.shifen.com [180.101.49.12] 的路由:

  1    <1 毫秒   <1 毫秒   <1 毫秒 192.168.11.1
  2     5 ms     4 ms     6 ms  124.74.216.130
  3     4 ms     6 ms     6 ms  124.74.216.133
  4     8 ms     7 ms     8 ms  124.74.209.237
  5     5 ms     9 ms     5 ms  101.95.88.138
  6    13 ms    12 ms    24 ms  202.97.29.110
  7    10 ms     9 ms    11 ms  58.213.94.82
  8     *        *        *     请求超时。
  9    10 ms    10 ms    11 ms  58.213.96.50
 10     *        *        *     请求超时。
 11     *        *        *     请求超时。
 12     *        *        *     请求超时。
 13    10 ms    10 ms     9 ms  180.101.49.12

跟踪完成。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值