文件管理
一、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 > file3
将 file1
和 file2
的内容合并到 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
Linux tee
命令用于读取标准输入的数据,并将其内容输出成文件。tee
指令会从标准输入设备读取数据,将其内容输出到标准输出设备,同时保存成文件。
40.1 语法
tee [-ai][--help][--version][文件...]
-
-a
或--append
: 附加到既有文件的后面,而非覆盖它. -
-i
或--ignore-interrupts
: 忽略中断信号。 -
--help
: 在线帮助。 -
--version
: 显示版本信息。
40.2 tee file1 file2
tee file1 file2
使用指令 tee
将用户输入的数据同时保存到文件 file1
和 file2
中
40.3 echo "Hello, World!" | tee output.txt
echo "Hello, World!" | tee output.txt
将输出同时保存到文件和屏幕
40.4 echo "Append this line" | tee -a output.txt
echo "Append this line" | tee -a output.txt
在 output.txt
文件末尾添加内容,而不会覆盖已有内容。
40.5 命令 | tee output.text
命令 | tee output.text
将命令的运行结果输出到 output.txt
四十一、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 target
将 source
目录下所有文件复制到目标目录 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 target
将 source
目录下所有文件复制到目标目录 dest
下,并直接覆盖
cp -rf 源目录/. 目标目录
四十六、whereis
四十七、mcopy
四十八、mshowfat
四十九、rhmask
五十、scp
Linux scp
命令用于 Linux
之间复制文件和目录。scp
是 secure copy
的缩写, scp
是 linux
系统下基于 ssh
登陆进行安全的远程文件拷贝命令。scp
是加密的,rcp
是不加密的,scp
是 rcp
的加强版。
语法
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
: 详细方式显示输出。scp
和ssh(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 输入:匹配以剑姬开头的行,并打印匹配行的最后一个字段, 输出为 剑魔