通配符(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失败。
- 
执行:运行脚本时提示权限不足。