Linux目录结构

Linux 采用 单根目录结构(Single Hierarchical Tree),所有文件、设备和分区都挂载在唯一的根目录 / 之下。其目录布局遵循 FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)。

一、 Linux 文件系统的特点

  1. 一切皆文件(Everything is a file)
    • 硬件设备(硬盘、网卡、键盘等)、进程、网络套接字在 Linux 系统中都被抽象为文件进行操作。
  2. 区分大小写(Case-Sensitive)
    • /etc/System/etc/system 是两个完全不同的文件。
  3. 路径分隔符
    • 使用正斜线 /(与 Windows 的反斜线 \ 相反)。
  4. 常见日志与系统文件格式
    • 系统配置文件绝大多数为纯文本格式,可以通过 Vim 等文本编辑器直接读取和修改。

二、 根目录 / 下各核心文件夹作用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
/ (根目录)
├── bin -> usr/bin (基础系统命令)
├── boot (引导加载文件、内核)
├── dev (硬件设备文件)
├── etc (系统配置文件).
├── home (普通用户主目录)
├── lib -> usr/lib (系统动态链接库)
├── media / mnt (可移动设备/临时挂载点)
├── opt (第三方大型软件安装包)
├── proc (虚拟文件系统:内核与进程状态)
├── root (Root 超级管理员主目录)
├── sbin -> usr/sbin (系统管理专用命令)
├── sys (虚拟文件系统:底层硬件与驱动)
├── tmp (临时文件)
├── usr (用户级程序与数据)
└── var (动态变化的数据:日志、数据库等)

1. 用户与程序运行区

  • **/home**:普通用户的主目录(Home Directory)。
    • 每个用户有自己的专属文件夹(如 /home/username),存放个人配置文件、下载文件和文档。
  • **/root**:超级管理员(Root 用户)的主目录。
    • 出于安全考虑,Root 用户的主目录不在 /home/root,而是独立存放在 /root
  • **/tmp**:临时文件目录(Temporary)。
    • 存放系统或应用产生的临时数据。通常系统重启后会自动清空,请勿存放重要数据。

2. 系统配置与硬件管理区

  • **/etc**:系统全局配置文件目录(Editable Text Configuration)。
    • 包含所有系统服务、网络、用户的配置文件(如 /etc/passwd 存放用户账户,/etc/network/interfaces/etc/netplan 存放网络配置)。
  • **/dev**:设备文件目录(Device)。
    • 包含连接到系统的所有硬件设备映射文件。例如:
      • /dev/sda/dev/nvme0n1:第一块硬盘
      • /dev/sda1:硬盘的第一分区
      • /dev/null:黑洞设备(抛弃输入数据)
  • **/media/mnt**:挂载目录(Mount)。
    • **/media**:系统自动挂载移动设备(如 U 盘、光驱、外接硬盘)的默认目录。
    • **/mnt**:系统管理员手动临时挂载其他文件系统的目录(如挂载网盘或额外硬盘)。

3. 可执行命令与库文件区

  • /bin(指向 /usr/bin:存放所有用户皆可执行的基础命令(Binary)。
    • ls, cd, cp, cat, vim 等。
  • /sbin(指向 /usr/sbin:系统管理员专用命令(System Binary)。
    • 存放涉及系统底层管理的命令,通常需要 root 权限(如 fdisk, ifconfig, reboot, iptables)。
  • /lib & /lib64(指向 /usr/lib:动态链接库(Library)。
    • 类似于 Windows 的 .dll 文件,存放 /bin/sbin 中命令运行所需共享库。

4. 系统运行状态与内核区(内存虚拟文件系统)

  • **/proc**:进程与内核状态信息(Processes)。
    • 不占用实际磁盘空间,其内容直接存在于系统内存中。
    • 用于反映当前的内核状态和进程信息。例如 /proc/cpuinfo 显示 CPU 硬件信息,/proc/meminfo 显示内存使用情况,以数字命名的文件夹(如 /proc/1234)代表 PID 为 1234 的进程信息。
  • **/sys**:硬件与驱动系统(System)。
    • /proc 类似,也是内存中的虚拟文件系统,专门组织和展现内核中硬件设备与驱动的结构视图。
  • **/boot**:系统启动引导目录。
    • 存放 Linux 系统启动所需的内核文件(vmlinuz)、Initrd 镜像以及引导加载程序(如 GRUB)的配置文件。

5. 应用软件与动态数据区

  • **/usr**:系统软件资源目录(Unix Software Resources / User Universal Resources)。
    • 类似于 Windows 的 C:\Program Files。通过系统包管理器(如 aptyum)安装的应用软件大部分存放在此处。
    • /usr/bin:大部分应用软件的执行程序。
    • /usr/local:管理员手动从源码编译安装软件的建议默认路径。
  • **/opt**:第三方独立软件包安装目录(Optional)。
    • 适合安装大型静态打包的第三方软件(如 Chrome、Docker、自定义编译软件等)。
  • **/var**:动态变化数据目录(Variable)。
    • 存放系统运行过程中体积不断变化的文件。
    • /var/log:核心日志文件目录(如 syslog, auth.log, nginx/access.log)。
    • /var/www:Web 服务器(如 Nginx, Apache)默认的网页根目录。
    • /var/lib:数据库及服务运行时状态数据(如 MySQL 数据文件)。

Vim编辑器常用命令

vi 编辑器是 Unix 系统最初的编辑器。它使用控制台图形模式来模拟文本编辑窗口,允许查看文件中的行、在文件中移动、插入、编辑和替换文本。

在 GNU 项目将 vi 编辑器移植到开源世界时,他们决定对其作一些改进,由于它不再是以前 Unix 中的那个原始的 vi 编辑器了,开发人员也就将他重命名为 vi improved, 或 vim。

Vim 与普通编辑器的最大区别在于模式切换

模式 进入方式 作用
普通模式 (Normal) 任意模式下按 Esc 光标移动、复制粘贴、快捷删除、触发快捷键(默认模式
插入模式 (Insert) 普通模式下按 i / a / o 正常输入文本
命令行模式 (Command) 普通模式下按 : 保存、退出、搜索替换、显示行号等全局设置
视图模式 (Visual) 普通模式下按 v(字符)/ V(行)/ Ctrl+v(块) 高亮选中文本(类似用鼠标拉框选中)

二、 快速入门:进入与退出

  • vim filename:打开或创建文件
  • :w:保存文件
  • :q:退出
  • :wqZZ:保存并退出
  • :q!:强制退出(不保存修改)

三、 光标高效移动

  • 单词移动
    • w:移动到下一个单词词首
    • b:移动到上一个单词词首
    • e:移动到当前/下一个单词词尾
  • 行内移动
    • 0(数字零):移动到行首
    • ^:移动到行内第一个非空字符
    • $移动到行尾
  • 页与全文移动
    • gg跳转到文件第一行
    • G跳转到文件最后一行
    • <行号>G<行号>gg:跳转到指定行(如 15G 跳到第 15 行)
    • Ctrl + f向下翻页(Forward)
    • Ctrl + b向上翻页(Back)

四、 文本编辑命令(复制、删除、粘贴、撤销)

组合技巧:Vim 命令支持“动词 + 范围/数量”。例如 d2w 代表删除 2 个单词,3yy 代表复制 3 行。

1. 插入文本

  • i:在光标插入
  • a:在光标追加
  • o:在当前行下方另起一行插入
  • O:在当前行上方另起一行插入
  • A:跳转到行尾并进入插入模式

2. 删除与剪切(d / x)

  • x:删除光标处的单个字符
  • dd:删除(剪切)当前行
  • dw:删除从光标到词尾的内容
  • d$D:删除从光标到行尾的内容
  • d0:删除从光标到行首的内容

3. 复制与粘贴(y / p)

  • yy:复制当前行
  • yw:复制一个单词
  • y$:复制光标到行尾
  • p:粘贴到光标之后/下一行
  • P:粘贴到光标之前/上一行

4. 修改与替换(c / r)

  • r:替换当前光标处的单个字符(按 r 后直接输入新字符)
  • cw:更改当前单词(删除单词并自动进入插入模式)
  • cc:清除整行并进入插入模式

5. 撤销与重做

  • u:撤销上一次操作(Undo)
  • Ctrl + r:重做/反撤销(Redo)
  • .(句点):重复上一次编辑动作

五、 查找与替换

1. 当前文件搜索

  • /keyword:向下搜索 keyword
  • ?keyword:向上搜索 keyword
  • n:跳转到下一个匹配项
  • N:跳转到上一个匹配项
  • *:直接搜索光标所在的单词(向下)
  • #:直接搜索光标所在的单词(向上)

2. 全局批量替换(命令行模式)

  • :s/old/new/:替换当前行第一个 oldnew
  • :s/old/new/g:替换当前行所有 oldnew
  • :%s/old/new/g:替换全篇文本中的所有 oldnew
  • :%s/old/new/gc:替换全篇,且每次替换前询问确认

六、 块选择与多行编辑(Visual Block)

在处理代码缩进或多行加注释时极其有用:

  1. 多行同时注释/加字符
    • Ctrl + v 进入块选择模式
    • j/k 选择需要编辑的多行。
    • 按大写 I 进入首部插入模式。
    • 输入你要添加的内容(如 # // )。
    • 按两次 Esc,选中的所有行都会自动补全该内容。
  2. 多行删除
    • Ctrl + v 选中文本块,直接按 d 即可批量删除。

七、 常用环境配置(在命令行模式输入)

  • :set nu:显示行号
  • :set nonu:隐藏行号
  • :set hlsearch:高亮显示搜索结果
  • :noh:取消当前高亮(常用)
  • :set paste:粘贴模式(防止从外部复制代码时缩进错乱)