原来命令行也是门艺术

curl -Lo ...
这个命令是什么意思呢?通过curl –help 查到了下表。

1
2
3
-L, --location      Follow redirects (H)
--location-trusted Like '--location', and send auth to other hosts (H)
--login-options OPTIONS Server login options (IMAP, POP3, SMTP)

但是看不懂 -Lo是什么操作,印象中git也有。

1
2
3
4
5
usage: git [--version] [--help] [-C <path>] [-c name=value]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
<command> [<args>]

配置:

1
2
git config --global user.name "姓名"
git config --global user.email "邮箱"

常用:

1
2
3
4
git add .
git commit -m ""
git pull
git push

代码审计相关:

1
2
git pull --rebase origin 分支名
git push origin HEAD:refs/for/分支名

从上面的git代码可以看出来,有些命令后面跟一个横线”-“,有的命令后 main跟两个横线”–”。

那么一个横线参数,两个横线参数的区别什么呢?

难道”-“是”–”的父集?

这是一个由于读书少导致的主观错误臆测。

通过度娘,我搜索到了这个好问题:linux中间有的命令是一个横杠,有的命令是两个横杠。请问这有什么区别吗?

其中有一段非常好的回答:

正好前段时间看《UNIX 编程艺术》10.5 节提到,过来回答一下。

Unix 程序的命令行选项有三种风格:Unix 风格、GNU 风格和 X toolkit 风格。

Unix 风格

即题主说的 -a 这种。在选项需要加参数的时候,紧跟在选项后面即可(或者加空格)。比如登录 mysql server 的时候:

$ mysql -u root -p

或者

$ mysql -uroot -p

均可。这时,root 就是 u 的参数,表示使用 root 用户登录。另外加不加空格看程序怎么才处理了,没有明确的规定。

GNU 风格

即题主说的 --help 这种,使用两个连字符加上关键词(而不是单个字符)。这种风格的出现是因为有一些复杂的 GNU 程序,仅仅 26 个字母(或者算上大小写 52 个)不够使用而发展出来的。另外一个有点是容易理解,因为出现的不再是缩写的字母。选项参数可以使用空格分割也可以使用”=”来分割。如:

$ ls --human-readable --sort=time

如果使用 Unix 风格,那么上条命令则是

$ ls -ht

是不是更加易读呢?

X toolkit 风格

这是一种比较不常见的风格,使用单个连字符加上关键词。只有 X 相关的程序才使用这种风格,一般不建议使用。

$ xeyes -display joesws:0 -geometry 1000x1000+0+0

看上去和 GNU 风格差不多,只是双连字符改成了单个连字符。

这个回答已经很详尽了,但是还是需要去看《Unix编程艺术》,242页到248页讲得非常详尽,将三种命令行的来龙去脉都讲清楚了,而且还给出了一些常见的Unix命令参数表,非常值得一看。

但是说到底,还是需要在实践中去不断学习各种命令行的使用,罗列下目前我所知道的提供命令行参数的应用程序。

  • git
  • node python java go
  • npm yarn cnpm maven
  • curl
  • mongodb mysql
  • docker kubectl
  • brew
  • choco
  • mac/linux 系统命令
  • windows 系统命令

等等等等,还有很多,就不一一罗列了,每一种工具都需要大量的实践。

有一个很好的查看帮助的方法,命令后面添加-h,–help或者help参数。比如foo -h,foo –help , foo help,可以直接在终端中去查看命令行的使用方法。

That ‘ s it !