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

image-20250506211405926

image-20250506211445536

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

image-20250506220549549

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 完全卸载包及配置文件

image-20250506223453661

image-20250506223740342

image-20250506223924898

3.2维护与管理

  • ‌清理无用依赖 autoremove 删除不再需要的自动安装依赖
  • 清除缓存 clean 删除所有已下载的软件包缓存

image-20250506224309271

image-20250506224358174

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作为服务器

image-20250507220941071

2、下载http服务并且启动

image-20250507221957550

3、创建本地仓库

使用/var/www/html 作为本地仓库

image-20250507224147659

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

image-20250507224909558

4、在客户端配置repo文件

image-20250507230512659

生产bendi.repo ,分别配置三个yum源

5、下载元数据,测试是否可以安装软件

image-20250507230548862

可以正常下载,完成配置

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、获取项目源代码文件和解压软件包

从网络上选择我们需要的源代码文件,解压出来进行配置image-20250508000339125

3、编译安装软件

3.1 confugre 配置软件

在这一步我们可以定制我们所安装的软件一些的配置,如安装路径等等

image-20250508192247809

image-20250508000854342

执行后生产Makefile 文件(软件安装的配置文件)image-20250508000957449

3.2 进行编译

这一步的执行是基于上一步生成的makefile文件的,如果没有这个文件,进行make编译的时候会报错

image-20250508001109562

3.3 安装软件

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

image-20250508001325499

4、添加环境变量

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

image-20250508001538787

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

image-20250508193124448

5、测试软件正常使用

image-20250508001706968

image-20250508001656466

关闭nginx

image-20250508001833752

image-20250508001931739

8. 总结文件时间戳的用法

8.1 时间戳类型

类型 全称 触发条件 查看命令
atime Access Time 文件内容被读取(如 catless stat filename
mtime Modify Time 文件内容被修改(如 vim 保存) ls -l filename
ctime Change Time 文件元数据变更(如权限、所有者通过 chmodchown 修改) stat filename

8.2查看时间戳

stat 命令‌:显示完整时间戳(atimemtimectime

image-20250506233624109

ls 命令

  • ls -l:默认显示 mtime3
  • ls -lc:显示 ctime
  • ls -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一般结合管道符使用

image-20250508223645729

还可以加些选项进行处理

  • -P <N>:并发任务数(加速处理)
  • -n <N>:每次传递的参数个数
  • -0:处理含空格/特殊字符的文件名
  • -I :自定义参数

9.3 find结合 xargs用法

find结合xargs是比较常用的选择,可以进行批量删除文件,重命名文件等等

1、批量删除文件

image-20250508224101399

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、并行执行任务

image-20250508225549851

4、组合多个命令

image-20250508225729548

10. 总结几种压缩工具的使用方法

10.1、gzip

功能‌:高效压缩单个文件(文本文件效果最佳),生成 .gz 后缀文件,默认删除源文件

压缩文件

image-20250508232611267

image-20250508232900087

image-20250508233102441

查看和解压

image-20250508233207282

image-20250508233334265

image-20250508233444113

10.2、tar

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

image-20250508233715659

压缩

image-20250508234047435

image-20250508234318437

image-20250508235410422

解压文件

image-20250508235608152

image-20250508235756306

10.3、zip包

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

分别来自于 zip 和 unzip 包对应的文件是 .zip 后缀

image-20250508235932007

image-20250508235943913

压缩文件

image-20250509000145914

查看压缩文件的内容

image-20250509000239218

解压缩

image-20250509000338984

posted @ 2025-05-11 22:18  reddemo  阅读(35)  评论(0)    收藏  举报