晓铧.

Do more of what makes you happy.

第二周作业

1. 总结通配符,管道,重定向,并且结合示例,添加注释信息

通配符

通配符用于匹配文件名或路径中的字符模式,由 Shell 解析,常用于 ls、cp、rm、mv 等命令。
常用的通配符:

符号 含义
* 匹配任意数量的字符(包括零个)。
? 匹配单个任意字符。
[abc] 匹配方括号内的任意一个字符(如 abc)。
[a-z] 匹配指定范围内的任意一个字符(如 az)。
[^abc] 匹配不在方括号内的任意一个字符(取反)。
{str1,str2} 匹配多个逗号分隔的字符串(Shell 扩展,需启用 bashextglob 特性)。

示例:

ls *.txt  # 列出当前目录下所有以 .txt 结尾的文件
rm log?.log  # 删除 log1.log、log2.log 等(? 代表单个数字)
cp [abc].log /dest/  # 复制 a.log、b.log、c.log 到目标目录
touch a[1-3].txt # 创建 a1.txt、a2.txt、a3.txt 到当前目录
mkdir {a,b,c}  # 创建 a、b、c 三个目录

管道:

管道是通过 | 将前一个命令的标准输出(stdout)作为后一个命令的标准输入(stdin),实现多个命令的链式处理。
示例:

ls | wc -l # 统计当前目录下文件数量
cat access.log | sort | uniq  # 对日志排序后去除重复行
tail -f app.log | grep -i "error"  # 实时监控日志并过滤出包含 "error" 的行(不区分大小写)

重定向:

重定向的作用是将命令的输入或输出重定向到文件或其他位置。
常用重定向符号:

符号 含义
> 标准输出重定向(覆盖文件)。
>> 标准输出追加(不覆盖,追加到文件末尾)。
< 标准输入重定向(从文件读取输入)。
2> 错误输出重定向(覆盖文件)。
2>> 错误输出追加(追加到文件末尾)。
&>>& 同时重定向标准输出和错误输出(Bash 支持,等价于 >file 2>&1)。
示例:
ls > a.txt  # 将 `ls` 输出保存到 a.txt(若文件存在则覆盖)
echo "hello word" >> a.txt  # 在 a.txt 末尾追加一行内容
sort < input.txt #从文件读取输入(等价于 cat input.txt | sort)

2. 总结linux用户和用户组相关知识点以及常见的操作命令,添加注释信息

用户与用户组的概念:
​​用户(User)​​
系统中的账户,用于登录和执行操作。
每个用户有唯一标识符 ​​UID​​(User ID)。
默认主目录:/home/username,配置文件:~/.bashrc。
​​用户组(Group)​​
用户的集合,共享文件权限或资源。
每个组有唯一标识符 ​​GID​​(Group ID)。
分为主组(Primary Group)和附加组(Supplementary Groups)。
用户管理命令​

useradd -m newuser                    # 创建新用户,-m 选项表示创建用户的家目录,-s:指定登录 Shell。
passwd username                       # 为创建的用户添加密码
userdel -r newuser                    # 删除用户,-r 选项表示同时删除用户的家目录和邮件池
usermod -d /home/new_home newuser     # 修改用户信息,例如修改用户的家目录,-d:修改主目录。
usermod -u 1001 usernam               # -u:修改 UID(需唯一)。

用户组管理命令​

groupadd newgroup             # 创建新的用户组 
groupdel newgroup             # 删除用户组
groupmod -g 1001 newgroup     # 修改用户组信息,例如修改用户组的 GID 
usermod -aG newgroup newuser  # 将用户添加到指定用户组 
groups newuser                # 查看用户所属的用户组
id username                   # 查看用户的 UID、GID 及所属组

权限管理命令

chown newuser file.txt         # 更改文件或目录的所有者
chgrp newgroup file.txt        # 更改文件或目录的所属用户组
chmod 755 file.txt             # 更改文件或目录的权限,r 表示读,w 表示写,x 表示执行 rwx (4+2+1)

3. 总结文件权限管理相关的知识点,包括权限位,特殊权限和ACL,添加详细的注释和解释

基础权限位(Traditional Permissions)​​
​​核心概念​​:通过 r(读)、w(写)、x(执行)控制文件或目录的访问权限,分为三类主体:
​​用户(Owner)​​:文件/目录的所有者。
​​组(Group)​​:文件所属的用户组。
​​其他(Others)​​:系统中其他用户。
1.数字表示法:r = 4、w = 2、x = 1,无权限则用 0 表示

chmod 755 file.txt  # 用户:7 (4+2+1), 组和其他:5 (4+1)

​​2. 权限表示方式​​
​​符号表示法​​:u(用户)、g(组)、o(其他)、a(所有)。

chmod u+rwx,g+rx,o+r file.txt  # 用户添加读写执行,组和其他添加读
ls -l file.txt        # 查看文件或目录的权限
chmod 755 script.sh      # 数字方式修改权限
chmod u=x,g=rx,o=r file  # 符号方式修改权限

特殊权限
除了基本的读写执行权限,Linux 还提供了三种特殊权限,分别是设置用户 ID(SUID)、设置组 ID(SGID) 和粘滞位(Sticky Bit)。


chmod u+s file_executable   # 给文件设置 SUID 权限,这里 u 表示所有者,+s 表示添加 SUID 权限
chmod g+s file_executable   # 给文件设置 SGID 权限
chmod g+s directory         # 给目录设置 SGID 权限
chmod +t directory          # 给目录设置粘滞位

访问控制列表(ACL)
基本的权限位和特殊权限只能对文件所有者、所属组和其他用户进行权限设置,而 ACL 则允许对更多的用户和用户组进行更细致的权限控制。

getfacl file.txt                       # 查看ACL
setfacl -m u:bob:rw file.txt           # 设置用户bob对file.txt的读写权限
setfacl -m g:dev:rwx dir               # 设置组dev对dir的读写执行权限
setfacl -x u:alice file.txt            # 删除用户alice的ACL条目
setfacl -d -m g:dev:rwx dir            # 设置默认ACL(新创建文件继承)
setfacl -b file.txt                    # 删除文件的所有 ACL 规则

4. 总结程序包管理器有哪些,以及包中包含什么内容的文件,尝试这些文件如何获取命令获取? yum/dnf/apt总结程序包获取途径,以及rpm, yum, apt命令选项示例。

常见程序包管理器

管理器 适用系统 包格式 核心功能
yum CentOS/RHEL 7以下 RPM 软件安装、依赖解决、仓库管理
dnf Fedora/CentOS 8+ RPM yum的升级版,更快依赖解析
apt Debian/Ubuntu DEB 软件安装、依赖解决、仓库管理

包中包含的内容​​
​​1. RPM包(yum/dnf管理)​​
​​可执行文件​​:/usr/bin/ 或 /usr/sbin/。
​​配置文件​​:/etc/。
​​文档​​:/usr/share/doc/。
​​依赖信息​​:记录在.spec文件中。
​​元数据​​:版本、作者、仓库来源等。
​​2. DEB包(apt管理)​​
​​可执行文件​​:/usr/bin/ 或 /usr/sbin/。
​​配置文件​​:/etc/。
​​文档​​:/usr/share/doc/。
​​依赖信息​​:记录在DEBIAN/control文件中。
​​元数据​​:版本、架构、维护者等。
包的获取途径:
1.第三方软件源:

add-apt-repository ppa:example/ppa
apt update

2.本地 RPM/DEB 文件

rpm -ivh package.rpm
dpkg -i package.deb

常用命令选项示例​
yum/dnf 命令​

命令 说明 示例
install 安装软件包 sudo dnf install nginx
update 更新所有软件包 sudo yum update
remove 卸载软件包(保留配置文件) sudo dnf remove httpd
search 搜索仓库中的包 yum search python
list 列出已安装的包 dnf list installed nginx
reinstall 重新安装软件包 yum reinstall mysql-server
示例
# 搜索软件包
yum search keyword         # DNF 命令相同
# 例如:yum search firefox
# 安装软件包
yum install package_name   # DNF 命令相同
# 例如:yum install nginx
# 升级软件包
yum update package_name    # 如果不指定包名,则升级所有可升级的包
dnf update package_name
# 删除软件包
yum remove package_name    # DNF 命令相同
# 例如:yum remove httpd
# 清理缓存
yum clean all              # DNF 命令相同

apt 命令​

命令 说明 示例
install 安装软件包 sudo apt install nginx
update 更新仓库元数据 sudo apt update
upgrade 升级所有已安装的包 sudo apt upgrade
remove 卸载软件包(保留配置文件) sudo apt remove vim
purge 彻底卸载软件包(删除配置文件) sudo apt purge mysql-server
search 搜索仓库中的包 apt search python
list 列出已安装的包 `dpkg -l
示例
apt update                     # 更新软件源信息
apt upgrade                    # 升级已安装的软件包
apt install package_name       # 安装软件包
# 删除软件包
apt remove package_name        # 只删除软件包,保留配置文件
apt purge package_name         # 删除软件包及其配置文件
apt autoremove                 # 清理无用的依赖包

5. 简要总结yum/dnf工作原理。并搭建私有yum仓库(base, epel源)给另一个虚拟机使用。

工作原理
架构模式

yum/dnf 是基于C/S 模式- yum 服务器存放rpm包和相关包的元数据库- 
yum 客户端访问yum服务器进行安装或查询等

yum实现过程

先在yum服务器上创建 yum repository(仓库),在仓库中事先存储了众多rpm包,以及包的相关的
元数据文件(放置于特定目录repodata下),当yum客户端利用yum/dnf工具进行安装包时,会自动下载
repodata中的元数据,查询元数据是否存在相关的包及依赖关系,自动从仓库中找到相关包下载并安装

yum/dnf 通过分离 ​​元数据解析​​ 与 ​​物理安装​​,实现了高效、可靠的软件包管理。其核心在于:​​依赖自动化​​(基于元数据)和 ​​事务原子性​​(保障系统稳定),是 Linux 系统中解决 RPM 依赖问题的核心工具

搭建私有yum仓库(base, epel源)给另一个虚拟机使用

服务器端操作
1.首先,确保服务器上安装了用于创建 YUM 仓库和提供 HTTP 服务的相关软件。

sudo yum install -y createrepo httpd yum-utils

2.启动并设置 HTTP 服务开机自启

sudo systemctl start httpd
sudo systemctl enable httpd

3.为了让客户端能够访问服务器的 HTTP 服务,需要确保防火墙开放了 80 端口,并且 SELinux 不会阻止该服务。

sudo firewall-cmd --add-service=http --permanent
sudo firewall-cmd --reload

4.创建仓库目录

sudo mkdir -p /var/www/html/yum/base
sudo mkdir -p /var/www/html/yum/epel

5.使用 reposync 工具从官方源同步软件包到本地仓库目录。

sudo reposync -g -l -m --repoid=base --newest-only --download-metadata -p /var/www/html/yum/base
sudo reposync -g -l -m --repoid=epel --newest-only --download-metadata -p /var/www/html/yum/epel

这一步如果操作失败需要下载yum-utils

sudo yum install -y yum-utils
  1. 创建仓库元数据
sudo createrepo -v /var/www/html/yum/base
sudo createrepo -v /var/www/html/yum/epel

客户端操作

  1. 配置客户端 YUM 源
    如图

vim /etc/yum.repos.d/private.repo

[base]
name=Base Repository
baseurl=http://10.0.0.15/yum/base   #此处填写服务器的ip地址
enabled=1
gpgcheck=0
[epel]
name=EPEL Repository
baseurl=http://10.0.0.15/yum/epel
enabled=1
gpgcheck=0

2.清理并更新客户端yum缓存

sudo yum clean all
sudo yum makecache

6. 简要总结apt的工作原理

  1. 配置读取
    apt 启动时会读取 /etc/apt/sources.list 文件以及 /etc/apt/sources.list.d/ 目录下的配置文件,这些文件定义了软件源的信息,包括源的类型(如 deb 表示二进制包,deb-src 表示源代码包)、源的 URL、所支持的软件包架构(如 amd64、i386 等)和发行版代号(如 jammy 对应 Ubuntu 22.04)。同时,也会读取 /etc/apt/apt.conf 及其子目录中的配置文件获取全局配置。
  2. 元数据获取
    依据配置文件中的源信息,apt 从软件源服务器下载元数据。元数据包含了软件包的基本信息,像包名、版本号、依赖关系、描述信息、下载地址等。这些元数据会被存储在本地 /var/lib/apt/lists/ 目录中,以便后续查询和使用。执行 apt update 命令时,就会更新这些元数据。
  3. 依赖解析
    当用户执行软件包的安装、更新或删除操作时,apt 会根据本地存储的元数据进行依赖关系解析。它会找出满足用户请求且不会产生冲突的软件包组合。例如,若要安装软件 A,而 A 依赖软件 B 和 C,apt 会确保 B 和 C 也被安装,并且版本兼容。
  4. 软件包下载与安装
    确定好要操作的软件包后,apt 从软件源服务器下载这些软件包到本地 /var/cache/apt/archives/ 目录。下载完成后,apt 会对软件包进行完整性检查,然后将软件包解压并安装到系统的指定位置。安装过程中,会更新系统的软件包数据库,记录软件包的安装状态和相关信息。
  5. 事务处理
    apt 采用事务处理机制来保证软件包操作的原子性。在执行软件包操作前,apt 会规划整个事务,检查所有操作是否可行。如果操作过程中出现问题,apt 可以进行回滚,保证系统的稳定性。例如,在安装多个软件包时,如果其中一个软件包安装失败,apt 会尝试撤销之前已经完成的部分安装操作。

7. 编译安装课程演示的软件进行步骤总结

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

时间戳 全称 触发条件 典型操作示例
atime Access Time 文件被​​读取​​(如 cat、less、vim 打开文件) cat example.txt
mtime Modify Time 文件​​内容被修改​​(如编辑保存) vim example.txt
ctime Change Time 文件​​元数据被修改​​(如权限、所有者、链接数变化)或​​内容被修改​​ chmod 644 example.txt
查看文件时间戳
ls -l filename       # -l 选项用于以长格式显示文件信息,默认显示 mtime。
ls -lu filename      # -u 选项用于显示 atime。
ls -lc filename      # -c 选项用于显示 ctime
stat filename        # stat 命令可以更详细地显示文件的所有时间戳信息

修改文件时间戳

touch -d "2024-01-01 12:00:00" filename     # -d 选项:使用日期字符串指定时间。
touch -t 202401011200 filename              # -t 选项:使用 [[CC]YY]MMDDhhmm[.ss] 格式指定时间。

9. 总结find和xargs的用法

find

find 命令用于在指定目录及其子目录中搜索符合条件的文件或目录,支持根据文件名、类型、时间、大小、权限等条件筛选。
基本语法

find [搜索路径] [条件表达式] [操作动作]
  • ​​路径​​:搜索的起始目录(默认当前目录 .)。
  • ​​选项​​:控制搜索行为(如 -type, -name)。
  • ​​表达式​​:组合条件(如 -mtime, -size)。
find . -name "*.txt"          # 查找当前目录下所有 .txt 文件  
find /var/log -name "t*"  # 查找 /var/log 下以 t 开头的文件 
  • -iname "模式":不区分大小写的文件名匹配。
  • -path "路径模式":按文件路径匹配(支持通配符)。
find . -path "./src/*"        # 查找当前目录下 src 子目录中的所有文件  
find . -path "*/test/*" -prune  # 排除 test 目录(配合 -prune,见下文)  

-regex "正则表达式":按正则表达式匹配文件名或路径(完全匹配)。

find . -regex "^.*/\(src\|include\)/.*\.h$"  # 匹配 src 或 include 目录下的 .h 文件  

按大小筛选​

find /data -size +100M        # 查找大于 100MB 的文件
find . -size -1k              # 查找小于 1KB 的文件

按文件类型筛选

  • f:普通文件
  • d:目录
  • l:符号链接
  • b:块设备文件
  • c:字符设备文件
  • s:套接字文件
  • p:管道文件
find /etc -type d     # 查找目录
find /usr/bin -type l # 查找符号链接

xargs

xargs 用于将标准输入的多行文本转换为命令行参数,解决命令行参数长度限制和特殊字符问题。
基本语法

命令 | xargs [选项] [要执行的命令]
选项 说明
-I {} 指定占位符 {},替换为输入参数(默认追加到命令末尾)
-n N 每次传递 N 个参数(默认全部)
-P N 并行执行 N 个进程(加速处理)
-0 输入以空字符分隔(处理含空格/特殊字符的文件名)
-d '\n' 指定分隔符为换行符(默认空格)
典型用法​
find . -name "*.log" | xargs rm                       # 删除所有 .log 文件
find . -name "*.txt" | xargs -P 4 gzip                # 并行压缩 4 个文件
find . -name "*.old" | xargs -I {} mv {} {.}.new      # 批量重命名文件

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

Linux 压缩工具分为两类:​​单文件压缩工具​​(仅压缩单个文件)和​​归档压缩工具​​(打包多个文件并压缩)。以下是常用工具的特性对比:

工具 扩展名 压缩率 速度 特点 适用场景
gzip .gz 中等 仅压缩单个文件,速度快 日常文件快速压缩
bzip2 .bz2 压缩率高于 gzip,速度较慢 需节省存储空间时
xz .xz 极高 极慢 压缩率最高,资源消耗大 长期存储或带宽敏感场景
zip .zip 中等 支持多文件压缩,跨平台兼容 Windows/Linux 交互
tar .tar 仅打包不压缩,需配合其他工具 批量文件归档

单文件压缩工具​

  1. gzip​
    压缩单个文件(不支持目录,需配合 tar 打包目录),生成 .gz 格式文件。
    -c :输出到标准输出(不删除原文件)
    -d :解压缩
    -v :显示压缩 / 解压缩过程信息
    -k :保留原文件
    -# :设置压缩级别(-1 最快,压缩率最低;-9 最慢,压缩率最高,默认 -6)

压缩

gzip file.txt          # 生成 file.txt.gz,原文件被删除
gzip -k file.txt       # 保留原文件(-k 选项)
gzip -c 文件名 > 压缩名.gz # 压缩并保留原文件(输出到指定文件)

解压

gzip -d 文件名.gz              # 解压缩后删除压缩文件,生成原文件
gzip -dk 文件名.gz             # 解压缩并保留压缩文件
gzip -c -d 文件名.gz > 解压缩名 # 解压缩到指定文件(不删除压缩文件)
  1. bzip2​
    压缩单个文件(不支持目录,需配合 tar),生成 .bz2 格式文件,压缩率高于 gzip。
    -c :输出到标准输出(不删除原文件)
    -d : 解压缩
    -v : 显示详细信息
    -k : 保留原文件
    -# : 压缩级别(-1 最快,-9 最慢,默认 -9)

压缩

bzip2 [选项] 文件名          # 压缩后删除原文件,生成 文件名.bz2
bzip2 -k 文件名             # 压缩后保留原文件

解压

bzip2 -d 文件名.bz2         # 解压缩后删除压缩文件
bzip2 -dk 文件名.bz2        # 解压缩并保留压缩文件
  1. tar(打包工具,常结合压缩工具)
    打包目录或多个文件(本身不压缩,需结合 gzip/bzip2/xz 压缩),生成 .tar.gz、.tar.bz2、.tar.xz 等格式。
    | 打包 | -c 创建压缩包
    | 解包 | -x 解压缩包
    | 查看 | -t 查看压缩包内容
    | 压缩格式 | -z 调用 gzip 压缩(对应 .tar.gz)
    | -j | 调用 bzip2 压缩(对应 .tar.bz2)
    | -J | 调用 xz 压缩(对应 .tar.xz)
    | 文件名 | -f 指定压缩包名称(需紧跟在选项后)
    | 其他 | -v 显示详细过程
    | -C 目录 | 解压缩到指定目录(默认当前目录)
    | -P | 保留文件绝对路径(谨慎使用,可能有安全风险)
    gzip 压缩(.tar.gz):
tar -czvf 压缩包名.tar.gz 目标目录/

bzip2 压缩(.tar.bz2)

tar -cjvf 压缩包名.tar.bz2 目标目录/

解压缩并解压包
解 .tar.gz:

tar -xzvf 压缩包名.tar.gz [-C 目标目录]

解 .tar.bz2:

tar -xjvf 压缩包名.tar.bz2 [-C 目标目录]

查看压缩包内容

tar -tvf 压缩包名.tar.gz    # 查看 .tar.gz 内容
tar -tjf 压缩包名.tar.bz2   # 查看 .tar.bz2 内容
tar -tJf 压缩包名.tar.xz    # 查看 .tar.xz 内容

zip/unzip(跨平台压缩工具)
压缩 目录或文件,生成 .zip 格式,支持跨平台(Windows/Linux/macOS)
压缩目录或文件

zip -r 压缩包名.zip 目标目录/  # 压缩目录(必须加 -r)
zip 压缩包名.zip 文件1 文件2   # 压缩多个文件

解压缩 .zip 文件

unzip 压缩包名.zip            # 解压缩到当前目录
unzip 压缩包名.zip -d 目标目录 # 解压缩到指定目录

查看压缩包内容

unzip -v 压缩包名.zip
posted @ 2025-04-21 19:16  晓铧  阅读(89)  评论(0)    收藏  举报