linux命令行格式简介

linux命令行格式简介



linux命令行的一般格式为:
命令 [选项] [参数]
[]表示可选,即可以有,也可以没有。选项可以有多个,参数也可以有多个。如ls -l /home/,ls是命令,-l是选项,/home是参数。
 

选项和参数


站在程序开发的角度看,对于程序来说,程序名称后面的内容都是程序的参数,没有太大的不同,选项只是参数中比较特殊的一类。但从程序使用者的角度看,选项和参数还是有一些不同的:
选项是控制命令行为的开关。一般情况下,选项的名称是由程序提供的,名字是固定的,使用者不能更改。如ls程序提供了-l、-a等选项,使用者可以用这些参数名称,但不能使用-y选项,因为程序没有提供这种选项。
参数是程序的执行对象。一般情况下,使用者可以提供任意内容。如ls /home中的/home,是ls程序作的执行对象,使用者可以提供任意的名称。
既然从程序开发者的角度看,选项和参数都是程序的参数,但为了使用者能够区分,那么就需要设置一些规则将选项和参数区分开来。最古老的区分方式就是以“-”开头的字符被认为是选项,不带“-”开始的被认为是参数。也有以“--”开头的字符被认为是选项。
选项也可以有参数,请注意,选项的参数和程序的参数是不同的,要注意区分。选项的参数是针对选项而言的,参数是针对整个程序而言的。如ls --sort time /home,time是--sort选项的参数,/home是程序ls的参数。
 

选项格式


为了区分选项和参数,人为地设置了若干区分规则。但有人的地方就有江湖,每个人都想有自己的风格,都希望自己的风格能一统江湖。于是有名望者、武艺高超者开始开宗立派。
根据选项风格的不同,目前基本形成了几种不同的命令行风格,如POSIX/UNIX风格、GNU风格、BSD风格、X toolkit风格。
POSIX/UNIX风格
原始的Unix风格命令行选项,是以连字符“-”开头的单个字符(注意是一个字符,而不是一个单词)。
如果选项后面不带参数,则被称之为模式选项。模式选项是可以组合在一起使用的。例如,如果-a和-b是模式选项,那么-ab或-ba就都正确,而且会启用这两个选项。如ls -al、ls -la、ls -a -l的作用是一样的。
如果选项需要带参数,这些参数要紧接在这个选项后面,可以以空格分开,也可以不以空格分开。如ls -w50 /home(注意:w和50之间没有空格)、ls -w 50 /home(注意:w和50之间有空格)的作用是一样的。
最初的 Unix 风格是在缓慢的 ASR-33 电传打字机上演变而来的,这使得简洁成为一种美德。因此是单字母选项。按住shift键需要额外的精力,因此偏爱小写,并使用“-”(而不是可能更合乎逻辑的“+”)来启用选项。
GNU风格
选项使用“--”开头的单词。如ls --all。
如果选项需要带参数,则使用空格或者“=”将参数和选项分开。如ls --sort time(注意sort和time之间的空格) 、ls --sort=time。
这种风格的出现是因为仅仅26个字母(或者算上大小写52个)不够一些复杂的GNU程序使用。另外一点是相比于单字符的POSIX/UNIX风格,其更容易理解,因为出现的不再是缩写的字母。
“--“开头的GNU风格的选项格式又被称为“长选项”,与之对应的,之前以“-”开头的单字符的选项格式也被成为“短选项。
bsd风格
和POSIX/UNIX风格相比,其选项使用单个字符,且不带任何前缀。如ps a(注意,只有单个a字符,没有-符号)。如果是多个不带参数的选项,也可以组合在一起,如ps aux。
如果选项需要带参数,也同POSIX/UNIX风格一样,选项参数紧跟在这个选项后面,可以使用空格分开,也可以不用空格。如ps U root(注意:root和U之间有空格)、ps Uroot (注意:root和U之间没有空格)的作用是一样的。
X toolkit风格
但原始的X toolkit风格是由X toolkit进行解析,它首先过滤并处理某些选项(如-geometry和-display)然后再把过滤后的命令行传递给应用程序逻辑进行解析。
以“-”开头的单词(注意是单词,而不是单个字符)。如java -version,"-"后面跟着的是一个单词。
如果选项需要带参数,则选项参数紧跟在这个选项后面,且使用空格分开。find -name *.txt.
这种风格即不能和古典的POSIX/UNIX风格兼容,也不能和GNU风格兼容,所以不应该在新程序中使用,除非遵循老式的X约定看起来价值很高。
备注:不确定将find、java命令归类为X toolkit风格是否正确?因为它们不属于X软件,但风格确实很象。java在某些高版本中,也支持了GUN风格的命令行。

当然,还有其它各种各样的风格,只是不是太常见,所以不再介绍,实际遇到的时候,需要根据手册或者帮助文档查看其选项的格式和含义。需要注意的是,这些风格之间只是"风格"不同,实际使用中并不限制使用,比如上述 ps 命令,由于一些历史原因,就可以接收POSIX/UNIX风格、GNU风格、BSD风格的参数,互相并不冲突。就像武林中的高手一样,可以使用多个门派的武功。但是建议加入到较流行的门派中,毕竟使用的人多的门派,相对来说,比较容易和其它人交流。如GNU风格、POSIX/UNIX风格,且建议同时支持这两种风格(即长命令选项、短命令选项)。如果已有的流行风格已经可以满足使用需求了,不建议再开宗立派了,门派多了,沟通和交流的成本就高了。毕竟我们不是真正的“武林”,不需要分出一个胜负,需要的是更友好地交流。
 

参考内容


http://www.catb.org/esr/writings/taoup/html/ch10s05.html
unix编程艺术



 

猜你喜欢

转载自blog.csdn.net/EmptyStupid/article/details/122858405
今日推荐