Linux命令行帮助文档命令语法公式格式详解和Git命令语法格式解读(最详 ...

Linux命令行帮助文档命令语法公式格式详解和Git命令语法格式解读(最详 ...

2023年8月3日发(作者:)

Linux命令⾏帮助⽂档命令语法公式格式详解和Git命令语法格式解读(最详细解释,关键词:。。。1.问题背景作为程序员的我们,在使⽤Linux或者Git命令时总会想了解某个命令的全部⽤法,我么⼀般会在命令末尾加上-h(h全称help)来获得帮助,或者是查看Linux或Git的帮助⽂档。⼀般我们-h给出的帮助和帮助⽂档中的帮助的排版都是这样的。作为Linux和Git初学者的博主我,这么⼀长串的选项和参数到底怎么⽤?这些中括号[]和尖括号<>和竖杠|和省略号...到底都是啥意思呀?这些语法规则难不是问题,最要命的是Linux和Git的官⽅帮助⽂档⾥⾯从来没有提到过这些语法公式!各类Linux和Git的⼊门教程+书籍+⽹上博客教程+⼤学⽼师上课课程都不讲解这些语法公式,更变态的是这些教程都会说⼀句话:“如果想了解某条命令的⾼级使⽤,可以参考官⽅帮助⽂档”!于是⼜回到最初的Linux和Git的官⽅帮助⽂档,它⾥⾯没有提到任何这些语法公式!作为程序员的我们,每次使⽤Linux或者Git命令时,肯定想知道每⼀条命令的具体写法的语法规则,因为⼀旦我们了解了语法规则,在阅读Linux教程和别⼈的Linux命令时能更好的理解这些命令。所以我在⽹上整理出了这篇最全⾯的Linux系统命令⾏终端命令语法格式。⾸先我们需要知道,任何操作系统Windows,Linux,Mac上的Gitbash的Git命令都是是基于Linux的,所以我们把Linux的系统命令⾏终端命令语法格式掌握了,在GitBash中使⽤Git命令和阅读Git命令也会更顺畅,下⾯我将全⾯且详细地给予介绍。2.前⾔Linux和Git命令中的中括号[]和尖括号<>和竖杠|和省略号...其实都是根据⼀个规则制定的,这个规则便是。所有的Linux或Git的帮助⽂档的公式都是按照的语法规则来编写,因此我们了解清楚命令⾏界⾯描述语⾔Docopt就终于能读懂Linux和Git命令的帮助⽂档了!下⾯的第3章节帮助⽂档的编写规则:命令⾏界⾯描述语⾔Docopt就是对命令⾏界⾯描述语⾔Docopt的全⾯解释,其实这部分⼜臭⼜长,你可以直接跳过第3章节,直接观看第4章节4.命令的帮助⽂档-实例解析,遇到不理解的专业词汇再看⼀看第3章节帮助⽂档的编写规则:命令⾏界⾯描述语⾔帮助⽂档的编写规则:命令⾏界⾯描述语⾔Docopt(1)作⽤与定义Docopt可以为命令⾏应⽤程序定义接⼝,并为其⾃动⽣成解析器。Docopt⽤于描述程序接⼝的帮助消息和⼿册页中的约定,⽐如Linux和Git命令的帮助⽂档就是按照Docopt编写的。Docopt中的接⼝描述就是这样⼀个帮助⽂档。我随便编造⼀个类似于Linux系统的海军的命运系统的帮助⽂档,来帮助你更好的理解:Naval : naval_fate ship new ... naval_fate ship move [--speed=] naval_fate ship shoot naval_fate mine (set|remove) [--moored|--drifting] naval_fate -h | --help naval_fate --versionOptions: -h --help Show this screen. --version Show version. --speed= Speed in knots [default: 10]. --moored Moored (anchored) mine. --drifting Drifting mine.中⽂版的长这样,你应该看得更懂⼀些。请放⼼,命令格式都是没有改变的,所以看英⽂版和看中⽂版⼀样。海军的命运.⽤法:海军的命运 开船 新的<船的名字>...海军的命运 开船 <船的名字> 移动到 <坐标轴x> <坐标轴y> [--速度=<海⾥每⼩时>]海军的命运 开船 开炮射击 <坐标轴x> <坐标轴y>海军的命运 ⽔雷 (埋雷|清雷) <坐标轴x> <坐标轴y> [--停泊|--漂泊]海军的命运 -h | --help海军的命运 --版本选项:-h --help 展⽰这个帮助页⾯--版本 战术“海军的命运”的版本号.--速度=<海⾥每⼩时> 海⾥每⼩时 [默认值: 10].--停泊 停泊船(抛锚固定好船)时,对⽔雷进⾏操作.--漂泊 船在漂泊(开动)时,对⽔雷进⾏操作.由上⾯的中⽂版的海军的命运系统的帮助⽂档,我们可以看出来这是海军对船的多种⽤法和选项,⽽Linux和Git命令的帮助消息和开放⽂档便是海军的命运系统的帮助⽂档的另⼀个版本罢了。你现在是不是感觉清晰多了?该⽰例描述了可执⾏的naval_fate接⼝,它可以通过不同的命令组合(ship、new、move等)、选项(-h、–help、–speed=等)和位置参数(、、)来调⽤。该⽰例使⽤括号“[]”、parens“()”、管道“|”和省略号“…”来描述可选、必需、互斥和重复的元素。这些元素组成了有效的使⽤模式,每个元素都以程序的名称naval_fate开始。在使⽤模式下⾯,有⼀个带有描述的选项列表。它们描述了⼀个选项是否有短/长形式(-h,–help),⼀个选项是否有⼀个参数(–speed=),以及这个参数是否有⼀个默认值([default: 10])。docopt实现将提取所有这些信息并⽣成命令⾏参数解析器,当使⽤-h或–help选项调⽤程序时,界⾯描述的⽂本将作为帮助消息显⽰。(2)使⽤模式(使⽤⽅法)发⽣在关键字使⽤(不区分⼤⼩写)和明显空⾏之间的⽂本被解释为使⽤模式列表。⽤法之后的第⼀个单词:被解释为程序的名称。下⾯是⼀个不接受命令⾏参数的程序的最⼩⽰例:my_program程序可以有⼏个模式列出与各种元素⽤来描述模式: my_program command --option my_program [] my_program --another-option= my_program (--either-that-option | ) my_program ...下⾯将描述每个元素和构造。我们将使⽤单词“word”来描述由空格、“|”字符之⼀或“…”分隔的字符序列。(A)参数 (位置参数和选项的参数)参数是命令的操作对象,⼀般⽂件、⽬录、⽤户和进程等可以作为参数被命令操作,⽤于指定选项操作的位置路径。1. 位置参数或ARGUMENT以“<”开头、以“>”结尾的单词和⼤写单词被解释为位置参数,如下⾯的host和port。my_program 2. 选项的参数-o argument或--option=argument中的argument紧跟在选项后⾯的参数,⽤于指定选项的操作对象。(B)选项

-o或--option选项是包括⼀个或多个字母的代码,前⾯有⼀个“-”或"–"连字符,主要⽤于改变命令执⾏动作的类型。选项⼜分为短格式选项(-l)和长格式选项(–all)。短格式选项是英⽂的简写,⽤⼀个减号调⽤,例如ls -a;⽽长格式选项是英⽂完整单词,⼀般⽤两个减号调⽤,例如ls --all。⼀般情况下,短格式选项是长格式选项的缩写,也就是⼀个短格式选项会有对应的长格式选项。当然也有例外,⽐如 ls 命令的短格式选项 -l 就没有对应的长格式选项。所以具体的命令选项可以通过后⾯我们要学习的帮助命令来进⾏査询。选项和参数连⽤的规则与注意事项1. 短选项“-”可以以“堆叠”,意思三个选项-a -b -c可以写成-abc,并且他们作⽤等价。2. 短选项可以在零~多个空格后指定参数,并且他们作⽤等价。-a file等价于-afile等价于-a(多个空格)file。3. 短选项堆叠且在⼀个或多空格后指定参数的歧义性:不带空格指定参数的命令-afile存在歧义。因为⽆法判断-afile是多个堆叠的短选项-a -f -i -l -e,还是选项-a带有参数file。⽽Linux碰到这种歧义命令的判定⽅案是:仅当提供了对选项的描述时,这些符号才会被解释为带参数的选项(其实博主也不懂这句话具体啥意思,它的英⽂原⽂对这个歧义的解决⽅案就是这么模糊的描述。所以只能看有没有这种歧义的实例来做测试,才能给出具体的定义)。4. 长选项可以在⼀个或多个空格或等于符号=后指定参数:如--input=ARG等价于--input ARG等价于--input(多个空格)ARG。5. 短选项和长选项在⼀个或多空格后指定参数的歧义性:-a file和--input ARG存在歧义。因为⽆法判断file和ARG分别是短选项-a和长选项--input的选项的参数还是位置参数。⽽Linux碰到这种歧义命令的判定⽅案是:在使⽤模式中,只有在提供了该选项的描述时,才会将其解释为选项和选项的参数。否则,它将被解释为选项和位置参数。(其实博主也不懂这句话具体啥意思,它的英⽂原⽂对这个歧义的解决⽅案就是这么模糊的描述。所以只能看有没有这种歧义的实例来做测试,才能给出具体的定义)。6. 针对第3点和第5点提到的歧义性,作为程序员的我们,最好的解决⽅案是:规范书写命令来避免歧义。(1)书写带参数的短选项命令时,最好写成-a(⼀个或多个空格)file来避免歧义;(2)书写带参数的长选项命令时,最好写成--input=ARG来避免歧义。(C)命令所有不遵循上述约定(A)和(B)的--options或的其他单词都被解释为命令或⼦命令。(D)[可选元素]元素指的是:选项,参数,命令。⽤⽅括号“[]”括起来的元素被标记为可选的,意思是:可以有该元素也可以没有该元素。元素是否包含在相同或不同的括号内并不重要,它们完全等价。例如:my_program [command --option ]与下⾯的命令是等价的:my_program [command] [--option] []因此不要误以为my_program [command --option ]命令只有⼀下2种可能性:错误案例:my_program [command --option ]的所有可能性:第⼀种可能性:my_program command --option argument第⼆种可能性:my_program博主我之前就被这⾥迷惑了,因为我总以为command --option 这3个元素都在⼀个⽅括号[]⾥⾯,所以博主我错误地理解为:它们应该是要么全部出现,要么全部不出现。正确的情况是这3个元素都是分开的:正确案例:my_program [command --option ]的所有可能性:第⼀种可能性:my_program command --option argument第⼆种可能性:my_program第三种可能性:my_program command第四种可能性:my_program --option第五种可能性:my_program argument第六种可能性:my_program --option argument第七种可能性:my_program command argument第⼋种可能性:my_program command --option(E)(必选元素)默认情况下,所有元素都是必需的,如果不包括在括号“[]”中。然⽽,有时有必要根据需要显式地使⽤括号“()”标记元素。例如,当您需要对互斥元素进⾏分组时(参见下⼀节):my_program (--either-this | )另⼀个⽤例是,当您需要指定如果有⼀个元素存在,那么就需要另⼀个元素,您可以这样实现:my_program [( )]在这种情况下,有效的程序调⽤可以没有参数,也可以有两个参数。(F)元素|其他互斥的元素可以通过竖杠“|”进⾏分离,如下:my_program go (--up | --down | --left | --right)在需要互斥的情况下,使⽤括号“()”对元素进⾏分组。在不需要互斥的情况下,使⽤括号“[]”将元素分组:my_program go [--up | --down | --left | --right]注意,指定⼏个模式的⼯作原理与竖杠“|”完全相同,即:my_program run [--fast]my_program jump [--high]与下⾯的命令等价my_program (run [--fast] | jump [--high])(G)元素...使⽤省略号“…”指定左边的参数(或⼀组参数)可以重复⼀次或多次: my_program open ...my_program move ( )...您可以灵活地指定所需的参数数量。这⾥有3种(冗余的)⽅法来要求零或多个参数:my_program [...]my_program []...my_program [ [ ...]]⼀个或多个参数:my_program ...两个或更多参数:my_program ...(H)[options]“[options]”是⼀个快捷⽅式,它允许避免在模式中列出所有选项(从带有描述的选项列表中)。例如:my_program [options] --all List everything.--long Long output.--human-readable Display in human-readable format.与下⾯的命令是等价的:Usage: my_program [--all --long --human-readable] --all List everything.--long Long output.--human-readable Display in human-readable format.如果您有许多选项,并且所有选项都适⽤于其中⼀种模式,那么这将⾮常有⽤。或者,如果你有短版本和长版本的选项(在选项描述部分中指定),你可以⽤⼀个模式列出其中⼀个:Usage: my_program [-alh] -a, --all List everything.-l, --long Long output.-h, --human-readable Display in human-readable format.(I)[--]如果不是选项的⼀部分,则使⽤双破折号“--”作为分隔选项和位置参数的约定,以便处理可能将⽂件名误认为选项的情况。为了⽀持这种约定,在位置参数之前在模式中添加“[--]”。my_program [options] [--] ...除了这个特殊的含义之外,“--”只是⼀个普通的命令,所以您可以应⽤前⾯描述的任何操作,例如,使它成为required(通过删除括号“[]”)(J)[-]当不是选项的⼀部分时,⼀个破折号“-”通常⽤于表⽰程序应该处理stdin,⽽不是⽂件。如果您想遵循这个约定,请将“[-]”添加到您的模式中。"-"本⾝只是⼀个普通的命令,你可以⽤任何意义。(K)选项描述选项描述由⼀列选项组成,这些选项放在使⽤模式下⾯。如果在使⽤模式中没有歧义,可以选择指定它们(在上⾯的–option部分中描述)。选项的描述允许指定:1. ⼀些短期和长期选项是同义词2. ⼀个选项有⼀个参数3. 以及⼀个选项参数的默认值。规则如下:以“-”或“–”(不包括空格)开头的每⼀⾏都被视为选项描述,例如:Options: --verbose # GOOD -o FILE # GOODOther: --bad # BAD, line does not start with dash "-"要指定⼀个选项有⼀个参数,请在空格(或=" ="符号)后⾯放⼀个描述该参数的单词,如下所⽰。选项参数遵循<⾓括号>或⼤写约定。如果要分隔选项,可以使⽤逗号。在下⾯的⽰例中,这两⾏都是有效的,但是建议坚持使⽤单⼀样式。-o FILE --output=FILE # without comma, with "=" sign-i , --input # with comma, without "=" sign使⽤两个空格来分隔选项和它们的⾮正式描述。--verbose MORE text. # BAD, will be treated as if verbose # option had an argument MORE, so use # 2 spaces instead-q Quit. # GOOD-o FILE Output file. # GOOD--stdout Use stdout. # GOOD, 2 spaces如果希望为带有参数的选项设置默认值,请将其以[default: ]的形式放⼊选项的描述中。--coefficient=K The K coefficient [default: 2.95]--output=FILE Output file [default: ]--directory=DIR Some directory [default: ./](3)安装并实现Docoptdocopt有多种编程语⾔。官⽅实现列在中。4.命令的帮助⽂档-实例解析恭喜你,终于看完了,上⾯所描述的规则就是针对Linux帮助⽂档和帮助⽂档的编写者设定的,所以我们站在Linux命令使⽤者的⾓度看这些规则可能怪怪的,但是⾄少咱们也是看得懂命令的定义规则了!下⾯我将⽤⼏份实际的命令帮助⽂档的实例做⼀个解析。(1)Linux的7z压缩命令7z压缩格式拥有众多优点,具有极⾼的压缩⽐率,所以很多开发者会在Linux上安装7z来⾼效地压缩和解压⽂件 ,如果你没有安装,你在Linux上编写7z命令是不会被识别的。(如果你想亲⾃并安装7z,你可以参考这篇⽂章:)在已经安装7z的Linux的终端中输⼊命令7z --help,我们可以获得7z命令的所有⽤法的帮助⽂档:注意橙框选中的那⼀⾏命令公式,他描述了如何在Linux终端编写7z命令,我们来⼀⼀解读⼀下这个命令公式:7z [...] [...] [<@>](1)7z:根据上⾯3(2)(C)规则的定义,7z没有尖括号和连字符,所以7z就是命令。(2):根据上⾯3(2)(C)规则的定义,有尖括号,但在下⽂的帮助⽂档中给出了的所有可能性,⽽这些可能性都是不带连字符的字母,所以不是选项。并且这些有限的可能性不符合位置参数指定命令的操作对象的定义,所以它是命令。⼜因为跟在7z命令后⾯,所以是⼦命令。(3)[...]:根据上⾯3(2)(D)规则的定义,最外层有⽅括号[],代表⾥⾯的元素可有可没有。⽽⾥⾯是尖括号<>加省略号,意思是switches可以有1个~多个。同时,switches在下⽂的帮助⽂档中给出了switches的所有可能性,⽽这些可能性都是带连字符的字母,所以是选项。[...]代表的是有0~多个选项。(4):带有尖括号,说明这个元素是必填的,但在下⽂的帮助⽂档中并未给出它的任何定义,所以它不是命令也不是选项。其实代表的意思是被压缩后新⽣成的压缩包的⽂件名 或 需要解压的压缩包的⽂件名,同时它⼜有尖括号,符合位置参数的定义,所以是位置参数。(5)[...]:类同于(3)[...]的结构,代表的是有0~多个选项。同时类⽐于(4)在下⽂的帮助⽂档中并未被给出任何定义,代表的意思是需要被压缩的⽂件的⽂件名,所以也是位置参数。(6)[<@>]:类同于(5)[...]的结构,<@>也是位置参数,[<@>]代表的是有0~多个<@>选项。总结:当我们把上⾯的结构全部分析完后,我们发现这与的定义完全⼀模⼀样!分析如下:Linux系统命令⾏终端命令语法格式:提⽰符 命令 [ [选项] [选项的参数] ]... [--] [位置参数]...7z 是命令,[...]是多个可带可不带参数的选项, [...] [<@>]是多个位置参数。我们再结合⼀段实际命令进⾏解析:7z a -tzip -p111 (1)7z:对应的是命令公式的第⼀个元素7z(2)a:对应的是命令公式的第⼆个元素中的⼦元素a。根据上图⽂档的解释a: Add files to archive 添加⽂件到压缩包中,所以a代表这是压缩⽂件⽣成压缩包的操作。(3)-tzip:对应的是命令公式的第三个元素[...]中的⼦元素-t{Type},按照Docopt规则,没有{}这种语法,所以我们这⾥猜测{}代表的是Type是选项-t的参数。因为选项-t是短选项,选项与参数间可以没有空格,那么选项-t后⾯的zip应该就对应这个Type,也就是选项-t的参数。根据上图⽂档的解释-t{Type}: Set type of archive 设置压缩包的类型,所以-tzip代表是本次压缩⽣成的压缩包格式是zip。(4)-p111:因为[...]有省略号,所以可以有多个,因此-p111是命令公式的第三个元素[...]中的⼦元素-p{Password}。同理,类⽐于(3)-tzip,选项-p后⾯的111应该就对应这个Password,也就是选项-p的参数。根据上图⽂档的解释-p{Password}: set Password 设置该压缩包的解压密码,所以-p111代表是解压本次压缩⽣成的压缩包的密码是111。(5):前⾯没有连字符,所以它是命令公式的第四个元素。这个元素外带尖括号<>,所以它是必填元素。它是必填元素是因为⽤于指定被压缩后新⽣成的压缩包的⽂件名 或 需要解压的压缩包的⽂件名,如果不告诉系统被压缩后新⽣成的压缩包的⽂件名 或 需要解压的压缩包的⽂件名,系统⽣成压缩包后要给这个压缩包取什么名字呢 或者 系统怎么知道你要解压哪个⽂件呢?(6):类同于(5),它是命令公式的第五个元素[...],⽽⽤于指定需要被压缩的⽂件的⽂件名。(7)没有了:你可能会想这条命令⾥⾯怎么没有与命令公式的第六个元素[<@>]相对应的呢?这是因为[<@>]外⾯是⽅括号[],所以我们可以不⽤写任何内容来对应[<@>]。总结:7z a -tzip -p111 整条命令的意义就是:将⽂件压缩为压缩包,压缩⽅式为zip,解压密码为111。5.总结恭喜你,终于看完了!现在,不管你是在看Linux或Git的帮助⽂档,总算知道如何看懂那些命令公式了吧~本⽂参考⽂献:

发布者:admin,转转请注明出处:http://www.yc00.com/xiaochengxu/1691032382a491210.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信