命令总结
Linux命令组成结构
Linux系统命令操作语法的格式为:
#命令 [选项] [参数/路径]
command [-options] [arguments]
[root@eth0 ~]# ls #命令
[root@eth0 ~]# ls -a #命令+选项
[root@eth0 ~]# ls -a /home/ #命令+选项+参数
#命令: 整条shell命令的主体
#选项: 用于调节命令的具体功能
#以"-"引导短格式选项(单个字符),例如"-a"
#以"--"引导长格式选项(多个字符),例如"--all"
#多个短格式选项可以写在一起,只用一个"-"引导,例如"-al"
#参数: 命令操作的对象,如文件、目录名等
PS1:中括号表示可选,即命令的选项及参数是可选的。
PS2:选项表示使用一个命令的不同功能。
PS3:命令、选项、参数两两之间至少要有一个空格。一个整体的命令、选项、参数不能有空格。
PS4: 选项和参数在有些命令的时候时,位置可以发生变化.
PS5: 命令必须放在开头,选项和参数位置可以发生变化
基础命令
1. shutdown
#关机重启的命令
[root@eth0 ~]# shutdown -h now/0 #立刻关机
[root@eth0 ~]# shutdown -h 10 #10分钟后关机
[root@eth0 ~]# shutdown -c #取消当前的关机操作
[root@eth0 ~]# shutdown -h 11:00 #定时关机
[root@eth0 ~]# shutdown -r now/0 #立刻重启
[root@eth0 ~]# shutdown -r 10 #10分钟后重启 分钟级别
[root@eth0 ~]# shutdown -c #取消当前的重启操作
[root@eth0 ~]# shutdown -r 11:00 #定时重启
2. poweroff
#关机
[root@eth0 ~]# poweroff #关机
3. halt
#关机只关闭系统,不关闭电源,需要手动进行关闭电源
[root@eth0 ~]# halt -p #立刻关机,并关闭电源
4. init
#根据切换运行级别进行关机和重启(0 关机、6 重启)
[root@eth0 ~]# init 0 #立刻关机
[root@eth0 ~]# init 6 #立刻重启
5. reboot
#重启
[root@eth0 ~]# reboot #立刻重启
6. logout
#注销,只能退出登录式shell
[root@eth0 ~]# logout
Connection closed by foreign host.
Disconnected from remote host(10.0.0.100) at 19:55:38.
Type `help' to learn how to use Xshell prompt.
[c:\~]$
7. exit
#注销
[root@eth0 ~]# exit
logout
Connection closed by foreign host.
Disconnected from remote host(10.0.0.100) at 19:56:20.
Type `help' to learn how to use Xshell prompt.
[c:\~]$
8. clear
#清屏
[c:\~]$
Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
Last login: Thu Nov 28 19:55:52 2019 from 10.0.0.1
[root@eth0 ~]# clear
[root@eth0 ~]#
9. man、help、info
#显示命令帮助信息
man #详细显示命令的帮助信息
help #显示系统内置命令的帮助信息
info #显示命令的说明信息
百度查询帮助
http://man.linuxde.net http://liunx.web3.xin http://linux.51yip.com
10. ip
#显示ip地址的命令
ip address / ip a #显示所有网卡的ip地址
[root@eth0 ~]# ip address
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 pfifUP group default qlen 1000
link/ether 00:0c:29:26:ad:ab 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::774a:64ac:a815:24a3/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@eth0 ~]#
ip address show eth0 / ip a s eth0 #显示指定网卡信息
[root@eth0 ~]# ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifUP group default qlen 1000
link/ether 00:0c:29:26:ad:ab 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::774a:64ac:a815:24a3/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@eth0 ~]#
11. ifconfig
#显示ip地址的命令,默认显示所有网卡信息
[root@eth0 ~]# 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::774a:64ac:a815:24a3 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:26:ad:ab txqueuelen 1000 (Ethernet)
RX packets 309 bytes 32464 (31.7 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 260 bytes 35008 (34.1 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 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@eth0 ~]#
ifconfig eth0 #显示指定网卡信息
[root@eth0 ~]# ifconfig eth0
12. hostname
#显示系统主机名
选项:
-I #显示外网IP地址(IPV4 没有网卡详细信息,只有ip信息)
-i #显示所有IP地址(IPV6&IPV4 没有网卡详细信息,只有ip信息)
13. history
#显示历史命令
选项:
-w #将命令记录到文件中(ll -a 本地 .bash_history文件)
-d+序号 #删除指定的命令记录
-c #清空历史记录,不会清空 .bash_history文件
[root@eth0 ~]# history
1 ctrl -help
181 logout
182 exit
183 clear
184 ip address
185 ip address show eth0
186 ifconfig
187 history
[root@eth0 ~]# history -c #清除历史记录
[root@eth0 ~]# history
1 history
[root@eth0 ~]#
14. alias
#设置别名
[root@eth0 ~]# alias net='ping baidu.com' #设置别名
[root@eth0 ~]# 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 net='ping baidu.com'
alias rm='rm -i'
alias which='alias | /usr/bin/which --tty-only --read-alias --show-dot --show-tilde'
[root@eth0 ~]# net #测试别名是否可用
PS:当前设置的别名全部针对当前Shell生效,属于临时生效,若永久生效,需将内容写入/etc/bashrc
15. unalias
#取消别名
[root@eth0 ~]# unalias net
16. ping
#网络扫描工具
-c n(数字) #显示一个输出结果
[root@eth0 ~]# ping 10.0.0.100
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.030 ms
64 bytes from 10.0.0.100: icmp_seq=2 ttl=64 time=0.097 ms
^C
--- 10.0.0.100 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 999ms
rtt min/avg/max/mdev = 0.030/0.063/0.097/0.034 ms
[root@eth0 ~]#
17. whoami
#查询当前用户
[root@eth0 /]# whoami
root
[root@eth0 /]#
文件管理
18. pwd
#显示当前所在的工作目录
[root@eth0 ~]# pwd
/root
[root@eth0 ~]# ls
anaconda-ks.cfg data1 file1.txt file3.txt logs test.log test.tt
conf data3 file2.txt html test.conf test.sh user
[root@eth0 ~]# cd data1
[root@eth0 ~/data1]# pwd
/root/data1
[root@eth0 ~/data1]#
19. cd
#切换目录
[root@eth0 ~/data1]# cd ~ #快速的回到家目录
[root@eth0 ~]# cd data1
[root@eth0 ~/data1]# cd #快速的回到家目录
[root@eth0 ~]# cd data1
[root@eth0 ~/data1]# cd . #保持当前目录不变
[root@eth0 ~/data1]# cd .. #当前目录的上一级的目录
[root@eth0 ~]# cd data1
[root@eth0 ~/data1]# cd - #切换到上一次所在的位置
/root
[root@eth0 ~]# cd data1
[root@eth0 ~/data1]# cd / #切换到根目录
[root@eth0 /]#
20. tree
#以树状型显示目录结构,默认没有安装:yum install -y tree 安装tree
选项:
-a #显示所有文件,包括隐藏文件
-d #只显示目录
-F #给不同的文件加上标识符,为了快速区分文件类型
-L #显示不同层级的目录结构,后面跟数字
[root@eth0 ~/data1]# tree #tree不加路径的情况下,默认针对的是当前目录操作
.
├── hosts
├── oldboy1
├── oldboy2
└── oldboy3
0 directories, 4 files
[root@eth0 ~/data1]#
[root@eth0 ~/data1]# cd
[root@eth0 ~]# tree -a #显示所有的文件和目录,包括隐藏文件,以点开头的文件就是隐藏文件
.
├── anaconda-ks.cfg
├── .bash_history
├── .bash_logout
├── .bash_profile
├── .bashrc
├── conf
├── .cshrc
├── data1
│ ├── hosts
│ ├── oldboy1
│ ├── oldboy2
│ └── oldboy3
├── data3
├── file1.txt
├── file2.txt
├── file3.txt
├── html
├── logs
├── .tcshrc
├── test.conf
├── test.log
├── test.sh
├── test.tt
└── user
8 directories, 16 files
[root@eth0 ~]#
[root@eth0 ~]# tree -s #树状显示目录或文件大小(无单位)
.
├── [ 1447] anaconda-ks.cfg
├── [ 6] conf
├── [ 64] data1
│ ├── [ 158] hosts
│ ├── [ 0] oldboy1
│ ├── [ 0] oldboy2
├── [ 0] test.tt
└── [ 6] user
8 directories, 10 files
[root@eth0 ~]# tree -sh #树状显示目录或文件大小(有单位B\KB\MB\GB)
.
├── [1.4K] anaconda-ks.cfg
├── [ 6] conf
├── [ 64] data1
│ ├── [ 158] hosts
│ ├── [ 0] oldboy1
│ ├── [ 0] oldboy2
└── [ 6] user
8 directories, 10 files
[root@eth0 ~]#
[root@eth0 ~]# ls
anaconda-ks.cfg data1 file1.txt file3.txt logs test.log test.tt
conf data3 file2.txt html test.conf test.sh user
[root@eth0 ~]#
[root@eth0 ~]# tree -d #只显示目录
.
├── conf
├── data1
├── data3
├── file1.txt
├── file2.txt
├── html
├── logs
└── user
8 directories
[root@eth0 ~]#
[root@qls ~]# tree -F /var/log/ #给不同的文件加上一个标识符,快速区分文件类型
* #可执行文件
= #socket文件,套接字文件
/ #表示目录
| #管道文件
@ #链接文件 不显示符号
> #普通文件 不显示符号
[root@qls ~]# tree -L 2 / #显示目录的层级(数字表示几级目录)
21. ls
#显示目录的列表信息
选项:
-l #以长格式进行显示目录列表 ls -l 等于 ll
-1 #数字,以行的形式显示目录列表
-a #显示所有,包括隐藏文件
-h #以人类可读的形式显示文件大小
-p #给目录加上根的标识符
-F #给不同的文件加上不同的标识符
-t #根据修改时间进行排序,默认最先显示时间最新的
-S #根据文件大小进行排序
-r #倒叙排序
-i #显示inode号
-d #当遇到目录时列出目录本身而非目录内的文件
-A #列出除. 及.. 以外的任何项目 与-l 同时使用时列出每个文件的作者
[root@qls ~]# ls -l #以长格式的形式显示目录的详细信息
total 8
-rw-r--r--. 1 root root 8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
[root@qls ~]# ls -1 #数字1,以行的形式显示目录列表
123
anaconda-ks.cfg
klefgrjm
[root@qls ~]# ls -la #显示所有的文件
total 32
dr-xr-x---. 3 root root 174 Nov 28 18:25 .
dr-xr-xr-x. 18 root root 236 Nov 28 18:22 ..
-rw-r--r--. 1 root root 8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-------. 1 root root 762 Nov 28 18:53 .bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 .bash_logout
-rw-r--r--. 1 root root 176 Dec 29 2013 .bash_profile
-rw-r--r--. 1 root root 176 Dec 29 2013 .bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 .cshrc
-rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
drwxr-----. 3 root root 19 Nov 26 21:51 .pki
-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc
[root@qls ~]# ll #系统别名 === ls -l
total 8
-rw-r--r--. 1 root root 8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
[root@qls ~]# ll -h /var/log/ #以人类的可读的形式显示文件大小
total 1.1M
drwxr-xr-x. 2 root root 176 Nov 26 20:28 anaconda
drwx------. 2 root root 23 Nov 26 20:30 audit
-rw-------. 1 root root 0 Nov 29 03:15 boot.log
-rw-------. 1 root root 8.3K Nov 27 03:08 boot.log-20191127
-rw-------. 1 root root 16K Nov 28 03:49 boot.log-20191128
-rw-------. 1 root root 16K Nov 29 03:15 boot.log-20191129
-rw-------. 1 root utmp 384 Nov 27 19:51 btmp
[root@qls ~]# ll -p /var/log/ #只在目录加上一个根,方便表示目录
total 1092
drwxr-xr-x. 2 root root 176 Nov 26 20:28 anaconda/
drwx------. 2 root root 23 Nov 26 20:30 audit/
-rw-------. 1 root root 0 Nov 29 03:15 boot.log
-rw-------. 1 root root 8489 Nov 27 03:08 boot.log-20191127
-rw-------. 1 root root 15865 Nov 28 03:49 boot.log-20191128
[root@qls ~]# ll -F /bin/ #给不同的文件加上不同的标识符
* #可执行文件
= #socket文件,套接字文件
/ #表示目录
| #管道文件
@ #链接文件
> #普通文件
[root@qls ~]# ll -t #根据修改时间进行排序,默认最新的日期放在最上面
total 8
-rw-r--r--. 1 root root 8 Nov 28 17:32 123
-rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
[root@qls ~]# ll -rt #倒叙排序
total 8
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
-rw-r--r--. 1 root root 8 Nov 28 17:32 123
[root@qls ~]# ll -S #根据文件大小进行排序
total 8
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root 8 Nov 28 17:32 123
-rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
[root@qls ~]# ll -d #只查看目录本身信息
dr-xr-x---. 3 root root 174 Nov 28 18:25 .
[root@qls ~]# ll -i #显示inode号码
total 8
67157611 -rw-r--r--. 1 root root 8 Nov 28 17:32 123
67157603 -rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
67157607 -rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
[root@qls ~]# ls -il
total 4532
67782615 -rw-r--r--. 1 root root 13899 Dec 3 20:19 6016300.html
67782588 -rw-r--r--. 1 root root 2381 Dec 3 20:11 baidu.html
67782590 -rw-r--r--. 1 root root 2381 Dec 3 20:12 bd.html
22. mkdir
#创建目录
选项:
-p #递归创建,创建多级目录
-m #创建目录时并设置权限
-v #显示创建过程
[root@qls ~]# mkdir /data #绝对路径创建
[root@qls ~]# mkdir data #相对路径创建
[root@qls ~]# mkdir data #已存在时,再次创建会报错。
mkdir: cannot create directory ‘data’: File exists
[root@qls ~]# mkdir -p test/data #创建多级目录
[root@qls ~]# ll
total 8
-rw-r--r--. 1 root root 8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 29 19:29 data
-rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
drwxr-xr-x. 3 root root 18 Nov 29 19:32 test
[root@qls ~]# ll test/
total 0
drwxr-xr-x. 2 root root 6 Nov 29 19:32 data
[root@qls ~]# mkdir -m 700 oldboy #给新创建的目录指定权限
[root@qls ~]# ll
total 8
-rw-r--r--. 1 root root 8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 29 19:29 data
-rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
drwx------. 2 root root 6 Nov 29 19:34 oldboy
drwxr-xr-x. 3 root root 18 Nov 29 19:32 test
[root@qls opt]# mkdir DATA #linux系统中,是区分大小写的
[root@qls opt]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:50 cd
drwxr-xr-x. 2 root root 6 Nov 29 19:48 data
drwxr-xr-x. 2 root root 6 Nov 29 19:53 DATA
[root@qls ~]# mkdir -v data1 #创建目录的时候显示创建过程
mkdir: created directory ‘data1’
#批量操作 {} 特殊字符,通配符 作用:生成序列,可批量创建目录
[root@qls ~]# mkdir oldboy{1..5} #批量创建oldboy1..5
[root@qls ~]# ll
total 8
-rw-r--r--. 1 root root 8 Nov 28 17:32 123
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 29 19:29 data
drwxr-xr-x. 2 root root 6 Nov 29 19:35 data1
-rw-r--r--. 1 root root 0 Nov 28 17:21 klefgrjm
drwx------. 2 root root 6 Nov 29 19:34 oldboy
drwxr-xr-x. 2 root root 6 Nov 29 19:38 oldboy1
drwxr-xr-x. 2 root root 6 Nov 29 19:38 oldboy2
drwxr-xr-x. 2 root root 6 Nov 29 19:38 oldboy3
drwxr-xr-x. 2 root root 6 Nov 29 19:38 oldboy4
drwxr-xr-x. 2 root root 6 Nov 29 19:38 oldboy5
[root@qls ~]# mkdir oldboy{a..z} #生成字母序列
[root@qls ~]# mkdir old{qls,zeng,jia} #创建无序的多个目录,使用逗号分隔
[root@qls ~]# ll
drwxr-xr-x. 2 root root 6 Nov 29 19:40 oldjia
drwxr-xr-x. 2 root root 6 Nov 29 19:40 oldqls
drwxr-xr-x. 2 root root 6 Nov 29 19:40 oldzeng
drwxr-xr-x. 3 root root 18 Nov 29 19:32 test
[root@qls ~]# mkdir -p data/test{1..10}/data{1..10}/oldboy{1..10}
1110 directories, 0 files
23. touch
#创建新文件,修改已存在的文件或者目录的时间戳(不会修改或覆盖文件或者目录的内容)
[root@qls opt]# touch test.txt
[root@qls opt]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:46 test.txt
[root@qls opt]# touch test.txt
[root@qls opt]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:47 test.txt
[root@qls opt]# mkdir data
[root@qls opt]# ll
total 0
drwxr-xr-x. 2 root root 6 Nov 29 19:47 data
-rw-r--r--. 1 root root 0 Nov 29 19:47 test.txt
[root@qls opt]# touch data
[root@qls opt]# ll
total 0
drwxr-xr-x. 2 root root 6 Nov 29 19:48 data
-rw-r--r--. 1 root root 0 Nov 29 19:47 test.txt
[root@eth0 ~]# touch /tmp/oldboy.txt #在/tmp目录下创建oldboy.txt文件
[root@eth0 ~]# ll /tmp
total 4
drwxr-xr-x. 2 root root 51 Nov 29 17:21 data2
drwxr-xr-x. 2 root root 51 Nov 29 17:21 data3
-rw-r--r--. 1 root root 0 Nov 29 15:55 data.log
-rwx------. 1 root root 836 Nov 27 23:45 ks-script-sME1Ay
-rw-r--r--. 1 root root 0 Nov 29 17:13 oldboy1
-rw-r--r--. 1 root root 0 Nov 29 17:13 oldboy2
-rw-r--r--. 1 root root 0 Nov 29 17:13 oldboy3
-rw-r--r--. 1 root root 0 Dec 2 19:45 oldboy.txt
-rw-r--r--. 1 root root 0 Nov 29 16:52 test.txt
drwx------. 2 root root 6 Nov 28 19:36 vmware-root_6302-700485293
drwx------. 2 root root 6 Nov 29 09:20 vmware-root_6315-1689522910
drwx------. 2 root root 6 Nov 27 23:47 vmware-root_6337-1983849738
-rw-------. 1 root root 0 Nov 27 23:41 yum.log
[root@qls opt]# touch data{1..10}.txt #创建10个不同的文件
[root@qls opt]# ll
total 0
-rw-r--r--. 1 root root 0 Nov 29 19:50 cd
drwxr-xr-x. 2 root root 6 Nov 29 19:48 data
-rw-r--r--. 1 root root 0 Nov 29 19:51 data10.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data1.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data2.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data3.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data4.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data5.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data6.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data7.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data8.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data9.txt
24. cp
#复制,拷贝
选项:
-r #递归复制,复制目录
-p #保持属性
-d #保持链接文件
-a ===-pdr
-i #文件存在时,提示是否覆盖
-t #把源目标和目标的位置进行调换
[root@eth0 ~]# cd
[root@eth0 ~]# cd /opt
[root@eth0 /opt]# ls
resolv.conf
[root@eth0 /opt]# touch test.txt
[root@eth0 /opt]# ls
resolv.conf test.txt
[root@eth0 /opt]# cp test.txt /mnt #常规复制文件
[root@eth0 /opt]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 30 10:32 test.txt
[root@eth0 /opt]#
[root@eth0 /opt]# ll
total 4
-rw-r--r--. 1 root root 0 Nov 30 10:35 data1.txt
-rw-r--r--. 1 root root 51 Nov 28 17:09 resolv.conf
-rw-r--r--. 1 root root 0 Nov 30 10:32 test.txt
[root@eth0 /opt]# cp -p data1.txt /mnt #复制的同时,保持文件的属性
[root@eth0 /opt]# ll /ment
ls: cannot access /ment: No such file or directory
[root@eth0 /opt]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 30 10:35 data1.txt
-rw-r--r--. 1 root root 0 Nov 30 10:32 test.txt
[root@eth0 /opt]# cp data1.txt /mnt
cp: overwrite ‘/mnt/data1.txt’? n
[root@eth0 /opt]# cp data1.txt /mnt
cp: overwrite ‘/mnt/data1.txt’? y
[root@eth0 /opt]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 30 10:37 data1.txt
-rw-r--r--. 1 root root 0 Nov 30 10:32 test.txt
[root@eth0 /opt]#
[root@eth0 /opt]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 30 10:37 data1.txt
-rw-r--r--. 1 root root 0 Nov 30 10:32 test.txt
[root@eth0 /opt]# cp -p data1.txt /mnt/data2.log #复制的时候,可以重命名
[root@eth0 /opt]# ll /mnt
total 0
-rw-r--r--. 1 root root 0 Nov 30 10:37 data1.txt
-rw-r--r--. 1 root root 0 Nov 30 10:35 data2.log
-rw-r--r--. 1 root root 0 Nov 30 10:32 test.txt
[root@eth0 /opt]#
[root@qls opt]# cp data10.txt test.log #使用相对路径复制
[root@qls opt]# cp data/ /mnt
cp: omitting directory ‘data/’
[root@qls opt]# cp -r data/ /mnt #-r复制目录 递归复制
[root@qls opt]# ll /mnt
total 0
drwxr-xr-x. 2 root root 6 Nov 29 20:03 data
-rw-r--r--. 1 root root 0 Nov 29 19:51 data9.txt
-rw-r--r--. 1 root root 0 Nov 29 19:51 data.log
-rw-r--r--. 1 root root 0 Nov 29 19:59 test.txt
[root@qls opt]# cp -d /etc/grub2.cfg ./grub2.cfg.log #保持软连接
[root@qls opt]# ll
lrwxrwxrwx. 1 root root 22 Nov 29 20:05 grub2.cfg.log -> ../boot/grub2/grub.cfg
[root@qls opt]# cp -rd /bin /binn #递归复制,并保持软连接
[root@qls opt]# ll /binn -d
lrwxrwxrwx. 1 root root 7 Nov 29 20:07 /binn -> usr/bin
[root@qls opt]# cp /bin /binnn
cp: omitting directory ‘/bin’
[root@qls opt]# cp -a /bin /binnn #-a 等于 -pdr(递归复制保持软连接并重命名)
[root@qls opt]# ll -d /binnn
lrwxrwxrwx. 1 root root 7 Nov 26 20:22 /binnn -> usr/bin
[root@qls opt]# ll -d /bin
lrwxrwxrwx. 1 root root 7 Nov 26 20:22 /bin -> usr/bin
[root@qls opt]# cp data9.txt /mnt #对方文件已经存在,复制时会提示是否覆盖 -i 系统默认的别名
cp: overwrite ‘/mnt/data9.txt’? n
[root@qls opt]# \cp data9.txt /mnt #强制覆盖
[root@qls opt]# cp -t ./ /mnt/data.log #把源目标和目标文件进行位置调换
25. mv
#移动和重命名
选项:
-f #强制覆盖,覆盖前不询问
-i #覆盖前询问是否覆盖
-t #把源目标和目标文件进行重命名或者调换位置
-v #详细显示进行的步骤
-u --update #只在源文件文件比目标文件新,或者目标文件不存在时才进行移动
用法:
mv [选项]... [-T] 源文件 目标文件
mv [选项]... 源文件... 目录
mv [选项]... -t 目录 源文件... #将源文件重命名为目标文件,或将源文件移动至指定目录
[root@qls opt]# mv data.log /tmp
[root@qls opt]# ll /tmp/
total 4
-rw-r--r--. 1 root root 0 Nov 29 20:17 data.log
[root@qls opt]# mv data/ /tmp #移动目录,不需要递归
[root@qls opt]# ll /tmp/
total 4
drwxr-xr-x. 2 root root 6 Nov 29 19:48 data
-rw-r--r--. 1 root root 0 Nov 29 20:17 data.log
[root@qls opt]# mv test.txt /tmp/data.log #文件存在时,提示是否覆盖 -i
mv: overwrite ‘/tmp/data.log’? n
[root@qls opt]# mv -f test.txt /tmp/data.log #强制复制
[root@qls opt]# mv -t ./ /tmp/data.log #把源目标跟目标文件的位置进行调换,将所有参数指定的源文件或目录移动至指定目录
[root@eth0 /opt]# ll
total 4
-rw-r--r--. 1 root root 0 Nov 30 10:35 data1.txt
-rw-r--r--. 1 root root 51 Nov 28 17:09 resolv.conf
-rw-r--r--. 1 root root 0 Nov 30 10:32 test.txt
[root@eth0 /opt]# mv data1.txt data2.txt #将目录或者文件重命名;如果两者是目录,且后者存在,则将前者移动
[root@eth0 /opt]# ll 到后者目录下,如果两者是文件,则会提示是否覆盖该文件
total 4
-rw-r--r--. 1 root root 0 Nov 30 10:35 data2.txt
-rw-r--r--. 1 root root 51 Nov 28 17:09 resolv.conf
-rw-r--r--. 1 root root 0 Nov 30 10:32 test.txt
[root@eth0 /opt]#
26. rename
#文件重命名命令
[root@qls opt]# rename data10 test data10.txt
命令 旧的字符串 新的字符串 文件名
27. rm
#删除
[root@qls opt]# rm bin #提示是否删除 -i 系统默认的别名
rm: remove symbolic link ‘bin’? n
[root@qls opt]# rm -f bin #强制删除
[root@qls opt]# rm -f DATA/
rm: cannot remove ‘DATA/’: Is a directory
[root@qls opt]# rm -rf DATA/ #递归删除,删除目录
[root@qls opt]# rm -rf ./* #删除一个命令下面的所有内容
[root@qls ~]# rm -rf /root/* #删除目录的下所有内容
显示文件内容
28. echo
# 所见即所得,支持通配符,会解析变量
-n #不显示换行符
-e #支持特殊字符; \n 换行符,\t TAB键
\a 发出警告声;
\b 删除前一个字符;
\c 最后不加上换行符号;
\f 换行但光标仍旧停留在原来的位置;
\n 换行且光标移至行首;
\r 光标移至行首,但不换行;
\t 插入tab;
\v 与\f相同;
\\ 插入\字符;
\nnn 插入nnn(八进制)所代表的ASCII字符;
-E 取消转义 (默认)
[root@eth0 ~]#
[root@eth0 ~]# echo -n hello 不显示换行符
hello[root@eth0 ~]#
[root@eth0 ~]#
[root@eth0 ~]# echo hello world 正常显示
hello world
[root@eth0 ~]# echo -e "hello\nworld" 显示换行符(\n)
hello
world
[root@eth0 ~]# echo -e "hello\tworld" 显示TAB键(\t)
hello world
[root@eth0 ~]#
[root@eth0 ~]# echo $PS1 显示变量
\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\[\e[32;1m\]\$ \[\e[0m\]
[root@eth0 ~]#
[root@eth0 ~]# echo $USER
root
[root@eth0 ~]#
[root@eth0 ~]# echo wanjun520 >wanjun520.txt # > 标准输出重定向,覆盖源文件内容
[root@eth0 ~]# ll
total 664
-rw-------. 1 root root 1447 Nov 27 23:45 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 29 15:52 conf
drwxr-xr-x. 2 root root 6 Nov 29 15:52 html
drwxr-xr-x. 2 root root 6 Nov 29 15:52 logs
-rw-r--r--. 1 root root 670293 Dec 2 12:03 services
drwxr-xr-x. 2 root root 6 Nov 29 15:52 user
-rw-r--r--. 1 root root 10 Dec 2 15:45 wanjun520.txt
[root@eth0 ~]# cat wanjun520.txt
wanjun520
[root@eth0 ~]#
[root@eth0 ~]# echo wanjun5202 >>wanjun520.txt # >> 标准输出追加重定向,将内容追加到文件的底部
[root@eth0 ~]# cat wanjun520.txt
wanjun520
wanjun5202
[root@eth0 ~]#
[root@eth0 ~]# echo $PS1 #打印变量
\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\[\e[32;1m\]\$ \[\e[0m\]
[root@eth0 ~]# echo '$PS1' #单引号,强引用,所见即所得
$PS1
[root@eth0 ~]#
[root@eth0 ~]# echo "$PS1" #双引号,弱引用,所见即所得,会解析变量
\[\e[37;40m\][\[\e[32;1m\]\u\[\e[37;40m\]@\h \[\e[36;40m\]\w\[\e[0m\]]\[\e[32;1m\]\$ \[\e[0m\]
[root@eth0 ~]# echo '"$PS1"' #单引号,强引用,所见即所得
"$PS1"
[root@eth0 ~]#
[root@qls ~]# echo {1..5} #所见即所得,支持通配符,会解析变量
1 2 3 4 5
[root@qls ~]# echo '{1..5}'
{1..5}
[root@qls ~]# echo "{1..5}"
{1..5}
[root@qls ~]# alias name=hostname
[root@qls ~]#
[root@qls ~]# name
qls
[root@qls ~]# alias name=hostname -I #不加引号,如果定义的值出现空格,不会看做是一个整体
-bash: alias: -I: not found
[root@qls ~]# alias name='hostname -I'
[root@qls ~]# name
10.0.0.100
[root@qls ~]# echo `hostname` #反引号,优先执行反引号内部命令,将输出结果 交给外面命令,反引号内必须是命令,相当于$(内容)
qls
[root@qls ~]# echo $(hostname)
qls
[root@qls ~]# echo -e " 好湿\n江山风景美如画;\n本想吟诗赞天下。\n奈何自己没文化;\n一句卧槽浪好大。"
好湿
江山风景美如画;
本想吟诗赞天下。
奈何自己没文化;
一句卧槽浪好大。
PS:
#> 标准输出重定向,覆盖源文件内容 echo aaa >bbb 创建新文件,并写入内容跟到文件中
#>> 标准输出追加重定向,将内容追加到文件底部
#''单引号 强引用,所见即所得,""双引号 弱引用,所见即所得,会解析变量
#不加引号,如果定义的值出现空格,不会被看作一个整体
#``反引号,会优先执行反引号内的内容,将命令的输出结果交给外面的命令,反引号内必须是命令,$(内容)
Linux使echo命令输出结果带颜色
echo显示带颜色,需要使用参数-e
格式:echo -e "\033[字背景颜色;文字颜色m字符串\033[0m"
用设置的背景颜色和文字颜色打印字符串,然后再把背景色和文字颜色恢复默认设置,0表示使用默认设置
例如:
echo -e "\033[41;37m TonyZhang \033[0m"
其中41的位置代表底色, 37的位置是代表字的颜色
注:
1、字背景颜色和文字颜色之间是英文的“""”
2、文字颜色后面有个m
3、字符串前后可以没有空格,如果有的话,输出也是同样有空格
下面看几个例子: 控制选项说明 :
echo -e "\033[30m 黑色字 \033[0m" \33[0m 关闭所有属性
echo -e "\033[31m 红色字 \033[0m" \33[1m 设置高亮度
echo -e "\033[32m 绿色字 \033[0m" \33[4m 下划线
echo -e "\033[33m 黄色字 \033[0m" \33[5m 闪烁
echo -e "\033[34m 蓝色字 \033[0m" \33[7m 反显
echo -e "\033[36m 天蓝字 \033[0m" \33[8m 消隐
echo -e "\033[37m 白色字 \033[0m" \33[30m -- \33[37m 设置前景色
\33[40m -- \33[47m 设置背景色
echo -e "\033[40;37m 黑底白字 \033[0m" \33[nA 光标上移n行
echo -e "\033[41;37m 红底白字 \033[0m" \33[nB 光标下移n行
echo -e "\033[42;37m 绿底白字 \033[0m" \33[nC 光标右移n行
echo -e "\033[43;37m 黄底白字 \033[0m" \33[nD 光标左移n行
echo -e "\033[44;37m 蓝底白字 \033[0m" \33[y;xH设置光标位置
echo -e "\033[45;37m 紫底白字 \033[0m" \33[2J 清屏
echo -e "\033[46;37m 天蓝底白字 \033[0m" \33[K 清除从光标到行尾的内容
echo -e "\033[47;30m 白底黑字 \033[0m" \33[s 保存光标位置
\33[u 恢复光标位置
\33[?25l 隐藏光标
\33[?25h 显示光标
29. cat
#查看文件内容,合并多个文件,创建新文件及编辑文件,显示行号
-n #给输出结果加上行号,-b显示行号(忽略空行)
-A #给输出的内容每行增加标识符
> #合并多个文件 cat aaa bbb >ccc<<EOF
>> #编辑文件
[root@qls ~]# cat test.txt
123
456
[root@qls ~]# cat -n test.txt
1 123
2 456
[root@qls ~]# cat -A test.txt #给输出的内容增加标识符
123$
456$
[root@qls ~]# echo '123456 ' >>test.txt
[root@qls ~]# cat test.txt
123
456
123456
[root@qls ~]# cat -A test.txt #给输出的内容增加标识符
123$
456$
123456 $
#合并多个文件
[root@qls ~]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@qls ~]# cat test.txt
123
456
123456
[root@qls ~]# cat hosts test.txt
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
123
456
123456
[root@qls ~]# cat hosts test.txt >test.log
[root@qls ~]# cat test.log
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
123
456
123456
#创建一个文件并编辑文件
[root@qls ~]# cat >file.txt<<EOF
> oldboy
> 123456
> olfgirl
> EOF
[root@qls ~]# cat file.txt
oldboy
123456
olfgirl
[root@qls ~]# cat >>file.txt<<eof
> test
> eof
[root@qls ~]# cat file.txt
oldboy
123456
olfgirl
test
30. tac
#倒序显示文件内容,默认显示文件最后一行
tac +文件
[root@qls ~]# cat file.txt
oldboy
123456
olfgirl
test
[root@qls ~]# tac file.txt
test
olfgirl
123456
oldboy
31. more
#按页显示文件内容,文件内容显示完成之后会自动退出
-n #n表示数字,指定一页显示多少行
+n #n表示数字,指定从第几行开始显示文件内容
内部命令
#按空格或F 向下翻页
#按B 向上翻页
#回车 向下翻一行
#= 显示当前光标所在位置
#/ 搜索
# n 向下查找
#q 推出
#h 帮助信息
32. less
#分页显示文件内容,文件内容显示完成,不会自动退出
-i #搜索时忽略大小写 less -i +内容
-N #给显示出来的内容加上行号
内部命令
#按空格或F 向下翻页
#按B 向上翻页
#回车 向下翻一行
#= 显示当前页的从第几行到多少行及总行数,显示总字节大小,及显示内容的百分比
#/ 搜索,可以高亮显示
# n 向下查找
#q 推出
#h 帮助信息
33. head
#显示文件头部信息,默认显示头10行
-n +数字 #取消默认输出 简写:head -n 1→head 1
-c #显示文件前5个字符(没有换行符)
[root@qls ~]# 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@qls ~]# head -n 1 services
# /etc/services:
[root@qls ~]# head -1 services
# /etc/services:
[root@qls ~]# head -2 services
# /etc/services:
# $Id: services,v 1.55 2013/04/14 ovasik Exp $
[root@qls ~]# head -c 5 services #显示文件的前5个字符
# /et[root@qls ~]#
34. tail
#显示文件尾部信息,默认显示最后10行
-n #取消默认输出,指定显示多少行
-c #显示文件最后几个字符
-f #实时查看文件的更新,默认显示10行,tail -nf (n表示数字)
-F #实时查看文件的更新,当文件不存在时,会一直尝试读取文件,直到文件存在或者手动退出
[root@qls ~]# 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@qls ~]# tail -n 1 services
matahari 49000/tcp # Matahari Broker
[root@qls ~]# tail -1 services #显示最后一行
matahari 49000/tcp # Matahari Broker
[root@qls ~]# cat -n services | tail -1
11176 matahari 49000/tcp # Matahari Broker
| #管道,将管道前面的命令的输出结果交给管道后面的命令进行处理
[root@qls ~]# tail -c5 services #显示最后5个字符,
oker #最后有一个换行符
[root@qls ~]# tail -f test.log #实时的查看文件的更新
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
123
456
123456
123
[root@qls ~]# tail -20f /var/log/messages #指定从最后的20行内容开始显示
[root@qls ~]# 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
35. tailf
#实时查看文件更新,默认显示10行,当文件没有更新时,不会读取磁盘,减少磁盘的io读写
-n #取消默认输出,显示指定的行数
[root@qls ~]# tailf /var/log/messages
[root@qls ~]# tailf -20 /var/log/messages
tail -f、tail -F、tailf三者区别:tailf当文件没有更新时,不会读取磁盘;
36. grep
# 文本过滤,并给过滤出来的内容加上颜色
#三剑客之一,三剑客老三
-v #排除,取反(包括空行)
-i/-y #忽略大小写
-n #显示该行内容在文件的所在行号
-c #统计过滤内容一共有多少行数
-o #只显示过滤的内容
-w #精确匹配、过滤
-r/-R #递归过滤
-E等于egrep #匹配扩展正则使用(扩展正则|表示或者)
-A #匹配内容的行及向下两行(有就显示,没有就不显示)
-B #匹配内容的行及向上两行(有就显示,没有就不显示)
-C #匹配内容的行及向上向下两行(有就显示,没有就不显示)
'^ ' #匹配以什么开头的行
' $' #匹配以什么结尾的行
'.' #匹配除换行符以外的任意一个字符
'\' #取消特殊字符的含义
'^$' #表示空行,有空格和TAB键的行不算空行
'.*' #表示所有,包括空行
' *' #匹配*号前面字符出现0次以上
-a #不要忽略二进制数据。
-b #在显示符合范本样式的那一行之外,并显示该行之前的内容。
-d<进行动作> #当指定要查找的是目录而非文件时,必须使用这项参数,否则grep命令将回报信息并停止动作。
-e +字符串 #指定字符串作为查找文件内容的范本样式。
-f +file1 file2 #指定一个或多个文件,让grep查找符合范本条件的文件内容,格式为每一列的范本样式。
-F #将文件视为固定字符串的列表。
-G #将文件视为普通的表示法来使用。
-h #在显示符合范本样式的那一列之前,不标示该列所属的文件名称。
-H #在显示符合范本样式的那一列之前,标示该列的文件名称。
-l #显示符合指定内容的文件名称。
-L #列出文件内容不符合指定的范本样式的文件名称。
-q #不显示任何信息。
-s #不显示错误信息。
-x #只显示全列符合的列。
[root@eth0 ~]# cp /etc/passwd ./ #把passwd复制到./(当前目录)
[root@eth0 ~]# ll
total 676
-rw-r--r--. 1 root root 82 Dec 2 19:01 123.txt
-rw-------. 1 root root 1447 Nov 27 23:45 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 29 15:52 conf
-rw-r--r--. 1 root root 158 Jun 7 2013 hosts
drwxr-xr-x. 2 root root 6 Nov 29 15:52 html
drwxr-xr-x. 2 root root 6 Nov 29 15:52 logs
-rw-r--r--. 1 root root 0 Dec 2 19:44 oldboy.txt
-rw-r--r--. 1 root root 798 Dec 3 09:54 passwd
-rw-r--r--. 1 root root 670293 Dec 2 12:03 services
-rw-r--r--. 1 root root 0 Dec 2 20:11 txt.a
drwxr-xr-x. 2 root root 6 Nov 29 15:52 user
-rw-r--r--. 1 root root 21 Dec 2 15:46 wanjun520.txt
[root@eth0 ~]# grep 'root' passwd #过滤root,所有包含root的都显示出来
[root@eth0 ~]# grep -v '/sbin/nologin' passwd #排除passwd文件中所有/sbin/nologin
[root@eth0 ~]# echo 'ROOT'>>passwd #在passwd文件中追加ROOT
[root@eth0 ~]# echo 'root' >>passwd #在passwd文件中追加root
[root@eth0 ~]# grep -i 'root' passwd #忽略root大小写
[root@eth0 ~]# grep -n 'root' passwd #显示root所在行的行号
1:root:x:0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin
30:root
[root@eth0 ~]#
[root@eth0 ~]# grep -c 'root' passwd #统计root字符串行数
3
[root@eth0 ~]# grep -o 'root' passwd #只显示匹配的字符,显示root
root
root
root
root
root
[root@eth0 ~]# grep -o 'root' passwd | grep -c 'root' #统计匹配的root次数
5
[root@eth0 ~]#
[root@eth0 ~]# echo -e 'roottt\nrootooo\noroottrooto' >>passwd #追加内容到passwd
[root@eth0 ~]# grep 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root
roottt
rootooo
oroottrooto
[root@eth0 ~]# grep -w 'root' passwd #精确匹配过滤
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root
[root@eth0 ~]#
[root@eth0 ~]# mkdir data1
[root@eth0 ~]# mkdir test1
[root@eth0 ~]# echo 'root' >>data1/test.txt
[root@eth0 ~]# echo 'root' >>test1/data1.txt
[root@eth0 ~]# ll
total 1688
-rw-r--r--. 1 root root 82 Dec 2 19:01 123.txt
-rw-------. 1 root root 1447 Nov 27 23:45 anaconda-ks.cfg
drwxr-xr-x. 2 root root 6 Nov 29 15:52 conf
drwxr-xr-x. 2 root root 22 Dec 3 10:06 data
drwxr-xr-x. 2 root root 22 Dec 3 15:11 data1
-rw-r--r--. 1 root root 0 Dec 3 11:18 hostname
drwxr-xr-x. 2 root root 6 Dec 3 11:19 HOSTNAME
-rw-r--r--. 1 root root 158 Jun 7 2013 hosts
drwxr-xr-x. 2 root root 6 Nov 29 15:52 html
drwxr-xr-x. 2 root root 6 Nov 29 15:52 logs
-rw-r--r--. 1 root root 1032630 Dec 3 14:19 nginx.tar.gz
-rw-r--r--. 1 root root 0 Dec 2 19:44 oldboy.txt
-rw-r--r--. 1 root root 910 Dec 3 14:38 passwd
-rw-r--r--. 1 root root 670293 Dec 2 12:03 services
drwxr-xr-x. 2 root root 22 Dec 3 10:07 test
drwxr-xr-x. 2 root root 23 Dec 3 15:12 test1
-rw-r--r--. 1 root root 0 Dec 2 20:11 txt.a
drwxr-xr-x. 2 root root 6 Nov 29 15:52 user
-rw-r--r--. 1 root root 21 Dec 2 15:46 wanjun520.txt
[root@eth0 ~]# grep -r 'root' ./* #递归过滤(目录中的内容也可以过滤)
./anaconda-ks.cfg:rootpw --iscrypted $6$4ePIMJ1aCDBrXeK.$Gx8XwrMOiZJenzJwo7ZODugMoRub4KdCCpIFYc6jkOE17WZeOsnVYC1Ek0AYJy92R2cez7K22tBtw.kRf/ZD./
./anaconda-ks.cfg:pwpolicy root --minlen=6 --minquality=1 --notstrict --nochanges --notempty
./data/test.txt:root
./data1/test.txt:root
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:root
./passwd:roottt
./passwd:rootooo
./passwd:oroottrooto
./services:rootd 1094/tcp # ROOTD
./services:rootd 1094/udp # ROOTD
./test/data.txt:root
./test1/data1.txt:root
[root@eth0 ~]#
[root@eth0 ~]# #grep -E === egrep
[root@eth0 ~]# 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
root
roottt
rootooo
oroottrooto
[root@eth0 ~]#
[root@eth0 ~]# grep 'adm' passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
[root@eth0 ~]# 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@eth0 ~]#
[root@eth0 ~]# 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@eth0 ~]#
[root@eth0 ~]# 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@eth0 ~]#
[root@eth0 ~]# grep 'root' passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root
roottt
rootooo
oroottrooto
[root@eth0 ~]# grep '^root' passwd #过滤以谁为开头的行
root:x:0:0:root:/root:/bin/bash
root
roottt
rootooo
[root@eth0 ~]# grep 't$' passwd #过滤以谁为结尾的行
halt:x:7:0:halt:/sbin:/sbin/halt
host
root
roottt
[root@eth0 ~]# grep '.' passwd #匹配除换行符以外的任意一个字符
root:x:0:0:root:/root:/bin/bash
hostname
fhostnamefafa
ROOT
#过滤出以m和n为开头的行
[root@eth0 ~]# grep -E '^m|^n' passwd
[root@eth0 ~]# grep '^[mn]' passwd
[root@eth0 ~]# grep -E '^(m|n)' passwd
[root@eth0 ~]# grep '\.$' passwd #匹配以点结尾的行,\反斜线正则:取消特殊字符的含义
rootttt.
[root@eth0 ~]#
[root@eth0 ~]# grep '^$' passwd # $表示空行,有空格的和TAB键的行不算空行
[root@eth0 ~]# 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
ty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
HOSTname
hostname
fadfa
fhostnamefafa
rootooo
[root@eth0 ~]#
[root@qls ~]# grep -Ev '^$|^#' /etc/login.defs #排除以空行和注释行
MAIL_DIR /var/spool/mail
PASS_MAX_DAYS 99999
PASS_MIN_DAYS 0
PASS_MIN_LEN 5
PASS_WARN_AGE 7
UID_MIN 1000
UID_MAX 60000
SYS_UID_MIN 201
SYS_UID_MAX 999
GID_MIN 1000
GID_MAX 60000
SYS_GID_MIN 201
SYS_GID_MAX 999
CREATE_HOME yes
UMASK 077
USERGROUPS_ENAB yes
ENCRYPT_METHOD SHA512
[root@eth0 ~]# cat file1
a=1
b=2
c=3
d=4
[root@eth0 ~]# cat file2
a=1
b=2
c=3
[root@eth0 ~]# grep -wf file1 file2 | xargs -i sed -i '/{}/d' file1 file2
[root@eth0 ~]# cat file1
d=4
[root@eth0 ~]#
[root@eth0 ~]# cat file2
[root@eth0 ~]#
文件和命令查找
37. locate
#根据本地数据库查找文件 ,数据库每天更新一次 ( updatedb更新数据库 )
yum install -y mlocate #软件包安装
-i #忽略大小写
-r #支持简单正则使用
[root@eth0 ~]# touch hostname
[root@eth0 ~]# locate hostname
/etc/hostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/selinux/targeted/active/modules/100/hostname/lang_ext
/usr/bin/hostname
/usr/bin/hostnamectl
/usr/bin/nmtui-hostname
/usr/lib/systemd/system/dbus-org.freedesktop.hostname1.service
/usr/lib/systemd/system/systemd-hostnamed.service
/usr/lib64/libnss_myhostname.so.2
/usr/share/zsh/site-functions/_hostnamectl
[root@eth0 ~]# updatedb
[root@eth0 ~]# locate hostname
/etc/hostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/selinux/targeted/active/modules/100/hostname/lang_ext
/root/hostname
/usr/bin/hostname
/usr/bin/hostnamectl
/usr/bin/nmtui-hostname
/usr/share/zsh/site-functions/_hostnamectl
[root@eth0 ~]#
[root@eth0 ~]# locate -i hostname # -i 忽略大小写
/etc/hostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/selinux/targeted/active/modules/100/hostname/lang_ext
/root/HOSTNAME
/root/hostname
/usr/bin/hostname
/usr/bin/hostnamectl
/usr/bin/nmtui-hostname
/usr/share/zsh/site-functions/_hostnamectl
[root@eth0 ~]#
[root@eth0 ~]# locate -r hostname$ #以hostname结尾的, -r 支持简单正则使用
/etc/hostname
/etc/selinux/targeted/active/modules/100/hostname
/root/hostname
/usr/bin/hostname
/usr/bin/nmtui-hostname
/usr/lib64/gettext/hostname
[root@eth0 ~]#
38. whereis
#根据文件类型查找文件(二进制文件,man帮助文件,源代码文件)
whereis +内容 #显示所有类型文件
whereis -b +内容 #显示二进制文件
-m +内容 #显示帮助文件
-s +内容 #显示源代码文件
[root@eth0 ~]# whereis hostname #显示所有类型的文件
hostname: /usr/bin/hostname /etc/hostname /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz
[root@eth0 ~]# whereis -b hostname #显示二进制文件
hostname: /usr/bin/hostname /etc/hostname
[root@eth0 ~]# whereis -m hostname #显示帮助文件
hostname: /usr/share/man/man1/hostname.1.gz /usr/share/man/man5/hostname.5.gz
[root@eth0 ~]# whereis -s hostname #显示源代码文件
hostname:[root@eth0 ~]#
39. which
#查找命令的绝对路径,根据PATH环境变量进行查找,也会显示别名
[root@eth0 ~]# which hostname
/usr/bin/hostname
[root@eth0 ~]# which hostnamectl
/usr/bin/hostnamectl
[root@eth0 ~]#
40. type
#显示不同类型的命令(命令:内置命令、外部命令)
-a #显示所有类型命令的绝对路径
-p #只显示外部命令的绝对路径,不包含其他内容
[root@eth0 ~]# type cd #查询命令是否是什么类型
cd is a shell builtin
[root@eth0 ~]# type -a cd #显示所有类型命令的绝对路径,#判断命令是否为内置命令
cd is a shell builtin
cd is /usr/bin/cd
[root@eth0 ~]#
[root@eth0 ~]# type ping
ping is /usr/bin/ping
[root@eth0 ~]# type -p ping #只显示外部命令的绝对路径,不包含其他内容
/usr/bin/ping
[root@eth0 ~]#
41. find
#查找文件,find命令支持通配符,不支持正则
-name #根据内容查找
-iname #忽略大小写查找
-maxdepth #根据层级查找匹配的条件
-print #打印,系统默认
语法:
find / -name "内容" -print(默认)
#查找 路径 条件 什么条件 动作
find / -name "内容" #根据内容精确查找
find / -iname "内容" #根据内容精确查找(忽略大小写)
find / -iname "内容*" #以内容开头的文件,(忽略大小写)
find / -iname "*内容" #以内容结尾的文件,(忽略大小写)
find / -iname "*内容*" #包含内容的文件,(忽略大小写)
find / -maxdepth num -iname "内容" -print(默认)
#查找 路径 层级 数字几层 条件 什么条件 动作
[root@eth0 ~]#
[root@eth0 ~]# find / -name "hostname" #根据名称查找
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/hostname
/usr/bin/hostname
/usr/lib64/gettext/hostname
[root@eth0 ~]# find / -iname "hostname" #忽略大小写
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/hostname
/root/HOSTNAME
/usr/bin/hostname
/usr/lib64/gettext/hostname
[root@eth0 ~]# find / -iname "hostname*" #忽略大小写,并以hostname开头的
/proc/sys/kernel/hostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/hostname
/root/HOSTNAME
/usr/bin/hostname
/usr/bin/hostnamectl
/usr/lib64/gettext/hostname
/usr/share/doc/hostname-3.13
/usr/share/man/man1/hostname.1.gz
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/man/man5/hostname.5.gz
/usr/share/bash-completion/completions/hostnamectl
[root@eth0 ~]# find / -iname "*hostname*" #忽略大小写,并包含hostname的
/proc/sys/kernel/hostname
/sys/kernel/debug/tracing/events/syscalls/sys_enter_sethostname
/sys/kernel/debug/tracing/events/syscalls/sys_exit_sethostname
/etc/dbus-1/system.d/org.freedesktop.hostname1.conf
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/hostname
/root/HOSTNAME
/var/lib/yum/yumdb/h/17415791890a2b5a0500b37b06be65b240b89fb1-hostname-3.13-3.el7-x86_64
/usr/bin/hostname
/usr/bin/hostnamectl
/usr/bin/nmtui-hostname
/usr/lib/systemd/system/dbus-org.freedesktop.hostname1.service
/usr/lib/systemd/system/systemd-hostnamed.service
/usr/lib/systemd/systemd-hostnamed
/usr/lib64/gettext/hostname
/usr/lib64/libnss_myhostname.so.2
/usr/share/doc/hostname-3.13
/usr/share/man/man1/hostname.1.gz
/usr/share/man/man1/hostnamectl.1.gz
/usr/share/man/man1/nmtui-hostname.1.gz
/usr/share/man/man8/systemd-hostnamed.8.gz
/usr/share/man/man8/libnss_myhostname.so.2.8.gz
/usr/share/man/man8/nss-myhostname.8.gz
/usr/share/man/man8/systemd-hostnamed.service.8.gz
/usr/share/man/man5/hostname.5.gz
/usr/share/bash-completion/completions/hostnamectl
/usr/share/dbus-1/system-services/org.freedesktop.hostname1.service
/usr/share/polkit-1/actions/org.freedesktop.hostname1.policy
/usr/share/zsh/site-functions/_hostnamectl
[root@eth0 ~]# find / -iname "*hostname" #忽略大小写,并以hostname结尾的
/proc/sys/kernel/hostname
/sys/kernel/debug/tracing/events/syscalls/sys_enter_sethostname
/sys/kernel/debug/tracing/events/syscalls/sys_exit_sethostname
/etc/selinux/targeted/active/modules/100/hostname
/etc/hostname
/root/hostname
/root/HOSTNAME
/usr/bin/hostname
/usr/bin/nmtui-hostname
/usr/lib64/gettext/hostname
[root@eth0 ~]#
[root@eth0 ~]#
[root@eth0 ~]# find / -maxdepth 3 -iname "hostname" #显示3级目录以下hostname 显示目录层级
/etc/hostname
/root/hostname
/root/HOSTNAME
/usr/bin/hostname
[root@eth0 ~]#
#文件名
-name #根据名称查找
-iname #查找的时候忽略大小写
[root@qls ~]# find / -name "ifcfg-eth0" -print #精确匹配
/etc/sysconfig/network-scripts/ifcfg-eth0
[root@qls ~]# find / -name "*eth0" #匹配以eth0结尾的
/etc/sysconfig/network-scripts/ifcfg-eth0
[root@qls ~]# find / -name "ifcfg*" #匹配以ifcfg开头的
/etc/sysconfig/network-scripts/ifcfg-lo
/etc/sysconfig/network-scripts/ifcfg-eth0
[root@qls ~]# touch oldboy
[root@qls ~]# touch OLDBOY
[root@qls ~]# touch oldboy{a..z}afe
[root@qls ~]# touch oldboy{a..z}
[root@qls ~]# find /root -name "*oldboy*" #匹配文件名中包含oldboy的字符串
[root@qls ~]# find /root -iname "oldboy" #精确匹配oldboy,但是忽略大小写
/root/oldboy
/root/OLDBOY
[root@qls ~]# find /root -name "oldboy?" #匹配以oldboy开头的。并且后面有一个且只能是一个文件
/root/oldboyp
/root/oldboyr
/root/oldboyt
/root/oldboyv
[root@qls ~]# find /root -name "oldboy[abc]" #匹配中括号中的任意一个字符
/root/oldboya
/root/oldboyb
/root/oldboyc
[root@qls ~]# find /root -name "oldboy[eafe]"
/root/oldboya
/root/oldboye
/root/oldboyf
[root@qls ~]# find /root -name "oldboy[a-e]" #匹配中括号中连续的字符
/root/oldboya
/root/oldboyb
/root/oldboyc
/root/oldboyd
/root/oldboye
[root@qls ~]# find /root -name "oldboy[^a]" #排除oldboy后面加一个字符,但是不是a的字符的文件
/root/oldboyp
/root/oldboyr
/root/oldboyt
[root@qls ~]# find /root ! -name "oldboya" #排除oldboya这个文件
#文件的类型
-type
f #普通文件
d #目录
l #软连接文件
b #块设备文件
c #字符设备
s #套接字文件,socket文件
p #管道文件
[root@qls ~]# find /tmp -type f -ls
34367466 4 -rw-r--r-- 1 test test 9 Dec 18 19:16 /tmp/test.txt
67753454 0 -rw-r--r-- 1 root root 0 Dec 17 18:50 /tmp/old2.txt
34367457 0 -rw-rw-r-- 1 test01 test01 0 Dec 18 18:56 /tmp/test01.txt
[root@qls ~]# find /tmp -type d -ls
33554504 4 drwxrwxrwt 16 root root 4096 Dec 20 03:24 /tmp
67323676 0 drwxrwxrwt 2 root root 6 Nov 26 20:23 /tmp/.X11-unix
[root@qls ~]# find /root -type l -ls
67831367 0 lrwxrwxrwx 1 root root 6 Dec 20 17:20 /root/old -> oldboy
[root@qls ~]# find /dev/ -type b -ls
18135 0 brw-rw---- 1 root disk 8, 3 Nov 28 18:49 /dev/sda3
18134 0 brw-rw---- 1 root disk 8, 2 Nov 28 18:49 /dev/sda2
18133 0 brw-rw---- 1 root disk 8, 1 Nov 28 18:49 /dev/sda1
18073 0 brw-rw---- 1 root cdrom 11, 0 Nov 28 18:49 /dev/sr0
17960 0 brw-rw---- 1 root disk 8, 0 Nov 28 18:49 /dev/sda
[root@qls ~]# find /dev/ -type c -ls
34439 0 crw------- 1 root root 10, 56 Nov 28 18:49 /dev/vsock
34275 0 crw-rw---- 1 root tty 7, 134 Nov 28 18:49 /dev/vcsa6
34272 0 crw-rw---- 1 root tty 7, 6 Nov 28 18:49 /dev/vcs6
34269 0 crw-rw---- 1 root tty 7, 133 Nov 28 18:49 /dev/vcsa5
34266 0 crw-rw---- 1 root tty 7, 5 Nov 28 18:49 /dev/vcs5
[root@qls ~]# find /dev/ -type s -ls
8942 0 srw-rw-rw- 1 root root 0 Nov 28 18:49 /dev/log
[root@qls ~]# find /run -type p -ls
2238497 0 prw------- 1 root root 0 Dec 18 19:23 /run/systemd/ask-password-block/136:1
57568 0 prw------- 1 root root 0 Nov 28 23:26 /run/systemd/ask-password-block/136:0
2308173 0 prw------- 1 root root 0 Dec 19 11:14 /run/systemd/inhibit/2.ref
2330900 0 prw------- 1 root root 0 Dec 19 16:20 /run/systemd/sessions/540.ref
21279 0 prw------- 1 root root 0 Nov 28 18:49 /run/systemd/initctl/fifo
#根据文件的层级查找
-maxdepth 正整数
[root@qls ~]# find /etc/ -maxdepth 2 -name "*config*"
/etc/chkconfig.d
/etc/pm/config.d
/etc/sysconfig
/etc/sysconfig/ip6tables-config
/etc/sysconfig/iptables-config
/etc/sysconfig/ebtables-config
/etc/sysconfig/authconfig
/etc/pam.d/config-util
/etc/ssh/ssh_config
/etc/ssh/sshd_config
/etc/selinux/config
[root@qls ~]# find /etc/ -maxdepth 1 -type f
/etc/fstab
/etc/crypttab
/etc/resolv.conf
/etc/shells
/etc/libaudit.conf
#根据属主属组查找
-user
-group
-nouser
-nogroup
[root@qls ~]# find /home -user tom -ls #查找属主是tom用户
33932521 0 drwx------ 2 tom tom 62 Dec 20 01:43 /home/tom
33934918 4 -rw-r--r-- 1 tom tom 18 Oct 31 2018 /home/tom/.bash_logout
33934919 4 -rw-r--r-- 1 tom tom 193 Oct 31 2018 /home/tom/.bash_profile
33934920 4 -rw-r--r-- 1 tom tom 231 Oct 31 2018 /home/tom/.bashrc
[root@qls ~]# find /home -group apps -ls #查找属组是apps
1083832 0 drwx------ 2 tomcat apps 62 Dec 20 01:29 /home/tomcat
1083834 4 -rw-r--r-- 1 tomcat apps 18 Oct 31 2018 /home/tomcat/.bash_logout
1083863 4 -rw-r--r-- 1 tomcat apps 193 Oct 31 2018 /home/tomcat/.bash_profile
1083864 4 -rw-r--r-- 1 tomcat apps 231 Oct 31 2018 /home/tomcat/.bashrc
[root@qls ~]# find /home -user yw1 -group yw -ls #查找属主是yw1并且属组是yw
34350047 0 drwx------ 2 yw1 yw 62 Dec 16 17:02 /home/yw1
34350048 4 -rw-r--r-- 1 yw1 yw 18 Oct 31 2018 /home/yw1/.bash_logout
34350055 4 -rw-r--r-- 1 yw1 yw 193 Oct 31 2018 /home/yw1/.bash_profile
34350059 4 -rw-r--r-- 1 yw1 yw 231 Oct 31 2018 /home/yw1/.bashrc
[root@qls ~]# find /home -user yw1 -a -group yw -ls ##查找属主是yw1并且属组是yw -a 并且,不写也是并且
34350047 0 drwx------ 2 yw1 yw 62 Dec 16 17:02 /home/yw1
34350048 4 -rw-r--r-- 1 yw1 yw 18 Oct 31 2018 /home/yw1/.bash_logout
34350055 4 -rw-r--r-- 1 yw1 yw 193 Oct 31 2018 /home/yw1/.bash_profile
34350059 4 -rw-r--r-- 1 yw1 yw 231 Oct 31 2018 /home/yw1/.bashrc
[root@qls ~]# find /home \( -user yw1 -o -group apps \) -ls #查找属主是yw1或者属组是apps -o 或者,必须要用小括号将将条件括起来。
34350047 0 drwx------ 2 yw1 yw 62 Dec 16 17:02 /home/yw1
34350048 4 -rw-r--r-- 1 yw1 yw 18 Oct 31 2018 /home/yw1/.bash_logout
34350055 4 -rw-r--r-- 1 yw1 yw 193 Oct 31 2018 /home/yw1/.bash_profile
34350059 4 -rw-r--r-- 1 yw1 yw 231 Oct 31 2018 /home/yw1/.bashrc
67753412 0 drwx------ 2 yw1 apps 62 Dec 16 17:02 /home/yw2
67753414 4 -rw-r--r-- 1 yw1 apps 18 Oct 31 2018 /home/yw2/.bash_logout
67753415 4 -rw-r--r-- 1 yw1 apps 193 Oct 31 2018 /home/yw2/.bash_profile
67753416 4 -rw-r--r-- 1 yw1 apps 231 Oct 31 2018 /home/yw2/.bashrc
1083832 0 drwx------ 2 tomcat apps 62 Dec 20 01:29 /home/tomcat
1083834 4 -rw-r--r-- 1 tomcat apps 18 Oct 31 2018 /home/tomcat/.bash_logout
1083863 4 -rw-r--r-- 1 tomcat apps 193 Oct 31 2018 /home/tomcat/.bash_profile
1083864 4 -rw-r--r-- 1 tomcat apps 231 Oct 31 2018 /home/tomcat/.bashrc
[root@qls ~]# find /home/ -nouser -ls #查找没有属主
34350047 0 drwx------ 2 2014 yw 62 Dec 16 17:02 /home/yw1
34350048 4 -rw-r--r-- 1 2014 yw 18 Oct 31 2018 /home/yw1/.bash_logout
34350055 4 -rw-r--r-- 1 2014 yw 193 Oct 31 2018 /home/yw1/.bash_profile
34350059 4 -rw-r--r-- 1 2014 yw 231 Oct 31 2018 /home/yw1/.bashrc
67753412 0 drwx------ 2 2014 2029 62 Dec 16 17:02 /home/yw2
67753414 4 -rw-r--r-- 1 2014 2029 18 Oct 31 2018 /home/yw2/.bash_logout
67753415 4 -rw-r--r-- 1 2014 2029 193 Oct 31 2018 /home/yw2/.bash_profile
67753416 4 -rw-r--r-- 1 2014 2029 231 Oct 31 2018 /home/yw2/.bashrc
1083832 0 drwx------ 2 2025 2029 62 Dec 20 01:29 /home/tomcat
1083834 4 -rw-r--r-- 1 2025 2029 18 Oct 31 2018 /home/tomcat/.bash_logout
1083863 4 -rw-r--r-- 1 2025 2029 193 Oct 31 2018 /home/tomcat/.bash_profile
1083864 4 -rw-r--r-- 1 2025 2029 231 Oct 31 2018 /home/tomcat/.bashrc
33934918 4 -rw-r--r-- 1 2030 2034 18 Oct 31 2018 /home/tom/.bash_logout
33934919 4 -rw-r--r-- 1 2030 2034 193 Oct 31 2018 /home/tom/.bash_profile
33934920 4 -rw-r--r-- 1 2030 2034 231 Oct 31 2018 /home/tom/.bashrc
[root@qls ~]# find /home/ -nogroup -ls #查找没有属组的
67753412 0 drwx------ 2 2014 2029 62 Dec 16 17:02 /home/yw2
67753414 4 -rw-r--r-- 1 2014 2029 18 Oct 31 2018 /home/yw2/.bash_logout
67753415 4 -rw-r--r-- 1 2014 2029 193 Oct 31 2018 /home/yw2/.bash_profile
67753416 4 -rw-r--r-- 1 2014 2029 231 Oct 31 2018 /home/yw2/.bashrc
1083832 0 drwx------ 2 2025 2029 62 Dec 20 01:29 /home/tomcat
1083834 4 -rw-r--r-- 1 2025 2029 18 Oct 31 2018 /home/tomcat/.bash_logout
1083863 4 -rw-r--r-- 1 2025 2029 193 Oct 31 2018 /home/tomcat/.bash_profile
1083864 4 -rw-r--r-- 1 2025 2029 231 Oct 31 2018 /home/tomcat/.bashrc
33932521 0 drwx------ 2 root 2034 62 Dec 20 01:43 /home/tom
33934918 4 -rw-r--r-- 1 2030 2034 18 Oct 31 2018 /home/tom/.bash_logout
33934919 4 -rw-r--r-- 1 2030 2034 193 Oct 31 2018 /home/tom/.bash_profile
33934920 4 -rw-r--r-- 1 2030 2034 231 Oct 31 2018 /home/tom/.bashrc
[root@qls ~]# find /home -nouser -a -nogroup -ls #查找没有属主并且没有属组的
67753412 0 drwx------ 2 2014 2029 62 Dec 16 17:02 /home/yw2
67753414 4 -rw-r--r-- 1 2014 2029 18 Oct 31 2018 /home/yw2/.bash_logout
67753415 4 -rw-r--r-- 1 2014 2029 193 Oct 31 2018 /home/yw2/.bash_profile
67753416 4 -rw-r--r-- 1 2014 2029 231 Oct 31 2018 /home/yw2/.bashrc
1083832 0 drwx------ 2 2025 2029 62 Dec 20 01:29 /home/tomcat
1083834 4 -rw-r--r-- 1 2025 2029 18 Oct 31 2018 /home/tomcat/.bash_logout
1083863 4 -rw-r--r-- 1 2025 2029 193 Oct 31 2018 /home/tomcat/.bash_profile
1083864 4 -rw-r--r-- 1 2025 2029 231 Oct 31 2018 /home/tomcat/.bashrc
33934918 4 -rw-r--r-- 1 2030 2034 18 Oct 31 2018 /home/tom/.bash_logout
33934919 4 -rw-r--r-- 1 2030 2034 193 Oct 31 2018 /home/tom/.bash_profile
33934920 4 -rw-r--r-- 1 2030 2034 231 Oct 31 2018 /home/tom/.bashrc
[root@qls ~]# find /home -nouser -o -nogroup -ls #不支持
33932521 0 drwx------ 2 root 2034 62 Dec 20 01:43 /home/tom
[root@qls ~]# find /home \( -nouser -o -nogroup \) -ls #查找没有属主或者没有属组的
34350047 0 drwx------ 2 2014 yw 62 Dec 16 17:02 /home/yw1
34350048 4 -rw-r--r-- 1 2014 yw 18 Oct 31 2018 /home/yw1/.bash_logout
34350055 4 -rw-r--r-- 1 2014 yw 193 Oct 31 2018 /home/yw1/.bash_profile
34350059 4 -rw-r--r-- 1 2014 yw 231 Oct 31 2018 /home/yw1/.bashrc
67753412 0 drwx------ 2 2014 2029 62 Dec 16 17:02 /home/yw2
67753414 4 -rw-r--r-- 1 2014 2029 18 Oct 31 2018 /home/yw2/.bash_logout
67753415 4 -rw-r--r-- 1 2014 2029 193 Oct 31 2018 /home/yw2/.bash_profile
67753416 4 -rw-r--r-- 1 2014 2029 231 Oct 31 2018 /home/yw2/.bashrc
1083832 0 drwx------ 2 2025 2029 62 Dec 20 01:29 /home/tomcat
1083834 4 -rw-r--r-- 1 2025 2029 18 Oct 31 2018 /home/tomcat/.bash_logout
1083863 4 -rw-r--r-- 1 2025 2029 193 Oct 31 2018 /home/tomcat/.bash_profile
1083864 4 -rw-r--r-- 1 2025 2029 231 Oct 31 2018 /home/tomcat/.bashrc
33932521 0 drwx------ 2 root 2034 62 Dec 20 01:43 /home/tom
33934918 4 -rw-r--r-- 1 2030 2034 18 Oct 31 2018 /home/tom/.bash_logout
33934919 4 -rw-r--r-- 1 2030 2034 193 Oct 31 2018 /home/tom/.bash_profile
33934920 4 -rw-r--r-- 1 2030 2034 231 Oct 31 2018 /home/tom/.bashrc
#文件的大小
-size b k M G
[root@qls ~]# find /var/log/ -size -1b -ls #查找空文件
33602690 0 -rw------- 1 root root 0 Nov 26 20:22 /var/log/tallylog
33989594 0 -rw------- 1 root root 0 Nov 26 20:28 /var/log/anaconda/ks-script-7paxdQ.log
33718871 0 -rw------- 1 root root 0 Nov 29 03:15 /var/log/boot.log
33989610 0 -rw-r--r-- 1 root root 0 Nov 26 20:30 /var/log/firewalld
33705523 0 -rw-r----- 1 mysql mysql 0 Nov 26 22:23 /var/log/mariadb/mariadb.log
[root@qls ~]# find /var/log -size -100k |xargs ls -lh #查找小于100k的文件
-rw-------. 1 root root 27K Nov 26 20:28 /var/log/anaconda/anaconda.log
-rw-------. 1 root root 4.0K Nov 26 20:28 /var/log/anaconda/ifcfg.log
[root@qls ~]# find /var/log -size 22k |xargs ls -lh #查找等于22k的文件
-rw-------. 1 root root 22K Nov 26 20:28 /var/log/anaconda/X.log
[root@qls ~]# find /var/log -size +500k |xargs ls -lh #大于500k的文件
-rw-r--r--. 1 root root 1.3M Dec 20 18:23 /var/log/123.log
-rw-r--r--. 1 root root 3.2M Dec 20 18:23 /var/log/456.log
-rw-------. 1 root root 1.5M Nov 26 20:28 /var/log/anaconda/journal.log
-rw-------. 1 root root 2.2M Dec 20 18:04 /var/log/audit/audit.log
-rw-r--r--. 1 root root 581K Dec 20 01:53 /var/log/lastlog
-rw-------. 1 root root 644K Dec 1 03:12 /var/log/messages-20191201
-rw-r--r--. 1 root root 9.8M Dec 20 18:22 /var/log/test.log
[root@qls ~]# find /var/log -size +2M |xargs ls -lh #大于2M
-rw-r--r--. 1 root root 3.2M Dec 20 18:23 /var/log/456.log
-rw-------. 1 root root 2.2M Dec 20 18:04 /var/log/audit/audit.log
-rw-r--r--. 1 root root 9.8M Dec 20 18:22 /var/log/test.log
[root@qls ~]# find ./ -size -3M |xargs ls -lhd #小于3M
dr-xr-x---. 4 root root 4.0K Dec 20 18:35 ./
drwxr-xr-x. 2 root root 6 Dec 8 00:54 ./.123
-rw-r--r--. 1 root root 1.3M Dec 20 18:35 ./123.log
-rw-------. 1 root root 22K Dec 19 12:55 ./.bash_history
-rw-r--r--. 1 root root 18 Dec 29 2013 ./.bash_logout
-rw-r--r--. 1 root root 212 Dec 16 17:31 ./.bash_profile
-rw-r--r--. 1 root root 192 Dec 16 17:31 ./.bashrc
-rw-r--r--. 1 root root 100 Dec 29 2013 ./.cshrc
-rw-------. 1 root root 1.5M Dec 20 18:35 ./journal.log
-rw-r--r--. 1 root root 581K Dec 20 18:35 ./lastlog
-rw-------. 1 root root 40 Dec 2 19:52 ./.lesshst
-rw-------. 1 root root 644K Dec 20 18:35 ./messages-20191201
drwxr-----. 3 root root 19 Nov 26 21:51 ./.pki
drwxr-----. 2 root root 6 Nov 26 21:51 ./.pki/nssdb
-rw-r--r--. 1 root root 129 Dec 29 2013 ./.tcshrc
-rw-------. 1 root root 5.5K Dec 19 18:35 ./.viminfo
[root@qls ~]# find ./ -size 2M |xargs ls -lhd #等于2M ,b单位和M单位会凑整,四舍五入
-rw-r--r--. 1 root root 1.3M Dec 20 18:35 ./123.log
-rw-------. 1 root root 1.5M Dec 20 18:35 ./journal.log
[root@qls ~]# find /var/log/ -size +100k -size -300k |xargs ls -lh #大于100k并且小于300k
-rw-------. 1 root root 109K Nov 26 20:28 /var/log/anaconda/packaging.log
-rw-------. 1 root root 122K Nov 26 20:28 /var/log/anaconda/storage.log
-rw-------. 1 root root 274K Nov 26 20:28 /var/log/anaconda/syslog
-rw-r--r--. 1 root root 121K Nov 28 18:49 /var/log/dmesg
-rw-r--r--. 1 root root 121K Nov 28 18:48 /var/log/dmesg.old
[root@qls ~]# find /var/log/ -size +100k -a -size -300k |xargs ls -lh
-rw-------. 1 root root 109K Nov 26 20:28 /var/log/anaconda/packaging.log
-rw-------. 1 root root 122K Nov 26 20:28 /var/log/anaconda/storage.log
-rw-------. 1 root root 274K Nov 26 20:28 /var/log/anaconda/syslog
-rw-r--r--. 1 root root 121K Nov 28 18:49 /var/log/dmesg
-rw-r--r--. 1 root root 121K Nov 28 18:48 /var/log/dmesg.old
[root@qls ~]# find /var/log/ \( -size +1M -o -size -1b \) |xargs ls -lh #或者
-rw-r--r--. 1 root root 1.3M Dec 20 18:23 /var/log/123.log
-rw-r--r--. 1 root root 3.2M Dec 20 18:23 /var/log/456.log
-rw-------. 1 root root 1.5M Nov 26 20:28 /var/log/anaconda/journal.log
-rw-------. 1 root root 0 Nov 26 20:28 /var/log/anaconda/ks-script-7paxdQ.log
-rw-------. 1 root root 2.2M Dec 20 18:04 /var/log/audit/audit.log
-rw-------. 1 root root 0 Nov 29 03:15 /var/log/boot.log
-rw-r--r--. 1 root root 0 Nov 26 20:30 /var/log/firewalld
-rw-------. 1 root root 0 Dec 15 03:26 /var/log/maillog
-rw-------. 1 root root 0 Dec 1 03:12 /var/log/maillog-20191208
-rw-------. 1 root root 0 Dec 8 03:47 /var/log/maillog-20191215
-rw-r-----. 1 mysql mysql 0 Nov 26 22:23 /var/log/mariadb/mariadb.log
-rw-------. 1 root root 0 Dec 15 03:26 /var/log/spooler
-rw-------. 1 root root 0 Nov 26 20:24 /var/log/spooler-20191201
-rw-------. 1 root root 0 Dec 1 03:12 /var/log/spooler-20191208
-rw-------. 1 root root 0 Dec 8 03:47 /var/log/spooler-20191215
-rw-------. 1 root root 0 Nov 26 20:22 /var/log/tallylog
-rw-r--r--. 1 root root 9.8M Dec 20 18:22 /var/log/test.log
[root@qls ~]# find /var/log/ ! \( -size +1k -a -size -10M \) |xargs ls -lhd #取反
drwxr-xr-x. 2 root root 176 Nov 26 20:28 /var/log/anaconda
-rw-------. 1 root root 0 Nov 26 20:28 /var/log/anaconda/ks-script-7paxdQ.log
drwx------. 2 root root 23 Nov 26 20:30 /var/log/audit
-rw-------. 1 root root 0 Nov 29 03:15 /var/log/boot.log
-rw-------. 1 root utmp 384 Nov 27 19:51 /var/log/btmp-20191201
-rw-r--r--. 1 root root 2 Dec 20 18:25 /var/log/file.log
-rw-r--r--. 1 root root 0 Nov 26 20:30 /var/log/firewalld
-rw-r--r--. 1 root root 193 Nov 26 20:22 /var/log/grubby_prune_debug
#文件的权限
-perm
[root@qls ~]# find ./ -perm 644 -ls #精确查找644权限的文件
67514410 4 -rw-r--r-- 1 root root 18 Dec 29 2013 ./.bash_logout
67514413 4 -rw-r--r-- 1 root root 100 Dec 29 2013 ./.cshrc
67514414 4 -rw-r--r-- 1 root root 129 Dec 29 2013 ./.tcshrc
67753426 4 -rw-r--r-- 1 root root 192 Dec 16 17:31 ./.bashrc
67753430 4 -rw-r--r-- 1 root root 212 Dec 16 17:31 ./.bash_profile
67831363 3220 -rw-r--r-- 1 root root 3295805 Dec 20 18:35 ./456.log
67157603 84 -rw-r--r-- 1 root root 594512 Dec 20 18:35 ./lastlog
67831361 10000 -rw-r--r-- 1 root root 10240000 Dec 20 18:35 ./test.log
67831362 1288 -rw-r--r-- 1 root root 1318322 Dec 20 18:35 ./123.log
[root@qls ~]# find ./ -perm -644 -ls #查找权限中包含644权限,必须满足所有条件
67514410 4 -rw-r--r-- 1 root root 18 Dec 29 2013 ./.bash_logout
67514413 4 -rw-r--r-- 1 root root 100 Dec 29 2013 ./.cshrc
67514414 4 -rw-r--r-- 1 root root 129 Dec 29 2013 ./.tcshrc
101325675 0 drwxr-xr-x 2 root root 6 Dec 8 00:54 ./.123
67753426 4 -rw-r--r-- 1 root root 192 Dec 16 17:31 ./.bashrc
67753430 4 -rw-r--r-- 1 root root 212 Dec 16 17:31 ./.bash_profile
67831363 3220 -rw-r--r-- 1 root root 3295805 Dec 20 18:35 ./456.log
67157603 84 -rw-r--r-- 1 root root 594512 Dec 20 18:35 ./lastlog
67831361 10000 -rw-r--r-- 1 root root 10240000 Dec 20 18:35 ./test.log
67831362 1288 -rw-r--r-- 1 root root 1318322 Dec 20 18:35 ./123.log
[root@qls ~]# find / -type f -perm -222 -ls #满足所有权限位都有可写权限
[root@qls ~]# find ./ -type f -perm /222 -ls #满足其中一个条件就可以
67514410 4 -rw-r--r-- 1 root root 18 Dec 29 2013 ./.bash_logout
67514413 4 -rw-r--r-- 1 root root 100 Dec 29 2013 ./.cshrc
67514414 4 -rw-r--r-- 1 root root 129 Dec 29 2013 ./.tcshrc
67305630 24 -rw------- 1 root root 21553 Dec 19 12:55 ./.bash_history
67305662 4 -rw------- 1 root root 40 Dec 2 19:52 ./.lesshst
67753426 4 -rw-r--r-- 1 root root 192 Dec 16 17:31 ./.bashrc
67753430 4 -rw-r--r-- 1 root root 212 Dec 16 17:31 ./.bash_profile
67831363 3220 -rw-r--r-- 1 root root 3295805 Dec 20 18:35 ./456.log
[root@qls ~]# find / -perm -4000 -ls #查找拥有setuid的权限
100790550 24 -rws--x--x 1 root root 24048 Oct 31 2018 /usr/bin/chfn
100790553 24 -rws--x--x 1 root root 23960 Oct 31 2018 /usr/bin/chsh
100738359 32 -rwsr-xr-x 1 root root 32096 Oct 31 2018 /usr/bin/fusermount
100741593 80 -rwsr-xr-x 1 root root 78272 Oct 31 2018 /usr/bin/gpasswd
100741595 44 -rwsr-xr-x 1 root root 41872 Oct 31 2018 /usr/bin/newgrp
[root@qls ~]# find / -perm -2000 -ls #查找拥有setgid的权限
9195 0 drwxr-sr-x 3 root systemd-journal 60 Nov 28 18:49 /run/log/journal
100686869 16 -r-xr-sr-x 1 root tty 15344 Jun 10 2014 /usr/bin/wall
100808435 20 -rwxr-sr-x 1 root tty 19624 Oct 31 2018 /usr/bin/write
100960081 376 ---x--s--x 1 root nobody 382240 Apr 11 2018 /usr/bin/ssh-agent
[root@qls ~]# find / -perm -1000 -ls #查找拥有sticky的权限
8425 0 drwxrwxrwt 2 root root 40 Nov 28 18:49 /dev/mqueue
8648 0 drwxrwxrwt 2 root root 40 Nov 28 18:49 /dev/shm
69 0 drwxrwxrwt 6 root root 277 Dec 17 18:41 /var/tmp
34102535 0 drwxrwxrwt 2 root root 6 Nov 26 23:10 /var/tmp/systemd-private-
#根据文件的最后的修改时间查找
-mtime
#创造条件
[root@qls ~]# for i in {01..20};do date -s "201912$i" && touch file-$i.txt ;done
[root@qls ~]# ntpdate ntp.aliyun.com
[root@qls ~]# find ./ -mtime +7 -ls #查找最后修改时间七天以前的,不包含第七天,不会计算当天的文件
67514410 4 -rw-r--r-- 1 root root 18 Dec 29 2013 ./.bash_logout
67514413 4 -rw-r--r-- 1 root root 100 Dec 29 2013 ./.cshrc
67514414 4 -rw-r--r-- 1 root root 129 Dec 29 2013 ./.tcshrc
33557678 0 drwxr----- 3 root root 19 Nov 26 21:51 ./.pki
67157653 0 drwxr----- 2 root root 6 Nov 26 21:51 ./.pki/nssdb
67305662 4 -rw------- 1 root root 40 Dec 2 19:52 ./.lesshst
101325675 0 drwxr-xr-x 2 root root 6 Dec 8 00:54 ./.123
67560146 0 -rw-r--r-- 1 root root 0 Dec 1 00:00 ./file-01.txt
67560147 0 -rw-r--r-- 1 root root 0 Dec 2 00:00 ./file-02.txt
67831365 0 -rw-r--r-- 1 root root 0 Dec 3 00:00 ./file-03.txt
67831367 0 -rw-r--r-- 1 root root 0 Dec 4 00:00 ./file-04.txt
67831369 0 -rw-r--r-- 1 root root 0 Dec 5 00:00 ./file-05.txt
67831370 0 -rw-r--r-- 1 root root 0 Dec 6 00:00 ./file-06.txt
67831371 0 -rw-r--r-- 1 root root 0 Dec 7 00:00 ./file-07.txt
67299630 0 -rw-r--r-- 1 root root 0 Dec 8 00:00 ./file-08.txt
67831372 0 -rw-r--r-- 1 root root 0 Dec 9 00:00 ./file-09.txt
67831373 0 -rw-r--r-- 1 root root 0 Dec 10 00:00 ./file-10.txt
67831374 0 -rw-r--r-- 1 root root 0 Dec 11 00:00 ./file-11.txt
67831375 0 -rw-r--r-- 1 root root 0 Dec 12 00:00 ./file-12.txt
[root@qls ~]# find ./ -mtime 7 -ls #显示第七天的文件
67831364 0 -rw-r--r-- 1 root root 0 Dec 13 00:00 ./file-13.txt
[root@qls ~]# find ./ -mtime -7 -ls #显示7天以内的文件,不包含第7七天的文件,包含当天的文件
67157601 4 dr-xr-x--- 4 root root 4096 Dec 20 00:00 ./
67305630 24 -rw------- 1 root root 21553 Dec 19 12:55 ./.bash_history
67753426 4 -rw-r--r-- 1 root root 192 Dec 16 17:31 ./.bashrc
67753430 4 -rw-r--r-- 1 root root 212 Dec 16 17:31 ./.bash_profile
67831363 3220 -rw-r--r-- 1 root root 3295805 Dec 20 2019 ./456.log
67831377 0 -rw-r--r-- 1 root root 0 Dec 14 00:00 ./file-14.txt
67831378 0 -rw-r--r-- 1 root root 0 Dec 15 00:00 ./file-15.txt
67831379 0 -rw-r--r-- 1 root root 0 Dec 16 00:00 ./file-16.txt
67831380 0 -rw-r--r-- 1 root root 0 Dec 17 00:00 ./file-17.txt
67831381 0 -rw-r--r-- 1 root root 0 Dec 18 00:00 ./file-18.txt
67831382 0 -rw-r--r-- 1 root root 0 Dec 19 00:00 ./file-19.txt
67831383 0 -rw-r--r-- 1 root root 0 Dec 20 00:00 ./file-20.txt
67815503 8 -rw------- 1 root root 5632 Dec 19 18:35 ./.viminfo
67157603 84 -rw-r--r-- 1 root root 594512 Dec 20 2019 ./lastlog
67157611 2156 -rw------- 1 root root 2206893 Dec 20 2019 ./audit.log
67157612 1520 -rw------- 1 root root 1552850 Dec 20 2019 ./journal.log
67831360 644 -rw------- 1 root root 659161 Dec 20 2019 ./messages-20191201
67831361 10000 -rw-r--r-- 1 root root 10240000 Dec 20 2019 ./test.log
67831362 1288 -rw-r--r-- 1 root root 1318322 Dec 20 2019 ./123.log
[root@qls ~]# find ./ -mtime -7 -mtime +3 -ls #查找3天以前并且7天以内的文件
67831377 0 -rw-r--r-- 1 root root 0 Dec 14 00:00 ./file-14.txt
67831378 0 -rw-r--r-- 1 root root 0 Dec 15 00:00 ./file-15.txt
67831379 0 -rw-r--r-- 1 root root 0 Dec 16 00:00 ./file-16.txt
-print #默认动作,将查找出来的文件打印出来
-ls #以长格式显示查找出来的文件的详细信息,包含inode号
-delete #把查找出来的文件删除,只能删除空目录
[root@qls ~]# find ./ -mtime +7 -delete
[root@qls ~]# ll
total 18912
-rw-r--r--. 1 root root 1318322 Dec 20 2019 123.log
-rw-r--r--. 1 root root 3295805 Dec 20 2019 456.log
-rw-------. 1 root root 2206893 Dec 20 2019 audit.log
[root@qls ~]# find ./ -type d -delete
find: cannot delete ‘./test01’: Directory not empty
-ok #后面可以自定义shell命令,会交互式询问你,
[root@qls ~]# find ./ -size +1M -ok ls -lhd {} \;
< ls ... ./456.log > ? y
-rw-r--r--. 1 root root 3.2M Dec 20 2019 ./456.log
< ls ... ./audit.log > ? y
-rw-------. 1 root root 2.2M Dec 20 2019 ./audit.log
< ls ... ./journal.log > ? y
-rw-------. 1 root root 1.5M Dec 20 2019 ./journal.log
< ls ... ./test.log > ? y
-rw-r--r--. 1 root root 9.8M Dec 20 2019 ./test.log
< ls ... ./123.log > ? y
-rw-r--r--. 1 root root 1.3M Dec 20 2019 ./123.log
-exec #后面可以自定义shell命令,不会交互式的询问,会将所有查找出来的文件进行一个个的赋值给后面的{},
;是shell命令的分隔符,\取消其特殊含义
[root@qls ~]# find ./ -size +1M -exec ls -lhd {} \;
-rw-r--r--. 1 root root 3.2M Dec 20 2019 ./456.log
-rw-------. 1 root root 2.2M Dec 20 2019 ./audit.log
-rw-------. 1 root root 1.5M Dec 20 2019 ./journal.log
-rw-r--r--. 1 root root 9.8M Dec 20 2019 ./test.log
-rw-r--r--. 1 root root 1.3M Dec 20 2019 ./123.log
[root@qls ~]# find ./ -type f |xargs ls -lh
-rw-r--r--. 1 root root 1.3M Dec 20 2019 ./123.log
-rw-r--r--. 1 root root 3.2M Dec 20 2019 ./456.log
-rw-------. 1 root root 2.2M Dec 20 2019 ./audit.log
-rw-------. 1 root root 22K Dec 19 12:55 ./.bash_history
-rw-r--r--. 1 root root 212 Dec 16 17:31 ./.bash_profile
-rw-r--r--. 1 root root 192 Dec 16 17:31 ./.bashrc
[root@qls ~]# find ./ -type f |xargs cp -t /opt/
[root@qls ~]# find ./ -type f |xargs -I {} cp {} /mnt
-I 将find命令查找出来的文件进行统一赋值给{},后续的命令进行调用该{}.
[root@qls ~]# find ./ -type f |xargs -I {} mv {} /mnt
[root@qls ~]# find /root -maxdepth 2 -type d |xargs -I {} du -sh {}
20M /root
644K /root/test01
[root@qls ~]# du -sh /root /root/test01/
20M /root
上传下载文件
42. rz
#只能上传文件,不支持 4G以上文件,4G以上文件用 Xftp上传,Xftp可以上传目录
rz #上传本地文件到服务器上,不能上传目录或者文件夹
rz -E #如果文件已经存在,则上传的时候自动在文件名后面加上数字(0,1,2...)
[root@eth0 ~]# rz #上传本地文件到服务器上
[root@eth0 ~]# ll
total 1704
-rw-r--r--. 1 root root 20 Dec 3 16:31 123
-rw-r--r--. 1 root root 82 Dec 2 19:01 123.txt
-rw-------. 1 root root 1447 Nov 27 23:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 21 Dec 2 15:46 wanjun520.txt
-rw-r--r--. 1 root root 8285 Nov 29 08:52 命令练习.txt
[root@eth0 ~]#
[root@eth0 ~]# rz -E #如果文件已经存在,则上传的时候自动在文件名后面加上数字(0,1,2...)
[root@eth0 ~]# ll
total 1716
-rw-r--r--. 1 root root 20 Dec 3 16:31 123
-rw-r--r--. 1 root root 82 Dec 2 19:01 123.txt
-rw-------. 1 root root 1447 Nov 27 23:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 21 Dec 2 15:46 wanjun520.txt
-rw-r--r--. 1 root root 8285 Nov 29 08:52 命令练习.txt
-rw-r--r--. 1 root root 8285 Nov 29 08:52 命令练习.txt.0
[root@eth0 ~]#
43. sz
#下载服务器上的文件到本地 ,不能下载目录或者文件夹
[root@eth0 ~]# sz wanjun520.txt
[root@eth0 ~]#
44. curl
#根据url规则进行文件传输,主要用于访问网站的连通性
-o #将内容写入到指定的文件中
-s #静默输出(不显示过程)
[root@eth0 ~]# curl www.baidu.com 访问网站 百度
curl: (6) Could not resolve host: baidu.heml; Unknown error
<!DOCTYPE html>
<!--STATUS OK--><html> <head><meta http-equiv=content-type content=text/html;charset=utf-8><meta http-equiv=X-UA-Compatible content=IE=Edge><meta content=always name=referrer><link rel=stylesheet type=text/css href=http://s1.bdstatic.com/r/www/cache/bdorz/baidu.min.css><title>百度一下,你就知道</title></head> <body link=#0000cc> <div id=wrapper> <div id=head> <div class=head_wrapper> <div class=s_form> <div class=s_form_wrapper> <div id=lg> name="tj_login" class="lb">登录</a>');使用百度前必读</a> <a href=http://jianyi.baidu.com/ class=cp-feedback>意见反馈</a> 京ICP证030173
[root@eth0 ~]#
[root@eth0 ~]# curl -o baidu.heml www.baidu.com #将内容写入到baidu.heml中
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2381 100 2381 0 0 22294 0 --:--:-- --:--:-- --:--:-- 22252
[root@eth0 ~]# cat baidu.html
cat: baidu.html: No such file or directory
[root@eth0 ~]# ll
total 1720
-rw-r--r--. 1 root root 20 Dec 3 16:31 123
-rw-r--r--. 1 root root 82 Dec 2 19:01 123.txt
-rw-------. 1 root root 1447 Nov 27 23:45 anaconda-ks.cfg
-rw-r--r--. 1 root root 2381 Dec 3 17:57 baidu.heml
[root@eth0 ~]# curl -s -o baidu.heml www.baidu.com #静默输出(不显示过程)
[root@eth0 ~]#
#下载nginx安装包
curl -o -s nginx.tar.gz http://nginx.org/download/nginx-1.16.1.tar.gz
指定 静默输出 名称 链接地址
[root@eth0 ~]# curl -o nginx.tar.gz http://nginx.org/download/nginx-1.16.1.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 1008k 100 1008k 0 0 70012 0 0:00:14 0:00:14 --:--:-- 60227
[root@eth0 ~]#
45. wget
#根据url路径进行下载
wget +网址 #使用默认名称下载
-O(大写) +名称 +网址 #指定名称下载
-q +网址 #静默输出(不显示过程)
--limit--rate=20(k/m) #限速下载
-c #断点续传
[root@qls ~]# wget https://www.cnblogs.com/yoo2767/p/6016300.html #使用默认的名称下载
[root@qls ~]# wget -O echo.html https://www.cnblogs.com/yoo2767/p/6016300.html #指定下载的名称
[root@qls ~]# wget -q -O e.html https://www.cnblogs.com/yoo2767/p/6016300.html #静默输出
[root@qls ~]# wget --limit-rate=20k http://nginx.org/download/nginx-1.16.1.tar.gz #限速下载
字符处理命令
46. sort
sort +文件
#排序,默认分隔符是空白字符,默认以字母或者数字的顺序排序(空行在最前面),也可以将重复的行进行排列在一起
选项:
-t #指定分隔符
-k #指定以第几列排序,后面跟数字
-n #以数值大小排序
-r #倒序排序
[root@qls ~]# sort passwd #根据默认进行排序。默认以第一列进行排序
adm:x:3:4:adm:/var/adm:/sbin/nologin
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
www:x:666:666::/home/www:/sbin/nologin
[root@qls ~]# sort -t ":" -k3 passwd #指定:为分隔符,以第三列进行排序
root:x:0:0:root:/root:/bin/bash
test:x:1000:1000::/home/test:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
[root@qls ~]# 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
test:x:1000:1000::/home/test:/bin/bash
[root@qls ~]# sort -t ":" -rnk3 passwd #以数值的大小倒序排序
test:x:1000:1000::/home/test:/bin/bash
apache:x:48:48:Apache:/usr/share/httpd:/sbin/nologin
ntp:x:38:38::/etc/ntp:/sbin/nologin
mysql:x:27:27:MariaDB Server:/var/lib/mysql:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
bin:x:1:1:bin:/bin:/sbin/nologin
root:x:0:0:root:/root:/bin/bash
[root@qls ~]#
[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
abc/1
abd/11
fgrf/2
rgrgh/66
fger/8
[root@qls ~]# sort -t "/" -nk2 sort.log
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
47. uniq
uniq +文件 #去重(只能去除相邻的相同行),统计,只能针对行操作
选项:
-c #统计重复行的次数
[root@qls ~]# sort sort.log | uniq -c
1 abc/1
2 abd/11
2 fger/8
2 fgrf/2
1 rgrgh/66
[root@qls ~]# sort sort.log | uniq -c | sort -n
1 abc/1
1 rgrgh/66
2 abd/11
2 fger/8
2 fgrf/2
[root@qls ~]# sort sort.log | uniq -c | sort -rn
2 fgrf/2
2 fger/8
2 abd/11
1 rgrgh/66
1 abc/1
48. cut
#取列,截取字段,默认以TAB键为分隔符
选项:
-d #指定分隔符,默认以TAB键为分隔符,且只能指定一个分隔符
-f #指定取出第几列,指定多个单列用逗号隔开(-f1,3:第1列和第3列),指 定多个连续列用-隔开(-f1-3:1到3列)
-c #截取字符,多个用逗号分割或者- 连续的多个字符
[root@qls ~]# cut -d ":" -f7 passwd #取出第七列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/bash
/sbin/nologin
[root@qls ~]# cut -d ":" -f7 passwd | sort #将重复的行排序在一起
/bin/bash
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/shutdown
[root@qls ~]# cut -d ":" -f7 passwd | sort | uniq #去除重复的行
/bin/bash
/bin/sync
/sbin/halt
/sbin/nologin
/sbin/shutdown
[root@qls ~]# cut -d ":" -f7 passwd | sort | uniq -c #统计重复的次数
2 /bin/bash
1 /bin/sync
1 /sbin/halt
19 /sbin/nologin
1 /sbin/shutdown
[root@qls ~]# cut -d ":" -f7 passwd | sort | uniq -c | sort -rn #根据次数进行倒序排序
19 /sbin/nologin
2 /bin/bash
1 /sbin/shutdown
1 /sbin/halt
1 /bin/sync
[root@qls ~]# cat sort.log
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@qls ~]# cut -d "/" -f2 sort.log
1
11
2
8
66
8
11
2
[root@qls ~]# cut -d "/" -f2 sort.log |sort -rn
66
11
11
8
8
2
2
1
[root@qls ~]# echo "I am name is student QQ is 1238376584" > qq.txt #取出姓名和QQ号码
[root@qls ~]# cat qq.txt
I am name is student QQ is 1238376584
[root@qls ~]# cut -d " " -f3,8 qq.txt #取出第三列和第八列,第四列是空,有两个空格
name is
[root@qls ~]# cut -d " " -f3,9 qq.txt
name 1238376584
[root@qls ~]# cut -d " " -f3-9 qq.txt #取出连续的多列
name is student QQ is 1238376584
[root@qls ~]# cat qq.txt
I am name is student QQ is 1238376584
[root@qls ~]# cut -c 1-3 qq.txt #截取每一列的第一个到第三个字符
I a
[root@qls ~]# cut -c 3 qq.txt #截取第三个字符
a
[root@qls ~]# cut -c 1,3 qq.txt #截取第一个和第三个字符
Ia
49. tr
tr "旧字符" "新字符" < +文件 #替换(只能单对单字符的替换,字符串不能替换),删除字符,tr命 令单独针对文件操作时必须使用小于号(<标准输入)
选项:
-d #删除字符
[root@qls ~]# cut -d "," -f1,2 qq.txt
I am name is student QQ is,1238376584
[root@qls ~]# cut -d " " -f3,8 qq.txt
name is,1238376584
[root@qls ~]# cut -d " " -f3,8 qq.txt | tr "," " " #将逗号替换为空格
name is 1238376584
[root@qls ~]# cut -d " " -f3,8 qq.txt | tr "," " " |cut -d " " -f1,3
name 1238376584
[root@qls ~]# tr "," " " qq.txt
tr: extra operand ‘qq.txt’
Try 'tr --help' for more information.
[root@qls ~]# tr "," " " < qq.txt #单独针对文件操作时,必须使用 <
I am name is student QQ is 1238376584
[root@qls ~]# tr "," " " < qq.txt |cut -d " " -f3,9
name 1238376584
[root@qls ~]# tr "a" "1" < qq.txt #将所有的a替换为1
I 1m n1me is student QQ is,1238376584
[root@qls ~]# tr -d "m" <qq.txt #删除m这个字符
I a nae is student QQ is,1238376584
#取出ip地址
[root@qls ~]# 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:ae:0b:8a 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::c653:602a:38c6:e45/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@qls ~]# ip a s eth0 | head -3 |tail -1
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip a s eth0 | grep -w 'inet'
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip a s eth0 | grep -w 'inet' | tr "/" " "
inet 10.0.0.100 24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip a s eth0 | grep -w 'inet' | tr "/" " " |cut -d " " -f6
10.0.0.100
#取出IP地址
[root@qls ~]# ip a s eth0 | grep -w 'inet'
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip a s eth0 | grep -w 'inet' |cut -d " " -f6
10.0.0.100/24
[root@qls ~]# ip a s eth0 | grep -w 'inet' |cut -d " " -f6 | cut -d "/" -f1
10.0.0.100
#取出ip地址
[root@qls ~]# 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::c653:602a:38c6:e45 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:ae:0b:8a txqueuelen 1000 (Ethernet)
RX packets 3484131 bytes 4986775944 (4.6 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 364363 bytes 53078581 (50.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@qls ~]# ifconfig eth0 |grep -w inet
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@qls ~]# ifconfig eth0 |grep -w inet | cut -d " " -f10
10.0.0.100
#取出当前系统登录的用户的次数
[root@qls ~]# w -h
root pts/0 10.0.0.1 19:10 9:03 0.01s 0.01s -bash
root pts/1 10.0.0.1 19:10 9:03 0.00s 0.00s -bash
root pts/2 10.0.0.1 Fri20 3.00s 0.95s 0.00s w -h
[root@qls ~]# w -h | cut -d " " -f1
root
root
root
[root@qls ~]# w -h | cut -d " " -f1 |uniq -c
3 root
[root@qls ~]# w -h | cut -d " " -f1 |uniq -c
3 root
1 test
[root@qls ~]# w
19:21:39 up 6 days, 32 min, 4 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 19:10 43.00s 0.01s 0.01s -bash
root pts/1 10.0.0.1 19:10 11:03 0.00s 0.00s -bash
root pts/2 10.0.0.1 Fri20 3.00s 0.95s 0.00s w
test pts/3 10.0.0.1 19:21 21.00s 0.00s 0.00s -bash
[root@qls ~]# w | more +3
root pts/0 10.0.0.1 19:10 50.00s 0.01s 0.01s -bash
root pts/1 10.0.0.1 19:10 11:10 0.00s 0.00s -bash
root pts/2 10.0.0.1 Fri20 2.00s 0.96s 0.00s w
test pts/3 10.0.0.1 19:21 28.00s 0.00s 0.00s -bash
50. wc
#统计:字节大小,行数,列数,字符长度;#默认显示所有信息
选项:
-l #统计行数
-c #统计总字节大小
-w #统计总列数,默认以空白字符为分隔符,如没有空白字符,则以字符为分隔符
-L #统计最长的一行内容的长度
[root@qls ~]# wc hosts #显示所有的信息,总行数,总列数,总字节大小
2 10 158 hosts
[root@qls ~]# ll hosts
-rw-r--r--. 1 root root 158 Dec 2 19:26 hosts
[root@qls ~]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
[root@qls ~]# wc -l hosts #显示总行数
2 hosts
[root@qls ~]# wc -c hosts #显示总字节大小
158 hosts
[root@qls ~]# wc -w hosts #显示总的列数,默认以空白字符为分隔符
10 hosts
[root@qls ~]# wc -L hosts #统计最长一行的字符数量,长度
78 hosts
[root@qls ~]# name=12423145637892 #定义一个变量
[root@qls ~]# echo $name #打印变量
12423145637892
[root@qls ~]# echo $name |wc -L #统计变量的长度
14
51. sed
#三剑客老二,擅长增删改查
选项:
-n #取消默认输出,默认输出所有
-i #真正的替换
-r #支持扩展正则
等等
内部命令:
p #打印
d #删除
s #替换
g #全局
a #追加
i #插入
; #多条命令的分割
, #表示连续的命令
1.查
[root@qls ~]# sed -n '1p' passwd #打印单行
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# 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@qls ~]# sed -n '1p;3p' passwd #打印不连续的多行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# sed -n '$p' passwd #打印最后一行
ntp:x:38:38::/etc/ntp:/sbin/nologin
[root@qls ~]# sed -n '/root/p' passwd #过滤包含root的行
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# sed -n '/^root/p' passwd #过滤以root开头的行
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# 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@qls ~]# 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
operator:x:11:0:operator:/root:/sbin/nologin
[root@qls ~]# 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
2.删除
[root@qls ~]# sed '1d' passwd #删除第一行
[root@qls ~]# sed '$d' passwd #删除最后一行
[root@qls ~]# sed '1,20d' passwd #删除连续的多行
[root@qls ~]# sed '1d;20d' passwd #删除不连续的多行
[root@qls ~]# sed '/root/d' passwd #删除包含root的行
[root@qls ~]# sed -r '/root|adm/d' passwd #删除不连续的多行
[root@qls ~]# sed '/root/d;/adm/d' passwd #删除不连续的多行
[root@qls ~]# sed '/^root/,/adm/d' passwd #删除以root开头的行到包含adm的行
[root@qls ~]# sed '1,$d' passwd #删除所有
3.增
[root@qls ~]# sed '$aoldboy' sort.log #在文件的最后一行追加oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
[root@qls ~]# sed '1aoldboy' sort.log #在文件的第一行后面追加oldboy
abc/1
oldboy
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@qls ~]# sed '1ioldboy' sort.log #在第一行的前面插入oldboy
oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@qls ~]# sed '$ioldboy' sort.log #在最后一行前面插入oldboy
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
oldboy
fgrf/2
[root@qls ~]# sed '1ioldboy\noldgirl' sort.log #插入多行
oldboy
oldgirl
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
[root@qls ~]# sed '$aoldboy\noldgirl' sort.log #追加多行
abc/1
abd/11
fgrf/2
fger/8
rgrgh/66
fger/8
abd/11
fgrf/2
oldboy
oldgirl
4.替换 sed '行数或者字符串s#旧字符#新字符#g' +文件
[root@qls ~]# cat 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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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@qls ~]# sed 's#root#oldboy#g' passwd #把所有的root替换为oldboy 全局替换
oldboy:x:0:0:oldboy:/oldboy:/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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
[root@qls ~]# sed 's#root#oldboy#' passwd #替换每一行第一个匹配条件的
oldboy: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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
[root@qls ~]# sed '10s#root#oldboy#g' 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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
[root@qls ~]# sed '10,11s#root#oldboy#g' 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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/oldboy:/sbin/nologin
oldboy
[root@qls ~]# sed '$s#root#oldboy#g' 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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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
oldboy
[root@qls ~]# sed '/^root/s#root#oldboy#g' passwd #替换以root开头的行中root替换为oldboy
oldboy:x:0:0:oldboy:/oldboy:/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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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
oldboy
[root@qls ~]# sed '/t$/s#root#oldboy#g' passwd #匹配以t为结尾的进行替换
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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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
oldboy
#后向引用
[root@qls ~]# ip a s eth0 | sed -n '3p'
inet 10.0.0.100/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@qls ~]# ip a s eth0 | sed -n '3p' | sed -r 's#(.*t )(.*)(/.*)#\2#g'
10.0.0.100
[root@qls ~]# ip a s eth0 | sed -nr 's#(.*t )(.*)(/.*)#\2#g'
[root@qls ~]# ip a s eth0 | sed -nr 's#(.*t )(.*)(/.*)#\2#gp' #取出IP
10.0.0.100
[root@qls ~]# ip a s eth0 | sed -nr '3s#(.*t )(.*)(/.*)#\2#gp' #取出IP
10.0.0.100
[root@qls ~]# ip a s eth0 | sed -nr '3s#(.*t )(.*)(/.*)#\1#gp'
inet
[root@qls ~]# 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::c653:602a:38c6:e45 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:ae:0b:8a txqueuelen 1000 (Ethernet)
RX packets 3513032 bytes 5009656842 (4.6 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 380216 bytes 54746433 (52.2 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@qls ~]# ifconfig eth0 | sed -n '2p'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@qls ~]# ifconfig eth0 | sed -n '2p' | sed -r 's#(.*et )(.*)( n.*)#\2#g' #取出IP
10.0.0.100
[root@qls ~]# ifconfig eth0 | sed -nr '2s#(.*et )(.*)( n.*)#\2#gp' #取出IP
10.0.0.100
[root@qls ~]# sed -r 's#(.*)(:x.*:)(/.*)#\3\2\1#g' /etc/passwd #第一列与第七列调换
/bin/bash:x:0:0:root:/root:root
/sbin/nologin:x:1:1:bin:/bin:bin
/sbin/nologin:x:2:2:daemon:/sbin:daemon
52. awk
#取列,计算,统计,数组,循环,判断
-F #指定分割符,默认是以空白字符为分隔符
NR #表示行号
NF #表示每一行的列数
$NF #表示最后一列
$0 #整行内容
$n #n是数字 表示取出哪一列
&& #并且
|| #或者
! #排除
’ #取出连续的
; #多条命令分割
#取行
[root@qls ~]# awk 'NR==1' passwd #取出第一行
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# 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@qls ~]# awk 'NR==1;NR==3' passwd #取出第一行和第三行
root:x:0:0:root:/root:/bin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
[root@qls ~]# awk 'NR>10' passwd #取出大于10行的所有行的的内容
root
[root@qls ~]# awk 'NR<2' passwd #取出小于两行的内容
root:x:0:0:root:/root:/bin/bash
[root@qls ~]# awk 'NR<=2' passwd #小于等于
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
[root@qls ~]# awk 'NR>=10' passwd #大于等于
operator:x:11:0:operator:/root:/sbin/nologin
root
[root@qls ~]# awk 'NR>=1 && NR<=10' 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
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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@qls ~]# awk 'NR>0 && NR<11' passwd #取出大于等于第一行并且小于等于第十行 && 并且
[root@qls ~]# awk 'NR<2 || NR>10' passwd #取出小于2行或者大于10行 || 或者
root:x:0:0:root:/root:/bin/bash
root
[root@qls ~]# 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 root
[root@qls ~]# awk '/root/' passwd #过滤出root的字符串
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
root
[root@qls ~]# awk '/^root/' passwd #过滤出以root开头的字符串
root:x:0:0:root:/root:/bin/bash
root
[root@qls ~]# awk '/root$/' passwd #过滤出以root为结尾的字符串
root
[root@qls ~]# 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
[root@qls ~]# 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
[root@qls ~]# 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@qls ~]# awk 'BEGIN{FS=":"}{print $7}' passwd #取出文件的第七列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
[root@qls ~]# 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@qls ~]# 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@qls ~]# awk -F: '{print $NF}' passwd #取出文件中的每一行的最后一列
/bin/bash
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
/sbin/halt
/sbin/nologin
/sbin/nologin
root
[root@qls ~]# echo 'oldboy:123 oldgirl' >>passwd
[root@qls ~]# awk '{print $2}' passwd |tail -1
oldgirl
[root@qls ~]# awk -F: '{print $2}' passwd |tail -1
123 oldgirl
[root@qls ~]# awk -F '[: ]' '{print $2}' passwd |tail -1 #支持多个分隔符
123
#取出ip地址
[root@qls ~]# 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::c653:602a:38c6:e45 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:ae:0b:8a txqueuelen 1000 (Ethernet)
RX packets 3515748 bytes 5009905896 (4.6 GiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 382062 bytes 54939915 (52.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
[root@qls ~]# ifconfig eth0 |awk 'NR==2'
inet 10.0.0.100 netmask 255.255.255.0 broadcast 10.0.0.255
[root@qls ~]# ifconfig eth0 |awk 'NR==2' |awk '{print $2}'
10.0.0.100
[root@qls ~]# ifconfig eth0 |awk 'NR==2{print $2}'
10.0.0.100
#取出ip地址
[root@qls ~]# 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:ae:0b:8a 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::c653:602a:38c6:e45/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@qls ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]*' '{print $2}'
inet
[root@qls ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]*' '{print $3}'
10.0.0.100
[root@qls ~]# ip a s eth0 | awk 'NR==3' | awk -F '[ /]' '{print $6}'
10.0.0.100
[root@qls ~]# awk 'NR!=1' 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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
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
oldboy:123 oldgirl
[root@qls ~]# awk '!/root/' passwd #排除包含root的字符串
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
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
oldboy:123 oldgirl
[root@qls ~]#
[root@qls ~]# awk -F: '/^root/{print $NF}' passwd #取出满足以root开头的行并且打印出该行的最后一列
/bin/bash
root
[root@qls ~]# awk -F: '/^root/{print $1,$2}' passwd #打印多列内容
root x
root
[root@qls ~]# awk -F: '/^root/{print $3,$1}' passwd #把第三列和第一列倒着显示
0 root
root
#使用awk把第一列与第七列调换
[root@qls ~]# awk -F: '{print $7":"$2":"$3":"$4":"$5":"$6":"$1}' /etc/passwd
[root@qls ~]# awk -F: -vOFS=":" '{a=$1;$1=$NF;$NF=a;print}' /etc/passwd
53. column
#排序文件的格式
-t #以tab键的格式进行对文件内容排序
[root@qls ~]# awk -F: '{print $1,$NF}' /etc/passwd
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
dbus /sbin/nologin
polkitd /sbin/nologin
sshd /sbin/nologin
postfix /sbin/nologin
www /sbin/nologin
nginx /sbin/nologin
apache /sbin/nologin
mysql /sbin/nologin
test /bin/bash
ntp /sbin/nologin
[root@qls ~]# awk -F: '{print $1,$NF}' /etc/passwd |column -t
root /bin/bash
bin /sbin/nologin
daemon /sbin/nologin
adm /sbin/nologin
sshd /sbin/nologin
postfix /sbin/nologin
www /sbin/nologin
nginx /sbin/nologin
apache /sbin/nologin
mysql /sbin/nologin
test /bin/bash
ntp /sbin/nologin
文件属性
54. ln
#创建链接,默认创建硬链接
ln +源文件 +链接文件
-s
[root@qls ~]# ln test.log test.sh #创建硬链接
[root@qls ~]# echo 456 >> test.sh
[root@qls ~]# cat test.log
123
456
[root@qls ~]# rm -f test.log
[root@qls ~]# cat test.sh
123
456
[root@qls ~]# touch test.log
[root@qls ~]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 5 19:58 test.log
[root@qls ~]# ln -s test.log test #相对路径创建
[root@qls ~]# ll
total 0
lrwxrwxrwx. 1 root root 8 Dec 5 19:58 test -> test.log
-rw-r--r--. 1 root root 0 Dec 5 19:58 test.log
[root@qls ~]# ln -s /root/test.log /root/test.txt #绝对路径创建
[root@qls ~]# ll
total 0
lrwxrwxrwx. 1 root root 8 Dec 5 19:58 test -> test.log
-rw-r--r--. 1 root root 0 Dec 5 19:58 test.log
lrwxrwxrwx. 1 root root 14 Dec 5 19:59 test.txt -> /root/test.log
[root@qls ~]# cp -a test.txt /opt/
[root@qls ~]# ll /opt/
total 4481024
-rw-r--r--. 1 root root 4588568576 Dec 3 20:08 CentOS-7-x86_64-DVD-1810.iso
lrwxrwxrwx. 1 root root 14 Dec 5 19:59 test.txt -> /root/test.log
[root@qls ~]# cp -a test /opt/
[root@qls ~]# ll /opt/
total 4481024
-rw-r--r--. 1 root root 4588568576 Dec 3 20:08 CentOS-7-x86_64-DVD-1810.iso
lrwxrwxrwx. 1 root root 8 Dec 5 19:58 test -> test.log #失效
lrwxrwxrwx. 1 root root 14 Dec 5 19:59 test.txt -> /root/test.log
[root@qls ~]# ln -s /root/data/ /opt/data #对目录创建软连接
[root@qls ~]# ll /opt/
total 4481024
-rw-r--r--. 1 root root 4588568576 Dec 3 20:08 CentOS-7-x86_64-DVD-1810.iso
lrwxrwxrwx. 1 root root 11 Dec 5 20:05 data -> /root/data/
lrwxrwxrwx. 1 root root 8 Dec 5 19:58 test -> test.log
lrwxrwxrwx. 1 root root 14 Dec 5 19:59 test.txt -> /root/test.log
[root@qls ~]#
版本升级或回退
#版本升级
[root@qls ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 5 20:04 data
lrwxrwxrwx. 1 root root 10 Dec 5 20:08 nginx -> nginx-1.16
drwxr-xr-x. 2 root root 6 Dec 5 20:07 nginx-1.16
drwxr-xr-x. 2 root root 6 Dec 5 20:07 nginx-1.18
lrwxrwxrwx. 1 root root 8 Dec 5 19:58 test -> test.log
-rw-r--r--. 1 root root 0 Dec 5 19:58 test.log
lrwxrwxrwx. 1 root root 14 Dec 5 19:59 test.txt -> /root/test.log
[root@qls ~]# rm -rf nginx && ln -s nginx-1.18 nginx
[root@qls ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 5 20:04 data
lrwxrwxrwx. 1 root root 10 Dec 5 20:09 nginx -> nginx-1.18
drwxr-xr-x. 2 root root 6 Dec 5 20:07 nginx-1.16
drwxr-xr-x. 2 root root 6 Dec 5 20:07 nginx-1.18
lrwxrwxrwx. 1 root root 8 Dec 5 19:58 test -> test.log
-rw-r--r--. 1 root root 0 Dec 5 19:58 test.log
lrwxrwxrwx. 1 root root 14 Dec 5 19:59 test.txt -> /root/test.log
&& #前面一个命令执行成功,才会执行后面的命令
|| #前面一个命令执行失败,才会执行后面的命令
#版本回退
[root@qls ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 5 20:04 data
lrwxrwxrwx. 1 root root 10 Dec 5 20:09 nginx -> nginx-1.18
drwxr-xr-x. 2 root root 6 Dec 5 20:07 nginx-1.16
drwxr-xr-x. 2 root root 6 Dec 5 20:07 nginx-1.18
lrwxrwxrwx. 1 root root 8 Dec 5 19:58 test -> test.log
-rw-r--r--. 1 root root 0 Dec 5 19:58 test.log
lrwxrwxrwx. 1 root root 14 Dec 5 19:59 test.txt -> /root/test.log
[root@qls ~]# rm -f nginx && ln -s nginx-1.16 nginx
[root@qls ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 5 20:04 data
lrwxrwxrwx. 1 root root 10 Dec 5 20:12 nginx -> nginx-1.16
drwxr-xr-x. 2 root root 6 Dec 5 20:07 nginx-1.16
drwxr-xr-x. 2 root root 6 Dec 5 20:07 nginx-1.18
lrwxrwxrwx. 1 root root 8 Dec 5 19:58 test -> test.log
-rw-r--r--. 1 root root 0 Dec 5 19:58 test.log
lrwxrwxrwx. 1 root root 14 Dec 5 19:59 test.txt -> /root/test.log
55. file
#通过file查看一些文件信息
[root@qls ~]# file test.log
test.log: empty
[root@qls ~]# file test
test: symbolic link to `test.log'
[root@qls ~]# file data
data: directory
[root@qls ~]# file /etc/hosts
/etc/hosts: ASCII text
[root@qls ~]# file /dev/sda
/dev/sda: block special
[root@qls ~]# file /dev/zero
/dev/zero: character special
56. stat
用法:stat [选项]... 文件...
#显示文件或文件系统的状态。
-L #跟随链接
-f #显示文件系统状态而非文件状态
-c #使用指定输出格式代替默认值,每用一次指定格式换一新行
-t #使用简洁格式输出
#有效的文件格式序列 ( 不使用 -f ):
%a #八进制权限
%A #用可读性较好的方式输出权限
%b #计算已分配块数(参见%B)
%B #以字节为单位输出%b 所报告的每个块的大小
%C #SELinux 安全环境字符串
%d #十进制设备编号
%D #十六进制设备编号
%f #十六进制原始模式
%F #文件类型
%g #文件的属组ID
%G #文件的属组组名
%h #硬链接数量
%i #Inode 编号
%m #挂载点
%n #文件名
%N #如果对象是一个符号链接,显示引用到的其它文件名
%o #I/O 块大小
%s #总计大小,以字节为单位
%t #十六进制主设备类型
%T #十六进制子设备类型
%u #文件的属主ID
%U #文件的属主用户名
%w #文件创建时间,若未知则显示"-"
%W #从UNIX 元年起以秒计的文件创建时间,若未知则显示"-"
%x #上次访问时间
%X #从UNIX 元年起以秒计的上次访问时间
%y #上次修改时间
%Y #从UNIX 元年起以秒计的上次修改时间
%z #上次更改时间
%Z #从UNIX 元年起以秒计的上次更改时间
#有效的文件系统格式序列:
%a #非超级用户可用的剩余块数
%b #文件系统的总数据块数
%c #文件系统中文件节点总数
%d #文件系统中空闲文件节点数
%f #文件系统中空闲块数
%i #十六进制文件系统ID
%I #允许的文件名最大长度
%n #文件名
%s #块大小(用于快速传输)
%S #基本块大小(用于块计数)
%t #十六进制类型描述
%T #可读性较好的类型描述
[root@eth0 ~]# stat abc.ph
文件:"abc.ph"
大小:0 块:0 IO 块:4096 普通空文件
设备:801h/2049d Inode:eth00314 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
最近访问:2013-05-14 13:24:30.830729223 +0800
最近更改:2013-05-14 13:24:30.830729223 +0800
最近改动:2013-05-14 13:24:30.830729223 +0800
创建时间:-
[user06@eth0 ~]$ stat -c %a pass.sh #显示pass.sh文件的数字权限
644
#查看文件的详细信息
[root@qls ~]# stat test.log
File: ‘test.log’
Size: 0 Blocks: 0 IO Block: 4096 regular empty file
Device: 803h/2051d Inode: 67157611 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 20:02:10.673489402 +0800 #atime
Modify: 2019-12-05 19:58:41.289496795 +0800 #mtime
Change: 2019-12-05 19:58:41.289496795 +0800 #ctime
#显示目录下面的文件的数字权限
[root@qls ~]# ll test/
total 0
-rwx------. 1 root root 0 Dec 17 17:42 1.txt
-rwx------. 1 root root 0 Dec 17 17:42 2.txt
-rwx------. 1 root root 0 Dec 17 17:42 3.txt
-rwx------. 1 root root 0 Dec 17 17:42 4.txt
-rwx------. 1 root root 0 Dec 17 17:42 5.txt
-rw-r--r--. 1 root root 0 Dec 17 17:43 test.log
[root@qls ~]# stat -c %a test/*
700
700
700
700
700
644
57. hash
#命令缓存表
-d +命令 #删除单个命令的缓存
-r #清空hash缓存表
[root@qls ~]# hash
hits command
75 /usr/bin/grep
1 /usr/bin/egrep
1 /usr/bin/lscpu
2 /usr/bin/hostname
12 /usr/bin/tail
1 /usr/bin/df
10 /usr/bin/more
5 /usr/bin/rz
1 /usr/bin/last
[root@qls ~]# hash -d find #删除单个命令的缓存
[root@qls ~]# hash -r #清空hash缓存表
[root@qls ~]# hash
hash: hash table empty
58. vim
vi vim #文件编辑器
-r +file #恢复之前没有保存的状态
-o +file1 +file2 #水平分割两个文件显示
-O +file1 +file2 #垂直分割两个文件显示
-n +file #n表示数字,编辑文件的时候,快速的到达指定的行
[root@qls ~]# yum install -y vim #安装vim软件包
[root@qls ~]# vim -r passwd #恢复之前没有保存的状态
[root@qls ~]# vim passwd
[root@qls ~]# rm -f .passwd.swp #删除vim编辑时产生的临时文件
[root@qls ~]# vim -o passwd passwd1 #水平分割两个文件显示
2 files to edit
[root@qls ~]# vim -O passwd passwd1 #垂直分割
2 files to edit
[root@qls ~]# vim +10 passwd #编辑文件的时候,快速的到达指定的行
Ctrl + ww #切换分屏
vim工作方式:命令模式、编辑模式、末行模式 、视图模式(扩展)
#命令模式(光标跳转)
h #向左移动一个字符
l #向右移动一个字符
j #向下移动一个字符
k #向上移动一个字符
#移动多个,前面加数字
Ctrl键+左方向键 #向左移动一组字符串
Ctrl键+左方向键 #向右移动一组字符串
^ #将光标移动到当前行的行首
$ #将光标移动到当前行的行尾
shift +w #向后移动一组字符串,达到字符串的和头部。以空白字符为分割符(跳过换行符)
shift +e #向后移动一组字符串,达到字符串的和尾部。以空白字符或者换行符为分割符
gg #光标跳转到文件的行首
G #光标跳转到文件的行尾
W #向后移动字符串,移动到字符串的第一个字符,长跳
w #向后移动字符串,移动到字符串的第一个字符,短跳
E #向后移动字符串,移动到字符串的最后一个字符,长跳
e #向后移动字符串,移动到字符串的最后一个字符,短跳
B #向前移动字符串,移动到字符串的第一个字符,长跳
b #向前移动字符串,移动到字符串的第一个字符,短跳
ngg/nG #n==数字,跳转到指定的某一行
Ctrl键 +f #向下翻页
Ctrl键 +b #向上翻页
回车键 #向下移动一行内容
空格键 #向右移动一个字符
删除键 #向左一个一个字符
yy #复制
nyy #复制多行,从当前行开始操作
p #粘贴剪切板上面的内容,在当前行向下粘贴,粘贴多次,np
P #粘贴剪切板上面的内容,在当前行向上粘贴,粘贴多次,nP
u #撤销,可以无限撤销,必须没有保存的操作
Ctrl键+r #回滚你的撤销操作
D #删除当前光标所在位置及向后的所有内容,针对行操作
de #删除一组字符串,以空白字符或者特殊字符为分隔符
dw #删除一组字符串,以空白字符或者特殊字符为分隔符,会删除分隔符
dd #删除,剪切
ndd #删除或者剪切三行内容,从当前行开始计算
dG #删除或者剪切当前行及向下的所有行
x/delete #从前往后删除一个字符
X #从后往前删除一个字
r #单对单的替换
R #替换多个,只能替换连续的字符
~ #让当前的字符变成大写
>> #向右移动一个缩进
<< #向左移动一个缩进
== #取消缩进
J #将当前行和下一行变成一行
ZZ #保存退出
#编辑模式
Esc键 #退出编辑模式,进入到命令模式
i #在当前光标前插入内容
a #在当前光标后插入内容
I #光标快速的移动到行首,并进入编辑模式,在当前光标前插入内容
A #光标快速的移动到行尾,并进入编辑模式,在当前光标后插入内容
ce #删除当前字符串,光标在字符串的首个字母,并进入编辑模式
cw #删除当前字符串,光标在字符串的首个字母,并进入编辑模式,会把特殊字符当做是字符串
C #删除当前光标所在位置及向后的所有内容,并进入编辑模式,针对行的操作
o #在当前行的下一行另起一行,并进入编辑模式
O #在当前行的上一行另起一行,并进入编辑模式
s #删除当前光标所在的字符,并进入编辑模式
S #删除当前行,并进入编辑模式
cc #删除当前行,并进入编辑模式
#末行模式(保存退出)
:q #退出不保存
:wq #保存退出
:q! #强制退出
:wq! #强制保存退出
:w #保存不退出
:x #保存退出
#光标操作
:n #跳转到指定的行
:nd #删除指定的行
:n,md #删除连续的多行, n 数字 m 数字 n < m
#搜索内容
/root #向下搜索的指定的字符串
n #向下查找
N #向上查找
/root\c #搜索的时候忽略大小写
?root #向上搜索
#替换
:%s#root#oldboy#g #全局替换
:%s#root#oldboy# #替换每一行的第一个匹配的字符
:s#root#oldboy# #替换第一个匹配的字符串
:1s#root#oldboy#g #替换指定行的匹配的字符串
:1,10s#root#oldboy#g #替换第一行到第十行所有匹配的字符串
:%s#root#oldboy#gi #替换的时候忽略大小写
#将文件内容保存到一个新的文件
:w /path #将文件内容保存到指定的新的文件中
#读入文件
:r /path #将一个文件的所有写入到当前文件的当前行下面
:$r /path #将一个文件的所有写入到当前文件的最下面
:0r /path #将一个文件的所有写入到当前文件的最上面
:nr /path #将一个文件的所有写入到当前文件的指定行下面
:1 copy 10 #将第一行复制到第十行的后面
:1,3 copy 10 #将第一行到第三行复制到第十行的后面
:1 move 10 #将第一行移动到第十行的后面
:sh #进入命令行进行命令,返回使用Ctrl+d 或者 exit
#视图模式(可视行、可视块)
#可视行
先将光标移动到要操作的行
shift+v #进入可视行的模式
光标选中你要操作的所有行
y #复制
d/x #删除
#可视块
#批量添加
将光标移动到要操作的行,并且是要操作的字符上面
Ctrl+v #进入可视块模式
使用方向键进行选中要操作的行
shift + i #进入编辑模式
编辑内容 按esc退出
#批量删除
将光标移动到要操作的行,并且是要操作的字符上面
Ctrl+v #进入可视块模式
使用方向键进行选中要操作的行或者字符,块
d/x #删除
#Vim变量
:set nu #显示行号
:set list #给每一行的结尾加上制表符
:set ic #搜索忽略大小写
:noh #取消高亮
:set nonu #取消显示行号
:set nolist #取消显示制表符
:set noic #取消忽略大小写
#两个配置文件,个人的优先级高于全局的
~/.vimrc #个人用户的vim配置文件
/etc/vimrc #全局vim配置文件
60. diff
#默认的文件比对 (不推荐使用)
[root@qls ~]# diff passwd passwd1
1c1
< rhgiutgroot:x:0:0:root:/root:/bin/bash
---
> root:x:0:0:root:/root:/bin/bash
3c3
< rgutrhnoifjgbosfiddddddvbjklndaemon:x:2:2:daemon:/sbin:/sbin/nologin
---
> daemon:x:2:2:daemon:/sbin:/sbin/nologin
25d24
< ROOT
61. vimdiff
#vim文件对比
[root@qls ~]# vimdiff passwd passwd1 #不同之处会高亮显示
用户管理
62. md5sum
#设置指纹
-c #检查文件是否改变
[root@qls ~]# md5sum passwd #给重要的一些文件设置指纹
3fae271737b5fba20b893cedf92afa39 passwd
[root@qls ~]# md5sum passwd
3fae271737b5fba20b893cedf92afa39 passwd
[root@qls ~]# md5sum passwd > finger.txt #将文件的指纹信息保存到一个文件中
[root@qls ~]#
[root@qls ~]# cat finger.txt
3fae271737b5fba20b893cedf92afa39 passwd
[root@qls ~]# md5sum -c finger.txt #检查文件是否变化 ,OK表示没有改变
passwd: OK
[root@qls ~]# echo 1 >> passwd
[root@qls ~]# md5sum -c finger.txt #表示文件已经被修改
passwd: FAILED
md5sum: WARNING: 1 computed checksum did NOT match
63. id
#显示当前登录的用户信息
[root@qls ~]# id #显示当前登录的用户信息
uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[root@qls ~]# id adm #显示指定用户的信息
uid=3(adm) gid=4(adm) groups=4(adm)
64. useradd
#创建用户,默认创建的是普通用户
-u #指定用户的UID
-g #指定用户组,写组名或者组的ID,基本组
-G #指定附加组,多个使用逗号分隔
-c #添加注释信息
-r #创建系统用户,不创建家目录
-M #不创建家目录
-d #指定家目录的位置,目录要是不存在
-s #指定用户的命令解释器
[root@qls ~]# useradd user01 #创建用户
[root@qls ~]# id user01
uid=1001(user01) gid=1001(user01) groups=1001(user01)
[root@qls ~]# grep 'user01' /etc/passwd
user01:x:1001:1001::/home/user01:/bin/bash
[root@qls ~]# useradd -u888 -c "测试用户" -d /opt/user02 user02
[root@qls ~]# id user02
uid=888(user02) gid=1002(user02) groups=1002(user02)
[root@qls ~]# grep 'user02' /etc/passwd
user02:x:888:1002:测试用户:/opt/user02:/bin/bash
[root@qls ~]# ll /opt/
drwx------. 2 user02 user02 62 Dec 12 18:36 user02
[root@qls ~]# useradd -r -s /sbin/nologin user04
[root@qls ~]# grep 'user04' /etc/passwd
user04:x:664:663::/home/user04:/sbin/nologin
[root@qls ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
[root@qls ~]# useradd -M -s /sbin/nologin user05
[root@qls ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
[root@qls ~]# grep 'user05' /etc/passwd
user05:x:2000:2000::/home/user05:/sbin/nologin
65. usermod
#修改用户
-u #修改uid信息
-g #修改基本组的id,GID
-a #添加附加组,不能单独添加,-G配合
-G #修改附加组,会将附加组的覆盖
-aG #追加
-m #迁移家目录
-d #修改家目录
-c #修改注释信息
-s #修改命令解释器
-l #修改用户的名称
-L #锁定用户
-U #解锁用户
[root@qls ~]# usermod -u1010 -c "test" -s /bin/bash user05
[root@qls ~]# grep 'user05' /etc/passwd
user05:x:1010:2000:test:/home/user05:/bin/bash
[root@qls ~]# usermod -md /home/user02 user02
[root@qls ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
drwx------. 2 user02 user02 62 Dec 12 18:36 user02
[root@qls ~]# usermod -l oldboy user05 #修改名称
[root@qls ~]# id user05
id: user05: no such user
[root@qls ~]# id oldboy
uid=1010(oldboy) gid=2000(user05) groups=2000(user05)
[root@qls ~]# grep 'oldboy' /etc/passwd
oldboy:x:1010:2000:test:/home/user05:/bin/bash
[root@qls ~]# usermod -L test #锁定用户
[root@qls ~]# usermod -U test #解锁用户
66. userdel
#删除用户
-r #删除用户的家目录及邮件信息
[root@qls ~]# userdel user02 #默认不删除家目录和邮件信息
[root@qls ~]# grep 'user02' /etc/passwd
[root@qls ~]# id user02
id: user02: no such user
[root@qls ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 user01 user01 62 Dec 12 18:29 user01
drwx------. 2 888 1002 62 Dec 12 18:36 user02
[root@qls ~]# userdel -r user01 #删除跟用户相关的所有信息
[root@qls ~]# ll /home/
total 0
drwx------. 2 test test 62 Nov 27 19:57 test
drwx------. 2 888 1002 62 Dec 12 18:36 user02
67. w
#显示当前系统的状态信息及用户的登录信息,平均负载
[root@qls ~]# w #显示当前系统的状态信息及用户的登录信息
16:39:28 up 14 days, 21:50, 2 users, load average: 0.00, 0.01, 0.05
USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
root pts/0 10.0.0.1 Thu16 0.00s 0.25s 0.23s -bash
test pts/1 10.0.0.1 Thu19 21:31m 0.01s 0.01s -bash
68. uptime
#显示系统状态及用户的登录终端的数量,平均负载
[root@qls ~]# uptime #显示系统状态及用户的登录终端的数量
16:39:50 up 14 days, 21:50, 2 users, load average: 0.00, 0.01, 0.05
[root@qls ~]#
69. who
#显示当前登录的用户信息
[root@qls ~]# who #显示当前登录的用户信息
root pts/0 2019-12-12 16:00 (10.0.0.1)
test pts/1 2019-12-12 19:08 (10.0.0.1)
70. passwd
#设置密码
--stdin +用户名
#设置密码(交互式)
[root@qls ~]# 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@qls ~]# passwd user06 #设置其他用户的密码,密码也是可以随意设置
Changing password for user user06.
New password:
BAD PASSWORD: The password is a palindrome
Retype new password:
passwd: all authentication tokens updated successfully.
#注意:只有root用户才能修改其他用户的密码,普通用户只能修改自己的密码
[C:\~]$ ssh user06@10.0.0.100 #测试用户密码登录
Connecting to 10.0.0.100:22...
Connection established.
To escape to local shell, press 'Ctrl+Alt+]'.
WARNING! The remote SSH server rejected X11 forwarding request.
Last login: Fri
[user06@qls ~]$ passwd #普通用户只能设置自己的密码,密码最少是8位,并且是无序的密码
Changing password for user user06.
Changing password for user06.
(current) UNIX password: #输入旧的密码
New password: #输出新的密码
Retype new password: #确认新的密码
Sorry, passwords do not match.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.
[user06@qls ~]$ passwd user03 #不能设置别的用户密码
passwd: Only root can specify a user name.
[user06@qls ~]$ passwd user06
passwd: Only root can specify a user name.
#免交互式设置密码
将密码信息显示出来 通过管道交给后面的命令 标准输出 --stdin 用户名
[root@qls ~]# echo '123' | passwd --stdin user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.
#设置随机密码
[root@qls ~]# echo $RANDOM | md5sum |cut -c 1-10 | tee pass.txt | passwd --stdin user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.
[root@qls ~]# cat pass.txt
c5b795e212
71. tee
#将内容输出屏幕上方的同时也会将内容保存到指定文件当中
-a #追加
[root@qls ~]# echo $RANDOM | md5sum |cut -c 1-10 | tee -a pass.txt | passwd --stdin user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.
[root@qls ~]# cat pass.txt
c5b795e212
f136b51b96
管道技术中的tee技术
作用:将输出结果输出到屏幕的同时,也会输出到一个指定的文件中
-a #追加
[root@qls ~]# ip a s eth0 | grep -w inet | cut -d " " -f6 | cut -d "/" -f1 | tee ip.txt
10.0.0.100
[root@qls ~]# cat ip.txt
10.0.0.100
[root@qls ~]# ip a s eth0 | grep -w inet | cut -d " " -f6 | cut -d "/" -f1 > ip.txt
[root@qls ~]# cat ip.txt
10.0.0.100
[root@qls ~]# echo $RANDOM|md5sum | cut -c 1-10
2139cee1fc
[root@qls ~]# echo $RANDOM|md5sum | cut -c 1-10 |passwd --stdin user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.
[root@qls ~]# echo $RANDOM|md5sum | cut -c 1-10 |tee pass.txt |passwd --stdin user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.
[root@qls ~]# echo $RANDOM|md5sum | cut -c 1-10 |tee |passwd --stdin user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.
[root@qls ~]# echo $RANDOM|md5sum | cut -c 1-10 |tee pass.txt
c3d3da1a5e
[root@qls ~]# echo $RANDOM|md5sum | cut -c 1-10 |tee -a pass.txt
a026eeb93c
[root@qls ~]# cat pass.txt
c3d3da1a5e
a026eeb93c
72. mkpasswd
#生成一个随机密码,要求是由大小写字母、数字及特殊符号组成的
[root@qls ~]# yum install -y expect #下载软件包
-l #指定密码的位数
-c #指定小写字母的位数
-C #指定大写字母的位数
-d #指定数字的位数
-s #指定特殊的符号的位数
[root@qls ~]# mkpasswd -l 24 #指定一个24位密码
w)ztysepy5bqyioresmDLe1b
[root@qls ~]# mkpasswd -l 24 -c 6 -C 6 -s 6 -d 6 #指定一个24位密码,包含大小写字母、数字及特殊符号
1}z3UNM1IT5x&r@~/;pGj60z
[root@qls ~]# mkpasswd -l 12 -s 3 -d 3 -c 3 -C 3 | tee pass.txt | passwd --stdin user06
Changing password for user user06.
passwd: all authentication tokens updated successfully.
73. seq
#生成序列,用于产生从某个数到另外一个数之间的所有整数
-f, --format=格式 #使用printf 样式的浮点格式
-s, --separator=字符串 #使用指定字符串分隔数字(默认使用:\n)
-w, --equal-width #在列前添加0 使得宽度相同
[root@eth0 ~]# seq 5
1
2
3
4
5
[root@eth0 ~]# seq -f "%3g" 5 7 # %后面指定数字的位数,默认是%g,%3g那么数字位数不足部分是空格
5
6
7
[root@eth0 ~]# seq -f "%03g" 5 7 # 数字位数不足部分是0
005
006
007
[root@eth0 ~]# seq -f "str%03g" 5 7 # %前面指定字符串
str005
str006
str007
[root@eth0 ~]# seq -f "123%03g" 5 7 # %前面指定字符串
123005
123006
123007
[root@eth0 ~]# seq -f "useradd wan%02g" 1 10
useradd wan01
useradd wan02
useradd wan03
useradd wan04
useradd wan05
useradd wan06
useradd wan07
useradd wan08
useradd wan09
useradd wan10
[root@eth0 ~]# seq -f "useradd wan%02g" 1 10 |bash
[root@eth0 ~]# ll /home
total 0
drwx------. 2 user06 user 83 Dec 16 11:01 user06
drwx------. 2 user07 user 62 Dec 16 10:03 user07
drwx------. 2 wan01 wan01 62 Dec 16 14:16 wan01
drwx------. 2 wan02 wan02 62 Dec 16 14:16 wan02
drwx------. 2 wan03 wan03 62 Dec 16 14:16 wan03
drwx------. 2 wan04 wan04 62 Dec 16 14:16 wan04
drwx------. 2 wan05 wan05 62 Dec 16 14:16 wan05
drwx------. 2 wan06 wan06 62 Dec 16 14:16 wan06
drwx------. 2 wan07 wan07 62 Dec 16 14:16 wan07
drwx------. 2 wan08 wan08 62 Dec 16 14:16 wan08
drwx------. 2 wan09 wan09 62 Dec 16 14:16 wan09
drwx------. 2 wan10 wan10 62 Dec 16 14:16 wan10
[root@eth0 ~]# seq -f "userdel -r wan%02g" 1 10 |bash
[root@eth0 ~]# ll /home
total 0
drwx------. 2 user06 user 83 Dec 16 11:01 user06
drwx------. 2 user07 user 62 Dec 16 10:03 user07
[root@eth0 ~]#
[root@eth0 ~]# seq -w 3 #指定输出数字同宽(不能和-f一起用,输出是同宽的)
01
02
03
[root@eth0 ~]#
[root@eth0 ~]# seq -f "str%03g" 9 11 #默认分隔符 回车
str009
str010
str011
[root@eth0 ~]#
[root@eth0 ~]# seq -s " " -f "str%03g" 9 11 #指定分隔符(默认是回车)
str009 str010 str011
[root@eth0 ~]#
[root@eth0 ~]# seq -s "`echo -e "\t"`" -f "str%03g" 9 11 #指定\t做为分隔符号
str009 str010 str011
[root@eth0 ~]# seq -s "`echo -e "\n"`" -f "str%03g" 9 11 #指定\n作为分隔符号,会得到错误的结果不过一
str009str010str011 般也没有这个必要,它默认的就是回车作 [root@eth0 ~]# 为分隔符。
74. last
#查看用户历史登录信息,主要用于显示用户最近登录信息。单独执行last命令,它会读取/var/log/wtmp的文件,并把该给文件的内容记录的登入系统的用户名单全部显示出来。
last +(选项) +(参数)
选项:
-a #把从何处登入系统的主机名称或ip地址,显示在最后一行;
-d #将IP地址转换成主机名称;
-f <记录文件> #指定记录文件。
-n <显示列数>或-<显示列数> #设置列出名单的显示列数;
-R #不显示登入系统的主机名称或IP地址;
-x #显示系统关机,重新开机,以及执行等级的改变等信息。
-t tty #只显示指定的虚拟控制台上登录情况。
-h 节点 #只显示指定的节点上的登录情况。
-i IP #只显示指定的IP上登录的情况。
-l #用IP来显示远端地址。
-y/-F #显示记录的年、月、日。 #内核 2.6.32-431.el6.x86_64 -y 已经被 -F 替换
-ID #知道查询的用户名。
参数:
用户名:显示用户登录列表;
终端:显示从指定终端的登录列表。
[root@eth0 ~]# last #显示全部用户登录情况
root pts/0 10.0.0.1 Mon Dec 16 11:01 still logged in
root pts/0 10.0.0.1 Fri Dec 13 18:01 - 11:51 (17:50)
user01 pts/1 10.0.0.1 Fri Dec 13 15:58 - 15:58 (00:00)
liu1 pts/1 10.0.0.1 Fri Dec 13 15:23 - 15:36 (00:13)
root pts/0 10.0.0.1 Thu Dec 12 18:40 - 18:42 (00:02)
reboot system boot 3.10.0-957.el7.x Thu Dec 12 18:14 - 14:34 (3+20:20)
wtmp begins Thu Dec 12 18:14:46 2019
[root@eth0 ~]#
[root@eth0 ~]# last -5 #显示固定行数的记录
root pts/0 10.0.0.1 Mon Dec 16 11:01 still logged in
root pts/1 10.0.0.1 Mon Dec 16 08:38 - 11:01 (02:23)
root pts/1 10.0.0.1 Mon Dec 16 08:20 - 08:37 (00:17)
w pts/2 10.0.0.1 Sun Dec 15 12:09 - 12:10 (00:00)
root pts/0 10.0.0.1 Sun Dec 15 11:55 - 10:31 (22:35)
wtmp begins Thu Dec 12 18:14:46 2019
[root@eth0 ~]#
[root@eth0 ~]# last -6 #6条登录记录
[root@eth0 ~]# last –n 15 #15登录记录
[root@eth0 ~]# last -n 10 zhangy #输出10条zhangy的登录记录
75. lastlog
#显示系统中所有用户最近一次登录信息;lastlog文件在每次有用户登录时被查询。可以使用lastlog命令检查某特定用户上次登录的时间,并格式化输出上次登录日志/var/log/lastlog的内容。它根据UID排序显示登录名、端口号(tty)和上次登录时间。如果一个用户从未登录过,lastlog显示**Never logged**。注意需要以root身份运行该命令。
语法:
lastlog(选项)
选项:
-b<天数> #显示指定天数前的登录信息;
-h #显示召集令的帮助信息;
-t<天数> #显示指定天数以来的登录信息;
-u<用户名> #显示指定用户的最近登录信息。
[root@eth0 ~]# lastlog #显示系统中所有用户最近一次登录信息
Username Port From Latest
root pts/0 10.0.0.1 Mon Dec 16 11:01:46 +0800 2019
bin **Never logged in**
daemon **Never logged in**
adm **Never logged in**
lp **Never logged in**
sync **Never logged in**
shutdown **Never logged in**
halt **Never logged in**
mail **Never logged in**
operator **Never logged in**
games **Never logged in**
ftp **Never logged in**
nobody **Never logged in**
systemd-network **Never logged in**
dbus **Never logged in**
polkitd **Never logged in**
sshd **Never logged in**
postfix **Never logged in**
user06 pts/1 Mon Dec 16 10:45:28 +0800 2019
user07 **Never logged in**
[root@eth0 ~]#
76. uname
#打印当前系统相关信息(内核版本号、硬件架构、主机名称和操作系统类型等)
-a或--all #显示全部的信息
-m或--machine #显示电脑类型
-n或-nodename #显示在网络上的主机名称
-r或--release #显示操作系统的发行编号
-s或--sysname #显示操作系统名称
-v #显示操作系统的版本
-p或--processor #输出处理器类型或"unknown"
-i或--hardware-platform #输出硬件平台或"unknown"
-o或--operating-system #输出操作系统名称
--help #显示帮助
--version #显示版本信息
[root@eth0 ~]# uname -a
Linux eth0 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
[root@eth0 ~]#
77. pstree
#以树状图的方式展现进程之间的派生关系,显示效果比较直观
-a #显示每个程序的完整指令,包含路径,参数或是常驻服务的标示;
-c #不使用精简标示法;
-G #使用VT100终端机的列绘图字符;
-h #列出树状图时,特别标明现在执行的程序;
-H<程序识别码> #此参数的效果和指定"-h"参数类似,但特别标明指定的程序;
-l #采用长列格式显示树状图;
-n #用程序识别码排序。预设是以程序名称来排序;
-p #显示程序识别码;
-u #显示用户名称;
-U #使用UTF-8列绘图字符;
-V #显示版本信息。
root@eth0 ~]# 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}
[root@eth0 ~]# pstree -p #显示当前所有进程的进程号和进程id
systemd(1)─┬─NetworkManager(6405)─┬─{NetworkManager}(6451)
│ └─{NetworkManager}(6454)
├─VGAuthService(6315)
├─auditd(6293)───{auditd}(6294)
├─crond(6328)
├─dbus-daemon(6316)───{dbus-daemon}(6317)
├─firewalld(6375)───{firewalld}(6680)
├─login(6331)───bash(7114)
├─master(6941)─┬─pickup(26067)
│ └─qmgr(6946)
├─polkitd(6318)─┬─{polkitd}(6363)
│ ├─{polkitd}(6364)
│ ├─{polkitd}(6365)
│ ├─{polkitd}(6366)
│ ├─{polkitd}(6367)
│ └─{polkitd}(6370)
├─rsyslogd(6854)─┬─{rsyslogd}(6887)
│ └─{rsyslogd}(6894)
├─sshd(6853)───sshd(25823)───bash(25827)───pstree(26081)
├─systemd-journal(2955)
├─systemd-logind(6322)
├─systemd-udevd(2986)
├─tuned(6851)─┬─{tuned}(7092)
│ ├─{tuned}(7093)
│ ├─{tuned}(7094)
│ └─{tuned}(7108)
└─vmtoolsd(6321)───{vmtoolsd}(6373)
[root@eth0 ~]#
用户组的管理
78. groupadd
#添加组,组的信息将被添加到系统文件中
-g #指定组的gid
-r #创建系统组
groupadd +(选项) +(参数)
选项:
-g #指定新建工作组的id;
-r #创建系统工作组,系统工作组的组ID小于500;
-K #覆盖配置文件“/ect/login.defs”;
-o #允许添加组ID号不唯一的工作组。
参数:
组名:指定新建工作组的组名。
[root@eth0 ~]# groupadd user01 #添加组user01
[root@eth0 ~]# grep 'user01' /etc/group #过滤user01组信息
user01:x:1000:
[root@eth0 ~]# groupadd -g 2018 user02 #指定组的gid
[root@eth0 ~]# grep 'user02' /etc/group
user02:x:2018:
[root@eth0 ~]# groupadd -r user03 #创建系统组user03
[root@eth0 ~]# groupadd -r user04
[root@eth0 ~]# grep 'user03' /etc/group
user03:x:996:
[root@eth0 ~]# grep 'user04' /etc/group
user04:x:995:
[root@eth0 ~]#
#注意:先创建组,然后创建用户时指定到该组
[root@eth0 ~]# groupadd user
[root@eth0 ~]# useradd -g user user06
[root@eth0 ~]# useradd -g user user07
[root@eth0 ~]# id user06
uid=1000(user06) gid=2020(user) groups=2020(user)
[root@eth0 ~]# id user07
uid=1001(user07) gid=2020(user) groups=2020(user)
[root@eth0 ~]#
79. groupmod
#修改组的信息
groupmod(选项)(参数)
选项
-g #修改gid
-o #重复使用gid
-n #组名称
参数
组名:指定要修改的工作的组名。
[root@eth0 ~]# groupmod -g 20 19 user01 #修改user01组的gid
[root@eth0 ~]# grep 'user01' /etc/group
user01:x:2019:
[root@eth0 ~]# groupmod -n user05 user01 #把user01组名改成user05
[root@eth0 ~]# grep 'user01' /etc/group
[root@eth0 ~]# grep 'user' /etc/group
users:x:100:
user02:x:2018:
user03:x:996:
user04:x:995:
user05:x:2019:
[root@eth0 ~]#
80. groupdel
#删除组,可以删除没有用户作为主组的组,如果只是附加组,删除时不会提示
groupdel +(参数)
参数
组:要删除的工作组名。
[root@qls ~]# groupdel user10 #删除user10组
[root@qls ~]# grep 'user10' /etc/group
[root@qls ~]# grep 'web' /etc/group
oldboy1:x:2002:web
web:x:2015:
[root@qls ~]# groupdel web #删除web组
groupdel: cannot remove the primary group of user 'web'
[root@qls ~]# usermod -g user03 web #修改web组gid
[root@qls ~]# groupdel web
81. su
su 用户名 #切换时,加载的环境变量的配置文件不一样,只切换了用户的身份,没有切换环境
su - 用户名 #切换用户身份的同时,也切换了环境(/etc/profile)
su -c 用户名 #以其他用户的身份执行命令
[root@eth0 ~]# su - #默认切换到root用户
Last login: Mon Dec 16 08:38:43 CST 2019 on pts/1
[root@eth0 ~]#
[root@eth0 ~]# su - user06 #切换到用户user06
[user06@eth0 ~]$
[user06@eth0 ~]$ su - user07
Password:
Last login: Mon Dec 16 10:43:36 CST 2019 on pts/1
[root@eth0 ~]#
[root@qls ~]# su - test -c "pwd" #以其他用户的身份执行命令
/home/test
[user@qls ~]$ su - root -c "useradd qwe" # 不切换成 root ,但是执行 useradd 命令添加 qwe 用户
#root用户切换到普通用户时,是不需要输入密码的
#而普通用户切换切换到其他用户时,是需要输入密码的
82. sudo、visudo
#授权用户,针对某一个命令的权限,让一个普通用户拥有一次做皇帝的机会
-l #显示拥有root权限的命令
只有root用户才能配置/etc/sudoers
visudo #配置sudo权限 ==== vi /etc/sudoers
#把test10用户添加到wheel组, wheel组,系统日志管理
[root@qls ~]# useradd test10 -G wheel
[root@qls ~]# id test
uid=1000(test) gid=1000(test) groups=1000(test)
[root@qls ~]# echo '1' | passwd --stdin test10
[test10@qls ~]$ sudo -l
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 test10: #需要输入密码,输入普通用户的密码
Matching Defaults entries for test10 on qls:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User test10 may run the following commands on qls:
(ALL) ALL
[test10@qls ~]$ rm -rf /opt/
rm: cannot remove ‘/opt/CentOS-7-x86_64-DVD-1810.iso’: Permission denied
[test10@qls ~]$ sudo rm -rf /opt
[test10@qls ~]$ ll /opt
ls: cannot access /opt: No such file or directory
#限制权限
[root@qls ~]# useradd dev01
[root@qls ~]# echo '1' |passwd --stdin dev01
[root@qls ~]# visudo
dev01 ALL=(ALL) /bin/cat
[root@qls ~]# su - dev01
[dev01@qls ~]$ sudo -l
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 dev01:
Matching Defaults entries for dev01 on qls:
User dev01 may run the following commands on qls:
(ALL) /bin/cat
[dev01@qls ~]$ cat /var/log/secure
cat: /var/log/secure: Permission denied
[dev01@qls ~]$ sudo cat /var/log/secure | tail -1
Dec 16 18:38:48 qls sudo: pam_unix(sudo:session): session opened for user root by root(uid=0)
#visudo设置语法
dev01 ALL=(ALL) /bin/cat,/bin/yum
用户 主机=角色 命令 多个使用,分割 /bin/* 表示/bin、目录的下的所有命令
dev01 ALL=(ALL) NOPASSWD: /bin/*
无密码执行命令
[root@qls ~]# visudo -c #检查语法
/etc/sudoers: parsed OK
dev02 ALL=(ALL) NOPASSWD: /bin/cat /var/log/* (#只能针对某些目录操作)
#sudo设置组的两种方法:
第一种:visudo认可的组,不是真实系统组
User_Alias DEV = dev01,dev02 #组的别名
Cmnd_Alias READ = /bin/cat #命令的别名
DEV ALL=(ALL) NOPASSWD: READ #授权
[root@qls ~]# su - dev01
Last login: Mon Dec 16 18:49:15 CST 2019 on pts/0
[dev01@qls ~]$ sudo -l
Matching Defaults entries for dev01 on qls
User dev01 may run the following commands on qls:
(ALL) NOPASSWD: /bin/cat
[dev01@qls ~]$ logout
[root@qls ~]# su - dev02
Last login: Mon Dec 16 18:51:27 CST 2019 on pts/0
[dev02@qls ~]$ sudo -l
Matching Defaults entries for dev02 on qls
User dev02 may run the following commands on qls:
(ALL) NOPASSWD: /bin/cat
第二种:真实的组
[root@qls ~]# groupadd dev
[root@qls ~]# usermod -g dev dev01
[root@qls ~]# usermod -g dev dev02
#visudo设置
%dev ALL=(ALL) NOPASSWD: READ,SOFTWARE
#验证
[root@qls ~]# su - dev01
Last login: Mon Dec 16 19:02:20 CST 2019 on pts/0
[dev01@qls ~]$ sudo -l
Matching Defaults entries for dev01 on qls:
User dev01 may run the following commands on qls:
(ALL) NOPASSWD: /bin/cat, /bin/rpm, /usr/bin/up2date, /usr/bin/yum
#案例:禁止root用户远程登录,使用普通用户进行远程登录,免密的切换到root。
#进行配置root禁止远程登录
[root@qls ~]# vim /etc/ssh/sshd_config
38 PermitRootLogin no
#重启对应的服务
[root@qls ~]# systemctl restart sshd
#创建普通用户
[root@qls ~]# useradd yuwei
[root@qls ~]# echo '1' | passwd --stdin yuwei
#visuod设置
yuwei ALL=(ALL) NOPASSWD: /bin/su
#使用普通用户登录
[C:\~]$ ssh yuwei@10.0.0.100
[yuwei@qls ~]$ sudo -l
Matching Defaults entries for yuwei on qls:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User yuwei may rn the following commands on qls:
(ALL) NOPASSWD: /bin/su
[yuwei@qls ~]$ sudo su -
Last login: Mon Dec 16 19:12:25 CST 2019 on pts/0
[root@qls ~]#
#sudo配置文件/etc/sudoers详解及实战用法:
http://blog.csdn.net/field_yang/article/details/51547804
一、sudo执行命令的流程
将当前用户切换到超级用户下,或切换到指定的用户下,
然后以超级用户或其指定切换到的用户身份执行命令,执行完成后,直接退回到当前用户。
具体工作过程如下:
当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
-->确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
-->若密码输入成功,则开始执行sudo后续的命令
二、不需要输入密码的情况
1.root执行sudo时不需要输入密码(eudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
2.欲切换的身份与执行者的身份相同,不需要输入密码
3./etc/sudoers文件设置为允许用户在不输入该用户的密码的情况下使用所有命令
如设置允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
( %wheel ALL=(ALL) NOPASSWD: ALL)
三、/etc/sudoers文件解释
[root@test ~]# cat /etc/sudoers
## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##该文件允许特定用户像root用户一样使用各种各样的命令,而不需要root用户的密码
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
## 在文件的底部提供了很多相关命令的示例以供选择,这些示例都可以被特定用户或
## ## 用户组所使用
## This file must be edited with the 'visudo' command.
## 该文件必须使用"visudo"命令编辑
## Host Aliases
#主机别名
## Groups of machines. You may prefer to use hostnames (perhap using
## wildcards for entire domains) or IP addresses instead.
## 对于一组服务器,你可能会更喜欢使用主机名(可能是全域名的通配符)
## 或IP地址代替,这时可以配置主机别名
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases
#用户别名
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
## 这并不很常用,因为你可以通过使用组来代替一组用户的别名
# User_Alias ADMINS = jsmith, mikem
## Command Aliases
## These are groups of related commands...
## 指定一系列相互关联的命令(当然可以是一个)的别名,通过赋予该别名sudo权限,
## 可以通过sudo调用所有别名包含的命令,下面是一些示例
## Networking
#网络操作相关命令别名
Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient,
/usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig,
/sbin/mii-tool
## Installation and management of software
#软件安装管理相关命令别名
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
#服务相关命令别名
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
## Updating the locate database
#本地数据库升级命令别名
Cmnd_Alias LOCATE = /usr/sbin/updatedb
## Storage
#磁盘操作相关命令别名
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
#代理权限相关命令别名
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
#进程相关命令别名
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
#驱动命令别名
Cmnd_Alias DRIVERS = /sbin/modprobe
#环境变量的相关配置
# Defaults specification
#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
# You have to run "ssh -t hostname sudo <cmd>".
#
Defaults requiretty
Defaults env_reset
Defaults env_keep = "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR \
LS_COLORS MAIL PS1 PS2 QTDIR USERNAME \
LANG LC_ADDRESS LC_CTYPE LC_COLLATE LC_IDENTIFICATION \
LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC \
LC_PAPER LC_TELEPHONE LC_TIME LC_ALL LANGUAGE LINGUAS \
_XKB_CHARSET XAUTHORITY"
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## 下面是规则配置:什么用户在哪台服务器上可以执行哪些命令(sudoers文件可以在多个系统上共享)
## Syntax:
##语法
## user MACHINE=COMMANDS
## 用户 登录的主机=(可以变换的身份) 可以执行的命令
##
## The COMMANDS section may have other options added to it.
## 命令部分可以附带一些其它的选项
##
## Allow root to run any commands anywhere
## 允许root用户执行任意路径下的任意命令
root ALL=(ALL) ALL
## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS
## 允许sys中户组中的用户使用NETWORKING等所有别名中配置的命令
## Allows people in group wheel to run all commands
# %wheel ALL=(ALL) ALL
## 允许wheel用户组中的用户执行所有命令
## Same thing without a password
## 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
# %wheel ALL=(ALL) NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
## 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令
# %users ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
## Allows members of the users group to shutdown this system
# %users localhost=/sbin/shutdown -h now
## 允许users用户组中的用户像root用户一样使用shutdown命令
四、实际案例演示
实例1:让普通用户fieldyang具有/etc/init.d/nagios脚本重启的权限,可以在/etc/sudoers添加如下设置:
[root@test ~]# visudo
fieldyang ALL=NOPASSWD:/etc/init.d/nagios restart
实例2:让普通用户fieldyang具有所有超级用户的权限而又不用输入密码
[root@test ~]# visudo
fieldyang ALL=(ALL)NOPASSWD:ALL
[fieldyang@test ~]#sudo su -
[fieldyang@test ~]#pwd
/root
实例3:针对MySQL数据库的设置,让test组中的test用户具备/etc/init.d/mysqld的权限
######################## mysql ################
1.
[root@test ~]# groupadd test
[root@test ~]# useradd -g test -m -d /home/test -s /bin/bash test
[root@test ~]# passwd test
2.
[root@test ~]# visudo
# test ALL=(ALL) NOPASSWD: /etc/init.d/mysqld
test ALL=(ALL) /etc/init.d/mysqld
3. start/stop mysql
3.1) start mysql
login test
[root@test ~]# su test
[test@test ~]$ sudo /etc/init.d/mysqld start
3.2) stop mysql
login test
[root@test ~]# su test
[test@test ~]$ sudo /etc/init.d/mysqld stop
实例4:针对tomcat的设置,让test组中的test用户具备tomcat操作的权限
######################## tomcat ################
1.
[root@test ~]# groupadd test
[root@test ~]# useradd -g test -m -d /home/test -s /bin/bash test
[root@test ~]# passwd test
2.
[root@test ~]# visudo
# test ALL=(ALL) /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
test ALL=(ALL) NOPASSWD: /usr/local/tomcat/bin/shutdown.sh,/usr/local/tomcat/bin/startup.sh
3.
[root@test ~]# vim /usr/local/tomcat/bin/catalina.sh
### JDK
export JAVA_HOME=/usr/local/jdk
export JRE_HOME=$JAVA_HOME/jre
4. start/stop tomcat
4.1) start tomcat
login test
[root@test ~]# su test
[test@test ~]$ sudo /usr/local/tomcat/bin/startup.sh
[test@test ~]$ ss -ntlup | grep java
[test@test ~]$ curl -I http://localhost:8080
4.2) stop tomcat
login test
[root@test ~]# su test
[test@test ~]$ sudo /usr/local/tomcat/bin/shutdown.sh
案例
禁止root用户远程登录,使用普通用户进行远程登录,免密的切换到root。
#进行配置root禁止远程登录
[root@qls ~]# vim /etc/ssh/sshd_config
38 PermitRootLogin no
#重启对应的服务
[root@qls ~]# systemctl restart sshd
#创建普通用户
[root@qls ~]# useradd yuwei
[root@qls ~]# echo '1' | passwd --stdin yuwei
#visuod设置
yuwei ALL=(ALL) NOPASSWD: /bin/su
#使用普通用户登录
[C:\~]$ ssh yuwei@10.0.0.100
[yuwei@qls ~]$ sudo -l
Matching Defaults entries for yuwei on qls:
!visiblepw, always_set_home, match_group_by_gid, always_query_group_plugin, env_reset, env_keep="COLORS DISPLAY HOSTNAME
HISTSIZE KDEDIR LS_COLORS", env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE", env_keep+="LC_COLLATE
LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES", env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY", secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin
User yuwei may run the following commands on qls:
(ALL) NOPASSWD: /bin/su
[yuwei@qls ~]$ sudo su -
Last login: Mon Dec 16 19:12:25 CST 2019 on pts/0
[root@qls ~]#
83. groupmems
#用户主组的管理员成员,把用户组中的用户移除
-a 用户名 #将一个用户添加到组成员列表
-d 用户名 #从组成员列表中删除用户
-g 组 名 #超级用户可以指定修改哪个组的组成员列表
-l -g 组名 #列出组成员
-p -g 组名 #从组成员列表中删除所有用户
[root@eth0 ~]# groupmems -g sales -l #查看有哪些用户属于sales组
linda lisa
[root@eth0 ~]# groupmems -d lisa -g sales #从组中删除用户
[root@eth0 ~]# groupmems -g sales -l
linda
[root@eth0 ~]# id lxj2
uid=1002(lxj2) gid=0(root) groups=0(root)
[root@eth0 ~]# groupmems -a lxj2 -g sales #添加用户到组中
[root@eth0 ~]# id lxj2
uid=1002(lxj2) gid=0(root) groups=0(root),1238(sales)
84. gpasswd
#给组设置密码
-a +用户 +组名 #添加用户到组
-d +用户 +组名 #从组删除用户
-A +用户,... +组名 #指定管理员
-M +用户,... +组名 #指定组成员和-A的用途差不多
-r +组名 +组名 #删除密码
-R +组名 +组名 #限制用户登入组,只有组中的成员才可以用newgrp加入该组
用法:
gpasswd [-a user] [-d user] [-A user,...] [-M user,...] [-r] [-R]groupname
gpasswd groupname:如系统有个peter用户,该用户本身不是groupname群组的成员,使用newgrp需要输入密码即可
[root@eth0 ~]# gpasswd -A peter test2 #将peter设为test2组管理员
[root@eth0 ~]# gpasswd -a peter test2 #将用户peter加入到test2组
[root@eth0 ~]# gpasswd -d peter test2 #将用户peter从test2组中移出
权限设置
85. chmod
#修改、设置权限
-R #以递归方式设置所有的文件及子目录的权限
#根据字母设置权限:
操作对像
u 文件属主权限
g 同组用户权限
o 其它用户权限
a 所有用户(包括以上三种)
权限设定
+ 增加权限
- 取消权限
= 唯一设定权限,也就是覆盖原有权限
=- 没有权限
权限类别
r 读权限
w 写权限
x 执行权限
X 表示只有当该档案是个子目录或者该档案已经被设定过为可执行。
s 文件属主和组id
i 给文件加锁,使其它用户无法访问
r --> 4
w --> 2
x --> 1
- --> 0
chmod 修改权限(+-=前后不能有空格)
chmod u/g/o/a+r/w/x/- file #a可省略
chmod u/g/o/a-r/w/x/- file #a可省略
chmod u/g/o/a=r/w/x/- file #a可省略
[root@qls ~]# touch test.txt
[root@qls ~]#
[root@qls ~]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod u+x test.txt #给属主添加可执行权限
[root@qls ~]# ll
total 0
-rwxr--r--. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod g+w test.txt #给属组添加写的权限
[root@qls ~]# ll
total 0
-rwxrw-r--. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod o+x test.txt #给其他人添加可执行权限
[root@qls ~]# ll
total 0
-rwxrw-r-x. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod o-x test.txt #给其他人移除可执行权限
[root@qls ~]# ll
total 0
-rwxrw-r--. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod a+x test.txt #给所有人添加可执行权限
[root@qls ~]# ll
total 0
-rwxrwxr-x. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod -x test.txt #给所有人移除可执行权限
[root@qls ~]# ll
total 0
-rw-rw-r--. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod a=r test.txt #给所有人覆盖读的权限
[root@qls ~]# ll
total 0
-r--r--r--. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod u=rwx test.txt #给属主覆盖所有权限
[root@qls ~]# ll
total 0
-rwxr--r--. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod g=x test.txt #覆盖属组的可执行权限
[root@qls ~]# ll
total 0
-rwx--xr--. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod o=- test.txt #覆盖其他人的所有权限,给其他人设置无权限
[root@qls ~]# ll
total 0
-rwx--x---. 1 root root 0 Dec 17 17:21 test.txt
#根据数字设置权限:
[root@qls ~]# ll
total 0
-rwx--x---. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod 644 test.txt #根据数字进行设置权限
[root@qls ~]# ll
total 0
-rw-r--r--. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod 000 test.txt #根据数字进行设置权限
[root@qls ~]# ll
total 0
----------. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod 777 test.txt #根据数字进行设置权限
[root@qls ~]# ll
total 0
-rwxrwxrwx. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# chmod 700 test.txt #根据数字进行设置权限
[root@qls ~]# ll
total 0
-rwx------. 1 root root 0 Dec 17 17:21 test.txt
[root@qls ~]# mkdir test
[root@qls ~]#
[root@qls ~]# touch test/{1..5}.txt
[root@qls ~]#
[root@qls ~]#
[root@qls ~]# ll test
total 0
-rw-r--r--. 1 root root 0 Dec 17 17:42 1.txt
-rw-r--r--. 1 root root 0 Dec 17 17:42 2.txt
-rw-r--r--. 1 root root 0 Dec 17 17:42 3.txt
-rw-r--r--. 1 root root 0 Dec 17 17:42 4.txt
-rw-r--r--. 1 root root 0 Dec 17 17:42 5.txt
[root@qls ~]# ll -d test
drwxr-xr-x. 2 root root 71 Dec 17 17:42 test
[root@qls ~]# chmod -R 700 test #递归设置权限
[root@qls ~]# ll -d test #只显示目录
drwx------. 2 root root 71 Dec 17 17:42 test
[root@qls ~]# ll test
total 0
-rwx------. 1 root root 0 Dec 17 17:42 1.txt
-rwx------. 1 root root 0 Dec 17 17:42 2.txt
-rwx------. 1 root root 0 Dec 17 17:42 3.txt
-rwx------. 1 root root 0 Dec 17 17:42 4.txt
-rwx------. 1 root root 0 Dec 17 17:42 5.txt
[root@qls ~]# touch test/test.log
[root@qls ~]# ll test
total 0
-rwx------. 1 root root 0 Dec 17 17:42 1.txt
-rwx------. 1 root root 0 Dec 17 17:42 2.txt
-rwx------. 1 root root 0 Dec 17 17:42 3.txt
-rwx------. 1 root root 0 Dec 17 17:42 4.txt
-rwx------. 1 root root 0 Dec 17 17:42 5.txt
-rw-r--r--. 1 root root 0 Dec 17 17:43 test.log
[root@eth0 ~]# chmod ugo+r test.log #所有人皆可读取
[root@eth0 ~]# chmod a+r test.log #所有人皆可读取
[root@eth0 ~]# chmod ug+w,o-w test.log #设为该文件拥有者,与其所属同一个群体者可写入,但其他以外的人则不可写入
[root@eth0 ~]# chmod u+x test.log #创建者拥有执行权限
[root@eth0 ~]# chmod -R a+r ./test/ #将test目录下的所有文件与子目录皆设为任何人可读取
[root@eth0 ~]# chmod a-x test.log #收回所有用户的对test.log的执行权限
[root@eth0 ~]# chmod 777 test.log #所有人可读,写,执行
[root@eth0 ~]# chmod +x test #给所有用户加test的执行权限
[root@eth0 ~]# chmod a+s test.log #chmod g+s 为某个文件设置替代组标识
[root@eth0 ~]# ls -al | grep test.log
-rwSr-Sr--. 1 root root 0 Dec 17 17:43 test.log
第一个S指示用户替代标识(suid)已经被设置;
第二个S指示替代组标识(sgid)已经被设置;
这样,每一个运行该程序的用户将给予和程序拥有者同样有效的用户标识,和用户所属组同样有效的组标识。
#锁定关键文件
[root@eth0 ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
#锁定后无法删除
[root@eth0 ~]# rm -f /etc/passwd
rm: cannot remove ‘/etc/passwd’: Operation not permitted
#解锁
[root@eth0 ~]# chattr -i /etc/passwd /etc/shadow /etc/group
86. sh
#在一般的linux系统当中(如redhat),使用sh调用执行脚本相当于打开了bash的POSIX标准模式(等效于bash的 --posix +参数),sh是bash的“子集”
[root@eth0 ~]# ls -al /bin/sh
lrwxrwxrwx. 1 root root 4 Dec 12 18:10 /bin/sh -> bash
[root@eth0 ~]# sh -n database.sh #检测脚本是否正确,并不执行
[root@eth0 ~]# sh -x database.sh #执行脚本,输出执行过程
87. chown
#更改文件的所有者和所属组
用法:chown [选项]... [所有者][:[组]] 文件...
-c #类似 -v,但只在有更改时才显示结果
-h #会影响符号链接本身,而非符号链接所指示的目的地
-f #去除大部份的错误信息
-v #为处理的所有文件显示诊断信息
-R #递归设置所有的文件及子目录
以下选项是在指定了 -R 选项时被用于设置如何穿越目录结构体系。
如果您指定了多于一个选项,那么只有最后一个会生效。
-H #如果命令行参数是一个通到目录的符号链接,则遍历符号链接
-L #遍历每一个遇到的通到目录的符号链接
-P #不遍历任何符号链接(默认)
如果没有指定所有者,则不会更改。 所属组若没有指定也不会更改,但当加上":"时 GROUP 会更改为指定所有者的基本组。所有者和所属组可以是 uid、gid、名称。
#只有root权限才可以任意修改属主属组,普通用户只能修改自己的,普通用户不能使用这个命令
[root@eth0 ~]# chown user06:user06 test.log #将test.log所属用户和组改为user06,user06
[root@eth0 ~]# ls -al |grep test.log
-rw-r--r-- 1 user06 user06 0 5月 3 15:21 test.log
[root@eth0 ~]# chown -R user06:user06 www #将www目录,所属用户和组改为user06,user06
[root@eth0 ~]# ls -al |grep ww
drwxr-xr-x 2 user06 user06 4096 5月 3 15:20 www
[root@eth0 ~]# chown root test.log #将test.log,所属用户改为root
[root@eth0 ~]# ls -al |grep test.log
-rw-r--r-- 1 root user06 0 5月 3 15:21 test.log
[root@eth0 database]# ll
总用量 4592
-rw-r--r-- 1 root root 2466 7月 23 18:02 1.html
-rw-r--r--. 1 tank tank 4099771 5月 28 14:42 28toplearning.sql
-rw-r--r--. 1 tank tank 596069 5月 29 00:07 toplearning.tar.gz
[root@eth0 database]# chown .tank 1.html #只改变组
[root@eth0 database]# ll
总用量 4592
-rw-r--r-- 1 root tank 2466 7月 23 18:02 1.html #组已改变
-rw-r--r--. 1 tank tank 4099771 5月 28 14:42 28toplearning.sql
-rw-r--r--. 1 tank tank 596069 5月 29 00:07 toplearning.tar.gz
#将opt下的所有子文件夹以及文件的所有者为user06、用户组为user06; 递归改变文件的所有者属性
[root@eth0 ~]# chown user06:user06 -R opt
[root@qls ~]# cd /opt/
[root@qls /opt]#
[root@qls /opt]# ll
total 12
-rw-rw--w-. 1 yuwei yuwei 10 Dec 17 18:36 123
-rw-r---w-. 1 test test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@qls /opt]# id test
uid=1000(test) gid=1000(test) groups=1000(test)
[root@qls /opt]# chown test.test 123
[root@qls /opt]# ll
total 12
-rw-rw--w-. 1 test test 10 Dec 17 18:36 123
-rw-r---w-. 1 test test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@qls /opt]# chown yuwei passwd
[root@qls /opt]# ll
total 12
-rw-rw--w-. 1 test test 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@qls /opt]# chown .yuwei 123
[root@qls /opt]# ll
total 12
-rw-rw--w-. 1 test yuwei 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@qls /opt]# chown root:root 123
[root@qls /opt]# ll
total 12
-rw-rw--w-. 1 root root 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@qls /opt]# chgrp test 123
[root@qls /opt]# ll
total 12
-rw-rw--w-. 1 root test 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@qls /opt]# chown -R test.test test #递归设置
[root@qls /opt]# ll
total 12
-rw-rw--w-. 1 root test 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 test test 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@qls /opt]# ll test
total 0
-rw-rw-r--. 1 test test 0 Dec 17 19:03 new1.txt
-rw-r--r--. 1 test test 0 Dec 17 18:50 old3.txt
-rw-r--r--. 1 test test 0 Dec 17 18:50 old4.txt
-rw-r--r--. 1 test test 0 Dec 17 18:50 old5.txt
88. chgrp
#
89. umask
#权限控制,umask是从权限中“拿走”相应的位,且文件创建时不能赋予执行权限
参数:
-S #以字符的形势显示当前的掩码。
-p #带umask开头以数字的形势显示当前掩码
[root@eth0 ~]# umask #查看当前用户预设权限
0022
[root@eth0 ~]# umask -S #以字母的形势显示权限
u=rwx,g=rx,o=rx
[root@eth0 ~]# umask -p #带umask开头以数字的形势显示当前掩码
umask 0022
[root@eth0 ~]# umask 755 #设置预设权限
[root@eth0 ~]# umask
0755
90. lsattr
#显示文件在Linux第二扩展文件系统上的特有属性
-R #递归地列出目录以及其下内容的属性.
-V #显示程序版本.
-a #列出目录中的所有文件,包括以`.'开头的文件的属性.
-d #以列出其它文件的方式那样列出目录的属性, 而不列出其下的内容.
-v #显示文件版本.
[root@eth0 ~]# chattr +i 123.txt #设置该文件不能进行任何形势的修改
[root@eth0 ~]# mv 123.txt /opt/123
mv: 无法将"123.txt" 移动至"/opt/123": 不允许的操作
[root@eth0 ~]# lsattr 123.txt #查看chattr设置的权限
----i--------e- 123.txt
[root@eth0 ~]# chattr -i 123.txt #取消-i的权限设置
[root@eth0 ~]# lsattr 123.txt #查看chattr设置的权限
-------------e- 123.txt
91. chattr
`语法:chattr +-=[ASacdisu] file
#修改文件的特殊属性,特殊属性不受权限的控制
`+'用来在文件已有属性的基础上增加特殊属性;
`-'用来去掉文件上的特殊属性;
`='用来指定该文件的唯一特殊属性.
`ASacdisu'用作文件新属性的选项: 不更新atime(A),同步更新(S),只能添加(a),压缩(c),不可变(i),不可转移(d),删除保护(s),不可删除(u).
-R #递归修改目录以及其下内容的属性. 如果在递归目录时遇到了符号链接,遍历将跳过.
-V #详细显示chattr的输出信息并打印出程序的版本.
-vversion #设置文件系统的版本.
设置了`A'属性的文件时,它的atime记录不会改变. 这可以在笔记本电脑系统中避免某些磁盘I/O处理.
设置了`a'属性的文件只能在添加模式下打开用于写入. 只有超级用户可以设置或清除该属性.
设置了`c'属性的文件在磁盘上由内核自动进行压缩处理. 从该文件读取时返回的是未压缩的数据. 对该文件的一次写入会在保存它们到磁盘之前进行数据压缩.
设置了`d'属性的文件不能对其运行 dump(8) 程序进行备份.
设置了`i'属性的文件不能进行修改:你既不能删除它, 也不能给它重新命名,你不能对该文件创建链接, 而且也不能对该文件写入任何数据. 只有超级用户可以设置或清除该属性.
当删除设置了`s'属性的文件时,将对其数据块清零 并写回到磁盘上.
当修改设置了`S'属性的文件时, 修改会同步写入到磁盘上;这与应用 到文件子系统上的`sync'挂载选项有相同的效果.
当删除设置了`u'属性的文件时, 将会保存其内容. 这使得用户可以请求恢复被删除的文件.
[root@eth0 ~]# chattr +i nginx.conf #设置该文件不能进行任何形势的修改
[root@eth0 ~]# mv nginx.conf nginx.conf_bak
mv: 无法将"nginx.conf" 移动至"nginx.conf_bak": 不允许的操作
[root@eth0 ~]# lsattr nginx.conf #查看chattr设置的权限
----i--------e- nginx.conf
[root@eth0 ~]# chattr -i nginx.conf #取消-i的权限设置
[root@eth0 ~]# lsattr nginx.conf #查看chattr设置的权限
-------------e- nginx.conf
# chattr +a /var/log/messages #让某个文件只能往里面追加数据,但不能删除
a #表示只能追加,不能删除,移动,修改,给重要的文件,日志
#测试a属性
[root@qls ~]# lsattr test.txt
-----a---------- test.txt
[root@qls ~]# cat test.txt
hostname
[root@qls ~]# ./test.txt
qls
[root@qls ~]# cp test.txt /tmp/
[root@qls ~]# rm -f test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[root@qls ~]# mv test.txt /opt/
mv: cannot move ‘test.txt’ to ‘/opt/test.txt’: Operation not permitted
[root@qls ~]# vim test.txt
[root@qls ~]# echo pwd >> test.txt
[root@qls ~]# cat test.txt
hostname
pwd
[root@qls ~]# echo pwd > test.txt
-bash: test.txt: Operation not permitted
i #什么都不能操作,不能删除,移动,追加,重定向,给重要的配置文件加上特殊属性
#测试i属性
[root@qls ~]# lsattr test.txt
-----a---------- test.txt
[root@qls ~]# chattr -a test.txt
[root@qls ~]# lsattr test.txt
---------------- test.txt
[root@qls ~]# chattr +i test.txt
[root@qls ~]# cat test.txt
hostname
pwd
[root@qls ~]# ./test.txt
qls
/root
[root@qls ~]# cp ./test.txt /opt/
[root@qls ~]# mv ./test.txt /mnt/
mv: overwrite ‘/mnt/test.txt’? y
mv: cannot move ‘./test.txt’ to ‘/mnt/test.txt’: Operation not permitted
[root@qls ~]# rm -f test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[root@qls ~]# echo 123 >test.txt
-bash: test.txt: Permission denied
[root@qls ~]# echo 123 >>test.txt
-bash: test.txt: Permission denied
92. dd
##生成一个大文件,默认是从标准输入到标准输出
if #从哪里读取
of #输出到哪里
bs #一次输出多大 M k G
count #输出的次数
if #从 file 中读而不是标准输入。
of #写到 file 里去而不是标准输出。除非指定 conv=notrunc ,否则, dd 将把 file 截为 O字节(或由 seek= 选项指定的大小)
ibs #一次读 bytes 字节。默认是512。
obs #一次写 bytes 字节。默认是512。
bs #一次读和写 bytes 字节。这将覆盖 ibs 和 obs 设定的值(并且,设定 bs 不等于同时将 ibs 和 obs 设为同一个值,至少在 只使用 sync, noerror 或 notrunc 转换时是这样 的。因为bs规定,每个输入块都应作为单独 的数据块拷贝到输出,而不把较短的块组合到一起)。
cbs #为 block 转换和 unblock 转换指定转换块的大小。
skip #在拷贝之前,跳过输入文件的前 blocks 块,每块大小为 ibs-byte 字节。
seek #在拷贝之前,跳过输出文件的前 blocks 块,每块大小为 obs-byte 字节。
count #只拷贝输入文件的前 blocks 块(每块的大小为 ibs-byte 字节),而不是全部内容,直到文件末尾。
conv #将文件按 转换 参数指定的方式转换(在lq,rq两边没有空格)。
转换方式包括:
ascii #将EBCDIC转换成ascii。
ebcdic #将ascii转换成ebcdic。
ibm #将ascii转换成alternative ebcdic。
block #每一行输入,无论长短,输出都是 cbs 字节,并且其中的lq换行rq(NEWLINE,即c中 的')用 空格替换。如有必要,行尾会填充空格。
unblock #用lq换行rq替换每个输入块( cbs 字节大小)末尾的空格。
lcase #将大写字母转换成小写。
ucase #将小写字母转换成大写。
swab #交换每对输入字节。如果读入的字节数是奇数,最后 一个字节只是简单的复制到输出(因 为没有能跟它交换的 字节了)(POSIX 1003.26,PASC翻译1003.2 3号和4号)。
noerror #发生读错误时,继续进行。
notrunc #不截断输出文件。
sync #用0填充到每个输入块的末尾,使其大小为 ibs 字节。
例1
[root@eth0 ~]# dd if=/dev/hdx of=/dev/hdy #将本地的/dev/hdx整盘备份到/dev/hdy
[root@eth0 ~]# dd if=/dev/hdx of=/path/to/image #将/dev/hdx全盘数据备份到指定路径的image文件
[root@eth0 ~]# dd if=/dev/hdx | gzip >/path/to/image.gz #备份/dev/hdx全盘数据,并利用gzip工具 进行压缩,保存到指定路径
[root@eth0 ~]# dd if=/path/to/image of=/dev/hdx # 将备份文件恢复到指定盘
[root@eth0 ~]# gzip -dc /path/to/image.gz | dd of=/dev/hdx #将压缩的备份文件恢复到指定盘
[root@eth0 ~]# dd if=/dev/hdx of=/path/to/image count=1 bs=512 #备份磁盘开始的512Byte大小的MBR 信息到指定文件
[root@eth0 ~]# dd if=/dev/cdrom of=/root/cd.iso #拷贝光盘数据到root文件夹下,并保存为cd.iso文件
例2
1.将本地的/dev/hdb整盘备份到/dev/hdd
# dd if=/dev/hdb of=/dev/hdd
2.将/dev/hdb全盘数据备份到指定路径的image文件
# dd if=/dev/hdb of=/root/image
3.将备份文件恢复到指定盘
# dd if=/root/image of=/dev/hdb
4.备份/dev/hdb全盘数据,并利用gzip工具进行压缩,保存到指定路径
# dd if=/dev/hdb | gzip > /root/image.gz
5.将压缩的备份文件恢复到指定盘
# gzip -dc /root/image.gz | dd of=/dev/hdb
6.备份与恢复MBR
备份磁盘开始的512个字节大小的MBR信息到指定文件:
# dd if=/dev/hda of=/root/image count=1 bs=512
count=1指仅拷贝一个块;bs=512指块大小为512个字节。
恢复:
# dd if=/root/image of=/dev/had
将备份的MBR信息写到磁盘开始部分
7.备份软盘
# dd if=/dev/fd0 of=disk.img count=1 bs=1440k (即块大小为1.44M)
8.拷贝内存内容到硬盘
# dd if=/dev/mem of=/root/mem.bin bs=1024 (指定块大小为1k)
9.拷贝光盘内容到指定文件夹,并保存为cd.iso文件
# dd if=/dev/cdrom(hdc) of=/root/cd.iso
10.增加swap分区文件大小
第一步:创建一个大小为256M的文件:
# dd if=/dev/zero of=/swapfile bs=1024 count=262144
第二步:把这个文件变成swap文件:
# mkswap /swapfile
第三步:启用这个swap文件:
# swapon /swapfile
第四步:编辑/etc/fstab文件,使在每次开机时自动加载swap文件:
/swapfile swap swap default 0 0
11.销毁磁盘数据
# dd if=/dev/urandom of=/dev/hda1
注意:利用随机的数据填充硬盘,在某些必要的场合可以用来销毁数据。
12.测试硬盘的读写速度
# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
# dd if=/root/1Gb.file bs=64k | dd of=/dev/null
通过以上两个命令输出的命令执行时间,可以计算出硬盘的读、写速度。
13.确定硬盘的最佳块大小:
# dd if=/dev/zero bs=1024 count=1000000 of=/root/1Gb.file
# dd if=/dev/zero bs=2048 count=500000 of=/root/1Gb.file
# dd if=/dev/zero bs=4096 count=250000 of=/root/1Gb.file
# dd if=/dev/zero bs=8192 count=125000 of=/root/1Gb.file
通过比较以上命令输出中所显示的命令执行时间,即可确定系统最佳的块大小。
14.修复硬盘:
# dd if=/dev/sda of=/dev/sda 或dd if=/dev/hda of=/dev/hda
当硬盘较长时间(一年以上)放置不使用后,磁盘上会产生magnetic flux point,当磁头读到这些区域时会遇到困难,并可能导致I/O错误。
当这种情况影响到硬盘的第一个扇区时,可能导致硬盘报废。上边的命令有可能使这些数 据起死回生。并且这个过程是安全、高效的。
例3
1、测试磁盘写能力
# time dd if=/dev/zero of=/test.dbf bs=8k count=300000
因为/dev/zero是一个伪设备,它只产生空字符流,对它不会产生IO,所以,
IO都会集中在of文件中,of文件只用于写,所以这个命令相当于测试磁盘的写能力。
2、测试磁盘读能力
# time dd if=/dev/sdb1 of=/dev/null bs=8k
因为/dev/sdb1是一个物理分区,对它的读取会产生IO,/dev/null是伪设备,相当于黑洞,of到该设备不会产生IO,
所以,这个命令的IO只发生在/dev/sdb1上,也相当于测试磁盘的读能力。
3、测试同时读写能力
# time dd if=/dev/sdb1 of=/test1.dbf bs=8k
这个命令下,一个是物理分区,一个是实际的文件,对它们的读写都会产生IO(对/dev/sdb1是读,对/test1.dbf是写),
假设他们都在一个磁盘中,这个命令就相当于测试磁盘的同时读写能力
案例:生成一个文件
[root@qls ~]# dd if=/dev/zero of=/root/test.log bs=10M count=100
100+0 records in
100+0 records out
1048576000 bytes (1.0 GB) copied, 27.5536 s, 38.1 MB/s
[root@qls ~]# ll -h
total 1001M
-rw-r--r--. 1 root root 143 Dec 19 17:34 file10.txt
-rw-r--r--. 1 root root 51 Dec 19 17:12 file1.txt
-rw-r--r--. 1 root root 2.2K Dec 19 17:05 file2.txt
-rw-r--r--. 1 root root 6 Dec 19 17:05 file3.txt
-rw-r--r--. 1 root root 21 Dec 19 17:07 file4.txt
-rw-r--r--. 1 root root 153 Dec 19 17:16 file5.txt
-rw-r--r--. 1 root root 160 Dec 19 17:25 file6.txt
-rw-r--r--. 1 root root 9 Dec 19 17:30 file7.txt
-rw-r--r--. 1 root root 102 Dec 19 17:30 file8.txt
-rw-r--r--. 1 root root 174 Dec 19 17:33 file9.txt
-rw-r--r--. 1 root root 1000M Dec 19 18:27 test.log
-rwxr-xr-x. 1 root root 143 Dec 19 17:38 test.sh
[root@qls ~]# dd </dev/zero >/root/test.txt bs=10M count=10
10+0 records in
10+0 records out
104857600 bytes (105 MB) copied, 11.6617 s, 9.0 MB/s
[root@qls ~]# ll -h
total 1.1G
-rw-r--r--. 1 root root 143 Dec 19 17:34 file10.txt
-rw-r--r--. 1 root root 51 Dec 19 17:12 file1.txt
-rw-r--r--. 1 root root 2.2K Dec 19 17:05 file2.txt
-rw-r--r--. 1 root root 6 Dec 19 17:05 file3.txt
-rw-r--r--. 1 root root 21 Dec 19 17:07 file4.txt
-rw-r--r--. 1 root root 153 Dec 19 17:16 file5.txt
-rw-r--r--. 1 root root 160 Dec 19 17:25 file6.txt
-rw-r--r--. 1 root root 9 Dec 19 17:30 file7.txt
-rw-r--r--. 1 root root 102 Dec 19 17:30 file8.txt
-rw-r--r--. 1 root root 174 Dec 19 17:33 file9.txt
-rw-r--r--. 1 root root 1000M Dec 19 18:27 test.log
-rwxr-xr-x. 1 root root 143 Dec 19 17:38 test.sh
-rw-r--r--. 1 root root 100M Dec 19 18:28 test.txt
93. xargs
#xargs 又称管道命令,构造参数等。是给命令传递参数的一个过滤器,也是组合多个命令的一个工具 它把一个数据流分割为一些足够小的块,以方便过滤器和命令进行处理 。简单的说 就是把 其他命令的给它的数据 传递给它后面的命令作为参数
主要参数
-d #为输入指定一个定制的分割符
-i #用 {} 代替 传递的数据
-I #string 用string来代替传递的数据-n[数字] 设置每次传递几行数据
-n #选项限制单个命令行的参数个数
-t #显示执行详情
-p #交互模式
-大P #n 允许的最大线程数量为n
-s [大小] #设置传递参数的最大字节数(小于131072字节)
-x #大于 -s 设置的最大长度结束 xargs命令执行
例1
[root@eth0 ~]# ls |grep .php |xargs -i mv {} {}.bak #将当前目录下php文件,改名字
[root@eth0 ~]# ls |grep .php |xargs -I {} mv {} {}.bak #与上例相同
[root@eth0 ~]# find ./ -name "*.tmp" | xargs -i rm -rf {} #删除当前文件夹下的,tmp文件
例2
# find ./ -type f -print0 |xargs -0 rm #删除该目录的所有普通文件
# find ./ -type f -exec rm '{}' \; #同上
# find ./ -type f -exec rm '{}' + #同上
例3
# svn st | awk '{print $2}' | xargs svn revert #还原当前目录下跟SVN版本库有差异的所有文件
例4
[root@eth0 ~]# find ./ -name "*.json" | xargs grep baidu #查找所有含有baidu关键词的json文件
例5
# 该命令用于从当前路径开始寻找包含特定字符串的文件。例子中可以看出,在test.txt文本中找到了字符串并打印了该行。
# find .| xargs grep "this is a test for finding" 2>null
例6
[root@eth0 ~]# cat file1
a=1
b=2
c=3
d=4
[root@eth0 ~]# cat file2
a=1
b=2
c=3
[root@eth0 ~]# grep -wf file1 file2 | xargs -i sed -i '/{}/d' file1 file2
[root@eth0 ~]# cat file1
d=4
[root@eth0 ~]#
[root@eth0 ~]# cat file2
[root@eth0 ~]#
例7
1. 将多行文本转换单行输出
[root@eth0 ~]# cat a
1 2 3 4 5
6 7 8 9 0
a s d f g
z x c v b
q w e r t
[root@eth0 ~]# cat a |xargs
1 2 3 4 5 6 7 8 9 0 a s d f g z x c v b q w e r t
2. Xargs -n3,限制每行输出三个
[root@eth0 ~]# cat a|xargs -n3
1 2 3
4 5 6
7 8 9
0 a s
d f g
z x c
v b q
w e r
t
3. -d 可以自定义一个定界符
[root@eth0~]# echo "wWwWw.WbWaWiWdWuW.WcWoWm" |xargs -Dw
w w w. b a i d u . c o m #将W作为界定符
4. -n -d 结合使用结合使用
[root@eth0 ~]# echo "1 2 3 4 5 6 7 8 9"| xargs -d6 -n3
1 2 3 4 5 7 8 9 #这样的输出结果说明xargs按照6分隔符将字符串分为了两部分12345 和 789
[root@eth0 ~]# echo "adas2esda2 dsa 2dasd2ds" |xargs -d2 -n2
adas esd
dsa dasd
ds
5. Xargs -I选项,使用-I指定一个替换字符串{},这个字符串在xargs扩展时会被替换掉,当-I与xargs结合使用,每一个参数命令都会被执行一次
#下面是将文件中的所有字符当做新文件的名字进行创建,
[root@eth0 ~]# cat a |xargs -i touch {}
[root@eth0 ~]# ls
1 2 3 4 5 6 7 8 9 0 a a s d f g q w e r t z x c v b
[root@eth0 ~]# pwd
/home/~
再将所有的创建的删除
[root@eth0 ~]# ls *
1 2 3 4 5 6 7 8 9 0 a a s d f g q w e r t z x c v b
[root@eth0 ~]# ls |xargs -i rm -f {}
[root@eth0 ~]# ls
6. 实例
将文件或者文件夹改名
[root@eth0 ~]# ls
a b
[root@eth0 ~]# ls |xargs -i mv {} {}.bak
[root@eth0 ~]# ls
a.bak b.bak
[root@eth0 ~]#
删除指定文件
[root@eth0 ~]# ls
a.xx b.xx c
[root@eth0 ~]# ls *.xx
a.xx b.xx
[root@eth0 ~]# ls *.xx | xargs -i rm -f {}
[root@eth0 ~]# ls
c
例8
# echo "splitXsplitXsplitXsplit" | xargs -d X
split split split split
xargs #将一些不支持管道命令支持管道,默认管道是将左侧的输出结果标准输入到右侧的命令,主要是针对数据操作,xargs可以让这些数据交给右侧命令当做是针对文件操作。
[root@qls ~]# ls | rm -rf
[root@qls ~]# ls
file10.txt file2.txt file4.txt file6.txt file8.txt ip.txt pass.txt test.sh
file1.txt file3.txt file5.txt file7.txt file9.txt new.txt test.log test.txt
[root@qls ~]# ls |xargs rm -rf
[root@qls ~]# for i in {1..10} ;do echo 'oldboy' >file$i.txt ;done
[root@qls ~]# ll
total 40
-rw-r--r--. 1 root root 7 Dec 19 19:09 file10.txt
-rw-r--r--. 1 root root 7 Dec 19 19:09 file1.txt
-rw-r--r--. 1 root root 7 Dec 19 19:09 file2.txt
-rw-r--r--. 1 root root 7 Dec 19 19:09 file3.txt
-rw-r--r--. 1 root root 7 Dec 19 19:09 file4.txt
-rw-r--r--. 1 root root 7 Dec 19 19:09 file5.txt
-rw-r--r--. 1 root root 7 Dec 19 19:09 file6.txt
-rw-r--r--. 1 root root 7 Dec 19 19:09 file7.txt
-rw-r--r--. 1 root root 7 Dec 19 19:09 file8.txt
-rw-r--r--. 1 root root 7 Dec 19 19:09 file9.txt
[root@qls ~]# cat ./*
oldboy
oldboy
oldboy
oldboy
oldboy
oldboy
oldboy
oldboy
oldboy
oldboy
[root@qls ~]# ls | sed 's#oldboy#oldgirl#g'
file10.txt
file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file6.txt
file7.txt
file8.txt
file9.txt
[root@qls ~]# ls |xargs sed 's#oldboy#oldgirl#g'
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
[root@qls ~]# ls |xargs sed 's#oldboy#oldgirl#g' -i
[root@qls ~]# cat ./*
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
oldgirl
[root@qls ~]# find ./ -name "*.txt"
./file8.txt
./file9.txt
./file10.txt
./file1.txt
./file2.txt
./file3.txt
./file4.txt
./file5.txt
./file6.txt
./file7.txt
[root@qls ~]# find ./ -name "*.txt" -ls
67560148 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file8.txt
67738439 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file9.txt
67753461 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file10.txt
67753460 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file1.txt
67157611 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file2.txt
67157612 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file3.txt
67753409 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file4.txt
67753410 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file5.txt
67560146 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file6.txt
67560147 4 -rw-r--r-- 1 root root 8 Dec 19 19:11 ./file7.txt
[root@qls ~]# find ./ -name "*.txt" | ls -l
total 40
-rw-r--r--. 1 root root 8 Dec 19 19:11 file10.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file1.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file2.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file3.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file4.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file5.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file6.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file7.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file8.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file9.txt
[root@qls ~]# touch 123.log
[root@qls ~]# find ./ -name "*.txt" | ls -l
total 40
-rw-r--r--. 1 root root 0 Dec 19 19:13 123.log
-rw-r--r--. 1 root root 8 Dec 19 19:11 file10.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file1.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file2.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file3.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file4.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file5.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file6.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file7.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file8.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 file9.txt
[root@qls ~]# find ./ -name "*.txt" |xargs ls -l
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file10.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file1.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file2.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file3.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file4.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file5.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file6.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file7.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file8.txt
-rw-r--r--. 1 root root 8 Dec 19 19:11 ./file9.txt
#将当前目录下的所有.txt类型的文件复制到/opt目录
[root@qls ~]# find ./ -name "*.txt" |xargs cp -t /opt
[root@qls ~]# ll /opt
total 40
-rw-r--r--. 1 root root 8 Dec 19 19:15 file10.txt
-rw-r--r--. 1 root root 8 Dec 19 19:15 file1.txt
-rw-r--r--. 1 root root 8 Dec 19 19:15 file2.txt
-rw-r--r--. 1 root root 8 Dec 19 19:15 file3.txt
-rw-r--r--. 1 root root 8 Dec 19 19:15 file4.txt
-rw-r--r--. 1 root root 8 Dec 19 19:15 file5.txt
-rw-r--r--. 1 root root 8 Dec 19 19:15 file6.txt
-rw-r--r--. 1 root root 8 Dec 19 19:15 file7.txt
-rw-r--r--. 1 root root 8 Dec 19 19:15 file8.txt
-rw-r--r--. 1 root root 8 Dec 19 19:15 file9.txt
[root@qls ~]# cp $(find ./ -name "*.txt") /opt/
[root@qls ~]# ll /opt/
total 40
-rw-r--r--. 1 root root 8 Dec 19 19:17 file10.txt
-rw-r--r--. 1 root root 8 Dec 19 19:17 file1.txt
-rw-r--r--. 1 root root 8 Dec 19 19:17 file2.txt
-rw-r--r--. 1 root root 8 Dec 19 19:17 file3.txt
-rw-r--r--. 1 root root 8 Dec 19 19:17 file4.txt
-rw-r--r--. 1 root root 8 Dec 19 19:17 file5.txt
-rw-r--r--. 1 root root 8 Dec 19 19:17 file6.txt
-rw-r--r--. 1 root root 8 Dec 19 19:17 file7.txt
-rw-r--r--. 1 root root 8 Dec 19 19:17 file8.txt
-rw-r--r--. 1 root root 8 Dec 19 19:17 file9.txt
打包压缩
94. zip
#打包压缩 (yum install -y zip unzip)
# zcat 查看zip格式的压缩文件
zip + 压缩包名 + 源文件
zip 打包压缩
-r #递归打包,打包目录
-q #打包的时候不显示打包过程
unzip 解压.zip格式压缩包
-q #解压的时候,不显示解压的过程
-l #显示压缩包的列表信息
-d #解压到指定的目录中
[root@qls ~]# zip services.zip services
adding: services (deflated 80%)
[root@qls ~]# ll
total 796
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
-rw-r--r--. 1 root root 670293 Dec 24 18:42 services
-rw-r--r--. 1 root root 136227 Dec 24 18:44 services.zip
[root@qls ~]# zcat services.zip #查看zip格式的压缩文件
[root@qls ~]# unzip services.zip #解压,默认解压到当前目录
[root@qls ~]# zip -r etc.zip /etc #打包目录
[root@qls ~]# zip -rq etc.zip /etc #打包的时候不显示打包过程
[root@qls ~]# unzip -q etc.zip #解压的时候不显示解压过程
[root@qls ~]# unzip -l etc.zip #查看压缩包中的列表信息
[root@qls ~]# unzip -q etc.zip -d /opt/ #解压到指定的目录
95. gzip
#压缩文件,不能压缩目录,压缩会删除源文件
# zcat #查看gzip格式的压缩文件
-d #解压
-r #压缩目录下的所有文件
-rd #解压目录下的所有压缩文件
gzip + 源文件
[root@qls ~]# gzip services #打包压缩services文件
[root@qls ~]# ll
total 13064
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 88 root root 8192 Dec 23 16:59 etc
-rw-r--r--. 1 root root 12410225 Dec 24 18:50 etc.zip
-rw-r--r--. 1 root root 670293 Dec 24 18:42 server
-rw-r--r--. 1 root root 136088 Dec 24 18:42 services.gz
[root@qls ~]# zcat services.gz #查看gzip格式的压缩文件
[root@qls ~]# gzip -d services.gz #解压
[root@qls ~]# ll
total 13584
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 88 root root 8192 Dec 23 16:59 etc
-rw-r--r--. 1 root root 12410225 Dec 24 18:50 etc.zip
-rw-r--r--. 1 root root 670293 Dec 24 18:42 server
-rw-r--r--. 1 root root 670293 Dec 24 18:42 services
[root@qls ~]# gzip -r etc #压缩目录中的所有文件
[root@qls ~]# gzip -rd etc #解压整个目录的压缩文件
96. bzip2
#压缩文件,不能压缩目录,压缩会删除源文件 (yum install -y bzip2)
#使用 bzcat 查看bzip2格式的压缩文件
bzip2 -d #解压
[root@qls ~]# bzip2 services
[root@qls ~]# ll
total 13052
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 88 root root 8192 Dec 24 19:06 etc
-rw-r--r--. 1 root root 12410225 Dec 24 18:50 etc.zip
-rw-r--r--. 1 root root 670293 Dec 24 18:42 server
-rw-r--r--. 1 root root 123932 Dec 24 18:42 services.bz2
[root@qls ~]# bzcat services.bz2 #查看bzip2格式的压缩文件
[root@qls ~]# bzip2 -d services.bz2
[root@qls ~]# ll
total 13584
-rw-------. 1 root root 1429 Nov 26 20:28 anaconda-ks.cfg
drwxr-xr-x. 88 root root 8192 Dec 24 19:06 etc
-rw-r--r--. 1 root root 12410225 Dec 24 18:50 etc.zip
-rw-r--r--. 1 root root 670293 Dec 24 18:42 server
-rw-r--r--. 1 root root 670293 Dec 24 18:42 services
97. tar
#打包
c #创建包
z #使用gzip格式压缩
j #使用bzip2格式压缩
J #使用xz格式压缩
f #指定压缩包的名称
v #显示打包的过程
czf #zip格式 .tar.gz
cjf #bz2格式 .tar.bz2
cJf #xz格式 .tar.xz
t #显示压缩包列表,自动识别压缩包格式
tf #查看压缩包
x #解压 ,自动识别压缩包格式
xf #解压,会覆盖源文件
P #使用绝对路径打包
h #打包软连接的真实文件数据
-C #解压到指定的目录
X #指定排除列表文件 (X要跟排除列表文件对应,且文件列表内使用的路径要和命令行上的路径要一致)
--exclude= #排除指定的文件
--exclude-from= #指定排除的列表文件(文件列表内使用的路径要和命令行上的路径要一致)
[root@qls ~]# tar czf service.tar.gz services
[root@qls ~]# ll
total 792
-rw-r--r--. 1 root root 670293 Dec 24 19:35 services
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
[root@qls ~]# tar cjf service.tar.bz2 services
[root@qls ~]# 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
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
[root@qls ~]# tar cJf service.tar.xz services
[root@qls ~]# ll
total 1016
-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
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
-rw-r--r--. 1 root root 100680 Dec 24 19:37 service.tar.xz
[root@qls ~]# tar tf service.tar.gz
services
[root@qls ~]# tar tf service.tar.bz2
services
[root@qls ~]# tar tf service.tar.xz
services
[root@qls ~]# tar xf service.tar.gz
[root@qls ~]# ll
total 1016
-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
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
-rw-r--r--. 1 root root 100680 Dec 24 19:37 service.tar.xz
[root@qls ~]# tar xf service.tar.bz2
[root@qls ~]# ll
total 1016
-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
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
-rw-r--r--. 1 root root 100680 Dec 24 19:37 service.tar.xz
[root@qls ~]# rm -f services
[root@qls ~]# tar xf service.tar.xz
[root@qls ~]# ll
total 1016
-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
-rw-r--r--. 1 root root 136197 Dec 24 19:35 service.tar.gz
-rw-r--r--. 1 root root 100680 Dec 24 19:37 service.tar.xz
[root@qls ~]# tar czf etc.tar.gz /etc/
tar: Removing leading `/' from member names #删跟的操作,不是报错,防止解压的时候覆盖源文件文件
[root@qls ~]# ll
total 9960
-rw-r--r--. 1 root root 10196757 Dec 24 19:43 etc.tar.gz
[root@qls ~]# tar xf etc.tar.gz #解压到当前目录
[root@qls ~]# ll
total 9972
drwxr-xr-x. 80 root root 8192 Dec 23 16:59 etc
-rw-r--r--. 1 root root 10196757 Dec 24 19:43 etc.tar.gz
#解决删根
第一种方法:
进入根目录进行打包 ,使用相对路径打包
[root@qls ~]# cd /
[root@qls /]# tar czf /root/etc-1.tar.gz etc
[root@qls /]# ll /root/
total 19932
drwxr-xr-x. 80 root root 8192 Dec 23 16:59 etc
-rw-r--r--. 1 root root 10196757 Dec 24 19:47 etc-1.tar.gz
-rw-r--r--. 1 root root 10196757 Dec 24 19:43 etc.tar.gz
#第二种方法:
使用P选项
[root@qls ~]# tar czPf etc-2.tar.gz /etc
[root@qls ~]# tar xf etc-2.tar.gz #解压的时候进行删根操作,主要是做一个保护机制
tar: Removing leading `/' from member names
#解压到指定的目录中
[root@qls ~]# tar xf etc.tar.gz -C /opt/
[root@qls ~]# ll /opt/
total 12
drwxr-xr-x. 80 root root 8192 Dec 23 16:59 etc
[root@qls ~]# ll /etc/grub2.cfg
lrwxrwxrwx. 1 root root 22 Nov 26 20:23 /etc/grub2.cfg -> ../boot/grub2/grub.cfg
[root@qls ~]# tar czf grub.tar.gz /etc/grub2.cfg
tar: Removing leading `/' from member names
[root@qls ~]# tar xf grub.tar.gz
[root@qls ~]# ll
total 29884
drwxr-xr-x. 2 root root 23 Dec 24 19:55 etc
-rw-r--r--. 1 root root 10196757 Dec 24 19:48 etc-1.tar.gz
-rw-r--r--. 1 root root 10196675 Dec 24 19:49 etc-2.tar.gz
-rw-r--r--. 1 root root 10196757 Dec 24 19:43 etc.tar.gz
-rw-r--r--. 1 root root 124 Dec 24 19:54 grub.tar.gz
[root@qls ~]# ll etc
total 0
lrwxrwxrwx. 1 root root 22 Nov 26 20:23 grub2.cfg -> ../boot/grub2/grub.cfg
#打包软连接文件
[root@qls ~]# tar czhf grub-1.tar.gz /etc/grub2.cfg
tar: Removing leading `/' from member names
[root@qls ~]# ll
total 29888
-rw-r--r--. 1 root root 10196757 Dec 24 19:48 etc-1.tar.gz
-rw-r--r--. 1 root root 10196675 Dec 24 19:49 etc-2.tar.gz
-rw-r--r--. 1 root root 10196757 Dec 24 19:43 etc.tar.gz
-rw-r--r--. 1 root root 1466 Dec 24 19:56 grub-1.tar.gz
-rw-r--r--. 1 root root 124 Dec 24 19:54 grub.tar.gz
[root@qls ~]# tar xf grub-1.tar.gz
[root@qls ~]# ll etc
total 8
-rw-r--r--. 1 root root 4229 Nov 26 20:28 grub2.cfg
#排除文件
第一种方法:
[root@qls ~]# ll
total 9960
-rw-r--r--. 1 root root 10196844 Dec 24 19:59 etc-1.tar.gz
[root@qls ~]# tar czf etc-2.tar.gz --exclude=/etc/services /etc
tar: Removing leading `/' from member names
[root@qls ~]# ll
total 19788
-rw-r--r--. 1 root root 10196844 Dec 24 19:59 etc-1.tar.gz
-rw-r--r--. 1 root root 10061840 Dec 24 20:00 etc-2.tar.gz
[root@qls ~]# tar tf etc-2.tar.gz |grep services
etc/firewalld/services/
#排除多个文件
[root@qls ~]# tar czf etc-3.tar.gz --exclude=/etc/{passwd,services,shadow} /etc
tar: Removing leading `/' from member names
[root@qls ~]# ll
total 29616
-rw-r--r--. 1 root root 10196844 Dec 24 19:59 etc-1.tar.gz
-rw-r--r--. 1 root root 10061840 Dec 24 20:00 etc-2.tar.gz
-rw-r--r--. 1 root root 10061136 Dec 24 20:02 etc-3.tar.gz
[root@qls ~]# 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@qls ~]# tar czf etc-4.tar.gz --exclude=/etc/services --exclude=/etc/firewalld/services /etc
tar: Removing leading `/' from member names
[root@qls ~]# ll
total 39444
-rw-r--r--. 1 root root 10196844 Dec 24 19:59 etc-1.tar.gz
-rw-r--r--. 1 root root 10061840 Dec 24 20:00 etc-2.tar.gz
-rw-r--r--. 1 root root 10061136 Dec 24 20:02 etc-3.tar.gz
-rw-r--r--. 1 root root 10061821 Dec 24 20:04 etc-4.tar.gz
[root@qls ~]# tar tf etc-4.tar.gz |grep 'services'
#根据排除列表进行排除文件
[root@qls ~]# cat paichu.list
/etc/services
/etc/passwd
/etc/sysconfig/network-scripts
/etc/hosts
[root@qls ~]# tar czf etc-5.tar.gz --exclude-from=paichu.list /etc
tar: Removing leading `/' from member names
[root@qls ~]# 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/
etc/selinux/targeted/active/modules/100/denyhosts/cil
etc/selinux/targeted/active/modules/100/denyhosts/hll
etc/selinux/targeted/active/modules/100/denyhosts/lang_ext
etc/firewalld/services/
第二种方法:
压缩包名要跟f选项对应 X要跟排除列表文件对应
[root@qls ~]# tar czfX etc-6.tar.gz paichu.list /etc
tar: Removing leading `/' from member names
[root@qls ~]# tar tf etc-6.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/
etc/selinux/targeted/active/modules/100/denyhosts/cil
etc/selinux/targeted/active/modules/100/denyhosts/hll
etc/selinux/targeted/active/modules/100/denyhosts/lang_ext
etc/firewalld/services/
98. date
#显示当前时间命令
语法: date (选项) (参数)
选项:
-d #显示字符串所指的日期与时间。字符串前后必须加上双引号;
-s #根据字符串来设置日期与时间。字符串前后必须加上双引号;
-u #显示或设置全球时间(格林威治时间)
-f #显示 DATEFILE 中每一行指定的时间, 如同将 DATEFILE 中的每行作为 --date 的参数一样
-I, --iso-8601[=TIMESPEC] 按照 ISO-8601 的日期/时间格式输出时间.
TIMESPEC=`date' (或者不指定时)仅输出日期,等于 `hours', `minutes', 或`seconds' 时按照指定精度输出日期及时间.
-r #显示文件的最后修改时间
-R #根据 RFC-822 指定格式输出日期
参数: <+时间日期格式>:指定显示时使用的日期时间格式
时间日期格式
%H #小时,24小时制(00~23)
%I #小时,12小时制(01~12)
%k #小时,24小时制(0~23)
%l #小时,12小时制(1~12)
%M #分钟(00~59)
%p #显示出AM或PM
%r #显示时间,12小时制(hh:mm:ss %p)
%s #从1970年1月1日00:00:00到目前经历的秒数
%S #显示秒(00~59)
%T #显示时间,24小时制(hh:mm:ss)
%X #显示时间的格式(%H:%M:%S)
%Z #显示时区,日期域(CST)
%a #星期的简称(Sun~Sat)
%A #星期的全称(Sunday~Saturday)
%h同%b #月的简称(Jan~Dec)
%B #月的全称(January~December)
%c #日期和时间(Tue Nov 20 14:12:58 2012)
%d #一个月的第几天(01~31)
%x同%D #日期(mm/dd/yy)
%j #一年的第几天(001~366)
%m #月份(01~12)
%w #一个星期的第几天(0代表星期天)
%W #一年的第几个星期(00~53,星期一为第一天)
%y #年的最后两个数字(1999则是99)
%e #(月份中的)几号(去零表示) ( 1..31)
%U #(一年中的)第几个星期,以星期天作为一周的开始(用两位表示) (00..53)
%V #(一年中的)第几个星期,以星期一作为一周的开始(用两位表示) (01..52)
%Y #年(用 4 位表示) (1970...)
%z #按照 RFC-822 中指定的数字时区显示(如, -0500) (为非标准扩充)
%% #文本的 %
%n #换行
%t #水平方向的 tab 制表符
默认情况下,用 0 填充数据的空缺部分. date 命令能分辨在 `%'和数字指示之间的以下修改.
`-' (连接号) 不进行填充 `_' (下划线) 用空格进行填充
#格式化输出:
date +"%Y-%m-%d"
2009-12-07
#输出昨天日期:
date -d "1 day ago" +"%Y-%m-%d"
2012-11-19
#2秒后输出:
date -d "2 second" +"%Y-%m-%d %H:%M.%S"
2012-11-20 14:21.31
#传说中的 1234567890 秒:
date -d "1970-01-01 1234567890 seconds" +"%Y-%m-%d %H:%m:%S"
2009-02-13 23:02:30
#普通转格式:
date -d "2009-12-12" +"%Y/%m/%d %H:%M.%S"
2009/12/12 00:00.00
#apache格式转换:
date -d "Dec 5, 2009 12:00:37 AM" +"%Y-%m-%d %H:%M.%S"
2009-12-05 00:00.37
#格式转换后时间游走:
date -d "Dec 5, 2009 12:00:37 AM 2 year ago" +"%Y-%m-%d %H:%M.%S"
2007-12-05 00:00.37
#加减操作:
date +%Y%m%d #显示前天年月日
date -d "+1 day" +%Y%m%d #显示一天后的日期
date -d "-1 day" +%Y%m%d #显示一天前的日期
date -d "-1 month" +%Y%m%d #显示上个月的日期
date -d "+1 month" +%Y%m%d #显示下个月的日期
date -d "-1 year" +%Y%m%d #显示前年的日期
date -d "+1 year" +%Y%m%d #显示明年的日期
#设定时间:
date -s #设置当前时间,只有root权限才能设置,其他只能查看
date -s 20120523 #设置成20120523,这样会把具体时间设置成空00:00:00
date -s 01:01:01 #设置具体时间,不会对日期做更改
date -s "01:01:01 2012-05-23" #这样可以设置全部时间
date -s "01:01:01 20120523" #这样可以设置全部时间
date -s "2012-05-23 01:01:01" #这样可以设置全部时间
date -s "20120523 01:01:01" #这样可以设置全部时间
#有时需要检查一组命令花费的时间,举例:
#!/bin/bash
start=$(date +%s)
nmap man.linuxde.net &> /dev/null
end=$(date +%s)
difference=$(( end - start ))
echo $difference seconds.
[root@qls ~]# date
Tue Dec 24 20:16:20 CST 2019
[root@qls ~]# date +%F #显示当前日期
2019-12-24
[root@qls ~]# date +%T #显示当前时间
20:17:52
[root@qls ~]# date +%Y-%m-%d #显示当前日期
2019-12-24
[root@qls ~]# date +%y-%m-%d #显示当前日期,没有显示世纪
19-12-24
[root@qls ~]# date +%H:%M:%S #显示时分秒
20:20:18
[root@qls ~]# date +%s #时间戳,距离1970年1月1日0点0分0秒,过了多少秒
1577190037
[root@qls ~]# date +%w #周几
2
[root@qls ~]# date +%W #今年的第几周
51
[root@qls ~]# date +%j #几年的第几天
358
-d #根据自己的要求显示时间,而不是修改时间
[root@eth0 ~]# date -d "20150305" +%s #时间转时间戳
1425484800
[root@eth0 ~]# date -d '1970-01-01 UTC 1425484800 seconds' #时间戳转时间
2015年 03月 05日 星期四 00:00:00 CST
[root@eth0 ~]# date -d @1436781720
2015年 07月 13日 星期一 18:02:00 CST
[root@eth0 ~]# date +%m%d%H%M%S
0819150511
[root@eth0 ~]# date 0819150511
Fri Aug 19 15:05:00 EST 2011
[root@qls ~]# date +%F
2019-12-24
[root@qls ~]# date -d "+1 day" +%F
2019-12-25
[root@qls ~]# date +%F
2019-12-24
[root@qls ~]# date -d "-1 day" +%F
2019-12-23
[root@qls ~]# date -d "-1 year" +%F
2018-12-24
[root@qls ~]# date -d "-1 month" +%F
2019-11-24
-s #修改时间,只有root权限才能设置,其他只能查看。
[root@qls ~]# date -s 20191001
Tue Oct 1 00:00:00 CST 2019
[root@qls ~]# date +%F
2019-10-01
[root@qls ~]# date -s 2019/12/1
Sun Dec 1 00:00:00 CST 2019
[root@qls ~]# date +%F
2019-12-01
[root@qls ~]# date -s 12:26:00
Sun Dec 1 12:26:00 CST 2019
[root@qls ~]# date -s "20191224 12:27:00"
Tue Dec 24 12:27:00 CST 2019
[root@qls ~]# date +%F
2019-12-24
[root@qls ~]# date
Tue Dec 24 12:27:10 CST 2019
[root@eth0 ~]# date -d "2015-11-15 23:00:01"
Mon Nov 15 23:00:01 PST 2015
[root@eth0 ~]# date -d "2015/11/15 23:0:2"
Mon Nov 15 23:00:02 PST 2015
[root@eth0 ~]# date -d "2015/11/15T23:0:2"
Mon Nov 15 08:00:02 PST 2015
[root@eth0 ~]# echo "2015-11-15 23:00:01" > date.txt
[root@eth0 ~]# echo "2015/11/15 23:00:02" >> date.txt
[root@eth0 ~]# cat date.txt
2015-11-15 23:00:01
2015/11/15 23:00:02
[root@eth0 ~]# date -f date.txt
Mon Nov 15 23:00:01 PST 2015
Mon Nov 15 23:00:02 PST 2015
[root@eth0 ~]# date -r date.txt
Mon Nov 15 21:14:36 PST 2015
[root@eth0 ~]# date -I
2015-11-15
[root@eth0 ~]# date -Ihours
2015-11-15T21-0800
[root@eth0 ~]# date -Iminutes
2015-11-15T21:16-0800
[root@eth0 ~]# date -Iseconds
2015-11-15T21:16:24-0800
[root@eth0 ~]# date -R
Mon, 15 Nov 2015 21:47:08 -0800
[root@eth0 ~]# date -u
Tue Nov 16 05:47:13 UTC 2015
[root@eth0 ~]# date +"Today is %A."
Today is Monday.
[root@eth0 ~]# date +"Date:%b. %e, %G"
Date:Nov. 15, 2015
[root@eth0 ~]# date +"Date: %b.%e, %G"
Date: Nov.15, 2015
[root@eth0 ~]# date +"%x %X"
11/15/2015 09:50:21 PM
[root@eth0 ~]# date +"%Y-%m-%d %H:%M:%S"
2015-11-15 21:51:32
[root@eth0 ~]# date +"%Y-%m-%d %I:%M:%S %p"
2015-11-15 09:51:55 PM
#怎么同步系统的时间
[root@qls ~]# yum install -y ntpdate
[root@qls ~]# ntpdate ntp1.aliyun.com
24 Dec 12:29:02 ntpdate[8593]: step time server 120.25.115.20 offset 9203309.341117 sec
[root@qls ~]# date
Tue Dec 24 12:29:34 CST 2019
99. rpm
#基于本地的rpm包进行管理
-i #安装
-v #显示安装过程
-h #显示安装的进度
-e #卸载
-U #升级
-q #查询软件包是否安装
-qa #查询所有的已安装的软件包
-ql #查看软件包中的列表信息
-qc #查看软件包的相关配置文件
-qi #显示软件包的本身信息
-qf #查看命令属于哪个软件包
组合:
-ivh # 显示安装过程和进度
-Uvh # 显示升级过程和进度
[root@qls ~]# mount /dev/cdrom /mnt #挂载光盘
mount: /dev/sr0 is write-protected, mounting read-only
[root@qls ~]# df -h #查看光盘使用率
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 1.6G 46G 4% /
devtmpfs 980M 0 980M 0% /dev
tmpfs 991M 0 991M 0% /dev/shm
tmpfs 991M 9.6M 981M 1% /run
tmpfs 991M 0 991M 0% /sys/fs/cgroup
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 199M 0 199M 0% /run/user/0
/dev/sr0 4.3G 4.3G 0 100% /mnt
[root@qls ~]# rpm -ivh /mnt/Packages/wget-1.14-18.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:wget-1.14-18.el7 ################################# [100%]
[root@qls ~]# rpm -e wget #卸载软件包
#rpm安装太需要依赖,例如:
#安装httpd
#第一步,安装报错
[root@qls ~]# rpm -ivh /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
error: Failed dependencies:
/etc/mime.types is needed by httpd-2.4.6-88.el7.centos.x86_64
httpd-tools = 2.4.6-88.el7.centos is needed by httpd-2.4.6-88.el7.centos.x86_64
libapr-1.so.0()(64bit) is needed by httpd-2.4.6-88.el7.centos.x86_64
libaprutil-1.so.0()(64bit) is needed by httpd-2.4.6-88.el7.centos.x86_64
#第二步,安装依赖httpd-tools,出现报错
[root@qls ~]# rpm -ivh /mnt/Packages/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
error: Failed dependencies:
libapr-1.so.0()(64bit) is needed by httpd-tools-2.4.6-88.el7.centos.x86_64
libaprutil-1.so.0()(64bit) is needed by httpd-tools-2.4.6-88.el7.centos.x86_64
#第三步,尝试安装apr
[root@qls ~]# rpm -ivh /mnt/Packages/lib
Display all 631 possibilities? (y or n)
[root@qls ~]# ll /mnt/Packages/ |grep apr
-rw-rw-r--. 1 root root 105728 Nov 29 2017 apr-1.4.8-3.el7_4.1.x86_64.rpm
-rw-rw-r--. 1 root root 192652 Nov 29 2017 apr-devel-1.4.8-3.el7_4.1.x86_64.rpm
-rw-rw-r--. 1 root root 94132 Jul 4 2014 apr-util-1.5.2-6.el7.x86_64.rpm
-rw-rw-r--. 1 root root 78072 Jul 4 2014 apr-util-devel-1.5.2-6.el7.x86_64.rpm
-rw-rw-r--. 1 root root 854420 Nov 12 2018 haproxy-1.5.18-8.el7.x86_64.rpm
[root@qls ~]# rpm -ivh /mnt/Packages/apr-1.4.8-3.el7_4.1.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:apr-1.4.8-3.el7_4.1 ################################# [100%]
#第四步,尝试安装apr-utils
[root@qls ~]# rpm -ivh /mnt/Packages/apr-util-1.5.2-6.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:apr-util-1.5.2-6.el7 ################################# [100%]
第五步,再次尝试安装httpd-tools
[root@qls ~]# rpm -ivh /mnt/Packages/httpd-tools-2.4.6-88.el7.centos.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:httpd-tools-2.4.6-88.el7.centos ################################# [100%]
第六步,搜索文件的相关软件包
[root@qls ~]# ll /etc/mime.types
ls: cannot access /etc/mime.types: No such file or directory
[root@qls ~]# yum search mime.types
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* epel: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.cn99.com
* webtatic: uk.repo.webtatic.com
======================================================== Matched: mime.types ========================================================
mailcap.noarch : Helper application and MIME type associations for file types
nodejs-mime-db.noarch : This is a database of all mime types
perl-LWP-MediaTypes.noarch : Guess media type for a file or a URL
#第七步,安装这个软件包
[root@qls ~]# rpm -ivh /mnt/Packages/mailcap-2.1.41-2.el7.noarch.rpm
Preparing... ################################# [100%]
Updating / installing...
1:mailcap-2.1.41-2.el7 ################################# [100%]
#第八步,安装httpd
[root@qls ~]# rpm -ivh /mnt/Packages/httpd-2.4.6-88.el7.centos.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:httpd-2.4.6-88.el7.centos ################################# [100%]
#卸载
[root@qls ~]# rpm -e samba
#联网安装软件包
[root@qls ~]# rpm -ivh https://mirrors.aliyun.com/centos/7.7.1908/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
Retrieving https://mirrors.aliyun.com/centos/7.7.1908/os/x86_64/Packages/tree-1.6.0-10.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:tree-1.6.0-10.el7 ################################# [100%]
#升级
1.#安装的低版本
[root@qls ~]# rpm -ivh https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
Retrieving https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/x86_64/zabbix-agent-4.0.0-2.el7.x86_64.rpm
warning: /var/tmp/rpm-tmp.KOZSpr: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-agent-4.0.0-2.el7 ################################# [100%]
[root@qls ~]# zabbix_agentd -V
zabbix_agentd (daemon) (Zabbix) 4.0.0
Revision 85308 1 October 2018, compilation time: Oct 1 2018 08:41:36
Copyright (C) 2018 Zabbix SIA
License GPLv2+: GNU GPL version 2 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it according to
the license. There is NO WARRANTY, to the extent permitted by law.
2.#升级到高的版本
[root@qls ~]# rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.0-1.el7.x86_64.rpm
Retrieving https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-agent-4.2.0-1.el7.x86_64.rpm
warning: /var/tmp/rpm-tmp.RaHxd0: Header V4 RSA/SHA512 Signature, key ID a14fe591: NOKEY
Preparing... ################################# [100%]
Updating / installing...
1:zabbix-agent-4.2.0-1.el7 ################################# [ 50%]
Cleaning up / removing...
2:zabbix-agent-4.0.0-2.el7 ################################# [100%]
#查询指定的软件包是否安装
[root@qls ~]# rpm -q httpd
httpd-2.4.6-88.el7.centos.x86_64
[root@qls ~]# rpm -q samba
package samba is not installed
#查询所有的已安装的软件包
[root@qls ~]# rpm -qa | grep tree
tree-1.6.0-10.el7.x86_64
#查询跟软件包相关的列表文件
[root@qls ~]# rpm -ql httpd
/etc/httpd
/etc/httpd/conf
/etc/httpd/conf.d
/etc/httpd/conf.d/README
#查看一个软件的相关配置文件
[root@qls ~]# rpm -qc httpd
/etc/httpd/conf.d/autoindex.conf
/etc/httpd/conf.d/userdir.conf
/etc/httpd/conf.d/welcome.conf
/etc/httpd/conf.modules.d/00-base.conf
/etc/httpd/conf.modules.d/00-dav.conf
/etc/httpd/conf.modules.d/00-lua.conf
/etc/httpd/conf.modules.d/00-mpm.conf
/etc/httpd/conf.modules.d/00-proxy.conf
/etc/httpd/conf.modules.d/00-systemd.conf
/etc/httpd/conf.modules.d/01-cgi.conf
/etc/httpd/conf/httpd.conf
/etc/httpd/conf/magic
/etc/logrotate.d/httpd
/etc/sysconfig/htcacheclean
/etc/sysconfig/httpd
#显示软件包的本身相关信息
[root@qls ~]# rpm -qi httpd
Name : httpd
Version : 2.4.6
Release : 88.el7.centos
Architecture: x86_64
Install Date: Wed 25 Dec 2019 10:16:42 AM CST
Group : System Environment/Daemons
Size : 9817309
License : ASL 2.0
Signature : RSA/SHA256, Mon 12 Nov 2018 10:28:53 PM CST, Key ID 24c6a8a7f4a80eb5
Source RPM : httpd-2.4.6-88.el7.centos.src.rpm
Build Date : Mon 05 Nov 2018 09:48:57 AM CST
Build Host : x86-01.bsys.centos.org
Relocations : (not relocatable)
Packager : CentOS BuildSystem <http://bugs.centos.org>
Vendor : CentOS
URL : http://httpd.apache.org/
Summary : Apache HTTP Server
Description :
The Apache HTTP Server is a powerful, efficient, and extensible
web server.
#查看命令属于哪个软件包,前提必须使用绝对路径查询,本地必须要有这个命令
[root@qls ~]# rpm -qf `which ifconfig`
net-tools-2.0-0.25.20131004git.el7.x86_64
100. yum
#
选项:
repolist #显示仓库列表
enabled #显示可用的
disabled #显示不可用的
all #显示所有仓库
install #安装
-y #免交互方式安装
--downloadonly #只下载
--downloaddir #指定下载之后的路径
list #显示所有可安装的软件包列表
installed #显示已安装
updates #显示可更新的
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 仓库名称 #启用该仓库
[root@qls ~]# ll /etc/yum.repos.d/*.repo # yum配置文件
[root@qls ~]# ll /etc/yum.conf # yum配置文件
#清除以前的yum仓库
[root@qls ~]# rm -rf /etc/yum.repos.d/*
#更新基础源
[root@qls ~]# curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 2523 100 2523 0 0 59300 0 --:--:-- --:--:-- --:--:-- 60071
[root@qls ~]# ll /etc/yum.repos.d/
total 4
-rw-r--r--. 1 root root 2523 Dec 25 11:22 CentOS-Base.repo
#更新epel源
[root@qls ~]# curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 664 100 664 0 0 17944 0 --:--:-- --:--:-- --:--:-- 18444
[root@qls ~]# ll /etc/yum.repos.d/
total 8
-rw-r--r--. 1 root root 2523 Dec 25 11:22 CentOS-Base.repo
-rw-r--r--. 1 root root 664 Dec 25 11:23 epel.repo
#显示仓库列表
[root@qls ~]# yum repolist #显示可用的仓库
[root@qls ~]# yum repolist enabled #显示可用的仓库
[root@qls ~]# yum repolist disabled #显示不可用的仓库
[root@qls ~]# yum repolist all #显示所有的仓库
#下载 yum仓库管理命令
[root@qls ~]# yum install -y yum-utils
[root@qls ~]# yum-config-manager --disable epel #禁用某个仓库
enabled = 0 #仓库禁用
[root@qls ~]# yum-config-manager --enable epel #启用某个仓库
enabled = 1 #仓库启用
#显示系统中所有安装包
[root@qls ~]# yum list
[root@qls ~]# yum list | grep ^tree #显示已tree开头的软件包
tree.x86_64 1.6.0-10.el7 @base
treelayout.noarch 1.0.3-4.el7 epel
treelayout-demo.noarch 1.0.3-4.el7 epel
treelayout-javadoc.noarch 1.0.3-4.el7 epel
[root@qls ~]# yum list tre? #使用统配符方式查询
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Installed Packages
tree.x86_64 1.6.0-10.el7
#显示系统中已经安装过的包
[root@qls ~]# yum list installed |grep tree
tree.x86_64 1.6.0-10.el7 @base
#显示系统中所有可更新的包
[root@qls ~]# yum list updates
[root@qls ~]# yum check-update
[root@qls ~]# yum update -y #更新系统中所有可更新的包
[root@qls ~]# rpm -qa httpd
httpd-2.4.6-88.el7.centos.x86_64
[root@qls ~]# yum update httpd -y #更新指定的软件包
[root@qls ~]# rpm -qa httpd
httpd-2.4.6-90.el7.centos.x86_64
[root@qls ~]# yum install tree #交互式下载安装
[root@qls ~]# yum install tree -y #面交互方式进行下载安装
#显示软件包的详细信息
[root@qls ~]# yum info tree
Loaded plugins: fastestmirror
Loading mirror speeds from cached hostfile
* base: mirrors.aliyun.com
* extras: mirrors.aliyun.com
* updates: mirrors.aliyun.com
Installed Packages
Name : tree
Arch : x86_64
Version : 1.6.0
Release : 10.el7
Size : 87 k
Repo : installed
From repo : base
Summary : File system tree viewer
URL : http://mama.indstate.edu/users/ice/tree/
License : GPLv2+
Description : The tree utility recursively displays the contents of directories in a
: tree-like format. Tree is basically a UNIX port of the DOS tree
: utility.
#使用网络地址进行下载
[root@qls ~]# yum install -y https://mirrors.aliyun.com/zabbix/zabbix/4.2/rhel/7/x86_64/zabbix-get-4.2.0-1.el7.x86_64.rpm
#yum安装本地的rpm包
[root@qls ~]# yum localinstall -y /mnt/Packages/tree-1.6.0-10.el7.x86_64.rpm
#重新安装软件包,遇到软件包的配置不存在的情况下
[root@qls ~]# systemctl start httpd
[root@qls ~]# netstat -lntp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 6900/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 7002/master
tcp6 0 0 :::80 :::* LISTEN 59690/httpd
tcp6 0 0 :::22 :::* LISTEN 6900/sshd
tcp6 0 0 ::1:25 :::* LISTEN 7002/master
[root@qls ~]# rm -f /etc/httpd/
conf/ conf.d/ conf.modules.d/ logs/ modules/ run/
[root@qls ~]# rm -f /etc/httpd/conf/
httpd.conf magic
[root@qls ~]# rm -f /etc/httpd/conf/httpd.conf
[root@qls ~]# systemctl restart httpd
Job for httpd.service failed because the control process exited with error code. See "systemctl status httpd.service" and "journalctl -xe" for details.
[root@qls ~]# yum install -y httpd
[root@qls ~]# yum reinstall -y httpd #重新安装
[root@qls ~]# systemctl restart httpd
[root@qls ~]# ll /etc/httpd/conf/httpd.conf
-rw-r--r--. 1 root root 11753 Aug 6 21:44 /etc/httpd/conf/httpd.conf
#删除软件包
[root@qls ~]# yum remove httpd -y
[root@qls ~]# yum erase tree -y
#查询某个命令属于哪个包
[root@qls ~]# yum provides ifconfig
#yum搜索
[root@qls ~]# yum search tree
#清空缓存
[root@qls ~]# yum clean packages #清空包的缓存
[root@qls ~]# yum clean all #清空所有缓存
#生成缓存
[root@qls ~]# yum makecache
yum缓存
[root@qls ~]# vi /etc/yum.conf
keepcache=1 #启用缓存
#只下载,不安装,指定下载保存的路径
[root@qls ~]# yum install -y vim --downloadonly --downloaddir=/opt
yum组包的安装与卸载
[root@qls ~]# yum groups install -y Python
[root@qls ~]# yum groups remove -y Pytho
yum历史记录
[root@qls ~]# yum history list #显示yum命令的历史事务
#查看某个历史事务的详细信息
[root@qls ~]# yum history info 22
Loaded plugins: fastestmirror
Transaction ID : 22
Begin time : Wed Dec 25 12:21:56 2019
Begin rpmdb : 413:37346fef19ff93dfdf7a691c83d7bd3187854d47
End time : 12:21:57 2019 (1 seconds)
End rpmdb : 414:5f3ff113beb46184eda52a8bf4e45613b14a26b6
User : root <root>
Return-Code : Success
Command Line : install -y tree
Transaction performed with:
Installed rpm-4.11.3-35.el7.x86_64 @anaconda
Installed yum-3.4.3-161.el7.centos.noarch @anaconda
Installed yum-plugin-fastestmirror-1.1.31-50.el7.noarch @anaconda
Packages Altered:
Install tree-1.6.0-10.el7.x86_64 @base
history info
#回滚之前的操作
[root@qls ~]# yum history undo 22 -y
#显示所有的历史事务
[root@qls ~]# yum history list all
#指定历史事务的显示
[root@qls ~]# yum --setopt=history_list_view=commands history list all
Loaded plugins: fastestmirror
ID | Command line | Date and time | Action(s) | Altered
-------------------------------------------------------------------------------
26 | history undo 22 | 2019-12-25 12:30 | Erase | 1
25 | groups remove -y Python | 2019-12-25 12:27 | Erase | 10
24 | groups install -y Python | 2019-12-25 12:26 | I, U | 34
23 | localinstall -y /opt/gpm | 2019-12-25 12:25 | Install | 4
磁盘管理
101. mount
#用于加载文件系统到指定的加载点。此命令的最常用于挂载cdrom,使我们可以访问cdrom中的数据,也可将经常使用的设备写入文件/etc/fstab,以使系统在每次启动时自动加载。mount加载设备的信息记录在/etc/mtab文件中。使用umount命令卸载设备时,记录将被清除。
语法
mount (选项) (参数)
选项
-w #以可读写模式加载设备,默认设置
-V #显示程序版本信息
-l #显示已加载的文件系统列表
-h #显示帮助信息并退出
-v #输出指令执行的详细信息
-f #不实际加载设备。可与-v等参数同时使用以查看mount的执行过程
-n #加载没有写入文件“/etc/mtab”中的文件系统
-r #将文件系统加载为只读模式
-F #需与-a参数同时使用。所有在/etc/fstab中设置的设备会被同时加载,可加快执行速度
-L+<标签> #加载文件系统标签为<标签>的设备
-a #重新加载开机自启动挂载列表
-t+<文件系统类型> #指定挂载分区的文件系统。
#常用的文件系统:
minix #Linux最早使用的文件系统。
ext2 #Linux目前的常用文件系统。
msdos #MS-DOS 的 FAT。
vfat #Win85/98 的 VFAT。
nfs #网络文件系统。
iso9660 #CD-ROM光盘的标准文件系统。
ntfs #Windows NT的文件系统。
hpfs #OS/2文件系统。Windows NT 3.51之前版本的文件系统。
auto #自动检测文件系统。
ubifs #(Unsorted Block Image File System, UBIFS)无序区块镜像文件系统是用于固态存储 设备上,为JFFS2的后继文件系统之一
-o<选项> #指定加载文件系统参数。有些选项也可在/etc/fstab中使用
#常用的文件系统参数
async #以非同步的方式执行文件系统的输入输出动作。
atime #每次存取都更新inode的存取时间,默认设置,取消选项为noatime。
auto #必须在/etc/fstab文件中指定此选项。执行-a参数时,会加载设置为auto的设备,取消 选取为noauto。
defaults #使用默认的选项。默认选项为rw、suid、dev、exec、anto nouser与async。
dev #可读文件系统上的字符或块设备,取消选项为nodev。
exec #可执行二进制文件,取消选项为noexec。
loop #用来把一个文件当成硬盘分区挂接上系统。
noatime #每次存取时不更新inode的存取时间。
noauto #无法使用-a参数来加载。
nodev #不读文件系统上的字符或块设备。
noexec #无法执行二进制文件。
nosuid #关闭set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位。
nouser #使一位用户无法执行加载操作,默认设置。
remount #重新加载设备。通常用于改变设备的设置状态。
ro #以只读模式加载。
rw #以可读写模式加载。
suid #启动set-user-identifier(设置用户ID)与set-group-identifer(设置组ID)设置位, 取消选项为nosuid。
sync #以同步方式执行文件系统的输入输出动作。
user #可以让一般用户加载设备。
参数
设备文件名: 指定要加载的文件系统对应的设备名;
加载点: 指定加载点目录。
[root@qls ~]# mount -t auto /dev/cdrom /mnt/cdrom
mount: mount point /mnt/cdrom does not exist /mnt/cdrom目录不存在,需要先创建。
[root@qls ~]# cd /mnt
-bash: cd: /mnt: No such file or directory
[root@qls ~]# mkdir -p /mnt/cdrom 创建/mnt/cdrom目录
[root@qls ~]# ls
bin dev home lib media mnt proc sbin srv tmp var
boot etc initrd lost+found misc opt root selinux sys usr
[root@qls ~]# mount -t auto /dev/cdrom /mnt/cdrom 挂载cdrom
mount: block device /dev/cdrom is write-protected, mounting read-only 挂载成功
[root@qls ~]# ll /mnt/cdrom 查看cdrom里面内容
total 859
dr-xr-xr-x 4 root root 2048 Sep 4 2005 CentOS
-r--r--r-- 2 root root 8859 Mar 19 2005 centosdocs-man.css
-r--r--r-- 9 root root 18009 Mar 1 2005 GPL
dr-xr-xr-x 2 root root 241664 May 7 02:32 headers
dr-xr-xr-x 4 root root 2048 May 7 02:23 images
dr-xr-xr-x 2 root root 4096 May 7 02:23 isolinux
dr-xr-xr-x 2 root root 18432 May 2 18:50 NOTES
-r--r--r-- 2 root root 5443 May 7 01:49 RELEASE-NOTES-en.html
dr-xr-xr-x 2 root root 2048 May 7 02:34 repodata
-r--r--r-- 9 root root 1795 Mar 1 2005 rpm-GPG-KEY
-r--r--r-- 2 root root 1795 Mar 1 2005 RPM-GPG-KEY-centos4
-r--r--r-- 1 root root 571730 May 7 01:39 yumgroups.xml
[root@eth0 ~]# mount -l #列出所挂载的系统
[root@eth0 ~]# mount /dev/sda1 /media/usb #挂载u盘
[root@eth0 ~]# mount --bind /media/usb /mnt #将已挂载的设备移到其他目录
[root@eth0 ~]# mount -o loop ./abc.iso /mnt/cdrom #将ISO文件
[root@eth0 ~]# mount -t ntfs-3g /dev/sda1 /mnt/windows #挂载windows盘
[root@eth0 ~]# mount -o username=xiexiangrong,password=xxxxxx -l //192.168.6.2/soft /mnt #访问windows共享文件
-o username= windows user,password=访问密码
-l //网络地址/共享文件
对ntfs格式的磁盘分区应使用-t ntfs 参数,对fat32格式的磁盘分区应使用-t vfat参数。若汉字文件名显示为乱码或不显示,可以使用下面的命令格式。
[root@eth0 ~]# mount -t ntfs -o iocharset=cp936 /dev/sdc1 /mnt/usbhd1
使用目录/mnt/vcdrom,即可访问盘镜像文件mydisk.iso中的所有文件。
[root@eth0 ~]# mount -o loop -t iso9660 /home/sunky/mydisk.iso /mnt/vcdrom
administrator 和 pldy123 是ip地址为10.140.133.23 windows计算机的一个用户名和密码,c$是这台计算机的一个磁盘共享
[root@eth0 ~]# mount -t smbfs -o username=administrator,password=pldy123 //10.140.133.23/c$ /mnt/samba
这里我们假设10.140.133.9是NFS服务端的主机IP地址,当然这里也可以使用主机名,但必须在本机/etc/hosts文件里增加服务端ip定义。/export/home/sunky为服务端共享的目录。
[root@eth0 ~]# mount -t nfs -o rw 10.140.133.9:/export/home/sunky /mnt/nfs
102. df、du
#df显示磁盘空间的使用情况,默认显示单位为KB。可以获取硬盘被占用了多少空间,目前还剩下多少空间等信息。
#du显示磁盘空间的使用情况,但是与df命令不同的是du命令是对文件和目录磁盘使用的空间的查看.
#df语法
df(选项)(参数)
#df选项
-a #包含全部的文件系统
--block-size=<区块大小> #以指定的区块大小来显示区块数目
-h #以可读性较高的方式来显示信息
-H #与-h参数相同,但在计算时是以1000 Bytes为换算单位而非1024 Bytes
-i #显示inode的信息
-k #指定区块大小为1024字节
-l #仅显示本地端的文件系统
-m #指定区块大小为1048576字节
--no-sync #在取得磁盘使用信息前,不要执行sync指令,此为预设值
-P #使用POSIX的输出格式
--sync #在取得磁盘使用信息前,先执行sync指令
-t<文件> #仅显示指定文件系统类型的磁盘信息
-T #显示文件系统的类型
-x<文件> #不要显示指定文件系统类型的磁盘信息
#df参数
文件:指定文件系统上的文件。
#du语法
du [选项][文件]
#du选项
-a #显示目录中个别文件的大小。
-b #显示目录或文件大小时,以byte为单位。
-c #除了显示个别目录或文件的大小外,同时也显示所有目录或文件的总和。
-k #以KB(1024bytes)为单位输出。
-m #以MB为单位输出。
-s #仅显示总计,只列出最后加总的值。
-h #以K,M,G为单位,提高信息的可读性。
-x #以一开始处理时的文件系统为准,若遇上其它不同的文件系统目录则略过。
-L<符号链接> #显示选项中所指定符号链接的源文件大小。
-S #显示个别目录的大小时,并不含其子目录的大小。
-X<文件> #在<文件>指定目录或文件。
--exclude=<目录或文件> #略过指定的目录或文件。
-D #显示指定符号链接的源文件大小。
-H #与-h参数相同,但是K,M,G是以1000为换算单位。
-l #重复计算硬件链接的文件。
#df实例
#查看系统磁盘设备,默认是KB为单位:
[root@eth0 ~]# df
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
#使用-h选项以KB以上的单位来显示,可读性高:
[root@eth0 ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/sda2 140G 27G 106G 21% /
/dev/sda1 996M 61M 884M 7% /boot
tmpfs 1009M 0 1009M 0% /dev/shm
/dev/sdb1 2.7T 209G 2.4T 8% /data1
#查看全部文件系统:
[root@eth0 ~]# df -a
文件系统 1K-块 已用 可用 已用% 挂载点
/dev/sda2 146294492 28244432 110498708 21% /
proc 0 0 0 - /proc
sysfs 0 0 0 - /sys
devpts 0 0 0 - /dev/pts
/dev/sda1 1019208 62360 904240 7% /boot
tmpfs 1032204 0 1032204 0% /dev/shm
/dev/sdb1 2884284108 218826068 2518944764 8% /data1
none 0 0 0 - /proc/sys/fs/binfmt_misc
[root@eth0 ~]# df -ia #列出各文件系统ionde使用情况
[root@eth0 ~]# df -T #列出文件系统的类型
[root@eth0 ~]# df -k #以单位显示磁盘的使用情况
[root@eth0 ~]# df -a #显示所有文件系统的磁盘使用情况
[root@eth0 ~]# df -h --total #显示所有文件系统的磁盘使用情况汇总
Filesystem Size Used Avail Use% Mounted on
/dev/mapper/VolGroup-lv_root 356G 45G 293G 14% /
tmpfs 3.9G 68K 3.9G 1% /dev/shm
/dev/sda1 485M 40M 420M 9% /boot
/dev/mapper/VolGroup-lv_home 84G 27G 54G 33% /home
/dev/mapper/VolGroup-mytest 15G 166M 14G 2% /mnt/mytest
total 459G 72G 365G 17%
[root@eth0 ~]# df -t ext4 #显示ext4系统类型的信息
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 373083968 47049784 307086592 14% /
/dev/sda1 495844 40339 429905 9% /boot
/dev/mapper/VolGroup-lv_home 87730488 27407812 55866232 33% /home
/dev/mapper/VolGroup-mytest 15481840 169460 14525948 2% /mnt/mytest
[root@eth0 ~]# df -x ext3 #打印除 ext3 外所有的文件系统
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/mapper/VolGroup-lv_root 373083968 47049796 307086580 14% /
tmpfs 3988852 68 3988784 1% /dev/shm
/dev/sda1 495844 40339 429905 9% /boot
/dev/mapper/VolGroup-lv_home 87730488 27407812 55866232 33% /home
/dev/mapper/VolGroup-mytest 15481840 169460 14525948 2% /mnt/mytest
#du实例
[root@qls ~]# du #显示目录或者文件所占空间,只显示当前目录下面的子目录的目录大小和当前目录的总608 ./test6 的大小,最下面的1288为当前目录的总大小
308 ./test4
4 ./scf/lib
4 ./scf/service/deploy/product
4 ./scf/service/deploy/info
12 ./scf/service/deploy
16 ./scf/service
4 ./scf/doc
4 ./scf/bin
32 ./scf
8 ./test3
1288 .
[root@qls ~]# du log2012.log #显示指定文件所占空间
300 log2012.log
[root@qls ~]# du scf #查看指定目录的所占空间
4 scf/lib
4 scf/service/deploy/product
4 scf/service/deploy/info
12 scf/service/deploy
16 scf/service
4 scf/doc
4 scf/bin
32 scf
[root@qls ~]# du log30.tar.gz log31.tar.gz #显示多个文件所占空间
4 log30.tar.gz
4 log31.tar.gz
[root@qls ~]# du -s #只显示总和的大小
1288 .
[root@qls ~]# du -s scf
32 scf
[root@qls ~]# cd ..
[root@localhost soft]# du -s test
1288 test
103. umount
#卸载已经加载的分区。利用设备名或挂载点都能umount文件系统,不过最好还是通过挂载点卸载,以免使用绑定挂载(一个设备,多个挂载点)时产生混乱。
语法
umount(选项)(参数)
选项
-a #卸除/etc/mtab中记录的所有文件系统;
-h #显示帮助;
-n #卸除时不要将信息存入/etc/mtab文件中;
-r #若无法成功卸除,则尝试以只读的方式重新挂入文件系统;
-t<文件系统类型> #仅卸除选项中所指定的文件系统;
-v #执行时显示详细的信息;
-V #显示版本信息。
-f #强制卸载(对于无法访问的NFS系统)
-l #强制卸载(从文件系统层次分离文件系统,在不繁忙的情况下清理所有对文件系统的引用)
参数
文件系统:指定要卸载的文件系统或者其对应的设备文件名。
#通过设备名卸载
[root@eth0 ~]# umount -v /dev/sda1 #通过设备名卸载,并显示详细过程
/dev/sda1 umounted
#通过挂载点卸载
[root@eth0 ~]# umount -v /mnt/mymount/
/tmp/diskboot.img umounted
#如果设备正忙,卸载即告失败。卸载失败的常见原因是,某个打开的shell当前目录为挂载点里的某个目录:
[root@eth0 ~]# umount -v /mnt/mymount/
umount: /mnt/mymount: device is busy
umount: /mnt/mymount: device is busy
#有时,导致设备忙的原因并不好找。碰到这种情况时,可以用lsof列出已打开文件,然后搜索列表查找待卸载的挂载点:
[root@eth0 ~]# lsof | grep mymount 查找mymount分区里打开的文件
bash 9341 francois cwd DIR 8,1 1024 2 /mnt/mymount
从上面的输出可知,mymount分区无法卸载的原因在于,francois运行的PID为9341的bash进程。
#对付系统文件正忙的另一种方法是执行延迟卸载:
[root@eth0 ~]# umount -vl /mnt/mymount/ 执行延迟卸载
#延迟卸载(lazy unmount)会立即卸载目录树里的文件系统,等到设备不再繁忙时才清理所有相关资源。卸载可移动存储介质还可以用eject命令。下面这条命令会卸载cd并弹出CD:
[root@eth0 ~]# eject /dev/cdrom 卸载并弹出CD
[root@qls 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@qls mbr]# umount -l /mbr #强制卸载
[root@qls 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@qls 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@qls mbr]# cd #切换到其他目录进行卸载
[root@qls ~]# umount /mbr/
104. fdisk
#查看硬盘实际使用情况,硬盘分区,fdisk不支持2T以上的硬盘分区,使用MBR分区表(主引导记录)
语法
fdisk(选项)(参数)
选项
-b<分区大小> #指定每个分区的大小
-l #列出指定的外围设备的分区表状况
-s<分区编号> #将指定的分区大小输出到标准输出上,单位为区块
-u #搭配"-l"参数列表,会用分区数目取代柱面数目,来表示每个分区的起始地址
-v #显示版本信息
-c #以柱面显示
参数
设备文件:指定要进行分区或者显示分区的硬盘设备文件。
实例
1. 准备环境,添加一块磁盘
[root@qls ~]# 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
sdc 8:32 0 3T 0 disk
sr0 11:0 1 4.3G 0 rom
2. 开始进行分区
[root@qls ~]# 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: 0x000cd652
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@qls ~]# 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 0x431a98f5.
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: 0x431a98f5
Device Boot Start End Blocks Id System
/dev/sdb1 2048 20973567 10485760 83 Linux
Command (m for help): n
Partition type:
p primary (2 primary, 0 extended, 2 free)
e extended
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: 0x431a98f5
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: 0x431a98f5
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):
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: 0x431a98f5
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.
#检查结果
[root@qls ~]# ll /dev/sd*
brw-rw----. 1 root disk 8, 0 Dec 31 18:45 /dev/sda
brw-rw----. 1 root disk 8, 1 Dec 31 18:45 /dev/sda1
brw-rw----. 1 root disk 8, 2 Dec 31 18:45 /dev/sda2
brw-rw----. 1 root disk 8, 3 Dec 31 18:45 /dev/sda3
brw-rw----. 1 root disk 8, 16 Dec 31 19:27 /dev/sdb
brw-rw----. 1 root disk 8, 17 Dec 31 19:27 /dev/sdb1
brw-rw----. 1 root disk 8, 20 Dec 31 19:27 /dev/sdb4
brw-rw----. 1 root disk 8, 21 Dec 31 19:27 /dev/sdb5
brw-rw----. 1 root disk 8, 32 Dec 31 18:45 /dev/sdc
[root@qls ~]# 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
3. 格式化并创建文件系统
ext3 centos5 ext4 centos6 xfs centos 7 nfs 网络文件共享的文件系统
[root@qls ~]# mkfs -t xfs /dev/sdb1 ^C #两种写法
[root@qls ~]# mkfs.xfs /dev/sdb1
meta-data=/dev/sdb1 isize=512 agcount=4, agsize=655360 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2621440, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
4. 建立挂载点,进行挂载使用,没有挂载的设备是不能用的
[root@qls ~]# mkdir /mbr
[root@qls ~]# mount /dev/sdb1 /mbr
[root@qls ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 1.5G 47G 4% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 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/sdb1 10G 33M 10G 1% /mbr
[root@qls ~]# cp /etc/services /mbr/
[root@qls ~]# ll /mbr/
total 656
-rw-r--r--. 1 root root 670293 Dec 31 19:36 services
[root@qls ~]# umount /dev/sdb1 #卸载
[root@qls ~]# ll /mbr/
total 0
[root@qls ~]# ll /opt/
total 436
-rw-r--r--. 1 root root 26927 Nov 26 20:31 kaoshi.zip
-rw-r--r--. 1 root root 413973 Nov 26 20:20 windows-提交作业代码.zip
[root@qls ~]# mount /dev/sdb1 /opt/
[root@qls ~]# ll /opt/
total 656
-rw-r--r--. 1 root root 670293 Dec 31 19:36 services
[root@qls ~]# umount /dev/sdb1
[root@qls ~]# ll /opt/
total 436
-rw-r--r--. 1 root root 26927 Nov 26 20:31 kaoshi.zip
-rw-r--r--. 1 root root 413973 Nov 26 20:20 windows-提交作业代码.zip
#重启失效
5. 实现永久挂载
把挂载的命令写入开机自启动的列表中
[root@qls ~]# ll /etc/rc.local #开机自启动的文件列表,写完之后一定要加执行权限
lrwxrwxrwx. 1 root root 13 Nov 26 20:23 /etc/rc.local -> rc.d/rc.local
[root@qls ~]# ll /etc/rc.d/rc.local #开机自启动的文件列表,写完之后一定要加执行权限
-rw-r--r--. 1 root root 473 Oct 31 2018 /etc/rc.d/rc.local
将挂载信息写入到开机自启动挂载列表
[root@qls ~]# ll /etc/fstab
[root@qls ~]# vi /etc/fstab
[root@qls ~]# tail -1 /etc/fstab
/dev/sdb1 /mbr xfs defaults 0 0
[root@qls ~]# mount -a #重新加载自启动挂载列表
[root@qls ~]# df -h
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 1.5G 47G 4% /
devtmpfs 476M 0 476M 0% /dev
tmpfs 487M 0 487M 0% /dev/shm
tmpfs 487M 7.7M 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/sdb1 10G 33M 10G 1% /mbr
[root@qls ~]# reboot
[root@qls ~]# df -h #查看分区挂载情况
Filesystem Size Used Avail Use% Mounted on
/dev/sda3 48G 1.5G 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/sdb1 10G 33M 10G 1% /mbr
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
[root@server7 ~]# fdisk -cl /dev/vdb #以柱面显示
Disk /dev/vdb: 8589 MB, 8589934592 bytes
16 heads, 63 sectors/track, 16644 cylinders
Units = cylinders of 1008 * 512 = 516096 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disk identifier: 0xce720981
Device Boot Start End Blocks Id System
/dev/vdb1 3 206 102400 83 Linux
/dev/vdb2 206 409 102400 83 Linux
/dev/vdb3 409 612 102400 83 Linux
[root@server7 ~]# fdisk -ul /dev/vdb
Disk /dev/vdb: 8589 MB, 8589934592 bytes
16 heads, 63 sectors/track, 16644 cylinders, total 16777216 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 identifier: 0xce720981
Device Boot Start End Blocks Id System
/dev/vdb1 2048 206847 102400 83 Linux
Partition 1 does not end on cylinder boundary.
/dev/vdb2 206848 411647 102400 83 Linux
Partition 2 does not end on cylinder boundary.
/dev/vdb3 411648 616447 102400 83 Linux
Partition 3 does not end on cylinder boundary.
105. gdisk
#磁盘分区(支持2TB以上的分区,128个主分区,使用GPT分区表)
[root@qls ~]# yum install -y gdisk
选项
-b <size> #指定扇区大小(512,1024,2048或4096 B)
-c #关闭DOS兼容模式
-u <size> #以扇区编号取代柱面编号来表示每个分区的起始地址,一般与-l选项联合使用
-C <number> #指定柱面编号
-H <number> #指定磁头编号
-S <number> #指定磁道扇区编号
支持128主分区,支持2TB以上的分区,使用GPT的分区
1. 添加一块硬盘 3TB
[root@qls ~]# 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
2. 开始进行分区
[root@qls ~]# 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 #编辑BSD磁盘标签
c change a partition's name #设置DOS操作系统兼容标记(兼容/不兼容之间切换)
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) #创建一个新的空白的DOS分区表
p print the partition table #打印这个分区表
q quit without saving changes #退出不保存
r recovery and transformation options (experts only)
s sort partitions #创建一个新的空白的Sun磁盘标签
t change a partition's type code #改变一个分区的系统ID,就是改变分区类型
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'
Hex code or GUID (L to show codes, Enter = 8300): L #显示分区类型
0700 Microsoft basic data 0c01 Microsoft reserved 2700 Windows RE
3000 ONIE boot 3001 ONIE config 4100 PowerPC PReP boot
4200 Windows LDM data 4201 Windows LDM metadata 7501 IBM GPFS
7f00 ChromeOS kernel 7f01 ChromeOS root 7f02 ChromeOS reserved
8200 Linux swap 8300 Linux filesystem 8301 Linux reserved
8302 Linux /home 8400 Intel Rapid Start 8e00 Linux LVM
a500 FreeBSD disklabel a501 FreeBSD boot a502 FreeBSD swap
a503 FreeBSD UFS a504 FreeBSD ZFS a505 FreeBSD Vinum/RAID
a580 Midnight BSD data a581 Midnight BSD boot a582 Midnight BSD swap
a583 Midnight BSD UFS a584 Midnight BSD ZFS a585 Midnight BSD Vinum
a800 Apple UFS a901 NetBSD swap a902 NetBSD FFS
a903 NetBSD LFS a904 NetBSD concatenated a905 NetBSD encrypted
a906 NetBSD RAID ab00 Apple boot af00 Apple HFS/HFS+
af01 Apple RAID af02 Apple RAID offline af03 Apple label
af04 AppleTV recovery af05 Apple Core Storage be00 Solaris boot
bf00 Solaris root bf01 Solaris /usr & Mac Z bf02 Solaris swap
bf03 Solaris backup bf04 Solaris /var bf05 Solaris /home
bf06 Solaris alternate se bf07 Solaris Reserved 1 bf08 Solaris Reserved 2
bf09 Solaris Reserved 3 bf0a Solaris Reserved 4 bf0b Solaris Reserved 5
c001 HP-UX data c002 HP-UX service ea00 Freedesktop $BOOT
eb00 Haiku BFS ed00 Sony system partitio ed01 Lenovo system partit
Press the <Enter> key to see more codes: #翻页 回车翻页
ef00 EFI System ef01 MBR partition scheme ef02 BIOS boot partition
fb00 VMWare VMFS fb01 VMWare reserved fc00 VMWare kcore crash p
fd00 Linux RAID
Hex code or GUID (L to show codes, Enter = 8300):
Changed type of partition to 'Linux filesystem'
Command (? for help): p #打印这个分区表信息
Disk /dev/sdc: 6442450944 sectors, 3.0 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): FC5D373A-D55E-464F-AEB8-3F3AB214906D
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.
3. 格式化并创建文件系统
[root@qls ~]# mkfs.xfs /dev/sdc1
meta-data=/dev/sdc1 isize=512 agcount=4, agsize=201326527 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=805306107, imaxpct=5
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=393215, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
4. 建立挂载点,并进行挂载使用
[root@qls ~]# mkdir /gpt
[root@qls ~]# mount /dev/sdc1 /gpt
[root@qls ~]# 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/sdb1 10G 33M 10G 1% /mbr
/dev/sda1 497M 120M 378M 25% /boot
tmpfs 98M 0 98M 0% /run/user/0
/dev/sdc1 3.0T 33M 3.0T 1% /gpt
[root@qls ~]# 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
└─sdc1 8:33 0 3T 0 part /gpt
sr0 11:0 1 4.3G 0 rom
[root@qls ~]# dd if=/dev/zero of=/gpt/test.log bs=100M count=50
[root@qls ~]# ll /gpt/
total 5120000
-rw-r--r--. 1 root root 5242880000 Dec 31 20:16 test.log
[root@qls ~]# umount /gpt/
[root@qls ~]# ll /gpt/
total 0
[root@qls ~]# mount /dev/sdc1 /gpt
[root@qls ~]# ll /gpt/
total 5120000
-rw-r--r--. 1 root root 5242880000 Dec 31 20:16 test.log
5. 实现永久挂载
[root@qls ~]# tail -1 /etc/fstab
/dev/sdc1 /gpt xfs defaults 0 0
[root@qls ~]# mount -a
[root@qls ~]# 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/sdb1 10G 33M 10G 1% /mbr
/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
106. mkfs
#格式化新分区并创建文件系统, 只有root用户可以使用(fs:指定建立文件系统时的参数)
使用方式 : mkfs [-V] [-t fstype] [fs-options] filesys [blocks] [-L Lable]
参数 :
device #预备检查的硬盘分区,例如:/dev/sda1
-v #显示版本信息与详细的使用方法;
-V #详细显示模式
-t #给定档案系统的型式,Linux 的预设值为 ext2
-c #在制做档案系统前,检查该分区是否有坏轨
-l bad_blocks_file #将有坏轨的block资料加到 bad_blocks_file 里面
block #给定 block 的大小
-L #建立lable
补充说明:
mkfs本身并不执行建立文件系统的工作,而是去调用相关的程序来执行。例如,若在"-t" 参数中指定ext2,则
mkfs会调用mke2fs来建立文件系统.使用时如省略指定【块数】参数,mkfs会自动设置适当的块数.
[root@eth0 ~]# mkfs device /dev/sdc1 #预备检查硬盘分区/dev/sdc1
mke2fs 1.42.9 (28-Dec-2013)
mkfs.ext2: invalid blocks '/dev/sdc1' on device 'device'
[root@eth0 ~]#
[root@qls ~]# mkfs -t xfs /dev/sdb1 #两种写法
[root@qls ~]# mkfs.xfs /dev/sdb1
1.把该设备格式化成ext3文件系统
[root@eth0 ~]# mkfs -t ext3 /dev/sda6
2.此命令在 /dev/hd3 设备上创建了一个空的文件系统,将卷序列号设为 vol001,文件系统名为 works。新的文件系统占用了整个设备。文件系统具有缺省分段大小(4096 字节)和缺省 nbpi 比率(4096)
[root@eth0 ~]# mkfs -lworks -vvol001 /dev/hd3
3.在 /dev/lv01 设备上创建一个空的 4MB 的文件系统,其分段大小为 512 字节,且每 2048 个字节为一个 i-node
[root@eth0 ~]# mkfs -s 4M -o nbpi=2048, frag=512 /dev/lv01
4.创建了一个启用磁盘大文件的 JFS 文件系统,并且分配组大小为 64 兆字节,磁盘的每 131072 字节为一个 inode。文件系统的大小将成为逻辑卷 lv01 的大小
[root@eth0 ~]# mkfs -V jfs -o nbpi=131072,bf=true,ag=64 /dev/lv01
#在/dev/hda5上建一个msdos的档案系统,同时检查是否有坏轨存在,并且将过程详细列出来:
[root@eth0 ~]# mkfs -V -t msdos -c /dev/hda5
[root@eth0 ~]# mkfs -t ext3 /dev/sda6 #将sda6分区格式化为ext3格式
[root@eth0 ~]# mkfs -t ext2 /dev/sda7 #将sda7分区格式化为ext2格式
107. lsblk
#列出所有可用块设备的信息,并显示他们之间的依赖关系,默认以树状列出所有块设备,但是它不会列出RAM盘的信息。yum install -y util-linux
选项
-a #显示所有设备。
-b #以bytes方式显示设备大小。
-d #不显示 slaves 或 holders。
-D #print discard capabilities。
-e #排除设备 (default: RAM disks)。
-f #显示文件系统信息。
-h #显示帮助信息。
-i #use ascii characters only。
-m #显示权限信息。
-l #使用列表格式显示。
-n #不显示标题。
-o #输出列。
-P #使用key="value"格式显示。
-r #使用原始格式显示。
-t #显示拓扑结构信息。
实例
[root@eth0 ~]# lsblk
NAME MAJ:MIN rm SIZE RO type mountpoint
sda 8:0 0 232.9G 0 disk
├─sda1 8:1 0 46.6G 0 part /
├─sda2 8:2 0 1K 0 part
├─sda5 8:5 0 190M 0 part /boot
├─sda6 8:6 0 3.7G 0 part [SWAP]
├─sda7 8:7 0 93.1G 0 part /data
└─sda8 8:8 0 89.2G 0 part /personal
sr0 11:0 1 1024M 0 rom
7个栏目名称如下:
NAME:这是块设备名。
MAJ:MIN:本栏显示主要和次要设备号。
RM:本栏显示设备是否可移动设备。注意,在本例中设备sdb和sr0的RM值等于1,这说明他们是可移动设备。
SIZE:本栏列出设备的容量大小信息。例如298.1G表明该设备大小为298.1GB,而1K表明该设备大小为1KB。
RO:该项表明设备是否为只读。在本案例中,所有设备的RO值为0,表明他们不是只读的。
TYPE:本栏显示块设备是否是磁盘或磁盘上的一个分区。在本例中,sda和sdb是磁盘,而sr0是只读存储(rom)。
MOUNTPOINT:本栏指出设备挂载的挂载点。
#默认选项不会列出所有空设备。要查看这些空设备,请使用以下命令:
[root@eth0 ~]# lsblk -a
lsblk命令也可以用于列出一个特定设备的拥有关系,同时也可以列出组和模式。可以通过以下命令来获取这些信息:
[root@eth0 ~]# lsblk -m
该命令也可以只获取指定设备的信息。这可以通过在提供给lsblk命令的选项后指定设备名来实现。例如,你可能对了解以字节显示你的磁盘驱动器大小比较感兴趣,那么你可以通过运行以下命令来实现:
[root@eth0 ~]# lsblk -b /dev/sda
等价于
[root@eth0 ~]# lsblk --bytes /dev/sda
你也可以组合几个选项来获取指定的输出。例如,你也许想要以列表格式列出设备,而不是默认的树状格式。你可能也对移除不同栏目名称的标题感兴趣。可以将两个不同的选项组合,以获得期望的输出,命令如下:
[root@eth0 ~]# lsblk -nl
要获取SCSI设备的列表,你只能使用-S选项。该选项是大写字母S,不能和-s选项混淆,该选项是用来以颠倒的顺序打印依赖的。
[root@eth0 ~]# lsblk -S
lsblk列出SCSI设备,而-s是逆序选项(将设备和分区的组织关系逆转过来显示),其将给出如下输出。输入命令:
[root@eth0 ~]# lsblk -s
108. blkid
#查看块设备(包括交换分区)的文件系统类型、LABEL、UUID、挂载目录等信息
o<标签> #指定输出格式 (full、value、list、device、udev)
-s<标签> #显示指定标签信息 (LABEL、UUID、TYPE)
[root@eth0 ~]# blkid -s UUID /dev/sda5 #显示指定设备 UUID
/dev/sda5: UUID="cad7349a-601d-4df4-a46b-90e1ffc29b1b"
[root@eth0 ~]# blkid -s UUID #显示所有设备 UUID
/dev/sda5: UUID="cad7349a-601d-4df4-a46b-90e1ffc29b1b"
/dev/sda1: UUID="d7899bc2-b08e-48cd-b904-54956c085951"
[root@eth0 ~]# blkid -s LABEL /dev/sda5 #显示指定设备 LABEL
/dev/sda5: LABEL="Disk E"
[root@eth0 ~]# blkid -s LABEL #显示所有设备 LABEL
/dev/sda1: LABEL="M-fM-^VM-0M-eM-^JM- M-eM-^MM-7"
/dev/sda5: LABEL="Disk E"
[root@eth0 ~]# blkid -s TYPE #显示所有设备文件系统
/dev/sda5: TYPE="swap"
/dev/sda1: TYPE="ext4"
[root@eth0 ~]# blkid -o device #显示所有设备
/dev/sda5
/dev/sda1
[root@eth0 ~]# blkid -o list #以列表方式查看详细信息
device fs_type label mount point UUID
-------------------------------------------------------------------------------------------------
/dev/sda5 swap cad7349a-601d-4df4-a46b-90e1ffc29b1b
/dev/sda1 ext4 / d7899bc2-b08e-48cd-b904-54956c085951
109. free
#显示系统使用和空闲的内存情况,包括物理内存、交互区内存(swap)和内核缓冲区内存
-b #显示内存的单位为字节
-k #显示内存的单位为 KB
-m #显示内存的单位为 M
-o #忽略缓冲区调节列
-t #总和信息
-s<时间> #每隔指定时间执行一次命令,单位为s
-h #以可读形式显示容量,需要free -V显示版本大于3.3
-V #版本信息
[root@eth0 ~]# free -s 3 #每3秒执行一次
total used free shared buffers cached
Mem: 508176 353360 154816 0 63580 231656
-/+ buffers/cache: 58124 450052
Swap: 521212 0 521212
total used free shared buffers cached
Mem: 508176 353368 154808 0 63580 231656
-/+ buffers/cache: 58132 450044
Swap: 521212 0 521212
^C
[root@eth0 ~]# free -m #以M为单位
total used free shared buffers cached
Mem: 496 345 151 0 62 226
-/+ buffers/cache: 56 439
Swap: 508 0 508
[root@eth0 ~]# free -k #以K为单位
total used free shared buffers cached
Mem: 508176 353360 154816 0 63580 231656
-/+ buffers/cache: 58124 450052
Swap: 521212 0 521212
free -h #以可读形式显示容量,需要procps-ng版本大于3.3
[root@eth0 ~]# free -h
total used free shared buffers cached
Mem: 7.8G 6.6G 1.1G 0B 88M 3.7G
-/+ buffers/cache: 2.8G 4.9G
Swap: 7.8G 0B 7.8G
#第一部分Mem行解释:
total:内存总数
used:已经使用的内存数
free:空闲的内存数
shared:当前已经废弃不用
buffers Buffer:缓存内存数
cached Page:缓存内存数
关系:total = used + free
#第二部分(-/+ buffers/cache)行解释:
(-buffers/cache) used内存数:第一部分Mem行中的 used – buffers – cached
(+buffers/cache) free内存数: 第一部分Mem行中的 free + buffers + cached
可见-buffers/cache反映的是被程序实实在在吃掉的内存,而+buffers/cache反映的是可以挪用的内存总数。
#第三部分是指交换分区。
110. swapon
#使用交换空间
必要参数
<设备> 指定将作为交换区的设备或者文件
选择参数
-V #显示版本信息
-s #显示简短的装置讯息
-a #自动启动所有SWAP装置
-p #设定优先权,在0-32767中间选一个数字。或在 /etc/fstab 里面加上 pri=[value] ([value/0-32767]),在启动时会挂着他 swapon -a 来启动他们,而且有优先权设定。
[root@eth0 ~]# dd if=/dev/zero of=/swapfile1 bs=1024 count=524288 #创建大小为512M的交换文件
[root@eth0 ~]# mkswap /swapfile1 #使用 mkswap 命令来设置交换文件
[root@eth0 ~]# swapon /swapfile1 #启用交换分区
[root@eth0 ~]# mkswap -c /dev/hdb4 (-c是检查有无坏块)
[root@eth0 ~]# swapon -v /dev/hdb4
[root@eth0 ~]# swapon -s
Filename type Size Used Priority
/dev/hda5 partition 506008 96 -1
/dev/hdb4 partition 489972 0 -2
111. mkswap
#设置交换区
-c #建立交换区前,先检查是否有损坏的区块;
-f #在SPARC电脑上建立交换区时,要加上此参数;
-v0 #建立旧式交换区,此为预设值;
-v1 #建立新式交换区
[root@eth0 ~]# free -m #查看系统swap space大小
total used free shared buffers cached
Mem: 377 180 197 0 19 110
-/+ buffers/cache: 50 327
Swap: 572 0 572
[root@eth0 ~]# dd if=/dev/zero of=/extra-swap bs=1024 count=1024 #创建一个大文件文件
[root@eth0 ~]# mkswap /extra-swap 1024 #格式化交换分区
[root@eth0 ~]# swapon /extra-swap #加载交换分区
[root@eth0 ~]# swapon -s #查看当前的swap空间
[root@eth0 ~]# cat /proc/swaps #查看当前的swap空间
#添加一个交换分区或添加一个交换文件
1.添加一个交换分区
使用fdisk来创建交换分区(假设 /dev/sdb2 是创建的交换分区),使用 mkswap 命令来设置交换分区:
[root@eth0 ~]# mkswap /dev/sdb2
启用交换分区:
[root@eth0 ~]# swapon /dev/sdb2
写入/etc/fstab,以便在引导时启用:
[root@eth0 ~]# /dev/sdb2 swap swap defaults 0 0
2.添加一个交换文件,步骤如下:
创建大小为512M的交换文件:
[root@eth0 ~]# dd if=/dev/zero of=/swapfile1 bs=1024 count=524288
使用mkswap命令来设置交换文件:
[root@eth0 ~]# mkswap /swapfile1
启用交换分区:
[root@eth0 ~]# swapon /swapfile1
写入/etc/fstab,以便在引导时启用:
[root@eth0 ~]# /swapfile1 swap swap defaults 0 0
#新添了交换分区并启用它之后,请查看cat /proc/swaps或free -m命令的输出来确保交换分区已被启用了。
删除交换空间:禁用交换分区
[root@eth0 ~]# swapoff /dev/sdb2
先禁用,然后从/etc/fstab中删除项目,使用fdisk或yast工具删除分区。
112. swapoff
#关闭系统交换分区
swapoff可以关闭交换分区,swapon命令可以打开交换分区。
-a 关闭所有交换设备
[root@eth0 ~]# swapoff /dev/sda2 #关闭交换分区
[root@eth0 ~]# swapoff -a #关闭所有交换分区
113. mdadm
#新建、管理和监控RAID阵列
mdadm命令常见选项解释:
-A #激活磁盘阵列
-C #建立一个新阵列
-D #打印阵列设备的信息
-G #改变阵列大小或形态
-S #停止阵列
-r #移除设备
-l #设定磁盘阵列的级别
-n #指定阵列磁盘的数量
-x #指定阵列中备用盘的数量
-f #将设备状态定为故障
-a #添加设备到阵列
-v #显示详细信息软RAID:通过操作系统实现
RAID0
创建RAID0实验环境:
Raid种类 磁盘 热备盘
Raid0 sdb、sdc
#创建磁盘阵列RAID0
[root@web ~]# mdadm -C -v /dev/md0 -l 0 -n 2 /dev/sdb /dev/sdc
mdadm: chunk size defaults to 512K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md0 started.
#查看RAID阵列
[root@web ~]# mdadm -D /dev/md0
/dev/md0:
Version : 1.2
Creation Time : Thu Jul 18 18:30:52 2019
Raid Level : raid0
Array Size : 41908224 (39.97 GiB 42.91 GB)
Raid Devices : 2
Total Devices : 2
Persistence : Superblock is persistent
Update Time : Thu Jul 18 18:30:52 2019
State : clean
Active Devices : 2
Working Devices : 2
Failed Devices : 0
Spare Devices : 0
Chunk Size : 512K
Consistency Policy : none
Name : web:0 (local to host web)
UUID : be7fa2cc:94484da2:cb10af97:caa583f0
Events : 0
Number Major Minor RaidDevice State
0 8 16 0 active sync /dev/sdb
1 8 32 1 active sync /dev/sdc
#把信息写入到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
#挂载使用
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
[root@web ~]# mkfs.xfs /dev/md0
meta-data=/dev/md0 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid0
[root@web ~]# mount /dev/md0 /raid0
[root@web ~]# df -h |grep /dev/md0
/dev/md0 40G 33M 40G 1% /raid0
[root@web ~]# cp /etc/services /raid0/
RAID1
创建RAID0实验环境:
Raid种类 磁盘 热备盘
Raid1 sdd、sde sdf
1)创建RAID1,并添加1个热备盘
2)模拟磁盘故障,看备用盘是否会自动顶替故障盘
3)从raid1中移出故障盘
#创建磁盘阵列
[root@web ~]# mdadm -C -v /dev/md1 -l 1 -n 2 -x 1 /dev/sd[e,d,f]
mdadm: Note: this array has metadata at the start and
may not be suitable as a boot device. If you plan to
store '/boot' on this device please ensure that
your boot-loader understands md/v1.x metadata, or use
--metadata=0.90
mdadm: size set to 20954112K
Continue creating array? y
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md1 started.
#查看RAID信息
[root@web ~]# mdadm -D /dev/md1
/dev/md1:
Version : 1.2
Creation Time : Thu Jul 18 18:41:45 2019
Raid Level : raid1
Array Size : 20954112 (19.98 GiB 21.46 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 2
Total Devices : 3
Persistence : Superblock is persistent
Update Time : Thu Jul 18 18:44:23 2019
State : clean, resyncing
Active Devices : 2
Working Devices : 3
Failed Devices : 0
Spare Devices : 1
Consistency Policy : resync
Resync Status : 44% complete
Name : web:1 (local to host web)
UUID : 9d654e3a:12cf017f:eb091033:852f1ea6
Events : 7
Number Major Minor RaidDevice State
0 8 48 0 active sync /dev/sdd
1 8 64 1 active sync /dev/sde
2 8 80 - spare /dev/sdf
#追加到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
#挂载使用
[root@web ~]# mkfs.xfs /dev/md1
meta-data=/dev/md1 isize=512 agcount=4, agsize=1309632 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=5238528, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid1
[root@web ~]# mount /dev/md1 /raid1
[root@web ~]# df -h |grep /dev/md1
/dev/md1 20G 33M 20G 1% /raid1
[root@web ~]# cp /etc/services /raid1
#指定一块盘故障
[root@web ~]# mdadm -f /dev/md1 /dev/sde
#检查数据有没有丢失
[root@web ~]# ll /raid1
total 656
-rw-r--r--. 1 root root 670293 Jul 18 18:47 services
#移除损坏的盘
[root@web ~]# mdadm -r /dev/md1 /dev/sde
mdadm: hot removed /dev/sde from /dev/md1
#添加一块盘
[root@web ~]# mdadm -a /dev/md1 /dev/sde
RAID5
创建RAID5实验环境:
Raid种类 磁盘 热备盘
Raid5 sdg、sdh、sdi sdj
1)使用三块盘创建RAID5, 使用-x添加1个热备盘
2)模拟损坏一块磁盘,然后备用盘自动顶上,只能顶一次
3)在模拟损坏,检测数据是否丢失,如果没有再次模拟损坏.
#创建阵列
[root@web ~]# mdadm -C -v /dev/md5 -l 5 -n 3 -x 1 /dev/sd[g,h,i,j]
mdadm: layout defaults to left-symmetric
mdadm: layout defaults to left-symmetric
mdadm: chunk size defaults to 512K
mdadm: size set to 20954112K
mdadm: Defaulting to version 1.2 metadata
mdadm: array /dev/md5 started.
#查看RAID信息
[root@web ~]# mdadm -D /dev/md5
/dev/md5:
Version : 1.2
Creation Time : Thu Jul 18 18:54:45 2019
Raid Level : raid5
Array Size : 41908224 (39.97 GiB 42.91 GB)
Used Dev Size : 20954112 (19.98 GiB 21.46 GB)
Raid Devices : 3
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Thu Jul 18 18:56:43 2019
State : clean, degraded, recovering
Active Devices : 2
Working Devices : 4
Failed Devices : 0
Spare Devices : 2
Layout : left-symmetric
Chunk Size : 512K
Consistency Policy : resync
Rebuild Status : 36% complete
Name : web:5 (local to host web)
UUID : 42d49a3d:f3dfcbb4:1c44c59c:90b62a9f
Events : 6
Number Major Minor RaidDevice State
0 8 96 0 active sync /dev/sdg
1 8 112 1 active sync /dev/sdh
4 8 128 2 spare rebuilding /dev/sdi
3 8 144 - spare /dev/sdj
#将配置信息写入到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
#挂载使用
[root@web ~]# mkfs.xfs /dev/md5
meta-data=/dev/md5 isize=512 agcount=16, agsize=654720 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=10475520, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=5120, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid5
[root@web ~]# mount /dev/md5 /raid5
[root@web ~]# cp /etc/services /raid5
[root@web ~]# ll /raid5
total 656
-rw-r--r--. 1 root root 670293 Jul 18 18:58 services
#模拟一块盘损坏
[root@web ~]# mdadm -f /dev/md5 /dev/sdh
#移除损坏的盘
[root@web ~]# mdadm -r /dev/md5 /dev/sdh
#添加一块盘
[root@web ~]# mdadm -a /dev/md5 /dev/sdh
RAID10
创建RAID10实验环境:
Raid种类 磁盘 热备盘
Raid10 分区:sdk1,sdk2,sdk3.sdk4
#分区
[root@web ~]# gdisk /dev/sdk
[root@web ~]# lsblk /dev/sdk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sdk 8:160 0 20G 0 disk
├─sdk1 8:161 0 5G 0 part
├─sdk2 8:162 0 5G 0 part
├─sdk3 8:163 0 5G 0 part
└─sdk4 8:164 0 5G 0 part
#创建磁盘阵列
[root@web ~]# mdadm -C -v /dev/md10 -l 10 -n 4 /dev/sdk[1-4]
#查看RAID信息
[root@web ~]# mdadm -D /dev/md10
#写入到配置文件中
[root@web ~]# mdadm -Ds >/etc/mdadm.conf
#挂载使用
[root@web ~]# mkfs.xfs /dev/md10
meta-data=/dev/md10 isize=512 agcount=16, agsize=163712 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=0, sparse=0
data = bsize=4096 blocks=2618112, imaxpct=25
= sunit=128 swidth=256 blks
naming =version 2 bsize=4096 ascii-ci=0 ftype=1
log =internal log bsize=4096 blocks=2560, version=2
= sectsz=512 sunit=8 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
[root@web ~]# mkdir /raid10
[root@web ~]# mount /dev/md10 /raid10
[root@web ~]# cp /etc/services /raid10
[root@web ~]# ll /raid10
total 656
-rw-r--r--. 1 root root 670293 Jul 18 19:12 services
#模拟故障
[root@web ~]# mdadm -f /dev/md10 /dev/sdk3
#移除损坏的盘
[root@web ~]# mdadm -r /dev/md10 /dev/sdk2
mdadm: hot removed /dev/sdk2 from /dev/md10
[root@web ~]# mdadm -r /dev/md10 /dev/sdk3
mdadm: hot removed /dev/sdk3 from /dev/md10
#添加一块硬盘
[root@web ~]# mdadm -a /dev/md10 /dev/sdk[2,3]
mdadm: added /dev/sdk2
mdadm: added /dev/sdk3
[root@web ~]# mdadm -D /dev/md10
114. export
#显示和设置环境变量
-f #带边环境变量为函数名称
-n #删除指定的环境变量
-p #列出所有的环境变量
[root@eth0 ~]# aaa=bbb #设置一个变量
[root@eth0 ~]# export aaa #加入环境变量
[root@eth0 ~]# env |grep aa #查看环境变量
aaa=bbb
[root@eth0 ~]# export -n aaa #删除环境变量
[root@eth0 ~]# env |grep aa #查看
[root@eth0 ~]# export PATH=$PATH:/usr/local/bin #将/usr/local/bin加入环境变量中
115. env
#列出所有环境变量及其赋值(env只能看到环境变量,看不到本地变量,用set可以看到所有变量)
- #在重建的环境中运行程序,单独的-隐含-i.如果没有COMMAND,那么打印结果环境变量.
-i #不带环境变量启动
-u #从环境变量中删除一个变量
[root@eth0 ~]# env #显示当前用户的所有环境变量
116. set
#显示系统中已经存在的shell变量,以及设置shell变量的新变量值。使用set更改shell特性时,符号"+"和"-"的作用分别是打开和关闭指定的模式。set命令不能够定义新的shell变量。如果要定义新的变量,可以使用declare命令以变量名=值的格式进行定义即可。
语法
set(选项)(参数)
选项
-a #标示已修改的变量,以供输出至环境变量。
-b #使被中止的后台程序立刻回报执行状态。
-C #转向所产生的文件无法覆盖已存在的文件。
-d #Shell预设会用杂凑表记忆使用过的指令,以加速指令的执行。使用-d参数可取消。
-e #若指令传回值不等于0,则立即退出shell。
-f #取消使用通配符。
-h #自动记录函数的所在位置。
-H Shell #可利用"!"加<指令编号>的方式来执行history中记录的指令。
-k #指令所给的参数都会被视为此指令的环境变量。
-l #记录for循环的变量名称。
-m #使用监视模式。
-n #只读取指令,而不实际执行。
-p #启动优先顺序模式。
-P #启动-P参数后,执行指令时,会以实际的文件或目录来取代符号连接。
-t #执行完随后的指令,即退出shell。
-u #当执行时使用到未定义过的变量,则显示错误信息。
-v #显示shell所读取的输入值。
-x #执行指令后,会先显示该指令及所下的参数。
#使用declare命令定义一个新的环境变量"MYLOVE",并且将其值设置为"Linux",输入如下命令:
[root@eth0 ~]# declare MYLOVE='Linux' #定义新环境变量
#使用set命令将新定义的变量输出为环境变量,输入如下命令:
[root@eth0 ~]# set -a MYLOVE #设置为环境变量
执行该命令后,将会新添加对应的环境变量。用户可以使用env命令和grep命令分别显示和搜索环境变量"mylove",输入命令如下:
[root@eth0 ~]# env | grep MYLOVE #显示环境变量值
此时,该命令执行后,将输出查询到的环境变量值。
[root@eth0 ~]# unset MYLOVE #取消环境变量
117. declare
#显示和修改已存在的shell变量。declare不带任何参数选项,显示所有shell变量及其值。declare与typeset功能是相同的。
语法
declare(选项)(参数)
选项
+/- #"-"可用来指定变量的属性,"+"则是取消变量所设的属性
-f #仅显示函数
r #将变量设置为只读
x #指定的变量会成为环境变量,可供shell以外的程序来使用
i #[设置值]可以是数值,字符串或运算式
参数
shell变量:声明shell变量,格式为“变量名=值”
实例
首先使用declare命令定义shell变量"test",并且将其值设置为"man.linuxde.net",输入如下命令:
[root@eth0 ~]# declare test='man.linuxde.net' #定义并初始化shell变量
上面的命令执行后,再使用echo命令将该shell变量值输出,输入如下命令:
[root@eth0 ~]# echo $test #输出shell变量的值
上面的指令执行后,其输出的结果如下:
man.linuxde.net
定时任务
118. crontab
#编写或者定时任务的命令
-e #编辑定时任务 vim /var/spool/cron/root
-l #查看定时任务 cat /var/spool/cron/root
-r #删除定时任务 rm -f /var/spool/cron/root
119. mail
#发送和接收邮件 (可通过uuencode命令添加附件)
语法
mail(选项)(参数)
选项:
-b<地址> #指定密件副本的收信人地址;
-c<地址> #指定副本的收信人地址;
-f<邮件文件> #读取指定邮件文件中的邮件;对于在嘈杂的电话线路上使用 mail 特别有用.
-i #不显示终端发出的信息;
-I #使用互动模式;特殊字符~只在交互模式下才起作用,特别是正在发送邮件时
-n #程序使用时,不使用mail.rc文件中的设置;
-N #阅读邮件时,不显示邮件的标题;
-s<邮件主题> #指定邮件的主题;
-u<用户帐号> #读取指定用户的邮件;相当于:mail -f /var/spool/mail/user
-v #执行时,显示详细的信息。
参数:
邮件地址:收信人的电子邮箱地址。
实例
#直接使用shell当编辑器
[root@eth0 ~]# mail -s "Hello from linuxde.net by shell" admin@linuxde.net
hello,this is the content of mail.
welcome to www.linuxde.net
第一行是输入的命令,-s表示邮件的主题,后面的admin@linuxde.net则是邮件的接收人,输入完这行命令后回车,会进入邮件正文的编写,我们可以输入任何文字,比如上面的两行。当邮件正文输入完成后,需要按CTRL+D结束输入,此时会提示你输入Cc地址,即邮件抄送地址,没有直接回车就完成了邮件的发送。
#使用管道进行邮件发送
[root@eth0 ~]# echo "hello,this is the content of mail.welcome to www.linuxde.net" | mail -s "Hello from linuxde.net by pipe" admin@linuxde.net
使用管道直接敲入这行命令即可完成邮件的发送,其中echo后的是邮件正文。
#使用文件进行邮件发送
[root@eth0 ~]# mail -s "Hello from linuxde.net by file" admin@linuxde.net < mail.txt
使用上面的命令后,我们就可以把mail.txt文件的内容作为邮件的内容发送给admin@linuxde.net了。
使用上述三种方式都可以给外部邮箱进行邮件发送,但因为前面2个都是直接在shell中敲入邮件内容,因此无法输入中文,即使我们使用粘贴的方式输入了中文,那么收到的邮件也是乱码的。但第3种方式,我们可以在window下编辑好邮件内容后,放到linux下,再进行发送,这样就可以正常发送中文了。不过目前邮件的中文标题暂时没有找到解决办法。
因为mail程序本身就是调用sendmail来进行邮件发送的,因此我们可以在mail命令中使用sendmail的参数进行配置,比如我想使用特定的发件人发送邮件,可以使用如下命令:
[root@eth0 ~]# mail -s "Hello from linuxde.net with sender" admin@linuxde.net -- -f user@linuxde.net<mail.txt
上面的命令中,我们使用了"-- -f user@linuxde.net" 这样的参数,这是sendmail的选项,其中-f表示邮件的发送人邮件地址。
#很多情况下,我们也需要使用邮件来发送附件,在linux下使用mail命令发送附件也很简单,不过首先需要安装uuencode软件包,这个程序是对二进制文件进行编码使其适合通过邮件进行发送,在CentOS上安装该软件包如下:
yum install sharutils
安装完成后我们就可以来进行附件的发送了,使用如下命令:
[root@eth0 ~]# uuencode test.txt test | mail -s "hello,see the attachement" admin@linuxde.net<mail.txt
完成后就可以把text.txt文件作为邮件的附件发送出去了。uuencode有两个参数,第一个是要发送的文件,第二个是显示的文件名称。
[root@linux ~]# mail -s 'test title' -c 95219454@qq.com < mail.txt #将mail.txt发给95219454@qq.com
[root@linux ~]# mail 95219454@qq.com
Subject: nihao! #邮件主题
nihao!
linux 在线手册 #邮件内容Crl+D 完成内容输入
Cc: test@sina.com.cn
进程管理
120. netstat
#显示Linux中网络系统的状态信息
语法
netstat(选项)
选项
-a #显示所有连线中的Socket;
-A #列出该网络类型连线中的相关地址;
-c #持续列出网络状态;
-C #显示路由器配置的快取信息;
-e #显示网络其他相关信息;
-F #显示FIB;
-g #显示多重广播功能群组组员名单;
-i #显示网络界面信息表单;
-l #显示监控中的服务器的Socket;
-M #显示伪装的网络连线;
-n #直接使用ip地址,而不通过域名服务器;
-N #显示网络硬件外围设备的符号连接名称;
-o #显示计时器;
-p #显示正在使用Socket的程序识别码和程序名称;
-r #显示Routing Table;
-s #显示网络工作信息统计表;
-t #显示TCP传输协议的连线状况;
-u #显示UDP传输协议的连线状况;
-v #显示指令执行过程;
-w #显示RAW传输协议的连线状况;
-x #此参数的效果和指定"-A unix"参数相同;
--ip或--inet #此参数的效果和指定"-A inet"参数相同。
#列出所有端口 (包括监听和未监听的)
[root@eth0 ~]# netstat -a #列出所有端口
[root@eth0 ~]# netstat -at #列出所有tcp端口
[root@eth0 ~]# netstat -au #列出所有udp端口
#列出所有处于监听状态的 Sockets
[root@eth0 ~]# netstat -l #只显示监听端口
[root@eth0 ~]# netstat -lt #只列出所有监听 tcp 端口
[root@eth0 ~]# netstat -lu #只列出所有监听 udp 端口
[root@eth0 ~]# netstat -lx #只列出所有监听 UNIX 端口
#显示每个协议的统计信息
[root@eth0 ~]# netstat -s #显示所有端口的统计信息
[root@eth0 ~]# netstat -st #显示TCP端口的统计信息
[root@eth0 ~]# netstat -su #显示UDP端口的统计信息
#在netstat输出中显示 PID 和进程名称
[root@eth0 ~]# netstat -pt
[root@eth0 ~]# netstat -p #与其它开关一起使用,可添加“PID/进程名称”到netstat输出中,这样debugging的时候可以很方便的发现特定端口运行的程序。
#在netstat输出中不显示主机,端口和用户名(host, port or user)
当你不想让主机,端口和用户名显示,使用netstat -n。将会使用数字代替那些名称。同样可以加速输出,因为不用进行比对查询。
[root@eth0 ~]# netstat -an
#如果只是不想让这三个名称中的一个被显示,使用以下命令:
[root@eth0 ~]# netsat -a --numeric-ports
[root@eth0 ~]# netsat -a --numeric-hosts
[root@eth0 ~]# netsat -a --numeric-users
#持续输出netstat信息
[root@eth0 ~]# netstat -c #每隔一秒输出网络信息
#显示系统不支持的地址族(Address Families)
[root@eth0 ~]# netstat --verbose
#在输出的末尾,会有如下的信息:
netstat: no support for `AF IPX' on this system.
netstat: no support for `AF AX25' on this system.
netstat: no support for `AF X25' on this system.
netstat: no support for `AF NETROM' on this system.
#显示核心路由信息
[root@eth0 ~]# netstat -r
[root@eth0 ~]# netstat -rn #显示数字格式,不查询主机名称。
#找出程序运行的端口,并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
[root@eth0 ~]# netstat -ap | grep ssh
#找出运行在指定端口的进程:
[root@eth0 ~]# netstat -an | grep ':80'
#显示网络接口列表
[root@eth0 ~]# netstat -i
#显示详细信息,像是ifconfigIP和TCP分析
[root@eth0 ~]# netstat -ie
#查看连接某服务端口最多的的IP地址:
[root@eth0 ~]# netstat -ntu | grep :80 | awk '{print $5}' | cut -d: -f1 | awk '{++ip[$1]} END {for(i in ip) print ip[i],"\t",i}' | sort -nr
#TCP各种状态列表:
[root@eth0 ~]# netstat -nt | grep -e 127.0.0.1 -e 0.0.0.0 -e ::: -v | awk '/^tcp/ {++state[$NF]} END {for(i in state) print i,"\t",state[i]}'
#查看phpcgi进程数,如果接近预设值,说明不够用,需要增加:
[root@eth0 ~]# netstat -anpo | grep "php-cgi" | wc -l
1.列出所有端口 (包括监听和未监听的)
[root@eth0 ~]# netstat -a | more
2.列出所有TCP端口
[root@eth0 ~]# netstat -at
3.列出所有UDP端口
[root@eth0 ~]# netstat -au
4.显示核心路由信息
[root@eth0 ~]# netstat -r
5.显示网络接口列表
[root@eth0 ~]# netstat -i
6.显看已连接的TCP端口,以及PID
[root@eth0 ~]# netstat -tpnl
7.查看连接某服务端口最多的的IP地址
[root@eth0 ~]# netstat -nat | grep "192.168.1.15:22" |awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -20
18 221.136.168.36
3 154.74.45.242
2 78.173.31.236
2 62.183.207.98
2 192.168.1.14
2 182.48.111.215
2 124.193.219.34
2 119.145.41.2
2 114.255.41.30
[root@eth0 ~]# netstat -anp |grep 3306 -c #查看3306 端口(mysql)的链接数
11
[root@eth0 ~]# netstat -alp|grep 8080 #找出运行在指定端口的进程
# tcp 连接统计
[root@eth0 ~]# netstat -n | awk '/^tcp/{++S[$NF]} END {for (a in S) print a, S[a]}'
ESTABLISHED 10
121. lsof
#查看进程打开的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。lsof命令需要访问核心内存和各种文件,所以需要root用户执行。
语法
lsof(选项)
选项
-a #列出打开文件存在的进程;
-c<进程名> #列出指定进程所打开的文件;
-g #列出GID号进程详情;
-d<文件号> #列出占用该文件号的进程;
+d<目录> #列出目录下被打开的文件;
+D<目录> #递归列出目录下被打开的文件;
-n<目录> #列出使用NFS的文件;
-i<条件> #列出符合条件的进程。(4、6、协议、:端口、 @ip )
-p<进程号> #列出指定进程号所打开的文件;
-u #列出UID号进程详情;
-h #显示帮助信息;
-v #显示版本信息。
实例:
[root@eth0 ~]# lsof #列出所有正在使用文件
command PID USER FD type DEVICE SIZE NODE NAME
init 1 root cwd DIR 8,2 4096 2 /
init 1 root rtd DIR 8,2 4096 2 /
init 1 root txt REG 8,2 43496 6121706 /sbin/init
init 1 root mem REG 8,2 143600 7823908 /lib64/ld-2.5.so
init 1 root mem REG 8,2 1722304 7823915 /lib64/libc-2.5.so
init 1 root mem REG 8,2 23360 7823919 /lib64/libdl-2.5.so
init 1 root mem REG 8,2 95464 7824116 /lib64/libselinux.so.1
init 1 root mem REG 8,2 247496 7823947 /lib64/libsepol.so.1
init 1 root 10u FIFO 0,17 1233 /dev/initctl
migration 2 root cwd DIR 8,2 4096 2 /
migration 2 root rtd DIR 8,2 4096 2 /
migration 2 root txt unknown /proc/2/exe
ksoftirqd 3 root cwd DIR 8,2 4096 2 /
ksoftirqd 3 root rtd DIR 8,2 4096 2 /
ksoftirqd 3 root txt unknown /proc/3/exe
migration 4 root cwd DIR 8,2 4096 2 /
migration 4 root rtd DIR 8,2 4096 2 /
migration 4 root txt unknown /proc/4/exe
ksoftirqd 5 root cwd DIR 8,2 4096 2 /
ksoftirqd 5 root rtd DIR 8,2 4096 2 /
ksoftirqd 5 root txt unknown /proc/5/exe
events/0 6 root cwd DIR 8,2 4096 2 /
events/0 6 root rtd DIR 8,2 4096 2 /
events/0 6 root txt unknown /proc/6/exe
events/1 7 root cwd DIR 8,2 4096 2 /
#lsof输出各列信息的意义如下:
COMMAND:进程的名称
PID:进程标识符
PPID:父进程标识符(需要指定-R参数)
USER:进程所有者
PGID:进程所属组
FD:文件描述符,应用程序通过文件描述符识别该文件。
#文件描述符列表:
cwd:current work dirctory,应用程序当前工作目录,这是该应用程序启动的目录,除非它本身对这个目录进行更改
txt:该类型的文件是程序代码,如应用程序二进制文件本身或共享库,如上列表中显示的 /sbin/init 程序
lnn:library references (AIX);
er:FD information error (see NAME column);
jld:jail directory (FreeBSD);
ltx:shared library text (code and data);
mxx :hex memory-mapped type number xx.
m86:DOS Merge mapped file;
mem:memory-mapped file;
mmap:memory-mapped device;
pd:parent directory;
rtd:root directory;
tr:kernel trace file (OpenBSD);
v86 VP/ix mapped file;
0:表示标准输出
1:表示标准输入
2:表示标准错误
#一般在标准输出、标准错误、标准输入后还跟着文件状态模式:
u:表示该文件被打开并处于读取/写入模式。
r:表示该文件被打开并处于只读模式。
w:表示该文件被打开并处于。
空格:表示该文件的状态模式为unknow,且没有锁定。
-:表示该文件的状态模式为unknow,且被锁定。
#同时在文件状态模式后面,还跟着相关的锁:
N:for a Solaris NFS lock of unknown type;
r:for read lock on part of the file;
R:for a read lock on the entire file;
w:for a write lock on part of the file;(文件的部分写锁)
W:for a write lock on the entire file;(整个文件的写锁)
u:for a read and write lock of any length;
U:for a lock of unknown type;
x:for an SCO OpenServer Xenix lock on part of the file;
X:for an SCO OpenServer Xenix lock on the entire file;
space:if there is no lock.
#文件类型:
DIR:表示目录。
CHR:表示字符类型。
BLK:块设备类型。
UNIX: UNIX 域套接字。
FIFO:先进先出 (FIFO) 队列。
IPv4:网际协议 (IP) 套接字。
DEVICE:指定磁盘的名称
SIZE:文件的大小
NODE:索引节点(文件在磁盘上的标识)
NAME:打开文件的确切名称
2.找出谁在使用某个文件
[root@eth0 ~]# lsof /usr/sbin/httpd
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 3738 root txt REG 8,6 319380 2697479 /usr/sbin/httpd
httpd 3793 zhangy txt REG 8,6 319380 2697479 /usr/sbin/httpd
httpd 3794 zhangy txt REG 8,6 319380 2697479 /usr/sbin/httpd
httpd 3795 zhangy txt REG 8,6 319380 2697479 /usr/sbin/httpd
3.递归查找某个目录中所有打开的文件
[root@eth0 ~]# lsof +D /usr/local
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
ruby 3754 root txt REG 8,6 5985821 3151658 /usr/local/ruby/bin/ruby
ruby 3754 root mem REG 8,6 10513 3177073 /usr/local/ruby/lib/ruby/1.9.1/i686-linux/enc/encdb.so
ruby 3754 root mem REG 8,6 7960 3177560 /usr/local/ruby/lib/ruby/1.9.1/i686-linux/fcntl.so
4.列出某个用户打开的所有文件
[root@eth0 ~]# lsof -u zhangy |more #单个用户
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 3793 zhangy cwd DIR 8,6 4096 2 /
httpd 3793 zhangy rtd DIR 8,6 4096 2 /
httpd 3793 zhangy txt REG 8,6 319380 2697479 /usr/sbin/httpd
httpd 3793 zhangy mem REG 8,6 162724 2699347 /usr/lib/libapr-1.so.0.2.7
httpd 3793 zhangy mem REG 8,6 245376 2881960 /lib/libsepol.so.1
httpd 3793 zhangy mem REG 8,6 293308 2882226 /lib/libssl.so.0.9.8e
[root@eth0 ~]# lsof -u zhangy,root #多个用户
5.查找某个程序打开的所有文件
[root@eth0 ~]# lsof -c httpd
6.列出除root用户外的所有用户打开的文件
[root@eth0 ~]# lsof -u ^root
7.列出所有由某个PID对应的进程打开的文件
[root@eth0 ~]# lsof -p 3738
8.列出所有网络连接
[root@eth0 ~]# lsof -i
9.列出所有TCP网络连接
[root@eth0 ~]# lsof -i tcp
10.找到使用某个端口的进程
[root@eth0 ~]# lsof -i:80 #查看一下80端口的进程
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
httpd 3738 root 3u IPv6 10791 TCP *:http (LISTEN)
httpd 3793 zhangy 3u IPv6 10791 TCP *:http (LISTEN)
httpd 3794 zhangy 3u IPv6 10791 TCP *:http (LISTEN)
httpd 3795 zhangy 3u IPv6 10791 TCP *:http (LISTEN)
httpd 3796 zhangy 3u IPv6 10791 TCP *:http (LISTEN)
httpd 3797 zhangy 3u IPv6 10791 TCP *:http (LISTEN)
[root@eth0 ~]# lsof -i udp:53 #查看 一下udp,53端口
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
dnsmasq 3939 nobody 7u IPv4 11321 UDP 192.168.122.1:domain
[root@S1 2014-08-18]# lsof -i 4 #列举出IP V4
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
portreser 1642 root 5u IPv4 10219 0t0 UDP *:ldaps
rpcbind 1710 rpc 6u IPv4 10451 0t0 UDP *:sunrpc
rpcbind 1710 rpc 7u IPv4 10453 0t0 UDP *:hmmp-op
rpcbind 1710 rpc 8u IPv4 10454 0t0 TCP *:sunrpc (LISTEN)
rpc.statd 1836 rpcuser 5u IPv4 10740 0t0 UDP *:740
rpc.statd 1836 rpcuser 8u IPv4 10748 0t0 UDP *:40829
rpc.statd 1836 rpcuser 9u IPv4 10752 0t0 TCP *:40786 (LISTEN)
.....................................省略..........................................
122. ps
#查看后台进程,默认查看所有进程,静态显示
选项:
a #显示所有的进程
u #显示正确的用户或者ID信息
x #显示所有没有终端的进程
o #查看所有进程的优先级
aux组合使用
-e #显示所有的进程
-f #显示更多的信息
-ef组合使用
[root@qls ~]# ps axo user,pid,nice,command #查看所有进程的优先级
[root@qls ~]# ps axo user,pid,nice,command |grep sshd
root 4361 0 /usr/sbin/sshd -D
[root@qls ~]# ps aux | grep vim #指定查看程序进程 查看后台vim进程
root 68044 0.0 0.2 149224 5092 pts/2 S+ 19:45 0:00 vim passwd
root 68148 0.0 0.0 112708 976 pts/1 R+ 19:47 0:00 grep --color=auto vim
[root@qls ~]# ps aux #不同的进程使用不同的用户启动和管理
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.3 128032 6648 ? Ss Nov28 3:28 /usr/lib/systemd/systemd --switched-root --system --deserialize 22
root 2 0.0 0.0 0 0 ? S Nov28 0:00 [kthreadd]
root 3 0.0 0.0 0 0 ? S Nov28 0:18 [ksoftirqd/0]
root 5 0.0 0.0 0 0 ? S< Nov28 0:00 [kworker/0:0H]
root 7 0.0 0.0 0 0 ? S Nov28 0:00 [migration/0]
root 8 0.0 0.0 0 0 ? S Nov28 0:00 [rcu_bh]
root 9 0.0 0.0 0 0 ? R Nov28 0:43 [rcu_sched]
[root@qls ~]# ps aux | grep [v]im
root 38723 0.0 0.5 149216 5056 pts/0 S+ 10:38 0:00 vim test.txt
[root@qls ~]# ps aux | grep [t]ar
root 39125 5.2 0.3 125576 3268 pts/0 D+ 10:44 0:06 tar czf etc.tar.gz /etc/ /var/ /usr/ /usr/ /etc
[root@qls ~]# ps aux | grep [t]ar
root 39125 5.2 0.3 125576 3268 pts/0 R+ 10:44 0:06 tar czf etc.tar.gz /etc/ /var/ /usr/ /usr/ /etc
[root@qls ~]# ps aux | grep bash
root 7199 0.0 0.1 137352 1716 pts/0 Ss+ 2019 0:02 -bash
[root@qls ~]# gcc test.c
[root@qls ~]# ll
-rwxr-xr-x. 1 root root 8696 Jan 6 10:51 a.out
[root@qls ~]# ./a.out
I am parent,39799
sleep....
I am child,39800
Child exits
[root@qls ~]# ps aux | grep [a.]out
root 39799 0.0 0.0 4212 352 pts/1 S+ 10:52 0:00 ./a.out
root 39800 0.0 0.0 0 0 pts/1 Z+ 10:52 0:00 [a.out] <defunct>
[root@eth0 ~]# ps -ef
UID PID PPID C STIME TTY TIME CMD
root 2 0 0 Jan05 ? 00:00:00 [kthreadd]
postfix 11127 11124 0 Jan05 ? 00:00:00 qmgr -l -t unix -u
root 41282 1 0 Jan05 ? 00:00:00 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
root 76283 6781 0 08:08 ? 00:00:00 sshd: root@pts/0
root 76288 76283 0 08:08 pts/0 00:00:00 -bash
root 84916 6781 0 10:41 ? 00:00:00 sshd: root@pts/1
root 84920 84916 0 10:41 pts/1 00:00:00 -bash
root 84942 76288 0 10:41 pts/0 00:00:00 vim 1
root 102059 76288 0 15:59 pts/0 00:00:00 ps -ef
123. top
#实时动态查看系统后台进程,通过top命令所提供的互动式界面,用热键可以管理。
语法
top(选项)
选项
-b #以批处理模式操作
-c #显示完整的治命令
-d #屏幕刷新间隔时间
-I #忽略失效过程
-s #保密模式
-S #累积模式
-i<时间> #设置间隔时间
-u<用户名> #指定用户名
-p<进程号> #指定进程
-n<次数> #循环显示的次数
内部命令
在top命令执行过程中可以使用的一些交互命令。这些命令都是单字母的,如果在命令行中使用了-s选项, 其中一些命令可能会被屏蔽。
h #显示帮助画面,给出一些简短的命令总结说明
k #终止一个进程
i #忽略闲置和僵死进程,这是一个开关式命令
q #退出程序
r #重新安排一个进程的优先级别
S #切换到累计模式
s #改变两次刷新之间的延迟时间(单位s),如果有小数,就换算成ms。输入0值则系统将不断刷新,默认值是5s
f或者F #从当前显示中添加或者删除项目
o或者O #改变显示项目的顺序
l #切换显示平均负载和启动时间信息
m #切换显示内存信息
t #切换显示进程和CPU状态信息
c #切换显示命令名称和完整命令行
M #根据驻留内存大小进行排序
P #根据CPU使用百分比大小进行排序
T #根据时间/累计时间进行排序
w #将当前设置写入~/.toprc文件中
实例
[root@eth0 ~]# top
top - 09:44:56 up 16 days, 21:23, 1 user, load average: 9.59, 4.75, 1.92
Tasks: 145 total, 2 running, 143 sleeping, 0 stopped, 0 zombie
Cpu(s): 99.8%us, 0.1%sy, 0.0%ni, 0.2%id, 0.0%wa, 0.0%hi, 0.0%si, 0.0%st
Mem: 4147888k total, 2493092k used, 1654796k free, 158188k buffers
Swap: 5144568k total, 56k used, 5144512k free, 2013180k cached
解释:
top - 09:44:56 [当前系统时间]
16 days [系统已经运行了16天]
1 user [个用户当前登录]
load average: 9.59, 4.75, 1.92 [系统负载,即任务队列的平均长度]
Tasks: 145 total [总进程数]
2 running [正在运行的进程数]
143 sleeping [睡眠的进程数]
0 stopped [停止的进程数]
0 zombie [冻结进程数]
Cpu(s): 99.8%us [用户空间占用CPU百分比]
0.1%sy [内核空间占用CPU百分比]
0.0%ni [用户进程空间内改变过优先级的进程占用CPU百分比]
0.2%id [空闲CPU百分比]
0.0%wa [等待输入输出的CPU时间百分比]
0.0%hi [hardirq 处理硬中断占用cpu的时间百分比]
0.0 si [softirq 处理软中断占用cpu的时间百分比]
0.0%st [监控程序所窃取主机的占用cpu的时间百分比]
Mem: 4147888k total [物理内存总量]
2493092k used [使用的物理内存总量]
1654796k free [空闲内存总量]
158188k buffers [用作内核缓存的内存量]
Swap: 5144568k total [交换区总量]
56k used [使用的交换区总量]
5144512k free [空闲交换区总量]
2013180k cached [缓冲的交换区总量]
124. htop
#监控与进程管理,显示所有进程的列表,并且使用彩色标识出处理器、swap和内存状态。鼠标也可以用
#在查找应用程序的内存泄漏问题时。与top相比,htop提供更方便、光标控制的界面来杀死进程。
#以下是 F1~F10 的功能和对应的字母快捷键。
Shortcut Key Function Key Description 中文说明
h, ? F1 Invoke htop Help 查看htop使用说明
S F2 Htop Setup Menu htop 设定
/ F3 Search for a Process 搜索进程
\ F4 Incremental process filtering 增量进程过滤器
t F5 Tree View 显示树形结构
<, > F6 Sort by a column 选择排序方式
[ F7 Nice - (change priority) 减少nice值,提高对应进程的优先级
] F8 Nice + (change priority) 增加nice值,降低对应进程的优先级
k F9 Kill a Process 可对进程传递信号
q F10 Quit htop 结束htop
选项
-C #使用一个单色的配色方案
-d #设置延迟更新时间,单位秒
-h #显示htop 命令帮助信息
-u #只显示一个给定的用户的过程
-p #只显示给定的PIDs
-s #依此列来排序
-v #显示版本信息
内部命令
上下键或PgUP, PgDn 选定想要的进程,左右键或Home, End 移动字段,当然也可以直接用鼠标选定进程
Space 标记/取消标记一个进程。命令可以作用于多个进程,例如 "kill",将应用于所有已标记的进程
U 取消标记所有进程
s 选择某一进程,按s:用strace追踪进程的系统调用
l 显示进程打开的文件: 如果安装了lsof,按此键可以显示进程所打开的文件
I 倒转排序顺序,如果排序是正序的,则反转成倒序的,反之亦然
+, - 在树视图模式下,展开或折叠子树。当一个子树被折叠时,一个“+”符号显示在进程名的左边
a (在有多处理器的机器上) 设置 CPU affinity: 标记一个进程允许使用哪些CPU
u 显示特定用户进程
M 按Memory 使用排序
P 按CPU 使用排序
T 按Time+ 使用排序
F 跟踪进程: 如果排序顺序引起选定的进程在列表上到处移动,让选定条跟随该进程。这对监视一个进程非常有用:通过这种方式,你可以让一个进程在屏幕上一直可见。使用方向键会停止该功能。
K 显示/隐藏内核线程
H 显示/隐藏用户线程
Ctrl-L 刷新
Numbers PID 查找: 输入PID,光标将移动到相应的进程上
[root@eth0 ~]# htop #查看系统进程
125. kill
#根据进程id去终止进程,如果进程不存在,会提示
-l #列出全部的信号名称
<信号编号> #根据信号操作进程
-a #当处理当前进程时,不限制命令名和进程号的对应关系
-p #指定kill 命令只打印相关进程的进程号,而不发送任何信号
-s #指定发送信号
-u #指定用户
[root@qls ~]# ps aux |grep top
root 1910 0.0 0.2 162008 2216 pts/1 S+ 10:03 0:00 top
[root@qls ~]# kill 1910
[root@qls ~]# ps aux |grep top
根据信号输入
[root@qls ~]# 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 #重新加载配置文件,平滑重启
2) SIGINT #跟ctrl+c一样,终止进程
3) SIGQUIT #退出(同 Ctrl + \)
9) SIGKILL #强制终止进程
15) SIGTERM #终止进程,默认的信号
18) SIGCONT #继续(与STOP相反, fg/bg命令)
20) SIGTSTP #跟ctrl+z一样,将前台进程暂停到后台
#终止进程
[root@qls ~]# kill -15 2233
#平滑重启,进程的ID不会改变,会重新加载配置文件
[root@qls ~]# kill -1 2570
#取消当前进程的操作
[root@qls ~]# kill -2 2726
#强制终止进程
[root@qls ~]# kill -9 3091
#将前台进程暂停到后台
[root@qls ~]# kill -20 3091
例
[root@qls ~]# kill 1908 #杀死进程
[root@qls ~]# kill -KILL 1908 #强制杀死进程
[root@qls ~]# kill -9 6985 #彻底杀死进程
[root@qls ~]# kill -u tank #杀死指定用户的所有进程
[root@qls ~]# kill -l KILL #得到指定信号的数值
9
[root@qls ~]# kill -l SIGKILL #得到指定信号的数值
#init进程是不可杀的
[root@qls ~]# ps -ef|grep init
root 1 0 0 Nov02 ? 00:00:00 init [3]
root 17563 17534 0 17:37 pts/1 00:00:00 grep init
[root@qls ~]# kill -9 1
[root@qls ~]# kill -HUP 1
[root@qls ~]# ps -ef|grep init
root 1 0 0 Nov02 ? 00:00:00 init [3]
root 17565 17534 0 17:38 pts/1 00:00:00 grep init
126. killall
#根据进程的名称取终止进程,如果进程不存在,会提示,精确匹配
-e #对长名称进行精确匹配
-l #忽略大小写的不同
-p #杀死进程所属的进程组
-i #交互式杀死进程,杀死进程前需要进行确认
-l #打印所有已知信号列表
-q #如果没有进程被杀死。则不输出任何信息
-r #使用正规表达式匹配要杀死的进程名称
-s #用指定的进程号代替默认信号“SIGTERM”
-u #杀死指定用户的进程
-w #等待所有杀的进程死去,每秒检查一次是否有被杀的进程仍然存在,仅当都死光后才返回.注意: 如果信 号被忽略或没有起作用, 或者进程停留在僵尸状态, killall 可能会永久等待
[root@qls ~]# killall top
[root@qls ~]# ps aux |grep top
[root@qls ~]# killall top
top: no process found
127. pkill
#根据进程名称终止进程,进程如果不存在,不会提示,模糊匹配 (ps命令和kill命令的结合)
-f #显示完整程序
-l #显示源代码
-n #显示新程序
-o #显示旧程序
-v #与条件不符合的程序
-x #与条件符合的程序
-p<进程号> #列出父进程为用户指定进程的进程信息
-t<终端> #指定终端下的所有程序
-u<用户> #指定用户的程序
[root@qls ~]# pkill -t tty1 #杀死终端1下的所有进程
[root@qls ~]# pkill -kill -t pts/2 #踢用户
[root@qls ~]# pkill -9 6985 #彻底杀死进程
[root@qls ~]# pkill -u tank #杀死指定用户的所有进程
[root@qls ~]# pkill -vu root #杀死不属于root用户的所有进程
#只要进程名称中包含终止进程服务的名称,就会终止掉,特别是sh这样的进程
128. nohup
#不中断运行程序 `&`将前台运行的程序放入到后台运行
[root@qls ~]# nohup crontab_php.sh test & #退出后继续执行sh文件
[root@qls ~]# nohup crontab_php.sh &>test & #退出后继续执行sh文件,将标准错误正确都写入文件test
[root@qls ~]# nohup ./program &>/dev/null & #后台运行程序,并将所有日志丢弃
129. jobs
#显示当前终端所有的后台进程
-l #显示进程号
-p #仅任务对应的显示进程号
-n #显示任务状态的变化
-r #仅输出运行状态(running)的任务
-s #仅输出停止状态(stoped)的任务
[root@qls ~]# jobs -l #显示当前系统的任务列表
[root@qls ~]# ping localhost -a >/dev/null &
[1] 1762
[root@qls ~]# ping 127.0.0.1 -a >/dev/null &
[2] 1763
[root@qls ~]# jobs
[1]- 运行中 ping localhost -a > /dev/null &
[2]+ 运行中 ping 127.0.0.1 -a > /dev/null &
[root@qls ~]# jobs -p #查看进程号
1762
1763
130. bg
#将进程程序放到后台运行,使前台可以执行其他任务。该命令的运行效果与在指令后面添加符号`&`的效果是相同的
[root@qls ~]# bg 1 #将任务号为1的任务放到后台继续执行,如果系统中只有一个挂起的任务时,1可省略
[root@qls ~]# find / -name password & #使用&将find命令放到后台执行
131. fg
#将后台(在后台运行的或者在后台挂起的作业)放到前台终端运行。与bg命令一样,若后台任务中只有一个,则使用该命令时,可以省略任务号
[root@qls ~]# fg 1 #将任务号为1的任务从后台执行转换到前台执行
132. screen
#后台管理进程命令,会生成一个新的子shell,在子shell中运行你的进程,父shell退出了,不影响子shell的运行
会话恢复
只要Screen本身没有终止,在其内部运行的会话都可以恢复。这一点对于远程登录的用户特别有用——即使网络连接中断,用户也不会失去对已经打开的命令行会话的控制。只要再次登录到主机上执行screen -r就可以恢复会话的运行。同样在暂时离开的时候,也可以执行分离命令detach,在保证里面的程序正常运行的情况下让Screen挂起(切换到后台)。这一点和图形界面下的VNC很相似。
多窗口
在Screen环境下,所有的会话都独立的运行,并拥有各自的编号、输入、输出和窗口缓存。用户可以通过快捷键在不同的窗口下切换,并可以自由的重定向各个窗口的输入和输出。Screen实现了基本的文本操作,如复制粘贴等;还提供了类似滚动条的功能,可以查看窗口状况的历史记录。窗口还可以被分区和命名,还可以监视后台窗口的活动。
会话共享
Screen可以让一个或多个用户从不同终端多次登录一个会话,并共享会话的所有特性(比如可以看到完全相同的输出)。它同时提供了窗口访问权限的机制,可以对窗口进行密码保护。
Screen命令语法:
screen [-AmRvx -ls -wipe][-d <操作名称>][-h <行数>][-r <操作名称>][-s ][-S <操作名称>]
Screen命令参数:
-A -[r|R] 将所有的视窗都调整为目前终端机的大小
-c filename 用指定的filename文件替代screen的配置文件’.screenrc’
-d [pid.tty.host] 断开screen进程(screen的状态一定要是Attached,也就是说有用户连在screen里)
-D [pid.tty.host] 与-d命令一样,区别就是如果执行成功,会踢掉原来在screen里的用户并让他logout
-h <行数> 指定视窗的缓冲区行数
-ls或–list 显示目前所有的screen操作
-m 即使目前已在作业中的screen操作,仍强制建立新的screen操作
-p number or name 预先选择一个窗口
-r [pid.tty.host] 恢复离线的screen进程,如果有多个断开的进程,需要指定[pid.tty.host]
-R 先试图恢复离线的操作。若找不到离线的操作,即建立新的screen操作
-s shell 指定建立新视窗时,所要执行的shell。
-S <作业名称> 指定screen操作的名称。(用来替代[pid.tty.host]的命名方式)
-wipe 检查目前所有的screen操作,并删除已经无法使用的screen操作
-x 恢复之前离线的screen操作
Screen命令的常规用法:
screen -d -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户再连接。
screen -D -r:连接一个screen进程,如果该进程是attached,就先踢掉远端用户并让他logout再连接
screen -ls或者-list:显示存在的screen进程,常用命令
screen -m:如果在一个Screen进程里,用快捷键crtl+a c或者直接打screen可以创建一个新窗口,screen -m可以新建一个screen进程。
screen -dm:新建一个screen,并默认是detached模式,也就是建好之后不会连上去。
screen -p number or name:预先选择一个窗口。
screen session 下,所有命令都以 ctrl+a 开始。
ctrl+a ? 显示所有键绑定信息
ctrl+a c 创建一个新的运行shell的窗口并切换到该窗口
ctrl+a n Next,切换到下一个 window
ctrl+a p Previous,切换到前一个 window
ctrl+a 0..9 切换到第 0..9 个 window
Ctrl+a [Space] 由视窗0循序切换到视窗9
ctrl+a 在两个最近使用的 window 间切换
ctrl+a x 锁住当前的 window,需用用户密码解锁
ctrl+a d detach,暂时离开当前session,将目前的 screen session (可能含有多个 windows) 丢到后台执行,并会回到还没进 screen 时的状态,此时在 screen session 里,每个 window 内运行的 process (无论是前台/后台)都在继续执行,即使 logout 也不影响。
ctrl+a z 把当前session放到后台执行,用 shell 的 fg 命令则可回去。
ctrl+a w 显示所有窗口列表
ctrl+a t Time,显示当前时间,和系统的 load
ctrl+a k kill window,强行关闭当前的 window
ctrl+a [ 进入 copy mode,在 copy mode 下可以回滚、搜索、复制就像用使用 vi 一样
C-b Backward,PageUp
C-f Forward,PageDown
H(大写) High,将光标移至左上角
L Low,将光标移至左下角
0 移到行首
$ 行末
w forward one word,以字为单位往前移
b backward one word,以字为单位往后移
Space 第一次按为标记区起点,第二次按为终点
Esc 结束 copy mode
ctrl+a ] Paste,把刚刚在 copy mode 选定的内容贴上
[root@qls ~]# screen #随机打开一个子shell窗口
ctrl键+a+d #临时退出这个子shell
exit #是真正的退出这个子shell窗口
[root@qls ~]# screen -list #显示所有screen的shell窗口
There is a screen on:
8431.pts-0.qls (Detached)
1 Socket in /var/run/screen/S-root.
[root@qls ~]# screen -r 8431 #进入指定的shell中
[screen is terminating]
[root@qls ~]#
[root@qls ~]# screen -list
No Sockets found in /var/run/screen/S-root.
[root@qls ~]# screen -S tar #给这个子shell起个名字
[root@hatch ~]# screen -S test #创建一个带名字的screen会话,并且attached模式
[root@qls ~]# screen -list
There is a screen on:
8770.tar (Detached)
1 Socket in /var/run/screen/S-root.
[root@qls ~]# screen -r tar
[root@qls ~]# screen -x tar #远程演示,主窗口操作,副窗口演示
[root@hatch ~]# screen -dm test1 #并默认是detached模式,也就是建好之后不会连上去。
[root@hatch ~]# screen -d -r test2 #结束当前screen并回到test2这个screen
[root@hatch ~]# screen -ls #查看所有会话
There are screens on:
8504.test2 (Detached)
8010..hatch (Detached)
8060.test1 (Detached)
6275.test (Attached)
6199.pts-3.hatch (Detached)
5 Sockets in /var/run/screen/S-root.
[root@hatch ~]# screen -r 8060(or test1) #恢复到以前的离线screen进程
[root@hatch ~]# Ctrl+a+d #按Ctrl+a,然后再按d即可保留Screen
[detached] #这时会显示出这个提示,说明已经保留好Screen了
[root@hatch ~]# exit #如果你工作完成的话,这样就表示成功退出了
[screen is terminating]
[root@hatch ~]# Ctrl+a+n #下一个screen 会话
[root@hatch ~]# Ctrl+a+p #上一个screen 会话
[root@hatch ~]# Ctrl+a+c #创建新的screen 会话
133. nice
#在启动一个程序时,设定该程序的优先级
nice(选项)(参数)
nice命令用于以指定的进程调度优先级启动其他的程序。
-n #指定进程的优先级(整数)
[root@qls ~]# nice -n -10 vim test.txt
#新建一个进程并设置优先级,将当前目录下的documents目录打包,但不希望tar占用太多CPU
[root@qls ~]# nice -19 tar zcf pack.tar.gz documents
134. renice
#修改已经存在的程序的优先级
[root@qls ~]# nice -n -10 vim test.txt #在启动一个程序时,设定该程序的优先级
[root@qls ~]# renice -n 0 4361 #修改已经存在的程序的优先级
4361 (process ID) old priority -20, new priority 0
本文作者:ycmyay
本文链接:https://www.cnblogs.com/ycmyay/p/17383830.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步