Linux文件管理

目录

  • 一、文件系统层次结构(FHS)
  • 二、文件路径导航
  • 三、文件管理命令
  • 四、链接文件
  • 五、Shell扩展匹配
  • 六、综合练习

一、文件系统层次结构(FHS)

1.1 什么是FHS

FHS(Filesystem Hierarchy Standard):文件系统层次结构标准

  • 采用树形结构组织文件
  • 定义系统中每个区域的用途
  • 规范了Linux文件系统目录结构
  • 避免因不同发行版导致的使用困难

1.2 FHS两层规范

层级范围说明
第一层/ 根目录定义根目录下各目录应存放的内容
第二层/usr 和 /var定义这两个目录的子目录规范

1.3 重要目录说明

目录全称/含义用途
/usrUnix System Resource系统安装的软件、共享库
/etc-系统配置文件
/varvariable(可变数据)日志、缓存、数据库等动态数据
/home-普通用户主目录
/root-管理员root主目录
/tmptemporary临时文件(10天未使用自动删除)
/var/tmp-临时文件(30天未使用自动删除)
/boot-开机启动所需文件
/devdevice设备文件
/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 file2cp file1 file2 file3 dir
移动文件mv file1 file2mv file1 file2 file3 dir
删除文件rm file1rm file1 file2 file3
创建目录mkdir dirmkdir -p dir1/dir2/dir3
复制目录cp -r dir1 dir2cp -r dir1 dir2 dir3 dir4
移动目录mv dir1 dir2mv dir1 dir2 dir3 dir4
删除目录rm -r dir1 或 rmdir dir1rm -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. 创建三个子目录:Music、Pictures、Videos
  2. 创建文件:
    • songX.mp3(X=1到6)
    • snapX.jpg(X=1到6)
    • filmX.avi(X=1到6)
  3. 将文件移动到对应目录
  4. 创建三个子目录:friends、family、work
  5. 复制序号1-2的文件到friends
  6. 复制序号3-4的文件到family
  7. 复制序号5-6的文件到work
  8. 复制family和friends到/tmp
  9. 删除family和friends
  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. 文件管理命令:cp、mv、rm、mkdir、rmdir
  4. 链接文件:区分软链接和硬链接
  5. Shell扩展匹配:使用*、?、[]、{}提高操作效率

最佳实践

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

常见错误

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

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

更多推荐