命令总结
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
跟踪完成。