在Linux操作系统中,文件和目录的管理是日常运维和开发的核心任务。主要包括touch、mkdir、rmdir、rm、cp、mv、tar等核心命令。
核心命令详解与案例
1. touch:创建空文件或更新文件时间戳
作用:创建空文件或更新文件的访问和修改时间。
基本语法:
touch [选项]... 文件...
常用选项
-a:仅更改访问时间(access time)-c:不创建新文件(文件不存在时不新建)-d:使用指定字符串表示时间而非当前时间-m:仅更改修改时间(modification time)-r:使用参考文件的时间-t:使用指定时间戳格式-h:影响符号链接本身而非链接目标(仅限能更改符号链接的系统)
案例:
- 创建空文件file1.txt和file2.log。
 - 更新file1.txt的时间戳(不修改内容)。
 
touch file1.txt file2.log # 创建空文件file1.txt和file2.log
ls -l
# -rw-r--r--  1 root root    0 6月  14 19:13 file1.txt
# -rw-r--r--  1 root root    0 6月  14 19:13 file2.log
touch file1.txt # 更新file1.txt的时间戳(不修改内容)
ls -l
# -rw-r--r--  1 root root    0 6月  14 19:15 file1.txt
# -rw-r--r--  1 root root    0 6月  14 19:13 file2.log
解析:
touch默认创建空文件,若文件已存在则更新时间戳。- 使用
ls -l可验证时间戳是否更新。 
2. mkdir:创建目录
作用:创建新目录。 基本语法:
mkdir [选项] 目录名...
常用选项:
-p:递归创建多级目录。-m:设置目录权限模式(类似chmod)-v:显示详细的创建过程信息
案例:
- 创建单级目录dir1
 - 递归创建多级目录dir2/subdir
 
mkdir dir1
ls -l
# drwxr-xr-x  2 root root    6 6月  14 19:23 dir1
mkdir -p dir2/subdir
ls -R dir2
# .:
# dir1  dir2
# ./dir1:
# ./dir2:
# subdir
# ./dir2/subdir:
解析:
-p选项可避免因父目录不存在而报错。- 使用
ls -R查看目录及子目录结构结构。 
3. rmdir:删除空目录
作用:删除空目录。 基本语法:
rmdir [选项] 目录名...
常用选项:
-p:递归删除目录(删除目录及其空的父目录)--ignore-fail-on-non-empty:忽略因目录非空导致的错误-v:显示详细的删除过程信息
注意:仅能删除空目录。
案例:
- 删除空目录dir1
 - 尝试删除非空目录dir2(报错)
 
rmdir dir1 # 删除空目录dir1
ls -l  # dir1已被删除
rmdir dir  2# 尝试删除非空目录dir2(报错)
#rmdir: failed to remove 'dir2': Directory not empty
解析:rmdir仅适用于空目录,非空目录需使用rm -r。
4. rm:删除文件或目录
作用:删除文件或目录。 基本语法:
rm [选项]... 文件或目录...
常用选项:
-f:强制删除,忽略不存在的文件和警告,不提示确认。-i:交互式删除,删除前提示确认-r或-R:递归删除目录及其内容-d:删除空目录(类似rmdir)-v:显示详细操作信息--no-preserve-root:不特殊处理根目录/--preserve-root:禁止递归删除根目录(默认行为)
案例:
- 删除文件file1.txt
 - 递归删除目录dir2及其内容
 - 强制删除文件(不提示)
 
rm file1.txt # 删除文件file1.txt
ls -l # file1.txt已被删除
rm -r dir2 # 递归删除目录dir2及其内容
ls -l # dir2已被删除
rm -f file2.log # 强制删除文件(不提示)
ls -l # file2.log已被删除
解析:
-r:递归删除目录及其内容。-f:强制删除,不提示确认。- 删除操作不可逆,需谨慎。
 
5. cp:复制文件或目录
作用:复制文件或目录。 基本语法:
cp [选项]... 源文件 目标文件
cp [选项]... 源文件... 目标目录
常用选项:
-a:归档模式,相当于-dR --preserve=all-i:覆盖前提示确认-n:不覆盖已存在文件-r:递归复制目录-u:只复制源文件中更新时间较新的文件-v:显示复制过程-p:保留原始文件的属性(权限、时间戳等)-f:强制覆盖已存在文件-l:创建硬链接而非复制文件-s:创建符号链接而非复制文件--backup:覆盖前备份已存在文件
案例:
- 创建空文件file2.log。
 - 复制文件file2.log为file2_copy.log
 - 递归创建多级目录dir1/subdir
 - 在dir1/subdir目录中创建空文件file3.txt
 - 递归复制目录dir1及其内容为dir1_copy
 - 递归查看dir1_copy目录
 
touch file2.log
cp file2.log file2_copy.log # 复制文件file2.log为file2_copy.log
ls -l
# -rw-r--r--  1 root root    0 6月  14 19:53 file2_copy.log
# -rw-r--r--  1 root root    0 6月  14 19:53 file2.log
# 递归复制目录dir1及其内容为dir1_copy
mkdir -p dir1/subdir # 递归创建多级目录dir1/subdir
touch dir1/subdir/file3.txt # 在dir1/subdir目录中创建空文件file3.txt
cp -r dir1 dir1_copy # 递归复制目录dir1及其内容为dir1_copy
ls -R dir1_copy
# dir1_copy:
# subdir
# dir1_copy/subdir:
# file3.txt
解析:-r用于复制目录,-v可显示复制过程(如cp -rv dir1 dir1_copy)。
6. mv:移动或重命名文件/目录
作用:移动文件或目录,或重命名文件/目录。 基本语法:
mv [选项]... 源文件 目标文件
mv [选项]... 源文件... 目标目录
常用选项:
-i:覆盖前提示确认-n:不覆盖已存在文件-v:显示详细操作信息-u:只移动源文件中更新时间较新的文件-f:强制覆盖已存在文件-b:覆盖前为目标文件创建备份-S:指定备份文件的后缀--backup:覆盖前备份已存在文件
案例:
- 重命名文件file2_copy.log为file2_renamed.log
 - 移动目录dir1_copy到dir_moved
 
mv file2_copy.log file2_renamed.log # 重命名文件file2_copy.log为file2_renamed.log
ls -l
# -rw-r--r--  1 root root    0 6月  14 19:53 file2_renamed.log
mv dir1_copy dir_moved # 移动目录dir1_copy到dir_moved
ls -l
# drwxr-xr-x  3 root root   20 6月  14 19:55 dir_moved
解析:mv可同时实现重命名和移动操作。
7. tar:打包与解包文件/目录
作用:将多个文件或目录打包为一个归档文件,或解包归档文件。 基本语法:
tar [选项] [归档文件] [文件或目录...]
常用选项:
-c:创建归档文件。-x:解包归档文件。-f:指定归档文件名(必须选项)-v:显示详细处理过程-z:通过 gzip 压缩/解压-j:通过 bzip2 压缩/解压-J:通过 xz 压缩/解压-C:解压到指定目录-p:保留文件权限属性--exclude:排除指定模式的文件-h:跟随符号链接(归档链接指向的文件)-P:保留绝对路径(谨慎使用)
案例:
- 打包目录dir_moved为archive.tar
 - 使用gzip压缩打包为archive.tar.gz
 - 解包archive.tar到extracted目录
 - 解压archive.tar.gz到extracted_gz目录
 
# 打包目录dir_moved为archive.tar
tar -cvf archive.tar dir_moved
# dir_moved/
# dir_moved/subdir/
# dir_moved/subdir/file3.txt
# 使用gzip压缩打包为archive.tar.gz
tar -czvf archive.tar.gz dir_moved
# dir_moved/
# dir_moved/subdir/
# dir_moved/subdir/file3.txt
# 解包archive.tar到extracted目录
mkdir extracted
tar -xvf archive.tar -C extracted
# dir_moved/
# dir_moved/subdir/
# dir_moved/subdir/file3.txt
# 解压archive.tar.gz到extracted_gz目录
mkdir extracted_gz
tar -xzvf archive.tar.gz -C extracted_gz
# dir_moved/
# dir_moved/subdir/
# dir_moved/subdir/file3.txt
解析:
-c创建归档,-x解包,-v显示过程,-f指定文件名。-z和-j分别用于gzip和bzip2压缩。
常见错误及解决方法
错误:rmdir: Directory not empty
原因:尝试删除非空目录。
解决方法:使用rm -r递归删除。
错误:rm: cannot remove 'file': Permission denied
原因:无权限删除文件。
解决方法:使用sudo rm -f file或切换到有权限的用户。
错误:cp: omitting directory 'dir'
原因:未使用-r选项尝试复制目录。
解决方法:使用cp -r dir dir_copy。
错误:tar: Removing leading '/' from member names
原因:打包时使用了绝对路径(如/home/alice/dir)。
解决方法:切换到目标目录或使用相对路径。
错误:tar: Error is not recoverable: exiting now
原因:归档文件损坏或路径错误。
解决方法:检查归档文件完整性或路径是否正确。
理论练习
问答题:rm -r和rmdir的区别是什么?
答案
rm -r:递归删除目录及其内容(包括非空目录)。rmdir:仅能删除空目录。
问答题:tar -czvf中的-c、-z、-v、-f分别表示什么?
答案
-c:创建归档。-z:使用gzip压缩。-v:显示操作过程。-f:指定归档文件名。
问答题:mv命令能否同时实现重命名和移动操作?
答案:可以。例如mv file1.txt dir/file2.txt既重命名又移动。
问答题:如果要打包一个目录并排除其中的某些文件,如何操作?
答案:使用tar的--exclude选项。
例如:
tar -czvf archive.tar.gz --exclude='*.tmp' --exclude='temp/' dir_to_pack
问答题:cp命令的-u选项有什么作用?
答案:-u仅在源文件比目标文件新或目标文件不存在时复制。
实操练习
练习:创建空文件test1.txt和test2.log,并更新test1.txt的时间戳。
答案
touch test1.txt test2.log
ls -l
# -rw-r--r--  1 root root     0 6月  15 10:52 test1.txt
# -rw-r--r--  1 root root     0 6月  15 10:52 test2.log
sleep 5  # 等待5秒
touch test1.txt
ls -l
# -rw-r--r--  1 root root     0 6月  15 10:54 test1.txt
# -rw-r--r--  1 root root     0 6月  15 10:52 test2.log
练习:递归创建目录project/src/main,并在main目录下创建空文件app.py。
答案
mkdir -p project/src/main
touch project/src/main/app.py
ls -R
# .:
# project  test1.txt  test2.log
# ./project:
# src
# ./project/src:
# main
# ./project/src/main:
# app.py
练习:删除空目录project/src/main(若非空则先清空)。
答案
rm -r project/src/main  # 若main非空
# rm:是否进入目录"project/src/main"? y
# rm:是否删除普通空文件 "project/src/main/app.py"?y
# rm:是否删除目录 "project/src/main"?y
练习:复制test2.log为test2_backup.log,并移动到backup目录(需先创建backup)。
答案
mkdir backup
cp test2.log test2_backup.log
mv test2_backup.log backup/
ls -R
# .:
# backup  project  test1.txt  test2.log
#./backup:
#test2_backup.log
#./project:
#src
#./project/src:
练习:打包backup目录为backup.tar.gz,并解压到backup_extracted目录。
答案
tar -czvf backup.tar.gz backup
# backup/
# backup/test2_backup.log
mkdir backup_extracted
tar -xzvf backup.tar.gz -C backup_extracted
# backup/
# backup/test2_backup.log
练习:创建一个目录test,包含文件a.txt和b.log,然后打包test目录为test.tar,并排除b.log。
答案
mkdir test
touch test/a.txt test/b.log
tar -cvf test.tar --exclude='b.log' test
# test/
# test/a.txt
练习:将test.tar解压到test_extracted目录,并验证b.log是否被排除。
答案
mkdir test_extracted
tar -xvf test.tar -C test_extracted
# test/
# test/a.txt
ls test_extracted/test  # 应只看到a.txt
# a.txt
知识总结
touch:创建空文件或更新时间戳。mkdir:创建目录(-p递归创建)。rmdir:删除空目录。rm:删除文件或目录(-r递归,-f强制)。cp:复制文件或目录(-r递归)。mv:移动或重命名文件/目录。tar:打包/解包文件或目录(-c创建,-x解包,-z/-j压缩)。









