网络相关与系统管理用到的命令

netstat命令

netstat命令的功能是显示网络连接、路由表和网络接口信息,可以让用户得知目前都有哪些网络连接正在运作。

该命令的一般格式为:

netstat [选项]

命令中各选项的含义如下:

-a 显示所有socket,包括正在监听的。

-c 每隔1秒就重新显示一遍,直到用户中断它。

-i 显示所有网络接口的信息,格式同“ifconfig -e”。

-n 以网络IP地址代替名称,显示出网络连接情形。

-r 显示核心路由表,格式同“route -e”。

-t 显示TCP协议的连接情况。

-u 显示UDP协议的连接情况。

-v 显示正在进行的工作。

[例]在本地机上使用netstat命令。

$ netstat

Active Internet connections (w/o servers)

Proto Recv-Q Send-Q Local Address Foreign Address State

Active UNIX domain sockets (w/o servers)

Proto RefCnt Flags Type State I-Node Path

unix 1 [ ] STREAM CONNECTED 270 @00000008

unix 1 [ ] STREAM CONNECTED 150 @00000002

unix 1 [ ] STREAM CONNECTED 104 @00000001

unix 1 [ ] STREAM CONNECTED 222 @00000004

unix 1 [ ] STREAM CONNECTED 171 @00000003

unix 1 [ ] STREAM CONNECTED 271 /dev/log

unix 1 [ ] STREAM CONNECTED 225 /dev/log

unix 1 [ ] STREAM CONNECTED 223 /dev/log

unix 1 [ ] STREAM CONNECTED 203 /dev/log

unix 1 [ ] STREAM CONNECTED 105 /dev/log

……

nslookup命令

nslookup命令的功能是查询一台机器的IP地址和其对应的域名。它通常需要一台域名服务器来提供域名服务。如果用户已经设置好域名服务器,就可以用这个命令查看不同主机的IP地址对应的域名。

该命令的一般格式为:

nslookup [IP地址/域名]

[例]在本地机上使用nslookup命令。

$ nslookup

Default Server: name.tlc.com.cn

Address: 192.168.1.99

在符号“>”后面输入要查询的IP地址或域名并回车即可。如果要退出该命令,输入exit并回车即可。

finger命令

finger命令的功能是查询用户的信息,通常会显示系统中某个用户的用户名、主目录、停滞时间、登录时间、登录shell等信息。如果要查询远程机上的用户信息,需要在用户名后面接“@主机名”,采用[用户名@主机名]的格式,不过要查询的网络主机需要运行finger守护进程。

该命令的一般格式为:

finger [选项] [使用者] [用户@主机]

命令中各选项的含义如下:

-s 显示用户的注册名、实际姓名、终端名称、写状态、停滞时间、登录时间等信息。

-l 除了用-s选项显示的信息外,还显示用户主目录、登录shell、邮件状态等信息,以及用户主目录下的.plan、.project和.forward文件的内容。

-p 除了不显示.plan文件和.project文件以外,与-l选项相同。

[例]在本地机上使用finger命令。

$ finger xxq

Login: xxq Name:

Directory: /home/xxq Shell: /bin/bash

Last login Thu Jan 1 21:43 (CST) on tty1

No mail.

No Plan.

$ finger

Login Name Tty Idle Login Time Office Office Phone

root root *1 28 Nov 25 09:17

……

ping命令

ping命令用于查看网络上的主机是否在工作,它向该主机发送ICMP ECHO_REQUEST包。有时我们想从网络上的某台主机上下载文件,可是又不知道那台主机是否开着,就需要使用ping命令查看。

该命令的一般格式为:

ping [选项] 主机名/IP地址

命令中各选项的含义如下:

-c 数目 在发送指定数目的包后停止。

-d 设定SO_DEBUG的选项。

-f 大量且快速地送网络封包给一台机器,看它的回应。

-I 秒数 设定间隔几秒送一个网络封包给一台机器,预设值是一秒送一次。

-l 次数 在指定次数内,以最快的方式送封包数据到指定机器(只有超级用户可以使用此选项)。

-q 不显示任何传送封包的信息,只显示最后的结果。

-r 不经由网关而直接送封包到一台机器,通常是查看本机的网络接口是否有问题。

-s 字节数 指定发送的数据字节数,预设值是56,加上8字节的ICMP头,一共是64ICMP数据字节。

wall命令

这个命令的功能是对全部已登录的用户发送信息,用户可以先把要发送的信息写好存入一个文件中,然后输入:

wall < 文件名

这样就能对所有的用户发送信息了。

在上面的例子中符号“<”表示输入重定向,有关它的含义和用法请参阅第十章的有关内容。

例如:

wall ‘Thank you!’

Broadcast message from root (tty1) Fri Nov 26 14:15:07 1999…

Thank you!

执行以上命令后,用户的屏幕上显示出“Thank you!”信息后,并不出现系统提示符$(#),再次按回车键后,屏幕出现系统提示符。

write命令

write命令的功能是向系统中某一个用户发送信息。

该命令的一般格式为:

write 用户帐号 [终端名称]

例如:

$ write xxq

hello

此时系统进入发送信息状态,用户可以输入要发送的信息,输入完毕,希望退出发送状态时,按组合键即可。

上述命令执行的结果是,用户xxq的屏幕上会显示:

message from [email protected] tty1 at 15:51…

hello

EOF

mesg指令

mesg命令设定是否允许其他用户用write命令给自己发送信息。如果允许别人给自己发送信息,输入命令:

mesg y

否则,输入:

mesg n

对于超级用户,系统的默认值为 n;而对于一般用户系统的默认值为y。

如果mesg后不带任何参数,则显示当前的状态是y还是n,如:

$ mesg

is y

或:

mesg

is n

sync命令

sync命令是在关闭Linux系统时使用的。

用户需要注意的是,不能用简单的关闭电源的方法关闭系统,因为Linux象其他Unix系统一样,在内存中缓存了许多数据,在关闭系统时需要进行内存数据与硬盘数据的同步校验,保证硬盘数据在关闭系统时是最新的,只有这样才能确保数据不会丢失。一般正常的关闭系统的过程是自动进行这些工作的,在系统运行过程中也会定时做这些工作,不需要用户干预。

sync命令是强制把内存中的数据写回硬盘,以免数据的丢失。用户可以在需要的时候使用此命令。该命令的一般格式为:

sync

shutdown命令

shutdown 命令可以安全地关闭或重启Linux系统,它在系统关闭之前给系统上的所有登录用户提示一条警告信息。该命令还允许用户指定一个时间参数,可以是一个精确的时间,也可以是从现在开始的一个时间段。精确时间的格式是hh:mm,表示小时和分钟;时间段由“+”和分钟数表示。系统执行该命令后,会自动进行数据同步的工作。该命令的一般格式为:

shutdown [选项] [时间] [警告信息]

命令中各选项的含义为:

  • k 并不真正关机,而只是发出警告信息给所有用户。

  • r 关机后立即重新启动。

  • h 关机后不重新启动。

  • f 快速关机,重启动时跳过fsck。

  • n 快速关机,不经过init程序。

  • c 取消一个已经运行的shutdown。

需要特别说明的是,该命令只能由超级用户使用。

例1:系统在十分钟后关机,并且马上重新启动。

shutdown – r +10

例2:系统马上关机,并且不重新启动。

shutdown – h now

free命令

free命令的功能是查看当前系统内存的使用情况,它显示系统中剩余及已用的物理内存和交换内存,以及共享内存和被核心使用的缓冲区。该命令的一般格式为:

free [-b | -k | -m]

命令中各选项的含义如下:

-b 以字节为单位显示。

-k 以K字节为单位显示。

-m 以兆字节为单位显示。

例:

$ free

total used free shared buffers cached

Mem: 63076 32020 31056 8204 16360 6048

-/+ buffers/cache: 9612 53464

Swap: 64476 2240 62236

uptime命令

uptime命令显示系统已经运行了多长时间,它依次显示下列信息:现在时间、系统已经运行了多长时间、目前有多少登录用户、系统在过去的1分钟、5分钟和15分钟内的平均负载。该命令的一般格式为:

uptime

例:

uptime

4:43pm up 1 day, 5:51, 2 user, load average: 0.01, 0.01, 0.00

与用户有关的命令

passwd命令

出于系统安全考虑,Linux系统中的每一个用户除了有其用户名外,还有其对应的用户口令。因此使用useradd命令增加时,还需使用passwd命令为每一位新增加的用户设置口令;用户以后还可以随时用passwd命令改变自己的口令。该命令的一般格式为:

passwd [用户名]

其中用户名为需要修改口令的用户名。只有超级用户可以使用“passwd 用户名”修改其他用户的口令,普通用户只能用不带参数的passwd命令修改自己的口令。该命令的使用方法如下:

输入passwd< Enter>;

在(current) UNIX passwd:下输入当前的口令

在new password:提示下输入新的口令(在屏幕上看不到这个口令):

系统提示再次输入这个新口令。

输入正确后,这个新口令被加密并放入/etc/shdow文件。选取一个不易被破译的口令是很重要的。选取口令应遵守如下规则:

口令应该至少有六位(最好是八位)字符;

口令应该是大小写字母、标点符号和数字混杂的。

超级用户修改其他用户(xxq)的口令的过程如下,

passwd xxq

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully

su命令

这个命令非常重要。它可以让一个普通用户拥有超级用户或其他用户的权限,也可以让超级用户以普通用户的身份做一些事情。普通用户使用这个命令时必须有超级用户或其他用户的口令。如要离开当前用户的身份,可以打exit。

该命令的一般形式为:

su [选项] [? ] [使用者帐号]

说明:若没有指定使用者帐号,则系统预设值为超级用户root。

该命令中各选项的含义分别为:

? c 执行一个命令后就结束。

? 加了这个减号的目的是使环境变量和欲转换的用户相同。

? m 保留环境变量不变。

例1: 变成root用户

$ su ?

password: 【输入超级用户的密码】

例2: 变成xu使用者,并执行一个命令就结束。

$ su -xu ? c “rmdir cat1”

其他命令

echo命令

echo命令的功能是在显示器上显示一段文字,一般起到一个提示的作用。该命令的一般格式为:

echo [ -n ] 字符串

其中选项n表示输出文字后不换行;字符串可以加引号,也可以不加引号。用echo命令输出加引号的字符串时,将字符串原样输出;用echo命令输出不加引号的字符串时,将字符串中的各个单词作为字符串输出,各字符串之间用一个空格分割。

例1:

$ echo ‘Thank you !’

Thank you !

例2:

$ echo Thank you !

Thank you !

cal命令

cal命令的功能是显示某年某月的日历。该命令的一般格式为:

cal [选项] [月 [年]]

命令中各选项的含义为:

  • j 显示出给定月中的每一天是一年中的第几天(从1月1日算起)。

  • y 显示出整年的日历。

例1 显示1999年11月的日历。

$ cal 11 1999

November 1999

Su Mo Tu We Th Fr Sa

1 2 3 4 5 6

7 8 9 10 11 12 13

14 15 16 17 18 19 20

21 22 23 24 25 26 27

28 29 30

例2 显示1999年11月的每一天是一年中的第几天。

$ cal – j 11 1999

November 1999

Sun Mon Tue Wed Thu Fri Sat

305 306 307 308 309 310

311 312 313 314 315 316 317

318 319 320 321 322 323 324

325 326 327 328 329 330 331

332 333 334

date命令

date命令的功能是显示和设置系统日期和时间。该命令的一般格式为:

date [选项] 显示时间格式(以+开头,后面接格式)

date 设置时间格式

命令中各选项的含义分别为:

-d datestr, --date datestr 显示由datestr描述的日期

-s datestr, --set datestr 设置datestr 描述的日期

-u, --universal 显示或设置通用时间

时间域

% H 小时(00…23)

% I 小时(01…12)

% k 小时(0…23)

% l 小时(1…12)

% M 分(00…59)

% p 显示出AM或PM

% r 时间(hh:mm:ss AM或PM),12小时

% s 从1970年1月1日00:00:00到目前经历的秒数

% S 秒(00…59)

% T 时间(24小时制)(hh:mm:ss)

% X 显示时间的格式(%H:%M:%S)

% Z 时区

日期域

% a 星期几的简称( Sun…Sat)

% A 星期几的全称( Sunday…Saturday)

% b 月的简称(Jan…Dec)

% B 月的全称(January…December)

% c 日期和时间( Mon Nov 8 14:12:46 CST 1999)

% d 一个月的第几天(01…31)

% D 日期(mm/dd/yy)

% h 和%b选项相同

% j 一年的第几天(001…366)

% m 月(01…12)

% w 一个星期的第几天(0代表星期天)

% W 一年的第几个星期(00…53,星期一为第一天)

% x 显示日期的格式(mm/dd/yy)

% y 年的最后两个数字( 1999则是99)

% Y 年(例如:1970,1996等)

需要特别说明的是,只有超级用户才能用date命令设置时间,一般用户只能用date命令显示时间。

例1:用指定的格式显示时间。

$ date ‘+This date now is =>%x ,time is now =>%X ,thank you !’

This date now is =>11/12/99 ,time is now =>17:53:01 ,thank you !

例2:用预定的格式显示当前的时间。

date

Fri Nov 26 15:20:18 CST 1999

例3:设置时间为下午14点36分。

date -s 14:36:00

Fri Nov 26 14:15:00 CST 1999

例4:设置时间为1999年11月28号。

date -s 991128

Sun Nov 28 00:00:00 CST 1999

clear命令

clear命令的功能是清除屏幕上的信息,它类似于DOS中的 cls命令。清屏后,提示符移动到屏幕左上角。

例如:$ clear

进程调度

kill命令

当需要中断一个前台进程的时候,通常是使用组合键;但是对于一个后台进程恐怕就不是一个组合键所能解决的了,这时就必须求助于kill命令。该命令可以终止后台进程。至于终止后台进程的原因很多,或许是该进程占用的CPU时间过多;或许是该进程已经挂死。总之这种情况是经常发生的。

kill命令是通过向进程发送指定的信号来结束进程的。如果没有指定发送信号,那么默认值为TERM信号。TERM信号将终止所有不能捕获该信号的进程。至于那些可以捕获该信号的进程可能就需要使用kill(9)信号了,该信号是不能被捕捉的。

kill命令的语法格式很简单,大致有以下两种方式:

kill [-s 信号 | -p ] [ -a ] 进程号 …

kill -l [信号]

-s 指定需要送出的信号。既可以是信号名也可以对应数字。

-p 指定kill命令只是显示进程的pid,并不真正送出结束信号。

-l 显示信号名称列表,这也可以在/usr/include/linux/signal.h文件中找到。

kill命令的使用

下面看看该命令的使用。

[例24] 在执行一条find指令时由于时间过长,决定终止该进程。

首先应该使用ps命令来查看该进程对应的PID,键入ps,显示如下:

PID TTY TIME COMMAND

285 1 00:00:00 -bash

287 3 00:00:00 -bash

289 5 00:00:00 /sbin/mingetty tty5

290 6 00:00:00 /sbin/mingetty tty6

312 3 00:00:00 telnet bbs3

341 4 00:00:00 /sbin/mingetty tty4

345 1 00:00:00 find / -name foxy.jpg

348 1 00:00:00 ps

可以看到该进程对应的PID是345,现在使用kill命令来终止该进程。键入:

# kill 345

再用ps命令查看,就可以看到,find进程已经被杀掉了。
 
  [例25] 杀掉进程11721

# ps

PID TTY TIME COMMAND

11668 p1 00:00:00 -tcsh

11721 p1 00:00:00 cat

11737 p1 00:00:00 ps

# kill 11721

[1] Terminated cat

#

有时候可能会遇到这样的情况,某个进程已经挂死或闲置,使用kill命令却杀不掉。这时候就必须发送信号9,强行关闭此进程。当然这种“野蛮”的方法很可能会导致打开的文件出现错误或者数据丢失之类的错误。所以不到万不得已不要使用强制结束的办法。如果连信号9都不响应,那恐怕就只有重新启动计算机了。

控制多个进程命令

Linux可使用户同时运行多个进程,还允许用户或系统管理员能控制正在运行的进程。

nohup命令

理论上,我们一般退出Linux系统时,会把所有的程序全部结束掉,包括那些后台程序。但有时候,例如您正在编辑一个很长的程序,但是您下班或是有事需要先退出系统,这时您又不希望系统把您编辑那么久的程序结束掉,希望退出系统时,程序还能继续执行。这时,我们就可以使用nohup命令使进程在用户退出后仍继续执行。

一般这些进程我们都是让它在后台执行,结果则会写到用户自己的目录下的nohup.out这个文件里(也可以使用输出重定向,让它输出到一个特定的文件)。[例26]

$ nohup sort sales.dat &

这条命令告诉sort命令忽略用户已退出系统,它应该一直运行,直到进程完成。利用这种方法,可以启动一个要运行几天甚至几周的进程,而且在它运行时,用户不需要去登录。

nohup命令把一条命令的所有输出和错误信息送到nohup.out文件中。若将输出重定向,则只有错误信息放在nohup.out文件中。

renice命令

renice命令允许用户修改一个正在运行进程的优先权。

利用renice命令可以在命令执行时调整其优先权。其格式如下:

$ renice -number PID

其中,参数number与nice命令的number意义相同。

注:

(1) 用户只能对自己所有的进程使用renice命令。

(2) root用户可以在任何进程上使用renice命令。

(3) 只有root用户才能提高进程的优先权。

who命令

该命令主要用于查看当前在线上的用户情况。这个命令非常有用。如果用户想和其他用户建立即时通讯,比如使用talk命令,那么首先要确定的就是该用户确实在线上,不然talk进程就无法建立起来。又如,系统管理员希望监视每个登录的用户此时此刻的所作所为,也要使用who命令。

who命令的常用语法格式如下:

who [imqsuwHT] [–count] [–idle] [–heading] [–help] [–message] [–mesg] [–version] [–writable] [file] [am i]

所有的选项都是可选的,也就是说可以单独使用who命令。不使用任何选项时,who命令将显示以下三项内容:

login name:登录用户名;

terminal line:使用终端设备;

login time:登录到系统的时间。

如果给出的是两个非选项参数,那么who命令将只显示运行who程序的用户名、登录终端和登录时间。通常这两个参数是“am i”,即该命令格式为:“who am i”。

下面对who命令的常用参数进行说明。

-m 和“who am i”的作用一样,显示运行该程序的用户名。

-q,–count 只显示用户的登录帐号和登录用户的数量,该选项优先级高于其他任何选项。

-s 忽略。主要是用于和其他版本的who命令兼容。

-i,-u,–idle 在登录时间后面显示该用户最后一次对系统进行操作至今的时间,也就是常说的“发呆”时间。其中“.”符号代表该用户在前1秒仍然处于活动状态;“old”则表示该用户空闲已经超过了24小时。

-H,–heading 显示一行列标题。常用的标题如表4-2所示。

表4-2 who命令输出常用标题

标 题

说 明

USER

用户登录帐号

LINE

用户登录使用终端

LOGIN-TIME

用户登录时间

IDLE

用户空闲时间,即未进行操作的时间

PID

用户登录shell的进程ID

FROM

用户网络地址

-w,-T–mesg,–message,–writable 和-s选项一样,在登录帐号后面显示一个字符来表示用户的信息状态:

+:允许写信息;

-:不允许写信息;

?:不能找到终端设备。

–help 在标准输出上显示帮助信息。

–version 在标准输出上显示版本信息。

下面介绍who命令的一些基本用法。

如果需要查看在系统上究竟有哪些用户,可以直接使用who命令。

[例17] 查看登录到系统的用户情况

$ who

root tty1 Mar 17 13:49

foxy tty2 Mar 17 13:49

root tty3 Mar 17 13:49

bbs ttyp0 Mar 17 13:49 (river.net

可以看到,现在系统一共有四个用户。第一列是登录用户的帐号;第二列是登录所使用的终端;第三列是登录时间;第四列是用户从什么地方登录的网络地址,这里是域名。

一般来说,这样就可以了解登录用户的大致情况了。但有时上面的显示不是那么直观,因为没有标题说明,不容易看懂,这时就需要使用-H选项了。

[例18] 查看登录用户的详细情况,键入:

$ who -uH

显示如下:

USER LINE LOGIN-TIME IDLE FROM

root tty1 Mar 17 13:49 .

foxy tty2 Mar 17 13:49 00:01

root tty3 Mar 17 13:49 00:01

bbs ttyp0 Mar 17 13:49 00:01 (river.net

这样一目了然。其中-u选项指定显示用户空闲时间,所以可以看到多了一项IDLE。第一个root用户的IDLE项是一个“.”,这就说明该用户在前1秒仍然是活动的,而其他用户后面都有一个时间,称为空闲时间。

最后来看看使用“who am i”格式命令的结果:

233.river.net!root tty1 Mar 17 13:49

可见只显示出了运行该who命令的用户情况,当然这时候不存在空闲时间。

who命令应用起来非常简单,可以比较准确地掌握用户的情况,所以使用非常广泛。

w命令

该命令也用于显示登录到系统的用户情况,但是与who不同的是,w命令功能更加强大,它不但可以显示有谁登录到系统,还可以显示出这些用户当前正在进行的工作,并且统计数据相对who命令来说更加详细和科学,可以认为w命令就是who命令的一个增强版。

w命令的显示项目按以下顺序排列:当前时间,系统启动到现在的时间,登录用户的数目,系统在最近1秒、5秒和15秒的平均负载。然后是每个用户的各项数据,项目显示顺序如下:登录帐号、终端名称、远程主机名、登录时间、空闲时间、JCPU、PCPU、当前正在运行进程的命令行。

其中JCPU时间指的是和该终端(tty)连接的所有进程占用的时间。这个时间里并不包括过去的后台作业时间,但却包括当前正在运行的后台作业所占用的时间。而PCPU时间则是指当前进程(即在WHAT项中显示的进程)所占用的时间。下面介绍该命令的具体用法和参数。

语法格式如下:

w -[husfV] [user]

下面对参数进行说明:

-h 不显示标题。

-u 当列出当前进程和CPU时间时忽略用户名。这主要是用于执行su命令后的情况。

-s 使用短模式。不显示登录时间、JCPU和PCPU时间。

-f 切换显示FROM项,也就是远程主机名项。默认值是不显示远程主机名,当然系统管理员可以对源文件作一些修改使得显示该项成为默认值。

-V 显示版本信息。

User 只显示指定用户的相关情况。

[例19] 显示当前登录到系统的用户的详细情况

$ w

2:50pm up 2 min, 4 users, load average:0.22,0.16,0.06

USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT

root tty1 2:49pm 0:00s 0.56s 0.10s w

foxy tty2 2:49pm 1:09 0.42s 0.42s bash

root tty3 2:49pm 46.00s 0.67s 0.25s telnet bbs3

bbs ttyp0 river.net 2:49pm 45.00s 0.49s 0.49s bbs h river.net

ps命令

  1. ps简介

前面介绍的两个命令都是用于查看当前系统用户的情况,下面就来看看进程的情况,这也是本章的主题。要对进程进行监测和控制,首先必须要了解当前进程的情况,也就是需要查看当前进程,而ps命令就是最基本同时也是非常强大的进程查看命令。使用该命令可以确定有哪些进程正在运行和运行的状态、进程是否结束、进程有没有僵死、哪些进程占用了过多的资源等等。总之大部分信息都是可以通过执行该命令得到的。

  1. ps命令及其参数

ps命令最常用的还是用于监控后台进程的工作情况,因为后台进程是不和屏幕键盘这些标准输入/输出设备进行通信的,所以如果需要检测其情况,便可以使用ps命令了。

该命令语法格式如下:

ps [选项]

下面对命令选项进行说明:

-e 显示所有进程。

-f 全格式。

-h 不显示标题。

-l 长格式。

-w 宽输出。

a 显示终端上的所有进程,包括其他用户的进程。

r 只显示正在运行的进程。

x 显示没有控制终端的进程。

O[+|-] k1 [,[+|-] k2 [,…]] 根据SHORT KEYS、k1、k2中快捷键指定的多级排序顺序显示进程列表。对于ps的不同格式都存在着默认的顺序指定。这些默认顺序可以被用户的指定所覆盖。其中“+”字符是可选的,“-”字符是倒转指定键的方向。

pids 只列出指定进程的情况。各进程ID之间使用逗号分隔。该进程列表必须在命令行参数的最后一个选项后面紧接着给出,中间不能插入空格。比如:ps -f1,4,5。

以下介绍长命令行选项,这些选项都使用“–”开头:

–sort X[+|-] key [,[+|-] key [,…]] 从SORT KEYS段中选一个多字母键。“+”字符是可选的,因为默认的方向就是按数字升序或者词典顺序。比如: ps -jax -sort=uid,-ppid,+pid。

–help 显示帮助信息。

–version 显示该命令的版本信息。

在前面的选项说明中提到了排序键,接下来对排序键作进一步说明。需要注意的是排序中使用的值是ps使用的内部值,并非仅用于某些输出格式的伪值。排序键列表见表4-3。

表4-3 排序键列表

短格式

长格式

说 明

c

cmd

可执行的简单名称

C

cmdline

完整命令行

f

flags

长模式标志

g

pgrp

进程的组ID

G

tpgid

控制tty进程组ID

j

cutime

累计用户时间

J

cstime

累计系统时间

k

utime

用户时间

K

stime

系统时间

m

min_flt

次要页错误的数量

M

maj_flt

主要页错误的数量

n

cmin_flt

累计次要页错误

N

cmaj_flt

累计主要页错误

o

session

对话ID

p

pid

进程ID

P

ppid

父进程ID

r

rss

驻留大小

R

resident

驻留页

s

size

内存大小(千字节)

S

share

共享页的数量

t

tty

tty次要设备号

T

start_time

进程启动的时间

U

uid

UID

u

user

用户名

v

vsize

总的虚拟内存数量(字节)

y

priority

内核调度优先级

  1. 常用ps命令参数

前面两节介绍的参数可能让读者觉得有些可怕,实际上这是一个非常容易使用的命令,一般的用户只需掌握一些最常用的命令参数就可以了。

最常用的三个参数是u、a、x,下面将通过例子来说明其具体用法。

[例20] 以root身份登录系统,查看当前进程状况

$ ps

PID TTY TIME COMMAND

5800 ttyp0 00:00:00 bash

5835 ttyp0 00:00:00 ps

可以看到,显示的项目共分为四项,依次为PID(进程ID)、TTY(终端名称)、TIME(进程执行时间)、COMMAND(该进程的命令行输入)。

可以使用u选项来查看进程所有者及其他一些详细信息,如下所示:

$ ps u

USER PID %CPU %MEM USZ RSS TTY STAT START TIME COMMAND

test 5800 0.0 0.4 1892 1040 ttyp0 S Nov27 0:00 -bash

test 5836 0.0 0.3 2528 856 ttyp0 R Nov27 0:00 ps u

在bash进程前面有条横线,意味着该进程便是用户的登录shell,所以对于一个登录用户来说带短横线的进程只有一个。还可以看到%CPU、%MEM两个选项,前者指该进程占用的CPU时间和总时间的百分比;后者指该进程占用的内存和总内存的百分比。

在这种情况下看到了所有控制终端的进程;但是对于其他那些没有控制终端的进程还是没有观察到,所以这时就需要使用x选项。使用x选项可以观察到所有的进程情况。

[例21] 下面是使用x选项的例子:

$ ps x

PID TTY STAT TIME COMMAND

5800 ttyp0 S 0:00 -bash

5813 ttyp1 S 0:00 -bash

5921 ttyp0 S 0:00 man ps

5922 ttyp0 S 0:00 sh -c /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz | /

5923 ttyp0 S 0:00 /usr/bin/gunzip -c /var/catman/cat1/ps.1.gz

5924 ttyp0 S 0:00 /usr/bin/less -is

5941 ttyp1 R 0:00 ps x

可以发现突然一下子就多出了那么多的进程。这些多出来的进程就是没有控制终端的进程。

前面看到的所有进程都是test用户自己的。其实还有许多其他用户在使用着系统,自然也就对应着其他的很多进程。如果想对这些进程有所了解,可以使用a选项来查看当前系统所有用户的所有进程。经常使用的是aux组合选项,这可以显示最详细的进程情况。

[例22]

$ ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.0 0.0 1136 64 ? S Nov25 0:02 init [3]

root 2 0.0 0.0 0 0 ? SW Nov25 0:00 [kflushd]

root 3 0.0 0.0 0 0 ? SW Nov25 0:03 [kupdate]

root 4 0.0 0.0 0 0 ? SW Nov25 0:00 [kpiod]

root 5 0.0 0.0 0 0 ? SW Nov25 0:00 [kswapd]

root 163 0.0 0.1 1628 332 ? S Nov25 0:02 sshd

root 173 0.0 0.0 1324 200 ? S Nov25 0:00 syslogd

root 181 0.0 0.0 1420 0 ? SW Nov25 0:00 [klogd]

daemon 191 0.0 0.1 1160 312 ? S Nov25 0:00 /usr/sbin/atd

root 201 0.0 0.1 1348 492 ? S Nov25 0:00 crond

root 212 0.0 0.0 1292 68 ? S Nov25 0:00 inetd

……

在显示的最前面是其他用户的进程情况,可以看到有root、daemon等用户以及他们所启动的进程。

在上面的例子中,介绍了ps命令最常见的一些选项和选项组合,用户可以根据自己的需要选用。

top命令

top命令和ps命令的基本作用是相同的,显示系统当前的进程和其他状况;但是top是一个动态显示过程,即可以通过用户按键来不断刷新当前状态。如果在前台执行该命令,它将独占前台,直到用户终止该程序为止。

比较准确的说,top命令提供了实时的对系统处理器的状态监视。它将显示系统中CPU最“敏感”的任务列表。该命令可以按CPU使用。内存使用和执行时间对任务进行排序;而且该命令的很多特性都可以通过交互式命令或者在个人定制文件中进行设定。在后面的介绍中将把命令参数和交互命令分开讲述。

下面是该命令的语法格式:

top [-] [d delay] [q] [c] [s] [S] [i]

d 指定每两次屏幕信息刷新之间的时间间隔。当然用户可以使用s交互命令来改变之。

q 该选项将使top没有任何延迟的进行刷新。如果调用程序有超级用户权限,那么top将以尽可能高的优先级运行。

S 指定累计模式。

s 使top命令在安全模式中运行。这将去除交互命令所带来的潜在危险。

i 使top不显示任何闲置或者僵死进程。

c 显示整个命令行而不只是显示命令名

top命令显示的项目很多,默认值是每5秒更新一次,当然这是可以设置的。显示的各项目为:

uptime 该项显示的是系统启动时间、已经运行的时间和三个平均负载值(最近1秒,5秒,15秒的负载值)。

processes 自最近一次刷新以来的运行进程总数。当然这些进程被分为正在运行的,休眠的,停止的等很多种类。进程和状态显示可以通过交互命令t来实现。

CPU states 显示用户模式,系统模式,优先级进程(只有优先级为负的列入考虑)和闲置等各种情况所占用CPU时间的百分比。优先级进程所消耗的时间也被列入到用户和系统的时间中,所以总的百分比将大于100%。

Mem 内存使用情况统计,其中包括总的可用内存,空闲内存,已用内存,共享内存和缓存所占内存的情况。

Swap 交换空间统计,其中包括总的交换空间,可用交换空间,已用交换空间。

PID 每个进程的ID。

PPID 每个进程的父进程ID。

UID 每个进程所有者的UID 。

USER 每个进程所有者的用户名。

PRI 每个进程的优先级别。

NI 该进程的优先级值。

SIZE 该进程的代码大小加上数据大小再加上堆栈空间大小的总数。单位是KB。

TSIZE 该进程的代码大小。对于内核进程这是一个很奇怪的值。

DSIZE 数据和堆栈的大小。

TRS 文本驻留大小。

D 被标记为“不干净”的页项目。

LIB 使用的库页的大小。对于ELF进程没有作用。

RSS 该进程占用的物理内存的总数量,单位是KB。

SHARE 该进程使用共享内存的数量。

STAT 该进程的状态。其中S代表休眠状态;D代表不可中断的休眠状态;R代表运行状态;Z代表僵死状态;T代表停止或跟踪状态。

TIME 该进程自启动以来所占用的总CPU时间。如果进入的是累计模式,那么该时间还包括这个进程子进程所占用的时间。且标题会变成CTIME。

%CPU 该进程自最近一次刷新以来所占用的CPU时间和总时间的百分比。

%MEM 该进程占用的物理内存占总内存的百分比。

COMMAND 该进程的命令名称,如果一行显示不下,则会进行截取。内存中的进程会有一个完整的命令行。

下面介绍在top命令执行过程中可以使用的一些交互命令。从使用角度来看,熟练的掌握这些命令比掌握选项还重要一些。这些命令都是单字母的,如果在命令行选项中使用了s选项,则可能其中一些命令会被屏蔽掉。

<空格> 立即刷新显示。

Ctrl+L 擦除并且重写屏幕。

h或者? 显示帮助画面,给出一些简短的命令总结说明。

k 终止一个进程。系统将提示用户输入需要终止的进程PID,以及需要发送给该进程什么样的信号。一般的终止进程可以使用15信号;如果不能正常结束那就使用信号9强制结束该进程。默认值是信号15。在安全模式中此命令被屏蔽。

i 忽略闲置和僵死进程。这是一个开关式命令。

q 退出程序。

r 重新安排一个进程的优先级别。系统提示用户输入需要改变的进程PID以及需要设置的进程优先级值。输入一个正值将使优先级降低,反之则可以使该进程拥有更高的优先权。默认值是10。

S 切换到累计模式。

s 改变两次刷新之间的延迟时间。系统将提示用户输入新的时间,单位为s。如果有小数,就换算成m s。输入0值则系统将不断刷新,默认值是5 s。需要注意的是如果设置太小的时间,很可能会引起不断刷新,从而根本来不及看清显示的情况,而且系统负载也会大大增加。

f或者F 从当前显示中添加或者删除项目。

o或者O 改变显示项目的顺序。

l 切换显示平均负载和启动时间信息。

m 切换显示内存信息。

t 切换显示进程和CPU状态信息。

c 切换显示命令名称和完整命令行。

M 根据驻留内存大小进行排序。

P 根据CPU使用百分比大小进行排序。

T 根据时间/累计时间进行排序。

W 将当前设置写入~/.toprc文件中。这是写top配置文件的推荐方法。

从上面的介绍中可以看到,top命令是一个功能十分强大的监控系统的工具,尤其对于系统管理员而言更是如此。一般的用户可能会觉得ps命令其实就够用了,但是top命令的强劲功能确实提供了不少方便。下面来看看实际使用的情况。

[例23] 键入top命令查看系统状况

$ top

1:55pm up 7 min, 4 user, load average:0.07,0.09,0.06

29 processes:28 sleeping, 1 running, 0 zombie, 0 stopped

CPU states: 4.5% user, 3.6% system, 0.0% nice, 91.9% idle

Mem: 38916K av, 18564K used, 20352K free, 11660K shrd, 1220K buff

Swap: 33228K av, 0K used, 33228K free, 11820K cached

PID USER PRI NI SIZE RSS SHARE STAT LIB %CPU %MEM TIME COMMAND

363 root 14 0 708 708 552 R 0 8.1 1.8 0:00 top

1 root 0 0 404 404 344 S 0 0.0 1.0 0:03 init

2 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 kflushd

3 root -12 -12 0 0 0 SW< 0 0.0 0.0 0:00 kswapd

4 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread

5 root 0 0 0 0 0 SW 0 0.0 0.0 0:00 md_thread

312 root 1 0 636 636 488 S 0 0.0 1.6 0:00 telnet

285 root 6 0 1140 1140 804 S 0 0.0 2.9 0.00 bash

286 root 0 0 1048 1048 792 S 0 0.0 2.6 0.00 bash

25 root 0 0 364 364 312 S 0 0.0 0.9 0.00 kerneld

153 root 0 0 456 456 372 S 0 0.0 1.1 0.00 syslogd

160 root 0 0 552 552 344 S 0 0.0 1.4 0.00 klogd

169 daemon 0 0 416 416 340 S 0 0.0 1.0 0.00 atd

178 root 2 0 496 496 412 S 0 0.0 1.2 0.00 crond

187 bin 0 0 352 352 284 S 0 0.0 0.9 0.00 portmap

232 root 0 0 500 500 412 S 0 0.0 1.2 0.00 rpc.mountd

206 root 0 0 412 412 344 S 0 0.0 1.0 0.00 inetd

215 root 0 0 436 436 360 S 0 0.0 1.1 0.00 icmplog

第一行的项目依次为当前时间、系统启动时间、当前系统登录用户数目、平均负载。第二行为进程情况,依次为进程总数、休眠进程数、运行进程数、僵死进程数、终止进程数。第三行为CPU状态,依次为用户占用、系统占用、优先进程占用、闲置进程占用。第四行为内存状态,依次为平均可用内存、已用内存、空闲内存、共享内存、缓存使用内存。第五行为交换状态,依次为平均可用交换容量、已用容量、闲置容量、高速缓存容量。然后下面就是和ps相仿的各进程情况列表了。

总的来说,top命令的功能强于ps,但需要长久占用前台,所以用户应该根据自己的情况来使用这个命令。

目录的创建与删除命令

mkdir命令

功能:创建一个目录(类似DOS下的md命令)。

语法:mkdir [选项] dirname

说明:该命令创建由dirname命名的目录。要求创建目录的用户在当前目录中(dirname的父目录中)具有写权限,并且dirname不能是当前目录中已有的目录或文件名称。

命令中各选项的含义为:

  • m 对新建目录设置存取权限。也可以用chmod命令设置。

  • p 可以是一个路径名称。此时若路径中的某些目录尚不存在, 加上此选项后,系统将自动建立好那些尚不存在的目录,即一次可以建立多个目录。

例如:在当前目录中建立inin 和inin下的/mail目录,也就是连续建两个目录。

$ mkdir - p - m 700 ./inin/mail/

该命令的执行结果是在当前目录中创建嵌套的目录层次inin /mail,权限设置为只有文件主有读、写和执行权限。

rmdir 命令

功能:删除空目录。

语法:rmdir [选项] dirname

说明:dirname表示目录名。该命令从一个目录中删除一个或多个子目录项。需要特别注意的是,一个目录被删除之前必须是空的。(注意,rm - r dir命令可代替rmdir,但是有很大危险性。)删除某目录时也必须具有对父目录的写权限。

命令中各选项的含义为:

  • p 递归删除目录dirname,当子目录删除后其父目录为空时,也一同被删除。如果整个路径被删除或者由于某种原因保留部分路径,则系统在标准输出上显示相应的信息。

例如:

$ rmdir - p /usr/xu/txt

将/usr/xu/txt目录删除。

改变工作目录、显示目录内容命令

cd 命令

功能:改变工作目录。

语法:cd [directory]

说明:该命令将当前目录改变至directory所指定的目录。若没有指定directory,则回到用户的主目录。为了改变到指定目录,用户必须拥有对指定目录的执行和读权限。

该命令可以使用通配符(通配符含义请参见第十章)。

例如:假设用户当前目录是:/home/xu,现需要更换到/home/xu/pro目录中,

$ cd pro

此时,用户可以执行pwd命令来显示工作目录。

$ pwd

/home/xu/pro

pwd 命令

在Linux层次目录结构中,用户可以在被授权的任意目录下利用mkdir命令创建新目录,也可以利用cd命令从一个目录转换到另一个目录。然而,没有提示符来告知用户目前处于哪一个目录中。要想知道当前所处的目录,可以使用pwd命令,该命令显示整个路径名。

语法:pwd

说明:此命令显示出当前工作目录的绝对路径。

例:$ pwd

/home/xu

显示的路径名为/home/xu,每个目录名都用“/”隔开,根目录以开头的“/”表示。

ls 命令

ls是英文单词list的简写,其功能为列出目录的内容。这是用户最常用的一个命令之一,因为用户需要不时地查看某个目录的内容。该命令类似于DOS下的dir命令。

语法:ls [选项] [目录或是文件]

对于每个目录,该命令将列出其中的所有子目录与文件。对于每个文件,ls将输出其文件名以及所要求的其他信息。默认情况下,输出条目按字母顺序排序。当未给出目录名或是文件名时,就显示当前目录的信息。

命令中各选项的含义如下:

  • a 显示指定目录下所有子目录与文件,包括隐藏文件。

  • A 显示指定目录下所有子目录与文件,包括隐藏文件。但不列出“.”和“…”。

  • b 对文件名中的不可显示字符用八进制逃逸字符显示。

  • c 按文件的修改时间排序。

  • C 分成多列显示各项。

  • d 如果参数是目录,只显示其名称而不显示其下的各文件。往往与l选项一起使用,以得到目录的详细信息。

  • f 不排序。该选项将使lts选项失效,并使aU选项有效。

  • F 在目录名后面标记“/”,可执行文件后面标记“*”,符号链接后面标记“@”,管道(或FIFO)后面标记“|”,socket文件后面标记“=”。

  • i 在输出的第一列显示文件的i节点号。

  • l 以长格式来显示文件的详细信息。这个选项最常用。每行列出的信息依次是:

文件类型与权限 链接数 文件属主 文件属组 文件大小 建立或最近修改的时间 名字

对于符号链接文件,显示的文件名之后有“—〉”和引用文件路径名。

对于设备文件,其“文件大小”字段显示主、次设备号,而不是文件大小。目录中的总块数显示在长格式列表的开头,其中包含间接块。

  • L 若指定的名称为一个符号链接文件,则显示链接所指向的文件。

  • m 输出按字符流格式,文件跨页显示,以逗号分开。

  • n 输出格式与l选项相同,只不过在输出中文件属主和属组是用相应的UID号和GID号来表示,而不是实际的名称。

  • o 与l选项相同,只是不显示拥有者信息。

  • p 在目录后面加一个“/”。

  • q 将文件名中的不可显示字符用“?”代替。

  • r 按字母逆序或最早优先的顺序显示输出结果。

  • R 递归式地显示指定目录的各个子目录中的文件。

  • s 给出每个目录项所用的块数,包括间接块。

  • t 显示时按修改时间(最近优先)而不是按名字排序。若文件修改时间相同,则按字典顺序。修改时间取决于是否使用了c或u选顶。缺省的时间标记是最后一次修改时间。

  • u 显示时按文件上次存取的时间(最近优先)而不是按名字排序。即将-t的时间标记修改为最后一次访问的时间。

  • x 按行显示出各排序项的信息。

用ls - l命令显示的信息中,开头是由10个字符构成的字符串,其中第一个字符表示文件类型,它可以是下述类型之一:

  • 普通文件

d 目录

l 符号链接

b 块设备文件

c 字符设备文件

后面的9个字符表示文件的访问权限,分为3组,每组3位。第一组表示文件属主的权限,第二组表示同组用户的权限,第三组表示其他用户的权限。每一组的三个字符分别表示对文件的读、写和执行权限。

各权限如下所示:

r 读

w 写

x 执行。对于目录,表示进入权限。

s 当文件被执行时,把该文件的UID或GID赋予执行进程的UID(用户ID)或GID(组ID)。

t 设置标志位(留在内存,不被换出)。如果该文件是目录,在该目录中的文件只能被超级用户、目录拥有者或文件属主删除。如果它是可执行文件,在该文件执行后,指向其正文段的指针仍留在内存。这样再次执行它时,系统就能更快地装入该文件。

  • 没有设置权限。

例1:列出当前目录的内容。

$ ls -F

bin/ lib/ var/

etc/ tmp/ index. html

例2:列出某个目录的内容。

$ ls –F /home/xu

Mai1/ map1e/ mm/ ptr/ telnetd*

fd/ mbox mount sobsrc. tgz tmp/

例3:列出某个目录下所有的文件(包括隐藏文件)。

$ 1s -aF /home/xu

./ . .e1m/ .netscape/ map1e ptr/

…/ .fvwin2rc95 .term/ mbox sobsrc. tgz

.Xauthority .kermrc Mai1/ mm/ te1netd*

.bash-history .ncftp/ fd/ mount tmp/

例4:用长格式列出某个目录下所有的文件(包括隐藏文件)。

$ 1s -laF /home/xu

total 584

drwxr-xr-x l2 root root 1024 Nov 02 22:07 ./

drwxr-xr-x 15 bbs bbs 1024 Jul 29 07:08 …/

-rw-r–r-- 1 yu users 4343 Ju1 29 22:20 .bash-history

drwx------ 2 yu users 1024 May 17 06:36 .e1m/

–rw------ 1 root root 4628 Jun 2 1l:34 mbox

lrwxrwxrwx 1 root root l4 Ju1 29 03:08 mount->/mnt

drwxrwxr-x 4 root root 1024 Ju1 23 03:43 ptr/

-rw–r--r- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz

-rwxr-xr-x l root users 60177 Jun 8 01:29 telnetd*

drwxr-xr-x 2 root root 1024 Mar 6 22:32 tmp/

例5:用长格式列出某个目录下所有的文件包括隐藏文件和它们的i节点号。并把文件属主和属组以UID号和GID号的形式显示。

$ 1s -1ainF /home/xu

tota1 584

399672 drwxr-xr-x l2 0 0 l024 Nov 30 22:07 ./

333907 drwxr-xr-x 15 9999 99 l024  Ju1 29 07:08 …/

39980l -rw------- l 0 0 0 Jun 2 2:09 .Xauthority

399679 -rw-r–r-- 1 505 l00 4343 Jul 29 22:20 .bash-hist0ry

30l763 drwxr----- 2 505 100 l024  May

在Linux系统中,如何有效地对存储空间加以使用和管理,是一项非常重要的技术。本章讲述如何查看系统中存储空间的使用情况、如何进行文件的转储、以及如何进行软盘的格式化。

磁盘空间管理

系统软件和应用软件,都要以文件的形式存储在计算机的磁盘空间中。因此,应该随时监视磁盘空间的使用情况。Linux系统提供了一组有关磁盘空间管理的命令。

df命令

功能:检查文件系统的磁盘空间占用情况。可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息。

语法:df [选项]

说明:df命令可显示所有文件系统对i节点和磁盘块的使用情况。

该命令各个选项的含义如下:

-a 显示所有文件系统的磁盘使用情况,包括0块(block)的文件系统,如/proc文件系统。

-k 以k字节为单位显示。

-i 显示i节点信息,而不是磁盘块。

-t 显示各指定类型的文件系统的磁盘空间使用情况。

-x 列出不是某一指定类型文件系统的磁盘空间使用情况(与t选项相反)。

-T 显示文件系统类型。

例1:列出各文件系统的磁盘空间使用情况。

$ df

Filesystem 1 K-blocks Used Available Use% Mounted on

/dev/hda2 1361587 1246406 44823 97% /

df命令的输出清单的第1列是代表文件系统对应的设备文件的路径名(一般是硬盘上的分区);第2列给出分区包含的数据块(1024字节)的数目;第3,4列分别表示已用的和可用的数据块数目。用户也许会感到奇怪的是,第3,4列块数之和不等于第2列中的块数。这是因为缺省的每个分区都留了少量空间供系统管理员使用。即使遇到普通用户空间已满的情况,管理员仍能登录和留有解决问题所需的工作空间。清单中Use% 列表示普通用户空间使用的百分比,即使这一数字达到100%,分区仍然留有系统管理员使用的空间。最后,Mounted on列表示文件系统的安装点。

例2:列出各文件系统的i节点使用情况。

$ df -ia

Filesystem Inodes IUsed IFree Iused% Mounted on

/dev/ hda2 352256 75043 277213 21% /

none 0 0 0 0% /proc

localhost:(pid221) 0 0 0 0% /net

例3:列出文件系统的类型。

$ df -T

Filesystem Type 1K-blocks Used Available use% Mounted on

/dev/hda2 ext2 1361587 1246405 44824 97% /

本例中的文件系统是ext2类型的。

du命令

du的英文原义为“disk usage”,含义为显示磁盘空间的使用情况。

功能:统计目录(或文件)所占磁盘空间的大小。

语法:du [选项] [Names…]

说明:该命令逐级进入指定目录的每一个子目录并显示该目录占用文件系统数据块(1024字节)的情况。若没有给出Names,则对当前目录进行统计。

该命令的各个选项含义如下:

-s 对每个Names参数只给出占用的数据块总数。

-a 递归地显示指定目录中各文件及子孙目录中各文件占用的数据块数。若既不指定-s,也不指定-a,则只显示Names中的每一个目录及其中的各子目录所占的磁盘块数。

-b 以字节为单位列出磁盘空间使用情况(系统缺省以k字节为单位)。

-k 以1024字节为单位列出磁盘空间使用情况。

-c 最后再加上一个总计(系统缺省设置)。

-l 计算所有的文件大小,对硬链接文件,则计算多次。

-x 跳过在不同文件系统上的目录不予统计。

下面举例说明du命令的使用:

例1:查看/mnt目录占用磁盘空间的情况。 $ cd /mnt $ ls -lFR total 10 -rwxrwxrwx 2 root root ll0 Ju1 3l 00:33 aa*

drwxr-xr-x 2 root root l024 Ju1 20 14:16 dev/

-rw-r–r-- 1 root root 6229 Aug 2 0l:39 s1ack

drwxrwxrwx 2 root root 1024 Aug 2 02:09 var/

1rwxrwxrwx 1 root root l0 Aug 2 0l:51 wei->/home/wei/

dev:

tota1 0

lrwxrwxrwx 1 root root 8 Ju1 20 l4:l6 cdrom->/dev/hdb

var:

tata1 37

-r-xr-xr-x l root root 36064 Aug 2 02:09 rawrite. exe*

例2:列出各目录所占的磁盘空间,但不详细列出每个文件所占的空间。

$ du

l ./dev

38 ./var

48 .

输出清单中的第一列是以块为单位计的磁盘空间容量,第二列列出目录中使用这些空间的目录名称。

注意不带选项的du命令将从当前目录开始沿着目录结构向下工作直到列出所有目录的容量为止。这可能是一个很长的清单,有时只需要一个总数。这时可在du命令中加-s选项来取得总数:

$ du –s /mnt

/mnt

例3:列出所有文件和目录所占的空间(使用a选项),而且以字节为单位(使用b选项)来计算大小。

$ du -ab

8 ./dev/cdrom

l032 ./dev

36064 ./var/rawrite. exe

37088 ./var

6229 ./s1ack

1l0 ./aa

l0 ./wei

45493 .

磁 盘 操 作

dd命令

功能:把指定的输入文件拷贝到指定的输出文件中,并且在拷贝过程中可以进行格式转换。可以用该命令实现DOS下的diskcopy命令的作用。先用dd命令把软盘上的数据写成硬盘的一个寄存文件,再把这个寄存文件写入第二张软盘上,完成diskcopy的功能。需要注意的是,应该将硬盘上的寄存文件用rm命令删除掉。系统默认使用标准输入文件和标准输出文件。

语法:dd [选项]

if =输入文件(或设备名称)。

of =输出文件(或设备名称)。

ibs = bytes 一次读取bytes字节,即读入缓冲区的字节数。

skip = blocks 跳过读入缓冲区开头的ibs*blocks块。

obs = bytes 一次写入bytes字节,即写入缓冲区的字节数。

bs = bytes 同时设置读/写缓冲区的字节数(等于设置ibs和obs)。

cbs = byte 一次转换bytes字节。

count=blocks 只拷贝输入的blocks块。

conv = ASCII 把EBCDIC码转换为ASCIl码。

conv = ebcdic 把ASCIl码转换为EBCDIC码。

conv = ibm 把ASCIl码转换为alternate EBCDIC码。

conv = block 把变动位转换成固定字符。

conv = ublock 把固定位转换成变动位。

conv = ucase 把字母由小写转换为大写。

conv = lcase 把字母由大写转换为小写。

conv = notrunc 不截短输出文件。

conv = swab 交换每一对输入字节。

conv = noerror 出错时不停止处理。

conv = sync 把每个输入记录的大小都调到ibs的大小(用NUL填充)。

例1:要把一张软盘的内容拷贝到另一张软盘上,利用/tmp作为临时存储区。把源盘插入驱动器中,输入下述命令:

$ dd if =/dev/fd0 of = /tmp/tmpfile

拷贝完成后,将源盘从驱动器中取出,把目标盘插入,输入命令:

$ dd if = /tmp/tmpfile of =/dev/fd0

软盘拷贝完成后,应该将临时文件删除:

$ rm /tmp/tmpfile

例2:把net.i这个文件写入软盘中,并设定读/写缓冲区的数目。

(注意:软盘中的内容会被完全覆盖掉)

$ dd if = net.i of = /dev/fd0 bs = 16384

例3:将文件sfile拷贝到文件 dfile中。

$ dd if=sfile of=dfile

fdformat 命令

软盘是用户常用的存储介质之一。软盘在使用之前必须先作格式化操作,然后可以用tar、dd、cpio等命令存储数据,也可以在软盘上建立可安装的文件系统。

功能:低级格式化软盘

语法:format [-n] device

说明:该命令的作用是对软盘进行格式化。

-n 软盘格式化后不作检验。

device 指定要进行格式化的设备,通常是下述设备之一:

/dev/fd0d360

/dev/fd0h1200

/dev/fd0D360

/dev/fd0H360

/dev/fd0D720

/dev/fd0H720

/dev/fd0h360

/dev/fd0h720

/dev/fd0H1440

Linux系统中的每个文件和目录都有访问许可权限,用它来确定谁可以通过何种方式对文件和目录进行访问和操作。

文件或目录的访问权限分为只读,只写和可执行三种。以文件为例,只读权限表示只允许读其内容,而禁止对其做任何的更改操作。可执行权限表示允许将该文件作为一个程序执行。文件被创建时,文件所有者自动拥有对该文件的读、写和可执行权限,以便于对文件的阅读和修改。用户也可根据需要把访问权限设置为需要的任何组合。

有三种不同类型的用户可对文件或目录进行访问:文件所有者,同组用户、其他用户。所有者一般是文件的创建者。所有者可以允许同组用户有权访问文件,还可以将文件的访问权限赋予系统中的其他用户。在这种情况下,系统中每一位用户都能访问该用户拥有的文件或目录。

每一文件或目录的访问权限都有三组,每组用三位表示,分别为文件属主的读、写和执行权限;与属主同组的用户的读、写和执行权限;系统中其他用户的读、写和执行权限。当用ls -l命令显示文件或目录的详细信息时,最左边的一列为文件的访问权限。例如:

$ ls -l sobsrc. tgz

-rw-r–r-- 1 root root 483997 Ju1 l5 17:3l sobsrc. tgz

横线代表空许可。r代表只读,w代表写,x代表可执行。注意这里共有10个位置。第一个字符指定了文件类型。在通常意义上,一个目录也是一个文件。如果第一个字符是横线,表示是一个非目录的文件。如果是d,表示是一个目录。

例如:

  • rw- r-- r–

普通文件 文件主 组用户 其他用户

是文件sobsrc.tgz 的访问权限,表示sobsrc.tgz是一个普通文件;sobsrc.tgz的属主有读写权限;与sobsrc.tgz属主同组的用户只有读权限;其他用户也只有读权限。

确定了一个文件的访问权限后,用户可以利用Linux系统提供的chmod命令来重新设定不同的访问权限。也可以利用chown命令来更改某个文件或目录的所有者。利用chgrp命令来更改某个文件或目录的用户组。

下面分别对这些命令加以介绍。

chmod 命令

chmod命令是非常重要的,用于改变文件或目录的访问权限。用户用它控制文件或目录的访问权限。

该命令有两种用法。一种是包含字母和操作符表达式的文字设定法;另一种是包含数字的数字设定法。

  1. 文字设定法

chmod [who] [+ | - | =] [mode] 文件名?

命令中各选项的含义为:

操作对象who可是下述字母中的任一个或者它们的组合:

u 表示“用户(user)”,即文件或目录的所有者。

g 表示“同组(group)用户”,即与文件属主有相同组ID的所有用户。

o 表示“其他(others)用户”。

a 表示“所有(all)用户”。它是系统默认值。

操作符号可以是:

  • 添加某个权限。
  • 取消某个权限。

= 赋予给定权限并取消其他所有权限(如果有的话)。

设置mode所表示的权限可用下述字母的任意组合:

r 可读。

w 可写。

x 可执行。

X 只有目标文件对某些用户是可执行的或该目标文件是目录时才追加x 属性。

s 在文件执行时把进程的属主或组ID置为该文件的文件属主。方式“u+s”设置文件的用户ID位,“g+s”设置组ID位。

t 保存程序的文本到交换设备上。

u 与文件属主拥有一样的权限。

g 与和文件属主同组的用户拥有一样的权限。

o 与其他用户拥有一样的权限。

文件名:以空格分开的要改变权限的文件列表,支持通配符。

在一个命令行中可给出多个权限方式,其间用逗号隔开。例如:chmod g+r,o+r example

使同组和其他用户对文件example 有读权限。

  1. 数字设定法

我们必须首先了解用数字表示的属性的含义:0表示没有权限,1表示可执行权限,2表示可写权限,4表示可读权限,然后将其相加。所以数字属性的格式应为3个从0到7的八进制数,其顺序是(u)(g)(o)。

例如,如果想让某个文件的属主有“读/写”二种权限,需要把4(可读)+2(可写)=6(读/写)。

数字设定法的一般形式为:

chmod [mode] 文件名?

例子:

(1)文字设定法:

例1:$ chmod a+x sort

即设定文件sort的属性为:

文件属主(u) 增加执行权限

与文件属主同组用户(g) 增加执行权限

其他用户(o) 增加执行权限

例2:$ chmod ug+w,o-x text

即设定文件text的属性为:

文件属主(u) 增加写权限

与文件属主同组用户(g) 增加写权限

其他用户(o) 删除执行权限

例3:$ chmod u+s a.out

假设执行chmod后a.out的权限为(可以用ls – l a.out命令来看):

–rws–x--x 1 inin users 7192 Nov 4 14:22 a.out

并且这个执行文件要用到一个文本文件shiyan1.c,其文件存取权限为“–rw-------”,即该文件只有其属主具有读写权限。

当其他用户执行a.out这个程序时,他的身份因这个程序暂时变成inin(由于chmod命令中使用了s选项),所以他就能够读取shiyan1.c这个文件(虽然这个文件被设定为其他人不具备任何权限),这就是s的功能。

因此,在整个系统中特别是root本身,最好不要过多的设置这种类型的文件(除非必要)这样可以保障系统的安全,避免因为某些程序的bug而使系统遭到入侵。

例4:$ chmod a–x mm.txt

$ chmod –x mm.txt

$ chmod ugo–x mm.txt

以上这三个命令都是将文件mm.txt的执行权限删除,它设定的对象为所有使用者。

(2)数字设定法:

例1: $ chmod 644 mm.txt

$ ls –l

即设定文件mm.txt的属性为:

-rw-r–r-- 1 inin users 1155 Nov 5 11:22 mm.txt

文件属主(u)inin 拥有读、写权限

与文件属主同组人用户(g) 拥有读权限

其他人(o) 拥有读权限

例2: $ chmod 750 wch.txt

$ ls –l

-rwxr-x— 1 inin users 44137 Nov 12 9:22 wchtxt

即设定wchtxt这个文件的属性为:

文件主本人(u)inin 可读/可写/可执行权

与文件主同组人(g) 可读/可执行权

其他人(o) 没有任何权限

chgrp命令

功能:改变文件或目录所属的组。

语法:chgrp [选项] group filename?

该命令改变指定指定文件所属的用户组。其中group可以是用户组ID,也可以是/etc/group文件中用户组的组名。文件名是以空格分开的要改变属组的文件列表,支持通配符。如果用户不是该文件的属主或超级用户,则不能改变该文件的组。

该命令的各选项含义为:

  • R 递归式地改变指定目录及其下的所有子目录和文件的属组。

例1:$ chgrp - R book /opt/local /book

改变/opt/local /book/及其子目录下的所有文件的属组为book。

chown 命令

功能:更改某个文件或目录的属主和属组。这个命令也很常用。例如root用户把自己的一个文件拷贝给用户xu,为了让用户xu能够存取这个文件,root用户应该把这个文件的属主设为xu,否则,用户xu无法存取这个文件。

语法:chown [选项] 用户或组 文件

说明:chown将指定文件的拥有者改为指定的用户或组。用户可以是用户名或用户ID。组可以是组名或组ID。文件是以空格分开的要改变权限的文件列表,支持通配符。

该命令的各选项含义如下:

  • R 递归式地改变指定目录及其下的所有子目录和文件的拥有者。

  • v 显示chown命令所做的工作。

例1:把文件shiyan.c的所有者改为wang。

$ chown wang shiyan.c

例2:把目录/his及其下的所有文件和子目录的属主改成wang,属组改成users。

$ chown - R wang.users /his

cat命令

功能1:在标准输出上显示文件。

语法:cat [ - 选项 ] 文件

说明:该命令功能之一是用来显示文件。它依次读取其后所指文件的内容并将其输出到标准输出。

cat命令中各个选项的含义为:

  • v 用一种特殊形式显示控制字符,LFD与TAB除外。

加了- v选项后,- T和- E选项将起作用。其中:

  • T 将TAB显示为“ù I”。该选项需要与- v选项一起使用。即如果没有使用- v选项,则这个选项将被忽略。

  • E 在每行的末尾显示一个$符。该选项需要与- v选项一起使用。

  • u 输出不经过缓冲区。

  • A 等于- vET。

  • t 等于- vT。

  • e 等于- vE。

例1:$ cat example.txt

则在屏幕上显示出example.txt 文件的内容。

本想今天去香山看红叶,无奈天公不作美没去成,真遗憾,但愿明天艳阳高照,使我们梦想成真。

例2:$ cat - A exam2.txt

则在屏幕上显示出exam2.txt 文件的内容,而且如果文件中含有特殊字符的话,一并显示。

I am a boy ! ùI You are a cute boy$

功能2:连接两个或多个文件

说明:该命令功能之二是用来将两个或多个文件连接起来。

例3:$ cat file1 file2 > file3

这样就把文件filel和文件file2的内容合并起来,放入文件file3中。(此时在屏幕上并不能直接看到该命令执行后的结果。若想看到连接后的文件内容,可以再使用“cat file3”。)

需要说明的是,当文件内容过多时,就带来一个问题,因为文本在屏幕上迅速地闪过,用户来不及看清其内容。因此,当文件内容较大时,一般可用more等命令分屏显示,以免因屏幕滚动太快而无法看清。

more命令

功能:在终端屏幕按屏显示文本文件。

语法: more [ - 选项 ] 文件

说明: 该命令一次显示一屏文本,显示满之后,停下来,并在终端底部打印出- - More- - ,系统还将同时显示出已显示文本占全部文本的百分比,若要继续显示,按回车或空格键即可。

more命令中各个选项的含义为:

  • p 显示下一屏之前先清屏。

  • c 作用同- p基本一样。

  • d 在每屏的底部显示更友好的提示信息:

    • More- - (XX%)[Press space to contiune , ‘q’ to quit . ]

而且若用户输入了-个错误命令则显示出错信息,而不是简单地鸣响终端。

  • l 不处理< Ctrl+l >(换页符)。如果没有给出这个选项,则more命令在显示了一个包含有< Ctrl+l >字符的行后将暂停显示,并等待接收命令。

  • s 文件中连续的空白行压缩成一个空白行显示。

执行中的命令

在more命令的执行过程中,用户可以使用more自己的一系列命令动态地根据需要来选择显示的部分。more在显示完一屏内容之后,将停下来等待用户输入某个命令。下表列出了more指令在执行中用到的一些常用命令,而有关这些命令的完整内容,可以在more执行时按h查看。这些命令的执行方法是先输入i(行数)的值,再打所要的命令,不然它会以预设值来执行命令。

i空格 若指定i,显示下面的i行;否则,显示下一整屏。

i回车 若指定i,显示下面的i行;否则,显示下一行。

iù D 按,若指定i,显示下面的i行;否则,往下显示半屏(一般为11行)。

id 同iù D 。

iz 同“i空格”类似,只是i将成为以下每个满屏的缺省行数。

is 跳过下面的i行再显示一个整屏。预设值为1。

if 跳过下面的i屏再显示一个整屏。预设值为1。

iù B 按,往回跳过(即向文件首回跳)i屏,再显示一个满屏。预设值为1。

b 与iù B相同。

’ 回到上次搜索的地方

q或Q 退出more。

= 显示当前行号。

v 在当前行启动/usr/bin/vi对之进行编辑修改。

h 显示各命令的帮助信息。

i/pattern 查找匹配该模式的第i行。预设值为1。

in 查找符合表达式的倒数i行。预设值为1。

! 或 :! 在子shell中执行命令。

i:n 在命令行中指定了多个文件名的情况下,可用此命令使之显示第i个文件,若i过大(出界),则显示文件名列表中的最后一个文件。

i:p 在命令行中指定了多个文件名的情况下,可用此命令使之显示倒数第i个文件。若i过大(出界),则显示第一个文件。

i:f 显示当前文件的文件名和行数。

· 重复上次键人的命令。

例1:用分页的方式显示一个文件的内容。

$ more example1.c

/-------------------------------------------/

/* example1.c */

/-------------------------------------------/

/* author f [email protected] */

/* target f BBS main/login/top-menu routines */

/* create f 99/10/23 */

/* update f 99/12/15 */

/-------------------------------------------/

#define MAIN_C

#inc1ude < BBS. h >

jmp_buf byebye;

int talkrequest=NA;

static uschar Enter_uflag i

#ifdef SHOW_IDLE_TIME

–More- (3%)

例2:显示一个文件的内容,但显示之前先清屏,并且在显示器的最下方显示完整的百分比。

$ more - dc example1.c

执行该命令后,先清屏,然后显示文件example.c的内容。

/-------------------------------------------/

/* example1.c */

/-------------------------------------------/

/* author f [email protected] */

/* target f BBS main/login/top-menu routines */

/* create f 99/10/23 */

/* update f 99/12/15 */

/-------------------------------------------/

#define MAIN_C

#inc1ude < BBS. h >

jmp_buf byebye;

int talkrequest=NA;

static uschar Enter_uflag i

#ifdef SHOW_IDLE_TIME

char fromhost( );

–More- (3%)[Press space to continue , ‘q’ to quit .]

例3:显示一个文件的内容,要求每十行显示一次,且显示之前先清屏。

$ more - c - 10 example1.c

执行该命令后,先清屏,然后将以每十行每十行的方式显示文件example.c的内容。

/-------------------------------------------/

/* example1.c */

/-------------------------------------------/

/* author f [email protected] */

/* target f BBS main/login/top-menu routines */

/* create f 99/10/23 */

/* update f 99/12/15 */

/-------------------------------------------/

#define MAIN_C

inc1ude < BBS. h >

–More- (3%)

less命令

less命令的功能几乎和more命令一样,也是用来按页显示文件,不同之处在于less命令在显示文件时允许用户既可以向前又可以向后翻阅文件。

less命令的使用与more命令类似,在此就不赘述了,用户如有不清楚的地方可直接查看联机帮助。

用less命令显示文件时,若需要在文件中往前移动,按< b >键;要移动到用文件的百分比表示的某位置,则指定一个0到100之间的数,并按< p >即可。

例如,需要按页显示test文件

$ less test

head命令

如果用户希望查看一个文件究竟保存的是什么内容,可以只查看文件的头几行,而不必浏览整个文件。用head命令只显示文件或标准输入的头几行。

语法:head [- n ] 文件

功能:显示指定文件的前若干行。

说明:该命令显示每个指定文件的前面n行。如果没有给出n值,缺省设置为10。如果没有指定文件,head就从标准输入读取。例如显示文件example.c的前3行。

$ head - 3 example.c

/-------------------------------------------/

/* example1.c */

/-------------------------------------------/

tail命令

同样,如果用户想查看文件的尾部,可以使用tail命令。

语法:tail [+ / - num ] [参数] 文件

说明:该命令显示一个文件的指定内容。它把指定文件的指定显示范围内的内容显示在标准输出上。如果没有给定文件名,则使用标准输入文件。

tail命令中各个选项的含义为:

+num 从第num行以后开始显示。

  • num 从距文件尾num行处开始显示。如果省略num参数,系统默认值为10。

l 以文本行为num的计数单位。与参数选项+num或- num选项同时使用时,num表示要显示的文本行行数。

c 以字节为num的计数单位。与参数选项+num或- num选项同时使用时,num表示要显示的字符数。

(l、c选项可以省略,系统默认值为l,即按行计数)。

例如:

$ tail -4 example

将显示文件example的最后4行。

od命令

用户通常使用od命令查看特殊格式的文件内容。通过指定该命令的不同选项可以以十进制、八进制、十六进制和ASCII码来显示文件。

语法:od [选项] 文件…

命令中各选项的含义:

  • A 指定地址基数,包括:

d 十进制

o 八进制(系统默认值)

x 十六进制

n 不打印位移值

  • t 指定数据的显示格式,主要的参数有:

c ASCII字符或反斜杠序列

d 有符号十进制数

f 浮点数

o 八进制(系统默认值为02)

u 无符号十进制数

x 十六进制数

除了选项c以外的其他选项后面都可以跟一个十进制数n,指定每个显示值所包含的字节数。

说明:od命令系统默认的显示方式是八进制,这也是该命令的名称由来(Octal Dump)。但这不是最有用的显示方式,用ASCII码和十六进制组合的方式能提供更有价值的信息输出。

例如:

$ od - Ax - tcx1 wh5

000000 F i l e s y s t e m

46 69 6c 65 73 79 73 74 65 6d 20 20 20 20 20 20

000010 1 k - b l o c k s

20 20 20 20 20 31 6b 2d 62 6c 6f 63 6b 73 20 20

000020 U s e d A v a i l a b

20 20 20 20 55 73 65 64 20 41 76 61 69 6c 61 62

000030 l e U s e % M o u n t e d

6c 65 20 55 73 65 25 20 4d 6f 75 6e 74 65 64 20

000040 o n \n / d e v / h d a 8

6f 6e 0a 2f 64 65 76 2f 68 64 61 38 20 20 20 20

000050 3 0 4 4 4

20 20 20 20 20 20 20 20 20 20 20 33 30 34 34 34

000060 0 5 0 6 8 9 2

30 20 20 20 20 20 35 30 36 38 39 20 20 20 20 32

000070 3 8 0 2 8 1 8 % / \n / d e

33 38 30 32 38 20 20 31 38 25 20 2f 0a 2f 64 65

000080 v / h d a 9

76 2f 68 64 61 39 20 20 20 20 20 20 20 20 20 20

000090 5 4 6 3 6 9

20 20 20 20 20 35 34 36 33 36 39 20 20 20 20 20

0000a0 8 7 7 6 5 0 9 3 7 1

20 38 37 37 36 20 20 20 20 35 30 39 33 37 31 20

0000b0 2 % / h o m e \n \n \n

20 20 32 25 20 2f 68 6f 6d 65 0a 0a 0a

0000bd

猜你喜欢

转载自blog.csdn.net/HuAustin/article/details/88535614
今日推荐