2007年1月20日星期六

从-a到-z的命令行选项

从-a到-z的命令行选项

摘自UNIX编程艺术
The Art of UNIX Programming
[美]Eric S.Raymond 著
姜宏 何源 蔡晓骏 译

-a

所有项(all)。如果是GNU风格,则为--all选项,如果-a选项不是--all选项的一个同名的话,
真的很出乎意外。示例:fuser(1)和fetchmail(1).
添加(append),同在tar(1)中一样。这个命令选项和表示删除的-d选项是一对儿。
-b

缓冲区(buffer)大小或块(block)大小(带参数)。设置一个临界缓冲区大小,或(在和存档后或处理存储介质有关的程序中)设置块大小。示例:du(1),df(1),tar(1)。

批处理(batch)。如果程序是自然交互的,-b选项可用于禁止提示或设置有其他适当选项来接受
文件的输入而不是操作员的操作。示例:flex(1)。

-c

命令(带参数)。如果程序是一个通常从标准输入接收命令的解析器,那么程序期望-c参数选项会作为单行输入传递给该程序。这个约定在shell和类似的解析器中特别强烈。示例:sh(1),ash(1),
bsh(1),ksh(1)和python(1)。比较以下的-e选项。

检查(check)(不带参数)。检查命令的文件参数是否正确,但并不真正执行正常的过程。命令文件的解释程序频繁用此作为语法检查选项。示例:getty(1)和perl(1)。

-d

调试(debug)。(带或不带参数)。设置调试信息级别。这个用法非常普遍。

-d 偶尔具有“删除(delete)”或“目录(directory)”的含义。

-D

定义(define)(带参数)。在解释器,编译器或(特别是)类似宏处理的应用程序中给某个符号赋值。C编译器的宏预处理器对-D的用法就是如此。这和大多数Unix程序员的关系都很密切;不要违反。

-e

执行(execute)(带参数)。包装程序或可作为包装器使用的程序通常允许-e对其交付给控制权
的程序进行设置。示例:xterm和perl(1)。

编辑(edit)。能以只读模式或编辑模式打开某项资源的程序通常用-e规定以编辑模式打开资源。示例:crontab和SCCS版本控制系统的get实用程序。

-e偶尔具有“排除(exclude)”或“表达(expression)”的含义。

-f

文件(file)(带参数)。经常带参数使用,为需要随机访问输入或输出的程序(所以仅通过<或>重定向还不够)指定输入文件(或者输出文件,但这种使用不太多)。经典的例子是tar(1)其他例子也非常多。这个选项也用于表明通常从命令行获取的参数值应该从文件中获取;经典的例子可参见
awk(1)和egrep(1)。比较后面的-o选项;-f选项是-o选项相对的表示输入的选项。

强制(force)。(典型情况下不带参数)。强制执行通常在某种条件下施行的操作(如文件锁定和解锁)。这种用法不常见。

守护进程结合这两种方法使用-f选项,强制处理(force)。非默认位置的配置文件(file)。示例:ssh(1),httpd(1)和很多其他守护程序。

-h
表头(header)。(通常不带参数)。启用,禁用或修改程序生成报表的表头。示例:pr(1)和ps(1)。

帮助(help)。实际上,这没有人们想当然的那样普遍----因为在Unix早期历史的大部分时期。
开发者往往把在线帮助视为他们无法承受的存储开销。相反,他们编写了手册页(这形成了我们将在第18章讨论的手册页风格)。

-i

初始化(initialize)(通常不带参数)。把和程序关联的关键资源或数据库设置成数值或空值。
示例:RCS中的ci(1)。

-I

包含(include)(带参数)。在应用程序将要搜索的资源中增加一个文件或目录名。这个含义
在所有要包含其他文件的Unix语言编译器中都适用。如果这个选项字母用于其他方式,会让人感到极其意外。

-k

保留(keep)(不带参数)。禁止某个文件,信息或资源的常规使用删除操作。参见:passwd(1),bzip(1),fetchmail(1)。

-k选项偶尔具有“杀死(kill)”的含义。

-l

列表(list)(不带参数)。如果程序是某种目录或档案格式的归档器或解释/播放程序,
那么-l除要求列举项目之外的任何用法都相当突兀。示例:arc(1),binhex(1)和nzip(1)。(但tar(1)和cpio(1)例外)。

在已经是报表生成器的程序中,-l几乎始终表示“长(long)”,以启用某种长格式来显示比默认
模式更多的细节。如:ls(1)和ps(1)。

加载(load)(不带参数)。如果程序是一个链接器或某种语言解析器,-l在某种意义上始终表示
加载一个程序库。参见:gcc(1),f77(1)和emacs(1)。

登录(login)。在rlogin(1)和ssh(1)之类要求网络身份的程序中,-l表示执行方式。
-l偶尔具有“长度(length)”或“锁定(lock)”的含义。

-m
消息(message)(带参数)。带参数使用的-m选项用于日志记录或通告,其参数是消息字符串
。参见:ci(1)和cvs(1)。
-m选项偶尔具有“邮件(mail)”,“模式(mode)”或“修改时间(modification-time)”
的含义。


-n

数字(number)(带参数)。例如,在head(1),tail(1),nroff(1)和troff(1)程序中使用作页码范围。通常显示DNS名字的某些网络工具用-n以显示原始IP地址。ifconfig(1)和tcpdump(1)是原型实例。

否(not)(不带参数)。用于禁用make(1)等程序的通常行为。

-o

输出(output)(带参数)。当程序要求根据命令行的名字指定输出文件名或设备名时,可以交给-o选项来完成。示例:as(1),cc(1)和sort(1)。在带有类似编译器接口的程序中,看到这个选项用于其他用途都让人极其意外。支持-o选项的程序(如gcc)逻辑是允许把-o选项放在常规参数的前面或
后面进行识别。

-p

端口(port)(带参数)。特别用于要求指定TCP/IP端口号的选项。示例:cvs(1),PostgreSQL工具,smbclient(1),snmpd(1)和ssh(1)。

协议(protocol)(带参数)。示例:fetchmail(1)和snmpnetstat(1)。

-q

安静(quite)(通常不带参数)。禁止正常的结果输出或诊断输出。这种用法相当普遍。示例:
ci(1),co(1)和make(1)。也参见-s选项的“缄默”选项。

-r(also -R)(也为-R)

递归(recurse)(不带参数)。如果一个程序作用于目录,那么这个选项可告诉程序递归进所有
子目录。在对目录作用的程序中这个选项具有其他用法非常让人意外。经典的例子当然是cp(1)了。

反向(reverse)(不带参数)。示例:ls和sort。过滤器可用这个选项反向进行其正常的转换行为(比较-d选项)。

-s
缄默(silent)(不带参数)。禁用正常的诊断输出或结果输出(和-q选项类似;如果两者都支持,-q表示“安静”而-s表示“绝对缄默”)。示例:csplit(1),ex(1)和fetchmail(1)。

主题(subject)(带参数)。这种用法始终用于发送或处理邮件或新闻消息的命令中。
因为发送邮件的程序期望这个选项,所以支持这种用法特别重要。示例:mail(1),elm(1),mutt(1)。
-s偶尔具有“大小(size)”的含义。

-t
标记(tag)(带参数)。命名一个位置或指定一个字符串程序作为检索关键字使用。
在文本编辑器和浏览器中应用尤多。示例:cvs,ex,less和vi。

-u

用户(user)(带参数)。根据名称或数字UID来指定用户。示例:crontab(1),emacs(1),fetchmail(1)
,fuser(1)和ps(1)。

-v
冗长(verbose)(带或不带参数)。用于启用事务监控性质的、更冗长的列表或调试输出。示例:cvs(1),chattr(1),patch(1)和uucp(1)。更常见的是由-V调用。

-w

宽度(width)(带参数)。特别用于指定输出格式的宽度。示例:faces(1),groups(1),od(1),pr(1)和
shar(1)。
警告(warning)(不带参数)。启用或禁用警告诊断。示例:fetchmail(1),flex(1)和nsgmls(1)。

-x
启用调试(带或不带参数)。同-d选项类似。示例:sh(1)和uucp(1)。
提取(extract)(带参数)。列出从存储器或工作集待提取的文件清单。示例:tar(1)和zip(1)。
-y
是(yes)(不带参数)。批准启用对程序通常要求确认的潜在破坏性行为。示例:fsck和rz。

-z
启用压缩(不带参数)。存档和备份程序经常使用这个选项。示例:bzip(1),GNUtar(1),zcat(1),zip(1)和cvs(1)。

以上例子都来自Linux工具包,但在绝大多数的现代Unix下也应该适用。

没有评论: