Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
Loading...
CHKEY(1)
CHKEY(1)
FreeBSD General Commands Manual
CHKEY(1)
chkey —
更改您的加密密钥
chkey
chkey 实用程序提示用户输入登录密码,并使用它为用户加密一个新的加密密钥,以便存储在 publickey(5) 数据库中。
keylogin(1), publickey(5), keyserv(8), newkey(8)
July 5, 1989
FreeBSD 13.1-RELEASE
APPLY(1)
APPLY(1)
FreeBSD General Commands Manual
APPLY(1)
apply —
将命令应用于一组参数
apply [-a c] [-d] [-#] command argument ...
apply 实用程序依次对每个参数 argument 运行 command 命令。
command 中 “%d” 形式的字符序列,其中 ‘d’ 是从 1 到 9 的数字,被后面的第 d 个未使用的 argument 替换。 在这种情况下,每次执行 command 都会丢弃最大位数的参数。
选项如下:
通常,论点是单独提出的;可选数字 -# 指定要传递给 command 的参数数量。 如果数字为零,则对每个 argument 运行一次 command ,不带参数。
如果 command 中出现任何 “%d” 序列,则忽略 -# 选项。
c
使用 -a 选项可以更改使用字符 ‘%’ 作为魔术字符。
显示本应执行但不实际执行的命令。
以下环境变量影响 apply 的执行:
要使用的 shell 的路径名。 如果未定义此变量,则使用 Bourne shell。
/bin/sh
默认 shell
类似于 ls(1);
比较 `a' 文件和 `b' 文件;
运行 who(1) 5 次;
将当前目录中的所有文件链接到目录 /usr/joe 。
apply 命令出现在 4.2BSD 中。
Rob Pike
command 中的 shell 元字符可能会产生奇怪的效果;最好将复杂的命令用单引号 ('') 括起来。
apply 实用程序无法识别多字节字符。
December 13, 2006
FreeBSD 13.1-RELEASE
BSDCAT(1)
BSDCAT(1)
FreeBSD General Commands Manual
BSDCAT(1)
bsdcat —
扩展文件到标准输出
bsdcat [options] [files]
bsdcat 将文件扩展为标准输出。
bsdcat 通常将文件名作为参数或在管道中使用时读取标准输入。在这两种情况下,它都将解压缩的数据写入标准输出。
解压文件:
bsdcat example.txt.gz > example.txt
在管道中解压缩标准输入:
cat example.txt.gz | bsdcat > example.txt
这两个示例都实现了相同的结果——通过重定向输出来解压缩文件。
bzcat(1) 、 uncompress(1) 、 xzcat(1) 、 zcat(1) 、 libarchive-formats(5)
March 1, 2014
FreeBSD 13.1-RELEASE
ENIGMA(1)
ENIGMA(1)
FreeBSD General Commands Manual
ENIGMA(1)
enigma, crypt —
非常简单的文件加密
enigma [-s] [-k] [password] crypt [-s] [-k] [password]
enigma 实用程序,也称为 crypt 是一个 非常 简单的加密程序,在 “secret-key” 基础上工作。 它作为过滤器运行,即,它加密或解密来自标准输入的数据流,并将结果写入标准输出。 由于它的操作是完全对称的,通过引擎再次输入加密数据流(使用相同的密钥)将对其进行解密。
有几种方法可以为程序提供密钥。 默认情况下,程序会使用 getpass(3) 在控制终端上提示用户输入密钥。 这是提供它的唯一安全方式。
或者,可以在启动程序时将密钥作为唯一的命令行参数 password 提供。 显然,通过这种方式,其他运行 ps(1) 的用户很容易发现密钥。 作为另一种选择,可以为 enigma 提供选项 -k, 它将从环境变量 CrYpTkEy 中获取密钥。 虽然乍一看这似乎比前一个选项更安全,但实际上并非如此,因为环境变量也可以使用 ps(1) 检查。 因此,提供此选项主要是为了与 enigma 的其他实现兼容。
当指定选项 -s 时, enigma 会修改加密引擎,使其更安全一些,但与其他实现不兼容。
enigma 的密码价值相当小。 此处提供此程序只是为了与也提供实现的其他操作系统兼容(通常在此处称为 crypt(1) )。 对于真正的加密,请参阅 openssl(1) 或 gpg(1) (security/gnupg1) 。
用于在给出选项 -k 时获取密钥
man enigma | enigma > encrypted Enter key: (XXX — key not echoed)
这将创建此手册页的加密形式,并将其存储在 encrypted 的文件中。
enigma XXX < encrypted
这将在终端上显示先前创建的文件。
gpg(1), openssl(1), ps(1), getpass(3)
crypt 的实现在 UNIX 操作系统中非常普遍。- 此实现取自公共领域的 Cryptbreakers Workbench 。
May 8, 2018
FreeBSD 13.1-RELEASE
column [-tx] [-c columns] [-s sep] [file ...]
column 实用程序将其输入格式化为多个列。行在列之前填充。 输入来 file 操作数,或者默认情况下来自标准输入。 空行被忽略。
选项如下:
输出格式化为显示 columns 宽。
为 -t 选项指定一组用于分隔列的字符。
确定输入包含的列数并创建一个表。 默认情况下,列使用空格或使用 -s 选项提供的字符分隔。 对于漂亮的打印显示很有用。
在填充行之前填充列。
COLUMNS 、 LANG 、 LC_ALL 和 LC_CTYPE 环境变量会影响 column 的执行,如 environ(7) 中所述。
The column utility exits 0 on success, and >0 if an error occurs.
(printf "PERM LINKS OWNER GROUP SIZE MONTH DAY " ; \
printf "HH:MM/YEAR NAME\n" ; \
ls -l | sed 1d) | column -t
colrm(1), ls(1), paste(1), sort(1)
column 命令出现在 4.3BSD-Reno 中。
输入行的长度限制为 LINE_MAX (2048) 个字节。
July 29, 2004
FreeBSD 13.1-RELEASE
btsockstat [-nrh] [-M core] [-p protocol]
btsockstat 实用程序象征性地显示各种蓝牙套接字相关数据结构的内容。 输出格式很少,具体取决于所提供信息的选项。 btsockstat 实用程序会将结果打印到标准输出,并将错误消息打印到标准错误。
选项如下:
显示使用信息并退出。
-M core
从指定的核心而不是默认的 /dev/kmem 中提取与名称列表关联的值。
将蓝牙地址显示为数字。 通常, btsockstat 会尝试解析蓝牙地址,并象征性地显示它们。
-p protocol
显示每个指定协议的活动套接字(协议控制块)列表。 支持的协议有: hci_raw 、 l2cap_raw 、 l2cap、 rfcomm 和 rfcomm_s 。
显示指定协议的活动路由条目(如果有)列表。
The btsockstat utility exits 0 on success, and >0 if an error occurs.
ng_btsocket(4)
Maksim Yevmenkin <[email protected]>
最有可能的。如果发现请报告。
October 12, 2003
FreeBSD 13.1-RELEASE
fsync file ...
fsync 实用程序将命令行上命名的所有文件的所有修改数据和元数据写入永久存储设备。
fsync 实用程序使用 fsync(2) 函数调用。
如果发生错误, fsync 实用程序会继续处理下一个文件,并退出 >0。否则,它退出 0。
fsync(2), sync(2), syncer(4), halt(8), reboot(8)
fsync 命令最早出现在 FreeBSD 4.3 中。
January 25, 2005
FreeBSD 13.1-RELEASE
COLRM(1)
COLRM(1)
FreeBSD General Commands Manual
COLRM(1)
colrm —
从文件中删除列
colrm [start [stop]]
colrm 实用程序从文件的行中删除选定的列。 列定义为一行中的单个字符。 从标准输入读取输入。 输出被写入标准输出。
如果只指定了 start 列,则将写入编号小于 start 列的列。 如果同时指定了 start 列和 stop 列,则将写入编号小于 start 列或大于 stop 列的列。 列编号从一开始,而不是零。
制表符将列计数增加到下一个八的倍数。 退格字符将列计数减一。
LANG 、 LC_ALL 和 LC_CTYPE 环境变量会影响 colrm 的执行,如 environ(7) 中所述。
The colrm utility exits 0 on success, and >0 if an error occurs.
显示低于 3 (c) 和高于 5 (e) 的列:
$ echo -e "abcdefgh\n12345678" | colrm 3 5 abfgh 12678
允许指定大于文件中列数的起始列并显示所有列:
$ echo "abcdefgh" | colrm 100 abcdefgh
使用 1 作为开始列将不显示任何内容:
$ echo "abcdefgh" | colrm 1
awk(1), column(1), cut(1), paste(1)
colrm 实用程序首先出现在 1BSD 中。
Jeff Schriebman 于 1974 年 11 月编写了 colrm 的原始版本。
June 23, 2020
FreeBSD 13.1-RELEASE
ENIGMA(1)
ENIGMA(1)
FreeBSD General Commands Manual
ENIGMA(1)
enigma, crypt —
非常简单的文件加密
enigma [-s] [-k] [password] crypt [-s] [-k] [password]
enigma 实用程序,也称为 crypt 是一个 非常 简单的加密程序,在 “secret-key” 基础上工作。 它作为过滤器运行,即,它加密或解密来自标准输入的数据流,并将结果写入标准输出。 由于它的操作是完全对称的,通过引擎再次输入加密数据流(使用相同的密钥)将对其进行解密。
有几种方法可以为程序提供密钥。 默认情况下,程序会使用 getpass(3) 在控制终端上提示用户输入密钥。 这是提供它的唯一安全方式。
或者,可以在启动程序时将密钥作为唯一的命令行参数 password 提供。 显然,通过这种方式,其他运行 ps(1) 的用户很容易发现密钥。 作为另一种选择,可以为 enigma 提供选项 -k, 它将从环境变量 CrYpTkEy 中获取密钥。 虽然乍一看这似乎比前一个选项更安全,但实际上并非如此,因为环境变量也可以使用 ps(1) 检查。 因此,提供此选项主要是为了与 enigma 的其他实现兼容。
当指定选项 -s 时, enigma 会修改加密引擎,使其更安全一些,但与其他实现不兼容。
enigma 的密码价值相当小。 此处提供此程序只是为了与也提供实现的其他操作系统兼容(通常在此处称为 crypt(1) )。 对于真正的加密,请参阅 openssl(1) 或 gpg(1) (security/gnupg1) 。
用于在给出选项 -k 时获取密钥
man enigma | enigma > encrypted Enter key: (XXX — key not echoed)
这将创建此手册页的加密形式,并将其存储在 encrypted 的文件中。
enigma XXX < encrypted
这将在终端上显示先前创建的文件。
gpg(1), openssl(1), ps(1), getpass(3)
crypt 的实现在 UNIX 操作系统中非常普遍。- 此实现取自公共领域的 Cryptbreakers Workbench 。
May 8, 2018
FreeBSD 13.1-RELEASE
GROUPS(1)
GROUPS(1)
FreeBSD General Commands Manual
GROUPS(1)
groups —
show group memberships
groups [user]
The groups- 实用程序已被 id(1) 实用程序淘汰,相当于 “id -Gn [user]” 。 建议将命令 “id -p” 用于正常的交互使用。
groups 实用程序显示您(或可选指定的用户)所属的组。
The groups utility exits 0 on success, and >0 if an error occurs.
显示 root 用户所属的组:
$ groups root wheel operator
id(1)
June 6, 1993
FreeBSD 13.1-RELEASE
BASENAME(1)
BASENAME(1)
FreeBSD General Commands Manual
BASENAME(1)
basename, dirname —
返回路径名的文件名或目录部分
basename string [suffix] basename [-a] [-s suffix] string [...] dirname string [...]
basename 实用程序删除任何以 string 中存在的最后一个斜杠 ‘/’ 字符结尾的前缀(在第一次去除尾随斜杠之后)和 suffix 如果给定的话。 如果 suffix 与 string 中的其余字符相同,则不会去除后缀。 结果文件名被写入标准输出。 不存在的后缀将被忽略。 如果指定了 -a ,则每个参数都被视为一个 string ,就好像只使用一个参数调用了 basename 。 如果指定了 -s ,则将 suffix 作为其参数,并将所有其他参数视为 string 。
dirname 实用程序删除文件名部分,从最后一个斜杠 ‘/’ 字符开始到 string 的末尾(在第一次去除尾部斜杠之后),并将结果写入标准输出。
The basename and dirname utilities exit 0 on success, and >0 if an error occurs.
以下行将 shell 变量 FOO 设置为 /usr/bin 。
FOO=`dirname /usr/bin/trail`
csh(1), sh(1), basename(3), dirname(3)
basename 和 dirname 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容。
basename 和 dirname 实用程序首先出现在 4.4BSD 中。
May 26, 2020
FreeBSD 13.1-RELEASE
CKSUM(1)
CKSUM(1)
FreeBSD General Commands Manual
CKSUM(1)
cksum, sum —
显示文件校验和和块计数
cksum [-o 1 | 2 | 3] [file ...] sum [file ...]
cksum 实用程序将每个输入文件的三个空格分隔字段写入标准输出。 这些字段是校验和 CRC 、文件中的八位字节总数和文件名。 如果未指定文件名,则使用标准输入并且不写入文件名。
sum 实用程序与 cksum 实用程序相同,只是它默认使用历史算法 1,如下所述。 它只是为了兼容性而提供的。
选项如下:
使用历史算法而不是(高级)默认算法。
算法 1 是历史 BSD 系统用作 sum(1) 算法和历史 AT&T System V UNIX 系统在使用 -r 选项时用作 sum(1) 算法的算法。 这是一个 16 位的校验和,每次加法前都有一个右旋转;溢出被丢弃。
算法 2 是历史上 AT&T System V UNIX 系统用作默认 sum(1) 算法的算法。 这是一个 32 位校验和,定义如下:
s = sum of all bytes; r = s % 2^16 + (s % 2^32) / 2^16; cksum = (r % 2^16) + r / 2^16;
算法 3 就是通常所说的 ‘32 位 CRC’ 算法。 这是一个 32 位校验和。
算法 1 和 2 都向标准输出写入与默认算法相同的字段,只是文件大小(以字节为单位)被替换为文件的大小(以块为单位)。 由于历史原因,算法 1 的块大小为 1024,算法 2 的块大小为 512。 部分区块被四舍五入。
使用的默认 CRC 基于网络标准 ISO 8802-3: 1989 中用于 CRC 错误检查的多项式。 CRC 校验和编码由生成多项式定义:
G(x) = x^32 + x^26 + x^23 + x^22 + x^16 + x^12 + x^11 + x^10 + x^8 + x^7 + x^5 + x^4 + x^2 + x + 1
在数学上,与给定文件对应的 CRC 值由以下过程定义:
要评估的 n 位被认为是 n-1 次的 mod 2 多项式 M(x) 的系数。 这 n 位是文件中的位,最高有效位是文件第一个八位字节的最高有效位,最后一位是最后一个八位字节的最低有效位,用零位(如果需要)填充以获得整数个八位位组,后跟一个或多个八位位组,将文件的长度表示为二进制值,最低有效八位位组在前。 使用能够表示该整数的最少八位字节数。
M(x) 乘以 x^32(即左移 32 位)并使用 mod 2 除法除以 G(x),产生度数 <= 31 的余数 R(x)。
R(x) 的系数被认为是一个 32 位序列。
对位序列进行补码,结果为 CRC。
The cksum and sum utilities exit 0 on success, and >0 if an error occurs.
md5(1)
默认计算与以下 ACM 文章中的伪代码中给出的计算相同。 Dilip V. Sarwate, Computation of Cyclic Redundancy Checks Via Table Lookup, Communications of the Tn ACM, August 1988.
cksum 实用程序应符合 IEEE Std 1003.2-1992 (“POSIX.2”) 。
cksum 实用程序出现在 4.4BSD 中。
April 28, 1995
FreeBSD 13.1-RELEASE
addr2line [-a | --addresses] [-b target | --target=target] [-e pathname | --exe=pathname] [-f | --functions] [-i | --inlines] [-j sectionname | --section=sectionname] [-p | --pretty-print] [-s | --basename] [-C | --demangle] [-H | --help] [-V | --version] [hexaddress...]
addr2line 实用程序将命令行参数 hexaddress 指定的程序地址转换为其相应的源文件名和行号。如果没有给 addr2line, 参数,它将从标准输入中读取这些地址。
由参数 hexaddress 指定的程序地址使用 strtoull(3) 接受的约定进行编码。
默认情况下, addr2line 将使用可执行文件 “a.out 。” -e 选项可用于指定不同的 ELF 对象。
addr2line 实用程序可识别以下选项:
行号信息之前显示地址。
此选项可被 addr2line 识别但被忽略。 支持它是为了与 GNU binutils 兼容。
使用参数 pathname 指定的 ELF 对象来转换地址。 如果未指定此选项, addr2line 将使用文件 “a.out 。”
除文件和行号信息外,还显示函数名称。
如果指定的地址属于内联函数,则还显示其调用者的行号信息,递归直到第一个非内联调用者。
由参数 hexaddress 指定的值将被视为在名为 sectionname 的部分中的偏移量。
以人类可读的方式在一行中显示行号信息。
-s | --basename
仅显示每个文件名的基本名称。
-C | --demangle
去除 C++ 名称。
打印帮助信息。
打印版本标识符并退出。
如果未指定 -f 选项, addr2line 将在单独的行上为每个指定的地址打印文件名和行号。
如果指定 -f 选项, addr2line 将打印一行,其中包含对应于程序地址 hexaddress 的函数名称,然后是包含文件名和行号的行。
如果指定 -p 选项, addr2line 将以人类可读的方式在一行上打印行号信息和函数名称。如果还指定 -i 选项, addr2line 将打印以 “(inlined by) 为前缀的调用函数信息。”
addr2line 实用程序使用 “FILENAME:LINENUMBER 格式打印文件名和行号。”
如果无法确定文件或函数名, addr2line 将在其位置打印一个问号。如果无法确定行号, addr2line 将在其位置打印一个零。
要将默认可执行文件 a.out 中的地址 080483c4 映射到源文件名和行号,请使用:
% addr2line 080483c4
要在可执行的 helloworld 中映射地址 080483c4,请使用:
% addr2line -e helloworld 080483c4
要让 addr2line 充当从其标准输入中读取地址的过滤器,请使用:
% addr2line
除了源文件和行号之外,要打印与地址对应的函数名称,请使用:
% addr2line -f 080483c4
The addr2line utility exits 0 on success, and >0 if an error occurs.
nm(1), elfdump(1), elfcopy(1), strtoull(3)
addr2line 实用程序由 Kai Wang 编写 <[email protected] 。>
November 30, 2015
FreeBSD 13.1-RELEASE
cut -b list [-n] [file ...] cut -c list [file ...] cut -f list [-w | -d delim] [-s] [file ...]
cut 实用程序从每个 file 中剪切出每一行的选定部分(由 list 指定)并将它们写入标准输出。 如果未指定 file 参数,或者文件参数是单个破折号 (‘-’) ,则从标准输入 cut 读取。 list 指定的项目可以是列位置,也可以是由特殊字符分隔的字段。 列和字段编号从 1 开始。
list 选项参数是逗号或空格分隔的一组递增数字和/或数字范围。 数字范围由一个数字、一个破折号 (‘-’) 和第二个数字组成,并选择从第一个数字到第二个数字的列或字段(包括首个数字)。 数字或数字范围前面可以有一个破折号,它选择从 1 到最后一个数字的所有列或字段。 数字或数字范围后面可以跟一个短划线,它选择从最后一个数字到行尾的所有列或字段。 数字和数字范围可以以任何顺序重复、重叠。 选择输入行中不存在的列或字段不是错误。
选项如下:
-b list
该 list 指定字节位置。
-c list
该 list 指定字符位置。
-d delim
使用 delim 作为字段分隔符而不是制表符。
-f list
该 list 指定字段,在输入中由字段分隔符分隔(请参阅 -d 选项)。 输出字段由一次出现的字段分隔符分隔。
不要拆分多字节字符。 仅当至少选择了一个字节时才会输出字符,并且在零个或多个未选择字节的前缀之后,选择构成字符的其余字节。
禁止没有字段分隔符的行。 除非指定,否则不带分隔符的行将不加修改地通过。
使用空格(空格和制表符)作为分隔符。 连续的空格和制表符算作一个字段分隔符。
LANG 、 LC_ALL 和 LC_CTYPE 环境变量影响 cut 的执行,如 environ(7) 中所述。
The cut utility exits 0 on success, and >0 if an error occurs.
从系统 passwd(5) 文件中提取用户的登录名和 shell 作为 “name:shell” 对:
cut -d : -f 1,7 /etc/passwd
显示当前登录用户的名称和登录时间:
who | cut -c 1-16,26-38
colrm(1), paste(1)
cut 实用程序符合 IEEE Std 1003.2-1992 (“POSIX.2”) 。
-w 标志是规范的扩展。
在 AT&T System III UNIX 中出现了 cut 命令。
August 3, 2017
FreeBSD 13.1-RELEASE
CAT(1)
CAT(1)
FreeBSD General Commands Manual
CAT(1)
cat —
连接并打印文件
cat [-belnstuv] [file ...]
cat 实用程序按顺序读取文件,并将它们写入标准输出。 file 操作数按命令行顺序处理。 如果 file 是单个破折号 (‘-’) 或不存在,则 cat 从标准输入读取。 如果 file 是 UNIX 域套接字,则 cat 连接到它,然后读取它直到 EOF 。 这补充了 inetd(8) 中可用的 UNIX 域绑定功能。
选项如下:
对非空白输出行编号,从 1 开始。
显示非打印字符(参见 -v 选项),并在每行的末尾显示一个美元符号 (‘$’) 。
在标准输出文件描述符上设置排他咨询锁。 这个锁是使用 fcntl(2) 和 F_SETLKW 命令设置的。 如果输出文件已经被锁定, cat 将阻塞直到获得锁定。
对输出行编号,从 1 开始。
挤压多个相邻的空行,导致输出为单行距。
显示非打印字符(参见 -v 选项),并将制表符显示为 ‘^I’ 。
禁用输出缓冲。
显示非打印字符,使其可见。 对于 control-X,控制字符打印为 ‘^X’ ;删除字符(八进制 0177)打印为 ‘^?’ 。 Non-ASCII 非 ASCII 字符(设置了高位)打印为 ‘M-’ (用于元),后跟低 7 位的字符。
The cat utility exits 0 on success, and >0 if an error occurs.
命令:
cat file1
将 file1 的内容打印到标准输出。
命令:
cat file1 file2 > file3
将依次将 file1 和 file2 的内容打印到文件 file3, 如果 file3 已经存在则截断它。 有关重定向的更多信息,请参见您的 shell(例如 sh(1) )的手册页。
命令:
cat file1 - file2 - file3
将打印 file1 的内容,打印从标准输入接收到的数据,直到收到 EOF (‘^D’) 字符,打印 file2 的内容,再次读取并输出标准输入的内容,最后输出 file3 。 请注意,如果标准输入引用了一个文件,那么命令行上的第二个破折号将不起作用,因为当 cat 遇到第一个 ‘-’ 操作数时,文件的全部内容已经被读取并打印了。
head(1), more(1), pr(1), sh(1), tail(1), vis(1), zcat(1), fcntl(2), setbuf(3) Rob Pike, UNIX Style, or cat -v Considered Harmful, USENIX Summer Conference Proceedings, 1983.
cat 实用程序符合 IEEE Std 1003.2-1992 (“POSIX.2”) 规范。
标志 [-belnstv] 是规范的扩展。
cat 实用程序出现在 Version 1 AT&T UNIX 中。 Dennis Ritchie 设计并编写了第一个手册页。 似乎是为了 cat 。
由于用于执行输出重定向的 shell 语言机制,命令 “cat file1 file2 > file1” 将导致 file1 中的原始数据被破坏!
当 -t 或 -v 选项生效时, cat 实用程序无法识别多字节字符。
January 29, 2013
FreeBSD 13.1-RELEASE
FUSER(1)
FUSER(1)
FreeBSD General Commands Manual
FUSER(1)
fuser —
列出打开一个或多个文件的所有进程的 ID
fuser [-cfkmu] [-M core] [-N system] [-s signal] file ...
fuser 实用程序将打开一个或多个命名文件的进程的 PID 写入标准输出。 对于块和字符特殊设备,列出了使用该设备上文件的所有进程。 如果文件被显式打开,则认为文件被进程打开,它是工作目录、根目录、jail 根目录、活动的可执行文本、内核跟踪文件或进程的控制终端。 如果指定了 -m 选项,则 fuser 实用程序还将查看映射文件。
可以使用以下选项:
将文件视为挂载点并报告文件系统中打开的任何文件。
报告必须仅用于命名文件。
向报告的进程发送信号,默认为 (SIGKILL) 。
core
从指定的核心而不是默认的 /dev/kmem 中提取与名称列表关联的值。
也可以搜索映射文件。
system
从指定系统中提取名称列表,而不是从默认系统中引导的内核映像。
signal
使用给定的信号名称而不是默认的 SIGKILL 。
将每个进程关联的用户名写入stderr。
写入 stderr 的以下符号将指示文件的使用方式:
a
该文件仅作为附加打开,指定了 (O_APPEND) 。
c
该文件是进程的当前工作目录。
d
该进程在写入此文件时绕过 fs 缓存,指定了 (O_DIRECT) 。
e
排他锁处于保持状态。
j
该文件是该进程的 jail 根目录。
m
该文件已映射。
r
该文件是进程的根目录。
s
共享锁被持有。
t
该文件是进程的内核跟踪文件。
w
该文件已打开以供写入。
x
该文件是进程的可执行文本。
y
该进程使用此文件作为其控制 tty。
The fuser utility exits 0 on success, and >0 if an error occurs.
命令 ‘fuser -fu .’ 将使用当前目录的进程的进程 ID 写入标准输出,并将这些进程如何使用目录的指示以及与使用该目录的进程关联的用户名写入 stderr。
fstat(1), ps(1), systat(1), iostat(8), pstat(8), vmstat(8)
fuser 实用程序应符合 IEEE Std 1003.1-2004 (“POSIX.1”) 。
fuser 实用程序出现在 FreeBSD 9.0 中。
fuser 实用程序和本手册页由 Stanislav Sedov <> 编写。
由于 fuser 会拍摄系统快照,因此它只在很短的时间内正确。 当通过 kvm(3) 接口工作时,报告将仅限于 fuser 实用程序知道的文件系统(目前只有 cd9660、devfs、nfs、ntfs、nwfs、udf、ufs 和 zfs)。
June 18, 2020
FreeBSD 13.1-RELEASE
ELFDUMP(1)
ELFDUMP(1)
FreeBSD General Commands Manual
ELFDUMP(1)
elfdump —
显示有关 ELF 文件的信息
elfdump -a | -E | -cdeGhinprs [-w file] file
elfdump 实用程序转储有关指定 ELF 文件的各种信息。
选项如下:
转储所有信息。
转储节标题。
转储动态符号。
转储 ELF 标头。
如果 file 是 ELF 文件则返回成功,否则返回失败。 此选项与其他选项互斥。
转储 GOT。
转储散列值。
转储动态解释器。
转储笔记部分。
转储程序头。
转储重定位。
转储符号表。
file
将输出写 file 而不是标准输出。
The elfdump utility exits 0 on success, and >0 if an error occurs.
以下是 elfdump 命令的典型用法示例:
elfdump -a -w output /bin/ls
objdump(1), readelf(1)
AT&T Unix 系统实验室, System V 应用程序二进制接口, .
elfdump 实用程序首次出现在 FreeBSD 5.0 中。
elfdump 实用程序 Jake Burkholder <> 编写。 本手册页由 David O'Brien <> 编写。
没有完全实现 ELF gABI。
November 5, 2018
FreeBSD 13.1-RELEASE
CMP(1)
CMP(1)
FreeBSD General Commands Manual
CMP(1)
cmp —
compare two files
cmp [-l | -s | -x] [-hz] file1 file2 [skip1 [skip2]]
cmp 实用程序比较任何类型的两个文件并将结果写入标准输出。默认情况下,如果文件相同,则 cmp 是静默的;如果它们不同,则报告出现第一个差异的字节和行号。
字节和行从一开始编号。
可以使用以下选项:
不要跟随符号链接。
, --verbose
打印每个差异的字节数(十进制)和不同的字节值(八进制)。
, --silent, --quiet
不打印不同文件;仅返回退出状态。
与 -l 类似,但以十六进制打印并使用零作为文件中第一个字节的索引。
对于常规文件,首先比较文件大小,如果不相等则比较失败。
可选参数 skip1 和 skip2 分别是从 file1 和 file2 开始的字节偏移量,比较将从这里开始。 默认情况下,偏移量是十进制的,但可以通过在其前面加上前导 “0x” 或 “0” 来表示为十六进制或八进制值。
cmp 实用程序以下列值之一退出:
0
这些文件是相同的。
1
文件不同;这包括一个文件与另一个文件的第一部分相同的情况。 在后一种情况下,如果未指定 -s 选项,则 cmp 将写入标准错误,即在较短的文件中已达到 EOF(在发现任何差异之前)。
>1
发生错误。
假设一个名为 example.txt 的文件具有以下内容:
a b c
将标准输入与 example.txt 进行比较:
$ echo -e "a\nb\nc" | cmp - example.txt
与上述相同,但在 stdin 的第三个字节中引入了更改。 显示字节数(十进制)和不同的字节(八进制):
$ echo -e "a\nR\nc" | cmp -l - example.txt 3 122 142
比较 example.txt 和 /boot/loader.conf 的文件大小,如果不相等则返回 1。 请注意, -z 只能用于常规文件:
$ cmp -z example.txt /boot/loader.conf example.txt /boot/loader.conf differ: size
比较 stdin 和 example.txt ,省略 stdin 的前 4 个字节和 example.txt 的前 2 个字节:
$ echo -e "a\nR\nb\nc" | cmp - example.txt 4 2
diff(1), diff3(1)
cmp 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容。 -h -、 -x 和 -z 选项是标准的扩展。
在 Version 1 AT&T UNIX 中出现了 cmp 命令。
June 20, 2020
FreeBSD 13.1-RELEASE
atqatrm排队、检查或删除作业以供以后执行
at [-q queue] [-f file] [-mldbv] time at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS] at -c job [job ...] at -l [job ...] at -l -q queue at -r job [job ...]
atq [-q queue] [-v]
atrm job [job ...]
batch [-q queue] [-f file] [-mv] [time]
at 和 batch 实用程序使用 sh(1) 从标准输入或指定文件中读取命令,这些命令将在以后执行。
at
在指定时间执行命令;
atq
列出用户的待处理作业,除非用户是超级用户;在这种情况下,每个人的工作都会被列出;
atrm
删除工作;
batch
在系统负载水平允许时执行命令;换句话说,当负载平均下降到低于活动 CPU 数量的 1.5 倍时,或者在调用 atrun 时指定的值。
at 实用程序允许一些中等复杂的 time 规范。 它接受 HHMM 或 HH:MM 形式的时间以在一天中的特定时间运行作业。 (如果该时间已经过去,则假定为第二天。) 作为替代方案,可以指定以下关键字: midnight, noon 或 teatime (4pm) 并且时间可以以 AM 或 PM 为后缀以在早上或晚上运行。 作业运行的日期也可以通过以 month-name day 的形式给出日期和可选的 year 来指定,或者以 DD.MM.YYYY, DD.MM.YY, MM/DD/YYYY, MM/DD/YY, MMDDYYYY 或 MMDDYY 。 日期的指定必须遵循时间的指定。 时间也可以指定为: [now] + count time-units ,其中时间单位可以是 minutes, hours, days, weeks, months 或 years ,并且可以通过在 time 后面加上 today 来告诉 at 今天运行作业并通过在 tomorrow 后缀时间来运行明天的工作。
例如,要在三天之后的下午4点运行一个作业,使用 at 4pm + 3 days ,要在7月31日上午10点运行一个作业,使用 at 10am Jul 31 ,要在明天凌晨1点运行一个作业,使用 at 1am tomorrow 。
at 实用程序还支持 POSIX 时间格式(请参阅 -t 选项)。
对于 at 和 batch ,从标准输入或使用 -f 选项指定的文件读取命令并执行。 工作目录、环境(变量 TERM, TERMCAP, DISPLAY 和 _ 除外)和 umask 从调用时起保留。 从 su(1) shell 调用的 at 或 batch 命令将保留当前用户 ID。 如果有的话,用户将收到来自他的命令的标准错误和标准输出。 邮件将使用命令 sendmail(8) 发送。 如果从 su(1) shell 执行 at ,登录 shell 的所有者将收到邮件。
超级用户在任何情况下都可以使用这些命令。 对于其他用户,使用 at 的权限由文件 /var/at/at.allow 和 /var/at/at.deny 确定。
如果文件 /var/at/at.allow 存在,则只允许其中提到的用户名使用 at 。 在这两个文件中,仅当用户名在其行之前没有空格或其他字符并且在名称之后紧跟换行符时,即使在文件末尾,用户才被认为是列出的。 其他行被忽略,可用于注释。
如果 /var/at/at.allow 不存在,则检查 /var/at/at.deny ,然后允许其中未提及的每个用户名使用 at 。
如果两者都不存在,则只允许超级用户使用 at 。 这是默认配置。
请注意, at 是通过 cron(8) 守护进程通过每五分钟调用一次 atrun(8) 来实现的。 这意味着 at 的粒度可能并非对每个部署都是最佳的。 如果需要更精细的粒度,可以编辑 /etc/cron.d/at 文件,并将由系统 crontab 读取, SHELL 和 PATH 环境变量从该文件继承。
-q queue
使用指定的队列。 队列名称由单个字母组成;有效的队列名称范围从 a 到 z 和 A 到 Z 。 c 队列是 at 的默认队列, E 队列是 batch 的默认队列。 具有更高字母的队列运行得更好。 如果将作业提交到以大写字母指定的队列,则将其视为当时已提交到批处理。 如果给 atq 一个特定的队列,它将只显示该队列中待处理的作业。
即使没有输出,也可以在作业完成后向用户发送邮件。
-f file
从 file 而不是标准输入中读取作业。
不带参数,列出调用用户的所有作业。 如果给出了一个或多个工作编号,请仅列出这些工作。
是 atrm 的别名(此选项已弃用;请改用 -r )。
是 batch 的别名。
对于 atq, 显示队列中已完成但尚未删除的作业;否则显示作业将执行的时间。
将命令行上列出的作业分类到标准输出。
删除指定的作业。
使用 POSIX 时间格式指定作业时间。 参数应采用 [[CC]YY]MMDDhhmm[.SS] 形式,其中每对字母代表以下内容:
CC
年份的前两位数字(世纪)。
YY
年份的后两位数。
MM
一年中的月份,从 1 到 12。
DD
一个月中的第几天,从 1 到 31。
hh
一天中的小时,从 0 到 23。
mm
小时的分钟,从 0 到 59。
SS
分钟的秒数,从 0 到 60。
如果未指定 CC 和 YY 字母对,则默认值为当前年份。 如果未指定 SS 字母对,则该值默认为 0。
/var/at/jobs
包含作业文件的目录
/var/at/spool
包含输出假脱机文件的目录
/var/run/utx.active
登录记录
/var/at/at.allow
允许权限控制
/var/at/at.deny
拒绝权限控制
/var/at/jobs/.lockfile
创造工作锁定文件
nice(1), sh(1), umask(2), atrun(8), cron(8), sendmail(8)
At 主要由 Thomas Koenig <[email protected]> 编写。 时间解析例程由 David Parsons <[email protected]> 编写, Joe Halpin <[email protected]> 进行了小幅改进。
如果文件 /var/run/utx.active 不可用或损坏,或者如果在调用 at 时用户未登录,则邮件将发送到在环境变量 LOGNAME 中找到的用户 ID。 如果未定义或为空,则假定为当前用户 ID。
当前实现的 at 和 batch 实用程序不适用于用户竞争资源时。 如果是这种情况,另一个批处理系统(例如 nqs )可能更合适。
指定超过 2038 年的日期可能不适用于某些系统。
August 11, 2018
FreeBSD 13.1-RELEASE
CP(1)
CP(1)
FreeBSD General Commands Manual
CP(1)
cp —
复制文件
cp [-R [-H | -L | -P]] [-f | -i | -n] [-alpsvx] source_file target_file cp [-R [-H | -L | -P]] [
在第一个概要形式中, cp 实用程序将 source_file 的内容复制到 target_file 。 在第二种概要形式中,每个命名的 source_file 的内容都被复制到目标 target_directory 。 文件本身的名称不会更改。 如果 cp 检测到尝试将文件复制到自身,则复制将失败。
可以使用以下选项:
如果指定了 -R 选项,则遵循命令行上的符号链接。 (不遵循树遍历中遇到的符号链接。)
如果指定了 -R 选项,则遵循所有符号链接。
如果指定了 -R 选项,则不遵循符号链接。 这是默认设置。
如果 source_file 指定一个目录,则 cp 复制该目录和在该点连接的整个子树。 如果 source_file 以 / 结尾,则复制目录的内容而不是目录本身。 此选项还导致复制符号链接,而不是间接通过,并让 cp 创建特殊文件而不是将它们复制为普通文件。 创建的目录与对应的源目录具有相同的模式,不被进程的umask修改。
请注意, cp 将硬链接文件复制为单独的文件。 如果您需要保留硬链接,请考虑使用 tar(1) 、 cpio(1) 或 pax(1) 。
存档模式。与 -RpP 相同。
对于每个现有的目标路径名,将其删除并创建一个新文件,无论其权限如何,都不会提示确认。 ( -f 选项覆盖任何以前的 -i 或 -n 选项。)
导致 cp 在复制将覆盖现有文件的文件之前向标准错误输出写入提示。 如果标准输入的响应以字符 ‘y’ 或 ‘Y’ 开头,则尝试复制文件。 ( -i 选项覆盖任何以前的 -f 或 -n 选项。)
在层次结构中创建指向常规文件的硬链接,而不是复制。
不要覆盖现有文件。 ( -n 选项覆盖任何以前的 -f 或 -i 选项。)
使 cp 保留副本中每个源文件的以下属性:修改时间、访问时间、文件标志、文件模式、ACL、用户 ID 和组 ID,由权限允许。
如果无法保留用户 ID 和组 ID,则不会显示错误消息并且不会更改退出值。
如果源文件的 set-user-ID 位打开并且用户 ID 无法保留,则 set-user-ID 位不会保留在副本的权限中。 如果源文件的 set-group-ID 位打开且组 ID 无法保留,则 set-group-ID 位不会保留在副本的权限中。 如果源文件的 set-user-ID 和 set-group-ID 位都打开,并且用户 ID 或组 ID 无法保留,则 set-user-ID 和 set-group-ID 位都不会保留在副本的权限。
在层次结构中创建指向常规文件的符号链接,而不是复制。
使 cp 变得冗长,在复制文件时显示文件。
不遍历文件系统挂载点。
对于每个已经存在的目标文件,如果权限允许,其内容将被覆盖。 除非指定了 -p 选项,否则它的模式、用户 ID 和组 ID 不变。
在第二种概要形式中, target_directory 必须存在,除非只有一个名为 source_file 的目录并且指定了 -R 标志。
如果目标文件不存在,则使用源文件的模式,由文件模式创建掩码 (umask ,参见 csh(1)) 。 修改。 如果源文件的 set-user-ID 位打开,则该位将被删除,除非源文件和目标文件都属于同一用户。 如果源文件的 set-group-ID 位打开,则删除该位,除非源文件和目标文件都在同一个组中并且用户是该组的成员。 如果同时设置了 set-user-ID 和 set-group-ID 位,则必须满足上述所有条件,否则这两个位都将被删除。
创建或覆盖文件需要适当的权限。
除非设置了 -R 标志,否则始终遵循符号链接,在这种情况下,默认情况下不遵循符号链接。 -H 或 -L 标志(与 -R 标志一起)导致符号链接被遵循,如上所述。 除非指定了 -R? 选项,否则 -H -、 -L 和 -P 选项将被忽略。 此外,这些选项相互覆盖,命令的操作由最后一个指定的操作决定。
如果 cp 接收到 SIGINFO (参见 stty(1) 的 status 参数)信号,则当前输入和输出文件以及完成百分比将被写入标准输出。
The cp utility exits 0 on success, and >0 if an error occurs.
制作名为 bar 的文件 foo 的副本:
$ cp foo bar
将一组文件复制到 /tmp 目录:
$ cp *.txt /tmp
将目录 junk 及其所有内容(包括任何子目录)复制到 /tmp 目录:
$ cp -R junk /tmp
cp 实用程序的历史版本有一个 -r 选项。 此实现支持该选项,但是,它的行为与历史上的 FreeBSD 行为不同。 强烈建议不要使用此选项,因为该行为取决于实现。 在 FreeBSD 中, -r 是 -RL 的同义词,除非被其他标志修改,否则其工作方式相同。 -r 的历史实现有所不同,因为它们在重新创建层次结构时将特殊文件复制为普通文件。
-l, -s, -v, -x 和 -n 选项是非标准选项,不建议在脚本中使用它们。
mv(1), rcp(1), umask(2), fts(3), symlink(7)
cp 命令预计与 IEEE Std 1003.2 (“POSIX.2”) 兼容。
cp 命令出现在 Version 1 AT&T UNIX 中。
June 6, 2015
FreeBSD 13.1-RELEASE
BASENAME(1)
BASENAME(1)
FreeBSD General Commands Manual
BASENAME(1)
basename, dirname —
返回路径名的文件名或目录部分
basename string [suffix] basename [-a] [-s suffix] string [...] dirname string [...]
basename 实用程序删除任何以 string 中存在的最后一个斜杠 ‘/’ 字符结尾的前缀(在第一次去除尾随斜杠之后)和 suffix 如果给定的话。 如果 suffix 与 string 中的其余字符相同,则不会去除后缀。 结果文件名被写入标准输出。 不存在的后缀将被忽略。 如果指定了 -a ,则每个参数都被视为一个 string ,就好像只使用一个参数调用了 basename 。 如果指定了 -s ,则将 suffix 作为其参数,并将所有其他参数视为 string 。
dirname 实用程序删除文件名部分,从最后一个斜杠 ‘/’ 字符开始到 string 的末尾(在第一次去除尾部斜杠之后),并将结果写入标准输出。
The basename and dirname utilities exit 0 on success, and >0 if an error occurs.
以下行将 shell 变量 FOO 设置为 /usr/bin 。
FOO=`dirname /usr/bin/trail`
csh(1), sh(1), basename(3), dirname(3)
basename 和 dirname 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容。
basename 和 dirname 实用程序首先出现在 4.4BSD 中。
May 26, 2020
FreeBSD 13.1-RELEASE
-f-i-n-alpsvxdu [-Aclnx] [-H | -L | -P] [-g | -h | -k | -m] [-a | -s | -d depth] [-B blocksize] [-I mask] [-t threshold] [file ...]
du 实用程序显示每个文件参数以及以每个目录参数为根的文件层次结构中的每个目录的文件系统块使用情况。 如果未指定文件,则显示以当前目录为根的层次结构的块使用情况。
选项如下:
显示表观大小而不是磁盘使用情况。 这在对压缩卷或稀疏文件进行操作时会很有帮助。
-B blocksize
计算 blocksize byte blocks. 字节块中的块计数。 这与 -h, -k, -m, -``-si 和 -g 选项或设置 BLOCKSIZE 不同,它可以估计在给定 blocksize 的文件系统上检查的文件层次结构需要多少空间。 除非在 -A 模式下, blocksize 会向上舍入到 512 的下一个倍数。
遵循命令行上的符号链接,不遵循文件层次结构中的符号链接。
-I mask
忽略与指定 mask 匹配的文件和目录。
遵循命令行和文件层次结构中的符号链接。
不遵循符号链接。这是默认设置。
为文件层次结构中的每个文件显示一个条目。
显示总计。
-d depth
显示所有文件和目录 depth 目录的条目。
以 1073741824 字节 (1 GiB) 块显示块计数。
“Human-readable” 输出。 使用单位后缀: Byte, Kilobyte, Megabyte, Gigabyte, Terabyte 和 Petabyte ,基于 1024 的幂。
以 1024 字节 (1 kiB) 块显示块计数。
如果一个文件有多个硬链接,请多次计算其大小。 du 的默认行为是只计算具有多个硬链接的文件一次。 当指定 -l 选项时,硬链接检查被禁用,并且这些文件被计算(和显示)的次数与找到的次数一样多。
以 1048576 字节 (1 MiB) 块显示块计数。
忽略设置了用户 “nodump” 标志 (UF_NODUMP) 的文件和目录。
生成有关无法读取的目录、无法打开的文件等的消息。 这是默认情况。此选项的存在仅是为了符合 X/Open Portability Guide 第 4 版 X/Open Portability Guide Issue 4 (“XPG4”) 。
显示每个指定文件的条目。 (相当于 -d 0)
-``-si
“Human-readable” 输出。 使用单位后缀:Byte、Kilobyte、Megabyte、Gigabyte、Terabyte 和 Petabyte,基于 1000 的幂。
-t threshold
仅显示大小超过 threshold 的条目。 如果 threshold 为负,则仅显示大小小于 threshold 绝对值的条目。
不遍历文件系统挂载点。
du 实用程序计算符号链接使用的存储空间,而不是它们引用的文件,除非指定了 -H 或 -L 选项。 如果指定了 -H 或 -L 选项,则不计算(或显示)后面的任何符号链接使用的存储空间。 -H, -L 和 -P 选项相互覆盖,命令的操作由指定的最后一个选项决定。
-h, -k, -m 和 -``-si 选项都相互覆盖;指定的最后一个确定使用的块计数。
如果设置了环境变量 BLOCKSIZE ,并且未指定 -h, -k, -m 或 -``-si 选项,则块计数将以该块大小为单位显示。 如果未设置 BLOCKSIZE ,并且未指定 -h, -k, -m 或 -``-si 选项,则块计数将以 512 字节块的形式显示。
显示当前目录中所有文件的磁盘使用情况。 输出是人类可读的形式:
# du -ah
总结当前目录的磁盘使用情况:
# du -hs
总结特定目录的磁盘使用情况:
# du -hs /home
显示特定目录中所有 C 文件的名称和大小。 最后还要显示总计:
# du -ch /usr/src/sys/kern/*.c
df(1), chflags(2), fts(3), symlink(7), quot(8)
du 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。
标志 [-cdhP] 以及 BLOCKSIZE 环境变量是对该规范的扩展。
标志 [-r] 被接受但被忽略,以便与实施过时的 X/Open 命令和实用程序第 5 版 X/Open Commands and Utilities Issue 5 (“XCU5”) 标准的系统兼容。
du 实用程序及其 -a 和 -s 选项首次出现在 Version 1 AT&T UNIX 中。
-r 选项首先出现在 AT&T System III UNIX 中,并且从 FreeBSD 3.5 开始可用。 -k 和 -x 选项首先出现在 4.3BSD-Reno 中,而 -H 出现在 4.4BSD 中。 -c 和 -L 选项首先出现在 GNU fileutils 中; -L 和 -P 从 4.4BSD-Lite1 开始可用, -c 从 FreeBSD 2.2.6 开始可用。 -d 选项最早出现在 FreeBSD 2.2 中, -h 选项最早出现在 FreeBSD 4.0 中。
这个版本的 du 由 Chris Newcomb 于 1989 年为 4.3BSD-Reno 编写。
August 1, 2019
FreeBSD 13.1-RELEASE
AT(1)
AT(1)
FreeBSD General Commands Manual
AT(1)
at, batch, atq, atrm —
排队、检查或删除作业以供以后执行
at [-q queue] [-f file] [-mldbv] time at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS] at -c job [job ...] at -l [job ...] at
atq [-q queue] [-v]
atrm job [job ...]
batch [-q queue] [-f file] [-mv] [time]
at 和 batch 实用程序使用 sh(1) 从标准输入或指定文件中读取命令,这些命令将在以后执行。
at
在指定时间执行命令;
atq
列出用户的待处理作业,除非用户是超级用户;在这种情况下,每个人的工作都会被列出;
atrm
删除工作;
batch
在系统负载水平允许时执行命令;换句话说,当负载平均下降到低于活动 CPU 数量的 1.5 倍时,或者在调用 atrun 时指定的值。
at 实用程序允许一些中等复杂的 time 规范。 它接受 HHMM 或 HH:MM 形式的时间以在一天中的特定时间运行作业。 (如果该时间已经过去,则假定为第二天。) 作为替代方案,可以指定以下关键字: midnight, noon 或 teatime (4pm) 并且时间可以以 AM 或 PM 为后缀以在早上或晚上运行。 作业运行的日期也可以通过以 month-name day 的形式给出日期和可选的 year 来指定,或者以 DD.MM.YYYY, DD.MM.YY, MM/DD/YYYY, MM/DD/YY, MMDDYYYY 或 MMDDYY 。 日期的指定必须遵循时间的指定。 时间也可以指定为: [now] + count time-units ,其中时间单位可以是 minutes, hours, days, weeks, months 或 years ,并且可以通过在 time 后面加上 today 来告诉 at 今天运行作业并通过在 tomorrow 后缀时间来运行明天的工作。
例如,要在三天之后的下午4点运行一个作业,使用 at 4pm + 3 days ,要在7月31日上午10点运行一个作业,使用 at 10am Jul 31 ,要在明天凌晨1点运行一个作业,使用 at 1am tomorrow 。
at 实用程序还支持 POSIX 时间格式(请参阅 -t 选项)。
对于 at 和 batch ,从标准输入或使用 -f 选项指定的文件读取命令并执行。 工作目录、环境(变量 TERM, TERMCAP, DISPLAY 和 _ 除外)和 umask 从调用时起保留。 从 su(1) shell 调用的 at 或 batch 命令将保留当前用户 ID。 如果有的话,用户将收到来自他的命令的标准错误和标准输出。 邮件将使用命令 sendmail(8) 发送。 如果从 su(1) shell 执行 at ,登录 shell 的所有者将收到邮件。
超级用户在任何情况下都可以使用这些命令。 对于其他用户,使用 at 的权限由文件 /var/at/at.allow 和 /var/at/at.deny 确定。
如果文件 /var/at/at.allow 存在,则只允许其中提到的用户名使用 at 。 在这两个文件中,仅当用户名在其行之前没有空格或其他字符并且在名称之后紧跟换行符时,即使在文件末尾,用户才被认为是列出的。 其他行被忽略,可用于注释。
如果 /var/at/at.allow 不存在,则检查 /var/at/at.deny ,然后允许其中未提及的每个用户名使用 at 。
如果两者都不存在,则只允许超级用户使用 at 。 这是默认配置。
请注意, at 是通过 cron(8) 守护进程通过每五分钟调用一次 atrun(8) 来实现的。 这意味着 at 的粒度可能并非对每个部署都是最佳的。 如果需要更精细的粒度,可以编辑 /etc/cron.d/at 文件,并将由系统 crontab 读取, SHELL 和 PATH 环境变量从该文件继承。
queue
使用指定的队列。 队列名称由单个字母组成;有效的队列名称范围从 a 到 z 和 A 到 Z 。 c 队列是 at 的默认队列, E 队列是 batch 的默认队列。 具有更高字母的队列运行得更好。 如果将作业提交到以大写字母指定的队列,则将其视为当时已提交到批处理。 如果给 atq 一个特定的队列,它将只显示该队列中待处理的作业。
即使没有输出,也可以在作业完成后向用户发送邮件。
file
从 file 而不是标准输入中读取作业。
不带参数,列出调用用户的所有作业。 如果给出了一个或多个工作编号,请仅列出这些工作。
是 atrm 的别名(此选项已弃用;请改用 -r )。
是 batch 的别名。
对于 atq, 显示队列中已完成但尚未删除的作业;否则显示作业将执行的时间。
将命令行上列出的作业分类到标准输出。
删除指定的作业。
使用 POSIX 时间格式指定作业时间。 参数应采用 [[CC]YY]MMDDhhmm[.SS] 形式,其中每对字母代表以下内容:
CC
年份的前两位数字(世纪)。
YY
年份的后两位数。
MM
一年中的月份,从 1 到 12。
DD
一个月中的第几天,从 1 到 31。
hh
一天中的小时,从 0 到 23。
mm
小时的分钟,从 0 到 59。
SS
分钟的秒数,从 0 到 60。
如果未指定 CC 和 YY 字母对,则默认值为当前年份。 如果未指定 SS 字母对,则该值默认为 0。
/var/at/jobs
包含作业文件的目录
/var/at/spool
包含输出假脱机文件的目录
/var/run/utx.active
登录记录
/var/at/at.allow
允许权限控制
/var/at/at.deny
拒绝权限控制
/var/at/jobs/.lockfile
创造工作锁定文件
nice(1), sh(1), umask(2), atrun(8), cron(8), sendmail(8)
At 主要由 Thomas Koenig <> 编写。 时间解析例程由 David Parsons <> 编写, Joe Halpin <> 进行了小幅改进。
如果文件 /var/run/utx.active 不可用或损坏,或者如果在调用 at 时用户未登录,则邮件将发送到在环境变量 LOGNAME 中找到的用户 ID。 如果未定义或为空,则假定为当前用户 ID。
当前实现的 at 和 batch 实用程序不适用于用户竞争资源时。 如果是这种情况,另一个批处理系统(例如 nqs )可能更合适。
指定超过 2038 年的日期可能不适用于某些系统。
August 11, 2018
FreeBSD 13.1-RELEASE
AT(1)
AT(1)
FreeBSD General Commands Manual
AT(1)
at, batch, atq, atrm —
排队、检查或删除作业以供以后执行
at [-q queue] [-f file] [-mldbv] time at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS] at -c job [job ...] at -l [job ...] at
atq [-q queue] [-v]
atrm job [job ...]
batch [-q queue] [-f file] [-mv] [time]
at 和 batch 实用程序使用 sh(1) 从标准输入或指定文件中读取命令,这些命令将在以后执行。
at
在指定时间执行命令;
atq
列出用户的待处理作业,除非用户是超级用户;在这种情况下,每个人的工作都会被列出;
atrm
删除工作;
batch
在系统负载水平允许时执行命令;换句话说,当负载平均下降到低于活动 CPU 数量的 1.5 倍时,或者在调用 atrun 时指定的值。
at 实用程序允许一些中等复杂的 time 规范。 它接受 HHMM 或 HH:MM 形式的时间以在一天中的特定时间运行作业。 (如果该时间已经过去,则假定为第二天。) 作为替代方案,可以指定以下关键字: midnight, noon 或 teatime (4pm) 并且时间可以以 AM 或 PM 为后缀以在早上或晚上运行。 作业运行的日期也可以通过以 month-name day 的形式给出日期和可选的 year 来指定,或者以 DD.MM.YYYY, DD.MM.YY, MM/DD/YYYY, MM/DD/YY, MMDDYYYY 或 MMDDYY 。 日期的指定必须遵循时间的指定。 时间也可以指定为: [now] + count time-units ,其中时间单位可以是 minutes, hours, days, weeks, months 或 years ,并且可以通过在 time 后面加上 today 来告诉 at 今天运行作业并通过在 tomorrow 后缀时间来运行明天的工作。
例如,要在三天之后的下午4点运行一个作业,使用 at 4pm + 3 days ,要在7月31日上午10点运行一个作业,使用 at 10am Jul 31 ,要在明天凌晨1点运行一个作业,使用 at 1am tomorrow 。
at 实用程序还支持 POSIX 时间格式(请参阅 -t 选项)。
对于 at 和 batch ,从标准输入或使用 -f 选项指定的文件读取命令并执行。 工作目录、环境(变量 TERM, TERMCAP, DISPLAY 和 _ 除外)和 umask 从调用时起保留。 从 su(1) shell 调用的 at 或 batch 命令将保留当前用户 ID。 如果有的话,用户将收到来自他的命令的标准错误和标准输出。 邮件将使用命令 sendmail(8) 发送。 如果从 su(1) shell 执行 at ,登录 shell 的所有者将收到邮件。
超级用户在任何情况下都可以使用这些命令。 对于其他用户,使用 at 的权限由文件 /var/at/at.allow 和 /var/at/at.deny 确定。
如果文件 /var/at/at.allow 存在,则只允许其中提到的用户名使用 at 。 在这两个文件中,仅当用户名在其行之前没有空格或其他字符并且在名称之后紧跟换行符时,即使在文件末尾,用户才被认为是列出的。 其他行被忽略,可用于注释。
如果 /var/at/at.allow 不存在,则检查 /var/at/at.deny ,然后允许其中未提及的每个用户名使用 at 。
如果两者都不存在,则只允许超级用户使用 at 。 这是默认配置。
请注意, at 是通过 cron(8) 守护进程通过每五分钟调用一次 atrun(8) 来实现的。 这意味着 at 的粒度可能并非对每个部署都是最佳的。 如果需要更精细的粒度,可以编辑 /etc/cron.d/at 文件,并将由系统 crontab 读取, SHELL 和 PATH 环境变量从该文件继承。
queue
使用指定的队列。 队列名称由单个字母组成;有效的队列名称范围从 a 到 z 和 A 到 Z 。 c 队列是 at 的默认队列, E 队列是 batch 的默认队列。 具有更高字母的队列运行得更好。 如果将作业提交到以大写字母指定的队列,则将其视为当时已提交到批处理。 如果给 atq 一个特定的队列,它将只显示该队列中待处理的作业。
即使没有输出,也可以在作业完成后向用户发送邮件。
file
从 file 而不是标准输入中读取作业。
不带参数,列出调用用户的所有作业。 如果给出了一个或多个工作编号,请仅列出这些工作。
是 atrm 的别名(此选项已弃用;请改用 -r )。
是 batch 的别名。
对于 atq, 显示队列中已完成但尚未删除的作业;否则显示作业将执行的时间。
将命令行上列出的作业分类到标准输出。
删除指定的作业。
使用 POSIX 时间格式指定作业时间。 参数应采用 [[CC]YY]MMDDhhmm[.SS] 形式,其中每对字母代表以下内容:
CC
年份的前两位数字(世纪)。
YY
年份的后两位数。
MM
一年中的月份,从 1 到 12。
DD
一个月中的第几天,从 1 到 31。
hh
一天中的小时,从 0 到 23。
mm
小时的分钟,从 0 到 59。
SS
分钟的秒数,从 0 到 60。
如果未指定 CC 和 YY 字母对,则默认值为当前年份。 如果未指定 SS 字母对,则该值默认为 0。
/var/at/jobs
包含作业文件的目录
/var/at/spool
包含输出假脱机文件的目录
/var/run/utx.active
登录记录
/var/at/at.allow
允许权限控制
/var/at/at.deny
拒绝权限控制
/var/at/jobs/.lockfile
创造工作锁定文件
nice(1), sh(1), umask(2), atrun(8), cron(8), sendmail(8)
At 主要由 Thomas Koenig <> 编写。 时间解析例程由 David Parsons <> 编写, Joe Halpin <> 进行了小幅改进。
如果文件 /var/run/utx.active 不可用或损坏,或者如果在调用 at 时用户未登录,则邮件将发送到在环境变量 LOGNAME 中找到的用户 ID。 如果未定义或为空,则假定为当前用户 ID。
当前实现的 at 和 batch 实用程序不适用于用户竞争资源时。 如果是这种情况,另一个批处理系统(例如 nqs )可能更合适。
指定超过 2038 年的日期可能不适用于某些系统。
August 11, 2018
FreeBSD 13.1-RELEASE
GZIP(1)
GZIP(1)
FreeBSD General Commands Manual
GZIP(1)
gzip, gunzip, zcat —
使用 Lempel-Ziv 编码 (LZ77) 的压缩/解压缩工具
gzip [-cdfhkLlNnqrtVv] [-S suffix] file [file [...]] gunzip [-cfhkLNqrtVv] [-S suffix] file [file [...]] zcat [-fhV] file [file [...]]
gzip 程序使用 Lempel-Ziv 编码 (LZ77) 压缩和解压缩文件。 如果没有指定 files , gzip 将从标准输入压缩,或解压缩到标准输出。 在压缩模式下,如果可能,每个 file 都将替换为另一个带有后缀的文件,该后缀由 -S suffix 选项设置,如果可能的话。
在解压模式下,每个 file 都会被检查是否存在,添加后缀的文件也会被检查。 每个 file 参数必须包含一个单独的完整存档;当指示多个 files 时,依次解压每个文件。
在 gzcat 的情况下,结果数据然后以 cat(1) 的方式连接。
如果作为 gunzip 调用,则启用 -d 选项。 如果作为 zcat 或 gzcat 调用,则启用 -c 和 -d 选项。
此版本的 gzip 还能够解压缩使用 compress(1), bzip2(1), lzip 或 xz(1) 压缩的文件。
可以使用以下选项:
, -``-fast
, -3, -4, -5, -6, -7, -8
, -``-best
这些选项更改使用的压缩级别, -1 选项最快,压缩较少, -9 选项最慢,压缩最佳。默认压缩级别为 6。
, -``-stdout, - -to-stdout
此选项指定输出将转到标准输出流,使文件保持不变。
, -``-decompress, -``-uncompress
此选项选择解压缩而不是压缩。
, -``-force
此选项打开强制模式。 这允许具有多个链接的文件、到常规文件的符号链接、覆盖预先存在的文件、读取或写入终端,以及与 -c 选项结合使用时,允许未压缩的数据原封不动地通过。
, -``-help
此选项打印使用摘要并退出。
, -``-keep
此选项可防止 gzip 在(解)压缩后删除输入文件。
, --license
此选项打印 gzip 许可证。
, -``-list
此选项显示有关文件的压缩和未压缩大小、比率、未压缩名称的信息。 使用 -v 选项,它还显示文件中嵌入的压缩方法、CRC、日期和时间。
, -``-name
此选项使输入文件中存储的文件名用作输出文件。
, -``-no-name
此选项停止将文件名和时间戳存储在输出文件中。
, -``-quiet
使用此选项,不会打印任何警告或错误。
, -``-recursive
此选项用于使用 fts(3) 库单独 gzip 目录树中的文件。
suffix, -``-suffix suffix
此选项将默认后缀从 .gz 更改为 suffix 。
, -``-test
此选项将测试压缩文件的完整性。
, -``-version
此选项打印 gzip 程序的版本。
, -``-verbose
此选项打开详细模式,打印每个压缩文件的压缩率。
如果设置了环境变量 GZIP ,它将被解析为在命令行上的任何选项之前处理的以空格分隔的选项列表。 命令行上的选项将覆盖 GZIP 中的任何内容。
gzip 实用程序在成功时退出 0,在错误时退出 1,如果出现警告则退出 2。
gzip 响应以下信号:
向标准错误报告进度。
bzip2(1), compress(1), xz(1), fts(3), zlib(3)
gzip 程序最初由 Jean-loup Gailly 编写,获得 GNU Public License 许可。 Matthew R.Green 基于可自由再分发的 zlib 库为 NetBSD 1.3 分发媒体编写了一个简单的前端。 它被增强为与 NetBSD 2.0 的原始 GNU gzip 程序大部分功能兼容。
这个 gzip 的实现是基于 NetBSD gzip 版本 20181111 移植的,并且首次出现在 FreeBSD 7.0 中。
这个 gzip 的实现由 Matthew R. Green <> 编写,解压支持由 Xin LI <> 编写。
根据 RFC 1952,记录的文件大小以 32 位整数存储,因此不能表示大于 4GB 的文件。 此限制也适用于 gzip 实用程序的 -l 选项。
January 7, 2019
FreeBSD 13.1-RELEASE
ECHO(1)
ECHO(1)
FreeBSD General Commands Manual
ECHO(1)
echo —
将参数写入标准输出
echo [-n] [string ...]
echo 实用程序将任何指定的操作数写入标准输出,由单个空白 (‘’) 字符分隔并后跟换行符 (‘’) 字符。
以下选项可用:
不打印尾随换行符。
选项结束标记 -``- 无法识别并按字面书写。
换行符也可以通过在字符串末尾附加 ‘\c’ 来抑制,正如 iBCS2 兼容系统所做的那样。 请注意, -n 选项以及 ‘\c’ 的效果是在 IEEE Std 1003.1-2001 (“POSIX.1”) 中实现定义的,由 Cor. 1-2002 修正。 为了可移植性,只有当第一个参数不以连字符 (‘-’) 开头并且不包含任何反斜杠 (‘\’) 时,才应使用 echo 。 如果这还不够,应该使用 printf(1) 。
大多数 shell 提供了一个内置的 echo 命令,该命令在处理选项和反斜杠方面往往与此实用程序不同。 请参阅 builtin(1) 手册页。
The echo utility exits 0 on success, and >0 if an error occurs.
builtin(1), csh(1), printf(1), sh(1)
echo 实用程序符合经 1-2002 修订的 IEEE Std 1003.1-2001 (“POSIX.1”) 。
echo 命令出现在 Version 2 AT&T UNIX 中。
October 5, 2016
FreeBSD 13.1-RELEASE
CTFDUMP(1)
CTFDUMP(1)
FreeBSD General Commands Manual
CTFDUMP(1)
ctfdump —
转储 ELF 文件的 SUNW_ctf 部分
ctfdump [-dfhlsSt] -u file file
ctfdump 实用程序转储 ELF 二进制文件中存在的 CTF 数据段 (SUNW_ctf) 的内容。 此部分之前是使用 ctfconvert(1) 或 ctfmerge(1) 创建的。
可以使用以下选项:
显示数据对象部分。
显示函数部分。
显示标题。
显示标签部分。
显示字符串表。
显示统计信息。
显示类型部分。
ufile
将未压缩的 CTF 数据写入名为 ufile 的原始 CTF 文件。
The ctfdump utility exits 0 on success, and >0 if an error occurs.
ctfconvert(1), ctfmerge(1)
ctfdump 实用程序首次出现在 FreeBSD 7.0 中。
CTF 实用程序来自 OpenSolaris。
July 7, 2010
FreeBSD 13.1-RELEASE
-l-qat-r-l-qat-rdate [-jnRu] [-r seconds | filename] [-v [+ | -]val [ymwdHMS]] ... [+output_fmt] date [-ju] [[[[[cc]yy]mm]dd]HH]MM[.ss] date [-jRu] -f input_fmt new_date [+output_fmt] date [-jnu] [-I[FMT]] [-f input_fmt] [-r ...] [-v ...] [new_date]
当不带参数调用时, date 实用程序显示当前日期和时间。 否则,根据指定的选项, date 将设置日期和时间或以用户定义的方式打印。
date 实用程序显示从内核时钟读取的日期和时间。 当用于设置日期和时间时,内核时钟和硬件时钟都会更新。
只有超级用户可以设置日期,如果系统安全级别(参见 securelevel(7)) 大于 1,则时间更改不得超过 1 秒。
选项如下:
使用 input_fmt 作为格式字符串来解析提供的 new_date 而不是使用默认的 [[[[[cc]yy]mm]dd]HH]MM[.ss] 格式。 使用 strptime(3) 完成解析。
-I[FMT]
使用 ISO 8601 输出格式。 FMT 可以省略,在这种情况下,默认值为 ‘date’ 。 有效的 FMT 值为 ‘date 、’ ‘hours 、’ ‘minutes’ 和 ‘seconds’ 。 日期和时间被格式化为指定的精度。 当 FMT 为 ‘hours’ (或更精确的 ‘minutes’ 或 ‘seconds’ )时, ISO 8601 格式包括时区。
不要尝试设置日期。 除了 -f 选项之外,这还允许您使用 + 标志将一种日期格式转换为另一种日期格式。 请注意, -f 格式字符串未指定的任何日期或时间组件都从当前时间获取它们的值。
过时的标志,为了兼容性而接受和忽略。
使用 RFC 2822 日期和时间输出格式。 这相当于使用 “%a, %d %b %Y %T %z” 作为 output_fmt 而 LC_TIME 设置为 “C” 语言环境。
-r seconds
打印以 seconds 表示的日期和时间,其中 seconds 是自 Epoch(00:00:00 UTC,1970 年 1 月 1 日;参见 time(3) )以来的秒数,可以指定为十进制、八进制或十六进制。
-r filename
打印最后一次修改 filename 的日期和时间。
以 UTC (协调世界时)时间显示或设置日期。
根据 val 调整(即取当前日期并显示调整结果;不实际设置日期)秒、分、时、月、日、星期、月或年。 如果 val 前面有加号或减号,则根据剩余字符串向前或向后调整日期,否则设置日期的相关部分。 使用这些标志可以根据需要多次调整日期。 标志按给定的顺序处理。
设置值时(而不是调整它们),秒在 0-59 范围内,分钟在 0-59 范围内,小时在 0-23 范围内,月日在 1-31 范围内,工作日在在 0-6 范围内(周日至周六),月份在 1-12 范围内(1 月至 12 月),年份在 80-38 或 1980-2038 范围内。
如果 val 是数字,则必须使用 y, m, w, d, H, M 或 S 之一来指定要调整日期的哪一部分。
可以使用名称而不是数字来指定星期几或月份。 如果名称与加号(或减号)一起使用,则日期将向前(或向后)到与给定工作日或月份匹配的下一个(前一个)日期。 如果给定的星期几或月份与当前日期相同,则不会调整日期。
当日期调整为特定值或单位大于小时时,将忽略夏令时注意事项。 以小时或更少为单位的调整遵循夏令时。 因此,假设当前日期是 3 月 26 日 0:30,并且 DST 调整意味着时钟从 01:00 前进到 02:00,使用 -v +1H 会将日期调整为 3 月 26 日 2:30。 同样,如果日期是 10 月 29 日 0:30,并且 DST 调整意味着时钟从 02:00 回到 01:00,则需要使用 -v +3H 才能到达 10 月 29 日 2:30。
当日期调整为实际不存在的特定值时(例如欧洲/伦敦时区 2000 年 3 月 26 日,英国夏令时 1:30),日期将以一小时为单位静默向前调整,直到达到有效时间。 当日期调整为出现两次的特定值时(例如 2000 年 10 月 29 日 1:30),将设置生成的时区,以使日期与两次中较早的时间相匹配。
不可能将日期调整为无效的绝对日期,因此使用开关 -v 31d -v 12m 只会在一年中的五个月中失败。 因此,通常在设置日期之前设置月份;使用 -v 12m -v 31d 总是有效的。
按月调整日期本质上是模棱两可的,因为一个月是一个可变长度的单位,具体取决于当前日期。 这种日期调整以最直观的方式应用。 首先, date 试图保留月份中的日期。 如果由于目标月份比当前月份短而无法执行,则结果将是目标月份的最后一天。 例如,在 5 月 31 日使用 -v +1m 会将日期调整为 6 月 30 日,而在 1 月 30 日使用相同选项会将日期调整为 2 月的最后一天。 这种方法也被认为对 shell 脚本最有意义。 不过,请注意,以相同的月数来回可能会将您带到不同的日期。
有关详细信息,请参阅以下示例。
带有前导加号 (‘+’) 的操作数表示用户定义的格式字符串,该字符串指定显示日期和时间的格式。 格式字符串可以包含 strftime(3) 手册页中描述的任何转换规范,以及任何任意文本。 换行符 (‘’) 始终在格式字符串指定的字符之后输出。 默认显示的格式字符串是 “+%+” 。
如果操作数没有前导加号,则将其解释为用于设置系统当前日期和时间概念的值。 设置日期和时间的规范表示是:
cc
世纪(19 或 20)添加到缩写年份。
yy
缩写形式的年份(例如,1989 年为 89,2006 年为 06)。
mm
数字月份,从 1 到 12 的数字。
dd
日,从 1 到 31 的数字。
HH
小时,一个从 0 到 23 的数字。
MM
分钟,一个从 0 到 59 的数字。
ss
秒,从 0 到 60 的数字(59 加上潜在的闰秒)。
除会议记录外的所有内容都是可选的。
自动处理夏令时、标准时间、闰秒和闰年的时间更改。
以下环境变量会影响 date 的执行:
显示日期时使用的时区。 正常格式是相对于 /usr/share/zoneinfo 的路径名。 例如,命令 “TZ=America/Los_Angeles date” 显示加利福尼亚的当前时间。 有关详细信息,请参阅 environ(7) 。
/var/log/utx.log
日期重置和时间更改的记录
/var/log/messages
用户设置时间的记录
date 实用程序在成功时退出 0,如果无法设置日期,则退出 1,如果能够设置本地日期,但无法全局设置,则退出 2。
命令:
date "+DATE: %Y-%m-%d%nTIME: %H:%M:%S"
将显示:
DATE: 1987-11-21 TIME: 13:36:16
在欧洲/伦敦时区,命令:
date -v1m -v+1y
将显示:
Sun Jan 4 04:15:24 GMT 1998
目前是 Mon Aug 4 04:15:24 BST 1997 。
命令:
date -v1d -v3m -v0y -v-1d
将显示 2000 年二月的最后一天:
Tue Feb 29 03:18:00 GMT 2000
命令也一样:
date -v3m -v30d -v0y -v-1m
因为没有像 2 月 30 日这样的日期。
命令:
date -v1d -v+1m -v-1d -v-fri
将显示该月的最后一个星期五:
Fri Aug 29 04:31:11 BST 1997
目前是 Mon Aug 4 04:31:11 BST 1997 。
命令:
date 8506131627
将日期设置为 “June 13, 1985, 4:27 PM 。”
date "+%Y%m%d%H%M.%S"
可以在一台机器上打印出适合在另一台机器上设置的日期。 (“+%m%d%H%M%Y.%S” 用于 Linux 。)
命令:
date 1432
将时间设置为 2:32 PM, ,而不修改日期。
命令
TZ=America/Los_Angeles date -Iseconds -r 1533415339
将显示
2018-08-04T13:42:19-07:00
最后是命令:
date -j -f "%a %b %d %T %Z %Y" "`date`" "+%s"
可用于解析 date 的输出并以 Epoch 时间表示。
将 -I 标志与 -R 或输出格式 (“+...”) 操作数组合是无效的。 如果发生这种情况, date 会打印: ‘multiple output formats specified’ 并以错误状态退出。
locale(1), gettimeofday(2), getutxent(3), strftime(3), strptime(3) R. Gusella and S. Zatti, TSP: The Time Synchronization Protocol for UNIX 4.3BSD.
date 实用程序预计与 IEEE Std 1003.2 (“POSIX.2”) 兼容。 -d, -f, -I, -j, -r, -t 和 -v- 选项都是对标准的扩展。
-I 标志选择的格式与 ISO 8601 兼容。
date 命令出现在 Version 1 AT&T UNIX 中。
-I 标志是在 FreeBSD 12.0 中添加的。
August 25, 2020
FreeBSD 13.1-RELEASE
ENV(1)
ENV(1)
FreeBSD General Commands Manual
ENV(1)
env —
设置环境并执行命令,或打印环境
env [-0iv] [-L|-U user[/class]] [-u name] [name=value ...] env [-iv] [-L|-U user[/class]] [-P altpath] [-S string] [-u name] [name=value ...] utility [argument ...]
env 实用程序在修改命令行中指定的环境后执行另一个 utility 。 每个 name=value 选项指定环境变量 name 的设置,其值为 value 。 所有这些环境变量都是在 utility 执行之前设置的。
选项如下:
以 NUL 结束每个输出行,而不是换行符。
仅使用 name=value 选项指定的那些环境变量执行该 utility 。 env 继承的环境被完全忽略。
| user[/class]
在处理任何 -i 或 -u 选项之后,但在处理任何 name=value 选项之前,将指定用户和登录类的 login.conf(5) 中的环境变量定义添加到环境中。 如果使用 -L ,则只读取系统范围的 /etc/login.conf.db 文件;如果使用 -U ,则指定用户的 ~/.login_conf 也会被读取。 用户可以由名称或 uid 指定。如果给出了用户名 ‘-’ ,则不会进行用户查找,如果没有明确给出,登录类将默认为 ‘default’ ,并且不会对值进行替换。
altpath
搜索由 altpath 指定的目录集以定位指定的 utility ,而不是使用 PATH 环境变量的值。
string
将给定的 string 拆分为多个字符串,并将每个结果字符串作为 env 实用程序的单独参数进行处理。 -S 选项识别一些特殊的字符转义序列并且还支持环境变量替换,如下所述。
name
如果环境变量 name 在环境中,则在处理其余选项之前将其删除。 这类似于 sh(1) 中的 unset 命令。 name 的值不能包含 ‘=’ 字符。
打印 env 实用程序完成的每个处理步骤的详细信息。 如果多次指定 -v ,将打印附加信息。
仅当在任何 name=value 选项之前指定上述选项时,它们才会被识别。
如果未指定 utility ,则 env 会打印出环境中变量的名称和值。 除非指定了 -0 否则每个名称/值对由新行分隔,在这种情况下,名称/值对由 NUL 分隔。 -0 和 utility 不能一起指定。
-S 选项的处理将根据在 string 中找到的任何空格或 字符将给定 string 拆分为单独的参数。 然后,这些新参数中的每一个都将被视为已在原始 env 命令中指定为单独的参数。
空格和制表符可以通过使用单引号 (“'”) 或双引号 (‘"’)- 或反斜杠 (‘\’) 嵌入其中一个新参数中。 单引号将转义所有非单引号字符,直到匹配的单引号。 双引号将转义所有非双引号字符,直到匹配的双引号。 如果在匹配的引号字符之前到达 string 的结尾,则这是一个错误。
如果 -S 将创建一个以 ‘#’ 字符开头的新参数,则该参数和 string 的其余部分将被忽略。 当您希望新参数以 ‘#’ 字符开头时,可以使用 ‘\#’ 序列,而不会导致 string 的其余部分被跳过。
在处理 string 值时, -S 处理会将某些字符组合视为转义序列,表示要采取的某些操作。 字符转义序列采用反斜杠表示法。 字符及其含义如下:
忽略 string 中的剩余字符。 这不能出现在双引号字符串中。
替换为 字符。
替换为 字符。
替换为 <回车> 字符。
替换为 字符。
替换为 字符。
替换为 ‘#’ 字符。 当您需要一个 ‘#’ 作为通过拆分给定 string 创建的一个参数中的第一个字符时,这将很有用。
替换为 ‘$’ 字符。
如果在双引号字符串中找到它,则将其替换为单个空格。 如果在带引号的字符串之外找到它,则将其视为原始 string 中新参数之间的分隔符。
替换为 <双引号> 字符。
替换为 <单引号> 字符。
替换为反斜杠字符。
和反斜杠的序列是唯一在单引号字符串中被识别的序列。 其他序列在单引号字符串中没有特殊含义。 所有转义序列都在双引号字符串中被识别。 如果单个 ‘\’ 字符后跟上面列出的字符以外的字符,则会出错。
-S 的处理还支持从环境变量中替换值。 为此,环境变量的名称必须在 ‘${}’ 之内,例如: ${SOMEVAR} 。 不支持 $SOMEVAR 的通用 shell 语法。 所有替换的值都将是环境变量的值,就像最初调用 env 实用程序时一样。 如上所述,不会检查这些值是否有任何转义序列。 并且 name=value 的任何设置都不会影响 -S 处理中用于替换的值。
此外, -S 处理不能引用大多数 shell 定义的特殊参数的值。 例如, -S 无法识别特殊参数,例如: ‘$*’, ‘$@’, ‘$#’, ‘$?’ 或 ‘$$’ 如果它们出现在给定的 string 中。
env 实用程序通常用作解释脚本的第一行的 interpreter ,如 execve(2) 中所述。
请注意内核解析 ‘#!’ 的方式 自 FreeBSD 6.0 起,解释脚本的(第一行)已更改。 在此之前, FreeBSD 内核会根据在该行中找到的任何空格(空格或 字符)将该第一行拆分为单独的参数。 所以,如果一个名为 /usr/local/bin/someport 的脚本的第一行是:
#!/usr/local/bin/php -n -q -dsafe_mode=0
那么 /usr/local/bin/php 程序将使用以下参数启动:
arg[0] = '/usr/local/bin/php' arg[1] = '-n' arg[2] = '-q' arg[3] = '-dsafe_mode=0' arg[4] = '/usr/local/bin/someport'
加上用户在执行 someport 时指定的任何参数。 但是,这个处理多个选项就 ‘#!’ 行不是任何其他操作系统解析解释脚本的第一行的方式。 因此,在对 FreeBSD 6.0 进行更改后,该脚本将导致 /usr/local/bin/php 以以下参数启动:
arg[0] = '/usr/local/bin/php' arg[1] = '-n -q -dsafe_mode=0' arg[2] = '/usr/local/bin/someport'
加上用户指定的任何参数。 这导致一些脚本的行为发生了重大变化。 在上述脚本的情况下,要让它在 FreeBSD 6.0 下的行为方式与在早期版本下的行为方式相同,第一行应更改为:
#!/usr/bin/env -S /usr/local/bin/php -n -q -dsafe_mode=0
env 实用程序将以整行作为单个参数启动:
arg[1] = '-S /usr/local/bin/php -n -q -dsafe_mode=0'
然后 -S 处理将在执行 /usr/local/bin/php 之前将该行拆分为单独的参数。
如果名称不包含 ‘/’ 字符,则 env 实用程序使用 PATH 环境变量来定位请求的 utility ,除非已指定 -P 选项。
The env utility exits 0 on success, and >0 if an error occurs. 退出状态 126 表示已找到 utility ,但无法执行。 退出状态 127 表示找不到 utility 。
由于 env 实用程序通常用作解释脚本的第一行的一部分,因此以下示例显示了 env 实用程序在脚本中的多种用途。
解释脚本的内核处理不允许脚本直接引用其他脚本作为它自己的解释器。 作为一种解决方法,主要区别在于
#!/usr/local/bin/foo
和
#!/usr/bin/env /usr/local/bin/foo
是即使 /usr/local/bin/foo 本身就是一个解释脚本,后者也可以工作。
可能 env 最常见的用途是为脚本找到正确的解释器,此时解释器可能位于不同系统的不同目录中。 以下示例将通过搜索 PATH 指定的目录来找到 ‘perl’ 解释器。
#!/usr/bin/env perl
该示例的一个限制是它假定用户的 PATH 值设置为一个可以找到您要执行的解释器的值。 -P 选项可用于确保在搜索 utility 时使用特定的目录列表。 请注意,此示例还需要 -S 选项才能正常工作。
#!/usr/bin/env -S -P/usr/local/bin:/usr/bin perl
仅当它位于 /usr/local/bin 或 /usr/bin 中时,上面才会找到 ‘perl’ 。 这可以与 PATH 的当前值相结合,以提供更大的灵活性。 请注意, -S 和 -P 选项之间不需要空格:
#!/usr/bin/env -S-P/usr/local/bin:/usr/bin:${PATH} perl
env 实用程序接受 - 选项作为 -i 的同义词。
printenv(1), sh(1), execvp(3), login.conf(5), environ(7)
env 实用程序符合 IEEE Std 1003.1-2001 (“POSIX.1”) 。 -0, -L, -P, -S, -U, -u 和 -v 选项是 FreeBSD 支持的非标准扩展,但在其他操作系统上可能不可用。
env 命令出现在 4.4BSD 中。 FreeBSD 6.0 中添加了 -P, -S 和 -v 选项。 FreeBSD 13.0 中添加了 -0, -L 和 -U 选项。
出于显而易见的原因, env 实用程序不处理名称中带有等号 (‘=’) 的 utility 值。
env 实用程序在处理 -S 选项时不考虑多字节字符,这可能会导致某些语言环境中的结果不正确。
March 3, 2021
FreeBSD 13.1-RELEASE
CHMOD(1)
CHMOD(1)
FreeBSD General Commands Manual
CHMOD(1)
chmod —
改变文件模式
chmod [-fhv] [-R [-H | -L | -P]] mode file ...
chmod 实用程序修改由 mode 操作数指定的列出文件的文件模式位。
选项如下:
如果 chmod 无法修改 file 的模式,则不要显示诊断消息,也不要修改退出状态以反映此类故障。
如果指定了 -R 选项,则命令行上的符号链接会被跟随,因此不受该命令的影响。 (不遵循树遍历期间遇到的符号链接。)
如果文件是符号链接,请更改链接本身的模式,而不是链接指向的文件。
如果指定了 -R 选项,则遵循所有符号链接。
如果指定了 -R 选项,则不遵循符号链接。 这是默认设置。
更改以文件为根的文件层次结构的模式,而不仅仅是文件本身。 当使用 “.*” 等通配符时,请注意无意中将 “..” 硬链接匹配到父目录。
使 chmod 变得冗长,在修改模式时显示文件名。 如果多次指定 -v 标志,还将以八进制和符号表示法打印文件的旧模式和新模式。
除非指定了 -R 选项,否则 -H -、 -L 和 -P 选项将被忽略。 此外,这些选项相互覆盖,命令的操作由最后一个指定的操作决定。
如果 chmod 接收到 SIGINFO 信号(参见 stty(1) 和 status 参数),则显示当前文件名以及旧模式和新模式。
只有文件的所有者或超级用户才被允许更改文件的模式。
The chmod utility exits 0 on success, and >0 if an error occurs.
模式可以是绝对的或象征性的。 绝对模式是由以下一个或多个值的总和构成的八进制数:
(setuid 位)。 设置了该位的可执行文件将在有效 uid 设置为文件所有者的 uid 的情况下运行。 如果底层文件系统支持此功能,则具有此位集的目录将强制在其中创建的所有文件和子目录由目录所有者拥有,而不是由创建进程的 uid 拥有:参见 chmod(2) 和 suiddir 选项 mount(8) 。
(setgid 位)。 设置了此位的可执行文件将运行时将有效 gid 设置为文件所有者的 gid。
(粘性位)。 请参阅 chmod(2) 和 sticky(7) 。
允许所有者阅读。
允许所有者写入。
对于文件,允许所有者执行。 对于目录,允许所有者在目录中搜索。
允许群组成员阅读。
允许组成员写入。
对于文件,允许组成员执行。 对于目录,允许组成员在目录中搜索。
允许他人阅读。
允许别人写。
对于文件,允许他人执行。 对于目录,允许其他人在目录中搜索。
例如,允许所有者读、写和执行,组成员读和执行,其他人读和执行,并且没有 set-uid 或 set-gid 行为的绝对模式是755(400+200+100+040 +010+004+001)。
符号模式由以下语法描述:
mode ::= clause [, clause ...] clause ::= [who ...] [action ...] action action ::= op [perm ...] who ::= a | u | g | o op ::= + | - | = perm ::= r | s | t | w | x | X | u | g | o
who 符号 ``u''、 ``g'' 和 ``o'' 分别指定用户、组和模式位的其他部分。 who 符号 ``a'' 等价于 ``ugo''。
perm 符号表示模式位的部分,如下所示:
r
读取的位。
s
set-user-ID-on-execution 和 set-group-ID-on-execution 位。
t
粘性位。
w
写入位。
x
执行/搜索位。
X
如果文件是目录或任何执行/搜索位设置为原始(未修改)模式,则执行/搜索位。带有 perm 符号 ``X'' 的操作仅与 op 符号 ``+'' 一起有意义,并且在所有其他情况下都被忽略。
u
文件原始模式中的用户权限位。
g
文件原始模式中的组权限位。
o
文件原始模式中的其他权限位。
op 符号表示执行的操作,如下所示:
如果没有为 perm 提供值,``+'' 操作无效。 如果没有为 who 提供值,则设置 perm 中指定的每个权限位,文件模式创建掩码(请参阅 umask(2) )中的相应位是明确的。 否则,设置由指定的 who 和 perm 值表示的模式位。
-
如果没有为 perm 提供值,则 ``-'' 操作无效。 如果没有为 who 提供值,则清除 perm 中指定的每个权限位,其中设置了文件模式创建掩码中的相应位。 否则,由指定的 who 和 perm 值表示的模式位将被清除。
=
由 who 值指定的模式位被清除,或者,如果没有指定 who 值,则所有者、组和其他模式位被清除。 然后,如果没有为 who 提供值,则设置 perm 中指定的每个权限位,文件模式创建掩码中的相应位是明确的。 否则,设置由指定的 who 和 perm 值表示的模式位。
每个 clause 指定要对模式位执行的一个或多个操作,并且每个操作都按指定的顺序应用于模式位。
仅对其他权限的操作(由符号“o”本身指定)与 perm 符号 “s” 或 “t” 相结合,将被忽略。
目录上的 “w” 权限将允许文件创建、重定位和复制到该目录。 在目录本身中创建的文件将继承其组 ID。
使任何人都可以读取文件,并且只能由所有者写入文件。
拒绝组和其他人的写权限。
将读取和写入权限设置为通常的默认值,但保留当前设置的任何执行权限。
如果任何人都可以搜索/可执行目录或文件,则让每个人都可以搜索/可执行该目录或文件。
使每个人都可以读取/可执行文件,并且只能由所有者写入。
清除组和其他的所有模式位。
设置组位等于用户位,但清除组写入位。
-v 选项是非标准的,不建议在脚本中使用它。
chflags(1), install(1), setfacl(1), chmod(2), stat(2), umask(2), fts(3), setmode(3), sticky(7), symlink(7), chown(8), mount(8)
chmod 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容,但该标准中未包含的 perm 符号 “t” 除外。
chmod 命令出现在 Version 1 AT&T UNIX 中。
马的顽皮部位没有 perm 选项。
January 7, 2017
FreeBSD 13.1-RELEASE
CHPASS(1)
CHPASS(1)
FreeBSD General Commands Manual
CHPASS(1)
chpass, chfn, chsh, ypchpass, ypchfn, ypchsh —
添加或更改用户数据库信息
chpass [-a list] [-e expiretime] [-p encpass] [-s newshell] [user] ypchpass [-loy] [-a list] [-d domain] [-e expiretime] [-h host] [-p encpass] [-s newshell] [user]
chpass 实用程序允许编辑与 user 关联的用户数据库信息,默认情况下,与当前用户关联。
chfn, chsh, ypchpass, ypchfn 和 ypchsh 实用程序的行为与 chpass 相同。 (只有一个程序。)
信息被格式化并提供给编辑器进行更改。
仅显示允许用户更改的信息。
选项如下:
list
超级用户可以直接提供用户数据库条目,格式由 passwd(5) 指定,作为参数。 此参数必须是所有用户数据库字段的冒号 (“:”) 分隔列表,尽管它们可能为空。
expiretime
更改帐户过期时间。 此选项用于设置脚本的过期时间,就像在交互式编辑器中完成一样。
encpass
超级用户可以直接提供加密的密码字段,以 crypt(3) 使用的格式作为参数。
newshell
尝试将用户的 shell 更改为 newshell 。
可能的显示项目如下:
Login:
用户的登录名
Password:
用户的加密密码
Uid:
用户登录
Gid:
用户登录组
Class:
用户的一般分类
Change:
密码更改时间
Expire:
账户到期时间
Full Name:
用户的真实姓名
Office Location:
用户办公地点 (1)
Office Phone:
用户办公电话 (1)
Home Phone:
用户家庭电话 (1)
Other Information:
为用户 (1) 定义的任何本地参数
Home Directory:
用户的主目录
Shell:
用户的登录外壳
NOTE(1) -
在实际的 master.passwd 文件中,这些字段是嵌入在 FullName 字段中的逗号分隔字段。
login 字段是用于访问计算机帐户的用户名。
password 字段包含用户密码的加密形式。
uid 字段是与 login 字段关联的数字。 这两个字段在系统中(并且通常在一组系统中)应该是唯一的,因为它们控制文件访问。
虽然可以有多个具有相同登录名和/或相同用户 ID 的条目,但这样做通常是错误的。 处理这些文件的例程通常只会返回多个条目中的一个,并且该条目是随机选择的。
gid 字段是用户在登录时将被放置的组。 由于 BSD 支持多个组(参见 groups(1) ),这个字段目前没有什么特殊意义。 该字段可以填写数字或组名(请参阅 group(5) )。
class 字段引用 /etc/login.conf 中的类描述,通常用于在用户登录时初始化用户的系统资源限制。
change 字段是必须更改密码的日期。
expire 字段是帐户到期的日期。
change 和 expire 字段都应以 “month day year” 的形式输入,其中 month 为月名(前三个字符即可), day 为月日, year 为年。
五个字段可用于存储用户的 full name 、 office location 、 work 和 home telephone ,最后是 other information ,这些信息是一个逗号分隔的字符串,表示任何附加的 gecos 字段(通常用于特定于站点的用户信息)。 请注意, finger(1) 将在标题 Office: 下一起显示办公室位置和办公室电话。
用户的 home directory 是用户登录时所在的完整 UNIX 路径名。
shell 字段是用户喜欢的命令解释器。 如果 shell 字段为空,则假定为 Bourne shell, /bin/sh 。 当更改登录 shell 而不是超级用户时,用户可能不会从非标准 shell 更改或更改为非标准 shell。 非标准定义为在 /etc/shells 中找不到的 shell。
验证信息后, chpass 使用 pwd_mkdb(8) 更新用户数据库。
除非环境变量 EDITOR 设置为备用编辑器,否则将使用 vi(1) 编辑器。 当编辑器终止时,信息会被重新读取并用于更新用户数据库本身。 只有用户或超级用户可以编辑与用户相关的信息。
有关设置 PW_SCAN_BIG_IDS 环境变量的影响的说明,请参见 pwd_mkdb(8) 。
chpass 实用程序也可以与 NIS 一起使用,但是有一些限制。 目前, chpass 只能通过 rpc.yppasswdd(8) 更改 NIS passwd 映射,这通常只允许更改用户的密码、shell 和 GECOS 字段。 除非由 NIS 主服务器上的超级用户调用,否则 chpass (以及类似的 passwd(1)) 不能使用 rpc.yppasswdd(8) 服务器更改其他用户信息或向 NIS passwd 映射添加新记录。 此外, rpc.yppasswdd(8) 需要密码验证才能进行任何更改。 唯一允许在不提供密码的情况下提交更改的用户是 NIS 主服务器上的超级用户;所有其他用户,包括在 NIS 客户端(和 NIS 从属服务器)上具有 root 权限的用户,都必须输入密码。 (NIS 主服务器上的超级用户被允许绕过这些限制,主要是为了方便:对 NIS 主服务器具有 root 访问权限的用户已经拥有更新 NIS 映射所需的权限,但手动编辑映射源文件可能很麻烦。
注意:这些例外仅适用于 NIS 主服务器是 FreeBSD 系统时)。
因此,除非另有说明,当 chpass 与 NIS 一起使用时,以下限制适用:
只有外壳和 GECOS 信息可以更改。 所有其他字段都受到限制,即使超级用户调用了 chpass 。 虽然可以添加对更改其他字段的支持,但这会导致与其他支持 NIS 的系统的兼容性问题。 即使超级用户可以在编辑条目时为其他字段提供数据,额外的信息(除了密码 — 见下文)将被静默丢弃。
例外:NIS 主服务器上的超级用户被允许更改任何字段。
需要密码验证。 chpass 实用程序将在进行任何更改之前提示用户输入 NIS 密码。 如果密码无效,所有更改都将被丢弃。
例外:NIS 主服务器上的超级用户可以在不提供密码的情况下提交更改。 (超级用户可以选择使用 -o 标志关闭此功能,如下所述。)
当使用 NIS 支持编译 chpass 时,还有一些额外的选项标志可用:
domain
指定特定的 NIS 域。 chpass 实用程序默认使用由 domainname(1) 实用程序设置的系统域名。 -d 选项可用于覆盖默认值,或在未设置系统域名时指定域。
host
指定要查询的 NIS 服务器的名称或地址。 通常, chpass 将与在 master.passwd 或 passwd 映射中指定的 NIS 主控主机通信。 在尚未配置为 NIS 客户端的主机上,除非用户提供服务器的主机名,否则程序无法确定此信息。 请注意,指定的主机名不必是 NIS 主服务器的主机名;给定 NIS 域中的任何服务器(主服务器或从服务器)的名称都可以。
使用 -d 选项时,主机名默认为 “localhost” 。 -h 选项可以与 -d 选项一起使用,在这种情况下,用户指定的主机名将覆盖默认值。
如果用户同时存在于本地和 NIS 数据库中,则强制 chpass 修改用户密码信息的本地副本。
与 rpc.yppasswdd(8) (“old-mode”) 通信时强制使用基于 RPC 的更新。 当 NIS 主服务器上的超级用户调用时, chpass 允许使用专用的、非基于 RPC 的机制(在本例中为 UNIX 域套接字)对 NIS 密码映射进行无限制的更改。 -o 标志可用于强制 chpass 使用标准更新机制。 此选项主要用于测试目的。
的相反效果。 这个标志在很大程度上是多余的,因为如果启用了 NIS, chpass 默认会在 NIS 条目上运行。
/etc/master.passwd
用户数据库
/etc/passwd
版本 7 格式的密码文件
/etc/chpass.XXXXXX
密码文件的临时副本
/etc/shells
批准的 shell 列表
将当前用户的 shell 更改为 ‘/usr/local/bin/zsh’:
chsh -s /usr/local/bin/zsh
finger(1), login(1), passwd(1), getusershell(3), login.conf(5), passwd(5), pw(8), pwd_mkdb(8), vipw(8) Robert Morris and Ken Thompson, UNIX Password security.
chpass 实用程序出现在 4.3BSD-Reno 中。
用户信息应该(并且最终将)存储在其他地方。
November 17, 2020
FreeBSD 13.1-RELEASE
DIFF3(1)
DIFF3(1)
User Commands
DIFF3(1)
diff3 - 逐行比较三个文件
diff3 [OPTION]... MYFILE OLDFILE YOURFILE
逐行比较三个文件。
-e --ed
将 OLDFILE 到 YOURFILE 的未合并更改输出到 MYFILE。
-E --show-overlap
输出未合并的更改,包围冲突。
-A --show-all
输出所有变化,包围冲突。
-x --overlap-only
输出重叠变化。
-X
输出重叠的变化,将它们括起来。
-3 --easy-only
输出未合并的非重叠更改。
-m --merge
输出合并文件而不是 ed 脚本 (默认 -A).
-L LABEL --label=LABEL
使用 LABEL 代替文件名。
-i
将 `w' 和 `q' 命令附加到 ed 脚本。
-a --text
将所有文件视为文本。
--strip-trailing-cr
在输入时去除尾随回车。
-T --initial-tab
通过在前面添加一个 tab 来使选项卡对齐。
--diff-program=PROGRAM
使用 PROGRAM 比较文件。
-v --version
输出版本信息。
--help
输出此帮助。
如果 FILE 是 `-',则读取标准输入。退出状态为 0 表示成功,1 表示冲突,2 表示故障。
由 Randy Smith 撰写。
向 报告错误。
版权所有 © 2004 Free Software Foundation, Inc。- 这是免费软件;查看复制条件的来源。没有保修;甚至不考虑适销性或特定用途的适用性。
diff3 的完整文档作为 Texinfo 手册进行维护。如果 info 和 diff3 程序已正确安装在您的站点上,则命令
info diff3
应该可以让您访问完整的手册。
April 2004
diffutils 2.8.7
不鼓励向本地密码数据库添加新记录。 chpass 实用程序将允许管理员在启用 NIS 时将新记录添加到本地密码数据库,但这可能会导致一些混乱,因为新记录附加到主密码文件的末尾,通常在特殊的 NIS '+ 之后' 条目。 NIS 运行时,管理员应使用 vipw(8) 修改本地密码文件。
允许 NIS 主服务器上的超级用户向 NIS 密码映射添加新记录,前提是 rpc.yppasswdd(8) 服务器已使用 -a 标志启动以允许添加(默认情况下拒绝它们)。 chpass 实用程序默认尝试更新本地密码数据库;要改为更新 NIS 映射,请使用 -y 标志调用 chpass。
不允许更改密码。 用户应该使用 passwd(1) 或 yppasswd(1) 来更改他们的 NIS 密码。 超级用户可以指定新密码(即使 “Password:” 字段未显示在编辑器模板中,超级用户也可以手动添加),但即使是超级用户也必须提供用户的原始密码,否则 rpc.yppasswdd(8) 将拒绝更新 NIS 映射。
例外:NIS 主服务器上的超级用户可以使用 chpass 更改用户的 NIS 密码。
comm [-123i] file1 file2
comm 实用程序读取 file1 和 file2 ,它们应该按词法排序,并生成三个文本列作为输出:仅在 file1 中的行;仅在 file2 中的行;和两个文件中的行。
文件名 ``-'' 表示标准输入。
可以使用以下选项:
禁止打印第 1 列,仅在 file1 中的行。
禁止打印第 2 列,仅在 file2 中的行。
禁止打印第 3 列,两者共有的行。
不区分大小写的行比较。
每列前面都会有许多制表符,这些制表符的数量等于正在打印的编号较低的列的数量。 例如,如果第 2 列被抑制,则第 1 列中打印的行前面不会有任何制表符,而第 3 列中打印的行将有一个。
comm 实用程序假定文件是按词法排序的;所有字符都参与行比较。
LANG 、 LC_ALL 、 LC_COLLATE 和 LC_CTYPE 环境变量会影响 comm 的执行,如 environ(7) 中所述。
The comm utility exits 0 on success, and >0 if an error occurs.
假设一个名为 example.txt 的文件具有以下内容:
a b c d
仅在 example.txt 中显示行,仅在 stdin 和公共行中显示行:
$ echo -e "B\nc" | comm example.txt - B a b c d
仅显示进行不区分大小写比较的常用行:
$ echo -e "B\nc" | comm -1 -2 -i example.txt - b c
cmp(1), diff(1), sort(1), uniq(1)
comm 实用程序符合 IEEE Std 1003.2-1992 (“POSIX.2”) 。
-i 选项是对
comm 命令出现在 Version 4 AT&T UNIX 中。
July 27, 2020
FreeBSD 13.1-RELEASE
DF(1)
DF(1)
FreeBSD General Commands Manual
DF(1)
df —
显示可用磁盘空间
df [--libxo] [-b | -g | -H | -h | -k | -m | -P] [-acilnT] [-,] [-t type] [file | filesystem ...]
df 实用程序显示有关指定已安装 file system 或 file 系统上的可用磁盘空间量的统计信息。 默认情况下,块计数显示为假定块大小为 512 字节。 如果既没有指定文件也没有指定文件系统操作数,则显示所有已挂载文件系统的统计信息(受下面的 -t 选项影响)。
可以使用以下选项:
通过 libxo(3) 以不同的人类和机器可读格式生成输出。 有关命令行参数的详细信息,请参阅 xo_parse_args(3) 。
显示所有挂载点,包括使用 MNT_IGNORE 标志挂载的那些。 这对于在命令行上指定的文件系统是隐含的。
显式使用 512 字节块,覆盖环境中的任何 BLOCKSIZE 规范。 这与 -P 选项相同。 -k 选项覆盖此选项。
显示总计。
使用 1073741824 字节(1 Gibibyte)块而不是默认值。 这会覆盖环境中的任何 BLOCKSIZE 规范。
“Human-readable” 输出。 使用单位后缀:Byte、Kibibyte、Mebibyte、Gibibyte、Tebibyte 和 Pebibyte(基于 1024 的幂),以便将位数减少到四位或更少。
, -``-si
与 -h 相同,但基于 1000 的幂。
包括有关空闲和已用 inode 数量的统计信息。 结合 -h 或 -H 选项,inode 的数量按 1000 的幂进行缩放。
使用 1024 字节(1 Kibibyte)块而不是默认值。 这会覆盖 -P 选项和环境中的任何 BLOCKSIZE 规范。
仅显示有关本地安装的文件系统的信息。
使用 1048576 字节(1 兆字节)块而不是默认值。 这会覆盖环境中的任何 BLOCKSIZE 规范。
打印出之前从文件系统中获得的统计信息。 如果一个或多个文件系统可能处于无法提供统计信息的状态,则应使用此选项。 指定此选项时, df 将不会从文件系统请求新的统计信息,但会以先前获得的可能陈旧的统计信息进行响应。
显式使用 512 字节块,覆盖环境中的任何 BLOCKSIZE 规范。 这与 -b 选项相同。 -k 选项覆盖此选项。
仅打印指定类型的文件系统的统计信息。 可以在逗号分隔的列表中指定一种以上的类型。 文件系统类型列表可以以 “no” 为前缀,以指定 不应 对其采取操作的文件系统类型。 例如, df 命令:
df -t nonfs,nullfs
列出除 NFS 和 NULLFS 类型之外的所有文件系统。 lsvfs(1) 命令可用于找出系统上可用的文件系统类型。
包括文件系统类型。
-,
(逗号)使用由 localeconv(3)- 返回的非货币分隔符(通常是逗号或句点)将打印尺寸分组并以千为单位分隔。 如果未设置区域设置,或者区域设置没有非货币分隔符,则此选项无效。
指定报告块计数的单位。 这使用 getbsize(3) ,它允许使用字母 k (对于 1024 字节的倍数)、 m (对于 1048576 字节的倍数)或 g 对于 gibibytes)进行缩放的字节或数字单位。 允许的范围是 512 字节到 1 GB。 如果该值在外部,它将被设置为适当的限制。
显示所有挂载点的可读可用磁盘空间,包括文件系统类型:
$ df -ahT Filesystem Type Size Used Avail Capacity Mounted on /dev/ada1p2 ufs 213G 152G 44G 78% / devfs devfs 1.0K 1.0K 0B 100% /dev /dev/ada0p1 ufs 1.8T 168G 1.5T 10% /data linsysfs linsysfs 4.0K 4.0K 0B 100% /compat/linux/sys /dev/da0 msdosfs 7.6G 424M 7.2G 5% /mnt/usb
显示以前收集的数据,包括除 devfs 或 linsysfs 文件系统之外的 inode 统计信息。 请注意, “no” 前缀会影响列表中的所有文件系统,并且 -t 选项只能指定一次:
$ df -i -n -t nodevfs,linsysfs Filesystem 1K-blocks Used Avail Capacity iused ifree %iused Mounted on /dev/ada1p2 223235736 159618992 45757888 78% 1657590 27234568 6% / /dev/ada0p1 1892163184 176319420 1564470712 10% 1319710 243300576 1% /data /dev/da0 7989888 433664 7556224 5% 0 0 100% /mnt/usb
显示包含文件 /etc/rc.conf 的文件系统的人类可读信息:
$ df -h /etc/rc.conf Filesystem Size Used Avail Capacity Mounted on /dev/ada1p2 213G 152G 44G 78% /
与上面相同,但指定了一些文件系统:
$ df -h /dev/ada1p2 Filesystem Size Used Avail Capacity Mounted on /dev/ada1p2 213G 152G 44G 78% /
lsvfs(1), quota(1), fstatfs(2), getfsstat(2), statfs(2), getbsize(3), getmntinfo(3), libxo(3), localeconv(3), xo_parse_args(3), fstab(5), mount(8), pstat(8), quot(8), swapinfo(8)
除大多数选项外, df 实用程序符合 IEEE Std 1003.1-2004 (“POSIX.1”) ,它仅定义 -k, -P 和 -t 选项。
df 命令出现在 Version 1 AT&T UNIX 中。
如果指定了文件或文件系统,则忽略 -n 标志。 此外,如果用户无法访问安装点,则文件系统信息可能已过时。
-b 和 -P 选项是相同的。 前者来自 BSD 传统,后者是 IEEE Std 1003.1-2004 (“POSIX.1”) 一致性所必需的。
October 5, 2020
FreeBSD 13.1-RELEASE
CHGRP(1)
CHGRP(1)
FreeBSD General Commands Manual
CHGRP(1)
chgrp —
更改组
chgrp [-fhvx] [-R [-H | -L | -P]] group file ...
chgrp 实用程序将由每个 file 操作数命名的文件的 group 设置为由组操作数指定的组 ID。
可以使用以下选项:
如果指定了 -R 选项,则命令行上的符号链接会被跟随,因此不受该命令的影响。 (不遵循遍历过程中遇到的符号链接。)
如果指定了 -R 选项,则遵循所有符号链接。
如果指定了 -R 选项,则不遵循符号链接。 这是默认设置。
更改以文件为根的文件层次结构的组 ID,而不仅仅是文件本身。 当使用 “.*” 等通配符时,请注意无意中将 “..” 硬链接匹配到父目录。
force 选项忽略错误,除了使用错误并且不查询奇怪的模式(除非用户没有适当的权限)。
如果文件是符号链接,则链接本身的组 ID 会更改,而不是指向的文件。
使 chgrp 变得冗长,在组被修改时显示文件。 如果多次指定 -v 标志, chgrp 将打印文件名,后跟旧的和新的数字组 ID。
不遍历文件系统挂载点。
除非指定了 -R 选项,否则 -H -、 -L 和 -P 选项将被忽略。 此外,这些选项相互覆盖,命令的操作由最后一个指定的操作决定。
group 操作数可以是组数据库中的组名,也可以是数字组 ID。 如果组名也是数字组 ID,则操作数用作组名。
调用 chgrp 的用户必须属于指定的组并且是文件的所有者,或者是超级用户。
如果 chgrp 接收到 SIGINFO 信号(参见 stty(1) 的 status 参数),则显示当前文件名以及旧的和新的组名。
/etc/group
组 ID 文件
The chgrp utility exits 0 on success, and >0 if an error occurs.
在该系统的早期版本中,符号链接没有组。
-v 和 -x 选项是非标准的,不建议在脚本中使用它们。
chown(2), fts(3), group(5), passwd(5), symlink(7), chown(8)
chgrp 实用程序应与 IEEE Std 1003.2 (“POSIX.2”) 兼容。
January 7, 2017
FreeBSD 13.1-RELEASE
mailx发送和接收邮件
mail [-dEiInv] [-s subject] [-c cc-addr] [-b bcc-addr] [-F] to-addr ... [-sendmail-option ...] mail [-dEHiInNv] [-F] -f [name] mail [-dEHiInNv] [-F] [-u user] mail [-d] -e [-f name]
mail 实用程序是一个智能邮件处理系统,它的命令语法让人想起 ed(1) ,其中的行被消息替换。
可以使用以下选项:
详细模式。 交付的详细信息显示在用户的终端上。
调试模式。 有关详细信息,请参阅 debug 邮件选项。
测试(默认情况下,系统)邮箱中是否存在邮件。 如果有邮件则返回退出状态 0;否则,返回退出状态 1。
只写一个标题摘要,然后退出。
不要发送正文为空的消息。 这对于来自 cron(8) 脚本的管道错误很有用。
忽略 tty 中断信号。 这在嘈杂的电话线上使用 mail 时特别有用。
即使输入不是终端,也强制 mail 以交互模式运行。 特别是,发送邮件时的 ‘~’ 特殊字符仅在交互模式下有效。
启动时禁止读取系统范围的 mail.rc 文件。
在阅读邮件或编辑邮件文件夹时禁止初始显示邮件标题。
-s subject
在命令行上指定 subject 。 (只有 -s 标志之后的第一个参数用作主题;小心引用包含空格的主题。)
-c cc-addr
将抄送副本发送到用户的 cc-addr 列表。 cc-addr 参数应该是一个以逗号分隔的名称列表。
-b bcc-addr
向用户的密件 bcc-addr 列表发送密件抄送。 bcc-addr 参数应该是一个以逗号分隔的名称列表。
-f [mbox]
读入您的 mbox (或指定文件)的内容进行处理;当您 quit 时, mail 会将未删除的消息写回此文件。
将消息记录在以第一个收件人命名的文件中。 该名称是在邮件标题的 “To:” 行中首先找到的地址的登录名部分。 覆盖 record 变量(如果已设置)。
-u user
相当于:
mail -f /var/mail/user
在启动时, mail 将按顺序执行系统命令文件 /usr/share/misc/mail.rc 、 /usr/local/etc/mail.rc 和 /etc/mail.rc 中的命令,除非系统明确告知不要这样做使用 -n 选项。 接下来,执行用户个人命令文件 ~/.mailrc 中的命令。 然后, mail 实用程序检查其命令行选项以确定是否要发送新消息,或者是否要读取现有邮箱。
要将消息发送给一个或多个人,可以使用参数调用 mail ,这些参数是邮件将被发送到的人的姓名。 然后,您需要输入您的消息,然后在一行的开头输入 ⟨control-D⟩ 。 回复或发送邮件 下面的部分描述了可帮助您撰写信件的一些 mail 功能。
在正常使用中, mail 不提供任何参数,并在邮局检查您的邮件,然后打印出找到的每条邮件的一行标题。 当前消息最初是第一条消息(编号为 1),可以使用 print 命令(可以缩写为 p )打印。 您可以像在 ed(1) 中的行之间移动一样在消息之间移动,使用命令 + 和 - 前后移动以及简单的数字。
检查消息后,您可以 delete (d) 消息或 reply (r) 消息。 删除会导致 mail 程序忘记该消息。 这不是不可逆转的;消息可以通过给出它的编号来 undeleted (u) ,或者可以通过给出 exit (x) 命令中止 mail 会话。 但是,已删除的消息通常会消失,再也看不到了。
可以给诸如 print 和 delete 之类的命令一个消息编号列表作为参数,以一次应用于多个消息。 因此, “delete 1 2” 删除消息 1 和 2,而 “delete 1-5” 删除消息 1 到 5。 特殊名称 ‘*’ 表示所有消息, ‘$’ 表示最后一条消息;因此,可以在 “top *” 中使用打印消息前几行的命令 top 来打印所有消息的前几行。
您可以使用 reply 命令设置对消息的响应,将其发回给发件人。 然后,您输入的文本(直到文件结尾)定义了消息的内容。 在撰写邮件时, mail 会特别处理以字符 ‘~’ 开头的行。 例如,键入 ~m (单独一行)会将当前消息的副本放入响应中,将其右移一个制表位(参见下面的 indentprefix 变量)。 其他转义将设置主题字段,添加和删除消息的收件人,并允许您转义到编辑器以修改消息或转义到 shell 以运行某些命令。 (这些选项在下面的摘要中给出。)
您可以使用 quit (q) 命令结束 mail 会话。 已检查的消息将转到您的 mbox 文件,除非它们已被删除,在这种情况下它们将被丢弃。 未经审查的邮件会返回邮局。(参见上面的 -f 选项)。
也可以创建个人分发列表,例如,您可以将邮件发送给 “cohorts” 并发送给一组人。 可以通过放置类似的行来定义此类列表
alias cohorts bill ozalp jkf mark kridle@ucbcory
在您的主目录中的文件 .mailrc 中。 此类别名的当前列表可以在 mail 中使用 alias 命令显示。 可以通过编辑 /etc/mail/aliases 创建系统范围的分发列表,参见 aliases(5) 和 sendmail(8) ;这些以不同的语法保存。 在您发送的邮件中,个人别名将在发送给其他人的邮件中扩展,以便他们能够 reply 收件人。 发送邮件时系统范围的别名不会扩展,但任何返回到机器的回复都会扩展系统范围的别名,因为所有邮件都通过 sendmail(8) 。
mail 实用程序有许多选项可以在 .mailrc 文件中设置以改变其行为;因此 “set askcc” 启用 askcc 功能。 (这些选项总结如下。)
(改编自邮件 Mail Reference Manual 。)
每个命令都单独在一行上键入,并且可以在命令词之后使用参数。 该命令不需要全部输入 — 使用与输入前缀匹配的第一个命令。 对于以消息列表为参数的命令,如果没有给出消息列表,则使用满足命令要求的下一条消息转发。 如果当前消息的前面没有消息,则向后搜索,如果根本没有好的消息,则 mail 类型 “No applicable messages” 并中止命令。
打印出前面的消息。 如果给定一个数字参数 n, 则转到前 n N 条消息并打印它。
忽略该行的其余部分作为注释。
打印命令的简短摘要。
执行后面的 shell(参见 sh(1) 和 csh(1)) 命令。
(P) 与 print 类似,但也打印出忽略的标题字段。 另请参阅 print, ignore 和 retain 。
(R) 回复发起人。 不回复原始邮件的其他收件人。
(T) Print 与打印命令相同。
(a) 不带参数,打印出所有当前定义的别名。 使用一个参数,打印出该别名。 使用多个参数,创建新别名或更改旧别名。
(alt) 如果您在多台机器上拥有帐户, alternates 命令很有用。 它可用于通知 mail 列出的地址确实是您。 当您 reply 邮件时, mail 不会将邮件副本发送到 alternates 列表中列出的任何地址。 如果给定的 alternates 命令没有参数,则显示当前的替代名称集。
(c)- 将用户的工作目录更改为指定的,如果给定的话。 如果没有给出目录,则更改为用户的登录目录。
(co) copy 命令的作用与 save 相同,只是它不会在您 quit 时将用于删除的消息标记为删除。
(d) 将消息列表作为参数并将它们全部标记为已删除。 已删除的消息不会保存在 mbox 中,它们也不能用于大多数其他命令。
(也 dt) 删除当前消息并打印下一条消息。 如果没有下一条消息, mail 会显示 “at EOF” 。
(e) 获取消息列表并将文本编辑器依次指向每个消息。 从编辑器返回时,该消息被读回。
(ex 或 x) 在不修改用户的系统邮箱、他的 mbox 文件或他在 -f 中的编辑文件的情况下立即返回到 shell。
(fi) 同 folder 。
列出文件夹目录中的文件夹名称。
(fo) folder 命令切换到一个新的邮件文件或文件夹。 没有参数,它会告诉您当前正在阅读哪个文件。 如果你给它一个参数,它会写出你在当前文件中所做的更改(例如删除)并读入新文件。 一些特殊的约定被认可为名称。 ‘#’ 表示上一个文件, ‘%’ 表示您的系统邮箱, “%user” 表示用户的系统邮箱, ‘&’ 表示您的 mbox 文件, “+folder” 表示您的文件夹目录下的文件。
(f) 获取消息列表并打印它们的消息标题。
(h) 列出当前的报头范围,这是一个 18 个消息组。 如果给出 ‘+’ 参数,则打印下一个 18 个消息组,如果给出 ‘-’ 参数,则打印前一个 18 个消息组。
? 的同义词
(ho, 也 preserve) 获取消息列表并将其中的每条消息标记为保存在用户的系统邮箱中,而不是保存在 mbox 中。 不覆盖 delete 命令。
将命名的标题字段列表添加到 ignored list. 列表中。 当您打印消息时,忽略列表中的标题字段不会打印在您的终端上。 此命令对于抑制某些机器生成的标头字段非常方便。 Type 和 Print 命令可用于打印整个消息,包括忽略的字段。 如果 ignore 不带参数执行,它会列出当前被忽略的字段集。
合并在阅读邮件时收到的任何新邮件。 新消息被添加到消息列表的末尾,并且当前消息被重置为第一条新邮件消息。 这不会重新编号现有的消息列表,也不会导致保存到目前为止所做的任何更改。
(m) 将登录名和通讯组名作为参数,并将邮件发送给这些人。
指示在您退出时将消息列表发送到主目录中的 mbox 。 如果您 not 设置 hold 选项,这是消息的默认操作。
(mo) 获取消息列表并调用该列表上的寻呼机。
(n, 如 + 或 CR) 按顺序转到下一条消息并键入它。 使用参数列表,键入下一个匹配的消息。
(pre) hold 的同义词。
(p) 获取消息列表并在用户终端上键入每条消息。
(q) 终止会话,将所有未删除、未保存的消息保存在用户登录目录中的 mbox 文件中,保留其系统邮箱中标记为 hold 或 preserve 或从未引用的所有消息,并从其系统邮箱中删除所有其他消息。 如果会话期间有新邮件到达,则会给出消息 “You have new mail” 。 如果在编辑带有 -f 标志的邮箱文件时给出,则重写编辑文件。 除非重写编辑文件失败,否则会返回到 shell,在这种情况下,用户可以使用 exit 命令退出。
(r) 获取消息列表并将邮件发送给指定消息的发件人和所有收件人。 不得删除默认消息。
reply 的同义词。
将命名的标题字段列表添加到 retained list 中。 当您打印消息时,仅保留列表中的标题字段显示在您的终端上。 所有其他标头字段都被抑制。 type 和 print 命令可用于完整地打印消息。 如果在没有参数的情况下执行 retain ,它会列出当前保留的字段集。
(s) 获取消息列表和文件名,并将每条消息依次附加到文件末尾。 引号中的文件名,后跟行数和字符数会在用户终端上回显。
(se) 不带参数,打印所有变量值。 否则,设置选项。 参数的形式为 option=value ( ‘=’ 前后没有空格)或 option 。 引号可以放在赋值语句的任何部分来引用空格或制表符,即 “set indentprefix="->"”
Saveignore 是 save ignore print 和 type 的内容。 通过 save 保存消息或自动保存到 mbox 时,会过滤掉如此标记的标题字段。
Saveretain 是 save retain 是 print 和 type 的内容。 如此标记的标题字段是唯一在通过 save 保存或自动保存到 mbox 时与消息一起保存的字段。 Saveretain 覆盖 saveignore 。
(sh) 调用 shell 的交互式版本。
获取消息列表并打印出每条消息的字符大小。
source 命令从文件中读取命令。
获取消息列表并打印每行的前几行。 打印的行数由变量 toplines 控制,默认为 5。
(t) print 的同义词。
获取由 alias 命令定义的名称列表并丢弃记住的用户组。 组名不再具有任何意义。
(u) 获取消息列表并将每条消息标记为 not 删除。
(U) 获取消息列表并将每条消息标记为 not 读。
获取选项名称列表并丢弃它们的记忆值; set 的逆。
(v) 获取消息列表并在每条消息上调用显示编辑器。
(w) 与 save 类似,不同之处在于 只 保存消息体( (不包括 标题)。对于通过消息系统发送和接收源程序文本等任务非常有用。
(x) exit 的同义词。
mail 实用程序以窗口形式显示邮件标题,如 headers 命令中所述。 您可以使用 z 命令将 mail 的注意力转移到下一个窗口。 此外,您可以使用 z- 移动到上一个窗口。
以下是波浪号转义的摘要,用于编写消息以执行特殊功能。 波浪号转义仅在行首被识别。 “tilde escape” 这个名字有点用词不当,因为实际的 escape 字符可以通过选项转义来设置。
将 sign= 选项中的签名字符串插入到消息中。
将 Sign= 选项中的签名字符串插入到消息中。
~b name ...
将给定姓名添加到抄送收件人列表中,但不要使姓名在抄送:行中可见( “blind” 抄送)。
~c name ...
将给定名称添加到抄送收件人列表中。
将主目录中的 dead.letter 文件读入消息中。
对到目前为止收集的消息调用文本编辑器。 编辑会话完成后,您可以继续将文本附加到消息中。
~f messages
将命名消息读入正在发送的消息中。 如果未指定消息,则读入当前消息。 当前被忽略的消息头(通过 ignore 或 retain 命令)不包括在内。
~F messages
与 ~f 相同,除了包含所有消息头。
通过依次键入每个字段并允许用户将文本附加到末尾或使用当前终端擦除和终止字符来修改字段来编辑消息标题字段。
~i string
将命名选项的值插入到消息的文本中。
~m messages
将命名的消息读入正在发送的消息中,按制表符缩进或按 indentprefix 的值缩进。 如果未指定消息,则阅读当前消息。 当前被忽略的消息头(通过 ignore 或 retain 命令)不包括在内。
~M messages
与 ~m 相同,但包含所有消息头。
打印出到目前为止收集的消息,以消息头字段开头。
如果设置了 save ,则中止正在发送的消息,将消息复制到主目录中的 dead.letter 。
~r filename, ~r !command
~< filename, ~< !command
将命名文件读入消息中。 如果参数以 ‘!’ 开头,则字符串的其余部分被视为任意系统命令并被执行,标准输出插入到消息中。
~R string
使用 string 作为回复字段。
~s string
使命名字符串成为当前主题字段。
~t name ...
将给定名称添加到直接收件人列表中。
对目前收集的消息调用替代编辑器(由 VISUAL 环境变量定义)。 通常,替代编辑器将是屏幕编辑器。 退出编辑器后,您可以继续将文本附加到消息的末尾。
~w filename
将消息写入指定文件。
与 ~q 一样退出,但消息未保存在 dead.letter 中。
~! command
执行指示的 shell 命令,然后返回消息。
~| command, ~^ command
将消息作为过滤器通过命令传递。 如果命令没有输出或异常终止,则保留消息的原始文本。 命令 fmt(1) 通常用作重新调整消息的 command 。
~: mail-command, ~_ mail-command
执行给定的 mail 命令。 但是,并非所有命令都是允许的。
在输入时模拟文件结尾。
打印可用命令转义的摘要。
~~ string
在以单个 ‘~’ 开头的消息中插入文本字符串。 如果您更改了转义字符,那么您应该将该字符加倍以发送它。
选项可以使用 set 命令设置,也可以使用 unset 或 set noname 命令禁用。 选项可以是二元的,在这种情况下,只看它们是否设置很重要;或字符串,在这种情况下,实际值是有意义的。 如果未设置选项, mail 将查找同名的环境变量。 可用选项包括:
append
导致保存在 mbox 中的消息附加到末尾而不是前置。 这应该始终设置(最好在系统范围的 mail.rc 文件之一中)。 默认为 noappend 。
ask, asksub
使 mail 提示您输入您发送的每封邮件的主题。 如果您只用换行符响应,则不会发送主题字段。 默认为 asksub 。
askbcc
导致在每封邮件末尾提示您提供其他密件抄送收件人。 用换行符响应表示您对当前列表感到满意。 默认为 noaskbcc 。
askcc
导致在每封邮件的末尾提示您提供其他抄送收件人。 用换行符响应表示您对当前列表感到满意。 默认为 noaskcc 。
autoinc
使新邮件在到达时自动合并。设置此项类似于在每个提示符处发出 inc 命令,不同之处在于当前消息不会在新邮件到达时重置。 默认为 noautoinc 。
autoprint
使 delete 命令的行为类似于 dp; 因此,删除一条消息后,将自动键入下一条消息。 默认为 noautoprint 。
crt
带值的选项 crt 用作阈值,以确定在使用 PAGER 读取消息之前必须等待多长时间。 如果 crt 未设置值,则系统中存储的终端屏幕高度用于计算阈值(请参阅 stty(1)) 。 默认为 nocrt 。
debug
设置二进制选项 debug 与在命令行中指定 -d 相同,会导致 mail 输出对调试 mail 有用的各种信息。 如果在这种模式下调用 mail 发送邮件,所有的准备工作都会进行并上报,但邮件不会真正发送出去。 默认是 nodebug 。
dot
二进制选项 dot 使 mail 将一行中的句点单独解释为您正在发送的消息的终止符。 默认为 nodot 。
escape
如果已定义,则此选项的第一个字符给出用于代替 ‘~’ 的字符以表示转义。
flipr
反转 reply 和 Reply 命令的意义。 默认为 noflipr 。
folder
用于存储消息文件夹的目录名称。 如果此名称以 ‘/’ 开头, mail 将其视为绝对路径名;否则,将找到相对于您的主目录的文件夹目录。
header
如果已定义,则在阅读邮件或编辑邮件文件夹时最初显示邮件标题。 默认为 header 。 可以通过在命令行上提供 -N 标志来禁用此选项。
hold
默认情况下,此选项用于将邮件保存在系统邮箱中。 默认为 nohold 。
ignore
导致来自终端的中断信号被忽略并作为 @ 回显。 默认为 noignore 。
ignoreeof
与 dot 相关的一个选项是 ignoreeof ,它使 mail 拒绝接受 ⟨control-D⟩ 作为消息的结尾。 Ignoreeof 也适用于 mail 命令模式。 默认为 noignoreeof 。
indentprefix
~m 波浪号转义用于缩进消息的字符串,代替正常的制表符 (^I) 。 如果它包含空格或制表符,请务必引用该值。
metoo
通常,当扩展包含发件人的组时,会从扩展中删除发件人。 设置此选项会使发件人包含在组中。 默认为 nometoo 。
quiet
首次调用时禁止打印版本。默认为 noquiet 。
record
如果已定义,则给出用于记录所有外发邮件的文件的路径名。 如果未定义,则不保存外发邮件。 默认为 norecord 。
Replyall
反转 reply 和 Reply 命令的意义。 默认为 noReplyall 。
save
如果设置了此选项,并且您使用两个 RUBOUT 擦除或删除)中止消息, mail 会将部分字母复制到您主目录中的文件 dead.letter 中。 默认为 save 。
searchheaders
如果设置了这个选项,那么 “/x:y” 形式的消息列表说明符将扩展到所有在标题字段 x 中包含子字符串 y 的消息。 字符串搜索不区分大小写。 如果省略 x ,它将默认为 “Subject” 标题字段。 “/to:y” 形式是一种特殊情况,它将扩展到所有在 “To 、” “Cc” 或 “Bcc” 标头字段中包含子字符串 y 的消息。 “to” 的检查区分大小写,因此 “/To:y” 可用于将 y 的搜索限制为 “To:” 字段。 默认为 nosearchheaders 。
toplines
如果已定义,则给出要使用 top 命令打印的消息的行数;通常会打印前五行。 冗长的 设置选项
verbose
设置选项 verbose 与在命令行上使用 -v 标志相同。 当 mail 以详细模式运行时,消息的实际传递会显示在用户终端上。 默认为 noverbose 。
在发生中断或传递错误时保存部分消息的文件的路径名。 默认为 ~/dead.letter 。
在 edit 命令和 ~e 转义中使用的文本编辑器的路径名。 如果未定义,则使用默认编辑器。
用户主目录的路径名。
在 folders 命令中使用的目录列表器的路径名。 默认为 /bin/ls 。
用户邮箱的位置。 默认为 /var/mail 。
包含初始 mail 命令的文件的路径名。默认为 ~/.mailrc 。
邮箱文件的名称。 它可以是文件夹的名称。 默认是用户主目录中的 mbox 。
在 more 命令或设置 crt 变量时使用的程序的路径名。 如果未定义此选项,则使用默认分页器 less(1) 。
如果设置,将用于初始化传出消息的回复字段。
要在 ! 中使用的 shell 的路径名 命令和 ~! 转义。 如果未定义此选项,则使用默认 shell。
用于创建临时文件的目录的路径名。
在 visual 命令和 ~v 转义中使用的文本编辑器的路径名。
执行邮件的用户的登录名。
/var/mail/*
邮局。
~/mbox
用户的旧邮件。
~/.mailrc
给出初始 mail 命令的文件。 这可以通过设置 MAILRC 环境变量来覆盖。
/tmp/R*
临时文件。
/usr/share/misc/mail.*help
帮助文件。
/usr/share/misc/mail.rc
/usr/local/etc/mail.rc
/etc/mail.rc
系统范围的初始化文件。 每个文件都将按顺序获取(如果存在)
fmt(1), newaliases(1), vacation(1), aliases(5), sendmail(8)
mail 命令出现在版本 Version 1 AT&T UNIX 中。 该手册页源自最初由 The Mail Reference Manual Kurt Shoens 编写的邮件参考手册。
这里没有记录一些标志。 大多数对一般用户没有用。
通常, mail 只是一个指向 Mail 和 mailx 的链接,这可能会造成混淆。
alternates 列表的名称是不正确的英文(应该是 “alternatives”), 但为了兼容性而保留。
August 8, 2018
FreeBSD 13.1-RELEASE
ar -d [-T] [-f] [-j] [-v] [-z] archive file ... ar -m [-T] [-a position-after] [-b position-before] [-f] [-i position-before] [-j] [-s | -S] [-z] archive file ... ar -p [-T] [-f] [-v] archive [file ...] ar -q [-T] [-c] [-D] [-f] [-s | -S] [-U] [-v] [-z] archive file ... ar -r [-T] [-a position-after] [-b position-before] [-c] [-D] [-f] [-i position-before] [-j] [-s | -S] [-u] [-U] [-v] [-z] archive file ... ar -s [-j] [-z] archive ar -t [-f] [-T] [-v] archive [file ...] ar -x [-C] [-T] [-f] [-o] [-u] [-v] archive [file ...] ar -M ranlib [-D] [-U] archive ...
ar 实用程序创建并维护组合成档案的文件组。 创建存档后,可以向其中添加新文件,并且可以提取、删除或替换现有文件。
文件在存档中由它们的最后一个文件名组件命名,因此如果包含 “/” 的路径引用的文件被存档,它将由路径的最后一个组件命名。 同样,当将命令行中列出的路径与存档中存储的文件名匹配时,只会比较路径的最后一个组成部分。
ar- 的正常使用是用于创建和维护适合与链接编辑器 ld(1) 一起使用的库,尽管它不限于此目的。 ar 实用程序可以创建和管理用于加速链接编辑操作的存档符号表(请参阅 ar(5) )。 如果存档中存在符号表,它将通过存档的后续操作保持最新。
ranlib 实用程序用于将存档符号表添加到现有存档。
ar 实用程序支持以下选项:
-a member-after
当与选项 -m 一起使用时,此选项指定由参数 file ... 指定的归档成员移动到由参数 member-after 命名的归档成员之后。 当与选项 -r 一起使用时,此选项指定由参数 file ... 指定的文件添加到由参数 member-after 命名的存档成员之后。
-b member-before
当与选项 -m 一起使用时,此选项指定由参数 file ... 指定的存档成员移动到由参数 member-before 命名的存档成员之前。 当与选项 -r 一起使用时,此选项指定由参数 file ...- 指定的文件添加到由参数 member-before 命名的存档成员之前。
使用 -r 和 -q 选项创建新存档时抑制打印的信息性消息。
防止提取的文件替换文件系统中的同名文件。
从参数 archive 指定的存档中删除参数 file ... 命名的成员。 存档的符号表(如果存在)将更新以反映存档的新内容。
当与 -r 或 -q 选项结合使用时,与 -s 选项不带其他选项一起使用时,或者当作为 ranlib 调用时,插入 0 而不是真正的 mtime、uid 和 gid 值和 0644 而不是来自命名成员的文件模式通过参数 file ... 这确保了当成员内容相同时,生成的存档上的校验和是可重现的。 默认情况下启用此选项。 如果在命令行上指定了多个 -D 和 -U 选项,则最后一个优先。
与选项 -T 同义。
-i member-before
与选项 -b 同义。
此选项被接受但被忽略。
接受此选项是为了与 GNU ar(1) 兼容,但会被忽略。
在存档中移动由参数 file ... 指定的存档成员。 如果位置已由 -a, -b 或 -i 选项之一指定,则成员将移动到指定位置之前或之后。 如果未指定位置,则将指定的成员移动到存档的末尾。 如果档案有符号表,则更新它以反映档案的新内容。
从标准输入读取和执行 MRI 图书馆员命令。 ar 实用程序可以理解的命令在 MRI 图书管理员命令 部分中进行了描述。
提取成员时保留成员的原始修改时间。
将由参数 file ... 命名的指定存档成员的内容写入标准输出。 如果未指定任何成员,则归档中所有文件的内容将按照它们在归档中出现的顺序写入。
将参数 file ... 指定的文件附加到参数 archive 指定的存档,而不检查文件是否已存在于存档中。 存档符号表将根据需要更新。 如果参数 archive 指定的文件不存在,将创建一个新的档案。
在参数 archive 指定的存档中替换(添加)参数 file ... 指定的文件,必要时创建存档。 替换现有成员不会更改存档中成员的顺序。 如果在参数文件中命名的 file ... 不存在,则存档中与该名称匹配的现有成员不会更改。 除非指定了定位选项 -a, -b 或 -i 之一,否则新文件将添加到存档的末尾。 存档符号表(如果存在)将更新以反映存档的新状态。
将存档符号表(请参阅 ar(5) )添加到由参数 archive 指定的存档中。单独使用 -s 选项调用 ar 等效于调用 ranlib 。
不要生成存档符号表。
列出由参数 file ... 指定的文件,按它们在存档中出现的顺序排列,每行一个。 如果未指定文件,则列出存档中的所有文件。
命名存档成员时,仅使用存档成员名称或命令行文件名参数的前 15 个字符。
有条件地更新存档或提取成员。 当与 -r 选项一起使用时,如果由参数 file ... 命名的文件比它们的归档版本更新,它们将在归档中被替换。 当与 -x 选项一起使用时,参数 file ... 指定的成员仅在它们比文件系统中的相应文件更新时才会被提取。
与 -r 或 -q 选项结合使用时,插入真正的 mtime、uid 和 gid 以及来自参数文件命名的成员的文件模式值 file ... 。如果在命令上指定了多个 -D 和 -U 选项行,最后一个优先。
提供详细的输出。 当与 -d, -m, -q 或 -x 选项一起使用时, ar 给出正在执行的归档修改的逐个文件描述,它由三个空格分隔的字段组成:选项字母、破折号 “-” 和文件名。当与 -r 选项一起使用时, ar 显示如上的描述,但如果将文件添加到存档中,则首字母为 “a” ,如果文件替换存档中已有的文件,则为 “r” 。 当与 -p 选项一起使用时,包含在 “<” 和 “>” 字符中的文件名将写入标准输出,前面有一个换行符,后跟两个换行符。 命名文件的内容跟在文件名后面。 当与 -t 选项一起使用时, ar 显示八个空格分隔的字段:由 strmode(3) 显示的文件权限、由斜杠 ( “/”) 分隔的十进制用户和组 ID、以字节为单位的文件大小、文件修改 strftime(3) 格式 “%b %e %H:%M %Y” 的时间,以及文件名。
打印版本字符串并退出。
将参数 file ... 指定的存档成员提取到当前目录中。 如果未指定任何成员,则提取档案的所有成员。如果与提取的成员对应的文件不存在,则将创建该文件。 如果提取的成员对应的文件确实存在,则其所有者和组将不会更改,而其内容将被覆盖,并且其权限将设置为存档中输入的权限。 除非指定了 -o 选项,否则文件的访问和修改时间将与提取时间相同。
此选项被接受但被忽略。
如果指定了 -M 选项, ar 实用程序将从其标准输入读取并执行命令。 如果标准输入是终端, ar 实用程序将在读取一行之前显示提示 “AR >” ,即使遇到错误也会继续操作。 如果标准输入不是终端, ar 实用程序将不会显示提示,并会在遇到错误时终止执行。
每个输入行包含一个命令。 输入行中的单词由空格字符分隔。 该行的第一个单词是命令,其余单词是命令的参数。 在任何一种情况下都可以指定命令字。 参数可以用逗号或空格分隔。
允许空行并被忽略。 长行以 “+” 字符结束。
“*” 和 “;” 字符开始评论。 注释一直延伸到行尾。
执行 MRI 图书管理员脚本时, ar 实用程序在存档的临时副本上工作。 使用 save 命令对副本进行永久更改。
ar 实用程序可以理解的命令是:
将由参数 archive 命名的档案内容添加到当前档案中。 如果使用参数 member 命名特定成员,则将这些成员添加到当前存档中。 如果未指定任何成员,则将归档的全部内容添加到当前归档。
addmod member [, member]...
将参数 member 命名的文件添加到当前存档。
丢弃当前存档的所有内容。
create archive
创建一个由参数 archive 命名的新档案,并使其成为当前档案。 如果命名存档已存在,则在发出 save 命令时将覆盖它。
delete module [, member]...
从当前存档中删除由参数 member 命名的模块。
directory archive (member [, member]...) [outputfile]
列出存档中的每个命名模块。 输出的格式取决于使用 verbose 命令设置的详细程度设置。 输出被发送到标准输出,或由参数 outputfile 指定的文件。
从 ar 实用程序成功退出。 对当前存档的任何未保存的更改都将被丢弃。
extract member [, member]...
从当前存档中提取由参数 member 命名的成员。
以详细样式显示当前存档的内容。
open archive
打开由参数 archive 命名的档案并将其设为当前档案。
replace member [, member]...
将当前存档中的命名成员替换为参数 member 指定的文件。 文件必须存在于当前目录中,并且命名模块必须已经存在于当前存档中。
提交对当前存档的所有更改。
切换 directory 命令的详细程度。
要创建一个包含三个文件 ex1.o, ex2.o 和 ex3.o 的新存档 ex.a ,请使用:
ar -rc ex.a ex1.o ex2.o ex3.o
要将存档符号表添加到现有存档 ex.a, 请使用:
ar -s ex.a
要从档案 ex.a 中删除文件 ex1.o , 请使用:
ar -d ex.a ex1.o
要详细列出档案 ex.a 的内容, 请使用:
ar -tv ex.a
要使用 MRI 图书管理员命令创建包含文件 ex1.o 和 ex2.o 的新存档 ex.a ,请使用以下脚本:
create ex.a * specify the output archive addmod ex1.o ex2.o * add modules save * save pending changes end * exit the utility
The ar utility exits 0 on success, and >0 if an error occurs.
ld(1), archive(3), elf(3), strftime(3), strmode(3), ar(5)
ar 实用程序支持 -a, -b, -c, -i, -m, -p, -q, -r, -s, -t, -u, -v, -C 和 -T 选项符合 IEEE Std 1003.2 (“POSIX.2”) 。
ar 命令首次出现在 AT&T UNIX 版本 1 中。在 FreeBSD 8.0 中, Kai Wang <[email protected]> 使用 Streaming Archive Library (libarchive, -larchive) 和 ELF Access Library (libelf, -lelf) 重新实现了 ar 和 ranlib 。
June 16, 2016
FreeBSD 13.1-RELEASE
ee(1)
ee(1)
ee(1)
ee - 简单的编辑器
ee [-e] [-i] [-h] [+#] [file ...] ree [-e] [-i] [-h] [+#] [file ...]
描述 ee 是一个简单的面向屏幕的文本编辑器。 它始终处于文本插入模式,除非终端底部有提示,或者存在菜单(在终端中间的框中)。 命令 ree 与 ee, 相同,但仅限于编辑命名文件(不允许文件操作或 shell 转义)。
具有类似用户友好品质但功能更多的编辑器可用,称为 aee 。
为了使 ee 正常工作,必须设置环境变量 TERM 来指示正在使用的终端类型。 例如,对于 HP 700/92 终端, TERM 变量应设置为 "70092" 。 如果您需要更多信息,请咨询您的系统管理员。
命令行提供以下选项:
-e
关闭制表符到空格的扩展。
-i
关闭终端顶部信息窗口的显示。
-h
关闭窗口和菜单边框的突出显示(提高某些终端的性能)。
+#
启动时将光标移动到 '#' 行。-
要执行插入文本以外的任何操作,用户必须使用控制键( Control 键,由 "^"表示,与字母键一起按下,例如,^a)和键盘上可用的功能键(例如 Next Page、 Prev Page、 箭头键等)。
由于并非所有终端都具有功能键,因此 ee 具有分配给控制键的基本光标移动功能以及键盘上更直观的键(如果可用)。 例如,要向上移动光标,用户可以使用向上箭头键或 ^u 。
^a 提示输入要插入的字符的十进制值。 ^b 移动到文本底部。 ^c 获取命令提示符。 ^d 向下移动光标。 ^e 提示输入要搜索的字符串。 ^f 取消删除最后一个删除的字符。 ^g 移动到行首。 ^h 退格。 ^i 制表符。 ^j 插入换行符。 ^k 删除光标所在的字符。 ^l 向左移动光标。 ^m 插入换行符。 ^n 移至下一页。 ^o 移动到行尾。 ^p 移至上一页。 ^r 向右移动光标。 ^t 移动到文本的顶部。 ^u 向上移动光标。 ^v 取消删除最后一个删除的单词。 ^w 删除从光标位置开始的单词。 ^x 搜索。 ^y 从光标位置删除到行尾。 ^z 取消删除最后删除的行。 ^[ (ESC) 弹出菜单。
由于许多 shell 提供 Emacs 模式(用于光标移动和其他编辑操作),因此提供了一些可能对熟悉这些绑定的人更有用的绑定。 这些可通过 settings 菜单或初始化文件(见下文)访问。 映射如下:
^a 移动到行首。 ^b 后退 1 个字符。 ^c 命令提示符。 ^d 删除光标所在的字符。 ^e 行尾。 ^f 向前 1 个字符。 ^g 返回上一页。 ^h 退格。 ^i 制表符。 ^j 取消删除最后删除的字符。 ^k 删除行。 ^l 取消删除最后删除的行。 ^m 插入换行符。 ^n 移动到下一行。 ^o 提示输入要插入的字符的十进制值。 ^p 上一行。 ^r 恢复最后删除的单词。 ^t 移动到文本的顶部。 ^u 移动到文本的底部。 ^v 移至下一页。 ^w 删除从光标位置开始的单词。 ^y 提示输入要搜索的字符串。 ^z 下一个词。 ^[ (ESC) 弹出菜单。
Next Page
移至下一页。
Prev Page
移至上一页。
Delete Char
删除光标所在的字符。
Delete Line
从光标处删除到行尾。
Insert line
在光标位置插入换行符。
Arrow keys
沿指示的方向移动光标。
某些操作需要的信息多于单次击键所能提供的信息。 对于最基本的操作,有一个菜单可以通过按 ESC 键获得。 通过获取命令提示符 (^c) 并键入以下命令之一,可以执行相同的操作以及更多操作。
!cmd
在 shell 中执行 cmd 。
0-9
移动到指示的行。
case
使搜索区分大小写。
character
显示光标处字符的 ascii 值。
exit
保存编辑的文本,然后离开编辑器。
expand
将制表符扩展到空格。
file
打印文件名。
help
显示帮助屏幕。
line
显示当前行号。
nocase
使搜索不区分大小写(默认)。
noexpand
按下 TAB 键时不要将制表符展开为空格。
quit
离开编辑器而不保存更改。
read file
读取命名 file 。
write file
将文本写入指定 file 。
可以通过按 escape 键(或 ^[ 如果没有 escape 键)来获得弹出菜单。 在菜单中时,可以使用退出键离开菜单而不进行任何操作。 使用向上和向下箭头键,或 ^u 向上移动和 ^d 向下移动以移动到菜单中的所需项目,然后按 return 键执行指示的任务。
每个菜单项的左侧是一个字母,如果在键盘上按下相应的字母,则选择该菜单项。
ee 中的主菜单如下:
leave editor
如果进行了更改,用户将获得一个菜单,提示是否应保存更改。
help
显示一个帮助屏幕,其中包含所有键盘操作和命令。
file operations
弹出一个菜单,用于选择是否读取文件、写入文件或保存编辑器的当前内容,以及将编辑器的内容发送到打印命令(参见 从文件初始化 ee 部分)。
redraw screen
如果屏幕已损坏,则提供一种重新绘制屏幕的方法。
settings
显示操作模式的当前值和右边距。 当光标在特定项目上时按回车键,可以更改值。 要离开此菜单,请按 escape 键。 (请参阅下面的 Modes 。)
search
弹出一个菜单,用户可以在其中选择输入要搜索的字符串,或者搜索已经输入的字符串。
miscellaneous
弹出一个菜单,允许用户设置当前段落的格式、执行 shell 命令或检查编辑器中文本的拼写。
段落由以下文本块为 ee 定义:
文件开始或结束。
没有字符或只有空格和/或制表符的行。
以句点 ('.') 或右尖括号 ('>') 开头的行。
可以通过两种方式格式化段落:通过选择 format paragraph 菜单项,或通过设置 ee 来自动格式化段落。 自动模式可以通过菜单设置,也可以通过初始化文件设置。
ee 中的文本操作分为三种状态:自由格式、边距、自动格式化。
"Free-form" 最适合用于编程之类的事情。 对行的长度没有限制,也不会进行格式化。
"Margins" 允许用户输入文本而不必担心超出右边距(右边距可以在 settings 菜单中设置,默认为终端的右边距)。 这是允许 format paragraph 菜单项工作的模式。
"Automatic formatting" 提供类似文字处理器的行为。 用户可以输入文本,而 ee 将确保每次用户在输入或删除文本后插入空格时,整个段落都适合终端的宽度。 为了进行自动格式化,还必须启用边距观察。
是一个“无模式”编辑器(它一直处于文本插入模式),但它所做的一些事情还是有模式的。 这些包括:
tab expansion
制表符可以作为单个制表符插入,也可以替换为空格。
case sensitivity
搜索操作可以对字符是大写还是小写敏感,或者完全忽略大小写。
margins observed
线条可以在右边距被截断,也可以永远延伸。
auto paragraph formatting
在输入文本时,编辑器可以尝试使其在屏幕宽度内看起来相当不错。
eightbit characters
切换八位字符是显示为尖括号中的值(例如 "<220>")还是字符。
info window
可以显示或不显示显示可以执行的键盘操作的窗口。
emacs keys
控制键可以被赋予类似于 emacs 的绑定,也可以不被赋予。
16 bit characters
切换 16 位字符是作为一个 16 位数量还是两个 8 位数量处理。 这主要适用于中国大 5 代码集。
您可以通过初始化文件(见下文)或菜单(见上文)设置这些模式。
有两种方法可以从 ee 检查文本中的拼写。 一种是使用传统的 spell(1) 命令,另一种是使用可选的 ispell(1) 命令。
一种是使用传统的 spell 命令,另一种是使用可选的 ispell 命令。 使用拼写,无法识别的单词将被放置在文件的顶部。 对于 ispell 选项,文件被写入磁盘,然后在文件上运行 ispell ,一旦 ispell 完成对文件的更改,文件就会读回。
用户可以选择打印编辑器内容的菜单项。 ee 通过管道将编辑器中的文本传递给初始化命令 printcommand 指定的命令(请参阅下面的 从文件初始化 ee 部分)。默认是将内容发送到 "lp"。
用户分配给 printcommand 的任何内容都必须从标准输入中获取输入。 有关详细信息,请咨询您的系统管理员。
可以通过在 miscellaneous 菜单中选择 shell command 项,或通过在 command: 提示符下在要执行的命令前放置感叹号("!")从 ee 中执行 shell 命令。 此外,用户可以使用左尖括号 (">") 将编辑缓冲区的内容引导到 shell 操作(通过管道),然后使用 "!" 以及要执行的 shell 命令。 shell 操作的输出也可以通过在感叹号前使用右尖括号 ("<") 定向到编辑缓冲区。 这些甚至可以一起用于将输出发送到 shell 操作并将结果读回编辑器。 因此,如果编辑器包含要排序的单词列表,则可以通过在命令提示符下键入以下内容来对它们进行排序:
><!sort
这会将编辑器的内容通过管道发送到 sort 实用程序,结果将被放置到当前光标位置的编辑缓冲区中。 用户必须删除旧信息。
由于不同的用户有不同的偏好, ee 允许一些轻微的可配置性。 ee 的初始化文件有三个可能的位置:文件 /usr/share/misc/init.ee 、用户主目录中的文件 .init.ee 或当前目录中的文件 .init.ee 如果不同于主目录)。 这允许系统管理员在系统范围内为用户设置一些首选项(例如, print 命令),并且用户可以自定义特定目录的设置(例如用于通信的目录和用于编程的不同目录)。
首先读取文件 usr/share/misc/init.ee ,然后是 $HOME/.init.ee ,然后是 .init.ee ,其中最近读取的文件指定的设置优先。
在初始化文件中可以输入以下项目:
case
将搜索设置为区分大小写。
nocase
将搜索设置为不区分大小写(默认)。
expand
使 ee 将制表符扩展到空格(默认)。
noexpand
使 ee 将制表符作为单个字符插入。
info
终端顶部会显示一个小信息窗口(默认)。
noinfo
关闭信息窗口的显示。
margins
当光标超出用户在插入文本时设置的右边距时,使 ee 截断右边距处的行(默认)。
nomargins
允许线条超出右边距。
autoformat
导致 ee 在文本插入时自动尝试格式化当前段落。
noautoformat
关闭自动段落格式(默认)。
printcommand
允许设置打印命令(默认值: "lp")。
rightmargin
用户可以为右边距选择一个值(屏幕上的第一列为零)。
highlight
打开突出显示信息窗口和菜单的边框(默认)。
nohighlight
关闭信息窗口和菜单边框的突出显示。
eightbit
打开八位字符的显示。
noeightbit
关闭八位字符的显示(它们在尖括号内显示为十进制值,例如 "<220>")。
16bit
打开对 16 位字符的处理。
no16bit
关闭对 16 位字符的处理。
emacs
打开 emacs 键绑定。
noemacs
关闭 emacs 键绑定。
在 settings 菜单中使用此条目时,用户可以选择将编辑器的当前配置(请参阅上面的 从文件初始化 ee )保存到当前目录或用户主目录中名为 .init.ee 的文件中。 如果名为 .init.ee 的文件已经存在,它将被重命名为 .init.ee.old 。
本材料按“原样”提供。 对本材料不提供任何形式的保证,包括但不限于对适销性和特定用途适用性的默示保证。 Hewlett-Packard 和 Hugh Mahon 均不对此处包含的错误负责,也不对与提供、执行或使用本材料有关的附带或间接损害负责。 Hewlett-Packard 和 Hugh Mahon 均不对本软件或文档的使用或可靠性承担任何责任。 该软件和文档完全不受支持。 没有可用的支持合同。 Hewlett-Packard 未对任何程序或文档进行任何质量保证。 您可能会发现材料的质量不如支持的材料
始终在编辑之前制作不易复制的文件副本。 尽早保存文件,并经常保存。
ee 支持单字节字符代码集(八位干净),或中文 Big-5 代码集。 (其他多字节代码集也可能起作用,但 Big-5 起作用的原因是一个两字节字符在屏幕上也占据了两列。)
对于较慢的系统,自动段落格式化操作可能太慢。
/usr/share/misc/init.ee- $HOME/.init.ee- .init.ee
ee 软件由 Hugh Mahon 开发。
本软件和文档包含受版权保护的专有信息。 保留所有权利。
版权所有 (c) 1990, 1991, 1992, 1993, 1995, 1996, 2001 Hugh Mahon.
termcap(4), terminfo(4), environ(5), spell(1), ispell(1), lp(1), aee(1)
DD(1)
DD(1)
FreeBSD General Commands Manual
DD(1)
dd —
convert and copy a file
dd [operands ...]
dd 实用程序将标准输入复制到标准输出。 输入数据以 512 字节块的形式读取和写入。 如果输入读取很短,则来自多个读取的输入被聚合以形成输出块。 完成后, dd 将完整和部分输入和输出块的数量以及截断的输入记录显示到标准错误输出。
可以使用以下操作数:
=n
将输入和输出块大小都设置为 n 字节,取代 ibs 和 obs 操作数。 如果没有指定除 noerror 、 notrunc 或 sync 以外的转换值,则每个输入块将作为单个块复制到输出,而不会聚合任何短块。
=n
将转换记录大小设置为 n 字节。 面向记录的转换值需要转换记录大小。
=n
仅复制 n 个输入块。
=n
在终止之前复制 n 个输入文件。 此操作数仅适用于输入设备是磁带时。
=c
在转换模式下或由于使用 noerror 和 sync 模式填充块时,使用指定的 ASCII 字符填充,而不是使用空格或 NUL 。
=n
将输入块大小设置为 n 字节,而不是默认的 512。
=file
从 file 而不是标准输入中读取输入。
=value[,value ...]
其中 value 是以下列表中的符号之一。
从输入文件中读取可能无法获得完整的块。 当读取返回短时,继续读取以填充块。 如果没有此标志, count 会限制在输入上调用 read(2) 的次数,而不是完全复制的块数。 不能与 conv=sync 结合使用。
在输入文件上设置 O_DIRECT 标志以使读取绕过任何本地缓存。
=n
在输入文件 n 块上查找。 这与 skip=n 同义。
=n
将输出块大小设置为 n 字节,而不是默认的 512。
=file
将输出写入 file 而不是标准输出。 除非指定了 notrunc 转换值,否则任何常规输出文件都会被截断。 如果查找输出文件的初始部分(参见 oseek 操作数),则输出文件在该点被截断。
=value[,value ...]
其中 value 是以下列表中的符号之一。
在输出文件上设置 O_FSYNC 标志以使写入同步。
在输出文件上设置 O_SYNC 标志以使写入同步。 这与 fsync 值同义。
在输出文件上设置 O_DIRECT 标志以使写入绕过任何本地缓存。
=n
在输出文件上查找 n 个块。 这与 seek=n 同义。
=n
在复制之前从输出的开头寻找 n 个块。 在非磁带设备上,使用 lseek(2) 操作。 否则,将读取现有块并丢弃数据。 如果用户没有磁带的读取权限,则使用磁带 ioctl(2) 函数调用对其进行定位。 如果查找操作超过文件末尾,则从当前文件末尾到指定偏移量的空间被 NUL 字节块填充。
=n
在复制之前从输入的开头跳过 n 个块。 在支持搜索的输入上,使用 lseek(2) 操作。 否则,读取并丢弃输入数据。 对于管道,读取正确的字节数。 对于所有其他设备,读取正确数量的块,而不区分正在读取的部分或完整块。
=n
将复制速度限制为每秒 n 字节。
=value
其中 value 是以下列表中的符号之一。
不要将传输统计信息打印为状态输出的最后一行。
不要打印状态输出。 显示错误消息;信息性消息不是。
每秒打印一次基本传输统计信息。
=value[,value ...]
其中 value 是以下列表中的符号之一。
, oldascii
与 unblock 值相同,只是在转换记录之前将字符从 EBCDIC 转换为 ASCII 。 (如果还指定了操作数 cbs ,则这些值意味着 unblock 。) ASCII 有两个转换映射。 ascii 值指定了与 AT&T System V UNIX 兼容的推荐值。 oldascii 值指定用于历史 AT&T UNIX 和 pre-4.3BSD-Reno 系统的值。
将输入视为与输入和输出块边界无关的换行符或文件结尾终止的可变长度记录的序列。 任何尾随换行符都将被丢弃。每个输入记录都转换为固定长度的输出记录,其中长度由 cbs 操作数指定。 短于转换记录大小的输入记录用空格填充。 长于转换记录大小的输入记录将被截断。 被截断的输入记录的数量(如果有)在复制完成时报告给标准错误输出。
, ibm, oldebcdic, oldibm
与 block 值相同,只是在转换记录后将字符从 ASCII 转换为 EBCDIC 。 (如果还指定了操作数 cbs ,则这些值意味着 block 。) EBCDIC 有四个转换映射。 值 ebcdic 指定与 AT&T System V UNIX 兼容的推荐值。 值 ibm 是一个稍微不同的映射,它与 AT&T System V UNIX ibm 值兼容。 oldebcdic 和 oldibm 值是用于历史 AT&T UNIX 和 pre-4.3BSD-Reno 系统的映射。
在关闭输出文件之前对其执行 fdatasync(2) 。
在关闭输出文件之前对其执行 fsync(2) 。
将大写字符转换为小写字符。
, parnone, parodd, parset
输出具有指定奇偶校验的数据。 除非还指定了 EBCDIC 到 ASCII 的转换,否则输入上的奇偶校验位将被去除。
不要停止处理输入错误。 当发生输入错误时,将按照与标准完成消息相同的格式将诊断消息和当前输入和输出块计数写入标准错误输出。 如果还指定了 sync 转换,则任何丢失的输入数据都将替换为 NUL 字节(如果指定了面向块的转换值,则替换为空格)并作为普通输入缓冲区处理。 如果指定了 fillchar 选项,命令行中提供的填充字符将覆盖填充字符的自动选择。 如果未指定 sync 转换,则从输出中省略输入块。 在不是磁带或管道的输入文件上,文件偏移量将使用 lseek(2) 定位到发生错误的块之后。
不要截断输出文件。 这将保留输出文件中未由 dd 显式写入的任何块。 磁带不支持 notrunc 值。
将最终输出块填充到完整的输出块大小。 如果转换后输入文件不是输出块大小的倍数,则此转换会强制最终输出块与前面的块大小相同,以便在需要写入常规大小块的设备上使用。 此选项与 bs=n 块大小规范的使用不兼容。
如果一个或多个输出块仅包含 NUL 字节,请尝试按所需空间查找输出文件,而不是用 NUL- 填充它们,从而产生稀疏文件。
交换每对输入字节。 如果输入缓冲区的字节数为奇数,则在交换期间将忽略最后一个字节。
将每个输入块填充到输入缓冲区大小。 如果指定了面向块的转换值,则空格用于填充字节,否则使用 NUL 字节。
将小写字符转换为大写字符。
将输入视为与输入和输出块边界无关的固定长度记录序列。 输入记录的长度由 cbs 操作数指定。 任何尾随空格字符都将被丢弃,并附加一个换行符。
如果指定了大小或速度,则需要十进制、八进制或十六进制字节数。 如果数字以 “b”, “k”, “m”, “g”, “t”, “p” 或 “w” 结尾,则该数字乘以 512, 1024 (1K), 1048576 (1M), 1073741824 (1G), 1099511627776 (1T), 1125899906842624 (1P) 或整数中的字节数。 两个或多个数字可以用 “x” 分隔以表示产品。
完成后, dd 将完整和部分输入和输出块的数量、截断的输入记录和奇数长度的字节交换块显示到标准错误输出。 部分输入块是读取的小于输入块大小的块。 部分输出块是写入小于输出块大小的块。 到磁带设备的部分输出块被认为是致命错误。 否则,将写入块的其余部分。 字符设备的部分输出块将产生警告消息。 截断输入块是指指定了面向可变长度记录的转换值并且输入行太长而无法放入转换记录或没有换行符终止的输入块。
通常,来自输入或转换或两者的数据被聚合到指定大小的输出块中。 在达到输入结束后,任何剩余的输出都被写入一个块。 这意味着最终的输出块可能比输出块的大小要短。
如果 dd 接收到 SIGINFO (请参阅 stty(1) 的 status 参数)信号,则当前输入和输出块计数将以与标准完成消息相同的格式写入标准错误输出。 如果 dd 收到 SIGINT 信号,当前输入和输出块计数将以与标准完成消息相同的格式写入标准错误输出,并且 dd 将退出。
The dd utility exits 0 on success, and >0 if an error occurs.
检查磁盘驱动器是否包含坏块:
dd if=/dev/ada0 of=/dev/null bs=1m
刷新磁盘驱动器,以防止当前可恢复的读取错误发展为不可恢复的读取错误:
dd if=/dev/ada0 of=/dev/ada0 bs=1m
从文件中删除奇偶校验位:
dd if=file conv=parnone of=file.txt
检查文件上的(偶数)奇偶校验错误:
dd if=file conv=pareven | cmp -x - file
要创建 Mode-1 CD-ROM(数据 CD-ROM 磁盘的常用格式)的映像,请使用 2048 字节的块大小:
dd if=/dev/cd0 of=filename.iso bs=2048
将文件系统映像写入记忆棒,必要时用零填充末尾到 1MiB 边界:
dd if=memstick.img of=/dev/da0 bs=1m conv=noerror,sync
cp(1), mt(1), recoverdisk(1), tr(1), geom(4), trim(8)
dd 实用程序有望成为 IEEE Std 1003.2 (“POSIX.2”) 标准的超集。 files 和 status 操作数以及 ascii, ebcdic, ibm, oldascii, oldebcdic 和 oldibm 值是对 POSIX 标准的扩展。
dd 命令出现在 Version 5 AT&T UNIX 中。
geom(4) 子系统中的保护机制可能会阻止超级用户将块写入磁盘。 可以在 geom(4) 手册页中找到临时禁用这些保护机制的说明。
June 4, 2020
FreeBSD 13.1-RELEASE
fgreprgrep文件模式搜索器
grep [-abcdDEFGHhIiLlmnOopqRSsUVvwxz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [-``-binary-files=value] [-``-color[=when]] [-``-colour[=when]] [-``-context[=num]] [-``-label] [- -line-buffered] [-``-null] [pattern] [file ...]
grep 实用程序搜索任何给定的输入文件,选择匹配一个或多个模式的行。 默认情况下,如果模式中的正则表达式 (RE) 匹配输入行而没有尾随换行符,则该模式匹配输入行。 空表达式匹配每一行。 与至少一种模式匹配的每个输入行都被写入标准输出。
grep 用于简单模式和基本正则表达式 (BREs); egrep 可以处理扩展正则表达式 (ERE) 。 有关正则表达式的更多信息,请参阅 re_format(7) 。 fgrep 比 grep 和 egrep 都快,但只能处理固定模式(即,它不解释正则表达式)。 模式可以由一行或多行组成,允许任何模式行匹配输入的一部分。
可以使用以下选项:
-A num, -``-after-context=num
每次匹配后打印 num 行尾随上下文。 另请参见 -B 和 -C 选项。
-a, -``-text
将所有文件视为 ASCII 文本。 如果文件包含二进制字符,通常 grep 将简单地打印 “Binary file ... matches” 。 使用此选项会强制 grep 输出与指定模式匹配的行。
-B num, -``-before-context=num
在每次匹配之前打印前导上下文的 num 行。 另请参见 -A 和 -C 选项。
-b, -``-byte-offset
匹配模式的字节偏移量显示在相应匹配行的前面。
-C[num], -``-context[=num]
打印围绕每个匹配项的前导和尾随上下文的 num 行。 num 的默认值为 “2” ,相当于 “-A 2 -B 2” 。 注意:选项和它的参数之间不能有空格。
-c, -``-count
只有选定的行数被写入标准输出。
-``-colour=[when], -``-color=[when]
使用 GREP_COLOR 环境变量中存储的表达式标记匹配文本。 when 的可能值是 “never”, “always” 和 “auto” 。
-D action, -``-devices=action
为设备、FIFO 和套接字指定所需的 action 。 默认 action 是 “read” ,这意味着它们像普通文件一样被读取。 如果 action 设置为 “skip” ,设备将被静默跳过。
-d action, -``-directories=action
指定目录所需的 action 。 默认为 “read” ,这意味着目录的读取方式与普通文件相同。 其他可能的值是 “skip” 以静默忽略目录, “recurse” 以递归方式读取它们,这与 -R 和 -r 选项的效果相同。
-E, -``-extended-regexp
将 pattern 为扩展的正则表达式(即,强制 grep 表现为 egrep )。
-e pattern, -``-regexp=pattern
指定在搜索输入期间使用的 pattern :如果输入行匹配任何指定的模式,则选择该输入行。 当使用多个 -e 选项指定多个模式时,或者当一个 pattern 以破折号 (‘-’) 开头时,此选项最有用。
-``-exclude pattern
如果指定,它将从搜索中排除与给定文件名 pattern 匹配的文件。 请注意, -``-exclude 和 -``-include 模式是按给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include 模式,则搜索所有未排除的文件。 模式与指定的完整路径匹配,而不仅仅是文件名组件。
-``-exclude-dir pattern
如果指定了 -R ,它将从搜索中排除与给定文件名 pattern 匹配的目录。 请注意, -``-exclude-dir 和 -``-include-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include-dir 模式,则搜索所有未排除的目录。
-F, -``-fixed-strings
将 pattern 解释为一组固定字符串(即强制 grep 表现为 fgrep )。
-f file, -``-file=file
从 file 中读取一个或多个换行符分隔的模式。空模式行匹配每个输入行。 换行符不被视为模式的一部分。 如果 file 为空,则不匹配。
-G, -``-basic-regexp
将 pattern 解释为基本的正则表达式(即强制 grep 表现得像传统的 grep )。
始终使用输出行打印文件名标题。
-h, -``-no-filename
切勿使用输出行打印文件名标题 (即 filenames) 。
-``-help
打印简短的帮助信息。
忽略二进制文件。 此选项等效于 “-``-binary-file=``without-match” 选项。
-i, -``-ignore-case
执行不区分大小写的匹配。 默认情况下, grep 区分大小写。
-``-include pattern
如果指定,则仅搜索与给定文件名 pattern 匹配的文件。 请注意, -``-include 和 -``-exclude 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 模式与指定的完整路径匹配,而不仅仅是文件名组件。
-``-include-dir pattern
如果指定了 -R ,则仅搜索与给定文件名 pattern 匹配的目录。 请注意, -``-include-dir 和 -``-exclude-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。
-L, -``-files-without-match
只有不包含所选行的文件名才会写入标准输出。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。
-l, -``-files-with-matches
只有包含选定行的文件名被写入标准输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。
-``-label
用于代替 “(standard input)” 的标签,用于通常打印文件名的文件名。 此选项适用于 -H, -L 和 -l 。
-``-mmap
使用 mmap(2) 而不是 read(2) 来读取输入,这在某些情况下可能会带来更好的性能,但可能会导致未定义的行为。
-m num, -``-max-count=num
在 num 匹配后停止读取文件。
-n, -``-line-number
每个输出行前面都有其在文件中的相对行号,从第 1 行开始。 为每个处理的文件重置行号计数器。 如果指定了 -c, -L, -l 或 -q ,则忽略此选项。
-``-null
在文件名之后打印一个零字节。
如果指定了 -R ,则仅当符号链接在命令行上明确列出时才跟随它们。 默认不遵循符号链接。
-o, -``-only-matching
仅打印行的匹配部分。
如果指定了 -R ,则不遵循任何符号链接。 这是默认设置。
-q, -``-quiet, - -silent
安静模式:抑制正常输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。
-R, -r, -``-recursive
递归搜索列出的子目录。 (即,强制 grep 表现为 rgrep )。
如果指定了 -R ,则遵循所有符号链接。 默认不遵循符号链接。
-s, -``-no-messages
静音模式。 不存在和不可读的文件被忽略(即,它们的错误消息被抑制)。
-U, -``-binary
搜索二进制文件,但不要尝试打印它们。
此选项无效,仅用于与 GNU grep 兼容。
-V, -``-version
显示版本信息并退出。
-v, -``-invert-match
选定的行是那些 不 匹配任何指定模式的行。
-w, -``-word-regexp
表达式作为一个词被搜索(好像被 ‘[[:<:]]’ 和 ‘[[:>:]]’ 包围;参见 re_format(7) )。
-x, -``-line-regexp
只有针对整个固定字符串或正则表达式选择的输入行才被视为匹配行。
相当于 -i 。已过时。
-z, -``-null-data
将输入和输出数据视为以零字节而不是换行符结尾的行序列。
-``-binary-files=value
控制二进制文件的搜索和打印。选项是:
binary (default)
搜索二进制文件但不打印它们。
不要搜索二进制文件。
将所有文件视为文本。
-``-line-buffered
强制输出为行缓冲。 默认情况下,当标准输出是终端时输出是行缓冲的,否则是块缓冲的。
如果没有指定文件参数,则使用标准输入。 此外, “-” 可以用来代替文件名,在任何接受文件名的地方,以从标准输入中读取。 这包括 -f 和文件参数。
grep 实用程序以下列值之一退出:
选择了一条或多条线。
未选择任何行。
发生错误。
查找文件中所有出现的模式 ‘patricia’ :
$ grep 'patricia' myfile
与上面相同,但只查找完整的单词:
$ grep -w 'patricia' myfile
计算确切模式 ‘FOO’ 的出现次数:
$ grep -c FOO myfile
与上面相同,但忽略大小写:
$ grep -c -i FOO myfile
在行首查找所有出现的模式 ‘.Pp’ :
$ grep '^\.Pp' myfile
撇号确保整个表达式由 grep 而不是用户的 shell 评估。 插入符号 ‘^’ 匹配行首的空字符串,而 ‘\’ 转义 ‘.’, 否则将匹配任何字符。
查找文件中不包含单词 ‘foo’ 或 ‘bar’ 的所有行:
$ grep -v -e 'foo' -e 'bar' myfile
使用扩展正则表达式仔细阅读文件 ‘calendar’ 以查找 19、20 或 25:
$ egrep '19|20|25' calendar
显示匹配行和包含模式 ‘FIXME’ 的 ‘*.h’ 文件的名称。 从 /usr/src/sys/arm 目录递归搜索
$ grep -H -R FIXME --include=*.h /usr/src/sys/arm/
与上面相同,但仅显示匹配文件的名称:
$ grep -l -R FIXME --include=*.h /usr/src/sys/arm/
显示包含文本 ‘foo’ 的行。 输出的匹配部分是彩色的,每一行都以行号和匹配行的文件中的偏移量作为前缀。
$ grep -b --colour -n foo myfile
显示与从标准输入读取的扩展正则表达式模式匹配的行:
$ echo -e 'Free\nBSD\nAll.*reserved' | grep -E -f - myfile
显示 pciconf(8) 命令输出中与指定扩展正则表达式匹配的行以及三行前导上下文和一行尾随上下文:
$ pciconf -lv | grep -B3 -A1 -E 'class.*=.*storage'
抑制任何输出并使用退出状态显示适当的消息:
$ grep -q foo myfile && echo File matches
ed(1), ex(1), sed(1), zgrep(1), re_format(7)
grep 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。
标志 [-AaBbCDdGHhILmoPRSUVw] 是该规范的扩展,当与空模式文件一起使用时 -f 标志的行为未定义。
提供所有长选项是为了与该实用程序的 GNU 版本兼容。
grep 实用程序的历史版本也支持标志 [-ruy] 。此实现支持这些选项;但是,强烈建议不要使用它们。
grep 命令首次出现在 Version 6 AT&T UNIX 中。
November 19, 2020
FreeBSD 13.1-RELEASE
DIFF(1)
DIFF(1)
FreeBSD General Commands Manual
DIFF(1)
diff —
差异文件和目录比较器
diff [-aBbdipTtw] [-c | -e | -f | -n | -q | -u | -y] [--brief] [--changed-group-format GFMT] [--ed] [--expand-tabs] [--forward-ed
diff 实用程序比较 file1 和 file2 的内容,并将将一个文件转换为另一个文件所需的更改列表写入标准输出。 如果文件相同,则不会产生输出。
输出选项(互斥):
number --context number
与 -c 类似,但会产生带有上下文 number 行的差异。
产生具有 3 行上下文的差异。 使用 -c 会稍微修改输出格式:输出以识别所涉及的文件及其创建日期开始,然后每个更改由带有 15 个 * 的行分隔。 从 file1 中删除的行标有 ‘- ’; 添加到 file2 的那些标记为 ‘+ ’ 。 从一个文件更改到另一个文件的行在两个文件中都标有 ‘! ’ 。 彼此相距 3 行以内的更改在输出时被组合在一起。
string --ifdef string
在标准输出上创建 file1 和 file2 的合并版本,其中包含 C 预处理器控件,以便在不定义 string 的情况下编译结果等同于编译 file1, 而定义 string 将产生 file2 。
--ed
以适合作为编辑器实用程序 ed(1) 输入的形式生成输出,然后可以使用该格式将 file1 转换为 file2。
使用 -e 比较目录时,会在输出中添加额外的命令,因此结果是一个 sh(1) 脚本,用于将两个目录共有的文本文件从它们在 dir1 中的状态转换为它们在 dir2 中的状态。
--forward-ed
与 -e 标志的输出相同,但顺序相反。 它不能被 ed(1) 消化。
生成一个类似于 -e 的脚本,但顺序相反,并且在每个插入或删除命令上都有更改的行数。 这是 rcsdiff 使用的形式。
--brief
当文件不同时,只需打印一行。 不输出更改列表。
number --unified number
与 -u 类似,但会产生带有上下文 number 行的差异。
生成具有 3 行上下文的 unified 差异。 统一差异类似于 -c 选项产生的上下文差异。 然而,与 -c 不同的是,所有要更改(添加和/或删除)的行都存在于单个部分中。
--side-by-side
在两列中输出,它们之间有一个标记。 标记可以是以下之一:
space
对应的行是相同的。
'|'
对应的线路不同。
'<'
文件不同,只有第一个文件包含该行。
'>'
文件不同,只有第二个文件包含该行。
比较选项:
--text
将所有文件视为 ASCII 文本。 如果文件包含二进制字符,通常 diff 将简单地打印 “Binary files ... differ” 。 使用此选项会强制 diff 产生差异。
--ignore-blank-lines
导致只包含空行的块被忽略
--ignore-space-change
导致尾随空格(空格和制表符)被忽略,其他空格字符串比较相等。
--minimal
非常努力地产生尽可能小的差异。 在处理具有许多更改的大型文件时,这可能会消耗大量的处理能力和内存。
pattern --ignore-matching-lines pattern
忽略行与扩展正则表达式 pattern 匹配的更改、插入和删除。 可以指定多个 -I 模式。 更改中的所有行都必须匹配某些模式才能忽略更改。 有关正则表达式模式的更多信息,请参阅 re_format(7) 。
--ignore-case
忽略字母的大小写。 例如, “A” 将等于 “a” 。
--paginate
通过 pr(1) 传递输出以对其进行分页。
label --label label
打印 label 而不是上下文或统一差异标头中的第一个(和第二个,如果此选项被指定两次)文件名和时间。
--show-c-function
使用统一和上下文差异,每次更改时显示上下文前最后一行的前 40 个字符,以字母、下划线或美元符号开头。 对于遵循标准布局约定的 C 源代码,这将显示更改适用的函数的原型。
--initial-tab
对于正常、上下文或统一的输出格式,在该行的其余部分之前打印一个制表符而不是一个空格。 这使得行中的制表符对齐一致。
--expand-tabs
将展开输出行中的选项卡。 正常或 -c 输出将字符添加到每行的前面,这可能会破坏原始源代码行的缩进并使输出列表难以解释。 此选项将保留原始源的缩进。
--ignore-all-blanks
类似于 -b --ignore-space-change 但会导致空格(空格和制表符)被完全忽略。 例如, “if ( a == b )” 将比较等于 “if(a==b)” 。
number --width number
使用并排格式时最多输出 number 列。 默认值为 130。
GFMT
在提供的格式输入组
格式是带有特殊关键字的字符串:
%<
FILE1 中的行
%<
来自 FILE2 的行
比较文件名时忽略大小写
不要忽略大小写比较文件名(默认)
默认差异输出
与 GNU diff 兼容的存根选项
删除输入文件上的回车
使用并排格式时不输出公共行
number
代表制表符的空格数(默认 8)
目录比较选项:
--new-file
如果一个文件只在一个目录中找到,就好像它也在另一个目录中找到但大小为零一样。
--unidirectional-new-file
如果一个文件只在 dir2 中找到,就好像它也在 dir1 中找到但大小为零一样。
--recursive
导致将 diff 递归应用到遇到的公共子目录。
name --starting-file name
在中间重新启动一个目录 diff ,以文件 name 开头。
--report-identical-files
导致 diff 报告相同的文件,否则未提及。
file --exclude-from file
从比较中排除其基本名称与 file 中的行匹配的文件和子目录。 可以指定多个 -X 选项。
pattern --exclude pattern
从比较中排除基本名称与 pattern 匹配的文件和子目录。 通过 fnmatch(3) 使用 shell 样式的通配符匹配模式。 可以指定多个 -x 选项。
如果两个参数都是目录,则 diff 按名称对目录的内容进行排序,然后对不同的文本文件运行常规文件 diff 算法,生成更改列表。 不同的二进制文件、公共子目录和只出现在一个目录中的文件都被这样描述。 在目录模式下,仅比较常规文件和目录。 如果遇到非常规文件,例如设备特殊文件或 FIFO,则会打印诊断消息。
如果 file1 和 file2 中只有一个是目录,则 diff 应用于非目录文件以及目录文件中包含的文件名与非目录文件的最后一个组件相同的文件。
如果 file1 或 file2 是 ‘-’, 则使用标准输入代替它。
默认(不带 -e -、 -c 或 -n --rcs 选项)输出包含这些形式的行,其中 XX, YY, ZZ, QQ 分别是文件顺序的行号。
a``YY
在 file1 的第 XX 行(末尾)处,附加 file2 的第 YY 行的内容以使它们相等。
a``YY,ZZ
同上,但将 file2 的 YY 到 ZZ 的行范围附加到文件 1 的 XX 行。
d``YY
在第 XX 行删除该行。 值 YY 告诉哪一行更改将使 file1 与 file2 保持一致。
d``ZZ
删除 file1 中的 XX 到 YY 行范围。
c``YY
将 file1 中的 XX 行更改为 file2 中的 YY 行。
c``ZZ
用 ZZ 行替换指定行的范围。
c``ZZ,QQ
将 file1 中的 XX,YY 范围替换为 file2 中的 ZZ,QQ 范围。
这些行类似于将 file1 转换为 file2 的 ed(1) 子命令。 动作字母前的行号与 file1 相关;后面的属于 file2 。 因此,通过将 a 替换为 d 并以相反的顺序读取该行,还可以确定如何将 file2 转换为 file1 。 与 ed(1) 中一样,相同的对(其中 num1 = num2)被缩写为单个数字。
/tmp/diff.XXXXXXXX
比较设备或标准输入时使用的临时文件。 请注意,临时文件在创建后立即取消链接,因此它不会显示在目录列表中。
diff 实用程序以下列值之一退出:
0
没有发现差异。
1
发现了差异。
>1
发生错误。
比较 old_dir 和 new_dir 递归生成统一差异并将仅在这些目录之一中找到的文件视为新文件:
$ diff -ruN /path/to/old_dir /path/to/new_dir
同上,但不包括匹配表达式 “*.h” 和 “*.c” 的文件:
$ diff -ruN -x '*.h' -x '*.c' /path/to/old_dir /path/to/new_dir
显示单行指示文件是否不同:
$ diff -q /boot/loader.conf /boot/defaults/loader.conf 文件 /boot/loader.conf 和 /boot/defaults/loader.conf 不同
假设一个名为 example.txt 的文件具有以下内容:
FreeBSD 是一个操作系统 Linux是一个内核 OpenBSD 是一个操作系统
将 stdin 与 example.txt 进行比较,从比较中排除包含 “Linux” 或 “Open” 的行:
$ echo "FreeBSD is an operating system" | diff -q -I 'Linux|Open' example.txt -
cmp(1), comm(1), diff3(1), ed(1), patch(1), pr(1), sdiff(1) James W. Hunt and M. Douglas McIlroy, An Algorithm for Differential File Comparison, Computing Science Technical Report, Bell Laboratories 41, June 1976.
diff 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。
标志 [-aDdIiLlNnPpqSsTtwXxy] 是对该规范的扩展。
diff 命令出现在 Version 6 AT&T UNIX 中。
June 19, 2020
FreeBSD 13.1-RELEASE
GREP(1)
GREP(1)
FreeBSD General Commands Manual
GREP(1)
grep, egrep, fgrep, rgrep —
文件模式搜索器
grep [-abcdDEFGHhIiLlmnOopqRSsUVvwxz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [-``-binary-files=value] [-``-color[=when]] [-``-colour[=when]] [-``-context[=
grep 实用程序搜索任何给定的输入文件,选择匹配一个或多个模式的行。 默认情况下,如果模式中的正则表达式 (RE) 匹配输入行而没有尾随换行符,则该模式匹配输入行。 空表达式匹配每一行。 与至少一种模式匹配的每个输入行都被写入标准输出。
grep 用于简单模式和基本正则表达式 (BREs); egrep 可以处理扩展正则表达式 (ERE) 。 有关正则表达式的更多信息,请参阅 re_format(7) 。 fgrep 比 grep 和 egrep 都快,但只能处理固定模式(即,它不解释正则表达式)。 模式可以由一行或多行组成,允许任何模式行匹配输入的一部分。
可以使用以下选项:
num, -``-after-context=num
每次匹配后打印 num 行尾随上下文。 另请参见 -B 和 -C 选项。
, -``-text
将所有文件视为 ASCII 文本。 如果文件包含二进制字符,通常 grep 将简单地打印 “Binary file ... matches” 。 使用此选项会强制 grep 输出与指定模式匹配的行。
num, -``-before-context=num
在每次匹配之前打印前导上下文的 num 行。 另请参见 -A 和 -C 选项。
, -``-byte-offset
匹配模式的字节偏移量显示在相应匹配行的前面。
[num], -``-context[=num]
打印围绕每个匹配项的前导和尾随上下文的 num 行。 num 的默认值为 “2” ,相当于 “-A 2 -B 2” 。 注意:选项和它的参数之间不能有空格。
, -``-count
只有选定的行数被写入标准输出。
-``-colour=[when], -``-color=[when]
使用 GREP_COLOR 环境变量中存储的表达式标记匹配文本。 when 的可能值是 “never”, “always” 和 “auto” 。
action, -``-devices=action
为设备、FIFO 和套接字指定所需的 action 。 默认 action 是 “read” ,这意味着它们像普通文件一样被读取。 如果 action 设置为 “skip” ,设备将被静默跳过。
action, -``-directories=action
指定目录所需的 action 。 默认为 “read” ,这意味着目录的读取方式与普通文件相同。 其他可能的值是 “skip” 以静默忽略目录, “recurse” 以递归方式读取它们,这与 -R 和 -r 选项的效果相同。
, -``-extended-regexp
将 pattern 为扩展的正则表达式(即,强制 grep 表现为 egrep )。
pattern, -``-regexp=pattern
指定在搜索输入期间使用的 pattern :如果输入行匹配任何指定的模式,则选择该输入行。 当使用多个 -e 选项指定多个模式时,或者当一个 pattern 以破折号 (‘-’) 开头时,此选项最有用。
-``-exclude pattern
如果指定,它将从搜索中排除与给定文件名 pattern 匹配的文件。 请注意, -``-exclude 和 -``-include 模式是按给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include 模式,则搜索所有未排除的文件。 模式与指定的完整路径匹配,而不仅仅是文件名组件。
-``-exclude-dir pattern
如果指定了 -R ,它将从搜索中排除与给定文件名 pattern 匹配的目录。 请注意, -``-exclude-dir 和 -``-include-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include-dir 模式,则搜索所有未排除的目录。
, -``-fixed-strings
将 pattern 解释为一组固定字符串(即强制 grep 表现为 fgrep )。
file, -``-file=file
从 file 中读取一个或多个换行符分隔的模式。空模式行匹配每个输入行。 换行符不被视为模式的一部分。 如果 file 为空,则不匹配。
, -``-basic-regexp
将 pattern 解释为基本的正则表达式(即强制 grep 表现得像传统的 grep )。
始终使用输出行打印文件名标题。
, -``-no-filename
切勿使用输出行打印文件名标题 (即 filenames) 。
-``-help
打印简短的帮助信息。
忽略二进制文件。 此选项等效于 “-``-binary-file=``without-match” 选项。
, -``-ignore-case
执行不区分大小写的匹配。 默认情况下, grep 区分大小写。
-``-include pattern
如果指定,则仅搜索与给定文件名 pattern 匹配的文件。 请注意, -``-include 和 -``-exclude 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 模式与指定的完整路径匹配,而不仅仅是文件名组件。
-``-include-dir pattern
如果指定了 -R ,则仅搜索与给定文件名 pattern 匹配的目录。 请注意, -``-include-dir 和 -``-exclude-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。
, -``-files-without-match
只有不包含所选行的文件名才会写入标准输出。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。
, -``-files-with-matches
只有包含选定行的文件名被写入标准输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。
-``-label
用于代替 “(standard input)” 的标签,用于通常打印文件名的文件名。 此选项适用于 -H, -L 和 -l 。
-``-mmap
使用 mmap(2) 而不是 read(2) 来读取输入,这在某些情况下可能会带来更好的性能,但可能会导致未定义的行为。
num, -``-max-count=num
在 num 匹配后停止读取文件。
, -``-line-number
每个输出行前面都有其在文件中的相对行号,从第 1 行开始。 为每个处理的文件重置行号计数器。 如果指定了 -c, -L, -l 或 -q ,则忽略此选项。
-``-null
在文件名之后打印一个零字节。
如果指定了 -R ,则仅当符号链接在命令行上明确列出时才跟随它们。 默认不遵循符号链接。
, -``-only-matching
仅打印行的匹配部分。
如果指定了 -R ,则不遵循任何符号链接。 这是默认设置。
, -``-quiet, - -silent
安静模式:抑制正常输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。
, -r, -``-recursive
递归搜索列出的子目录。 (即,强制 grep 表现为 rgrep )。
如果指定了 -R ,则遵循所有符号链接。 默认不遵循符号链接。
, -``-no-messages
静音模式。 不存在和不可读的文件被忽略(即,它们的错误消息被抑制)。
, -``-binary
搜索二进制文件,但不要尝试打印它们。
此选项无效,仅用于与 GNU grep 兼容。
, -``-version
显示版本信息并退出。
, -``-invert-match
选定的行是那些 不 匹配任何指定模式的行。
, -``-word-regexp
表达式作为一个词被搜索(好像被 ‘[[:<:]]’ 和 ‘[[:>:]]’ 包围;参见 re_format(7) )。
, -``-line-regexp
只有针对整个固定字符串或正则表达式选择的输入行才被视为匹配行。
相当于 -i 。已过时。
, -``-null-data
将输入和输出数据视为以零字节而不是换行符结尾的行序列。
-``-binary-files=value
控制二进制文件的搜索和打印。选项是:
(default)
搜索二进制文件但不打印它们。
不要搜索二进制文件。
将所有文件视为文本。
-``-line-buffered
强制输出为行缓冲。 默认情况下,当标准输出是终端时输出是行缓冲的,否则是块缓冲的。
如果没有指定文件参数,则使用标准输入。 此外, “-” 可以用来代替文件名,在任何接受文件名的地方,以从标准输入中读取。 这包括 -f 和文件参数。
grep 实用程序以下列值之一退出:
选择了一条或多条线。
未选择任何行。
发生错误。
查找文件中所有出现的模式 ‘patricia’ :
$ grep 'patricia' myfile
与上面相同,但只查找完整的单词:
$ grep -w 'patricia' myfile
计算确切模式 ‘FOO’ 的出现次数:
ed(1), ex(1), sed(1), zgrep(1), re_format(7)
grep 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。
标志 [-AaBbCDdGHhILmoPRSUVw] 是该规范的扩展,当与空模式文件一起使用时 -f 标志的行为未定义。
提供所有长选项是为了与该实用程序的 GNU 版本兼容。
grep 实用程序的历史版本也支持标志 [-ruy] 。此实现支持这些选项;但是,强烈建议不要使用它们。
grep 命令首次出现在 Version 6 AT&T UNIX 中。
November 19, 2020
FreeBSD 13.1-RELEASE
--ignore-all-space--ignore-case--ignore-space-change--initial-tab--minimal--no-ignore-file-name-case--normal--rcs--show-c-function--starting-file--speed-large-files--strip-trailing-cr--tabsize--text--unified-I--ignore-matching-lines-L--labeldiff-aBbdilpTtw-I--ignore-matching-lines-L--label--brief--changed-group-format--ed--expand-tabs--forward-ed--ignore-all-space--ignore-case--ignore-space-change--initial-tab--minimal--no-ignore-file-name-case--normal--paginate--rcs--show-c-function--speed-large-files--starting-file--strip-trailing-cr--tabsize--text-Cdiff-aBbdiltw-I--ignore-matching-lines--brief--changed-group-format--ed--expand-tabs--forward-ed--ignore-all-space--ignore-case--ignore-space-change--initial-tab--minimal--no-ignore-file-name-case--normal--paginate--rcs--show-c-function--speed-large-files--starting-file--strip-trailing-cr--tabsize--text-D--ifdefdiff-aBbdilpTtw-I--ignore-matching-lines-L--label--brief--changed-group-format--ed--expand-tabs--forward-ed--ignore-all-space--ignore-case--ignore-space-change--initial-tab--minimal--no-ignore-file-name-case--normal--paginate--rcs--show-c-function--speed-large-files--starting-file--strip-trailing-cr--tabsize--text-U--unifieddiff-aBbdilNPprsTtw-c-e-f-n-q-u--brief--changed-group-format--context--ed--expand-tabs--forward-ed--ignore-all-space--ignore-case--ignore-space-change--initial-tab--minimal--new-file--no-ignore-file-name-case--normal--paginate--rcs--recursive--report-identical-files--show-c-function--speed-large-files--strip-trailing-cr--tabsize--text--unidirectional-new-file--unified-I--ignore-matching-lines-L--label-S--starting-file-X--exclude-from-x--excludediff-aBbditwW--expand-tabs--ignore-all-blanks--ignore-blank-lines--ignore-case--minimal--no-ignore-file-name-case--strip-trailing-cr--suppress-common-lines--tabsize--text--width-y--side-by-side-``-label--line-buffered-``-null$ grep -c FOO myfile
与上面相同,但忽略大小写:
$ grep -c -i FOO myfile
在行首查找所有出现的模式 ‘.Pp’ :
$ grep '^\.Pp' myfile
撇号确保整个表达式由 grep 而不是用户的 shell 评估。 插入符号 ‘^’ 匹配行首的空字符串,而 ‘\’ 转义 ‘.’, 否则将匹配任何字符。
查找文件中不包含单词 ‘foo’ 或 ‘bar’ 的所有行:
$ grep -v -e 'foo' -e 'bar' myfile
使用扩展正则表达式仔细阅读文件 ‘calendar’ 以查找 19、20 或 25:
$ egrep '19|20|25' calendar
显示匹配行和包含模式 ‘FIXME’ 的 ‘*.h’ 文件的名称。 从 /usr/src/sys/arm 目录递归搜索
$ grep -H -R FIXME --include=*.h /usr/src/sys/arm/
与上面相同,但仅显示匹配文件的名称:
$ grep -l -R FIXME --include=*.h /usr/src/sys/arm/
显示包含文本 ‘foo’ 的行。 输出的匹配部分是彩色的,每一行都以行号和匹配行的文件中的偏移量作为前缀。
$ grep -b --colour -n foo myfile
显示与从标准输入读取的扩展正则表达式模式匹配的行:
$ echo -e 'Free\nBSD\nAll.*reserved' | grep -E -f - myfile
显示 pciconf(8) 命令输出中与指定扩展正则表达式匹配的行以及三行前导上下文和一行尾随上下文:
$ pciconf -lv | grep -B3 -A1 -E 'class.*=.*storage'
抑制任何输出并使用退出状态显示适当的消息:
$ grep -q foo myfile && echo File matches
awk [-safe] [-version] [-d[n]] [-F fs] [-v var=value] [prog | -f progfile] file ...
awk 扫描每个输入 file 以查找与 prog 或一个或多个指定为 -f progfile 的文件中指定的一组模式中的任何一个匹配的行。 对于每个模式,当 file 的一行与模式匹配时,将执行一个关联的操作。 每一行都与每个模式动作语句的模式部分匹配;为每个匹配的模式执行相关的操作。 文件名 ‘-’ 表示标准输入。 任何 var=value 形式的 file 都被视为一个赋值,而不是一个文件名,如果它是一个文件名,它会在它被打开的时候被执行。
选项如下:
-d[n]
调试模式。 将调试级别设置为 n, 如果未指定 n ,则设置为 1。 大于 1 的值会导致 awk 在发生致命错误时转储核心。
-F fs
将输入字段分隔符定义为正则表达式 fs 。
-f progfile
从指定的文件 progfile 而不是从命令行读取程序代码。
禁用文件输出 (print > 、 print >>) 、 进程创建 (cmd | getline 、 print | 、 system) 和对环境的访问 (ENVIRON; 请参阅下面的变量部分)。 这是 awk 的 “safe” 版本的第一个 (但不是非常可靠的) 近似值。
将 awk 的版本号打印到标准输出并退出。
-v var=value
在执行 prog 之前为变量 var 赋 value ;可以存在任意数量的 -v 选项。
输入通常由由换行符或 RS 值分隔的输入行 (records) 组成。 如果 RS 为空,则使用任意数量的空行作为记录分隔符,并使用换行符作为字段分隔符(除了 FS 的值)。 这在处理多行记录时很方便。
输入行通常由由空格或正则表达式 FS 分隔的字段组成。 字段表示为 $1, $2, ..., 而 $0 表示整行。 如果 FS 为空,则输入行被拆分为每个字符一个字段。
通常,任意数量的空白分隔字段。 要将字段分隔符设置为单个空白,请使用值为 ‘[ ]’ 的 -F 选项。 如果指定了 ‘t’ 的字段分隔符,则 awk 将其视为已指定 ‘\t’ 并使用 ⟨TAB⟩ 作为字段分隔符。 为了使用文字 ‘t’ 作为字段分隔符,请使用 -F 选项,其值为 ‘[t]’ 。
模式动作语句具有以下形式
pattern { action }
缺少 { action } 表示打印该行;缺失的模式总是匹配的。 模式操作语句由换行符或分号分隔。
允许在终止语句之后或逗号 (‘,’) 、左大括号 (‘{’) 、逻辑 AND (‘&&’) 、逻辑 OR (‘||’) 和 ‘do’ 之后使用换行符或 ‘else’ 关键字,或在 ‘if 、’ ‘for’ 或 ‘while’ 语句的右括号之后。 此外,反斜杠 (‘\’) 可用于转义标记之间的换行符。
动作是一系列语句。 语句可以是以下之一:
if (expression) statement [else statement]
while (expression) statement
for (expression; expression; expression) statement
for (var in array) statement
do statement while (expression)
{ [statement ...] }
expression # commonly var = expression
print [expression-list] [>expression]
printf format [..., expression-list] [>expression]
return [expression]
next # skip remaining patterns on this input line
nextfile # skip rest of this file, open next, start at top
delete array[expression] # delete an array element
delete array # delete all elements of array
exit [expression] # exit immediately; status is expression
语句以分号、换行符或右大括号结束。 一个空的 expression-list 代表 $0 。 字符串常量用 "" 引用,其中识别出通常的 C 转义(请参阅 printf(1) 以获取这些转义的完整列表)。 表达式根据需要采用字符串或数值,并使用运算符 + - * / % ^ (求幂) 和连接 (由空格表示) 构建。 运算符 ! ++ -- += -= *= /= %= ^= > >= < <= == != ?: 也可用于表达式。 变量可以是标量、数组元素(表示为 x[i]) 或字段。 变量被初始化为空字符串。 数组下标可以是任意字符串,不一定是数字;这允许一种形式的联想记忆。 允许使用多个下标,例如 [i,j,k] ;成分是连接的,由 SUBSEP 的值分隔 (请参阅下面的变量部分) 。
print 语句将其参数打印在标准输出上(如果存在 >file 或 >>file 则打印在文件上;如果存在 | cmd ,则打印在管道上),由当前输出字段分隔符分隔,并由输出记录分隔符终止. file 和 cmd 可以是文字名称或带括号的表达式;不同语句中的相同字符串值表示相同的打开文件。 printf 语句根据格式格式化其表达式列表(请参阅 printf(1) )。
模式是正则表达式和关系表达式的任意布尔组合(带有 ! || &&) 。 awk 支持扩展正则表达式 (ERE) 。 有关正则表达式的更多信息,请参阅 re_format(7) 。 模式中的独立正则表达式适用于整行。 正则表达式也可能出现在关系表达式中,使用运算符 ~ 和 !~ 。 /re/ 是一个常量正则表达式;任何字符串(常量或变量)都可以用作正则表达式,但模式中孤立正则表达式的位置除外。
一个模式可能由两个用逗号分隔的模式组成;在这种情况下,对从第一个模式的出现到第二个模式的出现的所有行执行该动作。
关系表达式是以下之一:
expression matchop regular-expression
expression relop expression
expression in array-name
[(](#()expr, expr, ...) in array-name
其中 relop 是 C 中六个关系运算符中的任何一个,而 matchop 是 ~ (匹配)或 !~ 不匹配)。 条件是算术表达式、关系表达式或它们的布尔组合。
特殊模式 BEGIN 和 END 可用于在读取第一个输入行之前和最后一个输入行之后捕获控制。 BEGIN 和 END 不与其他模式组合。
具有特殊含义的变量名:
ARGC
参数计数,可分配。
ARGV
参数数组,可赋值;非空成员被视为文件名。
CONVFMT
转换数字时的转换格式(默认 “%.6g” )。
ENVIRON
环境变量数组;下标是名称。
FILENAME
当前输入文件的名称。
FNR
当前文件中当前记录的序号。
FS
用于分隔字段的正则表达式;也可以通过选项 -F fs 设置。
NF
当前记录中的字段数。 $NF 可用于获取当前记录中最后一个字段的值。
NR
当前记录的序号。
OFMT
数字的输出格式(默认 “%.6g” 数字的输出格式(默认
OFS
输出字段分隔符(默认为空白)。
ORS
输出记录分隔符(默认换行符)。
RLENGTH
match() 函数匹配的字符串的长度。
RS
输入记录分隔符(默认换行符)。
RSTART
match() 函数匹配的字符串的起始位置。
SUBSEP
分隔多个下标(默认 034)。
awk 语言有多种内置函数:算术、字符串、输入/输出、通用和位操作。
可以这样定义函数(在模式动作语句的位置):
function foo(a, b, c) { ...; return x }
如果是标量,参数按值传递,如果是数组名,则按引用传递;函数可以递归调用。 参数是函数的本地参数;所有其他变量都是全局的。 因此,可以通过在函数定义中提供多余的参数来创建局部变量。
atan2(y, x)
以弧度返回 y/x 的反正切。
cos(x)
返回 x 的余弦,其中 x 以弧度为单位。
exp(x)
返回 x 的指数。
int(x)
返回 x 截断为整数值。
log(x)
返回 x 的自然对数。
rand()
返回一个随机数 n ,满足 0≤n <1 。
sin(x)
返回 x 的正弦值,其中 x 以弧度为单位。
sqrt(x)
返回 x 的平方根。
srand(expr)
将 rand() 的种子设置为 expr 并返回前一个种子。 如果省略 expr ,则使用一天中的时间。
gsub(r, t, s)
与 sub() 相同,只是替换了所有出现的正则表达式。 gsub() 返回替换的数量。
index(s, t)
s 中字符串 t 出现的位置,如果没有出现,则为 0。
length(s)
s 作为字符串的长度,如果没有给出参数,则为 $0 。
match(s, r)
正则表达式 r 在 s 中出现的位置,如果没有出现,则为 0。 变量 RSTART 设置为匹配字符串的起始位置 (与返回值相同) ,如果未找到匹配项,则设置为零。 变量 RLENGTH 设置为匹配字符串的长度,如果没有找到匹配项,则设置为 -1 。
split(s, a, fs)
将字符串 s 拆分为数组元素 a[1], a[2], ..., a[n]- 并返回 n 。 如果没有给出 fs ,则使用正则表达式 FS 或字段分隔符 fs 进行分隔。 一个空字符串作为字段分隔符将字符串拆分为每个字符一个数组元素。
sprintf(fmt, expr, ...)
根据 printf(1) 格式 fmt 格式化 expr, ... 产生的字符串。
sub(r, t, s)
用 t 代替字符串 s 中第一次出现的正则表达式 r 。 如果没有给出 s ,则使用 $0 。 t 中的 & 符号 (‘&’) 在字符串 s 中被替换为正则表达式 r 。 可以通过在其前面加上两个反斜杠 (‘\\’) 来指定文字 & 符号。 可以通过在其前面加上另一个反斜杠 (‘\\’) 来指定文字反斜杠。 sub() 返回替换的数量。
substr(s, m, n)
最多返回从位置 m 开始的 s 的 n 个字符的子字符串,从 1 开始计数。 如果省略 n ,或者如果 n 指定的字符多于字符串中剩余的字符,则子字符串的长度受 s 长度的限制。
tolower(str)
返回 str 的副本,其中所有大写字符都转换为对应的小写字符。
toupper(str)
返回 str 的副本,其中所有小写字符都转换为对应的大写字符。
close(expr)
关闭文件或管道 expr 。 expr 应该与用于打开文件或管道的字符串匹配。
cmd | getline [var]
从 cmd 的输出通过管道传输的流中读取输入记录。 如果省略 var ,则设置变量 $0 和 NF 。 否则设置 var 。 如果流未打开,则将其打开。 只要流保持打开状态,后续调用就会从流中读取后续记录。 流保持打开状态,直到通过调用 close() 显式关闭。 getline 返回 1 表示输入成功,0 表示文件结束, -1 表示错误。
fflush([expr])
刷新文件或管道 expr 的任何缓冲输出,或者如果省略 expr ,则刷新所有打开的文件或管道。 expr 应该与用于打开文件或管道的字符串匹配。
将 $0 设置为当前输入文件中的下一个输入记录。 这种形式的 getline 设置变量 NF 、 NR 和 FNR 。 getline 返回 1 表示输入成功,0 表示文件结束, -1 表示错误。
getline var
将 $0 设置为变量 var 。 这种形式的 getline 设置变量 NR 和 FNR 。 getline 返回 1 表示输入成功,0 表示文件结束, -1 表示错误。
getline [var] <file
将 $0 设置为 file 中的下一条记录。 如果省略 var ,则设置变量 $0 和 NF 。否则设置 var 。 如果 file 未打开,则将其打开。 只要流保持打开状态,后续调用就会从 file 中读取后续记录。 file 保持打开状态,直到通过调用 close() 显式关闭。
system(cmd)
执行 cmd 并返回其退出状态。
compl(x)
返回整数参数 x 的按位补码。
and(v1, v2, ...)
对提供的所有参数执行按位与,作为整数。 必须至少有两个值。
or(v1, v2, ...)
对提供的所有参数执行按位或,作为整数。 必须至少有两个值。
xor(v1, v2, ...)
对提供的所有参数执行按位异或,作为整数。 必须至少有两个值。
lshift(x, n)
返回向左移动 n 位的整数参数 x。
rshift(x, n)
返回整数参数 x 向右移动 n 位。
The awk utility exits 0 on success, and >0 if an error occurs.
但请注意, exit 表达式可以修改退出状态。
打印长度超过 72 个字符的行:
length($0) > 72
以相反的顺序打印前两个字段:
{ print $2, $1 }
同样,输入字段由逗号和/或空格和制表符分隔:
BEGIN { FS = ",[ \t]*|[ \t]+" } { print $2, $1 }
将第一列相加,打印总和和平均值:
{ s += $1 } END { print "sum is", s, " average is", s/NR }
打印开始/停止对之间的所有行:
/start/, /stop/
模拟 echo(1):
BEGIN { # Simulate echo(1) for (i = 1; i < ARGC; i++) printf "%s ", ARGV[i] printf "\n" exit }
将错误消息打印到标准错误:
{ print "error!" > "/dev/stderr" }
cut(1), lex(1), printf(1), sed(1), re_format(7) A. V. Aho, B. W. Kernighan, and P. J. Weinberger, The AWK Programming Language, Addison-Wesley, 1988, ISBN 0-201-07981-X.
awk 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范,但 awk 不支持 {n,m} 模式匹配。
标志 -d -、 -safe 和 -version 以及命令 fflush, compl, and, or, xor, lshift, rshift 是对该规范的扩展。
awk 实用程序出现在 Version 7 AT&T UNIX 中。
数字和字符串之间没有显式转换。 要强制将表达式视为数字,请向其添加 0;强制将其视为将 "" 连接到它的字符串。
函数中变量的范围规则很糟糕;语法更糟。
June 6, 2020
FreeBSD 13.1-RELEASE
atqatrm排队、检查或删除作业以供以后执行
at [-q queue] [-f file] [-mldbv] time at [-q queue] [-f file] [-mldbv] -t [[CC]YY]MMDDhhmm[.SS] at -c job [job ...] at -l [job ...] at -l -q queue at -r job [job ...]
atq [-q queue] [-v]
atrm job [job ...]
batch [-q queue] [-f file] [-mv] [time]
at 和 batch 实用程序使用 sh(1) 从标准输入或指定文件中读取命令,这些命令将在以后执行。
at
在指定时间执行命令;
atq
列出用户的待处理作业,除非用户是超级用户;在这种情况下,每个人的工作都会被列出;
atrm
删除工作;
batch
在系统负载水平允许时执行命令;换句话说,当负载平均下降到低于活动 CPU 数量的 1.5 倍时,或者在调用 atrun 时指定的值。
at 实用程序允许一些中等复杂的 time 规范。 它接受 HHMM 或 HH:MM 形式的时间以在一天中的特定时间运行作业。 (如果该时间已经过去,则假定为第二天。) 作为替代方案,可以指定以下关键字: midnight, noon 或 teatime (4pm) 并且时间可以以 AM 或 PM 为后缀以在早上或晚上运行。 作业运行的日期也可以通过以 month-name day 的形式给出日期和可选的 year 来指定,或者以 DD.MM.YYYY, DD.MM.YY, MM/DD/YYYY, MM/DD/YY, MMDDYYYY 或 MMDDYY 。 日期的指定必须遵循时间的指定。 时间也可以指定为: [now] + count time-units ,其中时间单位可以是 minutes, hours, days, weeks, months 或 years ,并且可以通过在 time 后面加上 today 来告诉 at 今天运行作业并通过在 tomorrow 后缀时间来运行明天的工作。
例如,要在三天之后的下午4点运行一个作业,使用 at 4pm + 3 days ,要在7月31日上午10点运行一个作业,使用 at 10am Jul 31 ,要在明天凌晨1点运行一个作业,使用 at 1am tomorrow 。
at 实用程序还支持 POSIX 时间格式(请参阅 -t 选项)。
对于 at 和 batch ,从标准输入或使用 -f 选项指定的文件读取命令并执行。 工作目录、环境(变量 TERM, TERMCAP, DISPLAY 和 _ 除外)和 umask 从调用时起保留。 从 su(1) shell 调用的 at 或 batch 命令将保留当前用户 ID。 如果有的话,用户将收到来自他的命令的标准错误和标准输出。 邮件将使用命令 sendmail(8) 发送。 如果从 su(1) shell 执行 at ,登录 shell 的所有者将收到邮件。
超级用户在任何情况下都可以使用这些命令。 对于其他用户,使用 at 的权限由文件 /var/at/at.allow 和 /var/at/at.deny 确定。
如果文件 /var/at/at.allow 存在,则只允许其中提到的用户名使用 at 。 在这两个文件中,仅当用户名在其行之前没有空格或其他字符并且在名称之后紧跟换行符时,即使在文件末尾,用户才被认为是列出的。 其他行被忽略,可用于注释。
如果 /var/at/at.allow 不存在,则检查 /var/at/at.deny ,然后允许其中未提及的每个用户名使用 at 。
如果两者都不存在,则只允许超级用户使用 at 。 这是默认配置。
请注意, at 是通过 cron(8) 守护进程通过每五分钟调用一次 atrun(8) 来实现的。 这意味着 at 的粒度可能并非对每个部署都是最佳的。 如果需要更精细的粒度,可以编辑 /etc/cron.d/at 文件,并将由系统 crontab 读取, SHELL 和 PATH 环境变量从该文件继承。
-q queue
使用指定的队列。 队列名称由单个字母组成;有效的队列名称范围从 a 到 z 和 A 到 Z 。 c 队列是 at 的默认队列, E 队列是 batch 的默认队列。 具有更高字母的队列运行得更好。 如果将作业提交到以大写字母指定的队列,则将其视为当时已提交到批处理。 如果给 atq 一个特定的队列,它将只显示该队列中待处理的作业。
即使没有输出,也可以在作业完成后向用户发送邮件。
-f file
从 file 而不是标准输入中读取作业。
不带参数,列出调用用户的所有作业。 如果给出了一个或多个工作编号,请仅列出这些工作。
是 atrm 的别名(此选项已弃用;请改用 -r )。
是 batch 的别名。
对于 atq, 显示队列中已完成但尚未删除的作业;否则显示作业将执行的时间。
将命令行上列出的作业分类到标准输出。
删除指定的作业。
使用 POSIX 时间格式指定作业时间。 参数应采用 [[CC]YY]MMDDhhmm[.SS] 形式,其中每对字母代表以下内容:
CC
年份的前两位数字(世纪)。
YY
年份的后两位数。
MM
一年中的月份,从 1 到 12。
DD
一个月中的第几天,从 1 到 31。
hh
一天中的小时,从 0 到 23。
mm
小时的分钟,从 0 到 59。
SS
分钟的秒数,从 0 到 60。
如果未指定 CC 和 YY 字母对,则默认值为当前年份。 如果未指定 SS 字母对,则该值默认为 0。
/var/at/jobs
包含作业文件的目录
/var/at/spool
包含输出假脱机文件的目录
/var/run/utx.active
登录记录
/var/at/at.allow
允许权限控制
/var/at/at.deny
拒绝权限控制
/var/at/jobs/.lockfile
创造工作锁定文件
nice(1), sh(1), umask(2), atrun(8), cron(8), sendmail(8)
At 主要由 Thomas Koenig <[email protected]> 编写。 时间解析例程由 David Parsons <[email protected]> 编写, Joe Halpin <[email protected]> 进行了小幅改进。
如果文件 /var/run/utx.active 不可用或损坏,或者如果在调用 at 时用户未登录,则邮件将发送到在环境变量 LOGNAME 中找到的用户 ID。 如果未定义或为空,则假定为当前用户 ID。
当前实现的 at 和 batch 实用程序不适用于用户竞争资源时。 如果是这种情况,另一个批处理系统(例如 nqs )可能更合适。
指定超过 2038 年的日期可能不适用于某些系统。
August 11, 2018
FreeBSD 13.1-RELEASE
GREP(1)
GREP(1)
FreeBSD General Commands Manual
GREP(1)
grep, egrep, fgrep, rgrep —
文件模式搜索器
grep [-abcdDEFGHhIiLlmnOopqRSsUVvwxz] [-A num] [-B num] [-C[num]] [-e pattern] [-f file] [-``-binary-files=value] [-``-color[=when]] [-``-colour[=when]] [-``-context[=
grep 实用程序搜索任何给定的输入文件,选择匹配一个或多个模式的行。 默认情况下,如果模式中的正则表达式 (RE) 匹配输入行而没有尾随换行符,则该模式匹配输入行。 空表达式匹配每一行。 与至少一种模式匹配的每个输入行都被写入标准输出。
grep 用于简单模式和基本正则表达式 (BREs); egrep 可以处理扩展正则表达式 (ERE) 。 有关正则表达式的更多信息,请参阅 re_format(7) 。 fgrep 比 grep 和 egrep 都快,但只能处理固定模式(即,它不解释正则表达式)。 模式可以由一行或多行组成,允许任何模式行匹配输入的一部分。
可以使用以下选项:
num, -``-after-context=num
每次匹配后打印 num 行尾随上下文。 另请参见 -B 和 -C 选项。
, -``-text
将所有文件视为 ASCII 文本。 如果文件包含二进制字符,通常 grep 将简单地打印 “Binary file ... matches” 。 使用此选项会强制 grep 输出与指定模式匹配的行。
num, -``-before-context=num
在每次匹配之前打印前导上下文的 num 行。 另请参见 -A 和 -C 选项。
, -``-byte-offset
匹配模式的字节偏移量显示在相应匹配行的前面。
[num], -``-context[=num]
打印围绕每个匹配项的前导和尾随上下文的 num 行。 num 的默认值为 “2” ,相当于 “-A 2 -B 2” 。 注意:选项和它的参数之间不能有空格。
, -``-count
只有选定的行数被写入标准输出。
-``-colour=[when], -``-color=[when]
使用 GREP_COLOR 环境变量中存储的表达式标记匹配文本。 when 的可能值是 “never”, “always” 和 “auto” 。
action, -``-devices=action
为设备、FIFO 和套接字指定所需的 action 。 默认 action 是 “read” ,这意味着它们像普通文件一样被读取。 如果 action 设置为 “skip” ,设备将被静默跳过。
action, -``-directories=action
指定目录所需的 action 。 默认为 “read” ,这意味着目录的读取方式与普通文件相同。 其他可能的值是 “skip” 以静默忽略目录, “recurse” 以递归方式读取它们,这与 -R 和 -r 选项的效果相同。
, -``-extended-regexp
将 pattern 为扩展的正则表达式(即,强制 grep 表现为 egrep )。
pattern, -``-regexp=pattern
指定在搜索输入期间使用的 pattern :如果输入行匹配任何指定的模式,则选择该输入行。 当使用多个 -e 选项指定多个模式时,或者当一个 pattern 以破折号 (‘-’) 开头时,此选项最有用。
-``-exclude pattern
如果指定,它将从搜索中排除与给定文件名 pattern 匹配的文件。 请注意, -``-exclude 和 -``-include 模式是按给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include 模式,则搜索所有未排除的文件。 模式与指定的完整路径匹配,而不仅仅是文件名组件。
-``-exclude-dir pattern
如果指定了 -R ,它将从搜索中排除与给定文件名 pattern 匹配的目录。 请注意, -``-exclude-dir 和 -``-include-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 如果未指定 -``-include-dir 模式,则搜索所有未排除的目录。
, -``-fixed-strings
将 pattern 解释为一组固定字符串(即强制 grep 表现为 fgrep )。
file, -``-file=file
从 file 中读取一个或多个换行符分隔的模式。空模式行匹配每个输入行。 换行符不被视为模式的一部分。 如果 file 为空,则不匹配。
, -``-basic-regexp
将 pattern 解释为基本的正则表达式(即强制 grep 表现得像传统的 grep )。
始终使用输出行打印文件名标题。
, -``-no-filename
切勿使用输出行打印文件名标题 (即 filenames) 。
-``-help
打印简短的帮助信息。
忽略二进制文件。 此选项等效于 “-``-binary-file=``without-match” 选项。
, -``-ignore-case
执行不区分大小写的匹配。 默认情况下, grep 区分大小写。
-``-include pattern
如果指定,则仅搜索与给定文件名 pattern 匹配的文件。 请注意, -``-include 和 -``-exclude 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。 模式与指定的完整路径匹配,而不仅仅是文件名组件。
-``-include-dir pattern
如果指定了 -R ,则仅搜索与给定文件名 pattern 匹配的目录。 请注意, -``-include-dir 和 -``-exclude-dir 模式是按照给定的顺序处理的。 如果一个名称匹配多个模式,则最新的匹配规则获胜。
, -``-files-without-match
只有不包含所选行的文件名才会写入标准输出。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。
, -``-files-with-matches
只有包含选定行的文件名被写入标准输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。 每个搜索的文件都会列出一次路径名。 如果搜索标准输入,则写入字符串 “(standard input)” ,除非指定 -``-label 。
-``-label
用于代替 “(standard input)” 的标签,用于通常打印文件名的文件名。 此选项适用于 -H, -L 和 -l 。
-``-mmap
使用 mmap(2) 而不是 read(2) 来读取输入,这在某些情况下可能会带来更好的性能,但可能会导致未定义的行为。
num, -``-max-count=num
在 num 匹配后停止读取文件。
, -``-line-number
每个输出行前面都有其在文件中的相对行号,从第 1 行开始。 为每个处理的文件重置行号计数器。 如果指定了 -c, -L, -l 或 -q ,则忽略此选项。
-``-null
在文件名之后打印一个零字节。
如果指定了 -R ,则仅当符号链接在命令行上明确列出时才跟随它们。 默认不遵循符号链接。
, -``-only-matching
仅打印行的匹配部分。
如果指定了 -R ,则不遵循任何符号链接。 这是默认设置。
, -``-quiet, - -silent
安静模式:抑制正常输出。 grep 只会在找到匹配项之前搜索文件,从而降低搜索成本。
, -r, -``-recursive
递归搜索列出的子目录。 (即,强制 grep 表现为 rgrep )。
如果指定了 -R ,则遵循所有符号链接。 默认不遵循符号链接。
, -``-no-messages
静音模式。 不存在和不可读的文件被忽略(即,它们的错误消息被抑制)。
, -``-binary
搜索二进制文件,但不要尝试打印它们。
此选项无效,仅用于与 GNU grep 兼容。
, -``-version
显示版本信息并退出。
, -``-invert-match
选定的行是那些 不 匹配任何指定模式的行。
, -``-word-regexp
表达式作为一个词被搜索(好像被 ‘[[:<:]]’ 和 ‘[[:>:]]’ 包围;参见 re_format(7) )。
, -``-line-regexp
只有针对整个固定字符串或正则表达式选择的输入行才被视为匹配行。
相当于 -i 。已过时。
, -``-null-data
将输入和输出数据视为以零字节而不是换行符结尾的行序列。
-``-binary-files=value
控制二进制文件的搜索和打印。选项是:
(default)
搜索二进制文件但不打印它们。
不要搜索二进制文件。
将所有文件视为文本。
-``-line-buffered
强制输出为行缓冲。 默认情况下,当标准输出是终端时输出是行缓冲的,否则是块缓冲的。
如果没有指定文件参数,则使用标准输入。 此外, “-” 可以用来代替文件名,在任何接受文件名的地方,以从标准输入中读取。 这包括 -f 和文件参数。
grep 实用程序以下列值之一退出:
选择了一条或多条线。
未选择任何行。
发生错误。
查找文件中所有出现的模式 ‘patricia’ :
$ grep 'patricia' myfile
与上面相同,但只查找完整的单词:
$ grep -w 'patricia' myfile
计算确切模式 ‘FOO’ 的出现次数:
ed(1), ex(1), sed(1), zgrep(1), re_format(7)
grep 实用程序符合 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。
标志 [-AaBbCDdGHhILmoPRSUVw] 是该规范的扩展,当与空模式文件一起使用时 -f 标志的行为未定义。
提供所有长选项是为了与该实用程序的 GNU 版本兼容。
grep 实用程序的历史版本也支持标志 [-ruy] 。此实现支持这些选项;但是,强烈建议不要使用它们。
grep 命令首次出现在 Version 6 AT&T UNIX 中。
November 19, 2020
FreeBSD 13.1-RELEASE
APROPOS(1)
APROPOS(1)
FreeBSD General Commands Manual
APROPOS(1)
apropos, whatis —
搜索手册页数据库
apropos [-afk] [-C file] [-M path] [-m path] [-O outkey] [-S arch] [-s section] expression ...
apropos 和 whatis 实用程序查询由 makewhatis(8) 生成的手册页数据库,评估每个数据库中每个文件的 expression 。 默认情况下,它们显示所有匹配手册的名称、章节编号和描述行。
默认情况下, apropos 在 man(1) 规定的默认路径中搜索 makewhatis(8) 数据库,并使用不区分大小写的扩展正则表达式匹配手动名称和描述 (the Nm 和 Nd 宏键) 。 多个术语意味着成对 -o 。
whatis 是 apropos -f 的同义词。
选项如下:
不是只显示标题行,而是显示完整的手册页,就像 man(1) -a 一样。 如果标准输出是终端设备且未指定 -c ,则使用 more(1) 对其进行分页。 在 -a 模式下, mandoc(1) 手册中描述的选项 -IKOTW 也可用。
file
以 man.conf(5) 格式指定替代配置 file 。
仅在手册页名称中搜索 expression 中的所有单词。 搜索不区分大小写,仅匹配整个单词。 在此模式下,宏键、比较运算符和逻辑运算符不可用。
支持完整的 expression 语法。 这是 apropos 的默认值。
path
使用冒号分隔的路径而不是搜索 makewhatis(8) 数据库的默认路径列表。 无效路径或没有手动数据库的路径将被忽略。
path
将冒号分隔的路径添加到搜索 makewhatis(8) 数据库的路径列表中。 无效路径或没有手动数据库的路径将被忽略。
outkey
显示与键 outkey 关联的值,而不是手动描述。
arch
将搜索限制在指定 machine(1) 架构的页面。 arch 不区分大小写。 默认情况下,会显示所有架构的页面。
section
将搜索限制在手册的指定部分。 默认情况下,显示所有部分的页面。 请参阅 man(1) 以获取部分列表。
选项 -chlw 也受支持,并记录在 man(1) 中。 选项 -fkl 是互斥的并且相互覆盖。
expression 由逻辑运算符 -a (and) 和 -o (or) 连接的搜索词组成。 -a 运算符优先于 -o 并且两者都是从左到右计算的。
( expr )
如果子表达式 expr 为真,则为真。
expr1 -a expr2
如果 expr1 和 expr2 都为真(逻辑 ‘and’ ),则为真。
expr1 [-o] expr2
如果 expr1 和/或 expr2 评估为真(逻辑 ‘or’ ),则为真。
term
如果满足 term ,则为真。 这有语法 [[key[,key...]](=|~)]val, 其中 key 是要查询的 mdoc(7) 宏, val 是它的值。 有关可用键的列表,请参阅 。运算符 = 计算子字符串,而 ~ 计算区分大小写的扩展正则表达式。
term
如果 term 是正则表达式,则不区分大小写。 对子字符串项没有影响。
结果首先根据节号按数字升序排序,然后按页面名称按 ascii(7) 字母升序排序,不区分大小写。
每个输出行的格式为
name[, name...](sec) - description
其中 “name” 是手册的名称, “sec” 是手册部分, “description” 是手册的简短描述。 如果为手册指定了架构,则显示为
name(sec/arch) - description
生成的手册可以以
$ man -s sec name
如果在输出中指定了体系结构,请使用
$ man -s sec -S arch name
查询评估由 makewhatis(8) 索引的 mdoc(7) 宏子集。 除了下面列出的宏键之外,特殊键 any 可用于匹配任何可用的宏键。
名称和描述:
手册名称
单行手册描述
机器架构(不区分大小写)
手册节号
节和交叉引用:
节标题(不包括标准节)
小节标题
对另一个手册页的交叉引用
书目参考
命令行实用程序的语义标记:
命令行选项(标志)
命令修饰符
命令参数
内部或交互式命令
环境变量
文件系统路径
函数库的语义标记:
函数库名称
包含文件
函数返回类型
函数名称
函数参数类型和名称
变量类型
变量名称
定义变量或预处理器常量
错误常量
环境变量
各种语义标记:
作者姓名
超链接
“mailto”超链接
内核配置声明
数学符号
商品名
物理标记:
斜体或下划线
粗体字体
打字机字体
文本生成:
参考标准文档
AT&T UNIX 版本参考
BSD 版本参考
BSD/OS 版本参考
NetBSD 版本参考
FreeBSD 版本参考
OpenBSD 版本参考
DragonFly 版本参考
一般来说,宏键应该产生完整的结果,而不期望用户考虑实际的宏使用。 例如,结果包括:
函数参数出现在 Fn 行中
函数名用 Fo 宏标记
include 文件名用 Fd 宏标记
显示为函数返回类型的类型
SYNOPSIS 中函数参数中出现的类型
使用环境变量 MANPAGER 的任何非空值代替标准分页程序, more(1); 有关详细信息,请参见 man(1) 。 仅在指定 -a 或 -l 时使用。
用于搜索手册页的以冒号分隔的目录列表;有关详细信息,请参见 man(1) 。 被 -M 覆盖,如果指定了 -l ,则忽略。
指定未定义 MANPAGER 如果 PAGER 和 MANPAGER 均未定义,则使用 more(1) -s 。 仅在指定 -a 或 -l 时使用。
mandoc.db
makewhatis(8) 关键字数据库的名称
/etc/man.conf
默认 man(1) 配置文件
The apropos utility exits 0 on success, and >0 if an error occurs.
搜索 “.cf” 作为手册名称和描述的子字符串:
$ apropos =.cf
还包括 “.cnf” 和 “.conf” 的匹配项:
$ apropos =.cf =.cnf =.conf
使用区分大小写的正则表达式在名称和描述中搜索:
$ apropos '~set.?[ug]id'
在提及 “optind” 和 “optarg” 变量的库部分中搜索手册:
$ apropos -s 3 Va=optind -a Va=optarg
执行与使用参数 “ssh” 调用 whatis 完全相同的操作:
$ apropos -- -i 'Nm~[[:<:]]ssh[[:>:]]'
以下两个调用是等效的:
$ apropos -S arch -s section expression
$ apropos \( expression \) -a arch~^(arch|any)$ -a sec~^section$
man(1), re_format(7), makewhatis(8)
apropos 实用程序符合 man(1) -k 的 IEEE Std 1003.1-2008 (“POSIX.1”) 规范。
所有选项、 whatis 命令、对逻辑运算符、宏键、子字符串匹配、结果排序、环境变量 MANPAGER 和 MANPATH 、数据库格式和配置文件的支持都是该规范的扩展。
whatis 的部分功能已经由 1BSD 中的前 manwhere 实用程序提供。 apropos 和 whatis 实用程序首先出现在 2BSD 中。 它们是针对 OpenBSD 5.6 从头开始重写的。
-M 选项和 MANPATH 变量最早出现在 4.3BSD; -m 在 4.3BSD-Reno 中; -C 在 4.4BSD-Lite1 中;和 -S 和 -s 在 OpenBSD 4.5 中用于 apropos ,在 OpenBSD 5.6 中用于 whatis 。 选项 -acfhIKklOTWw 出现在 OpenBSD 5.7 中。
Bill Joy 于 1977 年写了 manwhere ,最初的 BSD apropos 和 whatis 写于 1979 年 2 月。当前版本由 Kristaps Dzonsons <> 和 Ingo Schwarze <> 编写。
November 22, 2018
FreeBSD 13.1-RELEASE
DTRACE(1)
DTRACE(1)
FreeBSD General Commands Manual
DTRACE(1)
dtrace —
动态跟踪编译器和跟踪实用程序
dtrace [-32 | -64] [-aACeFGhHlqSvVwZ] [-b bufsz] [-c cmd] [-D name [=value]] [-I path] [-L path] [-o output] [-s script] [-U name] [-x arg [=value]] [-X
DTrace 是从 Solaris 移植的综合动态跟踪框架。 DTrace 提供了一个强大的基础架构,允许管理员、开发人员和服务人员简明扼要地回答有关操作系统和用户程序行为的任意问题。
dtrace 命令为 DTrace 工具提供的基本服务提供通用接口,包括:
列出 DTrace 当前发布的探测器和提供程序集的选项
使用任何探针描述说明符(提供者、模块、功能、名称)直接启用探针的选项
运行 D 编译器并编译一个或多个 D 程序文件或直接在命令行上编写的程序的选项
生成匿名跟踪程序的选项
您可以使用 dtrace 来创建 D 脚本,方法是在 shebang 声明中使用它来创建解释器文件。 您还可以使用 dtrace 尝试编译 D 程序并确定它们的属性,而无需使用 -e 选项实际启用跟踪。
-P -、 -m -、 -f -、 -n 和 -i 选项接受的参数可以包括用 predicate 括起来的可选 D 语言谓词和用大括号括起来的可选 D 语言 action 语句列表。 必须适当引用命令行上指定的 D 程序代码以避免 shell 解释元字符。
支持以下选项:
|
D 编译器使用操作系统内核的本机数据模型生成程序。 如果指定了 -32 选项, dtrace 会强制 D 编译器使用 32 位数据模型编译 D 程序。 如果指定了 -64 选项, dtrace 将强制 D 编译器使用 64 位数据模型编译 D 程序。 这些选项通常不是必需的,因为 dtrace 选择本机数据模型作为默认值。 数据模型影响整数类型的大小和其他语言属性。 为任一数据模型编译的 D 程序可以在 32 位和 64 位内核上执行。 -32 和 -64 选项还确定由 -G 选项生成的 elf(5) 文件格式(ELF32 或 ELF64)。
声明匿名跟踪状态并显示跟踪数据。 您可以将 -a 选项与 -e 选项结合使用,以强制 dtrace 在使用匿名跟踪状态后立即退出,而不是继续等待新数据。
生成用于匿名跟踪的指令并将它们写入 /boot/dtrace.dof 。 此选项构造一组 dtrace 配置文件指令以启用指定的探针进行匿名跟踪,然后退出。 默认情况下, dtrace 尝试将指令存储到文件 /boot/dtrace.dof 。 可以使用 -o 选项修改此行为以指定备用输出文件。
bufsz
将主体跟踪缓冲区大小设置为 bufsz 。 跟踪缓冲区大小可以包括任何大小后缀 k、m、g 或 t。 如果无法分配缓冲区空间, dtrace 会根据 bufresize 属性的设置尝试减小缓冲区大小或退出。
cmd
运行指定的命令 cmd 并在完成后退出。 如果命令行上存在多个 -c 选项,则 dtrace 会在所有命令退出时退出,并在每个子进程终止时报告其退出状态。 第一个命令的进程 ID 可用于命令行上指定的任何 D 程序,或通过 $target 宏变量使用 -s 选项。
在编译 D 程序之前,对它们运行 C 预处理器 cpp(1) 。 您可以使用 -D -、 -U -、 -I 和 -H 选项将选项传递给 C 预处理器。 如果使用 -X 选项,则可以选择符合 C 标准的程度。 有关调用 C 预处理器时 D 编译器定义的标记集的描述,请参见 -X 。
name [=value]
调用 cpp(1) 时定义 name 使用 -C 选项启用)。 如果您指定附加 value, 则会为名称分配相应的值。 此选项将 -D 选项传递给每个 cpp(1) 调用。
在编译任何请求并使用匿名跟踪状态 (-a 选项)但在启用任何探测之前退出。 您可以将此选项与 -a 选项结合使用以打印匿名跟踪数据并退出。 您还可以将此选项与 D 编译器选项结合使用。 这种组合验证程序编译时没有实际执行它们并启用相应的检测。
[[provider:] module:] function [[predicate] action]
指定要跟踪或列出的函数名称 (-l 选项)。相应的参数可以包括任何探测描述形式 provider:module:function, module:function, 或 function 。 未指定的探测描述字段留空,并匹配任何探测,无论这些字段中的值如何。 如果描述中没有指定除 function 以外的限定符,则匹配具有相应 function 的所有探测器。 -f 参数可以以可选的 D 探测子句作为后缀。 您可以一次在命令行上指定多个 -f 选项。
通过识别函数入口和返回来合并跟踪输出。 函数入口探测报告是缩进的,它们的输出以 ‘->’ 为前缀。 函数返回探测报告是未缩进的,它们的输出以 ‘<-’ 为前缀。 系统调用入口探测报告是缩进的,它们的输出以 ‘=>’ 为前缀。 系统调用返回探测报告是未缩进的,它们的输出以 ‘<=’ 为前缀。
生成包含嵌入式 DTrace 程序的 ELF 文件。 程序中指定的 DTrace 探针保存在可重定位的 ELF 对象中,该对象可以链接到另一个程序中。 如果存在 -o 选项,则使用指定为此操作数的参数的路径名保存 ELF 文件。 如果 -o 选项不存在并且 DTrace 程序包含一个名为 filename.d 的文件,则使用名称 filename.o 保存 ELF 文件。 否则,ELF 文件将使用名称 d.out 保存。
生成一个头文件,其中包含与指定提供程序定义中的探针相对应的宏。 该选项应该用于生成包含在其他源文件中的头文件,以供以后与 -G 选项一起使用。 如果存在 -o 选项,则使用指定为该选项参数的路径名保存头文件。 如果 -o 选项不存在并且 DTrace 程序包含在名为 filename.d 的文件中,则使用名称 filename.h 保存头文件。
调用 cpp(1) 时打印包含文件的路径名(使用 -C 选项启用)。 此选项将 -H 选项传递给每个 cpp(1) 调用,使其显示路径名列表,每行一个,以显示标准错误。
probe-id [[predicate] action]
指定要跟踪或列出的探测标识符 (probe-id) (l 选项)。 您可以使用十进制整数指定探测 ID,如 `dtrace -l` 所示。 -i 参数可以以可选的 D 探测子句作为后缀。 您一次可以指定多个 -i 选项。
path
调用 cpp(1) 使用 -C 选项启用)时,将指定的目录 path 添加到 #include 文件的搜索路径。 此选项将 -I 选项传递给每个 cpp(1) 调用。 指定的 path 被插入到默认目录列表之前的搜索路径中。
列出探针而不是启用它们。 如果指定了 -l 选项,则 dtrace 会生成与使用 -P -、 -m -、 -f -、 -n -、 -i 和 -s 选项给出的描述相匹配的探测报告。 如果未指定这些选项,则此选项列出所有探测。
path
将指定的目录 path 添加到 DTrace 库的搜索路径中。 DTrace 库用于包含编写 D 程序时可以使用的通用定义。 指定 path 添加在默认库搜索路径之后。
[provider:] module [[predicate] action]
指定要跟踪或列出的模块名称 (-l 选项)。 相应的参数可以包括任何探测描述形式 provider:module 或 module 。 未指定的探测描述字段留空,并匹配任何探测,无论这些字段中的值如何。 如果描述中没有指定除 module 以外的限定符,则匹配具有相应 module 的所有探测器。 -m 参数可以以可选的 D 探测子句作为后缀。 一次可以在命令行上指定多个 -m 选项。
[[[provider:] module:] function:] name [[predicate] action]
指定要跟踪或列出的探测名称 (-l 选项)。 相应的参数可以包括任何探测描述形式 provider:module:function:name 、 module:function:name, function:name 或 name 。 未指定的探测描述字段留空,并匹配任何探测,无论这些字段中的值如何。 如果描述中没有指定除 name 之外的限定符,则匹配具有相应 name 的所有探测器。 -n 参数可以以可选的 D 探测子句作为后缀。 一次可以在命令行上指定多个 -n- 选项。
output
为 -A -、 -G 和 -l 选项或跟踪数据本身指定 output 文件。 如果存在 -A 选项但不存在 -o ,则默认输出文件为 /boot/dtrace.dof 。 如果存在 -G 选项并且 -s 选项的参数的格式为 filename.d 而 -o 不存在,则默认输出文件为 filename.o 。 否则默认输出文件是 d.out 。
pid
获取指定的进程 ID pid ,缓存其符号表,并在完成后退出。 如果命令行上存在多个 -p 选项,则 dtrace 会在所有命令退出后退出,并在每个进程终止时报告其退出状态。 第一个进程 ID 可用于在命令行上指定的任何 D 程序或通过 $target 宏变量使用 -s 选项。
provider [[predicate] action]
指定要跟踪或列出的提供程序名称 (-l 选项)。其余的探测描述字段模块、函数和名称留空,并匹配任何探测,无论这些字段中的值如何。 -P 参数可以以可选的 D 探测子句作为后缀。 您可以一次在命令行上指定多个 -P 选项。
设置静音模式。 dtrace 抑制消息,例如与指定选项和 D 程序匹配的探测器数量,并且不打印列标题、CPU ID、探测器 ID 或在输出中插入换行符。 只有由 D 程序语句(如 ‘dtrace()’ 和 ‘printf()’ 跟踪和格式化的数据才会显示到标准输出。
script
编译指定的 D 程序源文件。 如果存在 -e 选项,则编译程序但不启用检测。 如果存在 -l 选项,则编译程序并列出与其匹配的探针集,但不启用检测。 如果 -e -、 -l -、 -G 或 -A 都不存在,则启用 D 程序指定的检测并开始跟踪。
显示 D 编译器中间代码。 D 编译器生成为每个 D 程序生成的中间代码到标准错误的报告。
name
调用 cpp(1) 时取消定义指定的 name (使用 -C 选项启用)。 此选项将 -U 选项传递给每个 cpp(1) 调用。
设置详细模式。 如果指定了 -v 选项, dtrace 会生成一个程序稳定性报告,显示指定 D 程序的最低接口稳定性和依赖性级别。
报告 dtrace 支持的最高 D 编程接口版本。 版本信息被打印到标准输出并且 dtrace 命令退出。
允许在使用 -s -、 -P -、 -m -、 -f -、 -n 或 -i 选项指定的 D 程序中执行破坏性操作。 如果未指定 -w 选项,则 dtrace 不允许编译或启用包含破坏性操作的 D 程序。
arg [=value]
启用或修改 DTrace 运行时选项或 D 编译器选项。 布尔选项通过指定它们的名称来启用。 带有值的选项是通过用等号 (=) 分隔选项名称和值来设置的。
size 参数可以后缀为 K 、 M 、 G 或 T (大写或小写)之一,以分别表示千字节、兆字节、千兆字节或太字节的倍数。
time 参数可以以 ns 、 nsec 、 us 、 usec 、 ms 、 msec 、 s 、 sec 、 m 、 min 、 h 、 hour 、 d 、 day 、
aggrate=time
聚合读取率。
aggsize=size
聚合缓冲区的大小。
bufpolicy=fill|switch|ring
指定主体缓冲区的缓冲区策略。
bufresize=auto|manual
缓冲区大小调整策略。
bufsize=size
每个 CPU 主要缓冲区的大小。 与 -b 标志相同。
cleanrate=time
清洁率。 必须以 “hz” 后缀为每秒数指定。
cpu=scalar
指定启用跟踪的 CPU。
defaultargs
允许引用未指定的宏参数。
destructive
允许破坏性行为。 与 -w 标志相同。
dynvarsize=size
动态变量空间的大小。
flowindent
打开流动缩进。 与 -F 标志相同。
grabanon
声明匿名状态。 与 -a 标志相同。
jstackframes=scalar
jstack() 的默认堆栈帧数。
jstackstrsize=scalar
jstack() 的默认字符串空间大小。
nspec=scalar
推测的数量。
quiet
设置静音模式。 与 -q 标志相同。
specsize=size
推测缓冲区的大小。
strsize=size
字符串的最大大小。
stackframes=scalar
执行 stack() 操作时展开的最大内核空间堆栈帧数。
stackindent=scalar
缩进 stack() 和 ustack() 输出时使用的空白字符数。
statusrate=time
状态检查率。
switchrate=time
缓冲区切换速率。
ustackframes=scalar
执行 ustack() 操作时要展开的最大用户空间堆栈帧数。
a | | |
指定调用 cpp(1) 时应选择的 ISO C 标准的符合程度(使用 -C 选项启用)。 -X 选项参数会根据参数字母的值影响 __STDC__ 宏的值和存在。
-X 选项支持以下参数:
a
默认。 ISO C 和 K&R 兼容性扩展,具有 ISO C 要求的语义更改。 如果未指定 -X ,这是默认模式。 当 cpp(1) 与 -Xa 选项一起调用时,预定义宏 __STDC__ 的值为 0。
c
一致性。 严格符合 ISO C,没有 K&R C 兼容性扩展。 当 cpp(1) 与 -Xc 选项一起调用时,预定义宏 __STDC__ 的值为 1。
s
仅限 K&R C。 结合 -Xs 选项调用 cpp(1) 时,未定义宏 __STDC__。
t
过渡。 ISO C 加 K&R C 兼容性扩展,无需 ISO C 要求的语义更改。 当 cpp(1) 与 -Xt 选项一起调用时,预定义宏 __STDC__ 的值为 0。
由于 -X 选项仅影响 D 编译器调用 C 预处理器的方式,因此 -Xa 和 -Xt 选项从 D 的角度来看是等效的,并且提供这两个选项只是为了便于重用来自 C 构建环境的设置。
无论 -X 模式如何,始终指定以下附加 C 预处理器定义并且在所有模式下都有效:
__sun
__unix
__SVR4
__sparc (仅在 SPARC 系统上)
允许与零个探测匹配的探测描述。 如果未指定 -Z 选项,如果在 D 程序文件 (-s 选项)或命令行 (-P -、 -m -、 -f -、 -n 或 -i )中指定了任何探测描述,则 dtrace 将报告错误并退出 options) 包含与任何已知探测不匹配的描述。
可以在 dtrace 命令行上指定零个或多个附加参数来定义一组宏变量等)。 附加参数可以在使用 -s 选项或命令行指定的 D 程序中使用。
/boot/dtrace.dof
匿名跟踪指令的文件。
返回以下退出状态:
0
顺利完成。
对于 D 程序请求,退出状态 0 表示程序已成功编译、探测器已成功启用或匿名状态已成功检索。 即使指定的跟踪请求遇到错误或丢弃, dtrace 也会返回 0。
1
发生错误。
对于 D 程序请求,退出状态为 1 表示程序编译失败或无法满足指定的请求。
2
指定了无效的命令行选项或参数。
dtrace 实用程序首次出现在 FreeBSD 7.1 中。
cpp(1) 、 elf(5) 、 SDT(9) 动态跟踪指南.
February 25, 2020
FreeBSD 13.1-RELEASE
-``-label--line-buffered-``-null$ grep -c FOO myfile
与上面相同,但忽略大小写:
$ grep -c -i FOO myfile
在行首查找所有出现的模式 ‘.Pp’ :
$ grep '^\.Pp' myfile
撇号确保整个表达式由 grep 而不是用户的 shell 评估。 插入符号 ‘^’ 匹配行首的空字符串,而 ‘\’ 转义 ‘.’, 否则将匹配任何字符。
查找文件中不包含单词 ‘foo’ 或 ‘bar’ 的所有行:
$ grep -v -e 'foo' -e 'bar' myfile
使用扩展正则表达式仔细阅读文件 ‘calendar’ 以查找 19、20 或 25:
$ egrep '19|20|25' calendar
显示匹配行和包含模式 ‘FIXME’ 的 ‘*.h’ 文件的名称。 从 /usr/src/sys/arm 目录递归搜索
$ grep -H -R FIXME --include=*.h /usr/src/sys/arm/
与上面相同,但仅显示匹配文件的名称:
$ grep -l -R FIXME --include=*.h /usr/src/sys/arm/
显示包含文本 ‘foo’ 的行。 输出的匹配部分是彩色的,每一行都以行号和匹配行的文件中的偏移量作为前缀。
$ grep -b --colour -n foo myfile
显示与从标准输入读取的扩展正则表达式模式匹配的行:
$ echo -e 'Free\nBSD\nAll.*reserved' | grep -E -f - myfile
显示 pciconf(8) 命令输出中与指定扩展正则表达式匹配的行以及三行前导上下文和一行尾随上下文:
$ pciconf -lv | grep -B3 -A1 -E 'class.*=.*storage'
抑制任何输出并使用退出状态显示适当的消息:
$ grep -q foo myfile && echo File matches
acst-p-P-m-f-n-i生成程序稳定性报告的选项
修改 DTrace 跟踪和缓冲行为并启用其他 D 编译器功能的选项
hzhz__sparcv9 (仅在编译 64 位程序时在 SPARC 系统上)
__i386 (仅在 x86 系统上编译 32 位程序时)
__amd64 (仅在 x86 系统上编译 64 位程序时)
__`uname -s`_`uname -r` (例如, ‘FreeBSD_9.2-RELEASE 。’
__SUNW_D=1
__SUNW_D_VERSION=0xMMmmmuuu
其中 MM 是十六进制的主释放值, mmm 是十六进制的次释放值, uuu 是十六进制的微释放值。
ee(1)
ee(1)
ee(1)
ee - 简单的编辑器
ee [-e] [-i] [-h] [+#] [file ...] ree [-e] [-i] [-h] [+#] [file ...]
描述 ee 是一个简单的面向屏幕的文本编辑器。 它始终处于文本插入模式,除非终端底部有提示,或者存在菜单(在终端中间的框中)。 命令 ree 与 ee, 相同,但仅限于编辑命名文件(不允许文件操作或 shell 转义)。
具有类似用户友好品质但功能更多的编辑器可用,称为 aee 。
为了使 ee 正常工作,必须设置环境变量 TERM 来指示正在使用的终端类型。 例如,对于 HP 700/92 终端, TERM 变量应设置为 "70092" 。 如果您需要更多信息,请咨询您的系统管理员。
命令行提供以下选项:
-e
关闭制表符到空格的扩展。
-i
关闭终端顶部信息窗口的显示。
-h
关闭窗口和菜单边框的突出显示(提高某些终端的性能)。
+#
启动时将光标移动到 '#' 行。-
要执行插入文本以外的任何操作,用户必须使用控制键( Control 键,由 "^"表示,与字母键一起按下,例如,^a)和键盘上可用的功能键(例如 Next Page、 Prev Page、 箭头键等)。
由于并非所有终端都具有功能键,因此 ee 具有分配给控制键的基本光标移动功能以及键盘上更直观的键(如果可用)。 例如,要向上移动光标,用户可以使用向上箭头键或 ^u 。
^a 提示输入要插入的字符的十进制值。 ^b 移动到文本底部。 ^c 获取命令提示符。 ^d 向下移动光标。 ^e 提示输入要搜索的字符串。 ^f 取消删除最后一个删除的字符。 ^g 移动到行首。 ^h 退格。 ^i 制表符。 ^j 插入换行符。 ^k 删除光标所在的字符。 ^l 向左移动光标。 ^m 插入换行符。 ^n 移至下一页。 ^o 移动到行尾。 ^p 移至上一页。 ^r 向右移动光标。 ^t 移动到文本的顶部。 ^u 向上移动光标。 ^v 取消删除最后一个删除的单词。 ^w 删除从光标位置开始的单词。 ^x 搜索。 ^y 从光标位置删除到行尾。 ^z 取消删除最后删除的行。 ^[ (ESC) 弹出菜单。
由于许多 shell 提供 Emacs 模式(用于光标移动和其他编辑操作),因此提供了一些可能对熟悉这些绑定的人更有用的绑定。 这些可通过 settings 菜单或初始化文件(见下文)访问。 映射如下:
^a 移动到行首。 ^b 后退 1 个字符。 ^c 命令提示符。 ^d 删除光标所在的字符。 ^e 行尾。 ^f 向前 1 个字符。 ^g 返回上一页。 ^h 退格。 ^i 制表符。 ^j 取消删除最后删除的字符。 ^k 删除行。 ^l 取消删除最后删除的行。 ^m 插入换行符。 ^n 移动到下一行。 ^o 提示输入要插入的字符的十进制值。 ^p 上一行。 ^r 恢复最后删除的单词。 ^t 移动到文本的顶部。 ^u 移动到文本的底部。 ^v 移至下一页。 ^w 删除从光标位置开始的单词。 ^y 提示输入要搜索的字符串。 ^z 下一个词。 ^[ (ESC) 弹出菜单。
Next Page
移至下一页。
Prev Page
移至上一页。
Delete Char
删除光标所在的字符。
Delete Line
从光标处删除到行尾。
Insert line
在光标位置插入换行符。
Arrow keys
沿指示的方向移动光标。
某些操作需要的信息多于单次击键所能提供的信息。 对于最基本的操作,有一个菜单可以通过按 ESC 键获得。 通过获取命令提示符 (^c) 并键入以下命令之一,可以执行相同的操作以及更多操作。
!cmd
在 shell 中执行 cmd 。
0-9
移动到指示的行。
case
使搜索区分大小写。
character
显示光标处字符的 ascii 值。
exit
保存编辑的文本,然后离开编辑器。
expand
将制表符扩展到空格。
file
打印文件名。
help
显示帮助屏幕。
line
显示当前行号。
nocase
使搜索不区分大小写(默认)。
noexpand
按下 TAB 键时不要将制表符展开为空格。
quit
离开编辑器而不保存更改。
read file
读取命名 file 。
write file
将文本写入指定 file 。
可以通过按 escape 键(或 ^[ 如果没有 escape 键)来获得弹出菜单。 在菜单中时,可以使用退出键离开菜单而不进行任何操作。 使用向上和向下箭头键,或 ^u 向上移动和 ^d 向下移动以移动到菜单中的所需项目,然后按 return 键执行指示的任务。
每个菜单项的左侧是一个字母,如果在键盘上按下相应的字母,则选择该菜单项。
ee 中的主菜单如下:
leave editor
如果进行了更改,用户将获得一个菜单,提示是否应保存更改。
help
显示一个帮助屏幕,其中包含所有键盘操作和命令。
file operations
弹出一个菜单,用于选择是否读取文件、写入文件或保存编辑器的当前内容,以及将编辑器的内容发送到打印命令(参见 从文件初始化 ee 部分)。
redraw screen
如果屏幕已损坏,则提供一种重新绘制屏幕的方法。
settings
显示操作模式的当前值和右边距。 当光标在特定项目上时按回车键,可以更改值。 要离开此菜单,请按 escape 键。 (请参阅下面的 Modes 。)
search
弹出一个菜单,用户可以在其中选择输入要搜索的字符串,或者搜索已经输入的字符串。
miscellaneous
弹出一个菜单,允许用户设置当前段落的格式、执行 shell 命令或检查编辑器中文本的拼写。
段落由以下文本块为 ee 定义:
文件开始或结束。
没有字符或只有空格和/或制表符的行。
以句点 ('.') 或右尖括号 ('>') 开头的行。
可以通过两种方式格式化段落:通过选择 format paragraph 菜单项,或通过设置 ee 来自动格式化段落。 自动模式可以通过菜单设置,也可以通过初始化文件设置。
ee 中的文本操作分为三种状态:自由格式、边距、自动格式化。
"Free-form" 最适合用于编程之类的事情。 对行的长度没有限制,也不会进行格式化。
"Margins" 允许用户输入文本而不必担心超出右边距(右边距可以在 settings 菜单中设置,默认为终端的右边距)。 这是允许 format paragraph 菜单项工作的模式。
"Automatic formatting" 提供类似文字处理器的行为。 用户可以输入文本,而 ee 将确保每次用户在输入或删除文本后插入空格时,整个段落都适合终端的宽度。 为了进行自动格式化,还必须启用边距观察。
是一个“无模式”编辑器(它一直处于文本插入模式),但它所做的一些事情还是有模式的。 这些包括:
tab expansion
制表符可以作为单个制表符插入,也可以替换为空格。
case sensitivity
搜索操作可以对字符是大写还是小写敏感,或者完全忽略大小写。
margins observed
线条可以在右边距被截断,也可以永远延伸。
auto paragraph formatting
在输入文本时,编辑器可以尝试使其在屏幕宽度内看起来相当不错。
eightbit characters
切换八位字符是显示为尖括号中的值(例如 "<220>")还是字符。
info window
可以显示或不显示显示可以执行的键盘操作的窗口。
emacs keys
控制键可以被赋予类似于 emacs 的绑定,也可以不被赋予。
16 bit characters
切换 16 位字符是作为一个 16 位数量还是两个 8 位数量处理。 这主要适用于中国大 5 代码集。
您可以通过初始化文件(见下文)或菜单(见上文)设置这些模式。
有两种方法可以从 ee 检查文本中的拼写。 一种是使用传统的 spell(1) 命令,另一种是使用可选的 ispell(1) 命令。
一种是使用传统的 spell 命令,另一种是使用可选的 ispell 命令。 使用拼写,无法识别的单词将被放置在文件的顶部。 对于 ispell 选项,文件被写入磁盘,然后在文件上运行 ispell ,一旦 ispell 完成对文件的更改,文件就会读回。
用户可以选择打印编辑器内容的菜单项。 ee 通过管道将编辑器中的文本传递给初始化命令 printcommand 指定的命令(请参阅下面的 从文件初始化 ee 部分)。默认是将内容发送到 "lp"。
用户分配给 printcommand 的任何内容都必须从标准输入中获取输入。 有关详细信息,请咨询您的系统管理员。
可以通过在 miscellaneous 菜单中选择 shell command 项,或通过在 command: 提示符下在要执行的命令前放置感叹号("!")从 ee 中执行 shell 命令。 此外,用户可以使用左尖括号 (">") 将编辑缓冲区的内容引导到 shell 操作(通过管道),然后使用 "!" 以及要执行的 shell 命令。 shell 操作的输出也可以通过在感叹号前使用右尖括号 ("<") 定向到编辑缓冲区。 这些甚至可以一起用于将输出发送到 shell 操作并将结果读回编辑器。 因此,如果编辑器包含要排序的单词列表,则可以通过在命令提示符下键入以下内容来对它们进行排序:
><!sort
这会将编辑器的内容通过管道发送到 sort 实用程序,结果将被放置到当前光标位置的编辑缓冲区中。 用户必须删除旧信息。
由于不同的用户有不同的偏好, ee 允许一些轻微的可配置性。 ee 的初始化文件有三个可能的位置:文件 /usr/share/misc/init.ee 、用户主目录中的文件 .init.ee 或当前目录中的文件 .init.ee 如果不同于主目录)。 这允许系统管理员在系统范围内为用户设置一些首选项(例如, print 命令),并且用户可以自定义特定目录的设置(例如用于通信的目录和用于编程的不同目录)。
首先读取文件 usr/share/misc/init.ee ,然后是 $HOME/.init.ee ,然后是 .init.ee ,其中最近读取的文件指定的设置优先。
在初始化文件中可以输入以下项目:
case
将搜索设置为区分大小写。
nocase
将搜索设置为不区分大小写(默认)。
expand
使 ee 将制表符扩展到空格(默认)。
noexpand
使 ee 将制表符作为单个字符插入。
info
终端顶部会显示一个小信息窗口(默认)。
noinfo
关闭信息窗口的显示。
margins
当光标超出用户在插入文本时设置的右边距时,使 ee 截断右边距处的行(默认)。
nomargins
允许线条超出右边距。
autoformat
导致 ee 在文本插入时自动尝试格式化当前段落。
noautoformat
关闭自动段落格式(默认)。
printcommand
允许设置打印命令(默认值: "lp")。
rightmargin
用户可以为右边距选择一个值(屏幕上的第一列为零)。
highlight
打开突出显示信息窗口和菜单的边框(默认)。
nohighlight
关闭信息窗口和菜单边框的突出显示。
eightbit
打开八位字符的显示。
noeightbit
关闭八位字符的显示(它们在尖括号内显示为十进制值,例如 "<220>")。
16bit
打开对 16 位字符的处理。
no16bit
关闭对 16 位字符的处理。
emacs
打开 emacs 键绑定。
noemacs
关闭 emacs 键绑定。
在 settings 菜单中使用此条目时,用户可以选择将编辑器的当前配置(请参阅上面的 从文件初始化 ee )保存到当前目录或用户主目录中名为 .init.ee 的文件中。 如果名为 .init.ee 的文件已经存在,它将被重命名为 .init.ee.old 。
本材料按“原样”提供。 对本材料不提供任何形式的保证,包括但不限于对适销性和特定用途适用性的默示保证。 Hewlett-Packard 和 Hugh Mahon 均不对此处包含的错误负责,也不对与提供、执行或使用本材料有关的附带或间接损害负责。 Hewlett-Packard 和 Hugh Mahon 均不对本软件或文档的使用或可靠性承担任何责任。 该软件和文档完全不受支持。 没有可用的支持合同。 Hewlett-Packard 未对任何程序或文档进行任何质量保证。 您可能会发现材料的质量不如支持的材料
始终在编辑之前制作不易复制的文件副本。 尽早保存文件,并经常保存。
ee 支持单字节字符代码集(八位干净),或中文 Big-5 代码集。 (其他多字节代码集也可能起作用,但 Big-5 起作用的原因是一个两字节字符在屏幕上也占据了两列。)
对于较慢的系统,自动段落格式化操作可能太慢。
/usr/share/misc/init.ee- $HOME/.init.ee- .init.ee
ee 软件由 Hugh Mahon 开发。
本软件和文档包含受版权保护的专有信息。 保留所有权利。
版权所有 (c) 1990, 1991, 1992, 1993, 1995, 1996, 2001 Hugh Mahon.
termcap(4), terminfo(4), environ(5), spell(1), ispell(1), lp(1), aee(1)
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
CLANG(1)
CLANG(1)
Clang
CLANG(1)
clang - Clang C、C++ 和 Objective-C 编译器
clang [options] filename ...
clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:
驱动
clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。
预处理
此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。
解析和语义分析
此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).
代码生成和优化
此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。
Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。
汇编器
此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。
链接器
此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。
Clang 静态分析器
静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。
-E
运行预处理器阶段。
-fsyntax-only
运行预处理器、解析器和类型检查阶段。
-S
运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。
-c
运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。
no stage selection option
如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。
-x
将后续输入文件视为具有类型语言。
-std=
指定要编译的语言标准。
C 语言支持的值为:
c89 c90 iso9899:1990
ISO C 1990
iso9899:199409
ISO C 1990 修订版 1
gnu89 gnu90
带有 GNU 扩展的 ISO C 1990
c99 iso9899:1999
ISO C 1999
gnu99
具有 GNU 扩展的 ISO C 1999
c11 iso9899:2011
ISO C 2011
gnu11
带有 GNU 扩展的 ISO C 2011
c17 iso9899:2017
ISO C 2017
gnu17
具有 GNU 扩展的 ISO C 2017
默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。
C++ 语言支持的值为:
c++98 c++03
ISO C++ 1998 及修正
gnu++98 gnu++03
ISO C++ 1998 与修正和 GNU 扩展
c++11
ISO C++ 2011 修订版
gnu++11
带有修正和 GNU 扩展的 ISO C++ 2011
c++14
ISO C++ 2014 修订版
gnu++14
带有修正和 GNU 扩展的 ISO C++ 2014
c++17
ISO C++ 2017 修订版
gnu++17
带有修正和 GNU 扩展的 ISO C++ 2017
c++2a
ISO C++ 2020 工作草案
gnu++2a
具有 GNU 扩展的 ISO C++ 2020 工作草案
默认的 C++ 语言标准是 gnu++14.
OpenCL 语言支持的值为:
cl1.0
OpenCL 1.0
cl1.1
OpenCL 1.1
cl1.2
OpenCL 1.2
cl2.0
OpenCL 2.0
默认的 OpenCL 语言标准是 cl1.0 。
CUDA 语言支持的值为:
cuda
NVIDIA CUDA(tm)
-stdlib=
指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。
-rtlib=
指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。
-ansi
与 -std=c89 相同
-ObjC, -ObjC++
将源输入文件分别视为 Objective-C 和 Object-C++ 输入。
-trigraphs
启用三元组。
-ffreestanding
指示该文件应针对独立环境而非托管环境进行编译。
-fno-builtin
禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。
-fmath-errno
表示数学函数应被视为更新 errno 。
-fpascal-strings
使用 "\pfoo" 启用对 Pascal 样式字符串的支持。
-fms-extensions
启用对 Microsoft 扩展的支持。
-fmsc-version=
设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。
-fborland-extensions
启用对 Borland 扩展的支持。
-fwritable-strings
使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。
-flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions
允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:
none: 不允许向量之间的隐式转换
integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播
all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播
如果未指定,则默认为 integer 。
-fblocks
启用 "Blocks" 语言功能。
-fobjc-abi-version=version
选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。
-fobjc-nonfragile-abi-version=
选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。
-fobjc-nonfragile-abi, -fno-objc-nonfragile-abi
启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。
Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。
-arch
指定要构建的架构。
-mmacosx-version-min=
为 macOS 构建时,请指定应用程序支持的最低版本。
-miphoneos-version-min
为 iPhone OS 构建时,请指定应用程序支持的最低版本。
--print-supported-cpus
打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。
-mcpu=?, -mtune=?
--print-supported-cpus 的别名
-march=
指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。
-O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4
指定要使用的优化级别:
-O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。
-O1 介于 -O0 和 -O2 之间。
-O2 中等优化级别,可实现大多数优化。
-O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)
-Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。
-Os 与 -O2 类似,具有额外的优化以减少代码大小。
-Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。
-Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。
-O 相当于 -O2 。
-O4 及以上
目前相当于 -O3
-g, -gline-tables-only, -gmodules
控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:
-g 生成调试信息。
-gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。
-gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。
在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。
-fstandalone-debug -fno-standalone-debug
Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。
-fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。
-fexceptions
启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。
-ftrapv
生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。
-fvisibility
此标志设置默认可见性级别。
-fcommon, -fno-common
此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。
-ftls-model=
设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。
-flto, -flto=full, -flto=thin, -emit-llvm
生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。
-flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。
-###
打印(但不运行)为此编译运行的命令。
--help
显示可用选项。
-Qunused-arguments
不要为未使用的驱动程序参数发出任何警告。
-Wa,
将 args 中逗号分隔的参数传递给汇编器。
-Wl,
将 args 中逗号分隔的参数传递给链接器。
-Wp,
将 args 中逗号分隔的参数传递给预处理器。
-Xanalyzer
将 arg 传递给静态分析器。
-Xassembler
将 arg 传递给汇编程序。
-Xlinker
将 arg 传递给链接器。
-Xpreprocessor
将 arg 传递给预处理器。
-o
将输出写入文件。
-print-file-name=
打印文件的完整库路径。
-print-libgcc-file-name
打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。
-print-prog-name=
打印名称的完整程序路径。
-print-search-dirs
打印用于查找库和程序的路径。
-save-temps
保存中间编译结果。
-save-stats, -save-stats=cwd, -save-stats=obj
将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。
-integrated-as, -no-integrated-as
用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。
-time
计时单个命令。
-ftime-report
打印每个编译阶段的时序摘要。
-v
显示命令以运行和使用详细输出。
-fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length
这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。
-D=
将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-U
将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-include
将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-I
将指定目录添加到包含文件的搜索路径。
-F
将指定目录添加到框架包含文件的搜索路径。
-nostdinc
不要在标准系统目录或编译器内置目录中搜索包含文件。
-nostdlibinc
不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。
-nobuiltininc
不要在 clang 的内置目录中搜索包含文件。
TMPDIR, TEMP, TMP
依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。
CPATH
如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。
环境变量中的空组件将被忽略。
C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH
这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。
MACOSX_DEPLOYMENT_TARGET
如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。
要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。
as(1), ld(1)
由 Clang / LLVM 团队维护 ()
2007-2020, Clang 团队
2020-06-26
10
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
CLANG(1)
CLANG(1)
Clang
CLANG(1)
clang - Clang C、C++ 和 Objective-C 编译器
clang [options] filename ...
clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:
驱动
clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。
预处理
此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。
解析和语义分析
此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).
代码生成和优化
此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。
Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。
汇编器
此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。
链接器
此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。
Clang 静态分析器
静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。
-E
运行预处理器阶段。
-fsyntax-only
运行预处理器、解析器和类型检查阶段。
-S
运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。
-c
运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。
no stage selection option
如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。
-x
将后续输入文件视为具有类型语言。
-std=
指定要编译的语言标准。
C 语言支持的值为:
c89 c90 iso9899:1990
ISO C 1990
iso9899:199409
ISO C 1990 修订版 1
gnu89 gnu90
带有 GNU 扩展的 ISO C 1990
c99 iso9899:1999
ISO C 1999
gnu99
具有 GNU 扩展的 ISO C 1999
c11 iso9899:2011
ISO C 2011
gnu11
带有 GNU 扩展的 ISO C 2011
c17 iso9899:2017
ISO C 2017
gnu17
具有 GNU 扩展的 ISO C 2017
默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。
C++ 语言支持的值为:
c++98 c++03
ISO C++ 1998 及修正
gnu++98 gnu++03
ISO C++ 1998 与修正和 GNU 扩展
c++11
ISO C++ 2011 修订版
gnu++11
带有修正和 GNU 扩展的 ISO C++ 2011
c++14
ISO C++ 2014 修订版
gnu++14
带有修正和 GNU 扩展的 ISO C++ 2014
c++17
ISO C++ 2017 修订版
gnu++17
带有修正和 GNU 扩展的 ISO C++ 2017
c++2a
ISO C++ 2020 工作草案
gnu++2a
具有 GNU 扩展的 ISO C++ 2020 工作草案
默认的 C++ 语言标准是 gnu++14.
OpenCL 语言支持的值为:
cl1.0
OpenCL 1.0
cl1.1
OpenCL 1.1
cl1.2
OpenCL 1.2
cl2.0
OpenCL 2.0
默认的 OpenCL 语言标准是 cl1.0 。
CUDA 语言支持的值为:
cuda
NVIDIA CUDA(tm)
-stdlib=
指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。
-rtlib=
指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。
-ansi
与 -std=c89 相同
-ObjC, -ObjC++
将源输入文件分别视为 Objective-C 和 Object-C++ 输入。
-trigraphs
启用三元组。
-ffreestanding
指示该文件应针对独立环境而非托管环境进行编译。
-fno-builtin
禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。
-fmath-errno
表示数学函数应被视为更新 errno 。
-fpascal-strings
使用 "\pfoo" 启用对 Pascal 样式字符串的支持。
-fms-extensions
启用对 Microsoft 扩展的支持。
-fmsc-version=
设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。
-fborland-extensions
启用对 Borland 扩展的支持。
-fwritable-strings
使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。
-flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions
允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:
none: 不允许向量之间的隐式转换
integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播
all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播
如果未指定,则默认为 integer 。
-fblocks
启用 "Blocks" 语言功能。
-fobjc-abi-version=version
选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。
-fobjc-nonfragile-abi-version=
选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。
-fobjc-nonfragile-abi, -fno-objc-nonfragile-abi
启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。
Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。
-arch
指定要构建的架构。
-mmacosx-version-min=
为 macOS 构建时,请指定应用程序支持的最低版本。
-miphoneos-version-min
为 iPhone OS 构建时,请指定应用程序支持的最低版本。
--print-supported-cpus
打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。
-mcpu=?, -mtune=?
--print-supported-cpus 的别名
-march=
指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。
-O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4
指定要使用的优化级别:
-O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。
-O1 介于 -O0 和 -O2 之间。
-O2 中等优化级别,可实现大多数优化。
-O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)
-Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。
-Os 与 -O2 类似,具有额外的优化以减少代码大小。
-Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。
-Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。
-O 相当于 -O2 。
-O4 及以上
目前相当于 -O3
-g, -gline-tables-only, -gmodules
控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:
-g 生成调试信息。
-gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。
-gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。
在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。
-fstandalone-debug -fno-standalone-debug
Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。
-fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。
-fexceptions
启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。
-ftrapv
生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。
-fvisibility
此标志设置默认可见性级别。
-fcommon, -fno-common
此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。
-ftls-model=
设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。
-flto, -flto=full, -flto=thin, -emit-llvm
生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。
-flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。
-###
打印(但不运行)为此编译运行的命令。
--help
显示可用选项。
-Qunused-arguments
不要为未使用的驱动程序参数发出任何警告。
-Wa,
将 args 中逗号分隔的参数传递给汇编器。
-Wl,
将 args 中逗号分隔的参数传递给链接器。
-Wp,
将 args 中逗号分隔的参数传递给预处理器。
-Xanalyzer
将 arg 传递给静态分析器。
-Xassembler
将 arg 传递给汇编程序。
-Xlinker
将 arg 传递给链接器。
-Xpreprocessor
将 arg 传递给预处理器。
-o
将输出写入文件。
-print-file-name=
打印文件的完整库路径。
-print-libgcc-file-name
打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。
-print-prog-name=
打印名称的完整程序路径。
-print-search-dirs
打印用于查找库和程序的路径。
-save-temps
保存中间编译结果。
-save-stats, -save-stats=cwd, -save-stats=obj
将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。
-integrated-as, -no-integrated-as
用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。
-time
计时单个命令。
-ftime-report
打印每个编译阶段的时序摘要。
-v
显示命令以运行和使用详细输出。
-fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length
这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。
-D=
将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-U
将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-include
将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-I
将指定目录添加到包含文件的搜索路径。
-F
将指定目录添加到框架包含文件的搜索路径。
-nostdinc
不要在标准系统目录或编译器内置目录中搜索包含文件。
-nostdlibinc
不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。
-nobuiltininc
不要在 clang 的内置目录中搜索包含文件。
TMPDIR, TEMP, TMP
依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。
CPATH
如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。
环境变量中的空组件将被忽略。
C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH
这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。
MACOSX_DEPLOYMENT_TARGET
如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。
要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。
as(1), ld(1)
由 Clang / LLVM 团队维护 ()
2007-2020, Clang 团队
2020-06-26
10
clang [options] filename ...
clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:
驱动
clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。
预处理
此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。
解析和语义分析
此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).
代码生成和优化
此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。
Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。
汇编器
此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。
链接器
此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。
Clang 静态分析器
静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。
-E
运行预处理器阶段。
-fsyntax-only
运行预处理器、解析器和类型检查阶段。
-S
运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。
-c
运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。
no stage selection option
如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。
-x
将后续输入文件视为具有类型语言。
-std=
指定要编译的语言标准。
C 语言支持的值为:
c89 c90 iso9899:1990
ISO C 1990
iso9899:199409
ISO C 1990 修订版 1
gnu89 gnu90
带有 GNU 扩展的 ISO C 1990
c99 iso9899:1999
ISO C 1999
gnu99
具有 GNU 扩展的 ISO C 1999
c11 iso9899:2011
ISO C 2011
gnu11
带有 GNU 扩展的 ISO C 2011
c17 iso9899:2017
ISO C 2017
gnu17
具有 GNU 扩展的 ISO C 2017
默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。
C++ 语言支持的值为:
c++98 c++03
ISO C++ 1998 及修正
gnu++98 gnu++03
ISO C++ 1998 与修正和 GNU 扩展
c++11
ISO C++ 2011 修订版
gnu++11
带有修正和 GNU 扩展的 ISO C++ 2011
c++14
ISO C++ 2014 修订版
gnu++14
带有修正和 GNU 扩展的 ISO C++ 2014
c++17
ISO C++ 2017 修订版
gnu++17
带有修正和 GNU 扩展的 ISO C++ 2017
c++2a
ISO C++ 2020 工作草案
gnu++2a
具有 GNU 扩展的 ISO C++ 2020 工作草案
默认的 C++ 语言标准是 gnu++14.
OpenCL 语言支持的值为:
cl1.0
OpenCL 1.0
cl1.1
OpenCL 1.1
cl1.2
OpenCL 1.2
cl2.0
OpenCL 2.0
默认的 OpenCL 语言标准是 cl1.0 。
CUDA 语言支持的值为:
cuda
NVIDIA CUDA(tm)
-stdlib=
指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。
-rtlib=
指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。
-ansi
与 -std=c89 相同
-ObjC, -ObjC++
将源输入文件分别视为 Objective-C 和 Object-C++ 输入。
-trigraphs
启用三元组。
-ffreestanding
指示该文件应针对独立环境而非托管环境进行编译。
-fno-builtin
禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。
-fmath-errno
表示数学函数应被视为更新 errno 。
-fpascal-strings
使用 "\pfoo" 启用对 Pascal 样式字符串的支持。
-fms-extensions
启用对 Microsoft 扩展的支持。
-fmsc-version=
设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。
-fborland-extensions
启用对 Borland 扩展的支持。
-fwritable-strings
使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。
-flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions
允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:
none: 不允许向量之间的隐式转换
integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播
all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播
如果未指定,则默认为 integer 。
-fblocks
启用 "Blocks" 语言功能。
-fobjc-abi-version=version
选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。
-fobjc-nonfragile-abi-version=
选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。
-fobjc-nonfragile-abi, -fno-objc-nonfragile-abi
启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。
Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。
-arch
指定要构建的架构。
-mmacosx-version-min=
为 macOS 构建时,请指定应用程序支持的最低版本。
-miphoneos-version-min
为 iPhone OS 构建时,请指定应用程序支持的最低版本。
--print-supported-cpus
打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。
-mcpu=?, -mtune=?
--print-supported-cpus 的别名
-march=
指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。
-O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4
指定要使用的优化级别:
-O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。
-O1 介于 -O0 和 -O2 之间。
-O2 中等优化级别,可实现大多数优化。
-O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)
-Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。
-Os 与 -O2 类似,具有额外的优化以减少代码大小。
-Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。
-Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。
-O 相当于 -O2 。
-O4 及以上
目前相当于 -O3
-g, -gline-tables-only, -gmodules
控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:
-g 生成调试信息。
-gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。
-gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。
在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。
-fstandalone-debug -fno-standalone-debug
Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。
-fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。
-fexceptions
启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。
-ftrapv
生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。
-fvisibility
此标志设置默认可见性级别。
-fcommon, -fno-common
此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。
-ftls-model=
设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。
-flto, -flto=full, -flto=thin, -emit-llvm
生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。
-flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。
-###
打印(但不运行)为此编译运行的命令。
--help
显示可用选项。
-Qunused-arguments
不要为未使用的驱动程序参数发出任何警告。
-Wa,
将 args 中逗号分隔的参数传递给汇编器。
-Wl,
将 args 中逗号分隔的参数传递给链接器。
-Wp,
将 args 中逗号分隔的参数传递给预处理器。
-Xanalyzer
将 arg 传递给静态分析器。
-Xassembler
将 arg 传递给汇编程序。
-Xlinker
将 arg 传递给链接器。
-Xpreprocessor
将 arg 传递给预处理器。
-o
将输出写入文件。
-print-file-name=
打印文件的完整库路径。
-print-libgcc-file-name
打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。
-print-prog-name=
打印名称的完整程序路径。
-print-search-dirs
打印用于查找库和程序的路径。
-save-temps
保存中间编译结果。
-save-stats, -save-stats=cwd, -save-stats=obj
将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。
-integrated-as, -no-integrated-as
用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。
-time
计时单个命令。
-ftime-report
打印每个编译阶段的时序摘要。
-v
显示命令以运行和使用详细输出。
-fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length
这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。
-D=
将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-U
将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-include
将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-I
将指定目录添加到包含文件的搜索路径。
-F
将指定目录添加到框架包含文件的搜索路径。
-nostdinc
不要在标准系统目录或编译器内置目录中搜索包含文件。
-nostdlibinc
不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。
-nobuiltininc
不要在 clang 的内置目录中搜索包含文件。
TMPDIR, TEMP, TMP
依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。
CPATH
如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。
环境变量中的空组件将被忽略。
C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH
这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。
MACOSX_DEPLOYMENT_TARGET
如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。
要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。
as(1), ld(1)
由 Clang / LLVM 团队维护 (http://clang.llvm.org)
2007-2020, Clang 团队
2020-06-26
10
clang [options] filename ...
clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:
驱动
clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。
预处理
此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。
解析和语义分析
此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).
代码生成和优化
此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。
Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。
汇编器
此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。
链接器
此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。
Clang 静态分析器
静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。
-E
运行预处理器阶段。
-fsyntax-only
运行预处理器、解析器和类型检查阶段。
-S
运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。
-c
运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。
no stage selection option
如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。
-x
将后续输入文件视为具有类型语言。
-std=
指定要编译的语言标准。
C 语言支持的值为:
c89 c90 iso9899:1990
ISO C 1990
iso9899:199409
ISO C 1990 修订版 1
gnu89 gnu90
带有 GNU 扩展的 ISO C 1990
c99 iso9899:1999
ISO C 1999
gnu99
具有 GNU 扩展的 ISO C 1999
c11 iso9899:2011
ISO C 2011
gnu11
带有 GNU 扩展的 ISO C 2011
c17 iso9899:2017
ISO C 2017
gnu17
具有 GNU 扩展的 ISO C 2017
默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。
C++ 语言支持的值为:
c++98 c++03
ISO C++ 1998 及修正
gnu++98 gnu++03
ISO C++ 1998 与修正和 GNU 扩展
c++11
ISO C++ 2011 修订版
gnu++11
带有修正和 GNU 扩展的 ISO C++ 2011
c++14
ISO C++ 2014 修订版
gnu++14
带有修正和 GNU 扩展的 ISO C++ 2014
c++17
ISO C++ 2017 修订版
gnu++17
带有修正和 GNU 扩展的 ISO C++ 2017
c++2a
ISO C++ 2020 工作草案
gnu++2a
具有 GNU 扩展的 ISO C++ 2020 工作草案
默认的 C++ 语言标准是 gnu++14.
OpenCL 语言支持的值为:
cl1.0
OpenCL 1.0
cl1.1
OpenCL 1.1
cl1.2
OpenCL 1.2
cl2.0
OpenCL 2.0
默认的 OpenCL 语言标准是 cl1.0 。
CUDA 语言支持的值为:
cuda
NVIDIA CUDA(tm)
-stdlib=
指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。
-rtlib=
指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。
-ansi
与 -std=c89 相同
-ObjC, -ObjC++
将源输入文件分别视为 Objective-C 和 Object-C++ 输入。
-trigraphs
启用三元组。
-ffreestanding
指示该文件应针对独立环境而非托管环境进行编译。
-fno-builtin
禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。
-fmath-errno
表示数学函数应被视为更新 errno 。
-fpascal-strings
使用 "\pfoo" 启用对 Pascal 样式字符串的支持。
-fms-extensions
启用对 Microsoft 扩展的支持。
-fmsc-version=
设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。
-fborland-extensions
启用对 Borland 扩展的支持。
-fwritable-strings
使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。
-flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions
允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:
none: 不允许向量之间的隐式转换
integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播
all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播
如果未指定,则默认为 integer 。
-fblocks
启用 "Blocks" 语言功能。
-fobjc-abi-version=version
选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。
-fobjc-nonfragile-abi-version=
选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。
-fobjc-nonfragile-abi, -fno-objc-nonfragile-abi
启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。
Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。
-arch
指定要构建的架构。
-mmacosx-version-min=
为 macOS 构建时,请指定应用程序支持的最低版本。
-miphoneos-version-min
为 iPhone OS 构建时,请指定应用程序支持的最低版本。
--print-supported-cpus
打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。
-mcpu=?, -mtune=?
--print-supported-cpus 的别名
-march=
指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。
-O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4
指定要使用的优化级别:
-O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。
-O1 介于 -O0 和 -O2 之间。
-O2 中等优化级别,可实现大多数优化。
-O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)
-Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。
-Os 与 -O2 类似,具有额外的优化以减少代码大小。
-Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。
-Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。
-O 相当于 -O2 。
-O4 及以上
目前相当于 -O3
-g, -gline-tables-only, -gmodules
控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:
-g 生成调试信息。
-gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。
-gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。
在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。
-fstandalone-debug -fno-standalone-debug
Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。
-fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。
-fexceptions
启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。
-ftrapv
生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。
-fvisibility
此标志设置默认可见性级别。
-fcommon, -fno-common
此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。
-ftls-model=
设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。
-flto, -flto=full, -flto=thin, -emit-llvm
生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。
-flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。
-###
打印(但不运行)为此编译运行的命令。
--help
显示可用选项。
-Qunused-arguments
不要为未使用的驱动程序参数发出任何警告。
-Wa,
将 args 中逗号分隔的参数传递给汇编器。
-Wl,
将 args 中逗号分隔的参数传递给链接器。
-Wp,
将 args 中逗号分隔的参数传递给预处理器。
-Xanalyzer
将 arg 传递给静态分析器。
-Xassembler
将 arg 传递给汇编程序。
-Xlinker
将 arg 传递给链接器。
-Xpreprocessor
将 arg 传递给预处理器。
-o
将输出写入文件。
-print-file-name=
打印文件的完整库路径。
-print-libgcc-file-name
打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。
-print-prog-name=
打印名称的完整程序路径。
-print-search-dirs
打印用于查找库和程序的路径。
-save-temps
保存中间编译结果。
-save-stats, -save-stats=cwd, -save-stats=obj
将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。
-integrated-as, -no-integrated-as
用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。
-time
计时单个命令。
-ftime-report
打印每个编译阶段的时序摘要。
-v
显示命令以运行和使用详细输出。
-fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length
这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。
-D=
将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-U
将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-include
将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-I
将指定目录添加到包含文件的搜索路径。
-F
将指定目录添加到框架包含文件的搜索路径。
-nostdinc
不要在标准系统目录或编译器内置目录中搜索包含文件。
-nostdlibinc
不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。
-nobuiltininc
不要在 clang 的内置目录中搜索包含文件。
TMPDIR, TEMP, TMP
依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。
CPATH
如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。
环境变量中的空组件将被忽略。
C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH
这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。
MACOSX_DEPLOYMENT_TARGET
如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。
要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。
as(1), ld(1)
由 Clang / LLVM 团队维护 (http://clang.llvm.org)
2007-2020, Clang 团队
2020-06-26
10
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
find [-H | -L | -P] [-EXdsx] [-f path] path ... [expression] find [-H | -L | -P] [-EXdsx] -f path [path ...] [expression]
find 实用程序递归地向下列出每个 path 的目录树,根据树中的每个文件评估一个 expression (由下面列出的 “primaries” 和 “operands” 组成) 。
选项如下:
将后跟 -regex 和 -iregex 主表达式的正则表达式解释为扩展(现代)正则表达式,而不是基本正则表达式 (BRE)。 re_format(7) 手册页完整地描述了这两种格式。
导致为命令行上指定的每个符号链接返回的文件信息和文件类型(请参阅 stat(2) )是链接引用的文件的信息和文件类型,而不是链接本身。 如果引用的文件不存在,则文件信息和类型将用于链接本身。 所有不在命令行上的符号链接的文件信息都是链接本身的文件信息。
导致为每个符号链接返回的文件信息和文件类型(请参阅 stat(2) )是链接引用的文件的信息和文件类型,而不是链接本身。 如果引用的文件不存在,则文件信息和类型将用于链接本身。
此选项等效于已弃用的 -follow 主选项。
导致为每个符号链接返回的文件信息和文件类型(参见 stat(2) )是链接本身的信息和文件类型。 这是默认设置。
允许 find 与 xargs(1) 一起安全使用。 如果文件名包含 xargs(1) 使用的任何定界字符,则会在标准错误中显示诊断消息,并跳过该文件。 定界字符包括单引号 (“ ' ”) 和双引号 (“ " ”) 、反斜杠 (“\”) 、空格、制表符和换行符。
但是,您可能希望将 -print0 主节点与 “xargs -0” 结合使用作为一种有效的替代方法。
导致 find 执行深度优先遍历。
此选项是 IEEE Std 1003.1-2001 (“POSIX.1”) 指定的 -depth primary 的 BSD 特定等效项。 有关详细信息,请参阅其在 PRIMARIES 下的描述。
导致 find 按字典顺序(即每个目录中的字母顺序)遍历文件层次结构。 注意: ‘find -s’ 和 ‘find | sort’ 可能会给出不同的结果。
防止 find 下降到设备号不同于下降开始的文件的设备号的目录中。
此选项等效于已弃用的 -xdev 主选项。
所有带数字参数的初选都允许数字前面有加号 (“+”) 或减号 (“-”) 。 前面的加号表示 “more than n”, ,前面的减号表示 “less than n” ,两者都不表示 “exactly n” 。
-Bmin n
如果文件的 inode 创建时间与开始 find 的时间之间的差异(向上舍入到下一整分钟)为 n 分钟,则为真。
-Bnewer file
与 -newerBm 相同。
-Btime n[smhdw]
如果未指定单位,则如果文件的 inode 创建时间与开始 find 时间之间的差异(向上舍入到下一个完整的 24 小时周期)为 n 24 小时周期,则此主节点评估为 true。
如果指定了单位,则如果文件的 inode 创建时间与开始 find 的时间之间的差正好是 n 个单位,则此主节点的计算结果为 true。 有关支持的时间单位的信息,请参阅 -atime 主要描述。
可以与其他主文件结合使用来定位具有扩展 ACL 的文件。 有关详细信息,请参阅 acl(3) 。
-amin [-|+]n
如果文件上次访问时间和开始 find 时间之间的差异(向上舍入到下一个完整分钟)大于 n (+n) 、小于 n (-n) 或恰好在 n 分钟前,则为真。
-anewer file
与 -neweram 相同。
-atime n[smhdw]
如果未指定单位,则如果文件上次访问时间与开始 find 时间之间的差值(向上舍入到下一个完整的 24 小时周期)为 n 个 24 小时周期,则此主要计算结果为 true。
如果指定了单位,则如果文件上次访问时间和开始 find 的时间之间的差正好是 n 个单位,则此主节点评估为真。 可能的时间单位如下:
秒
分钟(60 秒)
小时(60 分钟)
一天(24 小时)
周(7天)
任意数量的单位可以组合在一个 -atime 参数中,例如, “-atime -1h30m” 。单位可能仅在与 + 或 - 修饰符一起使用时才有用。
-cmin [-|+]n
如果最后一次更改文件状态信息的时间与开始 find 的时间之间的差异(向上舍入到下一整分钟)大于 n (+n) 、小于 n (-n) 或恰好 n 分钟,则为真前。
-cnewer file
与 -newercm 相同。
-ctime n[smhdw]
如果未指定单位,则如果文件状态信息的最后更改时间与开始 find 的时间之间的差值(向上舍入到下一个完整的 24 小时周期)为 n 个 24 小时周期,则此主要计算结果为 true。
如果指定了单位,则如果文件状态信息的最后一次更改时间与开始 find 的时间之间的差异正好是 n 个单位,则此主要计算结果为 true。 有关支持的时间单位的信息,请参阅 -atime 主要描述。
不可移植的、特定于 BSD 的 depth 版本。 GNU find 在错误地模拟 FreeBSD find 时将其作为主要实现。
删除找到的文件与/或目录。总是返回真。这从当前工作目录执行,因为 find 沿着树递归。 它不会尝试删除相对于 “.” 的路径名中带有 “/” 字符的文件名。出于安全原因。 此选项隐含深度优先遍历处理。 如果目录不为空, -delete primary 将无法删除目录。以下符号链接与此选项不兼容。
永远正确;与不可移植的 -d 选项相同。导致 find 执行深度优先遍历,即以后序访问目录,并且目录中的所有条目将在目录本身之前执行。 默认情况下,按预定顺序 find 访问目录,即在其内容之前。 注意,默认 不是 广度优先遍历。
当 find 与 cpio(1) 一起使用以处理包含在具有异常权限的目录中的文件时, -depth primary 会很有用。 它确保您在将文件放入目录时具有写权限,然后将目录的权限设置为最后一件事。
-depth n
如果文件相对于遍历起点的深度为 n ,则为真。
如果当前文件或目录为空,则为真。
-exec utility [argument ...] ;
如果名为 utility 的程序返回零值作为其退出状态,则为真。 可选 arguments 可以传递给实用程序。 表达式必须以分号 (“;”) 结束。 如果从 shell 调用 find- ,如果 shell 将其视为控制运算符,则可能需要引用分号。 如果字符串 “{}” 出现在实用程序名称或参数中的任何位置,则将其替换为当前文件的路径名。 Utility 将从执行 find 的目录中执行。 Utility 和 arguments 不受外壳模式和结构的进一步扩展。
-exec utility [argument ...] {} +
与 -exec 相同,但每次调用 utility 时, “{}” 被尽可能多的路径名替换。 此行为类似于 xargs(1) 的行为。主节点始终返回 true;如果至少一次 utility 调用返回非零退出状态, find 将返回非零退出状态。
-execdir utility [argument ...] ;
-execdir primary 与 -exec primary 相同,但 utility 将从保存当前文件的目录执行。 替换字符串 “{}” 的文件名不合格。
-execdir utility [argument ...] {} +
与 -execdir 相同,但每次调用 utility 时, “{}” 被尽可能多的路径名替换。 此行为类似于 xargs(1) 的行为。 主节点始终返回 true;如果至少一次 utility 调用返回非零退出状态, find 将返回非零退出状态。
-flags [-|+]flags,notflags
使用符号名称指定标志(请参阅 chflags(1) )。 带有 “no” 前缀的那些( “nodump”) 除外)被称为 notflags 。 flags 中的标志被检查为已设置,而 notflags 中的标志被检查为未设置。 请注意,这与 -perm 不同,后者仅允许用户指定设置的模式位。
如果标志前面有一个破折号 (“-”) ,如果至少 flags 中的所有位和 notflags 中的任何位都未在文件的标志位中设置,则此主要计算结果为真。 如果 flags 前面有一个加号 (“+”) ,如果 flags 中的任何位在文件的标志位中被设置,或者 notflags 中的任何位在文件的标志位中没有被设置,则此主元计算为 true。 否则,如果 flags 中的位与文件的 flags 位完全匹配,并且没有一个 flags 位与 notflags 的位匹配,则此主要计算结果为 true。
-fstype type
如果文件包含在 type 类型的文件系统中,则为真。 lsvfs(1) 命令可用于找出系统上可用的文件系统类型。 此外,还有两种伪类型, “local” 和 “rdonly” 。 前者匹配任何物理安装在执行 find 的系统上的文件系统,后者匹配任何以只读方式安装的文件系统。
-gid gname
与 -group gname 相同,用于与 GNU find 兼容。 GNU find 施加了一个限制,即 gname 是数字,而 find 没有。
-group gname
如果文件属于组 gname ,则为真。 如果 gname 是数字并且没有这样的组名,则 gname 被视为组 ID。
忽略错误,因为从目录读取名称后文件或目录被删除。 此选项不影响起点上发生的错误。
-ilname pattern
与 -lname 类似,但匹配不区分大小写。 这是一个 GNU 查找扩展。
-iname pattern
与 -name 类似,但匹配不区分大小写。
-inum n
如果文件的 inode 编号为 n ,则为真。
-ipath pattern
与 -path- 类似,但匹配不区分大小写。
-iregex pattern
与 -regex 类似,但匹配不区分大小写。
-iwholename pattern
与 -ipath 相同,为 GNU 找到兼容性。
-links n
如果文件有 n 个链接,则为真。
-lname pattern
与 -name 类似,但匹配的是符号链接的内容而不是文件名。 请注意,这仅在遵循符号链接时才匹配损坏的符号链接。 这是一个 GNU 查找扩展。
这个主要的总是评估为真。 当前文件的以下信息被写入标准输出:它的 inode 编号、512 字节块的大小、文件权限、硬链接数、所有者、组、字节大小、最后修改时间和路径名。 如果文件是块或字符特殊文件,将显示设备号而不是字节大小。 如果文件是符号链接,则链接到的文件的路径名将显示在 “->” 前面。 格式与 “ls -dgils” 生成的格式相同。
永远正确;在命令行参数下最多下降 n 个目录级别。 如果指定了任何 -maxdepth ,则它适用于整个表达式,即使它通常不会被计算。 “-maxdepth 0” 将整个搜索限制为命令行参数。
永远正确;不要在低于 n 的级别上应用任何测试或操作。 如果指定了任何 -mindepth ,则它适用于整个表达式,即使它通常不会被计算。 “-mindepth 1” 处理除命令行参数之外的所有参数。
-mmin [-|+]n
如果文件上次修改时间和开始 find 时间之间的差异(向上舍入到下一整分钟)大于 n (+n) 、小于 n (-n) 或恰好在 n 分钟前,则为真。
-mnewer file
与 -newer 相同。
与 -xdev 相同,用于 GNU 查找兼容性。
-mtime n[smhdw]
如果未指定单位,则如果文件上次修改时间和开始 find 时间之间的差值(向上舍入到下一个完整的 24 小时周期)为 n 个 24 小时周期,则此主要计算结果为 true。
如果指定了单位,则如果文件上次修改时间和开始 find 的时间之间的差正好是 n 个单位,则此主文件的计算结果为 true。 有关支持的时间单位的信息,请参阅 -atime 主要描述。
-name pattern
如果正在检查的路径名的最后一个组件与 pattern 匹配,则为真。 特殊的 shell 模式匹配字符 (“[ 、” “] 、” “*” 和 “?”) 可以用作 pattern 的一部分。 这些字符可以通过使用反斜杠 (“\”) 转义来显式匹配。
-newer file
如果当前文件的最后修改时间比 file 更新,则为真。
-newerXY file
如果当前文件的上次访问时间 (X=a) 、inode 创建时间 (X=B) 、更改时间 (X=c) 或修改时间 (X=m) 比上次访问时间 (Y=a) 、inode 创建时间 (Y=B) 、更改时间 (Y=c) 或 file 修改时间 (Y=m) 。 此外,如果 Y=t ,则 file 被解释为 cvs(1) 所理解形式的直接日期规范。 请注意, -newermm 等效于 -newer 。
如果文件属于未知组,则为真。
关闭 -ignore_readdir_race 的效果。这是默认行为。
此选项用于 GNU 查找兼容性。 在 GNU find 中,它禁用了与 find 无关的优化,因此它被忽略了。
如果文件属于未知用户,则为真。
-ok utility [argument ...] ;
-ok primary 与 -exec primary 相同,不同之处在于 find 通过向终端打印消息并读取响应来请求用户确认 utility 的执行。 如果响应不是肯定的( “POSIX” 语言环境中的 ‘y’ ), 则不执行命令并且 -ok 表达式的值为 false。
-okdir utility [argument ...] ;
-okdir 主节点与 -execdir 主节点相同,但与 -ok 主节点的描述相同。
-path pattern
如果正在检查的路径名与 pattern 匹配,则为真。 特殊的 shell 模式匹配字符 (“[ 、” “] 、” “*” 和 “?”) 可以用作 pattern 的一部分。 这些字符可以通过使用反斜杠 (“\”) 转义来显式匹配。 斜杠 (“/”) 被视为普通字符,不必显式匹配。
-perm [-|+]mode
mode 可以是符号(参见 chmod(1) )或八进制数。 如果 mode 是符号模式,则假定起始值为零,并且 mode 设置或清除权限,而不考虑进程的文件模式创建掩码。 如果 mode 是八进制,则只有文件模式位的位 07777 (S_ISUID | S_ISGID | S_ISTXT | S_IRWXU | S_IRWXG | S_IRWXO) 参与比较。 如果 mode 前面有一个破折号 (“-”) ,那么如果 mode 中的至少所有位都在文件的模式位中设置,则此主要计算结果为真。 如果 mode 前面有一个加号 (“+”) ,如果 mode 中的任何位在文件的模式位中设置,则此主要计算结果为真。 否则,如果 mode 中的位与文件的模式位完全匹配,则此主要计算结果为真。 请注意,符号模式的第一个字符可能不是破折号 (“-”) 。
这个主要的总是评估为真。 它将当前文件的路径名打印到标准输出。 如果没有指定 -exec 、 -ls 、 -print0 或 -ok ,则给定表达式应有效地替换为 ( 给定表达式 ) -print 。
这个主要的总是评估为真。 它将当前文件的路径名打印到标准输出,后跟一个 ASCII NUL 字符(字符代码 0)。
这个主要的总是评估为真。 它导致 find 不会下降到当前文件中。 请注意,如果指定了 -d 选项,则 -prune primary 无效。
导致 find 立即终止。
-regex pattern
如果文件的整个路径使用正则表达式匹配 pattern ,则为真。 要匹配名为 “./foo/xyzzy” 的文件,您可以使用正则表达式 “.*/[xyz]*” 或 “.*/foo/.*” 但不能使用 “xyzzy” 或 “/foo/” 。
-samefile name
如果文件是 name 的硬链接,则为真。 如果指定了命令选项 -L ,那么如果文件是符号链接并指向 name ,它也是如此。
-size n[ckMGTP]
如果文件的大小(以 512 字节块为单位,向上取整)为 n ,则为真。 如果 n 后跟 c ,则如果文件大小为 n 字节(字符),则主要为真。 类似地,如果 n 后跟一个比例指示符,则文件的大小与 n 进行比较,比例为:
千字节(1024 字节)
兆字节(1024 KB)
千兆字节(1024 兆字节)
太字节(1024 GB)
PB(1024 TB)
如果当前文件是稀疏的,即根据其字节大小分配的块少于预期,则为真。 这也可能匹配已被文件系统压缩的文件。
-type t
如果文件属于指定类型,则为真。 可能的文件类型如下:
特殊块
特殊字符
目录
常规文件
符号链接
FIFO
套接字
-uid uname
与 -user uname 相同,用于与 GNU find 兼容。 GNU find 施加了一个限制,即 uname 是数字,而 find 不是。
-user uname
如果文件属于用户 uname ,则为真。 如果 uname 是数字并且没有这样的用户名,则 uname 被视为用户 ID。
-wholename pattern
与 -path 相同,为 GNU 找到兼容性。
可以使用以下运算符组合初选。 运算符按优先级降序排列。
[(](#() expression )
如果括号内的表达式计算结果为真,则计算结果为真。
! expression
-not expression
这是一元 NOT 运算符。 如果表达式为假,则计算结果为真。
总是假的。
永远是真的。
expression -and expression
expression expression
-and 运算符是逻辑 AND 运算符。 由于两个表达式的并列暗示了它,因此不必指定它。 如果两个表达式都为真,则表达式的计算结果为真。 如果第一个表达式为假,则不计算第二个表达式。
expression -or expression
-or 运算符是逻辑 OR 运算符。 如果第一个或第二个表达式为真,则表达式的计算结果为真。 如果第一个表达式为真,则不计算第二个表达式。
所有操作数和主数必须是单独的参数来 find 。 初选,自己带参数希望每个参数是一个单独的参数 find 。
LANG 、 LC_ALL 、 LC_COLLATE 、 LC_CTYPE 、 LC_MESSAGES 和 LC_TIME 环境变量会影响 find 实用程序的执行,如 environ(7) 中所述。
以下示例显示为给 shell:
[find / \! -name "*.c" -print](#find_/e!_-name(dq*.c_(dq_-print)
打印出名称不以 .c 结尾的所有文件的列表。
打印出用户 “wnj” 拥有的比文件 ttt 更新的所有文件的列表。
打印出所有不比 ttt 新且属于 “wnj” 的文件的列表。
打印出属于 “wnj” 或比 ttt 更新的所有文件的列表。
打印出所有 inode 更改时间比当前时间减去一分钟的文件的列表。
使用 echo(1) 命令打印出所有文件的列表。
删除 /usr/ports/packages 中所有损坏的符号链接。
在工作目录 /usr/src 中查找至少七层深的文件和目录。
不等同于前面的示例,因为 -prune 不会在七级以下进行评估。
-follow 已弃用;应该使用 -L- 选项。 有关详细信息,请参阅下面的 标准 部分。
chflags(1) 、 chmod(1) 、 cvs(1) 、 locate(1) 、 lsvfs(1) 、 whereis(1) 、 which(1) 、 xargs(1) 、 stat(2) 、 acl(3) 、 fts(3) 、 getgrent(3) 、 getpwent(3) 、 strmode(3) 、 re_format(7) 、 symlink(7)
find 实用程序语法是 IEEE Std 1003.1-2001 (“POSIX.1”) 标准指定的语法的超集。
除了 -H 和 -L 以及 -amin 、 -anewer 、 -cmin 、 -cnewer 、 -delete 、 -empty 、-fstype 、 -iname 、 -inum 、 -iregex 、 -ls 、 -maxdepth 、 -mindepth 、 -mmin 、 -path 、 -print0 、 -regex 、 -sparse 和所有与 -B* 诞生时间相关的初选都是对 IEEE Std 1003.1-2001 (“POSIX.1”) 的扩展。
从历史上看, -d -、 -L 和 -x 选项是使用初级 -depth, -follow 和 -xdev 实现的。 这些初选总是被评估为真。 由于它们实际上是在遍历开始之前生效的全局变量,因此某些合法表达式可能会产生意想不到的结果。 一个例子是表达式 -print -o -depth 。 由于 -print 始终评估为 true,因此标准的评估顺序意味着永远不会评估 -depth 。 不是这种情况。
运算符 -or 实现为 -o, 运算符 -and 实现为 -a 。
-exec 和 -ok 主项的历史实现不会替换实用程序名称或实用程序参数中的字符串 “{}” (如果它前面或后面有非空白字符)。 无论它出现在实用程序名称或参数中的哪个位置,此版本都会替换它。
-E 选项的灵感来自等效的 grep(1) 和 sed(1) 选项。
find 命令出现在 Version 1 AT&T UNIX 中。
find 使用的特殊字符也是许多 shell 程序的特殊字符。 特别是字符 “* 、” “[ 、” “] 、” “? 、” “( 、” “) 、” “! 、” “\” 和 “;” 可能必须从 shell 中逃脱。
由于没有分隔选项和文件名或文件名和 expression 的分隔符,因此很难指定名为 -xdev 或 ! 的文件。 这些问题由 -f 选项和 getopt(3) “-``-” 结构处理。
-delete primary 无法与导致文件系统树遍历选项更改的其他选项很好地交互。
-mindepth 和 -maxdepth primaries 实际上是全局选项(如上文所述)。 它们可能应该被看起来像选项的选项所取代。
April 18, 2020
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
CLANG(1)
CLANG(1)
Clang
CLANG(1)
clang - Clang C、C++ 和 Objective-C 编译器
clang [options] filename ...
clang 是一个 C、C++ 和 Objective-C 编译器,它包含预处理、解析、优化、代码生成、汇编和链接。 根据传递的高级模式设置,Clang 将在执行完整链接之前停止。 虽然 Clang 是高度集成的,但了解编译的各个阶段以及如何调用它很重要。这些阶段是:
驱动
clang 可执行文件实际上是一个小型驱动程序,它控制其他工具(例如编译器、汇编器和链接器)的整体执行。 通常您不需要与驱动程序交互,但您可以透明地使用它来运行其他工具。
预处理
此阶段处理输入源文件的标记化、宏扩展、#include 扩展和其他预处理器指令的处理。 此阶段的输出通常称为 ".i" (用于 C)、 ".ii" (用于 C++)、 ".mi" (用于 Objective-C) 或 ".mii" (用于 Objective-C++) 文件。
解析和语义分析
此阶段解析输入文件,将预处理器标记转换为解析树。 一旦以解析树的形式出现,它还会应用语义分析来计算表达式的类型,并确定代码是否格式正确。 此阶段负责生成大部分编译器警告以及解析错误。 这个阶段的输出是一个 an "抽象语法树" (AST).
代码生成和优化
此阶段将 AST 转换为低级中间代码(称为 "LLVM IR") 并最终转换为机器代码。 此阶段负责优化生成的代码并处理特定于目标的代码生成。 此阶段的输出通常称为 ".s" 文件或"assembly" 文件。
Clang 还支持使用集成汇编器,其中代码生成器直接生成目标文件。 这避免了生成 ".s" 文件和调用目标汇编程序的开销。
汇编器
此阶段运行目标汇编器以将编译器的输出转换为目标目标文件。 此阶段的输出通常称为 ".o" 文件或 "object" 文件。
链接器
此阶段运行目标链接器以将多个目标文件合并到一个可执行文件或动态库中。 此阶段的输出通常称为 "a.out"、 ".dylib" 或 ".so" 文件。
Clang 静态分析器
静态分析器是一种扫描源代码以尝试通过代码分析发现错误的工具。 该工具使用了 Clang 的许多部分,并内置在同一个驱动程序中。 有关如何使用静态分析器的更多详细信息,请参阅 <https://clang-analyzer.llvm.org> 。
-E
运行预处理器阶段。
-fsyntax-only
运行预处理器、解析器和类型检查阶段。
-S
运行前面的阶段以及 LLVM 生成和优化阶段以及特定于目标的代码生成,生成汇编文件。
-c
运行上述所有程序,加上汇编程序,生成目标 ".o" 目标文件。
no stage selection option
如果未指定阶段选择选项,则运行上述所有阶段,并运行链接器以将结果组合到可执行文件或共享库中。
-x
将后续输入文件视为具有类型语言。
-std=
指定要编译的语言标准。
C 语言支持的值为:
c89 c90 iso9899:1990
ISO C 1990
iso9899:199409
ISO C 1990 修订版 1
gnu89 gnu90
带有 GNU 扩展的 ISO C 1990
c99 iso9899:1999
ISO C 1999
gnu99
具有 GNU 扩展的 ISO C 1999
c11 iso9899:2011
ISO C 2011
gnu11
带有 GNU 扩展的 ISO C 2011
c17 iso9899:2017
ISO C 2017
gnu17
具有 GNU 扩展的 ISO C 2017
默认的 C 语言标准是 gnu11, 但在 PS4 上是 gnu99 。
C++ 语言支持的值为:
c++98 c++03
ISO C++ 1998 及修正
gnu++98 gnu++03
ISO C++ 1998 与修正和 GNU 扩展
c++11
ISO C++ 2011 修订版
gnu++11
带有修正和 GNU 扩展的 ISO C++ 2011
c++14
ISO C++ 2014 修订版
gnu++14
带有修正和 GNU 扩展的 ISO C++ 2014
c++17
ISO C++ 2017 修订版
gnu++17
带有修正和 GNU 扩展的 ISO C++ 2017
c++2a
ISO C++ 2020 工作草案
gnu++2a
具有 GNU 扩展的 ISO C++ 2020 工作草案
默认的 C++ 语言标准是 gnu++14.
OpenCL 语言支持的值为:
cl1.0
OpenCL 1.0
cl1.1
OpenCL 1.1
cl1.2
OpenCL 1.2
cl2.0
OpenCL 2.0
默认的 OpenCL 语言标准是 cl1.0 。
CUDA 语言支持的值为:
cuda
NVIDIA CUDA(tm)
-stdlib=
指定要使用的 C++ 标准库;支持的选项是 libstdc++ 和 libc++。 如果未指定,将使用平台默认值。
-rtlib=
指定要使用的编译器运行时库;支持的选项是 libgcc 和 compiler-rt。 如果未指定,将使用平台默认值。
-ansi
与 -std=c89 相同
-ObjC, -ObjC++
将源输入文件分别视为 Objective-C 和 Object-C++ 输入。
-trigraphs
启用三元组。
-ffreestanding
指示该文件应针对独立环境而非托管环境进行编译。
-fno-builtin
禁用 strlen() 和 malloc() 等内置函数的特殊处理和优化。
-fmath-errno
表示数学函数应被视为更新 errno 。
-fpascal-strings
使用 "\pfoo" 启用对 Pascal 样式字符串的支持。
-fms-extensions
启用对 Microsoft 扩展的支持。
-fmsc-version=
设置_MSC_VER。 在 Windows 上默认为 1300。 否则不设置。
-fborland-extensions
启用对 Borland 扩展的支持。
-fwritable-strings
使所有字符串文字默认为可写。 这会禁用字符串的唯一性和其他优化。
-flax-vector-conversions, -flax-vector-conversions=, -fno-lax-vector-conversions
允许隐式向量转换的松散类型检查规则。 <种类> 的可能值:
none: 不允许向量之间的隐式转换
integer: 允许在具有相同整体位宽的整数向量之间进行隐式位广播
all: 允许在具有相同整体位宽的任何向量之间进行隐式位广播
如果未指定,则默认为 integer 。
-fblocks
启用 "Blocks" 语言功能。
-fobjc-abi-version=version
选择要使用的 Objective-C ABI ABI 版本。 可用版本为 1(传统 "fragile" ABI)、2(非脆弱 ABI 1)和 3(非脆弱 ABI 2)。
-fobjc-nonfragile-abi-version=
选择默认使用的 Objective-C 非脆弱 ABI 版本。 仅当启用非易碎 ABI 时(通过 -fobjc-nonfragile-abi 或因为它是平台默认设置),它才会用作 Objective-C ABI 。
-fobjc-nonfragile-abi, -fno-objc-nonfragile-abi
启用 Objective-C 非脆弱 ABI。 在这是默认 ABI 的平台上,可以使用 -fno-objc-nonfragile-abi 禁用它。
Clang 完全支持交叉编译作为其设计的固有部分。 根据您的 Clang 版本的配置方式,它可能支持许多交叉编译器,或者可能只支持本机目标。
-arch
指定要构建的架构。
-mmacosx-version-min=
为 macOS 构建时,请指定应用程序支持的最低版本。
-miphoneos-version-min
为 iPhone OS 构建时,请指定应用程序支持的最低版本。
--print-supported-cpus
打印给定目标的支持处理器列表(通过 --target= 或 -arch 指定)。 如果未指定目标,将使用系统默认目标。
-mcpu=?, -mtune=?
--print-supported-cpus 的别名
-march=
指定 Clang 应为特定处理器系列成员及更高版本生成代码。 例如,如果您指定 -march=i486,则允许编译器生成在 i486 和更高版本处理器上有效但在更早版本处理器上可能不存在的指令。
-O0, -O1, -O2, -O3, -Ofast, -Os, -Oz, -Og, -O, -O4
指定要使用的优化级别:
-O0 表示 "no optimization": 此级别编译速度最快并生成最可调试的代码。
-O1 介于 -O0 和 -O2 之间。
-O2 中等优化级别,可实现大多数优化。
-O3 与 -O2 类似,不同之处在于它启用了需要更长时间执行或可能生成更大代码的优化(以试图使程序运行得更快)
-Ofast 启用 -O3 的所有优化以及其他可能违反严格遵守语言标准的积极优化。
-Os 与 -O2 类似,具有额外的优化以减少代码大小。
-Oz 与 -Os 类似(因此也与 -O2 类似),但进一步减小了代码大小。
-Og 与 -O1 类似。在未来的版本中,此选项可能会禁用不同的优化以提高可调试性。
-O 相当于 -O2 。
-O4 及以上
目前相当于 -O3
-g, -gline-tables-only, -gmodules
控制调试信息输出。 请注意,Clang 调试信息在 -O0 时效果最好。 当指定了多个以 -g 开头的选项时,最后一个获胜:
-g 生成调试信息。
-gline-tables-only 仅生成行表调试信息。 这允许带有内联信息的符号化回溯,但不包括有关变量、它们的位置或类型的任何信息。
-gmodules 生成包含对 Clang 模块或预编译头文件中定义的类型的外部引用的调试信息,而不是将冗余的调试类型信息发送到每个目标文件中。 此选项透明地将 Clang 模块格式切换到将 Clang 模块与调试信息一起保存的目标文件容器。 编译使用 Clang 模块或预编译头文件的程序时,此选项会生成完整的调试信息,编译时间更快,目标文件更小。
在构建静态库以分发到其他机器时不应使用此选项,因为调试信息将包含对构建库中的目标文件的机器上的模块缓存的引用。
-fstandalone-debug -fno-standalone-debug
Clang 支持许多优化以减少二进制文件中调试信息的大小。 它们的工作基于调试类型信息可以分布在多个编译单元上的假设。 例如,Clang 不会为模块不需要的类型发出类型定义,并且可以用前向声明替换。 此外,Clang 只会为包含类的 vtable 的模块中的动态 C++ 类发出类型信息。
-fstandalone-debug 选项关闭这些优化。 这在使用不附带调试信息的 3rd 方库时很有用。 这是达尔文的默认设置。 请注意,Clang 永远不会为程序根本没有引用的类型发出类型信息。
-fexceptions
启用展开信息的生成。 这允许通过 Clang 编译的堆栈帧抛出异常。 这是在 x86-64 中默认开启的。
-ftrapv
生成代码以捕获整数溢出错误。 有符号整数溢出在 C 中未定义。 使用这个标志,会生成额外的代码来检测它并在它发生时中止。
-fvisibility
此标志设置默认可见性级别。
-fcommon, -fno-common
此标志指定没有初始化程序的变量获得公共链接。 可以使用 -fno-common 禁用它。
-ftls-model=
设置用于线程局部变量的默认线程局部存储 (TLS) 模型。 有效值为: "global-dynamic"、 "local-dynamic"、 "initial-exec" 和 "local-exec" 。 默认值为 "global-dynamic" 。 可以使用 tls_model 属性覆盖默认模型。 如果可能,编译器将尝试选择更有效的模型。
-flto, -flto=full, -flto=thin, -emit-llvm
生成 LLVM 格式的输出文件,适用于链接时间优化。 当与 -S 一起使用时,这会生成 LLVM 中间语言汇编文件,否则会生成 LLVM 位码格式的目标文件(可能会根据阶段选择选项传递给链接器)。
-flto 的默认值为 "full" ,其中 LLVM 位码适用于单片链接时间优化 (LTO),其中链接器将所有此类模块合并为单个组合模块以进行优化。 使用 "thin" 时,会改为调用 ThinLTO 编译。
-###
打印(但不运行)为此编译运行的命令。
--help
显示可用选项。
-Qunused-arguments
不要为未使用的驱动程序参数发出任何警告。
-Wa,
将 args 中逗号分隔的参数传递给汇编器。
-Wl,
将 args 中逗号分隔的参数传递给链接器。
-Wp,
将 args 中逗号分隔的参数传递给预处理器。
-Xanalyzer
将 arg 传递给静态分析器。
-Xassembler
将 arg 传递给汇编程序。
-Xlinker
将 arg 传递给链接器。
-Xpreprocessor
将 arg 传递给预处理器。
-o
将输出写入文件。
-print-file-name=
打印文件的完整库路径。
-print-libgcc-file-name
打印当前使用的编译器运行时库的库路径 ("libgcc.a" 或 "libclang_rt.builtins.*.a")。
-print-prog-name=
打印名称的完整程序路径。
-print-search-dirs
打印用于查找库和程序的路径。
-save-temps
保存中间编译结果。
-save-stats, -save-stats=cwd, -save-stats=obj
将内部代码生成 (LLVM) 统计信息保存到当前目录 (-save-stats/"-save-stats=cwd") 或输出文件目录 ("-save-state=obj") 中的文件。
-integrated-as, -no-integrated-as
用于分别启用和禁用集成汇编程序的使用。 默认情况下是否打开集成汇编器取决于目标。
-time
计时单个命令。
-ftime-report
打印每个编译阶段的时序摘要。
-v
显示命令以运行和使用详细输出。
-fshow-column, -fshow-source-location, -fcaret-diagnostics, -fdiagnostics-fixit-info, -fdiagnostics-parseable-fixits, -fdiagnostics-print-source-range-info, -fprint-source-range-info, -fdiagnostics-show-option, -fmessage-length
这些选项控制 Clang 如何打印有关诊断(错误和警告)的信息。 请参阅 Clang 用户手册了解更多信息。
-D=
将隐式 #define 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-U
将隐式 #undef 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-include
将隐式 #include 添加到预定义缓冲区中,在预处理源文件之前读取该缓冲区。
-I
将指定目录添加到包含文件的搜索路径。
-F
将指定目录添加到框架包含文件的搜索路径。
-nostdinc
不要在标准系统目录或编译器内置目录中搜索包含文件。
-nostdlibinc
不要在标准系统目录中搜索包含文件,但要搜索编译器内置的包含目录。
-nobuiltininc
不要在 clang 的内置目录中搜索包含文件。
TMPDIR, TEMP, TMP
依次检查这些环境变量,以确定在编译过程中写入临时文件的位置。
CPATH
如果存在此环境变量,则将其视为要添加到默认系统包含路径列表的分隔路径列表。 分隔符是与平台相关的分隔符,在 PATH 环境变量中使用。
环境变量中的空组件将被忽略。
C_INCLUDE_PATH, OBJC_INCLUDE_PATH, CPLUS_INCLUDE_PATH, OBJCPLUS_INCLUDE_PATH
这些环境变量指定了额外的路径,就像 CPATH 一样,它们只在处理适当的语言时使用。
MACOSX_DEPLOYMENT_TARGET
如果未指定 -mmacosx-version-min ,则从此环境变量中读取默认部署目标。 此选项仅影响达尔文目标。
要报告错误,请访问 <https://bugs.llvm.org/> 。 大多数错误报告应包括预处理的源文件(使用 -E 选项)和编译器的完整输出,以及要重现的信息。
as(1), ld(1)
由 Clang / LLVM 团队维护 ()
2007-2020, Clang 团队
2020-06-26
10
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
TAR(1)
TAR(1)
FreeBSD General Commands Manual
TAR(1)
tar —
操作磁带档案
tar [bundled-flags ⟨args⟩] [⟨file⟩ | ⟨pattern⟩ ...] tar {-c} [options] [files | directories] tar {-r | -u} -f archive-file [options] [files | directories] tar {-t | -x} [options] [patterns]
tar 创建和操作流归档文件。 此实现可以从 tar, pax, cpio, zip, jar, ar, xar, rpm, 7-zip 和 ISO 9660 cdrom i映像中提取,并且可以创建 tar, pax, cpio, ar, zip, 7-zip 和 shar 档案.
第一个概要表格显示了一个 “bundled” 选项词。 提供此用法是为了与历史实现兼容。 有关详细信息,请参阅下面的兼容性。
其他概要形式显示了首选用法。 tar 的第一个选项是以下列表中的模式指示符:
创建包含指定项目的新存档。 长选项形式是 -``-create 。
与 -c 类似,但新条目会附加到存档中。 请注意,这仅适用于存储在常规文件中的未压缩存档。 -f 选项是必需的。 长选项形式是 -``-append 。
将存档内容列出到标准输出。 长选项形式是 -``-list 。
与 -r 类似,但仅当新条目的修改日期比存档中的相应条目新时才会添加新条目。 请注意,这仅适用于存储在常规文件中的未压缩存档。 -f 选项是必需的。 长格式是 -``-update 。
从存档中提取到磁盘。 如果同名文件在存档中多次出现,则将提取每个副本,之后的副本会覆盖(替换)之前的副本。 长选项形式是 -``-extract 。
在 -c -、 -r 或 -u 模式下,每个指定的文件或目录都按命令行上指定的顺序添加到存档中。 默认情况下,每个目录的内容也会被归档。
在提取或列表模式下,在打开存档之前读取和解析整个命令行。 命令行上的路径名或模式指示应处理存档中的哪些项目。 模式是 tcsh(1) 中记录的 shell 样式的通配模式。
除非另有特别说明,否则选项适用于所有操作模式。
archive
(仅限 c 和 r 模式)打开指定的存档,其中的条目将附加到当前存档。 举个简单的例子,
`tar` `-c` `-f` - newfile `@`original.tar
将新存档写入标准输出,其中包含文件 newfile 和 original.tar 中的所有条目。 相比之下,
`tar` `-c` `-f` - newfile original.tar
创建一个只有两个条目的新存档。相似地,
`tar` `-czf` - `-` `-format` `pax` `@`-
从标准输入读取存档(其格式将自动确定)并将其转换为标准输出上 gzip 压缩的 pax 格式存档。 这样, tar 可用于将档案从一种格式转换为另一种格式。
, -``-auto-compress
(仅限 c 模式)使用存档后缀来决定一组格式和压缩。举个简单的例子,
`tar` `-a` `-cf` archive.tgz source.c source.h
创建一个具有受限 pax 格式和 gzip 压缩的新存档,
`tar` `-a` `-cf` archive.tar.bz2.uu source.c source.h
创建一个具有受限 pax 格式和 bzip2 压缩和 uuencode 压缩的新存档,
`tar` `-a` `-cf` archive.zip source.c source.h
创建一个 zip 格式的新存档,
`tar` `-a` `-jcf` archive.tgz source.c source.h
忽略 “-j” 选项,并创建一个具有受限 pax 格式和 gzip 压缩的新存档,
`tar` `-a` `-jcf` archive.xxx source.c source.h
如果它是未知后缀或没有后缀,则创建一个具有受限 pax 格式和 bzip2 压缩的新存档。
-``-acls
(仅限 c、r、u、x 模式)存档或提取 POSIX.1e 或 NFSv4 ACL。 这与 -``-no-acls 和 c、r 和 u 模式(Mac OS X 除外)或 tar- 以 root 身份在 x 模式下运行时的默认行为相反。 在 Mac OS X 上,此选项将扩展 ACL 转换为 NFSv4 ACL。 要存储扩展 ACL,首选 -``-mac-metadata 选项。
, -``-read-full-blocks
忽略与其他 tar(1) 实现的兼容性。
blocksize, -``-block-size blocksize
指定磁带驱动器 I/O 的块大小(以 512 字节记录为单位)。 通常,只有在读取或写入磁带驱动器时才需要此参数,并且通常不需要,因为 20 条记录(10240 字节)的默认块大小非常常见。
directory, -``-cd directory, -``-directory directory
在 c 和 r 模式下,这会在添加以下文件之前更改目录。 在 x 模式下,在打开存档之后但在从存档中提取条目之前更改目录。
-``-chroot
(仅限 x 模式)在处理任何 -C 选项之后和提取任何文件之前, chroot() 到当前目录。
-``-clear-nochange-fflags
(仅限 x 模式)在删除文件系统对象以替换它们之前,清除可能阻止删除的特定于平台的文件属性或文件标志。
-``-exclude pattern
不要处理与指定模式匹配的文件或目录。 请注意,排除优先于命令行上指定的模式或文件名。
-``-exclude-vcs
不要处理版本控制系统 ‘Arch’, ‘Bazaar’, ‘CVS’, ‘Darcs’, ‘Mercurial’, ‘RCS’, ‘SCCS’, ‘SVN’ 和 ‘git’ 内部使用的文件或目录。
-``-fflags
(仅限 c、r、u、x 模式)存档或提取特定于平台的文件属性或文件标志。 这与 -``-no-fflags 和 c、r 和 u 模式下的默认行为相反,或者如果 tar 以 root 身份在 x 模式下运行。
-``-format format
(仅限 c、r、u 模式)对创建的存档使用指定的格式。 支持的格式包括 “cpio”, “pax”, “shar” 和 “ustar” 。 也可能支持其他格式;有关当前支持的格式的更多信息,请参阅 libarchive-formats(5) 在 r 和 u 模式下,扩展现有存档时,此处指定的格式必须与磁盘上现有存档的格式兼容。
file, -``-file file
从指定文件读取存档或将存档写入指定文件。文件名可以是 - 用于标准输入或标准输出。 默认值因系统而异;在 FreeBSD 上,默认为 /dev/sa0; 在 Linux 上,默认值为 /dev/st0 。
-``-gid id
使用提供的组 ID 号。 提取时,这会覆盖存档中的组 ID;存档中的组名将被忽略。 创建时,这会覆盖从磁盘读取的组 ID;如果 -``-gname 也没有指定,组名将被设置为匹配组 id。
-``-gname name
使用提供的组名。 提取时,这会覆盖存档中的组名;如果系统上不存在提供的组名,则将使用组 ID(来自存档或 - -gid 选项)。 创建时,这将设置将存储在存档中的组名;该名称将不会根据系统组数据库进行验证。
(仅限 c 和 r 模式)将遵循命令行中命名的符号链接;链接的目标将被归档,而不是链接本身。
(仅限 c 和 r 模式) -L 的同义词。
的同义词。
-``-help
显示用法。
-``-hfsCompression
(仅限 x 模式)Mac OS X 特定(v10.6 或更高版本)。使用 HFS+ 压缩压缩提取的常规文件。
-``-ignore-zeros
-``-options read_concatenated_archives 的别名,用于与 GNU tar 兼容。
-``-include pattern
仅处理与指定模式匹配的文件或目录。 请注意,使用 -``-exclude 指定的排除优先于包含。 如果没有明确指定包含,则默认处理所有条目。 -``-include 选项在过滤档案时特别有用。 例如,命令
`tar` `-c` `-f` new.tar `-``-include='*foo*'` `@`old.tgz
创建一个新存档 new.tar ,其中仅包含 old.tgz 中包含字符串 ‘foo’ 的条目。
, -``-xz
(仅限 c 模式)使用 xz(1) 压缩生成的存档。在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 XZ 压缩。
, -``-bzip, - -bzip2, - -bunzip2
(仅限 c 模式)使用 bzip2(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 bzip2 压缩。
, -``-keep-old-files
(仅限 x 模式)不要覆盖现有文件。 特别是,如果一个文件在档案中出现多次,以后的副本不会覆盖以前的副本。
-``-keep-newer-files
(仅限 x 模式)不要覆盖比正在提取的存档中出现的版本新的现有文件。
, -``-dereference
(仅限 c 和 r 模式)将遵循所有符号链接。 通常,符号链接是这样存档的。 使用此选项,链接的目标将被存档。
, -``-check-links
(仅限 c 和 r 模式)除非每个文件的所有链接都已归档,否则会发出警告消息。
-``-lrzip
(仅限 c 模式)使用 lrzip(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 lrzip 压缩。
-``-lz4
(仅限 c 模式)在写入之前使用与 lz4 兼容的压缩来压缩存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 lz4 压缩。
-``-zstd
(仅限 c 模式)在写入之前使用与 zstd 兼容的压缩来压缩存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 zstd 压缩。
-``-lzma
(仅限 c 模式)使用原始 LZMA 算法压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 不鼓励使用此选项,而应使用 -``-xz 创建新档案。 请注意,此 tar 实现在读取档案时会自动识别 LZMA 压缩。
-``-lzop
(仅限 c 模式)使用 lzop(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 LZO 压缩。
, -``-modification-time
(仅限 x 模式)不要提取修改时间。 默认情况下,修改时间设置为存档中存储的时间。
-``-mac-metadata
(仅限 c、r、u 和 x 模式)特定于 Mac OS X。使用 AppleDouble 格式的 copyfile(3) 归档或提取扩展 ACL 和扩展文件属性。 这与 -``-no-mac-metadata 正好相反。 以及 c、r 和 u 模式下的默认行为,或者如果 tar 以 root 身份在 x 模式下运行。
, -``-norecurse, -``-no-recursion
不要对目录的内容进行递归操作。
-``-newer date
(仅限 c、r、u 模式)仅包括比指定日期新的文件和目录。 这将比较 ctime 条目。
-``-newer-mtime date
(仅限 c、r、u 模式)与 -``-newer 类似,但它比较 mtime 条目而不是 ctime 条目。
-``-newer-than file
(仅限 c、r、u 模式)仅包含比指定文件新的文件和目录。 这将比较 ctime 条目。
-``-newer-mtime-than file
(仅限 c、r、u 模式)与 -``-newer-than 类似,只是它比较 mtime 条目而不是 ctime 条目。
-``-nodump
(仅限 c 和 r 模式)通过跳过此文件来尊重 nodump 文件标志。
-``-nopreserveHFSCompression
(仅限 x 模式)Mac OS X 特定(v10.6 或更高版本)。 不要压缩在归档之前使用 HFS+ 压缩压缩的提取的常规文件。 默认情况下,使用 HFS+ 压缩再次压缩常规文件。
-``-null
(与 -I 或 -T 一起使用)文件名或模式由空字符分隔,而不是由换行符分隔。 这通常用于读取 find(1) 的 -print0 选项输出的文件名。
-``-no-acls
(仅限 c、r、u、x 模式)不要归档或提取 POSIX.1e 或 NFSv4 ACL。 如果 tar 在 x 模式下以非 root 用户身份运行(在 Mac OS X 上作为 c、r、u 和 x 模式下的任何用户),这与 -``-acls 和默认行为相反。
-``-no-fflags
(仅限 c、r、u、x 模式)不要归档或提取文件属性或文件标志。 如果 tar 在 x 模式下以非 root 身份运行,这与 -``-fflags 和默认行为相反。
-``-no-mac-metadata
(仅限 x 模式)特定于 Mac OS X。 不要使用 AppleDouble 格式的 copyfile(3) 归档或提取 ACL 和扩展文件属性。 这与 -``-mac-metadata 正好相反。 如果 tar 在 x 模式下以非 root 身份运行,则默认行为。
-``-no-safe-writes
(仅限 x 模式)不要创建临时文件并使用 rename(2) 替换原始文件。 这与 -``-safe-writes 正好相反。
-``-no-same-owner
如果 tar 以非 root 身份运行,这与 -``-same-owner 和默认行为相反。
-``-no-same-permissions
(仅限 x 模式)不要提取完整权限(SGID、SUID、粘滞位、文件属性或文件标志、扩展文件属性和 ACL)。 如果 tar 以非 root 身份运行,这与 -p 和默认行为相反。
-``-no-xattrs
(仅限 c、r、u、x 模式)不要归档或提取扩展文件属性。 如果 tar 在 x 模式下以非 root 身份运行,这与 -``-xattrs 和默认行为相反。
-``-numeric-owner
这相当于 -``-uname “” -``-gname “。” 提取时,它会导致存档中的用户和组名被忽略,而使用数字用户和组 ID。 创建时,它会导致用户名和组名不存储在存档中。
, -``-to-stdout
(仅限 x、t 模式)在提取 (-x) 模式下,文件将被写入标准输出,而不是被提取到磁盘。 在列表 (-t) 模式下,文件列表将被写入标准错误,而不是通常的标准输出。
(x 模式) 使用运行程序的用户和用户组,而不是存档中指定的用户和组。 请注意,除非指定了 -p 并且程序正在由 root 用户运行,否则这没有任何意义。 在这种情况下,存档中的文件模式和标志将被恢复,但存档中的 ACL 或所有者信息将被丢弃。
(c, r, u 模式) -``-format ustar 的同义词
-``-older date
(仅限 c、r、u 模式)仅包括早于指定日期的文件和目录。 这将比较 ctime 条目。
-``-older-mtime date
(仅限 c、r、u 模式)与 -``-older 类似,不同之处在于它比较 mtime 条目而不是 ctime 条目。
-``-older-than file
(仅限 c、r、u 模式)仅包含比指定文件更早的文件和目录。 这将比较 ctime 条目。
-``-older-mtime-than file
(仅限 c、r、u 模式)与 -``-older-than 类似,不同之处在于它比较 mtime 条目而不是 ctime 条目。
-``-one-file-system
(c、r 和 u 模式)不要交叉安装点。
-``-options options
为特定模块选择可选行为。 参数是包含逗号分隔的关键字和值的文本字符串。 这些被传递给处理特定格式的模块以控制这些格式的行为方式。 每个选项具有以下形式之一:
key=value
该键将在每个支持它的模块中设置为指定的值。 不支持此键的模块将忽略它。
key
该密钥将在支持它的每个模块中启用。 这相当于 key=1 。
!key
该密钥将在支持它的每个模块中被禁用。
module:key=value, module:key, module:!key
和上面一样,但是对应的键和值将只提供给名称与 module 匹配的模块。
创建和追加模式支持的模块和键的完整列表在 archive_write_set_options(3)- 中,对于提取和列表模式在 archive_read_set_options(3) 中。
支持的选项示例:
支持 Joliet 扩展。 这是默认启用的,使用 !joliet 或 iso9660:!joliet 禁用。
支持 Rock Ridge 扩展。 这是默认启用的,使用 !rockridge 或 iso9660:!rockridge 禁用。
一个从 1 到 9 的十进制整数,指定 gzip 压缩级别。
存储时间戳。 这是默认启用的,使用 !timestamp 或 gzip:!timestamp 禁用。
=type
使用 type 作为压缩方法。 支持的值为 bzip2、gzip、lzo(超快)和 zpaq(最佳,极慢)。
一个从 1 到 9 的十进制整数,指定 lrzip 压缩级别。
一个从 1 到 9 的十进制整数,指定 lzop 压缩级别。
启用流校验和。这是默认情况下,使用 lz4:!stream-checksum 禁用。
启用块校验和(默认禁用)。
一个从 4 到 7 的十进制整数,指定 lz4 压缩块大小(默认设置为 7)。
使用被压缩块的前一个块作为压缩字典来提高压缩率。
指定 zstd 压缩级别的十进制整数。 支持的值取决于库版本,常用值从 1 到 22。
一个从 1 到 9 的十进制整数,指定 lzop 压缩级别。
一个从 0 到 9 的十进制整数,指定 xz 压缩级别。
keyword
mtree writer 模块允许您指定将在输出中包含哪些 mtree 关键字。 支持的关键字包括: cksum, device, flags, gid, gname, indent, link, md5, mode, nlink, rmd160, sha1, sha256, sha384
启用所有上述关键字。 您还可以使用 mtree:!all 禁用所有关键字。
在输出中启用 /set 行的生成。
通过缩进选项和拆分行以适应 80 列来生成人类可读的输出。
=type
使用 type 作为压缩方法。 支持的值是 store(未压缩)和 deflate(gzip 算法)。
使用传统的 zip 加密启用加密。
=type
使用 type 作为加密类型。 支持的值为 zipcrypt(传统 zip 加密)、aes128(WinZip AES-128 加密)和 aes256(WinZip AES-256 加密)。
忽略存档中的零块,当多个 tar 存档连接在一起时会发生这种情况。 如果没有此选项,则只会读取第一个串联存档的内容。 此选项与 GNU tar 的 -i -、 -``-ignore-zeros 选项相当。
如果任何模块都不支持提供的选项,则这是一个致命错误。
, -``-absolute-paths
默认情况下,绝对路径名(以 / 字符开头的路径名)在创建档案和从中提取档案时都会删除前导斜杠。 此外, tar 将拒绝提取路径名包含 .. 或其目标目录将被符号链接更改的归档条目。 此选项会抑制这些行为。
, -``-insecure, -``-preserve-permissions
(仅限 x 模式)保留文件权限。 尝试恢复从存档中提取的每个项目的完整权限,包括文件模式、文件属性或文件标志、扩展文件属性和 ACL(如果可用)。 这与 -``-no-same-permissions 相反,如果 tar 以 root 身份运行,则为默认值。 还可以通过指定 -``-no-acls, -``-no-fflags, -``-no-mac-metadata 或 -``-no-xattrs 来部分覆盖它。
-``-passphrase passphrase
passphrase 用于提取或创建加密存档。 目前,zip 是唯一支持加密的支持格式。 除非您意识到使用此选项有多么不安全,否则不应使用此选项。
-``-posix
(仅限 c、r、u 模式) -``-format pax 的同义词
, -``-fast-read
(仅限 x 和 t 模式)仅提取或列出与每个模式或文件名操作数匹配的第一个存档条目。 匹配每个指定的模式或文件名后立即退出。 默认情况下,存档总是被读取到最后,因为可以有多个具有相同名称的条目,并且按照惯例,后面的条目会覆盖前面的条目。 此选项作为性能优化提供。
(仅限 x 模式)将文件提取为稀疏文件。 对于磁盘上的每个块,首先检查它是否只包含 NULL 字节,否则寻找它。 这类似于 dd 的 conv=sparse 选项。
pattern
根据 pattern 修改文件或存档成员名称。 该模式的格式为 /old/new/[ghHprRsS] 其中 old 是基本正则表达式, new 是匹配部分的替换字符串,可选的尾随字母修改处理替换的方式。 如果 old 不匹配,则跳过该模式。 在 new 中,~ 被替换为匹配,\1 到 \9 与相应捕获组的内容。 可选的尾随 g 指定匹配应该在匹配的部分之后继续,并在第一个不匹配的模式处停止。 可选的尾随 s 指定该模式适用于符号链接的值。 可选的尾随 p 指定在成功替换后原始路径名和新路径名应打印到标准错误。 可选的尾随 H、R 或 S 字符分别抑制硬链接目标、常规文件名或符号链接目标的替换。 可选的尾随 h、r 或 s 字符分别启用硬链接目标、常规文件名或符号链接目标的替换。默认值为 hrs ,它将替换应用于所有名称。 特别是,从来没有必要指定 h、r 或 s。
-``-safe-writes
(仅限 x 模式)以原子方式提取文件。 默认情况下, tar 取消与提取文件同名的原始文件(如果存在)的链接,然后立即以相同的名称创建它并写入它。 在短时间内,尝试访问该文件的应用程序可能找不到它,或者看到不完整的结果。 如果启用了 -``-safe-writes , tar 首先创建一个唯一的临时文件,然后将新内容写入临时文件,最后使用 rename(2) 以原子方式将临时文件重命名为其最终名称。 这保证了访问文件的应用程序将始终看到旧内容或新内容。
-``-same-owner
(仅限 x 模式)提取所有者和组 ID。 这与 -``-no-same-owner 和 tar 以 root 身份运行时的默认行为相反。
-``-strip-components count
删除指定数量的前导路径元素。 元素较少的路径名将被静默跳过。 请注意,在检查包含/排除模式之后但在安全检查之前编辑路径名。
filename, -``-files-from filename
在 x 或 t 模式下, tar 将读取要从 filename 中提取的名称列表。 在 c 模式下, tar 将从 filename 中读取要归档的名称。 单独一行上的特殊名称 “-C” 将导致当前目录更改为下一行指定的目录。 除非指定了 -``-null ,否则名称由换行符终止。 请注意, -``-null 还会禁用对包含 “-C” 的行的特殊处理。 注意:如果您使用 find(1) 生成文件列表,您可能还想使用 -n 。
-``-totals
(仅限 c、r、u 模式)归档所有文件后,将摘要打印到 stderr。
, -``-unlink, - -unlink-first
(仅限 x 模式)在创建文件之前取消链接文件。 如果大多数文件已经存在,这可能是一个较小的性能优化,但如果大多数文件不存在,则可能会使事情变慢。 此标志还会导致 tar- 删除干预目录符号链接,而不是报告错误。 有关更多详细信息,请参阅下面的安全部分。
-``-uid id
使用提供的用户 ID 号并忽略存档中的用户名。 在创建时,如果没有同时指定 -``-uname ,则用户名将设置为与用户 ID 匹配。
-``-uname name
使用提供的用户名。 提取时,这会覆盖存档中的用户名;如果系统上不存在提供的用户名,它将被忽略,而使用用户 ID(来自存档或 - -uid 选项)。 创建时,这将设置将存储在存档中的用户名;该名称未针对系统用户数据库进行验证。
-``-use-compress-program program
通过 program 管道输入(在 x 或 t 模式下)或输出(在 c 模式下),而不是使用内置的压缩支持。
, -``-verbose
产生详细的输出。 在创建和提取模式下, tar 将列出从存档读取或写入存档的每个文件名。 在列表模式下, tar 将产生类似于 ls(1) 的输出。 额外的 -v 选项还将在创建和提取模式下提供类似 ls 的详细信息。
-``-version
打印 tar 和 libarchive, 的版本,然后退出。
, -``-confirmation, -``-interactive
要求对每项操作进行确认。
filename, -``-exclude-from filename
从指定文件中读取排除模式列表。 有关排除处理的更多信息,请参见 -``-exclude 。
-``-xattrs
(仅限 c、r、u、x 模式)存档或提取扩展文件属性。 这与 -``-no-xattrs 和 c、r 和 u 模式下的默认行为相反,或者如果 tar 以 root 身份在 x 模式下运行。
(仅限 c 模式)使用 bzip2(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 bzip2 压缩。
, -``-compress, -``-uncompress
(仅限 c 模式)使用 compress(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别压缩压缩。
, -``-gunzip, - -gzip
(仅限 c 模式)使用 gzip(1) 压缩生成的存档。 在提取或列表模式下,此选项将被忽略。 请注意,此 tar 实现在读取档案时会自动识别 gzip 压缩。
以下环境变量会影响 tar 的执行:
格式阅读器和压缩阅读器的默认选项。 -``-options 选项会覆盖此选项。
格式编写器和压缩编写器的默认选项。 -``-options 选项会覆盖此选项。
要使用的语言环境。 有关详细信息,请参阅 environ(7) 。
默认设备。 -f 选项会覆盖它。 有关详细信息,请参阅上面的 -f 选项的说明。
显示日期时使用的时区。 有关详细信息,请参阅 environ(7) 。
The tar utility exits 0 on success, and >0 if an error occurs.
下面创建一个名为 file.tar.gz 的新存档,其中包含两个文件 source.c 和 source.h:
`tar` `-czf` file.tar.gz source.c source.h
要查看此存档的详细目录:
`tar` `-tvf` file.tar.gz
要从默认磁带驱动器上的存档中提取所有条目:
`tar` `-x`
要检查 ISO 9660 cdrom 映像的内容:
`tar` `-tf` image.iso
要移动文件层次结构,请调用 tar 作为
`tar` `-cf` - `-C` srcdir . | `tar` `-xpf` - `-C` destdir
或更传统的
cd srcdir ; `tar` `-cf` - . | (cd destdir ; `tar` `-xpf` -)
在创建模式下,要归档的文件和目录的列表还可以包括 -Cfoo/baz 形式的目录更改指令和 @archive-file 形式的归档包含。例如,命令行
`tar` `-c` `-f` new.tar foo1 `@`old.tgz `-C`/tmp foo2
将创建一个新的存档 new.tar 。 tar 将从当前目录读取文件 foo1 并将其添加到输出存档中。 然后它将从 old.tgz 中读取每个条目并将这些条目添加到输出存档中。 最后,它将切换到 /tmp 目录并将 foo2- 添加到输出存档中。
mtree(5) 格式的输入文件可用于创建具有与磁盘上现有数据不同的任意所有权、权限或名称的输出存档:
$ cat input.mtree #mtree usr/bin uid=0 gid=0 mode=0755 type=dir usr/bin/ls uid=0 gid=0 mode=0755 type=file content=myls $ tar -cvf output.tar @input.mtree
-``-newer 和 -``-newer-mtime 开关接受各种常见的日期和时间规范,包括 “12 Mar 2005 7:14:29pm”, “2005-03-12 19:14”, “5 minutes ago” 和 “19:14 PST May 1” 。
-``-options 参数可用于控制归档生成或读取的各种细节。 例如,您可以生成仅包含 type, time 和 uid 关键字的 mtree 输出:
`tar` `-cf` file.tar `-``-format=mtree` `-``-options='!all,type,time,uid'` dir
或者您可以设置 gzip 或 xz 压缩使用的压缩级别:
`tar` `-czf` file.tar `-``-options='compression-level=9'`.
有关更多详细信息,请参阅 archive_read(3) 和 archive_write(3) 中描述的 archive_read_set_options() 和 archive_write_set_options() API 调用的说明。
支持捆绑参数格式以与历史实现兼容。 它由一个初始单词(没有前导 - 字符)组成,其中每个字符表示一个选项。 参数作为单独的词跟随。 参数的顺序必须与捆绑命令字中相应字符的顺序相匹配。例如,
`tar` `tbf 32` file.tar
指定三个标志 t 、 b 和 f 。 b 和 f 标志都需要参数,因此命令行上必须有两个附加项。 32 是 b 标志的参数, file.tar 是 f 标志的参数。
模式选项 c、r、t、u 和 x 以及选项 b、f、l、m、o、v 和 w 符合 SUSv2。
为了获得最大的可移植性,调用 tar 的脚本应使用上述捆绑参数格式,应将自身限制为 c 、 t 和 x 模式以及 b 、 f 、 m 、 v 和 w 选项。
提供了额外的长选项以提高与其他 tar 实现的兼容性。
某些安全问题对于许多归档程序都很常见,包括 tar 。 特别是,精心制作的存档可以请求将文件 tar 解压缩到目标目录之外的位置。 这可能会导致不知情的用户覆盖他们不打算覆盖的文件。 如果超级用户正在提取存档,则系统上的任何文件都可能被覆盖。 这可以通过三种方式发生。 尽管 tar 具有针对每一个的保护机制,但精明的用户应该意识到其中的含义:
存档条目可以有绝对路径名。 默认情况下, tar 在恢复文件名之前会从文件名中删除前导 / 字符以防止出现此问题。
存档条目可以具有包含 .. 组件的路径名。 默认情况下, tar 不会提取路径名中包含 .. 组件的文件。 存档条目可以利用符号链接将文件恢复到其他目录。
存档可以将符号链接恢复到另一个目录,然后使用该链接将文件恢复到该目录。 为了防止这种情况, tar 检查每个提取的路径中的符号链接。 如果最终路径元素是符号链接,它将被删除并替换为存档条目。 如果指定了 -U
为了保护自己,您应该警惕来自不受信任来源的任何档案。 您应该检查存档的内容
`tar` `-tf` filename
提取前。 您应该使用 -k 选项来确保 tar 不会覆盖任何现有文件或使用 -U 选项来删除任何预先存在的文件。 在以超级用户权限运行时,您通常不应提取档案。 请注意, tar 的 -P 选项会禁用上述安全检查,并允许您在提取存档的同时保留任何绝对路径名、 .. 组件或指向其他目录的符号链接。
bzip2(1), compress(1), cpio(1), gzip(1), mt(1), pax(1), shar(1), xz(1), libarchive(3), libarchive-formats(5), tar(5)
tar 命令没有当前的 POSIX 标准;它出现在 ISO/IEC 9945-1:1996 (“POSIX.1”) 中,但从 IEEE Std 1003.1-2001 (“POSIX.1”) 中删除。 此实现支持的选项是通过调查许多现有的 tar 实现以及 tar 的旧 POSIX 规范和 pax 的当前 POSIX 规范来开发的。
IEEE Std 1003.1-2001 (“POSIX.1”) 为 pax 命令定义了ustar 和 pax 交换文件格式。
tar 命令出现在 1979 年 1 月发布的第七版 Unix 中。 还有许多其他实现,其中许多扩展了文件格式。 John Gilmore 的 pdtar 公共域实现(大约在 1987 年 11 月)非常有影响力,并形成了 GNU tar 的基础。 从 FreeBSD 1.0 开始,GNU tar 作为标准系统 tar 包含在 FreeBSD 中。
这是基于 libarchive(3) 库的完整重新实现。 它于 2005 年 5 月首次与 FreeBSD 5.4 一起发布。
该程序遵循 ISO/IEC 9945-1:1996 (“POSIX.1”) 对 -l 选项的定义。 请注意,1.15 版之前的 GNU tar 将 -l 视为 -``-one-file-system 选项的同义词。
-C dir 选项可能与历史实现不同。
所有存档输出都写入大小正确的块中,即使输出正在被压缩。 最后一个输出块是否填充到完整的块大小取决于格式和输出设备。 对于 tar 和 cpio 格式,如果输出正在写入标准输出或字符或块设备(如磁带驱动器),则将最后一个输出块填充到完整的块大小。 如果将输出写入常规文件,则不会填充最后一个块。 许多压缩器,包括 gzip(1) 和 bzip2(1) ,在解压缩由 tar 创建的档案时会抱怨空填充,尽管它们仍然可以正确解压。
压缩和解压是在内部实现的,所以生成的压缩输出之间可能存在微不足道的差异
`tar` `-czf` - file
以及由
`tar` `-cf` - file | `gzip`
默认应该是读取和写入归档到标准 I/O 路径,但传统(和 POSIX)另有规定。
r 和 u 模式要求存档未压缩并位于磁盘上的常规文件中。 可以使用带有 @archive-file 扩展名的 c 模式修改其他存档。
要归档名为 @foo 或 -foo 的文件,您必须分别将其指定为 ./@foo 或 ./-foo 。
在创建模式下,前导 ./ 总是被删除。 除非指定了 -P 选项,否则会去除前导 / 。
在创建和提取时需要更好地支持文件选择。
尚不支持多卷存档。
使用 @- 约定在不同的存档格式(例如 tar 和 cpio)之间进行转换可能会导致硬链接信息丢失。 (这是不同归档格式存储硬链接信息的方式不兼容的结果。)
January 31, 2020
FreeBSD 13.1-RELEASE
sha512sizetimeuiduname 。-U-Ptar%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
%.:@[{}aliasallocbgbindbindkeybreakbreakswbuiltinscasecdchdircommandcompletecontinuedefaultdirsdodoneechoechotcelifelseendendifendswesacevalexecexitexportfalsefcfgfiletestfiforforeachgetoptsglobgotohashhashstathistoryhupifjobidjobskilllimitlocallogloginlogoutls-Fnicenohupnotifyonintrpopdprintenvprintfpushdpwdreadreadonlyrehashrepeatreturnschedsetsetenvsettcsettysetvarshiftsourcestopsuspendswitchtelltctestthentimetimestraptruetypeulimitumaskunaliasuncompleteunhashunlimitunsetunsetenvuntilwaitwherewhichwhileshell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 <[email protected] 。>
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
BUILTIN(1)
BUILTIN(1)
FreeBSD General Commands Manual
BUILTIN(1)
内置, !, %, ., :, @, [, {, }, alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, printf, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while —
shell 内置命令
请参阅相应 shell 手册页中的内置命令描述。
Shell 内置命令是可以在运行的 shell 进程中执行的命令。请注意,在 csh(1) 内置命令的情况下,如果该命令作为管道中除最后一个以外的任何组件出现,则该命令将在子 shell 中执行。
如果指定给 shell 的命令包含斜杠 ‘/’, 则 shell 将不会执行内置命令,即使指定命令的最后一个组件与内置命令的名称匹配。因此,虽然指定 “echo” 会导致在支持 echo 内置命令的 shell 下执行内置命令,但指定 “/bin/echo” 或 “./echo” 不会。
虽然某些内置命令可能存在于多个 shell 中,但在支持它们的每个 shell 下它们的操作可能不同。下表列出了 shell 内置命令、支持它们的标准 shell 以及它们是否作为独立实用程序存在。
此处仅列出 csh(1) 和 sh(1) shell 的内置命令。有关其内置命令的操作的详细信息,请参阅 shell 的手册页。请注意,至少 sh(1) 手册页将其中一些命令称为 “内置命令” ,其中一些称为 “保留字 。” 其他 shell 的用户可能需要查阅 info(1) 页面或其他文档来源。
在 External 下标记为 “No**” 的命令确实存在于外部,但使用同名的内置命令作为脚本实现。
Command
External
csh(1)
sh(1)
No
No
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No**
Yes
Yes
No
Yes
No
No**
Yes
Yes
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No**
Yes
Yes
No
Yes
Yes
No**
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
No
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
Yes
Yes
No
Yes
No
No
No
Yes
No
No
Yes
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No**
No
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
No
Yes
No**
Yes
Yes
Yes
Yes
Yes
No
Yes
No
No
No
Yes
No
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No
Yes
No**
No
Yes
No
No
Yes
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
No
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
No
Yes
No
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
No
Yes
No
Yes
No
No
Yes
Yes
Yes
No
No
No
Yes
No
No
Yes
Yes
No
Yes
No**
No
Yes
No**
No
Yes
No**
Yes
Yes
No**
Yes
Yes
No
Yes
No
No
Yes
No
No
Yes
No
No
Yes
Yes
No
Yes
No
No
No
Yes
No**
Yes
Yes
No
Yes
No
Yes
Yes
No
No
Yes
Yes
csh(1), echo(1), false(1), info(1), kill(1), login(1), nice(1), nohup(1), printenv(1), printf(1), pwd(1), sh(1), test(1), time(1), true(1), which(1)
内置 手册页首次出现在 FreeBSD 3.4 中。
本手册页由 Sheldon Hearn 编写 < >
December 21, 2010
FreeBSD 13.1-RELEASE
DIALOG(1)
DIALOG(1)
FreeBSD General Commands Manual
DIALOG(1)
dialog - 显示来自 shell 脚本的对话框
dialog --clear- dialog --create-rc file- dialog --print-maxsize- dialog common-options box-options
Dialog 是一个程序,可让您使用 shell 脚本中的对话框提出各种问题或显示消息。实现了这些类型的对话框(尽管并非所有都必须编译成 dialog):
buildlist, calendar, checklist, dselect, editbox, form, fselect, gauge, infobox, inputbox, inputmenu, menu, mixedform, mixedgauge, msgbox (message), passwordbox, passwordform, pause, prgbox, programbox, progressbox, radiolist, rangebox, tailbox, tailboxbg, textbox, timebox, treeview 和 yesno (yes/no)。
您可以将多个对话框放入脚本中:
使用 "--and-widget" 标记强制 dialog 进入下一个对话框,除非您已按 ESC 取消,或者
只需为下一个对话框添加标记,形成一个链。当 Dialog 的返回码不为零时,对话框停止链接,例如,Cancel 或 No(请参阅 DIAGNOSTICS)。
一些小部件,例如清单,会将文本写入对话框的输出。通常这是标准错误,但有一些选项可以改变它: "--output-fd"、 "--stderr" 和 "--stdout"。 如果按下取消按钮(或 ESC),则不会写入任何文本;在这种情况下, dialog 会立即退出。
所有选项都以 "--" 开头(两个 ASCII 连字符,为了那些使用具有混乱语言环境支持的系统的人的利益)。
"--" 本身用作转义,即命令行上的下一个标记不被视为选项。
dialog --title -- --Not an option
"--args" 选项告诉 dialog 列出标准错误的命令行参数。这在使用 "--" 和 "--file" 调试复杂脚本时很有用,因为命令行可能会随着它们的扩展而被重写。
"--file" 选项告诉对 dialog 从命名为它的值的文件中读取参数。
dialog --file parameterfile
不在双引号内的空格将被丢弃(使用反斜杠引用单个字符)。结果被插入命令行,替换 "--file" 及其选项值。命令行的解释从那时开始。如果 parameterfile 以 "&" 开头, dialog 将以下文本解释为文件描述符编号而不是文件名。
大多数小部件接受 height 和 width 参数,可用于自动调整小部件的大小以适应多行消息 prompt 值:
如果参数为负, dialog 使用屏幕的大小。
如果参数为零,则 dialog 使用小部件的最小尺寸来显示 prompt 和数据。
否则, dialog 使用小部件的给定大小。
大多数常用选项在处理每个小部件之前都会被重置。
--ascii-lines
与其在框周围绘制图形线,不如在同一位置绘制 ASCII "+" 和 "-" i。参见 "--no-lines"。
--aspect ratio
这使您可以在使用自动调整大小时对框尺寸进行一些控制(将高度和宽度指定为 0)。它代表宽度/高度。默认值为 9,这意味着每 1 行高 9 个字符宽。
--backtitle backtitle
指定要在屏幕顶部的背景上显示的 backtitle 。
--begin y x
指定对话框左上角在屏幕上的位置。
--cancel-label string
覆盖用于 “Cancel” 按钮的标签。
--clear
清除小部件屏幕,仅保留 screen_color 背景。当您将小部件与 "--and-widget" 结合使用时,可以使用它来擦除屏幕上前一个小部件的内容,这样就不会在下一个小部件的内容下看到它。将此理解为 "--keep-window" 的补充。要比较效果,请使用这些:
所有三个小部件都可见,层叠效果,按 1、2、3 排序:
dialog \ --begin 2 2 --yesno "" 0 0 \ --and-widget --begin 4 4 --yesno "" 0 0 \ --and-widget --begin 6 6 --yesno "" 0 0
只有最后一个小部件是可见的:
dialog \ --clear --begin 2 2 --yesno "" 0 0 \ --and-widget --clear --begin 4 4 --yesno "" 0 0 \ --and-widget --begin 6 6 --yesno "" 0 0
所有三个小部件都可见,楼梯效果,顺序 3、2、1:
dialog \ --keep-window --begin 2 2 --yesno "" 0 0 \ --and-widget --keep-window --begin 4 4 --yesno "" 0 0 \ --and-widget --begin 6 6 --yesno "" 0 0
第一个和第三个小部件可见,楼梯效果,顺序 3,1:
dialog \ --keep-window --begin 2 2 --yesno "" 0 0 \ --and-widget --clear --begin 4 4 --yesno "" 0 0 \ --and-widget --begin 6 6 --yesno "" 0 0
请注意,如果您想在对话框程序退出后恢复原始控制台颜色并将光标返回原处,请使用 clear (1) 命令。
--colors
通过以下字符解释对话框文本中嵌入的 "\Z" 序列,它告诉 dialog 设置颜色或视频属性:
0 到 7 是 curses 中使用的 ANSI 颜色编号:分别为黑色、红色、绿色、黄色、蓝色、洋红色、青色和白色。
粗体由“b”设置,由“B”重置。
反向由'r'设置,由'R'重置。
下划线由'u'设置,由'U'重置。
--column-separator string
告诉 dialog 在出现给定字符串时拆分单选框/复选框和菜单的数据,并将拆分的数据对齐到列中。
--cr-wrap
将对话框文本中嵌入的换行符解释为屏幕上的换行符。否则, dialog 只会在需要适合文本框的地方换行。
即使您可以使用它来控制换行符, Dialog 仍然会换行任何对于框的宽度来说太长的行。如果没有 cr-wrap,您的文本布局可能会被格式化为在脚本的源代码中看起来不错,而不会影响它在对话框中的外观。
cr-wrap 功能在以下条件下实施:
字符串包含 “\n” 并且未使用 --no-nl-expand 选项,或者
使用 --trim 选项。
有关详细信息,请参阅 Whitespace 选项。
--create-rc file
当 dialog 支持运行时配置时,这可用于将示例配置文件转储到 file 指定的文件中。
--date-format format
如果主机提供 strftime, 则此选项允许您为 --calendar 小部件指定打印日期的格式。一天中的时间(小时、分钟、秒)是当前本地时间。
--defaultno
将 yes/no 框的默认值设为 No 。 同样,将提供 “OK” 和 “Cancel” 的小部件的默认按钮设为 Cancel。 如果给定了 "--nocancel" 或 "--visit-items" ,这些选项将覆盖此选项,使默认按钮始终为 “Yes” (内部与 “OK” 相同)。
--default-button string
在小部件中设置默认(预选)按钮。通过预先选择一个按钮,脚本使用户可以简单地按 Enter 以通过最少的交互来继续对话框。
选项的值是按钮的名称: ok, yes, cancel, no, help 或 extra。
通常每个小部件中的第一个按钮是默认按钮。显示的第一个按钮由小部件与 "--nook" 和 "--nocancel " 选项一起确定。如果未给出此选项,则没有分配默认按钮。
--default-item string
在清单、表单或菜单框中设置默认项目。通常,框中的第一项是默认值。
--exit-label string
覆盖用于 “EXIT” 按钮的标签。
--extra-button
在 “OK” 和 “Cancel” 按钮之间显示一个额外的按钮。
--extra-label string
覆盖用于 “Extra” 按钮的标签。注意:对于输入菜单小部件,默认为 “Rename”。
--help
将帮助消息打印到标准输出并退出。如果没有给出选项,或者给出了无法识别的选项,也会打印帮助消息。
--help-button
在 “OK” 和 “Cancel” 按钮之后显示帮助按钮,例如,在清单、单选列表和菜单框以及其他具有 “OK” 按钮的小部件中,无论是否使用 “Cancel” 按钮。
退出时,返回状态将指示已按下帮助按钮。 Dialog 还会在令牌 “HELP” 之后向其输出写入一条消息:
如果还给出了 "--item-help" ,则将写入项目帮助文本。
否则,将写入项目的标签(第一个字段)。
您可以使用 --help-tags 选项和/或设置 DIALOG_ITEM_HELP 环境变量来修改这些消息和退出状态。
--help-label string
覆盖用于 “Help” 按钮的标签。
--help-status
如果选择了帮助按钮,则在项目帮助 “HELP” 信息之后写入清单、单选列表或表单信息。这可用于在处理帮助请求后重建检查表的状态。
--help-tags
修改退出时为 --help-button 编写的消息,使它们始终只是项目的标签。这不会影响退出状态代码。
--hfile filename
当用户按下 F1 时,使用文本框显示给定的文件。
--hline string
显示在小部件底部居中的给定字符串。
--ignore
忽略 dialog 无法识别的选项。无论如何都会忽略一些众所周知的,例如 "--icon" ,但这是与其他实现兼容的更好选择。
--input-fd fd
从给定的文件描述符中读取键盘输入。大多数 dialog 脚本从标准输入读取,但仪表小部件读取管道(始终是标准输入)。当 dialog 尝试重新打开终端时,某些配置无法正常工作。如果您的脚本必须在该类型的环境中工作,请使用此选项(适当地处理文件描述符)。
--insecure
通过为每个字符回显星号,使密码小部件更友好但更不安全。
--iso-week
根据 ISO-8601 设置 "--calendar" 选项中显示的周数的起始点,从第一周开始编号,包括一月的星期四。
--item-help
解释清单、单选清单和菜单框的标签数据,为当前选定的项目添加一个显示在屏幕底部的列。
--keep-tite
当使用 ncurses 构建时, dialog 通常会检查它是否在 xterm 中运行,并且在这种情况下会尝试抑制使其切换到备用屏幕的初始化字符串。在多次运行 dialog 的脚本中,在正常屏幕和备用屏幕之间切换会在视觉上分散注意力。使用此选项允许 dialog 使用这些初始化字符串。
--keep-window
通常,当 dialog 执行通过 "--and-widget" 连接的几个 tailboxbg 小部件时,它会通过在旧小部件上绘画来清除屏幕上的旧小部件。使用此选项来禁止重新绘制。
在退出时, dialog 会重新绘制所有标记为 "--keep-window" 的小部件,即使它们不是 tailboxbg 小部件。这会导致它们以相反的顺序重新绘制。有关示例,请参见 "--clear" 选项的讨论。
--last-key
在退出时,报告用户输入的最后一个键。这是 curses 键码,而不是符号或文字字符。脚本可以使用它来区分绑定到同一操作的两个键。
--max-input size
将输入字符串限制为给定大小。如果未指定,则限制为 2048。
--no-cancel
--nocancel
在清单、输入框和菜单框模式下抑制 “Cancel” 按钮。如果用户按下 ESC 键取消退出,脚本仍然可以测试。
--no-collapse
通常, dialog 将制表符转换为空格,并将多个空格减少为单个空格,用于显示在消息框等中的文本。使用此选项可禁用该功能。请注意, dialog 仍将换行文本,这取决于 "--cr-wrap" 和 "--trim" 选项。
The no-collapse 功能的实施取决于以下条件:
字符串包含 “\n” 并且未使用 --no-nl-expand 选项,或者
不使用 --trim 选项。
有关详细信息,请参阅 Whitespace 选项。
--no-items
一些小部件 (checklist, inputmenu, radiolist, menu) 显示一个包含两列( “tag” 和 “item”, 即 “description”)的列表。此选项告诉 dialog 读取较短的行,省略列表的 “item” 部分。这有时很有用,例如,如果标签提供了足够的信息。
另请参阅 --no-tags 。如果两个选项都给出,则忽略此选项。
--no-kill
告诉 dialog 将 tailboxbg 框放在后台,将其进程 ID 打印到 dialog 的输出。SIGHUP 对后台进程禁用。
--no-label string
覆盖用于 “No” 按钮的标签。
--no-lines
与其在盒子周围画线,不如在同一个地方画空间。另见 "--ascii-lines" 。
--no-mouse
不要启用鼠标。
--no-nl-expand
不要将 message/prompt 文本的 "\n" 子字符串转换为文字换行符。
仅当字符串包含 “\n” 时才使用 no-nl-expand 功能,以便有一些东西可以转换。
有关详细信息,请参阅 Whitespace 选项。
--no-ok
--nook
在清单、输入框和菜单框模式下抑制 “OK” 按钮。脚本仍然可以测试用户是否按下 “Enter” 键来接受数据。
--no-shadow
抑制将在每个对话框的右侧和底部绘制的阴影。
--no-tags
一些小部件(清单、输入菜单、单选列表、菜单)显示一个包含两列(“ “tag” 和 “description”)的列表。该标签对脚本很有用,但可能对用户没有帮助。 --no-tags 选项(来自 Xdialog)可用于抑制显示中的标签列。与 --no-items 选项不同,这不会影响从脚本中读取的数据。
Xdialog 不显示类似的构建列表和树视图小部件的标签列; dialog 也是如此。
通常, dialog 允许您通过将单个字符与标记的第一个字符匹配来快速移动到显示列表中的条目。 当给出 --no-tags 选项时, dialog 与描述的第一个字符匹配。 在任何一种情况下,可匹配的字符都会突出显示。
--ok-label string
覆盖用于 “OK” 按钮的标签。
--output-fd fd
直接输出到给定的文件描述符。 大多数 dialog 本都会写入标准错误,但也可能会在那里写入错误消息,具体取决于您的脚本。
--separator string
--output-separator string
指定一个字符串,它将 dialog 输出上的输出与清单分开,而不是换行符(用于 --separate-output )或空格。 这适用于通常使用换行符的其他小部件,例如表单和编辑框。
--print-maxsize
将对话框的最大尺寸(即屏幕尺寸)打印到 dialog 的输出。 这可以单独使用,没有其他选项。
--print-size
初始化对话框时,将每个对话框的大小打印到 dialog 的输出。
--print-text-only string [ height [ width ] ]
打印字符串,因为它将被包装在 dialog 输出的消息框中。
因为可选的 height 和 width 默认为零,如果省略它们, dialog 会根据屏幕尺寸自动调整大小。
--print-text-size string [ height [ width ] ]
将字符串的大小打印到 dialog 的输出中,就像它包装在消息框中一样
height width
因为可选的 height 和 width 参数默认为零,如果省略它们, dialog 会根据屏幕尺寸自动调整大小。
--print-version
将 dialog 的版本打印到 dialog 的输出。 这可以单独使用,没有其他选项。 它不会导致 dialog 自行退出。
--quoted
通常 dialog 引用检查表返回的字符串以及项目帮助文本。 使用此选项引用所有字符串结果。
--reorder
默认情况下,构建列表小部件对输出(右)列表使用与输入(左)相同的顺序。 使用此选项告诉 dialog 使用用户将选择添加到输出列表的顺序。
--scrollbar
对于拥有一组可滚动数据的小部件,在其右边距上绘制一个滚动条。 这不会响应鼠标。
--separate-output
对于某些小部件(buildlist、checklist、treeview),一次输出一行,不带引号。这有利于另一个程序的解析。
--separate-widget string
指定一个字符串,它将对话框的输出与每个小部件分开。这用于简化解析具有多个小部件的对话框的结果。如果未给出此选项,则默认分隔符字符串是制表符。
--shadow
在每个对话框的右侧和底部绘制阴影。
--single-quoted
根据需要使用单引号(如果不需要,则不要使用引号)作为清单和项目帮助文本的输出。如果未设置此选项,则 dialog 在每个项目周围使用双引号。 在任何一种情况下, dialog 都会添加反斜杠以使输出在 shell 脚本中有用。
--size-err
在尝试使用之前检查对话框的结果大小,如果结果大小大于屏幕,则打印结果大小。(此选项已过时,因为检查了所有新窗口调用)。
--sleep secs
处理对话框后休眠(延迟)给定的秒数。
--stderr
直接输出到标准错误。这是默认设置,因为 curses 通常会将屏幕更新写入标准输出。
--stdout
直接输出到标准输出。提供此选项是为了与 Xdialog 兼容,但不建议在可移植脚本中使用它,因为 curses 通常会将其屏幕更新写入标准输出。如果您使用此选项, dialog 会尝试重新打开终端,以便它可以写入显示器。 根据平台和您的环境,这可能会失败。
--tab-correct
将每个制表符转换为一个或多个空格(对于 textbox 小部件;否则转换为单个空格)。 否则,选项卡将根据 curses 库的解释呈现。 --no-collapse 选项禁用选项卡扩展。
--tab-len n
如果给出 "--tab-correct" 选项,则指定制表符占用的空格数。 默认值为 8。此选项仅对 textbox 小部件有效。
--time-format format
如果主机提供 strftime, 则此选项允许您指定为 --timebox 小部件打印的时间格式。 在这种情况下,日、月、年值是针对当前本地时间的。
--timeout secs
如果在给定的秒数内没有用户响应,则超时(退出并显示错误代码)。 忽略零秒超时。
"--pause" 小部件忽略此选项。如果后台 "--tailboxbg" 选项用于设置多个并发小部件,它也会被覆盖。
--title title
指定要在对话框顶部显示的 title 字符串。
--trace filename
将命令行参数、击键和其他信息记录到给定文件中。 如果 dialog 读取配置文件,它也会被记录下来。记录到 gauge 小部件的管道输入。使用 control/T 记录当前对话窗口的图片。
dialog 程序专门处理一些命令行参数,并在处理它们时将它们从参数列表中删除。例如,如果第一个选项是 --trace, 则在 dialog 初始化显示之前对其进行处理(并删除)。
--week-start day
设置一周的开始日期,在 "--calendar" 选项中使用。 day 参数可以是
一个数字(0 到 6,周日到周六,使用 POSIX)或
特殊值 “locale” 这适用于使用 glibc 的系统,为 locale 命令提供扩展,即 first_weekday 值)。
与 calendar 小部件中显示的星期几的缩写之一匹配的字符串,例如, “Mo” 表示 “Monday”。
--trim
消除前导空格,修剪文字换行符和消息文本中的重复空格。
trim 功能在以下条件下实施:
字符串不包含 “\n” 或
使用 --no-nl-expand 选项。
有关详细信息,请参阅 Whitespace 选项。
另请参阅 "--cr-wrap" 和 "--no-collapse" 选项。
--version
将 dialog 的版本打印到标准输出,然后退出。另见 "--print-version"。
--visit-items
修改 checklist、radiolist、menubox 和 inputmenu 的 tab-traversal 以包含项目列表作为状态之一。这作为视觉辅助很有用,即光标位置可以帮助某些用户。
给出此选项时,光标最初放置在列表上。缩写(标签的第一个字母)适用于列表项。如果您选择按钮行,则缩写适用于按钮。
--yes-label string
覆盖用于 “Yes” 按钮的标签。
所有对话框都至少有三个参数:
text
方框的标题或内容。
height
对话框的高度。
width
对话框的宽度。
其他参数取决于盒子类型。
--buildlist text height width list-height [ tag item status ] ...
buildlist 对话框并排显示两个列表。左侧的列表显示未选择的项目。右侧的列表显示所选项目。选择或取消选择项目时,它们会在列表之间移动。
使用回车或 “OK” 按钮接受所选窗口中的当前值并退出。 使用所选窗口中显示的顺序写入结果。
每个条目的初始开/关状态由 status 指定。
该对话框的行为类似于 menu ,使用 --visit-items 来控制是否允许光标直接访问列表。
如果 --visit-items 没有给出,tab-traversal 使用两种状态(OK/Cancel)。
如果给出 --visit-items ,则tab-traversal 使用四种状态(左/右/确定/取消)。
无论是否给出 --visit-items ,都可以使用默认的 "^" (左列)和 "$" (右列)键在两个列表之间移动突出显示。
退出时,打开的那些条目的 tag 字符串列表将打印在 dialog 的输出中。
如果未给出 "--separate-output" 选项,则将根据需要引用字符串,以使脚本可以简单地分隔它们。默认情况下,这使用双引号。请参阅修改引用行为的 "--single-quoted" 选项。
--calendar text height width day month year
calendar 框在可单独调节的窗口中显示月、日和年。如果日、月或年的值缺失或为负,则使用当前日期的对应值。您可以使用左箭头、上箭头、右箭头和下箭头来增加或减少其中的任何一个。使用 vi 风格的 h、j、k 和 l 来移动一个月中的天数数组。使用 tab 或 backtab 在窗口之间移动。如果年份为零,则使用当前日期作为初始值。
退出时,日期以日/月/年的形式打印。 可以使用 --date-format 选项覆盖格式。
--checklist text height width list-height [ tag item status ] ...
checklist 框类似于 menu 框。有多个条目以菜单的形式呈现。另一个区别是您可以通过将其 status 设置为 on 来指示当前选择了哪个条目。用户可以打开或关闭每个条目,而不是从条目中选择一个条目。每个条目的初始开/关状态由 status 指定。
退出时,打开的那些条目的 tag 字符串列表将打印在 dialog 的输出中。
如果未给出 "--separate-output" 选项,则将根据需要引用字符串,以使脚本可以简单地分隔它们。默认情况下,这使用双引号。 请参阅修改引用行为的 "--single-quoted" 选项。
--dselect filepath height width
目录选择对话框显示一个文本输入窗口,您可以在其中键入一个目录,在该窗口上方还有一个带有目录名称的窗口。
这里的 filepath 可以是一个文件路径,在这种情况下,目录窗口将显示路径的内容,而文本输入窗口将包含预选的目录。
使用制表键或箭头键在窗口之间移动。在目录窗口中,使用向上/向下箭头键滚动当前选择。使用空格键将当前选择复制到文本输入窗口中。
键入任何可打印字符会将焦点切换到文本输入窗口,输入该字符并将目录窗口滚动到最接近的匹配项。
使用回车或 “OK” 按钮接受文本输入窗口中的当前值并退出。
退出时,文本输入窗口的内容被写入 dialog 的输出。
--editbox filepath height width
编辑框对话框显示文件的副本。您可以使用 backspace、 delete 和光标键对其进行编辑,以纠正打字错误。它还可以识别 pageup/pagedown。与 --inputbox 不同,您必须按 Tab 键选择 “OK” 或 “Cancel” 按钮才能关闭对话框。在框中按 “Enter” 键将拆分相应的行。
退出时,编辑窗口的内容被写入 dialog 的输出。
--form text height width formheight [ label y x item y x flen ilen ] ...
form 对话框显示由标签和字段组成的表单,这些标签和字段通过脚本中给定的坐标定位在可滚动窗口上。字段长度 flen 和输入长度 ilen 表示字段可以有多长。前者定义了为选定字段显示的长度,而后者定义了在该字段中输入的数据的允许长度。
如果 flen 为零,则不能更改相应的字段。字段的内容决定了显示的长度。
如果 flen 为负数,则对应的字段不能改变,取 flen 的负值作为显示长度。
如果 ilen 为零,则设置为 flen。
使用向上/向下箭头(或 control/N、control/P)在字段之间移动。使用选项卡在窗口之间移动。
退出时,表单字段的内容被写入 dialog 的输出,每个字段由换行符分隔。 用于填充不可编辑字段( flen 为零或负数)的文本不会被写出。
--fselect filepath height width
The fselect (文件选择)对话框显示一个文本输入窗口,您可以在其中键入文件名(或目录),在这两个窗口上方有目录名和文件名。
这里的 filepath 可以是一个文件路径,在这种情况下,文件和目录窗口将显示路径的内容,而文本输入窗口将包含预选的文件名。
使用制表键或箭头键在窗口之间移动。在目录或文件名窗口中,使用向上/向下箭头键滚动当前选择。使用空格键将当前选择复制到文本输入窗口中。
键入任何可打印字符会将焦点切换到文本输入窗口,输入该字符并将目录和文件名窗口滚动到最接近的匹配。
键入空格字符会强制 dialog 完成当前名称(直到可能与多个条目匹配)。
使用回车或 “OK” 按钮接受文本输入窗口中的当前值并退出。
退出时,文本输入窗口的内容被写入 dialog 的输出。
--gauge text height width [percent]
gauge 框在框的底部显示一个仪表。仪表显示百分比。从标准输入读取新的百分比,每行一个整数。仪表会更新以反映每个新的百分比。如果标准输入读取字符串 “XXX” ,那么后面的第一行作为一个整数百分比,然后到另一个 “XXX” 的后续行用于新的提示。当标准输入达到 EOF 时,仪表退出。
percent 值表示仪表中显示的初始百分比。如果未指定,则为零。
退出时,不会将任何文本写 dialog 的输出。 小部件不接受任何输入,因此退出状态始终为 OK。
--infobox text height width
info 框基本上是一个 message 框。 但是,在这种情况下, dialog 将在向用户显示消息后立即退出。 dialog 退出时屏幕不会被清除,因此消息将一直保留在屏幕上,直到稍后调用 shell 脚本将其清除。当您想要通知用户正在进行的某些操作可能需要一些时间才能完成时,这很有用。
退出时,不会将任何文本写入 dialog 的输出。返回 OK 退出状态。
--inputbox text height width [init]
当您要提出要求用户输入字符串作为答案的问题时, input 很有用。 如果提供了 init,则它用于初始化输入字符串。 输入字符串时,可以使用 backspace、 delete 和光标键来纠正输入错误。如果输入字符串的长度超出了对话框可以容纳的长度,则输入字段将被滚动。
退出时,输入字符串将打印在 dialog 的输出中。
--inputmenu text height width menu-height [ tag item ] ...
inputmenu 框与普通 menu 框非常相似。它们之间只有几个区别:
条目不会自动居中,而是会进行左调整。
一个额外的按钮(称为 Rename) 暗示在按下时重命名当前项目。
可以通过按 Rename 按钮来重命名当前条目。然后 dialog 将在 dialog 的输出中写入以下内容。
RENAMED
--menu text height width menu-height [ tag item ] ...
顾名思义, menu 框就是一个对话框,可以用来以菜单的形式呈现一个选项列表供用户选择。 选项按给定顺序显示。每个菜单条目由一个 tag 字符串和一个 item 字符串组成。 该 tag 为条目提供了一个名称,以将其与菜单中的其他条目区分开来。该 item 是该条目所代表的选项的简短描述。 用户可以通过按光标键、 tag 的第一个字母作为热键或数字键 1 到 9 在菜单条目之间移动。 菜单中一次显示 menu-height 条目,但如果条目多于该条目,菜单将滚动。
退出时,所选菜单条目的 tag 将打印在 dialog 的输出中。 如果给出 "--help-button" 选项,如果用户选择帮助按钮,将打印相应的帮助文本。
--mixedform text height width formheight [ label y x item y x flen ilen itype ] ...
mixedform 对话框显示一个由标签和字段组成的表单,很像 --form 对话框。它的不同之处在于在每个字段的描述中添加了一个字段类型参数。类型中的每个位表示字段的一个属性:
1
隐藏,例如密码字段。
2
只读,例如标签。
--mixedgauge text height width percent [ tag1 item1 ] ...
mixedgauge 框在框的底部显示一个仪表。仪表显示百分比。
它还在框的顶部显示 tag- 和 item-值的列表。 有关标签值,请参见 dialog(3) 。
text 显示为列表和仪表之间的标题。 percent 值表示仪表中显示的初始百分比。
没有像 --gauge 那样从标准输入读取数据。
退出时,不会将任何文本写入 dialog 的输出。小部件不接受任何输入,因此退出状态始终为 OK。
--msgbox text height width
message 框与 yes/no 框非常相似。 message 框和 yes/no 框之间的唯一区别是 message 框只有一个 OK 按钮。 您可以使用此对话框显示您喜欢的任何消息。阅读完消息后,用户可以按 ENTER 键,这样 dialog 就会退出,调用的 shell 脚本可以继续运行。
如果消息对于空间来说太大, dialog 可能允许您滚动它,前提是底层的 curses 实现足够强大。在这种情况下,百分比显示在小部件的底部。
退出时,不会将任何文本写入 dialog 的输出。仅提供 “OK” 按钮用于输入,但可能返回ESC退出状态。
--pause text height width seconds
pause 框在框的底部显示一个仪表。仪表指示距离暂停结束还剩多少秒。当达到超时或用户按下 OK 按钮(状态 OK)或用户按下 CANCEL 按钮或 Esc 键时,暂停退出。
--passwordbox text height width [init]
password 框类似于输入框,只是不显示用户输入的文本。这在提示输入密码或其他敏感信息时很有用。请注意,如果在 “init” 中传递了任何内容,它将在系统的进程表中对临时窥探者可见。此外,为用户提供他们看不到的默认密码也会让用户感到非常困惑。由于这些原因,强烈建议不要使用 “init” 。 如果您不关心密码,请参阅 "--insecure" 。
退出时,输入字符串将打印在对话框的输出中。
--passwordform text height width formheight [ label y x item y x flen ilen ] ...
这与 --form 相同,只是所有文本字段都被视为 password 小部件而不是 inputbox 小部件。
--prgbox text command height width
--prgbox command height width
prgbox 与 programbox 框非常相似。
此对话框用于显示指定为 prgbox 参数的命令的输出。
命令完成后,用户可以按 ENTER 键,这样 dialog 就会退出,调用的 shell 脚本可以继续运行。
如果给出三个参数,它会在标题下显示文本,从滚动文件的内容中划定。如果仅给出两个参数,则省略此文本。
--programbox text height width
--programbox height width
programbox 框与 progressbox 框非常相似。 program 框和 progress 框的唯一区别是 program 框显示一个 OK 按钮(但仅在命令完成后)。
此对话框用于显示命令的管道输出。命令完成后,用户可以按 ENTER 键,这样 dialog 就会退出,调用的 shell 脚本可以继续运行。
如果给出三个参数,它会在标题下显示文本,从滚动文件的内容中划定。 如果仅给出两个参数,则省略此文本。
--progressbox text height width
--progressbox height width
progressbox 框类似于 tailbox 框,不同之处在于
a) 而不是显示文件的内容,它显示命令的管道输出和
b) 到达文件末尾时将退出(没有 “OK” 按钮)。
如果给出三个参数,它会在标题下显示文本,从滚动文件的内容中划定。如果仅给出两个参数,则省略此文本。
--radiolist text height width list-height [ tag item status ] ...
radiolist 框类似于 menu 框。 唯一的区别是您可以通过将其 status 设置为 on 来指示当前选择了哪个条目。
退出时,所选项目的标签将写入 dialog 的输出。
--tailbox file height width
在对话框中显示文件中的文本,如 "tail -f" 命令。使用 vi 风格的“h”和“l”或箭头键向左/向右滚动。'0' 重置滚动。
退出时,不会将任何文本写入 dialog 的输出。 仅提供 “OK” 按钮用于输入,但可能返回ESC退出状态。
--rangebox text height width min-value max-value default-value
允许用户从一系列值中进行选择,例如,使用滑块。该对话框将当前值显示为条形(如仪表对话框)。制表符或箭头键在按钮和值之间移动光标。当光标位于该值上时,您可以通过以下方式对其进行编辑:
左/右光标移动以选择要修改的数字
+/-
将数字递增/递减一位的字符
0 到 9
将数字设置为给定值
在所有光标位置也可以识别一些键:
home/end
将值设置为其最大值或最小值
pageup/pagedown
增加值,使滑块移动一列
--tailboxbg file height width
在对话框中显示文件中的文本作为后台任务,如 "tail -f &" 命令。使用 vi 风格的“h”和“l”或箭头键向左/向右滚动。'0' 重置滚动。
Dialog 如果屏幕上同时存在其他小部件 (--and-widget) ,则 Dialog 会特别处理后台任务。 直到这些小部件关闭(例如, “OK”), dialog 将在同一进程中执行所有 tailboxbg 小部件,轮询更新。 您可以使用选项卡在屏幕上的小部件之间遍历,并单独关闭它们,例如,按 ENTER 。 关闭非 tailboxbg 小部件后, dialog 会将自身的副本分叉到后台,如果给出 "--no-kill" 选项,则打印其进程ID。
退出时,不会将任何文本写入 dialog 的输出。仅提供 “EXIT” 按钮用于输入,但可能返回ESC退出状态。
注意:旧版本的 dialog 立即分叉并尝试单独更新屏幕。除了不利于性能之外,它是行不通的。一些较旧的脚本可能无法与轮询方案一起正常工作。
--textbox file height width
text 框允许您在对话框中显示文本文件的内容。它就像一个简单的文本文件查看器。用户可以使用大多数键盘上可用的光标、向上翻页、向下翻页和 HOME/END 键在文件中移动。如果行太长而无法显示在框中,可以使用 LEFT/RIGHT 键水平滚动文本区域。您也可以使用 vi 风格的键 h、j、k 和 l 代替光标键,并使用 B 或 N 代替上翻页和下翻页键。使用 vi 风格的 “k” 和 “j” 或箭头键向上/向下滚动。 使用 vi 风格的 “h” 和 “l” 或箭头键向左/向右滚动。
退出时,不会将任何文本写入 dialog 的输出。 仅提供 “EXIT” 按钮用于输入,但可能返回ESC退出状态。
--timebox text height [width hour minute second]
将显示一个对话框,允许您选择小时、分钟和秒。如果小时、分钟或秒的值缺失或为负,则使用当前日期的对应值。您可以使用左箭头、上箭头、右箭头和下箭头增加或减少其中的任何一个。使用 tab 或 backtab 在窗口之间移动。
退出时,结果以小时:分钟:秒的形式打印。可以使用 --time-format 选项覆盖格式。
--treeview text height width list-height [ tag item status depth ] ...
显示组织为树的数据。每组数据包含一个标签、要为项目显示的文本、其状态 (“on” 或 “off”) 以及项目在树中的深度。
只能选择一项(如 radiolist)。 不显示标签。
退出时,所选项目的标签将写入 dialog 的输出。
--yesno text height width
将显示大小 height 行按 width 列的 yes/no 对话框。 text 指定的字符串显示在对话框内。如果这个字符串太长而不能放在一行中,它会在适当的地方自动分成多行。 text 字符串还可以包含子字符串 "" 或换行符 `' 以显式控制换行。 此对话框对于询问需要用户回答是或否的问题很有用。该对话框有一个 Yes 按钮和一个 No 按钮,用户可以通过按 TAB 键在其中切换。
退出时,不会将任何文本写入 dialog 的输出。除了 “Yes” 和 “No” 退出代码(参见诊断)之外,还可能返回 ESC 退出状态。
用于 “Yes” 和 “No” 的代码与用于 “OK” 和 “Cancel” 的代码相匹配,内部没有区别。
--beep
这用于告诉原始 cdialog 当 tailboxbg 小部件的单独进程重新绘制屏幕时它应该发出哔声。
--beep-after
在用户通过按下其中一个按钮完成小部件后发出哔声。
这些选项可用于在对话框读取脚本时转换空格(空格、制表符、换行符):
--cr-wrap, --no-collapse, --no-nl-expand, and --trim
选项不是独立的:
Dialog 检查脚本是否包含至少一个 “\n” 并且(除非设置了 --no-nl-expand )将忽略 --no-collapse 和 --trim 选项。
在检查 “\n” 和 --no-nl-expand 选项后, dialog 处理 --trim 选项。
如果 --trim 选项生效,则对话框忽略 dialog ignores --no-collapse 。 它将制表符、空格(和换行符,除非设置了 -cr-wrap )的序列更改为单个空格。
•
如果 “\n” 或 --trim 情况都不适用, dialog 会检查 --no-collapse 以决定是否将制表符和空格的序列减少到单个空格。
在这种情况下, dialog 会忽略 -cr-wrap 并且不会修改换行符。
考虑到这些依赖关系,下表总结了各种选项组合的行为。 该表假定当未设置 --no-nl-expand 选项时脚本至少包含一个 “\n” 。
cr-
no-
no-
trim
Result
wrap
collapse
nl-expand
no
no
no
no
将制表符转换为空格。将换行符转换为空格。将 “\n” 转换为换行符。
no
no
no
yes
将制表符转换为空格。将换行符转换为空格。将 “\n” 转换为换行符。
no
no
yes
no
将制表符转换为空格。不要将换行符转换为空格。将多空间转换为单空间。按字面意思显示 “\n” 。
no
no
yes
yes
将制表符转换为空格。将多空间转换为单空间。将换行符转换为空格。按字面意思显示 “\n” 。
no
yes
no
no
将换行符转换为空格。将 “\n” 转换为换行符。
no
yes
no
yes
将换行符转换为空格。将 “\n” 转换为换行符。
no
yes
yes
no
不要将换行符转换为空格。不要减少多个空白。按字面意思显示 “\n” 。
no
yes
yes
yes
将多个空格转换为单个空格。将换行符转换为空格。按字面意思显示 “\n” 。
yes
no
no
no
将制表符转换为空格。换行。将 “\n” 转换为换行符。
yes
no
no
yes
将制表符转换为空格。换行。将 “\n” 转换为换行符。
yes
no
yes
no
将制表符转换为空格。不要将换行符转换为空格。将多空间转换为单空间。按字面意思显示 “\n” 。
yes
no
yes
yes
将制表符转换为空格。将多空间转换为单空间。换行。按字面意思显示 “\n” 。
yes
yes
no
no
换行换行。将 “\n” 转换为换行符。
yes
yes
no
yes
换行符换行。将 “\n” 转换为换行符。
yes
yes
yes
no
不要将换行符转换为空格。不要减少多个空白。按字面意思显示 “\n” 。
yes
yes
yes
yes
将多个空格转换为单个空格。换行。按字面意思显示 “\n” 。
通过键入以下内容创建示例配置文件:
dialog --create-rc file
开始时, dialog 确定要使用的设置,如下所示:
a)
如果设置了环境变量 DIALOGRC ,它的值决定了配置文件的名称。
b)
如果没有找到 (a) 中的文件,则使用文件 $HOME/.dialogrc 作为配置文件。
c)
如果没有找到 (b) 中的文件,请尝试使用在编译时确定的 GLOBALRC 文件,即 /etc/dialogrc。
d)
如果 (c) 中的文件未找到,则使用默认编译。
编辑示例配置文件并将其复制到 dialog 可以找到的某个位置,如上面的步骤 2 所述。
您可以通过添加到配置文件来覆盖或添加到 dialog 中的键绑定。 Dialog 的 bindkey 命令将单个键映射到其内部编码。
bindkey widget curses_key dialog_key
widget 名称可以是 "*" (所有小部件)或特定小部件,例如 textbox 。 特定的小部件绑定会覆盖 "*" 绑定。 用户定义的绑定会覆盖内置绑定。
curses_key 可以是从 curses.h 派生的任何名称,例如 “HELP” 中的 “KEY_HELP”。 Dialog 还可以识别 ANSI 控制字符,例如 "^A", "^?", 以及 C1 控件,例如 "A" 和 "?"。 最后,它允许使用反斜杠转义任何单个字符。
Dialog 的内部键码名称对应于 dlg_keys.h 中的 DLG_KEYS_ENUM 类型,例如 “DLGK_HELP” 中的 “HELP” 。
一些小部件(例如表单框)有一个可以编辑字段的区域。这些在小部件的子窗口中进行管理,并且可能具有与主小部件不同的键绑定,因为子窗口使用不同的名称注册。
小部件
窗口名称
子窗口名称
calendar
calendar
checklist
checklist
editbox
editbox
editbox2
form
formbox
formfield
fselect
fselect
fselect2
inputbox
inputbox
inputbox2
menu
menubox
menu
msgbox
msgbox
pause
pause
progressbox
progressbox
radiolist
radiolist
tailbox
tailbox
textbox
textbox
searchbox
timebox
timebox
yesno
yesno
一些小部件实际上是其他小部件,使用内部设置来修改行为。那些使用与实际小部件相同的小部件名称:
Widget
Actual Widget
dselect
fselect
infobox
msgbox
inputmenu
menu
mixedform
form
passwordbox
inputbox
passwordform
form
prgbox
progressbox
programbox
progressbox
tailboxbg
tailbox
本手册页没有列出每个小部件的键绑定,因为可以通过运行 dialog 获得详细信息。 如果您设置了 --trace 选项, dialog 会在注册时为每个小部件写入键绑定信息。
通常, dialog 使用不同的键在按钮和对话框的编辑部分之间导航,而不是在编辑部分中导航。也就是说,标签(和后退标签)遍历按钮(或按钮和编辑部分之间),而箭头键遍历编辑部分内的字段。选项卡也被认为是在小部件之间遍历的一种特殊情况,例如,当使用多个 tailboxbg 小部件时。
一些用户可能希望使用相同的键在编辑部分中遍历与在按钮之间遍历。 通过在 dlgk_keys.h 中为 “form” (左/右/下一个/上一个)添加一个特殊组,表单小部件被编写为支持这种键的重新定义。这是一个示例绑定,演示了如何执行此操作:
bindkey formfield TAB form_NEXT bindkey formbox TAB form_NEXT bindkey formfield BTAB form_prev bindkey formbox BTAB form_prev
由于潜在的大量字段要遍历,这种类型的重新定义在其他小部件(例如日历)中不会有用。
DIALOGOPTS
定义此变量以将任何常用选项应用于每个小部件。大多数常用选项在处理每个小部件之前都会被重置。如果您在此环境变量中设置选项,它们将在重置后应用于 dialog 的状态。 与 "--file" 选项一样,双引号和反斜杠被解释。
"--file" 选项不被视为常用选项(因此您不能将其嵌入此环境变量中)。
DIALOGRC
如果要指定要使用的配置文件的名称,请定义此变量。
DIALOG_CANCEL
DIALOG_ERROR
DIALOG_ESC
DIALOG_EXTRA
DIALOG_HELP
DIALOG_ITEM_HELP
DIALOG_OK
定义这些变量中的任何一个以更改退出代码 Cancel (1), error (-1), ESC (255), Extra (3), Help (2), Help with --item-help (2), 或 OK (0)。 通常 shell 脚本无法区分 -1 和 255 。
DIALOG_TTY
将此变量设置为 “1” 以提供与旧版本 dialog 的兼容性,该版本假定如果脚本重定向标准输出,则给出 "--stdout" 选项。
$HOME/.dialogrc
默认配置文件
dialog 源包含几个示例,说明如何使用不同的框选项以及它们的外观。 只需查看源的目录 samples/ 即可。
退出状态会被环境变量覆盖。可以覆盖它们的默认值和相应的环境变量是:
0
如果按下 YES 或 OK 按钮 (DIALOG_OK)。
1
如果按下 No 或 Cancel 按钮 (DIALOG_CANCEL)。
2
如果按下 Help 按钮 (DIALOG_HELP),- 除了下面关于 DIALOG_ITEM_HELP 的说明。
3
如果按下 Extra 按钮 (DIALOG_EXTRA)。
4
如果按下 Help 按钮,并设置了- --item-help 选项- 并且 DIALOG_ITEM_HELP 环境变量设置为 4。
虽然可以使用环境变量覆盖任何退出代码,但这种特殊情况是在 2004 年引入的,以简化兼容性。 Dialog 在内部使用 DIALOG_ITEM_HELP(4),但除非还设置了环境变量,否则它会在退出时将其更改为 DIALOG_HELP(2)。
-1
如果 dialog 内部发生错误 (DIALOG_ERROR) 或 dialog 因按下 ESC 键 (DIALOG_ESC) 而退出。
Dialog 适用于 X/Open 诅咒。但是,一些实现存在不足:
HPUX 诅咒(可能还有其他诅咒)无法为 newterm 功能正确打开终端。 通过阻止光标键和类似的转义序列被识别,这会干扰 dialog 的 --input-fd 选项。
NetBSD 5.1 curses 对宽字符的支持不完全。 dialog 将生成,但并非所有示例都正确显示。
您可能想要编写与其他 dialog “clones” 一起运行的脚本。
首先,要考虑 “original” dialog 程序(版本 0.3 到 0.9)。 它有一些拼写错误(或不一致)的选项。 dialog 程序将那些不推荐使用的选项映射到首选选项。它们包括:
选项
处理
--beep-after
ignored
--guage
mapped to --gauge
这是一个 X 应用程序,而不是一个终端程序。稍加注意,就可以编写与 Xdialog 和 dialog 一起使用的有用脚本。
dialog 程序会忽略 Xdialog 识别的这些选项:
选项
处理
--allow-close
ignored
--auto-placement
ignored
--fixed-font
ignored
--icon
ignored
--keep-colors
ignored
--no-close
ignored
--no-cr-wrap
ignored
--screen-center
ignored
--separator
mapped to --separate-output
--smooth
ignored
--under-mouse
ignored
--wmclass
ignored
Xdialog 的手册页有一节讨论它与 dialog 的兼容性。手册页中未显示一些差异。例如,html 文档状态
注意:以前的 Xdialog 版本使用 "\n" (换行符)作为清单小部件的结果分隔符;这已在 Xdialog v1.5.0 中更改为 "/" 以使其与 (c)dialog 兼容。 在您使用 Xdialog 清单的旧脚本中,您必须在 --separate-output 之一之前添加 --checklist 选项。
Dialog 没有使用不同的分隔符;差异可能是由于对某些脚本的混淆。
然后是 whiptail 。 出于实际目的,它由 Debian 维护(其上游开发人员完成的工作很少)。 它的文档(README.whiptail)声称
Whittail(1) 是 dialog(1), 的轻量级替代品,为 shell 脚本提供对话框。 它建立在 newt 窗口库而不是 ncurses 库,允许它在嵌入式环境中更小,例如安装程序,救援盘等 Whiptail 被设计为与对话兼容,但是功能较少:一些对话框没有实现,例如 如tailbox、timebox、calendarbox等。
比较实际大小(Debian 测试,2007/1/10): whiptail、 newt、 popt and slang 库的总大小为 757 KB。 dialog 的可比数字(计算 ncurses)为 520 KB。无视第一段。
第二段具有误导性,因为 whiptail 也不适用于 dialog 的常见选项,例如 gauge 框。 与 1990 年代中期最初的 dialog 0.4 程序相比, whiptail 与 dialog 的兼容性较差。
whiptail 的手册页借鉴了 dialog 的功能,例如,但奇怪的是仅引用了 0.4(1994)以下的 dialog 版本作为来源。也就是说,它的手册页指的是从较新版本的 dialog 中借用的功能,例如,
--gauge (从 0.5 开始)
--passwordbox (来自 Debian 1999 年的更改),
--default-item (来自 dialog 2000/02/22),
有点幽默的是,有人可能会注意到使用 "--" 作为转义符的 popt 功能(未在其联机帮助页中记录)在 dialog 的联机帮助页中记录了大约一年,然后才在 whiptail 的联机帮助页中被提及。 whiptail 的联机帮助页错误地将其归因于 getopt 并且无论如何都不准确)。
Debian 使用 whiptail 作为官方 dialog 变体。
dialog 程序会忽略或映射这些被 whiptail 识别的选项:
选项
处理
--cancel-button
映射到 --cancel-label
--fb
忽略
--fullbutton
忽略
--no-button
映射到 --no-label
--nocancel
映射到 --no-cancel
--noitem
映射到 --no-items
--notags
映射到 --no-tags
--ok-button
映射到 --ok-label
--scrolltext
映射到 --scrollbar
--topleft
映射到 --begin 0 0
--yes-button
映射到 --yes-label
存在命令行选项未解决的视觉差异:
窗口内的 dialog 中心列表。 whiptail 通常将列表放在左边距。
whiptail 使用尖括号 ("<" 和 ">") 来标记按钮。 dialog 框使用方括号。
whiptail 用竖线标记了字幕的限制。 dialog 不标记限制。
也许。
Thomas E. Dickey (0.9b 及更高版本的更新)
Kiran Cherupally – 混合形式和混合仪表小部件。
Tobias C. Rittweiler
Valery Reznic – 表单和进度框小部件。
Yura Kalinichenko 将仪表小部件改编为 “pause”。
这是 dialog 0.9a 早期版本的重写(除非需要提供兼容性),其中列出了作者:
Savio Lam – 0.3 版, “dialog”
Stuart Herbert – 0.4 版补丁
Marc Ewing – 仪表小部件。
Pasquale De Marco “Pako” – 0.9a 版, “cdialog”
$Date: 2018/06/19 00:26:13 $
设置是累积的,例如, "\Zb\Z1" 使以下文本变为粗体(可能是明亮的)红色。
使用 "\Zn" 恢复正常设置。
bc [-ghilPqsvVw] [--global-stacks] [--help] [--interactive] [--mathlib] [--no-prompt] [--quiet] [--standard] [--warn] [--version] [-e expr] [--expression=expr...] [-f file...] [--file=file...] [file...]
bc(1) 是 POSIX 于 1991 年首次标准化的语言的交互式处理器。(当前标准在 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html)。) 该语言提供无限精度的十进制算术,并且有点类似于 C,但存在差异。此类差异将在本文档中注明。
在解析和处理选项之后, bc(1) 读取命令行上给出的任何文件并在从 stdin 读取之前执行它们。
bc(1) 是 任何 bc(1)的直接替代品,包括(尤其是)GNU bc(1)。除了其他实现之外,它还具有许多扩展和额外功能。
以下是 bc(1) 接受的选项。
-g, --global-stacks
将全局变量 ibase、 obase、 scale 和 seed 转换为堆栈。
这样做的效果是,在每次函数调用时,所有四个当前值的副本都被压入堆栈,并在每个函数返回时弹出。这意味着函数可以分配给任何和所有全局变量,而不必担心更改会影响其他函数。因此,假设一个名为 output(x,b) 的函数,简单地输出以 b 为基数的 x ,可以这样写:
define void output(x, b) { obase=b x }
而不是这样:
define void output(x, b) { auto c c=obase obase=b x obase=c }
这使得编写函数变得更加容易。
(注意: 函数 output(x,b) 存在于扩展数学库中。参见 库 部分。)
但是,由于使用此标志意味着函数无法全局设置 ibase、 obase、 scale 或 seed ,因此这样做的函数将无法再工作。有两个可能的用例,每个都有一个解决方案。
首先,如果在启动时调用函数将 bc(1) 转换为数字转换器,则可以用各种 shell 别名替换该功能。例如:
alias d2o="bc -e ibase=A -e obase=8" alias h2b="bc -e ibase=G -e obase=2"
其次,如果一个函数的目的是为任何其他目的全局设置 ibase、 obase、 scale 或 seed ,则可以将其拆分为一到四个函数(基于它设置的全局变量的数量),并且每个函数都可以返回全局所需的值。
对于设置 seed 的函数,分配给 seed 的值不会传播到父函数。这意味着他们看到的伪随机数序列将与任何父函数看到的伪随机数序列不同。仅在设置 seed 后才会出现这种情况。
如果一个函数希望不影响其父函数的伪随机数序列,但希望使用相同的 seed ,则可以使用以下行:
seed = seed
如果每次运行 bc(1) 都需要此选项的行为,则用户可以确保定义 BC_ENV_ARGS 并包含此选项(有关详细信息,请参阅 环境变量 部分)。
如果使用 -s、 -w 或任何等效项,则忽略此选项。
这是一个 不可移植的扩展。
-h, --help
打印使用消息并退出。
-i, --interactive
强制交互模式。(请参阅 交互模式 部分。)
这是一个 不可移植的扩展。
-l, --mathlib
将 scale (参见 语法 部分)设置为 20 ,并在运行任何代码(包括命令行上指定的任何表达式或文件)之前加载包含的数学库和扩展的数学库。
要了解库中的内容,请参阅 库 部分。
-P, --no-prompt
在 TTY 模式下禁用提示。(提示仅在 TTY 模式下启用。请参阅 TTY MODE 部分)这主要适用于那些不想要提示或不习惯在 bc(1) 中使用提示的用户。大多数用户希望将此选项放在 BC_ENV_ARGS (请参阅 环境变量 部分)。
这是一个 不可移植的扩展。
-q, --quiet
此选项是为了与 GNU bc(1) (https://www.gnu.org/software/bc/) 兼容;这是一个空操作。如果没有这个选项, GNU bc(1) 会打印一个版权标题。如果提供一个或多个 -v、 -V 或 --version 选项,则此 bc(1) 仅打印版权标头。
这是一个 不可移植的扩展。
-s, --standard
准确处理标准定义的语言 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) ,如果使用任何扩展,则会出错。
这是一个 不可移植的扩展。
-v, -V, --version
打印版本信息(版权标题)并退出。
这是一个 不可移植的扩展。
-w, --warn
像 -s 和 --standard 一样,除了为非标准扩展打印警告(而不是错误)并且继续正常执行。
这是一个 不可移植的扩展。
-e expr, --expression=expr
对 expr 求值。 如果给出多个表达式,则按顺序计算它们。如果还给出文件(见下文),则表达式和文件将按照给定的顺序进行求值。这意味着如果在表达式之前给出文件,则首先读入并对该文件求值。
如果此选项在命令行中给出(即不在 BC_ENV_ARGS 中,请参阅 环境变量 部分),则在处理完所有表达式和文件后, bc(1) 将退出,除非 - (stdin) 作为参数给出 -f 或 --file 至少一次,无论是在命令行还是在 BC_ENV_ARGS 中。但是,如果在给出 -f- 或等效项之后给出任何其他 -e、 --expression、 -f 或 --file 参数, bc(1) 将给出致命错误并退出。
这是一个 不可移植的扩展。
-f file, --file=file
读取 file 并逐行评估它,就好像它是通过 stdin 。取的一样。如果还给出表达式(见上文),则按照给定的顺序计算表达式。
如果此选项在命令行中给出(即不在 BC_ENV_ARGS 中,请参阅 ENVIRONMENT VARIABLES 部分),则在处理完所有表达式和文件后, bc(1) 将退出,除非 - (stdin) 作为参数给出至少一次到 -f 或 --file 。但是,如果在给出 -f- 或等效项之后给出任何其他 -e、 --expression、 -f 或 --file 参数, bc(1) 将给出致命错误并退出。
这是一个 不可移植的扩展。
所有长选项都是 不可移植的扩展。
任何非错误输出都会写入 stdout 。此外,如果启用历史记录(参见 历史 部分)和提示(参见 TTY 模式 部分),则两者都将输出到 stdout。
注意: 与其他bc(1)实现不同,如果bc(1)不能写入 stdout ,它将发出致命错误(参见 退出状态 部分),因此如果 stdout 关闭,如 bc >&- ,它将退出并报错。这样做是为了使 bc(1) 可以在 stdout 重定向到文件时报告问题。
如果有脚本依赖于其他 bc(1) 实现的行为,建议更改这些脚本以将 stdout 重定向到 /dev/null。
任何错误输出都会写入 stderr。
注意: 与其他 bc(1) 实现不同,如果 bc(1) 无法写入 stderr ,它将发出致命错误(请参阅 退出状态 部分),因此如果 stderr 已关闭,如 bc 2>&- 它将退出并报错。这样做是为了在将 stderr 重定向到文件时 bc(1) 可以退出并显示错误代码。
如果有脚本依赖于其他 bc(1) 实现的行为,建议更改这些脚本以将 stderr 重定向到 /dev/null。
bc(1) 程序的语法大多类似于 C,但有一些区别。此 bc(1) 遵循 POSIX 标准 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) ,这是 bc(1) 接受的语言的更全面的资源。本节旨在总结和列出该标准的所有扩展。
在下面的部分中,E 表示表达式, S 表示语句, I 表示标识符。
标识符 (I) 以小写字母开头,后跟任意数量的小写字母 (a-z)、数字 (0-9) 和下划线 (_) (最多 BC_NAME_MAX-1) 。 正则表达式是 [a-z][a-z0-9_]*。 具有多个字符(字母)的标识符是 不可移植的扩展。
ibase 是一个决定如何解释常数的全局变量。 它是 “input” 基数,或用于解释输入数字的数字基数。 ibase 最初是 10。 如果命令行上没有给出 -s (--standard) 和 -w (--warn) 标志,则 ibase 的最大允许值为 36。 否则为 16。 ibase 的最小允许值为 2。 可以在 bc(1) 程序中使用 maxibase() 内置函数查询 ibase 的最大允许值。
obase 是一个全局变量,决定如何输出结果。 它是 “output” 基数,或用于输出数字的基数。 obase 最初是 10。 obase 最大允许值为 BC_BASE_MAX ,可以在 bc(1) 程序中使用 maxobase() 内置函数进行查询。 obase 的最小允许值为 0。 如果 obase 为 0 ,则以科学计数法输出值,如果 obase 为 1 ,则以工程计数法输出值。 否则,以指定的基数输出值。
以科学和工程符号输出是 不可移植的扩展。
表达式的 scale 是小数点右边的表达式结果中的位数,而 scale 是一个全局变量,它设置任何运算的精度,但有例外。 scale 最初为 0。 scale 不能为负。 scale 的最大允许值为 BC_SCALE_MAX ,可以在 bc(1) 程序中使用 maxscale() 内置函数查询。
bc(1) 既有 global 变量, local 变量。 所有 local 变量都是函数的局部变量;它们由参数或在函数的 auto 列表引入(参见 函数 部分)。 如果访问的变量不是参数或在 auto 列表中,则假定它是 global 的。 如果父函数具有子函数认为 global 变量的 local 变量版本,则子函数中该 global 变量的值是父函数中变量的值,而不是实际_global_ 变量的值。
以上所有内容也适用于数组。
如果语句是一个表达式(即任何指定的表达式或操作数),则会打印该语句的值,除非最低优先级操作符是赋值运算符 and ,表达式用括号括起来。
last 打印的值也分配给特殊变量。 单个点 (.) 也可以用作 last 的同义词。 这些是 不可移植的扩展。
分号或换行符都可以分隔语句。
有两种评论:
块注释包含在 /* 和 */ 中。
行注释从 # 开始,直到(不包括)下一个换行符。 这是一个 不可移植的扩展。
以下是 bc(1) 中的命名表达式:
变量: I
数组元素: I[E]
ibase
obase
scale
seed
last 或一个点 (.)
数字 6 和 7 是 不可移植的扩展。
seed 的含义取决于当前的伪随机数生成器,但除了新的主要版本外,保证不会改变。
该值的 scale 和符号可能很重要。
如果将先前使用的 seed 值分配给 seed 并再次使用,则保证伪随机数生成器产生与先前使用 seed 值时相同的伪随机数序列。
如果立即再次查询 seed ,则不能保证返回分配给 seed 的确切值。 但是,如果 seed 确实 返回不同的值,则当分配给 seed 时,这两个值都保证产生相同的伪随机数序列。 这意味着分配给 seed 的某些值 不会 产生唯一的伪随机数序列。 使用 rand() 和 irand(E) 操作数后, seed 的值将发生变化(请参阅下面的 运算符 小节),除非传递给 irand(E) 的参数为 0、 1 或负数。
可以分配给 seed 的值的长度(有效小数位数)或 scale 没有限制。
变量和数组不干扰;用户可以将数组命名为与变量相同的名称。 这也适用于函数(参见 函数 部分),因此用户可以拥有一个变量、数组和函数,它们都具有相同的名称,并且它们不会相互影响,无论是否在函数内部。
命名表达式需要作为 递增/递减 运算符的操作数和 赋值 运算符的左侧(请参阅 运算符 小节)。
以下是 bc(1) 中的有效操作数:
数字(请参阅下面的 数字 小节)。
数组索引 (I[E]).
(E): E 的值(用于改变优先级)。
sqrt(E): E 的平方根。 E 必须是非负数。
length(E): E 中有效小数位数。
length(I[]): 数组 I 的元素个数。 这是一个 不可移植的扩展。
scale(E): E 的 scale 。
abs(E): E 的绝对值。 这是一个 不可移植的扩展。
I(), I(E), I(E, E) 等等,其中 I 是非 空 函数的标识符(请参阅 函数 部分的 空函数 小节)。 E 参数也可以是 I[] 形式的数组,如果函数定义中的相应参数是数组引用,它将自动转换为数组引用(参见 函数 部分的 数组引用 小节)。
read(): 从 stdin 读取一行并将其用作表达式。 该表达式的结果是 read() 操作数的结果。 这是一个 不可移植的扩展。
maxibase(): 允许的最大 ibase 。 这是一个 不可移植的扩展。
maxobase(): 允许的最大 obase 。 这是一个 不可移植的扩展。
maxscale(): 允许的最大 scale 。 这是一个 不可移植的扩展。
rand(): 介于 0 (含)和 BC_RAND_MAX (含)之间的伪随机整数。 使用这个操作数会改变 seed 的值。 这是一个 不可移植的扩展。
irand(E): 介于 0 (包括)和 E (不包括)值之间的伪随机整数。 如果 E 为负数或非整数(E’ 的 scale 不为 0 ),则会引发错误,并且 bc(1) 会重置(请参阅 重置 部分),而 seed 保持不变。 如果 E 大于 BC_RAND_MAX ,则通过生成几个伪随机整数、将它们乘以 BC_RAND_MAX+1 的适当幂并将它们相加来实现上界。 因此,可以使用此操作数生成的整数大小是无限的。 使用这个操作数会改变 seed 的值,除非 E 的值是 0 或 1 。 在这种情况下,将返回 0 ,并且 不会 更改 seed 。 这是一个 不可移植的扩展。
maxrand(): rand() 返回的最大整数。 这是一个 不可移植的扩展。
rand() 和 irand(E) 生成的整数保证尽可能无偏,但受伪随机数生成器的限制。
注意: 使用 rand() 和 irand(E) 的伪随机数生成器返回的值 不是 加密安全的。这是使用种子伪随机数生成器的结果。 但是,它们 保证 可以使用相同的种子值重现。 这意味着来自 bc(1) 的伪随机数只应该在可重复的伪随机数流是 必要 的情况下使用。 在任何其他情况下,请使用非种子伪随机数生成器。
数字是由数字、大写字母和最多 1 个句点组成的字符串。 数字最多可以有 BC_NUM_MAX 个数字。大写字母等于 9 + 它们在字母表中的位置(即 A 等于 10 或 9+1)。 如果数字或字母与 ibase 的当前值无关,则将它们设置为 ibase 中最高有效数字的值。
无论 ibase 的值如何,单字符数字(即单独的 A )采用它们是有效数字时的值。 这意味着单独的 A 总是等于十进制的 10 ,单独的 Z 总是等于十进制的 35 。
此外,bc(1) 接受科学计数法的数字。 它们的格式为 e 。 指数( e 之后的部分)必须是整数。 例如 1.89237e9 ,它等于 1892370000 。 也允许负指数,因此 4.2890e-3 等于 0.0042890。
如果分别给出 -s 或 -w 命令行选项(或等效项),则使用科学记数法是错误或警告。
警告: 科学计数法中的数字和指数均根据当前 ibase 进行解释,但无论当前 ibase 如何,该数字仍乘以 10^exponent 。 例如,如果 ibase 为 16 ,并且 bc(1) 被赋予数字字符串 FFeA ,则生成的十进制数将为 2550000000000 ,如果 bc(1) 被赋予数字字符串 10e-4 ,则生成的十进制数将为 0.0016 。
接受输入作为科学记数法是 不可移植的扩展.
可以使用以下算术和逻辑运算符。它们按优先级降序排列。同一组中的运算符具有相同的优先级
++ --
类型:前缀和后缀
结合性:无
说明: 递增、 递减
- !
类型:前缀
结合性:无
说明: 否定、 布尔非
$
类型:后缀
结合性:无
说明: 截断
@
类型:二进制
结合性:右
说明: 设置精度
^
类型:二进制
结合性:右
说明: 幂
* / %
类型:二进制
结合性: 左
说明: 乘法、 除法、 取模
+ -
类型:二进制
结合性: 左
说明: 加法, 减法
<< >>
类型:二进制
结合性: 左
说明: 左移, 右移
= <<= >>= += -= *= /= %= ^= @=
类型:二进制
结合性: 右
说明: 赋值
== <= >= != < >
类型:二进制
结合性: 左
说明: 关系
&&
类型:二进制
结合性: 左
说明: 布尔值和
||
类型:二进制
结合性: 左
说明: 布尔值或
下面将更详细地描述运算符。
++ --
前缀和后缀 递增 和 递减 运算符的行为与它们在 C 中的行为完全相同。它们需要一个命名表达式(参见 命名表达式 小节)作为操作数。
这些运算符的前缀版本更有效;尽可能使用它们。
-
如果用户尝试对任何值为 0 的表达式 求反 ,则否定运算符返回 0 。否则,返回其符号求反的表达式副本。
!
如果表达式为 0 ,则 布尔非 运算符返回 1 ,否则返回 0 。
这是一个 不可移植的扩展。
$
截断 运算符返回给定表达式的副本,其中删除所有 scale 。
这是一个 不可移植的扩展。
@
set precision 运算符接受两个表达式并返回第一个表达式的副本,其 scale 等于第二个表达式的值。 这可能意味着返回的数字没有变化(如果第一个表达式的 scale 与第二个表达式的值匹配)、扩展(如果小于)或截断(如果大于)。
第二个表达式必须是整数(无 scale )且非负数。
这是一个 不可移植的扩展。
^
幂 运算符(不是 C 中的 exclusive or 运算符)采用两个表达式并将第一个表达式提升到第二个值的幂。 结果的 scale 等于 scale 。
第二个表达式必须是整数(无 scale ),如果为负数,则第一个值必须非零。
*
乘法 运算符接受两个表达式,将它们相乘,然后返回乘积。 如果 a 是第一个表达式的 scale , b 是第二个表达式的 scale ,则结果的 scale 等于 min(a+b,max(scale,a,b)) 其中 min() 和 max() 返回的值。
/
除法 运算符接受两个表达式,将它们相除,然后返回商。 结果的 scale 应为 scale 值。
第二个表达式必须非零。
%
取模 运算符采用两个表达式 a 和 b ,并通过以下方式对它们进行评估:1) 将 a/b 计算为当前 scale , 2) 使用步骤 1 的结果计算 a-(a/b)*b 到 scale max(scale+scale(b),scale(a)).
第二个表达式必须非零。
+
加法 运算符接受两个表达式 a 和 b ,并返回总和,其 scale 等于 a 和 b 的 scale 最大值。
-
减法 运算符接受两个表达式 a 和 b ,并返回差值,其 scale 等于 a 和 b 的 scale 最大值。
<<
左移 运算符接受两个表达式 a 和 b ,并返回 a 值的副本,其小数点向右移动 b 位。
第二个表达式必须是整数(无 scale )且非负数。
这是一个 不可移植的扩展。
>>
右移 运算符接受两个表达式 a 和 b,并返回 a 值的副本,其小数点向左移动 b 位。
第二个表达式必须是整数(无 scale )且非负数。
这是一个 不可移植的扩展。
= <<= >>= += -= *= /= %= ^= @=
赋值 运算符接受两个表达式 a 和 b 其中 a 是命名表达式(请参阅 命名表达式 小节)。
对于 = ,复制 b 并将结果分配给 a 。 对于所有其他, a 和 b 作为操作数应用于相应的算术运算符,并将结果分配给 a 。
对应于作为扩展的运算符的 赋值 运算符本身就是 不可移植的扩展 。
== <= >= != < >
关系 运算符比较两个表达式 a 和 b ,如果关系成立,根据 C 语言语义,结果为 1 ,否则为 0 。
请注意,与 C 不同,这些运算符的优先级低于 赋值 运算符,这意味着 a=b>c 被解释为 (a=b)>c 。
此外,与标准 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) 要求不同,这些运算符可以出现在可以使用任何其他表达式的任何地方。 这是一个 不可移植的扩展。
&&
布尔 and 运算符接受两个表达式,如果两个表达式都不为零,则返回1 ,否则返回 0 。
这 不是 短路运算符。
这是一个 不可移植的扩展。
||
布尔 or 运算符接受两个表达式,如果其中一个表达式不为零,则返回 1 ,否则返回 0 。
这 不是 短路运算符。
这是一个 不可移植的扩展。
以下项目是声明:
E
{ S ; ... ; S }
if ( E ) S
if ( E ) S else S
while ( E ) S
for ( E ; E ; E ) S
一个空的声明
break
continue
quit
halt
limits
一串字符,用双引号括起来
print E , ... , E
I(), I(E), I(E, E) 等等,其中 I 是 void 函数的标识符(请参阅 函数 部分的 空函数 小节)。 E 参数也可以是 I[] 形式的数组,如果函数定义中的相应参数是数组引用,它将自动转换为数组引用(参见 函数 部分的 数组引用 小节)。
数字 4、 9、 11、 12、 14 和 15 是 不可移植的扩展。
此外,作为 不可移植的扩展 ,可以省略 for 循环头中的任何或所有表达式。 如果省略条件(第二个表达式),则假定为常数 1 。
break 语句使循环停止迭代并在循环后立即恢复执行。 这仅在循环中允许。
continue 语句使循环迭代提前停止并返回到循环的开头,包括测试循环条件。 这仅在循环中允许。 这仅在循环中允许。
if else 语句的作用与 C 中的相同。
quit 语句会导致 bc(1) 退出,即使它位于不会执行的分支上(它是编译时命令)。
如果执行 halt 语句,则 bc(1) 将退出。 ((与如果它位于未执行的 if 语句的分支上的 quit 不同,bc(1) 不会退出。)
limits 语句打印此 bc(1) 所受的限制。 这就像 quit 语句,因为它是一个编译时命令。
表达式本身被评估和打印,然后是换行符。
科学记数法和工程记数法都可用于打印表达式的结果。 科学记数法通过将 0 分配给 obase 来激活,而工程记数法通过将 1 分配给 obase 来激活。 要停用它们,只需为 obase 分配一个不同的值。
如果使用 -s 或 -w 命令行选项(或等效项)运行 bc(1),则会禁用科学记数法和工程记数法。
以科学记数法和/或工程记数法打印数字是一种 不可移植的扩展。
print 语句中的 “expressions” 也可以是字符串。 如果是,则有专门解释的反斜杠转义序列。 这些序列是什么,以及它们导致打印的内容如下所示:
\a
\a
\b
\b
\\
\
\e
\
\f
\f
\q
"
反斜杠后面的任何其他字符都会导致反斜杠和字符按原样打印。
打印语句中的任何非字符串表达式都应分配给 last ,就像打印的任何其他表达式一样。
一个语句中的所有表达式都是从左到右计算的,除非为了维护操作顺序。 这意味着,例如,假设 i 等于 0 ,在表达式中
a[i++] = i++
a 的第一个(或第 0 个)元素设置为 1 ,并且 i 在表达式末尾等于 2 。
这包括函数参数。 因此,假设 i 等于 0 ,这意味着在表达式中
x(i++, i++)
传递给 x() 的第一个参数是 0 ,第二个参数是 1 ,而在函数开始执行之前 i 等于 2 。
函数定义如下:
define I(I,...,I){ auto I,...,I S;...;S return(E) }
参数列表或 auto 列表中的任何 I 都可以替换为 I[] 以使参数或 auto 成为数组,并且参数列表中的任何 I 都可以替换为 *I[] 以使参数成为数组引用。 采用数组引用的函数的调用者不应在调用中加上星号;它们必须像普通数组参数一样只用 I[] 调用,并且会自动转换为引用。
作为 不可移植的扩展, define 语句的左大括号可能出现在下一行。
作为 不可移植的扩展, return 语句也可以是以下形式之一:
return
return ( )
return E
前两个,或者不指定 return 语句,等效于 return (0), ,除非该函数是一个 void 函数(请参阅下面的 空函数 小节)。
函数也可以是 空 函数,定义如下:
define void I(I,...,I){ auto I,...,I S;...;S return }
它们只能用作独立的表达式,这样的表达式将单独打印,除了在打印语句中。
void 函数只能使用上面列出的前两个返回语句。 他们也可以完全省略 return 语句。
“void” 一词不被视为关键字;仍然可以有名为 void 的变量、数组和函数。 “void” 这个词只在 define 关键字之后被特别对待。
这是一个 不可移植的扩展。
对于参数列表中的任意一个数组,如果该数组以形式声明
*I[]
这是一个 参考。 当函数返回时,函数中数组的任何更改都会反映到传入的数组中。
除此之外,所有函数参数都是按值传递的。
这是一个 不可移植的扩展。
以下所有函数,包括扩展数学库中的函数(请参阅下面的 扩展库 小节),在给出 -l 或 --mathlib 命令行标志时可用,除了在给出 -s 选项、 -w 选项或等效选项的情况下,扩展数学库在不可用。
标准 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) 为数学库定义了以下函数:
s(x)
返回 x 的正弦值,假定为弧度。
这是一个超越函数(参见下面的 超越函数 小节)。
c(x)
返回 x 的余弦,假定为弧度。
这是一个超越函数(参见下面的 超越函数 小节)。
a(x)
返回 x 的反正切,以弧度为单位。
这是一个超越函数(参见下面的 超越函数 小节)。
l(x)
返回 x 的自然对数。
这是一个超越函数(参见下面的 超越函数 小节)。
e(x)
返回数学常数 e 的 x 次方。
这是一个超越函数(参见下面的 超越函数 小节)。
j(x, n)
返回 x 的贝塞尔整数阶 n (截断)。
这是一个超越函数(参见下面的 超越函数 小节)。
给出 -s/--standard 或 -w/--warn 选项时 不会 加载扩展库,因为它们不是标准定义的库的一部分 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html)。
这是一个 不可移植的扩展。
p(x, y)
计算 x 的 y 次方,即使 y 不是整数,并将结果返回到当前 scale 。
如果 y 为负且 x 为 0 ,则为错误。
这是一个超越函数(参见下面的 超越函数 小节)。
r(x, p)
根据舍入模式返回 x 舍入到 p 小数位,从 0 舍入一半 (https://en.wikipedia.org/wiki/Rounding#Round_half_away_from_zero)。
ceil(x, p)
根据舍入模式从 x 舍入返回 p 舍入到 0 位小数 (https://en.wikipedia.org/wiki/Rounding#Rounding_away_from_zero)。
f(x)
返回 x 的截断绝对值的阶乘。
perm(n, k)
如果 n ,则返回 k 的截断绝对值的 k <= n 的截断绝对值的排列。 如果不是,则返回 0 。
comb(n, k)
如果 k <= n ,则返回 k 的截断绝对值的 n 截断绝对值的组合。 如果不是,则返回 0 。
l2(x)
返回 x 的以 2 为底的对数。
这是一个超越函数(参见下面的 超越函数 小节)。
l10(x)
返回 x 的以 10 为底的对数。
这是一个超越函数(参见下面的 超越函数 小节)。
log(x, b)
返回 x 的以 b 为底的对数。
这是一个超越函数(参见下面的 超越函数 小节)。
cbrt(x)
返回 x 的立方根。
root(x, n)
计算 n、 r 的截断值,并将 x 的第 r 根返回到当前 scale 。
如果 r 为 0 或负数,则会引发错误并导致 bc(1) 重置(请参阅 重置 部分)。 如果 r 为偶数且 x 为负数,它还会引发错误并导致 bc(1) 重置。
pi(p)
将 pi 返回到 p 个小数位。
这是一个超越函数(参见下面的 超越函数 小节)。
t(x)
返回 x 的正切,假定为弧度。
这是一个超越函数(参见下面的 超越函数 小节)。
a2(y, x)
返回 y/x 的反正切,以弧度为单位。 如果 y 和 x 都等于 0 ,则会引发错误并导致 bc(1) 重置(请参阅 重置 部分)。 否则,如果 x 大于 0 ,则返回 a(y/x)。 如果 x 小于 0 ,并且 y 大于或等于 0 ,则返回 a(y/x)+pi 。 如果 x 小于 0 ,并且 y 小于 0, ,则返回 a(y/x)-pi 。 如果 x 等于 0 ,并且 y 大于 0, 则返回 pi/2 。 如果 x 等于 0 ,并且 y 小于 0,则返回 -pi/2。
此函数与许多编程语言中的 atan2() 函数相同。
这是一个超越函数(参见下面的 超越函数 小节)。
sin(x)
返回 x 的正弦值,假定为弧度。
这是 s(x) 的别名。
这是一个超越函数(参见下面的 超越函数 小节)。
cos(x)
返回 x 的余弦,假定为弧度。
这是 c(x) 的别名。
这是一个超越函数(参见下面的 超越函数 小节)。
tan(x)
返回 x 的正切,假定为弧度。
如果 x 等于 1 或 -1 ,则会引发错误并导致 bc(1) 重置(请参阅 重置 部分)。
这是 t(x) 的别名。
这是一个超越函数(参见下面的 超越函数 小节)。
atan(x)
返回 x 的反正切,以弧度为单位。
这是 a(x) 的别名。
这是一个超越函数(参见下面的 超越函数 小节)。
atan2(y, x)
返回 y/x 的反正切,以弧度为单位。如果 y 和 x 都等于 0 ,则会引发错误并导致 bc(1) 重置(请参阅 重置 部分)。 否则,如果 x 大于 0 ,则返回 a(y/x) 。 如果 x 小于 0 ,并且 y 大于或等于 0 ,则返回 a(y/x)+pi 。 如果 x 小于 0 ,并且 y 小于 0 ,则返回 a(y/x)-pi 。 如果 x 等于 0 ,并且 y 大于 0 , 则返回 pi/2 。 如果 x 等于 0 ,并且 y 小于 0, ,则返回 -pi/2 。
此函数与许多编程语言中的 atan2() 函数相同。
这是 a2(y, x) 的别名。
这是一个超越函数(参见下面的 超越函数 小节)。
r2d(x)
将 x 从弧度转换为度数并返回结果。
这是一个超越函数(参见下面的 超越函数 小节)。
d2r(x)
将 x 从度数转换为弧度并返回结果。
这是一个超越函数(参见下面的 超越函数 小节)。
frand(p)
生成一个介于 0 (含)和 1 (不含)之间的伪随机数,小数点后的小数位数等于 p 的截断绝对值。 如果 p 不为 0 ,则调用此函数将更改 seed 的值。 如果 p 为 0 ,则返回 0 ,并且seed 不 变。
ifrand(i, p)
生成介于 0 (含)和 i 的截断绝对值(不含)之间的伪随机数,小数点后的小数位数等于 p 的截断绝对值。 如果 i 的绝对值大于等于 2, 且 p 不为 0, 则调用该函数会改变 seed 的值;否则,返回 0 并且不更改 seed 。
srand(x)
返回 x ,其符号以 0.5 的概率翻转。 换句话说,它随机化 x 的符号。
brand()
返回一个随机布尔值 ( 0 或 1)。
ubytes(x)
返回保存 x 的截断绝对值所需的无符号整数字节数。
sbytes(x)
返回保存 x 的截断值所需的有符号二进制补码整数字节数。
hex(x)
输出 x 的十六进制(以 16 为基数)表示。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
binary(x)
输出 x 的二进制(以 2 为基数)表示。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
output(x, b)
输出 b 为底 x 的表示。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
uint(x)
将 x 的二进制和十六进制表示形式输出为无符号整数,并以尽可能少的两个字节的幂。两个输出都被分成由空格分隔的字节。
如果 x 不是整数或负数,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
int(x)
将 x 的二进制和十六进制表示形式输出为带符号的二进制补码整数,并以尽可能少的两个字节的幂。两个输出都被分成由空格分隔的字节。
如果 x 不是整数,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
uintn(x, n)
将 x 的二进制和十六进制表示形式输出为 n 字节的无符号整数。 两个输出都被分成由空格分隔的字节。
如果 x 不是整数、为负数或无法容纳 n 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
intn(x, n)
将 x 的二进制和十六进制表示形式输出为 n 字节的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。
如果 x 不是整数或不能放入 n 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
uint8(x)
将 x 的二进制和十六进制表示形式输出为 1 字节的无符号整数。两个输出都被分成由空格分隔的字节。
如果 x 不是整数、为负数或无法放入 1 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
int8(x)
将 x 的二进制和十六进制表示形式输出为 1 个字节中的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。
如果 x 不是整数或不能放入 1 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
uint16(x)
将 x 的二进制和十六进制表示形式输出为 2 个字节的无符号整数。两个输出都被分成由空格分隔的字节。
如果 x 不是整数、为负数或不能容纳 2 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
int16(x)
将 x 的二进制和十六进制表示形式输出为 2 个字节的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。
如果 x 不是整数或不能容纳 2 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
uint32(x)
将 x 的二进制和十六进制表示形式输出为 4 字节的无符号整数。两个输出都被分成由空格分隔的字节。
如果 x 不是整数、为负数或无法容纳 4 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
int32(x)
将 x 的二进制和十六进制表示形式输出为 4 字节的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。
如果 x 不是整数或不能容纳 4 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
uint64(x)
将 x 的二进制和十六进制表示形式输出为 8 字节的无符号整数。两个输出都被分成由空格分隔的字节。
如果 x 不是整数、为负数或不能容纳 8 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
int64(x)
将 x 的二进制和十六进制表示形式输出为 8 个字节的有符号二进制补码整数。两个输出都被分成由空格分隔的字节。
如果 x 不是整数或不能放入 8 个字节,则会打印一条错误消息,但不会重置 bc(1)(请参阅 重置 部分)。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
hex_uint(x, n)
将 x 的截断绝对值的表示形式输出为使用 n 字节的十六进制无符号整数。如果 n 太小,则不会输出所有值。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
binary_uint(x, n)
将 x 的截断绝对值的表示形式输出为使用 n 字节的二进制无符号整数。如果 n 太小,则不会输出所有值。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
output_uint(x, n)
使用 n 字节将 x 的截断绝对值的表示形式输出为当前 obase (请参阅 语法 部分)中的无符号整数。如果 n 太小,则不会输出所有值。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
output_byte(x, i)
输出 i 的截断绝对值的字节 x ,其中 0 是最低有效字节, number_of_bytes - 1 是最高有效字节。
这是一个 void 函数(请参阅 函数 部分的 Void 函数 小节)。
所有超越函数都可能返回稍微不准确的结果(最多 1 个 ULP (https://en.wikipedia.org/wiki/Unit_in_the_last_place))。 这是不可避免的,这篇文章 (https://people.eecs.berkeley.edu/~wkahan/LOG10HAF.TXT) 解释了为什么不可能也没有必要计算超越函数的精确结果。
由于可能存在不准确性,我建议用户调用这些函数时将精度 (scale) 设置为至少高于所需的 1。 如果 absolutely 需要精确的结果,用户可以将精度 (scale) 加倍,然后截断。
标准数学库中的超越函数是:
•
s(x)
•
c(x)
•
a(x)
•
l(x)
•
e(x)
•
j(x, n)
扩展数学库中的超越函数是:
•
l2(x)
•
l10(x)
•
log(x, b)
•
pi(p)
•
t(x)
•
a2(y, x)
•
sin(x)
•
cos(x)
•
tan(x)
•
atan(x)
•
atan2(y, x)
•
r2d(x)
•
d2r(x)
当 bc(1) 遇到错误或它具有非默认处理程序的信号时,它会重置。 这意味着发生了几件事。
首先,任何正在执行的函数都会停止并从堆栈中弹出。 这种行为与编程语言中的异常没有什么不同。 然后设置执行点,以便跳过任何等待执行的代码(在所有函数返回之后)。
因此,当 bc(1) 重置时,它会跳过任何剩余的等待执行的代码。 然后,如果它是交互模式,并且错误不是致命错误(参见 退出状态 部分),它会要求更多输入;否则,它会以适当的返回码退出。
请注意,此重置行为与 GNU bc(1) 不同,后者试图在导致错误的语句之后立即开始执行语句。
大多数 bc(1) 实现使用 char 类型一次计算 1 个十进制数字的值,但这可能很慢。这个 bc(1) 做了一些不同的事情。
它使用大整数一次计算多于 1 个十进制数字。如果在 BC_LONG_BIT (参见 LIMITS 部分)为 64 的环境中构建,则每个整数都有 9 个十进制数字。 如果在 BC_LONG_BIT 为 32 的环境中构建,则每个整数都有 4 个十进制数字。 这个值(每个大整数的小数位数)称为 BC_BASE_DIGS。
BC_LONG_BIT 和 BC_BASE_DIGS 的实际值可以通过 limits 语句查询。
此外,此 bc(1) 使用更大的整数进行溢出检查。此整数类型取决于 BC_LONG_BIT 的值,但始终至少是用于存储数字的整数类型的两倍。
以下是 bc(1) 的限制:
BC_LONG_BIT
构建 bc(1) 的环境中 long t类型的位数。这决定在一个大整数中可以存储多少个十进制数字(请参阅性 性能 部分)。
BC_BASE_DIGS
每个大整数的小数位数(请参阅 性能 部分)。取决于 BC_LONG_BIT。
BC_BASE_POW
每个大整数可以存储的最大十进制数(参见 BC_BASE_DIGS) 加1。取决于 BC_BASE_DIGS。
BC_OVERFLOW_MAX
溢出类型(参见 性能 部分)可以容纳的最大数量。取决于 BC_LONG_BIT。
BC_BASE_MAX
最大输出基数。设置为 BC_BASE_POW。
BC_DIM_MAX
数组的最大大小。设置为 SIZE_MAX-1。
BC_SCALE_MAX
最大 scale.设置为 BC_OVERFLOW_MAX-1。
BC_STRING_MAX
字符串的最大长度。设置为 BC_OVERFLOW_MAX-1。
BC_NAME_MAX
标识符的最大长度。设置为 BC_OVERFLOW_MAX-1。
BC_NUM_MAX
数字的最大长度(十进制数字),包括小数点后的数字。设置为 BC_OVERFLOW_MAX-1。
BC_RAND_MAX
rand() 运算符返回的最大整数(包括)。设置为 2^BC_LONG_BIT-1。
指数
最大允许指数(正或负)。设置为 BC_OVERFLOW_MAX。
变量数
变量/数组的最大数量。设置为 SIZE_MAX-1。
实际值可以通过 limits 语句查询。
这些限制实际上是不存在的;限制是如此之大(至少在 64 位机器上)以至它们不成问题。 事实上,在达到这些限制之前,内存应该已经耗尽。
bc(1) 识别以下环境变量:
POSIXLY_CORRECT
如果此变量存在(无论内容如何),bc(1) 的行为就如同给出 -s 选项一样。
BC_ENV_ARGS
这是为 bc(1) 提供命令行参数的另一种方法。它们应该与所有其他命令行参数的格式相同。这些总是首先处理,因此 BC_ENV_ARGS 中给出的任何文件都将在命令行中给出的参数和文件之前处理。 这使用户能够设置每次调用时使用的 “standard” 选项和文件。 此类文件包含的最有用的东西是用户每次运行 bc(1) 时可能想要的有用功能。
解析 BC_ENV_ARGS 的代码将正确处理带引号的参数,但它不理解转义序列。 例如,字符串 “/home/gavin/some bc file.bc” 将被正确解析,但字符串 “/home/gavin/some "bc" file.bc” 将包含反斜杠。
引号解析将处理任何一种引号, ’ 或 “ 。 因此,如果您有一个文件名中包含任意数量的单引号,您可以使用双引号作为外部引号,如 ”some `bc' file.bc" ,反之亦然,如果您有一个带有双引号的文件。但是,由于解析的复杂性,不支持在 BC_ENV_ARGS 中处理具有两种引号的文件,尽管在由 shell 完成解析的命令行上仍然支持此类文件。
BC_LINE_LENGTH
如果此环境变量存在并且包含大于 1 且小于 UINT16_MAX (2^16-1) 的整数,则 bc(1) 将输出该长度的行,包括反斜杠 (\)。 默认行长为 70。
bc(1) 返回以下退出状态:
0
没有错误。
1
出现数学错误。这遵循使用 1 表示预期错误的标准做法,因为数学错误将在正常执行过程中发生。
数学错误包括除以 0 、取负数的平方根、使用负数作为伪随机数生成器的界限、尝试将负数转换为硬件整数、将数字转换为硬件时溢出整数,并尝试在需要整数的地方使用非整数。
幂 (^)、位 (@)、左移 (<<) 和右移 (>>) 运算符及其对应的赋值运算符的第二个操作数转换为硬件整数。
2
发生解析错误。
解析错误包括意外的 EOF 、使用无效字符、未能找到字符串或注释的结尾、使用无效的标记、给出无效的表达式、给出无效的打印语句、给出无效的函数定义、尝试分配到一个不是命名表达式的表达式(参见 语法 部分的 命名表达式 小节),给出一个无效的 auto 列表,有一个重复的 auto/函数参数,找不到代码块的结尾,试图返回一个值来自 void 函数,尝试使用变量作为引用,并在给出选项 -s 或任何等效项时使用任何扩展。
3
发生运行时错误。
运行时错误包括将无效编号分配给 ibase、obase 或 scale ;给 read() 调用一个错误的表达式,在 read() 调用中调用 read() ,键入错误,将错误数量的参数传递给函数,尝试调用未定义的函数,以及尝试使用 void 函数调用作为表达式中的值。
4
发生致命错误。
致命错误包括内存分配错误、I/O 错误、无法打开文件、尝试使用不只有 ASCII 字符的文件(bc(1) 只接受 ASCII 字符)、尝试将目录作为文件打开以及给出无效的命令行选项。
退出状态 4 是特殊的;当发生致命错误时,无论 bc(1) 处于何种模式,bc(1) 总是退出并返回 4 。
仅当 bc(1) 未处于交互模式时才会返回其他状态(请参阅 交互模式 部分),因为 bc(1) 会重置其状态(请参阅 重置 部分)并在其中一个错误发生时接受更多输入交互模式。当**-i** 标志或 --interactive 选项强制交互模式时也是如此。
这些退出状态允许 bc(1) 在带有错误检查的 shell 脚本中使用,并且可以通过使用 -i 标志或 --interactive 选项强制其正常行为。
根据标准 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html),bc(1) 具有交互模式和非交互模式。 当 stdin 和 stdout 都连接到终端时,交互模式会自动打开,但 -i 标志和 --interactive 选项可以在其他情况下打开它。
在交互模式下,bc(1) 会尝试从错误中恢复(请参阅 重置 部分),并且在正常执行中,一旦当前输入的执行完成,就会刷新 stdout 。
如果 stdin、 stdout 和 stderr 都连接到 TTY,bc(1) 将打开 “TTY 模式”。
启用历史记录需要 TTY 模式(请参阅 命令行历史 部分)。还需要启用对 SIGINT 信号的特殊处理。
提示在 TTY 模式下启用。
TTY 模式与交互模式不同,因为在 bc(1) 规范 (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html) 中需要交互模式,而交互模式只需要 stdin 和 stdout 即可连接到一个终端。
发送 SIGINT 将导致 bc(1) 停止执行当前输入。 如果 bc(1) 处于 TTY 模式(参见 TTY 模式 部分),它将重置(参见 重置 部分)。否则,它将清理并退出。
请注意, “current input” 可能意味着两件事之一。 如果 bc(1) 在 TTY 模式下处理来自 stdin 的输入,它将要求更多输入。 如果 bc(1) 正在以 TTY 模式处理来自文件的输入,它将停止处理该文件并开始处理下一个文件(如果存在),或者如果其他文件不存在则从 stdin 请求输入。
这意味着如果在执行文件时将 SIGINT 发送到 bc(1),则 bc(1) 似乎没有响应该信号,因为它将立即开始执行下一个文件。这是设计使然;用户在与 bc(1) 交互时执行的大多数文件都有函数定义,可以快速解析。如果文件需要很长时间才能执行,则该文件中可能存在错误。其余文件仍然可以毫无问题地执行,允许用户继续。
SIGTERM 和 SIGQUIT 导致 bc(1) 清理并退出,并且它对所有其他信号使用默认处理程序。一个例外是 SIGHUP 。在这种情况下,当 bc(1) 处于 TTY 模式时, SIGHUP 将导致 bc(1) 清理并退出。
bc(1) 支持交互式命令行编辑。如果 bc(1) 处于 TTY 模式(请参阅 TTY 模式 部分),则启用历史记录。可以使用箭头键调用和编辑以前的行。
注意: 制表符转换为 8 个空格。
此 bc(1) 支持为不同的语言环境添加错误消息,因此支持 LC_MESSAGES。
dc(1)
bc(1) 符合 IEEE Std 1003.1-2017 (“POSIX.1-2017”) (https://pubs.opengroup.org/onlinepubs/9699919799/utilities/bc.html)规范。标志 -efghiqsvVw 、所有长选项以及上面提到的扩展都是对该规范的扩展。
请注意,规范明确指出 bc(1) 仅接受使用句点 (.) 作为小数点的数字,而不管 LC_NUMERIC 的值如何。
此 bc(1) 支持不同语言环境的错误消息,因此它支持 LC_MESSAGES。
没有一个是已知的。在 https://git.yzena.com/gavin/bc 报告错误。
Gavin D. Howard [email protected] 和贡献者。
March 2021
Gavin D. Howard
ftp [-46AadefginpRtVv] [-N netrc] [-o output] [-P port] [-q quittime] [-r retry] [-s srcaddr] [-T dir,max [,inc]] [[user@]host [port]] [[user@]host:[path][/]] [file:///path] [ftp://[user[:password]@]host[:port]/path[/][;type=X]] [http://[user[:password]@]host[:port]/path] [...] ftp -u URL file [...]
ftp 是 Internet 标准文件传输协议的用户界面。 该程序允许用户将文件传输到远程网络站点或从远程网络站点传输文件。
最后五个参数将使用 FTP 或 HTTP 协议或通过直接复制来获取文件到当前目录。 这是脚本的理想选择。 有关详细信息,请参阅下面的 AUTO-FETCHING 文件 。
选项可以在命令行中指定,也可以在命令解释器中指定。
强制 ftp 仅使用 IPv4 地址。
强制 ftp 仅使用 IPv6 地址。
强制激活模式 ftp。 默认情况下, ftp- 将尝试使用被动模式 ftp 并在服务器不支持被动时回退到主动模式。 此选项使 ftp 始终使用活动连接。 它仅对连接到未正确实施被动模式的非常旧的服务器有用。
使 ftp 绕过正常的登录过程,而使用匿名登录。
启用调试。
禁用命令行编辑。这对于 Emacs ange-ftp 模式很有用。
强制为通过 FTP 或 HTTP 代理的传输重新加载缓存。
禁用文件名通配。
在多个文件传输期间关闭交互式提示。
-N netrc
使用 netrc 而不是 ~/.netrc 。 有关更多信息,请参阅 .netrc 文件。
限制 ftp 在初始连接时尝试 “auto-login” 以进行非自动获取传输。 如果启用了自动登录, ftp 将检查用户主目录中的 .netrc (见下文)文件中是否存在描述远程计算机上帐户的条目。 如果不存在条目, ftp 将提示输入远程机器的登录名(默认是本地机器上的用户身份),并且如果需要,提示输入密码和登录帐户。 要覆盖自动获取传输的自动登录,请根据需要指定用户名(以及可选的密码)。
-o output
自动获取文件时,将内容保存在 output 中。 根据下面的文 文件命名约定 解析 output 。 如果 output 不是 ‘-’ 或不以 ‘|’ 开头,那么只有指定的第一个文件将被检索到 output; 所有其他文件将被检索到其远程名称的基本名称中。
-P port
将端口号设置为 port 。
启用被动模式操作以在连接过滤防火墙后面使用。 此选项已被弃用,因为 ftp 现在默认尝试使用被动模式,如果服务器不支持被动连接,则回退到主动模式。
-q quittime
如果连接停止了 quittime 秒,则退出。
重新启动所有非代理自动提取。
-r wait
如果连接失败,请重试连接尝试,暂停 wait 几秒钟。
-s srcaddr
使用 srcaddr 作为所有连接的本地 IP 地址。
启用数据包跟踪。
-T direction,maximum[,increment]
将 direction 的最大传输速率设置为 maximum 字节/秒,如果指定,则将增量设置为 increment 字节/秒。 有关更多信息,请参阅 rate 。
-u URL file [...]
在命令行上将文件上传到 URL ,其中 URL 是 auto-fetch 支持的一种 ftp URL 类型(对于单个文件上传具有可选的目标文件名),并且 file 是要上传的一个或多个本地文件。
禁用 verbose 和 progress 当输出到终端时覆盖默认启用。
启用 verbose 和 progress 。 如果输出到终端,这是默认设置(在 progress 的情况下, ftp 是前台进程)。 强制 ftp 显示来自远程服务器的所有响应,并报告数据传输统计信息。
可以在命令行上指定 ftp 与之通信的客户端主机。 如果这样做了, ftp 将立即尝试与该主机上的 FTP 服务器建立连接;否则, ftp 将进入其命令解释器并等待用户的指令。 当 ftp 正在等待来自用户的命令时,会向用户提供提示 ‘ftp>’ 。 ftp 可以识别以下命令:
! [command [args]]
在本地机器上调用交互式 shell。 如果有参数,则第一个被视为直接执行的命令,其余参数作为其参数。
$ macro-name [args]
执行使用 macdef 命令定义的 macro-name 。 参数被传递给未覆盖的宏。
account [passwd]
成功完成登录后,提供远程系统访问资源所需的补充密码。 如果不包含参数,将在非回显输入模式下提示用户输入帐户密码。
append local-file [remote-file]
将本地文件附加到远程计算机上的文件。 如果未指定 remote-file ,则本地文件名在被任何 ntrans 或 nmap 设置更改后用于命名远程文件。 文件传输使用 type 、 format 、 mode 和 structure 的当前设置。
将文件传输 type 设置为网络 ASCII 。 这是默认类型。
安排在每个文件传输命令完成后响铃。
设置文件传输 type 以支持二进制图像传输。
终止与远程服务器的 FTP 会话并退出 ftp 。 文件结束也将终止会话并退出。
在 get 、 mget 和 mput 命令期间切换远程计算机文件名大小写映射。 case 写开启时(默认关闭),远程计算机文件名全部大写,写入本地目录,字母映射为小写。
cd remote-directory
将远程机器上的工作目录更改为 remote-directory 。
将远程机器工作目录更改为当前远程机器工作目录的父级。
chmod mode remote-file
将远程系统上的文件 remote-file 的权限模式更改为 mode 。
终止与远程服务器的 FTP 会话,并返回命令解释器。 任何定义的宏都会被删除。
在 ascii 类型文件检索期间切换回车剥离。 在 ascii 类型文件传输期间,记录由回车/换行序列表示。 当 cr 打开时(默认),从这个序列中去除回车符以符合 UNIX 单换行记录分隔符。 非 UNIX 远程系统上的记录可能包含单个换行符;当进行 ascii 类型的传输时,只有当 cr 关闭时,这些换行符才能与记录分隔符区分开来。
delete remote-file
删除远程机器上的文件 remote-file 。
dir [remote-path [local-file]]
打印远程机器上目录内容的列表。 该列表包括服务器选择包含的任何系统相关信息;例如,大多数 UNIX 系统会从命令 ‘ls -l’ 产生输出。 如果未指定 remote-path ,则使用当前工作目录。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 dir 输出的目标本地文件。 如果未指定本地文件,或者 local-file 为 ‘-’ ,则将输出发送到终端。
close 的同义词。
切换命令行编辑以及上下文相关的命令和文件完成。 如果输入来自终端,则会自动启用,否则禁用。
分别在所有 IP、IPv4 和 IPv6 连接上切换扩展 EPSV 和 EPRT 命令的使用。 首先尝试 EPSV / EPRT, 然后再尝试 PASV / PORT 。 这是默认启用的。如果扩展命令失败,则此选项将在当前连接期间暂时禁用,或者直到 epsv 、 epsv4 或 epsv6 再次执行。
bye 的同义词。
显示远程服务器支持的功能(使用 FEAT 命令)。
fget localfile
检索 localfile 中列出的文件,每个文件名有一行。
form format
将文件传输 form 设置为 format 。 默认(也是唯一受支持的)格式是 “non-print” 。
ftp host [port]
open 的同义词。
ftp_debug [ftp_debug-value]
切换调试模式。 如果指定了可选的 ftp_debug-value ,则它用于设置调试级别。 当调试打开时, ftp 打印发送到远程机器的每个命令,前面是字符串 ‘-->’ 。
gate [host [port]]
切换 gate-ftp 模式,该模式用于通过 TIS FWTK 和 Gauntlet ftp 代理进行连接。 如果尚未设置 gate-ftp 服务器(无论是由用户明确设置,还是来自 FTPSERVER 环境变量),则不允许这样做。 如果给定了 host ,则将启用 gate-ftp 模式,并将 gate-ftp 服务器设置为 host 。 如果还给出了 port ,则该端口将用作连接到 gate-ftp 服务器的端口。
get remote-file [local-file]
检索 remote-file 并将其存储在本地计算机上。 如果未指定本地文件名,则使用与远程计算机上相同的名称,但会受到当前 case 、 ntrans 和 nmap 设置的更改。 传输文件时使用 type 、 form 、 mode 和 structure 的当前设置。
切换 mdelete 、 mget 、 mput 和 mreget 的文件名扩展。 如果使用 glob 关闭了 globbing,则文件名参数按字面意思获取,而不是扩展。 mput 的通配符在 csh(1) 中完成。 对于 mdelete 、 mget 和 mreget, 每个远程文件名在远程计算机上单独展开,并且列表不会合并。 目录名的扩展可能和普通文件名的扩展不同:具体结果取决于国外操作系统和ftp服务器,可以通过 ‘mls remote-files -’ 来预览 注意: mget 、 mput 和 mreget 并不意味着传输文件的整个目录子树。 这可以通过传输子树的 tar(1) 存档(以二进制模式)来完成。
hash [size]
为每个传输的数据块切换哈希符号 (‘#’) 打印。 数据块的大小默认为 1024 字节。 这可以通过以字节为单位指定 size 来更改。 启用 hash 会禁用 progress 。
help [command]
打印有关 command 含义的信息性消息。如果没有给出参数, ftp- 会打印一个已知命令的列表。
idle [seconds]
将远程服务器上的不活动计时器设置为 seconds 秒。 如果省略 seconds ,则打印当前的不活动计时器。
binary 的同义词。
lcd [directory]
更改本地计算机上的工作目录。 如果未指定 directory ,则使用用户的主目录。
less file
page 的同义词。
lpage local-file
使用 set pager 选项指定的程序显示 local-file 。
打印本地机器上的工作目录。
ls [remote-path [local-file]]
dir 的同义词。
macdef macro-name
定义一个宏。 后续行存储为 macro-name; 空行(文件中的连续换行符或终端回车)终止宏输入模式。 在所有定义的宏中有 16 个宏和 4096 个字符的限制。 宏名称最多可包含 8 个字符。 宏仅适用于它们在其中定义的当前会话(或者如果在会话之外定义,则适用于使用下一个打 open 命令调用的会话),并且在执行 close 命令之前一直保持定义。 要调用宏,请使用 $ 命令(见上文)。
宏处理器将 ‘$’ 和 ‘\’ 解释为特殊字符。 ‘$’ 后跟一个数字(或多个数字)被宏调用命令行上的相应参数替换。 ‘$’ 后跟 ‘i’ 向宏处理器发出信号,表明正在执行的宏将被循环。 在第一次传递中, “$i” 被宏调用命令行上的第一个参数替换,在第二次传递中,它被第二个参数替换,依此类推。 后跟任何字符的 ‘\’ 将被该字符替换。 使用 ‘\’ 防止对 ‘$’ 进行特殊处理。
mdelete [remote-files]
删除远程机器上的 remote-files 。
mdir remote-files local-file
与 dir 类似,但可以指定多个远程文件。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 mdir 输出的目标本地文件。
mget remote-files
展开远程机器上的 remote-files ,并对由此产生的每个文件名执行一次 get 。 有关文件名扩展的详细信息,请参见 glob 。 然后将根据 case 、 ntrans 和 nmap 设置处理生成的文件名。 文件转移到本地工作目录,可以用 ‘lcd directory’; 可以使用 ‘! mkdir directory’ 创建新的本地目录。
mkdir directory-name
在远程机器上创建一个目录。
mls remote-files local-file
和 ls 一样,除了可以指定多个远程文件,而且必须指定 local-file 。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 mls 输出的目标本地文件。
mlsd [remote-path]
使用 MLSD 以机器可解析的形式显示 remote-path 的内容(如果没有给出,则默认为当前目录)。 显示的格式可以用 ‘remopts mlst ...’ 来改变。
mlst [remote-path]
使用 MLST 以机器可解析的形式显示 remote-path 的详细信息(如果未给出,则默认为当前目录)。 显示的格式可以用 ‘remopts mlst ...’ 来改变。
mode mode-name
将文件传输 mode 设置为 mode-name 。 默认(也是唯一受支持的)模式是 “stream” 。
modtime remote-file
以 RFC2822 格式显示文件在远程机器上的最后修改时间。
more file
page 的同义词。
mput local-files
在作为参数给出的本地文件列表中展开通配符,并对结果列表中的每个文件执行 put 。 有关文件名扩展的详细信息,请参见 glob 。 然后将根据 ntrans 和 nmap 设置处理生成的文件名。
mreget remote-files
根据 mget, 但执行 reget 而不是 get 。
msend local-files
mput 的同义词。
newer remote-file [local-file]
仅当远程文件的修改时间比当前系统上的文件更新时才获取该文件。 如果当前系统上不存在该文件,则认为远程文件 newer 。 否则,此命令与 get 相同。
nlist [remote-path [local-file]]
ls 的同义词。
nmap [inpattern outpattern]
设置或取消设置文件名映射机制。 如果未指定参数,则未设置文件名映射机制。 如果指定了参数,则在 mput 命令期间映射远程文件名,并在没有指定远程目标文件名的情况下发出 put 命令。 如果指定了参数,则在 mget 命令期间映射本地文件名,并在没有指定本地目标文件名的情况下发出 get 命令。 当连接到具有不同文件命名约定或实践的非 UNIX 远程计算机时,此命令很有用。 映射遵循由 inpattern 和 outpattern 设置的模式。 [Inpattern] 是传入文件名的模板(可能已经根据 ntrans 和 case 设置进行了处理)。 变量模板是通过在 inpattern 中包含序列 “$1 、” “$2 、” ... “$9” 来完成的。 使用 ‘\’ 来防止对 ‘$’ 字符进行这种特殊处理。 所有其他字符都按字面意思处理,并用于确定 nmap [inpattern] 变量值。 例如, inpattern $1.$2 和远程文件名 "mydata.data", $1 将具有值 "mydata",而 $2 将具有值 "data"。 outpattern 确定生成的映射文件名。 序列 “$1 、” “$2 、” ... “$9” 被替换为来自 inpattern 模板的任何值。 序列 “$0” 被原始文件名替换。 此外,如果 [seq1] 不是空字符串,则序列 “[seq1, seq2]” 被替换为 seq1 ;否则被 seq2 替换。 例如,命令
nmap $1.$2.$3 [$1,$2].[$2,file]
将为输入文件名 "myfile.data" 和 "myfile.data.old" 生成输出文件名 "myfile.data" ,为输入文件名 "myfile" 生成输出文件名 "myfile.file" ,为输入文件名生成 ".myfile" 生成输出文件名 "myfile.myfile" 。 空格可能包含在 outpattern 中,如示例中所示:
nmap $1 sed s/ *$// > $1
使用 ‘\’ 字符可防止对 ‘$ 、’ ‘[ 、’ ‘]’ 和 ‘,’ 字符进行特殊处理。
ntrans [inchars [outchars]]
设置或取消设置文件名字符翻译机制。 如果未指定参数,则未设置文件名字符转换机制。 如果指定了参数,则远程文件名中的字符在 mput 命令和未指定远程目标文件名的情况下发出的 put 命令期间进行转换。 如果指定了参数,本地文件名中的字符将在 mget 命令和 get 命令期间进行转换,而无需指定本地目标文件名。 当连接到具有不同文件命名约定或实践的非 UNIX 远程计算机时,此命令很有用。 与 inchars 中的字符匹配的文件名中的字符将替换为 outchars 中的相应字符。 如果字符在 inchars 中的位置长于 outchars 的长度,则从文件名中删除该字符。
open host [port]
建立与指定 host FTP 服务器的连接。 可以提供可选的端口号,在这种情况下, ftp 将尝试联系该端口的 FTP 服务器。 如果 set auto-login 选项打开(默认), ftp 还将尝试自动将用户登录到 FTP 服务器(见下文)。
page file
使用 set pager 选项指定的程序检索 file 并显示。
passive [auto]
切换被动模式(如果没有给出参数)。 如果给出了 auto ,就好像 FTPMODE 设置为 ‘auto’ 一样。 如果被动模式打开(默认), ftp 将为所有数据连接发送 PASV 命令而不是 PORT 命令。 PASV 命令请求远程服务器为数据连接打开一个端口并返回该端口的地址。 远程服务器侦听该端口,客户端连接到它。 当使用更传统的 PORT 命令时,客户端侦听端口并将该地址发送到远程服务器,远程服务器连接回它。 当通过网关路由器或控制流量方向的主机使用 ftp 时,被动模式很有用。 (请注意,尽管 RFC1123 要求 FTP 服务器支持 PASV 命令,但有些不支持。)
pdir [remote-path]
执行 dir [remote-path], 并使用 set pager 选项指定的程序显示结果。
pls [remote-path]
执行 ls [remote-path], 并使用 set pager 选项指定的程序显示结果。
pmlsd [remote-path]
执行 mlsd [remote-path], 并使用 set pager 选项指定的程序显示结果。
切换对检索到的文件的修改时间的保留。
切换传输进度条的显示。 对于 local-file 为 ‘-’ 或以 ‘|’ 开头的命令的传输,进度条将被禁用。 有关详细信息,请参阅 文件命名约定 。启用 progress 会禁用 hash 。
切换交互式提示。 在多个文件传输期间发生交互式提示,以允许用户有选择地检索或存储文件。 如果提示关闭(默认开启),任何 mget 或 mput 都会传输所有文件,任何 mdelete 都会删除所有文件。
提示打开时,提示符下可以使用以下命令:
对当前文件回答 ‘yes’ ,并自动对当前命令的任何剩余文件回答 ‘yes’ 。
回答 ‘no’ ,不要传输文件。
对当前文件回答 ‘yes’ ,并关闭提示模式(因为已给出 “prompt off” )。
终止当前操作。
回答 ‘yes’ ,然后传输文件。
显示帮助消息。
任何其他响应都会对当前文件回答 ‘yes’ 。
proxy ftp-command
代理 ftp 命令 在辅助控制连接上执行 ftp 命令。 此命令允许同时连接到两个远程 FTP 服务器,以便在两个服务器之间传输文件。 第一个 proxy 命令应该是 open 的,以建立辅助控制连接。 输入命令 "proxy ?" 查看辅助连接上可执行的其他 FTP 命令。 以下命令以 proxy 开头时的行为不同: open 不会在自动登录过程中定义新的宏, close 不会删除现有的宏定义, get 和 mget 将文件从主控制连接上的主机传输到辅助控制连接上的主机控制连接,以及从辅助控制连接上的主机到主控制连接上的主机的 put 、 mput 和 append 传输文件。 第三方文件传输取决于辅助控制连接上的服务器对 FTP 协议 PASV 命令的支持。
put local-file [remote-file]
在远程机器上存储本地文件。 如果未指定 remote-file ,则在根据任何 ntrans 或 nmap 设置处理后使用本地文件名来命名远程文件。 文件传输使用 type 、 format 、 mode 和 structure 的当前设置。
打印远程机器上当前工作目录的名称。
bye 的同义词。
quote arg1 arg2 ...
指定的参数被逐字发送到远程 FTP 服务器。
rate direction [maximum [increment]]
将最大传输速率限制为 maximum 字节/秒。 如果 maximum 值为 0,则禁用油门。
direction 可以是以下之一:
两个方向。
传入转账。
传出转账。
每次接收到给定信号时, maximum 可以通过 increment 字节(默认值:1024)动态修改:
按 increment 字节递增 maximum 。
按 increment 节递减 maximum 。 结果必须是正数。
如果未提供 maximum ,则显示当前油门速率。
注意:尚未为 ascii 模式传输实现 rate 。
rcvbuf size
将套接字接收缓冲区的大小设置为 size 。
recv remote-file [local-file]
get 的同义词。
reget remote-file [local-file]
reget 的行为类似于 get, 除了如果 local-file 存在并且小于 remote-file, 则假定 local-file 是 remote-file 的部分传输副本,并且从明显的故障点继续传输。 当通过容易断开连接的网络传输非常大的文件时,此命令很有用。
remopts command [command-options]
将远程 FTP 服务器上的 command 选项设置为 command-options (其缺失将根据特定命令进行处理)。 已知支持选项的远程 FTP 命令包括: ‘MLST’ (用于 MLSD 和 MLST )。
rename [from [to]]
将 from 从远程机器上重命名为文件 to 。
清除回复队列。 此命令将命令/回复序列与远程 FTP 服务器重新同步。 在远程服务器违反 FTP 协议后,可能需要重新同步。
restart marker
在指示的 marker 处重新启动紧随其后的 get 或 put 。 在 UNIX 系统上,标记通常是文件中的字节偏移量。
rhelp [command-name]
向远程 FTP 服务器请求帮助。 如果指定了 command-name ,它也会提供给服务器。
rmdir directory-name
删除远程机器上的目录。
rstatus [remote-file]
不带参数,显示远程机器的状态。 如果指定了 remote-file ,则显示远程机器上 remote-file 的状态。
切换在本地系统上使用唯一文件名存储文件。 如果已存在名称等于 get 或 mget 命令的目标本地文件名的文件,则在名称后附加 ".1" 。 如果生成的名称与另一个现有文件匹配,则会将 ".2" 附加到原始名称。 如果此过程持续到 ".99", 则会打印一条错误消息,并且不会进行传输。 将报告生成的唯一文件名。 请注意, runique 不会影响从 shell 命令生成的本地文件(见下文)。 默认值为关闭。
send local-file [remote-file]
put 的同义词。
切换 PORT 命令的使用。 默认情况下, ftp 将在为每次数据传输建立连接时尝试使用 PORT 命令。 使用 PORT 命令可以防止在执行多个文件传输时出现延迟。 如果 PORT 命令失败, ftp 将使用默认数据端口。 当禁止使用 PORT 命令时,不会尝试对每次数据传输使用 PORT 命令。 这对于某些忽略 FTP 命令但错误地表明它们已被接受的 PORT 实现很有用。
set [option value]
将 option 设置为 value 。如果未给出 option 和 value ,则显示所有选项及其值。当前支持的选项有:
默认为 $FTPANONPASS
默认为 $ftp_proxy
默认为 $http_proxy
默认为 $no_proxy
默认为 $PAGER
默认为 $FTPPROMPT
默认为 $FTPRPROMPT
site arg1 arg2 ...
指定的参数作为 SITE 命令逐字发送到远程 FTP 服务器。
size remote-file
返回远程机器上 remote-file 的大小。
sndbuf size
将套接字发送缓冲区的大小设置为 size 。
显示 ftp 的当前状态。
struct struct-name
将文件传输 structure 设置为 struct-name 。 默认(也是唯一受支持的)结构是 “file” 。
切换以唯一文件名在远程计算机上存储文件。 远程 FTP 服务器必须支持 FTP 协议 STOU 命令才能成功完成。 远程服务器将报告唯一名称。默认值为关闭
显示远程机器上运行的操作系统类型。
将文件传输类型设置为与 TENEX 机器通信所需的类型。
rate 的同义词。
切换数据包跟踪。
type [type-name]
将文件传输 type 设置为 type-name 。 如果未指定类型,则打印当前类型。 默认类型是网络 ASCII 。
umask [newmask]
将远程服务器上的默认 umask 设置为 newmask 。 如果省略 newmask ,则打印当前的 umask。
unset option
取消设置 option 。有关详细信息,请参阅 set 。
usage command
打印 command 的使用信息。
user user-name [password [account]]
向远程 FTP 服务器表明自己的身份。 如果没有指定 password 并且服务器需要它, ftp 将提示用户输入它(在禁用本地回显之后)。 如果未指定 account 字段,而 FTP 服务器需要它,则会提示用户输入。 如果指定了 account 字段,则在远程服务器不需要登录时,将在登录序列完成后将帐户命令中继到远程服务器。 除非在禁用 “auto-login” 的情况下调用 ftp ,否则此过程会在初始连接到 FTP 服务器时自动完成。
切换详细模式。 在详细模式下,来自 FTP 服务器的所有响应都会显示给用户。 此外,如果打开详细信息,当文件传输完成时,会报告有关传输效率的统计信息。 默认情况下,详细是打开的。
xferbuf size
将套接字发送和接收缓冲区的大小设置为 size 。
? [command]
help 的同义词。
嵌入空格的命令参数可以用引号 ‘"’ 标记。
切换设置的命令可以采用明确的 on 或 off 参数来适当地强制设置。
将字节数作为参数的命令(例如, hash 、 rate 和 xferbuf) 支持参数上的可选后缀,这会改变参数的解释。 支持的后缀是:
导致没有修改。(选修的)
Kilo; 将参数乘以 1024
Mega; 将参数乘以 1048576
Giga; 将参数乘以 1073741824
如果 ftp 在传输过程中收到 SIGINFO (参见 stty(1) 的 “status” 参数)或 SIGQUIT 信号,则当前传输速率统计信息将被写入标准错误输出,格式与标准完成相同信息。
除了标准命令外,此版本的 ftp 还支持自动获取功能。 要启用自动获取,只需在命令行上传递主机名/文件列表。
以下格式是自动获取元素的有效语法:
[user@]host:[path][/]
“Classic” FTP 格式。
如果 path 包含一个 glob 字符并且启用了 glob,(请参阅 glob), 则执行相当于 ‘mget path’ 的操作。
如果 path- 的目录组件不包含通配符,则在当前目录中以 path 的名称 basename(请参阅 basename(1)) 本地存储。 否则,使用完整的远程名称作为本地名称,相对于本地根目录。
ftp://[user[:password]@]host[:port]/path[/][;type=X]
如果未定义设置 set ftp_proxy ,则使用 FTP 协议检索 FTP URL。 否则,通过 set ftp_proxy 中定义的代理使用 HTTP 传输 URL。如果未定义 set ftp_proxy 并且给出了 user ,则以 user 身份登录。 在这种情况下,如果提供了 password ,请使用密码,否则提示用户输入密码。
如果提供了 ‘;type=A’ 或 ‘;type=I’ 的后缀,则传输类型将分别以 ascii 或二进制进行。 默认传输类型是二进制。
为了符合 RFC3986, ftp 将 “ftp://” 自动获取 URL 的 path 部分解释如下:
host[:port] 之后的 ‘/’ 被解释为 path 之前的分隔符,而不是 path 本身的一部分。
该 path 被解释为以 ‘/ 分隔的名称组件列表。 对于除最后一个这样的组件之外的所有组件, ftp 执行相当于 cd 命令。 对于最后一个路径组件, ftp 执行与 get 命令等效的操作。’
由 path 中的 ‘//’ 或 path 开头的额外 ‘/’ 产生的空名称组件将导致相当于没有目录名称的 cd 命令。这不太可能有用。
路径组件中的任何 ‘%XX’ 代码(根据 RFC3986) 都将被解码,其中 XX 表示十六进制的字符代码。 此解码发生在 path 被拆分为组件之后,但在每个组件用于相当于 cd 或 get 命令之前。 一些常用的代码是 ‘%2F’ (代表 ‘/’) 和 ‘%7E’ (代表 ‘~’ )。
上述解释具有以下后果:
该路径相对于指定用户或 ‘anonymous’ 用户的默认登录目录进行解释。 如果需要 / 目录,请使用 “%2F” 的前导路径。 如果需要用户的主目录(并且远程服务器支持该语法),请使用 “%7Euser/” 的前导路径。 例如,要以用户 ‘myname’ 和密码 ‘mypass’ 的身份从 ‘localhost’ 检索 /etc/motd ,请使用 “ftp://myname:mypass@localhost/%2fetc/motd”
精确的 cd 和 get 命令可以通过仔细选择在何处使用 ‘/’ 以及在何处使用 ‘%2F’ (或 ‘%2f’ )来控制。 例如,以下 URL 对应于指示命令的等效项:
ftp://host/dir1/dir2/file
“cd dir1”, “cd dir2”, “get file”.
ftp://host/%2Fdir1/dir2/file
“cd /dir1”, “cd dir2”, “get file”.
ftp://host/dir1%2Fdir2/file
“cd dir1/dir2”, “get file”.
ftp://host/%2Fdir1%2Fdir2/file
“cd /dir1/dir2”, “get file”.
ftp://host/dir1%2Fdir2%2Ffile
“get dir1/dir2/file”.
ftp://host/%2Fdir1%2Fdir2%2Ffile
“get /dir1/dir2/file”.
您必须对与 cd 命令等效的每个中间目录具有适当的访问权限。
http://[user[:password]@]host[:port]/path
使用 HTTP 协议检索的 HTTP URL。 如果定义了 set http_proxy ,它将用作 HTTP 代理服务器的 URL。 如果需要 HTTP 授权来检索 path, 并且 ‘user’ (以及可选的 ‘password’) 在 URL 中,则使用它们进行首次身份验证。
file:///path
本地 URL,从本地主机上的 /path 复制。
about:topic
显示有关 topic 的信息;没有为此自动获取的元素检索文件。 支持的值包括:
有关 ftp 的信息。
ftp 的版本。 在报告问题时提供。
除非上面另有说明,并且没有给出 -o output ,否则该文件将作为 path 的 basename(1) 存储在当前目录中。 请注意,如果收到 HTTP 重定向,则使用服务器提供的新目标 URL 和相应的新 path 重试获取。 建议使用显式 -o output ,以避免写入意外的文件名。
如果经典格式或 FTP URL 格式有尾随 ‘/’ 或空 path 组件,则 ftp 将连接到站点并 cd 到作为路径给出的目录,并让用户处于交互模式以准备进一步输入。 如果正在使用 set ftp_proxy ,这将不起作用。
直接 HTTP 传输使用 HTTP 1.1。代理 FTP 和 HTTP 传输使用 HTTP 1.0。
如果给出 -R ,所有不通过 FTP 或 HTTP 代理的自动获取将重新启动。 对于 FTP, 这是通过使用 reget 而不是 get 来实现的。 对于 HTTP, 这是通过使用 ‘Range: bytes=’ HTTP/1.1 指令来实现的。
如果需要 WWW 或代理 WWW 身份验证,系统将提示您输入用户名和密码以进行身份验证。
在 URL 中指定 IPv6 数字地址时,您需要将地址括在方括号中。 例如: “ftp://[::1]:21/” 。 这是因为冒号用于 IPv6 数字地址以及作为端口号的分隔符。
要中止文件传输,请使用终端中断键(通常为 Ctrl-C)。 发送转账将立即停止。 通过向远程服务器发送 FTP 协议 ABOR 命令并丢弃接收到的任何进一步数据,将停止接收传输。 完成此操作的速度取决于远程服务器对 ABOR 处理的支持。 如果远程服务器不支持 ABOR 命令,则在远程服务器完成发送请求的文件之前不会出现提示。
如果在 ftp 等待远程服务器对 ABOR 处理的回复时使用终端中断键序列,则连接将被关闭。 这与传统行为(在此阶段忽略终端中断)不同,但被认为更有用。
根据以下规则处理指定为 ftp 命令的参数的文件。
如果指定了文件名 ‘-’ ,则使用 stdin (用于读取)或 stdout (用于写入)。
如果文件名的第一个字符是 ‘|’, 则参数的其余部分被解释为 shell 命令。 然后 ftp 使用带有参数的 popen(3) 分叉一个 shell,并从标准输出 (stdin) 读取(写入)。 如果 shell 命令包含空格,则参数必须加引号;例如 ““| ls -lt”” 。 这种机制的一个特别有用的例子是: “dir "" |more” 。
如果上述检查失败,如果启用了 “globbing” ,则本地文件名将根据 csh(1) 中使用的规则进行扩展;请参阅 glob 命令。 如果 ftp 命令需要一个本地文件(例如 put ),则只使用 "globbing" 操作生成的第一个文件名。
对于未指定本地文件名的 mget 命令和 get 命令,本地文件名是远程文件名,可以通过 case 、 ntrans 或 nmap 设置进行更改。 如果 runique 打开,则生成的文件名可能会被更改。
对于具有未指定远程文件名的 mput 命令和 put 命令,远程文件名是本地文件名,可以通过 ntrans 或 nmap 设置进行更改。 如果打开了 sunique ,远程服务器可能会更改生成的文件名。
FTP 规范指定了许多可能影响文件传输的参数。 type 可以是 “ascii 、” “image” (二进制)、 “ebcdic” 和 “local byte size” 之一(主要用于 PDP-10's 和 PDP-20's )。 ftp 支持 ascii 和 image 类型的文件传输,以及用于 tenex 模式传输的本地字节大小 8。
ftp 仅支持其余文件传输参数的默认值: mode 、 form 和 struct 。
.netrc 文件包含自动登录过程使用的登录和初始化信息。 它驻留在用户的主目录中,除非被 -N netrc 选项覆盖,或在 NETRC 环境变量中指定。 识别以下标记;它们可以用空格、制表符或换行符分隔:
machine name
识别远程机器 name 。 自动登录进程在 .netrc 文件中搜索与 ftp 命令行上指定的远程机器匹配的 machine 令牌或作为 open 命令参数。 一旦匹配成功,后续的 .netrc 令牌就会被处理,当到达文件末尾或遇到另一 machine 或 default 令牌时停止。
除了 default 匹配任何名称外,这与 machine name 相同。 default 令牌只能有一个,而且必须是所有 machine 令牌。 这通常用作:
default login anonymous password user@site
从而使用户可以自动匿名 FTP 登录到 .netrc 中未指定的机器。这可以通过使用 -n 标志来禁用自动登录来覆盖。
login name
识别远程机器上的用户。 如果存在此令牌,则自动登录过程将使用指定的 name 启动登录。
password string
提供密码。 如果存在此令牌,并且远程服务器在登录过程中需要密码,则自动登录过程将提供指定的字符串。 请注意,如果 .netrc 文件中存在除 anonymous 以外的任何用户的此令牌,则如果该用户以外的任何人都可以读取 .netrc ,则 ftp 将中止自动登录过程。
account string
提供额外的帐户密码。 如果此令牌存在,如果远程服务器需要额外的帐户密码,自动登录进程将提供指定的字符串,否则自动登录进程将启动 ACCT 命令。
macdef name
定义一个宏。此令牌的功能类似于 ftp macdef 命令功能。 使用指定名称定义宏;它的内容从下一个 .netrc 行开始,一直持续到遇到空行(连续的换行符)。 与 .netrc 文件中的其他标记一样, macdef 仅适用于它之前的 machine 定义。 一个 macdef 条目不能被多个 machine 定义使用;相反,它必须在它打算使用的每台 machine 之后定义。 如果定义了名为 init 的宏,它会作为自动登录过程的最后一步自动执行。例如,
default macdef init epsv4 off
后跟一个空行。
ftp 通过 editline(3) 库支持交互式命令行编辑。 它通过 edit 命令启用,如果输入来自 tty,则默认启用。 可以使用箭头键调用和编辑以前的行,也可以使用其他 GNU Emacs 样式的编辑键。
editline(3) 库配置了一个 .editrc 文件 - 请参阅 editrc(5) 了解更多信息。
ftp 可以使用额外的键绑定来提供上下文相关的命令和文件名完成(包括远程文件完成)。 要使用它,请将一个键绑定到 editline(3) 命令 ftp-complete 。 默认情况下,它绑定到 TAB 键。
默认情况下, ftp 向用户显示命令行提示符 “ftp> ” 。 这可以使用 set prompt 命令进行更改。
使用 set rprompt 命令可以在屏幕右侧(输入命令后)显示提示。
以下格式序列由给定信息替换:
当前的远程工作目录。
%c[[0]n],%.[[0]n]
当前远程工作目录的尾随组件,如果给出数字 n ,则为 n 尾随组件。 如果 n 以 ‘0’ 开头,则跳过的组件数在尾随组件之前,格式为 “/``<number>trailing” (用于 ‘%c’) 或 “...trailing” (用于 ‘%.’) 。
远程主机名。
远程主机名,直到第一个 ‘.’ 。
远程用户名。
一个 ‘%’ 。
ftp 使用以下环境变量。
在匿名 FTP 传输中发送的密码。默认为 “ `whoami`@” 。
覆盖默认操作模式。 支持值是:
仅主动模式 FTP
自动确定被动或主动(这是默认设置)
gate-ftp 模式
仅被动模式 FTP
要使用的命令行提示符。 默认为 “ftp> ” 。 有关详细信息,请参阅 命令行提示 。
要使用的命令行右侧提示。 默认为 “” 。 有关详细信息,请参阅 命令行提示 。
启用 gate 时用作 gate-ftp 服务器的主机。
启用 gate 时连接到 gate-ftp 服务器时使用的端口。 默认是 “ftpgate/tcp” 的 getservbyname() 查找返回的端口。
为 HTTP User-Agent 标头发送的值。
对于 .netrc 文件的默认位置(如果存在)。
.netrc 文件的备用位置。
由各种命令用来显示文件。如果为空或未设置,则默认为 more(1) 。
对于默认 shell。
发出 FTP URL 请求时使用的 FTP 代理的 URL(如果未定义,则使用标准 FTP 协议)。
有关代理使用的更多说明,请参阅 http_proxy 。
发出 HTTP URL 请求时使用的 HTTP 代理的 URL。 如果需要代理身份验证并且此 URL 中有用户名和密码,它们将在首次尝试对代理进行身份验证时自动使用。
如果用户名或密码中需要 “unsafe” 的 URL 字符(例如 ‘@’ 或 ‘/’), 请使用 RFC3986 ‘%XX’ 编码对它们进行编码。
请注意,在 ftp_proxy 和 http_proxy 中使用用户名和密码可能与使用它的其他程序(例如 lynx(1)) 不兼容。
注意: 注意:这不用于交互式会话,仅用于命令行获取。
不使用代理的主机(或域)的空格或逗号分隔列表。 每个条目可能有一个可选的尾随 ":port", 它将匹配限制为与该端口的连接。
某些防火墙配置不允许 ftp 使用扩展被动模式。 如果您发现即使是简单的 ls 在打印如下消息后也出现挂起:
229 Entering Extended Passive Mode (|||58551|)
那么您将需要在关闭 epsv4 的情况下禁用扩展被动模式。 有关如何自动执行此操作的示例,请参见上面的 .netrc 文件部分。
getservbyname(3), editrc(5), services(5), ftpd(8)
ftp 尝试遵守:
文件传输协议
主机要求 - 应用程序和支持
如何使用匿名 FTP
文件传输协议的特性协商机制
IPv6 和 NAT 的 FTP 扩展
超文本传输协议——HTTP/1.1
互联网消息格式
FTP 扩展
统一资源标识符 (URI)
ftp 命令出现在 4.2BSD 中。
各种功能,例如命令行编辑、上下文相关的命令和文件完成、动态进度条、文件和 URL 的自动获取、修改时间保存、传输速率限制、可配置的命令行提示符,以及标准 BSD ftp 的其他增强功能都在 NetBSD 1.3 及更高版本由 Luke Mewburn ⟨[email protected]⟩ 。
WIDE/KAME 项目添加了 IPv6 支持(但可能不会出现在该程序的所有非 NetBSD 版本中,这取决于操作系统是否以与 KAME 类似的方式支持 IPv6)。
许多命令的正确执行取决于远程服务器的正确行为。
4.2BSD ascii 模式传输代码中的回车处理错误已得到纠正。 此更正可能导致二进制文件与使用 ascii 类型的 4.2BSD 服务器之间的错误传输。 使用二进制图像类型可以避免此问题。
ftp 假定所有 IPv4 映射地址(格式为 ::ffff:10.1.1.1 的 IPv6 地址)表示可以由 AF_INET 套接字处理的 IPv4 目标。 但是,在某些 IPv6 网络配置中,此假设不成立。 在这样的环境中,IPv4 映射地址必须直接传递给 AF_INET6 套接字。 例如,如果您的站点使用 SIIT 转换器进行 IPv6 到 IPv4 的转换,则 ftp 无法支持您的配置。
May 10, 2008
FreeBSD 13.1-RELEASE
FTP(1)
FTP(1)
FreeBSD General Commands Manual
FTP(1)
ftp —
Internet 文件传输程序
ftp [-46AadefginpRtVv] [-N netrc] [-o output] [-P port] [-q quittime] [-r retry] [-s srcaddr] [-T dir,max [,inc]] [[user@]host [port]] [[user@]host:[path][/]] [file:///
ftp 是 Internet 标准文件传输协议的用户界面。 该程序允许用户将文件传输到远程网络站点或从远程网络站点传输文件。
最后五个参数将使用 FTP 或 HTTP 协议或通过直接复制来获取文件到当前目录。 这是脚本的理想选择。 有关详细信息,请参阅下面的 。
选项可以在命令行中指定,也可以在命令解释器中指定。
强制 ftp 仅使用 IPv4 地址。
强制 ftp 仅使用 IPv6 地址。
强制激活模式 ftp。 默认情况下, ftp- 将尝试使用被动模式 ftp 并在服务器不支持被动时回退到主动模式。 此选项使 ftp 始终使用活动连接。 它仅对连接到未正确实施被动模式的非常旧的服务器有用。
使 ftp 绕过正常的登录过程,而使用匿名登录。
启用调试。
禁用命令行编辑。这对于 Emacs ange-ftp 模式很有用。
强制为通过 FTP 或 HTTP 代理的传输重新加载缓存。
禁用文件名通配。
在多个文件传输期间关闭交互式提示。
netrc
使用 netrc 而不是 ~/.netrc 。 有关更多信息,请参阅 文件。
限制 ftp 在初始连接时尝试 “auto-login” 以进行非自动获取传输。 如果启用了自动登录, ftp 将检查用户主目录中的 .netrc (见下文)文件中是否存在描述远程计算机上帐户的条目。 如果不存在条目, ftp 将提示输入远程机器的登录名(默认是本地机器上的用户身份),并且如果需要,提示输入密码和登录帐户。 要覆盖自动获取传输的自动登录,请根据需要指定用户名(以及可选的密码)。
output
自动获取文件时,将内容保存在 output 中。 根据下面的文 解析 output 。 如果 output 不是 ‘-’ 或不以 ‘|’ 开头,那么只有指定的第一个文件将被检索到 output; 所有其他文件将被检索到其远程名称的基本名称中。
port
将端口号设置为 port 。
启用被动模式操作以在连接过滤防火墙后面使用。 此选项已被弃用,因为 ftp 现在默认尝试使用被动模式,如果服务器不支持被动连接,则回退到主动模式。
quittime
如果连接停止了 quittime 秒,则退出。
重新启动所有非代理自动提取。
wait
如果连接失败,请重试连接尝试,暂停 wait 几秒钟。
srcaddr
使用 srcaddr 作为所有连接的本地 IP 地址。
启用数据包跟踪。
direction,maximum[,increment]
将 direction 的最大传输速率设置为 maximum 字节/秒,如果指定,则将增量设置为 increment 字节/秒。 有关更多信息,请参阅 rate 。
URL file [...]
在命令行上将文件上传到 URL ,其中 URL 是 auto-fetch 支持的一种 ftp URL 类型(对于单个文件上传具有可选的目标文件名),并且 file 是要上传的一个或多个本地文件。
禁用 verbose 和 progress 当输出到终端时覆盖默认启用。
启用 verbose 和 progress 。 如果输出到终端,这是默认设置(在 progress 的情况下, ftp 是前台进程)。 强制 ftp 显示来自远程服务器的所有响应,并报告数据传输统计信息。
可以在命令行上指定 ftp 与之通信的客户端主机。 如果这样做了, ftp 将立即尝试与该主机上的 FTP 服务器建立连接;否则, ftp 将进入其命令解释器并等待用户的指令。 当 ftp 正在等待来自用户的命令时,会向用户提供提示 ‘ftp>’ 。 ftp 可以识别以下命令:
[command [args]]
在本地机器上调用交互式 shell。 如果有参数,则第一个被视为直接执行的命令,其余参数作为其参数。
macro-name [args]
执行使用 macdef 命令定义的 macro-name 。 参数被传递给未覆盖的宏。
[passwd]
成功完成登录后,提供远程系统访问资源所需的补充密码。 如果不包含参数,将在非回显输入模式下提示用户输入帐户密码。
local-file [remote-file]
将本地文件附加到远程计算机上的文件。 如果未指定 remote-file ,则本地文件名在被任何 ntrans 或 nmap 设置更改后用于命名远程文件。 文件传输使用 type 、 format 、 mode 和 structure 的当前设置。
将文件传输 type 设置为网络 ASCII 。 这是默认类型。
安排在每个文件传输命令完成后响铃。
设置文件传输 type 以支持二进制图像传输。
终止与远程服务器的 FTP 会话并退出 ftp 。 文件结束也将终止会话并退出。
在 get 、 mget 和 mput 命令期间切换远程计算机文件名大小写映射。 case 写开启时(默认关闭),远程计算机文件名全部大写,写入本地目录,字母映射为小写。
remote-directory
将远程机器上的工作目录更改为 remote-directory 。
将远程机器工作目录更改为当前远程机器工作目录的父级。
mode remote-file
将远程系统上的文件 remote-file 的权限模式更改为 mode 。
终止与远程服务器的 FTP 会话,并返回命令解释器。 任何定义的宏都会被删除。
在 ascii 类型文件检索期间切换回车剥离。 在 ascii 类型文件传输期间,记录由回车/换行序列表示。 当 cr 打开时(默认),从这个序列中去除回车符以符合 UNIX 单换行记录分隔符。 非 UNIX 远程系统上的记录可能包含单个换行符;当进行 ascii 类型的传输时,只有当 cr 关闭时,这些换行符才能与记录分隔符区分开来。
remote-file
删除远程机器上的文件 remote-file 。
[remote-path [local-file]]
打印远程机器上目录内容的列表。 该列表包括服务器选择包含的任何系统相关信息;例如,大多数 UNIX 系统会从命令 ‘ls -l’ 产生输出。 如果未指定 remote-path ,则使用当前工作目录。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 dir 输出的目标本地文件。 如果未指定本地文件,或者 local-file 为 ‘-’ ,则将输出发送到终端。
的同义词。
切换命令行编辑以及上下文相关的命令和文件完成。 如果输入来自终端,则会自动启用,否则禁用。
分别在所有 IP、IPv4 和 IPv6 连接上切换扩展 EPSV 和 EPRT 命令的使用。 首先尝试 EPSV / EPRT, 然后再尝试 PASV / PORT 。 这是默认启用的。如果扩展命令失败,则此选项将在当前连接期间暂时禁用,或者直到 epsv 、 epsv4 或 epsv6 再次执行。
的同义词。
显示远程服务器支持的功能(使用 FEAT 命令)。
localfile
检索 localfile 中列出的文件,每个文件名有一行。
format
将文件传输 form 设置为 format 。 默认(也是唯一受支持的)格式是 “non-print” 。
host [port]
的同义词。
[ftp_debug-value]
切换调试模式。 如果指定了可选的 ftp_debug-value ,则它用于设置调试级别。 当调试打开时, ftp 打印发送到远程机器的每个命令,前面是字符串 ‘-->’ 。
[host [port]]
切换 gate-ftp 模式,该模式用于通过 TIS FWTK 和 Gauntlet ftp 代理进行连接。 如果尚未设置 gate-ftp 服务器(无论是由用户明确设置,还是来自 FTPSERVER 环境变量),则不允许这样做。 如果给定了 host ,则将启用 gate-ftp 模式,并将 gate-ftp 服务器设置为 host 。 如果还给出了 port ,则该端口将用作连接到 gate-ftp 服务器的端口。
remote-file [local-file]
检索 remote-file 并将其存储在本地计算机上。 如果未指定本地文件名,则使用与远程计算机上相同的名称,但会受到当前 case 、 ntrans 和 nmap 设置的更改。 传输文件时使用 type 、 form 、 mode 和 structure 的当前设置。
切换 mdelete 、 mget 、 mput 和 mreget 的文件名扩展。 如果使用 glob 关闭了 globbing,则文件名参数按字面意思获取,而不是扩展。 mput 的通配符在 csh(1) 中完成。 对于 mdelete 、 mget 和 mreget, 每个远程文件名在远程计算机上单独展开,并且列表不会合并。 目录名的扩展可能和普通文件名的扩展不同:具体结果取决于国外操作系统和ftp服务器,可以通过 ‘mls remote-files -’ 来预览 注意: mget 、 mput 和 mreget 并不意味着传输文件的整个目录子树。 这可以通过传输子树的 tar(1) 存档(以二进制模式)来完成。
[size]
为每个传输的数据块切换哈希符号 (‘#’) 打印。 数据块的大小默认为 1024 字节。 这可以通过以字节为单位指定 size 来更改。 启用 hash 会禁用 progress 。
[command]
打印有关 command 含义的信息性消息。如果没有给出参数, ftp- 会打印一个已知命令的列表。
[seconds]
将远程服务器上的不活动计时器设置为 seconds 秒。 如果省略 seconds ,则打印当前的不活动计时器。
的同义词。
[directory]
更改本地计算机上的工作目录。 如果未指定 directory ,则使用用户的主目录。
file
的同义词。
local-file
使用 set pager 选项指定的程序显示 local-file 。
打印本地机器上的工作目录。
[remote-path [local-file]]
的同义词。
macro-name
定义一个宏。 后续行存储为 macro-name; 空行(文件中的连续换行符或终端回车)终止宏输入模式。 在所有定义的宏中有 16 个宏和 4096 个字符的限制。 宏名称最多可包含 8 个字符。 宏仅适用于它们在其中定义的当前会话(或者如果在会话之外定义,则适用于使用下一个打 open 命令调用的会话),并且在执行 close 命令之前一直保持定义。 要调用宏,请使用 $ 命令(见上文)。
宏处理器将 ‘$’ 和 ‘\’ 解释为特殊字符。 ‘$’ 后跟一个数字(或多个数字)被宏调用命令行上的相应参数替换。 ‘$’ 后跟 ‘i’ 向宏处理器发出信号,表明正在执行的宏将被循环。 在第一次传递中, “$i” 被宏调用命令行上的第一个参数替换,在第二次传递中,它被第二个参数替换,依此类推。 后跟任何字符的 ‘\’ 将被该字符替换。 使用 ‘\’ 防止对 ‘$’ 进行特殊处理。
[remote-files]
删除远程机器上的 remote-files 。
remote-files local-file
与 dir 类似,但可以指定多个远程文件。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 mdir 输出的目标本地文件。
remote-files
展开远程机器上的 remote-files ,并对由此产生的每个文件名执行一次 get 。 有关文件名扩展的详细信息,请参见 glob 。 然后将根据 case 、 ntrans 和 nmap 设置处理生成的文件名。 文件转移到本地工作目录,可以用 ‘lcd directory’; 可以使用 ‘! mkdir directory’ 创建新的本地目录。
directory-name
在远程机器上创建一个目录。
remote-files local-file
和 ls 一样,除了可以指定多个远程文件,而且必须指定 local-file 。 如果交互式提示打开, ftp 将提示用户验证最后一个参数是否确实是接收 mls 输出的目标本地文件。
[remote-path]
使用 MLSD 以机器可解析的形式显示 remote-path 的内容(如果没有给出,则默认为当前目录)。 显示的格式可以用 ‘remopts mlst ...’ 来改变。
[remote-path]
使用 MLST 以机器可解析的形式显示 remote-path 的详细信息(如果未给出,则默认为当前目录)。 显示的格式可以用 ‘remopts mlst ...’ 来改变。
mode-name
将文件传输 mode 设置为 mode-name 。 默认(也是唯一受支持的)模式是 “stream” 。
remote-file
以 RFC2822 格式显示文件在远程机器上的最后修改时间。
file
的同义词。
local-files
在作为参数给出的本地文件列表中展开通配符,并对结果列表中的每个文件执行 put 。 有关文件名扩展的详细信息,请参见 glob 。 然后将根据 ntrans 和 nmap 设置处理生成的文件名。
remote-files
根据 mget, 但执行 reget 而不是 get 。
local-files
的同义词。
remote-file [local-file]
仅当远程文件的修改时间比当前系统上的文件更新时才获取该文件。 如果当前系统上不存在该文件,则认为远程文件 newer 。 否则,此命令与 get 相同。
[remote-path [local-file]]
的同义词。
[inpattern outpattern]
设置或取消设置文件名映射机制。 如果未指定参数,则未设置文件名映射机制。 如果指定了参数,则在 mput 命令期间映射远程文件名,并在没有指定远程目标文件名的情况下发出 put 命令。 如果指定了参数,则在 mget 命令期间映射本地文件名,并在没有指定本地目标文件名的情况下发出 get 命令。 当连接到具有不同文件命名约定或实践的非 UNIX 远程计算机时,此命令很有用。 映射遵循由 inpattern 和 outpattern 设置的模式。 [Inpattern] 是传入文件名的模板(可能已经根据 ntrans 和 case 设置进行了处理)。 变量模板是通过在 inpattern 中包含序列 “$1 、” “$2 、” ... “$9” 来完成的。 使用 ‘\’ 来防止对 ‘$’ 字符进行这种特殊处理。 所有其他字符都按字面意思处理,并用于确定 nmap [inpattern] 变量值。 例如, inpattern $1.$2 和远程文件名 "mydata.data", $1 将具有值 "mydata",而 $2 将具有值 "data"。 outpattern 确定生成的映射文件名。 序列 “$1 、” “$2 、” ... “$9” 被替换为来自 inpattern 模板的任何值。 序列 “$0” 被原始文件名替换。 此外,如果 [seq1] 不是空字符串,则序列 “[seq1, seq2]” 被替换为 seq1 ;否则被 seq2 替换。 例如,命令
nmap $1.$2.$3 [$1,$2].[$2,file]
将为输入文件名 "myfile.data" 和 "myfile.data.old" 生成输出文件名 "myfile.data" ,为输入文件名 "myfile" 生成输出文件名 "myfile.file" ,为输入文件名生成 ".myfile" 生成输出文件名 "myfile.myfile" 。 空格可能包含在 outpattern 中,如示例中所示:
nmap $1 sed s/ *$// > $1
使用 ‘\’ 字符可防止对 ‘$ 、’ ‘[ 、’ ‘]’ 和 ‘,’ 字符进行特殊处理。
[inchars [outchars]]
设置或取消设置文件名字符翻译机制。 如果未指定参数,则未设置文件名字符转换机制。 如果指定了参数,则远程文件名中的字符在 mput 命令和未指定远程目标文件名的情况下发出的 put 命令期间进行转换。 如果指定了参数,本地文件名中的字符将在 mget 命令和 get 命令期间进行转换,而无需指定本地目标文件名。 当连接到具有不同文件命名约定或实践的非 UNIX 远程计算机时,此命令很有用。 与 inchars 中的字符匹配的文件名中的字符将替换为 outchars 中的相应字符。 如果字符在 inchars 中的位置长于 outchars 的长度,则从文件名中删除该字符。
host [port]
建立与指定 host FTP 服务器的连接。 可以提供可选的端口号,在这种情况下, ftp 将尝试联系该端口的 FTP 服务器。 如果 set auto-login 选项打开(默认), ftp 还将尝试自动将用户登录到 FTP 服务器(见下文)。
file
使用 set pager 选项指定的程序检索 file 并显示。
[auto]
切换被动模式(如果没有给出参数)。 如果给出了 auto ,就好像 FTPMODE 设置为 ‘auto’ 一样。 如果被动模式打开(默认), ftp 将为所有数据连接发送 PASV 命令而不是 PORT 命令。 PASV 命令请求远程服务器为数据连接打开一个端口并返回该端口的地址。 远程服务器侦听该端口,客户端连接到它。 当使用更传统的 PORT 命令时,客户端侦听端口并将该地址发送到远程服务器,远程服务器连接回它。 当通过网关路由器或控制流量方向的主机使用 ftp 时,被动模式很有用。 (请注意,尽管 RFC1123 要求 FTP 服务器支持 PASV 命令,但有些不支持。)
[remote-path]
执行 dir [remote-path], 并使用 set pager 选项指定的程序显示结果。
[remote-path]
执行 ls [remote-path], 并使用 set pager 选项指定的程序显示结果。
[remote-path]
执行 mlsd [remote-path], 并使用 set pager 选项指定的程序显示结果。
切换对检索到的文件的修改时间的保留。
切换传输进度条的显示。 对于 local-file 为 ‘-’ 或以 ‘|’ 开头的命令的传输,进度条将被禁用。 有关详细信息,请参阅 。启用 progress 会禁用 hash 。
切换交互式提示。 在多个文件传输期间发生交互式提示,以允许用户有选择地检索或存储文件。 如果提示关闭(默认开启),任何 mget 或 mput 都会传输所有文件,任何 mdelete 都会删除所有文件。
提示打开时,提示符下可以使用以下命令:
对当前文件回答 ‘yes’ ,并自动对当前命令的任何剩余文件回答 ‘yes’ 。
回答 ‘no’ ,不要传输文件。
对当前文件回答 ‘yes’ ,并关闭提示模式(因为已给出 “prompt off” )。
终止当前操作。
回答 ‘yes’ ,然后传输文件。
显示帮助消息。
任何其他响应都会对当前文件回答 ‘yes’ 。
ftp-command
代理 ftp 命令 在辅助控制连接上执行 ftp 命令。 此命令允许同时连接到两个远程 FTP 服务器,以便在两个服务器之间传输文件。 第一个 proxy 命令应该是 open 的,以建立辅助控制连接。 输入命令 "proxy ?" 查看辅助连接上可执行的其他 FTP 命令。 以下命令以 proxy 开头时的行为不同: open 不会在自动登录过程中定义新的宏, close 不会删除现有的宏定义, get 和 mget 将文件从主控制连接上的主机传输到辅助控制连接上的主机控制连接,以及从辅助控制连接上的主机到主控制连接上的主机的 put 、 mput 和 append 传输文件。 第三方文件传输取决于辅助控制连接上的服务器对 FTP 协议 PASV 命令的支持。
local-file [remote-file]
在远程机器上存储本地文件。 如果未指定 remote-file ,则在根据任何 ntrans 或 nmap 设置处理后使用本地文件名来命名远程文件。 文件传输使用 type 、 format 、 mode 和 structure 的当前设置。
打印远程机器上当前工作目录的名称。
的同义词。
arg1 arg2 ...
指定的参数被逐字发送到远程 FTP 服务器。
direction [maximum [increment]]
将最大传输速率限制为 maximum 字节/秒。 如果 maximum 值为 0,则禁用油门。
direction 可以是以下之一:
两个方向。
传入转账。
传出转账。
每次接收到给定信号时, maximum 可以通过 increment 字节(默认值:1024)动态修改:
按 increment 字节递增 maximum 。
按 increment 节递减 maximum 。 结果必须是正数。
如果未提供 maximum ,则显示当前油门速率。
注意:尚未为 ascii 模式传输实现 rate 。
size
将套接字接收缓冲区的大小设置为 size 。
remote-file [local-file]
的同义词。
remote-file [local-file]
的行为类似于 get, 除了如果 local-file 存在并且小于 remote-file, 则假定 local-file 是 remote-file 的部分传输副本,并且从明显的故障点继续传输。 当通过容易断开连接的网络传输非常大的文件时,此命令很有用。
command [command-options]
将远程 FTP 服务器上的 command 选项设置为 command-options (其缺失将根据特定命令进行处理)。 已知支持选项的远程 FTP 命令包括: ‘MLST’ (用于 MLSD 和 MLST )。
[from [to]]
将 from 从远程机器上重命名为文件 to 。
清除回复队列。 此命令将命令/回复序列与远程 FTP 服务器重新同步。 在远程服务器违反 FTP 协议后,可能需要重新同步。
marker
在指示的 marker 处重新启动紧随其后的 get 或 put 。 在 UNIX 系统上,标记通常是文件中的字节偏移量。
[command-name]
向远程 FTP 服务器请求帮助。 如果指定了 command-name ,它也会提供给服务器。
directory-name
删除远程机器上的目录。
[remote-file]
不带参数,显示远程机器的状态。 如果指定了 remote-file ,则显示远程机器上 remote-file 的状态。
切换在本地系统上使用唯一文件名存储文件。 如果已存在名称等于 get 或 mget 命令的目标本地文件名的文件,则在名称后附加 ".1" 。 如果生成的名称与另一个现有文件匹配,则会将 ".2" 附加到原始名称。 如果此过程持续到 ".99", 则会打印一条错误消息,并且不会进行传输。 将报告生成的唯一文件名。 请注意, runique 不会影响从 shell 命令生成的本地文件(见下文)。 默认值为关闭。
local-file [remote-file]
的同义词。
切换 PORT 命令的使用。 默认情况下, ftp 将在为每次数据传输建立连接时尝试使用 PORT 命令。 使用 PORT 命令可以防止在执行多个文件传输时出现延迟。 如果 PORT 命令失败, ftp 将使用默认数据端口。 当禁止使用 PORT 命令时,不会尝试对每次数据传输使用 PORT 命令。 这对于某些忽略 FTP 命令但错误地表明它们已被接受的 PORT 实现很有用。
[option value]
将 option 设置为 value 。如果未给出 option 和 value ,则显示所有选项及其值。当前支持的选项有:
默认为 $FTPANONPASS
默认为 $ftp_proxy
默认为 $http_proxy
默认为 $no_proxy
默认为 $PAGER
默认为 $FTPPROMPT
默认为 $FTPRPROMPT
arg1 arg2 ...
指定的参数作为 SITE 命令逐字发送到远程 FTP 服务器。
remote-file
返回远程机器上 remote-file 的大小。
size
将套接字发送缓冲区的大小设置为 size 。
显示 ftp 的当前状态。
struct-name
将文件传输 structure 设置为 struct-name 。 默认(也是唯一受支持的)结构是 “file” 。
切换以唯一文件名在远程计算机上存储文件。 远程 FTP 服务器必须支持 FTP 协议 STOU 命令才能成功完成。 远程服务器将报告唯一名称。默认值为关闭
显示远程机器上运行的操作系统类型。
将文件传输类型设置为与 TENEX 机器通信所需的类型。
的同义词。
切换数据包跟踪。
[type-name]
将文件传输 type 设置为 type-name 。 如果未指定类型,则打印当前类型。 默认类型是网络 ASCII 。
[newmask]
将远程服务器上的默认 umask 设置为 newmask 。 如果省略 newmask ,则打印当前的 umask。
option
取消设置 option 。有关详细信息,请参阅 set 。
command
打印 command 的使用信息。
user-name [password [account]]
向远程 FTP 服务器表明自己的身份。 如果没有指定 password 并且服务器需要它, ftp 将提示用户输入它(在禁用本地回显之后)。 如果未指定 account 字段,而 FTP 服务器需要它,则会提示用户输入。 如果指定了 account 字段,则在远程服务器不需要登录时,将在登录序列完成后将帐户命令中继到远程服务器。 除非在禁用 “auto-login” 的情况下调用 ftp ,否则此过程会在初始连接到 FTP 服务器时自动完成。
切换详细模式。 在详细模式下,来自 FTP 服务器的所有响应都会显示给用户。 此外,如果打开详细信息,当文件传输完成时,会报告有关传输效率的统计信息。 默认情况下,详细是打开的。
size
将套接字发送和接收缓冲区的大小设置为 size 。
[command]
的同义词。
嵌入空格的命令参数可以用引号 ‘"’ 标记。
切换设置的命令可以采用明确的 on 或 off 参数来适当地强制设置。
将字节数作为参数的命令(例如, hash 、 rate 和 xferbuf) 支持参数上的可选后缀,这会改变参数的解释。 支持的后缀是:
导致没有修改。(选修的)
Kilo; 将参数乘以 1024
Mega; 将参数乘以 1048576
Giga; 将参数乘以 1073741824
如果 ftp 在传输过程中收到 SIGINFO (参见 stty(1) 的 “status” 参数)或 SIGQUIT 信号,则当前传输速率统计信息将被写入标准错误输出,格式与标准完成相同信息。
除了标准命令外,此版本的 ftp 还支持自动获取功能。 要启用自动获取,只需在命令行上传递主机名/文件列表。
以下格式是自动获取元素的有效语法:
[user@]host:[path][/]
“Classic” FTP 格式。
如果 path 包含一个 glob 字符并且启用了 glob,(请参阅 glob), 则执行相当于 ‘mget path’ 的操作。
如果 path- 的目录组件不包含通配符,则在当前目录中以 path 的名称 basename(请参阅 basename(1)) 本地存储。 否则,使用完整的远程名称作为本地名称,相对于本地根目录。
[user[:password]@]host[:port]/path[/][;type=X]
如果未定义设置 set ftp_proxy ,则使用 FTP 协议检索 FTP URL。 否则,通过 set ftp_proxy 中定义的代理使用 HTTP 传输 URL。如果未定义 set ftp_proxy 并且给出了 user ,则以 user 身份登录。 在这种情况下,如果提供了 password ,请使用密码,否则提示用户输入密码。
如果提供了 ‘;type=A’ 或 ‘;type=I’ 的后缀,则传输类型将分别以 ascii 或二进制进行。 默认传输类型是二进制。
为了符合 RFC3986, ftp 将 “ftp://” 自动获取 URL 的 path 部分解释如下:
host[:port] 之后的 ‘/’ 被解释为 path 之前的分隔符,而不是 path 本身的一部分。
该 path 被解释为以 ‘/ 分隔的名称组件列表。 对于除最后一个这样的组件之外的所有组件, ftp 执行相当于 cd 命令。 对于最后一个路径组件, ftp 执行与 get 命令等效的操作。’
上述解释具有以下后果:
该路径相对于指定用户或 ‘anonymous’ 用户的默认登录目录进行解释。 如果需要 / 目录,请使用 “%2F” 的前导路径。 如果需要用户的主目录(并且远程服务器支持该语法),请使用 “%7Euser/” 的前导路径。 例如,要以用户 ‘myname’ 和密码 ‘mypass’ 的身份从 ‘localhost’ 检索 /etc/motd ,请使用 “ftp://myname:mypass@localhost/%2fetc/motd”
精确的 cd 和 get 命令可以通过仔细选择在何处使用 ‘/’ 以及在何处使用 ‘%2F’ (或 ‘%2f’ )来控制。 例如,以下 URL 对应于指示命令的等效项:
ftp://host/dir1/dir2/file
“cd dir1”, “cd dir2”, “get file”.
ftp://host/%2Fdir1/dir2/file
[user[:password]@]host[:port]/path
使用 HTTP 协议检索的 HTTP URL。 如果定义了 set http_proxy ,它将用作 HTTP 代理服务器的 URL。 如果需要 HTTP 授权来检索 path, 并且 ‘user’ (以及可选的 ‘password’) 在 URL 中,则使用它们进行首次身份验证。
path
本地 URL,从本地主机上的 /path 复制。
topic
显示有关 topic 的信息;没有为此自动获取的元素检索文件。 支持的值包括:
有关 ftp 的信息。
ftp 的版本。 在报告问题时提供。
除非上面另有说明,并且没有给出 -o output ,否则该文件将作为 path 的 basename(1) 存储在当前目录中。 请注意,如果收到 HTTP 重定向,则使用服务器提供的新目标 URL 和相应的新 path 重试获取。 建议使用显式 -o output ,以避免写入意外的文件名。
如果经典格式或 FTP URL 格式有尾随 ‘/’ 或空 path 组件,则 ftp 将连接到站点并 cd 到作为路径给出的目录,并让用户处于交互模式以准备进一步输入。 如果正在使用 set ftp_proxy ,这将不起作用。
直接 HTTP 传输使用 HTTP 1.1。代理 FTP 和 HTTP 传输使用 HTTP 1.0。
如果给出 -R ,所有不通过 FTP 或 HTTP 代理的自动获取将重新启动。 对于 FTP, 这是通过使用 reget 而不是 get 来实现的。 对于 HTTP, 这是通过使用 ‘Range: bytes=’ HTTP/1.1 指令来实现的。
如果需要 WWW 或代理 WWW 身份验证,系统将提示您输入用户名和密码以进行身份验证。
在 URL 中指定 IPv6 数字地址时,您需要将地址括在方括号中。 例如: “ftp://[::1]:21/” 。 这是因为冒号用于 IPv6 数字地址以及作为端口号的分隔符。
要中止文件传输,请使用终端中断键(通常为 Ctrl-C)。 发送转账将立即停止。 通过向远程服务器发送 FTP 协议 ABOR 命令并丢弃接收到的任何进一步数据,将停止接收传输。 完成此操作的速度取决于远程服务器对 ABOR 处理的支持。 如果远程服务器不支持 ABOR 命令,则在远程服务器完成发送请求的文件之前不会出现提示。
如果在 ftp 等待远程服务器对 ABOR 处理的回复时使用终端中断键序列,则连接将被关闭。 这与传统行为(在此阶段忽略终端中断)不同,但被认为更有用。
根据以下规则处理指定为 ftp 命令的参数的文件。
如果指定了文件名 ‘-’ ,则使用 stdin (用于读取)或 stdout (用于写入)。
如果文件名的第一个字符是 ‘|’, 则参数的其余部分被解释为 shell 命令。 然后 ftp 使用带有参数的 popen(3) 分叉一个 shell,并从标准输出 (stdin) 读取(写入)。 如果 shell 命令包含空格,则参数必须加引号;例如 ““| ls -lt”” 。 这种机制的一个特别有用的例子是: “dir "" |more” 。
FTP 规范指定了许多可能影响文件传输的参数。 type 可以是 “ascii 、” “image” (二进制)、 “ebcdic” 和 “local byte size” 之一(主要用于 PDP-10's 和 PDP-20's )。 ftp 支持 ascii 和 image 类型的文件传输,以及用于 tenex 模式传输的本地字节大小 8。
ftp 仅支持其余文件传输参数的默认值: mode 、 form 和 struct 。
.netrc 文件包含自动登录过程使用的登录和初始化信息。 它驻留在用户的主目录中,除非被 -N netrc 选项覆盖,或在 NETRC 环境变量中指定。 识别以下标记;它们可以用空格、制表符或换行符分隔:
name
识别远程机器 name 。 自动登录进程在 .netrc 文件中搜索与 ftp 命令行上指定的远程机器匹配的 machine 令牌或作为 open 命令参数。 一旦匹配成功,后续的 .netrc 令牌就会被处理,当到达文件末尾或遇到另一 machine 或 default 令牌时停止。
除了 default 匹配任何名称外,这与 machine name 相同。 default 令牌只能有一个,而且必须是所有 machine 令牌。 这通常用作:
default login anonymous password user@site
从而使用户可以自动匿名 FTP 登录到 .netrc 中未指定的机器。这可以通过使用 -n 标志来禁用自动登录来覆盖。
name
识别远程机器上的用户。 如果存在此令牌,则自动登录过程将使用指定的 name 启动登录。
string
提供密码。 如果存在此令牌,并且远程服务器在登录过程中需要密码,则自动登录过程将提供指定的字符串。 请注意,如果 .netrc 文件中存在除 anonymous 以外的任何用户的此令牌,则如果该用户以外的任何人都可以读取 .netrc ,则 ftp 将中止自动登录过程。
string
提供额外的帐户密码。 如果此令牌存在,如果远程服务器需要额外的帐户密码,自动登录进程将提供指定的字符串,否则自动登录进程将启动 ACCT 命令。
name
定义一个宏。此令牌的功能类似于 ftp macdef 命令功能。 使用指定名称定义宏;它的内容从下一个 .netrc 行开始,一直持续到遇到空行(连续的换行符)。 与 .netrc 文件中的其他标记一样, macdef 仅适用于它之前的 machine 定义。 一个 macdef 条目不能被多个 machine 定义使用;相反,它必须在它打算使用的每台 machine 之后定义。 如果定义了名为 init 的宏,它会作为自动登录过程的最后一步自动执行。例如,
default macdef init epsv4 off
后跟一个空行。
ftp 通过 editline(3) 库支持交互式命令行编辑。 它通过 edit 命令启用,如果输入来自 tty,则默认启用。 可以使用箭头键调用和编辑以前的行,也可以使用其他 GNU Emacs 样式的编辑键。
editline(3) 库配置了一个 .editrc 文件 - 请参阅 editrc(5) 了解更多信息。
ftp 可以使用额外的键绑定来提供上下文相关的命令和文件名完成(包括远程文件完成)。 要使用它,请将一个键绑定到 editline(3) 命令 ftp-complete 。 默认情况下,它绑定到 TAB 键。
默认情况下, ftp 向用户显示命令行提示符 “ftp> ” 。 这可以使用 set prompt 命令进行更改。
使用 set rprompt 命令可以在屏幕右侧(输入命令后)显示提示。
以下格式序列由给定信息替换:
当前的远程工作目录。
%c[[0]n],%.[[0]n]
当前远程工作目录的尾随组件,如果给出数字 n ,则为 n 尾随组件。 如果 n 以 ‘0’ 开头,则跳过的组件数在尾随组件之前,格式为 “/``<number>trailing” (用于 ‘%c’) 或 “...trailing” (用于 ‘%.’) 。
远程主机名。
远程主机名,直到第一个 ‘.’ 。
远程用户名。
一个 ‘%’ 。
ftp 使用以下环境变量。
在匿名 FTP 传输中发送的密码。默认为 “ `whoami`@” 。
覆盖默认操作模式。 支持值是:
仅主动模式 FTP
自动确定被动或主动(这是默认设置)
gate-ftp 模式
仅被动模式 FTP
要使用的命令行提示符。 默认为 “ftp> ” 。 有关详细信息,请参阅 。
要使用的命令行右侧提示。 默认为 “” 。 有关详细信息,请参阅 。
启用 gate 时用作 gate-ftp 服务器的主机。
启用 gate 时连接到 gate-ftp 服务器时使用的端口。 默认是 “ftpgate/tcp” 的 getservbyname() 查找返回的端口。
为 HTTP User-Agent 标头发送的值。
对于 .netrc 文件的默认位置(如果存在)。
.netrc 文件的备用位置。
由各种命令用来显示文件。如果为空或未设置,则默认为 more(1) 。
对于默认 shell。
发出 FTP URL 请求时使用的 FTP 代理的 URL(如果未定义,则使用标准 FTP 协议)。
有关代理使用的更多说明,请参阅 http_proxy 。
发出 HTTP URL 请求时使用的 HTTP 代理的 URL。 如果需要代理身份验证并且此 URL 中有用户名和密码,它们将在首次尝试对代理进行身份验证时自动使用。
如果用户名或密码中需要 “unsafe” 的 URL 字符(例如 ‘@’ 或 ‘/’), 请使用 RFC3986 ‘%XX’ 编码对它们进行编码。
请注意,在 ftp_proxy 和 http_proxy 中使用用户名和密码可能与使用它的其他程序(例如 lynx(1)) 不兼容。
注意: 注意:这不用于交互式会话,仅用于命令行获取。
不使用代理的主机(或域)的空格或逗号分隔列表。 每个条目可能有一个可选的尾随 ":port", 它将匹配限制为与该端口的连接。
某些防火墙配置不允许 ftp 使用扩展被动模式。 如果您发现即使是简单的 ls 在打印如下消息后也出现挂起:
229 Entering Extended Passive Mode (|||58551|)
那么您将需要在关闭 epsv4 的情况下禁用扩展被动模式。 有关如何自动执行此操作的示例,请参见上面的 文件部分。
getservbyname(3), editrc(5), services(5), ftpd(8)
ftp 尝试遵守:
文件传输协议
主机要求 - 应用程序和支持
如何使用匿名 FTP
文件传输协议的特性协商机制
IPv6 和 NAT 的 FTP 扩展
超文本传输协议——HTTP/1.1
互联网消息格式
FTP 扩展
统一资源标识符 (URI)
ftp 命令出现在 4.2BSD 中。
各种功能,例如命令行编辑、上下文相关的命令和文件完成、动态进度条、文件和 URL 的自动获取、修改时间保存、传输速率限制、可配置的命令行提示符,以及标准 BSD ftp 的其他增强功能都在 NetBSD 1.3 及更高版本由 Luke Mewburn ⟨[email protected]⟩ 。
WIDE/KAME 项目添加了 IPv6 支持(但可能不会出现在该程序的所有非 NetBSD 版本中,这取决于操作系统是否以与 KAME 类似的方式支持 IPv6)。
许多命令的正确执行取决于远程服务器的正确行为。
4.2BSD ascii 模式传输代码中的回车处理错误已得到纠正。 此更正可能导致二进制文件与使用 ascii 类型的 4.2BSD 服务器之间的错误传输。 使用二进制图像类型可以避免此问题。
ftp 假定所有 IPv4 映射地址(格式为 ::ffff:10.1.1.1 的 IPv6 地址)表示可以由 AF_INET 套接字处理的 IPv4 目标。 但是,在某些 IPv6 网络配置中,此假设不成立。 在这样的环境中,IPv4 映射地址必须直接传递给 AF_INET6 套接字。 例如,如果您的站点使用 SIIT 转换器进行 IPv6 到 IPv4 的转换,则 ftp 无法支持您的配置。
May 10, 2008
FreeBSD 13.1-RELEASE
ftp://:@://;type=http://:@:/ftp-u由 path 中的 ‘//’ 或 path 开头的额外 ‘/’ 产生的空名称组件将导致相当于没有目录名称的 cd 命令。这不太可能有用。
路径组件中的任何 ‘%XX’ 代码(根据 RFC3986) 都将被解码,其中 XX 表示十六进制的字符代码。 此解码发生在 path 被拆分为组件之后,但在每个组件用于相当于 cd 或 get 命令之前。 一些常用的代码是 ‘%2F’ (代表 ‘/’) 和 ‘%7E’ (代表 ‘~’ )。
ftp://host/dir1%2Fdir2/file
“cd dir1/dir2”, “get file”.
ftp://host/%2Fdir1%2Fdir2/file
“cd /dir1/dir2”, “get file”.
ftp://host/dir1%2Fdir2%2Ffile
“get dir1/dir2/file”.
ftp://host/%2Fdir1%2Fdir2%2Ffile
“get /dir1/dir2/file”.
您必须对与 cd 命令等效的每个中间目录具有适当的访问权限。
globftpput对于未指定本地文件名的 mget 命令和 get 命令,本地文件名是远程文件名,可以通过 case 、 ntrans 或 nmap 设置进行更改。 如果 runique 打开,则生成的文件名可能会被更改。
对于具有未指定远程文件名的 mput 命令和 put 命令,远程文件名是本地文件名,可以通过 ntrans 或 nmap 设置进行更改。 如果打开了 sunique ,远程服务器可能会更改生成的文件名。
TCSH(1)
TCSH(1)
FreeBSD General Commands Manual
TCSH(1)
tcsh - 具有文件补全和命令行编辑的 C shell
tcsh [-bcdefFimnqstvVxX**] [-Dname[=value]] [arg ...]**- tcsh -l
tcsh 是 Berkeley UNIX C shell, csh(1) 的增强但完全兼容的版本。 它是一种命令语言解释器,可用作交互式登录 shell 和 shell 脚本命令处理器。 它包括一个命令行编辑器(参见 命令行编辑器)、可编程单词完成(参见 完成和列表)、拼写纠正(参见 拼写纠正)、历史机制(参见 历史替换)、作业控制(参见 作业) 和类似 C 的语法。 新功能 部分描述了 tcsh 相对于 csh(1) 的主要增强。 在本手册中,大多数 csh(1) 实现(特别是 4.4BSD csh)中没有的 tcsh 功能都标有 `(+)', 而 csh(1) 中存在但通常没有记录的功能则标有 `(u)'。
如果 shell 的第一个参数(参数 0)是 `-' 那么它是一个登录 shell。 也可以通过使用 -l 标志作为唯一参数调用 shell 来指定登录 shell。
其余标志参数解释如下:
-b
强制从选项处理中“中断”,导致任何进一步的 shell 参数被视为非选项参数。 其余参数不会被解释为 shell 选项。 这可用于将选项传递给 shell 脚本,而不会造成混淆或可能的诡计。 如果没有此选项,shell 将不会运行设置用户 ID 脚本。
-c
命令从以下参数(必须存在,并且必须是单个参数)中读取,存储在 command shell 变量中以供参考,然后执行。 任何剩余的参数都放在 argv shell 变量中。
-d
shell 从 ~/.cshdirs 加载目录堆栈,如 启动和关闭 中所述,无论它是否是登录 shell。 (+)
-D_name_[=value]
将环境变量 name 设置为 value. (仅限 Domain/OS) (+)
-e
如果任何调用的命令异常终止或产生非零退出状态,则 shell 退出。
-f
shell 不加载任何资源或启动文件,也不执行任何命令散列,因此启动速度更快。
-F
shell 使用 fork(2) 而不是 vfork(2) 来生成进程。 (+)
-i
shell 是交互式的,并提示其顶级输入,即使它看起来不是终端。 如果 Shell 的输入和输出是终端,则 Shell 在没有此选项的情况下是交互式的。
-l
该 shell 是一个登录 shell 。仅当 -l 是指定的唯一标志时才适用。
-m
即使它不属于有效用户,shell 也会加载 ~/.tcshrc 。 较新版本的 su(1) 可以将 -m 传递给 shell。 (+)
-n
shell 解析命令但不执行它们。 这有助于调试 shell 脚本。
-q
shell 接受 SIGQUIT(请参阅 信号处理) 并在调试器下使用时表现。 作业控制被禁用。 (u)
-s
命令输入取自标准输入。
-t
shell 读取并执行单行输入。 A `\' 可用于在该行末尾转义换行符并继续到另一行。
-v
设置 verbose 变量,以便在历史替换后回显命令输入。
-x
设置 echo shell 变量,以便在执行前立即回显命令。
-V
甚至在执行 ~/.tcshrc 之前设置 verbose shell 变量。
-X
与 -x 一样,就像 -V 与 -v 一样。
--help
在标准输出上打印帮助消息并退出。 (+)
--version
在标准输出上打印版本/平台/编译选项并退出。 此信息也包含在 version shell 变量中。 (+)
在处理标志参数之后,如果参数仍然存在,但没有给出 -c、 -i、 -s 或 -t 选项,则第一个参数被视为命令文件的名称,或 ``script'',被执行。 shell 会打开这个文件并保存它的名字,以便可能用 `$0' 重新替换。 因为许多系统使用标准版本 6 或版本 7 shell,其 shell 脚本与此 shell 不兼容,所以 shell 使用这种 “标准” shell 来执行第一个字符不是 “#” 的脚本,即不要以评论开头。
剩余的参数放在 argv shell 变量中。
登录 shell 从执行系统文件 /etc/csh.cshrc 和 /etc/csh.login 中的命令开始。 然后它从用户 home 目录中的文件执行命令:首先是 ~/.tcshrc (+) ,或者,如果找不到 ~/.tcshrc ,则 ~/.cshrc ,然后是 ~/.history 的内容(或 histfile shell 变量)被加载到内存中,然后是 ~/.login, 最后是 ~/.cshdirs (或 dirsfile shell 变量的值) (+)。 如果这样编译,shell 可能会在 /etc/csh.cshrc 之前而不是之后读取 /etc/csh.login ,并且在 ~/.tcshrc 或 ~/.cshrc 和 ~/.history 之前而不是之后读取 ~/.login ;查看 version 变量。 (+)
非登录 shell 在启动时只读 /etc/csh.cshrc 和 ~/.tcshrc 或 ~/.cshrc 。
启动文件示例请参考 http://tcshrc.sourceforge.net。
像 stty(1) 和 tset(1) 这样的命令,每次登录只需要运行一次,通常放在一个人的 ~/.login 文件中。 需要在 csh(1) 和 tcsh 中使用同一组文件的用户只能拥有一个 ~/.cshrc ,它在使用 tcsh 特定命令之前检查 tcsh shell 变量 (qv) 的存在,或者两者都拥有一个 ~/.cshrc 和 ~/.tcshrc 哪个 source (参见内置命令) ~/.cshrc 。 本手册的其余部分使用 `~/.tcshrc 来表示 `~/.tcshrc ,或者,如果找不到 ~/.tcshrc ,则使用 ~/.cshrc'。
在正常情况下,shell 开始从终端读取命令,并以 `> ' 提示。 (参数的处理和使用 shell 处理包含命令脚本的文件将在后面描述。) shell 反复读取一行命令输入,将其分解为单词,将其放在命令历史列表中,对其进行解析并执行该行中的每个命令。
可以通过在空行输入 `^D'、`logout' 或 `login' 或通过 shell 的自动注销机制(参见 autologout shell 变量)来注销。 当登录 shell 终止时,它会根据需要将 logout shell 变量设置为 `normal' 或 `automatic' ,然后从文件 /etc/csh.logout 和 ~/.logout 执行命令。 如果这样编译,shell 可能会在注销时丢弃 DTR;查看 version shell 变量。
系统登录和注销文件的名称因系统而异,以便与不同的 csh(1) 变体兼容;见 文件。
我们首先描述 命令行编辑器。 完成和列表 以及 拼写更正 部分描述了两组功能,它们作为编辑器命令实现,但值得单独处理。 最后, 编辑器命令 列出并描述了特定于 shell 的编辑器命令及其默认绑定。
可以使用与 emacs(1) 和 vi(1) 中使用的键序列非常相似的键序列来编辑命令行输入。 仅当设置了编辑 shell 变量时,编辑器才处于活动状态,默认情况下,它在交互式 shell 中处于活动状态。 内置的 bindkey 以显示和更改键绑定。 默认情况下使用 emacs(1) 样式的键绑定(除非另外编译了 shell;请参阅 version 变量),但 bindkey 可以将键绑定更改为 vi(1) 样式的绑定。
shell 总是将箭头键(在 TERMCAP 环境变量中定义)绑定到
down
down-history
up
up-history
left
backward-char
right
forward-char
除非这样做会改变另一个单字符绑定。 可以使用 settc 将箭头键转义序列设置为空字符串,以防止这些绑定。 箭头键的 ANSI/VT100 序列始终是绑定的。
其他键绑定在很大程度上是 emacs(1) 和 vi(1) 用户所期望的,并且可以通过 bindkey 轻松显示,因此无需在此列出。 同样, bindkey 可以列出编辑器命令以及每个命令的简短描述。 某些键绑定具有不同的行为,具体取决于使用的是 emacs(1) 还是 vi(1) 样式绑定;有关详细信息,请参阅 vimode 。
请注意,编辑器命令与 shell 的 “word” 概念不同。 编辑器用不在 shell 变量 wordchars 中的任何非字母数字字符分隔单词,而 shell 只识别空格和一些对其具有特殊含义的字符,列在 词法结构下。
当给定一个独特的缩写时,shell 通常能够完成单词。 键入单词的一部分(例如 `ls /usr/lost')并按 Tab 键以运行 complete-word 编辑器命令。 shell 将文件名 `/usr/lost' 补全为 `/usr/lost+found/',用输入缓冲区中的完整单词替换不完整的单词。 (注意终端“/”;完成在已完成目录的末尾添加一个“/”,在其他已完成单词的末尾添加一个空格,以加快输入速度并提供成功完成的视觉指示。 可以取消设置 addsuffix shell 变量来防止这种情况。) 如果没有找到匹配项(也许 `/usr/lost+found' 不存在),终端铃声响起。 如果单词已经完整(也许你的系统上有一个 `/usr/lost',或者你想得太远并且输入了整个内容)一个 `/' 或空格被添加到末尾,如果它不是' t 已经在那里了。
完成工作在生产线的任何地方,而不仅仅是在最后;完成的文本将行的其余部分向右推。 在单词中间补全通常会导致光标右侧的剩余字符需要删除。
命令和变量可以以几乎相同的方式完成。 例如,如果 emacs 是系统上唯一以 `em' 开头的命令,则键入 `em[tab]' 将完成 `em' 到 `emacs'。 完成可以在 path 中的任何目录中找到命令,或者如果给定完整的路径名。 如果没有其他变量以 `ar' 开头,键入 `echo $ar[tab]' 将完成 `$ar' 到 `$argv'。
shell 解析输入缓冲区以确定您要完成的单词是否应该作为文件名、命令或变量完成。 缓冲区中的第一个单词和 `;'、`|'、`|&'、`&&' 或 `||' 之后的第一个单词 被认为是一个命令。 以“$”开头的单词被认为是一个变量。 其他任何东西都是文件名。 空行作为文件名“完成”。
您可以随时通过键入 “^D” 来运行 delete-char-or-list-or-eof 编辑器命令来列出单词的可能完成。 shell 使用 ls-F 内置命令 (qv) 列出可能的完成,并重新打印提示符和未完成的命令行,例如:
> ls /usr/l[^D]- lbin/ lib/ local/ lost+found/- > ls /usr/l
如果设置了 autolist shell 变量,那么只要完成失败,shell 就会列出剩余的选项(如果有的话):
> set autolist- > nm /usr/lib/libt[tab]- libtermcap.a@ libtermlib.a@- > nm /usr/lib/libterm
如果 autolist 设置为 `ambiguous',则仅在完成失败时才会列出选项,并且不会向正在完成的单词添加新字符。
要完成的文件名可以包含变量、您自己或他人的主目录,缩写为 “~” (参见 文件名替换) 和目录堆栈条目,缩写为 “=” (参见 目录堆栈替换)。 例如,
> ls ~k[^D]- kahn kas kellogg- > ls ~ke[tab]- > ls ~kellogg/
或
> set local = /usr/local- > ls $lo[tab]- > ls $local/[^D]- bin/ etc/ lib/ man/ src/- > ls $local/
请注意,变量也可以使用 expand-variables 编辑器命令显式扩展。
delete-char-or-list-or-eof 仅在行尾列出;在一行的中间,它删除光标下的字符,并在空行上记录一个字符,或者,如果设置了 ignoreeof ,则什么也不做。 `M-^D',绑定到编辑器命令 list-choices, 列出一行中任何地方的完成可能性,以及 list-choices (或任何一个相关的编辑器命令,可以删除、列出和/或记录 out, 在 delete-char-or-list-or-eof 下列出) 如果需要,可以使用 bindkey 内置命令绑定到 `^D'。
complete-word-fwd 和 complete-word-back 编辑器命令(默认情况下不绑定到任何键)可用于在可能的补全列表中上下循环,用下一个或上一个单词替换当前单词列表。
shell 变量 fignore 可以设置为完成时忽略的后缀列表。 考虑以下:
> ls- Makefile condiments.h~ main.o side.c- README main.c meal side.o- condiments.h main.c~- > set fignore = (.o \)- > emacs ma[^D]- main.c main.c main.o- > emacs ma[tab]- > emacs main.c
`main.c~' 和 `main.o' 被补全忽略(但不列出),因为它们以 fignore 的后缀结尾。 请注意,在 `~' 前面需要一个 `\' 以防止它被扩展为 home ,如 文件名替换 中所述。 如果只有一个完成是可能的,则忽略 fignore 。
如果 complete 变量设置为 `enhance',则完成 1) 忽略大小写和 2) 将句点、连字符和下划线(`.'、 `-' 和 `_')视为单词分隔符,并且连字符和下划线等效. 如果您有以下文件
comp.lang.c comp.lang.perl comp.std.c++- comp.lang.c++ comp.std.c
并输入 `mail -f c.l.c[tab]', 它会补全为 `mail -f comp.lang.c', 而 ^D 会列出 `comp.lang.c' 和 `comp.lang.c++'。 `mail -f c..c++[^D]' 将列出 `comp.lang.c++' 和 `comp.std.c++' 。在以下目录中键入 `rm a--file[^D]'
A_silly_file a-hyphenated-file another_silly_file
将列出所有三个文件,因为忽略大小写并且连字符和下划线是等效的。 但是,句点不等同于连字符或下划线。
如果 complete shell 变量设置为 `Enhance',则仅当用户键入小写字符或连字符时,完成才会忽略大小写以及连字符和下划线分隔符之间的差异。 输入大写字符或下划线将不匹配相应的小写字符或连字符分隔符。 在上一个示例的目录中输入 `rm a--file[^D]' 仍然会列出所有三个文件,但输入 `rm A--file' 将仅匹配 `A_silly_file' 并输入 `rm a__file[^D]' 将只匹配 `A_silly_file' 和 `another_silly_file' 因为用户明确使用了大写或下划线字符。
完成和列出受其他几个 shell 变量的影响: recexact 可以设置为在最短的唯一匹配上完成,即使更多的输入可能会导致更长的匹配:
> ls- fodder foo food foonly- > set recexact- > rm fo[tab]
只是哔哔声,因为 `fo' 可以扩展为 `fod' 或 `foo',但如果我们输入另一个 `o',
> rm foo[tab]- > rm foo
完成在 `foo' 上完成,即使 `food' 和 `foonly' 也匹配。 autoexpand 可以设置为在每次完成尝试之前运行 expand-history 编辑器命令, autocorrect 可以设置为在每次完成尝试之前对要完成的单词进行拼写更正(请参阅 拼写更正) ,而 correct 可以设置为在一个之后自动完成命令点击“返回”。 matchbeep 可以设置在各种情况下发出完成蜂鸣声或不发出蜂鸣声, nobeep 可以设置为从不发出蜂鸣声。 nostat 可以设置为与目录匹配的目录和/或模式的列表,以防止完成机制对这些目录进行 stat(2) 处理。 listmax 和 listmaxrows 可以设置为限制在不先询问的情况下列出的项目和行的数量(分别)。可以设置 recognize_only_executables 使 shell 在列出命令时只列出可执行文件,但是速度很慢。
最后, complete 的内置命令可用于告诉 shell 如何完成文件名、命令和变量以外的单词。 补全和列出不适用于 glob-patterns(请参阅 文件名替换) ,但 list-glob 和 expand-glob 编辑器命令对 glob-patterns 执行等效功能。
shell 有时可以更正文件名、命令和变量名的拼写,以及完成和列出它们。
可以使用 spell-word 编辑器命令(通常绑定到 Ms 和 MS)和使用 spell-line (通常绑定到 M-$)对整个输入缓冲区进行拼写更正。 correct shell 变量可以设置为 `cmd' 以更正命令名称或 `all' 以在每次键入 return 时更正整行,并且可以设置 autocorrect 以在每次完成尝试之前更正要完成的单词。
当以任何这些方式调用拼写更正并且 shell 认为命令行的任何部分拼写错误时,它会使用更正的行进行提示:
> set correct = cmd- > lz /usr/bin- CORRECT>ls /usr/bin (y|n|e|a)?
可以回答 “y” 或空格来执行更正的行,“e” 可以将未更正的命令留在输入缓冲区中,“a” 可以中止命令,就好像 “^C” 被击中一样,以及其他任何东西来执行原线不变。
拼写更正可识别用户定义的补全(请参阅 complete 内置命令)。 如果定义补全位置的输入单词与补全列表中的单词相似,则拼写更正会记录拼写错误并建议后一个单词作为更正。 但是,如果输入单词与该位置的任何可能完成不匹配,则拼写更正不会记录拼写错误。
与补全一样,拼写更正可以在行中的任何位置进行,将行的其余部分向右推,并可能在光标右侧留下额外的字符。
`bindkey' 列出键绑定和 `bindkey -l' 列表并简要描述编辑器命令。 这里只描述新的或特别有趣的编辑器命令。 有关每个编辑器的键绑定的描述,请参见 emacs(1) 和 vi(1) 。
每个命令默认绑定的一个或多个字符在括号中给出。 `^character' 表示控制字符,而 `M-character 表示元字符,在没有元键的终端上键入为转义 character 。 大小写计数,但默认情况下绑定到字母的命令为方便起见绑定到小写和大写字母。
backward-char (^B, left)
向后移动一个字符。 vimode 修改的光标行为。
backward-delete-word (M-^H, M-^?)
从当前单词的开头剪切到光标 - 保存在剪切缓冲区中。 vimode 修改的字边界行为。
backward-word (M-b, M-B)
移动到当前单词的开头。 vimode 修改的字边界和光标行为。
beginning-of-line (^A, home)
移动到行首。 vimode 修改的光标行为。
capitalize-word (M-c, M-C)
大写从光标到当前单词结尾的字符。 vimode 修改的字边界行为。
complete-word (tab)
按照 完成和列表 中的描述完成一个单词。
complete-word-back (not bound)
与 complete-word-fwd 类似,但从列表末尾开始。
complete-word-fwd (not bound)
用可能完成列表中的第一个单词替换当前单词。 可能会重复通过列表逐步降级。 在列表末尾,发出哔哔声并恢复为不完整的单词。
complete-word-raw (^X-tab)
与 complete-word 类似,但忽略用户定义的补全。
copy-prev-word (M-^_)
将当前行中的前一个单词复制到输入缓冲区中。 另见 insert-last-word 。 vimode 修改的字边界行为。
dabbrev-expand (M-/)
将当前单词扩展为当前是前导子字符串的最近的前一个单词,必要时环绕历史列表(一次)。 重复 dabbrev-expand 而没有对下一个前一个单词等进行任何干预的键入更改,跳过相同的匹配项,就像 history-search-backward 所做的那样。
delete-char (not bound)
删除光标下的字符。另请参阅 delete-char-or-list-or-eof 。 vimode 修改的光标行为。
delete-char-or-eof (not bound)
如果光标下有字符或空行上有 end-of-file ,则执行 delete-char 。 另请参阅 delete-char-or-list-or-eof 。 vimode 修改的光标行为。
delete-char-or-list (not bound)
如果光标下有一个字符,或者行尾有 list-choices ,则执行 delete-char 。 另请参阅 delete-char-or-list-or-eof 。
delete-char-or-list-or-eof (^D)
如果光标下有一个字符,则执行 delete-char ,行尾的 list-choices 或在空行的 end-of-file 。 另请参见这三个命令,每个命令只执行一个操作,以及 delete-char-or-eof、 delete-char-or-list 和 list-or-eof, 每个命令执行三个中不同的两个。
delete-word (M-d, M-D)
从光标剪切到当前单词的结尾 - 保存在剪切缓冲区中。vimode 修改的字边界行为。
down-history (down-arrow, ^N)
像 up-history, 但步下,停在原来的输入行。
downcase-word (M-l, M-L)
小写从光标到当前单词结尾的字符。 vimode 修改的字边界行为。
end-of-file (not bound)
发出文件结束信号,导致 shell 退出,除非设置了 ignoreeof shell 变量 (qv) 来防止这种情况。 另请参阅 delete-char-or-list-or-eof 。
end-of-line (^E, end)
将光标移动到行尾。 vimode 修改的光标行为。
expand-history (M-space)
扩展当前单词中的历史替换。请参阅 历史替换 。 另请参见 magic-space、 toggle-literal-history 和 autoexpand shell 变量。
expand-glob (^X-*)
将全局模式扩展到光标左侧。请参阅 文件名替换 。
expand-line (not bound)
与 expand-history 类似,但扩展了输入缓冲区中每个单词的历史替换。
expand-variables (^X-$)
将变量展开到光标左侧。 请参阅 变量替换 。
forward-char (^F, right)
向前移动一个字符。 vimode 修改的光标行为。
forward-word (M-f, M-F)
前进到当前单词的结尾。 vimode 修改的字边界和光标行为。
history-search-backward (M-p, M-P)
在历史列表中向后搜索从输入缓冲区的当前内容开始直到光标的命令,并将其复制到输入缓冲区中。 搜索字符串可以是包含 “*”、“?”、“[]” 或 “{}” 的全局模式(参见 文件名替换) 。 up-history 和 down-history 将从历史列表中的适当点开始。 仅限 Emacs 模式。 另请参阅 历史向前搜索 and i-search-back 。
history-search-forward (M-n, M-N)
与 history-search-backward 类似,但向前搜索。
i-search-back (not bound)
像 history-search-backward 一样向后搜索,将第一个匹配复制到输入缓冲区中,光标位于模式的末尾,并使用 `bck:' 和第一个匹配进行提示。 可以键入其他字符来扩展搜索,可以键入 i-search-back 以继续使用相同的模式进行搜索,必要时环绕历史列表, (i-search-back 必须绑定到单个字符才能工作)或可以键入以下特殊字符之一:
^W
将光标下单词的其余部分附加到搜索模式。
删除(或任何绑定到 backward-delete-char)
撤消最后输入的字符的效果,并在适当的情况下从搜索模式中删除一个字符。
^G
如果先前的搜索成功,则中止整个搜索。 如果没有,则返回上一次成功的搜索。
escape
结束搜索,将当前行留在输入缓冲区中。
任何其他未绑定到 self-insert-command 的字符都会终止搜索,将当前行留在输入缓冲区中,然后被解释为正常输入。 特别是,回车会导致当前行被执行。 另请参阅 i-search-fwd 和 history-search-backward 。 vimode 修改的字边界行为。
i-search-fwd (not bound)
与 i-search-back 类似,但向前搜索。 vimode 修改的字边界行为。
insert-last-word (M-_)
将前一个输入行的最后一个单词 (`!$') 插入输入缓冲区。 另请参阅 copy-prev-word 。
list-choices (M-^D)
列出 Completion and listing 下所述的完成可能性。 另请参阅 delete-char-or-list-or-eof 和 list-choices-raw 。
list-choices-raw (^X-^D)
与 list-choices 类似,但忽略用户定义的补全。
list-glob (^X-g, ^X-G)
列表(通过 ls-F 内置) 与光标左侧的全局模式(请参阅 文件名替换) 匹配。
list-or-eof (not bound)
在空行上执行 list-choices 或 end-of-file 。 另请参阅 delete-char-or-list-or-eof 。
magic-space (not bound)
扩展当前行中的历史替换,如 expand-history ,并插入一个空格。 magic-space 设计为与空格键绑定,但默认不绑定。
normalize-command (^X-?)
在 PATH 中搜索当前单词,如果找到,则将其替换为可执行文件的完整路径。 特殊字符被引用。 别名被扩展和引用,但别名中的命令不是。 该命令对于将命令作为参数的命令很有用,例如 `dbx' 和 `sh -x'。
normalize-path (^X-n, ^X-N)
按照 symlinks shell 变量的 `expand' 设置中的描述扩展当前单词。
overwrite-mode (unbound)
在输入和覆盖模式之间切换。
run-fg-editor (M-^Z)
保存当前输入行并在 editors shell 变量中找到第一个单词的文件名部分的已停止作业。 如果没有设置 editors ,那么将使用 EDITOR 环境变量的文件名部分(如果未设置,则为 “ed”)和 VISUAL 环境变量(如果未设置,则为 “vi”)。 如果找到这样的作业,它会重新启动,就好像输入了 `fg %job' 一样。 这用于轻松地在编辑器和外壳之间来回切换。 有些人将此命令绑定到 `^Z',以便他们可以更轻松地执行此操作。
run-help (M-h, M-H)
搜索有关当前命令的文档,使用与完成例程相同的“当前命令”概念,并打印它。 没有办法使用寻呼机; run-help 专为简短的帮助文件而设计。 如果定义了特殊别名 helpcommand ,它将以命令名作为唯一参数运行。 否则,文档应位于名为 command.help、 command.1、 command.6、 command.8 或 command 的文件中,该文件应位于 HPATH 环境变量中列出的目录之一中。 如果有多个帮助文件,则只打印第一个。
self-insert-command (text characters)
在插入模式(默认)下,将键入的字符插入到光标下字符之后的输入行中。 在覆盖模式下,用键入的字符替换光标下的字符。 输入模式通常保留在行之间,但 inputmode shell 变量可以设置为 “insert” 或 “overwrite” 以将编辑器置于每行开头的该模式。 另请参见 覆盖模式 。
sequence-lead-in (arrow prefix, meta prefix, ^X)
表示以下字符是多键序列的一部分。 将一个命令绑定到一个多键序列实际上会创建两个绑定:第一个字符到 sequence-lead-in 和整个序列到命令。 所有以绑定到 sequence-lead-in 的字符开头的序列都有效地绑定到 undefined-key ,除非绑定到另一个命令。
spell-line (M-$)
尝试更正输入缓冲区中每个单词的拼写,例如 spell-word ,但忽略第一个字符是 “-”、“!”、“^” 或 “%” 或包含 “\” 的单词, `*' 或 `?',以避免开关、替换等问题。 请参阅 拼写更正。
spell-word (M-s, M-S)
尝试按照 拼写更正 中的说明更正当前单词的拼写。 检查似乎是路径名的单词的每个组成部分。
toggle-literal-history (M-r, M-R)
扩展或“取消扩展”输入缓冲区中的历史替换。 另请参阅 expand-history 和 autoexpand 变量。
undefined-key (any unbound key)
哔哔声。
up-history (up-arrow, ^P)
将历史列表中的前一个条目复制到输入缓冲区中。 如果设置了 histlit ,则使用条目的文字形式。 可能会重复通过历史列表逐步向上,在顶部停止。
upcase-word (M-u, M-U)
从光标到当前单词结尾的字符大写。 vimode 修改的字边界行为。
vi-beginning-of-next-word (not bound)
转到下一个单词的开头。 vimode 修改的字边界和光标行为。
vi-eword (not bound)
Vi 移动到当前单词的末尾。 vimode 修改的字边界行为。
vi-search-back (?)
用“?”提示 对于搜索字符串(可能是全局模式,与 history-search-backward 一样),搜索它并将其复制到输入缓冲区中。 如果没有找到匹配项,铃声就会响起。 点击 return 结束搜索并将最后一个匹配项留在输入缓冲区中。 点击转义结束搜索并执行匹配。 仅限 vi 模式。
vi-search-fwd (/)
类似于 vi-search-back ,但向前搜索。
which-command (M-?)
对输入缓冲区的第一个字执行 which 参见内置命令的描述)。
yank-pop (M-y)
在 yank 或另一个 yank-pop 之后立即执行时,将 yank 字符串替换为 killring 中的下一个前一个字符串。 这也有旋转 killring 的效果,这样这个字符串将被认为是最近被后面的 yank 命令杀死的。 重复 yank-pop 将在 killring 中循环任意次数。
shell 将输入行拆分为空格和制表符处的单词。 特殊字符 `&'、`|'、`;'、`<'、`>'、`(' 和 `)' 和双字符 `&&'、`||'、`<<' 和 ` >>' 始终是单独的单词,无论它们是否被空格包围。
当 shell 的输入不是终端时,使用字符 `#' 开始注释。 每个 `#' 和它出现的输入行的其余部分在进一步解析之前被丢弃。
特殊字符(包括空格或制表符)可能会被阻止具有其特殊含义,并且可能会成为另一个单词的一部分,方法是在它前面加上反斜杠(`\')或将其括在单('''),双 (`"' ) 或后向 (``') 引号。 如果没有以其他方式引用,则以 `\' 开头的换行符等效于空白,但在引号内,此序列会产生换行符。
此外,除了 History substitution 之外的 Substitutions (见下文)都可以通过用单引号括住它们出现的字符串(或字符串的一部分)或通过引用关键字符(例如,`$' 或 ``' 分别用于 Variable substitution 或 Command substitution )与 `\'。 (Alias substitution 也不例外:以任何方式引用已定义 alias 的单词的任何字符都可以防止替换别名。 引用别名的常用方法是在其前面加上反斜杠。)反斜杠可以防止 History substitution ,但单引号不能。 用双引号或反引号引用的字符串会进行 Variable substitution 和 Command substitution ,但会阻止其他替换。
单引号或双引号内的文本变成一个单词(或一个单词的一部分)。 这些字符串中的元字符(包括空格和制表符)不会形成单独的单词。 只有在一种特殊情况下(参见下面的 Command substitution ),双引号字符串可以产生多个单词的部分;单引号字符串永远不会。 后向引号很特殊:它们表示 Command substitution (qv),这可能导致多个单词。
引用复杂的字符串,尤其是本身包含引用字符的字符串,可能会造成混淆。 请记住,不必像在人类写作中那样使用引号!可能更容易引用不是整个字符串,而是仅引用字符串中需要引用的那些部分,如果合适的话,使用不同类型的引用来这样做。
可以设置 backslash_quote shell 变量 (qv) 以使反斜杠始终引用 `\'、 `'' 和 `"' 。 (+) 这可能会使复杂的引用任务变得更容易,但它可能会导致 csh(1) 脚本中的语法错误。
我们现在描述 shell 按照它们发生的顺序对输入执行的各种转换。 我们在传递所涉及的数据结构以及影响它们的命令和变量时会注意到。 请记住,可以通过在 词法结构。
从终端输入的每个命令或“事件”都保存在历史列表中。 前面的命令总是被保存, history shell 变量可以设置为一个数字来保存那么多的命令。 histdup shell 变量可以设置为不保存重复事件或连续重复事件。
保存的命令从 1 开始按顺序编号,并带有时间标记。 通常不需要使用事件编号,但当前事件编号可以通过放置 “!” 作为提示的一部分。在 prompt shell 变量中。
shell 实际上以扩展和文字(未扩展)的形式保存历史。 如果设置了 histlit shell 变量,则显示和存储历史记录的命令使用文字形式。
history 内置命令可以随时打印、存储在文件中、恢复和清除历史列表,并且可以设置 savehist 和 histfile shell 变量在注销时自动存储历史列表并在登录时恢复。
历史替换将历史列表中的单词引入到输入流中,从而可以轻松地重复命令、在当前命令中重复上一个命令的参数或修复上一个命令中的拼写错误,而且输入很少且置信度很高。
历史替换以字符“!”开头。它们可以从输入流中的任何位置开始,但它们不会嵌套。 这个特殊的缩写将在后面描述。 可以通过设置 histchars shell 变量来更改用于表示历史替换的字符(`!' 和 `^')。 任何包含历史替换的输入行在执行之前都会被打印出来。
历史替换可能有一个 “event specification”,它指示要从中提取词的事件,一个 “word designator”,它从选定的事件中选择特定的词,和/或一个 “modifier” ,它操纵选定的单词。
事件规范可以是
n
一个数字,指的是一个特定的事件
-n
一个偏移量,指的是当前事件之前的事件 n
当前事件。 这应该在不检查递归的 csh(1) 中谨慎使用。 tcsh 允许 10 级递归。 (+)
!
上一个事件(相当于 `-1')
s
第一个单词以字符串 s 开头的最近事件
?s?
包含字符串 s 的最新事件。 第二个“?” 如果后面紧跟换行符,则可以省略。
例如,考虑一下某人的历史列表:
9 8:30 nroff -man wumpus.man- 10 8:31 cp wumpus.man wumpus.man.old- 11 8:36 vi wumpus.man- 12 8:37 diff wumpus.man.old wumpus.man
这些命令连同它们的事件编号和时间戳一起显示。 我们尚未输入的当前事件是事件 13。 `!!' 指上一个事件,12。 `!!' 可以缩写为 `!' 如果它后面跟着 `:' (`:' 将在下面描述)。 `!n' 指的是事件 9,它以 `n' 开头。 `!?old?' 也指事件 12,其中包含 `old' 。 如果没有单词指示符或修饰符,历史引用只会扩展到整个事件,因此我们可以输入 `!cp' 来重做复制命令,或者如果 `diff' 输出滚动到屏幕顶部,我们可能会输入 `!!|more' 。
历史参考可以在必要时用大括号与周围的文本隔离开来。例如, `!vdoc' 会查找以 `vdoc' 开头的命令,并且在本例中找不到,但 `!{v}doc' 会明确地扩展为 `vi wumpus.mandoc'。 即使在大括号中,历史替换也不会嵌套。
(+) 例如,当 csh(1) 将 `!3d' 扩展为事件 3 并附加了字母 `d' 时, tcsh 将其扩展为以 `3d' 开头的最后一个事件;只有完全数字的参数被视为事件编号。 这使得调用以数字开头的事件成为可能。 要在 csh(1) 中扩展 `!3d' ,请说 `!{3}d'。
要从事件中选择单词,我们可以按照事件规范使用 `:' 和所需单词的指示符。 输入行的单词从 0 开始编号,第一个(通常是命令)单词为 0,第二个单词(第一个参数)为 1,以此类推。 基本的词指示符是:
0
第一个(命令)词
n
第 n 个参数
^
第一个参数,相当于 `1'
$
最后的论据
%
用 ?s? 搜索匹配的词
x-y
一系列单词
-y
相当于 `0-y'
*
相当于 `^-$' ,但如果事件仅包含 1 个单词,则不返回任何内容
x*
相当于 `x-$'
x-
相当于 `x*' ,但省略了最后一个单词 (`$')
选定的单词被插入到由单个空格分隔的命令行中。 例如,前面例子中的 `diff' 命令可能被输入为 `diff !!:1.old !!:1' (使用 `:1' 选择前一个事件的第一个参数)或 `diff !-2:2 !-2:1' 从 `cp' 命令中选择和交换参数。 如果我们不关心 `diff' 的顺序,我们可能会说 `diff !-2:1-2' 或简单地说 `diff !-2:*'。 `cp' 命令可能写成 `cp wumpus.man !#:1.old', 使用 `#' 表示当前事件。 `!n:- hurkle.man' 将重用来自 `nroff' 命令的前两个单词来表示 `nroff -man hurkle.man'。
如果参数选择器以 `^', `$', `*', `%' 或 `-' 开头,则可以省略分隔事件规范和单词指示符的 `:' 。 例如,我们的 `diff' 命令可能是 `diff !!^.old !!^' 或等价的 `diff !!$.old !!$' 。 但是,如果 `!!' 缩写为 `!', 以 `-' 开头的参数选择器将被解释为事件规范。
历史参考可能有一个词指示符,但没有事件规范。 然后它引用前面的命令。 继续我们的 `diff' 示例,我们可以简单地说 `diff !^.old !^' 或者,以相反的顺序获得参数,只是 `diff !*'。
历史引用中的一个或多个单词可以被编辑或 ``modified'',方法是在它后面加上一个或多个修饰符,每个修饰符前面都有一个 `:':
h
删除尾随路径名组件,留下头部。
t
删除所有前导路径名组件,留下尾部。
r
删除文件扩展名 `.xxx',保留根名称。
e
删除除扩展名之外的所有内容。
u
大写第一个小写字母。
l
小写第一个大写字母。
s_/l/r/_
用 l 代替 r。 l 只是一个类似于 r 字符串,而不是同名的 ed(1) 命令中的正则表达式。 任何字符都可以用作分隔符来代替 `/'; a `\' 可用于引用 l 和 r 中的分隔符。 r 中的字符`&' 被 l 替换; `\' 也引用了 `&'。 如果 l 为空 (``''), 则使用来自先前替换的 l 或来自先前搜索的 s 或事件规范中的事件编号。 如果后面紧跟换行符,则可以省略尾随分隔符。
&
重复前面的替换。
g
对每个单词应用一次以下修饰符。
a (+)
将以下修饰符尽可能多地应用于单个单词。 `a' 和 `g' 可以一起使用以全局应用修饰符。 使用 `s' 修饰符,仅替换原始单词中包含的模式,而不是包含任何替换结果的模式。
p
打印新的命令行但不执行它。
q
引用替换的单词,防止进一步替换。
x
与 q 类似,但在空格、制表符和换行符处分成单词。
修饰符仅适用于第一个可修改的单词(除非使用了 `g' )。 没有单词可以修改是错误的。
例如, `diff' 命令可能写成 `diff wumpus.man.old !#^:r', 使用 `:r' 从同一行的第一个参数中删除 `.old' (`!#^') 。 我们可以说 `echo hello out there', 然后说 `echo !*:u' 来大写 `hello', `echo !*:au' 来大声说出来,或者 `echo !*:agu' 来大喊大叫。 我们可以在 `mail -s "I forgot my password" rot' 后面加上 `!:s/rot/root' 来更正 `root' 的拼写(但请参阅 拼写更正 了解不同的方法)。
替换有一个特殊的缩写。 `^' ,当它是输入行的第一个字符时,等价于 `!:s^'。 因此,我们可能会说 `^rot^root' 来进行前面示例中的拼写更正。 这是唯一没有明确以 `!' 开头的历史替换。
(+) 在这样的 csh 中,只能将一个修饰符应用于每个历史记录或变量扩展。 在 tcsh 中,可以使用多个,例如
% mv wumpus.man /usr/man/man1/wumpus.1- % man !$:t:r- man wumpus
在 csh 中,结果将是 `wumpus.1:r'。 后跟冒号的替换可能需要用大括号与之隔离:
> mv a.out /usr/games/wumpus- > setenv PATH !$:h:$PATH- Bad ! modifier: $.- > setenv PATH !{-2$:h}:$PATH- setenv PATH /usr/games:/bin:/usr/bin:.
第一次尝试在 csh 中会成功,但在 tcsh 中会失败,因为 tcsh 在第二个冒号之后需要另一个修饰符,而不是 `$'。
最后,可以通过编辑器以及刚刚描述的替换访问历史记录。 up- 和 down-history、 history-search-backward 和 -forward、 i-search-back 和 -fwd、 vi-search-back 和 -fwd、 copy-prev-word 和 insert-last-word 编辑器命令搜索历史列表中的事件并将它们复制到输入缓冲区中。 toggle-literal-history 编辑器命令在输入缓冲区中历史行的展开形式和文字形式之间切换。 expand-history 和 expand-line 分别在当前单词和整个输入缓冲区中展开历史替换。
维护一个别名列表,可以通过 alias 和 unalias 命令设置、取消设置和打印这些别名。 在将命令行解析为简单命令(请参阅 命令) 后,检查每个命令的第一个单词,从左到右,看它是否有别名。 如果是这样,则将第一个单词替换为别名。 如果别名包含历史引用,它将经历 History substitution (qv),就好像原始命令是前一个输入行一样。 如果别名不包含历史引用,则参数列表保持不变。
因此,如果 `ls' 的别名是 `ls -l' ,那么命令 `ls /usr' 就会变成 `ls -l /usr', 这里的参数列表不会受到干扰。 如果 `lookup' 的别名是 `grep !^ /etc/passwd' 那么 `lookup bill' 将变成 `grep bill /etc/passwd'。 别名可用于引入解析器元语法。 例如, `alias print 'pr \!* | lpr'' 定义了一个 ``command'' (`print') ,它 pr(1) 将它的参数传递给行式打印机。
重复别名替换,直到命令的第一个单词没有别名。 如果别名替换没有更改第一个单词(如前面的示例中),则将其标记为防止循环。 检测到其他循环并导致错误。
shell 引用了一些别名;请参阅 特殊别名。
shell 维护一个变量列表,每个变量都有一个包含零个或多个单词的列表作为值。 可以使用 set 和 unset 命令显示和更改 shell 变量的值。 系统维护自己的 ``environment'' 变量列表。 这些可以使用 printenv、 setenv 和 unsetenv 显示和更改。
(+) 可以使用 `set -r'(qv) 将变量设为只读。 只读变量不得修改或取消设置;尝试这样做会导致错误。 一旦设置为只读,就不能将变量设置为可写,因此应谨慎使用 `set -r' 。 环境变量不能设为只读。
一些变量由 shell 设置或由它引用。例如, argv 变量是 shell 参数列表的图像,并且该变量值的单词以特殊方式引用。 shell 引用的一些变量是切换;shell 不关心它们的值是什么,只关心它们是否被设置。 例如, verbose 变量是一个切换,它导致命令输入被回显。 -v 命令行选项设置此变量。 Special shell variables 列出了 shell 引用的所有变量。
其他操作以数值方式处理变量。 `@' 命令允许执行数字计算并将结果分配给变量。 但是,变量值始终表示为(零个或多个)字符串。 出于数值运算的目的,空字符串被认为是零,并且忽略多字值的第二个和后续字。
在输入行被别名和解析之后,并且在每个命令被执行之前,变量替换由 `$' 字符键入。 这种扩展可以通过在 `$' 前面加上 `\' 来防止,除非在 `"'s 中它 总是 出现,而在 `'' 中它 从不 出现。 ``' 引用的字符串稍后会被解释(见下面的 命令替换 ),所以 `$' 替换直到稍后才会发生,如果有的话。 如果后面跟着空格、制表符或换行符,则 `$' 会被原封不动地传递。
输入/输出重定向在变量扩展之前被识别,并且是单独的变量扩展。 否则,命令名称和整个参数列表将一起展开。 因此,第一个(命令)词(至此)可能生成多个词,其中第一个词成为命令名称,其余词成为参数。
除非包含在 `"' 中或给定 `:q' 修饰符,否则变量替换的结果最终可能会被命令和文件名替换。 在 `"' 中,其值由多个单词组成的变量扩展为单个单词(一部分),变量值的单词由空格分隔。 当`:q' 修饰符应用于替换时,变量将扩展为多个单词,每个单词由空格分隔并引用以防止以后的命令或文件名替换。
提供以下元序列用于将变量值引入 shell 输入。 除非另有说明,否则引用未设置的变量是错误的。
$name
${name}
替换变量 name 花括号将 name 与下列字符隔离开来,否则这些字符将成为名称的一部分。Shell 变量的名称由以字母开头的字母和数字组成。 下划线字符被认为是一个字母。 如果 name 不是 shell 变量,而是在环境中设置,则返回该值(但下面给出的其他一些形式在这种情况下不可用)。
$name[selector]
${name[selector]}
仅替换 name 值中的选定单词。 selector 会被 `$' 替换,并且可以由一个数字或两个数字组成,由一个 `-' 分隔。 变量值的第一个单词编号为 `1'。 如果省略范围的第一个数字,则默认为 `1'。 如果省略范围的最后一个成员,则默认为 `$#name'。 selector `*' 选择所有单词。 如果第二个参数被省略或在范围内,则范围为空不是错误。
$0
替换正在从中读取命令输入的文件的名称。 如果名称未知,则会发生错误。
$number
${number}
相当于 `$argv[number]'。
$*
相当于 `$argv',相当于 `$argv[*]'。
History substitution 中描述的 `:' 修饰符,除了 `:p', 可以应用于上面的替换。 可以使用不止一个。 (+) 可能需要大括号来将变量替换与文字冒号隔离开来,就像 History substitution (qv) 一样;任何修饰符都必须出现在大括号内。
以下替换不能使用 `:' 修饰符进行修改。
$?name
${?name}
如果设置了 name ,则替换字符串 `1' ,如果没有设置,则替换为 `0' 。
$?0
如果当前输入文件名已知,则替换为 `1' ,如果不知道,则替换为 `0' 。 在交互式 shell 中始终为 `0' 。
$#name
${#name}
替换 name 中的单词数。
$#
相当于 `$#argv'。 (+)
$%name
${%name}
替换 name 中的字符数。 (+)
$%number
${%number}
替换 $argv[number] 中的字符数。 (+)
$?
相当于 `$status'。 (+)