学习目标

  • 理解本节涉及的核心主题:Linux 基本命令、文件压缩与解压、unzip - 解压缩 ZIP 文件、总结。
  • 掌握重点命令或工具:unzip//home/dev/proc/sys
  • 能够结合示例完成常见操作,并理解关键参数、使用场景与结果差异。
  • 能够识别本节相关的常见风险、易错点或排查思路。

学习重点

  • 主题范围:Linux 基本命令、文件压缩与解压、unzip - 解压缩 ZIP 文件、总结、Linux 文件系统、Linux 文件系统结构
  • 重点命令:unzip//home/dev/proc/sys
  • 学习重点:命令用途、关键参数、典型场景、与相近命令的区别
  • 复习方式:先理解场景,再动手练习,最后对照结果检查

Linux 基本命令

文件压缩与解压

unzip - 解压缩 ZIP 文件

unzip 是用于解压缩 .zip 文件的工具,支持解压整个压缩包或其中的部分文件。

基本用法

命令语法:

unzip [选项] 压缩包名

示例: 解压 documents.zip 到当前目录。

unzip documents.zip

输出示例:

Archive:  documents.zip
  inflating: report.docx
  inflating: summary.txt
常用选项(如 -d, -l
  • -d:指定解压缩到的目标目录。
  • -l:列出压缩包内容而不解压。
  • -o:覆盖现有文件而不提示。
  • -n:不覆盖现有文件,跳过。
  • -j:解压缩时不保留目录结构。

示例 1:将压缩包解压到指定目录

unzip projects.zip -d /home/user/restore_projects

输出示例:

Archive:  projects.zip
   creating: /home/user/restore_projects/projects/
   creating: /home/user/restore_projects/projects/project_alpha/
  inflating: /home/user/restore_projects/projects/project_alpha/main.py
  inflating: /home/user/restore_projects/projects/project_alpha/utils.py
  inflating: /home/user/restore_projects/projects/project_alpha/README.md
   creating: /home/user/restore_projects/projects/project_beta/
  inflating: /home/user/restore_projects/projects/project_beta/app.js
  inflating: /home/user/restore_projects/projects/project_beta/index.html
  inflating: /home/user/restore_projects/projects/project_beta/styles.css

示例 2:列出压缩包内容

unzip -l full_backup.zip

输出示例:

Archive:  full_backup.zip
  Length      Date    Time    Name
---------  ---------- -----   ----
      1024  2024-04-27 10:00   documents/report.docx
       512  2024-04-27 10:01   documents/summary.txt
      2048  2024-04-27 10:02   documents/data.csv
      1024  2024-04-27 10:03   documents/old_reports/report_2020.docx
      1024  2024-04-27 10:04   documents/old_reports/report_2021.docx
      4096  2024-04-27 10:05   projects/project_alpha/main.py
      4096  2024-04-27 10:06   projects/project_alpha/utils.py
       256  2024-04-27 10:07   projects/project_alpha/README.md
      4096  2024-04-27 10:08   projects/project_beta/app.js
      2048  2024-04-27 10:09   projects/project_beta/index.html
      1024  2024-04-27 10:10   projects/project_beta/styles.css
---------                     -------
     15360                     12 files
解压部分文件

示例场景: 仅解压 README.md 文件。

unzip projects.zip projects/project_alpha/README.md -d /home/user/restore_projects

输出示例:

  inflating: /home/user/restore_projects/projects/project_alpha/README.md
示例操作

示例 1:解压带密码保护的压缩包

假设 secure_backup.zip 使用密码保护。

unzip secure_backup.zip

操作过程:

系统提示输入密码:

Archive:  secure_backup.zip
[secure_backup.zip] documents/summary.txt password:

输入正确密码后,开始解压。

示例 2:解压时覆盖现有文件

unzip -o documents.zip

解释:

  • -o:覆盖现有文件而不提示。

输出示例:

inflating: report.docx
inflating: summary.txt

示例 3:解压时不保留目录结构

假设压缩包中包含多个目录结构,但只希望将所有文件解压到单一目录。

unzip -j archive.zip -d /home/user/flat_directory

解释:

  • -j:不保留目录结构。
  • -d /home/user/flat_directory:指定目标目录。

输出示例:

inflating: report.docx
inflating: summary.txt
inflating: data.csv
inflating: report_2020.docx
inflating: report_2021.docx

所有文件将被解压到 /home/user/flat_directory,不包含原有的目录层次。

示例:解压带密码保护的压缩包

假设 secure_backup.zip 使用密码保护。

unzip secure_backup.zip

操作过程:

系统提示输入密码:

Archive:  secure_backup.zip
[secure_backup.zip] documents/summary.txt password:

输入正确密码后,开始解压。

示例:解压特定文件并指定目标目录

仅解压 README.md 文件到 /home/user/restore_projects

unzip projects.zip projects/project_alpha/README.md -d /home/user/restore_projects

输出示例:

  inflating: /home/user/restore_projects/projects/project_alpha/README.md

总结

掌握文件压缩与解压工具是高效进行文件管理、传输和备份的基础。以下是基于假设目录结构和文件的具体应用总结:

  • tar:适用于打包和解包多个文件和目录,常与 gzipbzip2 结合使用以实现压缩。
    • 创建压缩包:
      tar -czvf project_alpha.tar.gz /home/user/projects/project_alpha
      
    • 解压缩包:
      tar -xzvf project_alpha.tar.gz
      
    • 查看归档内容:
      tar -tzvf documents_backup.tar.gz
      
  • gzip:用于压缩单个文件,通常与 tar 结合使用。
    • 压缩文件并保留原文件:
      gzip -k /home/user/documents/data.csv
      
    • 解压缩文件:
      gzip -d /home/user/documents/data.csv.gz
      
  • bzip2:提供更高的压缩比,适合需要最大限度压缩的场景。
    • 压缩文件:
      bzip2 /home/user/documents/report.docx
      
    • 解压缩文件并保留压缩文件:
      bzip2 -dk /home/user/documents/report.docx.bz2
      
  • zip:支持压缩多个文件和目录,并提供密码保护功能。
    • 创建带密码保护的压缩包:
      zip -re logs_backup.zip /home/user/logs
      
    • 压缩多个文件和目录:
      zip -r full_backup.zip /home/user/documents /home/user/projects /home/user/logs
      
  • unzip:用于解压缩 .zip 文件,支持解压整个压缩包或其中的部分文件。
    • 解压指定文件到目标目录:
      unzip projects.zip projects/project_alpha/README.md -d /home/user/restore_projects
      
    • 列出压缩包内容:
      unzip -l full_backup.zip
      

Linux 文件系统

Linux 文件系统结构

Linux 文件系统采用树状结构,从根目录 / 开始,向下分支出各种子目录。每个目录都有其特定的用途和重要性。为了更直观地理解文件系统结构,假设我们有以下的目录结构:

假设的目录结构

/
├── bin
├── boot
├── dev
├── etc
│   ├── passwd
│   ├── fstab
│   └── nginx
│       └── nginx.conf
├── home
│   ├── alice
│   │   ├── Documents
│   │   ├── Downloads
│   │   ├── Projects
│   │   │   ├── project_alpha
│   │   │   │   ├── main.py
│   │   │   │   └── utils.py
│   │   │   └── project_beta
│   │   │       ├── app.js
│   │   │       └── index.html
│   │   └── .bashrc
│   └── bob
│       ├── Documents
│       └── .bashrc
├── lib
├── media
├── mnt
├── opt
├── proc
├── root
├── run
├── sbin
├── srv
├── sys
├── tmp
├── usr
│   ├── bin
│   ├── lib
│   └── local
├── var
│   ├── log
│   │   ├── syslog
│   │   └── error.log
│   ├── spool
│   └── www
│       └── html
└── tmp

根目录 /

作用与重要性

根目录 / 是 Linux 文件系统的起点,所有其他目录和文件都是其子节点。它是系统的核心,包含了操作系统运行所需的所有基本文件和目录。根目录下的子目录按照功能和用途进行组织,确保系统的高效运行和管理。

常见子目录概述
  • /bin:包含系统启动和运行时所需的基本命令,如 lscpmv 等。
  • /boot:存放启动加载器和内核文件,如 vmlinuzinitrd.img
  • /dev:设备文件目录,包含系统中的所有设备,如硬盘、终端、打印机等。
  • /etc:系统配置文件目录,存放系统和应用程序的配置文件。
  • /home:用户的主目录,每个用户在此目录下有自己的个人空间。
  • /lib:包含系统和应用程序运行所需的共享库文件。
  • /media:用于自动挂载的可移动媒体设备,如 USB 驱动器、光盘等。
  • /mnt:临时挂载点,用于手动挂载文件系统。
  • /opt:用于安装附加应用程序和软件包。
  • /proc:虚拟文件系统,提供内核和进程的信息。
  • /root:超级用户(root)的主目录。
  • /run:运行时数据目录,存放系统启动后产生的临时文件。
  • /sbin:包含系统管理员使用的基本命令,如 shutdownreboot
  • /srv:存放服务相关的数据,如 Web 服务器的数据文件。
  • /sys:虚拟文件系统,提供系统设备和内核接口的信息。
  • /tmp:临时文件目录,存放临时文件,系统重启后通常会清空。
  • /usr:包含用户应用程序和共享资源,如 /usr/bin/usr/lib
  • /var:可变数据目录,存放日志文件、邮件、打印队列等。

用户目录 /home

每个用户的个人空间

/home 目录是每个普通用户的主目录所在的位置。每个用户在 /home 下都有一个以用户名命名的子目录,作为其个人工作空间。例如,用户 alice 的主目录为 /home/alice,用户 bob 的主目录为 /home/bob

配置文件与隐藏文件

用户主目录中常包含许多隐藏文件和目录,这些文件以点 (.) 开头,存放用户的个性化配置和设置。例如:

  • .bashrc:Bash Shell 的配置文件,包含用户的别名、环境变量等。
  • .ssh/:存放 SSH 相关配置和密钥文件。
  • .config/:应用程序的配置文件目录。
用户主目录结构

以用户 alice 的主目录为例:

/home/alice/
├── Documents
├── Downloads
├── Projects
│   ├── project_alpha
│   │   ├── main.py
│   │   └── utils.py
│   └── project_beta
│       ├── app.js
│       └── index.html
└── .bashrc
  • Documents:存放文档文件。
  • Downloads:存放下载的文件。
  • Projects:存放用户的项目文件,每个项目有自己的子目录。
  • .bashrc:用户的 Bash 配置文件。

系统目录

系统目录包含了操作系统运行所需的核心文件和应用程序。这些目录通常由系统管理员管理,不建议普通用户随意修改。

/bin - 基础命令与可执行文件
基础命令与可执行文件

/bin 目录包含了系统启动和运行时所需的基本命令和可执行文件。这些命令对所有用户都是可用的,且在单用户模式下也能访问。例如:

  • ls:列出目录内容。
  • cp:复制文件和目录。
  • mv:移动或重命名文件和目录。
  • rm:删除文件和目录。
  • cat:连接并显示文件内容。
系统启动与维护

在系统启动过程中,许多基本命令会被使用来配置和检查系统状态。例如,init 进程会调用 /bin 目录下的命令来启动系统服务。

示例:查看 /bin 目录下的内容

ls /bin

输出示例:

bash    cat     chmod   cp      ls      mkdir   mv      rm      sh      sync
/usr - 用户程序与共享资源

/usr 目录包含了用户安装的应用程序和共享资源,通常是只读的,供所有用户共享使用。它进一步分为多个子目录:

  • /usr/bin:存放大多数用户级别的可执行文件。
  • /usr/local:存放本地安装的应用程序,通常由系统管理员自行管理。
  • /usr/share:存放共享的文件,如文档、图标、配置模板等。

示例:查看 /usr/bin 目录下的部分内容

ls /usr/bin | head -n 10

输出示例:

2to3-3.8    ag                awk           basename      bc            bg
bison       bluez-test-device  brctl         bunzip2       bzcat         c99
cal         cat                chmod         chown         cksum         clear
cmp         comm               command       cp            cpio          cpp
/usr/bin 示例操作

示例:查找 grep 命令的位置

which grep

输出:

/usr/bin/grep
/usr/local 示例操作

/usr/local 目录通常用于安装由源代码编译的软件,避免与系统自带的软件发生冲突。

示例:在 /usr/local/bin 安装自定义脚本

sudo cp myscript.sh /usr/local/bin/
sudo chmod +x /usr/local/bin/myscript.sh
/etc - 系统配置文件

/etc 目录存放了系统和应用程序的配置文件。这些文件通常是文本文件,可以手动编辑以更改系统行为。

常见配置文件
  • /etc/passwd:存储用户账户信息。
  • /etc/fstab:文件系统挂载信息。
  • /etc/nginx/nginx.conf:Nginx 服务器配置文件。

示例:查看 /etc/passwd 文件内容

cat /etc/passwd

输出示例:

root:x:0:0:root:/root:/bin/bash
alice:x:1000:1000:Alice:/home/alice:/bin/bash
bob:x:1001:1001:Bob:/home/bob:/bin/bash
/etc/fstab 示例操作

/etc/fstab 文件定义了系统启动时需要自动挂载的文件系统。

示例:查看 /etc/fstab 文件内容

cat /etc/fstab

输出示例:

UUID=123e4567-e89b-12d3-a456-426614174000 / ext4 defaults 0 1
UUID=123e4567-e89b-12d3-a456-426614174001 /home ext4 defaults 0 2
/etc/nginx/nginx.conf 示例操作

配置 Nginx 服务器的行为。

示例:查看 Nginx 配置文件

cat /etc/nginx/nginx.conf

输出示例:

user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;

events {
    worker_connections 768;
}

http {
    include /etc/nginx/mime.types;
    default_type application/octet-stream;
    ...
}
/var - 可变数据目录

/var 目录存放了系统运行过程中产生的可变数据,如日志文件、邮件、打印队列等。

/var/log 示例操作

/var/log 目录存放了系统和应用程序的日志文件,用于监控和调试。

示例:查看系统日志文件 syslog

cat /var/log/syslog

输出示例:

Apr 27 10:00:00 hostname systemd[1]: Started Session 1 of user alice.
Apr 27 10:05:00 hostname CRON[12345]: (root) CMD (run-parts /etc/cron.hourly)
/var/spool 示例操作

/var/spool 目录存放了等待被处理的任务文件,如邮件、打印任务等。

示例:查看打印队列

ls /var/spool/cups/

输出示例:

c0s0
c0s1
c0s2
/var/www 示例操作

/var/www 目录通常用于存放 Web 服务器的网页文件。

示例:查看 Web 服务器根目录内容

ls /var/www/html

输出示例:

index.html
about.html
contact.html

特殊目录

除了常规的系统和用户目录外,Linux 文件系统中还包含了一些特殊目录,这些目录具有特定的功能和用途。

/dev - 设备文件

设备文件

/dev 目录包含了系统中的所有设备文件,这些文件代表了物理设备(如硬盘、终端、打印机)和虚拟设备(如 /dev/null/dev/zero)。设备文件允许用户和程序与硬件设备进行交互。

常见设备文件示例
  • /dev/sda:第一个 SATA 硬盘。
  • /dev/sda1:硬盘上的第一个分区。
  • /dev/null:空设备,所有写入的数据都会被丢弃,读取时返回 EOF。
  • /dev/tty:当前终端设备。
  • /dev/random:提供高质量的随机数生成器。

示例:查看设备文件 /dev/null

ls -l /dev/null

输出示例:

crw-rw-rw- 1 root root 1, 3 Apr 27 09:00 /dev/null
使用 /dev/null 示例

/dev/null 常用于丢弃不需要的输出或作为输入的空设备。

示例 1:丢弃命令的输出

ls /nonexistent_directory > /dev/null 2>&1

说明:

  • 将标准输出 (stdout) 和标准错误 (stderr) 重定向到 /dev/null,使其不在终端显示。

示例 2:从 /dev/null 读取数据

cat /dev/null

输出:

无输出,因为 /dev/null 是一个空设备。

/proc - 虚拟文件系统,提供内核与进程信息

虚拟文件系统

/proc 是一个虚拟文件系统,动态生成,提供了系统内核和正在运行的进程的信息。它不占用实际的磁盘空间,所有内容都是内存中的表示。

常见文件与目录
  • /proc/cpuinfo:CPU 信息。
  • /proc/meminfo:内存信息。
  • /proc/uptime:系统运行时间。
  • /proc/[pid]/:特定进程的信息,其中 [pid] 是进程 ID。

示例:查看 CPU 信息

cat /proc/cpuinfo

输出示例:

processor   : 0
vendor_id   : GenuineIntel
cpu family  : 6
model       : 142
model name  : Intel(R) Core(TM) i7-8550U CPU @ 1.80GHz
stepping    : 10
cpu MHz     : 1992.000
...

示例:查看内存信息

cat /proc/meminfo

输出示例:

MemTotal:       16384256 kB
MemFree:        1234567 kB
MemAvailable:   2345678 kB
Buffers:         345678 kB
Cached:         4567890 kB
...
/proc/[pid]/ 示例操作

每个正在运行的进程在 /proc 目录下都有一个以其进程 ID 命名的子目录,包含了该进程的详细信息。

示例:查看进程 ID 为 1234 的进程信息

cat /proc/1234/status

输出示例:

Name:   bash
State:  S (sleeping)
Tgid:   1234
Pid:    1234
PPid:   567
Uid:    1000    1000    1000    1000
...

/sys - 系统设备与驱动信息

系统设备与驱动信息

/sys 是另一个虚拟文件系统,提供了系统设备和驱动程序的信息以及与之交互的接口。它用于设备管理和配置,允许用户和系统管理员动态调整设备参数。

文件系统接口与设备管理

通过 /sys,可以访问和修改设备属性,监控设备状态。例如:

  • /sys/class/net/:网络接口信息。
  • /sys/block/:块设备信息,如硬盘、SSD 等。
  • /sys/devices/:设备树结构,详细描述系统中的所有设备。

示例:查看网络接口信息

ls /sys/class/net/

输出示例:

eth0
lo
wlan0

示例:查看 eth0 的状态

cat /sys/class/net/eth0/operstate

输出示例:

up
调整设备参数示例

示例:启用或禁用网络接口

禁用 eth0 接口:

echo "0" | sudo tee /sys/class/net/eth0/carrier

启用 eth0 接口:

echo "1" | sudo tee /sys/class/net/eth0/carrier

注意: 直接修改 /sys 中的文件可能会影响系统稳定性,请谨慎操作。


本节总结

  • 本节主要围绕 Linux 基本命令、文件压缩与解压、unzip - 解压缩 ZIP 文件、总结、Linux 文件系统 展开。
  • 需要重点掌握的命令或工具包括:unzip//home/dev/proc/sys
  • 学习时应优先抓住「命令解决什么问题、在什么场景下使用、执行后会产生什么结果」。
  • 对涉及权限、覆盖、网络、系统服务、删除或安全配置的操作,建议先在测试环境练习。

复习建议

  • 先用自己的话复述本节每个主题或命令的作用,避免只记参数不懂用途。
  • 按原文示例至少手敲一遍典型命令,并观察输出变化。
  • 对高风险操作先确认路径、权限和目标对象,再执行实际命令。
  • 可优先复习这些高频命令:unzip//home/dev/proc/sys