16 文件查找与打包压缩

16.1 locate

♦ locate查询系统上预建的文件索引数据库 /var/lib/mlocate/mlocate.db

♦ 索引的构建是在系统较为空闲时自动进行(周期性任务),执行updatedb可以更新数据库

♦ 索引构建过程需要遍历整个根文件系统,很消耗资源

♦ locate和updatedb命令来自于mlocate包

命令常用选项

♦ -i 不区分大小写

♦ -n N 只列举前N个匹配项目

♦ -r 使用基本正则表达式

#包下面的错误
[root@centos82s ~]$locate /bin/ls
-bash: locate: command not found
[root@centos82s ~]$updatedb
-bash: updatedb: command not found
#下载mlocate
[root@centos82s ~]$yum -y install mlocate 
#新安装系统需要updatedb才有索引数据库:mlocate.db
[root@centos82s ~]$locate /bin/ls
locate: can not stat () `/var/lib/mlocate/mlocate.db': No such file or directory
[root@centos82s ~]$updatedb
[root@centos82s ~]$locate /bin/ls
/usr/bin/ls
/usr/bin/lsattr
/usr/bin/lsblk
...
#搜索文件,默认搜索的全路径中包含sysconfig的文件
[root@centos82s ~]$locate sysconfig
/etc/sysconfig
/etc/sysconfig/anaconda
/etc/sysconfig/console
/etc/sysconfig/cpupower
/etc/sysconfig/crond
...
#使用-b,只搜索基名中包含sysconfig的文件
[root@centos82s ~]$locate -b sysconfig
/etc/sysconfig
/usr/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.cfg
/usr/lib/python3.6/site-packages/pip/_vendor/distlib/_backport/sysconfig.py
#只看匹配数目
[root@centos82s ~]$locate -c ls
1899
[root@centos82s ~]$locate ls|wc -l
1899
#使用正则表达式
[root@centos82s ~]$locate -l 3 -r "\.conf$"
/boot/loader/entries/ede99f3b11c54563870dbb02f64a60ee-0-rescue.conf
/boot/loader/entries/ede99f3b11c54563870dbb02f64a60ee-4.18.0-193.el8.x86_64.conf
/etc/dracut.conf
16.2 find命令

♦ -maxdepth 最大搜索目录深度

♦ -mindepth 最小搜索目录深度

♦ -name 指定文件名,支持通配符

♦ -iname 文件名,不区分字母大小写

♦ -samefile name 相同inode号的文件(name文件名称)

♦ -links n 链接数为n的文件

♦ -regex “PATTERN” 以PATTERN匹配整个文件路径,而非文件名称

♦ -depth -d 对每个目录先处理目录内的文件,再处理目录本身

16.2.1 根据文件名和inode查找
[root@centos82s ~]$find /etc -maxdepth 1 -name "*.conf"
/etc/resolv.conf
/etc/dracut.conf
/etc/sysctl.conf
...
[root@centos82s ~]$find /etc -maxdepth 2 -name "*.conf"
/etc/resolv.conf
/etc/dnf/dnf.conf
/etc/selinux/semanage.conf
/etc/modprobe.d/tuned.conf
...
#根据inode编号查询文件
[root@centos82s ~]$ls -i
201326724 anaconda-ks.cfg
[root@centos82s ~]$find -inum 201326724
./anaconda-ks.cfg
#-iname不区分大小写
[root@centos82s ~]$find -name t1.txt
./t1.txt
[root@centos82s ~]$find -name T1.txt
./T1.txt
[root@centos82s ~]$find -iname t1.txt
./t1.txt
./T1.txt
#通配符
[root@centos82s ~]$find -name "*.txt"
./t1.txt
./T1.txt
#-links n   查询链接数为n的文件
[root@centos82s ~]$ll
total 4
-rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg
-rw-r--r--. 3 root root    0 Aug 13 11:10 t1.txt
-rw-r--r--. 1 root root    0 Aug 13 11:10 T1.txt
-rw-r--r--. 3 root root    0 Aug 13 11:10 t2.txt
-rw-r--r--. 3 root root    0 Aug 13 11:10 t3.txt
#-samefile相同inode编号的文件
[root@centos82s ~]$find -samefile t1.txt
./t1.txt
./t2.txt
./t3.txt
#-regex匹配路径
[root@centos82s ~]$find -regex ".*/*.txt$"
./t1.txt
./T1.txt
./t2.txt
./t3.txt
#使用-depth和不使用的区别
[root@centos82s ~]$find /data/dir1
/data/dir1
/data/dir1/dir2
/data/dir1/dir2/dir3
/data/dir1/dir2/dir3/dir4
[root@centos82s ~]$find /data/dir1 -depth
/data/dir1/dir2/dir3/dir4
/data/dir1/dir2/dir3
/data/dir1/dir2
/data/dir1
16.2.2 根据属主、属组查找

♦ -user USERNAME 查找属主为指定用户(UID)的文件

♦ -group GRPNAME 查找属组为指定组(GID)的文件

♦ -uid UserID 查找属主为指定用户UID号的文件

♦ -gid GroupID 查找属组为指定组GID号的文件

♦ -nouser 查找没有属主的文件

♦ -nogroup 查找没有属组的文件

[root@centos82s ~]$chown dou:dou t1.txt
[root@centos82s ~]$ll
total 4
-rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg
-rw-r--r--. 3 dou  dou     0 Aug 13 11:10 t1.txt
-rw-r--r--. 1 root root    0 Aug 13 11:10 T1.txt
-rw-r--r--. 3 dou  dou     0 Aug 13 11:10 t2.txt
lrwxrwxrwx. 1 root root    6 Aug 13 11:18 t2.txt.1 -> t2.txt
-rw-r--r--. 3 dou  dou     0 Aug 13 11:10 t3.txt
#-user
[root@centos82s ~]$find -user dou
./t1.txt
./t2.txt
./t3.txt
#-group
[root@centos82s ~]$find -group dou
./t1.txt
./t2.txt
./t3.txt
#-uid
[root@centos82s ~]$find -uid 1000
./t1.txt
./t2.txt
./t3.txt
#-gid
[root@centos82s ~]$find -gid 1000
./t1.txt
./t2.txt
./t3.txt
#把链接文件t1的属主删除,设为无属主、无属组状态
[root@centos82s ~]$ll
total 4
-rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg
-rw-r--r--. 3 1001 1001    0 Aug 13 11:10 t1.txt
-rw-r--r--. 1 root root    0 Aug 13 11:10 T1.txt
-rw-r--r--. 3 1001 1001    0 Aug 13 11:10 t2.txt
lrwxrwxrwx. 1 root root    6 Aug 13 11:18 t2.txt.1 -> t2.txt
-rw-r--r--. 3 1001 1001    0 Aug 13 11:10 t3.txt
#-nouser
[root@centos82s ~]$find -nouser
./t1.txt
./t2.txt
./t3.txt
#-nogroup
[root@centos82s ~]$find -nogroup
./t1.txt
./t2.txt
./t3.txt
16.2.3 根据文件类型查找

♦ f 普通文件

♦ d 目录文件

♦ b 块链接

♦ c 字符文件

♦ l 符号链接文件

♦ p 管道文件

♦ s 套接字文件

#目录文件
[root@centos82s ~]$find -type d
.
./tdir1
#链接文件
[root@centos82s ~]$find -type l
./t2.txt.1
16.2.4 查找空目录和空文件(+逻辑处理)

♦ -empty 查找空目录和空文件

组合条件

♦ -a 与关系

♦ -o 或关系

♦ -not /! 非关系

[root@centos82s ~]$find -empty
./t1.txt
./T1.txt
./t2.txt
./t3.txt
./tdir1
#-a,与
[root@centos82s ~]$find -type d -a -empty
./tdir1
#-o,或
[root@centos82s ~]$find -type d -o -type l
.
./t2.txt.1
./tdir1
#-not/!非
[root@centos82s ~]$find -not -empty
.
./.bash_logout
./.bash_profile
./.bashrc
16.2.5 根据文件大小查找文件

♦ -size [+|-] #UNIT 常用单位:k,M,G,c(注意大小写敏感)

♦ #UNIT 表示(#-1,#],如:6k 表示(5k,6k]

♦ -#UNIT 表示[0,#-1],如:-6k表示[0,5k]

♦ +#UNIT 表示(#,∞),如:+6k表示(6k,∞)

[root@centos82s ~]$find /etc -size 4
/etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
/etc/pki/rpm-gpg/RPM-GPG-KEY-centostesting
/etc/login.defs
/etc/nftables/main.nft
...
16.2.6 根据时间查找文件

♦ -size [+|-] #UNIT 常用单位:k,M,G,c(注意大小写敏感)

♦ #UNIT 表示(#-1,#],如:6k 表示(5k,6k]

♦ -#UNIT 表示[0,#-1],如:-6k表示[0,5k]

♦ +#UNIT 表示(#,∞),如:+6k表示(6k,∞)

[root@centos82s ~]$touch t1.txt
[root@centos82s ~]$ll
total 4
-rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg
-rw-r--r--. 3 1001 1001    0 Aug 13 13:54 t1.txt
-rw-r--r--. 1 root root    0 Aug 13 11:10 T1.txt
-rw-r--r--. 3 1001 1001    0 Aug 13 13:54 t2.txt
lrwxrwxrwx. 1 root root    6 Aug 13 11:18 t2.txt.1 -> t2.txt
-rw-r--r--. 3 1001 1001    0 Aug 13 13:54 t3.txt
drwxr-xr-x. 2 root root    6 Aug 13 12:29 tdir1
[root@centos82s ~]$find -amin 1
./t1.txt
./t2.txt
./t3.txt
16.2.7 根据权限查找文件

♦ -perm 666 表示搜索的文件主组、属组、其它用户权限必须都是rw

♦ -perm /666 表示搜索的文件主组、属组、其它用户中只要有一个包含r或w就可以

♦ -perm -666 表示搜索的文件属主、属组、其它用户中三者必须包含rw

[root@centos82s ~]$ll
total 4
-rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg
-rw-r--r--. 3 1001 1001    0 Aug 13 13:54 t1.txt
-rw-r--r--. 1 root root    0 Aug 13 11:10 T1.txt
-rw-r--r--. 3 1001 1001    0 Aug 13 13:54 t2.txt
lrwxrwxrwx. 1 root root    6 Aug 13 11:18 t2.txt.1 -> t2.txt
-rw-r--r--. 3 1001 1001    0 Aug 13 13:54 t3.txt
drwxr-xr-x. 2 root root    6 Aug 13 12:29 tdir1
[root@centos82s ~]$find -perm 644
./.bash_logout
./.bash_profile
./.bashrc
...
[root@centos82s ~]$find -perm /666
.
./.bash_logout
./.bash_profile
...
[root@centos82s ~]$find -perm -777
./t2.txt.1
[root@centos82s ~]$find -perm -666
./t2.txt.1
[root@centos82s ~]$
16.2.8 处理文件

♦ -print 默认的处理动作,显示至屏幕

♦ -ls 类似于对查找到的文件执行“ls -dils”命令格式输出

♦ -fls file 查找到的所有文件的长格式信息保存至指定文件中,相当于 -ls > file

♦ -delete 删除查找到的文件,慎用!

♦ -ok COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令,对于每个文件执行命令之前,都会交互式要求用户确认

♦ -exec COMMAND {} \; 对查找到的每个文件执行由COMMAND指定的命令

♦ {} 用于引用查找到的文件名称自身

#-fls
[root@centos82s ~]$find /etc -fls fetc
[root@centos82s ~]$ll
total 72
-rw-r--r--. 1 root root 68690 Aug 13 14:32 fetc
#-delete
[root@centos82s ~]$find -name t3.txt -delete
#-ok,删除权限为644的文件,并提示
[root@centos82s ~]$find -perm 644 -ok rm -rf {} \;
< rm ... ./.bash_logout > ? n
< rm ... ./.bash_profile > ? n
#-exec,删除文件,不提示
[root@centos82s data]$ll
total 4
drwxr-xr-x. 3 root root   18 Aug 13 10:38 dir1
-rw-r--r--. 1 root root 1146 Aug 13 10:37 passwd
[root@centos82s data]$find -perm 644 -exec rm -rf {} \;
[root@centos82s data]$ll
total 0
drwxr-xr-x. 3 root root 18 Aug 13 10:38 dir1
16.3 参数替换 xargs

xargs完成了两个行为:接受标准输入;将标准输入传递到正确的位置上

#输入数据,Ctrl+d结束,显示输入数据
[root@centos82s ~]$xargs
hello
world
welcome

hello world welcome
#xargs和管道
[root@centos82s ~]$seq 10
1
2
3
4
5
6
7
8
9
10
[root@centos82s ~]$seq 10|xargs
1 2 3 4 5 6 7 8 9 10
#-n num,将xargs可以将一行中的空格作为分界符,用-n num选项,指定将每num个空格替换成行,变成多行
[root@centos82s etc]$echo {1..10}|xargs -n2
1 2
3 4
5 6
7 8
9 10
[root@centos82s etc]$echo {1..10}|xargs -n3
1 2 3
4 5 6
7 8 9
10
#-d,可以自己指定分界符
[root@centos82s etc]$echo "douXdouXdouXdouXdou"|xargs 
douXdouXdouXdouXdou
[root@centos82s etc]$echo "douXdouXdouXdouXdou"|xargs -d X
dou dou dou dou dou

[root@centos82s etc]$echo "douXdouXdouXdouXdou"|xargs -d X -n2
dou dou
dou dou
dou
#批量创建和删除用户
[root@centos82s etc]$echo user{1..10}|xargs -n1 useradd
[root@centos82s etc]$grep "^user" /etc/passwd
user1:x:1001:1001::/home/user1:/bin/bash
user2:x:1002:1002::/home/user2:/bin/bash
user3:x:1003:1003::/home/user3:/bin/bash
user4:x:1004:1004::/home/user4:/bin/bash
user5:x:1005:1005::/home/user5:/bin/bash
user6:x:1006:1006::/home/user6:/bin/bash
user7:x:1007:1007::/home/user7:/bin/bash
user8:x:1008:1008::/home/user8:/bin/bash
user9:x:1009:1009::/home/user9:/bin/bash
user10:x:1010:1010::/home/user10:/bin/bash

[root@centos82s etc]$echo user{1..10}|xargs -n1 userdel
[root@centos82s etc]$grep "^user" /etc/passwd
[root@centos82s etc]$
#并行下载视频
[root@centos82s etc]$seq 10|xargs -i -P3 wget https://www.bilibili.com/video/BV1HZ4y1p7Bf?p={}
--2020-08-13 15:39:30--  https://www.bilibili.com/video/BV1HZ4y1p7Bf?p=1
--2020-08-13 15:39:30--  https://www.bilibili.com/video/BV1HZ4y1p7Bf?p=2
--2020-08-13 15:39:30--  https://www.bilibili.com/video/BV1HZ4y1p7Bf?p=3
#按字母排序
[root@centos82s data]$find -type f -ls
      131      4 -rw-r--r--   1  root     root            4 Aug 13 15:51 ./f1.txt
      132      4 -rw-r--r--   1  root     root            7 Aug 13 15:51 ./f2.txt
      133      4 -rw-r--r--   1  root     root           10 Aug 13 15:51 ./f3.txt

#按文件大小从大到小排序
[root@centos82s data]$find -type f|xargs ls -lS
-rw-r--r--. 1 root root 10 Aug 13 15:51 ./f3.txt
-rw-r--r--. 1 root root  7 Aug 13 15:51 ./f2.txt
-rw-r--r--. 1 root root  4 Aug 13 15:51 ./f1.txt
#空格作为了名称,查询时报错
[root@centos82s data]$find -type f|xargs ls -l
ls: cannot access './a': No such file or directory
ls: cannot access 'b.txt': No such file or directory
-rw-r--r--. 1 root root  4 Aug 13 15:51 ./f1.txt
-rw-r--r--. 1 root root  7 Aug 13 15:51 ./f2.txt
-rw-r--r--. 1 root root 10 Aug 13 15:51 ./f3.txt
#查询带有空格的文件名称,加上-print0,-0可以将null字符代替空格作为分界符
[root@centos82s data]$find -type f -print0|xargs -0 ls -l 
-rw-r--r--. 1 root root  0 Aug 13 15:57 './a b.txt'
-rw-r--r--. 1 root root  4 Aug 13 15:51  ./f1.txt
-rw-r--r--. 1 root root  7 Aug 13 15:51  ./f2.txt
-rw-r--r--. 1 root root 10 Aug 13 15:51  ./f3.txt
#删除带空格的文件名称出错
[root@centos82s data]$find -type f|xargs rm
rm: cannot remove './a': No such file or directory
rm: cannot remove 'b.txt': No such file or directory
#删除带有空格的文件名称,加上-print0,-0可以将null字符代替空格作为分界符
[root@centos82s data]$find -type f -print0|xargs -0 rm 
[root@centos82s data]$ll
total 0
16.4 compress 命令

此工具来自于ncompress包,目前很少使用,对应文件后缀是.Z

命令常用选项

♦ -d 解压缩,相对于uncompress

♦ -c 结果输出至标准输出,不删除原文件

♦ -v 显示详情

#如果compress不存在,下载
[root@centos82s data]$yum -y install ncompress
#压缩和解压
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 1146 Aug 13 16:19 f1.txt
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
[root@centos82s data]$compress f1.txt
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 706 Aug 13 16:19 f1.txt.Z
-rw-r--r--. 1 root root   7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root  10 Aug 13 16:13 f3.txt
[root@centos82s data]$uncompress f1.txt.Z 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 1146 Aug 13 16:19 f1.txt
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
[root@centos82s data]$compress f1.txt 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 706 Aug 13 16:19 f1.txt.Z
-rw-r--r--. 1 root root   7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root  10 Aug 13 16:13 f3.txt
[root@centos82s data]$compress -d f1.txt.Z 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 1146 Aug 13 16:19 f1.txt
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
#使用-c选项,重定向不会删除原文件,不显示解压缩的前提下查看内容
[root@centos82s data]$compress -c f1.txt > f1.txt.Z
[root@centos82s data]$ll
total 16
-rw-r--r--. 1 root root 1146 Aug 13 16:19 f1.txt
-rw-r--r--. 1 root root  706 Aug 13 16:22 f1.txt.Z
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt

[root@centos82s data]$zcat f1.txt.Z > f1
16.5 gzip和gunzip 命令

此工具来自于gzip包,对应文件后缀是.gz

命令常用选项

♦ -k keep,保留原文件,centos8新特性

♦ -d 解压缩,相对于gunzip

♦ -c 结果输出至标准输出,保留原文件不改变

♦ -num 指定压缩比,num取值为1-9,值越大压缩比越大

#gzip和gunzip的压缩和解压缩
root@centos82s data]$gzip f1.txt
[root@centos82s data]$ll
total 20
-rw-r--r--. 1 root root 1146 Aug 13 16:29 f1
-rw-r--r--. 1 root root  532 Aug 13 16:19 f1.txt.gz
-rw-r--r--. 1 root root  706 Aug 13 16:22 f1.txt.Z
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
[root@centos82s data]$gunzip f1.txt.gz 
[root@centos82s data]$ll
total 20
-rw-r--r--. 1 root root 1146 Aug 13 16:29 f1
-rw-r--r--. 1 root root 1146 Aug 13 16:19 f1.txt
-rw-r--r--. 1 root root  706 Aug 13 16:22 f1.txt.Z
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
[root@centos82s data]$gzip f1.txt
[root@centos82s data]$ll
total 20
-rw-r--r--. 1 root root 1146 Aug 13 16:29 f1
-rw-r--r--. 1 root root  532 Aug 13 16:19 f1.txt.gz
-rw-r--r--. 1 root root  706 Aug 13 16:22 f1.txt.Z
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
[root@centos82s data]$gzip -d f1.txt
[root@centos82s data]$ll
total 20
-rw-r--r--. 1 root root 1146 Aug 13 16:29 f1
-rw-r--r--. 1 root root 1146 Aug 13 16:19 f1.txt
-rw-r--r--. 1 root root  706 Aug 13 16:22 f1.txt.Z
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
#使用-c选项,重定向解压不会删除原文件,不显示解压查看文件内容
[root@centos82s data]$zcat -c f1.txt.gz > f1gz
#指定压缩级别-num
[root@centos82s data]$gzip -9 f1.txt
16.6 bzip2和bunzip2 命令

此工具来自于bzip2包,对应文件后缀是..bz2

命令常用选项

♦ -k keep,保留原文件

♦ -d 解压缩,相对于bunzip2

♦ -c 结果输出至标准输出,保留原文件不改变

♦ -num 指定压缩比,num取值为1-9,值越大压缩比越大

#下载bzip2
[root@centos82s data]$yum -y install bzip2
#压缩和解压
[root@centos82s data]$bzip2 f1.txt 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 558 Aug 13 16:44 f1.txt.bz2
-rw-r--r--. 1 root root   7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root  10 Aug 13 16:13 f3.txt
[root@centos82s data]$bunzip2 f1.txt.bz2 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 1146 Aug 13 16:44 f1.txt
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
[root@centos82s data]$bzip2 f1.txt 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 558 Aug 13 16:44 f1.txt.bz2
-rw-r--r--. 1 root root   7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root  10 Aug 13 16:13 f3.txt
[root@centos82s data]$bzip2 -d f1.txt.bz2 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 1146 Aug 13 16:44 f1.txt
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
#bzcat,重定向解压不会删除原文件,不显示解压查看文件内容
[root@centos82s data]$bzcat f1.txt.bz2 >f1bz.txt
16.7 xz和unxz 命令

此工具来自于xz包,对应文件后缀是xz

命令常用选项

♦ -k keep,保留原文件

♦ -d 解压缩,相对于bunzip2

♦ -c 结果输出至标准输出,保留原文件不改变

♦ -num 指定压缩比,num取值为1-9,值越大压缩比越大

#xz和unxz压缩和解压
[root@centos82s data]$xz f1.txt 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 596 Aug 13 16:44 f1.txt.xz
-rw-r--r--. 1 root root   7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root  10 Aug 13 16:13 f3.txt
[root@centos82s data]$unxz f1.txt.xz 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 1146 Aug 13 16:44 f1.txt
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
[root@centos82s data]$xz f1.txt 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 596 Aug 13 16:44 f1.txt.xz
-rw-r--r--. 1 root root   7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root  10 Aug 13 16:13 f3.txt
[root@centos82s data]$xz -d f1.txt.xz 
[root@centos82s data]$ll
total 12
-rw-r--r--. 1 root root 1146 Aug 13 16:44 f1.txt
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
#压缩保留原文件
[root@centos82s data]$xz -k f1.txt 
[root@centos82s data]$ll
total 16
-rw-r--r--. 1 root root 1146 Aug 13 16:44 f1.txt
-rw-r--r--. 1 root root  596 Aug 13 16:44 f1.txt.xz
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
#xzcat,重定向解压不会删除原文件,不显示解压查看文件内容
[root@centos82s data]$xzcat f1.txt.xz > f1xz.txt
16.8 zip和unzip 命令

zip可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,如:所有者和组信息,一般建议使用tar代替

此工具分别来自于zip和unzip包,对应文件后缀是zip

#输入目录zip和unzip查看帮助
[root@centos82s data]$zip
[root@centos82s data]$unzip
#压缩data下面的文件
[root@centos82s data]$zip -r da.zip /data/
  adding: data/ (stored 0%)
  adding: data/f2.txt (stored 0%)
  adding: data/f3.txt (stored 0%)
  adding: data/f1.txt.xz (stored 0%)
  adding: data/f11.txt (stored 0%)
  adding: data/f1.txt.bz2 (stored 0%)
  adding: data/f1bz.txt (deflated 56%)
  adding: data/f1xz.txt (deflated 56%)
  adding: data/passwd (deflated 56%)
  adding: data/issue (stored 0%)
[root@centos82s data]$ll
total 40
-rw-r--r--. 1 root root 4247 Aug 13 17:24 da.zip
-rw-r--r--. 1 root root    0 Aug 13 17:11 f11.txt
-rw-r--r--. 1 root root 1146 Aug 13 17:13 f1bz.txt
-rw-r--r--. 1 root root  558 Aug 13 16:44 f1.txt.bz2
-rw-r--r--. 1 root root  596 Aug 13 16:44 f1.txt.xz
-rw-r--r--. 1 root root 1146 Aug 13 17:15 f1xz.txt
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
-rw-r--r--. 1 root root   23 Aug 13 17:23 issue
-rw-r--r--. 1 root root 1146 Aug 13 17:23 passwd
#追加压缩文件
[root@centos82s data]$zip da.zip rpm
  adding: rpm/ (stored 0%)
#解压
[root@centos82s data]$unzip da.zip 
Archive:  da.zip
   creating: data/
 extracting: data/f2.txt             
 extracting: data/f3.txt             
 extracting: data/f1.txt.xz          
 extracting: data/f11.txt            
 extracting: data/f1.txt.bz2         
  inflating: data/f1bz.txt           
  inflating: data/f1xz.txt           
  inflating: data/passwd             
 extracting: data/issue              
[root@centos82s data]$ll
total 40
drwxr-xr-x. 2 root root  143 Aug 13 17:24 data
-rw-r--r--. 1 root root 4383 Aug 13 17:29 da.zip
-rw-r--r--. 1 root root    0 Aug 13 17:26 f11.txt
-rw-r--r--. 1 root root 1146 Aug 13 17:13 f1bz.txt
-rw-r--r--. 1 root root  558 Aug 13 16:44 f1.txt.bz2
-rw-r--r--. 1 root root  596 Aug 13 16:44 f1.txt.xz
-rw-r--r--. 1 root root 1146 Aug 13 17:15 f1xz.txt
-rw-r--r--. 1 root root    7 Aug 13 16:13 f2.txt
-rw-r--r--. 1 root root   10 Aug 13 16:13 f3.txt
-rw-r--r--. 1 root root   23 Aug 13 17:23 issue
-rw-r--r--. 1 root root 1146 Aug 13 17:23 passwd
drwxr-xr-x. 2 root root   25 Aug 13 17:29 rpm
#解压到指定文件,
[root@centos82s data]$unzip da.zip -d da
16.9 tar 打包和解包

tar可以对目录和多个文件打包成一个文件并且可以压缩,保留文件属性信息不丢失,常用于备份功能,推荐使用,对应文件后缀是tar

命令常用选项

♦ -c,--create 创建存档文件

♦ -t,--list 列出存档文件内容

♦ -x,--extract 将存档文件解包

♦ -f,--file=ARCHIVE 指定存档文件

♦ -p,--preserve-permissions 保留权限

♦ -C,--directory=DIR 指定目录

♦ -r,--append 追加文件

♦ -z,--gzip 指定gzip压缩格式

♦ -j,--bzip2 指定bzip2压缩格式

♦ -J,--xz 指定xz压缩格式

♦ -exclude=PATTERN 排除文件

♦ -T,--files-from=FILE 指定处理的文件

♦ -X,--exclude-from=FILE 排除指定文件中的内容

♦ -v,--version 显示详细详细

[root@centos82s ~]$ls -l
total 72
-rw-------. 1 root root  1547 Jul 28 18:08 anaconda-ks.cfg
...
#打包
[root@centos82s ~]$tar -cpvf myrepos.tar /etc/yum.repos.d/
tar: Removing leading `/' from member names
/etc/yum.repos.d/
/etc/yum.repos.d/CentOS-AppStream.repo
/etc/yum.repos.d/CentOS-Base.repo
...
[root@centos82s ~]$ll
total 104
-rw-------. 1 root root  1547 Jul 28 18:08 anaconda-ks.cfg
-rw-r--r--. 1 root root 30720 Aug 13 18:40 myrepos.tar
...
#追加文件
[root@centos82s ~]$tar -rf myrepos.tar tdir1
#预览打包文件
[root@centos82s ~]$tar -t -f myrepos.tar
etc/yum.repos.d/
etc/yum.repos.d/CentOS-AppStream.repo
etc/yum.repos.d/CentOS-Base.repo
etc/yum.repos.d/CentOS-CR.repo
etc/yum.repos.d/CentOS-Debuginfo.repo
etc/yum.repos.d/CentOS-Devel.repo
etc/yum.repos.d/CentOS-Extras.repo
etc/yum.repos.d/CentOS-HA.repo
etc/yum.repos.d/CentOS-Media.repo
etc/yum.repos.d/CentOS-PowerTools.repo
etc/yum.repos.d/CentOS-Sources.repo
etc/yum.repos.d/CentOS-Vault.repo
etc/yum.repos.d/CentOS-centosplus.repo
etc/yum.repos.d/CentOS-fasttrack.repo
tdir1/
#解包文件
[root@centos82s ~]$tar -xvf myrepos.tar
etc/yum.repos.d/
etc/yum.repos.d/CentOS-AppStream.repo
etc/yum.repos.d/CentOS-Base.repo
etc/yum.repos.d/CentOS-CR.repo
etc/yum.repos.d/CentOS-Debuginfo.repo
etc/yum.repos.d/CentOS-Devel.repo
etc/yum.repos.d/CentOS-Extras.repo
etc/yum.repos.d/CentOS-HA.repo
etc/yum.repos.d/CentOS-Media.repo
etc/yum.repos.d/CentOS-PowerTools.repo
etc/yum.repos.d/CentOS-Sources.repo
etc/yum.repos.d/CentOS-Vault.repo
etc/yum.repos.d/CentOS-centosplus.repo
etc/yum.repos.d/CentOS-fasttrack.repo
tdir1/
#查看解包文件
[root@centos82s ~]$ls -al etc/yum.repos.d/
total 56
drwxr-xr-x. 2 root root 4096 Jul 28 18:05 .
drwxr-xr-x. 3 root root   25 Aug 13 19:13 ..
-rw-r--r--. 1 root root  731 Jun  3 09:02 CentOS-AppStream.repo
-rw-r--r--. 1 root root  712 Jun  3 09:02 CentOS-Base.repo
-rw-r--r--. 1 root root  798 Jun  3 09:02 CentOS-centosplus.repo
...

#-z,使用gz打包压缩
[root@centos82s ~]$tar -zcpvf myrepos.tar.gz /etc/yum.repos.d/
tar: Removing leading `/' from member names
/etc/yum.repos.d/
/etc/yum.repos.d/CentOS-AppStream.repo
/etc/yum.repos.d/CentOS-Base.repo
#-j,使用bz2打包压缩
[root@centos82s ~]$tar -jcpvf myrepos.tar.bz2 /etc/yum.repos.d/
tar: Removing leading `/' from member names
/etc/yum.repos.d/
/etc/yum.repos.d/CentOS-AppStream.repo
/etc/yum.repos.d/CentOS-Base.repo
/etc/yum.repos.d/CentOS-CR.repo
#-J,使用xz打包压缩
[root@centos82s ~]$tar -Jcpvf myrepos.tar.xz /etc/yum.repos.d/
tar: Removing leading `/' from member names
/etc/yum.repos.d/
/etc/yum.repos.d/CentOS-AppStream.repo
/etc/yum.repos.d/CentOS-Base.repo
#各种压缩包
[root@centos82s ~]$ll
total 16
-rw-------. 1 root root 1547 Jul 28 18:08 anaconda-ks.cfg
-rw-r--r--. 1 root root 2253 Aug 13 19:41 myrepos.tar.bz2
-rw-r--r--. 1 root root 2112 Aug 13 19:39 myrepos.tar.gz
-rw-r--r--. 1 root root 2056 Aug 13 19:42 myrepos.tar.xz
#指定解压目录
[root@centos82s ~]$tar -xvf myrepos.tar.gz -C /data/gz/
16.10 tar 其它高级语法(选择目录打包)
#创建两个文件存储文件夹的部分内容和目录,使用-T指定打包file1文件中的内容,使用-X指定不打包file2文件中的内容
[root@centos82s ~]$cat file1
/etc/sysconfig/
[root@centos82s ~]$cat file2
/etc/sysconfig/cbq
/etc/sysconfig/console
/etc/sysconfig/modules
/etc/sysconfig/network-scripts
[root@centos82s ~]$tar -cpvf myetc.tar -T file1 -X file2
#只打包目录内的文件,不包括目录本身
[root@centos82s etc]$tar zcvf /root/etc.tar.gz ./
16.11 split 文件切割

split命令可以分割一个文件为多个文件

#-b,将myrepos.tar.gz文件按照1k为单位进行切割,切割后的文件名前缀为newfilegz,默认字母后缀
[root@centos82s ~]$split -b 1k myrepos.tar.gz newfilebz
[root@centos82s ~]$ll
total 46972
-rw-r--r--. 1 root root     2253 Aug 13 19:41 myrepos.tar.bz2
-rw-r--r--. 1 root root     2112 Aug 13 19:39 myrepos.tar.gz
-rw-r--r--. 1 root root     2056 Aug 13 19:42 myrepos.tar.xz
-rw-r--r--. 1 root root     1024 Aug 13 20:26 newfilebzaa
-rw-r--r--. 1 root root     1024 Aug 13 20:26 newfilebzab
-rw-r--r--. 1 root root       64 Aug 13 20:26 newfilebzac
#-b,-d,数值后缀
[root@centos82s ~]$split -b 1k -d myrepos.tar.gz newfilebz
[root@centos82s ~]$ll
total 46984
-rw-r--r--. 1 root root     2253 Aug 13 19:41 myrepos.tar.bz2
-rw-r--r--. 1 root root     2112 Aug 13 19:39 myrepos.tar.gz
-rw-r--r--. 1 root root     2056 Aug 13 19:42 myrepos.tar.xz
-rw-r--r--. 1 root root     1024 Aug 13 20:32 newfilebz00
-rw-r--r--. 1 root root     1024 Aug 13 20:32 newfilebz01
-rw-r--r--. 1 root root       64 Aug 13 20:32 newfilebz02
#合并分割的小文件成一个文件
[root@centos82s ~]$cat newfilebza* > newmyrepos.tar.gz
[root@centos82s ~]$ll
total 46988
-rw-r--r--. 1 root root     2253 Aug 13 19:41 myrepos.tar.bz2
-rw-r--r--. 1 root root     2112 Aug 13 19:39 myrepos.tar.gz
-rw-r--r--. 1 root root     2056 Aug 13 19:42 myrepos.tar.xz
-rw-r--r--. 1 root root     1024 Aug 13 20:26 newfilebzaa
-rw-r--r--. 1 root root     1024 Aug 13 20:26 newfilebzab
-rw-r--r--. 1 root root       64 Aug 13 20:26 newfilebzac
-rw-r--r--. 1 root root     2112 Aug 13 20:34 newmyrepos.tar.gz

16.12 cpio 命令打包文件

cpio命令是通过重定向的方式将文件打包备份,还原恢复的工具,它可以解压以“.cpio”或“.tar”后缀文件

命令常用选项

♦ -o output模式,打包,将标准输入传入的文件名打包后发送到标准输出

♦ -i input模式,解包对标准输入传入的打包文件名解包到当前目录

♦ -o filename 输出到指定的归档文件名

♦ -A 向已存在的归档文件中追加文件

♦ -I filename 对指定的归档文件名解压

♦ -F filename 使用指定的文件名替代标准输入或输出

♦ -d 解包生成目录,在cpio还原时,自动的创建目录

♦ -v 显示打包过程中的文件名称

[root@centos82s ~]$ll
total 46976
-rw-------. 1 root root     1547 Jul 28 18:08 anaconda-ks.cfg
-rw-r--r--. 1 root root 21463040 Aug 13 20:14 etcfile
-rw-r--r--. 1 root root 21463040 Aug 13 20:17 etcfile1
-rw-r--r--. 1 root root  5135933 Aug 13 20:11 etc.tar.gz
-rw-r--r--. 1 root root       16 Aug 13 19:49 file1
-rw-r--r--. 1 root root       96 Aug 13 19:50 file2
-rw-r--r--. 1 root root     2253 Aug 13 19:41 myrepos.tar.bz2
-rw-r--r--. 1 root root     2112 Aug 13 19:39 myrepos.tar.gz
-rw-r--r--. 1 root root     2056 Aug 13 19:42 myrepos.tar.xz
-rw-r--r--. 1 root root     1024 Aug 13 20:32 newfilebz00
-rw-r--r--. 1 root root     1024 Aug 13 20:32 newfilebz01
-rw-r--r--. 1 root root       64 Aug 13 20:32 newfilebz02
-rw-r--r--. 1 root root     2112 Aug 13 20:34 newmyrepos.tar.gz
#-o,利用归档模式实现将多个文件打包成一个文件
[root@centos82s ~]$ls|cpio -ov > root.cpio
#-t,预览
[root@centos82s ~]$cpio -tv < root.cpio
-rw-------   1 root     root         1547 Jul 28 18:08 anaconda-ks.cfg
-rw-r--r--   1 root     root     21463040 Aug 13 20:14 etcfile
-rw-r--r--   1 root     root     21463040 Aug 13 20:17 etcfile1
-rw-r--r--   1 root     root      5135933 Aug 13 20:11 etc.tar.gz
-rw-r--r--   1 root     root           16 Aug 13 19:49 file1
-rw-r--r--   1 root     root           96 Aug 13 19:50 file2
-rw-r--r--   1 root     root         2253 Aug 13 19:41 myrepos.tar.bz2
-rw-r--r--   1 root     root         2112 Aug 13 19:39 myrepos.tar.gz
-rw-r--r--   1 root     root         2056 Aug 13 19:42 myrepos.tar.xz
-rw-r--r--   1 root     root         1024 Aug 13 20:32 newfilebz00
-rw-r--r--   1 root     root         1024 Aug 13 20:32 newfilebz01
-rw-r--r--   1 root     root           64 Aug 13 20:32 newfilebz02
-rw-r--r--   1 root     root         2112 Aug 13 20:34 newmyrepos.tar.gz
-rw-r--r--   1 root     root     48074752 Aug 13 20:45 root.cpio
187793 blocks
#解包,解压到当前目录
[root@centos82s ~]$cpio -idv < root.cpio

[root@centos82s data]$cpio -tv < /boot/initramfs-4.18.0-193.el8.x86_64.img 
drwxr-xr-x   3 root     root            0 Apr 24 11:24 .
-rw-r--r--   1 root     root            2 Apr 24 11:24 early_cpio
drwxr-xr-x   3 root     root            0 Apr 24 11:24 kernel
drwxr-xr-x   3 root     root            0 Apr 24 11:24 kernel/x86
drwxr-xr-x   2 root     root            0 Apr 24 11:24 kernel/x86/microcode
-rw-r--r--   1 root     root         9700 Apr 24 11:24 kernel/x86/microcode/AuthenticAMD.bin
21 blocks

[root@centos82s data]$cpio -iv < /boot/initramfs-4.18.0-193.el8.x86_64.img 
.
early_cpio
kernel
kernel/x86
kernel/x86/microcode
kernel/x86/microcode/AuthenticAMD.bin
21 blocks

17 软件管理

17.1 c语言程序的实现过程

源文件hello.c》预处理hello.i》编译器hello.s》汇编器hello.o》链接器hello可执行文件

[root@centos82s ~]$gcc -E hello.c -o hello.i
[root@centos82s ~]$gcc -S hello.i -o hello.s
[root@centos82s ~]$gcc -c hello.s -o hello.o        #此处小写c,否则编译不通过
[root@centos82s ~]$gcc hello.o -o hello
[root@centos82s ~]$ll
total 140920
-rwxr-xr-x. 1 root root    12744 Aug 13 22:30 hello
-rw-r--r--. 1 root root       66 Jul 30 10:46 hello.c
-rw-r--r--. 1 root root    15604 Aug 13 22:29 hello.i
-rw-r--r--. 1 root root     1496 Aug 13 22:30 hello.o
-rw-r--r--. 1 root root      454 Aug 13 22:29 hello.s
[root@centos82s ~]$./hello
Hello,world
17.2 软件模块的静态和动态链接
17.2.1 静态链接

♦ 把程序对应的依赖库复制一份到包

♦ 生成模块文件libxxx.a

♦ 嵌入程序包

♦ 升级难,需重新编译

♦ 占用空间较多,迁移容易

17.2.2 动态链接

♦ 只把依赖做一个动态链接库

♦ 生成模块文件libxxx.so

♦ 链接指向动态库

♦ 占用空间较少,升级方便

17.2.3 模块(库)文件
#查看二进制程序所依赖的库文件,命令ldd /PATH/TO/BINARY_FILE
[root@centos82s ~]$ldd /bin/ls
    linux-vdso.so.1 (0x00007ffcb374a000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007ff2463c9000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007ff2461c3000)
    libc.so.6 => /lib64/libc.so.6 (0x00007ff245e01000)
    libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007ff245b7d000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007ff245979000)
    /lib64/ld-linux-x86-64.so.2 (0x00007ff246817000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007ff245759000)
#管理及查看本机装载的库文件
ldconfig
#显示本机已经缓存的所有可用库文件名及文件路径映射关系
[root@centos82s ~]$/sbin/ldconfig -p
#配置文件
[root@centos82s ~]$cat /etc/ld.so.conf
include ld.so.conf.d/*.conf
[root@centos82s ~]$echo /etc/ld.so.conf.d/*.conf
/etc/ld.so.conf.d/bind-export-x86_64.conf /etc/ld.so.conf.d/kernel-4.18.0-193.el8.x86_64.conf
#缓存文件
[root@centos82s ~]$cat /etc/ld.so.cache
#库文件破坏后,将导致依赖的程序无法正常运行
[root@centos82s ~]$ldd /bin/ls
    linux-vdso.so.1 (0x00007fffd43b7000)
    libselinux.so.1 => /lib64/libselinux.so.1 (0x00007f29e864f000)
    libcap.so.2 => /lib64/libcap.so.2 (0x00007f29e8449000)
    libc.so.6 => /lib64/libc.so.6 (0x00007f29e8087000)
    libpcre2-8.so.0 => /lib64/libpcre2-8.so.0 (0x00007f29e7e03000)
    libdl.so.2 => /lib64/libdl.so.2 (0x00007f29e7bff000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f29e8a9d000)
    libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f29e79df000)
[root@centos82s ~]$ldd /bin/cat
    linux-vdso.so.1 (0x00007ffd9d53e000)
    libc.so.6 => /lib64/libc.so.6 (0x00007fb635963000)
    /lib64/ld-linux-x86-64.so.2 (0x00007fb635f2e000)
#移除库,命令报错
[root@centos82s ~]$mv /lib64/libc.so.6 /tmp
[root@centos82s ~]$ls
ls: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
[root@centos82s ~]$cat
cat: error while loading shared libraries: libc.so.6: cannot open shared object file: No such file or directory
17.3 RPM软件包管理器

centos系统上使用rpm命令管理程序包

功能:安装、卸载、升级、查询、校验、数据库维护

17.3.1 安装

选项

♦ -v,-verbose 显示附加信息

♦ -vv, 比-v显示更多的信息

♦ -h 以###显示程序包管理执行进度

rpm包安装

♦ --test 测试安装,但不真正执行安装,即dry run模式

♦ --nodeps 忽略依赖关系

♦ --replacepkgs 强制重新安装已经安装的软件包

♦ --replacefiles 如果要安装的软件包中有文件已经存在安装其它包时被安装,并不会继续安装,使用此选项可以覆盖次文件

♦ --nosignature 不检查来源合法性

♦ --nodigest 不检查包完整性

♦ --noscripts 不执行程序包脚本

​ %pre 安装前脚本 --nopre

​ %post 安装后脚本 --nopost

​ %preun 卸载前脚本 --nopreun

​ %postun 卸载后脚本 --nopostun

#查看是否安装包
[root@centos82s Packages]$rpm -q tree
package tree is not installed
#安装
[root@centos82s Packages]$rpm -ivh tree-1.7.0-15.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:tree-1.7.0-15.el8                ################################# [100%]
#运行tree
[root@centos82s Packages]$tree
.
└── tree-1.7.0-15.el8.x86_64.rpm

0 directories, 1 file
#查看
[root@centos82s Packages]$rpm -q tree
tree-1.7.0-15.el8.x86_64
#卸载
[root@centos82s Packages]$rpm -evh tree
Preparing...                          ################################# [100%]
Cleaning up / removing...
   1:tree-1.7.0-15.el8                ################################# [100%]
[root@centos82s Packages]$rpm -q tree
package tree is not installed
#从网上直接安装
[root@centos82s ~]$rpm -ivh https://mirrors.aliyun.com/epel/8/Everything/x86_64/Packages/s/sl-5.02-1.el8.x86_64.rpm
Retrieving https://mirrors.aliyun.com/epel/8/Everything/x86_64/Packages/s/sl-5.02-1.el8.x86_64.rpm
warning: /var/tmp/rpm-tmp.S7hH5r: Header V3 RSA/SHA256 Signature, key ID 2f86d6a1: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:sl-5.02-1.el8                    ################################# [100%]
[root@centos82s ~]$sl

执行效果
Linux基础_第1张图片

#测试安装,但不真正执行安装
[root@centos82s ~]$rpm -ivh --test /data/Packages/tree-1.7.0-15.el8.x86_64.rpm
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
[root@centos82s ~]$rpm -q tree
package tree is not installed
#一次安装多个rpm软件包
[root@centos7s Packages]#rpm -ivh tree-1.7.0-15.el8.x86_64.rpm vsftpd-3.0.2-27.el7.x86_64.rpm 
warning: tree-1.7.0-15.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY
Preparing...                          ################################# [100%]
Updating / installing...
   1:vsftpd-3.0.2-27.el7              ################################# [ 50%]
   2:tree-1.7.0-15.el8                ################################# [100%]
[root@centos7s Packages]#rpm -q tree
tree-1.7.0-15.el8.x86_64
[root@centos7s Packages]#rpm -q vsftpd
vsftpd-3.0.2-27.el7.x86_64
#--nodeps,忽略依赖关系安装
[root@centos82s Packages]$rpm -ivh --nodeps vsftpd-3.0.2-27.el7.x86_64.rpm 
warning: vsftpd-3.0.2-27.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:vsftpd-3.0.2-27.el7              ################################# [100%]
17.3.2 升级和降级

选项

♦ -U --upgrade 安装或升级软件,安装有旧版本就升级,不存在旧版本就安装

♦ -F --freshen 升级软件,安装有旧版本就升级,不存在旧版本不升级

♦ --oldpackage 降级

♦ --force 强制安装、升级、卸载

注意:

♦ 不要对内核做升级操作;Linux支持多内核版本并存,因此直接安装新版本内核

♦ 如果原程序包的配置文件安装后曾被修改,在升级时,新版本提供的同一个配置文件不会直接覆盖老版本的配置文件,而把新版本文件重命名(FILENAME.rpmnew)后保留

17.3.3 包查询
rpm {-q|--query} [select-options] [query-options]

[select-options]

♦ -a 所有包

♦ -f 查看指定的文件由哪个程序包安装生成

♦ -p rpmfile 针对尚未安装的程序包文件做查询操作

[query-options]

♦ --changelog 查询rpm包的changelog

♦ -c 查询程序的配置文件

♦ -d 查询程序的文档

♦ -i information

♦ -l 查看指定的程序包安装后生成的所有文件

♦ --scripts 程序包自带的脚本

和CAPABILITY相关

♦ --whatprovides CAPABILITY 查询指定的CAPABILITY由哪个包提供

♦ --whatrequires CAPABILITY 查询指定的CAPABILITY被哪个包依赖

♦ --provides 列出指定程序包所提供的CAPABILITY

♦ -R 查询指定的程序包所依赖的CAPABILITY

常用查询用法

♦ -qa 查询全部软件包

♦ -q PACKAGE 查询软件包

♦ -qi PACKAGE 查询软件包说明信息

♦ -qc PACKAGE 查询已经安装软件的配置文件路径

♦ -ql PACKAGE 查询软件包中包含的文件列表

♦ -qd PACKAGE 查询数据文件

♦ -q --scripts PACKAGE 查询软件包自带的脚本

♦ -qf FILE 查询指定文件来自哪个包

♦ -qpi PACKAGE_FILE

♦ -qpl PACKAGE_FILE,... 查询包中所有文件

#-qi,查询软件包的说明信息
[root@centos82s Packages]$rpm -qi vsftpd
Name        : vsftpd            #软件名称
Version     : 3.0.2             #软件版本
Release     : 27.el7            #软件编译信息
Architecture: x86_64            #软件适用的硬件平台
Install Date: Fri 14 Aug 2020 08:03:03 PM CST           #软件的安装日期
Group       : System Environment/Daemons
Size        : 361239            #软件大小
License     : GPLv2 with exceptions         #软件采用的授权模式
Signature   : RSA/SHA256, Sat 04 Apr 2020 05:10:15 AM CST, Key ID 24c6a8a7f4a80eb5
Source RPM  : vsftpd-3.0.2-27.el7.src.rpm           #软件构建源
Build Date  : Wed 01 Apr 2020 12:55:33 PM CST       #软件构建日期
Build Host  : x86-02.bsys.centos.org            #软件构建所用的主机
Relocations : (not relocatable)         #软件是否支持安装时参数--prefix,此处表示不支持
Packager    : CentOS BuildSystem 
Vendor      : CentOS
URL         : https://security.appspot.com/vsftpd.html      #软件参考网址
Summary     : Very Secure Ftp Daemon            #简单描述软件
Description :           #软件描述
vsftpd is a Very Secure FTP daemon. It was written completely from
scratch.
#-ql,查询包中包含的文件列表
[root@centos82s Packages]$rpm -ql vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
...
#查询是否安装某个包
[root@centos82s Packages]$rpm -q wget
package wget is not installed
#如果不记得包名,可以组合查询
[root@centos82s Packages]$rpm -qa|grep get
gettext-libs-0.19.8.1-17.el8.x86_64
selinux-policy-targeted-3.14.3-41.el8.noarch
gettext-0.19.8.1-17.el8.x86_64
#-qf,查询系统内指定文件来自哪个软件包
[root@centos82s Packages]$rpm -qf /etc/passwd
setup-2.12.2-5.el8.noarch
#-qp --scripts查询软件包中自带的脚本
[root@centos82s Packages]$rpm -qp --scripts vsftpd-3.0.2-27.el7.x86_64.rpm 
warning: vsftpd-3.0.2-27.el7.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID f4a80eb5: NOKEY
postinstall scriptlet (using /bin/sh):

if [ $1 -eq 1 ] ; then 
        # Initial installation 
        systemctl preset vsftpd.service >/dev/null 2>&1 || :
...
#-qc,查询已经安装软件的配置文件路径
[root@centos82s Packages]$rpm -qc vsftpd
/etc/logrotate.d/vsftpd
/etc/pam.d/vsftpd
/etc/vsftpd/ftpusers
/etc/vsftpd/user_list
/etc/vsftpd/vsftpd.conf
#--whatrequires,查询一个文件被哪些软件依赖
[root@centos82s Packages]$rpm -q --whatrequires /bin/bash
grub2-common-2.02-81.el8.noarch
iptables-1.8.4-10.el8.x86_64
iptables-ebtables-1.8.4-10.el8.x86_64
...
#--whatprovides,查询一种功能由哪个软件包提供
[root@centos82s Packages]$rpm -q --whatprovides acl
acl-2.2.53-1.el8.x86_64
#-qpl,查询包中所有的文件
[root@centos82s Packages]$rpm -qpl tree-1.7.0-15.el8.x86_64.rpm 
/usr/bin/tree
/usr/lib/.build-id
/usr/lib/.build-id/d8
/usr/lib/.build-id/d8/6d516d7cb07fb9334cb268af808119e33a5ac5
/usr/share/doc/tree
/usr/share/doc/tree/LICENSE
/usr/share/doc/tree/README
/usr/share/man/man1/tree.1.gz
#提取软件包内指定文件
[root@centos82s Packages]$rpm2cpio tree-1.7.0-15.el8.x86_64.rpm|cpio -ivd ./usr/bin/tree
./usr/bin/tree
221 blocks
17.3.4 包卸载

注意:当包卸载时,对应的配置文件不会删除,以FILENAME.rpmsave形式保留

[root@centos82s Packages]$rpm -evh tree
Preparing...                          ################################# [100%]
Cleaning up / removing...
   1:tree-1.7.0-15.el8                ################################# [100%]
17.3.5 rpm相关数据库

rpm包安装时生成的信息都放在rpm数据库中:/var/lib/rpm

♦ initdb 初始化,如果事先不存在数据库,则创建;存在,不执行任何操作

♦ rebuilddb 重建已安装的包头的数据库索引目录

#查看rpm数据库相关文件
[root@centos82s Packages]$ls -lh /var/lib/rpm
total 44M
-rw-r--r--. 1 root root 1.7M Aug 14 20:03 Basenames
-rw-r--r--. 1 root root 8.0K Aug 14 02:08 Conflictname
-rw-r--r--. 1 root root 280K Aug 14 20:49 __db.001  #rpm数据库文件,文件可以用rpm、rpmdb重建
-rw-r--r--. 1 root root  88K Aug 14 20:49 __db.002
-rw-r--r--. 1 root root 1.3M Aug 14 20:49 __db.003
-rw-r--r--. 1 root root 572K Aug 14 20:03 Dirnames
-rw-r--r--. 1 root root 8.0K Jul 28 18:05 Enhancename
-rw-r--r--. 1 root root 8.0K Jul 28 18:06 Filetriggername
-rw-r--r--. 1 root root  12K Aug 14 20:03 Group
-rw-r--r--. 1 root root  12K Aug 14 20:03 Installtid
-rw-r--r--. 1 root root  28K Aug 14 20:03 Name  #包名查询
-rw-r--r--. 1 root root  16K Aug 14 02:08 Obsoletename
-rw-r--r--. 1 root root  38M Aug 14 20:03 Packages  #包含了每个软件包的信息,rpm -qa/qi等命令的结果来源
-rw-r--r--. 1 root root 2.2M Aug 14 20:03 Providename
-rw-r--r--. 1 root root 8.0K Aug 14 02:08 Recommendname
-rw-r--r--. 1 root root 144K Aug 14 20:03 Requirename
-rw-r--r--. 1 root root  44K Aug 14 20:03 Sha1header
-rw-r--r--. 1 root root  24K Aug 14 20:03 Sigmd5
-rw-r--r--. 1 root root 8.0K Jul 29 19:37 Suggestname
-rw-r--r--. 1 root root 8.0K Jul 28 18:05 Supplementname
-rw-r--r--. 1 root root 8.0K Jul 29 19:37 Transfiletriggername
-rw-r--r--. 1 root root 8.0K Aug 14 02:08 Triggername

18 yum和dnf

centos使用yum,dnf解决rpm的包依赖关系,centos8用dnf代替了yum,不过保留了和yum的兼容性,配置也是通用的

♦ yum和dnf是基于C/S模式

18.1 yum包说明
#yum包说明
[root@centos82s ~]$rpm -qi yum
Name        : yum
Version     : 4.2.17
Release     : 6.el8
Architecture: noarch
Install Date: Tue 28 Jul 2020 06:06:30 PM CST
Group       : Unspecified
Size        : 70881
License     : GPLv2+ and GPLv2 and GPL
Signature   : RSA/SHA256, Sun 26 Apr 2020 11:10:41 AM CST, Key ID 05b555b38483c65d
Source RPM  : dnf-4.2.17-6.el8.src.rpm
Build Date  : Sat 25 Apr 2020 03:58:19 AM CST
Build Host  : aarch64-06.mbox.centos.org
Relocations : (not relocatable)
Packager    : CentOS Buildsys 
Vendor      : CentOS
URL         : https://github.com/rpm-software-management/dnf
Summary     : Package manager
Description :
Utility that allows users to manage packages on their systems.
It supports RPMs, modules and comps groups & environments.
18.2 yum软件包相关的文件列表
#yum包相关文件
[root@centos82s ~]$rpm -ql yum
/etc/dnf/protected.d/yum.conf
/etc/yum.conf
/etc/yum/pluginconf.d
/etc/yum/protected.d
/etc/yum/vars
/usr/bin/yum
/usr/share/man/man1/yum-aliases.1.gz
/usr/share/man/man5/yum.conf.5.gz
/usr/share/man/man8/yum-shell.8.gz
/usr/share/man/man8/yum.8.gz
18.3 yum配置文件

yum的配置文件有两类

♦ /etc/yum.conf 主配置文件,为所有仓库提供公共配置

♦ /etc/yum.repos.d/*.repo 目录以下以.repo为后缀的文件,为每个仓库提供配置文件

[root@centos82s ~]$cat /etc/yum.conf
[main]
gpgcheck=1
installonly_limit=3
clean_requirements_on_remove=True
best=True
skip_if_unavailable=False
#yum.conf文件内容说明
[main]
cachedir=/var/cache/yum/$basearch/$releasever
#cachedir:指yum元数据存放的缓存目录,yum在此存储下载的rpm包和相关元数据的仓库数据库,默认是/var/cache/yum/$basearch/$releasever,其中$basearch表示CPU架构,如:x86_64,i386;$releasever表示centos的主版本号,比如centos7.6的主版本号为7,centos6.10的主版本号为6
keepcache=1
#keepcache:是否保留安装过程中相关的软件包,0表示安装后删除软件包,1表示安装后保留软件包
debuglevel=2
#debuglev:debug日志记录的级别,0-10,默认是2
logfile=/var/log/yum.log
#logfile:指定记录利用yum更新过的软件的日志文件
exactarch=1
#exactarch,可指定两个值:1和0,代表是否只升级和你安装软件包CPU体系一致的包,如:设置为1,则如你安装了一个x86_64的rpm,则yum不会用i686的包来升级
obsolete=1
#obsolete:此选项在进行发行版跨版本升级的时候会用到,指在升级时是否包含废弃的包
gpgcheck=1
#gpgcheck:可指定两个值:1和0,1代表安装包需要进行gpg校验,0表示不检查
plugins=1
#plugins:表示是否支持插件,1表示支持
installonly_limit=5
#installonly_limit:表示可以同时安装软件包的限制数量
distroverpkg=centos-release
#distroverpkg:用来确认变量$releasever表示的版本来源于哪个配置文件
#in /etc/yum.repos.d
上面此说明很重要,就是指要将yum的仓库信息配置存放在/etc/yum.repos.d/目录下,并要存为repo后缀
#yum的repo配置文件中可用的变量
$releasever:当前OS的发行版的主版本号,如:6,7,8
$arch:CPU架构,如:aarch64,i586,i686,x86_64等
$basearch:系统基础平台,如:i386,x86_64
$contentdir:表示目录,比如:centos-8,centos-7
$YUM0-$YUM9:自定义变量
18.4 centos系统的yum源
#阿里云
https://mirrors.aliyum.com/centos/$releasever/os/x86_64/
#华为云
https://mirrors.huaweicloud.com/
#清华大学
https://mirrors.tuna.tsinghua.edu.cn/centos/$releasever/os/x86_64/
#epel的yum源
https://mirrors.aliyun.com/epel/$releasever/x86_64
#阿里巴巴开源软件
https://opsx.alibaba.com/

18.5 配置本地光盘为yum源仓库

[root@centos70 yum.repos.d]#ls
CentOS-Base.repo  CentOS-Debuginfo.repo  CentOS-Media.repo    CentOS-Vault.repo
CentOS-CR.repo    CentOS-fasttrack.repo  CentOS-Sources.repo  CentOS-x86_64-kernel.repo
#将默认的yum仓库的配置文件做备份
[root@centos70 yum.repos.d]#mkdir backup
[root@centos70 yum.repos.d]#ll
total 36
drwxr-xr-x. 2 root root    6 Aug 15 00:24 backup
-rw-r--r--. 1 root root 1664 Apr  8 06:01 CentOS-Base.repo
-rw-r--r--. 1 root root 1309 Apr  8 06:01 CentOS-CR.repo
-rw-r--r--. 1 root root  649 Apr  8 06:01 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root  314 Apr  8 06:01 CentOS-fasttrack.repo
-rw-r--r--. 1 root root  630 Apr  8 06:01 CentOS-Media.repo
-rw-r--r--. 1 root root 1331 Apr  8 06:01 CentOS-Sources.repo
-rw-r--r--. 1 root root 7577 Apr  8 06:01 CentOS-Vault.repo
-rw-r--r--. 1 root root  616 Apr  8 06:01 CentOS-x86_64-kernel.repo
[root@centos70 yum.repos.d]#mv *.repo backup/
#确认光盘已经挂载到/misc/cd目录下
[root@centos70 yum.repos.d]#df /dev/sr0 
Filesystem     1K-blocks    Used Available Use% Mounted on
/dev/sr0         4669162 4669162         0 100% /misc/cd
18.5 为centos8配置yum和EPEL源仓库
[root@centos82s yum.repos.d]$cat >> base.repo < [BaseOS]
> name=BaseOS
> baseurl=file:///misc/cd/BaseOS
> gpgcheck=0
> 
> [AppStream]
> name=AppStream
> baseurl=file:///misc/cd/AppStream
> gpgcheck=0
> 
> [epel]
> name=EPEL
> baseurl=https://mirrors.aliyun.com/epel/$releasever/Everything/$basearch
>         https://mirrors.huaweicloud.com/epel/$releasever/Everything/$basearch
> gpgcheck=0
> enabled=0
> 
> [extras]
> name=extras
> baseurl=https://mirrors.aliyun.com/centos/$releasever/extras/$basearch/os
>         https://mirrors.huaweicloud.com/centos/$releasever/extras/$basearch/os
> gpgcheck=0
> enabled=1
> !
[root@centos82s yum.repos.d]$cd
[root@centos82s ~]$yum repolist
repo id                                                repo name
AppStream                                              AppStream
BaseOS                                                 BaseOS
extras                                                 extras
18.6 yum-config-manager命令

可以生成yum仓库的配置文件及启用或禁用仓库,来自于yum-utils包

#增加仓库
yum-config-manager --add-repo   URL或file
#禁用仓库
yum-config-manager --disable "仓库名"
#启用仓库
yum-config-manager --enable "仓库名"

创建仓库配置

#查询是否安装过
[root@centos82s ~]$rpm -qf `which yum-config-manager`
/usr/bin/which: no yum-config-manager in (/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
rpm: no arguments given for query
#安装yum-utils
[root@centos82s ~]$rpm -ivh /data/Packages/yum-utils-4.0.12-3.el8.noarch.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:yum-utils-4.0.12-3.el8           ################################# [100%]
#检查安装成功
[root@centos82s ~]$rpm -qf `which yum-config-manager`
yum-utils-4.0.12-3.el8.noarch
#生成docker-ce.repo
[root@centos82s ~]$yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
Adding repo from: https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
[root@centos82s ~]$ls /etc/yum.repos.d/
backup  base.repo  docker-ce.repo
18.7 yum命令

常用命令选项

♦ -y 安装过程提示选择全部为“yes”

♦ -q 不显示安装过程,即静默模式

♦ -h 帮助

♦ --nogpgcheck 禁止进行gpg check

♦ --enablerepo=repoidglob 临时启用此处指定的repo,支持通配符

♦ --disablerepo=repoidglob 临时禁用此处指定的repo

#显示仓库列表
[root@centos82s yum.repos.d]$yum repolist
repo id                                           repo name
AppStream                                         AppStream
BaseOS                                            BaseOS
docker-ce-stable                                  Docker CE Stable - x86_64
#显示仓库列表,包括禁用的
[root@centos82s yum.repos.d]$yum repolist all
repo id                                       repo name                                              status
AppStream                                     AppStream                                              enabled
BaseOS                                        BaseOS                                                 enabled
docker-ce-edge                                Docker CE Edge - x86_64                                disabled
docker-ce-edge-debuginfo                      Docker CE Edge - Debuginfo x86_64                      disabled
docker-ce-edge-source                         Docker CE Edge - Sources                               disabled
docker-ce-nightly                             Docker CE Nightly - x86_64                             disabled
docker-ce-nightly-debuginfo                   Docker CE Nightly - Debuginfo x86_64                   disabled
docker-ce-nightly-source                      Docker CE Nightly - Sources                            disabled
docker-ce-stable                              Docker CE Stable - x86_64                              enabled
docker-ce-stable-debuginfo                    Docker CE Stable - Debuginfo x86_64                    disabled
docker-ce-stable-source                       Docker CE Stable - Sources                             disabled
docker-ce-test                                Docker CE Test - x86_64                                disabled
docker-ce-test-debuginfo                      Docker CE Test - Debuginfo x86_64                      disabled
docker-ce-test-source                         Docker CE Test - Sources                               disabled
epel                                          EPEL                                                   disabled
extras                                        extras                                                 disable
#安装包
[root@centos82s yum.repos.d]$yum -y install gcc
BaseOS                                                                       3.8 MB/s | 3.9 kB     00:00    
AppStream                                                                    4.2 MB/s | 4.3 kB     00:00    
Docker CE Stable - x86_64                                                    4.1 kB/s |  25 kB     00:05    
Dependencies resolved.
=============================================================================================================
 Package                        Architecture       Version                       Repository             Size
=============================================================================================================
Installing:
 gcc                            x86_64             8.3.1-5.el8.0.2               AppStream              23 M
Installing dependencies:
 binutils                       x86_64             2.30-73.el8                   BaseOS                5.7 M
...
#仓库安装好的包
[root@centos82s ~]$rpm -q gcc
gcc-8.3.1-5.el8.0.2.x86_64
#查看包的信息
[root@centos82s ~]$yum info gcc
Last metadata expiration check: 0:07:04 ago on Sat 15 Aug 2020 11:29:39 AM CST.
Installed Packages
Name         : gcc
Version      : 8.3.1
Release      : 5.el8.0.2
Architecture : x86_64
Size         : 59 M
Source       : gcc-8.3.1-5.el8.0.2.src.rpm
Repository   : @System
From repo    : AppStream
Summary      : Various compilers (C, C++, Objective-C, ...)
URL          : http://gcc.gnu.org
License      : GPLv3+ and GPLv3+ with exceptions and GPLv2+ with exceptions and LGPLv2+ and BSD
Description  : The gcc package contains the GNU Compiler Collection version 8.
             : You'll need this package in order to compile C code.
#卸载包
[root@centos82s ~]$yum remove gcc
#查看yum包管理历史
[root@centos82s ~]$yum history
ID     | Command line             | Date and time    | Action(s)      | Altered
-------------------------------------------------------------------------------
     6 | remove gcc               | 2020-08-15 11:38 | Removed        |   13   
     5 | -y install gcc           | 2020-08-15 11:29 | Install        |   13  <
     4 | -y install lrzsz         | 2020-08-14 10:59 | Install        |    1 > 
     3 | -y install httpd         | 2020-08-14 02:08 | Install        |   10   
     2 | -y install vim           | 2020-07-29 19:37 | Install        |    4   
     1 |                          | 2020-07-28 18:05 | Install        |  399 EE
#查看ID为6的yum历史事件
[root@centos82s ~]$yum history info 6
Transaction ID : 6
Begin time     : Sat 15 Aug 2020 11:38:26 AM CST
Begin rpmdb    : 427:4fe86c72fa33eb7b26c37ec2684bd7f5f75ca2dd
End time       : Sat 15 Aug 2020 11:38:27 AM CST (1 seconds)
End rpmdb      : 414:63e3115c59570390f0c156b6355910736d37789a
User           : root 
Return-Code    : Success
Releasever     : 8
Command Line   : remove gcc
Packages Altered:
    Removed binutils-2.30-73.el8.x86_64           @@System
    Removed cpp-8.3.1-5.el8.0.2.x86_64            @@System
    Removed gcc-8.3.1-5.el8.0.2.x86_64            @@System
    Removed glibc-devel-2.28-101.el8.x86_64       @@System
    Removed glibc-headers-2.28-101.el8.x86_64     @@System
    Removed isl-0.16.1-6.el8.x86_64               @@System
    Removed kernel-headers-4.18.0-193.el8.x86_64  @@System
    Removed libmpc-1.0.2-9.el8.x86_64             @@System
    Removed libpkgconf-1.4.2-1.el8.x86_64         @@System
    Removed libxcrypt-devel-4.1.1-4.el8.x86_64    @@System
    Removed pkgconf-1.4.2-1.el8.x86_64            @@System
    Removed pkgconf-m4-1.4.2-1.el8.noarch         @@System
    Removed pkgconf-pkg-config-1.4.2-1.el8.x86_64 @@System
#利用yum历史,卸载gcc相关的依赖包
[root@centos82s ~]$yum history undo 6
Last metadata expiration check: 0:13:27 ago on Sat 15 Aug 2020 11:29:39 AM CST.
Undoing transaction 6, from Sat 15 Aug 2020 11:38:26 AM CST
    Removed binutils-2.30-73.el8.x86_64           @@System
    Removed cpp-8.3.1-5.el8.0.2.x86_64            @@System
...
#重新安装包
[root@centos82s ~]$rpm -ivh /data/Packages/tree-1.7.0-15.el8.x86_64.rpm 
Verifying...                          ################################# [100%]
Preparing...                          ################################# [100%]
Updating / installing...
   1:tree-1.7.0-15.el8                ################################# [100%]
[root@centos82s ~]$rpm -q tree
tree-1.7.0-15.el8.x86_64
[root@centos82s ~]$rpm -ql tree
/usr/bin/tree
/usr/lib/.build-id
/usr/lib/.build-id/d8
/usr/lib/.build-id/d8/6d516d7cb07fb9334cb268af808119e33a5ac5
/usr/share/doc/tree
/usr/share/doc/tree/LICENSE
/usr/share/doc/tree/README
/usr/share/man/man1/tree.1.gz
[root@centos82s ~]$tree
.
└── anaconda-ks.cfg

0 directories, 1 file
[root@centos82s ~]$rm -f /usr/bin/tree
[root@centos82s ~]$tree
-bash: /usr/bin/tree: No such file or directory
[root@centos82s ~]$yum reinstall tree -y
Last metadata expiration check: 0:18:57 ago on Sat 15 Aug 2020 11:29:39 AM CST.
Dependencies resolved.
=============================================================================================================
 Package               Architecture            Version                         Repository               Size
=============================================================================================================
Reinstalling:
 tree                  x86_64                  1.7.0-15.el8                    BaseOS                   59 k
...
#显示包列表
[root@centos82s ~]$yum list
#显示httpd开头的包
[root@centos82s ~]$yum list httpd*
Last metadata expiration check: 2:36:52 ago on Sat 15 Aug 2020 11:29:39 AM CST.
Installed Packages
httpd.x86_64                              2.4.37-21.module_el8.2.0+382+15b0afa8                    @AppStream
httpd-filesystem.noarch                   2.4.37-21.module_el8.2.0+382+15b0afa8                    @AppStream
httpd-tools.x86_64                        2.4.37-21.module_el8.2.0+382+15b0afa8                    @AppStream
Available Packages
httpd-devel.x86_64                        2.4.37-21.module_el8.2.0+382+15b0afa8                    AppStream 
httpd-manual.noarch                       2.4.37-21.module_el8.2.0+382+15b0afa8                    AppStream
#搜索或说明包中含有httpd的包信息
[root@centos82s ~]$yum search httpd
Last metadata expiration check: 2:38:05 ago on Sat 15 Aug 2020 11:29:39 AM CST.
======================================== Name Exactly Matched: httpd ========================================
httpd.x86_64 : Apache HTTP Server
======================================= Name & Summary Matched: httpd =======================================
centos-logos-httpd.noarch : CentOS-related icons and pictures used by httpd
keycloak-httpd-client-install.noarch : Tools to configure Apache HTTPD as Keycloak client
python3-keycloak-httpd-client-install.noarch : Tools to configure Apache HTTPD as Keycloak client
============================================ Name Matched: httpd ============================================
httpd-tools.x86_64 : Tools for use with the Apache HTTP Server
httpd-devel.x86_64 : Development interfaces for the Apache HTTP server
httpd-manual.noarch : Documentation for the Apache HTTP server
libmicrohttpd.i686 : Lightweight library for embedding a webserver in applications
libmicrohttpd.x86_64 : Lightweight library for embedding a webserver in applications
httpd-filesystem.noarch : The basic directory layout for the Apache HTTP server
========================================== Summary Matched: httpd ===========================================
mod_dav_svn.x86_64 : Apache httpd module for Subversion server
mod_auth_mellon.x86_64 : A SAML 2.0 authentication module for the Apache Httpd Server
#查看已经安装的包
[root@centos82s ~]$yum list installed|head
Installed Packages
NetworkManager.x86_64               1:1.22.8-4.el8                        @anaconda 
NetworkManager-libnm.x86_64         1:1.22.8-4.el8                        @anaconda 
NetworkManager-team.x86_64          1:1.22.8-4.el8                        @anaconda 
...
#查看可安装的包
[root@centos82s ~]$yum list available|head
Last metadata expiration check: 0:04:23 ago on Sat 15 Aug 2020 02:21:46 PM CST.
Available Packages
CUnit.i686                                           2.1.3-17.el8                                     AppStream       
CUnit.x86_64                                         2.1.3-17.el8                                     AppStream       
GConf2.i686                                          3.2.6-22.el8                                     AppStream       
GConf2.x86_64          
...
#查看可升级的包
[root@centos82s ~]$yum list updates
Last metadata expiration check: 0:05:20 ago on Sat 15 Aug 2020 02:21:46 PM CST.
Available Upgrades
vsftpd.x86_64                                     3.0.3-31.el8                                      AppStream
#利用repoquery查看未安装的包中文件列表
[root@centos82s ~]$repoquery -ql tree
#查看指定文件来自哪个包
[root@centos82s ~]$yum provides /etc/mime.types
Last metadata expiration check: 0:06:46 ago on Sat 15 Aug 2020 02:09:36 PM CST.
mailcap-2.1.48-3.el8.noarch : Helper application and MIME type associations for file types
Repo        : @System
Matched from:
Filename    : /etc/mime.types

mailcap-2.1.48-3.el8.noarch : Helper application and MIME type associations for file types
Repo        : BaseOS
Matched from:
Filename    : /etc/mime.types
#查看指定所依赖的文件和所属包
[root@centos82s ~]$yum deplist httpd
Last metadata expiration check: 0:09:02 ago on Sat 15 Aug 2020 02:09:36 PM CST.
package: httpd-2.4.37-21.module_el8.2.0+382+15b0afa8.x86_64
  dependency: /bin/sh
   provider: bash-4.4.19-10.el8.x86_64
  dependency: /etc/mime.types
   provider: mailcap-2.1.48-3.el8.noarch
...
#查看包组列表
[root@centos82s ~]$yum groups list
Last metadata expiration check: 0:16:50 ago on Sat 15 Aug 2020 02:21:46 PM CST.
Available Environment Groups:
   Server with GUI
   Server
   Workstation
   Custom Operating System
   Virtualization Host
Installed Environment Groups:
   Minimal Install
...
#查看包组信息
[root@centos82s ~]$yum groups info "Development Tools"
Last metadata expiration check: 0:18:46 ago on Sat 15 Aug 2020 02:21:46 PM CST.

Group: Development Tools
 Description: A basic development environment.
 Mandatory Packages:
   autoconf
   automake
   binutils
   bison
   flex
   gcc
...
#安装包组
[root@centos82s ~]$yum groups install "Development Tools"
#清除yum(dnf)缓存,并重新构建缓存
[root@centos82s ~]$du -sh /var/cache/dnf
26M /var/cache/dnf
[root@centos82s ~]$yum clean all
35 files removed
[root@centos82s ~]$du -sh /var/cache/dnf
800K    /var/cache/dnf
[root@centos82s ~]$yum makecache
BaseOS                                                                       491 MB/s | 2.2 MB     00:00    
AppStream                                                                    544 MB/s | 5.7 MB     00:00    
Docker CE Stable - x86_64                                                    772  B/s |  25 kB     00:32    
Metadata cache created.
[root@centos82s ~]$du -sh /var/cache/dnf
18M /var/cache/dnf
18.8 实现私有yum仓库
18.8.1 下载所有yum仓库的相关包和meta数据
#centos8 dnf工具集成
dnf reposync --help     查看帮助

#默认只下载rpm包,不下载meta数据,需要指定--download-metadata才能下载meta
dnf reposync --repoid=REPOID --download-metadata -p /path

#centos7以前版本,reposync工具来自于yum-utils包
reposync --repoid=REPOID --download-metadata -p /path
18.8.2 创建局域网基于Base的私有yum源
#仓库服务器配置
[root@centos82s ~]$yum -y install httpd
[root@centos82s ~]$systemctl enable --now httpd
[root@centos82s ~]$mkdir /var/www/html/centos/8 -pv
mkdir: created directory '/var/www/html/centos'
mkdir: created directory '/var/www/html/centos/8'
[root@centos82s ~]$mount /dev/sr0 /mnt/
[root@centos82s ~]$cp -a /mnt/* /var/www/html/centos/8
#yum客户端配置
[root@centos82s ~]$cat >> test.repo < [BaseOS]
> name=BaseOS
> baseurl=http://10.0.0.105/centos/8/BaseOS
> gpgkey=file;///data/Packages/RPM-GPG-KEY-EPEL-8
> 
> [AppStream]
> name=AppStream
> baseurl=http://10.0.0.105/centos/8/AppStream
> gpgkey=file;///data/Packages/RPM-GPG-KEY-EPEL-8
> !
#下载阿里云的extras源,制作私有yum源
[root@centos82s yum.repos.d]$dnf reposync --repoid=extras --download-metadata -p /var/www/html/centos
[root@centos82s ~]$ls /var/www/html/centos/
8  extras
[root@centos82s ~]$ls /var/www/html/centos/extras/
Packages  repodata
#添加仓库
[root@centos82s centos]$yum-config-manager --add-repo /var/www/html/centos/extras/
[root@centos82s ~]$yum repolist
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
repo id                          repo name
AppStream                        AppStream
BaseOS                           BaseOS
docker-ce-stable                 Docker CE Stable - x86_64
var_www_html_centos_extras       created by dnf config-manager from file:///var/www/html/centos/extras
#关闭其它仓库,打开extras仓库
[root@centos82s ~]$yum --disablerepo=* --enablerepo=extras list available
#用extras仓库下载包
[root@centos82s ~]$yum -y install epel-release
Repository BaseOS is listed more than once in the configuration
Repository AppStream is listed more than once in the configuration
Repository extras is listed more than once in the configuration
created by dnf config-manager from file:///var/www/html/centos/extras        6.8 MB/s | 7.0 kB     00:00    
Last metadata expiration check: 0:00:01 ago on Sat 15 Aug 2020 04:59:04 PM CST.
Dependencies resolved.
=============================================================================================================
 Package                 Architecture      Version               Repository                             Size
=============================================================================================================
Installing:
 epel-release            noarch            8-8.el8               var_www_html_centos_extras             23 k
#下载阿里云的epel源,制作私有yum源
[root@centos82s ~]$cat /etc/yum.repos.d/base.repo 
[epel]
name=EPEL
baseurl=https://mirrors.aliyun.com/epel/8/Everything/x86_64
        https://mirrors.huaweicloud.com/epel/8/Everything/x86_64
gpgcheck=0
enabled=0
#

19 程序包编译安装

19.1 编译安装准备

准备:安装相关的依赖包

♦ 开发工具:make,gcc(c/c++编译器GNU C Complier)

♦ 开发环境:开发库(glibc:标准库),头文件,可安装开发包组Development Tools

♦ 软件相关依赖包

生产实践:基于最小化安装的系统建议安装下面相关包

yum install gcc make autoconf gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel vim lrzsz tree tmux lsof tcpdump wget net-tools iotop bc bzip2 zip unzip nfs-utils man-pages
19.2 编译安装

第一步:运行configure脚本,生成Makefile文件

选项

♦ 可以指定安装位置

​ --prefix=/PATH:指定默认安装位置,默认为/usr/local/

​ --sysconfdir=/PATH:配置文件安装位置

​ System types:支持交叉编译

♦ 指定启用的特性

​ Optional Features:可选特性

​ --disable-FEATURE

​ --enable-FEATURE[=ARG]

​ Optional Packages:可选包

​ --with-PACKAGE[=ARG] 依赖包

​ --without-PACKAGE 禁用依赖关系

注意:通常被编译操作依赖的程序包,需要安装此程序包的“开发”组件,其包名一般类似于name-devel-VERSION

第二步:make

第三步:make install

帮助

♦ ./configure --help

19.3 安装后的配置

​ 1.二进制程序目录导入至PATH环境变量中

​ 编辑文件/etc/profile.d/NAME.sh

export PATH=/PATH/TO/BIN:$PATH

​ 2.相关用户及文件

​ 有些开源软件编译完成后,还需要创建相关的用户及文件

​ 3.导入帮助手册

​ 编辑/etc/man.config|man_db.conf文件,添加一个MANPATH

19.4 编译安装案例
19.4.1 centos7编译安装新版tree
#安装相关依赖包
[root@centos7s ~]#yum install gcc make
#解压源码
[root@centos7s ~]#tar xvf tree-1.8.0.tgz 
[root@centos7s ~]#ll
total 56
-rw-------. 1 root root  1605 Jul 28 11:20 anaconda-ks.cfg
drwxr-xr-x  3 root root   250 Aug 16 00:39 tree-1.8.0
-rw-r--r--  1 root root 50286 Aug 16 00:33 tree-1.8.0.tgz
#进入解压缩目录,README和INSTALL
[root@centos7s tree-1.8.0]#cat README
[root@centos7s tree-1.8.0]#cat INSTALL 
#修改源码版本号
[root@centos7s tree-1.8.0]#sed -i 's#v1\.8\.0#v8.8.8#' tree.c
#编译准备
[root@centos7s tree-1.8.0]#vim Makefile 
prefix=/apps/tree
#编译
[root@centos7s tree-1.8.0]#make
#安装
[root@centos7s tree-1.8.0]#make install
#修改PATH变量,默认无法直接运行tree
[root@centos7s ~]#echo 'PATH=/apps/tree/bin:$PATH' > /etc/profile.d/tree.sh
#或利用软连接实现
[root@centos7s ~]#ln -s /apps/tree/bin/tree /usr/local/bin
#验证
[root@centos7s ~]#tree --version
tree v8.8.8 (c) 1996 - 2018 by Steve Baker, Thomas Moore, Francesc Rocher, Florian Sesser, 
#添加man帮助,默认无法查看man
[root@centos7s ~]#vim /etc/man_db.conf
MANDATORY_MANPATH       /apps/tree/man
#运行tree查看生产的文件列表
[root@centos7s ~]#tree /apps/tree/
/apps/tree/
├── bin
│   └── tree
└── man
    └── man1
        └── tree.1

3 directories, 2 files
19.4.2 编译安装cmatrix
#安装相关包
[root@centos82s ~]$dnf install gcc make autoconf ncurses-devel
#下载并解压缩包
[root@centos82s bin]$wget https://github.com/abishekvashok/cmatrix/releases/download/v2.0/cmatrix-v2.0-Butterscotch.tar
[root@centos82s bin]$tar xvf cmatrix-v2.0-Butterscotch.tar 
[root@centos82s bin]$ll
total 1984
drwxr-xr-x. 6 dou  dou     4096 Mar 27  2019 cmatrix
-rw-r--r--. 1 root root 2027520 Mar 27  2019 cmatrix-v2.0-Butterscotch.tar
#配置
[root@centos82s cmatrix]$./configure --prefix=/apps/cmatrix
#编译并安装
[root@centos82s cmatrix]$make && make install
#配置环境
[root@centos82s cmatrix]$echo 'PATH=/apps/cmatrix/bin:$PATH' > /etc/profile.d/cmatrix.sh
[root@centos82s ~]$. /etc/profile.d/cmatrix.sh
#运行
[root@centos82s ~]$cmatrix -a -b -C yellow
[root@centos82s ~]$cmatrix -a -b 
#帮助
[root@centos82s ~]$vim /etc/man_db.conf
MANDATORY_MANPATH           /apps/cmatrix/share/man
[root@centos82s ~]$man cmatrix

20 Ubuntu 软件管理

Debian软件包通常为预编译的二进制格式的扩展名“.deb”,类似rpm文件,因此安装快速,无需编译软件。包文件包括特定功能或软件所必须的文件、元数据和指令

♦ dpkg:package manager for Debian,类似rpm,dpkg是基于Debian系统的包管理器。可以安装、删除和构建软件包,但无法自动下载和安装软件包或其依赖项

♦ apt:Advanced Packaging Tool,功能强大的软件管理工具,甚至可升级整个Ubuntu系统,基于客户/服务器架构,类似于yum

20.1 dpkg包管理器

帮助:man dpkg

dpkg常见用法

#安装包
dpkg -i package.deb
#删除包,不建议使用,不自动卸载依赖于它的包
dpkg -r package
#删除包(包括配置文件)
dpkg -P package
#列出当前已安装的包,类似rpm -qa
dpkg -l
#显示该包的简要说明,类似rpm -qi
dpkg -l package
#列出该包的状态,包括详细信息,类似rpm -qi
dpkg -s package
#列出该包中所包含的文件,类似rpm -ql
dpkg -L package
#搜索包含pattern的包,类似rpm -qf
dpkg -S 
#配置包,-a使用,配置所有没有配置的软件包
dpkg --configure package
#列出deb包的内容,类似rpm -qpl
dpkg -c package.deb
#解开deb包的内容
dpkg --unpack package.deb
20.2 apt

apt相当于apt-get、apt-cache、apt-config中最常用命令选项的集合

apt与apt-get有些类似的命令选项,但它并不能完全向下兼容apt-get命令,即可用apt替换部分apt-get命令,但不是全部

帮助:apt help

#安装包
apt install tree zip
#安装图形桌面
apt install ubuntu-desktop
#删除包
apt remove tree zip
#注意:apt remove中添加--purge选项会删除包配置文件,慎用
#更新包索引,类似yum clean all;yum makecache
apt update
#升级包:要升级系统,请首先更新软件包索引,再升级
apt upgrade
#apt列出仓库软件包,类似yum list
apt list
#搜索安装包
apt search tree
#查看某个安装包的详细信息
apt show tree
#在线安装软件包
apt install tree
#卸载单个软件包但是保留配置文件
apt remove tree
#删除安装包并解决依赖关系
apt autoremove tree
#更新本地软件包列表索引,修改了apt仓库后必须执行
apt update
#卸载单个软件包删除配置文件
apt purge tree
#升级所有已安装且可升级到新版本的软件包
apt upgrade
#升级整个系统,必要时可以移除旧软件包
apt full-upgrade
#编辑source源文件
apt edit-sources
#查看仓库中软件包有哪些版本可以安装
apt-cache madison tree
#安装软件包的时候指定安装具体的版本
apt install tree=1.18.0-0ubuntu1.6
20.3 软件管理案例
#显示系统安装包的统计信息,可以统计已安装包的数量、大小、占用空间等
#apt-cache stats
[18:39:57]dou@ubuntu2004:7 ~$ apt-cache stats
Total package names: 99135 (2,776 k)
Total package structures: 89251 (3,927 k)
  Normal packages: 60486
  Pure virtual packages: 999
  Single virtual packages: 16533
  Mixed virtual packages: 409
  Missing: 10824
Total distinct versions: 63853 (5,619 k)
Total distinct descriptions: 124766 (2,994 k)
Total dependencies: 401864/108483 (9,773 k)
Total ver/file relations: 309 (7,416 )
Total Desc/File relations: 59230 (1,422 k)
Total Provides mappings: 23045 (553 k)
Total globbed strings: 188259 (4,328 k)
Total slack space: 80.5 k
Total space accounted for: 31.9 M
Total buckets in PkgHashTable: 50503
  Unused: 8670
  Used: 41833
  Utilization: 82.8327%
  Average entries: 2.13351
  Longest: 59
  Shortest: 1
Total buckets in GrpHashTable: 50503
  Unused: 7022
  Used: 43481
  Utilization: 86.0959%
  Average entries: 2.27996
  Longest: 10
  Shortest: 1

#显示xxx包的信息,可以看到某个包的源、版本信息
#apt-cache show xxx  更详细
#apt show xxx
[18:49:28]dou@ubuntu2004:9 ~$ apt show tree
Package: tree
Version: 1.8.0-1
Priority: optional
Section: universe/utils
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Florian Ernst 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 115 kB
Depends: libc6 (>= 2.4)
Homepage: http://mama.indstate.edu/users/ice/tree/
Task: xubuntu-desktop, lubuntu-desktop, ubuntustudio-desktop, ubuntu-budgie-desktop
Download-Size: 43.0 kB
APT-Sources: http://cn.archive.ubuntu.com/ubuntu focal/universe amd64 Packages
Description: displays an indented directory tree, in color
 Tree is a recursive directory listing command that produces a depth indented
 listing of files, which is colorized ala dircolors if the LS_COLORS environment
 variable is set and output is to tty.

[18:51:12]dou@ubuntu2004:10 ~$ apt-cache show tree
Package: tree
Architecture: amd64
Version: 1.8.0-1
Priority: optional
Section: universe/utils
Origin: Ubuntu
Maintainer: Ubuntu Developers 
Original-Maintainer: Florian Ernst 
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 112
Depends: libc6 (>= 2.4)
Filename: pool/universe/t/tree/tree_1.8.0-1_amd64.deb
Size: 43044
MD5sum: 2f2dfe898e63dfe44fef9ecbd08ea7ff
SHA1: 4e285f21c81ae331ed46a5541916cac1b66e36ab
SHA256: 9e53230fd20047586d12d3de6f3cadcef51d41a8594d742d0f58c571eda72282
Homepage: http://mama.indstate.edu/users/ice/tree/
Description-en: displays an indented directory tree, in color
 Tree is a recursive directory listing command that produces a depth indented
 listing of files, which is colorized ala dircolors if the LS_COLORS environment
 variable is set and output is to tty.
Description-md5: 9b53b68087a50d4cd859ac0117aecc08
Task: xubuntu-desktop, lubuntu-desktop, ubuntustudio-desktop, ubuntu-budgie-desktop

#在所有源包里查找文件(包含未安装的包)
#apt-file search filename
root@ubuntu1904:~# apt search /bin/tree
Sorting... Done
Full Text Search... Done
20.4 ubuntu建议安装的常用包
iproute2 ntpdate tcpdump telnet traceroute nfs-kernel-server nfs-common lrzsz tree openssl libssl-dev libpcre3 libpcre3-dev zlib1g-dev gcc openssh-server iotop zip

21 磁盘存储和文件系统

21.1 管理存储

使用磁盘空间过程

♦ 设备分区

♦ 创建文件系统

♦ 挂载新的文件系统

21.2 磁盘分区
21.2.1 为什么分区

♦ 优化I/O性能

♦ 实现磁盘空间配额限制

♦ 提高修复速度

♦ 隔离系统和程序

♦ 安装多个OS

♦ 采用不同文件系统

21.2.2 分区方式

♦ MBR

♦ GPT

21.2.3 管理分区

查看块设备:lsblk

21.2.4 parted 命令

注意:parted的操作都是实时生效的,慎用

#添加新磁盘,linux新增磁盘后,用fdisk等命令查询不到,执行下面
[root@centos82s ~]$ls /sys/class/scsi_host
host0  host1  host2
[root@centos82s ~]$echo "- - -" > /sys/class/scsi_host/host0/scan
[root@centos82s ~]$echo "- - -" > /sys/class/scsi_host/host1/scan
[root@centos82s ~]$echo "- - -" > /sys/class/scsi_host/host2/scan
#或者
[root@centos82s ~]$for i in /sys/class/scsi_host/host*/scan;do echo "- - -" > $i;done

[root@centos82s ~]$parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start  End  Size  File system  Name  Flags
#分区
[root@centos82s ~]$parted /dev/sdb mkpart primary 1 1001
Information: You may need to update /etc/fstab.

[root@centos82s ~]$parted /dev/sdb print                                  
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  1001MB  1000MB               primary
#分区
[root@centos82s ~]$parted /dev/sdb mkpart primary 1002 1102
Information: You may need to update /etc/fstab.

[root@centos82s ~]$parted /dev/sdb print                                  
\Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  1001MB  1000MB               primary
 2      1002MB  1102MB  99.6MB               primary

#删除分区
[root@centos82s ~]$parted /dev/sdb rm 2
Information: You may need to update /etc/fstab.

[root@centos82s ~]$parted /dev/sdb print
Model: VMware, VMware Virtual S (scsi)
Disk /dev/sdb: 21.5GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags: 

Number  Start   End     Size    File system  Name     Flags
 1      1049kB  1001MB  1000MB               primary
21.2.5 分区工具fdisk和gdisk

创建分区命令:

fdisk           管理MBR分区
fdisk -l        查看分区
gdisk           管理GPT分区

子命令

♦ p 分区列表

♦ t 更改分区类型

♦ n 创建新分区

♦ d 删除分区

♦ v 校验分区

♦ u 转换单位

♦ w 保存并退出

♦ q 不保存退出

查看内核是否已经识别新的分区

[root@centos82s ~]$cat /proc/partations

同步分区表,适合于除了centos6以外的,5,7,8版本

partprobe

创建分区

[root@centos82s ~]$fdisk /dev/sdb
#批量创建分区
[root@centos82s ~]$echo -e 'n\np\n\n\n+1G\nw'|fdisk /dev/sdb
[root@centos82s ~]$fdisk /dev/sdb < n
> p
> 
> 
> 
> +2G
> w
> !
#查看
[root@centos82s ~]$lsblk
NAME   MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda      8:0    0  200G  0 disk 
├─sda1   8:1    0    1G  0 part /boot
├─sda2   8:2    0  100G  0 part /
├─sda3   8:3    0    2G  0 part [SWAP]
├─sda4   8:4    0    1K  0 part 
└─sda5   8:5    0   50G  0 part /data
sdb      8:16   0   20G  0 disk 
├─sdb1   8:17   0    4G  0 part 
├─sdb2   8:18   0    5G  0 part 
├─sdb3   8:19   0    3G  0 part 
├─sdb4   8:20   0    1G  0 part 
└─sdb5   8:21   0    7G  0 part 
21.3 文件系统
21.3.1 查看当前操作系统支持的文件系统
[root@centos82s ~]$cat /proc/filesystems
nodev   sysfs
nodev   rootfs
nodev   ramfs
nodev   bdev

文件系统是需要驱动模块支持的,没有驱动的文件系统就无法使用

查看支持的文件系统驱动

[root@centos82s ~]$ls /lib/modules/$(uname -r)/kernel/fs/
binfmt_misc.ko.xz  cifs    ext4     fuse   jbd2           nfs         nls        squashfs
cachefiles         cramfs  fat      gfs2   lockd          nfs_common  overlayfs  udf
ceph               dlm     fscache  isofs  mbcache.ko.xz  nfsd        pstore     xfs
21.3.2 创建文件系统

创建文件管理工具

mkfs命令:

1、mkfs.FS_TYPE/dev/DEVICE

​ ext4

​ xfs

​ btrfs

​ vfat

2、mkfs -t FS_TYPE/dev/DEVICE

​ -L 'LABEL' 设定卷标

mke2fs:ext系列文件系统专用管理工具

常用选项

♦ -t {ext2|ext3|ext4|xfs} 指定文件系统类型

♦ -b {1024|2408|4096} 指定块block大小

♦ -L 'LABEL' 设置卷标

♦ -j 相对于 -t ext3, mkfs.ext3=mkfs -t ext3=mke2fs -j=mke2fs -t ext3

♦ -i 为数据空间中每多少个字节创建一个inode;不应该小于block大小

♦ -N 指定分区中创建多少个inode

♦ -I 一个inode记录占用的磁盘空间大小,128---4096

♦ -m 默认5%,为管理人员预留空间占总空间的百分比

♦ -O FEATURE[,...] 启用指定特性

♦ -O ^FEATURE 关闭指定特性

21.3.3 查看和管理分区信息

blkid 可以查看块设备属性信息

常用选项

♦ -U UUID 根据指定的UUID来查找对应的设备

♦ -L LABEL 根据指定的LABEL来查找对应的设备

♦ e2label:管理ext系列文件系统的LABEL

♦ findfs:查找分区

#根据UUID查找
[root@centos82s ~]$findfs UUID=7faf9f94-f218-4497-9fa2-030c11f8d577
/dev/sda5

tune2fs:重新设定ext系列文件系统可调整参数的值

常用选项

♦ -l 查看指定文件系统超级块选项;super block

♦ -L 'LABEL' 修改卷标

♦ -m 修改预留给管理员的空间百分比

♦ -j 将ext2升级为ext3

♦ -O 文件系统属性启用或禁用,-O ^has_journal

♦ -U UUID 修改UUID号

dumpe2fs:显示ext文件系统信息,将磁盘块分组管理

-h 查看超级块信息,不显示分组信息

[root@centos82s ~]$dumpe2fs /dev/sda1
dumpe2fs 1.45.4 (23-Sep-2019)
Filesystem volume name:   
Last mounted on:          /boot
Filesystem UUID:          e54fe5be-10b7-456b-b297-cf28faf5aab6
Filesystem magic number:  0xEF53
Filesystem revision #:    1 (dynamic)
...

xfs_info:显示挂载或已挂载的xfs文件系统信息

[root@centos82s ~]$xfs_info /dev/sdb1
meta-data=/dev/sdb1              isize=512    agcount=4, agsize=262144 blks
         =                       sectsz=512   attr=2, projid32bit=1
         =                       crc=1        finobt=1, sparse=1, rmapbt=0
         =                       reflink=1
data     =                       bsize=4096   blocks=1048576, 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
21.3.4 文件系统检测和修复

文件系统故障常发生于死机或者非正常关机之后,挂载为文件系统标记为“no clean”

注意:一定不要在挂载状态下执行修复命令

fsck:File System Check

常用选项

♦ -a 自动修复

♦ -r 交互式修复错误

e2fsck:ext系列文件专用的检测修复工具

常用选项

♦ -y 自动回答为yes

♦ -f 强制修复

♦ -p 自动进行安全的修复文件系统

#查看分区信息
[root@centos82s ~]$df
Filesystem     1K-blocks     Used Available Use% Mounted on
devtmpfs          905156        0    905156   0% /dev
tmpfs             921932        0    921932   0% /dev/shm
tmpfs             921932     8924    913008   1% /run
tmpfs             921932        0    921932   0% /sys/fs/cgroup
/dev/sda2      104806400 11146812  93659588  11% /
/dev/sda5       52403200   399056  52004144   1% /data
/dev/sda1         999320   137604    792904  15% /boot
tmpfs             184384        0    184384   0% /run/user/0
/dev/sdb2        5095040    20472   4796040   1% /mnt
[root@centos82s ~]$cp /etc/fstab /mnt/f1
[root@centos82s ~]$cp /etc/fstab /mnt/f2
[root@centos82s ~]$ls /mnt
f1  f2  lost+found
#破坏/dev/sdb2分区
[root@centos82s ~]$dd if=/dev/zero of=/dev/sdb2 bs=1M count=1
1+0 records in
1+0 records out
1048576 bytes (1.0 MB, 1.0 MiB) copied, 0.00092516 s, 1.1 GB/s
[root@centos82s ~]$ls /mnt
[root@centos82s ~]$df
Filesystem                1K-blocks                 Used Available Use% Mounted on
devtmpfs                     905156                    0    905156   0% /dev
tmpfs                        921932                    0    921932   0% /dev/shm
tmpfs                        921932                 8924    913008   1% /run
tmpfs                        921932                    0    921932   0% /sys/fs/cgroup
/dev/sda2                 104806400             11146812  93659588  11% /
/dev/sda5                  52403200               399056  52004144   1% /data
/dev/sda1                    999320               137604    792904  15% /boot
tmpfs                        184384                    0    184384   0% /run/user/0
/dev/sdb2      73786976294838058624 73786976294832984064   5058176 100% /mnt
#确认分区已破坏
[root@centos82s ~]$tune2fs -l /dev/sdb2
tune2fs 1.45.4 (23-Sep-2019)
tune2fs: Bad magic number in super-block while trying to open /dev/sdb2
[root@centos82s ~]$umount /mnt
#e2fsck修复
[root@centos82s ~]$e2fsck /dev/sdb2
e2fsck 1.45.4 (23-Sep-2019)
ext2fs_open2: Bad magic number in super-block
e2fsck: Superblock invalid, trying backup blocks...
/dev/sdb2 was not cleanly unmounted, check forced.
Resize inode not valid.  Recreate? yes
Pass 1: Checking inodes, blocks, and sizes
...
#e2fsck -y修复
[root@centos82s ~]$e2fsck /dev/sdb2 -y
#确认分区修复
[root@centos82s ~]$ls /mnt
f1  f2  lost+found
[root@centos82s ~]$cat /mnt/f1
#
# /etc/fstab
# Created by anaconda on Tue Jul 28 18:05:29 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=5e437624-9610-4d5d-804b-ec9054e9f46d /                       xfs     defaults        0 0
UUID=e54fe5be-10b7-456b-b297-cf28faf5aab6 /boot                   ext4    defaults        1 2
UUID=7faf9f94-f218-4497-9fa2-030c11f8d577 /data                   xfs     defaults        0 0
UUID=9c230f26-8349-4153-b1d6-742a6a7b7088 swap                    swap    defaults        0 0

xfs_repair:xfs文件系统专用检测修复工具

常用选项

♦ -f 修复文件

♦ -n 只检查

♦ -d 允许修复只读的挂载设备,在单用户下修复 / 时使用,然后立即reboot

21.4 挂载

挂载就是将额外文件系统与现存的目录建立起关联关系,使得此目录做为该文件系统的访问入口,挂载点下如果有文件,在挂载完成后会被临时隐藏,所以挂载点目录一般为空。

device:指明要挂载的设备

♦ 设备文件: 如:/dev/sdb1

♦ 卷标: -L 'LABEL',如:-L 'MYDATA'

♦ UUID:-U 'UUID':如:-U 'e54fe5be-10b7-456b-b297-cf28faf5aab6'

♦ 伪文件系统名称:proc, sysfs, devtmpfs, donfigfs

mountpoint:挂载点目录必须事先存在,建议使用空目录

mount常用选项

♦ -t fstype 指定要挂载设备上的文件系统类型

♦ -r readonly,只读挂载

♦ -w read和write,读写挂载

♦ -n 不更新/etc/mtab,mount不可见

♦ -a 自动挂载所有支持自动挂载的设备

♦ -L 'LABEL' 以卷标指定挂载设备

♦ -U 'UUID' 以UUID指定要挂载的设备

♦ -B,--bind 绑定目录到另一个目录上

-o options (挂载文件系统的选项)

​ async 异步模式,内容更改时,写入缓存区buffer,过一段时间在写到磁盘,效率高,但不安全

​ sync 同步模式,内存更改时,同时写入磁盘,安全,但效率低下

​ atime/noatime 包含目录和文件

​ diratime/modiratime 目录的访问时间戳

​ auto/noauto 是否支持开机自动挂载,是否支持-a选项

​ exec/noexec 是否支持在此文件上运行应用程序

​ dev/nodev 是否支持在此文件上使用设备文件

​ suid/nosuid 是否支持suid和sgid权限

​ remount 重新挂载

​ ro/rw 只读、读写

​ user/nouser 是否允许普通用户挂载此设备,/etc/fstab使用

​ acl/noacl 启用此文件系统上的acl功能

​ loop 使用loop设备

​ _netdev 当网络可用时才对网络资源进行挂载,如:NFS文件系统

​ defaults 相当于rw, suid, dev, exec, auto, nouser, async

挂载规则:

♦ 一个挂载点同一时间只能挂载一个设备

♦ 一个挂载点同一时间挂载了多个设备,只能看到最后一个设备的数据

♦ 一个设备可以同时挂载到多个挂载点

♦ 通常挂载点一般是已存在的空目录

21.5 卸载文件系统 umount

卸载时:可使用设备,也可以使用挂载点

21.6 查看挂载情况
#通过查看/etc/mtab文件显示当前已挂载的所有设备
[root@centos82s ~]$mount
#查看内核追踪到的已挂载的所有设备
[root@centos82s ~]$cat /proc/mounts
#查看挂载情况
[root@centos82s ~]$findmnt /mnt
TARGET SOURCE    FSTYPE OPTIONS
/mnt   /dev/sdb2 ext4   rw,relatime,seclabel

查看正在访问指定文件系统的进程

lsof MOUNT_POINT

fuser -v MOUNT_POINT

终止所有正在访问指定的文件系统的进程

fuser -km MOUNT-POINT

21.7 持久挂载

将挂载保存到/etc/fstab中可以下次开机时,自动启用挂载

每行定义一个要挂载的文件系统,其中包括共6项

♦ 要挂载的设备或伪文件系统

​ 设备文件

​ LABEL:LABEL=""

​ UUID:UUID=""

​ 伪文件系统名称:proc,sysfs

♦ 挂载点:必须是事先存在的目录

♦ 文件系统类型:ext4, xfs, iso9660, nfs, none

♦ 挂载选项:defaults, acl, bind

♦ 转储频率:0:不做备份 1:每天转储 2:每隔一天转储

♦ fsck检查的文件系统顺序:允许的数字是0 1 2

​ 0:不自检 1:首先自检,一般只有rootfs才用 2:非rootfs使用

[root@centos82s ~]$cat /etc/fstab

#
# /etc/fstab
# Created by anaconda on Tue Jul 28 18:05:29 2020
#
# Accessible filesystems, by reference, are maintained under '/dev/disk/'.
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info.
#
# After editing this file, run 'systemctl daemon-reload' to update systemd
# units generated from this file.
#
UUID=5e437624-9610-4d5d-804b-ec9054e9f46d /                       xfs     defaults        0 0
UUID=e54fe5be-10b7-456b-b297-cf28faf5aab6 /boot                   ext4    defaults        1 2
UUID=7faf9f94-f218-4497-9fa2-030c11f8d577 /data                   xfs     defaults        0 0
UUID=9c230f26-8349-4153-b1d6-742a6a7b7088 swap                    swap    defaults        0 0
21.8 管理交换分区swap
#添加swap
[root@centos82s ~]$mkswap /dev/sdb3
Setting up swapspace version 1, size = 3 GiB (3221221376 bytes)
no label, UUID=8b68c555-9ab4-4f2b-b380-e178db0ecbb9
#查看
[root@centos82s ~]$blkid /dev/sdb3
/dev/sdb3: UUID="8b68c555-9ab4-4f2b-b380-e178db0ecbb9" TYPE="swap" PARTUUID="e917b8cc-b4ac-8b4a-9598-830383054303"
#添加到/etc/fstab,开机自启
[root@centos82s ~]$vim /etc/fstab
UUID=9c230f26-8349-4153-b1d6-742a6a7b7088 swap                    swap    defaults        0 0
#查看启用的swap
[root@centos82s ~]$swapon -s
Filename                Type        Size    Used    Priority
/dev/sdb3                               partition   3145724 0   -2
/dev/sda3                               partition   2097148 0   -3
#禁用/dev/sdb3
[root@centos82s ~]$swapoff /dev/sda3
[root@centos82s ~]$swapon -s
Filename                Type        Size    Used    Priority
/dev/sdb3                               partition   3145724 0   -2
21.9 swap的使用策略

/proc/sys/vm/swappiness的值决定了当内存占用达到一定的百分比是,会启用swap分区的空间

[root@centos82s ~]$cat /proc/sys/vm/swappiness
30
[root@centos610 ~]#cat /proc/sys/vm/swappiness
60
[root@centos82s ~]$dd if=/dev/zero of=/dev/sdb2 bs=4G count=1
0+1 records in
0+1 records out
2147479552 bytes (2.1 GB, 2.0 GiB) copied, 23.8706 s, 90.0 MB/s
#当磁盘/dev/sdb2达到使用swap条件
[root@centos82s ~]$swapon -s
Filename                Type        Size    Used    Priority
/dev/sdb3                               partition   3145724 117248  -2

说明:内存在使用到100-30=70%的时候,就开始出现有交换分区的使用。简单的说这个参数定义了系统对swap的使用倾向,默认值为30,值越大表示越倾向于使用swap。可以设为0,这样做并不会禁止对swap的使用,只是最大限度地降低了使用swap的可能性