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 dir1rmdir 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 练习要求

在用户主目录中完成以下操作:

  1. 创建三个子目录:MusicPicturesVideos
  2. 创建文件:
    • songX.mp3(X=1到6)
    • snapX.jpg(X=1到6)
    • filmX.avi(X=1到6)
  3. 将文件移动到对应目录
  4. 创建三个子目录:friendsfamilywork
  5. 复制序号1-2的文件到friends
  6. 复制序号3-4的文件到family
  7. 复制序号5-6的文件到work
  8. 复制familyfriends/tmp
  9. 删除familyfriends
  10. 删除work中所有文件,再删除work目录
  11. 创建软链接mytmp指向/var/tmp
  12. 验证软链接
  13. 清理所有创建的文件和目录

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

总结

核心要点

  1. FHS规范:了解Linux目录结构标准
  2. 路径导航:掌握绝对路径、相对路径和特殊目录符号
  3. 文件管理命令cpmvrmmkdirrmdir
  4. 链接文件:区分软链接和硬链接
  5. Shell扩展匹配:使用*?[]{}提高操作效率

最佳实践

  • 使用-i选项防止误覆盖
  • 使用-p选项创建多级目录
  • 使用-r选项递归操作目录
  • 使用扩展匹配减少重复输入
  • 删除前先确认文件内容

常见错误

错误 原因 解决方法
cp: 目标不是目录 多源复制时目标不是目录 确保目标目录存在
rm: 无法删除目录 删除目录时缺少-r选项 使用rm -rrmdir
硬链接数 不理解inode概念 使用ls -i查看inode
软链接失效 原文件被删除 检查原文件是否存在
Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐