本文是《Linux 入门指南》的第十二篇文章,以 Ubuntu 21.10 为例,介绍了 Linux 文件管理。

ls(列出目录内容)

描述:

"list(列举)" 的缩写,列出目录内容。

用法:

      ls [选项] [文件名]/[目录名]

选项:

  -a, --all                                          不隐藏任何以 . 开始的项目

  -A, --almost-all                                   列出除 . 及 .. 以外的任何项目

      --author                                       与 -l 同时使用时,列出每个文件的作者

  -b, --escape                                       以 C 风格的转义序列表示不可打印的字符

      --block-size=大小                              与 -l 同时使用时,将文件大小以此处给定的大小为单位进行缩放;例如:“--block-size=M”;请参考下文的大小格式说明

  -B, --ignore-backups                               不列出任何以 ~ 字符结束的项目

  -c                                                 与 -lt 共同使用时:根据 ctime 排序并显示 ctime(文件状态最后更改的时间);与 -l 共同使用时:显示 ctime 并按照名称排序;其它情况:按照 ctime 排序,最新的最前

  -C                                                 每栏由上至下列出项目

      --color[=WHEN]                                 控制是否使用带颜色的输出;WHEN 可以是“always”(默认缺省值)、“auto”或“never”;更多信息请见下文

  -d, --directory                                    当遇到目录时列出目录本身而非目录内的文件

  -D, --dired                                        产生适合 Emacs 的 dired 模式使用的结果

  -f                                                 不进行排序,-aU 选项生效,禁用 -ls --color

  -F, --classify                                     加上文件类型的指示符号(*/=@| 其中一个)

      --file-type                                    类似,但不后缀‘*’字符

      --format=关键字                                 交错 -x,逗号分隔 -m,水平 -x,长 -l,
单栏 -1,详细 -l,垂直 -C

      --full-time                                    类似 -l --time-style=full-iso

  -g                                                 类似 -l,但不列出所有者

      --group-directories-first                      在文件前分组目录;此选项可与--sort 一起使用,但是一旦使用 --sort=none (-U) 将禁用分组

  -G, --no-group                                     以一个长列表的形式,不输出组名

  -h, --human-readable                               与 -l 和 -s 一起,以易于阅读的格式输出文件大小(例如 1K 234M 2G等)

      --si                                           同上面类似,但是使用 1000 为基底而非 1024

  -H, --dereference-command-line                     跟随命令行列出的符号链接

      --dereference-command-line-symlink-to-dir      跟随命令行列出的指向目录的符号链接

      --hide=PATTERN                                 隐藏符合 shell PATTERN 模式的项目(-a 或 -A 将覆盖此选项)

      --hyperlink[=WHEN]                             文件名使用超链接;WHEN 可以是“always”(缺省时的默认选项)、“auto”或“never”

      --indicator-style=方式                         指定在每个项目名称后加上指示符号方式:none(默认)、slash(-p)、 file-type(--file-type)以及 classify(-F)

  -i, --inode                                        显示每个文件的索引编号(inode 号)

  -I, --ignore=模式                                  不显示任何匹配指定 shell <模式>的项目

  -k, --kibibytes                                    默认使用 1024 字节的块显示磁盘使用量; 只用于 -s 和每个目录的总计

  -l				                                 使用较长格式列出信息

  -L, --dereference		                             当显示符号链接的文件信息时,显示符号链接所指示的对象而并非符号链接本身的信息

  -m				                                 所有项目以逗号分隔,并填满整行行宽

  -n, --numeric-uid-gid                              类似 -l,但列出用户和组的 ID 号

  -N, --literal                                      输出未经引号括起的项目名称

  -o                                                 类似 -l,但不列出有关组的信息

  -p, --indicator-style=slash                        对目录附加“/”作为指示符号

  -q, --hide-control-chars                           以“?”字符代替无法打印的字符

      --show-control-chars                           原样显示无法打印的字符(这是默认行为,除非被调用本程序的名称是“ls”而且是在终端中进行输出)

  -Q, --quote-name                                   将条目名称括上双引号

      --quoting-style=方式                           使用指定引用的方式显示条目的名称:literal, locale, shell, shell-always,shell-escape, shell-escape-always, c, escape(该选项优先于 QUOTING_STYLE 环境变量的配置)

  -r, --reverse			                             逆序排列

  -R, --recursive		                             递归显示子目录

  -s, --size			                             以块数形式显示每个文件分配的尺寸

  -S                                                 按文件大小排序,最大的在前

      --sort=WORD                                    按 WORD 而不是名称排序: none (-U), size (-S),time (-t), version (-v), extension (-X)

      --time=WORD                                    更改使用修改时间的默认值; access time (-u): atime, access, use;change time (-c): ctime, status;birth time: birth, creation; with -l, WORD determines which time to show; with --sort=time, sort by WORD (newest first)

      --time-style=TIME_STYLE                        使用 -l 时显示的时间/日期格式;请见下面 TIME_STYLE 的相关内容

  -t                                                 按时间排序,最新的最前;参见 --time

  -T, --tabsize=COLS                                 指定制表符(Tab)的宽度,而非默认8字符

  -u                                                 同 -lt 一起使用:按照访问时间排序并显示;同 -l 一起使用:显示访问时间并按文件名排序; 其它:按照访问时间排序,最新的最靠前

  -U                                                 不进行排序;按照目录顺序列出项目

  -v                                                 在文本中进行数字(版本)的自然排序

  -w, --width=COLS                                   设置输出宽度为 COLS 对应的值。0 代表无限制

  -x                                                 逐行列出项目而不是逐栏列出

  -X                                                 根据扩展名按字母顺序排序

  -Z, --context                                      输出每个文件的所有安全上下文信息

  -1                                                 每行只列出一个文件。与 -q 或 -b 共用时避免 '\n'

      --help		                                 显示此帮助信息并退出

      --version		                                 显示版本信息并退出

实例:

列出目录内容(以列表的形式列出当前目录的内容)

ls -l

列出目录内容(以列表的形式列出当前目录的内容,并显示隐藏的文件/目录)

ls -al

列出目录内容(以列表的形式列出 /tmp 的内容,并显示隐藏的文件/目录)

ls -al /tmp

cd(改变工作目录)

描述:

"change directory(改变目录)" 的缩写,改变工作目录。

用法:

      cd [选项] [目录名]

选项:

        -L	强制跟随符号链接: 在处理 `..' 之后解析 DIR 中的符号链接。

        -P	使用物理目录结构而不跟随符号链接: 在处理 `..' 之前解析 DIR 中的符号链接。

        -e	如果使用了 -P 参数,但不能成功确定当前工作目录时,返回非零的返回值。

        -@	在支持拓展属性的系统上,将一个有这些属性的文件当作有文件属性的目录。

实例:

改变工作目录(进入上一级目录)

cd ..

改变工作目录(进入根目录)

cd /

改变工作目录(进入家目录)

cd ~

pwd(显示工作目录)

描述:

" print working directory(打印工作目录)" 的缩写,显示工作目录。

用法:

      pwd [选项] [目录名]

选项:

      -L	打印 $PWD 变量的值,如果它包含了当前的工作目录

      -P	打印当前的物理路径,不带有任何的符号链接

实例:

显示工作目录(显示当前的工作目录的绝对路径)

pwd

mkdir(创建目录)

描述:

" make directory(创建目录)" 的缩写,创建目录。

用法:

      mkdir [选项] [目录名]

选项:

  -m, --mode=模式         设置权限模式(类似chmod),而不是 a=rwx 减 umask

  -p, --parents           需要时创建目标目录的上层目录,但即使这些目录已存在,也不当作错误处理

  -v, --verbose           每次创建新目录都显示信息

  -Z                      设置每个创建的目录的 SELinux 安全上下文为默认类型

      --context[=CTX]     类似 -Z,或如果指定了 CTX,则将 SELinux 或 SMACK 安全 上下文设置为 CTX 对应的值

      --help		      显示此帮助信息并退出

      --version		      显示版本信息并退出

实例:

创建目录(创建目录 rat)

mkdir rat

创建目录(递归创建目录 ox/tiger。如果上级目录 ox 不存在,则会自动创建。)

mkdir -p ox/tiger

rmdir(删除空目录)

描述:

" remove directory(移除目录)" 的缩写,删除空目录。

用法:

      rmdir [选项] [目录名]

选项:

      --ignore-fail-on-non-empty           忽略仅由目录非空产生的所有错误

  -p, --parents                            删除指定目录及其各个上级文件夹,例如“rmdir -p a/b/c'”,与“rmdir a/b/c a/b a'”类似

  -v, --verbose                            输出每个被处理目录的详情和诊断信息

      --help		                       显示此帮助信息并退出

      --version		                       显示版本信息并退出

实例:

删除目录(删除目录 rat)

rmdir rat

删除目录(递归删除目录 ox/tiger。如果上级目录 ox 是空目录,则一并删除。)

rmdir -p ox/tiger

cp(复制 文件/目录)

描述:

" copy(复制)" 的缩写,复制 文件/目录。

用法:

      cp [选项] [文件名]/[目录名] [文件名]/[目录名] 

选项:

  -a, --archive			                              等于-dR --preserve=all

      --attributes-only	                              仅复制属性而不复制数据      
      
      --backup[=CONTROL		                          为每个已存在的目标文件创建备份

  -b				                                  类似--backup 但不接受参数

      --copy-contents		                          在递归处理是复制特殊文件内容

  -d				                                  等于--no-dereference --preserve=links

  -f, --force                                         如果有已存在的目标文件且无法打开,则将其删除并重试(该选项在与 -n 选项同时使用时将被忽略)

  -i, --interactive                                   覆盖前询问(使前面的 -n 选项失效)

  -H                                                  跟随源文件中的命令行符号链接

  -l, --link                                          硬链接文件以代替复制

  -L, --dereference                                   总是跟随源文件中的符号链接

  -n, --no-clobber		                              不要覆盖已存在的文件(使前面的 -i 选项失效)

  -P, --no-dereference		                          不跟随源文件中的符号链接

  -p				                                  等于--preserve=模式,所有权,时间戳

      --preserve[=属性列表	                          保持指定的属性(默认:模式,所有权,时间戳),如果可能保持附加属性:上下文、链接、xattr 等

      --sno-preserve=属性列表	                      不保留指定的文件属性

      --parents			                              复制前在目标目录创建来源文件路径中的所有目录

  -R, -r, --recursive		                          递归复制目录及其子目录内的所有内容

      --reflink[=WHEN]		                          控制克隆/CoW 副本。请查看下面的内如。

      --remove-destination	                          尝试打开目标文件前先删除已存在的目的地文件 (相对于 --force 选项)

      --sparse=WHEN		                              控制创建稀疏文件的方式

      --strip-trailing-slashes	                      删除参数中所有源文件/目录末端的斜杠

  -s, --symbolic-link		                          只创建符号链接而不复制文件

  -S, --suffix=后缀		                              自行指定备份文件的后缀

  -t,  --target-directory=目录	                      将所有参数指定的源文件/目录复制至目标目录

  -T, --no-target-directory	                          将目标目录视作普通文件

  -u, --update			                              只在源文件比目标文件新,或目标文件不存在时才进行复制

  -v, --verbose		                                  显示详细的进行步骤

  -x, --one-file-system	                              不跨越文件系统进行操作

  -Z                                                  设置目标文件的 SELinux 安全上下文为默认类型

      --context[=上下文]                               类似 -Z;如果指定了上下文,则将 SELinux 或 SMACK 安全上下文设置为指定值

      --help		                                  显示此帮助信息并退出

      --version		                                  显示版本信息并退出

实例:

复制文件(复制文件 rat 到目录 rabbit)

cp rat rabbit

复制目录(递归复制目录 ox 到目录 rabbit)

cp -r ox rabbit

复制文件和目录(递归复制文件 rat 和 目录 ox 到目录 dragon)

cp -r rat ox dragon

mv(移动/重命名 文件/目录)

描述:

" move(移动)" 的缩写,移动/重命名 文件/目录。

用法:

      mv [选项] [文件名]/[目录名] [文件名]/[目录名] 

选项:

      --backup[=CONTROL]       为每个已存在的目标文件创建备份

  -b                           类似--backup 但不接受参数

  -f, --force                  覆盖前不询问

  -i, --interactive            覆盖前询问

  -n, --no-clobber             不覆盖已存在文件。如果您指定了-i、-f、-n 中的多个,仅最后一个生效。

      --strip-trailing-slashes 去掉每个源文件参数尾部的斜线

  -S, --suffix=SUFFIX		   替换常用的备份文件后缀

  -t, --target-directory=目录  将所有<源文件>移动至指定的<目录>中

  -T, --no-target-directory    将参数中所有<目标文件>部分视为普通文件

  -u, --update                 仅在<源文件>比目标文件更新,或者目标文件不存在时进行移动操作

  -v, --verbose                对正在发生的操作给出解释

  -Z, --context                将目标文件的 SELinux 安全上下文设置为默认类型

      --help		           显示此帮助信息并退出

      --version		           显示版本信息并退出

实例:

移动文件(移动文件 rat 到目录 snake)

mv rat snake

移动目录(移动目录 ox 到目录 snake)

mv ox/ snake

移动文件和目录(移动文件 snake/rat 和 目录 snake/ox 到目录 horse)

mv snake/rat snake/ox/ horse

重命名目录(重命名目录 horse→sheep)

mv horse sheep

rm(删除 文件/目录)

描述:

" remove(移除)" 的缩写,删除 文件/目录。

用法:

      rm [选项] [文件名]/[目录名]

选项:

  -f, --force                        强制删除。忽略不存在的文件,不提示确认

  -i                                 每次删除前提示确认

  -I                                 在删除超过三个文件或者递归删除前提示一次并要求确认;此选项比 -i 提示内容更少,但同样可以阻止大多数错误发生

      --interactive[=场景]           根据指定的<场景>进行确认提示:never(从不)、 once(一次,等效于使用 -I)或者 always(总是,等效于使用 -i)。如果使用此参数没有指定<场景>则总是提示

      --one-file-system		         递归删除一个层级时,跳过所有不符合命令行参数的文件系统上的文件

      --no-preserve-root             不要对“/”特殊处理

      --preserve-root[=all]          不要删除“/”(默认行为);如添加了“all”参数,将拒绝处理与父目录位于不同设备上的命令行参数

  -r, -R, --recursive                递归删除目录及其内容

  -d, --dir                          删除空目录

  -v, --verbose                      详细显示进行的步骤

      --help		                 显示此帮助信息并退出

      --version		                 显示版本信息并退出

实例:

删除文件(删除文件 rabbit/rat)

rm rabbit/rat

删除目录(递归删除目录 rabbit/ox)

rm -r rabbit/ox

删除文件和目录(递归删除文件 sheep/rat 和目录 sheep/ox)

rm -rf sheep/rat sheep/ox