Linux 命令行文件管理完全指南
本文整理自 Linux 系统管理课程笔记,涵盖文件系统层次结构、路径导航、文件管理命令、链接以及 Shell 通配符等内容。适合 Linux 初学者参考学习。
一、文件系统层次结构(FHS)
Linux 遵循开源协议,任何人都可以根据 Linux 核心代码制作和发行自己的版本。如果每个人都按自己喜好随意在/目录下创建目录、存放文件,将导致不同 Linux 系统之间无法互通。为了解决这个问题,FHS(Filesystem Hierarchy Standard,文件系统层次结构标准)应运而生。
FHS 采用树形结构组织文件,定义了两层规范:
- 第一层:定义
/下面各个目录应该存放什么文件数据。例如/etc放置配置文件,/bin与/sbin放置可执行文件等。 - 第二层:针对
/usr和/var的子目录进行定义。例如/var/log放置系统日志文件,/usr/share放置共享数据等。
小贴士:USR 是 Unix System Resource 的缩写,不是 user 的简写。
常见目录及用途
| 目录 | 用途 |
|---|---|
/usr | 系统安装的软件、共享的库。含/usr/bin(用户命令)、/usr/sbin(系统管理命令)、/usr/lib(库文件)、/usr/local(本地自定义软件) |
/etc | 系统配置文件 |
/var | 可变数据,在系统启动之间保持永久性,如数据库、缓存、日志、网站内容 |
/run | 本次系统启动以来运行中进程的运行时数据,包括 PID 文件和锁文件。重启时重新创建 |
/home | 普通用户存储个人数据和配置文件的位置,如/home/laoma |
/root | 管理员 root 的主目录 |
/tmp | 全局可写的临时文件空间,10 天内未访问的文件会被自动删除 |
/boot | 开机启动过程所需的文件 |
/dev | 设备文件,供系统用于访问硬件 |
二、文件路径导航
2.1 路径类型
- 绝对路径:以根
/开头的完整路径,精确指定文件位置。 - 相对路径:不以
/开头,相对于当前工作目录的路径。 - 当前工作路径:当前所处的位置,用
pwd查看。
💡什么时候用绝对路径,什么时候用相对路径?
一般情况怎么方便怎么来。但在变量定义文件路径时,尽量使用绝对路径,避免因工作目录变化导致路径失效。
2.2cd— 切换目录
# 查看当前工作目录[laoma@centos7 ~]$pwd/home/laoma# 切换到绝对路径[laoma@centos7 ~]$cd/usr/bin[laoma@centos7 bin]$pwd/usr/bin# 切换到另一个目录[laoma@centos7 bin]$cd/usr/share/doc[laoma@centos7 doc]$pwd/usr/share/doc# cd - 返回上一次所在目录[laoma@centos7 doc]$cd- /usr/bin# cd 或 cd ~ 返回家目录[laoma@centos7 bin]$cd[laoma@centos7 ~]$pwd/home/laoma# cd .. 进入上一级目录(父目录)[laoma@centos7 ~]$cd..[laoma@centos7 home]$pwd/home# . 代表当前目录[laoma@centos7 ~]$file./.bash_history# 等价于 file .bash_history# 使用相对路径切换[laoma@centos7 ~]$cd/usr/share/doc/at-spi2-core-2.28.0/[laoma@centos7 at-spi2-core-2.28.0]$cd../../[laoma@centos7 share]$pwd/usr/share# 从 /usr/share 切换到 /etc/yum[laoma@centos7 share]$cd../../../../etc/yum[laoma@centos7 yum]$pwd/etc/yum2.3ls— 列出目录内容
# -1 单列格式展示[laoma@centos7 ~]$ls-1公共 模板 视频 图片 文档 下载 音乐 桌面# -R 递归查看子目录[laoma@centos7 ~]$ls-R/etc/yum# -l 长列表格式,查看文件详细信息[laoma@centos7 ~]$ls-l/etc/hosts -rw-r--r--.1root root19711月314:35 /etc/hosts# -r 反向排序[laoma@centos7 ~]$ls-rl# -t 按修改时间排序(最新的在前)[laoma@centos7 ~]$ls-tl# -d 只查看目录本身,而非目录内容[laoma@centos7 ~]$ls-ld/etc/yum drwxr-xr-x.6root root10012月1310:42 /etc/yum2.4tree— 树形查看目录结构
# 安装 tree 工具[root@centos7 ~]# yum install -y tree[laoma@centos7 ~]$ tree /etc/yum /etc/yum ├── fssnap.d ├── pluginconf.d │ ├── fastestmirror.conf │ └── langpacks.conf ├── protected.d │ └── systemd.conf ├── vars │ ├── contentdir │ └── infra └── version-groups.conf4directories,6files2.5stat— 查看文件元数据
[laoma@centos7 ~]$stat/etc/fstab 文件:"/etc/fstab"大小:541 块:8 IO 块:4096 普通文件 设备:fd00h/64768d Inode:67160130 硬链接:1 权限:(0644/-rw-r--r--)Uid:(0/ root)Gid:(0/ root)最近访问:2022-12-1411:09:49.628179033 +0800 最近更改:2022-12-1310:38:44.625179973 +0800 最近改动:2022-12-1310:53:38.563774524 +0800 创建时间:-2.6touch— 更新时间戳 / 创建空文件
# 更新已有文件的时间戳[laoma@centos7 ~]$touchzhang.txt# 文件不存在时,创建空文件[laoma@centos7 ~]$touchnewfile.txt# -c 文件不存在时不创建[laoma@centos7 ~]$touch-cnoexist.txt# 不会创建任何文件三、命令行管理文件
命令速查表
| 操作 | 单一来源 | 多来源 |
|---|---|---|
| 复制文件 | cp file1 file2 | cp file1 file2 file3 dir |
| 移动文件 | mv file1 file2 | mv file1 file2 file3 dir |
| 删除文件 | rm file1 | rm file1 file2 file3 |
| 创建目录 | mkdir dir | mkdir -p dir1/dir2/dir3 |
| 复制目录 | cp -r dir1 dir2 | cp -r dir1 dir2 dir3 dir4 |
| 移动目录 | mv dir1 dir2 | mv dir1 dir2 dir3 dir4 |
| 删除目录 | rm -r dir1/rmdir dir1 | rm -rf dir1 dir2 dir3 |
3.1mkdir— 创建目录
# 创建单个目录[laoma@centos7 ~]$mkdirlab# 同时创建多个目录[laoma@centos7 ~]$mkdirlab1 lab2# -p 递归创建多级目录[laoma@centos7 ~]$mkdir-pdir1/dir2/dir3/dir4[laoma@centos7 ~]$ tree dir1 dir1 └── dir2 └── dir3 └── dir43.2cp— 复制文件和目录
# 复制文件到当前目录[laoma@centos7 lab]$cp/etc/hosts.# 复制并重命名[laoma@centos7 lab]$cp/etc/hosts ./hosts-1# -i 覆盖前询问确认[laoma@centos7 lab]$cp-i/etc/hosts ./hosts-1 cp:是否覆盖"./hosts-1"?yes# 复制多个文件到目录(目标必须是目录)[laoma@centos7 lab]$cp/etc/passwd /etc/hosts.allow.# -r 递归复制目录[laoma@centos7 lab]$cp-r/etc/yum.[laoma@centos7 lab]$cp-r/etc/yum ./yum-1# 注意:目标存在同名目录时,源目录会被放入目标目录下,而非覆盖[laoma@centos7 lab]$cp-r/etc/yum ./yum[laoma@centos7 lab]$lsyum fssnap.d pluginconf.d protected.d vars version-groups.conf yum# 多了一个 yum 子目录3.3mv— 移动和重命名
# 移动单个文件[laoma@centos7 lab]$mvhosts-1../lab1# 移动多个文件(目标必须是目录)[laoma@centos7 lab]$mvpasswdhosts /home/laoma/lab1/# 重命名文件(同一目录下移动 = 重命名)[laoma@centos7 lab]$mvhosts.allow hosts.allow-new# 移动目录(不需要 -r)[laoma@centos7 lab]$mvetc../lab1# 同时移动多个目录[laoma@centos7 lab]$mvhome/ yum/ yum-1/../lab13.4rmdir和rm— 删除
# rmdir 只能删除空目录[laoma@centos7 lab]$rmdir../lab2[laoma@centos7 lab1]$rmdiretc rmdir: 删除"etc"失败: 目录非空# 非空目录无法删除!# rm 删除文件[laoma@centos7 lab1]$rmhosts# -f 强制删除,不提示[laoma@centos7 lab1]$rm-fcacerts# -r 递归删除目录及其内容[laoma@centos7 lab1]$rm-ryum# -rf 递归强制删除(谨慎使用!)[laoma@centos7 lab1]$rm-rfetc home/ yum-1/⚠️警告:
rm -rf是 Linux 中最危险的命令之一,删除后无法恢复。执行前请务必确认路径正确!
四、链接:软链接与硬链接
4.1 软链接(Symbolic Link)
软链接类似于 Windows 中的快捷方式,它是一个指向目标文件或目录的特殊文件。
# 查看系统中的软链接[laoma@centos7 ~]$ls-dl/bin lrwxrwxrwx.1root root711月217:32 /bin ->usr/bin# 创建软链接[laoma@centos7 ~]$ln-s/var/tmp/ mytmp[laoma@centos7 ~]$ls-lmytmp lrwxrwxrwx.1laoma laoma911月411:40 mytmp ->/var/tmp/# 通过软链接访问目标内容[laoma@centos7 ~]$lsmytmp# 等价于 ls /var/tmp/# 通过软链接写入,实际写到了目标位置[laoma@centos7 ~]$touchmytmp/myfile[laoma@centos7 ~]$ls/var/tmp/myfile /var/tmp/myfile# 确认文件出现在目标目录中⚠️注意:创建软链接时,目标路径建议使用绝对路径,否则链接可能指向错误位置。
4.2 硬链接(Hard Link)
硬链接就是给同一个数据块起多个文件名。任何一个文件名对文件内容的修改,其他文件名都能看到——因为它们共享同一个 inode。
# 创建硬链接[laoma@centos7 lab]$lnhosts-1 hosts-2# 两个文件的 inode 号完全相同[laoma@centos7 lab]$ls-i1hosts-1 hosts-233554556hosts-133554556hosts-2# 链接计数为 2[laoma@centos7 lab]$ls-lhosts-1 hosts-2 -rw-r--r--.2laoma laoma15811月413:34 hosts-1 -rw-r--r--.2laoma laoma15811月413:34 hosts-2# 修改一个文件,另一个同步变化[laoma@centos7 lab]$echohello world>>hosts-1[laoma@centos7 lab]$cathosts-2# 同样能看到新增内容hello world软链接 vs 硬链接
| 特性 | 软链接 | 硬链接 |
|---|---|---|
| 本质 | 指向路径的指针 | 同一 inode 的不同文件名 |
| 跨文件系统 | ✅ 可以 | ❌ 不可以 |
| 链接目录 | ✅ 可以 | ❌ 不可以 |
| 源文件删除后 | 链接失效(断链) | 数据仍可访问 |
| 类比 | Windows 快捷方式 | 同一个文件多个名字 |
五、Shell 扩展匹配(通配符)
Shell 在执行命令前会对特殊字符进行扩展,这是命令行高效操作的关键。
通配符速查表
| 模式 | 匹配项 |
|---|---|
* | 零个或多个字符组成的任意字符串(不匹配隐藏文件) |
? | 任意单个字符 |
[abc…] | 方括号中的任意一个字符 |
[^abc…]或[!abc…] | 不在括号中的任意一个字符 |
~ | 当前用户的主目录 |
~username | 指定用户的主目录 |
[[:alpha:]] | 任意字母字符 |
[[:lower:]] | 任意小写字母 |
[[:upper:]] | 任意大写字母 |
[[:alnum:]] | 任意字母或数字 |
[[:digit:]]或[0-9] | 0-9 任意单个数字 |
[[:space:]] | 任意空白字符 |
{...} | 匹配列表(花括号扩展) |
5.1*匹配任意字符串
# 匹配 /etc 下所有 ho 开头的文件[laoma@centos7 ~]$ls/etc/ho* /etc/host.conf /etc/hostname /etc/hosts /etc/hosts.allow /etc/hosts.deny# 批量复制[laoma@centos7 ~]$cp/etc/ho* /tmp# 批量删除[laoma@centos7 ~]$rm/tmp/ho*# * 不匹配隐藏文件,匹配隐藏文件需用 .*[laoma@centos7 ~]$ls-d.*5.2?匹配单个字符
# 查看 file- 后跟 1 个字符的文件[laoma@centos7 lab]$lsfile-? file-1 file-2 file-a file-b# 查看 file- 后跟 2 个字符的文件[laoma@centos7 lab]$lsfile-?? file-a1 file-a2 file-ab5.3[]匹配字符集合
# 匹配 a、b、c 中任意一个[laoma@centos7 lab]$lsfile-[abc]file-a file-b# 匹配 1 或 2[laoma@centos7 lab]$lsfile-[12]file-1 file-2# 取反匹配[laoma@centos7 lab]$lsfile-[^12]file-a file-b# 使用字符类[laoma@centos7 lab]$lsfile-[[:digit:]]# 任意数字[laoma@centos7 lab]$lsfile-[[:upper:]]# 任意大写字母[laoma@centos7 lab]$lsfile-[[:lower:]]# 任意小写字母[laoma@centos7 lab]$lsfile-[[:alpha:]]# 任意字母[laoma@centos7 lab]$lsfile-[[:alnum:]]# 任意字母或数字5.4{}花括号扩展
# 匹配列表[laoma@centos7 lab]$lsfile-{a,b,c}# 等价于[laoma@centos7 lab]$lsfile-a file-b file-c# {1..5} 表示范围 1 到 5[laoma@centos7 lab]$lsfile-{1..5}file-1 file-2# 只有 1 和 2,3/4/5 不存在所以报错5.5~家目录扩展
[laoma@centos7 lab]$echo~ /home/laoma[laoma@centos7 lab]$echo~root /root六、实战练习
以下练习覆盖了本文所有知识点,建议在测试环境中动手实践。
基础练习
- 在用户主目录中创建三个子目录:
Music、Pictures和Videos - 分别创建
songX.mp3、snapX.jpg、filmX.avi各 6 个文件(X = 1~6) - 将各类文件移动到对应目录
- 创建
friends、family和work三个子目录 - 将序号 1~2 的文件复制到
friends,3~4 到family,5~6 到work - 复制
family和friends目录到/tmp - 删除
family和friends目录 - 删除
work目录中的所有文件,再删除work目录 - 在家目录下创建
mytmp软链接指向/var/tmp,并验证 - 清理所有练习中创建的文件和目录
参考:使用 Shell 扩展完成
# 创建目录和文件mkdirMusic Pictures Videostouchsong{1..6}.mp3 snap{1..6}.jpg film{1..6}.avi# 批量移动mvson* Music/mvsna* Pictures/mvfil* Videos/# 创建分类目录mkdirfriends family work# 使用 [] 按序号分组复制cpMusic/song[12].mp3 Pictures/snap[12].jpg Videos/film[12].avi friends/cpMusic/song[34].mp3 Pictures/snap[34].jpg Videos/film[34].avi family/cpMusic/song[56].mp3 Pictures/snap[56].jpg Videos/film[56].avi work/# 复制目录到 /tmpcp-rfriends/ family/ /tmp# 清理rm-rffriends/ family/rmwork/*rmdirwork# 创建软链接并验证ln-s/var/tmp mytmplsmytmp/# 最终清理rm-rfMusic Pictures Videos mytmp work总结
本文覆盖了 Linux 命令行文件管理的核心知识:
- FHS规定了 Linux 文件系统的标准目录结构
- 路径导航使用
cd、pwd,配合绝对路径和相对路径 - 文件管理命令
mkdir、cp、mv、rm是日常最常用的命令 - 软链接像快捷方式,硬链接是同一数据的多个名字
- Shell 通配符
*、?、[]、{}让批量操作效率倍增
掌握这些基础命令,是熟练使用 Linux 系统的第一步。建议多在真实环境中动手练习,形成肌肉记忆。
本文整理自 2026.07.15 Linux 系统管理课堂笔记