一、文件和目录操作命令
1.1 ls
1.1.1 介绍
ls 是 Linux 和其他 Unix-like 系统中用于列出目录内容的命令
1.1.2 使用方法
ls [选项] [文件或目录]
1.1.3 参数详解
- [选项]:控制 ls 命令的输出格式和行为。
- [文件或目录]:要列出内容的文件或目录。如果不指定,则默认为当前目录
1.1.4 常见选项
-l:长格式列出文件和目录,显示权限、所有者、大小、修改时间等信息。
-a:显示所有文件和目录,包括隐藏文件(以 . 开头的文件)。
-h:以易读的格式显示文件大小(如 KB、MB)。
-r:逆序显示文件和目录。
-R:递归列出所有子目录的内容。
-S:根据文件大小排序。
-t:根据修改时间排序。
-1:每行显示一个文件或目录。
-F:在可执行文件后面添加 *,在目录名后面添加 /。
-d:仅列出目录本身,而不是其内容。
1.1.5 常见使用案例
1.1.5.1 列出当前目录的内容
ls
1.1.5.2 以长格式列出当前目录的内容,包括隐藏文件
ls -la
1.1.5.3 递归列出当前目录及其所有子目录的内容
ls -R
1.1.5.4 以易读的格式显示文件大小,并按大小排序
ls -lhS
1.1.5.5 列出目录 mydir 的内容,并显示详细信息
ls -ld mydir
1.1.6 注意事项
- ls 命令的输出格式和行为可以通过配置文件(如 ~/.dircolors)或环境变量(如 LS_COLORS)进行自定义。
- 在某些系统上,ls 命令可能具有其他选项和功能。可以通过 man ls 或 ls --help 查看完整的选项列表和描述。
1.2 cd
1.2.1 介绍
cd 是 "change directory" 的缩写,用于在 Linux 和其他 Unix-like 系统中改变当前工作目录
1.2.2 使用方法
cd [目录]
1.2.3 参数详解
[目录]:要切换到的目标目录的路径
1.2.4 常见使用案例
1.2.4.1 切换到用户的主目录
cd ~
1.2.4.2 切换到上一级目录
cd ..
1.2.4.3 切换到具体目录,例如切换到 /etc 目录
cd /etc
1.2.4.4 切换到相对路径下的目录,例如切换到当前目录下的 documents 子目录
cd documents
1.2.4.5 使用绝对路径切换到其他目录,例如切换到 /home/username/projects
cd /home/username/projects
1.2.5 注意事项
- 如果目录不存在或没有权限访问,cd 命令将会报错。
- 如果不指定任何参数,cd 命令将默认切换到用户的主目录。
- cd 命令是 shell 内建命令,不需要额外的程序或库来执行。
1.3 cp
1.3.1 介绍
cp 是 "copy" 的缩写,用于在 Linux 和其他 Unix-like 系统中复制文件或目录
1.3.2 使用方法
cp [选项] 源文件或目录 目标文件或目录
1.3.3 参数详解
- [选项]:控制 cp 命令的行为。
- 源文件或目录:要复制的源文件或目录。
- 目标文件或目录:复制到的目标位置。
1.3.4 常见选项
- -r 或 -R:递归复制,用于复制目录及其内容。
- -u:仅当目标文件不存在或源文件较新时复制。
- -f:强制复制,如果目标文件已存在,则覆盖它。
- -i:交互模式,在覆盖目标文件之前提示用户确认。
- -p:保留源文件或目录的属性(如修改时间、访问权限等)。
- -v:详细模式,显示复制的文件信息。
1.3.5 常见使用案例
1.3.5.1 复制文件到另一个位置
cp file.txt /path/to/destination/
1.3.5.2 递归复制目录及其内容
cp -r dir1 dir2
1.3.5.3 强制复制文件并覆盖目标位置的任何现有文件
cp -f file1.txt file2.txt
1.3.5.4 在复制前询问是否覆盖目标文件
cp -i file.txt /path/to/destination/
1.3.5.5 保留文件属性并显示复制过程
cp -pv file.txt /path/to/destination/
1.3.6 注意事项
- 如果目标是一个已存在的目录,cp 命令将把源文件或目录复制到这个目录下,并保持原名。
- 如果目标文件已经存在,并且没有使用 -f 或 -i 选项,cp 命令通常会报错或停止复制。
- cp 命令通常不会修改源文件或目录,除非发生错误。
1.4 mkdir
1.4.1 介绍
mkdir 是 "make directory" 的缩写,用于在 Linux 和其他 Unix-like 系统中创建新目录
1.4.2 使用方法
mkdir [选项] 目录名
1.4.3 参数详解
- [选项]:控制 mkdir 命令的行为
- 目录名:要创建的新目录的名称
1.4.4 常见选项
- -m 或 --mode:设置新目录的权限。
- -p 或 --parents:递归创建目录,如果父目录不存在则一同创建。
- -v 或 --verbose:显示创建目录的详细信息。
1.4.5 常见使用案例
1.4.5.1 创建一个新目录
mkdir newdir
1.4.5.2 递归创建多个目录
mkdir -p dir1/dir2/dir3
1.4.5.3 创建一个具有特定权限的新目录
mkdir -m 755 newdir
1.4.5.4 创建目录并显示详细信息
mkdir -v newdir
1.4.6 注意事项
如果目录已经存在,mkdir 命令通常会报错,除非使用了 -p 选项,这时如果目录已经存在,mkdir 不会报错。
可以通过 -m 选项设置目录的权限,如 -m 755 表示设置目录权限为 755(rwxr-xr-x)。
如果在创建目录时指定了不存在的父目录,并且没有使用 -p 选项,mkdir 会报错。使用 -p 选项可以递归创建所有必要的父目录。
1.5 mv
1.5.1 介绍
mv 是 "move" 的缩写,用于在 Linux 和其他 Unix-like 系统中移动或重命名文件和目录
1.5.2 使用方法
mv [选项] 源文件或目录 目标文件或目录
1.5.3 参数详解
- [选项]:控制 mv 命令的行为。
- 源文件或目录:要移动或重命名的文件或目录。
- 目标文件或目录:移动或重命名后的位置或新名称。
1.5.4 常见选项
- -i:交互模式,如果目标位置已有同名文件或目录,则提示用户确认是否覆盖。
- -u:仅当目标文件不存在或源文件较新时移动或重命名。
- -f:强制移动或重命名,如果目标位置已有同名文件或目录,则覆盖它。
- -v:详细模式,显示移动或重命名的文件信息。
1.5.5 常见使用案例
1.5.5.1 重命名文件
mv oldname.txt newname.txt
1.5.5.2 移动文件到另一个目录
mv file.txt /path/to/destination/
1.5.5.3 重命名目录
mv olddir newdir
1.5.5.4 移动目录及其内容到另一个位置
mv -r olddir /path/to/new/location/
1.5.5.5 强制移动文件并覆盖目标位置的任何现有文件
mv -f file1.txt /path/to/destination/file2.txt
1.5.6 注意事项
- 如果目标是一个已存在的目录,mv 命令将把源文件或目录移动到这个目录下,并保持原名。
- 如果目标位置已有同名文件或目录,并且没有使用 -i、-f 或 -u 选项,mv 命令通常会报错或停止操作。
- mv 命令可以用来重命名文件或目录,也可以用来移动文件或目录到另一个位置。
1.6 pwd
1.6.1 介绍
pwd 是 "print working directory" 的缩写,用于在 Linux 和其他 Unix-like 系统中显示当前工作目录的完整路径
1.6.2 使用方法
pwd
1.6.3 参数详解
pwd 命令通常不需要任何参数,直接执行即可显示当前工作目录
1.6.4 常见使用案例
1.6.4.1 显示当前工作目录
pwd
1.6.5 注意事项
- pwd 命令的输出是当前 shell 会话中当前工作目录的路径。
- 如果用户改变了当前工作目录(例如,通过 cd 命令),pwd 命令的输出也会随之改变。
1.7 rename
1.7.1 介绍
rename 命令用于在 Linux 和其他 Unix-like 系统中批量重命名文件
1.7.2 使用方法
rename 's/旧模式/新模式/' 文件名...
1.7.3 参数详解
- 's/旧模式/新模式/':这是一个 Perl 兼容的正则表达式,用于定义如何将文件名从“旧模式”替换为“新模式”。
- 文件名...:要重命名的文件的列表。
1.7.4 常见用法
1.7.4.1 将所有 .txt 文件扩展名更改为 .doc
rename 's/\.txt$/.doc/' *.txt
1.7.4.2 将所有以 file 开头的文件名中的 file 替换为 document
rename 's/^file/document/' file*
1.7.4.3 将所有包含数字的文件名中的数字替换为下划线
rename 's/\d/_/g' *
1.7.5 注意事项
rename 命令的行为可能因操作系统和安装的具体版本而异。在某些系统上,rename 命令可能不支持 Perl 兼容的正则表达式,而是使用自己的简单替换语法。
在执行重命名操作之前,建议先备份文件,以防不测。
确保提供的正则表达式正确无误,否则可能导致文件名被错误地重命名。
1.8 rm
1.8.1 介绍
rm 是 "remove" 的缩写,用于在 Linux 和其他 Unix-like 系统中删除文件或目录
1.8.2 使用方法
rm [选项] 文件或目录...
1.8.3 参数详解
- [选项]:控制 rm 命令的行为。
- 文件或目录...:要删除的文件或目录的列表。
1.8.4 常见选项
- -r 或 -R:递归删除,用于删除目录及其内容。
- -f:强制删除,忽略不存在的文件,并且不提示确认。
- -i:交互模式,在删除每个文件之前提示确认。
- -v:详细模式,显示被删除的文件或目录的信息。
1.8.5 常见使用案例
1.8.5.1 删除一个文件
rm file.txt
1.8.5.2 删除多个文件
rm file1.txt file2.txt file3.txt
1.8.5.3 递归删除一个目录及其所有内容
rm -r dir1
1.8.5.4 强制删除一个文件,不提示确认
rm -f file.txt
1.8.5.5 删除文件并在删除前提示确认
rm -i file.txt
1.8.6 注意事项
rm 命令会永久删除文件或目录,且删除后不可恢复,因此在使用时需要特别小心。
如果指定了不存在的文件或目录,rm 命令通常会报错,除非使用了 -f 选项。
使用 -r 或 -R 选项时,务必确保你确实要删除整个目录树,因为这会删除目录及其所有子目录和文件。
在使用 -i 选项时,rm 命令会在删除每个文件之前询问用户,这可以为用户提供一个确认的机会,避免误删除。
1.9 rmdir
1.9.1 介绍
rmdir 是 "remove directory" 的缩写,用于在 Linux 和其他 Unix-like 系统中删除空目录
1.9.2 使用方法
rmdir [选项] 目录...
1.9.3 参数详解
- [选项]:控制 rmdir 命令的行为。
- 目录...:要删除的空目录的列表。
1.9.4 常见选项
- -p:递归删除目录,和 rm -r 或 rm -R 类似,但仅限于删除空目录。
- -v:详细模式,显示被删除的目录信息。
1.9.5 常见使用案例
1.9.5.1 删除一个空目录
rmdir emptydir
1.9.5.2 递归删除多个空目录
rmdir -p dir1/dir2/dir3 dir4
1.9.6 注意事项
- rmdir 命令只能删除空目录。如果目录中包含文件或其他目录,rmdir 命令会报错。
- 使用 -p 选项可以递归删除多个空目录,从最后一个目录开始,依次向上删除。
- rmdir 命令通常不需要 -v 选项,因为删除操作很简单,不需要额外的输出信息。
1.9.7 与 rm 的区别
- rmdir 只能删除空目录,而 rm -r 可以删除非空目录及其内容。
- rmdir 不需要 -f 选项来强制删除目录,因为它不会删除非空目录。
1.10 touch
1.10.1 介绍
touch 是 Linux 和其他 Unix-like 系统中用于创建空文件或更新文件时间戳的命令
1.10.2 使用方法
touch [选项] 文件名...
1.10.3 参数详解
- [选项]:控制 touch 命令的行为。
- 文件名...:要创建或更新时间戳的文件列表。
1.10.4 常见选项
-a:仅更新文件的访问时间。
-c 或 --no-create:如果指定文件不存在,不创建新文件。
-d:使用指定的日期时间,而非当前时间。
-m:仅更新文件的修改时间。
-r:参考另一个文件的时间戳,并用它们来设置目标文件的时间戳。
-t:使用指定的日期时间,格式通常为 [[CC]YY]MMDDhhmm[.ss]。
-v:显示详细信息,即哪些文件的时间戳被更改。
1.10.5 常见使用案例
1.10.5.1 创建一个新的空文件
touch newfile.txt
1.10.5.2 更新一个或多个文件的时间戳为当前时间
touch file1.txt file2.txt
1.10.5.3 使用指定的日期时间创建或更新时间戳
touch -t 202301010000 newfile.txt
1.10.5.4 仅更新文件的访问时间
touch -a file.txt
1.10.5.5 仅更新文件的修改时间
touch -m file.txt
1.10.6 注意事项
- 如果文件不存在,touch 命令默认会创建一个新的空文件。
- 使用 -c 选项可以防止 touch 创建新文件。
- 使用 -d 或 -t 选项可以精确控制时间戳的设置。
1.11 tree
1.11.1 介绍
tree 是一个在 Linux 和其他 Unix-like 系统中用于显示目录结构的命令。它可以以树状图的形式展示目录和文件的层次结构,帮助用户更好地理解和管理文件系统中的文件和目录
.11.2 使用方法
tree [选项] [目录]
1.11.3 参数详解
- [选项]:控制 tree 命令的行为。
- [目录]:要显示目录结构的根目录。如果不指定,默认为当前目录。
1.11.4 常见选项
-a:显示所有文件和目录,包括隐藏文件。
-C:在文件和目录清单加上色彩,便于区分各种类型。
-d:只显示目录名称。
-D:列出文件或目录的更改日期。
-f:在每个文件或目录之前,显示完整的相对路径名称。
-i:不显示符号链接文件,而是显示它链接的原始文件。
-L level:指定目录的最大显示深度。
-s:显示文件和目录的大小。
-v:显示 tree 命令的版本信息。
1.11.5 常见使用案例
1.11.5.1 显示当前目录的树状结构
tree
1.11.5.2 显示指定目录的树状结构,并显示文件大小
tree -s /path/to/directory
1.11.5.3 显示目录结构,并包括隐藏文件
tree -a /home/user/.config
1.11.5.4 仅显示目录名称,不显示文件
tree -d /var/log
1.11.6 注意事项
tree 命令可能不是所有 Linux 发行版都默认安装的,你可能需要根据你的发行版使用包管理器(如 apt, yum, dnf, pacman 等)来安装它。
对于非常大的目录树,tree 命令可能需要一些时间来生成输出。
使用 -L 选项可以限制目录的显示深度,这对于避免输出过于冗长很有用。
1.12 basename
1.12.1 介绍
basename 是一个在 Linux 和其他 Unix-like 系统中用于从文件路径中删除目录和后缀名,从而提取出文件名的命令
1.12.2 使用方法
basename [路径] [后缀]
1.12.3 参数详解
- [路径]:要提取文件名的文件路径。
- [后缀]:可选参数,用于从文件名中删除指定的后缀。
1.12.4 常见使用案例
1.12.4.1 提取文件路径中的文件名
basename /path/to/file.txt
执行上述命令后,输出将是 file.txt
1.12.4.2 提取文件路径中的文件名,并删除指定的后缀
basename /path/to/file.txt .txt
执行上述命令后,输出将是 file
1.12.5 注意事项
- 如果指定了后缀,basename 会尝试从文件名中删除它。如果没有指定后缀,basename 仅提取路径中的文件名。
- 如果路径以斜杠(/)结尾,basename 会将其视为目录路径,并返回空字符串。
1.12.6 与 dirname 的区别
- dirname 命令用于提取文件路径中的目录部分,而不是文件名。
- basename 命令则用于提取文件路径中的文件名部分。
1.13 dirname
1.13.1 介绍
dirname 是一个在 Linux 和其他 Unix-like 系统中用于提取文件或目录路径中的目录部分的命令
1.13.2 使用方法
dirname [路径]
1.13.3 参数详解
- [路径]:要提取目录部分的文件或目录路径
1.13.4 常见使用案例
1.13.4.1 提取文件路径中的目录部分
dirname /path/to/file.txt
执行上述命令后,输出将是 /path/to
1.13.4.2 提取目录路径本身
dirname /path/to/directory/
执行上述命令后,输出仍将是 /path/to/directory。注意,即使路径以斜杠(/)结尾,dirname 也会返回包含该斜杠的目录路径
1.13.5 注意事项
- 如果路径是一个相对路径(不以斜杠开头),dirname 将返回该相对路径的目录部分。
- 如果路径是一个绝对路径(以斜杠开头),dirname 将返回去掉最后一个组件(即文件名或最后一个目录名)后的绝对路径。
- 如果路径为空或仅包含斜杠,dirname 将返回 .,表示当前目录。
1.13.6 与 basename 的区别
- basename 用于提取文件路径中的文件名部分。
- dirname 用于提取文件或目录路径中的目录部分。
1.14 chattr
1.14.1 介绍
chattr 是 Linux 系统中的一个命令,用于更改文件或目录的扩展属性。这些属性为文件或目录提供了额外的保护,防止其被删除、修改或备份等操作
1.14.2 使用方法
chattr [选项] [属性] 文件或目录...
1.14.3 参数详解
- [选项]:控制 chattr 命令的行为。
- [属性]:要设置或清除的文件或目录的属性。
- 文件或目录...:要修改属性的文件或目录列表。
1.14.4 常见属性
- a:文件只能被追加,不能删除、重命名或截断。
- i:文件不能被修改、删除、重命名或链接。
- s:文件在删除后,其数据块会立即被回收。
- u:文件只能被其所有者删除或重命名。
- +:添加指定的属性。
- -:删除指定的属性。
- =:设置指定的属性并清除其他所有属性。
1.14.5 常见使用案例
1.14.5.1 为文件添加 i 属性,使其不能被修改、删除或重命名
chattr +i importantfile.txt
1.14.5.2 移除文件的 i 属性,允许对其进行修改、删除和重命名
chattr -i importantfile.txt
1.14.5.3 为目录设置 a 属性,使其中文件只能被追加
chattr +a directoryname
1.14.5.4 清除目录的所有属性
chattr -R = directoryname
1.14.6 注意事项
- 使用 chattr 命令需要管理员权限,通常需要使用 sudo。
- 在修改文件或目录的属性之前,请确保你了解每个属性的含义,以避免意外破坏系统或文件。
- chattr 命令在某些文件系统(如 ext3、ext4)上有效,但在其他文件系统(如 vfat、ntfs)上可能无效。
1.15 lsattr
1.15.1 介绍
lsattr 是一个在 Linux 系统中用于显示文件或目录扩展属性的命令
1.15.2 使用方法
lsattr [选项] 文件或目录...
1.15.3 参数详解
- [选项]:控制 lsattr 命令的行为。
- [文件或目录...]:要显示扩展属性的文件或目录列表。
1.15.4 常见选项
- -a:显示所有文件和目录的属性,包括隐藏文件。
- -d:仅显示目录的属性,而不是其内容。
- -R:递归地显示指定目录及其子目录和文件的属性。
1.15.5 常见使用案例
1.15.5.1 显示当前目录下所有文件和目录的扩展属性
lsattr
1.15.5.2 显示指定文件的扩展属性
lsattr importantfile.txt
1.15.5.3 递归显示指定目录及其子目录和文件的扩展属性
lsattr -R directoryname
1.15.6 注意事项
- 如果文件或目录没有设置任何扩展属性,lsattr 命令将不会显示任何输出。
- lsattr 命令通常需要管理员权限来查看某些文件或目录的属性。
- 扩展属性是特定于文件系统的,不是所有文件系统都支持扩展属性。
1.16 file
1.16.1 介绍
file 是一个在 Linux 和其他 Unix-like 系统中常用的命令,用于确定给定文件或特殊文件类型的名称
1.16.2 使用方法
file [选项] 文件...
1.16.3 参数详解
- [选项]:控制 file 命令的行为。
- [文件...]:要检查的文件列表。
1.16.4 常见选项
- -i:尝试输出文件的 MIME 类型(例如 image/jpeg)。
- -s:如果文件是特殊文件,则不输出任何内容。
- -r 或 -R:递归地检查目录中的文件。
- -b:不输出文件名,仅输出检测到的文件类型。
- -z:尝试解压并检查压缩文件的内容。
1.16.5 常见使用案例
1.16.5.1 确定单个文件的类型
file myfile.txt
输出可能类似于:
myfile.txt: ASCII text
1.16.5.2 检查多个文件的类型
file file1.jpg file2.png
输出可能类似于:
file1.jpg: JPEG image data, Exif standard: [TIFF image data, little-endian, direntries=10], baseline, precision 8, 1280x960, frames 3 file2.png: PNG image data, 512 x 512, 8-bit/color RGBA, non-interlaced
1.16.5.3 递归检查目录中的文件类型
file -r /path/to/directory
1.16.6 注意事项
file 命令主要依赖于文件的魔数(magic number),这是文件开头的几个字节,通常用于标识文件的类型。
由于 file 命令基于文件内容进行分析,因此它可能无法准确识别某些特殊或加密的文件类型。
在某些情况下,文件扩展名可能与 file 命令的输出不匹配,这可能是因为文件扩展名被错误地设置或文件内容已被更改。
1.17 md5sum
1.17.1 介绍
md5sum 是一个在 Linux 和其他 Unix-like 系统中用于计算并检查 MD5 哈希值的命令
1.17.2 使用方法
md5sum [选项] [文件...]
.17.3 参数详解
- [选项]:控制 md5sum 命令的行为。
- [文件...]:要计算 MD5 哈希值的文件列表。
1.17.4 常见选项
- -b:以二进制模式读取文件。
- -t:从标准输入读取数据,而不是从文件中读取。
- -c:从文件中读取 MD5 哈希值并检查给定文件的哈希值是否匹配。
1.17.5 常见使用案例
1.17.5.1 计算单个文件的 MD5 哈希值
md5sum myfile.txt
输出可能类似于:
0123456789abcdef0123456789abcdef myfile.txt
1.17.5.2 计算多个文件的 MD5 哈希值
md5sum file1.txt file2.txt
输出可能类似于:
0123456789abcdef0123456789abcdef file1.txt 1234567890abcdef0123456789abcdef file2.txt
1.17.5.3 从标准输入读取数据并计算 MD5 哈希值
echo "Hello, world!" | md5sum
输出可能类似于:
b94d27b9934d3e08a52e52d7da7dabf0 -
1.17.5.4 检查文件的 MD5 哈希值是否匹配给定的哈希值(通常存储在另一个文件中)
md5sum -c checksums.md5
checksums.md5 文件内容可能类似于:
0123456789abcdef0123456789abcdef myfile.txt
1.17.6 注意事项
MD5 算法已被认为在某些情况下存在安全漏洞,尤其是当用于密码存储等场景时。因此,对于需要更高安全性的应用,建议使用更安全的哈希算法,如 SHA-256。
md5sum 命令生成的哈希值是固定长度的(32 个十六进制字符)。
当使用 -c 选项时,md5sum 会比较文件内容和给定的哈希值。如果文件内容与哈希值匹配,则不会输出任何内容;如果不匹配,则会输出错误信息。