Linux 体系下令夺目指南
发布日期:2011-04-15
在“Linux 文件下令夺目指南”中,我们讨论了利用最底子和最常用 Linux 文件下令所需的底子信息。在本文中,我将对 Linux 体系下令作同样的讨论。
敷衍文件下令,我们在此处过细讨论了某些相称大抵和直观的办理下令。而只形貌了其他较巨大下令的结果,以便在您须要利用时,知道存在这些下令及其用途。本文不涉及对每个下令利用背后的基源头底子理的过细讨论,但是我们将讨论最底子和最有效的下令,这些下令用于监督和办理打印机办事、文件体系、磁盘和进程。
有关超等用户的更多信息
这里讨论的很多下令可以由惯例用户在其本身的文件和进程中实行。但是,某些下令,如 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-rr 1 bluher users 375 Dec 5 2002 fdisk.out
-rw-rr 1 bluher users 2447 Dec 28 20:15 ls.out
-rw-rr 1 bluher users 590 Jan 4 21:24 greps.out
-rw-rr 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 将活动的作业从行列步队中删除。
磁盘信息
无论您是维护本身的体系还是支持具有很多用户的企业,监督磁盘空间都是体系办理员更告急的职责之一。du、df 和 fdisk 下令提供了可用磁盘空间的差别视图。
du 下令提供对每个目次的文件空间利用环境的评估。在默认环境下,丈量的单位是块的数量,块的大小通常在摆设您的体系时确定。
在以下的示例中,体系是利用 1024 字节的块摆设的。要是没有指定目次,则 du 开始对当前目次举行谋略。-h 选项以易于读懂的情势提供大小的值:
$ du -h Documents
105k Documents/jj
573k Documents/John
682k Documents
可以利用 -a 选项变动输出,该选项指示 du 表现文件和目次的块数。选项 block-size=SIZE 指示 du 以 SIZE 所指定字节大小的块的数量来表现输出。
$ du block-size=512 Documents
209 Documents/jj
1146 Documents/John
1363 Documents
在默认环境下,du 还为每个子目次递归地打印信息。通过利用 max-depth=N 选项可以限定这种利用,此中 N 便是被报告的最大级数:
$ du max-depth=2 .
$ du max-depth=2 | sort -n
4 ./.xemacs
4 ./public_html
105 ./Documents/jj
573 ./Documents/Ian
682 ./Documents
2420 ./jdevhome/system
8350 ./jdevhome/system9.0.3.1035
13483 ./jdevhome/mywork
24252 ./jdevhome
...
du 报告目次和子目次的空间利用环境,而 df 报告已摆设文件体系的磁盘空间利用环境:
$ df
Filesystem 1k-blocks Used Available Use% Mounted on
/dev/hda6 4195632 1983656 2211976 48% /
/dev/hda5 14607 3778 10075 28% /boot
/dev/hda9 937372 494028 443344 53% /home
/dev/hda8 6297248 3876880 2420368 62% /opt
shmfs 256220 0 256220 0% /dev/shm
在这里,df 报告了五个文件体系的状态。与 du 雷同,df 利用 -h 选项提供人类可读的输出:
$ df -h
Filesystem Size Used Avail Use% Mounted on
/dev/hda6 4.0G 1.9G 2.1G 48% /
/dev/hda5 14M 3.7M 9.8M 28% /boot
/dev/hda9 915M 476M 440M 52% /home
/dev/hda8 6.0G 3.7G 2.3G 62% /opt
shmfs 250M 0 250M 0% /dev/shm
df 下令还容许您利用 -block-size=SIZE 选项来指定块的大小。
fdisk 下令是 Linux 的分区表利用下令。与 du 和 df 差别,没有 root 用户权限时不克不及运行该下令。要是指定了 -l 选项,则可以将它仅用于报告的目标。它提供了您的整个分区表的完备视图,而不但仅是您利用 df 所看到的扩展 Linux 分区:
# fdisk -l
Disk /dev/hda:240 heads, 63 sectors, 1940 cylinders
Units = cylinders of 15120 * 512 bytes
Device Boot Start End Blocks Id System
/dev/hda1 1 286 2162128+ c Win95 FAT32 (LBA)
/dev/hda2 * 288 1940 12496680 5 Extended
/dev/hda5 288 289 15088+ 83 Linux
/dev/hda6 290 844 4195768+ 83 Linux
/dev/hda7 845 983 1050808+ 82 Linux swap
/dev/hda8 984 1816 6297448+ 83 Linux
/dev/hda9 1817 1940 937408+ 83 Linux
进程监督
在繁忙的多用户体系中,进程监督也是 Linux 体系办理员的一项告急职责。在这方面,ps 和 top 是两个最有效的下令。
ps 下令提供了当前运行进程的快照。
生动翔实的一课
以下是 ps 的最大抵情势:
$ ps
PID TTY TIME CMD
3884 pts/1 00:00:00 bash
3955 pts/2 00:00:00 more
3956 pts/5 00:00:05 sqlplus
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 体系所需的最少限度的东西。