「b2sum(1)」-

计算和检验BLAKE2消息摘要
命令语法格式
b2sum [OPTION]… [FILE]…
命令描述
命令b2sum为文件FILE计算长度为384位的校验和。该命令的用法和选项与md5sum(1)基本相同。请参阅md5sum(1)调用。
命令b2sum支持的其他选项
该命令的用法和选项与md5sum(1)基本相同,此外,b2sum支持以下选项:
-l, –length 更改默认摘要长度,这里的更改实际上是缩短。这是以位为单位指定的,因此length必须是8的倍数。
当指定–check选项时(参考md5sum(1)调用),将忽略此选项,因为在检查时会自动确定长度。
相关手册
md5sum(1)
查看在线手册:http://www.gnu.org/software/coreutils/b2sum
查看info手册:info ‘(coreutils) b2sum invocation’
参考文献

man 1 b2sum, version GNU coreutils 8.28

更新日志

07/08/2018 创建文章[……]

READ MORE

「base32(1)」-

使用base32编码/解码数据,然后打印到标准输出中
命令语法格式
base32 [OPTION]… [FILE]
命令描述
base32命令会将FILE按照RFC4648文档中描述的那样进行编码或者解码,然后输出到标准输出中。如果没有指定FILE,或者FILE为-,则从标准输入中读取数据。
长选项的必须参数,对于对应的短选项也是必须的。
-d, –decode 对数据进行解码。默认是对数据进行编码的。
-i, –ignore-garbage 在解码时,换行符是可以接受的,除此之外,忽略无法识别的字节,以允许解码那些失真的数据。
如果输入流中包含了一些非字母表的字符,可以使用该选项。
-w, –wrap=COLS 在编码过程中,在COLS个字符后换行。COLS必须是一个正数。 默认值是在76个字符后换行。如果COLS的值0,表示完全禁用换行。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
相关手册
在线完整手册:http://www.gnu.org/software/coreutils/base32
查看info手册:info ‘(coreutils) base32 invocation’
参考文献

man 1 base32, verison GNU coreutils 8.26

更新日志

06/02/2018 创建文章[……]

READ MORE

「base64(1)」-

使用base64编码/解码数据,然后打印到标准输出中
命令语法格式
base64 [OPTION]… [FILE]
命令描述
base64命令会将FILE按照RFC4648文档中描述的那样进行编码或者解码,然后输出到标准输出中。如果没有指定FILE,或者FILE为-,则从标准输入中读取数据。
长选项的必须参数,对于对应的短选项也是必须的。
-d, –decode 对数据进行解码。默认是对数据进行编码的。
-i, –ignore-garbage 在解码时,换行符是可以接受的,除此之外,忽略无法识别的字节,以允许解码那些失真的数据。
如果输入流中包含了一些非字母表的字符,可以使用该选项。
-w, –wrap=COLS 在编码过程中,在COLS个字符后换行。COLS必须是一个正数。 默认值是在76个字符后换行。如果COLS的值0,表示完全禁用换行。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
相关手册
在线完整手册:http://www.gnu.org/software/coreutils/base64
查看info手册:info ‘(coreutils) base64 invocation’
参考文献

man 1 base64, verison GNU coreutils 8.26

更新日志

06/02/2018 创建文章[……]

READ MORE

「basename(1)」-

从文件名中去除目录和后缀
命令语法格式
basename NAME [SUFFIX] basename OPTION… NAME…
命令描述
移除NAME中的所有前导目录,只留下文件名。如果指定了SUFFIX,那么同时也会移除文件后缀。
长选项的参数,短选项也必须使用。
-a, –multiple 使用该选项后,basename可以支持多个NAME参数,而不是将其视为要被移除的后缀SUFFIX。
-s, –suffix=SUFFIX 从文件名中移除后缀SUFFIX。隐含了-a选项。
-z, –zero 以NUL分隔输出的行。没有指定该选项时,使用NEWLINE来分隔行。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
使用示例
# basename /usr/bin/sort sort
# basename include/stdio.h .h stdio
# basename -s .h include/stdio.h stdio
# basename -a any/str1 any/str2 str1 str2
相关手册
dirname(1), readlink(1)
在线完整手册:http://www.gnu.org/software/coreutils/basename
查看info手册:info ‘(coreutils) basename invocation’
参考文献

man 1 basename, verison GNU coreutils 8.26

更新日志

06/02/2018 创建文章[……]

READ MORE

「cat(1)」- 读取文件内容,并在标准输出上打印

常用命令
向文件中写入内容:

cat <<EOF > foo.html
echo $var
EOF

cat <<\EOF > foo.html
echo $var
EOF

# 补充说明
# 1)EOF 将内容写入文件 foo.html 中,其中 $var 将 Shell 解析;
# 2)\EOF 使得 $var 不被 Shell 解析,免去对 $ 符号的转义;

语法格式

cat [OPTION]… [FILE]…

如果未指定 FILE、或者 FILE 为 -,则从标准输入中读取。
命令行选项
打印行号
-n, –number 给所有的输出行前加上行号。
-b, –number-nonblank 只给非空行编号,而不会在非空白行前添加行号。该选项会重写-n。
-s, –squeeze-blank 多个连续的空行,合并成一个输出。
打印特殊字符
-A, –show-all 等价于-vET。
-e 等价于-vE
-t 等价于-vT。
-v, –show-nonprinting 除LFD和TAB外,使用’^’表示法,显示控制字符。使用’M-‘来表示高位的字符。
-E, –show-ends 在行尾部显示$符号。
-T, –show-tabs 将TAB显示为^I。
其他选项
-u (已忽略)
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
简单示例
输出文件f、标准输入、文件g中的内容:

# cat f – g

显示标准输入的内容:

# cat

我们要在日志文件中使用grep命令检索文本,但是这个文件里包含了一些二进制的内容,导致grep将文件视为了二进制文件,显示的结果就是Binary file XXXXX matches,而不是我们期望的显示匹配的行。要解决这个问题,可以用下面的命令:

# cat -v filename.log | grep ‘abc’

将不可打印的字符“转码”显示,然后再进行grep搜索。
在cat *显示多个文件的内容时,如果如果想打印文件名,则可以搭配more命令:

# more * | cat

相关手册
tac(1)
参考文献
man 1 cat, version GNU coreutils 8.26 Full documentation at: http://www.gnu.org/software/coreu[……]

READ MORE

「chcon(1)」-

修改文件的安全上下文
命令语法格式
chcon [OPTION]… CONTEXT FILE… chcon [OPTION]… [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE… chcon [OPTION]… –reference=RFILE FILE…
命令描述
将FILE的上下文设置为CONTEXT。使用–reference,可以将每个文件FILE的安全上下文更改为rfile的安全上下文。
命令支持的选项及含义
长选项的参数,短选项也必须使用。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
–dereference 不要作用于符号链接,而是作用于它们所指向的对象。这是默认值行为。
-h, –no-dereference 作用于符号连接,而不是他们指向的文件。
-u, –user=USER 在目标安全上下文中设置用户USER。
-r, –role=ROLE 在目标上下文中设置角色ROLE。
-t, –type=TYPE 在目标上下文中设置类型TYPE。
-l, –range=RANGE 在目标上下文中设置范围RANGE。
–no-preserve-root 不要特殊对待“/”。这是默认的。
–preserve-root 当与–recursive使用时,拒绝在根目录上进行递归操作。参考文献
–reference=RFILE 使用RFILE的安全上下文,而不是指定上下文值。参考文献
-R, –recursive 递归操作文件或者目录。
-v, –verbose 为每个处理的文件输出一个诊断信息。
当-R选项也指定时,以下选项修改如何遍历层次结构。如果指定了多个,则只有最后一个生效:
-H 如果命令行选项是一个指向目录的符号链接,遍历它。参考文献
-L 遍历所有遇到的指向目录的符号链接。参考文献
-P 不遍历任何符号链接。这个是默认的。参考文献
相关手册
完整在线手册:http://www.gnu.org/software/coreutils/chcon
查看info手册:info ‘(coreutils) chcon invocation’
参考文献

man 1 chcon, version GNU coreutils 8.26

更新日志

05/30/2018 创建文章[……]

READ MORE

「chgrp(1)」-

修改文件的所属组
命令语法格式
chgrp [OPTION]… GROUP FILE… chgrp [OPTION]… –reference=RFILE FILE…
命令描述
将文件FILE的所属组修改为GROUP。GROUP既可以是组名,也可以是组ID,或者是某个文件的组(使用–reference选项时)。使用–reference时,可以将文件FILE的所属组修改为与RFILE相同的组。
如果GROUP是一个数值型的组ID,可以添加前导的加号(“+”)来将其与组名进行区别。参考文献如何区分名与ID。
用户是否可以该文件所属组更改为任意一个其他组依赖于系统,或者更便携的做法是限制为设置成用户所属的组。
命令支持的选项及含义
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
-v, –verbose 为每个被处理的文件FILE输出一个诊断信息。如果在没有使用lchown(2)系统调用的系统上进行递归遍历时遇到符号链接,并且–no-dereference已生效,则chgrp会发出一条诊断消息来说明符号链接及其引用对象都未被更改。
-c, –changes 类似于-v选项,但是只有文件的所有组实际发生变化的时候才产生日志。如果将文件FILE从staff组修改为staff组,前后没有发生实际的变化,就不会有诊断信息产生。
-f, –silent, –quiet 在文件所属组无法修改时,不产生错误信息。
–dereference 不要去修改符号链接所属的组,而是修改符号链接所指向的文件的组。这是默认的行为。
-h, –no-dereference 修改符号链接所属的组,而不是修改符号链接所指向的文件的组。这种模式依赖于lchown(2)系统调用。在不提供lchown(2)系统调用的系统上,当命令行中指定的文件是符号链接时,chgrp会失败。默认情况下,对递归遍历期间遇到的符号链接不产生诊断信息,但请参阅–verbose选项。
–no-preserve-root 不对根目录进行保护,这是默认行为。与–preserve-root选项的作用相反。参考特别对待根目录。
–preserve-root 根目录保护。尝试在根目录(/)上递归更改时会失败。没有–recursive选项时,该选项不会有效果。参考特别对待根目录。
–reference=RFILE 将每个文件的组更改为与RFILE相同的组。如果RFILE是符号链接,则会使用符号连接所引用的文件的组。
-R, –recursive 递归修改目录及子目录中所有对象的所属组。
当使用了-R选项时,下面的选项修改如何[……]

READ MORE

「chmod(1)」-

修改文件的访问权限
命令语法格式
chmod [OPTION]… MODE[,MODE]… FILE…
chmod [OPTION]… OCTAL-MODE FILE…
chmod [OPTION]… –reference=RFILE FILE…
命令描述
命令chmod根据给出的MODE修改文件FILE的权限位。
为了方便表述问题并遵守习惯,这里将英文的“MODE”翻译为“权限”一词。“UID”表示”用户ID“。“GID”表示“组ID”。
只有有效UID与文件的UID匹配的进程,或具有适当权限的进程,才允许更改文件的权限位。
如果使用,MODE指定新的文件权限位。有关详细信息,请参阅「文件权限」一节。如果你真的想要权限有一个前导的’-‘,你应该使用–首先,例如chmod — -w file。通常情况下,使用chmod a-w FILE更可取,而chmod -w FILE(没有–)会表示它的行为与chmod a-w FILE的行为不同。
关于MODE参数
参数MODE指定了对文件权限的操作(添加、删除、修改)。与命令选项相比,参数MODE的使用更重要一些,因此才放在前面。
参数MODE既可以是「符号权限」,也可以是「数字权限」。
符号权限
对于符号权限,它的格式是[ugoa…][[-+=][perms…]…],即分为三部分。
字母集“ugoa”决定了哪些用户的访问权限会被修改:“u”表示文件所属的用户;“g”表示文件所属组中的用户;“o”表示其他用户;“a”表示所有用户。如果没有指定,则假设为“a”,但是,在UMASK中设置的比特不会受到影响。
操作符“-+=”用于控制权限的移除、添加、修改:“+”表示向权限位添加某个权限;“-”表示移除权限位上的某个权限;“=”表示将权限位设置为指定的权限,但是不会影响setuid和setgid位。
其中的“perms”可以是字母集“rwxXst”中的零个或多个,或者字母集“ugo”中的一个。可以同时指定多个符号权限,但是要用逗号分隔,比如chmod a-x,o+x /tmp/file。
字母集“rwxXst”是用于指定用户的权限位:读(r);写(w);执行或目录搜索(x);只有FILE是目录或者某些用户已经具有可执行权限时,才会赋予执行/搜索(X);在执行时设置UID或者GID(s);限制删除标识或者粘滞位(t)。除了这些字母集中的一个或多个之外,还可以精确地指定字母ugo中的一个:把文件所有者的权限(u)授予用户;将文件所属组的权限(g)授予用户;将其他用户的权限(o)授予用户。比如chmod o+u tmp,将文件所属用户的拥有的权限(u)授予[……]

READ MORE

「chown(1)」-

修改文件的所有者和所属组
命令语法格式
chown [OPTION]… [OWNER][:[GROUP]] FILE… chown [OPTION]… –reference=RFILE FILE…
命令描述
chown会将每个给出文件FILE的用户和组的所有权更改为新所有者,或修改为与现有文件RFILE相同的用户和组。
对于[OWNER][:[GROUP]]参数

OWNER

如果仅给出OWNER(用户名或数字类型的用户ID),则文件的所有者将会更改为OWNER,但是不会更改文件的组。

OWNER:GROUP

如果OWNER后面跟着一个冒号和一个组GROUP(组名称或数字类型的组ID),并且它们之间没有空格,则文件的所有者和所属组组都会进行更改。

OWNER:

如果冒号后面没有组GROUP,那么该OWNER将成为文件的新的所有者,并且OWNER的登录组将成为文件的新组。

:GROUP

如果没有OWNER,只有一个冒号和一个组GROUP,那么只会将文件的组修改为GROUP,不会修改文件的所有者。这种情况下,chown的功能与chgrp的功能相同。

:

如果只指定了一个冒号,没有OWNER和GROUP,则什么都不做。

如果组名是一个数字,可以使用前导的加号(+)来标识该数字实际上是一个组名,而不是一个数字类型的组ID。参考区分组名与组ID。
一些旧的脚本可能仍然使用’.’代替’:’分隔符,但POSIX 1003.1-2001(参阅标准一致性)不要求对此进行支持,而为了向后兼容,GNU实现的chown支持’.’,只要不会产生歧义的结果。新脚本应该避免使用’.’,因为它不具有可移植性,并且如果OWNER或GROUP中包含’.’,则它会产生不良的结果。
用户能否将文件修改为任意的组取决于系统,或者限制为设置用户所属的组的更可移植的行为。
chown命令有时会清除SETUID或SETGID权限位。此行为取决于底层chown(2)系统调用的策略和功能,这可能会使chown(1)命令对系统相关的文件模式修改失控。例如,当具有适当权限的用户调用时,chown命令可能不会影响这些位,或者某个权限位表示可执行权限以外的某些功能时(例如,强制锁定)。如有疑问,请检查底层系统行为。
命令支持的选项及含义
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
-h, –no-dereference 作用于符号链接,而非符号链接指向的文件。[……]

READ MORE

「chroot(1)」-

将指定的目录作为根目录来运行程序
命令行语法格式
chroot [OPTION] NEWROOT [COMMAND [ARG]…]
chroot OPTION
命令描述
命令chroot可以指定一个目录来做为程序运行的根目录。NEWROOT是新的根目录,在NEWROOT中运行COMMAND。在很多系统上,只有超级用户才能做到这一点。
通常,程序运行时是从目录结构的根目录(/)开始查找文件名及依赖的库文件。chroot将根目录更改为NEWROOT目录(目录必须存在),然后将工作目录更改为根目录(/),最后运行带有可选参数的命令(COMMAND)。如果没有指定COMMAND,则默认的COMMAND是”${SHELL} -i” (通常是:’/bin/sh -i’)。COMMAND不能是内建程序。
命令行选项及含义
将指定的目录作为根目录来运行程序,也就是改变了程序运行时加载的各种库、目录等环境
通常,命令运行时,是从根目录开始查找文件名,即/。chroot将根目录更改为NEWROOT(必须存在),然后将工作目录更改为/,并最终使用可选参数运行命令。如果未指定命令,则默认值为SHELL环境变量的值或/bin/sh(如果未设置),则使用-i选项调用。命令不能是特殊的内置实用程序(请参阅特殊内置实用程序)。
–userspec=USER:GROUP 默认情况下,使用了哪个用户身份运行chroot,就会使用哪个用户身份运行COMMAND。该此选项可以指定运行COMMAND的用户身份(用户和组)。如果仅仅指定了USER,则会根据系统中USER对应的组来设置COMMAND运行时的组(GROUP),除非使用–groups选项进行覆盖。
–groups=G_LIST 使用此选项覆盖新进程使用的补充组。参数G_LIST是使用逗号分隔的组名或者GID。使用–groups=”禁用–userspec选项中隐含的补充组查找。
–skip-chdir 使用该选项后,进入chroot之后,不会将工作目录修改为/。只有当NEWROOT是旧的根目录时才允许使用此选项,因此与–groups和–userspec选项一起使用来保留以前的工作目录时非常有用。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
注意事项
–userspec与–groups会在chroot的外部和内部同时进行查找,如果查找成功,内部的查找结果的优先级更高。
如果用户名或者组名为数字时,可以使用前导加号(+)来避免被解析成组ID数值。参考区别组名与组ID。
实际用途
你可能很少会用到这个命令,也许你还没理解这个命令是干什么的,你可以把它想象成一个[……]

READ MORE

「cksum(1)」-

计算文件校验和并计算文件字节数
命令语法格式
cksum [FILE]…
cksum [OPTION]
命令描述
cksum为每个给定的文件FIEL计算循环冗余校验(CRC)校验和,或者如果没有给出文件FIEL,或者FILE为’-‘,则从标准输入读取数据。
除非没有给出参数(从标准输入中读取),否则cksum会为每个文件打印CRC校验和以及文件中的字节数和文件名。
cksum通常用于计算CRC校验和。通过比较接收文件的CRC校验和和原始文件的校验和来确保通过不可靠方式传输的文件没有被破坏。
CRC算法由POSIX标准规定。它与BSD或System V的sum算法不兼容;它更强大。
命令支持的选项及含义
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
相关手册
查看在线手册:http://www.gnu.org/software/coreutils/cksum
查看info手册:info ‘(coreutils) cksum invocation’
参考文献

man 1 cksum, version GNU coreutils 8.26
Wikipedia/Cyclic redundancy check

更新日志

06/10/2018 创建文章[……]

READ MORE

「comm(1)」-

逐行比较两个已排序文件
命令行语法格式
comm [OPTION]… FILE1 FILE2
命令描述
逐行比较两个内容已经排序的文件,输出两个文件中都有的行和独有的行。OPTION是命令行选项,下面会介绍。FILE1、FILE2要比较的文件,如果为`-‘表示文件为标准输入读取,但是FILE1/FILE2不能同时为`-‘。
对于命令comm FILE1 FILE2,在没有指定OPTION的情况下,comm命令会输出三列,输出形式如下:

1

2

3

4

5

第1列,FILE1中独有的行。第2列,FILE2中独有的行。第3列,两个文件中都存在的行。列由单个TAB字符分隔。选项-1、-2、-3会禁止打印相应的列,详见选项介绍部分。
命令支持的选项及含义
-1 不打印第一列。即不打印只在FILE1中存在的行。
-2 不打印第二列。即不打印只在FILE2中存在的行。
-3 不打印第三列。即不打印只在FILE1、FILE2中都存在的行。
–checkorder 检查文件是否已经排序。如果给出–check-order选项,未排序的输入将导致错误消息。
–nocheck-order 不检查文件是否排序。如果给出选项–nocheck-order,则未分类的输入永远不会导致错误消息。
–output-delimiter=STR 设置输出列之间的分隔字符为STR。STR不能为空。默认列之间使用TAB进行分隔。
–total 在最后输出一个包含摘要信息的摘要行。该选项是一个GNU扩展选项,在其他的comm实现中,可能没有这个选项。
与常规输出类似,第一列包含只在FILE1中唯一行的总数,第二列包含只在FILE2中唯一行的总数,第三列包含两个文件中共有行的总数,然后后面跟着“total”在附加的第四栏中。
-z, –zero-terminated 使用零字节而不是换行符(ASCII LF)来分隔项目。即,将输入视为由ASCII NUL分隔的项目,并用ASCII NUL终止输出项目。
这个选项可以和’perl -0’或者’find -print0’和’xargs -0’结合使用,它们可以可靠地处理任意文件名(甚至包含空格或其他特殊字符)。
–help 显示帮助信息并退出。
–version 显示版本信息并退出。
文件排序
在使用comm之前,必须使用LC_COLLATE语言环境指定的排序序列对输入文件进行排序。如果输入文件以非换行符结尾,则会自动附加换行符。没有选项的sort(1)命令可以生成适用于comm的输入[……]

READ MORE

「cp(1)」-

复制文件或者目录
命令行语法格式
cp [OPTION]… [-T] SOURCE DEST
cp [OPTION]… SOURCE… DIRECTORY
cp [OPTION]… -t DIRECTORY SOURCE…
将SOURCE复制到DEST,或者多个SOURCE到DIRECTORY。拷贝的副本完全独立于原始文件。既可以将一个文件复制为另一个,也可以将任意数量的文件复制到指定的目录中。
命令描述
如果给出了两个文件,则将第一个复制到第二个。
如果给出–target-directory(-t)选项,或者如果最后一个参数是一个目录并且没有给出–no-target-directory(-T)选项,则cp会将每个源文件复制到指定的目录,文件名为原来的文件名。
通常,文件如何读入就如何写出。对于例外情况,参考下面的–sparse选项。
默认情况下,cp不会复制目录。但是,-R,-a和-r选项会导致cp通过递归到源目录,然后将文件复制到相应的目标目录来实现递归复制。
当从符号链接复制时,通常只在未递归复制或使用–link(-l)时,cp才遵循链接所指向的对象。可以使用–archive(-a),-d,–dereference(-L),–no-dereference(-P),-H选项覆盖此默认值。如果指定了这些选项中的一个以上,则最后一个选项将默认覆盖其他选项。
复制到符号链接时,cp仅在符号链接指向已经存在的文件时才会跟随链接指向的文件。但是,当复制到“悬空的”符号链接时,默认情况下cp会拒绝,并且会因诊断而失败,因为该操作本质上是危险的。这种行为与历史惯例和POSIX相反。设置POSIXLY_CORRECT来使cp尝试创建悬挂目标符号链接的目标,尽管存在可能的风险。另外,当类似–backup或–link的选项在复制之前将会重命名或删除目标时,cp将重命名或删除符号链接,而不是它指向的文件。
默认情况下,只有在不进行递归复制时,cp才复制特殊文件的内容。这个默认值可以用–copy-contents选项覆盖。
cp通常拒绝将文件复制到自身上,但有以下例外:如果–force –backup指定的SOURCE和DEST相同,并且是常规文件,则cp会将备份文件(常规或编号)作为 以常规方式指定(请参阅备份选项)。如果只是想在对现有文件进行更改之前对其进行备份,这个选项非常有用。
命令支持的选项及含义
长选项的必须参数,对于短选项也是必须的。
–copy-contents 使用该选项时,如果是递归复制,对于特殊文件(例如,FIFO和设备文件),直接复制内容,而不复制设备文件。使用此选项通常是一个错误,因为[……]

READ MORE

「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[……]

READ MORE

「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[……]

READ MORE

「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[……]

READ MORE

「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[……]

READ MORE

「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[……]

READ MORE

「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 创建文章[……]

READ MORE

「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 创建文章[……]

READ MORE

「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 创建文章[……]

READ MORE

「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[……]

READ MORE

「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

更新日志[……]

READ MORE

「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 以空环境开始,忽略从现有环[……]

READ MORE

「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)是个什么东西之前,请先记住一句话:制表符是一个字符,只是在显示的时候会[……]

READ MORE

「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。
只有第一对’\(…\)’与返回值有关;其他仅对正则表达式运算符进行分组才有意义。
在正则表达式中,\+,\?和\|是分别匹配一个或多个、零个或一个、分离的或运[……]

READ MORE

「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 创建文章[……]

READ MORE

「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 创建文章[……]

READ MORE

「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 创建文章,但是没有整理[……]

READ MORE

「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[……]

READ MORE