跳到主要内容

文件管理

2024年05月28日
柏拉文
越努力,越幸运

一、cat


cat (英文全拼:concatenate)命令用于连接文件并打印到标准输出设备上,它的主要作用是用于查看和连接文件。

语法

cat [选项] [文件]
  • -n:显示行号,会在输出的每一行前加上行号。

  • -b:显示行号,但只对非空行进行编号。

  • -s:压缩连续的空行,只显示一个空行。

  • -E:在每一行的末尾显示 $ 符号。

  • -T:将 Tab 字符显示为 ^I

  • -v:显示一些非打印字符。

1.1 cat > filename

cat > filename 将标准输入重定向到文件 filename,覆盖该文件的内容。然后你可以输入文本,按 Ctrl+D 来保存并退出。

1.2 cat >> filename

cat >> filename 将标准输入追加到文件 filename 的末尾。然后你可以输入文本,按 Ctrl+D 来保存并退出。

1.3 cat file1 file2 > file3

cat file1 file2 > file3file1file2 的内容合并到 file3 中。

1.4 cat <<EOF > file \ 内容 \ 内容 \ EOF

cat <<EOF > file \ 内容 \ 内容 \ EOF 你输入这条命令后,Shell 会等待你输入多行文本。可以输入任意内容,直到输入单独一个 EOF(结束标识符),那么这些输入的内容都会被保存到指定的文件中。总结起来,这条命令是用来快速向一个文件中写入多行文本内容的。

语法

cat <<EOF > file \ 内容 \ 内容 \ EOF

用法一、命令行使用 cat <<EOF > file \ 内容 \ 内容 \ EOF: 输入 cat <<EOF > file 时回车,命令行会自动提示 heredoc>。如下所示:

cat <<EOF > text.txt                                           
heredoc> 这是一个很寂寞的天
heredoc> 下着有些伤心的雨!
heredoc> EOF

用法二、Shell 脚本使用 cat <<EOF > file \ 内容 \ 内容 \ EOF

#!/usr/bin/env bash

filePath=text.txt

cat <<EOF > ${filePath}
这是一个很寂寞的天
下着有些伤心的雨!
EOF

二、chattr


三、chgrp


四、chmod


五、chown


六、cksum

七、cmp


八、diff


九、diffstat


十、file


十一、find


find 命令用于在指定目录下查找文件和目录。

语法

find [路径] [匹配条件] [动作]
  • 路径: 是要查找的目录路径,可以是一个目录或文件名,也可以是多个路径,多个路径之间用空格分隔,如果未指定路径,则默认为当前目录。

  • 匹配条件: 是可选参数,用于指定查找的条件,可以是文件名、文件类型、文件大小等等。

    • -name pattern: 按文件名查找,支持使用通配符 *?

    • -type type: 按文件类型查找,可以是 f(普通文件)、d(目录)、l(符号链接)等。

    • -size [+-]size[cwbkMG]: 按文件大小查找,支持使用 +- 表示大于或小于指定大小,单位可以是 c(字节)、w(字数)、b(块数)、k(KB)M(MB)或 G(GB)。

    • -mtime days: 按修改时间查找,支持使用 +- 表示在指定天数前或后,days 是一个整数表示天数。

    • -user username: 按文件所有者查找

    • -group groupname: 按文件所属组查找

  • 动作: 可选的,用于对匹配到的文件执行操作,比如删除、复制等。

11.1 find [目录] -name [fileName]

find [目录] -name [fileName] 寻找当前目录下匹配的文件

语法

find [目录] -name [fileName]

用法

find . -name "*eadme.md" // 寻找当前目录下以 eadme.md 结尾的文件

十二、git


十三、gitview


十四、indent


十五、cut


十六、ln


十七、less


十八、locate


十九、lsattr


二十、mattrib


二十一、mc


二十二、mdel


二十三、mdir


二十四、mktemp


二十五、more


more 命令类似 cat ,不过会以一页一页的形式显示,更方便使用者逐页阅读,而最基本的指令就是按空白键(space)就往下一页显示,按 b 键就会往回(back)一页显示,而且还有搜寻字串的功能(与 vi 相似),使用中的说明文件,请按 h

语法

more [-dlfpcsu] [-num] [+/pattern] [+linenum] [fileNames..]
  • -num 一次显示的行数

  • -d 提示使用者,在画面下方显示 [Press space to continue, 'q' to quit.] ,如果使用者按错键,则会显示 [Press 'h' for instructions.] 而不是

  • -l 取消遇见特殊字元 ^L(送纸字元)时会暂停的功能

  • -f 计算行数时,以实际上的行数,而非自动换行过后的行数(有些单行字数太长的会被扩展为两行或两行以上)

  • -p 不以卷动的方式显示每一页,而是先清除萤幕后再显示内容

  • -c-p 相似,不同的是先显示内容再清除其他旧资料

  • -s 当遇到有连续两行以上的空白行,就代换为一行的空白行

  • -u 不显示下引号 (根据环境变数 TERM 指定的 terminal 而有所不同)

  • +/pattern 在每个文档显示前搜寻该字串(pattern),然后从该字串之后开始显示

  • +num 从第 num 行开始显示

  • fileNames 欲显示内容的文档,可为复数个数

25.1 more [fileNames]

25.2 more -s [fileNames]

more -s [fileNames] 逐页显示 testfile 文档内容,如有连续两行以上空白行则以一行空白行显示。

二十六、mmove


二十七、mread


二十八、mren


二十九、mtools


三十、mtoolstest


三十一、mv


Linux mv(英文全拼:move file)命令用来为文件或目录改名、或将文件或目录移入其它位置。

语法

mv [options] source dest
mv [options] source... directory
  • -b: 当目标文件或目录存在时,在执行覆盖前,会为其创建一个备份。

  • -i: 如果指定移动的源目录或文件与目标的目录或文件同名,则会先询问是否覆盖旧文件,输入 y 表示直接覆盖,输入 n 表示取消该操作。

  • -f: 如果指定移动的源目录或文件与目标的目录或文件同名,不会询问,直接覆盖旧文件。

  • -n: 不要覆盖任何已存在的文件或目录。

  • -u:当源文件比目标文件新或者目标文件不存在时,才执行移动操作。

31.1 source_file dest_file

source_file(文件) dest_file(文件) 将源文件名 source_file 改为目标文件名 dest_file

31.2 mv source_file dest_directory

mv source_file dest_directory 将文件 source_file 移动到目标目录 dest_directory

31.3 mv source_directory dest_directory

mv source_directory dest_directory 目录名 dest_directory 已存在,将 source_directory 移动到目录名 dest_directory 中;目录名 dest_directory 不存在则 source_directory 改名为目录名 dest_directory

三十二、od


三十三、paste


三十四、patch


三十五、rcp


rcp 命令用于复制远程文件或目录。rcp指令用在远端复制文件或目录,如同时指定两个以上的文件或目录,且最后的目的地是一个已经存在的目录,则它会把前面指定的所有文件或目录复制到该目录中。

语法

rcp [-pr][源文件或目录][目标文件或目录]
  • -p: 保留源文件或目录的属性,包括拥有者,所属群组,权限与时间。

  • -r: 递归处理,将指定目录下的文件与子目录一并处理。

三十六、rm


三十八、slocate


三十九、split


四十、tee


四十一、tmpwatch


四十二、touch


touch 命令用于修改文件或者目录的时间属性,包括存取时间和更改时间。若文件不存在,系统会建立一个新的文件。

42.1 touch [file]

touch [file] 创建一个名为 file 的空白文件

四十三、umask


四十四、which


四十五、cp


cp(英文全拼:copy file: 复制文件或目录

语法

cp [options] source dest

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

选项说明

  • -a:此选项通常在复制目录时使用,它保留链接、文件属性,并复制目录下的所有内容。其作用等于 dpR 参数组合。

  • -d:复制时保留链接。这里所说的链接相当于 Windows 系统中的快捷方式。

  • -r--recursive:用于复制目录及其所有的子目录和文件,如果要复制目录,需要使用该选项。

  • -i--interactive:在复制前提示确认,如果目标文件已存在,则会询问是否覆盖,回答 y 时目标文件将被覆盖。。

  • -u--update:仅复制源文件中更新时间较新的文件。

  • -v--verbose:显示详细的复制过程。

  • -p--preserve:保留源文件的权限、所有者和时间戳信息。

  • -f--force:强制复制,即使目标文件已存在也会覆盖,而且不给出提示。

  • -l:不复制文件,只是生成链接文件。

45.1 cp -r source target

cp -r source targetsource 目录下所有文件复制到目标目录 target

cp -r 源目录/. 目标目录

45.2 cp -rl source target

cp -rl source target: 将 source 目录下所有文件复制到目标目录 dest 下,并提示覆盖

cp -rl 源目录/. 目标目录

45.3 cp -rf source target

cp -rf source targetsource 目录下所有文件复制到目标目录 dest 下,并直接覆盖

cp -rf 源目录/. 目标目录

四十六、whereis


四十七、mcopy


四十八、mshowfat


四十九、rhmask


五十、scp


Linux scp 命令用于 Linux 之间复制文件和目录。scpsecure copy 的缩写, scplinux 系统下基于 ssh 登陆进行安全的远程文件拷贝命令。scp 是加密的,rcp 是不加密的,scprcp 的加强版。

语法

scp [可选参数] file_source file_target 
  • -1: 强制scp命令使用协议ssh1

  • -2: 强制scp命令使用协议ssh2

  • -4: 强制scp命令只使用IPv4寻址

  • -6: 强制scp命令只使用IPv6寻址

  • -B: 使用批处理模式(传输过程中不询问传输口令或短语)

  • -C: 允许压缩。(将-C标志传递给ssh,从而打开压缩功能)

  • -p: 保留原文件的修改时间,访问时间和访问权限。

  • -q: 不显示传输进度条。

  • -r: 递归复制整个目录。

  • -v: 详细方式显示输出。scpssh(1)会显示出整个过程的调试信息。这些信息用于调试连接,验证和配置问题。

  • -c cipher: 以cipher将数据传输进行加密,这个选项将直接传递给ssh。

  • -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh。

  • -i identity_file: 从指定文件中读取传输时使用的密钥文件,此参数直接传递给ssh。

  • -l limit: 限定用户所能使用的带宽,以Kbit/s为单位。

  • -o ssh_option: 如果习惯于使用ssh_config(5)中的参数传递方式,

  • -P port: 注意是大写的P, port是指定数据传输用到的端口号

  • -S program: 指定加密传输时所使用的程序。此程序必须能够理解ssh(1)的选项。

五十一、awk


awk 是一种处理文本文件的语言,是一个强大的文本分析工具。awk 通过提供编程语言的功能,如变量、数学运算、字符串处理等,使得对文本文件的分析和操作变得非常灵活和高效。

语法

awk options 'pattern {action}' file
  • options:是一些选项,用于控制 awk 的行为。

    • -F <分隔符>--field-separator=<分隔符>: 指定输入字段的分隔符,默认是空格。使用这个选项可以指定不同于默认分隔符的字段分隔符。

    • -v <变量名>=<值>: 设置 awk 内部的变量值。可以使用该选项将外部值传递给 awk 脚本中的变量。

    • -f <脚本文件>: 指定一个包含 awk 脚本的文件。这样可以在文件中编写较大的 awk 脚本,然后通过 -f 选项将其加载。

    • -v--version: 显示 awk 的版本信息。

    • -h--help: 显示 awk 的帮助信息,包括选项和用法示例。

  • pattern: 是用于匹配输入数据的模式。如果省略,则 awk 将对所有行进行操作。

  • {action}: 是在匹配到模式的行上执行的动作。如果省略,则默认动作是打印整行。

内建变量

  • $n 当前记录的第n个字段,字段间由FS分隔, 默认是空格或制表符

  • $0 完整的输入记录

  • ARGC 命令行参数的数目

  • ARGIND 命令行中当前文件的位置(从0开始算)

  • ARGV 包含命令行参数的数组

  • CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组

  • ERRNO 最后一个系统错误的描述

  • FIELDWIDTHS 字段宽度列表(用空格键分隔)

  • FILENAME 当前文件名

  • FNR 各文件分别计数的行号

  • FS 字段分隔符(默认是任何空格)

  • IGNORECASE 如果为真,则进行忽略大小写的匹配

  • NF 一条记录的字段的数目

  • NR 已经读出的记录数,就是行号,从1开始

  • OFMT 数字的输出格式(默认值是%.6g)

  • OFS 输出字段分隔符,默认值与输入字段分隔符一致。

  • ORS 输出记录分隔符(默认值是一个换行符)

  • RLENGTH 由match函数所匹配的字符串的长度

  • RS 记录分隔符(默认是一个换行符)

  • RSTART 由match函数所匹配的字符串的第一个位置

  • SUBSEP 数组下标分隔符(默认值是/034)

51.1 awk '{print}' file

awk '{print}' file 打印整行

51.2 awk '{print $1, $2}' file

awk '{print $1, $2}' file 打印特定列

51.3 awk '{print NR, $0}' file

awk '{print NR, $0}' file 打印行数

51.4 awk -F',' '{print $1, $2}' file

awk -F',' '{print $1, $2}' file 使用分隔符指定列

51.5 awk '/pattern/ {print}' file

awk '/pattern/ {print}' file 打印匹配成功后的行。如下所示:

cat <<EOF > text.txt
heredoc> 剑姬 剑圣 剑豪 剑魔
heredoc> 妖姬 薇恩
heredoc> EOF

awk '/剑姬/ {print $1}' text.txt // 匹配以剑姬开头的行,并打印整行

51.6 awk '/pattern/ {print $n}' file

awk '/pattern/ {print $n}' file 打印匹配成功后的行的第 n 个字段。如下所示:

cat <<EOF > text.txt
heredoc> 剑姬 剑圣 剑豪 剑魔
heredoc> 妖姬 薇恩
heredoc> EOF

awk '/剑姬/ {print $1}' text.txt // 匹配以剑姬开头的行,并打印第一个字段, 输出为 剑姬

51.7 awk '/pattern/ {print $NF}' file

awk '/pattern/ {print $NF}' file 打印匹配成功后的行的最后一个字段。如下所示:

cat <<EOF > text.txt
heredoc> 剑姬 剑圣 剑豪 剑魔
heredoc> 妖姬 薇恩
heredoc> EOF

awk '/剑姬/ {print $NF}' text.txt // 匹配以剑姬开头的行,并打印最后一个字段, 输出为 剑魔

51.8 awk '/pattern/ {print NR, $0}' file

awk '/pattern/ {print NR, $0}' file 打印行数满足条件的行

51.9 awk '/pattern/ {print $n; exit}' file

awk '/pattern/ {print $n; exit}' file 打印匹配成功后的行的第 n 个字段, 并立即退出 awk,不会处理剩余行

51.10 awk '{sum += $1} END {print sum}' file

awk '{sum += $1} END {print sum}' file 计算列的总和

51.11 awk 'max < $1 {max = $1} END {print max}' file

awk 'max < $1 {max = $1} END {print max}' file 打印最大值

51.12 awk '{printf "%-10s %-10s\n", $1, $2}' file

awk '{printf "%-10s %-10s\n", $1, $2}' file 格式化输出

51.13 xxx 命令 | awk '/pattern/ {print}'

xxx 命令 | awk '/pattern/ {print}'xxx 命令的输出结果作为 awk 的输入 file, 并正则匹配成功后输出整行。如下所示:

cat <<EOF > text.txt
heredoc> 剑姬 剑圣 剑豪 剑魔
heredoc> 妖姬 薇恩
heredoc> EOF

cat text.txt | awk '/剑姬/ {print}' // 读取 text.txt 文件,并通过管道符 | 将 cat 命令的输出结果作为 awk 命令的 file 输入:匹配以剑姬开头的行,并打印整行, 输出为 剑姬 剑圣 剑豪 剑魔

51.14 xxx 命令 | awk '/pattern/ {print; exit}'

xxx 命令 | awk '/pattern/ {print; exit}'xxx 命令的输出结果作为 awk 的输入 file, 并正则匹配成功后输出整行。成功匹配一行之后,awk 会立即退出,不会处理剩余行。

cat <<EOF > text.txt
heredoc> 剑姬 剑圣 剑豪 剑魔
heredoc> 妖姬 薇恩
heredoc> EOF

cat text.txt | awk '/剑姬/ {print; exit}' // 读取 text.txt 文件,并通过管道符 | 将 cat 命令的输出结果作为 awk 命令的 file 输入:匹配以剑姬开头的行,并打印整行, 输出为 剑姬 剑圣 剑豪 剑魔, 匹配成功后立即退出,不处理剩余行。

51.15 xxx 命令 | awk '/pattern/ {print $1……n}'

xxx 命令 | awk '/pattern/ {print}'xxx 命令的输出结果作为 awk 的输入 file, 并正则匹配成功后输出当前行的第 n 个字段。

cat <<EOF > text.txt
heredoc> 剑姬 剑圣 剑豪 剑魔
heredoc> 妖姬 薇恩
heredoc> EOF

cat text.txt | awk '/剑姬/ {print $1}' // 读取 text.txt 文件,并通过管道符 | 将 cat 命令的输出结果作为 awk 命令的 file 输入:匹配以剑姬开头的行,并打印匹配行的第一个字段, 输出为 剑姬

51.16 xxx 命令 | awk '/pattern/ {print $NF}'

xxx 命令 | awk '/pattern/ {print}'xxx 命令的输出结果作为 awk 的输入 file, 并正则匹配成功后输出当前行的最后一个字段。

cat <<EOF > text.txt
heredoc> 剑姬 剑圣 剑豪 剑魔
heredoc> 妖姬 薇恩
heredoc> EOF

cat text.txt | awk '/剑姬/ {print $NF}' // 读取 text.txt 文件,并通过管道符 | 将 cat 命令的输出结果作为 awk 命令的 file 输入:匹配以剑姬开头的行,并打印匹配行的最后一个字段, 输出为 剑魔

五十二、read


五十三、updatedb