1. 文件系统层次结构标准(FHS)
FHS是Linux发行版普遍遵循的目录规范,旨在统一不同发行版的文件布局,便于用户和管理员跨系统操作。FHS定义了根目录 / 下各子目录的用途,以及部分子目录(如 /usr、/var)的进一步结构。遵循FHS有助于保持系统的组织性和兼容性。
2. 根目录下的主要目录详解
| 目录 | 用途说明 |
|---|---|
| /bin | 存放基本的用户命令二进制文件 ,如 ls、cp、mv 等。这些命令在单用户模式或修复系统时也必须可用,因此 /bin 通常独立于 /usr 分区。现代发行版常将 /bin 符号链接到 /usr/bin。 |
| /boot | 包含引导加载器使用的文件 ,如 Linux 内核、initrd/initramfs 映像和引导配置(如 grub 配置)。这个目录通常很小,有时可单独分区。 |
| /dev | 设备文件 所在目录。Linux将硬件设备(如硬盘、终端、USB)和虚拟设备(如 /dev/null、/dev/random)抽象为文件,便于通过文件I/O操作访问。 |
| /etc | 存放系统全局配置文件 。包括网络配置、用户账户信息(passwd、shadow)、软件服务配置(如 nginx.conf)等。该目录下的文件多为文本格式,直接编辑即可修改系统行为。 |
| /home | 普通用户的家目录 父目录。每个用户通常在此拥有一个以其用户名命名的子目录(如 /home/alice),用于存放个人文件、配置和程序数据。 |
| /lib | 存放系统启动和根文件系统中程序所需的基本共享库 和内核模块。包括 C 库(如 libc.so)、动态链接器以及内核模块(/lib/modules)。现代发行版常将 /lib 与 /usr/lib 合并。 |
| /media | 可移动媒体的挂载点 。当插入U盘、光盘等设备时,系统通常会自动挂载到此目录下的子目录(如 /media/cdrom)。 |
| /mnt | 临时手动挂载点。管理员可以临时将文件系统挂载到此目录进行维护操作,之后应卸载。 |
| /opt | 可选的应用软件包 安装目录。主要用于第三方闭源软件或独立发行的软件包,每个软件通常放在 /opt 下的独立子目录中。 |
| /proc | 虚拟文件系统 ,以文件形式提供内核和进程的实时信息(如进程列表、CPU信息、内存使用)。大部分文件是只读的,部分可用来调整内核参数(如 /proc/sys)。 |
| /root | root用户(超级管理员)的家目录 。注意不要与根目录 / 混淆,它是管理员个人文件的存放位置。 |
| /sbin | 存放系统管理命令 的二进制文件,如 fdisk、ifconfig、reboot 等。这些命令通常只有 root 用户执行,普通用户的 PATH 中可能不包含此目录。 |
| /srv | 存放系统提供的服务数据 ,如 Web 服务器(/srv/www)、FTP 服务器(/srv/ftp)的站点文件。此目录的用途定义较宽泛,许多发行版未强制使用。 |
| /sys | 另一个虚拟文件系统 ,提供比 /proc 更结构化的内核对象(设备、驱动、总线)信息,用于与内核交互,常被硬件管理和电源管理工具使用。 |
| /tmp | 临时文件目录。所有用户均可在此创建临时文件,但文件可能被系统定期清理(有些发行版使用 tmpfs,重启后清空)。 |
| /usr | 用户级应用程序和文件 的第二级层次。它包含只读、可共享的数据,通常独立分区。/usr 下又有若干重要子目录: - /usr/bin:大多数用户命令(非系统启动必需) - /usr/sbin:非启动必需的系统管理命令 - /usr/lib:应用程序的共享库 - /usr/local:本地安装的软件(手动编译安装的程序) - /usr/share:架构无关的共享数据(文档、图标、man手册) - /usr/include:C 头文件,用于开发 |
| /var | 可变数据 目录,存放运行时内容改变的文件,如日志(/var/log)、缓存(/var/cache)、打印队列(/var/spool)、临时文件(/var/tmp)以及数据库文件(如 MySQL 的 /var/lib/mysql)。 |
3. 关键概念补充
3.1 路径表示
-
绝对路径 :从根目录
/开始完整描述文件位置,如/home/alice/docs/note.txt。 -
相对路径 :相对于当前工作目录的路径,不使用
/开头。例如,当前在/home/alice时,docs/note.txt表示同一文件。 -
.和..:.表示当前目录,..表示父目录,常用于路径操作(如cd ..)。
3.2 挂载与卸载
-
Linux文件系统可以动态地将一个设备或分区挂载 到一个目录(挂载点)上,使得该目录成为访问该文件系统的入口。例如,将
/dev/sda1挂载到/boot,则/boot下的文件实际存储在/dev/sda1分区。 -
常用命令:
mount、umount,以及/etc/fstab文件定义开机自动挂载。
3.3 文件类型
-
普通文件 (
-):文本、二进制数据等。 -
目录 (
d):包含其他文件的文件夹。 -
符号链接 (
l):指向另一个文件或目录的快捷方式。 -
设备文件 (
c字符设备,b块设备):如终端、硬盘。 -
管道文件 (
p)和套接字文件 (s):用于进程间通信。
3.4 权限与所有权
-
每个文件都有所有者 (user)、所属组 (group)和其他用户(others)的读(r)、写(w)、执行(x)权限。
-
目录的执行权限允许进入该目录,读取权限允许列出内容。
-
权限管理命令:
chmod、chown、chgrp。
3.5 硬链接与符号链接
-
硬链接:多个文件名指向同一个 inode(文件数据块),删除一个链接不影响其他链接。硬链接不能跨文件系统,也不能用于目录。
-
符号链接(软链接):一个特殊的文件,内容指向另一个文件或目录的路径。类似于快捷方式,可跨文件系统,支持目录。
4. 当前工作目录:pwd
作用:显示当前所在的目录(绝对路径)。
常用选项:
-
-L:显示逻辑路径(若使用了符号链接,则显示链接路径,默认) -
-P:显示物理路径(显示实际路径,解析所有符号链接)
5. 切换目录:cd
作用:改变当前工作目录到指定路径。
语法:
cd [目录]
常用用法:
-
cd /绝对路径:切换到绝对路径 -
cd 相对路径:切换到相对路径(相对于当前目录) -
cd ..:切换到上一级目录 -
cd ~或cd:切换到当前用户的家目录 -
cd -:切换到上一次所在的目录(类似"后退")
示例:
$ pwd
/home/user
$ cd Documents
$ pwd
/home/user/Documents
$ cd /var/log
$ pwd
/var/log
$ cd ~
$ pwd
/home/user
$ cd -
/var/log
6. 列出目录内容:ls
作用:列出目录中的文件和子目录。
语法:
ls [选项] [文件或目录]
常用选项(与目录相关):
| 选项 | 说明 |
|---|---|
-l |
长格式显示,包括权限、链接数、所有者、大小、修改时间 |
-a |
显示所有文件,包括隐藏文件(以.开头) |
-A |
几乎全部显示,但不包括 . 和 .. |
-d |
将目录当作文件处理,显示目录本身信息而非内容 |
-h |
人类可读大小(与 -l 配合使用) |
-R |
递归显示子目录内容 |
-t |
按修改时间排序(最新的在前) |
-S |
按文件大小排序 |
-r |
逆序排序 |
-i |
显示 inode 号 |
--color |
彩色输出(许多发行版默认启用) |
示例
$ ls # 简单列出当前目录
$ ls -l # 详细信息
$ ls -la # 包含隐藏文件的详细信息
$ ls -ld /etc # 只显示 /etc 目录本身的属性
$ ls -lh # 以K/M/G显示文件大小
$ ls -R /usr/share # 递归列出所有子目录内容
目录相关注意事项:
-
使用
ls -d */可以只列出当前目录下的子目录(以斜杠结尾表示目录)。 -
使用
ls -l | grep "^d"可过滤出目录行(每行第一个字符为 d)。
7. 创建目录:mkdir
作用:创建新目录。
语法:
mkdir [选项] 目录名...
常用选项:
-
-p:递归创建父目录(如果父目录不存在则自动创建) -
-m 模式:创建时直接设置权限模式(如 755)
示例:
$ mkdir newdir # 创建单个目录
$ mkdir -p parent/child/grand # 递归创建多级目录
$ mkdir -m 700 private # 创建权限为 drwx------ 的目录
$ mkdir dir1 dir2 dir3 # 同时创建多个目录
注意 :如果不加 -p,父目录不存在时会报错。
8. 删除空目录:rmdir
作用 :删除空目录。
常用选项:
-p:递归删除空父目录(如果父目录也空)
示例:
$ rmdir emptydir # 删除空目录 emptydir
$ rmdir -p a/b/c # 删除 c,若 b 变空则删除 b,以此类推
注意 :目录非空时不能用 rmdir 删除,需用 rm -r。
9. 删除非空目录:rm
作用:递归删除目录及其所有内容。
常用选项:
-
-r或-R:递归删除 -
-f:强制删除,不提示 -
-i:交互式删除,每个文件确认
示例:
$ rm -r olddir # 删除 olddir 及其内部所有内容
$ rm -rf /tmp/cache # 强制删除 cache 目录(谨慎使用!)
10. 复制目录:cp
作用:复制目录及其内容。
语法:
cp [选项] 源目录 目标目录
常用选项:
-
-r或-R:递归复制(必须) -
-a:归档模式,保留权限、时间戳等(等同于-dR --preserve=all) -
-i:覆盖前提示 -
-u:只复制源中更新或目标不存在的文件 -
-v:显示详细过程
示例:
$ cp -r docs/ /backup/ # 将 docs 目录复制到 /backup 下
$ cp -a sourcedir/ destdir/ # 完整复制目录,保留所有属性
$ cp -r /etc/ . # 复制 /etc 目录到当前目录
注意 :目标路径结尾有无 / 会影响行为。通常 cp -r sourcedir/ destdir/ 会将 sourcedir 复制为 destdir/sourcedir。
11. 移动/重命名目录:mv
作用:移动目录到另一位置,或重命名目录。
语法:
mv [选项] 源目录 目标目录
常用选项:
-
-i:交互式,覆盖前提示 -
-u:仅在源比目标新或目标不存在时移动 -
-v:显示过程
示例:
$ mv oldname newname # 重命名目录
$ mv mydir /home/user/ # 移动 mydir 到 /home/user 下
$ mv -i dir1/* dir2/ # 移动 dir1 下所有内容到 dir2,若有重名则提示
注意 :mv 在同一文件系统内只是重命名,速度快;跨文件系统时会复制再删除。
-
-L 层数:限制显示的目录深度 -
-d:只显示目录 -
-f:显示完整路径 -
-h:显示文件大小 -
--dirsfirst:目录优先显示
示例:
$ tree -L 2 # 显示当前目录下两层结构
$ tree -d /etc # 只显示 /etc 下的目录
$ tree -h projects # 显示 projects 目录树并带大小
输出示例:
├── docs
│ ├── guide.txt
│ └── README.md
└── src
├── main.c
└── utils.c
12. 统计目录大小:du
作用:估算文件或目录占用的磁盘空间。
常用选项:
-
-h:人类可读格式(K、M、G) -
-s:只显示总计(汇总) -
-a:显示所有文件(不仅仅是目录) -
-c:最后加上总计 -
--max-depth=N:限制递归深度 -
--exclude=模式:排除匹配的文件
示例:
$ du -sh /home/user # 显示 /home/user 总大小
$ du -h --max-depth=1 /var # 显示 /var 下一级子目录大小
$ du -ah docs/ # 显示 docs 下每个文件大小
输出示例:
4.0K ./docs/note.txt
8.0K ./docs
12K .
13. 查找目录:find
作用:在目录树中查找符合条件的文件或目录。
与目录相关的常用表达式:
-
-type d:查找目录 -
-name "模式":按名称匹配 -
-iname "模式":忽略大小写 -
-empty:查找空目录 -
-size 0:大小为0(也适用于空文件) -
-mtime -7:最近7天内修改过的目录 -
-user 用户名:属于特定用户的目录 -
-perm 755:权限为755的目录
示例:
$ find /home -type d -name "projects" # 查找所有名为 projects 的目录
$ find . -type d -empty # 查找当前目录下的空目录
$ find /var -type d -mtime -3 # 查找 /var 下3天内修改过的目录
$ find / -type d -user alice 2>/dev/null # 查找 alice 拥有的目录,忽略错误
$ find . -type d -exec chmod 755 {} \; # 将当前目录下所有目录权限设为755
14 目录权限与所有权
14.1 查看目录权限
ls -ld 目录名 显示目录权限。目录权限第一位为 d,例如 drwxr-xr-x。
14.2 更改目录权限:chmod
目录的权限意义:
-
读(r):允许列出目录内容(需配合执行权限才能实际访问)。
-
写(w):允许在目录中创建、删除、重命名文件。
-
执行(x) :允许进入目录(
cd)和访问内部文件(路径解析)。
示例:
chmod 755 mydir # 所有者 rwx,组 r-x,其他 r-x
chmod +x mydir # 给所有用户添加进入权限
chmod g-w mydir # 移除组的写权限
chmod -R 644 docs/ # 递归设置 docs 下所有文件为644(目录会变成 drw-r--r--,需单独处理)
递归处理目录和文件权限:通常需要分开设置目录和文件:
find docs -type d -exec chmod 755 {} \;
find docs -type f -exec chmod 644 {} \;
14.3 更改目录所有者:chown
sudo chown user:group mydir # 更改目录所有者和组
sudo chown -R user:group docs/ # 递归更改 docs 及其内容
15.总结
| 命令 | 主要用途 | 常用选项示例 |
|---|---|---|
pwd |
显示当前目录 | pwd -P |
cd |
切换目录 | cd ~, cd - |
ls |
列出目录内容 | ls -la, ls -d */ |
mkdir |
创建目录 | mkdir -p a/b/c, mkdir -m 700 dir |
rmdir |
删除空目录 | rmdir -p a/b/c |
rm -r |
删除非空目录 | rm -rf dir |
cp -r |
复制目录 | cp -a source dest |
mv |
移动/重命名目录 | mv old new |
tree |
树状显示目录 | tree -L 2 -d |
du |
统计目录大小 | du -sh *, du --max-depth=1 |
find |
查找目录 | find . -type d -name "pattern" |
chmod |
修改目录权限 | chmod 755 dir, chmod +x dir |
chown |
修改目录所有者 | chown -R user:group dir |
dirname |
提取路径的目录部分 | dirname /a/b/c |
basename |
提取路径的最后一级 | basename /a/b/c |
pushd/popd |
目录栈切换 | pushd /tmp, popd |