理解命令行程序
**Hacker News**上有一个关于man手册的讨论非常有意思:对于Gui程序,界面可以去指导/指示用户去如何使用程序;而对于命令行的程序你必需去阅读man手册才能了解如何去使用它,所以应该把命令行的man手册视为命令行程序的一部分
命令行程序: 程序 + 手册
程序
在大多数人开始接触Linux系统的时候,学的第一个东西大概就是命令行:ls, cp, mv, mkdir, cat, touch... 之类,就是用这些命令来给Linux系统下发指令,和电脑交互。在接触命令行相当长的时间内去死背命令行,有哪些命令行、有什么用,以及这个命令有哪些选项;毫无疑问,在你没有完全理解这个东西的时候,死背是很有用的,但是,然后呢,命令行为什么是这样?内部是如何实现的?
命令行为什么是这样?
$ cmd [--option] [arguments]
这是一个通用命令行的语法基本格式。
输入指令就是给电脑下达指令,好像在说:电脑,你给我去干啥?干啥由cmd命令来决定;以什么样的方式去做这个由option选项来决定,比如ls -hal
中的-hal
决定了用什么方式显示内容;参数更像是电脑在干啥时的附加参数或是操作对象。 下面来一一讨论
- cmd命令名字
- option命令选项
- arguments参数
cmd命令
我们敲的命令都是具有一定功能的程序。
命令的分类:
- shell内置的命令
- 电脑里的二进制可执行程序,在系统安装好的时候就存在了
- 自己下载安装的程序
- 其它的bash、python脚本文件
**命令名字:**记得当时我当时死背了很多的电脑快捷键,突然冒出一个问题:为什么命令行的命令行是长这样?为什么快捷键是那些键?后来总结、搜索相关资料写了:我为什么喜欢用键盘/快捷键,而不是鼠标?;这里回到命令行命名的部分,大多命令都是相应单词的缩写或是有特定的含义:知乎上有人写了总结:知乎:Linux中常用的命令都是哪些单词的缩写?
man手册
简介
man的全称是manual,也就是手册、指南的意思,更现代的说法就是文档。文档是软件工程中非常重要的一部分
文档的分类:
分类分为很多章节section,可以通过$ man man
可以查看,如下:
区块 | 说明 |
---|---|
1 | 一般命令 |
2 | 系统调用 |
3 | 库函数,涵盖C标准函数库 |
4 | 特殊文件(通常是/dev中的设备)和驱动程序 |
5 | 文件格式和约定 |
6 | 游戏和屏保 |
7 | 杂项 |
8 | 系统管理命令和守护进程 |
常用man命令:
- man cmd_name:打开查找到的第一个对应的手册
- man -a cmd_name:按章节顺序,依次打开找到的手册
- man num cmd_name:打开指定章节中对应手册
- man -f cmd_name:搜索命令:命令的名字,命令的简介
手册内命令:
- h:help帮助
- q:quit退出
- vim命令模式命令:
jk du Ggg /nN
man命令的本质
man还有个命令选项$ man -w cmd_name
,可以去查找命令手册所在的路径。用vim打开,这个文件本质上就是一个拥有特定语法的文档,所以手册的本质上就是一个文档文件,
man手册中的语法
包括哪些部分
- SYNOPSIS中的语法含义
[...]
:可选a|b
:二选一<command>
:强制一定要写