1916 字
10 分钟
Linux:文件与目录管理

Linux 通过一棵从根目录 / 开始的目录树组织文件。路径用于定位对象,文件系统负责保存对象,挂载把文件系统接入目录树。目录不一定对应独立磁盘,设备文件也不是普通数据文件。

目录布局与路径#

常见目录#

FHS 定义常见布局约定,发行版和应用可以存在差异。现代系统常采用 usr merge,例如 /bin 链接到 /usr/bin。

目录用途
/etc系统和服务配置
/home、/root普通用户及 root 的家目录;/root 与根目录 / 不同
/usr用户空间程序、库和共享数据,不是个人文件目录
/usr/local、/opt本机管理的软件、附加软件
/var/log、/var/lib、/var/cache日志、持久状态、可再生成的缓存
/tmp、/run临时数据、运行时状态;不能作为持久存储
/dev块设备、字符设备等设备节点
/proc、/sys进程、内核、设备和驱动信息接口
/boot内核及启动相关文件
/mnt、/media临时挂载、可移动介质,实际位置依发行版而异
/srv本机服务提供的数据,应用不一定默认采用

/tmp 是否清理由系统策略决定,不能假设固定在每次重启时清空。/proc 和 /sys 的许多内容由内核动态生成,修改可写条目可能改变系统行为。

绝对路径与相对路径#

绝对路径从 / 开始,相对路径以当前工作目录为起点。句点表示当前目录,两个句点表示父目录。Bash 中未引用的 ~ 会展开为家目录,而 "~/file" 通常不会展开;需要引用时用 "$HOME/file"。

先确认位置
pwd
pwd -P
ls -lah

pwd 默认可能保留逻辑符号链接路径,pwd -P 显示物理路径。自动化操作用明确路径,并检查 cd 是否成功,避免在错误目录继续执行。

文件类型与元数据#

识别对象#

ls -l 首字符类型
-普通文件
d目录
l符号链接
b、c块设备、字符设备
p、s命名管道、Unix 域套接字

文件扩展名是命名约定,不保证实际内容类型。以句点开头的名称通常被普通 ls 隐藏,这不是权限保护。

查看文件属性
ls -ld /etc /etc/hosts
file /etc/hosts
stat /etc/hosts

file 根据内容及其他信息推测格式,stat 查看大小、权限、所有者、inode 和时间。mtime 是内容修改时间,ctime 是 inode 状态变更时间,不能把 ctime 当作创建时间;atime 的更新受挂载策略影响。创建时间是否可用取决于文件系统和工具支持。

查看与查找#

阅读文本#

需求命令注意
小文件cat /etc/hosts不直接输出未知二进制文件
大文本less app.log/ 搜索,n 继续,q 退出
开头 / 结尾head -n 20 app.log / tail -n 50 app.log先判断数据格式和时间范围
跟踪日志tail -F app.logGNU tail 按文件名跟踪并重试,适合重命名轮转
计数wc -l app.log统计换行符,末尾无换行的记录可能不计入

tail -f 默认跟踪打开的文件描述符;轮转后可能仍观察旧文件。跟踪输出不完整时,应确认日志实际位置及轮转方式。

查找对象#

限制搜索范围
find /var/log -type f -name '*.log'
find /var/log -type f -size +100M
find /var/log -type f -mtime -1

-name 使用文件名通配符,必须引用,防止先由 Shell 展开。GNU find 的 M 以 MiB 为单位并按单位向上取整比较;-mtime -1 表示不足一个 24 小时周期,不是自然日“今天”。权限错误表示未能完整遍历,不应忽略后声称搜索无遗漏。

创建、复制、移动与删除#

常用操作#

操作示例验证
创建目录mkdir -p project/configls -ld 确认层级
创建空文件或更新时间touch project/config/app.confstat;已有内容不会清空
复制文件cp -i app.conf app.conf.bakcmp 或 diff
保留属性复制目录cp -a project project-backup检查内容、所有者和权限
重命名mv -i old.conf new.conf确认新旧路径
删除空目录rmdir empty-dir非空时拒绝删除
删除文件rm -i -- obsolete.txt确认对象确实不再需要

cp 和 mv 的目标是已有目录时,会把源放入该目录,不一定覆盖目录本身。GNU 工具的 — 结束选项解析,适合处理以短横线开头的名称。跨文件系统 mv 需要复制再删除,不应视作原子重命名。

删除与覆盖

rm 通常不经过回收站。递归操作前确认绝对路径、挂载关系和匹配范围,不把 rm -rf 作为默认方式。交互确认不能代替备份;操作前后目录仍可能被其他程序修改。

示例:准备配置副本#

在独立练习目录执行,所有路径都由本次创建的临时目录限定:

创建、复制、修改并核对
demo_dir=$(mktemp -d)
mkdir -p "$demo_dir/config"
printf 'port=8080\n' > "$demo_dir/config/app.conf"
cp -p "$demo_dir/config/app.conf" "$demo_dir/config/app.conf.bak"
printf 'port=9090\n' > "$demo_dir/config/app.conf"
diff -u "$demo_dir/config/app.conf.bak" "$demo_dir/config/app.conf"

预期差异只包含端口变化。diff 返回 1 表示存在差异,不是工具故障;真实配置还需应用自己的检查和重载验证。本例保留临时目录便于检查,不执行自动递归清理。

链接#

硬链接与符号链接#

inode 保存文件元数据并关联数据;目录项把名称关联到 inode。硬链接增加一个指向同一 inode 的名称,符号链接则是保存目标路径的独立对象。

维度硬链接符号链接
创建ln source aliasln -s target link
跨文件系统不支持可以
目录目标一般不允许创建目录硬链接支持
删除一个名称其他硬链接仍能访问目标被删后可能悬空
修改内容所有硬链接看到同一文件变化跟随路径访问目标

相对符号链接的目标以链接所在目录为基准,不是创建时任意工作目录。用 readlink 查看保存的路径,用 readlink -f 解析实际路径;解析成功与文件存在仍应分别确认。

使用时的判断#

多个硬链接不是独立备份。删除所有目录项后,如果进程仍打开文件,空间可能继续占用。符号链接切换也不保证运行中的服务重新读取目标,需按应用机制重载并检查。

挂载与空间定位#

挂载将文件系统接到目录上;原目录已有内容会被遮挡,并未因此删除。不要在未确认挂载成功时把业务数据写入预期挂载点。

确认路径实际使用的文件系统
findmnt -T /var/log
df -hT /var/log
df -i /var/log
du -xhd1 /var/log

df 报告文件系统整体用量,du 汇总可遍历对象占用。GNU du 的 -x 限定同一文件系统。差异可能来自权限、已删除但仍打开的文件、快照、稀疏文件或元数据,不能据此直接认定统计错误。

常见问题#

症状检查与下一步
文件存在但无法读取路径中每一级目录的搜索权限、文件权限、ACL 和安全策略
链接失效readlink,确认相对基准与目标存在性
删除后空间未回收检查打开的已删除文件;按服务机制关闭或重开,不盲目杀进程
写入提示空间不足df -h 与 df -i,区分块空间和 inode
复制后权限异常复制选项、执行身份、目标文件系统是否支持属性

参考资料#

Linux:文件与目录管理
https://tamakara.top/posts/学习笔记/linux文件与目录管理/
作者
魂辛カラ
发布于
2026-09-13
许可协议
CC BY-NC-SA 4.0