0
点赞
收藏
分享

微信扫一扫

「Linux文件及目录管理」文件及目录操作类命令

成义随笔 06-15 21:00 阅读 12

在Linux操作系统中,文件和目录的管理是日常运维和开发的核心任务。主要包括touchmkdirrmdirrmcpmvtar等核心命令。

核心命令详解与案例

1. touch:创建空文件或更新文件时间戳

作用:创建空文件或更新文件的访问和修改时间。
基本语法

touch [选项]... 文件...

常用选项

  • -a:仅更改访问时间(access time)
  • -c:不创建新文件(文件不存在时不新建)
  • -d:使用指定字符串表示时间而非当前时间
  • -m:仅更改修改时间(modification time)
  • -r:使用参考文件的时间
  • -t:使用指定时间戳格式
  • -h:影响符号链接本身而非链接目标(仅限能更改符号链接的系统)

案例

  1. 创建空文件file1.txt和file2.log。
  2. 更新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:显示详细的创建过程信息

案例

  1. 创建单级目录dir1
  2. 递归创建多级目录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:显示详细的删除过程信息

注意:仅能删除空目录。
案例

  1. 删除空目录dir1
  2. 尝试删除非空目录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:禁止递归删除根目录(默认行为)

案例

  1. 删除文件file1.txt
  2. 递归删除目录dir2及其内容
  3. 强制删除文件(不提示)
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:覆盖前备份已存在文件

案例

  1. 创建空文件file2.log。
  2. 复制文件file2.log为file2_copy.log
  3. 递归创建多级目录dir1/subdir
  4. 在dir1/subdir目录中创建空文件file3.txt
  5. 递归复制目录dir1及其内容为dir1_copy
  6. 递归查看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:覆盖前备份已存在文件

案例

  1. 重命名文件file2_copy.log为file2_renamed.log
  2. 移动目录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:保留绝对路径(谨慎使用)

案例

  1. 打包目录dir_moved为archive.tar
  2. 使用gzip压缩打包为archive.tar.gz
  3. 解包archive.tar到extracted目录
  4. 解压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 -rrmdir的区别是什么?
答案

  • 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.txttest2.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.logtest2_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.txtb.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压缩)。
举报

相关推荐

0 条评论