17. 系统与管理命令

/etc/rc.d目录下的启动和关闭脚本演示了这些命令的大多数用法(和有用性)。这些通常由root用户调用,用于系统维护以及紧急文件系统修复。请谨慎使用,因为如果使用不当,其中一些命令可能会损坏您的系统。

用户和用户组

users

显示所有已经登录的用户。大致相当与who -q

groups

列出当前用户及其所属的组。该命令对应于$GROUPS内部变量,但是仅仅给出了组名,没有组号。

bash$ groups
bozita cdrom cdwriter audio xgrp

bash$ echo $GROUPS
501

chown, chgrp

chown命令用于更改一个或多个文件的所有权。这个命令非常有用,root用户可以使用它将文件所有权从一个用户转移到另一个用户。普通用户不能改变文件的所有权,即使是她自己的文件。[1]

root# chown bozo *.txt

chgrp命令用于更改一个或多个文件的用户组所有权。若想成功执行这个操作,你必须是该文件的所有者以及目标用户组(或root组)的成员。

useradd, userdel

useradd管理命令将用户帐户添加到系统中,并为该特定用户创建主目录(如果指定了主目录)。相应的,userdel命令从系统[2]中删除一个用户帐户,并删除相关的文件。

noteadduser命令是useradd的同义词,通常就是指向它的符号链接。

usermod

修改用户帐户。可以对给定用户帐户的密码、用户组、到期日期和其他属性进行更改。当使用此命令时,用户的密码可能会被锁定,因此具有禁用帐户的效果。

groupmod

修改给定的组。可使用此命令更改用户组名和/或ID号。

id

id命令列出了与当前进程相关联的真实有效的用户id和用户的组id。这是内部Bash变量$UID$EUID$GROUPS的对应副本。

noteid命令仅在有效id与真实id不同时才显示它们。

另请参阅样例 9-5

lid

lid(list ID)命令显示给定用户所属的用户组,或者属于给定用户组的用户。该命令只能由root用户调用。

who

显示所有已登录系统的用户。

-m选项仅给出当前用户的详细信息。向who传递任意另外两个参数与who -m等价,即who am i以及who The Man

whoami命令类似于who -m,但仅列出用户名。

w

显示所有已登录的用户和属于他们的进程。这是who的扩展版本。w的输出可以管道传输给grep来找到特定的用户和/或进程

logname

显示当前用户的登录名(你也可以在/var/run/utmp下找到)。它近似于以上所说的whoami

然而 ...

note尽管logname打印出了已经登录的用户名,但是whoami给出运行当前进程的用户名。正如我们刚刚看到的,有时这些执行结果并不相同。

su

作为另一个用户来运行这个程序或脚本。su rjones会作为rjones来开启一个shell。不带任何参数执行su默认切换到root用户。请参阅样例 A-14

sudo

作为root(或其他)用户运行一条命令。这可以运用在脚本中,从而允许普通用户来运行脚本中的命令。

文件/etc/sudoers中记有所有允许调用sudo的用户名称。

passwd

设置、改变或者管理一个用户的密码。 passwd命令可以在脚本中使用,但是不推荐使用。

样例 17-1. 设置一个新密码

passwd命令的-l-u-d选项分别可以冻结、解锁以及删除用户的密码。只有root用户可以使用这些选项。

ac

显示从/var/log/wtmp中读取的用户登录时间。这是GNU会计实用工具之一。

last

/var/log/wtmp中读取并列出最后登录的用户。这条命令也能够显示远程登陆的用户。 例如,显示最近几次系统重新启动的信息:

newgrp

在不登出的情况下改变用户的组ID。这允许用户可以访问新组里的文件。由于用户可能同时是多个组的成员,因此该命令用途有限。

noteKurt Glaesemann指出,newgrp命令可能有助于设置用户写入文件的默认组权限。但是仅仅为此目的,chgrp命令可能更为方便。

终端命令

tty

输出当前用户终端的名称 (文件名)。请注意,每个单独的xterm窗口都算作不同的终端。

stty

显示和/或更改终端设置。脚本中如果使用该复杂的命令可以控制终端行为和输出显示方式。请参阅info手册,并开展仔细的研究。

样例 17-2. 设置一个擦除字符

样例 17-3. 秘密的密码:关闭终端输入显示

stty的一种创造性用途是检测用户按键 (不键入回车键)。

样例 17-4. 检测按键

另请参阅样例 9-3样例 A-43

终端和模式

通常,终端以规范模式工作。当用户击中某个键时,生成的字符不会立即转到该终端中实际运行的程序。终端本地的缓冲区会对用户的击键(keystroke)进行缓存。当用户敲击回车键时,才会将所有存储的击键(keystroke)发送给正在运行的程序。终端内部甚至有一个基本的行编辑器(line editor)。

使用规范模式,可以重新定义本地终端线路编辑器的特殊键。

尽管用户按了26个键,但控制终端的进程仅接收12个字符 (11个字母字符,加上1个换行符)。

在非规范 (“raw”) 模式下,每个击键 (包括特殊的编辑键,例如ctl-H) 都会立即向控制过程发送一个字符。

Bash提示符禁用了icanonecho,因为它用自己更精细的编辑器代替了基本的终端行编辑器。例如,当你在Bash提示符中键入ctl-A,在终端上并没有输出^A

,但是Bash得到了一个**\1**字符并翻译,将光标从行首向前移动一位。

Stéphane Chazelas

setterm

设置某些终端属性。此命令将更改写入终端标准输出(stdout)的字符串行为。

setterm命令可以在脚本中更改写入标准输出(stdout)的文本的外观,尽管肯定有更好的工具可实现此目的。

tset

显示或者初始化终端设置。这是一个能力不强的stty版本。

setserial

设置或显示串行端口参数。此命令必须由root用户运行,通常可以在系统设置脚本中找到。

getty, agetty

gettyagetty是终端初始化进程,并设置用户登录窗口。这些命令不在用户shell脚本中使用。他们脚本对应的命令是stty

mesg

允许或者禁用当前用户终端的写权限。禁用权限可以防止网络上的另一个用户将内容写入这个终端。

note设想一下,当你正在专心致志地编辑文本文件时突然跳出一条外卖广告是多么烦人。因此,在多用户网络中,当需要避免中断时,你或许希望禁用对终端的写访问。

wall

这是“全部写入”的首字母缩写,即向当前网络中每个终端的所有用户发送消息。这主要是一个系统管理员的工具,很有用,例如,当警告每个人系统将由于一个问题而即将关闭时(参见样例 19-1)。

note如果一个特定的终端已经被mesg禁用了写权限,那么wall将不能向那个终端发送信息。

信息和统计命令

uname

该命令将系统参数(操作系统、内核版本等)输出到标准输出(stdout)。当使用-a参数调用时,会给出详细的系统信息(参见样例 16-5)。-s参数仅显示操作系统类型。

arch

显示系统架构。与uname -m等价。请参阅样例 11-27

lastcomm

给出存储在/var/account/pacct文件中之前执行过命令的信息。命令名和用户名可以由选项指定。这是GNU会计工具之一。

lastlog

列出所有系统用户最后一次的登陆时间。该命令参考/var/log/lastlog文件。

note如果调用该命令的用户没有var/log/lastlog文件的读权限,那么将会失败。

lsof

列出所有已打开的文件。这条命令会以表格的形式详细输出当前所有打开的文件,并给出这些文件的拥有者、大小、与其关联的进程等等。当然,lsof可以通过管道传输给grepawk来解析和分析它的结果。

lsof命令是一条有用的,复杂的命令工具。如果你无法取消挂载一个文件系统并且仍得到“该文件系统仍在使用中”的报错消息,那么执行lsof会有助于查找究竟是哪个在文件系统上的文件还处于打开状态。-i选项会列出网络套接字(socket)文件,因此这可以帮助追踪入侵或者黑客攻击。

请参阅样例 30-2了解lsof命令有效的使用方式。

strace

系统跟踪:用于跟踪系统调用和信号的调试诊断工具。该命令和下面的ltrace命令对于诊断给定程序或软件包无法运行的原因非常有用 . . . 可能是因为缺少库或相关原因。

该条命令运行在Linux系统上,并且与Solaris系统上的truss命令等价。

ltrace

库跟踪:用于跟踪给定命令所调用的库调用操作的调试诊断工具。

nc

nc (netcat)实用程序是一个完整的工具包,用于连接和侦听TCP和UDP端口。它是一个有用的调试诊断工具,也是基于脚本的简单HTTP客户端及服务器中的一个组件。

一个现实生活中的案例

样例 17-5. 检查远程服务器的ident

当然,在BitKeeper事件中还有Andrew Tridgell博士臭名昭著的单行脚本:

free

以表格形式显示内存和缓存使用情况。此命令的输出可以使用grepawkPerl进行解析。procinfo命令不仅显示free输出的所有信息,而且包括更多信息。

显示未用的RAM内存:

procinfo

/proc伪文件系统中提取并列出信息和统计信息。该命令给出了一个非常广泛和详细的列表。

lsdev

列出设备,即显示已安装的硬件。

du

递归显示 (磁盘) 文件使用情况。默认为当前工作目录,除非另有说明。

df

以表格形式显示文件系统使用情况。

dmesg

将系统启动消息写入标准输出(stdout)。方便调试和确定安装了哪些设备驱动程序以及正在使用哪些系统中断。当然,dmesg的输出可以在脚本中使用grepsedawk进行解析。

stat

给出指定文件 (甚至是目录或设备文件) 或文件集详细全面的统计信息

如果目标文件不存在,stat会返回错误信息。

在脚本中,你可以使用stat提取有关文件 (和文件系统) 的信息,并相应地设置变量。

vmstat

展示虚拟内存统计数据。

uptime

显示系统运行了多长时间,以及相关的统计信息。

note负载均值为1或更小表示系统将会立即处理进程。负载平均值大于1意味着进程正在排队。当负载平均值高于3 (在单核处理器上) 时,系统性能会大大降低。

hostname

列出当前系统的主机名。该命令会在/etc/rc.d/etc/rc.d/rc.sysinit或类似的文件)中设置主机名。该命令与uname -n等效,并且是内部变量$HOSTNAME的对应项。

hostname类似的命令还有domainnamednsdomainnamenisdomainnameypdomainname命令。可以使用这些命令来显示或设置系统DNS或NIS/YP域名。hostname命令的各种选项也实现了这些功能。

hostid

输出主机的32位十六进制数字标识符。

note据称,该命令获取了特定系统的 “唯一” 序列号。某些产品注册程序使用此编号来标记特定的用户许可证。不幸的是,hostid仅返回十六进制机器网络地址,并对字节进行了转置。

/etc/hosts文件中可以找到典型的非联网Linux主机的网络地址。

碰巧的是,如果转置127.0.0.1的字节,我们会得到0.127.1.0,转换为十六进制为007f0100,完全等同于上面的hostid返回的内容。在全世界,只有几百万台其他Linux机器具有相同的hostid

sar

sar命令(系统活动报告者) 提供了极详细的系统统计信息摘要。圣克鲁斯行动 (“旧” SCO) 在1999年6月将sar作为开源软件发布。

此命令不是基本Linux发行版的一部分,但可以从Sebastien Godard编写的sysstat实用程序包中获得。

readelf

显示指定elf二进制文件的信息和统计信息。该命令是binutils包的一部分。

size

size [/path/to/binary]命令给出二进制可执行文件或存档文件的段大小。这主要对程序员有用。

系统日志命令

logger

将用户生成的消息附加到系统日志 (/var/log/messages)。您不必是root用户即可调用logger

通过在脚本中嵌入logger命令,可以将调试信息写入/var/log/messages

logrotate

此实用程序(日志轮转)管理系统日志文件,根据需要轮转、压缩、删除和/或通过电子邮件发送它们。这样可以防止/var/log被旧的日志文件弄得乱七八糟。通常cron程序每天会运行logrotate

/etc/logrotate.conf中添加适当的条目可以管理个人日志文件以及系统范围的日志文件。

noteStefano Falsetto开发了[rottlog](GNU Rot[t]log),他认为这是logrotate的改进版本。

任务控制命令

ps

进程统计:按所有者和PID (进程ID) 列出当前正在执行的进程。该命令经常带有axaux选项进行调用,并且可以管道传输到grepsed来搜索特定的进程(参阅样例 15-14样例 29-3)。

以图形化进程 “树” 格式显示系统进程:请执行ps afjxps ax -- forest

pgrep, pkill

ps命令与grepkill结合了起来。

请比较pkillkillall命令的行为。

pstree

以进程“树”格式列出当前正在执行的进程。-p选项显示了PID以及进程名称。

top

实时更新显示大多数cpu密集型进程。-b选项以文本模式显示,因此可以解析命令输出或者用于脚本中。

nice

运行优先级已更改的后台作业。优先级从19(最低) 到-20(最高)。只有root权限可以设置负 (更高) 优先级。相关的命令是renicesniceskill

renicesnice命令会更改正在运行的一个或多个进程的优先级。

skill命令会向一个或多个进程发送终止信号。

nohup

即使在用户注销后,命令仍保持运行。该命令将作为前台进程运行,除非后面跟着&。如果在脚本中使用nohup,请考虑将其与wait相结合,以避免创建孤立僵尸进程。

pidof

标识正在运行的作业的进程ID(PID)。由于作业控制命令 (例如killrenice) 直接作用于进程的PID(而不是其名称),因此有时有必要识别该PIDpidof命令近似对应于内部变量**$PPID**。

样例 17-6. 在pidof协助下杀死一个进程

fuser

标识正在访问给定文件、文件集或目录的进程 (通过PID)。也可以使用-k选项进行调用,该选项会杀死这些进程。这对系统安全具有有趣的应用场景,尤其是用于防止未经授权的用户访问系统服务的脚本中。

fuser的一个重要应用是在物理上插入或删除存储介质 (例如CD ROM磁盘或USB闪存驱动器) 时。有时,执行umount会失败,并报“设备忙”的错误信息。这意味着一些用户和/或进程正在访问设备。执行fuser -um /dev/device_name将真相大白,于是你可以杀死任何相关进程。

使用-n选项调用的fuser命令可以标识进程访问的端口。当与nmap命令结合使用时特别有用。

cron

管理程序调度程序,执行清理、删除系统日志文件以及更新slocate数据库等职责。这是at超级用户版本 (尽管每个用户可能都有自己的crontab文件,可以使用crontab命令进行更改)。它作为守护进程运行,并从/etc/crontab执行计划条目。

note一些Linux的版本运行crond程序,这是Matthew Dillon的cron版本。

进程控制和启动命令

init

init命令是所有进程的父进程。在启动的最后一步被调用,init/etc/inittab中决定了系统的运行级别。被其别名telinit调用,并且仅由root用户调用。

telinit

init的符号链接,这是一种改变系统运行级别的方法,通常用于系统维护或紧急文件系统修复。仅由root用户调用。这个命令可能非常危险——在使用之前一定要理解它!

runlevel

显示当前和上一次运行级别,即系统是暂停模式(运行级别0)、单用户模式(1)、多用户模式(2或3)、X窗口模式(5)还是重新启动(6)。这个命令会访问/var/run/utmp文件。

halt, shutdown, reboot

通常在断电前用于关闭系统的命令集。

note 在一些Linux发行版上,halt命令拥有755的权限,所以它能够被非root用户调用。粗心地在终端或者脚本中执行halt会导致整个系统关闭!

service

启动或者停止一个系统服务。在开机启动时,位于/etc/init.d或者/etc/rc.d中的启动脚本使用该命令来启动服务.

网络命令

nmap

网络映射器和端口扫描器。此命令扫描服务器以定位开放的端口以及与这些端口相关联的服务。它还可以报告有关包过滤和防火墙的信息。这是一个重要的安全工具,用于锁定网络以防黑客攻击。

ifconfig

网络接口配置和调整的实用程序。

ifconfig命令最常用于启动时设置接口,或者在重启时关闭接口。

另请参阅样例 32-6

netstat

显示当前网络统计数据和信息,如路由表和活动的网络连接。这个实用程序访问/proc/net中的信息(第29章)。参阅样例 29-4

netstat -r等价于route程序。

notenetstat -lptu显示了正在监听端口的套接字以及相关的进程。这对于确定计算机是否已被黑客攻击或威胁非常有用。

iwconfig

这是用于配置无线网络的命令集。可以理解为无线版的ifconfig

ip

用于设置、更改和分析IP(互联网协议)网络和附加设备。该命令是iproute2软件包的一部分。

或者,在脚本中:

route

显示内核路由表的信息或对其进行更改。

iptables

iptables命令集是一种数据包过滤工具,主要用于诸如设置网络防火墙之类的安全目的。这是一个复杂的工具,对其使用的详细解释超出了本文档的范围。可以从Oskar Andreasson的教程开始了解。

另请参阅关闭iptables样例 30-2

chkconfig

检查网络和系统配置。此命令会列出和管理在通过/etc/rc?.d目录来控制启动的网络和系统服务。

chkconfig最初是从IRIX继承到Red Hat Linux的端口,某些Linux版本的核心安装可能不包含该程序。

tcpdump

网络数据包 “嗅探器”。这是通过转储符合指定条件的数据包头的方法,来分析和网络流量故障定位的工具。

在主机bozovillecaduceus之间转储ip数据包流量:

当然,tcpdump的输出可以被我们之前讨论的文本处理实用工具进行解析。

文件系统命令

mount

挂载文件系统,通常是外部设备,如软盘或CDROM。文件/etc/fstab便捷地列出了可用文件系统、分区和设备的列表,以及包括可以自动或手动挂载的选项。文件/etc/mtab显示了当前挂载的文件系统和分区 (包括虚拟的,例如/proc)。

mount -a通过检索/etc/fstab列出所有已挂载的文件系统和分区,但带有noauto选项的文件系统和分区除外。在启动时,/etc/rc.d (rc.sysinit或类似的东西) 中的启动脚本调用此命令以挂载所有内容。

多功能mount命令甚至可以在块设备上挂载普通文件,并且该文件将具有文件系统的性质。Mount通过将文件与回环设备(loopback device)关联来完成此操作。这样做的一个应用场景是在将ISO9660文件系统映像刻录到CDR上之前,将其挂载并检查。[3]

样例 17-7. 检查一个CD映像

umount

卸载当前挂载的文件系统。在物理移除曾经挂载的软盘或CDROM磁盘之前,该设备必须使用umount取消挂载,否则可能会导致文件系统损坏。

note如果已经安装有自动挂载实用程序,可以在访问或移除软盘或CDROM磁盘时自动挂载和卸载它们。然而,在带有可交换软驱和光驱的“多轴”笔记本电脑上,这可能会导致问题。

gnome-mount

较新的Linux发行版已经弃用了mountumount。取而代之的是用于可移动存储设备的命令行挂载工具。可以使用-d选项来挂载在/dev中列出的设备文件

例如,要安装USB闪存驱动器:

sync

强制将所有更新的数据从缓冲区立即写入硬盘(使硬盘与缓冲区同步)。虽然并非绝对必要,但sync程序可以向系统管理员或用户保证,刚刚更改的数据将在突然断电后仍然存在。在过去,一个sync;sync(两次,只是为了确保万无一失)是系统重启前的一项有用的预防措施。

有时,你可能希望强制立即刷新缓冲区,比如当安全地删除一个文件时(参阅样例 16-61),或者当电源供应不足时。

losetup

设置和配置回环设备(loopback device)

样例 17-8. 在文件中创建一个文件系统

mkswap

创建一个swap分区或文件。交换区必须随后使用swapon命令进行激活。

swapon, swapoff

挂载 / 卸载swap分区或文件。这些命令经常在启动和关机时起作用。

mke2fs

创建一个Linux ext2文件系统。该命令必须被root用户所调用。

样例 17-9. 添加一个新硬盘

另请参阅样例 17-8样例 31-3

mkdosfs

创建一个DOS FAT文件系统。

tune2fs

调整ext2文件系统。可用于更改文件系统参数,例如最大挂载数。该命令必须被root用户所调用。

note这是一个极其危险的命令。使用它的风险将由你自己承担,因为你可能会无意中破坏你的文件系统。

dumpe2fs

转储 (列表到标准输出(stdout)) 非常详细的文件系统信息。该命令必须被root用户所调用。

hdparm

列出或更改硬盘参数。此命令必须被root用户所调用。如果滥用,可能会非常危险。

fdisk

创建或更改存储设备的分区表,通常是硬盘。该命令必须被root用户所调用。

note使用该命令时要格外小心。如果哪里出现问题,你可能会破坏现有的文件系统。

fsck, e2fsck, debugfs

文件系统检查、修复和调试命令集。

fsck:检查UNIX文件系统的前端(也能够被其他实用工具所调用)。实际的文件系统类型通常默认为ext2

e2fsck:ext2文件系统检查器。

dubugfs:ext2文件系统调试器。这个多用途但危险的命令的用途之一是(试图)恢复被删除的文件。仅限老手使用!

note以上这些命令需要被root用户所调用,如果滥用它们可能会对损坏甚至摧毁一个文件系统。

badblocks

检查存储设备上的坏块(物理介质缺陷)。此命令在格式化新安装的硬盘或测试备份介质的完整性时非常有用。[4]例如,通过执行badblocks /dev/fd0测试软盘。

badblocks命令可以以破坏性模式(覆盖所有数据)或以非破坏性只读模式调用。如果root用户拥有要测试的设备,通常情况下,root用户必须调用该命令。

lsusb, usbmodules

lsusb命令列出所有usb(通用串行总线)总线和连接到它们的设备。

usbmodules命令输出所有已连接USB设备的驱动程序模块的信息。

lspci

列出目前所有的pci总线。

mkbootdisk

创建一张引导软盘。当MBR(主引导记录)损坏,可以用它来启动系统。特别有趣的是--iso选项,它使用mkisofs创建一个可引导的ISO9660文件系统映像,并用于刻录可引导的CDR。

mkbootdisk命令实际上是一个由Erik Troan所写的Bash脚本,存放在/sbin目录下。

mkisofs

创建适配CDR映像的ISO9660文件系统。

chroot

更改 ROOT 目录。通常,命令是从相对于 / 的 $PATH 中获取的,默认为根目录。该命令将目录更改为另一个(同时也将工作目录更改到那里)。为了安全,该命令很有用。例如,当系统管理员希望将某些用户(如远程登录的用户)限制在文件系统的安全部分时(这有时被称为将访客用户限制在“chroot监狱”中)。注意,在执行chroot命令之后,系统二进制文件的执行路径将不再有效。

执行chroot /opt会导致对/usr/bin的引用被转换为/opt/usr/bin。同样,chroot /aaa/bbb /bin/ls会将ls的实例重定向到/aaa/bbb作为基目录(base directory),而不是通常情况下的 / 目录。在用户的~/.bashrc中添加一条alias XX 'chroot /aaa/bbb ls'有效地限制了她可以在文件系统的哪个部分运行命令“XX”。

chroot命令在使用紧急引导软盘(给/dev/fd0chroot)运行时也很方便,或者在从系统崩溃中恢复时作为lilo的一个选项。其他用途包括但不限于从不同的文件系统安装(rpm选项)或从CD ROM运行只读文件系统。该命令仅能被root用户所调用,并请小心使用。

note可能需要将一些特定的系统文件拷贝到chroot改变后的目录下,因为不能再依赖正常的 $PATH。

lockfile

这个实用程序是procmail软件包(www.procmail.org)的一部分。该命令会创建一个锁文件,一个旗语(semaphore)来对文件、设备或资源进行访问控制。

定义: 旗语是一个标志或信号。(这种用法起源于铁路运输,用彩旗、灯笼或带条纹的活动臂旗语来表示某一特定轨道是否已被使用,因此不能供另一列火车使用。)UNIX进程可以检查旗语是否合适,以确定特定资源是否可用/可访问。

锁文件代表着该特定文件、设备或者资源正在被一个进程所占用(因此也是“忙”的)。锁文件的存在限制了其他进程的访问(或拒绝访问)。

锁文件在如下的应用程序中使用,例如保护系统邮件文件夹不被多个用户同时更改,显示正在被访问的调制解调器(modem)端口,并显示有一个Firefox实例正在使用其缓存。脚本可能会检查某个进程创建的锁文件是否存在,以检查该进程是否正在运行。请注意,如果脚本尝试创建已经存在的锁定文件,则该脚本可能会被挂起。

通常,应用程序会在/var/lock目录中创建并检查锁文件。[5]脚本可以通过以下方式来测试锁文件的存在性。

flock

flock远远不及lockfile那么有用。它在文件上设置 “咨询” 锁,然后在锁打开时执行命令。这是为了防止任何其他进程在指定命令完成之前就锁定该文件。

note不同于lockfileflock不会自动创建一个锁文件。

mknod

创建块或字符设备文件 (在系统上安装新硬件时可能是必需的)。MAKEDEV实用程序几乎具有mknod的所有功能,并且更易于使用。

MAKEDEV

创建设备文件的实用工具。必须由root用户运行,并且该程序位于/dev目录。这是mknod程序的一系列高级版本。

tmpwatch

自动删除在指定时间内未被访问的文件。通常由cron调用以删除陈旧的日志文件。

备份命令

dump, restore

dump命令是一个精心设计的文件系统备份实用程序,通常在较大的系统安装和网络上使用。[6]它读取原始磁盘分区,并以二进制格式写入备份文件。要备份的文件可能会保存到各种存储介质中,包括磁盘和磁带驱动器。restore命令用于恢复dump命令生成的备份文件。

fdformat

在软盘 (/dev/fd0*) 上进行低阶格式化(low-level format)。

系统资源管理命令

ulimit

设置系统资源使用的上限。通常在调用时加上-f选项,该选项用于设置文件大小限制 (如ulimit -f 1000将文件限制为最大1兆)。[7]-t选项限制了核心转储(coredump)大小((如ulimit -c 0禁止核心转储)。通常,将在/etc/profile和/或~/.bash_profile中设置ulimit的值 (参阅附录H)。

note明智地使用ulimit可以保护系统免受可怕的fork炸弹的侵害。

/etc/profile中的ulimit -Hu XX(其中XX是用户进程限制)将在超过预设限制时中止此脚本。

quota

显示用户或组磁盘配额。

setquota

用命令行设置用户或组磁盘配额。

umask

建立用户文件时预设的权限掩码。限制特定用户的默认文件属性。该用户创建的所有文件都将采用umask指定的属性。传递给umask的 (八进制) 值定义了禁用的文件权限。例如,umask 022确保新文件最多具有755权限 (777 NAND 022)。[8]当然,用户以后可能会使用chmod更改特定文件的属性。通常的做法是在/etc/profile和/或 ~/.bash_profile中设置umask的值 (参阅附录H)。

样例 17-10. 使用umask命令来隐藏输出文件以防止窥探

rdev

获取有关根设备、交换空间或视频模式的信息或对其进行更改。rdev的功能基本已由lilo顶替,但是rdev对于设置随机存储器(ram)磁盘仍然有用。如果滥用,这将会成为一个危险的命令。

模块管理命令

lsmod

列出已经安装的内核模块。

note执行cat /proc/modules将会得到同样的信息。

insmod

强制安装内核模块(请尽可能使用modprobe代替)。必须由root用户调用。

rmmod

强制卸载内核模块。必须由root用户调用。

modprobe

通常位于启动脚本中并自动调用的模块加载程序。必须由root用户调用。

depmod

创建模块依赖文件,经常由启动脚本所调用。

modinfo

输出一个可加载模块的信息。

杂项命令

env

运行包含有自定义环境变量的程序或脚本(不改变整体系统环境)。[varname=xxx]允许在脚本运行期间更改环境变量varname。如果没有指定选项,该命令将列出所有环境变量设置。[9]

note当shell或解释器的路径未知时,脚本的第一行(“sha-bang”行)可能会使用env

甚至 ...

ldd

显示可执行文件的共享库(shared lib)依赖项。

watch

以指定的时间间隔重复地执行一条命令。

默认两秒的间隔,但可以通过-n选项进行更改。

note不幸的是,无法通过管道watch命令的输出传输到grep

strip

从可执行二进制文件中移除调试符号引用。这减小了二进制文件的大小,但是使调试变得不可能。

该命令经常出现在Makefile中,但是很少出现在shell脚本中。

nm

列出未被strip处理过的编译后二进制文件中的符号。

xrandr

用于操作屏幕根窗口(root window)的命令行工具。

样例 17-11. 背光:更改(笔记本电脑)屏幕背光的亮度

rdist

远程分发客户端:同步、克隆或备份远程服务器上的文件系统。

注记

[1]在Linux机器或具有磁盘配额的UNIX系统上就是这种情况。

[2]如果需要被删除的特定用户处于登录状态,userdel命令将失败。

[3]有关刻录CDR的更多详细信息,请参阅1999年10月期Linux Journal中Alex withers的文章 “创建CD”。

[4]mke2fs命令的-c参数还会检查是否有坏块。

[5]因为只有root用户有/var/lock目录的写权限,普通用户的脚本不可以在此目录下设置锁文件。

[6]单用户Linux系统的操作员通常更喜欢更简单的备份,例如tar

[7]从Bash的版本4更新后,在POSIX模式下,-f-c选项的块大小为512。此外,还有两个新选项:-b表示套接字(socket)缓冲区大小,-T表示线程数限制。

[8]NAND是一个逻辑与-非运算符。它的作用有点类似于减法。

[9]在Bash和其他Bourne shell派生中,可以在单命令环境下设置变量。

最后更新于

这有帮助吗?