通配符(Wildcard)
是 Shell 提供的特殊字符 ,用于 匹配文件名或路径名,可以代替一个或多个字符,使得命令能批量操作文件,而无需手动输入每个文件名。
典型用法 *
匹配任意字符
*.txt
→ 匹配所有 .txt
文件
bash
ls *.txt # 列出所有 .txt 文件
rm *.log # 删除所有 .log 文件
a*
→ 匹配以 a
开头的文件
bash
ls a* # 列出所有以 a 开头的文件
*a*
→ 匹配文件名中包含 a
的文件
bash
ls *a* # 列出所有文件名包含 a 的文件
批量删除
bash
rm -v *.tmp # 删除所有 .tmp 文件,并显示删除过程
压缩与解压工具
1. zip
压缩文件/目录
bash
zip 压缩包名.zip 文件1 文件2 ... # 压缩指定文件
zip -r 压缩包名.zip 目录名/ # 递归压缩目录(包含子目录)
常用选项:
-r
:递归压缩(用于目录)。-q
:静默模式(不显示压缩过程)。-e
:加密压缩(需输入密码)。-9
:最高压缩率(速度较慢)。
示例:
bash
zip archive.zip file1.txt file2.txt # 压缩 file1.txt 和 file2.txt
zip -r project.zip my_project/ # 压缩整个目录
zip -e secret.zip confidential.txt # 加密压缩(需输入密码)
2. unzip
解压 .zip
文件
bash
unzip 压缩包名.zip # 解压到当前目录
unzip 压缩包名.zip -d 目标目录 # 解压到指定目录
常用选项:
-d
:指定解压目录。-l
:查看压缩包内容(不解压)。-o
:覆盖已有文件(不提示)。-P 密码
:直接指定密码(不安全,建议手动输入)。
示例:
bash
unzip archive.zip # 解压到当前目录
unzip archive.zip -d ~/extracted/ # 解压到 ~/extracted/
unzip -l archive.zip # 仅查看压缩包内容
tar
(归档与解档 .tar
、.tar.gz
、.tar.xz
等)
1. 归档(打包)
bash
tar -cvf 归档名.tar 文件1 文件2 ... # 打包文件(不压缩)
tar -czvf 归档名.tar.gz 目录名/ # 打包并压缩(gzip 格式)
tar -cjvf 归档名.tar.bz2 目录名/ # 打包并压缩(bzip2 格式)
tar -cJvf 归档名.tar.xz 目录名/ # 打包并压缩(xz 格式)
选项说明:
-c
:创建归档。-v
:显示详细过程。-f
:指定归档文件名。-z
:使用gzip
压缩(.tar.gz
)。-j
:使用bzip2
压缩(.tar.bz2
)。-J
:使用xz
压缩(.tar.xz
)。
示例:
bash
tar -cvf backup.tar /path/to/files/ # 仅打包
tar -czvf backup.tar.gz /path/to/files/ # 打包并用 gzip 压缩
2. 解档(解包)
bash
tar -xvf 归档名.tar # 解包
tar -xzvf 归档名.tar.gz # 解压 .tar.gz
tar -xjvf 归档名.tar.bz2 # 解压 .tar.bz2
tar -xJvf 归档名.tar.xz # 解压 .tar.xz
tar -xvf 归档名.tar -C 目标目录 # 解压到指定目录
选项说明:
-x
:解包。-C
:指定解压目录。
示例:
bash
tar -xzvf backup.tar.gz # 解压 .tar.gz
tar -xvf backup.tar -C ~/extracted/ # 解压到 ~/extracted/
3. 查看归档内容(不解压)
bash
tar -tvf 归档名.tar.gz # 查看 .tar.gz 内容
tar -tjvf 归档名.tar.bz2 # 查看 .tar.bz2 内容
对比总结
工具 | 格式 | 特点 | 典型用途 |
---|---|---|---|
zip |
.zip |
跨平台兼容(Windows/Linux) | 分享文件、加密压缩 |
tar |
.tar |
仅打包,不压缩 | 备份目录结构 |
tar + gzip |
.tar.gz |
高压缩率,通用 | Linux 软件源码分发 |
tar + bzip2 |
.tar.bz2 |
压缩率更高,速度较慢 | 大文件归档 |
tar + xz |
.tar.xz |
最高压缩率,速度最慢 | 发行版镜像文件 |
其他命令
bc
:
- 计算器工具,支持浮点运算。
bash
echo "5 + 3" | bc # 输出 8
反斜杠 \
的作用
-
转义字符 :在 Shell 中,
\
用于取消下一个字符的特殊含义,使其被当作普通字符处理。 -
换行续写 :如果
\
出现在行尾,表示命令未结束,继续到下一行输入。
(1) ls \
(后面有空格或回车)
bash
$ ls \
> # 等待继续输入(可输入路径后回车执行)
(2) ls \
后接特殊字符
bash
ls \* # 查找名为 * 的文件(而不是通配符展开)
ls \?.txt # 查找名为 ?.txt 的文件
- 用途 :当文件名包含
*
、?
、空格等特殊字符时,用\
转义。
uname
命令解析
- 显示系统信息(内核版本、硬件架构等)。
常用选项
选项 | 作用 | 示例输出 |
---|---|---|
-a |
显示所有信息 | Linux mypc 5.15.0-76-generic x86_64 GNU/Linux |
-s |
内核名称(默认) | Linux |
-n |
主机名 | mypc |
-r |
内核版本 | 5.15.0-76-generic |
-m |
硬件架构 | x86_64 |
-o |
操作系统 | GNU/Linux |
history
:
- 查看命令历史,
!n
可重复执行第 n 条命令。
Ctrl+C
:
- 终止当前进程。
Shell
Shell 是什么?
- 用户与内核的中介:接收用户输入的命令,传递给操作系统执行,并返回结果。
- 外壳程序:Linux 默认使用命令行(如 Bash),Windows 有图形化界面(如 Explorer)和命令行(CMD/PowerShell)。
Shell 的核心意义
- a. 命令传递与结果返回 :核心功能,如执行
ls
并显示文件列表。 - b. 保护操作系统 :通过创建子进程执行命令,避免用户误操作直接破坏内核。(例如:
rm /
会被 Shell 提示禁止,除非加--no-preserve-root
)
Shell的感性理解
- 像"智能家居中控系统"的中介
1. 一句话比喻
- Shell 是计算机的"智能家居中控系统":
- 你 (用户)是屋主,通过 语音或手机指令(命令)控制全屋设备。
- 中控系统 (Shell)负责 解析指令,协调家电(内核)执行任务。
- 家电(内核)直接操控硬件(灯光、空调、门锁等),但你不能直接改写电路(危险且复杂)
2. 为什么需要 Shell?
- 想象你住在一栋智能别墅里:
- 直接操控家电电路?
- 你需要懂电工知识,且操作失误可能烧毁设备(系统崩溃)。
- 中控系统(Shell)的作用 :
- 翻译指令:将你的语音"打开客厅灯" → 发送电信号开灯。
- 权限管理 :禁止访客操作保险箱(
chmod
设置文件权限)。 - 自动化场景:一键启动"观影模式"(关灯、开投影仪、调温) = Shell 脚本
- 直接操控家电电路?
3. Shell 的两种"交互模式"
(1) 命令行 Shell(CLI)
-
像专业控制面板:
- 输入精准代码(如
curl -O http://data.zip
下载文件)。 - 例如:用
ffmpeg -i video.mp4 -vf "scale=1280:720" output.mp4
批量压缩视频。
- 输入精准代码(如
(2) 图形化 Shell(GUI)
- 像触屏家居 APP :
- 点击图标控制设备(如拖拽文件到文件夹)。
- 但无法批量设置复杂场景(如每天 7 点拉窗帘、煮咖啡、播新闻)
- 关键差异:
- 命令行适合深度定制(如自定义自动化规则)。 图形界面适合快捷操作(如临时开关灯)。
4. Shell 的"超能力"
(1) 管道(|
)------ 设备联动
-
串联多个家电,像智能场景联动:
bash# 监控摄像头检测到人 → 截图 → 发邮件通知 motion_detect | ffmpeg -i - snapshot.jpg | mail -a snapshot.jpg user@email
(2) 重定向(>
、>>
)------ 数据存储与转发
-
保存日志到文件:
bashsensor_data > log.txt # 温湿度传感器数据存档
-
追加报警记录:
bashecho "ALERT: Window opened at $(date)" >> security.log
(3) 脚本(Script)------ 自动化场景
-
编写"智能家居剧本",一键触发复杂操作:
bash# 离家模式:关灯、锁门、启动监控 lights_off && lock_doors && start_surveillance
5. 为什么 Shell 要"创建子进程"?
想象中控系统执行指令时:
- 不亲自操作设备,而是启动"子程序"控制具体家电。
- 好处 :
- 稳定性:某个家电故障(程序崩溃),不影响其他设备运行。
- 并行控制:同时调节空调温度、播放音乐、扫地机器人工作。
6. Shell 的"智能家居场景"
命令/功能 | 类比智能家居场景 |
---|---|
ps |
查看所有运行中的设备状态(进程列表)。 |
kill |
远程关闭故障家电(终止进程)。 |
cron |
定时任务(如每天 7 点煮咖啡)。 |
sudo |
管理员权限(解锁保险箱或燃气阀)。 |
ssh |
远程控制邻居家的智能设备(服务器)。 |
总结:Shell 的"人设"
- 翻译中枢:将自然语言指令 → 机器可执行操作。
- 安全管家:隔离危险操作,守护系统稳定。
- 自动化引擎:通过脚本实现"一键场景"。
- 并行指挥官:协调多任务高效运行。
Linux 权限深度解析
1. 权限的本质
- 限制人与资源的交互:决定"谁"(用户/用户组)能对"什么资源"(文件/目录)做"何种操作"(读/写/执行)。
2. 用户分类
-
root:超级管理员,几乎无限制(可绕过文件权限)。
-
普通用户 :受权限严格约束,需
sudo
或su
切换身份执行特权操作。bashsu # 切换用户(默认切到 root,环境变量不变) su - user # 完全切换到 user(加载其环境变量)
3. 文件属性与类型
-
查看文件属性 :
ls -l
输出示例:-rwxr-xr-- 1 user group 4096 Jan 1 10:00 file.txt
-
首字符 :文件类型(
-
普通文件,d
目录,l
链接文件等)。 -
后缀名 :Linux 不依赖后缀,但约定俗成(如
.sh
表示脚本)。
-
4. 权限的三元组
权限分组:
- 拥有者(Owner):文件创建者。
- 所属组(Group):共享权限的用户组。
- 其他用户(Others):非拥有者且不在组的用户。
权限字符 :r
(读)、w
(写)、x
(执行),如 rwxr-xr--
表示:
- 拥有者:读、写、执行。
- 组:读、执行。
- 其他:仅读。
5. 修改权限
chmod [选项] 模式 文件/目录
chmod
命令用于更改文件或目录的权限(读、写、执行)。
#### 常用选项:
* `-R`:递归修改目录及其子目录和文件的权限。
* `-v`:显示详细的修改信息。
* `-c`:仅在权限确实更改时显示信息。
#### 权限表示方法:
*
#### 1. **符号模式(ugo +/- rwx)**
* **用户类别**:
* `u`:所有者(user)
* `g`:所属组(group)
* `o`:其他用户(others)
* `a`:所有用户(相当于 `ugo`)
* **操作符**:
* `+`:添加权限
* `-`:移除权限
* `=`:直接设置权限
* **权限类型**:
* `r`:读(read)
* `w`:写(write)
* `x`:执行(execute)
* **常用命令**
* 设置文件权限为 `rw-r--r--`(644):
* chmod 644 文件名
* **组合示例** :
* `7` (4+2+1):读 + 写 + 执行(rwx)
* `6` (4+2):读 + 写(rw-)
* `5` (4+1):读 + 执行(r-x)
* `4`:读(r)
* `2`:写(w)
* `1`:执行(x)
*
##### 2. **数字模式(八进制)**
* 权限用 3 位八进制数表示,分别对应 **所有者** 、**组** 和 **其他用户**。
* 权限值:
* `4`:读(r)
* `2`:写(w)
* `1`:执行(x)
* 给所有者添加执行权限:
*
```
chmod u+x 文件名
```
* 移除其他用户的写权限:
*
```
chmod o-w 文件名
```
* 设置组用户的权限为读写:
*
```
chmod g=rw 文件名
```
6. 权限不足的表现
-
读 :
cat file.txt
提示Permission denied
。 -
写 :
echo "test" > file.txt
失败。 -
执行:运行脚本时提示权限不足。