Linux 命令行文件管理完全指南
·
Linux文件管理
目录
- 一、文件系统层次结构(FHS)
- 二、文件路径导航
- 三、文件管理命令
- 四、链接文件
- 五、Shell扩展匹配
- 六、综合练习
一、文件系统层次结构(FHS)
1.1 什么是FHS
FHS(Filesystem Hierarchy Standard):文件系统层次结构标准
- 采用树形结构组织文件
- 定义系统中每个区域的用途
- 规范了Linux文件系统目录结构
- 避免因不同发行版导致的使用困难
1.2 FHS两层规范
| 层级 | 范围 | 说明 |
|---|---|---|
| 第一层 | / 根目录 |
定义根目录下各目录应存放的内容 |
| 第二层 | /usr 和 /var |
定义这两个目录的子目录规范 |
1.3 重要目录说明
| 目录 | 全称/含义 | 用途 |
|---|---|---|
| /usr | Unix System Resource | 系统安装的软件、共享库 |
| /etc | - | 系统配置文件 |
| /var | variable(可变数据) | 日志、缓存、数据库等动态数据 |
| /home | - | 普通用户主目录 |
| /root | - | 管理员root主目录 |
| /tmp | temporary | 临时文件(10天未使用自动删除) |
| /var/tmp | - | 临时文件(30天未使用自动删除) |
| /boot | - | 开机启动所需文件 |
| /dev | device | 设备文件 |
| /run | - | 运行时数据(重启时重新创建) |
1.4 /usr 目录重要子目录
text
/usr/
├── bin/ # 用户命令
├── sbin/ # 系统管理命令
├── lib/ # 通用库文件
├── lib64/ # 64位库文件
└── local/ # 本地自定义软件
二、文件路径导航
2.1 路径类型
| 路径类型 | 说明 | 示例 |
|---|---|---|
| 绝对路径 | 以根/开头 |
/usr/bin/ls |
| 相对路径 | 不以/开头 |
./file.txt |
| 当前路径 | 当前所在位置 | 使用pwd查看 |
2.2 特殊目录表示
| 符号 | 含义 |
|---|---|
. |
当前目录 |
.. |
上一级目录(父目录) |
~ |
当前用户的主目录 |
~username |
指定用户的主目录 |
- |
上一次所在目录 |
2.3 常用导航命令
pwd - 显示当前工作目录
bash
[laoma@centos7 ~]$ pwd
/home/laoma
cd - 切换目录
bash
# 切换到指定目录
cd /usr/bin
# 切换到上一次所在目录
cd -
# 切换到当前用户主目录
cd
cd ~
# 切换到父目录
cd ..
# 使用相对路径
cd ../../etc/yum
2.4 ls 命令常用选项
| 选项 | 说明 | 示例 |
|---|---|---|
-l |
长列表格式显示详细信息 | ls -l /etc/hosts |
-a |
显示所有文件(包括隐藏文件) | ls -a |
-R |
递归查看子目录 | ls -R /etc/yum |
-d |
只查看目录本身 | ls -ld /etc/yum |
-1 |
单列格式展示 | ls -1 |
-r |
反向排序 | ls -rl |
-t |
按时间排序 | ls -tl |
示例输出
bash
[HZ@centos7 ~]$ ls -l /etc/hosts
-rw-r--r--. 1 root root 197 11月 3 14:35 /etc/hosts
# 权限 硬链接数 所有者 组 大小 修改时间 文件名
2.5 tree命令
以树形格式查看目录结构
bash
# 安装tree工具
yum install -y tree
# 使用
[HZ@centos7 ~]$ tree /etc/yum
/etc/yum
├── fssnap.d
├── pluginconf.d
│ ├── fastestmirror.conf
│ └── langpacks.conf
├── protected.d
│ └── systemd.conf
├── vars
│ ├── contentdir
│ └── infra
└── version-groups.conf
4 directories, 6 files
2.6 stat命令
查看文件的元数据属性
bash
[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)
环境:system_u:object_r:etc_t:s0
最近访问:2022-12-14 11:09:49.628179033 +0800
最近更改:2022-12-13 10:38:44.625179973 +0800
最近改动:2022-12-13 10:53:38.563774524 +0800
2.7 touch命令
更新文件时间戳或创建空文件
| 选项 | 说明 |
|---|---|
-a |
只更改访问时间 |
-m |
只更改修改时间 |
-c |
不创建任何文件 |
-d |
使用指定时间 |
-t |
使用指定时间戳 |
bash
# 更新文件时间戳
touch existing_file.txt
# 创建新文件(不存在则创建)
touch new_file.txt
# 不创建文件(-c选项)
touch -c file_not_exist.txt # 不创建
三、文件管理命令
3.1 操作概览
| 操作 | 单一来源 | 多来源 |
|---|---|---|
| 复制文件 | 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.2 mkdir - 创建目录
bash
# 创建单个目录
mkdir lab
# 创建多个目录
mkdir lab1 lab2 lab3
# 级联创建目录(-p选项)
mkdir -p dir1/dir2/dir3/dir4
3.3 cp - 复制文件/目录
复制文件
bash
# 复制到当前目录
cp /etc/hosts .
# 复制并重命名
cp /etc/hosts ./hosts-1
# 使用-i选项提示覆盖
cp -i /etc/hosts ./hosts-1
# 复制多个文件(目标必须是目录)
cp /etc/passwd /etc/hosts.allow .
复制目录
bash
# 使用-r选项递归复制
cp -r /etc/yum .
# 复制并重命名
cp -r /etc/yum ./yum-1
# 目标已存在时,源目录会放入目标目录中
cp -r /etc/yum ./yum
# 结果是 ./yum/yum/
3.4 mv - 移动/重命名文件
bash
# 移动单个文件
mv hosts-1 ../lab1
# 移动多个文件(目标必须是目录)
mv passwd hosts /home/laoma/lab1/
# 重命名文件
mv hosts.allow hosts.allow-new
# 移动单个目录
mv etc ../lab1
# 移动多个目录
mv home/ yum/ yum-1/ ../lab1
3.5 rm - 删除文件/目录
bash
# 删除文件
rm hosts
# 删除多个文件
rm hosts-1 passwd
# 强制删除(-f选项)
rm -f cacerts
# 递归删除目录(-r选项)
rm -r yum
# 递归强制删除(-rf选项)
rm -fr etc
# 删除多个目录
rm -fr home/ yum-1/
3.6 rmdir - 删除空目录
bash
# 只能删除空目录
rmdir empty_dir
# 非空目录会报错
rmdir etc
# 报错: 目录非空
四、链接文件
4.1 软链接(符号链接 Symbolic Link)
特点:
- 相当于Windows中的快捷方式
- 可以跨文件系统
- 可以链接目录
- 删除原文件,链接失效
bash
# 创建软链接
ln -s /var/tmp/ mytmp
# 查看软链接
ls -l mytmp
# 输出: lrwxrwxrwx. 1 laoma laoma 9 11月 4 11:40 mytmp -> /var/tmp/
# 验证链接指向
readlink mytmp
# 输出: /var/tmp/
# 进入软链接目录
cd mytmp
pwd # 显示: /home/laoma/mytmp
4.2 硬链接
特点:
- 多个文件名指向同一个数据块
- 不能跨文件系统
- 不能链接目录
- 删除任何一个,数据依然存在
bash
# 创建硬链接
ln hosts-1 hosts-2
# 查看硬链接
ls -l hosts-1 hosts-2
# -rw-r--r--. 2 laoma laoma 158 11月 4 13:34 hosts-1
# -rw-r--r--. 2 laoma laoma 158 11月 4 13:34 hosts-2
# 注意: 硬链接数显示为2
# 查看inode(相同表示是同一数据)
ls -i1 hosts-1 hosts-2
# 33554556 hosts-1
# 33554556 hosts-2
# 修改任一文件,另一个同步变化
echo hello >> hosts-1
cat hosts-2 # 也会显示hello
4.3 软链接 vs 硬链接
| 特性 | 软链接 | 硬链接 |
|---|---|---|
| 跨文件系统 | ✅ 可以 | ❌ 不可以 |
| 链接目录 | ✅ 可以 | ❌ 不可以 |
| 删除原文件 | ❌ 链接失效 | ✅ 数据仍存在 |
| inode | 不同 | 相同 |
| 文件类型 | l(链接文件) | 普通文件 |
五、Shell扩展匹配
5.1 通配符汇总
| 模式 | 含义 | 示例 |
|---|---|---|
* |
任意长度字符串(不匹配隐藏文件) | *.txt |
? |
单个任意字符 | file-? |
[abc] |
括号中任意一个字符 | file-[abc] |
[^abc] 或 [!abc] |
不在括号中的任意字符 | file-[^0-9] |
~ |
当前用户主目录 | ~/Documents |
~username |
指定用户主目录 | ~root |
{a,b,c} |
大括号扩展(列表) | file-{a,b,c} |
{1..5} |
大括号扩展(范围) | file-{1..5} |
5.2 字符类(POSIX字符类)
| 字符类 | 含义 | 等价 |
|---|---|---|
[[:alpha:]] |
任意字母 | [a-Z] |
[[:lower:]] |
小写字母 | [a-z] |
[[:upper:]] |
大写字母 | [A-Z] |
[[:alnum:]] |
字母或数字 | [a-Z0-9] |
[[:digit:]] |
数字 | [0-9] |
[[:space:]] |
空白字符 | 空格、制表符等 |
[[:punct:]] |
标点符号 | 除空格和字母数字 |
5.3 使用示例
* 通配符
bash
# 匹配所有ho开头的文件
ls /etc/ho*
# 输出: /etc/hosts /etc/hostname /etc/hosts.allow /etc/hosts.deny
# 复制所有匹配的文件
cp /etc/ho* /tmp
# 删除所有匹配的文件
rm /tmp/ho*
? 通配符
bash
# 准备文件
touch file-1 file-2 file-a file-b file-ab file-a1
# 匹配file-后跟1个字符
ls file-?
# 输出: file-1 file-2 file-a file-b
# 匹配file-后跟2个字符
ls file-??
# 输出: file-a1 file-ab
[] 字符类
bash
# 匹配特定字符
ls file-[abc] # file-a file-b
# 匹配数字
ls file-[0-9] # file-1 file-2
# 匹配大写字母
ls file-[[:upper:]] # file-A file-Z
# 取反匹配
ls file-[^12] # file-a file-b
{} 大括号扩展
bash
# 列表形式
ls file-{a,b,c}
# 相当于: ls file-a file-b file-c
# 范围形式
ls file-{1..5}
# 相当于: ls file-1 file-2 file-3 file-4 file-5
# 创建多个文件
touch song{1..6}.mp3
# 创建: song1.mp3, song2.mp3, ..., song6.mp3
# 复制特定范围
cp Music/song{1,2}.mp3 friends/
六、综合练习
6.1 练习要求
在用户主目录中完成以下操作:
- 创建三个子目录:
Music、Pictures、Videos - 创建文件:
songX.mp3(X=1到6)snapX.jpg(X=1到6)filmX.avi(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 - 验证软链接
- 清理所有创建的文件和目录
6.2 完整解决方案(使用Shell扩展匹配)
bash
#!/bin/bash
# 进入用户主目录
cd ~
# 步骤1: 创建三个子目录
mkdir -p Music Pictures Videos
# 步骤2-4: 使用大括号扩展创建文件
touch song{1..6}.mp3
touch snap{1..6}.jpg
touch film{1..6}.avi
# 步骤5-7: 使用通配符移动文件
mv song*.mp3 Music/
mv snap*.jpg Pictures/
mv film*.avi Videos/
# 步骤8: 创建三个新子目录
mkdir -p friends family work
# 步骤9-11: 使用扩展匹配复制文件
# 序号1-2 -> friends
cp Music/song{1,2}.mp3 friends/
cp Pictures/snap{1,2}.jpg friends/
cp Videos/film{1,2}.avi friends/
# 序号3-4 -> family
cp Music/song{3,4}.mp3 family/
cp Pictures/snap{3,4}.jpg family/
cp Videos/film{3,4}.avi family/
# 序号5-6 -> work
cp Music/song{5,6}.mp3 work/
cp Pictures/snap{5,6}.jpg work/
cp Videos/film{5,6}.avi work/
# 步骤12: 复制目录到/tmp
cp -r family friends /tmp/
# 步骤13: 删除 family 和 friends
rm -rf family friends
# 步骤14: 删除 work
rm -f work/*
rmdir work 2>/dev/null || rm -rf work
# 步骤15: 创建软链接
ln -s /var/tmp mytmp
# 验证软链接
ls -l mytmp
readlink mytmp
# 步骤16: 清理所有
rm -f mytmp
rm -rf Music Pictures Videos
rm -rf /tmp/family /tmp/friends
echo "✓ 所有操作完成"
6.3 关键扩展匹配使用
| 操作 | 使用的扩展 | 说明 |
|---|---|---|
| 创建文件 | {1..6} |
批量创建6个文件 |
| 移动文件 | * |
通配符匹配所有文件 |
| 复制文件 | {1,2}、{3,4}、{5,6} |
精确匹配特定序号 |
| 删除文件 | * |
删除work中所有文件 |
6.4 验证命令
bash
# 验证目录结构
tree ~
# 验证软链接
ls -l ~/mytmp
readlink ~/mytmp
# 验证文件数量
ls Music/ | wc -l
ls Pictures/ | wc -l
ls Videos/ | wc -l
总结
核心要点
- FHS规范:了解Linux目录结构标准
- 路径导航:掌握绝对路径、相对路径和特殊目录符号
- 文件管理命令:
cp、mv、rm、mkdir、rmdir - 链接文件:区分软链接和硬链接
- Shell扩展匹配:使用
*、?、[]、{}提高操作效率
最佳实践
- 使用
-i选项防止误覆盖 - 使用
-p选项创建多级目录 - 使用
-r选项递归操作目录 - 使用扩展匹配减少重复输入
- 删除前先确认文件内容
常见错误
| 错误 | 原因 | 解决方法 |
|---|---|---|
cp: 目标不是目录 |
多源复制时目标不是目录 | 确保目标目录存在 |
rm: 无法删除目录 |
删除目录时缺少-r选项 |
使用rm -r或rmdir |
硬链接数 |
不理解inode概念 | 使用ls -i查看inode |
软链接失效 |
原文件被删除 | 检查原文件是否存在 |
更多推荐


所有评论(0)