Linux 帮助命令
1. 实验介绍
1.1 实验内容
Linux 的命令工具繁多,更不用说其在使用时的各项参数,命令我们可以输入一个大概通过 tab 键来提示或自动补全,参数无法自动补全该如何是好?本实验将带领大家学习如何利用已有的帮助工具与文档查看工具来查看已有的命令参数
1.2 实验知识点
- 内建命令与外部命令
- alias 命令的使用
- help 命令的使用
- man 命令的使用
- info 命令的使用
- 命令之间的关系
1.3 推荐阅读
本节内容较简单,暂无扩展阅读内容
2. 内建命令与外部命令
什么是内建命令,什么是外部命令呢?这和帮助命令又有什么关系呢?
内建命令 实际上是 shell 程序的一部分,其中包含一些比较简单的 Linux 系统命令,这些命令是写在 Bash 源码的 builtins 里面的,通常在 Linux 系统加载运行时 shell 就被加载并驻留在系统内存中,并且解析内部命令 shell 不需要创建子进程,所以其执行速度比外部命令快。比如:history、cd、exit 等等。更多的内部命令可以在推荐阅读的文章中查看到。
外部命令 是 Linux 系统中的实用程序部分,因为实用程序的功能通常都比较强大,所以其包含的程序量也会很大,在系统加载时并不随系统一起被加载到内存中,而是在需要时才将其调用内存。虽然其不包含在 shell 中,但是其命令执行过程是由 shell 程序控制的。外部命令是在 Bash 之外额外安装的,通常放在 /bin,/usr/bin,/sbin,/usr/sbin 等等。比如:ls、vi等。
简单来说就是一个是天生自带的天赋技能,一个是后天得来附加技能。我们可以使用 type 命令来区分命令是内建的还是外部的。例如这两个得出的结果是不同的
type exit
type service
得到的是两种结果,若是对 ls 执行 type 命令,你还能得到第三种结果
# 得到这样的结果说明是内建命令,正如上文所说内建命令都是在 Bash 源码中的 builtins 的 .def 中
xxx is a shell builtin
# 得到这样的结果说明是外部命令,正如上文所说,外部命令在 /usr/bin or /usr/sbin 等等中
xxx is /usr/sbin/xxx
#若是得到 alias 的结果,说明该指令为命令别名所设定的名称;
xxx is an alias for xx --xxx
3. alias 命令的使用
alias 是 shell 提供的一个内建命令,alias 的作用就是简化我们命令的输入,简单来说就是为一些较长的命令起绰号,让我们更方便记住、输入。
举一个例子能有一个直观的认识,我经常要去 /etc/nginx/conf.d 这个目录中修改我自定义的配置文件,正常情况下我得这么输入 cd /etc/nginx/conf.d 但是我不想输入这么多怎么办?
alias ngconf='cd /etc/nginx/conf.d'
我通过这样的一个命令就为 cd /etc/nginx/conf.d 取了一个别名,这样我们直接输入 ngconf 就能达到同样的效果了:
这就是 alias 所带来的功能,type ls 的时候我们看到 ls is an alias for ls —color=tty 的意思便是我们输入 ls 等同于输入 ls --color=tty
--color 的参数的作用是帮助我们在列出文件夹中所有文件的同时用颜色区分文件夹、普通文件、可执行文件等等,让我们能够一目了然,但是我就是就看看 ls 命令原来的样子,删除别名,我们可以用这样的命令:
unalias ls
执行之后我们再用 type 就可以看到 ls 不在是别名了,同时 ls 执行之后没有之前的特殊效果了:
删除别名之后我们后悔了,我们还是觉得之前设计的别名还是蛮科学的,但是又记不住之前的别名是怎么设置的了。
不用担心,直接在 terminal 添加与删除的别名都只是对当前的 shell 生效,你重新打开一个 terminal 你之前的添加与删除都没有了,如果我要设置的 alias 永远生效的话,我们可以直接在相关的 shell 配置文件中添加相关的命令即可。
例如我不会用 vi 只会用 vim,我想设置一个 alias vi="vim",那么我只需要将该命令写至相关的 shell 配置文件中添加相关的命令即可。
例如我不会用 vi 只会用 vim,我想设置一个 alias vi="vim",那么我只需要将该命令写至相关的 shell 配置文件即可,当前我们用的是 zsh,所以我们写在 zsh 的配置文件中(若是用 bash 的可以修改 ~、。bashrc 文件):
# 编辑配置文件
vim ~/.zshrc
# 添加配置项
alias vi="vim"
注意:若是不知道自己当前使用的是什么 shell 的话可以通过答应环境命令:echo $SHELL 来查看
重新打开一个 terminal,我们再次输入 vi,我们会看到 vim 被打开了,说明我们的别名配置生效了。
当然如果像之前的情况,我们只是想临时忽略别名的效果并不想删除别名的话,我们可以这样操作:
\ls
'ls'
这便是 alias 命令的简单使用。
3. help 命令的使用
help 是 bash 的内建命令,我们可以通过 type help 查看到,当然本实验环境默认为大家提供的是 zsh,所以你会发现当前的 shell 下根本就没有该命令,我们只需要通过一下命令就可以直接打开一个新的 bash 环境:
bash
做好了以上的准备,我们就可以愉快的使用 help 命令了,我们可以尝试下这个命令:
help ls
得到的结果如图所示,为什么是这样的结果?
因为 help 命令是用于显示 shell 内建命令的简要帮助信息。帮助信息中显示有该命令的简要说明以及一些参数的使用以及说明,一定记住 help 命令只能用于显示内建命令的帮助信息,不然就会得到你刚刚得到的结果。如图中 cd 便是内建命令:
那如果是外部命令怎么办,不能就这么抛弃它呀。其实外部命令的话基本上都有一个参数 --help 或者是 -h,这样就可以得到相应的帮助,看到你想要的东西了。试试下面这个命令是不是能看到你想要的东西了(当然 --help 参数是工具自带的,所以不用像 help 一样在 bash 中)。
ls --help
通过这样的方式,一些我们不常用的参数,但是在某种特定的情况下又需要的时候,我们就可以快速的翻阅,找到我们需要的参数。
4. man 命令的使用
除此之外还有一个工具 man,你可以尝试下这个命令
man ls
得到的内容比用 help 更多更详细,而且 man 没有内建与外部命令的区分,因为 man 工具是显示系统手册页中的内容,也就是一本电子版的字典,这些内容大多数都是对命令的解释信息,还有一些相关的描述。通过查看系统文档中的 man 也可以得到程序的更多相关信息和 Linux 的更多特性。
当然也不代表 help 就没有存在的必要,当你非常紧急只是忘记该用哪个参数的时候,help 这中显示简单扼要的信息就特别实用,若是不太紧急的时候就可以用 man 这种详细描述的查询方式
进入 man 的查看页面,我们会发现最左下角显示 LS(1),在这里,LS 表示手册名称,而(1)表示该手册位于第一章节。这个章节又是什么?在 man 手册中一共有这么几个章节:
章节数 | 说明 |
---|---|
1 | Standard commands(标准命令) |
2 | System calls(系统调用) |
3 | Library functions(库函数) |
4 | Special devices(设备说明) |
5 | File formats(文件格式) |
6 | Games and toys(游戏与娱乐) |
7 | Miscellaneous(杂项) |
8 | Administrative Commands(管理员命令) |
9 | 其他(Linux 特定的),用来存放内核例行程序的文档 |
打开手册之后我们可以通过 pgup 与 pgdn 或者 上下键来上下翻看,可以按 q 退出当前页面。
这便是 man 工具的使用。
5. info 命令的使用
若是你觉得 man 显示的信息都还不够,满足不了你的需求,那试试这个命令 info
info ls
若是遇到 command not found 的情况,是因为环境的原因,我们需要自己安装一下 info 工具:
sudo apt-get install info
得到的信息比 man 更多了,info 的信息来自自由软件基金会的 GUN 项目,是 GUN 的超文本帮助系统,能够更完整的显示出 GUN 信息。所以得到的信息当然更多
6. 命令之间的关系
man 和 info 就像两个集合,它们有交集的部分,但与 man 相比,info 工具可显示更完整的 GUN 工具信息。man 也包含的某个工具的概要信息在 info 中也会介绍,那么 man 页中会有"请参考 info 也更详细内容"的字样。
由此也可以看出 info 中信息的权威。
所以三者的关系应该是 help < man < info。
7. 总结
本节实验中我们学习了一下内容,任何不清楚的地方欢迎与我们交流:
- 内建命令与外部命令
- alias 命令的使用
- help 命令的使用
- man 命令的使用
- info 命令的使用
- 命令之间的关系
通过官方文档能够最高效的获取最准确的答案。
请务必保证自己能够动手完成整个实验,只看文字很简单,真正操作的时候会遇到各种各样的问题,解决问题的过程才是收获的过程。