第二周作业
1. 总结通配符,管道,重定向,并且结合示例,添加注释信息
通配符
通配符用于匹配文件名或路径中的字符模式,由 Shell 解析,常用于 ls、cp、rm、mv 等命令。
常用的通配符:
| 符号 | 含义 |
|---|---|
* |
匹配任意数量的字符(包括零个)。 |
? |
匹配单个任意字符。 |
[abc] |
匹配方括号内的任意一个字符(如 a、b、c)。 |
[a-z] |
匹配指定范围内的任意一个字符(如 a 到 z)。 |
[^abc] |
匹配不在方括号内的任意一个字符(取反)。 |
{str1,str2} |
匹配多个逗号分隔的字符串(Shell 扩展,需启用 bash 的 extglob 特性)。 |
示例:
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
- 创建仓库元数据
sudo createrepo -v /var/www/html/yum/base
sudo createrepo -v /var/www/html/yum/epel
客户端操作
- 配置客户端 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的工作原理
- 配置读取
apt 启动时会读取 /etc/apt/sources.list 文件以及 /etc/apt/sources.list.d/ 目录下的配置文件,这些文件定义了软件源的信息,包括源的类型(如 deb 表示二进制包,deb-src 表示源代码包)、源的 URL、所支持的软件包架构(如 amd64、i386 等)和发行版代号(如 jammy 对应 Ubuntu 22.04)。同时,也会读取 /etc/apt/apt.conf 及其子目录中的配置文件获取全局配置。 - 元数据获取
依据配置文件中的源信息,apt 从软件源服务器下载元数据。元数据包含了软件包的基本信息,像包名、版本号、依赖关系、描述信息、下载地址等。这些元数据会被存储在本地 /var/lib/apt/lists/ 目录中,以便后续查询和使用。执行 apt update 命令时,就会更新这些元数据。 - 依赖解析
当用户执行软件包的安装、更新或删除操作时,apt 会根据本地存储的元数据进行依赖关系解析。它会找出满足用户请求且不会产生冲突的软件包组合。例如,若要安装软件 A,而 A 依赖软件 B 和 C,apt 会确保 B 和 C 也被安装,并且版本兼容。 - 软件包下载与安装
确定好要操作的软件包后,apt 从软件源服务器下载这些软件包到本地 /var/cache/apt/archives/ 目录。下载完成后,apt 会对软件包进行完整性检查,然后将软件包解压并安装到系统的指定位置。安装过程中,会更新系统的软件包数据库,记录软件包的安装状态和相关信息。 - 事务处理
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 | 无 | 快 | 仅打包不压缩,需配合其他工具 | 批量文件归档 |
单文件压缩工具
- 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 > 解压缩名 # 解压缩到指定文件(不删除压缩文件)
- bzip2
压缩单个文件(不支持目录,需配合 tar),生成 .bz2 格式文件,压缩率高于 gzip。
-c :输出到标准输出(不删除原文件)
-d : 解压缩
-v : 显示详细信息
-k : 保留原文件
-# : 压缩级别(-1 最快,-9 最慢,默认 -9)
压缩
bzip2 [选项] 文件名 # 压缩后删除原文件,生成 文件名.bz2
bzip2 -k 文件名 # 压缩后保留原文件
解压
bzip2 -d 文件名.bz2 # 解压缩后删除压缩文件
bzip2 -dk 文件名.bz2 # 解压缩并保留压缩文件
- 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

浙公网安备 33010602011771号