Chinaunix首页 | 论坛 | 博客
  • 博客访问: 97219
  • 博文数量: 48
  • 博客积分: 1980
  • 博客等级: 上尉
  • 技术积分: 500
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-16 15:03
文章分类

全部博文(48)

文章存档

2009年(48)

我的朋友
最近访客

分类: LINUX

2009-09-17 14:28:45

10—系统与管理命令
在/etc/rc.d目录中的启动和关机脚本中包含了好多有用的(和没用的)系统管理命令. 这些命令通常总是被root用户使用, 用于系统维护或者是紧急系统文件修复. 一定要小心使用这些工具, 因为如果滥用的话, 它们会损坏你的系统.
 

User和Group类
 
10.1 users
显示所有的登录用户. 这个命令与who -q基本一致.
 
10.2 groups
列出当前用户和他所属的组. 这相当于$GROUPS内部变量, 但是这个命令将会给出组名字, 而不是数字.
bash$ groups
bozita cdrom cdwriter audio xgrp
bash$ echo $GROUPS
501
 
10.3 chown, chgrp
chown命令将会修改一个或多个文件的所有权. 对于root用户来说, 如果他想将文件的所有权从一个用户换到另一个用户的话, 那么使用这个命令是非常好的选择. 一个普通用户不能修改文件的所有权, 即使他是文件的宿主也不行. [1]
root# chown bozo *.txt
       
10.4  chgrp将会修改一个或多个文件的group所有权. 但前提是你必须是这些文件的宿主, 并且必须是目的组的成员(或者是root), 这样你才能够使用这个命令.  
 
10.5 useradd, userdel
useradd管理命令将会在系统上添加一个用户帐号, 并且如果指定的话, 还会为特定的用户创建home目录. 相应的, userdel命令将会从系统上删除一个用户帐号, [2] 并且会删除相应的文件.
adduser与useradd是完全相同的, adduser通常仅仅是个符号链接.
10.6 usermod
修改用户帐号. 可以修改给定用户帐号的密码, 组身份, 截止日期, 或者其他一些属性. 使用这个命令, 用户的密码可能会被锁定, 因为密码会影响到帐号的有效性.
 
10.7 groupmod
修改指定组. 组名字或者ID号都可以用这个命令来修改.
 
10.8 id
id命令将会列出当前进程真实有效的用户ID, 还有用户的组ID. 这与Bash内部变量$UID, $EUID, 和$GROUPS很相像.
id命令只有在有效ID与实际ID不符时, 才会显示有效ID.
 
10.9 who
显示系统上所有已经登录的用户.  
-m选项将会给出当前用户的详细信息. 将任意两个参数传递到who中, 都等价于who -m, 就像who am i或
       

10.10 whoami与who -m很相似, 但是只列出用户名.
bash$ whoami
bozo
       

10.11 w
显示所有的登录用户和属于它们的进程. 这是一个who命令的扩展版本. w的输出可以通过管道传递到grep命令中, 这样就可以查找指定的用户或进程.
bash$ w | grep startx
bozo  tty1     -                 4:22pm  6:41   4.47s  0.45s  startx
 
 
10.12 logname
显示当前用户的登录名(可以在/var/run/utmp中找到). 这与上边的whoami很相近.
bash$ logname
bozo
logname只会打印出登录的用户名, 而whoami将会给出附着到当前进程的用户名. 就像我们上边看到的那样, 这两个名字有时会不同.
 
10.13 su
使用替换的用户(substitute user)身份来运行一个程序或脚本. su rjones将会以用户rjones的身份来启动shell. 使用su命令时, 如果不使用任何参数的话, 那默认就是root用户.
 
10.14 sudo
以root(或其他用户)的身份来运行一个命令. 这个命令可以用在脚本中, 这样就允许以正规的用户身份来运行脚本.
  1 #!/bin/bash
  2
  3 # 某些命令.
  4 sudo cp /root/secretfile /home/bozo/secret
  5 # 其余的命令. 
文件/etc/sudoers中保存有允许调用sudo命令的用户名.
 
 
10.15 passwd
设置, 修改, 或者管理用户的密码.
passwd命令可以用在脚本中, 但是估计你不想这么用, 呵呵.
passwd命令的-l, -u, 和-d选项允许锁定, 解锁, 和删除一个用户的密码. 只有root用户可以使用这些选项.
 
10.16 ac
显示用户登录的连接时间, 就像从/var/log/wtmp中读取一样. 这是一个GNU统计工具.
bash$ ac
        total       68.08
 
10.17 last
用户最后登录的信息, 就像从/var/log/wtmp中读出来一样. 这个命令也可以用来显示远端登录.
比如, 显示最后几次系统的重启信息:
bash$ last reboot
10.18 newgrp
不用登出就可以修改用户的组ID. 并且允许访问新组的文件. 因为用户可能同时属于多个组, 这个命令很少被使用.

终端类命令
 
10.19 tty
显示当前用户终端的名字. 注意每一个单独的xterm窗口都被算作一个不同的终端.
bash$ tty
/dev/pts/1
 
10.20 stty
显示并(或)修改终端设置. 这个复杂命令可以用在脚本中, 并可以用来控制终端的行为和其显示输出的方法. 参见这个命令的info页, 并仔细学习它.

 
10.21 终端与模式terminals and modes
一般情况下, 一个终端都是工作在canonical(标准)模式下. 当用户按键后, 事实上所产生的字符并没有马上传递到运行在当前终端上的程序. 终端上的一个本地缓存保存了这些按键. 当用按下回车键的时候, 才会将所有保存的按键信息传递到运行的程序中. 这就意味着在终端内部存在一个基本的行编辑器.
bash$ stty -a
speed 9600 baud; rows 36; columns 96; line = 0;
 intr = ^C; quit = ^\; erase = ^H; kill = ^U; eof = ^D; eol = ; eol2 = ;
 start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O;
 ...
 isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
                
 
10.22 setterm
设置特定的终端属性. 这个命令将向它所在终端的stdout发送一个字符串, 这个字符串将修改终端的行为.
bash$ setterm -cursor off
setterm命令可以放在脚本中用来修改写入到stdout上的文本的外观. 当然, 如果你只想完成这个目的的话, 还有更合适的工具可以用.
  1 setterm -bold on
  2 echo bold hello
  3
  4 setterm -bold off
  5 echo normal hello

10.23 tset
显示或初始化终端设置. 可以把它看成一个功能比较弱的stty命令.
bash$ tset -r
      

10.24 setserial
设置或者显示串口参数. 这个脚本只能被root用户来运行, 并且通常都在系统安装脚本中使用.
  1 # 来自于/etc/pcmcia/serial脚本:
  2
  3 IRQ=`setserial /dev/$DEVICE | sed -e 's/.*IRQ: //'`
  4 setserial /dev/$DEVICE irq 0 ; setserial /dev/$DEVICE irq $IRQ

10.25 getty, agetty
一个终端的初始化过程通常都是使用getty或agetty来建立, 这样才能让用户登录. 这些命令并不用在用户的shell脚本中. 它们的行为与stty很相似.
 
10.26 mesg
启用或禁用当前用户终端的访问权限. 禁用访问权限将会阻止网络上的另一用户向这个终端写消息.
 
10.27 wall
这是一个缩写单词"write all", 也就是, 向登录到网络上的所有终端的所有用户都发送一个消息. 最早这是一个管理员的工具, 很有用, 比如, 当系统有问题的时候, 管理可以警告系统上的所有人暂时离开(请参考 如果某个特定终端使用mesg来禁止了写权限, 那么wall将不会给它发消息.
 

信息与统计类
 
10.28 uname
显示系统信息(OS, 内核版本, 等等.) ,输出到stdout上. 使用-a选项, 将会给出详细的系统信息(请参考例子 12-5). 使用-s选项只会输出OS类型.
bash$ uname -a
Linux localhost.localdomain 2.2.15-2.5.0 #1 Sat Feb 5 00:13:43 EST 2000 i686 unknown
 
10.29 arch
显示系统的硬件体系结构. 等价于uname -m. 请参考例子 10-26.
bash$ arch
i686
 
10.30 lastcomm
给出前一个命令的信息, 存储在/var/account/pacct文件中. 命令名字和用户名字都可以通过选项来指定. 这是GNU的一个统计工具.
 
10.31 lastlog
列出系统上所有用户最后登录的时间. 然后保存到/var/log/lastlog文件中.
bash$ lastlog
10.32 lsof
列出打开的文件. 这个命令将会把所有当前打开的文件都列出到一份详细的表格中, 包括文件的宿主信息, 尺寸, 还有与它们相关的信息等等. 当然, lsof也可以通过管道输出到grep和(或)awk中, 来分析它的内容.
bash$ lsof
     
10.33 strace
系统跟踪(System trace): 是跟踪系统调用和信号的诊断和调试工具. 如果你想了解特定的程序或者工具包为什么运行失败的话, 那么这个命令和下边的ltrace命令就显得非常有用了, . . . 当然, 这种失败现象可能是由缺少相关的库, 或者其他问题所引起.
这是Solaris truss命令的Linux的等价工具.
 
10.34 ltrace
库跟踪工具(Library trace): 跟踪给定命令的调用库的相关信息.
bash$ ltrace df
   
10.35 nmap
网络映射(Network mapper)与端口扫描程序. 这个命令将会扫描一个服务器来定位打开的端口, 并且定位与这些端口相关的服务. 这个命令也能够上报一些包过滤与防火墙的信息. 这是一个防止网络被黑客入侵的非常重要的安全工具.
 
10.36 nc
nc(netcat)工具是一个完整的工具包, 可以用它连接和监听TCP和UDP端口. 它能作为诊断和测试工具, 也能作为基于脚本的HTTP客户端和服务器组件.
bash$ nc localhost.localdomain 25
220 localhost.localdomain ESMTP Sendmail 8.13.1/8.13.1; Thu, 31 Mar 2005 15:41:35 -0700
并且, 当然, 这里还有Dr. Andrew Tridgell在BistKeeper事件中臭名卓著的一行脚本:   1 echo clone | nc thunk.org 5000 > e2fsprogs.dat

10.37 free
使用表格形式来显示内存和缓存的使用情况. 这个命令的输出非常适合于使用grep, awk或者Perl来分析. procinfo将会显示free命令所能显示的所有信息, 而且更加详细.
bash$ free
                total       used       free     shared    buffers     cached
   Mem:         30504      28624       1880      15820       1608       16376
   -/+ buffers/cache:      10640      19864
   Swap:        68540       3128      65412
打印出未使用的RAM内存:
bash$ free | grep Mem | awk '{ print $4 }'
1880
 
 
10.38 procinfo
从/proc pseudo-filesystem中提取并显示所有信息和统计资料. 这个命令将给出更详细的信息.
bash$ procinfo | grep Bootup
Bootup: Wed Mar 21 15:15:50 2001    Load average: 0.04 0.21 0.34 3/47 6829
 
10.39 lsdev
列出系统设备, 也就是显示所有安装的硬件.

 
10.40 du
递归的显示(磁盘)文件的使用状况. 除非特殊指定, 否则默认是当前工作目录.
bash$ du -ach
10.41 df
使用列表的形式显示文件系统的使用状况.
 
10.42 dmesg
将所有的系统启动消息输出到stdout上. 方便除错, 并且可以查出安装了哪些设备驱动和察看使用了哪些系统中断. dmesg命令的输出当然也放在脚本中, 并使用grep, sed, 或awk来进行分析.
bash$ dmesg | grep hda
10.43 stat
显示一个或多个给定文件(也可以是目录文件或设备文件)的详细统计信息(statistic).
bash$ stat test.cru
如果目标文件不存在, stat将会返回一个错误消息.
bash$ stat nonexistent-file
nonexistent-file: No such file or directory
       
10.44 vmstat
显示虚拟内存的统计信息.
bash$ vmstat
   procs                      memory    swap          io system         cpu
 r  b  w   swpd   free   buff  cache  si  so    bi    bo   in    cs  us  sy id
 0  0  0      0  11040   2636  38952   0   0    33     7  271    88   8   3 89
     

10.45 netstat
显示当前网络的统计状况和信息, 比如路由表和激活的连接, 这个工具将访问/proc/net( 27)中的信息. 请参考例子 27-3.
netstat -r等价于route命令.
 
10.46 uptime
显示系统运行的时间, 还有其他的一些统计信息.
bash$ uptime
10:28pm  up  1:57,  3 users,  load average: 0.17, 0.34, 0.27
load average如果小于或等于1, 那么就意味着系统会马上处理. 如果大于1, 那么就意味着进程需要排队. 如果大于3, 那么就意味着, 系统性能已经显著下降了.
 
10.47 hostname
显示系统的主机名字. 这个命令在/etc/rc.d安装脚本(或类似的/etc/rc.d/rc.sysinit)中设置主机名. 等价于uname -n, 并且与$HOSTNAME内部变量很相像.
与hostname命令很相像的命令还有domainname, dnsdomainname, nisdomainname, 和ypdomainname命令. 
 
10.48 hostid
用16进制表示法来显示主机的32位ID.
bash$ hostid
  
 
10.49 sar
sar(System Activity Reporter系统活动报告)命令将会给出系统统计的一个非常详细的概要. Santa Cruz Operation("以前的"SCO)公司在1999年4月份以开源软件的形式发布了sar.
这个命令并不是基本Linux发行版的一部分, 但是你可以从sysstat utilities所编写的Sebastien Godard包中获得这个工具.
           
10.50 readelf
这个命令会显示elf格式的二进制文件的统计信息. 这个工具是binutils工具包的一部分.
bash$ readelf -h /bin/bash
10.51 size
size [/path/to/binary]命令可以显示2进制可执行文件或归档文件每部分的尺寸. 这个工具主要提供给程序员使用.
bash$ size /bin/bash
   text    data     bss     dec     hex filename
  495971   22496   17392  535859   82d33 /bin/bash
       
 
系统日志类
 
10.52 logger
附加一个用户产生的消息到系统日志中(/var/log/messages). 即使不是root用户, 也可以调用logger.  通过在脚本中调用logger命令, 就可以将调试信息写到/var/log/messages中.   1 logger -t $0 -i Logging at line "$LINENO".

10.53 logrotate
这个工具用来管理系统的log文件, 可以在合适的时候轮换, 压缩, 删除, 或(和)e-mail它们. 这个工具将从旧的log文件中取得一些杂乱的记录, 并保存到/var/log中. 一般的, 每天都是通过cron来运行logrotate.
 

作业控制类
 
10.54 ps 进程统计(Process Statistics): 通过进程宿主或PID(进程ID)来列出当前正在执行的进程. 通常都是使用ax或aux选项来调用这个命令, 并且结果可以通过管道传递到grep或sed中来搜索特定的进程(请参考例子 11-12和例子 27-2).
bash$  ps ax | grep sendmail
如果想使用"树"的形式来显示系统进程: 那么就使用ps afjx或ps ax --forest.
 
10.55 pgrep, pkill
ps命令可以与grep或kill结合使用.
bash$ ps a | grep mingetty
bash$ pgrep mingetty

10.56 pstree
使用"树"形式列出当前执行的进程. -p选项显示PID, 也就是进程名字.
 
10.57 top
连续不断的显示cpu占有率最高的进程. -b选项将会以文本方式来显示, 以便于可以在脚本中进行分析或访问.
bash$ top -b
        

10.59 nice
使用经过修改的优先级来运行一个后台作业. 优先级从19(最低)到-20(最高) 只有root用户可以设置负的(相对比较高的)优先级. 相关的命令还有renice, snice, 和skill.
 
 
10.60 nohup
保持一个命令进程处于运行状态, 即使这个命令进程所属的用户登出系统. 这个命令进程将会运行在前台, 除非在它前面加上&. 如果你在脚本中使用nohup命令, 那么你最好同时使用wait命令, 这样就可以避免产生孤儿进程或僵尸进程.
 
10.61 pidof
获取一个正在运行作业的进程ID(PID). 因为一些作业控制命令, 比如kill和renice只能使用进程的PID(而不是它的名字)作为参数, 所以有的时候必须得取得PID. pidof命令与$PPID内部变量非常相似.
bash$ pidof xclock
880
       
10.62 fuser
或取一个正在访问某个或某些文件(或目录)的进程ID. 使用-k选项将会kill这些进程. 对于系统安全来说, 尤其是在脚本中想阻止未被授权的用户访问系统服务的时候, 这个命令就显得非常有用了.
bash$ fuser -u /usr/bin/vim
/usr/bin/vim:         3207e(bozo)
在进行正常插入或删除保存的媒体(比如CD ROM或者USB闪存设备)的时候, fuser命令非常的有用. 某些情况下, 也就是当你umount一个设备失败的时候, 会出现设备忙错误消息. 这意味着某些用户或进程正在访问这个设备. 可以使用fuser -um /dev/device_name来解决这种问题, 这样你就可以kill所有相关的进程.
bash$ umount /mnt/usbdrive
umount: /mnt/usbdrive: device is busy
bash$ fuser -um /dev/usbdrive
/mnt/usbdrive:        1772c(bozo)
bash$ kill -9 1772
bash$ umount /mnt/usbdrive
fuser命令的-n选项可以获得正在访问某一端口的进程. 当和nmap命令结合使用的时候尤其有用.
root# nmap localhost.localdomain
PORT     STATE SERVICE
 25/tcp   open  smtp
root# fuser -un tcp 25
25/tcp:               2095(root)
root# ps ax | grep 2095 | grep -v grep
2095 ?        Ss     0:00 sendmail: accepting connections
       

10.63 cron
管理程序调度器, 用来执行一些日常任务, 比如清除和删除系统log文件, 或者更新slocate数据库. 这是at命令的超级用户版本(虽然每个用户都可以有自己的crontab文件, 并且这个文件可以使用crontab命令来修改). 它以幽灵进程的身份来运行, 并且从/etc/crontab中获得执行的调度入口.
 
 
启动与进程控制类
10.64  init init命令是所有进程的父进程. 在系统启动的最后一步调用, init将会依据/etc/inittab来决定系统的运行级别. 只能使用root身份来运行它的别名 - telinit.
 
10.65 telinit
init命令的符号链接, 这是一种修改系统运行级别的手段, 通常在系统维护的时候, 或者在紧急的文件系统修复的时候才能用. 只能使用root身份调用. 调用这个命令是非常危险的 - 在你使用之前确定你已经很好地了解它!
 
10.66 runlevel
显示当前的和最后的运行级别, 也就是, 判断系统是处于终止状态(runlevel为0), 单用户模式(1), 多用户模式(2或3), X Windows(5), 还是正处于重起状态(6). 这个命令将会访问/var/run/utmp文件.
 
10.67 halt, shutdown, reboot
设置系统关机的命令, 通常比电源关机的优先级高.

10.68 service
开启或停止一个系统服务. 在/etc/init.d 和/etc/rc.d中的启动脚本使用这个命令来启动服务.
    
 
网络类
10.69 ifconfig
网络的接口配置和调试工具.
bash$ ifconfig -a
10.70 iwconfig
这是为了配置无线网络的命令集合. 可以说是上边的ifconfig的无线版本.
 
10.71 route
显示内核路由表信息, 或者查看内核路由表的修改情况.
 
10.72 chkconfig
检查网络配置. 这个命令负责显示和管理在启动过程中所开启的网络服务 (这些服务都是从/etc/rc?.d目录中开启的).
最开始是从IRIX到Red Hat Linux的一个接口, chkconfig在某些Linux发行版中并不是核心安装的一部分.

10.73 tcpdump
网络包的"嗅探器". 这是一个用来分析和调试网络上传输情况的工具, 它所使用的手段是把所有匹配指定规则的包头都显示出来.
显示主机bozoville和主机caduceus之间所有传输的ip包. bash$ tcpdump ip host bozoville and caduceus

文件系统类
 
10.74 mount 加载一个文件系统, 通常都用来安装外部设备, 比如软盘或CDROM. 文件/etc/fstab将会提供一个方便的列表, 这个列表列出了所有可用的文件系统, 分区和设备, 另外还包括某些选项, 比如是否可以自动或者手动的mount. 文件/etc/mtab显示了当前已经mount的文件系统和分区(包括虚拟的, 比如/proc).
mount -a将会mount所有出现在/etc/fstab中的文件系统和分区, 除了那些标记有noauto(非自动)选项的. 启动的时候, 在/etc/rc.d中的一个启动脚本(rc.sysinit或者一些相似的脚本)将会调用mount -a, 目的是mount所有可用的文件系统和分区.
  1 mount -t iso9660 /dev/cdrom /mnt/cdrom
  2 # 加载CDROM
  3 mount /mnt/cdrom
  4 # 如果/mnt/cdrom包含在/etc/fstab中的话, 那么这么调用就是一种简便的方法. 

10.75 umount
卸除一个当前已经mount的文件系统. 在删除已经mount上的软盘或CDROM之前, 这个设备必须被umount, 否则文件系统将会被损坏.   1 umount /mnt/cdrom
10.76 sync
当你需要更新硬盘buffer中的数据时, 这个命令可以强制将你buffer上的数据立即写入到硬盘上(同步带有buffer的驱动器). 在某些情况下, 一个sync命令可能会挽救你刚刚更新的数据, 比如说突然断电, 所以这个命令可以给系统管理员和普通用户一些保障. 以前, 系统重启前都使用sync; sync (两次, 为了保证绝对可靠), 这是一种谨慎小心的可靠方法.
 
 
10.77 losetup
建立和配置loopback设备.

10.78 mkswap
创建一个交换分区或文件. 交换区域随后必须马上使用swapon来启用.
 
10.79 swapon, swapoff
启用/禁用交换分区或文件. 这两个命令通常在启动和关机的时候才有效.
 
10.80 mke2fs
创建Linux ext2文件系统. 这个命令必须以root身份调用.

10.81 tune2fs
调整ext2文件系统. 可以用来修改文件系统参数, 比如mount的最大数量. 必须以root身份调用.
这是一个非常危险的命令. 一旦用错, 你需要自己负责, 因为它可能会破坏你的文件系统.
 
10.82 dumpe2fs
打印(输出到stdout)非常详细的文件系统信息. 必须以root身份调用.
root# dumpe2fs /dev/hda7 | grep 'ount count'
10.83 hdparm
显示或修改硬盘参数. 这个命令必须以root身份调用, 如果滥用的话会有危险.
 
10.84 fdisk
在存储设备上(通常都是硬盘)创建和修改一个分区表. 必须以root身份使用.

10.85 fsck, e2fsck, debugfs
文件系统的检查, 修复, 和除错命令集合.
fsck: 检查UNIX文件系统的前端工具(也可以调用其它的工具). 文件系统的类型一般都是默认的ext2.
e2fsck: ext2文件系统检查器.
debugfs: ext2文件系统除错器. 这个功能多 - 并且危险的工具, 主要用处之一就是(尝试)恢复删除的文件. 只有高级用户才能用!
 
10.86 badblocks
检查存储设备的坏块(物理损坏). 这个命令在格式化新安装的硬盘时候, 或者在测试"备份媒体"完整性的时候会被用到. [4] 举个例子, badblocks /dev/fd0用来测试软盘.
如果badblocks使用不慎的话, 可能会引起比较糟糕的结果(覆盖所有数据), 但是在只读模式下就不会发生这种情况. 如果root用户要测试某个设备(这是通常情况), 那么root用户必须使用这个命令.
 
10.87 lsusb, usbmodules
lsusb命令会显示所有USB(Universal Serial Bus通用串行总线)总线和使用USB的设备.
usbmodules命令会输出连接USB设备的驱动模块的信息.
root# lsusb
10.88 lspci
显示pci总线及其设备.
bash$ lspci
 
10.89 mkbootdisk
创建启动软盘, 启动盘可以唤醒系统, 比如当MBR(master boot record主启动记录)坏掉的时候. mkbootdisk命令其实是一个Bash脚本, 由Erik Troan所编写, 放在/sbin目录中.
 
 
10.90 chroot
修改ROOT目录. 一般的命令都是从$PATH中获得的, 相对的, 默认根目录是 /. 这个命令将会把根目录修改为另一个目录(并且也将把工作目录修改到那). 这个命令对于安全目的非常有用, 举个例子, 某些情况下, 系统管理员希望限制一些特定的用户, 比如那些telnet上来的用户, 将他们限定到文件系统上一个安全的地方(有时候, 这被称为将一个guest用户限制在"chroot监牢"中). 注意, 在使用chroot命令后, 系统的二进制可执行文件的目录就不再可用了.
 
10.91 lockfile
这个工具是procmail包的一部分(). 它可以创建一个锁定文件, 锁定文件是一种用来控制访问文件, 设备或资源的标记文件. 锁定文件就像一个标记一样被使用, 如果特定的文件, 设备, 或资源正在被一个特定的进程所使用("busy"), 那么对于其它进程来说, 就只能进行受限访问(或者不能访问).
 
10.92 flock
flock命令不像lockfile那么有用. 它在一个文件上设置一个"咨询性"的锁, (译者注: "咨询性"的锁有时也称为"建议性"的锁, 这种锁只对协同进程起作用, 还有一种锁叫"强制性"锁, 这种锁加锁的对象读写操作都会由内核做检查.
 
10.93 mknod
创建块或者字符设备文件(当在系统上安装新硬盘时, 必须这么做). MAKEDEV工具事实上具有mknod的全部功能, 而且更容易使用.
 
10.94 MAKEDEV
创建设备文件的工具. 必须在/dev目录下, 并且以root身份使用. root# ./MAKEDEV
这是mknod的高级版本.
 
 
10.95 tmpwatch
自动删除在指定时间内未被访问过的文件. 通常都是被cron调用, 用来删掉旧的log文件.

备份类
 
10.96 dump, restore
dump命令是一个精巧的文件系统备份工具, 通常都用在比较大的安装版本和网络上. [6] 它读取原始的磁盘分区并且以二进制形式来写备份文件. 需要备份的文件可以保存到各种各样的存储设备上, 包括磁盘和磁带. restore命令用来恢复 dump所产生的备份.
 
10.97 fdformat
对软盘进行低级格式化.

系统资源类
 
10.98 ulimit
设置系统资源的使用上限. 通常情况下都是使用-f选项来调用, -f用来设置文件尺寸的限制(ulimit -f 1000就是将文件大小限制为1M). -c(译者注: 这里应该是作者笔误, 作者写的是-t)选项来限制coredump尺寸(ulimit -c 0就是不要coredump). 一般情况下, ulimit的值应该设置在/etc/profile和(或)~/.bash_profile中(请参考Appendix G).

 
10.99 quota
显示用户或组的磁盘配额.
setquota
从命令行中设置用户或组的磁盘配额.
umask
设定用户创建文件时缺省的权限mask(掩码). 也可以用来限制特定用户的默认文件属性. 所有用户创建的文件属性都是由umask所指定的. 传递给umask命令的值(8进制)定义了文件的屏蔽权限. 比如, umask 022将会使得新文件的权限最多为755(777与022进行"与非"操作). [7] 当然, 用户随后可以使用chmod来修改指定文件的属性. 用户一般都将设置umask值得地方放在/etc/profile或(和)~/.bash_profile中(请参考Appendix G).

 
10.100 rdev
取得root device, swap space, 或video mode的相关信息, 或者对它们进行修改. 一般情况下, rdev的功能都是被lilo所使用, 但是在建立一个ram disk的时候, 这个命令也很有用. 小心使用, 这是一个危险的命令.

模块类
10.101 lsmod
显示所有安装的内核模块.
bash$ lsmod
使用cat /proc/modules可以得到同样的结果.
 
10.102 insmod
强制安装一个内核模块(如果可能的话, 使用modprobe来代替). 必须以root身份调用.
 
10.103 rmmod
强制卸载一个内核模块. 必须以root身份调用.
 
10.104 modprobe
模块装载器, 一般情况下都是在启动脚本中自动调用. 必须以root身份来运行.
 
 
10.105depmod
创建模块依赖文件, 一般都是在启动脚本中调用.
 
10.106 modinfo
输出一个可装载模块的信息.
bash$ modinfo hid

杂项类
 
10.107 env
使用设置过的或修改过(并不是修改整个系统环境)的环境变量来运行一个程序或脚本. 使用[varname=xxx]形式可以在脚本中修改环境变量. 如果没有指定参数, 那么这个命令将会显示所有设置的环境变量.
 在Bash或其它Bourne shell的衍生物中, 是可以在同一命令行上设置多个变量的.   1 var1=value1 var2=value2 commandXXX
  2 # $var1和$var2只设置在'commandXXX'的环境中. 
 
10.108 ldd
显示一个可执行文件和它所需要共享库之间依赖关系.
bash$ ldd /bin/ls
libc.so.6 => /lib/libc.so.6 (0x4000c000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x80000000)
watch
以指定的时间间隔来重复运行一个命令.
默认的时间间隔是2秒, 但是可以使用-n选项进行修改.
  1 watch -n 5 tail /var/log/messages
  2 # 每隔5秒钟显示系统log文件(/var/log/messages)的结尾. 

10.109 strip
从可执行文件中去掉调试符号的引用. 这样做可以减小可执行文件的尺寸, 但是就不能调试了.
这个命令一般都用在Makefile中, 但是很少用在shell脚本中.
 
10.110 nm
列出未strip过的, 经过编译的, 2进制文件的全部符号.
 
10.111 rdist
远程分布客户端: 在远端服务器上同步, 克隆, 或者备份一个文件系统.
 
阅读(423) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~