使用命令

摘要:本章内容聚焦于命令,将介绍命令的四种形式,如何识别命令属于哪一种形式,以及在知道命令属于哪种形式后如何获取它的相关文档,最后还会讲述如何用别名创建自己的命令。

使用命令

这一章将介绍以下命令:

  • type –说明怎样解释一个命令名
  • which –显示会执行哪个可执行程序
  • man –显示命令手册页
  • apropos –显示一系列适合的命令
  • info –显示命令 info
  • whatis –显示一个命令的简洁描述
  • alias –创建命令别名

到底什么是命令

命令具有以下四种形式:

  1. 是一个可执行程序

    这一类程序可以是用诸如 C 和 C++ 语言写成的程序编译的二进制文件,也可以是由诸如 shell,perl,
    python,ruby 等等脚本语言写成的程序。

  2. 是一个内建于 shell 自身的命令。

    bash 支持若干命令,内部叫做 shell 内部命令 (builtins)。例如,cd 命令,就是一个 shell 内部命令。

  3. 是一个 shell 函数

    这些是小规模的 shell 脚本,它们混合到环境变量中。

  4. 是一个命令别名

    我们可以定义自己的命令,建立在其它命令之上。

识别命令

为了确切地知道正在使用四类命令中的哪一类,Linux 提供了两种方法来弄明白命令类型。

type - 显示命令的类型

type 命令是 shell 内部命令,它会显示命令的类别。用法如下:

type command                 //“command” 是你要检测的命令名

实例:

xuxg@xuxg-ubuntu:~$ type type
type is a shell builtin
xuxg@xuxg-ubuntu:~$ type ls
ls is aliased to `ls --color=auto'
xuxg@xuxg-ubuntu:~$ type cp
cp is /bin/cp

我们看到这三个不同命令的检测结果。注意,ls 命令(在Ubuntu系统中)的检查结果,ls命令实际上是 ls 命令加上选项--color=tty的别名。现在我们知道为什么ls的输出结果是有颜色的!

which - 显示一个可执行程序的位置

为了确定所给定的可执行程序的准确位置,使用 which命令:

xuxg@xuxg-ubuntu:~$ which ls
/bin/ls

**which命令只对可执行程序有效,不包括shell 内部命令 (builtins)和命令别名。**在Ubuntu系统中,which一个shell内部命令是得不到回应的。

得到命令文档

知道了什么是命令,现在我们来寻找每一类命令的可得到的文档。

help - 得到 shell 内建命令的帮助文档

输入help,接着是 shell 内部命令名。例如:

xuxg@xuxg-ubuntu:~$ help cd
cd: cd [-L|[-P [-e]] [-@]] [dir]
    Change the shell working directory.
    ...(省略)

注意表示法:出现在命令语法说明中的方括号,表示可选的项目。一个竖杠字符表示互斥选项。

–help - 显示用法信息

许多可执行程序支持一个--help选项,这个选项是显示命令所支持的语法和选项说明。例如:

xuxg@xuxg-ubuntu:~$ mkdir --help
Usage: mkdir [OPTION]... DIRECTORY...
Create the DIRECTORY(ies), if they do not already exist.
...(省略)

一些程序不支持 --help选项,但不管怎样试一下。这经常会导致输出错误信息,但同时能揭示一样的命令用法信息。

man - 显示可执行程序手册页

许多希望被命令行使用的可执行程序,提供了一个正式的文档,叫做手册或手册页 (man page)。一个叫做man的分页程序,可用来浏览手册。例如:

xuxg@xuxg-ubuntu:~$ man ls

在大多数 Linux 系统中,man 使用less工具来显示参考手册,所以当浏览文档时,你所熟悉的less 命令都能有效。

man只对可执行程序命令别名有效,对shell内部命令无效。

man一下passwd这个命令,在弹出的手册页左右上角会看到PASSWD(1),这个(1)代表什么?

答:man所显示的参考手册,被分成几个章节,它们不仅仅包括用户命令,也包括系统管理员命令、程序接口、文件格式等等。下表描绘了手册的布局:

章节 内容
1 用户命令
2 程序接口内核系统调用
3 C 库函数程序接口
4 特殊文件,比如说设备结点和驱动程序
5 文件格式
6 游戏娱乐,如屏幕保护程序
7 其他方面
8 系统管理员命令

这个(1)代表着我们现在打开的是passwd的第1章节:用户命令。如果我们输入以下命令:

man 5 passwd

就会看到左右上角有PASSWD(5),打开的就是passwd的第五章节:文件格式,显示的是文件/etc/passwd的文件格式说明手册。

apropos - 显示适当的命令

也有可能搜索参考手册列表,基于某个关键字的匹配项。虽然很粗糙但有时很有用。下面是一个以 floppy 为关键词来搜索参考手册的例子:

xuxg@xuxg-ubuntu:~$ apropos floppy
fdformat (8)         - low-level format a floppy disk
mbadblocks (1)       - tests a floppy disk, and marks the bad blocks in the FAT
mformat (1)          - add an MSDOS filesystem to a low-level formatted flopp...
mxtar (1)            - Wrapper for using GNU tar directly from a floppy disk

输出结果每行的第一个字段是手册页的名字,第二个字段展示章节,第三字段是手册页中NAME一项中带有关键词floopy的那一行命令说明的展示。我们把输出的四个结果都用man命令打开对应章节看一下:

FDFORMAT(8)                  System Administration                 FDFORMAT(8)

NAME
       fdformat - low-level format a floppy disk
mbadblocks(1)               General Commands Manual              mbadblocks(1)

Name
       mbadblocks - tests a floppy disk, and marks the bad blocks in the FAT
mformat(1)                  General Commands Manual                 mformat(1)

Name
       mformat - add an MSDOS filesystem to a low-level formatted floppy disk
MXTAR(1)                      Mtools Users Manual                     MXTAR(1)

NAME
       mxtar - Wrapper for using GNU tar directly from a floppy disk

注意,man命令加上-k选项,和 apropos 完成一样的功能。

whatis - 显示非常简洁的命令说明

whatis 程序显示匹配特定关键字的手册页的名字和一行命令说明:

xuxg@xuxg-ubuntu:~$ whatis ls
ls (1)               - list directory contents

info -显示程序 Info 条目

GNU 项目提供了一个命令程序手册页的替代物,称为 info。info 内容可通过 info 阅读器程序读取。info 页是超级链接形式的,和网页很相似。

info 程序读取 info 文件,info 文件是树型结构,分化为各个结点,每一个包含一个题目。info 文件包含超级链接,它可以让你从一个结点跳到另一个结点。一个超级链接可通过它开头的星号来辨别出来,把光标放在它上面并按下enter键,就可以激活它。

输入 info,接着输入程序名称,启动 info。下表中的命令,当显示一个 info 页面时,用来控制阅读器。

命令 行为
? 显示命令帮助
PgUp or Backspace 显示上一页
PgDn or Space 显示下一页
n 下一个 - 显示下一个结点
p 上一个 - 显示上一个结点
u Up - 显示当前所显示结点的父结点,通常是个菜单
Enter 激活光标位置下的超级链接
q 退出

到目前为止,我们所讨论的大多数命令行程序,属于 GNU 项目 coreutils”包,输入info coreutils将会显示一个包含超级链接的手册页,这些超级链接指向包含在 coreutils 包中的各个程序。

README 和其它程序文档

许多安装在系统中的软件,都有自己的文档文件,这些文件位于/usr/share/doc目录下。

这些文件大多数是以文本文件的形式存储的,可用 less 阅读器来浏览。

一些文件是 HTML 格式,可用网页浏览器来阅读。

可能遇到许多以 .gz结尾的文件。这表示 gzip 压缩程序已经压缩了这些文件。gzip 软件包包括一个特殊的 less 版本,叫做zlesszless可以显示由 gzip 压缩的文本文件的内容。

小总结

  • help只能得到shell内部命令的帮助文档。
  • maninfo只能用来得到可执行程序和命令别名的文档,whatis也只能得到可执行程序和命令别名的一句话简介。
  • --help选项大部分命令都可以用。

用别名(alias)创建你自己的命令

在开始之前,我们需要展示一个命令行小技巧。可以把多个命令放在同一行上,命令之间用 ;分开。如:

xuxg@xuxg-ubuntu:~$ cd /usr; ls; cd -
bin  games  include  lib  libexec  local  sbin  share  src
/home/xuxg
xuxg@xuxg-ubuntu:~$ 

在一行上联合了三个命令。首先更改目录到/usr,然后列出目录内容,最后回到原始目录(用命令 cd -),结束在开始的地方。

现在,通过 alias命令把这一串命令转变为一个命令。

  1. 给新命令想个名字,就叫test吧。

  2. 查明是否test命令名已在系统中存在。

    xuxg@xuxg-ubuntu:~$ type test
    test is a shell builtin
    
  3. test 名字已经被使用了。试一下foo

    xuxg@xuxg-ubuntu:~$ type foo
    bash: type: foo: not found
    
  4. foo 还没被占用。创建命令别名:

    xuxg@xuxg-ubuntu:~$ alias foo='cd /usr; ls; cd -'
    

    注意命令结构:

    alias name='string'
    

    在命令 alias之后,输入name,紧接着(没有空格)是一个等号,等号之后是一串用引号引起的字符串,字符串的内容要赋值给 name

  5. 我们定义了别名之后,这个命令别名可以使用在任何地方。

    xuxg@xuxg-ubuntu:~$ foo
    bin  games  include  lib  libexec  local  sbin  share  src
    /home/xuxg
    xuxg@xuxg-ubuntu:~$ 
    
  6. 也可以使用type 命令来查看我们的别名:

    xuxg@xuxg-ubuntu:~$ type foo
    foo is aliased to `cd /usr; ls; cd -'
    
  7. 删除别名,使用unalias 命令:

    xuxg@xuxg-ubuntu:~$ unalias foo
    xuxg@xuxg-ubuntu:~$ type foo
    bash: type: foo: not found
    

要查看所有定义在系统环境中的别名,使用不带参数的alias命令。

xuxg@xuxg-ubuntu:~$ alias
alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"'
alias egrep='egrep --color=auto'
alias fgrep='fgrep --color=auto'
alias grep='grep --color=auto'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

在命令行中定义别名有点儿小问题。当你的 shell 会话结束时,它们会消失。随后的章节里,我们会了解怎样把自己的别名添加到文件中去,每次我们登录系统,这些文件会建立系统环境。

总结

已经学习了怎样找到命令的帮助文档,那就试着查阅到目前为止我们学到的所有命令的文档。学习命令其它可用的选项,练习一下!

  • Bash 参考手册是一本 bash shell 的参考指南。它仍然是一本参考书,但是包含了很多实例,而且它比 bash 手册页容易阅读。点此阅读
  • GUN 项目为它的程序提供了大量的文档,这些文档组成了 Linux 命令行实验的核心。这里你可以看到一个完整的列表,点此阅读
全部评论

相关推荐

我已成为0offer的糕手:别惯着,胆子都是练出来的,这里认怂了,那以后被裁应届被拖工资还敢抗争?
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务