连接多个文件并打印到标准输出。
概要
cat [-AbeEnstTuv] [--help] [--version] fileName
主要用途
参数
FILE(可选):要处理的文件,可以为一或多个。
选项
长选项与短选项等价
选项 | 含义 |
---|---|
-A, --show-all | 等价于"-vET"组合选项。 |
-b, --number-nonblank | 只对非空行编号,从1开始编号,覆盖"-n"选项。 |
-e | 等价于"-vE"组合选项。 |
-E, --show-ends | 在每行的结尾显示’$'字符。 |
-n, --number | 对所有行编号,从1开始编号。 |
-s, --squeeze-blank | 压缩连续的空行到一行。 |
-t | 等价于"-vT"组合选项。 |
-T, --show-tabs | 使用"^I"表示TAB(制表符)。 |
-u | POSIX兼容性选项,无意义。 |
-v, --show-nonprinting | 使用"^"和"M-"符号显示控制字符,除了LFD(line feed,即换行符’\n’)和TAB(制表符)。 |
–help | 显示帮助信息并退出。 |
–version | 显示版本信息并退出。 |
返回值
除非给出了非法选项或非法参数。
例子
# 合并显示多个文件
cat ./1.log ./2.log ./3.log
# 显示文件中的非打印字符、tab、换行符
cat -A test.log
# 压缩文件的空行
cat -s test.log
# 显示文件并在所有行开头附加行号
cat -n test.log
# 显示文件并在所有非空行开头附加行号
cat -b test.log
# 将标准输入的内容和文件内容一并显示
echo '######' |cat - test.log
注意
用来改变文件属性
补充说明
chattr命令 用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
a:让文件或目录仅供附加用途;
b:不更新文件或目录的最后存取时间;
c:将文件或目录压缩后存放;
d:将文件或目录排除在倾倒操作之外;
i:不得任意更动文件或目录;
s:保密性删除文件或目录;
S:即时更新文件或目录;
u:预防意外删除。
语法
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录...]
选项
选项 | 含义 |
---|---|
-R | 递归处理,将指令目录下的所有文件及子目录一并处理 |
v<版本编号> | 设置文件或目录版本 |
-V | 显示指令执行过程 |
+<属性> | 开启文件或目录的该项属性 |
-<属性> | 关闭文件或目录的该项属性 |
=<属性> | 指定文件或目录的该项属性 |
例子
# 用chattr命令防止系统中某个关键文件被修改:
chattr +i /etc/fstab
# 然后试一下rm、mv、rename等命令操作于该文件,都是得到Operation not permitted的结果。
# 让某个文件只能往里面追加内容,不能删除,一些日志文件适用于这种操作:
chattr +a /data1/user_act.log
用来变更文件或目录的所属群组
补充说明
chgrp用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。
在UNIX系统家族里,文件或目录权限的掌控以拥有者及所属群组来管理。您可以使用chgrp指令去变更文件与目录的所属群组,设置方式采用群组名称或群组识别码皆可。
语法
chgrp [-cfhRv][--help][--version][所属群组][文件或目录...] 或 chgrp [-cfhRv][--help][--reference=<参考文件或目录>][--version][文件或目录...]
选项
选项 | 含义 |
---|---|
-R | 递归式地改变指定目录及其下的所有子目录和文件的所属的组 |
-c或——changes | 效果类似“-v”参数,但仅回报更改的部分 |
-f或–quiet或——silent | 不显示错误信息 |
-h或–no-dereference | 只对符号连接的文件作修改,而不是该其他任何相关文件 |
-H | 如果命令行参数是一个通到目录的符号链接,则遍历符号链接 |
-R或——recursive | 递归处理,将指令目录下的所有文件及子目录一并处理 |
-L | 遍历每一个遇到的通到目录的符号链接 |
-P | 不遍历任何符号链接(默认) |
-v或——verbose | 显示指令执行过程 |
–reference=<参考文件或目录> | 把指定文件或目录的所属群组全部设成和参考文件或目录的所属群组相同 |
参数
实例
# 将/usr/meng及其子目录下的所有文件的用户组改为mengxin
chgrp -R mengxin /usr/meng
# 更改文件ah的组群所有者为 newuser
chgrp newuser ah
用来变更文件或目录的权限
语法
chmod [-cfvR] [--help] [--version] mode file...
主要用途
参数
mode:八进制数或符号组合。
file:指定要更改权限的一到多个文件。
选项
选项 | 含义 |
---|---|
-c, --changes | 当文件的权限更改时输出操作信息。 |
–no-preserve-root | 不将’/'特殊化处理,默认选项。 |
–preserve-root | 不能在根目录下递归操作。 |
-f, --silent, --quiet | 抑制多数错误消息的输出。 |
-v, --verbose | 无论文件是否更改了权限,一律输出操作信息。 |
–reference=RFILE | 使用参考文件或参考目录RFILE的权限来设置目标文件或目录的权限。 |
-R, --recursive | 对目录以及目录下的文件递归执行更改权限操作。 |
–help | 显示帮助信息并退出。 |
–version | 显示版本信息并退出。 |
返回值
返回状态为成功除非给出了非法选项或非法参数。
例子
参考man chmod文档的DESCRIPTION段落得知:
u符号代表当前用户。
g符号代表和当前用户在同一个组的用户,以下简称组用户。
o符号代表其他用户。
a符号代表所有用户。
r符号代表读权限以及八进制数4。
w符号代表写权限以及八进制数2。
x符号代表执行权限以及八进制数1。
X符号代表如果目标文件是可执行文件或目录,可给其设置可执行权限。
s符号代表设置权限suid和sgid,使用权限组合u+s设定文件的用户的ID位,g+s设置组用户ID位。
t符号代表只有目录或文件的所有者才可以删除目录下的文件。
+符号代表添加目标用户相应的权限。
-符号代表删除目标用户相应的权限。
=符号代表添加目标用户相应的权限,删除未提到的权限。
linux文件的用户权限说明:
# 查看当前目录(包含隐藏文件)的长格式。
ls -la
-rw-r--r-- 1 user staff 651 Oct 12 12:53 .gitmodules
# 第1位如果是d则代表目录,是-则代表普通文件。
# 更多详情请参阅info coreutils 'ls invocation'(ls命令的info文档)的'-l'选项部分。
# 第2到4位代表当前用户的权限。
# 第5到7位代表组用户的权限。
# 第8到10位代表其他用户的权限。
# 添加组用户的写权限。
chmod g+w ./test.log
# 删除其他用户的所有权限。
chmod o= ./test.log
# 使得所有用户都没有写权限。
chmod a-w ./test.log
# 当前用户具有所有权限,组用户有读写权限,其他用户只有读权限。
chmod u=rwx, g=rw, o=r ./test.log
# 等价的八进制数表示:
chmod 754 ./test.log
# 将目录以及目录下的文件都设置为所有用户拥有读写权限。
# 注意,使用'-R'选项一定要保留当前用户的执行和读取权限,否则会报错!
chmod -R a=rw ./testdir/
# 根据其他文件的权限设置文件权限。
chmod --reference=./1.log ./test.log
注意
用来变更文件或目录的拥有者或所属群组
补充说明
chown改变某个文件或目录的所有者和所属的组,该命令可以向某个用户授权,使该用户变成指定文件的所有者或者改变文件所属的组。用户可以是用户或者是用户D,用户组可以是组名或组id。文件名可以使由空格分开的文件列表,在文件名中可以包含通配符。
只有文件主和超级用户才可以便用该命令。
语法
chown [-cfhvR] [--help] [--version] user[:group] file...
选项
选项 | 含义 |
---|---|
-c或——changes | 效果类似“-v”参数,但仅回报更改的部分 |
-f或–quite或——silent | 不显示错误信息 |
-h或–no-dereference | 只对符号连接的文件作修改,而不更改其他任何相关文件 |
-R或——recursive | 递归处理,将指定目录下的所有文件及子目录一并处理 |
-v或——version | 显示指令执行过程 |
–dereference | 效果和“-h”参数相同 |
–help | 在线帮助 |
–reference=<参考文件或目录> | 把指定文件或目录的拥有者与所属群组全部设成和参考文件或目录的拥有者与所属群组相同 |
–version | 显示版本信息 |
参数
用户[:组]:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。
实例
# 把 /var/run/httpd.pid 的所有者设置 root:
chown root /var/run/httpd.pid
# 将文件 file1.txt 的拥有者设为 runoob,群体的使用者 runoobgroup :
chown runoob:runoobgroup file1.txt
# 将当前前目录下的所有文件与子目录的拥有者皆设为 runoob,群体的使用者 runoobgroup:
chown -R runoob:runoobgroup *
# 把 /home/runoob 的关联组设置为 512 (关联组ID),不改变所有者:
chown :512 /home/runoob
检查文件的CRC是否正确
补充说明
cksum命令 是检查文件的CRC是否正确,确保文件从一个系统传输到另一个系统的过程中不被损坏。这种方法要求校验和在源系统中被计算出来,在目的系统中又被计算一次,两个数字进行比较,如果校验和相等,则该文件被认为是正确传输了。
注意:CRC是指一种排错检查方法,即循环冗余校验法。
指定文件交由cksum命令进行校验后,会返回校验结果供用户核对文件是否正确无误。若不指定任何文件名称或是所给予的文件名为"-",则cksum命令会从标准输入设备中读取数据。
语法
cksum [--help][--version][文件...]
选项
选项 | 含义 |
---|---|
–help | 在线帮助 |
–version | 显示版本信息 |
参数
文件:指定要计算校验的版本信息。
实例
# 使用cksum命令计算文件"testfile1"的完整性,输入如下命令:
cksum testfile1 #对指定文件进行CRC校验
# 以上命令执行后,将输出校验码等相关的信息,具体输出信息如下所示:
1263453430 78 testfile1 #输出信息
# 上面的输出信息中,"1263453430"表示校验码,"78"表示字节数。
# 注意:如果文件中有任何字符被修改,都将改变计算后CRC校验码的值。
比较两个文件是否有差异
补充说明
cmp命令 用来比较两个文件是否有差异。当相互比较的两个文件完全一样时,则该指令不会显示任何信息。若发现有差异,预设会标示出第一个不通之处的字符和列数编号。若不指定任何文件名称或是所给予的文件名为“-”,则cmp指令会从标准输入设备读取数据。
语法
cmp [-clsv][-i <字符数目>][--help][第一个文件][第二个文件]
选项
选项 | 含义 |
---|---|
-c或–print-chars | 除了标明差异处的十进制字码之外,一并显示该字符所对应字符。 |
-i<字符数目>或–ignore-initial=<字符数目> | 指定一个数目。 |
-l或–verbose | 标示出所有不一样的地方。 |
-s或–quiet或–silent | 不显示错误信息。 |
-v或–version | 显示版本信息。 |
–help | 在线帮助。 |
实例
# 要确定两个文件是否相同,请输入:
cmp prog.o.bak prog.o
# 这比较 prog.o.bak 和 prog.o。如果文件相同,则不显示消息。如果文件不同,则显示第一个不同的位置;例如:
prog.o.bak prog.o differ: char 4, line 1
# 如果显示消息 cmp: EOF on prog.o.bak,则 prog.o 的第一部分与 prog.o.bak 相同,但在 prog.o 中还有其他数据。
比较给定的两个文件的不同
补充说明
diff命令 在最简单的情况下,比较给定的两个文件的不同。如果使用“-”代替“文件”参数,则要比较的内容将来自标准输入。diff命令是以逐行的方式,比较文本文件的异同处。如果该命令指定进行目录的比较,则将会比较该目录中具有相同文件名的文件,而不会对其子目录文件进行任何比较操作。
语法
diff [-abBcdefHilnNpPqrstTuvwy][-<行数>][-C <行数>][-D <巨集名称>][-I <字符或字符串>][-S <文件>][-W <宽度>][-x <文件或目录>][-X <文件>][--help][--left-column][--suppress-common-line][文件或目录1][文件或目录2]
选项
选项 | 含义 |
---|---|
-<行数> | 指定要显示多少行的文本。此参数必须与-c或-u参数一并使用 |
-a或——text | diff预设只会逐行比较文本文件 |
-b或–ignore-space-change | 不检查空格字符的不同 |
-B或–ignore-blank-lines | 不检查空白行 |
-c | 显示全部内容,并标出不同之处 |
-C<行数>或–context<行数> | 与执行“-c-<行数>”指令相同 |
-d或——minimal | 使用不同的演算法,以小的单位来做比较 |
-D<巨集名称>或ifdef<巨集名称> | 此参数的输出格式可用于前置处理器巨集 |
-e或——ed | 此参数的输出格式可用于ed的script文件 |
-f或-forward-ed | 输出的格式类似ed的script文件,但按照原来文件的顺序来显示不同处 |
-H或–speed-large-files | 比较大文件时,可加快速度 |
-l<字符或字符串>或–ignore-matching-lines<字符或字符串> | 若两个文件在某几行有所不同,而之际航同时都包含了选项中指定的字符或字符串,则不显示这两个文件的差异 |
-i或–ignore-case | 不检查大小写的不同 |
-l或——paginate | 将结果交由pr程序来分页 |
-n或——rcs | 将比较结果以RCS的格式来显示 |
-N或–new-file | 在比较目录时,若文件A仅出现在某个目录中,预设会显示 |
-p | 若比较的文件为C语言的程序码文件时,显示差异所在的函数名称 |
-P或–unidirectional-new-file | 与-N类似,但只有当第二个目录包含了第一个目录所没有的文件时,才会将这个文件与空白的文件做比较 |
-q或–brief | 仅显示有无差异,不显示详细的信息 |
-r或——recursive | 比较子目录中的文件 |
-s或–report-identical-files | 若没有发现任何差异,仍然显示信息 |
-S<文件>或–starting-file<文件> | 在比较目录时,从指定的文件开始比较 |
-t或–expand-tabs | 在输出时,将tab字符展开 |
-T或–initial-tab | 在每行前面加上tab字符以便对齐 |
-u,-U<列数>或–unified=<列数> | 以合并的方式来显示文件内容的不同 |
-v或——version | 显示版本信息 |
-w或–ignore-all-space | 忽略全部的空格字符 |
-W<宽度>或–width<宽度> | 在使用-y参数时,指定栏宽 |
-x<文件名或目录>或–exclude<文件名或目录> | 不比较选项中所指定的文件或目录 |
-X<文件>或–exclude-from<文件> | 您可以将文件或目录类型存成文本文件,然后在=<文件>中指定此文本文件 |
-y或–side-by-side | 以并列的方式显示文件的异同之处 |
–help | 显示帮助 |
–left-column | 在使用-y参数时,若两个文件某一行内容相同,则仅在左侧的栏位显示该行内容 |
–suppress-common-lines | 在使用-y参数时,仅显示不同之处 |
参数
文件1:指定要比较的第一个文件;
文件2:指定要比较的第二个文件。
实例
# 将目录/usr/li下的文件"test.txt"与当前目录下的文件"test.txt"进行比较,输入如下命令:
diff /usr/li test.txt #使用diff指令对文件进行比较
# 上面的命令执行后,会将比较后的不同之处以指定的形式列出,如下所示:
n1 a n3,n4
n1,n2 d n3
n1,n2 c n3,n4
# 其中,字母"a"、"d"、"c"分别表示添加、删除及修改操作。而"n1"、"n2"表示在文件1中的行号,"n3"、"n4"表示在文件2中的行号。
# 注意:以上说明指定了两个文件中不同处的行号及其相应的操作。在输出形式中,每一行后面将跟随受到影响的若干行。其中,以<开始的行属于文件1,以>开始的行属于文件2。
用来探测给定文件的类型
补充说明
file命令 用来探测给定文件的类型。file命令对文件的检查分为文件系统、魔法幻数检查和语言检查3个过程。
语法
file [-bcLvz][-f <名称文件>][-m <魔法数字文件>…][文件或目录…]
选项
选项 | 含义 |
---|---|
-b | 列出辨识结果时,不显示文件名称 |
-c | 详细显示指令执行过程,便于排错或分析程序执行的情形 |
-f<名称文件> | 指定名称文件,其内容有一个或多个文件名称时,让file依序辨识这些文件,格式为每列一个文件名称 |
-L | 直接显示符号连接所指向的文件类别 |
-m<魔法数字文件> | 指定魔法数字文件 |
-v | 显示版本信息 |
-z | 尝试去解读压缩文件的内容 |
参数
文件:要确定类型的文件列表,多个文件之间使用空格分开,可以使用shell通配符匹配多个文件。
实例
# 显示文件类型
file install.log
install.log: UTF-8 Unicode text
file -b install.log <== 不显示文件名称
UTF-8 Unicode text
file -i install.log <== 显示MIME类别。
install.log: text/plain; charset=utf-8
file -b -i install.log
text/plain; charset=utf-8
# 显示符号链接的文件类型
ls -l /var/mail
lrwxrwxrwx 1 root root 10 08-13 00:11 /var/mail -> spool/mail
file /var/mail
/var/mail: symbolic link to `spool/mail'
file -L /var/mail
/var/mail: directory
file /var/spool/mail
/var/spool/mail: directory
file -L /var/spool/mail
/var/spool/mail: directory
在指定目录下查找文件
补充说明
find命令 用来在指定目录下查找文件。任何位于参数之前的字符串都将被视为欲查找的目录名。如果使用该命令时,不设置任何参数,则find命令将在当前目录下查找子目录与文件。并且将查找到的子目录和文件全部进行显示。
语法
find path -option [ -print ] [ -exec -ok command ] {} \;
选项
选项 | 含义 |
---|---|
-amin<分钟> | 查找在指定时间曾被存取过的文件或目录,单位以分钟计算 |
-anewer<参考文件或目录> | 查找其存取时间较指定文件或目录的存取时间更接近现在的文件或目录 |
-atime<24小时数> | 查找在指定时间曾被存取过的文件或目录,单位以24小时计算 |
-cmin<分钟> | 查找在指定时间之时被更改过的文件或目录 |
-cnewer<参考文件或目录> | 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录 |
-ctime<24小时数> | 查找在指定时间之时被更改的文件或目录,单位以24小时计算 |
-daystart | 从本日开始计算时间 |
-depth | 从指定目录下最深层的子目录开始查找 |
-expty | 寻找文件大小为0 Byte的文件,或目录下没有任何子目录或文件的空目录 |
-exec<执行指令> | 假设find指令的回传值为True,就执行该指令 |
-false | 将find指令的回传值皆设为False |
-fls<列表文件> | 此参数的效果和指定“-ls”参数类似,但会把结果保存为指定的列表文件 |
-follow | 排除符号连接 |
-fprint<列表文件> | 此参数的效果和指定“-print”参数类似,但会把结果保存成指定的列表文件 |
-fprint0<列表文件> | 此参数的效果和指定“-print0”参数类似,但会把结果保存成指定的列表文件 |
-fprintf<列表文件><输出格式> | 此参数的效果和指定“-printf”参数类似,但会把结果保存成指定的列表文件 |
-fstype<文件系统类型> | 只寻找该文件系统类型下的文件或目录 |
-gid<群组识别码> | 查找符合指定之群组识别码的文件或目录 |
-group<群组名称> | 查找符合指定之群组名称的文件或目录 |
-help或–help | 在线帮助 |
-ilname<范本样式> | 此参数的效果和指定“-lname”参数类似,但忽略字符大小写的差别 |
-iname<范本样式> | 此参数的效果和指定“-name”参数类似,但忽略字符大小写的差别 |
-inum |
查找符合指定的inode编号的文件或目录 |
-ipath<范本样式> | 此参数的效果和指定“-path”参数类似,但忽略字符大小写的差别 |
-iregex<范本样式> | 此参数的效果和指定“-regexe”参数类似,但忽略字符大小写的差别 |
-links<连接数目> | 查找符合指定的硬连接数目的文件或目录 |
-lname<范本样式> | 指定字符串作为寻找符号连接的范本样式 |
-ls | 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出 |
-maxdepth<目录层级> | 设置最大目录层级 |
-mindepth<目录层级> | 设置最小目录层级 |
-mmin<分钟> | 查找在指定时间曾被更改过的文件或目录,单位以分钟计算 |
-mount | 此参数的效果和指定“-xdev”相同 |
-mtime<24小时数> | 查找在指定时间曾被更改过的文件或目录,单位以24小时计算 |
-name<范本样式> | 指定字符串作为寻找文件或目录的范本样式 |
-newer<参考文件或目录> | 查找其更改时间较指定文件或目录的更改时间更接近现在的文件或目录 |
-nogroup | 找出不属于本地主机群组识别码的文件或目录 |
-noleaf | 不去考虑目录至少需拥有两个硬连接存在 |
-nouser | 找出不属于本地主机用户识别码的文件或目录 |
-ok<执行指令> | 此参数的效果和指定“-exec”类似,但在执行指令之前会先询问用户,若回答“y”或“Y”,则放弃执行命令 |
-path<范本样式> | 指定字符串作为寻找目录的范本样式 |
-perm<权限数值> | 查找符合指定的权限数值的文件或目录 |
假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为每列一个名称,每个名称前皆有“./”字符串 | |
-print0 | 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式为全部的名称皆在同一行 |
-printf<输出格式> | 假设find指令的回传值为Ture,就将文件或目录名称列出到标准输出。格式可以自行指定 |
-prune | 不寻找字符串作为寻找文件或目录的范本样式 |
-regex<范本样式> | 指定字符串作为寻找文件或目录的范本样式 |
-size<文件大小> | 查找符合指定的文件大小的文件 |
-true | 将find指令的回传值皆设为True |
-type<文件类型> | 只寻找符合指定的文件类型的文件 |
-uid<用户识别码> | 查找符合指定的用户识别码的文件或目录 |
-used<日数> | 查找文件或目录被更改之后在指定时间曾被存取过的文件或目录,单位以日计算 |
-user<拥有者名称> | 查找符和指定的拥有者名称的文件或目录 |
-version或——version | 显示版本信息 |
-xdev | 将范围局限在先行的文件系统中 |
-xtype<文件类型> | 此参数的效果和指定“-type”参数类似,差别在于它针对符号连接检查 |
参数
起始目录:查找文件的起始目录。
实例
# 将当前目录及其子目录下所有文件后缀为 .c 的文件列出来:
find . -name "*.c"
# 将目前目录其其下子目录中所有一般文件列出
find . -type f
# 将当前目录及其子目录下所有最近 20 天内更新过的文件列出:
find . -ctime -20
# 查找 /var/log 目录中更改时间在 7 日以前的普通文件,并在删除之前询问它们:
find /var/log -type f -mtime +7 -ok rm {} \;
# 查找当前目录中文件属主具有读、写权限,并且文件所属组的用户和其他用户具有读权限的文件:
find . -type f -perm 644 -exec ls -l {} \;
# 查找系统中所有文件长度为 0 的普通文件,并列出它们的完整路径:
find / -type f -size 0 -exec ls -l {} \;
连接文件并打印到标准输出设备上
补充说明
cut命令用来显示行中的指定部分,删除文件中指定字段。cut经常用来显示文件的内容,类似于type命令。
说明:该命令有两项功能,其一是用来显示文件的内容,它依次读取由参数 file 所指 明的文件,将它们的内容输出到标准输出上;其二是连接两个或多个文件,如cut fl f2 > f3将把文件 fl 和 f2 的内容合并起来,然后通过输出重定向符“>”的作用,将它们放入文件 f3 中。
当文件较大时,文本在屏幕上迅速闪过(滚屏),用户往往看不清所显示的内容。因此,一般用more等命令分屏显示。为了控制滚屏,可以按 Ctrl+S 键,停止滚屏;按 Ctrl+Q 键可以恢复滚屏。按 Ctrl+C(中断)键可以终止该命令的执行,并且返回 Shell 提示符状态。
语法
cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]
选项
选项 | 含义 |
---|---|
-b | 仅显示行中指定直接范围的内容 |
-c | 仅显示行中指定范围的字符 |
-d | 指定字段的分隔符,默认的字段分隔符为“TAB” |
-f | 显示指定字段的内容 |
-n | 与“-b”选项连用,不分割多字节字符 |
–complement | 补足被选择的字节、字符或字段 |
–out-delimiter= 字段分隔符 | 指定输出内容是的字段分割符 |
–help | 显示指令的帮助信息 |
–version | 显示指令的版本信息 |
参数
文件:指定要进行内容过滤的文件。
实例
# 例如有一个学生报表信息,包含 No、Name、Mark、Percent:
[root@localhost text]# cat test.txt
No Name Mark Percent
01 tom 69 91
02 jack 71 87
03 alex 68 98
# 使用 -f 选项提取指定字段(这里的 f 参数可以简单记忆为 --fields的缩写):
[root@localhost text]# cut -f 1 test.txt
No
01
02
03
[root@localhost text]# cut -f2,3 test.txt
Name Mark
tom 69
jack 71
alex 68
# --complement 选项提取指定字段之外的列(打印除了第二列之外的列):
[root@localhost text]# cut -f2 --complement test.txt
No Mark Percent
01 69 91
02 71 87
03 68 98
# 使用 -d 选项指定字段分隔符:
[root@localhost text]# cat test2.txt
No;Name;Mark;Percent
01;tom;69;91
02;jack;71;87
03;alex;68;98
[root@localhost text]# cut -f2 -d";" test2.txt
Name
tom
jack
alex
# 指定字段的字符或者字节范围
cut 命令可以将一串字符作为列来显示,字符字段的记法:
N- :从第 N 个字节、字符、字段到结尾;
N-M :从第 N 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段;
-M :从第 1 个字节、字符、字段到第 M 个(包括 M 在内)字节、字符、字段。
上面是记法,结合下面选项将摸个范围的字节、字符指定为字段:
-b 表示字节;
-c 表示字符;
-f 表示定义字段。
示例
[root@localhost text]# cat test.txt
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
abcdefghijklmnopqrstuvwxyz
# 打印第 1 个到第 3 个字符:
[root@localhost text]# cut -c1-3 test.txt
abc
abc
abc
abc
abc
# 打印前 2 个字符:
[root@localhost text]# cut -c-2 test.txt
ab
ab
ab
ab
ab
# 打印从第 5 个字符开始到结尾:
[root@localhost text]# cut -c5- test.txt
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
efghijklmnopqrstuvwxyz
用来为文件创建链接
补充说明
ln命令用来为文件创建链接,链接类型分为硬链接和符号链接两种,默认的链接类型是硬链接。如果要创建符号链接必须使用"-s"选项。
注意:符号链接文件不是一个独立的文件,它的许多属性依赖于源文件,所以给符号链接文件设置存取权限是没有意义的。
语法
ln [参数][源文件或目录][目标文件或目录]
其中参数的格式为
[-bdfinsvF] [-S backup-suffix] [-V {numbered,existing,simple}]
[--help] [--version] [--]
选项
选项 | 含义 |
---|---|
–backup[=CONTROL] | 为每个已存在的目标文件创建备份文件 |
-b | 类似–backup,但不接受任何参数 |
-d, -F, --directory | 创建指向目录的硬链接(只适用于超级用户) |
-f, --force | 强行删除任何已存在的目标文件 |
-i, --interactive | 覆盖既有文件之前先询问用户; |
-L, --logical | 取消引用作为符号链接的目标 |
-n, --no-dereference | 把符号链接的目的目录视为一般文件; |
-P, --physical | 直接将硬链接到符号链接 |
-r, --relative | 创建相对于链接位置的符号链接 |
-s, --symbolic | 对源文件建立符号链接,而非硬链接; |
-S, --suffix=SUFFIX | 用"-b"参数备份目标文件后,备份文件的字尾会被加上一个备份字符串,预设的备份字符串是符号“~”,用户可通过“-S”参数来改变它; |
-t, --target-directory=DIRECTORY | 指定要在其中创建链接的DIRECTORY |
-T, --no-target-directory | 将“LINK_NAME”视为常规文件 |
-v, --verbose | 打印每个链接文件的名称 |
–help | 显示此帮助信息并退出 |
–version | 显示版本信息并退出 |
参数
源文件:指定链接的源文件。如果使用-s选项创建符号链接,则“源文件”可以是文件或者目录。创建硬链接时,则“源文件”参数只能是文件;
目标文件:指定源文件的目标链接文件。
none, off # 不进行备份(即使使用了–backup 选项)
numbered, t # 备份文件加上数字进行排序
existing, nil # 若有数字的备份文件已经存在则使用数字,否则使用普通方式备份
simple, never # 永远使用普通方式备份
实例
# 将目录/usr/mengqc/mub1下的文件m2.c链接到目录/usr/liu下的文件a2.c
cd /usr/mengqc
ln /mub1/m2.c /usr/liu/a2.c
# 在执行ln命令之前,目录/usr/liu中不存在a2.c文件。执行ln之后,在/usr/liu目录中才有a2.c这一项,表明m2.c和a2.c链接起来(注意,二者在物理上是同一文件),利用ls -l命令可以看到链接数的变化。
# 在目录/usr/liu下建立一个符号链接文件abc,使它指向目录/usr/mengqc/mub1
ln -s /usr/mengqc/mub1 /usr/liu/abc
# 执行该命令后,/usr/mengqc/mub1代表的路径将存放在名为/usr/liu/abc的文件中。
扩展知识
Linux具有为一个文件起多个名字的功能,称为链接。被链接的文件可以存放在相同的目录下,但是必须有不同的文件名,而不用在硬盘上为同样的数据重复备份。另外,被链接的文件也可以有相同的文件名,但是存放在不同的目录下,这样只要对一个目录下的该文件进行修改,就可以完成对所有目录下同名链接文件的修改。对于某个文件的各链接文件,我们可以给它们指定不同的存取权限,以控制对信息的共享和增强安全性。
文件链接有两种形式,即硬链接和符号链接。
硬链接
建立硬链接时,在另外的目录或本目录中增加目标文件的一个目录项,这样,一个文件就登记在多个目录中。如图所示的m2.c文件就在目录mub1和liu中都建立了目录项。
创建硬链接后,己经存在的文件的I节点号(Inode)会被多个目录文件项使用。一个文件的硬链接数可以在目录的长列表格式的第二列中看到,无额外链接的文件的链接数为l。
在默认情况下,ln命令创建硬链接。ln命令会增加链接数,rm命令会减少链接数。一个文件除非链接数为0,否则不会从文件系统中被物理地删除。
对硬链接有如下限制:
符号链接
符号链接也称为软链接,是将一个路径名链接到一个文件。这些文件是一种特别类型的文件。事实上,它只是一个文本文件(如图中的abc文件),其中包含它提供链接的另一个文件的路径名,如图中虚线箭头所示。另一个文件是实际包含所有数据的文件。所有读、写文件内容的命令被用于符号链接时,将沿着链接方向前进来访问实际的文件。
!符号连接
与硬链接不同的是,符号链接确实是一个新文件,当然它具有不同的I节点号;而硬链接并没有建立新文件。
符号链接没有硬链接的限制,可以对目录文件做符号链接,也可以在不同文件系统之间做符号链接。
用ln -s命令建立符号链接时,源文件最好用绝对路径名。这样可以在任何工作目录下进行符号链接。而当源文件用相对路径时,如果当前的工作路径与要创建的符号链接文件所在路径不同,就不能进行链接。
符号链接保持了链接与源文件或目录之间的区别:
用来对文件或目录重新命名
补充说明
mv命令 用来对文件或目录重新命名,或者将文件从一个目录移到另一个目录中。source表示源文件或目录,target表示目标文件或目录。如果将一个文件移到一个已经存在的目标文件中,则目标文件的内容将被覆盖。
mv命令 可以用来将源文件移至一个目标文件中,或将一组文件移至一个目标目录中。源文件被移至目标文件有两种不同的结果:
注意事项:mv与cp的结果不同,mv好像文件“搬家”,文件个数并未增加。而cp对文件进行复制,文件个数增加了。
语法
mv (选项) (参数)
选项
选项 | 含义 |
---|---|
–backup=<备份模式> | 若需覆盖文件,则覆盖前先行备份 |
-b | 当文件存在时,覆盖前,为其创建一个备份 |
-f | 若目标文件或目录与现有的文件或目录重复,则直接覆盖现有的文件或目录 |
-i | 交互式操作,覆盖前先行询问用户,如果源文件与目标文件或目标目录中的文件同名,则询问用户是否覆盖目标文件。用户输入”y”,表示将覆盖目标文件;输入”n”,表示取消对源文件的移动。这样可以避免误将文件覆盖 |
–strip-trailing-slashes | 删除源文件中的斜杠“/” |
-S<后缀> | 为备份文件指定后缀,而不使用默认的后缀 |
–target-directory=<目录> | 指定源文件要移动到目标目录 |
-u | 当源文件比目标文件新或者目标文件不存在时,才执行移动操作 |
参数
源文件:源文件列表。
目标文件:如果“目标文件”是文件名则在移动文件的同时,将其改名为“目标文件”;如果“目标文件”是目录名则将源文件移动到“目标文件”下。
实例
# 将目录/usr/men中的所有文件移到当前目录(用.表示)中:
mv /usr/men/* .
# 移动文件
mv file_1.txt /home/office/
# 移动多个文件
mv file_2.txt file_3.txt file_4.txt /home/office/
mv *.txt /home/office/
# 移动目录
mv directory_1/ /home/office/
# 重命名文件或目录
mv file_1.txt file_2.txt # 将文件file_1.txt改名为file_2.txt
# 重命名目录
mv directory_1/ directory_2/
# 打印移动信息
mv -v *.txt /home/office
# 提示是否覆盖文件
mv -i file_1.txt /home/office
# 源文件比目标文件新时才执行更新
mv -uv *.txt /home/office
# 不要覆盖任何已存在的文件
mv -vn *.txt /home/office
# 复制时创建备份
mv -bv *.txt /home/office
# 无条件覆盖已经存在的文件
mv -f *.txt /home/office
用来创建目录
补充说明
mkdir命令用来创建目录。该命令创建由dirname命名的目录。如果在目录名的前面没有加任何路径名,则在当前目录下创建由dirname指定的目录;如果给出了一个已经存在的路径,将会在该目录下创建一个指定的目录。在创建目录时,应保证新建的目录与它所在目录下的文件没有重名。
注意:在创建文件时,不要把所有的文件都存放在主目录中,可以创建子目录,通过它们来更有效地组织文件。最好采用前后一致的命名方式来区分文件和目录。例如,目录名可以以大写字母开头,这样,在目录列表中目录名就出现在前面。
在一个子目录中应包含类型相似或用途相近的文件。例如,应建立一个子目录,它包含所有的数据库文件,另有一个子目录应包含电子表格文件,还有一个子目录应包含文字处理文档,等等。目录也是文件,它们和普通文件一样遵循相同的命名规则,并且利用全路径可以唯一地指定一个目录。
语法
mkdir (选项)(参数)
选项
选项 | 含义 |
---|---|
-Z | 设置安全上下文,当使用SELinux时有效 |
-m<目标属性>或–mode<目标属性> | 建立目录的同时设置目录的权限 |
-p或–parents | 若所要建立目录的上层目录目前尚未建立,则会一并建立上层目录 |
–version | 显示版本信息 |
参数
目录:指定要创建的目录列表,多个目录之间用空格隔开。
实例
# 在目录/usr/meng下建立子目录test,并且只有文件主有读、写和执行权限,其他人无权访问
mkdir -m 700 /usr/meng/test
# 在当前目录中建立bin和bin下的os_1目录,权限设置为文件主可读、写、执行,同组用户可读和执行,其他用户无权访问
mkdir -pm 750 bin/os_1
将许多文件一起保存至一个单独的磁带或磁盘归档,并能从归档中单独还原所需文件。
补充说明
tar命令 可以为linux的文件和目录创建档案。利用tar,可以为某一特定文件创建档案(备份文件),也可以在档案中改变文件,或者向档案中加入新的文件。tar最初被用来在磁带上创建档案,现在,用户可以在任何设备上创建档案。利用tar命令,可以把一大堆的文件和目录全部打包成一个文件,这对于备份文件或将几个文件组合成为一个文件以便于网络传输是非常有用的。
首先要弄清两个概念:打包和压缩。打包是指将一大堆文件或目录变成一个总的文件;压缩则是将一个大的文件通过一些压缩算法变成一个小文件。
为什么要区分这两个概念呢?这源于Linux中很多压缩程序只能针对一个文件进行压缩,这样当你想要压缩一大堆文件时,你得先将这一大堆文件先打成一个包(tar命令),然后再用压缩程序进行压缩(gzip bzip2命令)。
语法
tar [选项...] [FILE]...
选项
选项 | 含义 |
---|---|
-A或–catenate | 新增文件到已存在的备份文件。 |
-b<区块数目>或–blocking-factor=<区块数目> | 设置每笔记录的区块数目,每个区块大小为12Bytes。 |
-B或–read-full-records | 读取数据时重设区块大小。 |
-c或–create | 建立新的备份文件。 |
-C<目的目录>或–directory=<目的目录> | 切换到指定的目录。 |
-d或–diff或–compare | 对比备份文件内和文件系统上的文件的差异。 |
-f<备份文件>或–file=<备份文件> | 指定备份文件。 |
-F
你可能感兴趣的:(Linux,linux) |