Username: Password:

Linux 系统命令精通指南(初级)之一
来源: 作者: 发布时间:2007-12-25 07:33:05

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

有关终极用户的更多信息

这里讨论的很多命令能够由常规
用户在其自己的文档和进程中执行。但是,某些命令,如 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 = ; eol2 = ; start = ^Q;
stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts -ignbrk -brkint -ignpar -parmrk -inpck
-istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke

第二行和第三行显示了将在命令行分别调用的特别字符和键序列。例如,"^Z" 即 CNTRL-Z 在本系统中发送一个终端休止符。退出符号以 "^\" 即 CNTRL-\ 发送,而我们能够将其改为 "^X",如下所示:
$ stty quit ^X

在这种情况下,您实际要输入 ^ 符号,而不是 CNTRL 键。这种改变只在当前窗口中起效。为了使这种改变永久生效,需要在您的 .bashrc 文档中输入该语句。

Diff 和 Date。顾名思义,Diff 比较两个文档。他返回那些导致文档不同的行,并返回关于怎样使文档变得相同的一些含义隐晦的输出:
$ diff test.out test2.out
0a1
> Another test.

在这里我们被告知,需要将 "Another test." 这一行添加到 test.out,以便使他和 test2.out 相似。第一个字符 "0" 是要在 test.out 中编辑的行号;"a" 表示该行应该被添加到 test.out,以便和 test2.out 的第一行 "1" 相匹配。假如我们需要更改 test.out,则第二个字符也能够是 "c",而假如我们需要从 test.out 中删除一些内容,则第二个字符是 "d"。

您可能希望使一个文档和另一个文档相似,以便为某些代码提供补丁。diff 还经常作为分析工具,用于验证程式或脚本 — 例如 sed 脚本 — 的输出是否是所预期的输出。

date 命令可用于显示或配置日期。假如用户具备终极用户权限,则他或她能够通过在以下命令中提供一个数字型字符串来配置日期:
$ date 0101010004
此命令将日期配置为 2004 年 (04) 1 月 1 日 (0101) 凌晨 1 时 (0100)。

但是,任何用户能够用所需的格式来显示日期。注意在格式序列之前需要一个加号 "+"。假如没有出现此命令的预期输出,则尝试将他包含在单引号中:
$ date +’%H%M%S’
204748
您能够在序列中包含空格,这时您需要使用双引号:
$ date +"%H %M %S"
20 47 51

在日期的主页上列有三十多种不同的格式序列,这些序列能够按需要结合起来,以获得您最后的输出格式。

date 的输出还能够用于脚本中,如:
$ date -d ’2 day’
Thu Jan 29 19:02:02 EST 2004

-d 选项指示 date 显示其后字符串中所描述的时间。在上例中,我们需要显示从现在起(2004 年 1 月 27 日)两天后的日期。我们也能够需要显示三天前的日期,其命令为:
$ date -d ’-3 day’
Sun Jan 25 20:56:59 EST 2004

date 多种功能的另一个示例是能够向其输出附加字符串,为生成唯一的文档名提供了一种便利的方法。
$ ls -l | cat > $(date +ls_%d%b%y%H%M.out)
$ ls ls_*.out
ls_04Feb041633.out

在这里,我们将一个长文档列表的输出传送给 cat,他将我们的输出再传送到一个名为 ls_04Feb041609.out 的文档。注意我们为文档名使用了一个变量,由美元符号 "$" 表示。依次将 "ls_" 和 ".out" 附加到日期,其格式为月份中的日 (%d)、本地的月份名称缩写 (%b)、年份的最后两位数字 (%y)、小时 (%H) 和分钟 (%M),从而产生此文档名。

Sort 和 Uniq。 您能够从管道或从命令行所指定的文档对文本文档的行进行 sort 操作。除非另外指定,sort 对多列输出的第一列进行操作。在默认情况下,除非使用 -n 选项,数字型的列按字母顺序排序。

Sort 列能够用两种不同的格式指定。假如使用 -k 选项,则列的位置从 1 开始进行编号。您还能够使用 +POS1 格式,从第一列编号为零开始进行列的编号。以下两个命令产生相同的输出:
$ ls -l *.out | sort +5 -7
$ ls -l *.out | sort -k 6,8
-rw-r--r-- 1 bluher users 375 Dec 5 2002 fdisk.out
-rw-r--r-- 1 bluher users 2447 Dec 28 20:15 ls.out
-rw-r--r-- 1 bluher users 590 Jan 4 21:24 greps.out
-rw-r--r-- 1 bluher users 78 Jan 4 21:25 sgrep.out
...

在默认情况下,sort 命令的列分隔符是空格和制表符。能够使用 -t SEP 选项指定其他分隔符,其中 SEP 是您指定的分隔符号。sort 的默认顺序是从最低到最高,利用 -r 选项能够将顺序颠倒。

Sort 可用于很多不同的任务。例如,他可用于对文档输出进行排序(如 /etc/passwd),或如我们在下面所看到的那样,对 du 的输出进行排序。当使用 -m 选项时,sort 将文档合并,实际上并没有对他们进行排序。但是,假如您希望将他们排序,就应该在文档合并前对他们排序。

Sort 经常和 uniq 命令一起使用,从已排序的文档中删除完全相同的行。uniq 命令在管道中经常跟在 sort 命令的后面,还能够使用 -c 选项来计算某一行所出现的次数,或使用 -d 选项,只报告完全相同的行:
$ sort -m test.out test2_sort.out | uniq -c
1 Another test.
1 Testing testing
2 This is a test.

在这里我们合并两个文档 test.out 和 test2_sort.out。然后我们使用 -c 选项,将输出传送到 uniq,这样最后的结果是按字母顺序排列的列表,完全相同的行被删除,并带有一个关于每行出现频率的报告。

打印机控制

在多数情况下,打印机命令的使用相对较为明确。通过在 lpr 命令后面指定文档名,将作业发送到打印机。假如没有提供文档名,则假定使用标准输入。使用 lpq 命令,您能够获得关于发送到打印机的作业的状态报告。当您指定作业号时,Lprm 将作业从行打印机后台打印队列中删除。

$ lpr grep2.out
$ lpq
Printer:lp@linux ’lpdfilter drv=upp method=auto color=yes’
Queue:1 printable job
Server:pid 1929 active
Unspooler:pid 1930 active
Status:waiting for subserver to exit at 21:24:14.637
Rank   Owner/ID        Class Job Files        Size Time
active bluher@linux+928   A   928 grep2.out     779 21:24:14
done   bluher             A   877 (STDIN)    117258 13:09:53
$ lprm 928
Printer lp@linux:
checking perms ’cfA928linux.local’
dequeued ’cfA928linux.local’



在这里,当我们将作业发送到打印机后,我们查询其状态。Lpq 向我们显示编号为 877 的作业已完成,而我们刚发送的作业编号为 928。我们使用命令 lprm 928 将活动的作业从队列中删除.

喜欢本文,那就收藏到:

    Del.icio.us Google书签 Digg Live Bookmark Technorati Furl Yahoo书签 Facebook 百度搜藏 新浪ViVi 365Key网摘 天极网摘 和讯网摘 博拉网 POCO网摘 添加到饭否 QQ书签 Digbuzz我挖网
相关评论  我也要评论
还没有关于此文章的相关评论!
  • 昵称: (为空则显示guest)
  • 评论分数: ★ ★ ★★★ ★★★★ ★★★★★
  • 评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
  • 导航
    赞助商
    文章类别
    订阅