第五章 命令的使用

前言

  1. 本章中介绍的命令如下:
  • type: 说明如何解释命令名
  • which: 显示会执行哪些可执行程序
  • man: 显示命令的手册页
  • apropos: 显示一系列合适的命令
  • info: 显示命令的info条目
  • whatis: 显示一条命令的简述
  • alias: 创建一条命令的别名

命令类型

  1. 可执行程序
  • 可执行程序就像在 /usr/bin 目录里看到的所有文件一样。
  • 在该程序类别中,程序可以编译为二进制文件,比如 C、C++ 语言编写的程序,也可以是 Shell、Perl、Python、Ruby 等脚本语言编写的程序。
  1. shell 内置命令
  • bash 支持许多在内部称之为 shell builtin 的内置命令。
  1. shell 函数
  • shell 函数是合并到环境变量中的小型 shell 脚本。
  1. alias 命令
  • 我们可以在其他命令的基础上定义自己的命令。

识别命令

基本介绍

  • 能够准确地识别我们使用的命令是上述 4 种命令类型中的哪一种是很有用的。

type - 显示命令的类型

  1. type 命令是一个 shell 内置命令,可根据指定的命令名显示 shell 将要执行的命令类型。格式如下:

    1
    type command
  2. 这里的 command 是想要查看的命令名。一些实例如下所示:

    1
    2
    3
    4
    5
    6
    [me@linux ~]$ type type
    type is s shell builtin
    [me@linux ~]$ type ls
    ls is aliased to 'ls --color=tty'
    [me@linux ~]$ type cp
    cp is /bin/cp

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

  1. 有时候,系统可能会安装了一个可执行程序的多个版本。这种现象虽然在桌面系统中不常见,但是在大型服务器中却是很常见。
  2. 使用 which 命令可以确定一个给定可执行文件的准确位置
    1
    2
    [me@linuxbox ~]$ which ls
    /bin/ls
  3. which 命令只适用于可执行程序,而不适用于内置命令和命令别名 (真正可执行程序的替代物) 。
  4. 试图在 shell 内置命令中使用 which 命令时,要么没有响应,要么得到一条错误信息。

获得命令文档

help - 获得 shell 内置命令的帮助文档

  1. bash 为每一个 shell 内置命令提供了一个内置的帮助工具。输入 help ,然后输入 shell 内置命令的名称即可使用该帮助工具
    1
    [me@linuxbox ~]$ help cd

man - 显示程序的手册页

  1. man 基本介绍
  • 大多数供命令行使用的可执行文件,提供了一个称之为 manual 或者是 man page 的正式文档。
  • 该文档可以用一种称为 man 的特殊的分页程序来查看,用法如下:
    1
    man program 
  • 手册文档在格式上会有所不同,但通常都包括标题、命令句法的摘要、命令用途的描述、命令选项列表以及每个命令选项的描述。
  • 例如,尝试查看 ls 命令的手册文档
    1
    [me@linuxbox ~]$ man ls
  • 在大多数 Linux 系统中,man 命令调用 less 命令来显示手册文档。所以,当显示手册文档时,你熟悉的所有 less 命令都能奏效
  • man 命令显示的手册文档被分成多个部分,它不仅包括用户命令,也包括系统管理命令、程序接口、文件格式等
  1. man 手册文档的组织结构
部分 内容
1 用户命令
2 内核系统调用的程序接口
3 C 库函数程序接口
4 特殊文件,如设备节点和驱动程序
5 文件格式
6 游戏和娱乐,例如屏幕保护程序
7 其他杂项
8 系统管理命令

apropos - 显示合适的命令

  1. 我们有可能会搜索参考手册列表,才进行基于某个搜索条目的匹配。尽管有些粗糙,但是这种方法又是还是很有用的。
    1
    [me@linuxbox ~]$ apropos floppy

whatis - 显示命令的简要描述

  1. whatis 程序显示匹配具体关键字的手册页的名字和一行描述。
    1
    [me@linuxbox ~]$ whatis ls

info - 显示程序的 info 条目

  1. info 基本介绍
  • GNU 项目提供了 info 页面来替代手册文档。
  • info 页面可通过 info 阅读器来显示。
  • info 页面使用超链接,这与网页结构很相似。
  • info 程序读取 info 文件,该文件是树形结构,分为各个单独的节点,每一个节点包含一个主题。
  • info 文件包含的超链接可以实现节点间的跳转。
  • 通过前置星号可以识别超链接,将光标放在超链接上并按 Enter 键,可以激活它。
  • 可以通过输入 info 以及程序名来调用 info 。
  • 到目前为止,我们讨论的大部分命令行程序都是 GNU 项目 coreutils 包的一部分,输入以下内容可以看到更多信息。
    1
    [me@linuxbox ~]$ info coreutils
  1. info 页面控制指令
命令 功能
? 显示命令帮助
PAGE UP or BACKSPACE 返回上一页
PAGE DOWN or Space 翻到下一页
n Next - 显示下一个节点
p Previous - 显示上一个节点
u Up - 显示目前显示节点的父节点
ENTER 进入光标所指的超链接
q 退出

README 和其他程序文档文件

  1. 系统中安装的很多软件包都有自己的文档文件,它们存放在 /usr/share/doc 目录中。
  2. 其中大部分文档文件是以纯文本格式存储的,因此可以用 less 命令来查看。有些文件是 HTML 格式,并且可以用 Web 浏览器来查看。
  3. 我们可能会遇到一些以 .gz 扩展名结尾的文件。这表明它们是使用 gzip 压缩程序压缩过。
  4. gzip 包包含一个特殊的 less 版本,称之为 zless 。
  5. zless 可以显示由 gzip 压缩的文本文件的内容。

使用别名创建自己的命令

  1. alias 基本介绍
  • 我们可以通过使用分号来分隔多条命令,就可以将多条命令输入在一行中。其工作方式如下:

    1
    command1;command2;command3...
  • 我们将要使用的例子如下:

    1
    2
    3
    4
    5
    [me@linuxbox ~]$ cd /usr;ls;cd -
    bin games kerberos lib64 local share tmp
    etc include lib libexec sbin src
    /home/me
    [me@linuxbox ~]$
  • 可以看到,我们将 3 条命令放置在同一行中。首先我们将当前目录改变成 /usr ,然后列出这个目录内容,最后返回到原始目录 (使用 cd- ) 。那么程序结束的位置恰恰是开始的位置

  • 我们通过使用 alias 命令将以上命令整合成一条新的命令。首先要为新命令虚构出一个名称,试试名称 test 。不过输入前,我们最好检查一下名称 test 是否已经被使用过了。

    1
    2
    [me@linuxbox ~]$ type test
    test is a shell builtin
  • 这个名字已经用过了,试试 foo 。

    1
    2
    [me@linuxbox ~]$ type foo
    bash:type:foo:not found
  • 下面创建新命令的别名

    1
    [me@linuxbox ~]$ alias foo = 'cd /usr;ls;cd -'
  • 上面的命令结构如下:

    1
    alias name='string'
  • 在 alias 命令之后输入 name ,紧接着是一个等号 (没有空格) ,等号之后是一个用单引号括起来的字符串,该字符串中的内容赋值给 name

  • 尝试别名命令

    1
    2
    3
    4
    5
    [me@linuxbox ~]$ foo
    bin games kerberos lib64 local share tmp
    etc include lib libexec sbin src
    /home/me
    [me@linuxbox ~]$
  • 再次使用 type 命令来查看别名。

    1
    2
    [me@linuxbox ~]$ type foo
    foo is aliased to 'cd /usr;ls;cd -'
  • 要删除别名,可以使用 unalias 命令,如下所示。

    1
    2
    3
    [me@linuxbox ~]$ unalias foo
    [me@linuxbox ~]$ type foo
    bash:type:foo:nou found
  • 尽管我们有意避免使用已经存在的命名名称来给我们的别名命名,但有时也会期待这么做。这样做的目的是,为每一个经常调用的命令添加一个普遍会用到的选项

    1
    2
    [me@linuxbox ~]$ type ls
    ls is aliased to 'ls --color=tty'
  • 查看环境中定义的所有别名,可使用不带参数的 alias 命令。以下是 Fedora 系统默认定义的一些别名

    1
    2
    3
    4
    [me@linuxbox ~]$ alias
    alias l.='ls -d .* --color=tty'
    alias ll = 'ls -l --color=tty'
    alias ls = 'ls --color=tty'

参考文章

  • 转载:Linux 命令行大全