一. 引言
---- UNIX系统作为一种强大的多用户分时操作系统,在越来越多的场合受到了应用,同时,对UNIX的系统管理的要求也随之越来越多,但目前的书籍对UNIX系统管理命令介绍的并不是很多。本文主要是针对UNIX系统管理员,以SUN Solaris 2.6 系统为例,列举了一些UNIX常用的管理命令的使用及其使用中遇到的问题和解决方法,供大家参考。
二. 常用系统管理命令介绍
---- 1. share 和 mount 命令
---- 这是系统管理员常用的两个命令,share命令用于把本机的目录共享出来,以便其它UNIX系统可以使用;mount命令则用于把其它UNIX系统共享出来的目录挂接到本机的挂接点上,从而可以使用其它UNIX系统的资源。 例如:
---- 在机器A上输入 machineA# share -F nfs -o rw /share-dir
---- 在机器B上输入 machineB# mount -F nfs machineA:/share-dir /mount-point
---- 第一条命令把机器A的 share-dir 目录共享出来,并且共享的权限是可读写;
---- 第二条命令把机器A的共享目录挂接到机器B的 mount-point 目录上。
---- 完成这两个命令后,用户在机器B上通过对mount-point的访问就可以操作机器A上的share-dir目录了。
---- 但是有时我们操作时,在机器B上执行了mount命令后,会返回"RPC: Program not registered"这样的错误,这是因为在机器A上缺少mountd和nfsd 这两个守护进程(daemon)。UNIX系统启动时,系统会自动检查/etc/dfs/dfstab文件,如果文件中有要共享的资源,则启动这两个守护进程,反之,则不启动。所以如果我们在/etc/dfs/dfstab中没有内容,则系统不能启动mountd和nfsd这两个守护进程,用share命令共享的目录也不能真正被别的系统共享。
---- 解决这个问题的方法很简单,我们可以把要共享的目录放入/etc/dfs/dfstab中,则下一次系统启动时会自动共享这个目录;另外,我们也可以手动启动这两个守护进程,方法是首先用超级用户(root)登陆,在命令行输入如下命令:
machine_A# /etc/rc3.d/S15nfs.server start
或输入:
machine_A# /usr/lib/nfs/mountd
machine_A# /usr/lib/nfs/nfsd -a 16
就可以启动这两个守护进程了。
---- 守护进程启动后,共享目录才真正被共享出去,这时再在机器B上用mount命令就可以把机器A的目录挂接到机器B上了。
---- 2. quota 系列命令
---- UNIX作为一种多用户系统,它允许多个用户共同使用系统的资源,包括系统的内存,CPU和硬盘。在默认情况下,系统并不会限制每个用户可以使用硬盘空间的大小,所以如果用户恶意使用硬盘,或用户由于疏忽,将硬盘空间全部占用,将导致其他用户无法使用硬盘,从而使系统性能下降,甚至有崩溃的危险。
---- 其实,UNIX提供的quota系列命令可以帮助我们解决这个问题,这些命令包括:
quota : 显示用户的硬盘限额和使用情况。
edquota : 为每个用户设定硬盘限额。
quotaon: 启动文件系统硬盘限额服务
quotaoff : 关闭文件系统硬盘限额服务
repquota : 显示当前硬盘限额状态
---- 配置这项服务的方法很简单。但在使用硬盘限额服务之前,我们要明白硬限制和软限制这两个概念。所谓硬限制是指对资源节点和数据块的绝对限制,在任何情况下都不允许用户超过这个限制;而软限制是指用户可以在一定时间范围内(默认时为一周,在/usr/include/sys/fs/ufs_quota.h文件中设置)超过软限制的额度,在硬限制的范围内继续申请资源,同时系统会在用户登录时给出警告信息和仍可继续申请资源剩余时间。如果达到时间期限,用户的硬盘使用仍超过软限制的额度,则系统将不允许用户再申请硬盘资源。
---- 明白了这两个概念,我们就可以配置硬盘限额服务了,首先我们必须在要限制的文件系统的根目录下建立一名字为quotas的文件,该文件的所有者应是root,且其它用户不可以对它进行写操作。方法是:
---- # cd /home (进入文件系统根目录,注意并不是系统根目录,本例为/home目录)
---- # touch quotas (创建一名字为quotas的空文件)
---- # chmod 644 quotas (更改文件属性,使只有root可以对它进行写操作)
---- 然后,我们编辑/etc/vfstab文件,找到要进行硬盘限额服务的文件系统,并将mount option字段的值设为rq,然后并存盘退出。
---- 完成这两步后,我们使用edquota命令为每个用户设置硬盘限额,在root权限下输入以下命令:
#edquota username
这时系统会自动生成一个临时文件,并且有如下内容:
fs /users blocks (soft = 0, hard = 0)
inodes (soft = 0, hard = 0)
---- 其中fs字段表明使用硬盘限额的文件系统,本例为/users,block和inodes表明用户可以使用的硬盘千字节数和I节点数,即用户可使用的硬盘空间和可建立的文件数,soft和hard分别对于前面提及的软限制和硬限制。
---- 编辑这个文件,把软,硬限制设置到合适的数值,然后存盘退出。这时我们可以看到quotas文件的大小已经被改变,说明用户的限额已经储存。重复这条命令,给每一个用户都配置硬盘限额。另外,如果我们分配给用户的硬盘限额都相同,我们可以使用 "-p" 参数而不用为每个用户都编辑一个文件,它的使用方法是:
#edquota -p reference-username username
编辑完文件后,我们就可以用quotaon来启动服务了,
在root权限下输入
#quotaon /users
就可以启动限额服务。如果我们要查看各个用户的当前使用情况,
可以使用repquota 命令,在root权限下输入:
#repquota /users
系统会显示:
---- 从中我们可以很容易看到用户的硬盘和文件的使用情况以及超过软限制后仍可申请资源的时间等等。
---- 当然我们可以用quotaoff取消硬盘限额服务。另外,系统还提供quotacheck 命令对限额的一致性进行检查。
---- 3. ifconfig命令
---- ifconfig命令用于查看和更改网络接口的地址和参数,如果要显示某台UNIX主机的IP地址,我们可以在命令行下输入:
$ifconfig -a
系统会显示网络接口的名称,接口的状态(up or down),
接口的IP地址和掩码等信息。
---- 如果我们要更改网络接口的IP地址,可以在root权限下输入:
#ifconfig hme0 down
#ifconfig hme0 202.1.2.3 netmask 255.255.255.0 up
---- 首先,使用down命令参数把网络接口hme0的服务暂时停止,然后再用ifconfig命令给接口分配新的IP地址和掩码,并启动网络接口服务。本例中把hme0接口的IP地址设为202.1.2.3,掩码为255.255.255.0。
---- 我们也可以通过改变文件/etc/hosts中的IP地址的值并重新启动系统来更改机器的IP地址。
---- 在系统启动时,网络接口服务时自动被启动的,我们不需要手动地创建网口服务,但有时我们更改了网卡或增加了网卡后,系统不能自动启动该接口服务,这时我们需要手动创建网口服务,在root权限下输入:
#ifconfig hme0 plumb
即可以为接口le0创建网口服务。
相应地,用ifconfig带unplumb参数可以停止服务并关闭网络
接口,这时我们再用ifconfig -a 命令将看不到该网络接口。
---- 4. format命令
---- format也是一个重要的系统管理命令,但由于它的破坏性极大,使用时一定要小心。format命令主要有两个用途,即格式化硬盘和重新对硬盘分区,下面分别加以说明:
---- 1) 格式化硬盘
---- 和DOS一样,UNIX的硬盘在使用之前也需要格式化,在对它格式化之前,我们要用单用户形式重启动系统
#reboot -s
启动后用root用户登录,然后在命令行下输入:
#format
系统会显示所有的硬盘并让我们选择要格式化的硬盘:
---- 本例中系统有两个SUN2.1G的硬盘,我们选择1并回车,系统会显示如下菜单:
---- 在提示符下输入type来选择硬盘类型,系统会列出它支持的硬盘类型,选择合适的硬盘类型并输入相应的代码(也可以输入0让系统自动检测)。选择完硬盘类型后,就可以配置硬盘分区,有关分区的具体操作请参见"2)重新分区"一节。
---- 配置结束后,输入format命令进行格式化,这将花费一定的时间,具体时间的长短受机器型号和硬盘大小的影响。格式化完成后,就可以输入quit命令退出了。
---- 硬盘格式化后,并不能立即被使用,我们还需要在上面创建文件系统,使用命令newfs来为每一个分区创建文件系统:
#newfs /dev/rdsk/c0t1d0s0
#newfs /dev/rdsk/c0t1d0s1
…
---- 参数的具体数值根据分区的情况来设置。
---- 另外,如果该硬盘包含启动分区(根分区),我们需要手动安装启动模块,安装之前首先要有UNIX系统安装光盘,我们通过光盘启动后,将系统根分区挂接上,并从光盘安装启动模块,具体方法如下:
#reboot cdrom -s (从光盘启动,并进入单用户模式)
#mount /dev/dsk/c0t1d0s0 /mnt
(将系统根分区挂接到mnt目录下)
#cp /ufsboot /mnt
#installboot /lib/fs/ufs/bootblk
/dev/rdsk/c0t1d0s0 (安装启动模块)
#umount /mnt (卸下挂接)
#reboot (重启动)
---- 至此,硬盘的格式化操作已经完成,我们可以使用该硬盘了。
---- 2) 重新分区
---- format命令也可以对硬盘进行重新分区。重新分区后,受影响分区上的所有文件将被清除,所以在进行这个操作前,我们应注意要先对文件系统进行备份。重新分区的具体方法如下:首先我们要进入单用户形式,并用root用户登录,然后在命令行下输入:
#format
系统会显示所有的硬盘并让我们选择硬盘:
---- 我们选择0并回车,系统会显示如下菜单:
---- 输入partition,再输入modify,回车,系统提示用户选择分区基础(partitioning base) ,选择1,回车,系统会显示:
---- 我们把分区6作为自由分区,这意味如果其它分区大小变化,自由分区6用来作为硬盘空间的积累或减少。然后按系统要求输入期望的分区值,format会自动调整分区柱面边界,使各个分区之间没有空隙。回车确认该分区表,并给该分区表命名,确认后退出format 命令。分区结束后,我们要用newfs命令为改变的分区创建文件系统
# newfs /dev/rdsk/c0t0d0s6
然后将备份的文件拷回,完成硬盘分区的更改工作。
---- 这里要再一次提到的是,format命令具有极大的破坏性,很容易导致数据丢失,甚至系统崩溃,所以在使用它的时候一定要小心。
---- 5. fsck命令
---- fsck命令也是一个经常使用的命令,它用于对文件系统进行检查,并对损害的文件系统进行修复。
fsck的语法如下:
fsck (-F fstype) (-v) (-m) (-special…)
fsck (-F fstype) (-v) (-y|Y|n|N)
(-o fstype options) (special…)
其中:
-F fstype : 说明被检查的文件系统的类型
-v : 返回完成的命令行,但不运行
-y|Y: 对所有问题均回答Yes
-n|N: 对所有问题均回答No
-m: 对文件系统进行检查,不修复文件系统,
如果文件系统经检查后是可安装的,则显示
ufs fsck : sanity check : /dev/rdsk/c0t0d0s0 okay.
-o: 文件系统类型选项,选项由逗号分隔,
最常用的选项有两个:
P: 整理(preen)模式
F: 强制检查模式,此选项忽略文件系统状态标志。
运行fsck后,该命令会分6个阶段对文件系统
进行检查,这六个阶段分别是:
阶段1: 检查块和块的大小
阶段2: 检查路径名
阶段3: 检查连接性
阶段4: 检查参考记数
阶段5: 检查自由块列表
阶段6: 补救自由块列表
---- fsck在对每个阶段进行检查时,如果发现错误,会提示用户进行修改,常见的一些错误有: 1) 移去一个没有相关文件的目录入口
---- 这时用户可以回答Yes或Y来删除该目录入口。
---- 2) 重连接一个已分配但不能访问的文件:
---- fsck找到了一个已分配的I节点,但却不可访问(该节点没与任何目录连接),这时一般对fsck的"RECONNECT?"回答Yes,即把该I节点连接到lost+found目录下,文件名即是I节点号,之后管理员应检查该文件类型,判明该文件用途,再将该文件拷贝到相应目录下。
---- 3) 连接数调整
---- 在交互方式下,fsck若发现连接数不一致,将询问用户采取何种行动,本例发现一目录的I节点连接数与该目录的真实连接数不一致。
---- 这时用户应该回答Yes或Y来改正连接数。
---- 4) 自由块表不一致
---- fsck查出未分配块数与超级块中所给出的自由块表不一致。
---- 这时用户应该回答Yes或Y来修正超级块。
---- 从上面的出错信息和处理方法可以发现,对于fsck询问的问题大多数情况下都可以用Yes来回答,所以在实际应用时,可以用" -y"选项来执行该命令对硬盘进行检查和修复。
---- 6. route命令
---- route命令主要用于手动配置静态路由表。例如我们要增加一条通过网关到达令一子网的路由,命令如下:
---- #route add net remote_net_ip gateway_ip 1
---- 其中add代表要增加路由,net表示路由到达的是一个网络而不是一台主机,1代表远端网络需通过网关才能到达,而不是直接与它相连(直接通过网络接口相连时,该参数用0)。
在Solaris 2.6 中,也可以使用如下命令:
#route add -net remote_net_ip
gateway_ip -netmask netmask
#route add -host host_ip
local_interface_ip -interface
---- 其中第一条命令与上面介绍的命令完成相同的任务,而第二条命令则代表要建立一条通过网络接口到达另一台主机的路由。
---- 当然,我们使用"delete","change"命令参数可以对路由表中的路由信息进行删除和修改。执行完route命令后,我们可以用"netstat -rn"命令查看当前的路由信息:
---- 从路由表中可以知道当前共有5条路由,其中到达224.0.0.0和127.0.0.1的路由分别是广播路由和本地路由,是由系统默认设置的。到达主机202.77.111.22的路由是通过本机网络接口连接的,到达网络202.77.112.0的路由则是通过网关202.77.111.1连接的。
---- 通过route配置路由表后,该路由信息会一直保存到下次系统重启。系统重启后,则要重新配置路由表。通过修改文件/etc/defaultrouter可以设置一些默认路由,这些路由在系统每次启动时都会被加到路由表中,而不必每次启动都用route命令来配置路由表。/etc/defaultrouter文件的格式如下:
$cat /etc/defaultrouter
202.77.111.1
---- 该文件中现在只有一条默认路由,IP地址是202.77.111.1,这代表系统将把所有不属于本地的数据包都通过网关202.77.111.1发送出去。
---- 有时UNIX系统安装完成后,/etc目录下并不存在defaultrouter文件,这时我们可以手工创建该文件,并编辑好默认路由,然后重启。系统启动后,就会自动使用配置好的默认路由信息了。
三. UNIX系统管理常见问题及解决方法
---- 1. 忘记root 密码
---- root用户又被称为超级用户,它是权限最高的用户,一旦它的密码被忘记,将给系统的维护和管理带来很多困难,下面是忘记root密码时的处理方法:
---- 首先,我们需要从CD-ROM 启动系统,命令是:
---- #boot cdrom -s
---- 系统启动后,我们要把硬盘根分区挂接到光盘文件系统的/mnt目录上,执行:
#mount /dev/dsk/c0t0d0s0 /mnt
(该例假设根文件系统是/c0t0d0s0)
编辑硬盘根分区的shadow文件,将root的密码项位置设为空。
#cd /mnt/etc
#vi shadow
---- 注意,有的系统要编辑/etc/passwd 文件而不是/etc/shadow文件。
---- 改完文件后,将挂接的根文件系统卸下。
---- #umount /mnt
---- 重新启动系统,并设置新的root密码。
---- 2. 系统无法启动
---- 系统无法启动的原因大致如下:
---- 1) 错误的引导设备
---- 假如因为指定了错误的引导设备使系统不能引导,我们可以在PROM监控等级下利用"probe-scsi","probe-scsi-all"和"probe-ipi"命令来查看有什么设备被连到系统上,并得到启动设备的devalias名。进入PROM的方法是当系统启动时,同时按下"STOP"键和"a"键, 这时系统出现提示符ok >,即表明系统当前处于PROM监控等级。
---- 用printenv显示当前配置情况,如果发现引导设备不正确,可用setenv来重新设置: ok >setenv boot-device devalias
---- 用reset命令重新启动系统,或set-defaults 恢复缺省值。
---- 2) 缺少重要的系统文件,或文件无效
---- 这时可以用"-a"选项来引导系统,系统将提供交互式的引导过程,如果有找不到文件时,系统会提示用户给出适当的文件名。
---- 3) 缺少关键的系统文件,或文件无效
---- 例如缺少/etc/passwd文件,这时系统可能会引导,但是没有任何用户可以注册。修复方法是用光盘启动,挂接根文件系统并编辑/etc/passwd文件。
---- 4) 无法挂接远程文件系统
---- 系统启动时,会自动执行/etc/vfstab文件,如果在文件中有无法挂接的远程文件系统,则系统会一直处于等待和重试状态,无法进入登录界面。解决办法是用单用户启动,编辑/etc/vfstab文件,删除错误的挂接内容。
---- 3. 键盘失效
---- 如果出现键盘失效的情况,即用户在键盘上输入信息而屏幕上没有响应,首先要检查硬件的连接,即查看键盘与主机的连接是否完好,连接导线是否有折断或损害情况。
---- 如果硬件连接没有问题,则查看是否不小心使用了锁屏命令。方法是,按下"Ctrl+q"键,如果系统有响应,则说明是因为用户按下了"ctrl+s"键将屏幕暂时锁住的原因。锁住后的屏幕将不显示用户从键盘输入的信息,但输入的信息依然能够执行。
---- 如果系统仍没有响应,我们则要重新启动系统,进入PROM状态,输入printenv命令,并查看input device项的值,如果它的值不是keyboard,用
---- ok >setenv inputdevice keyboard
---- 来使键盘成为输入设备,然后再次重启系统,这时系统将会响应用户的输入了。
---- 4. cron 或 at 命令不能执行
---- UNIX系统并不允许任何用户都可使用cron进行作业调度,对用户的限制有两个文件,它们是/etc/cron.d/cron.allow和/etc/cron.d/cron.deny。
---- 如果用户名被添加到/etc/cron.d/cron.allow文件中,则该用户被允许使用cron,而不在该文件中的用户则不允许使用,如果用户被添加到/etc/cron.d/cron.deny中,则该用户不能使用cron,其它用户则可以使用cron。通常我们根据需要配置其中一个文件就可以了。
---- 如果用户被允许使用cron,则可以用命令
$crontab myCronFile
在系统的/var/spool/cron/crontabs
目录中安装自己的作业调度控制文件。
at 和 cron 相似,要使用at, 需要配置
/etc/cron.d/at.allow或/etc/cron.d/at.deny文件。
---- 5. 在Telnet时不能用root登录
---- 在默认情况下,出于安全性考虑,UNIX系统不允许在系统操作台(console) 以外的终端用root登录,所以有时我们通过Telnet用root登录时,会返回
"not on system console"
这样的错误,这时,我们可以通过修改/etc/default
/login文件来允许root通过Telnet登录。具体方法是,
编辑login文件,找到下面的一行:
CONSOLE=/dev/console
将这一行注释掉,即在行首加上"#"符,存盘退出,
再次使用Telnet时,root就可以登录了。
---- 6. 关于目录的访问权限
---- 我们都知道UNIX系统中的每一个文件都有相应的访问权限,系统根据该权限来控制用户对文件的访问,UNIX系统中的目录也有相应的访问权限,但它的定义与文件有些不同。
---- 读权限:
---- 对目录的读权限表示用户可以查看该目录的内容,即可以对该目录使用象"ls"这样的命令。
---- 写权限:
---- 对目录的写权限表示用户可以在该目录下建立新文件或将其中的文件删除,不论此时用户对该文件是否有写权限。
---- 执行权限:
---- 执行权限指用户可以在该目录下搜索文件,也即可以使用该目录下具有相应访问权限的文件。
四. 总结
---- 以上介绍的管理维护命令只是UNIX系统维护管理命令的极少的一部分,UNIX还提供了其它很多有用的命令,这需要我们在工作中不断的学习和研究。如果你对这篇文章有任何建议或意见,请与我联系,让我们共同探讨。我的电子邮件地址是 qhjiang@yeah.net.