mobile wallpaper 1mobile wallpaper 2mobile wallpaper 3mobile wallpaper 4mobile wallpaper 5
2566 字
7 分钟
Linux操作大全(二):文件与目录操作详解
2026-05-25

Linux操作大全(二):文件与目录操作详解#

本文是Linux操作大全系列的第二篇,详细讲解文件和目录的各种操作,每个命令都会解释”是干什么的”、“怎么用”、“有什么注意事项”。


一、文件操作命令#

1.1 创建文件:touch#

功能:创建空文件,或者更新文件的修改时间。

基本语法

touch [选项] 文件名

常用示例

# 创建单个空文件
touch file.txt
# 创建多个空文件
touch file1.txt file2.txt file3.txt
# 创建带空格的文件名(用引号)
touch "my file.txt"
# 更新文件的修改时间(文件已存在时)
touch existing_file.txt

实际应用场景

  • 快速创建一个空的日志文件
  • 批量创建测试文件
  • 更新文件时间戳(用于脚本判断文件是否被修改)

1.2 创建目录:mkdir#

功能:创建新目录(文件夹)。

基本语法

mkdir [选项] 目录名

常用示例

# 创建单个目录
mkdir mydir
# 创建多级目录(-p参数很重要!)
mkdir -p /home/user/projects/2026/code
# 创建多个目录
mkdir dir1 dir2 dir3
# 创建目录并设置权限
mkdir -m 755 mydir

参数说明

  • -p:递归创建目录,如果父目录不存在会自动创建
  • -m:设置目录权限
  • -v:显示创建过程

注意:不加 -p 时,如果父目录不存在会报错:

mkdir /home/user/a/b/c
# 报错:mkdir: cannot create directory '/home/user/a/b/c': No such file or directory
mkdir -p /home/user/a/b/c
# 成功!会自动创建所有缺失的父目录

1.3 删除文件:rm#

功能:删除文件或目录。

基本语法

rm [选项] 文件/目录

常用示例

# 删除单个文件
rm file.txt
# 删除多个文件
rm file1.txt file2.txt file3.txt
# 强制删除(不提示确认)
rm -f file.txt
# 删除目录(必须加 -r)
rm -r mydir
# 强制删除目录(危险!慎用!)
rm -rf mydir
# 删除前提示确认
rm -i file.txt

参数说明

  • -r:递归删除,用于删除目录
  • -f:强制删除,不提示确认
  • -i:删除前提示确认

⚠️ 危险操作警告

# 这条命令会删除整个系统!!!绝对不要执行!!!
rm -rf /
# 这条命令会删除当前目录下所有文件!!!
rm -rf *

安全建议

  1. 删除前先用 ls 确认要删除的内容
  2. 重要文件先备份再删除
  3. 使用 -i 参数,让系统在删除前提示你确认
  4. 不要在根目录 / 下执行 rm -rf

1.4 复制文件:cp#

功能:复制文件或目录。

基本语法

cp [选项] 源文件 目标位置

常用示例

# 复制文件
cp file.txt file_backup.txt
# 复制到另一个目录
cp file.txt /home/user/Documents/
# 复制并重命名
cp file.txt /home/user/Documents/new_name.txt
# 复制目录(必须加 -r)
cp -r mydir mydir_backup
# 保留文件属性(权限、时间等)
cp -p file.txt file_backup.txt
# 覆盖前提示确认
cp -i file.txt /existing/file.txt
# 显示复制过程
cp -v file.txt file_backup.txt

参数说明

  • -r:递归复制,用于复制目录
  • -p:保留文件属性
  • -i:覆盖前提示确认
  • -v:显示复制过程
  • -a:归档复制,等同于 -dpR,保留所有属性

1.5 移动/重命名:mv#

功能:移动文件/目录,或者重命名。

基本语法

mv [选项] 源文件 目标位置

常用示例

# 重命名文件
mv old_name.txt new_name.txt
# 移动文件到另一个目录
mv file.txt /home/user/Documents/
# 移动并重命名
mv file.txt /home/user/Documents/new_name.txt
# 移动目录
mv mydir /home/user/Documents/
# 覆盖前提示确认
mv -i file.txt /existing/file.txt
# 不覆盖已存在的文件
mv -n file.txt /existing/file.txt

参数说明

  • -i:覆盖前提示确认
  • -n:不覆盖已存在的文件
  • -v:显示移动过程

1.6 查看文件内容:cat、less、more、head、tail#

cat命令#

功能:一次性显示整个文件内容。

cat file.txt
# 显示行号
cat -n file.txt
# 合并多个文件
cat file1.txt file2.txt > combined.txt

适用场景:查看小文件(几十行以内)。

less命令#

功能:分页查看文件内容,适合查看大文件。

less large_file.log

操作方式

  • 空格:下一页
  • b:上一页
  • / :上下滚动一行
  • /关键词:搜索关键词
  • n:下一个搜索结果
  • N:上一个搜索结果
  • q:退出

more命令#

功能:类似less,但功能较少。

more file.txt

操作方式

  • 空格:下一页
  • Enter:下一行
  • q:退出

head命令#

功能:查看文件的前几行。

# 默认显示前10行
head file.txt
# 显示前20行
head -n 20 file.txt
# 显示前5行
head -5 file.txt

适用场景:快速查看文件开头,比如查看日志的前几条记录。

tail命令#

功能:查看文件的最后几行,或者实时监控文件变化。

# 默认显示最后10行
tail file.txt
# 显示最后20行
tail -n 20 file.txt
# 实时监控文件变化(非常有用!)
tail -f /var/log/syslog
# 实时监控并显示行号
tail -fn 100 /var/log/syslog

适用场景

  • 查看日志文件的最新内容
  • 实时监控日志输出(tail -f 是运维最常用的命令之一)

1.7 查找文件:find#

功能:在目录树中查找文件。

基本语法

find [搜索路径] [条件] [动作]

常用示例

# 按名字查找
find /home -name "*.txt"
# 忽略大小写
find /home -iname "*.TXT"
# 按类型查找(f=文件,d=目录)
find /home -type f -name "*.log"
find /home -type d -name "logs"
# 按大小查找
find /home -size +100M # 大于100MB
find /home -size -10M # 小于10MB
find /home -size 0 # 空文件
# 按时间查找
find /home -mtime -7 # 7天内修改过的文件
find /home -mtime +30 # 30天前修改过的文件
find /home -mmin -60 # 60分钟内修改过的文件
# 按权限查找
find /home -perm 777 # 权限为777的文件
# 找到后执行动作
find /home -name "*.tmp" -exec rm {} \; # 找到后删除
find /home -name "*.log" -exec ls -l {} \; # 找到后列出详情
find /home -name "*.txt" -exec cp {} /backup/ \; # 找到后备份

1.8 搜索文件内容:grep#

功能:在文件中搜索指定的文本。

基本语法

grep [选项] 搜索内容 文件

常用示例

# 基本搜索
grep "error" logfile.txt
# 忽略大小写
grep -i "error" logfile.txt
# 显示行号
grep -n "error" logfile.txt
# 递归搜索目录下所有文件
grep -r "error" /var/log/
# 显示匹配行的前后几行
grep -B 3 -A 3 "error" logfile.txt # 前3行+后3行
grep -C 5 "error" logfile.txt # 前后各5行
# 反向匹配(显示不包含搜索内容的行)
grep -v "debug" logfile.txt
# 统计匹配行数
grep -c "error" logfile.txt
# 使用正则表达式
grep -E "error|warning" logfile.txt
grep -E "^[0-9]" file.txt # 以数字开头的行

参数说明

  • -i:忽略大小写
  • -n:显示行号
  • -r:递归搜索
  • -v:反向匹配
  • -c:统计行数
  • -E:使用扩展正则表达式
  • -l:只显示包含匹配内容的文件名

二、目录操作命令#

2.1 切换目录:cd#

功能:Change Directory,切换当前工作目录。

常用示例

# 切换到指定目录
cd /home/user/Documents
# 切换到家目录
cd ~
cd
# 切换到上一级目录
cd ..
# 切换到上上一级目录
cd ../..
# 切换到上一次所在的目录(很实用!)
cd -
# 使用绝对路径
cd /var/log
# 使用相对路径
cd Documents
cd ./subdir

2.2 显示当前目录:pwd#

功能:Print Working Directory,显示当前工作目录的完整路径。

pwd

输出示例:

/home/ubuntu/Documents

2.3 列出目录内容:ls#

功能:list,列出目录中的文件和子目录。

常用示例

# 基本列表
ls
# 显示详细信息
ls -l
# 显示隐藏文件(以.开头的文件)
ls -a
# 显示详细信息+隐藏文件
ls -la
# 显示文件大小(人类可读格式)
ls -lh
# 按时间排序(最新的在前)
ls -lt
# 按大小排序(最大的在前)
ls -lS
# 递归显示子目录
ls -R
# 只显示目录
ls -d */
# 显示文件的inode号
ls -i

ls -l 输出详解

-rw-r--r-- 1 ubuntu ubuntu 4096 May 25 10:30 file.txt

各列含义:

  • -rw-r--r--:文件权限(后面会详细讲)
  • 1:硬链接数
  • ubuntu:所有者
  • ubuntu:所属组
  • 4096:文件大小(字节)
  • May 25 10:30:最后修改时间
  • file.txt:文件名

2.4 树状显示目录:tree#

功能:以树状图显示目录结构。

# 安装tree命令(如果没有)
sudo apt install tree
# 显示目录树
tree
# 只显示2层
tree -L 2
# 显示隐藏文件
tree -a
# 只显示目录
tree -d

输出示例:

.
├── Documents
│ ├── file1.txt
│ └── file2.txt
├── Downloads
│ └── image.jpg
└── Pictures
└── photo.png

三、文件权限详解#

3.1 权限的基本概念#

Linux中的每个文件都有三组权限:

  • 所有者(Owner):文件的拥有者
  • 所属组(Group):文件所属的用户组
  • 其他人(Others):除了所有者和组成员以外的人

每组权限包含三种:

  • 读(r):Read,值为4
  • 写(w):Write,值为2
  • 执行(x):eXecute,值为1

3.2 权限表示方法#

字符表示法#

-rwxr-xr--
  • 第1位:文件类型(- 普通文件,d 目录,l 链接)
  • 第2-4位:所有者权限(rwx = 可读可写可执行)
  • 第5-7位:所属组权限(r-x = 可读可执行,不可写)
  • 第8-10位:其他人权限(r— = 只读)

数字表示法#

rwxr-xr-- = 754

计算方法:

  • r = 4
  • w = 2
  • x = 1
  • rwx = 4+2+1 = 7
  • r-x = 4+0+1 = 5
  • r— = 4+0+0 = 4

常见权限组合:

数字字符含义
777rwxrwxrwx所有人可读可写可执行(不安全!)
755rwxr-xr-x所有者可读写执行,其他人可读执行
644rw-r—r—所有者可读写,其他人只读
700rwx------只有所有者可读写执行
600rw-------只有所有者可读写

3.3 修改权限:chmod#

功能:Change Mode,修改文件权限。

常用示例

# 数字方式设置权限
chmod 755 file.sh # rwxr-xr-x
chmod 644 file.txt # rw-r--r--
chmod 700 private_dir # rwx------
# 符号方式设置权限
chmod u+x file.sh # 给所有者添加执行权限
chmod g+w file.txt # 给所属组添加写权限
chmod o-r file.txt # 去掉其他人的读权限
chmod a+r file.txt # 给所有人添加读权限
# 递归修改目录权限
chmod -R 755 /home/user/public
# 参考其他文件的权限
chmod --reference=file1.txt file2.txt

符号说明

  • u:所有者(user)
  • g:所属组(group)
  • o:其他人(others)
  • a:所有人(all)
  • +:添加权限
  • -:去掉权限
  • =:设置权限

3.4 修改所有者:chown#

功能:Change Owner,修改文件的所有者和所属组。

常用示例

# 修改所有者
chown user1 file.txt
# 修改所有者和所属组
chown user1:group1 file.txt
# 只修改所属组
chown :group1 file.txt
# 递归修改目录
chown -R user1:group1 /home/user1

3.5 修改所属组:chgrp#

功能:Change Group,修改文件的所属组。

# 修改所属组
chgrp group1 file.txt
# 递归修改
chgrp -R group1 /home/group1_files

四、文件压缩与解压#

4.1 tar命令#

功能:打包和解包文件(tar本身不压缩,只打包)。

常用示例

# 打包目录
tar -cvf archive.tar /home/user/Documents
# 打包并gzip压缩
tar -czvf archive.tar.gz /home/user/Documents
# 打包并bzip2压缩
tar -cjvf archive.tar.bz2 /home/user/Documents
# 解包
tar -xvf archive.tar
# 解压tar.gz
tar -xzvf archive.tar.gz
# 解压tar.bz2
tar -xjvf archive.tar.bz2
# 解压到指定目录
tar -xzvf archive.tar.gz -C /home/user/backup/
# 查看压缩包内容(不解压)
tar -tzvf archive.tar.gz

参数说明

  • -c:创建(create)
  • -x:解压(extract)
  • -v:显示过程(verbose)
  • -f:指定文件名(file)
  • -z:使用gzip压缩
  • -j:使用bzip2压缩
  • -C:指定解压目录

记忆口诀

  • 压缩:tar -czvf(c=create创建,z=zip压缩,v=verbose显示,f=file文件)
  • 解压:tar -xzvf(x=extract解压)

4.2 gzip / gunzip#

功能:压缩/解压单个文件。

# 压缩文件(会删除原文件)
gzip file.txt
# 解压文件
gunzip file.txt.gz
# 保留原文件压缩
gzip -k file.txt
# 查看压缩信息
gzip -l file.txt.gz

4.3 zip / unzip#

功能:创建和解压ZIP格式的压缩包(兼容Windows)。

# 压缩文件
zip archive.zip file1.txt file2.txt
# 压缩目录(-r递归)
zip -r archive.zip /home/user/Documents
# 解压
unzip archive.zip
# 解压到指定目录
unzip archive.zip -d /home/user/extract/
# 查看压缩包内容
unzip -l archive.zip

4.4 bzip2 / bunzip2#

功能:比gzip压缩率更高,但速度更慢。

# 压缩
bzip2 file.txt
# 解压
bunzip2 file.txt.bz2

4.5 xz / unxz#

功能:压缩率最高,但速度最慢。

# 压缩
xz file.txt
# 解压
unxz file.txt.xz

五、链接文件#

5.1 什么是链接?#

链接类似于Windows的”快捷方式”,但功能更强大。

Linux有两种链接:

  • 硬链接(Hard Link):直接指向文件数据
  • 软链接(Symbolic Link):指向文件的路径

5.2 创建软链接:ln -s#

# 创建软链接
ln -s /home/user/file.txt /home/user/Desktop/file_link.txt
# 创建目录的软链接
ln -s /var/www/html /home/user/website

软链接特点

  • 删除原文件后,软链接失效
  • 可以链接目录
  • 可以跨文件系统

5.3 创建硬链接:ln#

# 创建硬链接
ln /home/user/file.txt /home/user/file_hardlink.txt

硬链接特点

  • 删除原文件后,硬链接仍然有效
  • 不能链接目录
  • 不能跨文件系统
  • 硬链接和原文件共享同一个inode

六、文件搜索高级技巧#

6.1 locate命令#

功能:基于数据库的快速文件搜索。

# 安装mlocate
sudo apt install mlocate
# 更新数据库
sudo updatedb
# 搜索文件
locate file.txt
# 忽略大小写
locate -i FILE.TXT
# 限制结果数量
locate -n 10 "*.log"

注意:locate基于数据库搜索,新建的文件可能搜不到,需要先运行 sudo updatedb 更新数据库。

6.2 which命令#

功能:查找命令的完整路径。

/usr/bin/ls
which ls
which python3
# 输出:/usr/bin/python3

6.3 whereis命令#

功能:查找命令的二进制文件、源代码和帮助文档。

whereis ls
# 输出:ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

七、文件比较#

7.1 diff命令#

功能:比较两个文件的差异。

# 比较两个文件
diff file1.txt file2.txt
# 并排显示差异
diff -y file1.txt file2.txt
# 显示上下文格式
diff -u file1.txt file2.txt

7.2 comm命令#

功能:比较两个已排序文件的相同和不同行。

# 比较两个已排序的文件
comm sorted1.txt sorted2.txt
# 只显示相同行
comm -12 sorted1.txt sorted2.txt

八、其他常用命令#

8.1 识别文件类型:file#

功能:检测文件的类型(文本、图片、可执行文件等)。

# 查看文件类型
file image.jpg
# 输出:image.jpg: JPEG image data, JFIF standard 1.01
file document.pdf
# 输出:document.pdf: PDF document, version 1.7
file script.sh
# 输出:script.sh: Bourne-Again shell script, ASCII text executable
# 查看多个文件
file *

实用场景:下载的文件没有扩展名时,用 file 命令识别真实类型。


8.2 流编辑器:sed#

功能:对文本进行替换、删除、插入等操作,常用于批量处理。

# 替换文件中的字符串(显示到屏幕,不修改原文件)
sed 's/old/new/' file.txt
# 全局替换(每行所有匹配)
sed 's/old/new/g' file.txt
# 直接修改原文件(加 -i 参数)
sed -i 's/old/new/g' file.txt
# 删除包含特定字符串的行
sed '/keyword/d' file.txt
# 删除空行
sed '/^$/d' file.txt
# 在第3行前插入新内容
sed '3i\新插入的内容' file.txt
# 打印第2-4行
sed -n '2,4p' file.txt

实用场景

  • 批量修改配置文件
  • 日志文件处理
  • 文本格式转换

8.3 文本处理:awk#

功能:强大的文本分析工具,按列处理数据。

# 打印第一列和第三列
awk '{print $1, $3}' file.txt
# 指定分隔符(默认是空格)
awk -F: '{print $1, $3}' /etc/passwd
# 条件筛选(第三列大于100的行)
awk '$3 > 100' file.txt
# 计算总和
awk '{sum += $1} END {print sum}' numbers.txt
# 打印行号和内容
awk '{print NR, $0}' file.txt
# 格式化输出
awk '{printf "%-20s %10s
", $1, $2}' file.txt

实用场景

  • 处理CSV/日志文件
  • 系统信息提取
  • 数据统计分析

8.4 排序:sort#

功能:对文本文件的行进行排序。

# 基本排序(字典序)
sort file.txt
# 数值排序
sort -n numbers.txt
# 逆序排序
sort -r file.txt
# 去重排序
sort -u file.txt
# 按第二列排序
sort -k2 file.txt
# 按第二列数值排序
sort -k2 -n file.txt
# 检查文件是否已排序
sort -c file.txt

实用场景

  • 整理列表数据
  • 配合 uniq 命令去重
  • 日志按时间排序

8.5 去重:uniq#

功能:去除相邻的重复行(通常配合sort使用)。

# 去除相邻重复行
uniq file.txt
# 统计每行出现次数
uniq -c file.txt
# 只显示重复的行
uniq -d file.txt
# 只显示不重复的行
uniq -u file.txt
# 忽略大小写
uniq -i file.txt

典型用法(先排序再去重):

sort file.txt | uniq # 去重
sort file.txt | uniq -c # 去重并计数
sort file.txt | uniq -c | sort -rn # 按频率排序

8.6 统计:wc#

功能:统计文件的行数、单词数、字节数。

wc file.txt # 显示行数、单词数、字节数
wc -l file.txt # 只显示行数
wc -w file.txt # 只显示单词数
wc -c file.txt # 只显示字节数
wc -m file.txt # 只显示字符数

实用场景

# 统计代码行数
find . -name "*.py" | xargs wc -l
# 统计目录下文件数量
ls | wc -l
# 统计日志错误次数
grep -c "ERROR" app.log

九、总结#

本章详细讲解了Linux文件和目录的各种操作:

  1. 创建:touch(文件)、mkdir(目录)
  2. 删除:rm(危险操作,谨慎使用!)
  3. 复制:cp
  4. 移动/重命名:mv
  5. 查看内容:cat、less、more、head、tail
  6. 查找文件:find、locate、which、whereis
  7. 搜索内容:grep
  8. 权限管理:chmod、chown、chgrp
  9. 压缩解压:tar、gzip、zip、bzip2、xz
  10. 链接:ln(硬链接)、ln -s(软链接)

下一章预告:《Linux操作大全(三):用户与权限管理详解》


如有疑问或发现错误,欢迎在评论区指出!

分享

如果这篇文章对你有帮助,欢迎分享给更多人!

Linux操作大全(二):文件与目录操作详解
https://emilia520.icu/posts/linux-manual-02-files/
作者
火花花
发布于
2026-05-25
许可协议
CC BY-NC-SA 4.0

部分信息可能已经过时

目录