学会使用 Linux 命令
前面已经介绍了不少 Linux 系统下的命令了,但是命令这个概念还是比较模糊,有时叫命令,有时又叫可执行程序,有时叫软件,那到底有什么区别呢?还有许多命令还有复杂而神秘的命令行参数,加上参数后得到的结果和不加参数是不一样的。今天我们就再进一步学习一下命令,学会真正使用 Linux 命令。
今天要分享的内容如下:
- type:命令的简单说明
- which:显示会执行哪个可执行程序
- man:显示命令手册页
- apropos:显示一系列适合的命令(等价于:
man -k
) - info:显示命令信息
- whatis:显示一个命令的简洁描述
- alias:创建命令别名
1. 到底什么是命令
命令有一下四种形式:
- 是一个可执行程序,
/usr/bin
目录下存储的文件就是可执行程序。 这些可执行程序都是不同编程语言开发出来的。 - 是一个内建于 shell 自身的命令。Ubuntu 18.04 默认的 shell 是 Bash,Bash 有若干个内建的命令,如:cd 命令。
- 配置在环境变量中的 shell 函数,这里先不要管什么是 shell 函数,后面我们学习 shell 编程的时候就会明白了。
- 由 alias 创建的命令别名,其实我们之前一直使用的 ls 就是这样的一个命令,在 Ubuntu 18.04 上,我们执行 ls 命令,其实执行的是:
ls --color=auto
。
那我们使用一个命令的时候,到底是上述四种命令中的哪一类呢?我们可以使用 type 来查看,用法是:type command
。下图是一些例子:
2. which
在 Linux 系统中,我们安装的软件有时不止一个版本,可能安装了好几个版本,那我们要运行这个软件的时候到底执行的是哪一个版本呢?这时候我们可以使用 which 命令来查看,用法是:which command
,下图是一些例子:
不知大家有没有注意到,which cd
没有任何输出结果,在 Ubuntu 18.04 中,如果 which 后面跟的不是一个可执行程序,则不会返回任何信息。其实 which 只对可执行程序有效,不包括内建命令和命令别名,别名是真正的可执行程序的替代物。 当我们试着使用 shell 内建命令时,例如:cd ,就不会有任何返回。
3. 获取命令帮助文档
知道了什么是命令,我们再来看看怎么查看命令的帮助文档,也就相当于说明书啦,我们不知道怎么使用一个命令的时候,看看说明书是很有必要的。
3.1. help
help 是用来得到 shell 内建命令的帮助文档,用法:help command
。例如:help cd
chaojun@ubuntu:~/file/code/alavening/ALD_A113X$ help cd
cd: cd [-L|[-P [-e]] [-@]] [dir]
Change the shell working directory.
Change the current directory to DIR. The default DIR is the value of the
HOME shell variable.
上面的内容我删除了一些,留下部分用来说明问题,[] 中的表示可选项,这里我们先不讨论 -L、-P、-e 的含义;| 表示互斥,比如选择了 -L 就不能在选择 -P。虽然 cd 命令的帮助文档很简洁准确,但它决不是教程。正如我们所看到的,它似乎提到了许多 我们还没有谈论到的东西!不要担心,我们会学到的。
3.2. --help
许多可执行程序支持一个 --help 选项,这个选项是显示命令所支持的语法和选项说明。例如:
chaojun@ubuntu:~/file/code/alavening/ALD_A113X$ mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
Mandatory arguments to long options are mandatory for short options too.
-m, --mode=MODE set file mode (as in chmod), not a=rwx - umask
-p, --parents no error if existing, make parent directories as needed
-v, --verbose print a message for each created directory
-Z set SELinux security context of each created directory
to the default type
--context[=CTX] like -Z, or if CTX is specified then set the SELinux
or SMACK security context to CTX
--help display this help and exit
--version output version information and exit
GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
Full documentation at: <http://www.gnu.org/software/coreutils/mkdir>
or available locally via: info '(coreutils) mkdir invocation'
chaojun@ubuntu:~/file/code/alavening/ALD_A113X$
上面是 mkdir 命令的帮助信息,但并不是所有的命令都有 --help 帮助信息。
3.3. man 手册
许多希望被命令行使用的可执行程序,提供了一个正式的文档,叫做手册或手册(man page)。一个特殊的叫做 man 的分页程序,可用来浏览他们。用法:man program
。
使用 man 手册查看帮助信息的时候,man 的输出信息会被重定向到 less 这个软件中,所以我们查看 man 手册的时候如何上下翻页使用的是 less 的快捷键,如果你忘记了 less 的快捷键,建议回头看看 一些对使用 Linux 系统有帮助的命令。
man 所显示的参考手册,被分成几个章节,它们不仅仅包括用户命令,也包括系统管理员命令、程序接口、文件格式等等。下面是每个章节的具体含义:
- 1:用户命令
- 2:程序接口内核系统调用
- 3:C 库函数程序接口
- 4:特殊文件,比如说设备结点和驱动程序
- 5:文件格式
- 6:游戏娱乐,如屏幕保护程序
- 7:其他方面
- 8:系统管理员命令
有时候,我们需要查看参考手册的特定章节,从而找到我们需要的信息。 比如我们要查找一种文件格式,而同时它也是一个命令名时,这种情况尤其需要指定章节号。没有指定章节号,我们总是得到第一个匹配项,可能在第一章节。指定章节号的用法是:man [1-8] program
。
4. apropos
当我们需要某种功能的命令或者可执行程序的时候,我们不知道有什么命令或者程序或者函数可以满足,这时候我们就可以使用 apropos 来模糊搜索匹配的命令或可执行程序或者函数,虽然很粗暴,但有时还是很有用的。
比如,我们要知道和 TCP 相关的信息,我们就可以 apropos tcp
,如下图是返回结果:
5. whatis
whatis 程序用来显示匹配特定关键字的手册页的名字和一行命令说明,例如:whatis ls
。man 手册其实是很多而且晦涩难懂的,所以有时候我们可以使用 whatis 命令查看一下某个命令的简单描述。
6. info
GNU 项目提供了一个命令程序手册页的替代物,称为 "info"。info 内容可通过 info 阅读器程序读取。info 页是超级链接形式的,和网页很相似。下面是一个例子:
20190325161252469_849812512.png看上去是不是很复杂,还要学习怎么使用 info 查看工具的快捷键,我看到就头大了,我是不想去了解了,放后面吧,如果其他帮助信息都找不到说明的时候再来看吧,当然如果你感兴趣可以先自己去找资料学习哦。
7. README 和其它程序文档
许多安装在你系统中的软件,都有自己的文档文件,这些文件位于 /usr/share/doc
目录下。 这些文件大多数是以文本文件的形式存储的,可用 less 阅读器来浏览。一些文件是 HTML 格式, 可用网页浏览器来阅读。我们可能遇到许多以 ".gz" 结尾的文件。这表示 gzip 压缩程序 已经压缩了这些文件。gzip 软件包包括一个特殊的 less 版本,叫做 zless,zless 可以显示由 gzip 压缩的文本文件的内容。
8. 用别名(alias)创建你自己的命令
现在是时候,感受第一次编程经历了!我们将用 alias 命令创建我们自己的命令。但在开始之前,我们需要展示一个命令行小技巧。可以把多个命令放在同一行上,命令之间 用”;”分开。例如:
cd /usr; ls; cd -
正如我们看到的,我们在一行上联合了三个命令。首先更改目录到 /usr,然后列出目录 内容,最后回到原始目录(用命令 cd -
),结束在开始的地方。现在,通过 alias 命令 把这一串命令转变为一个命令。我们要做的第一件事就是为我们的新命令构想一个名字。 比方说 "test" 。在使用 "test" 之前,查明是否 "test" 命令名已经存在系统中,为了查清此事,可以使用 type 命令:type test
,返回结果是:test is a shell builtin
,噢哦,不行,那我们换一个吧,type foo
,返回:bash: type: foo: not found
,可以,foo 没有被占用,然后我们创建命令别名:alias foo='cd /usr; ls; cd -'
,现在我们就可以使用 foo 代替 cd /usr; ls; cd -
了。
如果不需要某个别名了,我们可以使用 unalias 删除,例如:unalias foo
。
注意:上面的操作知识临时生效的,终端模拟器关闭后就不生效了,后面的文章会介绍如何让它永久生效。
好了今天就分享到这里吧,内容比较多,希望大家不要为了阅读而阅读,而是要亲自去实践。即使你跟不上我更新的节奏,那也没关系,文章都可以永久免费阅读的,你慢慢挨着学习,相信你以后一定都能学会的。
欢迎关注微信公众号:eglinux,最新文章会在这个公众号首发,免费提供 CSDN 下载服务。