「csplit(1)」-
根据上下文行将文件分割成多个部分
命令语法格式
csplit [OPTION]… FILE PATTERN…
命令描述
csplit可以将一个大文件中的内容进行分割,然后将得到的各个部分分别写入不同的文件中。其中,分割点是与PATTERN匹配的行。在任何情况下,按排序顺序连接所有的输出文件都可以会生成原始输入文件。
由csplit产生的输出文件的内容由PATTERN参数确定,如下所述。如果PATTERN参数指向了输入文件的不存在行(例如,如果没有任何行可以与给定的正则表达式匹配),则会发生错误。csplit使用PATTERN与文件内容进行匹配查找,如果匹配到行,则会将匹配行之前的内容写入文件。如果后面还有PATTERN,则csplit只会将文件的剩余部分与下一个PATTERN进行匹配。以此类推。在每个PATTERN都匹配后,剩余的输入将被复制到最后一个输出文件中。
输出文件的名称由一个前缀(默认为’xx’),然后加一个后缀组成。默认情况下,后缀是从’00’到’99’的两位十进制数的升序,形如’xx00′, ‘xx01’, …。在任何情况下,按排序顺序连接所有的输出文件都可以会生成原始输入文件。
默认情况下,csplit在创建完文件后,会打印出写入每个输出文件的字节数。
如果FILE为-,则从标准输入中读取文件。
默认情况下,如果csplit遇到错误或收到hangup, interrupt, quit, terminate信号,它将在退出之前删除创建的所有输出文件。
命令支持的选项及含义
长选项的必填参数,在短选项中也是必须提供的。
-b, –suffix-format=FORMAT 修改生成文件的后缀,使用格式FORMAT作为输出文件名后缀。默认为两位数值‘%02d’。当指定此选项时,后缀字符串FORMAT必须包含一个printf(3)式转换规范,可能包括格式规范标志,字段宽度,精度规格或所有这些类型的修饰符。格式字母必须将二进制无符号整数参数转换为可读形式。格式字母’d’和’i’是’u’的别名,允许’u’,’o’,’x’和’X’转换。整个格式FORMATh会发送给sprintf(3)来格式化文件名后缀,依次为每个单独的输出文件形成文件名后缀。
如果使用此选项,则会忽略–digits选项。
-f, –prefix=PREFIX 修改输出文件名的前缀。默认为’xx’。
-k, –keep-files 发生错误时,不要删除已经生成的文件。默认情况下,如果csplit遇到错误或收到hangup, interrupt, quit, terminate信号,它将在退出之前删除创建的所有输出文件。
–suppress-matched[……]
「cut(1)」- 输出每个行中选中的部分
常用命令
截断命令输出(当输出行较长时,截断行,使其输出不会换行显示,以便于查看):
grep ‘str’ file-with-long-lines.txt | cut -c 1-80
如果想要使用 TAB 作为分隔字符,在终端中可能无法输入 TAB,因为 TAB 是终端里默认的命令提示。这里要用到小技巧按下 CTRL + v 然后按下 TAB 键,就可以正常输入 TAB(其他很多的特殊字符也可以使用这种方法输入)。
语法格式
cut OPTION… [FILE]…
命令描述
输出每个行中指定的列,可以说是一个简易版的 awk。
比如 cut -f 2-4 FILE 输入文件 FILE 的第 2 列到第 4 列的内容。
如果没有指定 FILE,或者 FILE 为 -,则从标准输入中读取内容。更多选项及含义参照下文中的介绍。
命令选项
用于长选项的必须参数也必须提供给对应的短选项。
-b, –bytes=BYTE-LIST 仅打印BYTE-LIST所指范围内的字节。比如,–bytes=’2-10′,打印第2个字节到第10个字节之间所有的字符。
TAB和BACKSPACE与其他字符一样,占用1个字节,不会视为分隔符。如果指定了输出分隔符(–output-delimiter=STRING),然后在选定字节的范围之间输出该字符串。
关于BYTE-LIST的取值,参照下面的介绍。
-c, –characters=CHAR-LIST 仅打印CHAR-LIST范围内的字符。比如,–characters=’2-10’,打印第2个字符到第10个字符之间所有的字符。
现在与-b选项作用一样,但国际化标准可能会不一样。TAB和BACKSPACE与其他字符一样,占用1个字节。如果指定了输出分隔符(–output-delimiter=STRING),然后在选定的字节范围之间输出STRING。
关于CHAR-LIST的取值,参照下面的介绍。
-f, –fields=FIELD-LIST 选择仅打印FIELD-LIST中列出的字段。字段默认由TAB字符分隔。但是还会输出不包含分隔符的任何行,除非指定了–only-delimited(-s)选项。
注意awk支持更复杂的字段处理,例如重新排序字段以、处理与空白字符对齐的字段。默认情况下,awk使用(和放弃)空白字符来分隔字段,并忽略前导和尾随空白。
# awk ‘{print $2}’ # print the second field
# awk ‘{print $(NF-1)}’ # print the penultimate fi[……]
「date(1)」-
功能简述
打印和设置系统日期时间
常用命令
将从 EPOCH 时间(1970-01-01 UTC)开始的秒数转化为日期:
date –date=’@2147483647′
显示美国西海岸的时间(使用tzselect(1)来查找TZ):
TZ=’America/Los_Angeles’ date
显示本地下个星期五上午九点时在美国西海岸时间:
date –date=’TZ=”America/Los_Angeles” 09:00 next Fri’
打印两天前的时间:
date –date=’2 days ago’
打印三个月零一天后的日期:
date –date=’3 months 1 day’
将系统时间设置为当前时间的两分钟后:
date –set=’+2 minutes’
扩展:在 BASH 中,比较两个时间的大小:
[[ “2014-12-01T21:34:03+02:00” < “2014-12-01T21:35:03+02:00” ]]
语法格式
date [OPTION]… [+FORMAT]
date [-u|–utc|–universal] [MMDDhhmm[[CC]YY][.ss]]
命令描述
使用 FORMAT 指定的格式显示当前的系统时间,或者设置系统时间。
调用没有FORMAT参数的date等价于使用默认格式调用它,默认格式依赖于语言环境LC_TIME的类别。在默认的C语言环境中,这种格式是’+%a %b %e %H:%M:%S %Z %Y’,所以输出看起来像’Thu Mar 3 13:47:51 PST 2005’。
通常,date使用环境变量TZ暗指的时区规则,或者如果未设置TZ,则使用系统默认规则。请参阅GNU C库参考手册中的「使用TZ指定时区」。
如果给定以“+”开头的FORMAT参数,date将以FORMAT定义的格式来打印当前日期和时间,或者以FORMAT定义的格式来打印–date选项指定的日期和时间(参见下文),该格式FORMAT类似于strftime(3)函数。除了以’%’开头的转换说明符以外,FORMAT中的其他字符会直接输出。
命令选项
如果没有特殊说明,以下选项中,长选项需要提供参数在使用短选项时也要提供。
-d, –date=STRING 显示STRING字符串表示的日期,而不是当前时间。
例如下面的命令及命令输出:
# date -d ‘Wednesday 03 May 2[……]
「dd(1)」- 转化和复制文件
常用命令
制作 USB 启动盘(常用于系统安装):
dd bs=4M conv=fdatasync if=/path/to/ubuntu-20.04.3-live-server-amd64.iso of=/dev/sdX
语法格式
dd [OPERAND]…
dd OPTION
命令描述
使用可更改的I/O块大小来复制文件,默认情况下从标准输入读取,然后输出到标准输出,并对其执行可选择的转换。
命令选项
命令dd接受下列操作数,其语法受OS/360 JCL的DD(Data Definition,数据定义)语句的启发。
if=file 从文件FILE读取数据,而不是标准输入。
of=file 将输出写入文件FILE而不是标准输出。除非给出’conv=notrunc’,否则dd将文件FILE截断为零字节(或用’seek=’指定的大小)。
ibs=bytes 将输入块大小设置为bytes字节。这使dd的每块会读取bytes字节。默认值是512字节。
obs=bytes 将输出块大小设置为bytes字节。这使dd的每块会输出bytes字节。默认值是512字节。
bs=bytes 将输入和输出块大小都设置为bytes字节。这使dd的每块读取和写入bytes字节,bs会覆盖所有的’ibs’和’obs’设置。另外,如果没有指定数据转换conv选项,则输入也会立即复制到输出,即使读取的输入小于块大小也是如此。
cbs=bytes 将转换块大小设置为bytes字节。将可变长度记录转换为固定长度记录(conv=block)或反过来(conv = unblock)时,使用bytes字节作为固定记录长度。
skip=n 在复制之前,从输入文件中跳过n个’ibs’字节块。如果指定了’iflag=skip_bytes’,则n被解释为字节数,而不是块计数。
seek=n 在复制前,在输出文件中跳过n个’obs’字节块。如果指定了’oflag=seek_bytes’,则n被解释为字节数,而不是块计数。
count=n 从输入文件中复制n个’ibs’字节块,而默认的一直复制到文件结尾。如果指定了“iflag=count_bytes”,则n被解释为字节数,而不是块计数。
请注意,如果输入返回可能短于读取(例如从管道读取时可能会出现这种情况),使用’iflag=fullblock’将确保’count=’对应于完整的输入块,而不是传统的POSIX指定的对输入读取操作进行计数的行为。
status=level 通常在收到’INFO’信号或dd退出时,传送信息才会输出到标准错误中。指定级别level将控制打印的信息量,最后指定的级别le[……]
「df(1)」-
报告文件系统硬盘的使用情况
命令语法格式
df [OPTION]… [FILE]…
命令描述
在没有参数的情况下,df报告所有当前挂载的文件系统(所有类型)上可使用和已使用的空间。否则,df会报告包含每一个FILE参数的文件系统。
通常情况下,磁盘空间以1024字节为单位打印,但可以覆盖(参见块大小)。非整数量向上舍入到下一个更高的单位。
对于绑定挂载和不带参数,df仅输出文件系统列表(mtab)中的设备的统计信息,设备名为最短的装载点名,即,它会隐藏重复条目,除非指定了-a选项。
使用相同的逻辑,如果对于装载点具有相同装置编号的装载点的实际块装置存在另一个装载入口,则df省略伪装置的装载入口,例如,如果已经挂载了真实的根设备,则不会在默认情况下显示早期启动的伪文件系统“rootfs”。
如果参数FILE解析为包含挂载的文件系统的特殊文件,则df将显示该文件系统上的可用空间,而不是包含该设备节点的文件系统上的可用空间。GNU的df不会尝试确定未挂载的文件系统上的磁盘使用情况,因为在这种情况下,都需要对文件系统结构具有不熟悉的知识。
命令支持的选项及含义
–no-sync 在获取任何使用数据之前,请勿调用sync系统调用。这可能会使df在运行多个磁盘的系统上运行速度明显加快,但在某些系统上(特别是SunOS),结果可能会稍微过时。这是默认设置。
–sync 在获取使用情况数据之前,调用sync系统调用。在某些系统上(特别是SunOS),这样做会产生更多的最新结果,但通常这个选项会使df变得更慢,特别是当文件系统很多或非常繁忙时。
指定输出列
–output, –output[=FIELD_LIST] 使用FIELD_LIST定义的输出格式,或者如果省略FIELD_LIST,则会输出所有字段。在后一种情况下,列的输出顺序符合以下字段说明的顺序。
使用–output和每个选项-i,-P和-T是相互排斥的。
参数FIELD_LIST是要包含在df输出中的列的逗号分隔列表,因此可以有效地控制输出列的顺序。因此每个字段可以在选择的地方使用,但只能使用一次。
参数FIELD_LIST中的有效字段名如下:
‘source’ — 挂载点的来源,通常是一个设备。
‘fstype’ — 文件系统类型。
‘itotal’ — inode的总数。
‘iused’ — 已使用的inode的数量。
‘iavail’ — 可使用的节点的总数。
‘ipcent’ — iused除以itotal的百分比。
‘size’ — 块总数。
‘used’ — 已使用的块总数。
‘avail[……]
「dir(1)」-
列出目录内容
命令语法格式
dir [OPTION]… [FILE]…
命令简介
命令dir相当于ls -C -b;也就是说,dir与ls(1)命令并无太大不同。默认情况下,文件在列中列出,垂直排序,使用反斜杠转义特殊字符。
参见ls(1)。
相关手册
ls(1), vdir(1)
查看在线手册:http://www.gnu.org/software/coreutils/dir
查看info手册:info ‘(coreutils) dir invocation’
参考文献
man 1 dir, version GNU coreutils 8.26
更新日志
06/10/2018 创建文章[……]
「dircolors(1)」-
设置ls(1)的输出颜色
命令语法格式
dircolors [OPTION]… [FILE]
命令描述
dircolors输出一系列SHELL命令来设置用于ls(和dir等)输出颜色的终端。
如果指定了FILE,dircolors会读取它以确定哪些颜色用于哪些文件类型和扩展名。否则,使用预编译数据库。有关这些文件格式的详细信息,请运行’dircolors –print-database’。
为了让dircolors读取~/.dircolors文件(如果它存在),可以在~/.bashrc文件中放入以下代码行(或将它们调整为你喜欢的Shell):
d=.dircolors
test -r $d && eval “$(dircolors $d)”
输出是用于设置LS_COLORS环境变量的Shell命令。你可以指定在命令行中使用的Shell语法,否则dircolors会根据SHELL环境变量的值来猜测它。
命令支持的选项及含义
-b, –sh, –bourne-shell 输出Bourne Shell命令。如果SHELL环境变量已设置,并且不以’csh’或’tcsh’结尾,则这是默认值。
-c, –csh, –c-shell 输出C Shell命令。如果环境变量SHELL以csh或tcsh结尾,这是默认值。
-p, –print-database 打印默认(编译时)颜色配置数据库。该输出本身就是一个有效的配置文件,并且对可能性进行了相当的描述。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
退出状态
退出状态为零表示成功,非零值表示失败。
相关手册
查看在线手册:http://www.gnu.org/software/coreutils/dircolors
查看info手册:info ‘(coreutils) dircolors invocation’
参考文献
man 1 dircolors, version GNU coreutils 8.26
更新日志
06/10/2018 创建文章[……]
「dirname(1)」-
移除文件名中的最后一个组件
命令语法格式
dirname [OPTION] NAME…
命令描述
命令dirname打印最后一个非结尾斜线前的所有组件。最后一个组件两侧的斜线也被删除。如果参数NAME中不包含斜杠,则dirname将打印’.’(表示当前目录)。
NAME不必是文件名,但如果是文件名,该操作将有效地列出包含最终组件的目录,包括最终组件本身就是目录的情况。
说了半天,其实就是打印路径中除了最后一个部分以外的其他部分:
# dirname /usr/bin
/usr
# dirname /demo/tmp/abc
/demo/tmp
如上命令所示。
命令支持的选项及含义
-z, –zero 在每个行的末尾输出零字节(NUL),而不是换行符(LF)。该选项使其他程序能够解析dirname输出的内容,即使输出包含嵌入换行符的数据。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
使用示例
# dirname /usr/bin/ /usr
# dirname dir1/str dir2/str dir1 dir2
# dirname stdio.h .
相关手册
basename(1), readlink(1)
完整在线文档:http://www.gnu.org/software/coreutils/dirname
查看info手册:info ‘(coreutils) dirname invocation’
参考文献
man 1 dirname, version GNU coreutils 8.26
更新日志
06/04/2018 创建文章[……]
「du(1)」-
报告文件或目录的硬盘空间用量
命令语法格式
du [OPTION]… [FILE]…
du [OPTION]… –files0-from=F
命令描述
命令du报告一组指定的文件或者目录使用的磁盘空间量。
如果没有指定FILE参数,则du会报告当前目录的磁盘空间。通常情况下,磁盘空间以1024字节(1MB)为单位打印,但可以修改(参见「块大小」)。非整数量向上舍入到下一个更高的单位。
如果两个或多个硬链接指向同一个FILE,则只计算其中一个硬链接。参数FILE顺序会影响计算哪些链接,更改参数顺序可能会更改du输出的数字和条目。
命令支持的选项及含义
-0, –null 在每行的末尾输出零字节(NUL),而不是换行符(LF)。该选项后,du可以产生其他程序能够解析输出,比如xargs(1)命令,即使输出条目中嵌入换行符。
-a, –all 显示所有文件的计数,而不仅仅是目录。
–apparent-size 打印实际大小,而不是磁盘使用量。文件实际大小是wc -c在常规文件上报告的字节数,或者更一般地说,是ls -l –block-size=1或stat –format=%s。例如,包含’zoo’三个字符的文件的实际大小为4。但这样一个小文件可能需要0到16KiB或更多的磁盘空间,这取决于该文件所在的文件系统的类型和配置。但是,使用此命令创建的稀疏文件:
# dd bs=1 seek=2GiB if=/dev/null of=big
具有2GiB的实际尺寸,但在大多数现代系统中,它实际上几乎不使用磁盘空间。
-B size, –block-size=size 打印之前,按size进行单位换算(参见块大小)。例如,-BG以1,073,741,824字节为单位打印大小。
-b, –bytes 等价于–apparent-size –block-size=1
-c, –total 所有FILE参数处理完毕后,打印所有FILE的总和。这可以用来找出给定的文件或目录的总磁盘使用情况。
-D, –dereference-args 解析作为命令行参数的符号链接。不会影响其他符号链接。这有助于查找目录的磁盘使用情况,例如/usr/tmp,它通常是符号链接。
-H 等价于–dereference-args (-D)。
-d depth, –max-depth=depth 显示最多depth级别下的每个目录(以及文件,如果指定–all)总和。根目录为0级,所以du –max-depth=0等同于du -s命令(即du -s .)。
-s, –summarize 为每个FILE[……]
「echo(1)」-
显示一行文本
命令语法格式
echo [SHORT-OPTION]… [STRING]… echo LONG-OPTION
命令描述
echo将每个给定的STRING写入标准输出,每个STRING之间使用一个空格分隔,然后在最后追加一个换行符。
命令支持的选项及含义
–help 显示帮助手册并退出。
–version 显示版本号并退出。
-n 不要输出的结尾追加换行符。
-E 禁用反斜线转义,参照-e选项。如果字符串中存在\b、\c之类的转义序列,则直接打印它们,不要特殊对待。这是默认的。
-e 启用反斜线转义。如果STRING中包含了以下字符序列,则对其进行解释:
\\ 反斜线
\a 警告 (BEL)
\b 退格
\c 不会产生更多的产出
\e 逃逸
\f 换页符
\n 换行符
\r 回车
\t 水平制表符
\v 垂直制表符
\0NNN 八进制数值NNN (1到3位)
\xHH 十六进制数值HH(1到2位)
注意事项
由于Shell中可能内置了echo指令,会使得脚本中默认执行的echo指令与本文所描述的echo指令有所不同。通过env(1)来调用echo(env echo)可以避免这个问题。
如果设置了POSIXLY_CORRECT环境变量,那么当echo的第一个参数不是-n时,它将输出类似于选项的参数,而不是将它们视为选项。例如,echo -ne hello将输出’-ne hello’而不是普通的’hello’。
POSIX不要求支持任何选项,并且说如果任何字符串包含反斜线或第一个参数为-n,则echo的行为是由实现定义的。如果可移植程序需要省略尾随换行符,或输出控制字符,或输出反斜杠,则可以使用printf命令。请参阅printf(1)。
退出状态
退出状态为零表示成功,非零值表示失败。
相关手册
查看在线手册:http://www.gnu.org/software/coreutils/echo
查看info手册:info ‘(coreutils) echo invocation’
参考文献
man 1 echo, version GNU coreutils 8.28
更新日志[……]
「env(1)」-
在修改的环境中运行程序
命令语法格式
env [OPTION]… [-] [NAME=VALUE]… [COMMAND [ARG]…]
命令描述
形式如’NAME=VALUE’的操作数将环境变量NAME的值设置为VALUE。VALUE可能为空(’NAME=’),这会将变量设置为空值,但这与取消变量不同。这些操作数从左到右进行求值,所以如果两个VALUE赋值给同一个NAME,则先前的赋值将被忽略。
环境变量名称可以为空,并且可以包含除了’=’和ASCII NUL以外的任何字符。但是,最好使用下划线、数字、ASCII字母,并以非数字开头组成的NAME,因为像Shell这样的应用程序不适用于其他的变量名称。
不包含字符’=’的第一个操作数将被视为要执行的程序COMMAND;它会根据PATH环境变量进行搜索。命令行中任何剩余的部分都将作为参数传递给COMMAND。该程序不应该是一个Shell内置的指令(请参阅特殊的内置实用程序)。
PATH的修改会在搜索命令之前生效。减少PATH时要小心;当PATH未定义或省略了/bin等关键目录时,行为是不可移植的。
在程序名中包含’=’的罕见情况下,消除其是变量赋值的歧义的唯一方法是为COMMAND使用中间命令,并通过args传递有问题的程序名称。例如,如果./prog=是当前PATH中的一个可执行文件:
env prog= true # runs ‘true’, with prog= in environment
env ./prog= true # runs ‘true’, with ./prog= in environment
env — prog= true # runs ‘true’, with prog= in environment
env sh -c ‘\prog= true’ # runs ‘prog=’ with argument ‘true’
env sh -c ‘exec “$@”‘ sh prog= true # also runs ‘prog=’
如果在环境变量赋值后面没有指定COMMAND,则会打印环境变量。这就像指定printenv(1)一样。
命令支持的选项及含义
-0, –null 在每个条目的末尾输出零字符(ASCII NUL),而不是换行符(ASCII LF)。该选项使env出处其他程序(xargs)能够解析的输出,即使输出的条目中嵌入了换行符。
-u name, –unset=name 如果变量name在当前环境中,则从环境中删除它。
-, -i, –ignore-environment 以空环境开始,忽略从现有环[……]
「expand(1)」-
将TAB转化为空格
命令语法格式
expand [OPTION]… [FILE]…
命令描述
expand将每个在命令行中给出的文件FILE的内容写入标准输出,并将制表符转换为适当数量的空格。
如果没有给出FILE,或者FILE为’-‘,则从标准输入中读取。
默认情况下,expand将所有的制表符转换为空格。它在输出中保留退格字符;他们会减少了制表符计算的列数。
默认操作为-t 8(每8列设置一个制表符)。
命令支持的选项及含义
-i, –initial 仅将每行上的初始选制表符转换为空格。“初始选制表符”指的是位于所有非空格或非制表符字符之前的制表符。
-t tab1[,tab2]…, –tabs=tab1[,tab2]… 参数形式一:如果只给出一个tab1,形如-t 4,则将TAB设置为tabl个空格的长度,比如-t 4表示将一个TA设置为4个空格长度。如果没有指定-t选项,则等价于指定了-t 8(默认值将一个TAB替换成8个空格)。注意:是“将TAB设置为tabl个空格的长度”,而不是“将TAB替换成tabl个空格”,关于这一点,参阅下面的「关于制表符(TAB)」部分中的介绍。
参数形式二:如果指定指定了多个tab,形如-t 1,3,5,6,则将设置在tab1,tab2,…列的制表符(tab1从0开始编号),并将超出最后一个制表位以外的制表符替换为单个空格。
作为一个GNU扩展,指定的最后一个制表位可以用’/’作为前缀,以指示用于其余位置的制表符的大小。例如,–tabs=2,4,/8表示将在第2和第4位设置制表位,在这之后就都是8的倍数。
另外,指定的最后一个制表位也可以用“+”作为前缀,以指示其余位置的制表符大小,与最后明确指定的制表位的偏移量。例如,要忽略在diff输出中出现的1个字符的分隔线,可以使用–tabs=1,+8来指定1个字符的偏移量,这将在位置1,9,17…处设置制表符。
由以下几点需要注意:
为了兼容,GNU扩展还接受以前的语法“-t1[,t2]…”,但是新脚本应该使用”-t t1[,t2]…“来代替旧的用法。
制表位(tab1,tab2,…)可以用空格或者逗号分隔,如果使用空格分割,则制表位列表要使用引号,比如-t “1 2 3 4″。
–help 显示帮助手册并退出。
–version 显示版本号并退出。
退出状态
退出状态为零表示成功,非零值表示失败。
关于制表符(TAB)
有时候发现自己的语言能力还是有所欠缺。
真正明白制表符(TAB)是个什么东西之前,请先记住一句话:制表符是一个字符,只是在显示的时候会[……]
「expr(1)」-
评估表达式
命令语法格式
expr EXPRESSION
expr OPTION
命令描述
命令expr评估表达式EXPRESSION,并将结果写入标准输出。表达式的每个标记(token)都必须是单独的参数。
操作数是整数或字符串。整数由一个或多个十进制数字组成,并带有可选的前导减号(’-‘)表示负数。expr将出现在操作数位置的任何内容转换为整数或字符串,具体取决于应用于此的操作。
对于expr本身,字符串不需要进行引用,但是如果字符串中包含对Shell有特殊含义的字符,那么可能需要通过引用来保护它们,例如空格。然而,无论是否引用它,字符串操作数中都不应该是圆括号或任何expr的运算符(如,+)。因此,你无法只能通过将其引用到shell来安全地将任意字符串$str传递给expr。解决这个问题的一种方法是使用GNU扩展“+”(例如+ “$str” = foo);更具有可移植性的方法是使用“$ str”,并调整表达式的其余部分以考虑前导空格(例如“$ str”=“foo”)。
不要将一个负整数或一个带有前导’-‘的字符串作为expr的第一个参数,因为它可能会被解释为一个选项;这可以通过括号来避免。另外,可移植脚本不应该使用恰好是整数形式的字符串操作数;这可以通过插入如上所述的前导空格来解决。
运算符可以作为中缀符号或前缀关键字。圆括号可以用于通常的分组手段。但是,括号和许多运算符可能需要引用,以此来避免Shell解析它们。
当支持GNU MP库时,expr使用任意精度算法;否则,它使用本地算术类型,但可能由于算术溢出而失败。
命令支持的选项及含义
命令expr主要的用途是计算表达式,所以支持的选项比较少,也与计算表达式无关。
表达式
本部分介绍的是expr命令中的EXPRESSION参数的语法。分为三部分:字符串表达式、数字表达式、关系运算符。
字符串表达式
expr支持模式匹配和其他字符串运算符。这些比数字和关系运算符具有更高的优先级(在下一节中)。
string : regex 执行模式匹配。参数被转换为字符串,第二个参数被视为正则表达式(BRE,如GNU的grep命令),并带有一个隐含的脱字符(^)前缀。然后,用第一个参数与这个正则表达式匹配。
如果匹配成功,并且正则表达式中使用了’\(‘和’\)’,则:表达式返回匹配子表达式的字符串部分;否则,它返回匹配的字符数。如果匹配失败,如果在正则表达式中使用’\(‘和’\)’,则:表达式返回空字符串,否则返回0。
只有第一对’\(…\)’与返回值有关;其他仅对正则表达式运算符进行分组才有意义。
在正则表达式中,\+,\?和\|是分别匹配一个或多个、零个或一个、分离的或运[……]
「factor(1)」-
打印质数因子
命令语法格式
factor [NUMBER]… factor OPTION
命令描述
如果在命令行上未指定任何数字NUMBER,则factor会从标准输入中读取数字NUMBER,标准输入中读取的数字可以由换行符、制表符、空格分隔。
–help 显示帮助并退出。
–version 显示版本信息。
退出状态
如果退出状态为零,表示执行成功。非零表示执行失败。
相关手册
完整在线手册:http://www.gnu.org/software/coreutils/factor
查看info手册:info ‘(coreutils) factor invocation’
参考文献
man 1 foctor, version GNU coreutils 8.26
更新日志
06/01/2018 创建文章[……]
「false(1)」-
返回状态值1
命令语法格式
false [ignored command line arguments] false OPTION
命令描述
false除了返回状态值1外,什么也不做,状态值1意味着失败。它可以用作需要不成功命令的SHELL脚本中的占位符。
Exit with a status code indicating failure.
–help 显示帮助并退出。
–version 显示版本信息。
注意事项
在大多数现代SHELL中,false是一个内置命令,因此当在脚本中使用“false”时,可能使用的是内置命令,而不是此处记录的命令。执行type命令来验证:
# type -a false
false is a shell builtin
false is /bin/false
如果有false is a shell builtin就表示你的SHELL中内建的false指令。
此版本的false是作为C程序实现的,因此比SHELL脚本实现更安全并且更快,并且可以安全地用于禁用帐户登录。查看/etc/passwd文件,你会发现有些用户的默认SHELL是/bin/false,这些用户是禁止登录的。
请注意,使用–help或–version选项时,false也不会成功退出,这和其他程序有所不同。
在可移植脚本中不应假定false的退出状态为1,因为它在某些非GNU系统上是大于1的。
相关手册
查看在线手册:http://www.gnu.org/software/coreutils/false
查看info手册:info ‘(coreutils) false invocation’
参考文献
man 1 false, version GNU coreutils 8.26
更新日志
06/10/2018 创建文章[……]
「fmt(1)」-
创建最佳文本排版的简单格式化程序
命令语法格式
fmt [-WIDTH] [OPTION]… [FILE]…
命令描述
重新格式化FILE中的段落,然后将格式化结果打印到标准输出。-WIDTH是–width=DIGITS的缩写。
如果没有指定FILE,或者FILE为`-‘,则从标准输入中读取要格式化的内容。
下面选项中,长选项的参数对于短选项来说也是必须的提供的。
-c, –crown-margin 保留段落中前两行的缩进,并将每个后续行的左边距与第二行的左边距对齐。
-t, –tagged-paragraph 类似于-c选项,唯一不同的是:如果段落的第一行的缩进与第二行的缩进相同,则第一行被视为单行段落。
-p, –prefix=STRING 只格式化以STRING开始的行。格式化后的行依旧以STRING开始
-s, –split-only 拆分长行,但不要进行再填充。
-u, –uniform-spacing 统一空格。字之间为一个空格。句子后面为两个空格。
-w, –width=WIDTH 填充输出的行,使宽度达到WIDTH。默认为75列。
-g, –goal=WIDTH 在fmt初始化的时候,将行设置宽度为WIDTH。默认为WIDTH的93%。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
相关手册
完整在线文档:http://www.gnu.org/software/coreutils/fmt
查看info手册:info ‘(coreutils) fmt invocation’
参考文献
man 1 fmt, version GNU coreutils 8.28
更新日志
02/13/2018 创建文章,但是没有整理[……]
「fold(1)」-
调整每行的长度为指定的宽度,然后将处理结果打印到stdout中。
比如,对于如下文本:
lsamkedrhgfjv awjv auksd hgfskajdg a,skjdgf alskdj gaksdg akdj gaklcsjdclasbdmlak
使用命令fold -w 20来调整行长度,会产生如下输出:
lsamkedrhgfjv awjv a
uksd hgfskajdg a,skj
dgf alskdj gaksdg ak
dj gaklcsjdclasbdmla
k
如上所示,单词会被截断,该命令并不适合用于文本段落的调整。如果要进行文本段落的调整,可以使用fmt(1)命令。
注意,该工具适用于英文的文本,对于中文文本支持并不好(但不妨碍它的其他作用)。
命令行的语法格式
fold [OPTION]… [FILE]…
[FILE]:为要处理的文件。如果未指定,或者指定了-,则从stdin中读取。
命令支持的选项及含义
长选项的必填参数,在短选项中也是必须提供的。
-w, –width=WIDTH 行的宽度。默认为80列。
-b, –bytes 以字节为单位进行计数,而不是列数。因此,TAB、CR、BS会被视为一个字符。
-s, –spaces 在空格处中断。如果不使用该选项,单词会被直接截断。使用该选项后,会在单词结束处开始下一行。
–help 显示帮助并退出。
–version 显示版本信息。
退出码
如果执行成功,则返回0;执行失败则返回1;
注意事项
默认情况下,fold命令以列为单位进行计数,因此TAB会被视为多个列,CR(回车)会将列数视为0、BS(退格)会减少列。而-s选项会以字节进行计数,所以前面的TAB、CR、BS会被视为一个字符。
使用示例
分别用以下命令处理相同文本:
# echo ‘lsamkedrhgfjv awjv auksd hgfskajdg a,skjdgf alskdj gaksdg akdj gaklcsjdclasbdmlak’ | fold -w 20 lsamkedrhgfjv awjv a uksd hgfskajdg a,skj dgf alskdj gaksdg ak dj gaklcsjdclasbdmla k
# echo ‘lsamkedrhgfjv awjv auksd hgfskajdg a,skjdgf alskdj gaksdg akdj gaklcsjdclasbdmlak’ | fold -w 25 lsamkedr[……]
「groups(1)」-
打印一个用户所属的组
命令语法格式
groups [OPTION]… [USERNAME]…
命令描述
groups命令将打印每个给出的USERNAME主组以及补充组的名称。如果没有给出USERNAME,则打印当前用户的所属组和补充组。如果给出多个USERNAME,则会在该用户的组列表之前打印每个用户名,并且用冒号将该用户名与组列表分隔开。
组列表等同于命令’id -Gn’的输出。
命令支持的选项及含义
–help 显示帮助并退出。
–version 显示版本信息。
注意事项
进程的主组和补充组通常是从其父进程继承,并且自登录后通常不会改变。这意味着如果你在登录后更改组数据库,则组不会在现有登录会话中反映出你的更改。而使用带有USERNAME参数运行的group命令导致重新查询用户和组数据库,因此会给出不同的结果。
退出状态
退出状态为零表示成功,非零值表示失败。
相关手册
getent(1)
查看在线手册:http://www.gnu.org/software/coreutils/groups
查看info手册:info ‘(coreutils) groups invocation’
参考文献
man 1 groups, version GNU coreutils 8.28
更新日志
06/21/2017 创建文章
05/12/2018 调整文章结构,修改文章内容[……]
「head(1)」-
输出文件的开始部分
命令语法格式
head [OPTION]… [FILE]…
命令描述
默认打印每个FILE的前10行到标准输出中。如果指定了多个文件,则会在每个输出前先打印出文件名。
如果没有指定文件FILE,或者FILE为-,则从标准输入中读取文件。
长选项的必填参数,在短选项中也是必须提供的。
-c, –bytes=[-]NUM 打印文件前NUM字节,而不是初始行。但是,如果NUM以“-”作为前缀,则会打印每个文件的所有内容,但是除了每个文件的最后NUM字节。NUM可以是后跟一个以下后缀的整数:
‘b’ => 512 (“blocks”)
‘KB’ => 1000 (KiloBytes)
‘K’ => 1024 (KibiBytes)
‘MB’ => 1000*1000 (MegaBytes)
‘M’ => 1024*1024 (MebiBytes)
‘GB’ => 1000*1000*1000 (GigaBytes)
‘G’ => 1024*1024*1024 (GibiBytes)
同样还有‘T’, ‘P’, ‘E’, ‘Z’, ‘Y’。
-n, –lines=[-]NUM 输出前NUM行。但是,如果NUM以“-”作为前缀,则只打印每个文件中除了最后NUM行以外的其他行。NUM也可以使用后缀,用法类似于-c选项
-q, –quiet, –silent 不打印文件名。默认情况下,如果指定了多个文件,则会在每个输出前先打印出文件名。
-v, –verbose 总是打印文件名。默认情况下,如果指定了多个文件,则会在每个输出前先打印出文件名。
-z, –zero-terminated 将输入行的分隔符视为零字符(ASCII NUL),然后输出时时候ASCII NUL字符进行分隔。
这个选项可以和’perl -0’或者’find -print0’和’xargs -0’结合使用,它们可以可靠地处理任意文件名(甚至文件名中包含空格或其他特殊字符都可以很好的处理)。
–help 显示帮助并退出。
–version 显示版本信息。
注意事项
还有一些旧的废弃的命令行语法,已经不再推荐使用了,可以参照官方的文档(位于在线手册页的底部);
相关手册
tail(1)
完整在线文档:http://www.gnu.org/software/coreutils/head
查看info手册:info ‘(coreutils) head invocation’
参考文献[……]
「hostid(1)」-
打印当前主机的唯一标识符
命令语法格式
hostid [OPTION]
命令描述
hostid以十六进制数字的形式打印当前主机的标识符。该命令不接受任何参数
命令支持的选项及含义
–help 显示帮助并退出。
–version 显示版本信息。
注意事项
hostid仅安装在具有gethostid功能的系统上,因此可移植脚本不应依赖其存在。
使用示例
如下示例,打印我们当前主机的唯一标识符:
# hostid
1bac013d
在这个系统上,32位的值恰好与系统的网络地址密切相关,但情况并非总是如此。
退出状态
退出状态为零表示成功,非零值表示失败。
相关手册
gethostid(3)
查看在线手册:http://www.gnu.org/software/coreutils/hostid
查看info手册:info ‘(coreutils) hostid invocation’
参考文献
man 1 hostid, version GNU coreutils 8.28
更新日志
06/21/2018 创建文章[……]
「hostname(1)」-
打印或者设置主机名
命令语法格式
hostname [name]
命令描述
如果没有参数,命令hostname将显示当前主机系统的名称。如果指定了一个参数name,则将当前主机名设置为由name指定的字符串。必须具有适当的权限才能设置主机名。
推荐使用hostnamectl(1)命令还设置主机名。
命令支持的选项及含义
–help 显示帮助并退出。
–version 显示版本信息。
退出状态
退出状态为零表示成功,非零值表示失败。
注意事项
命令hostname默认情况下是不安装的,其他软件包中也提供了hostname命令,使用上也存在差异,因此可移植脚本不应该依赖于它的存在或上述行为。比如,在Debian 8及其他的一些系统中,hostname命令来自于net-tools软件包,它和这里描述的hostname命令差异很大。
在使用systemd的系统上,目前我们使用hostnamectl(1)命令来修改主机名。
相关手册
查看在线手册:https://www.gnu.org/software/coreutils/manual/coreutils.html#hostname-invocation
查看info手册:info ‘(coreutils) hostname invocation’
参考文献
info ‘(coreutils) hostname invocation’
更新日志
06/25/2018 创建文章[……]
「id(1)」-
打印真正的有效用户ID和组ID
命令语法格式
id [OPTION]… [USER]
命令描述
命令id打印关于给定用户USER的信息,如果没有指定用户USER,则打印运行id命令的进程的用户和组信息。
USER可以是用户ID或用户名。如果USER为用户ID,则需要使用前导加号(+),否则id会将USER视为一个用户名。请参阅消除歧义名称和ID。
默认情况下,打印真实用户ID、实际组ID、有效用户ID(如果不同于真实用户ID)、有效组ID(如果不同于真实组ID)、补充组ID。另外,如果启用SELinux并且未设置POSIXLY_CORRECT环境变量,则打印’context=c’,其中c是安全上下文。
在命令的输出中,每个数字值前面都有一个标识字符串,后面跟着相应的用户名或组名。
命令支持的选项及含义
-Z, –context 只打印进程的安全上下文,通常是从父进程继承的用户安全上下文。如果SELinux或SMACK都未启用,则打印警告,并将状态1退出。
-g, –group 仅打印基本组ID。
-G, –groups 打印基本组ID与附属组ID。
-u, –user 只打印用户ID。
-r, –real 与-u、-g、-G选项一起使用,打印出真正的用户ID或组ID,而不是默认的有效ID。
-n, –name 与-u、-g、-G选项一起使用,打印出用户名或组名,而不是默认的ID。
-z, –zero 使用NUL来分割字符,而不是默认的空白字符。使用默认输出格式时,不允许使用此选项。
其他选项
–help 显示帮助并退出。
–version 显示版本信息。
-a 被忽略的选项,只是为了兼容之前的版本。
基本组(Primary)与附属组(Supplementary)
基本组,也被称为Primary Group、First Group、Initial Login Group,用户的默认组,用户的GID所标识的组。
附属组,也被称为Secondary Group、Supplementary Group,用户的附加组。
系统中所有的组及其信息保存在/etc/group文件中,该文件中保存了组名、组ID以及一些其他的信息,他们之间由冒号(:)分隔。而用户的所属的基本组保存在/etc/passwd文件中,各个字段也是由冒号(:)分隔的,其中第4个字段为组ID,对应了/etc/group中的组ID。而用户所属的附属组信息保存在/etc/gshadows/gshadows文件中。
实际用户与有效用户、实际用户组与有效用户组
在Unix进程中涉及多个用户ID和用户组ID,包括如下:[……]
「install(1)」-
复制文件并设置属性
命令语法格式
install [option]… [-T] source dest install [option]… source… directory install [option]… -t directory source… install [option]… -d directory…
命令描述
命令install复制文件,然后设置文件模式位,如果可能,还会修改文件所属的用户和组。
如果给出了两个文件名,install会将第一个文件复制到第二个文件。
如果给出–target-directory(-t)选项,则install将每个源文件(source…)复制到该选项指定的目录directory中,文件名为原文件名。或者如果最后一个文件是目录,并且没有给出–no-target-directory(-T)选项,则install的会执行失败。
如果给出了–directory(-d)选项,install会创建每个目录以及任何缺少的父目录。无论-m选项或当前的umask是什么,父目录都使用’u=rwx,go=rx’(755)模式创建。有关如何继承父目录的set-user-ID和set-group-ID位的信息,请参见目录Setuid和Setgid。
命令instlal类似于cp,但install允许控制目标文件的属性。它通常用于Makefiles中,将程序复制到目标目录中。它拒绝将文件复制到自身。
命令install永远不会保留扩展属性(xattr)。
命令支持的选项及含义
需要提供给长选项的参数也必须提供给相应的短选项。
-b, –backup[=method] 备份每个可能被覆盖或删除的文件。请参阅备份选项。
-C, –compare 比较每对源文件source和目标文件dest,并且如果目标文件dest具有相同的内容和任何指定的所有者、组、权限、可能的SELinux上下文,则不要修改目标文件dest。
请注意,此选项最好与–user、–group、–mode选项一起使用,以免install错误地决定了安装文件的默认属性(例如,因为它不考虑setgid目录和POSIX默认ACL)。这可能会导致多余的副本或属性未被重置为正确的默认值。
-D 创建任何缺少dest的父目录,然后再将source复制到dest。显式指定–target-directory=dir将同样确保在复制参数source之前存在该层次结构。
-d, –directory 创建任何缺少dest的父目录,为它们提供默认属性 然后创建每个给定的目录,将它们的所有者、组、模式设置为在命令行中给出[……]
「join(1)」-
以公共的字段连接两个文件的行
命令语法格式
join [option]… file1 file2
命令描述
将每一对具有相同连接字段的输入行连接在一起并写入标准输出。它的行为与SQL语句的JOIN指令是类似的。在「使用示例」部分查看演示示例。
参数file1和file2可以是‘-’表示从标准输入中读取数据,但是不能同时为‘-’。file1和file2的连接字段需要先进行排序。
命令join的默认行为(未指定任何命令行参数时):
连接所使用的字段是每行中的第一个字段;
使用空白作为字段之间的分隔符,行上的前导空格会被忽略;
输出结果中的字段之间由空格进行分隔;
每个输出行都是由连接字段、file1中剩余的字段、file2中剩余的字段组成。
命令支持的选项及含义
-a file-number 除了正常打印外,还打印第file-number个文件中无法配对的行。file-number的取值只能为1和2中的一个。
默认情况下,join只会输出两个文件中能够配对的行,使用该选项可以将无法配对的行也打印出来。
–check-order 使用该选项后,如果用于连接的字段是未排序的,则产生错误。
–nocheck-order 不检查输入文件中用于连接的字段是否排序。这是默认行为。
-e string 用字符串替换输入中缺少的输出字段。即,缺少用-1, -2, -j, -o选项指定的字段。
–header 将每个输入文件的第一行视为标题行。标题行将被连接,并作为输出的第一行进行打印。如果使用了-o选项用于指定输出格式,则会根据指定的格式打印标题行。即使指定了–check-order,也不会检查标题行。
另外,如果文件中用于连接的字段的标题不匹配,则将使用第一个文件中的标题字段。
-i, –ignore-case 在连接比较时忽略大小写的差异。使用此选项,输入文件中用于连接的行也必须以忽略大小写的方式进行排序。可以使用’sort -f’来产生这种顺序。
-1 field 指定file1中用于连接的字段。field为正整数。
-2 field 指定file2中用于连接的字段。field为正整数。
-j field 等价于-1 field -2 field。
-o field-list, -o auto 如果指定了关键字’auto’,则从每个文件的第一行推断输出格式。这与默认输出格式相同,但也确保为每行输出相同数量的字段。缺少的字段被替换为-e选项指定的字符串,并且放弃额外的字段。
否则,按照field-list中的格式构建每个输出行。字段列表中的每个元素可以是单个字符’0[……]
「link(1)」-
调用link函数创建链接
命令语法格式
link filename linkname link OPTION
命令描述
link一次创建单个硬链接。它是系统提供的link函数的一个简单接口。请参阅GNU C库参考手册中的硬链接。可以避免使用花哨复杂的ln(1)命令。
filename必须指定一个现有文件,并且linkname必须为目录中不存在的一个条目。命令link只需调用link (filename, linkname)来创建链接。
在GNU系统上,该命令的作用类似于“ln –directory –no-target-directory filename linkname”。但是, –directory和–no-target-directory选项不是由POSIX指定的,并且在实践中link命令更具可移植性。
如果filename是符号链接,则link无法确定创建到符号链接的硬链接,还是创建指向符号链接的目标的硬链接。此时需要使用ln -P或ln -L来指定需要哪种行为。
退出状态为零表示成功,非零值表示失败。
命令支持的选项及含义
–help 显示帮助并退出。
–version 显示版本信息。
退出状态
退出状态为零表示成功,非零值表示失败。
相关手册
link(2)
查看在线手册:http://www.gnu.org/software/coreutils/link
查看info手册:info ‘(coreutils) link invocation’
参考文献
man 1 link, version GNU coreutils 8.28
更新日志
06/25/2018 创建文章[……]
「ln(1)」-
创建文件之间的链接
命令语法格式
ln [option]… [-T] target linkname ln [option]… target ln [option]… target… directory ln [option]… -t directory target…
命令描述
命令ln用于在文件之间建立链接。默认情况下,它创建的是硬链接;如果与-s选项一起使用,则创建的是符号链接(或软链接)。
如果给出两个文件名,则ln将从第二个文件创建一个指向第一个文件的链接。
如果给出了一个target,ln在当前目录中创建一个指向该文件的链接。
如果给出了–target-directory(-t)选项,ln会在指定的目录directory中为每一个target创建一个指向该target的链接,链接的名字为target的名称。或者如果最后一个文件是一个目录,并且没有给出–no-target-directory(-T)选项则失败。
通常,ln不会替换现有的文件。使用–force(-f)选项无条件地替换它们;使用–interactive(-i)选项来有条件地替换它们;使用–backup(-b)选项来重命名它们。除非使用–backup(-b)选项,否则不存在target不存在的瞬间,这是对POSIX的扩展。
硬链接是现有文件的另一个名称;硬链接和原文是无法进行区分的。从技术上讲,它们共享相同的inode,并且inode包含有关文件的所有信息 —— 事实上,说inode是文件并不正确。大多数系统禁止建立指向目录的硬链接;在允许的情况下,只有超级用户才可以这样做(并且要小心,因为创建一个循环的链接指向会给许多其他实用程序带来问题)。硬链接不能跨越文件系统边界。(然而,这些限制不是由POSIX授权的。)
另一方面,符号链接(软链接)是一种特殊的文件类型(并非所有的内核都支持:System V release 3(和更早的版本)系统缺少符号链接的支持),其中链接文件实际上是指不同的文件,名称。当大多数操作(打开,读取,写入等)都通过符号链接文件时,内核会自动解析链接的引用,并操作链接指向的目标。但是一些操作(例如移除)会在链接文件本身上工作,而不是在其指向的目标上工作。对于通过链接进行访问文件,符号链接的所有者和组对于文件访问没有意义,但对于从设置了有限删除位的目录中删除符号链接有影响。在GNU系统中,符号链接的权限模式位没有意义,也不能改变,但在一些BSD系统中,链接的权限模式位可以改变,并且会影响符号链接是否在文件名解析中被遍历。请参阅GNU C库参考手册中的符号链接。
符号链接可以包含任意字符串;当符号链接中的字符串不解析为一个文件时,就会[……]
「logname(1)」-
打印用户的登录名
命令语法格式
logname [OPTION]
命令描述
logname打印在“系统维护的文件”中找到的调用者的用户名,并以状态0退出,这里所说的“系统维护的文件”通常为/var/run/utmp或/etc/utmp。
如果调用进程没有对应的条目,则logname打印 一条错误消息并状态1退出。
命令支持的选项及含义
–help 显示帮助并退出。
–version 显示版本信息。
退出状态
0 表示成功
>0 表示失败
相关手册
查看在线手册:http://www.gnu.org/software/coreutils/logname
查看info手册:info ‘(coreutils) logname invocation’
参考文献
man 1 logname, version GNU coreutils 8.28
更新日志
06/21/2018 创建文章[……]
「ls(1)」-
列出目录内容
命令语法格式
ls [OPTION]… [FILE]…
命令描述
命令ls列出有关文件(任何类型的文件,包括目录)的信息。像往常一样,选项和文件参数可以任意混合。
对于非选项的命令行参数,如果是目录,缺省情况下,ls会列出目录的内容(不是递归列出),并省略文件名以“.”开头的文件;对于其他非选项参数,默认情况下,ls只列出文件名。如果没有指定非选项参数,那么ls在当前目录下运行,就好像使用参数’.’进行调用。
默认情况下,根据有效的语言环境设置,输出的文件及目录名按字母顺序排序。如果标准输出为终端,则按列进行输出(垂直排序),控制字符作为问号输出; 否则,输出每行输出一列,控制字符按原样输出。
因为ls是一个非常基本的程序,多年来积累了很多选项。在下面的部分中会介绍它们;在每个部分中,选项按字母顺序列出(忽略大小写)。将选项分为小节并不是一个十分准确的做法,因为一些选项会影响ls操作的多个方面。
下面会按不同的部分进行介绍这些选项。
命令行选项
列出哪些文件
下面的这些选项决定ls会为哪些文件列出信息。默认情况下,ls列出文件和命令行参数中任何目录里的内容,但是会忽略目录中文件名以’.’开头的文件。
-a, –all 列出所有的文件和目录,包括那些文件名以‘.’开始、默认会被忽略的文件。
-A, –almost-all 列出所有的文件和目录,包括那些文件名以“.”开始、默认会被忽略的文件。但是,会忽略“.”和“..”。选项–all (-a)会覆盖该选项。
-B, –ignore-backups 忽略目录中以“~”结尾的文件。该选项等价于–ignore=’*~’ –ignore=’.*~’组合。
-d, –directory 与其他类型的文件一样,列出目录名,而不是列出其内容。除非指定了–dereference-command-line(-H),–deference(-L)或–dereference-command-line-symlink-to-dir选项,否则不会解析命令行中列出的符号链接。
-H, –dereference-command-line 如果命令行参数指定了符号链接,则显示链接引用的目标的信息,而不是链接本身的信息。
–dereference-command-line-symlink-to-dir 不要解析符号链接,显示符号链接的信息。但是:如果命令行参数是一个指向目录的符号链接,则显示该目录的信息,而不是符号链接本身。当没有指定其他与解析符号链接相关的选项时,这是默认行为。(–classify (-F), –directory (-d), (-l), –dereferen[……]
「md5sum(1)」-
计算和检查文件的MD5值
命令语法格式
md5sum [OPTION]… [FILE]…
命令描述
命令md5sum为每个文件参数FILE计算一个128位校验和(或指纹,或消息摘要)。
如果参数FILE为’-‘,或者没有指定,则命令md5sum从标准输入中读取数据来计算校验和。md5sum还可以确定文件与校验和是否一致。
在默认输出中,每个文件会对应一行输出,该行由MD5校验和、空格、表示二进制或文本输入模式的标志、文件名这四部分组成。二进制模式用星号(’*’)表示,文本模式用空字符(”)表示。二进制模式是重要系统上的默认模式,否则文本模式是默认模式。
命令支持的选项及含义
控制输出格式
–tag 输出BSD风格的校验和,表示使用的校验和算法。作为GNU扩展,具有特殊字符的文件名通过如上所述方法被转义,在行的开始使用相同的转义指示符’\’。选项–tag隐含了二进制模式,并且禁止与–text一起使用,这会不必要地使输出格式复杂化,同时提供很少的好处。
-z, –zero 在每行的末尾输出一个零字节(NUL),而不是换行符(LF)。
此选项会使md5sum产生其他程序能够解析的输出,即使该输出中包含了嵌入换行符的数据。也不使用文件名转义。
没有指定–zero选项时,如果参数FILE包含反斜杠或换行符,则对应的输出行以反斜杠开头,并且文件名中的每个有问题的字符都使用反斜杠进行转义,即使存在任意文件名,也会使输出明确无误。
文件读取模式
-b, –binary 通过以二进制模式读取文件,并输出’*’标志,将每个输入文件视为二进制文件。这与–text选项相反。
在像GNU这样的不区分二进制文本和文本文件的系统上,该选项仅将每个输入模式标记为二进制:MD5校验和不受影响。除了标准输入是终端时读取标准输入时,此选项是MS-DOS等区分二进制和文本文件的系统的默认选项。
-t, –text 将每个输入文件作为文本处理,通过在文本模式下读取,并输出空字符(”)标志。这与–binary选项相反。这个选项是像GNU这样的系统的默认值,它不区分二进制和文本文件。在其他系统上,当标准输入是终端时,它是读取标准输入的默认值。
如果使用–tag选项,则此模式永远不会默认为。
验证校验和
-c, –check 从每个参数FILE中读取要检查的文件名和校验和信息(不是数据),并报告校验和是否与对应的文件想匹配。这种md5sum模式的输入通常是先前产生“md5sum”校验和的输出。支持三种输入格式:上述的默认输出格式、–tag输出格式、BSD反向模式格式(类似于默认模式,但不使用字符来区分二进制和文本模式)。
对于文件中每个[……]
「mkdir(1)」-
创建文件夹
命令语法格式
mkdir [OPTION]… DIRECTORY…
命令描述
mkdir按照给定的顺序创建每个目录DIRECTORY。如果名称已经存在,它会报告错误,除非给出-p选项并且DIRECTORY是目录。
命令支持的选项及含义
-m, –mode=MODE 将创建的目录的文件权限位设置为MODE,该模式MODE的使用与chmod(1)中的语法相同,并为出发点使用’a=rwx’(允许读取,写入和执行,以供所有人使用)。请参阅文件权限。
通常,在创建时,该目录就具有所需的文件模式位。作为一个GNU扩展,模式MODE也可能会提到特殊模式位,但在这种情况下,可能存在一个临时窗口:在该窗口期间,目录存在,但目录的特殊模式位不正确。有关如何继承目录的SETUID和SETGID位,除非以这种方式重写,请参见目录SETUID和SETGID。
-p, –parents 为每个目录参数创建缺失的上级目录,并将它们的文件权限位设置为由’u+wx’结合umask的结果。忽略已经存在的上级目录,并且不要更改它们的文件权限位。
要将任何新创建的上级的文件权限位设置为包含’u+wx’的值,你可以在调用mkdir之前设置umask。例如,如果SHELL命令(umask u=rwx,go=rx; mkdir -p P/Q)创建上级目录P,则它将上级目录的权限位设置为’u=rwx,go=rx’。要设置上级目录的特殊模式位,你可以在mkdir之后调用chmod。有关如何继承新创建的上级目录的SETUID和SETGID位,除非以这种方式重写,请参见目录SETUID和SETGID。
-v, –verbose 为每个创建的目录打印一条消息。这对于创建了上级目录时非常有用。
-Z, –context[=CTX] 如果没有指定的上下文CTX,请根据目标文件的系统默认类型调整SELinux安全上下文,与restorecon命令类似。
具有指定的特定上下文的–context选型将仅为新创建的文件设置上下文。在指定的上下文中,如果SELinux和SMACK都被禁用,则会发出警告。
–help 显示帮助并退出。
–version 显示版本信息。
相关手册
mkdir(2)
查看在线手册:http://www.gnu.org/software/coreutils/mkdir
查看info手册:info ‘(coreutils) mkdir invocation’
参考文献
man 1 mkdir, version GNU coreutils 8.28
更新日志
06/16/2018 创[……]