Linux第二周学习总结
1. 总结通配符,管道,重定向,并且结合示例,添加注释信息
| 名称 | 符号有哪些 | 使用场景 |
|---|---|---|
| 通配符 | *,? | 模糊匹配内容 |
| 管道符 | | | 将左侧命令的标准输出作为右侧命令的标准输入 |
| 重定向 | >,>>,<,<< | 文件追加内容 |
通配符示例
[root@rocky9-15 test]# ls
10abc.sh 1abc.sh 2abc.sh 3abc.sh 4abc.sh 5abc.sh 6abc.sh 7abc.sh 8abc.sh 9abc.sh shell
10.sh 1.sh 2.sh 3.sh 4.sh 5.sh 6.sh 7.sh 8.sh 9.sh user3
[root@rocky9-15 test]# ls *.sh # 显示以.sh结尾的文件 *代表任意长度字符,所以会显示所有后缀名为.sh的文件
10abc.sh 1abc.sh 2abc.sh 3abc.sh 4abc.sh 5abc.sh 6abc.sh 7abc.sh 8abc.sh 9abc.sh
10.sh 1.sh 2.sh 3.sh 4.sh 5.sh 6.sh 7.sh 8.sh 9.sh
[root@rocky9-15 test]# ls ?abc.sh # 显示后缀名为abc.sh的文件 ?表示单个字符,故10abc.sh没有显示
1abc.sh 2abc.sh 3abc.sh 4abc.sh 5abc.sh 6abc.sh 7abc.sh 8abc.sh 9abc.sh
管道符号示例:
ps aux # 查看所有的服务
[root@rocky9-15 test]# ps aux |grep "nginx" #将ps aux命令的输出结果作为grep "nginx"的输入进行筛选,最终查找出有关于nginx的服务
root 28627 0.0 0.0 10056 1624 ? Ss 21:46 0:00 nginx: master process /usr/sbin/nginx
nginx 28629 0.0 0.1 14412 5208 ? S 21:46 0:00 nginx: worker process
nginx 28630 0.0 0.1 14412 5208 ? S 21:46 0:00 nginx: worker process
nginx 28631 0.0 0.1 14412 5208 ? S 21:46 0:00 nginx: worker process
nginx 28632 0.0 0.1 14412 5208 ? S 21:46 0:00 nginx: worker process
root 35856 0.0 0.0 221812 2304 pts/3 S+ 21:46 0:00 grep --color=auto nginx
这里如果如果不使用管道符号的话,grep是无法直接对ps aux直接进行解析的,需要将ps aux命令执行的结果复制到一个文件里面,在对这个文件进行筛选。
[root@rocky9-15 test]# grep "nginx" ps aux
grep: ps: 没有那个文件或目录
grep: aux: 没有那个文件或目录
[root@rocky9-15 test]# grep "nginx" ps.txt
root 28627 0.0 0.0 10056 1624 ? Ss 21:46 0:00 nginx: master process /usr/sbin/nginx
nginx 28629 0.0 0.1 14412 5208 ? S 21:46 0:00 nginx: worker process
nginx 28630 0.0 0.1 14412 5208 ? S 21:46 0:00 nginx: worker process
nginx 28631 0.0 0.1 14412 5208 ? S 21:46 0:00 nginx: worker process
nginx 28632 0.0 0.1 14412 5208 ? S 21:46 0:00 nginx: worker process
如果使用管道符就不需要将ps aux产生的输出内容保存到文件里,再使用grep进行筛选了
重定向符号应用:
[root@rocky9-15 cdx]# cat 1.txt
你好,>定向符号
[root@rocky9-15 cdx]# echo "你好,>定向符号2" > 1.txt # 向有内容的1.txt文件添加内容,会覆盖原先的数据
[root@rocky9-15 cdx]# cat 1.txt
你好,>定向符号2
[root@rocky9-15 cdx]# echo "你好,>定向符号3" >> 1.txt # 使用>>符号则不会覆盖原先的文件数据内容
[root@rocky9-15 cdx]# cat 1.txt
你好,>定向符号2
你好,>定向符号3
[root@rocky9-15 cdx]# grep "2" < 1.txt # 将1.txt文件内容输出作为 grep "2"命令的输入
你好,>定向符号2
[root@rocky9-15 cdx]# grep "2" << EFO # 通过交换数据块查找,以EFO作为分隔符
> 1
> 2
> 3
> 3
> 4
> 2
> EFO
2
2
2. 总结linux用户和用户组相关知识点以及常见的操作命令,添加注释信息
用户
| 用户 | Uid | 使用权限 |
|---|---|---|
| root | 0 | 权限极高,作为系统管理员使用 |
| 系统用户 | 1-999 | 由系统或应用程序自动创建,用于隔离服务权限 |
| 普通用户 | >=1000 | 低权限 |
常见操作命令有:
1、useradd (增加一个用户)
[root@rocky9-15 cdx]# useradd user1 #创建用户user1,参数默认
[root@rocky9-15 cdx]# ls /home/
red user1
[root@rocky9-15 cdx]# id user1
用户id=6667(user1) 组id=6667(user1) 组=6667(user1)
[root@rocky9-15 cdx]# useradd user2 -d /test/home/ -u 1234 -s /bin/bash # -d表示修改用户默认的家目录位置,-u设置用户的uid,-s设置用户默认的shell
正在创建信箱文件: 文件已存在
[root@rocky9-15 cdx]# id user2
用户id=1234(user2) 组id=1234(user2) 组=1234(user2)
2、usermod (修改用户属性)
[root@rocky9-15 cdx]# usermod -aG red,jimmy user2 #添加两个附属组red,jimmy
[root@rocky9-15 cdx]# id user2
用户id=1234(user2) 组id=1234(user2) 组=1234(user2),1000(red),1028(web),1030(jimmy)
[root@rocky9-15 cdx]# usermod -G web user2 # -G代表只保留的附属组,即我们只保留web组,另外的两个附属组删除
[root@rocky9-15 cdx]# id user2
用户id=1234(user2) 组id=1234(user2) 组=1234(user2),1028(web)
3、userdel (删除用户)
[root@rocky9-15 cdx]# userdel -r user2 #-r表示删除用户的附属文件
userdel:/var/spool/mail/user2 并不属于 user2,所以不会删除
[root@rocky9-15 cdx]# id user2
id: “user2”:无此用户
4、su(切换用户)
[red@rocky9-15 cdx]$ su root # 登录到root用户
密码:
# root用户使用su切换其它用户不需要密码
5、passwd (修改用户密码)
[red@rocky9-15 cdx]$ passwd # 修改我的用户密码
# 除了root用户,其它用户只能修改自己的用户密码
[red@rocky9-15 cdx]$ passwd user1 # 修改我的用户密码
passwd:只有 root 用户才能指定用户名。
6、sudo (使用root权限执行命令)
普通用户只所以能够使用sudo是因为root用户规定了哪些用户可以使用,具体在/etc/sudoers中

[red@rocky9-15 root]$ passwd user1 # 不加sudo之前,无法执行
passwd:只有 root 用户才能指定用户名。
[red@rocky9-15 root]$ sudo passwd user1 #加sudo,可执行
[sudo] red 的密码:
7、id (查看用户信息)
[root@rocky9-15 cdx]# id root
用户id=0(root) 组id=0(root) 组=0(root)
[root@rocky9-15 cdx]# id red
用户id=1000(red) 组id=1000(red) 组=1000(red)
[root@rocky9-15 cdx]# id nginx
用户id=980(nginx) 组id=980(nginx) 组=980(nginx)
8、who(查看有多少用户正在登录系统)
[root@rocky9-15 cdx]# who
root seat0 2025-04-28 20:30 (login screen)
root tty2 2025-04-28 20:30 (tty2)
root pts/3 2025-04-29 21:25 (10.0.0.1)
root pts/4 2025-04-29 21:25 (10.0.0.1)
用户组
用户组就是为了更方便的管理用户的,它可以把某个权限集中分给某个用户。
一个用户只有有一个主组,但是可以有无限个附属组
常见操作命令有:
1、groupadd (增加一个新组)
[root@rocky9-15 cdx]# groupadd -g 1008 test # 新建一个分组,-g指定gid
[root@rocky9-15 cdx]# getent group test
test:x:1008:
2、groupmod(修改组属性,gid或者名称之类的)
[root@rocky9-15 cdx]# groupmod -g 8888 -n newtest test # -g代表组新的gid,-n 后面接新组名 老组名进行修改
[root@rocky9-15 cdx]# getent group test
[root@rocky9-15 cdx]# getent group newtest
newtest:x:8888:
3、groupdel (删除组)
[root@rocky9-15 cdx]# getent group newtest
newtest:x:8888:red
[root@rocky9-15 cdx]# groupdel newtest # 删除newtest组,附属组可以直接删除
[root@rocky9-15 cdx]# getent group newtest
[root@rocky9-15 cdx]# groupdel red # 主组则不能直接删除
groupdel:不能移除用户“red”的主组
4、gpasswd(修改组成员)
[root@rocky9-15 cdx]# gpasswd -a red newtest #将red用户添加到newtest组里面
正在将用户“red”加入到“newtest”组中
[root@rocky9-15 cdx]# id red
用户id=1000(red) 组id=1000(red) 组=1000(red),8888(newtest)
[root@rocky9-15 cdx]# gpasswd -d red newtest #将red用户移除newtest组
正在将用户“red”从“newtest”组中删除
[root@rocky9-15 cdx]# getent group newtest
newtest:x:8888:
5、getent(查看组信息)
[root@rocky9-15 cdx]# getent group red# 查看red组
red:x:1000:
[root@rocky9-15 cdx]# getent group root# 查看root组
root:x:0:
[root@rocky9-15 cdx]# getent passwd red #也可以查用户信息
red:x:1000:1000:red:/home/red:/bin/bash
[root@rocky9-15 cdx]# getent passwd root
root:x:0:0:root:/root:/bin/bash
3. 总结文件权限管理相关的知识点,包括权限位,特殊权限和ACL,添加详细的注释和解释
对于linux中的文件,有是三种权限 :
r (可读) 4
w (可写) 2
x (可执行)1
rwx对应二进制位数
对于文件而言,有三种用户会对文件进行管理
1、所有者 u
2、所属组 g
3、其他人 o
[root@rocky9-15 cdx]# ll 总用量 4 -rw-r--r--. 1 root root 44 4月 29 22:10 1.txt
对于上述代码1.txt文件的权限,我们可以分成三个部分:rw-,r--,r-- 对应分别的是所有者,所属组,其他人;
所以这个文件,我具有可读和可写权限,我的所属组具有可读权限,其他人具体可读权限。
特殊权限:
linux文件中除了常见的rwx文件权限外,还有三种特殊的权限
1、SUID 一个二进制文件(命令) 添加SUID属性后,任何一个用户都可以随意执行它,故比较危险,慎用(即普通用户不需要sudo也可以使用命令)
[red@rocky9-15 cdx]$ useradd suid # 普通用户无法直接创建用户,无权限,
useradd: Permission denied.
useradd:无法锁定 /etc/passwd,请稍后再试。
[root@rocky9-15 cdx]# chmod u+s /usr/sbin/useradd # 为usersdd文件添加suid属性
[root@rocky9-15 cdx]# ll /usr/sbin/useradd
-rwsr-xr-x. 1 root root 141144 10月 31 2023 /usr/sbin/useradd
[red@rocky9-15 cdx]$ useradd suid # 可以添加用户
sss_cache must be run as root
sss_cache must be run as root
[red@rocky9-15 cdx]$ id suid
用户id=6669(suid) 组id=6669(suid) 组=6669(suid)
[red@rocky9-15 cdx]$ userdel -p suid
2、SGID 应用于二进制文件和目录,执行与SUID类型,但是影响的是组身份,更多的用于目录管理,统一目录的属性组
[root@rocky9-15 sgid]# groupadd suidtest #创建用户文件属性组
[root@rocky9-15 sgid]# usermod -aG suidtest red # 添加用户到属性组
[root@rocky9-15 sgid]# usermod -aG suidtest test # 添加用户到属性组
[root@rocky9-15 cdx]# chown :suidtest sgid/ # 修改用户属性组为suidtest
[root@rocky9-15 cdx]# ll -d sgid/
drwxr-sr-x. 2 red suidtest 6 5月 5 20:23 sgid/
[root@rocky9-15 cdx]# chmod g+s sgid/ #为sgid目录添加sgid属性
[red@rocky9-15 cdx]$ mkdir sgid/test1 ##使用red用户添加目录,生产的目录属性组任然是suidtest
[red@rocky9-15 cdx]$ ll sgid/
总用量 0
drwxr-sr-x. 2 red suidtest 6 5月 5 21:10 test1
[test@rocky9-15 cdx]$ mkdir sgid/test2 ## 使用test用户创建目录,属性组任然是suidtest
[test@rocky9-15 cdx]$ ll sgid/
总用量 0
drwxr-sr-x. 2 red suidtest 6 5月 5 21:10 test1
drwxr-sr-x. 2 test suidtest 6 5月 5 21:11 test2
3、Sticky Bit(粘滞位) 多用户共享目录,限制每个用户删除的操作权限。
[root@rocky9-15 test]# mkdir /project_share # 创建共享目录
[root@rocky9-15 test]# sudo chmod 1777 /project_share # 权限开放且添加粘滞位(权限显示为`drwxrwxrwt`)
[root@rocky9-15 test]# ll /project_share/ -d
drwxrwxrwt. 2 root root 6 5月 5 21:51 /project_share/
[test@rocky9-15 cdx]$ cd /project_share/
[test@rocky9-15 project_share]$ ls
red
[test@rocky9-15 project_share]$ rm red #验证其他用户是否可以删除此文件
rm:是否删除有写保护的普通空文件 'red'?y
rm: 无法删除 'red': 不允许的操作
[test@rocky9-15 project_share]$ touch test # 创建新文件
[red@rocky9-15 project_share]$ ll
总用量 0
-rw-r--r--. 1 red red 0 5月 5 21:52 red
-rw-r--r--. 1 test test 0 5月 5 21:54 test
[red@rocky9-15 project_share]$ rm test #同理,red用户也不能删除test用户创建的文件
rm:是否删除有写保护的普通空文件 'test'?y
rm: 无法删除 'test': 不允许的操作
ACL:通过为特定用户或组单独定义权限,补充传统Linux文件权限模型,实现更精细的访问控制。
4. 总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt总结程序包获取途径,以及rpm, yum, apt命令选项示例。
程序包管理器一般分两类:
1:基于Debian系列
有apt和dpkg 底层的包.deb包
2:基于RedHat系统
有yum,DNG,rmp 底层的包是rpm包
包中包含四种内容文件
1、核心文件:
二进制可执行文件、配置文件及库文件
2、元数据
包的名称、版本、依赖关系、功能描述等基本信息
3、脚本文件
安装前后或卸载时执行的脚本(如预安装脚本 preinst、卸载后脚本 postrm)
4、数据库记录
系统级数据库(如 /var/lib/rpm)存储已安装包的路径、校验码等信息
[root@rocky9-15 project_share]# rpm -ql mysql # 查看文件列表
/usr/bin/mysql
/usr/bin/mysql_config_editor
/usr/bin/mysqladmin
/usr/bin/mysqlbinlog
/usr/bin/mysqlcheck
/usr/bin/mysqldump
/usr/bin/mysqlimport
/usr/bin/mysqlpump
/usr/bin/mysqlshow
/usr/bin/mysqlslap
/usr/lib/.build-id
/usr/lib/.build-id/68
/usr/lib/.build-id/68/62bb89fb3e10e2ec794f25781c064b03d4a509
/usr/lib/.build-id/77
/usr/lib/.build-id/77/0603623a002b2bbc2f4c10a390d3afe6987adf
/usr/lib/.build-id/8b
/usr/lib/.build-id/8b/6ad965b82e0ba45387ed8e914e1fedfe8cdad9
/usr/lib/.build-id/a0
/usr/lib/.build-id/a0/93374ce2e0b0788cc751b012a3c9bfe9a42c9b
/usr/lib/.build-id/b8
/usr/lib/.build-id/b8/42a53b725af8f6233a1289810f4a87863dfabb
/usr/lib/.build-id/d9
/usr/lib/.build-id/d9/53cf4b0e0854427d61c7d95b8154002870f69f
/usr/lib/.build-id/ea
/usr/lib/.build-id/ea/788923cf0da3fd90be95d0cb7d385f974853a1
/usr/lib/.build-id/ea/fb7d7d3bfbe4722750c85eee3508a15edadc66
/usr/lib/.build-id/f6
/usr/lib/.build-id/f6/e6ef33f804a9975821d8c64f86c512e308c213
/usr/lib/.build-id/ff
/usr/lib/.build-id/ff/d0e973ef785b0f28f4be41ebdd48c4b4752d32
/usr/share/man/man1/mysql.1.gz
/usr/share/man/man1/mysql_config_editor.1.gz
/usr/share/man/man1/mysqladmin.1.gz
/usr/share/man/man1/mysqlbinlog.1.gz
/usr/share/man/man1/mysqlcheck.1.gz
/usr/share/man/man1/mysqldump.1.gz
/usr/share/man/man1/mysqlimport.1.gz
/usr/share/man/man1/mysqlpump.1.gz
/usr/share/man/man1/mysqlshow.1.gz
/usr/share/man/man1/mysqlslap.1.gz
[root@rocky9-15 project_share]# rpm -qi mysql # 查看元数据
Name : mysql
Version : 8.0.41
Release : 2.el9_5
Architecture: x86_64
Install Date: 2025年05月06日 星期二 00时02分34秒
Group : Unspecified
Size : 62705506
License : GPLv2 with exceptions and LGPLv2 and BSD
Signature : RSA/SHA256, 2025年02月20日 星期四 00时08分17秒, Key ID 702d426d350d275d
Source RPM : mysql-8.0.41-2.el9_5.src.rpm
Build Date : 2025年02月19日 星期三 23时15分11秒
Build Host : pb-419b85e8-600e-41b5-96b0-ca17772633ba-b-x86-64
Packager : Rocky Linux Build System (Peridot) <releng@rockylinux.org>
Vendor : Rocky Enterprise Software Foundation
URL : http://www.mysql.com
Summary : MySQL client programs and shared libraries
Description :
MySQL is a multi-user, multi-threaded SQL database server. MySQL is a
client/server implementation consisting of a server daemon (mysqld)
and many different client programs and libraries. The base package
contains the standard MySQL client programs and generic MySQL files.
[root@rocky9-15 project_share]# rpm -ivh /run/media/root/Rocky-9-4-x86_64-dvd/AppStream/Packages/m/mariadb-connector-c-config-3.2.6-1.el9_0.noarch.rpm #查看软件包安装信息
Verifying... ################################# [100%]
准备中... ################################# [100%]
软件包 mariadb-connector-c-config-3.2.6-1.el9_0.noarch 已经安装
程序包的获取包一共有两种方式,一种是本地的仓库,一种是网络仓库 本地仓库由于是直接下载好了,下载快,版本不一定是最新的
[root@rocky9-15 dev]# df
文件系统 1K-块 已用 可用 已用% 挂载点
devtmpfs 4096 0 4096 0% /dev
tmpfs 1857360 0 1857360 0% /dev/shm
tmpfs 742948 13780 729168 2% /run
/dev/mapper/rl-root 73334784 6406680 66928104 9% /
/dev/nvme0n1p1 983040 310356 672684 32% /boot
/dev/mapper/rl-home 131088384 954736 130133648 1% /home
tmpfs 371472 108 371364 1% /run/user/0
/dev/sr0 10660236 10660236 0 100% /run/media/root/Rocky-9-4-x86_64-dvd
[root@rocky9-15 dev]# cd /run/media/root/Rocky-9-4-x86_64-dvd
[root@rocky9-15 Rocky-9-4-x86_64-dvd]# ls # AppStream和BaseOS 就是我们本地仓库的源
AppStream BaseOS EFI images isolinux LICENSE media.repo
网络仓库数量多,软件版本多


rpm, yum, apt命令选项示例
1 、rpm
-i:安装软件包。
-v:显示详细安装过程。
-h:显示进度条(哈希标记)。
-U:升级软件包(若未安装则执行安装)。
-F:仅升级已安装的旧版本包。
-e:移除已安装的软件包。
-q:查询操作的基础选项。
-a:列出所有已安装的包。
-l:显示包安装的文件列表。
-i:显示包的详细信息(如版本、厂商、依赖等)。
[root@rocky9-15 softs]# rpm -ivh vsftpd-3.0.3-49.el9.x86_64.rpm # 安裝软件显示详细信息
警告:vsftpd-3.0.3-49.el9.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID 8483c65d: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:vsftpd-3.0.3-49.el9 ################################# [100%]
[root@rocky9-15 softs]# rpm -Uvh vsftpd-3.0.5-6.el9.x86_64.rpm # 更新版本
警告:vsftpd-3.0.5-6.el9.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 8483c65d: NOKEY
Verifying... ################################# [100%]
准备中... ################################# [100%]
正在升级/安装...
1:vsftpd-3.0.5-6.el9 ################################# [ 50%]
正在清理/删除...
2:vsftpd-3.0.3-49.el9 ################################# [100%]
[root@rocky9-15 softs]# rpm -evh vsftpd # 删除软件
准备中... ################################# [100%]
正在清理/删除...
1:vsftpd-3.0.5-6.el9 ################################# [100%]
[root@rocky9-15 softs]# rpm -q vsftpd # 查询软件是否安装
未安装软件包 vsftpd
[root@rocky9-15 softs]# rpm -qa #查看所有已经安装的包
2、yum
2.1基础操作
-
安装软件包 (install) 例如:yum install nginx
-
更新软件包(update) 例如:yum update nginx
-
卸载软件包(remove) 例如:yum remove nginx
![image-20250506211334542]()


2.2 仓库管理
- 启用/禁用仓库 enable/disable
[root@rocky9-15 yum.repos.d]# yum-config-manager --disable appstream-aliyun # 禁用yum源,后面接的仓库id
[root@rocky9-15 yum.repos.d]# yum repolist all | grep "aliyun" # 查看源是否被禁用
appstream-aliyun Rocky Linux 9 - AppStream - Aliyun 禁用
baseos-aliyun Rocky Linux 9 - Base - Aliyun 启用
extras-aliyun Rocky Linux 9 - Extras - Aliyun 启用
[root@rocky9-15 yum.repos.d]# yum-config-manager --enable appstream-aliyun # 启用yum源,后面接的仓库id
’[root@rocky9-15 yum.repos.d]# yu repolist all | grep "aliyun" # 查看源是否被禁用
appstream-aliyun Rocky Linux 9 - AppStream - Aliyun 启用
baseos-aliyun Rocky Linux 9 - Base - Aliyun 启用
extras-aliyun Rocky Linux 9 - Extras - Aliyun 启用
2.3查询与信息获取
-
搜索软件包 search
-
查看仓库信息 repolist(只会显示启用的yum仓库) repolist all(显示全部的yum仓库)
-
显示软件包详情 info 查看软件包的大小,依赖等
![image-20250506220131584]()
![image-20250506220453532]()
![image-20250506220508134]()

2.4 缓存维护
- 清理缓存 clean makecache
[root@rocky9-15 yum.repos.d]# yum clean all # 清除所有缓存,包括下好的元数据
47 个文件已删除
[root@rocky9-15 yum.repos.d]# yum makecache # 重新生产缓存(重新下载元数据)
Rocky Linux 9 - Base - Aliyun 1.0 MB/s | 2.3 MB 00:02
Rocky Linux 9 - AppStream - Aliyun 4.6 MB/s | 8.4 MB 00:01
Rocky Linux 9 - Extras - Aliyun 18 kB/s | 16 kB 00:00
Rocky Linux 9 - BaseOS 1.5 MB/s | 2.3 MB 00:01
Rocky Linux 9 - AppStream 2.3 MB/s | 8.4 MB 00:03
Rocky Linux 9 - Extras 14 kB/s | 16 kB 00:01
元数据缓存已建立。
3、apt
3.1、基础操作
- 更新软件源 update 更新最新的软件包关系(包含依赖关系)
- 安装软件包 install
- 更新软件包 upgrade 更新所有可以更新的软件包
- 卸载软件包 remove /purge remove 卸载包但保留配置文件;purge 完全卸载包及配置文件



3.2维护与管理
- 清理无用依赖 autoremove 删除不再需要的自动安装依赖
- 清除缓存 clean 删除所有已下载的软件包缓存


3.3 查询和信息获取
-
搜索软件包 search 根据关键词搜索可用包
![image-20250506225504812]()
-
列出软件包状态
-
list --installed # 显示所有已安装的包
![image-20250506225615322]()
-
list --upgradable # 列出可升级的包
![image-20250506225641911]()
-
-
查看包详情 show # 显示包的版本、依赖、描述等详细信息
![image-20250506225727756]()
5. 简要总结yum/dnf工作原理。并搭建私有yum仓库(base, epel源)给另一个虚拟机使用。
5.1工作原理:
-
架构:采用C/S (客户端/服务端) 我们本地的linux系统作为客户端,配置好yum仓库,通过HTTP/FTP 协议访问服务端的地址,下载我们需要的rpm包
,然后系统调用底层rpm进行安装。 -
![image-20250507211129711]()
-
操作流程:
1、客户端配置yum仓库文件,xxx.repo文件
2、客户端解析xxx.repo文件,确定仓库地址
3、下载repodata/ 中的元数据,缓存到本地
4、根据用户指令(如 install,remove等)分析依赖关系,生成事务
5、从仓库下载所需 RPM 包及依赖包,调用 rpm 命令完成安装
6、操作成功,退出安装;操作失败,事务回滚,回到初始状态
5.2 示例
[root@rocky9-15 yum.repos.d]# ls
bak Rocky-alyum.repo
[root@rocky9-15 yum.repos.d]# cat Rocky-alyum.repo # 1、配置阿里yum源
[baseos-aliyun] # 软件最小运行需要的源
name=Rocky Linux $releasever - Base - Aliyun
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/BaseOS/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[appstream-aliyun] # 软件用户级别
name=Rocky Linux $releasever - AppStream - Aliyun
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/AppStream/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[extras-aliyun] # 扩展的软件包
name=Rocky Linux $releasever - Extras - Aliyun
baseurl=https://mirrors.aliyun.com/rockylinux/$releasever/extras/$basearch/os/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-rockyofficial
[root@rocky9-15 yum.repos.d]# yum install mysql
Rocky Linux 9 - Base - Aliyun 4.4 MB/s | 2.3 MB 00:00
Rocky Linux 9 - AppStream - Aliyun 6.6 MB/s | 8.4 MB 00:01
Rocky Linux 9 - Extras - Aliyun 47 kB/s | 16 kB 00:00
# 解析repo文件和下载文件元数据
依赖关系解决。
=============================================================================================================================================================
软件包 架构 版本 仓库 大小
=============================================================================================================================================================
安装:
mysql x86_64 8.0.41-2.el9_5 appstream-aliyun 2.8 M
安装依赖关系:
mariadb-connector-c-config noarch 3.2.6-1.el9_0 appstream-aliyun 9.8 k
mysql-common x86_64 8.0.41-2.el9_5 appstream-aliyun 68 k
事务概要
=============================================================================================================================================================
安装 3 软件包
# 分析依赖,下载文件
总下载:2.9 M
安装大小:60 M
确定吗?[y/N]: y
下载软件包:
(1/3): mariadb-connector-c-config-3.2.6-1.el9_0.noarch.rpm 53 kB/s | 9.8 kB 00:00
(2/3): mysql-common-8.0.41-2.el9_5.x86_64.rpm 245 kB/s | 68 kB 00:00
(3/3): mysql-8.0.41-2.el9_5.x86_64.rpm 4.9 MB/s | 2.8 MB 00:00
-------------------------------------------------------------------------------------------------------------------------------------------------------------
总计 4.9 MB/s | 2.9 MB 00:00
运行事务检查
事务检查成功。
运行事务测试
事务测试成功。
运行事务
准备中 : 1/1
安装 : mariadb-connector-c-config-3.2.6-1.el9_0.noarch 1/3
安装 : mysql-common-8.0.41-2.el9_5.x86_64 2/3
安装 : mysql-8.0.41-2.el9_5.x86_64 3/3
运行脚本: mysql-8.0.41-2.el9_5.x86_64 3/3
验证 : mariadb-connector-c-config-3.2.6-1.el9_0.noarch 1/3
验证 : mysql-common-8.0.41-2.el9_5.x86_64 2/3
验证 : mysql-8.0.41-2.el9_5.x86_64 3/3
已安装:
mariadb-connector-c-config-3.2.6-1.el9_0.noarch mysql-8.0.41-2.el9_5.x86_64 mysql-common-8.0.41-2.el9_5.x86_64
完毕!
下载好的元数据文件在/var/cache/dnf/ 下

5.3 配置yum私有仓库
1、选择一台主机作为服务器,为选择10.0.0.15作为服务器

2、下载http服务并且启动

3、创建本地仓库
使用/var/www/html 作为本地仓库

浏览器访问成功,仓库配置完成

4、在客户端配置repo文件

生产bendi.repo ,分别配置三个yum源
5、下载元数据,测试是否可以安装软件

可以正常下载,完成配置
6. 简要总结apt的工作原理
1、配置源列表
读取 /etc/apt/sources.list 定义软件源地址(官方/镜像)
2、同步元数据
apt update下载仓库的Packages.gz(包索引)和 Release(签名文件)到本地缓存 /var/lib/apt/lists/
验证 Release 文件的 GPG 签名,确保数据完整性
3、依赖解析
apt install 时通过本地缓存的索引分析软件包依赖关系树,自动解决冲突
4、下载与安装
从仓库拉取 .deb 文件至 /var/cache/apt/archives/,校验后解压安装到系统目录
自动处理依赖包的下载和配置更新
5、升级与维护
apt upgrade 比对版本批量更新,apt clean 清理旧缓存,autoremove 移除孤立依赖
7. 编译安装课程演示的软件进行步骤总结
1、准备编译环境,安装编译器等
配置编译环境,确保后面下载的源码包能成功编译
yum install gcc make gcc-c++ glibc glibc-devel pcre pcre-devel openssl openssl-devel systemd-devel zlib-devel
# 安装编译器
2、获取项目源代码文件和解压软件包
从网络上选择我们需要的源代码文件,解压出来进行配置
3、编译安装软件
3.1 confugre 配置软件
在这一步我们可以定制我们所安装的软件一些的配置,如安装路径等等


执行后生产Makefile 文件(软件安装的配置文件)
3.2 进行编译
这一步的执行是基于上一步生成的makefile文件的,如果没有这个文件,进行make编译的时候会报错

3.3 安装软件
可以看到执行make install之后,系统自动执行了很多shell命令去安装我们的软件

4、添加环境变量
由于我们是自己手动安装的软件,需要手动添加环境变量

我们手动安装的软件是不能通过systemctl管理包进行管理的

5、测试软件正常使用


关闭nginx


8. 总结文件时间戳的用法
8.1 时间戳类型
| 类型 | 全称 | 触发条件 | 查看命令 |
|---|---|---|---|
atime |
Access Time | 文件内容被读取(如 cat、less) |
stat filename |
mtime |
Modify Time | 文件内容被修改(如 vim 保存) |
ls -l filename |
ctime |
Change Time | 文件元数据变更(如权限、所有者通过 chmod、chown 修改) |
stat filename |
8.2查看时间戳
stat 命令:显示完整时间戳(atime、mtime、ctime)

ls 命令
ls -l:默认显示mtime3ls -lc:显示ctimels -lu:显示atime
8.3 应用场景
- atime
- 分析文件访问频率(如日志清理)
- mtime
- 判断文件是否需要重新编译
- ctime
- 审计文件元数据变更(如权限修改记录)
8.4 示例
[root@rocky9-15 week2]# touch test #创建文件
[root@rocky9-15 week2]# stat test # 文件初始状态
文件:test
大小:0 块:0 IO 块:4096 普通空文件
设备:fd00h/64768d Inode:68916712 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:default_t:s0
最近访问:2025-05-06 23:59:00.028160942 +0800
最近更改:2025-05-06 23:59:00.028160942 +0800
最近改动:2025-05-06 23:59:00.028160942 +0800
创建时间:2025-05-06 23:59:00.028160942 +0800
[root@rocky9-15 week2]# vim test # vim访问文件并且保存
[root@rocky9-15 week2]# stat test # ctime,mtime,atime都改变了
文件:test
大小:12 块:8 IO 块:4096 普通文件
设备:fd00h/64768d Inode:68916731 硬链接:1
权限:(0644/-rw-r--r--) Uid:( 0/ root) Gid:( 0/ root)
环境:unconfined_u:object_r:default_t:s0
最近访问:2025-05-07 00:01:06.492290051 +0800
最近更改:2025-05-07 00:01:06.492290051 +0800
最近改动:2025-05-07 00:01:06.493290052 +0800
创建时间:2025-05-07 00:01:06.492290051 +0800
9. 总结find和xargs的用法
9.1 find用法
主要功能:实时查找文件
常用选项
-
-name:按文件名匹配,区分大小写。支持使用glob,如:*, ?, [], [^],通配符要加双引号引起来
[root@rocky9-15 ~]# find / -name ?.txt # 在系统中查询单字符的txt文件 /test/cdx/1.txt -
-type:按文件类型搜索。常用类型包括f(普通文件)、d(目录)、l(符号链接)等。
![image-20250508212430315]()
-
-size:按文件大小搜索。单位可以是c(字节)、k(千字节)、M(兆字节)、G(千兆字节)等。例如,-size +10M查找大于10MB的文件
[root@rocky9-15 ~]# find /homework/ -size +1M -exec du -h {} \; # 查询文件大小大于1M的文件,+代表大于,-是小于,不写就是等于 1.1M /homework/week2/nginx-1.23.0.tar.gz 4.0M /homework/week2/nginx-1.23.0/objs/nginx -
-mtime:按天数查找文件最后修改时间。
[root@rocky9-15 ~]# find /homework/ -ctime +0.8 # 查找文件修改时间大于0.8天的文件 /homework/ /homework/week3 /homework/week3/cui.sh /homework/week2/test [root@rocky9-15 ~]# find /homework/ -atime +0.8 # 同理,也可以使用atime查询 /homework/week3/cui.sh /homework/week2/test -
-user:按文件所有者查找
![image-20250508213438502]()
-
-group:按文件所属组查找。
![image-20250508213503897]()
-
-perm:按文件权限查找。
![image-20250508213856262]()
-
-regex pattern: 正则表达式
[root@rocky9-15 ~]# find -regex ".*\.log$" #查找所有log结尾的文件 ./.local/share/gvfs-metadata/root-813d4f71.log ./.local/share/gvfs-metadata/home-2652b5e6.log ./.npm/_logs/2025-04-20T14_37_12_924Z-debug-0.log ./.npm/_logs/2025-04-20T14_37_16_888Z-debug-0.log ./.npm/_logs/2025-04-20T14_37_40_504Z-debug-0.log ./.npm/_logs/2025-04-20T14_37_56_423Z-debug-0.log ./.npm/_logs/2025-04-20T14_39_04_941Z-debug-0.log ./.npm/_logs/2025-04-20T14_39_54_010Z-debug-0.log ./.npm/_logs/2025-04-20T14_41_21_208Z-debug-0.log ./myblog/node_modules/nwsapi/dist/lint.log -
结合-exec
用于对搜索到的文件执行指定的操作,对每个匹配的文件依次执行命令(每处理一个文件调用一次命令)
{} 占位符,/;结尾
[root@rocky9-15 ~]# find /tmp -name "*.tmp" -exec rm {} \; # 删除所有.tmp文件若需一次性传递所有文件给命令,可改用
+替代\![image-20250508222345977]()
9.2 xargs 用法
xargs 将标准输入转换为命令行参数,供其他命令调用;所以xargs一般结合管道符使用

还可以加些选项进行处理
-P <N>:并发任务数(加速处理)-n <N>:每次传递的参数个数-0:处理含空格/特殊字符的文件名-I:自定义参数
9.3 find结合 xargs用法
find结合xargs是比较常用的选择,可以进行批量删除文件,重命名文件等等
1、批量删除文件

2、批量重命名文件
[root@rocky9-15 xargs]# touch {1..5}txt
[root@rocky9-15 xargs]# ls
1txt 2txt 3txt 4txt 5txt
[root@rocky9-15 xargs]# find ./ -name "*txt" | xargs -I {} mv {} {}bak #将所有txt文件重命名为bak
[root@rocky9-15 xargs]# ls
1txtbak 2txtbak 3txtbak 4txtbak 5txtbak
3、并行执行任务

4、组合多个命令

10. 总结几种压缩工具的使用方法
10.1、gzip
功能:高效压缩单个文件(文本文件效果最佳),生成 .gz 后缀文件,默认删除源文件
压缩文件



查看和解压



10.2、tar
功能:用于将多个文件/目录打包成单个归档文件(.tar),保留原始目录结构与文件权限,常与压缩工具(如 gzip、bzip2)结合生成 .tar.gz 或 .tar.bz2 文件

压缩



解压文件


10.3、zip包
zip 可以实现打包目录和多个文件成一个文件并压缩,但可能会丢失文件属性信息,如:所有者和组信息
分别来自于 zip 和 unzip 包对应的文件是 .zip 后缀


压缩文件

查看压缩文件的内容

解压缩
















浙公网安备 33010602011771号