杂项工具 - 网管员经验技巧篇
网管员经验技巧篇
2004-04-23 15:18 pm来自:Linux文档
现载:Www.8s8s.coM
地址:无名
问:怎样将多台web服务器并联起来,并行处理大量的http请求, 利用inetd可以吗?
答:没有那么简单,这是一个负载平衡的技术项目,可以到turbolinux的站点看看,turbolinux想集成这个功能。有三种方法,一种是用 DNS的方法。一种是DNS+PROXY,还有一种是购买负载均衡器。DNS的方法效率比较低,但是花费最少,DNS+PROXY效果较好,而负载均衡器价格太昂贵。
问:如何在 Linux 中得到特殊键的码?
答:在 DOS 下面可以通过 INT86 函数进行系统调用来得到方向键的码。
问:关于文件结束的判断需要对一个log文件进行分析,通过下面的方法打开文件:
if ((fp=fopen(free,“r+”))==NULL){ //the free ip file created by manual printf(“can't open file %s.”,free);
putchar('
');
exit(0);
通过fgets函数从fp流中取出字符串验证,正确!
但当使用while(fgetc(fp)!=EOF){}进行提取分析时,却发生“Segmentation fault”错误! 为什么?
答:“Segmentation fault”错误! 这种错误是因为指针为空。
而且用EOF作为文件结束的标志不太好,可能文件结束了还是不等于EOF,请使用:
Try to use:
while(!feof(fp)) {
fgetc(fp);
}
试试看。
问: 在Linux 下怎样获得对方网络邻居上的主机名?
答:使用命令nmblookup -A IP。
问:如何做bootable CD的boot.img?
答:做一个能启动系统的1.44MB的软盘,此软盘就可以是一个boot image。使用命令:cat /dev/fd0 > boot.img。
您只要做一块可以启动的软盘,最好是lilo软盘,就可以在启动时给出其它的参数,例如用什么设备作为root目录, 启动到第几级等。
问:如何在X-WINDOWS下配置PPP连接?
答:在X-WINDOWS 下, xisp 是个不错的拨号工具软件,但在安装 xisp 之前, 要先装有 XForms , 另外, 若您使用的是 KDE , 则可以很方便地使用其提供的 kppp , 非常好用.
问:我有一内置调制解调器,设置为 IRQ12和IO为3e8,但是在Linux中,设定为 COM3占用IRQ4和IO 3e8,怎样改变设置?
答:在您的BIOS中禁用0x3e8。 如果您的内置调制解调器是即插即用的话,可能被您的即插即用的BIOS重设置为IRQ4。IRQ12应该是用win/dos下的设置程序所设置的。
问:Linux下如何实现IP与Mac地址的捆绑?
答:arp -i eth0 -s xxx.xxx.xxx.xxx(IP) xx.xx.xx.xx.xx(MAC)使用命令模块(linuxEthAdmod.tar.gz),也可以通过动态加载或卸载可实现此捆绑功能mac地址。
问:如何使用nohup命令?
答:如果希望进程在您退出系统后还能执行,可以使用nohup命令 如:$nohup tar -cf /dev/tape /home &
您退出后再重新登录,使用ps命令会发现进程还在执行。
问:如何快速查找文件?
答:查找文件可以用find,但最好是用locate,速度快,参数少,例如:
问:我编译完核心部分后,重新启动后不能自动加载声卡, 在提示符下敲cat /dev/sndstat 就能加载, 请指教?
答:修改 /etc/rc.d/rc.modules,
查找 "sound support" 字样,
添加 "/sbin/modprobe sound",然后重新启动即可。
问:使用mount 的时候提示核不支持vfat,重新编译也不行,提示某文件找不到了,使用make menuconfig也不能运行。这是什么原因,有没有可以挽救的方法?
答:原来的内核保存了吗?若保存则把它拷到/BOOT 下 vi /etc/lilo.conf,将image=/boot/newkernel 改成image=/boot/oldkervel, oldkernel 代表你备份的内核。使用lilo 重新启动。你若没保存,就只有重新安装,不过也可试试将光盘上的内核拷到/BOOT下。
问:我安装了RPM后,执行以下命令: rpm -Uvv /root/xcin-2.1d-2.i386.rpm,得到信息: failed dependencies: libc.so.5 is needed by xcin-2.1d-2 libX11.so.6 is needed by xcin-2.1d-2 ,我不知是什么原因,而libc.so.5及libX11.so.6确确实实都存在,我的cpio是2.4.2,不知是否达到了rpm的最低要求 ?
答:rpm将已经通过rpm安装好的包的情况记录在案。如果在它自己的记录中找不到就认为你没有安装。此情况是它将记录保存在 /var/lib/rpm目录中。因为你是新安装的rpm系统,当然不会有任何记录了。不过如果你确认你的系统中存在那些记录那么你可以给出“-nodeps”选项。当采用以上做法时请特别当心,一定要确认所需部件的确存在。
问:在linux上是否能运行SCO UNIX的二进制程序?
答:在Linux上运行 SCO SYSTEM V 3.2.4.2上的二进制程序,可以通过iBCS子系统进行。 Redhat-5.0带有iBCS-2.0.10版本。我试过较低版本的iBCS好象没问题,只是你必须获得原系统的某些库文件。
问:如何进行命令补全?
答:在输入命令时,如果不是很清楚地记得命令的完整拼写,可以先敲入命令的前几个字母,按两次Tab键,就会出现以这几个字母打头的所有命令的提示!这样就不用担心总记不住命令了。
问:如何在同一个命令行上同时执行多条命令?
答:用分号分隔。如编译一个源文件:
#type ./configure ; make ; make install 。
$locate filename
它是在一个数据库里面查找,所以,要记得经常用updatedb命令更新数据库。一般地,是在crontab里加一句语句,让电脑在每天深夜更新数据库。
另外,快速查找命令文件,可以使用whereis,例如:
#whereis ls
ls: /bin/ls /usr/man/man1/ls.1
问:如何在mail中启动vi?
答:如果您觉得用mail发送邮件编辑起来很不方便,可以在正文的顶格输入~v,启动vi进行编辑,编辑完后退出vi,回到mail环境。
问:如何观察文件大小变化?
答:使用watch命令,可以反复执行命令,若和ls配合,可以达到观察某文件大小变化的效果,例如:
$watch ls -l file.name
问:如何把 man 或 info 的信息保存为文本文件?
答:$man tcsh | col -b > tcsh.txt
$info tcsh -o tcsh.txt -s
问:如何使用.iso文件?
答:许多Linux发行版本都有.iso的光盘镜像文件,可以用来刻录光盘,也可以在Linux系统下直接使用。
问:如何强行退出 X-Windows?
答:有时候在 X-Windows 里由于程序出错,鼠标键盘都不起作用,这时候不用着急,您只须同时按下Ctrl+Alt+BackSpace键就可以回到字符界面了。
问:如何压缩可执行文件?
答:可以使用gzexe压缩可执行文件,压缩后的可执行文件仍然可以直接执行,使用本方法可以达到节省磁盘空间的目的。
#gzexe gawk
问:如何处理文件名内含有特殊字符的文件?
答:如果有一个文件名叫 -file 并想删除它,键入 rm -file,将会显示 invalid option ,原来由于文件名的第一个字符为- , Linux 把文件名当做选项了,可以加 -- 解决这个问题, 如 rm -- -file 。如果是其他特殊字符的话可以在特殊字符前加一个 ,或者用双引号把整个文件名括起来。
问:"/dev/tty0"不见了怎么找回来?
答:在 /dev 目录内执行 ./MAKEDEV console 就可以了。
问:/dev下的cua*被删除,该如何恢复?
答:如果没有建立任何一个设备,必须自己用mknod命令去建立。例如,假定需要建立 ttyS0 设备则应输入∶
linux# mknod -m 666 /dev/cua0 c 5 64
linux# mknod -m 666 /dev/ttyS0 c 4 64
也可以使用 MAKEDEV这个命令,在 /dev下应该会有。这样简化了设备的建立。例如,如果需要建立 ttyS0 设备时则应输入∶
linux# cd /dev
linux# ./MAKEDEV ttyS0
这将会处理关于接入以及接出设备的建立,并设定正确的权限而恢复已删除的文件。
问:安装Shadow Suite后,则无办法登录(login)系统,我忽略了什么步骤吗?
答:若您已经安装 Shadow 程序,但是不能登录,可能您忘记复制 /etc/npasswd 到 /etc/passwd,复制 /etc/nshadow 到 /etc/shadow,您还需要复制 login.defs 到 /etc。
问:我安装 Shadow Suite,但是当我使用 userdel 命令后,我得到 "userdel: cannot open shadow group file" 信息,我错在哪里?
答:您编译 Shadow Suite 时使用了 SHADOWGRP 选项,但是您没有/etc/gshadow 文件,您需要编辑 config.h 文件并重新编译它或建立一个 /etc/group文件。
问:Linux中如何检测CPU型号?
答:键入cat /proc/cpuinfo命令即可获知系统配备了几个CPU、CPU的型号、制造商、运行频率、cache大小、有无fpu等信息。
问:如何让鼠标的按键符合左手使用的方向?
答:其实,在x-windows中,我们可以通过对鼠标的设定来达到鼠标按键方向对调的效果。您可以在.xinitrc中加上下面一行命令内容就可调整鼠标按键方向:
xmodmap -e "pointer = 3 2 1"
问:如何使系统在一段时间不运行程序后能自动退出?
答:当系统管理员root账户拥有者在离开计算机时,出于安全考虑,最好让系统在隔一段时间后能自动退出。为了能做到这一点,您必须为一个叫做 “TMOUT”的Linux变量设置指定时间,时间单位是秒。编辑“/etc/profile”文件,在有“HISTFILESIZE=”字样的那一行的后面加上下面一行内容:
TMOUT=3600
加入这一行表示是1小时(60×60=3600秒)。当您把这行内容放入您的“/etc/profile”文件后,在系统在连续一小时不运行程序时,系统会自动通知系统中的所有用户系统将退出。您也可以把该变量设置放在用户各自的“.bashrc”文件中,使得系统能在指定的一段时间不运行程序后能自动退出。
设置后,必须先退出系统,然后再以root帐户重新登录,该项设置才会生效。
问:我想让Apache为大量的连接提供服务。为了减小创建进程所需要的时间,我把Apache子进程数量配置为固定值1000。系统的性能很差,有时甚至拒绝连接。有什么好办法吗?
答:看来您很可能遇到了一个通常称为“thundering herd”(异乎寻常地聚集)的问题。Apache和Linux的文档都详细地说明了这个问题,您可以用几种方法来解决它。
在Linux中,这种情形通常从进程“wake”(唤醒)发展而来。当一个新到达的连接要求Apache/Linux提供服务时,系统向所有正在休眠的进程发出通知。这时,所有这些进程会试图获得对新连接的控制权。但是,它们之中只有一个能够获得成功,所有其他进程都将失败并转入休眠状态。这被称为 “wake all”(全部唤醒)。Linux 2.2和更早的内核都按照这种方式进行处理。
当正在休眠的Apache进程比较少时,将不会成为问题。通常,Apache会利用httpd.conf中的MinSpareServers和 MaxSpareServers配置变量调整休眠进程的数量。然而,如果MaxSpareServer值高得异乎寻常,那么它可能导致性能问题。我通常把 MaxSpareServer值设置为MaxClients值的百分之五到十之间。
如果您的MaxSpareServers值高得异乎寻常,只要减小这个值就可以立即提高性能。
一些内核不会遇到这个问题,因为它们具有一种利用“wake one”(唤醒一个)的能力,“wake one”允许为每个连接请求唤醒一个进程。BSD具有这个能力,Linux 2.4内核也一样。
为了利用“wake one”能力,编译Apache的时候必须指定一个特殊的选项。如果为2.4内核配置Apache,在编译之前请按照下面的示例执行命令,它将改善具有“wake one”能力的内核性能:
# CFLAGS='-DSINGLE_LISTEN_UNSERIALIZED_ACCEPT' ./configure
为给数量巨大的网络连接提供服务,Apache提供了许多调整参数。Apache有一个固定的最大允许连接数量限制,如果要把它设置成大于256,您必须重新编译Apache。
另外,为了适应大规模服务的要求,Linux也需要进行一些文件系统方面的调整。您还要检查一下Linux通过编译方式固定的进程、系统级、用户级限制等等。
问:我有一台便携计算机,想要保证便携机和台式机上都有最新的数据文件,怎么办?
答:有一个优秀的工具rsync能够完成这个任务。rsync提供了一种保持两组文件同步的方法。它以Andrew Tridgell(SAMBA项目的创始人)设计的算法为基础。Andrew Tridgell的算法允许只传输对文件的改动。
rsync一般被看成是一个标准的系统工具,因此您的系统上很可能已经安装了rsync。如果它还没有安装,那么您的Linux安装盘上应该有它的包文件,或者您也可以上网下载最新的源代码。在命令行直接输入rsync将提示用法说明,您可以用这种方法测试rsync是否已经安装。
要保持文件同步,所有机器(在本例中,这是指您的便携计算机和台式机)都必须安装rsync。另外,这两台机器应该能够通过网络互相看到对方。
我强烈建议用ssh作为两台机器之间的通信机制。但还有其他几种配置rsync传输器的方法,包括rsh和rsync daemon模式,rsync文档对此有详细说明。请参见本文有关ssh的说明了解更多信息。
rsync命令的语法和cp命令很相似。从本质上看,您是在把文件从一个位置复制到另一个位置,但rsync多了几个cp命令没有的选项。和通常的文件复制相比,文件同步最大的不同之处是您必须指定一台非本地的机器(比如您的台式机)。
您应该仔细考虑哪些文件要在机器之间保持同步。最好把这些文件放到便携计算机的某个专用目录,避免同步那些不需要同步的文件。例如,您的主目录下可能有数百兆浏览器缓冲数据。通常情况下,您不会想同步这些数据文件。
问:我想保证几台机器的系统时钟同步,有什么简便方法吗?
答:ntpdate程序正是为这个目的而设计的,而且它很简单易用。它使用一种协议查询一个或多个时间服务器,然后为您的机器设置正确的系统时间。
首先您应该确定使用哪一个时间服务器。虽然您可以设置自己的某一台机器作为时间服务器,然后用这台机器同步其他机器的时钟,但我不推荐这么做。这种做法要求您自己完成额外的管理工作,而且您必须保证时间服务器的时钟精确。
ntpdate命令的语法很简单,但必须用root身份运行它。您可以在命令行中指定一个或者多个时间服务器。
为了保证时钟精确,我们可以把ntpdate命令放入crontab。但是,对于那些不是一直开启的机器(比如便携机),这个命令放入启动脚本或手工运行更合适。
必须指出的是,ntpdate设置的是系统时钟,但它不设置硬件时钟(电池供电的时钟)。要让硬件时钟反应系统时钟的值,请使用如下命令:
# hwclock -systohc
如果ntpdate还没有安装到系统上,则可以使用Linux安装盘安装。有关ntpdate命令的更多说明,请参见这个命令的man文档。
问:怎样才能改变目录中文件的默认显示方式?
答:ls命令能够以各种方式显示文件清单。经常使用的选项包括:-a,表示不隐藏“.”文件;-l,表示详细清单格式,包括文件属性和大小;-color,根据文件的属性用不同的颜色显示文件/目录。执行man ls命令可以得到ls命令选项的完整说明。
设置ls默认属性最简单的方法之一是建立一个shell别名。这里以bash为例进行说明。请把下面这行命令加入主目录的.bashrc文件:
alias ls = ls -a -color
另外,您也可以在当前shell中直接输入这个命令,使得别名立即生效(直到您关闭shell)。
.bashrc文件中的命令在您每次启动一个交互式shell的时候自动执行,确保了别名的自动设置。
问:我想在Linux操作系统上访问Windows或DOS的FAT文件,最好的办法是什么?
答:如果说Linux有独特长处,就是共享。有许多方法能够实现不同文件系统之间的文件共享。有些人建议创建一个独立的FAT分区实现操作系统之间的共享,然而,一种更好的方法是允许每一个操作系统装入其他操作系统的文件系统。
Linux一直能够很方便地读写Windows/DOS FAT文件系统。最近出现了许多读/写ext2文件系统的Windows工具,但总地看来,对于共享文件系统来说,这些工具远远不如Linux中现有的工具那样值得信赖。
要在Linux下装入FAT文件系统,Linux内核必须提供适当的支持。大多数默认安装的内核已经包含这方面的支持,但是,如果您选择了自己编译 Linux内核,请确保选中了FAT和VFAT文件系统支持。如果您不想把它编译到内核里,FAT和VFAT支持也可以作为动态装入模块运行。
无论是哪种情况,您必须先在Linux下创建一个装入点(Mount Point)才能共享文件系统。它可以是您所选择的文件系统内的任何目录,但最好使用一个具有明确含义的名字(如本例的/mnt/msdos)。
# mkdir /mnt/msdos
接下来,您应该在/etc/fstab中为FAT文件系统加入一行。如果您的内核支持VFAT,您将能够查看和编辑新版Windows所使用的长文件名。
试着把下面这行内容加入/etc/fstab(注意在这个例子中,我们使用了硬盘的第三个分区/hda2,您应该根据自己系统的具体情况替换这个分区):
/dev/hda2/mnt/msdosvfat defaults 0 1
如果不想让这个文件系统在启动的时候自动装入,您可以在defaults选项之后加入一个“,noauto”。现在,您应该能够以root身份装入Windows分区了。
# mount /mnt/msdos
如果您看到错误信息提示文件系统存在问题,那么,很可能您指定了一个错误的文件系统。这时,您应该检查分区并重新试验。
如果您看到错误信息提示内核对vfat文件系统的支持存在问题,请试着把/etc/fstab入口从vfat改成msdos。如果有效,那么您的内核不支持Windows长文件名。如果无效,那么您的内核没有为DOS或Windows提供合适的文件系统支持。
假设一切都能够按照设想地那样完成它们的任务,那么,现在您应该能够从Linux下的/mnt/msdos装入点(或者您所创建的其他装入点)访问 Windows数据。如果您按照上面介绍的方式进行设置,只有root才能写入这些文件。记住,FAT系统不提供对用户权限的支持。
问:我有一个Perl脚本,但是它不能正确执行,或执行时出现bash提示:./script.pl: No such file or directory。而实际上这个文件是存在的,并可执行,这是为什么呢?
答:可执行脚本通过脚本的第一行命令告诉shell应该用哪一个程序来执行当前脚本。这个命令总是在第一行,而且它类似于:
#!/usr/bin/perl
如果第一行命令指定的程序确实存在,则系统利用该程序解释执行脚本的剩余部分。如果这个程序不存在,您就会看到“No such file or directory”信息。这种脚本执行方式可用于大多数shell脚本,Perl也不例外。
用“#!/bin/sh”或“#!/bin/bash”作为脚本第一行的情况并不少见。一般地,修正该问题的方法也很简单。Perl可能不在用户的系统目录下。执行which perl,您就可以找到Perl所在的位置。然后,修改脚本的第一行使之符合Perl所在的实际位置,这样您就可以修正这个问题了。
问:我安装了一个程序。但是执行它的时候,系统显示“error in loading shared libraries...no such file or directory”。经检查程序已安装在机器里,为何产生此错误?
答:有的程序要用一些称为“动态库”的文件保存部分代码,此部分代码可以供其他程序使用。当程序执行时,操作系统会在某些预定义的地方寻找这些代码库。如果不能找到,操作系统则会显示上述错误。
如果显示此信息,那么下面两个原因必居其一:或者不存在显示程序所要求的动态库;或者虽然存在但Linux由于某种原因不能找到它。如果不存在那么您应该安装它。
解决问题的一种方法是确保文件安装到了标准的库目录下,包括/lib和/usr/lib。然而,简单地把文件移入这些目录的方法将干扰包管理软件的工作,因此必须避免。把文件安装到标准目录应该通过包管理软件或在配置/安装时进行。
如果您要让库文件留在原来的位置,那么,您首先必须找到这些文件,然后把目录加入到搜索路径之中。
例如,假设要寻找错误信息中出现的文件。首先以超级用户身份执行命令“# find / -name filename.so”。找到目录之后,编辑/etc/ld.so.conf文件,且把该目录加入到文件末尾。再运行ldconfig命令,它将在连接器运行时重新构造连接和缓冲。这就是全部的工作!现在您的程序应该能够找到它运行所需要的库文件了。
问:我的硬盘空间不足,现在想找到系统中最大的目录/文件,并删除它。请问有没有完成这个任务的工具?
答:有两个简单的命令能够帮助您轻松地完成这个任务。这两个命令就是du和sort。
du命令用来计算文件或目录的大小。这个命令有许多选项,下面的说明帮助您掌握这两个命令的基本用法。您最好以超级用户身份执行这两个命令,否则可能看到大量“Permission denied”信息,因为很可能您没有访问这些目录的权限。
找出所有根级目录及其子目录的大小:
# cd /
# du -max-depth=1
修改max-depth参数,对下一层的目录进行统计:
# du -max-depth=2
如果不指定max-depth参数,du将统计出目录树中所有目录和文件的大小。结合sort命令运用的命令,将可以显示命令输出的结果。
查看硬盘上所有目录和文件的大小,按照大小排序(这可能需要不少时间):
# du | sort -nr | less
注意随意地删除文件可能非常危险,特别是那些操作系统必须含有的文件。如果要寻找那些拥有大型主目录的用户,这种技术也许是最合适的。如果您找到了看来不再需要的程序文件,最好的删除方法应该是:找出安装这个文件的包,然后用rpm(基于rpm的系统)或者dpkg(基于deb的系统)把整个包都删除干净。
问:为了进行备份,我希望复制并保存所有收到的e-mail。我应该怎么做?
答:这可以通过procmail程序轻松地完成。这里不再介绍procmail的安装和配置,因为现在的大多数包管理系统(RPM,DEB)能够很好地做到这一点。如果您已经有了一个Linux系统的帐号(或者系统属于您自己所有),则可能procmail已经安装和设置完毕。如果没有,您可以联系系统管理员,或者自己用包管理器安装。
要快速确定系统中是否已经安装了procmail,请执行如下命令:
# which procmail
如果procmail已经成功安装,which将显示出procmail的位置(可能是/usr/bin/procmail)。在您的主目录下创建一个.procmailrc文件,且权限0700:
# touch ~/.procmailrc
# chmod 0700 ~/.procmailrc
procmail“recipes”的选项有很多。procmailrc的man文件描述了其中一部分。然而,作为一个简单的起步,请在.procmailrc文件内试一下下面的内容,注意根据具体情况进行适当的替换:
LOGFILE=$HOME/.procmail-log
:0 c:
/home/dtype/Mail/backup
:0 c:
* ^[email protected]
/home/dtype/Mail/sent-mail
:0
* ^Sender: owner-linux-kernel
/home/dtype/Mail/linux-kernel
LOGFILE指定了一个文件,这个文件将记录procmail所有的活动。如果出现任何问题,它是您首先应该检查的文件。
这个.procmailrc文件有三项不同的内容。第一项指定了保存所有备份邮件的文件(在本例中,它是 /home/dtype/Mail/backup)。“c:”告诉procmail保存邮件并继续进行正常的邮件处理,包括配置文件的剩余部分。如果不指定“c:”,所有邮件被保存到备份文件,但是不再保存到其他文件。
为了进行跟踪,想要保存外发的email,.procmailrc文件中包含了一项为发送e-mail设置的内容。
最后一项内容是一个利用procmail保存特定邮件列表所传入email的例子,本例中的邮件列表是linux-kernel邮件列表。 procmail将在邮件的Sender:头中检查“owner-linux-kernel”文字。注意这里不再包含“c:”这是因为我们希望邮件发送到指定的邮箱,不再同时发送到Inbox中。