Linux 系统命令精通指南(下)

出处:http://otn.oracle.com/global/cn/pub/articles/calish_system.html

作者:Sheryl Calish
在“Linux 文件命令精通指南(上)”中,我们讨论了利用最基础和最常用 Linux 文件命令所需的基本信息。在本文中,我将对 Linux 系统命令作同样的讨论。

我们在前一篇文章中了解到,在 Linux/UNIX 世界中,一切都被看作文件,包括系统管理命令。单独对于组织而言,我们在本系列的第一部分中讨论了文件命令,并将在本文中提供最有用的系统诊断和维护命令。

对于文件命令,我们在此处详尽讨论了某些相当简单和直观的管理命令。而只描述了其他较复杂命令的功能,以便在您需要使用时,知道存在这些命令及其用途。本文不涉及对每个命令使用背后的基本原理的详细讨论,但是我们将讨论最基本和最有用的命令,这些命令用于监视和管理打印机服务、文件系统、磁盘和进程。

有关超级用户的更多信息

这里讨论的很多命令可以由常规用户在其自己的文件和进程中执行。但是,某些命令,如 fdisk,需要有 root 权限才能运行。

为了您的系统的完整性,建议您避免直接以 "root" 登录到系统中。相反,通常更适合以常规用户登录,然后执行 su 或从 X window 执行 sux 命令来运行系统管理功能。(Sux 为您提供 X window 环境以及 root 权限。)当您以 root 用户登录时,您会始终知道您处于这种状态,因为您的提示符变为“#”。

超级用户能够使用 sudo,有选择地将那些通常为 root 用户或其他特殊用户所保留的权限分配给一个不同的常规用户。root 用户可以定义实际和有效的用户和组标识号 uid 和 gid,以便与预期用户的标识相匹配。这种预期用户可以是(但不必是)被允许运行该命令的用户。

换言之,超级用户可以允许其他用户执行某个命令,但也可以确定由进程所产生的任何结果文件应该属于 root 用户或任何由超级用户指定的其他用户。Sudo 权限一经分配,则只需要用户使用自己的口令进行验证,而不需要 root 用户口令。

通用命令

从技术上讲,Uname、diff、date、sort 和 uniq 应该看作文件命令,但由于它们经常用于诊断和维护例程的系统管理方面,在这里解释它们更有意义。

Uname
Uname 提供了常规系统信息。当指定 -a 选项时,显示所有可用信息:
$ uname -a
Linux linux 2.4.18-4GB #1 Wed Mar 27 13:57:05 UTC 2002 i686 unknown

在这里我们从左向右看到常规的系统信息。每条信息都有自己的选项(在下面的圆括号中),可以单独显示:
  • 操作系统名称为 Linux(-s)。
  • 本机的网络节点名为 linux (-n)。
  • 操作系统发布版本为 4.5.18-4GB (-r)。
  • 操作系统版本为 #1 Wed Mar 27 13:57:05 UTC 2002 (-v)。
  • 机器类型为 i686 (-m)。
  • 这里的处理器类型 (-p) 为未知。

    类似地,stty 显示关于您的终端设置的信息:
    $ stty -a
    speed 38400 baud; rows 40; columns 103; line = 0;
    intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol =
  • PID 是进程的标识号。
  • TTY 是进程所属的终端控制台。
  • TIME 列是进程所使用的总的 CPU 时间。
  • CMD 列列出正在执行的命令行。

    使用带有 -ef 选项的 ps,返回系统中所有用户的所有进程的完整列表。如果您将此 ps 命令的结果传送到 grep 中,则该结果更易于查看。例如:
    $  ps -ef | grep oracle
    UID        PID  PPID  C STIME TTY         TIME CMD
    oracle    1633     1  0 13:58 ?00:00:00 ora_pmon_ora1
    oracle    1635     1  0 13:58 ?00:00:00 ora_dbw0_ora1
    oracle    1637     1  0 13:58 ?00:00:01 ora_lgwr_ora1
    oracle    1639     1  0 13:58 ?00:00:02 ora_ckpt_ora1
    oracle    1641     1  0 13:58 ?00:00:02 ora_smon_ora1
    oracle    1643     1  0 13:58 ?00:00:00 ora_reco_ora1
    oracle    1645     1  0 13:58 ?00:00:00 ora_cjq0_ora1
    oracle    1647     1  0 13:58 ?00:01:18 ora_qmn0_ora1
    oracle    1649     1  0 13:58 ?00:00:00 ora_s000_ora1
    oracle    1651     1  0 13:58 ?00:00:00 ora_d000_ora1


    注意,当您将 ps 的输出传送到 grep 命令时,列标题并不象在 ps 命令本身所使用时那样正常地显示。为便于说明,标题位于输出的上方,以便清楚地显示其联系。

    虽然 uid 通常是指数字型的标识,但在第一列下指定的是用户名,标记为 UID。

    PPID 是父进程的标识号。对于 Oracle 进程,这里的标识号为 1 — 它是 init 进程(所有进程的父进程)的 id,因为在本系统中安装的 Oracle 是作为登录进程的一部分而启动的。
    标为 C 的列是由 CPU 用于计算执行优先级的因子。
    STIME 是指进程的启动时间。
    问号表示这些进程不属于任何 TTY,因为它们是由系统启动的。

    以下是 ps 命令带有某些不同选项的另一个示例。注意,其中很多列与执行带有 -ef 选项的 ps 时的列相同:
    $ ps aux
    USER     PID %CPU %MEM   VSZ  RSS TTY     STAT START   TIME COMMAND
    bluh    4024  0.0  0.2  2240 1116 pts/1   S    20:59   0:00 su bluher
    bluh    4025  0.0  0.3  2856 1668 pts/1   S    20:59   0:00 bash
    bluh    4051  0.0  0.2  2488 1504 pts/1   R    21:01   0:00 ps aux
    bluh    4052  0.0  0.1  1636  600 pts/1   S    21:01   0:00 grep bluher


    除了提供重要的诊断信息,ps 命令还经常用于找出失控进程的 PID。例如,您的一个用户在 SQL*Plus 会话中输入一个笛卡尔联接。您可以执行以下的 ps 命令来找出其 PID:
    $  ps -ef | grep bluher
    ...
    bluher   4068  4064  0 21:14 pts/6    00:00:00 less
    bluher   4112  3945  0 21:28 pts/5    00:08:42 sqlplus
    ...


    然后您可以使用以下命令将其终止:
    $ kill 4112

    常规用户可以看到所有的系统进程,但他们只能终止他们自己拥有的进程。

    Ps 只为您提供当前进程的快照。要即时查看最活跃的进程,可使用 top。Top 实时地提供进程信息。它还拥有交互式的状态,允许用户输入命令,如 n 后面跟有 5 或 10 等数字。其结果是指示 top 显示 5 或 10 个最活跃的进程。Top 持续运行,直到您按 "q" 退出 top 为止。

    以下是 top 的部分显示:
    8:14pm  up 51 min,  7 users,  load average: 0.02, 0.03, 0.05
    96 processes:87 sleeping, 2 running, 0 zombie, 7 stopped
    CPU states:6.4% user,  3.5% system,  0.0% nice, 89.9% idle
    Mem:512440K av,  392288K used,  120152K free,       0K shrd,   55668K buff
    Swap:1050800K av,       0K used, 1050800K free                  236128K cached
    
    PID USER     PRI  NI  SIZE  RSS SHARE STAT %CPU %MEM   TIME COMMAND
    1289 root      18   0 78008  11M  1796 R     3.7  2.2   0:49 X
    1965 bluher    20   0 12244  11M 10456 S     1.9  2.3   0:01 kdeinit
    1986 bluher    18   0   996  996   768 R     1.5  0.1   0:00 top
    1803 bluher    20   0 16960  16M 13508 S     0.9  3.3   0:03 kdeinit
    1804 bluher    20   0 16964  16M 13508 S     0.9  3.3   0:03 kdeinit
    1800 bluher    19   0 12260  11M 10076 S     0.1  2.3   0:04 kdeinit
    1 root      20   0   220  220   188 S     0.0  0.0   0:04 init
    ...


    关闭

    看来应该以 shutdown 命令来结束本次讨论。与本文以及上一篇文章中所讨论的许多命令一样,通常有一种 GUI 形式的替代方法可以关闭您的系统。但是,当您需要手动关闭时,您可以使用以下命令立即进行关闭:
    $ shutdown -h now

    您可以使用以下命令手动地重新启动系统:
    $ shutdown -r now

    注意这两个命令都需要指定时间。您可以指定 "now" 或使用带有时间秒数的 -t 选项。

    我们在这两篇文章中讨论了大量内容,但我们绝对无法涵盖 Linux 可能具有的全部内容。我们没有讨论的命令还有很多,而我们没有看到的命令选项则更多。但是,在这里我们希望您至少找到了开始管理 Linux 系统所需的最少限度的工具。

    作者简介

    Sheryl Calish 是 Blue Heron Consulting 的一位专门研究 Linux 的 Oracle 开发人员。她还是 Central Florida Oracle Users Group 的基金主席和 IOUG Linux SIG 的销售主席。
  • ,

    分享到