1、压缩工具之gzip
Usage: gzip [OPTION]... [FILE]...
常用的OPTION:
-d:解压缩,解压完成后会删除原文件
[root@localhost ~]# ls
a abc anaconda-ks.cfg b
[root@localhost ~]# gzip abc
[root@localhost ~]# ls
a abc.gz anaconda-ks.cfg b
[root@localhost ~]# gzip -d abc.gz
[root@localhost ~]# ls
a abc anaconda-ks.cfg b
2、压缩工具之bzip2
Usage: bzip2 [OPTION]... [FILE]...
常用的OPTION:
-k:压缩时保留原文件
-d:解压缩,解压完成后会删除原文件
[root@localhost ~]# ls
a abc anaconda-ks.cfg b
[root@localhost ~]# bzip2 -k abc
[root@localhost ~]# ls
a abc abc.bz2 anaconda-ks.cfg b
[root@localhost ~]# rm -f abc
[root@localhost ~]# bzip2 -d abc.bz2
[root@localhost ~]# ls
a abc anaconda-ks.cfg b
3、压缩工具之xz
Usage: xz [OPTION]... [FILE]...
常用的OPTION:
-k:压缩时保留原文件
-d:解压缩,解压完成后会删除原文件
[root@localhost ~]# ls
a abc anaconda-ks.cfg b
[root@localhost ~]# xz -k abc
[root@localhost ~]# ls
a abc abc.xz anaconda-ks.cfg b
[root@localhost ~]# rm -f abc
[root@localhost ~]# xz -d abc.xz
[root@localhost ~]# ls
a abc anaconda-ks.cfg b
4、压缩工具之zip
zip压缩文件的两种方式:
zip filename.zip file1 file2 ...
zip filename.zip DIR/*
zip压缩包要使用unzip工具来解压
[root@localhost ~]# ls
a abc anaconda-ks.cfg b
[root@localhost ~]# zip a.zip abc
adding: abc (stored 0%)
[root@localhost ~]# ls
a abc anaconda-ks.cfg a.zip b
[root@localhost ~]# mkdir tmp
[root@localhost ~]# ls
a abc anaconda-ks.cfg a.zip b tmp
[root@localhost ~]# mv a.zip tmp
[root@localhost ~]# ls
a abc anaconda-ks.cfg b tmp
[root@localhost ~]# cd tmp
[root@localhost tmp]# ls
a.zip
[root@localhost tmp]# unzip a.zip
Archive: a.zip
extracting: abc
[root@localhost tmp]# ls
abc a.zip
5、归档工具tar
Usage: tar [OPTION...] [FILE]...
常用的OPTION:
-c:创建归档文件
-f file.tar:指定要操作的归档文件
-x:还原归档
-v:显示归档过程
-p:归档时保留权限信息。只有管理员才有权限用此选项
-C:指定还原归档或解压时的目标目录
-tf:不展开归档,直接查看归档了哪些文件
常用的组合项:
-zcf file.tar.gz:归档并调用gzip进行压缩
-jcf file.tar.bz2:归档并调用bzip2进行压缩
-Jcf file.tar.xz:归档并调用xz进行压缩
xf file.tar.gz|file.tar.bz2|file.tar.xz:还原归档并自动根据压缩方式调用相应的工具解压
[root@localhost ~]# ls
a abc anaconda-ks.cfg b tmp
[root@localhost ~]# tar -zcf a.tar.gz abc
[root@localhost ~]# ls
a abc anaconda-ks.cfg a.tar.gz b tmp
[root@localhost ~]# tar -tf a.tar.gz
abc
[root@localhost ~]# tar xf a.tar.gz -C /opt/
[root@localhost ~]# ls /opt/
abc
[root@localhost ~]# ls
a abc anaconda-ks.cfg b tmp
[root@localhost ~]# tar jcf b.tar.bz2 abc
[root@localhost ~]# ls
a abc anaconda-ks.cfg b b.tar.bz2 tmp
[root@localhost ~]# tar xf b.tar.bz2 -C /tmp/
[root@localhost ~]# ls /tmp/
abc
ks-script-o4hYXc
systemd-private-1f945c612a0c433398c9cec50bc65547-chronyd.service-SMnOnY
systemd-private-1f945c612a0c433398c9cec50bc65547-vgauthd.service-CxeeBc
systemd-private-1f945c612a0c433398c9cec50bc65547-vmtoolsd.service-zywMQq
yum.log
[root@localhost ~]# ls
a abc anaconda-ks.cfg b tmp
[root@localhost ~]# tar Jcf c.tar.xz abc
[root@localhost ~]# ls
a abc anaconda-ks.cfg b c.tar.xz tmp
[root@localhost ~]# tar xf c.tar.xz -C /tmp/
[root@localhost ~]# ls /tmp/
abc
ks-script-o4hYXc
systemd-private-1f945c612a0c433398c9cec50bc65547-chronyd.service-SMnOnY
systemd-private-1f945c612a0c433398c9cec50bc65547-vgauthd.service-CxeeBc
systemd-private-1f945c612a0c433398c9cec50bc65547-vmtoolsd.service-zywMQq
yum.log
6、文本排序命令sort
Usage: sort [OPTION]... [FILE]...
常用的OPTION:
-n:以数值大小进行排序
-r:逆序排序
-t:字段分隔符
-k:以哪个字段为关键字进行排序
-u:去重,排序后相同的行只显示一次
-f:排序时忽略字符大小写
Usage: sort [OPTION]... [FILE]...
常用的OPTION:
-n:以数值大小进行排序
-r:逆序排序
-t:字段分隔符
-k:以哪个字段为关键字进行排序
-u:去重,排序后相同的行只显示一次
-f:排序时忽略字符大小写
7、文本去重命令uniq
Usage: uniq [OPTION]... [INPUT [OUTPUT]]
常用的OPTION:
-c:显示文件中行重复的次数
-d:只显示重复的行
-u:只显示未重复的行
[root@localhost ~]# cat > a <<EOF
> 1
> 1
> 6
> 5
> 8
> 3
> 3
> 9
> 5
> 4
> 7
> EOF
[root@localhost ~]# cat a
1
1
6
5
8
3
3
9
5
4
7
[root@localhost ~]# sort -n a | uniq -c
2 1
2 3
1 4
2 5
1 6
1 7
1 8
1 9
[root@localhost ~]# sort -n a | uniq -d
1
3
5
[root@localhost ~]# sort -n a | uniq -u
4
6
7
8
9
8、基础命令之cut
Usage: cut OPTION... [FILE]...
常用的OPTION:
-d:指定字段分隔符,默认是空格
-f:指定要显示的字段
-f 1,3:显示1和3字段
-f 1-3:显示1到3字段
[root@localhost ~]# ls
a abc anaconda-ks.cfg b c.tar.xz passwd tmp
[root@localhost ~]# head 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@localhost ~]# cut -d: -f1,3 passwd
root:0
bin:1
daemon:2
adm:3
lp:4
sync:5
shutdown:6
halt:7
mail:8
operator:11
games:12
ftp:14
nobody:99
systemd-network:192
dbus:81
polkitd:999
postfix:89
chrony:998
sshd:74
[root@localhost ~]# cut -d: -f1-3 passwd
root:x:0
bin:x:1
daemon:x:2
adm:x:3
lp:x:4
sync:x:5
shutdown:x:6
halt:x:7
mail:x:8
operator:x:11
games:x:12
ftp:x:14
nobody:x:99
systemd-network:x:192
dbus:x:81
polkitd:x:999
postfix:x:89
chrony:x:998
sshd:x:74
9、高级命令之awk
[root@localhost ~]# df -h
文件系统 容量 已用 可用 已用% 挂载点
/dev/mapper/rhel-root 17G 951M 17G 6% /
devtmpfs 901M 0 901M 0% /dev
tmpfs 912M 0 912M 0% /dev/shm
tmpfs 912M 8.6M 904M 1% /run
tmpfs 912M 0 912M 0% /sys/fs/cgroup
/dev/sda1 1014M 143M 872M 15% /boot
tmpfs 183M 0 183M 0% /run/user/0
[root@localhost ~]# df -h|awk '{print $2}'
容量
17G
901M
912M
912M
912M
1014M
183M
[root@localhost ~]# ls
a abc anaconda-ks.cfg b c.tar.xz passwd tmp
[root@localhost ~]# ls passwd
passwd
[root@localhost ~]# 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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
[root@localhost ~]# awk 'BEGIN{FS=":";OFS="-"} {print $1,$3}' passwd
root-0
bin-1
daemon-2
adm-3
lp-4
sync-5
shutdown-6
halt-7
mail-8
operator-11
games-12
ftp-14
nobody-99
systemd-network-192
dbus-81
polkitd-999
postfix-89
chrony-998
sshd-74
10、高级命令之sed
[root@localhost ~]# ls
123 a abc anaconda-ks.cfg b c.tar.xz jjyy passwd tmp
[root@localhost ~]# cat a
abc
123
dhhd
djkd
skd
[root@localhost ~]# sed -i 's/abc/cba/g' a
[root@localhost ~]# cat a
cba
123
dhhd
djkd
skd
[root@localhost ~]# cat > a <<EOF
> SHU
> shj li kdk dkjk
> djjdj djf li kdjf
> kdjk kjdli li kdj li
> kdj li d li dkj li
> EOF
[root@localhost ~]# cat a
SHU
shj li kdk dkjk
djjdj djf li kdjf
kdjk kjdli li kdj li
kdj li d li dkj li
[root@localhost ~]# sed -i 's/li/ping/2' a
[root@localhost ~]# cat a
SHU
shj li kdk dkjk
djjdj djf li kdjf
kdjk kjdli ping kdj li
kdj li d ping dkj li
11、文本过滤命令grep
grep命令根据正则表达式搜索文本,并将符合正则表达式的文本显示出来。
默认使用基本正则表达式来过滤文本。
Usage: grep [OPTION]... PATTERN [FILE]...
常用的OPTION:
-i:忽略大小写
[root@localhost ~]# ls
123 a abc anaconda-ks.cfg b c.tar.xz jjyy passwd tmp
[root@localhost ~]# cat a
SHU
shj li kdk dkjk
djjdj djf li kdjf
kdjk kjdli ping kdj li
kdj li d ping dkj li
[root@localhost ~]# grep -i 's' a
SHU
shj li kdk dkjk
--color:匹配到的内容高亮显示
-v:显示没有被正则表达式匹配到的内容
[root@localhost ~]# grep -v 'root' 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
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
-o:只显示被正则表达式匹配到的内容
[root@localhost ~]# ls
123 a abc anaconda-ks.cfg b c.tar.xz jjyy passwd tmp
[root@localhost ~]# cat a
SHU
shj li kdk dkjk
djjdj djf li kdjf
kdjk kjdli ping kdj li
kdj li d ping dkj li
[root@localhost ~]# grep -i 's' a
SHU
shj li kdk dkjk
[root@localhost ~]# grep -io 's' a
S
s
-E:使用扩展正则表达式
[root@localhost ~]# grep -E 'bash|nologin' 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
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:997:User for polkitd:/:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
-q:静默模式,不输出任何信息
[root@localhost ~]# grep -Eq 'bash|nologin' passwd
[root@localhost ~]# echo $?
0
-A #:此处的#必须是数字。被正则匹配到的内容以及其后面#行的内容都显示出来
-B #:此处的#必须是数字。被正则匹配到的内容以及其前面#行的内容都显示出来
-C #:此处的#必须是数字。被正则匹配到的内容及其前后各#行的内容都显示出来
12、文件查找命令find
语法:find [OPTION]... 查找路径 查找标准 查找到以后的处理动作
查找路径:默认为当前目录
查找标准:
-name filename:对文件名精确匹配,支持通配符
[root@localhost ~]# find / -name passwd
/sys/fs/selinux/class/passwd
/sys/fs/selinux/class/passwd/perms/passwd
/etc/passwd
/etc/pam.d/passwd
/root/passwd
/usr/bin/passwd
-iname filename:文件名匹配时不区分大小写
-regex pattern:基于正则表达式进行文件名匹配
-user:查找某用户的所有文件
-group:查找某组的所有文件
-uid:根据UID进行查找
-gid:根据GID进行查找
-nouser:查找没有拥有者的文件
[root@localhost ~]# useradd tom
[root@localhost ~]# ll /home/
总用量 0
drwx------. 2 tom tom 62 9月 12 21:05 tom
[root@localhost ~]# userdel tom
[root@localhost ~]# ll /home/
总用量 0
drwx------. 2 1000 1000 62 9月 12 21:05 tom
[root@localhost ~]# find / -nouser
find: ‘/proc/2283/task/2283/fd/6’: 没有那个文件或目录
find: ‘/proc/2283/task/2283/fdinfo/6’: 没有那个文件或目录
find: ‘/proc/2283/fd/6’: 没有那个文件或目录
find: ‘/proc/2283/fdinfo/6’: 没有那个文件或目录
/var/spool/mail/tom
/home/tom
/home/tom/.bash_logout
/home/tom/.bash_profile
/home/tom/.bashrc
-nogroup:查找没有属组的文件
[root@localhost ~]# find / -nogroup
find: ‘/proc/2351/task/2351/fd/6’: 没有那个文件或目录
find: ‘/proc/2351/task/2351/fdinfo/6’: 没有那个文件或目录
find: ‘/proc/2351/fd/6’: 没有那个文件或目录
find: ‘/proc/2351/fdinfo/6’: 没有那个文件或目录
/home/tom
/home/tom/.bash_logout
/home/tom/.bash_profile
/home/tom/.bashrc
-type:根据文件类型进行查找
[root@localhost ~]# ls
123 a AB abc Acb anaconda-ks.cfg b c.tar.xz jjyy passwd tmp
[root@localhost ~]# find -type d
.
./b
./tmp
13、文件查找命令find(续一)
语法:find [OPTION]... 查找路径 查找标准 查找到以后的处理动作
查找标准(续):
-size:根据文件大小进行查找。如1k、1M、+10k、+10M、-1k、-10M
+表示大于,-表示小于
[root@localhost ~]# ll -h
总用量 16K
-rw-r--r--. 1 root root 0 9月 12 19:42 123
-rw-r--r--. 1 root root 82 9月 12 20:04 a
-rw-r--r--. 1 root root 0 9月 12 21:00 AB
-rw-r--r--. 1 root root 0 9月 12 19:42 abc
-rw-r--r--. 1 root root 0 9月 12 21:00 Acb
-rw-------. 1 root root 1.5K 9月 6 19:48 anaconda-ks.cfg
drwxr-xr-x. 2 root root 50 9月 12 19:34 b
-rw-r--r--. 1 root root 164 9月 12 16:03 c.tar.xz
-rw-r--r--. 1 root root 0 9月 12 19:42 jjyy
-rw-r--r--. 1 root root 846 9月 12 16:33 passwd
drwxr-xr-x. 2 root root 6 9月 12 15:49 tmp
[root@localhost ~]# find -size +1k
./anaconda-ks.cfg
./.bash_history
[root@localhost ~]# find -size -1k
./b/1
./b/123
./b/abc
./b/hello
./abc
./123
./jjyy
./AB
./Acb
-mtime:根据修改时间查找
+5:表示查找5天以前修改的文件
-5:表示查找5天以内修改的文件
[root@localhost ~]# ls
123 a AB abc Acb anaconda-ks.cfg b c.tar.xz jjyy passwd tmp
[root@localhost ~]# find -mtime -5
.
./.bash_history
./b
./b/1
./b/123
./b/hello
./tmp
./c.tar.xz
./passwd
./a
./abc
./123
./jjyy
./AB
./Acb
[root@localhost ~]# find -mtime +5
./.bash_logout
./.bash_profile
./.bashrc
./.cshrc
./.tcshrc
./anaconda-ks.cfg
-atime:根据访问时间查找
-ctime:根据改变时间查找
-perm mode:根据权限精确查找
-perm –mode:文件权限能完全包含此mode时才符合条件
-perm /mode:9位权限中有任何一位权限匹配都视为符合查找条件
14、文件查找命令find(续二)
语法:find [OPTION]... 查找路径 查找标准 查找到以后的处理动作
多条件组合使用:
-a
-o
-not
!
例如:
!A –a !B 与 !(A –o B) 相等
!A –o !B 与 !(A –a B) 相等
[root@localhost ~]# ll
总用量 16
-rw-r--r--. 1 root root 0 9月 12 19:42 123
-rw-r--r--. 1 root root 82 9月 12 20:04 a
-rw-r--r--. 1 root root 0 9月 12 21:00 AB
-rw-r--r--. 1 root root 0 9月 12 19:42 abc
-rw-r--r--. 1 root root 0 9月 12 21:00 Acb
-rw-------. 1 root root 1451 9月 6 19:48 anaconda-ks.cfg
drwxr-xr-x. 2 root root 50 9月 12 19:34 b
-rw-r--r--. 1 root root 164 9月 12 16:03 c.tar.xz
-rw-r--r--. 1 root root 0 9月 12 19:42 jjyy
-rw-r--r--. 1 root root 846 9月 12 16:33 passwd
drwxr-xr-x. 2 root root 6 9月 12 15:49 tmp
[root@localhost ~]# find -mtime -5 -a -name a
./a
15、文件查找命令find(续三)
语法:find [OPTION]... 查找路径 查找标准 查找到以后的处理动作
处理动作:默认动作是显示到屏幕上
-print:打印到屏幕上
-ls:类似ls –l的形式显示每一个文件的详细信息
-delete:删除查找到的文件
[root@localhost ~]# ls
123 a AB abc Acb anaconda-ks.cfg b c.tar.xz jjyy passwd tmp
[root@localhost ~]# find -name 123
./b/123
./123
[root@localhost ~]# find -name 123 -delete
[root@localhost ~]# ls
a AB abc Acb anaconda-ks.cfg b c.tar.xz jjyy passwd tmp
-fls /path/to/somefile:将查找到的所有文件的长格式信息保存至指定文件中
[root@localhost ~]# find -type d -fls a.txt
[root@localhost ~]# ls
a AB abc Acb anaconda-ks.cfg a.txt b c.tar.xz jjyy passwd tmp
[root@localhost ~]# cat a.txt
33574977 0 dr-xr-x--- 4 root root 251 9月 12 21:40 .
50840618 0 drwxr-xr-x 2 root root 39 9月 12 21:37 ./b
50840651 0 drwxr-xr-x 2 root root 6 9月 12 15:49 ./tmp
-ok COMMAND {} ;:对查找到的所有文件执行COMMAND,每次操作都需要用户确认
-exec COMMAND {} ;:对查找到的所有文件执行COMMAND,操作不需要确认
[root@localhost ~]# ls
a AB Acb anaconda-ks.cfg a.txt b c.tar.xz passwd tmp
[root@localhost ~]# find -type d
.
./b
./tmp
[root@localhost ~]# find -type d -exec rm -rf {} ;
rm: refusing to remove "." or ".." directory: skipping "."
find: ‘./b’: 没有那个文件或目录
find: ‘./tmp’: 没有那个文件或目录
[root@localhost ~]# ls
a AB Acb anaconda-ks.cfg a.txt c.tar.xz passwd
注意:find传递查找到的文件至后面指定的命令时,查找到所有符合条件的文件一次性传递给后面的命令,而有些命令不能接受过多的参数,此时命令执行可能会失败,而xargs可规避此问题。
xargs:通过管道将查找到的内容给xargs处理,xargs后面直接跟命令即可
[root@localhost ~]# ls
a AB Acb anaconda-ks.cfg a.txt c.tar.xz kdj passwd sj
[root@localhost ~]# find -type d
.
./sj
./kdj
[root@localhost ~]# find -type d |xargs rm -rf
rm: refusing to remove "." or ".." directory: skipping "."
[root@localhost ~]# ls
a AB Acb anaconda-ks.cfg a.txt c.tar.xz passwd
[root@localhost ~]# ls
a AB Acb anaconda-ks.cfg a.txt c.tar.xz passwd sjnfjd snj
[root@localhost ~]# find -type d
.
./snj
./sjnfjd
[root@localhost ~]# find -type d|xargs mv -t /opt/
mv: 无法将"." 移动至"/opt/.": 设备或资源忙
[root@localhost ~]# ls /opt/
abc sjnfjd snj