分类: 系统运维
2013-11-22 13:01:37
原文地址:Linux常见疑难问答 作者:cgweb
Linux常见疑难问答
(1)按a~z顺序排列启动服务进程。
#exportLC_ALL=C #英文环境变量设置,主要用于解决乱码问题
#chkconfig –list | grep [z-a] : | grepon $ sort
(2)显示运行级别为5的所有服务。
#chkconfig –list | grep 5: on | sort
(3)如何停止某个(如cups)服务。
#chkconfig cups off ; /etc/init.d/cups stop
(4)修改了/etc/profile文件配置,怎么立即生效。
#source/etc/profile以及“/etc/profile”点后面是空格。
(5)如何使用find工具找到用户cgweb在30天内的文件并备份归档。
#find / -user cgweb –ctime -30 –exec tar azvf /home/backup/cgweb -new-files.tgz {} \;
(6)如何将分区表信息转成文件。
#fdisk –l /dev/sda > /etc/config-data/sda-fdisk.txt #注意:要先建立config-data目录
如何将硬盘分区表和MBR备份到文件:
#dd if=/dev/sda of=/etc/config-data/sda-boot.img bs=512 count=1
(7)如何提高TCP/IP堆栈安全。
通常有个办法是通过“#echo1>/proc/sys/net/ipv4/tcp_syncookied”来阻止SYNFlood攻击,其实这并不安全,可靠的做法是发送到/etc/sysctl.conf文件中,需要将下列代码加到/etc/sysctl.conf中:
net.ipv4.tcp_syncookies=1
net.ipv4.ip_default_ttl=61
net.ipv4.conf.all.accept_redirects=0
net.ipv4.conf.all.send_redirects=0
如果机器多的话可以将这个配置文件存储在FTP服务器(如sysctl-add,服务器IP:10.10.10.1),然后从FTP中提取出来,追加到现有的/etc/sysctl.conf文件尾:
wge tftp://10.10.10.1/pub/sysctl-add
catsystl-add >>/etc/sysctl.conf
(8)如何把/var目录下的所有RPM文件找出来并删除。
#find /var –name "*.rpm" –exec rm {}\;
(9)如何使用SSH在远程主机(10.10.10.1)上建立目录(upload)并上传文件。
(10)如何用find命令查找某个文件夹下包含所有指定关键字的所有文件。
例如需要查找/etc/tomcat5目录下,包含JAVA_OPTS关键字的所有文件:
#find /etc/tomcat5 -name "*" | xargs grep "JAVA_OPTS"
(11)把旧系统上的/etc/passwd和/etc/shadows复制到新系统里,可以继续使用吗。
千万不要在新的机器上复制原来的/etc/apsswd,通常在新旧两个系统之间有很多服务都会产生冲突,如果是同一张盘安装出来的系统,那么可以验证一下系统的crypt/hash函数是否相同(即密码采用相同的算法加密的),切忌不要在新系统中的配置文件上复制整个/etc/的配置文件。
(12)如何实时查看日志文件的信息(排除网络故障时常用,例如DNS、DHCP调试问题)。
#tail –f /var/log/messages #如不用-f选项,默认状态的tail只能列出文件的最后10行
(13)如何找到/etc/目录下所有文件中,内容包括字符串“ip_forward”的文件,并打印到屏幕。
#find /etc/ -exec grep "ip_forward" '{}' \;-print
(14)如何搜索当前系统里文件大小超过1GB的文件(排除磁盘空间方面的故障时常用)。
#find / -size +1024000k –exec du –h '{}' \; -print
(15)远程服务器上没有磁带机,怎么对它进行异地备份。
(date+%Y-%m-%d).tar"
SSH对于管理员来说是再熟悉不过了,那么如何利用它从Linux服务器通过网络传输标准输出(stdout)到备份服务器呢?以上命令即可,注意date后面有个空格。
(16)普通用户cgweb登录系统后如何在根用户才能访问的位置中新建目录呢。
# su --c "mkdir /root/cgwebtmp"
(17)如何只显示top里的几个进程。
如果只显示几个进程,可在top中输入要查看进程的PID:
#top –p 4300 –p4500
(18)如何查看一个命令在执行期间发生了什么系统调用。
#strace /bin/ping 10.10.10.12 > /tmp/ping_out
在这行命令中,通过在strace命令中运行ping命令并将标准错误定向到/tmp/ping_out文件,很多处理消息就会发送到ping_out文件中。如果要查看ping从哪里获得了它的信息,则将找到所有出现open的地方来查看它打开过哪些文件:
#grep ^open /tmp/ping.out
除此之外,还可以让它跟踪子进程,例如要跟踪open系统在上面例子中的调用:
# strace –e trace= open/bin/ping 10.10.10.1
除了打开库之外,ping命令还打开了配置文件resolv.conf来查找IP地址,进而找出它从何处将域名解析为IP地址。
(19)如何测定X server服务器的性能。
当显卡驱动装好后可使用下列命令来检测Xserver服务器的性能:
# X11perf –repeat 3 –reps 10 –subs 10 100 –circulate
上述例子的X11perf命令从下至上运行一套窗口。circulate动作将重复3次,第一组有10个窗口,分别运行10次(共100次循环运行),第二组有100个窗口,依然分别循环运行10次(共1000次循环)。在每组的最后,将显示出重复的总次数和完成整套动作所花费的时间。
还可以用下列命令来测试性能:
#X11perf –repeat 2 –reps 1000 –ftext
将1000个包含80个字符的文本发送给显示器(-ftext):
#X11perf –repeat2 –reps 500 –copywinwin 500
从一个窗口把500×500平方像素大小的方块复制到另一个窗口(-copywinwin500):
#X11perf –repeat2 –reps 800 –scroll 500
垂直滚动500×500平方像素大小的框800次。
(20)如何查看安装的GPG密钥。
#rpm –qa gpg-pubkey*
gpg-pubkey-0dfb3188-41ed929b
其中gpg-pubkey-0dfb3188-41ed929b代表RedHat公司用于签名软件包的共有密钥。如果想获得有关这种公有密钥的信息,可以继续使用RPM命令:
#rpm –qi gpg -pubkey -0dfb3188-41ed929b|less
在输出的Summary代码行中密钥表示为适用于OpenEnterpriseServer,最后输入q退出。
(21)如何检查包的签名信息。
通过以下命令可以检查RPM遭破坏和修改的内容:
# rpm –check sig– vv fedora-logos-1.2.-1.noarch.rpm
(22)在Xen下安装虚拟机。
#virt-install-nvm-mysql-r512-f/vm/vm-mysql.img-s10--nographics-p-lftp://ip/pub/iso
通过上面很简单的一句代码就可以在Xen下安装虚拟机了。
(23)查看当前的TCP连接数。
除了使用常规的netstat-na|more等命令以外,还可利用以下命令实现精确统计连接数量:
#netstat -n|awk'/^tcp/{++S[$NF]}END{for(ainS)printa,S[a]}'
TIME_WAIT29
FIN_WAIT1152
FIN_WAIT22
ESTABLISHED26
SYN_RECV16
(24)访问远程共享的目录。
将如下代码放到/etc/fstab中:
//ip/share1/mnt/dsmbfsdefaults,auto,username=name,password=pass00
其中,IP是远程机器的IP地址,是共享目录的共享名,“/mnt/d”是要将该分区mount到本地Linux的目录,name和pass是可以访问该共享目录的用户名和密码。
(25)如何加大Tomcat连接数。
在Tomcat配置文件server.xml中,应同时加大maxProcessors和acceptCount这两个参数的值。
(26)如何修改Tomcat的端口数。
编辑/etc/tomcat5/server.xml找到其中的connectorport="8080"maxHttpHeaderSize="8192",这一行更改8080这个值为其他1024以上未用端口即可。
(27)如何加大Tomcat的内存。
Tomcat默认的内存为128,在一些大型应用上,显然不够用,所以我们需要手动加大内存:
#vi /etc/tomcat5/tomcat5.conf
找到“JAVA_OPTS=-Xmin0.1–Xmaxf0.3”代码,Xmin0.1表示初始内存大小,更改成Xmin256m,Xmaxf0.3表示最大内存大小,修改为512m,退出重启即可生效。
(28)如何将大的tar包分卷压缩或合并。
以每卷500MB为例,tar分卷压缩:
#tar cvz pf -somedir | split -d -b 500m
-d不是split的选项,是Shell的选项,表示将tar命令的输出作为split的输入。
tar多卷合并:
catx*>mytarfile.tar.gz。
(29)如何去掉文本中多余的回车符(尤其是从Windows复制到Linux的情况)。
sed's/^M//'test.sh>back.sh
注意“^M”是敲“ctrl+V+M”得到的。
或者:
dos2unixtest.sh
(30)如何改变RedHat的系统语言/字符集。
将vi/etc/sysconfig/i18n文件修改成:LANG="en_US",X-window会显示英文界面,修改为:LANG="zh_CN.GB18030",X-window会显示中文界面。
(31)查找权限位为S的文件。
#find . -typef\(-perm-04000-o-perm-02000\)-execls-lg{}\;
(32)查找或删除正在使用某文件的进程。
fuserfilename
fuser-kfilename
(33)如何让用户的密码必须具有一定的长度,并且符合复杂度。
vi/etc/login.defs
修改PASS_MIN_LEN。
(34)如何删除3天以前的所有内容(包括目录名和目录中的文件)。
1find.-ctime+3-execrm-rf{}\;
2find./-mtime+3-print|xargsrm-f–r
(35)如何不改变inode而清空一个文件。
>filename
(36)Oracle的安装程序为什么显示乱码。
现在Oracle的安装程序对中文的支持存在问题,建议使用英文界面来安装,在执行runinstaller之前,执行:
export;exportLC_ALL=C
(37)Linux下文件和目录的颜色代表什么含义。
蓝色表示目录;绿色表示可执行文件;红色表示压缩文件;浅蓝色表示链接文件;灰色表示其他文件;红色闪烁表示链接的文件有问题了;黄色是设备文件,包括block、char、fifo。利用dircolors–p可查看默认的颜色设置,包括各种颜色和“粗体”、下划线、闪烁等定义。
(38)如何查看有多少活动httpd的脚本,每隔3s刷新一次。
编辑如下脚本:
#!/bin/sh
while(true)
do
pstree|grep"*\[httpd\]$"|sed's/.*-\([0-9][0-9]*\)\*\[httpd\]$/\1/'
sleep3
done
(39)如何让cp命令在运行中显示进度。
cp-r-vdir1dir2
cp-a-d-vdir1dir2
(40)编辑/etc/inittab后不重启电脑,配置直接生效。
initq
(41)让Linux连续执行几个命令,出错停止执行。
command1&&command2&&command3
(42)屏幕变花时怎么办。
当不小心cat了一个并不是文本的文件时,屏幕会变花,那么可以按两下“Enter”键,以及“Reset”键,屏幕就可恢复正常了。
(43)在命令行中列出本机IP地址,而不是得到网卡信息。
#ifconfig | grep "inet"|cut-c0-36|sed-e's/[a-zA-Z:]//g'
hostname–i
(44)如何不显示grep进程本身。
#ps -aux | grep httpd | grep -v grep
grep-vgrep可以取消显示所执行的grep本身这个进程,-v参数是不显示所列出的进程名。
(45)删除目录中含输入关键字的文件。
#find /mnt/ebook/ -typef -exec grep"输入关键字"{}\;-print-execrm{}\;
(46)让cron中的任务不回馈信息,假设5分钟检查一次邮件。
0-59/5****/usr/local/bin/fetchmail>/dev/null2>&1
(47)如何开启多个X-window。
startx默认以display:0.0开启第一个X-window,通过传递参数给Xserver可以开启多个X-window:
#startx--:1.0
#startx--:2.0
...
然后利用Ctrl+Alt+F7/F8键进行切换。
(48)如何产生一个长度固定(例如文件长度为1MB)的空文件,即每个字节的值全为0x00。
#dd if=/dev/zero of=/tmp/zero_file bs=1024 count=1024
(49)查找当前目录下的文件并更改扩展名。
例如将当前目录下的所有扩展名为.cf的文件更改为.conf。
#find ./ -name "*.cf"-execrename.conf'{}'\;
(50)如何删除RPM-e删除不了的包。
如果在删除包之前删除了包的目录,执行以下代码:
#rpm -e --noscripts
如果系统里一个包被装两次(由于某些异常引起的),则执行以下代码:
#rpm -emulti-installed-pkgs–allmatches
(51)如何防止某个关键文件被修改。
在Linux下,有些配置文件是不允许任何人(包括root)修改的。为了防止被误删或修改,可以设定该文件的“不可修改位(Immutable)”。命令如下:
#chattr+i/etc/fstab
如果需要修改文件则采用下面的命令:
#chattr-i/etc/fstab
(52)怎样限制一个用户可以启动的进程数。
先确定一下/etc/pam.d/login文件中如下一行代码是否存在:
sessionrequired/lib/security/pam_limits.so
然后编辑/etc/security/limits.conf,在其中可以设置限制用户的进程数、CPU占用率和内存使用率等,如hardnproc30就是指限制30个进程。
(53)如何限制Shell命令记录的大小。
在默认情况下,bash会在文件$HOME/.bash_history中存放多达500条命令记录。有时根据具体的系统不同,默认记录条数也不同。系统中每个用户的主目录下都有一个这样的文件。为了系统的安全,在此强烈建议用户限制该文件的大小,如果是root用户,更应该减小这个条目数。用户可以编辑/etc/profile文件,修改其中的选项如下:HISTFILESIZE=5或HISTSIZE=5,这样就将记录的命令条数减少到5条。
(54)使用RPM命令时没有任何响应,怎么办。
#rm -rf /var/lib/rpm/__db.*
(55)如何防止用户修改某文件。
对系统中的一些关键文件和个人重要资料,可以通过文件权限来保护,例如将文件属性设为600。另外,如果Linux使用的是ext2或ext3文件系统,还可以使用chattr命令,给文件加上i属性,即使root用户也不能直接修改或删除这类文件,以有效防止意外修改情况的发生。具体命令如下:
#chattr +i passwd
可使用如下命令去除i属性:
#chattr –i passwd
(56)解决WebLogic在Linux下启动关闭很慢的问题。
启动、关闭WebLogic时,时间非常长,其原因是JDK中存在一个Bug,解决办法是在WebLogic启动脚本里setDomainEnv.sh加入以下内容:
JAVA_OPTIONS="${JAVA_OPTIONS}-Djava.security.egd=file:/dev/./urandom"
exportJAVA_OPTIONS
建议操作前先将setDomainEnv.sh进行备份。
(57)如何实时查看某一进程的资源消耗情况。
首先查看这个进程的PID,假设PID为500。利用“top-p500”命令,就可以实时查看这个进程的资源消耗情况了。
(58)如何删除一类进程。
#ps -efww|grepLOCAL=NO|grep-vgrep|cut-c9-15|xargskill-9
(59)如何手动修改IP。
编辑/etc/sysconfig/network-scripts/ifcfg-eth0文件,然后执行如下命令:
ifdowneth0;ifupeth0
(60)如何查看22端口现在运行什么程序。
#lsof -i :22
(61)如何开启IP转发。
编辑/etc/sysctl.conf,例如:
net.ipv4.ip_forward=0
将其修改为:
net.ipv4.ip_forward=1
重启后生效,利用“sysctl-a”查看可知已开启IP转发。
(62)如何允许/禁止root通过SSH登录系统。
通过修改“sshd_config:PermitRootLoginno|yes”即可实现。
(63)如何让Linux自动同步时间。
#vi /etc/crontab
添加以下代码:
0001**rootrdate-stime.nist.gov
(64)如何让SSH登录系统永久不断开。
修改自己HOME目录下的.bash_profile文件,加上exportTMOUT=1000000(以s为单位),然后运行source.bash_profile。
(65)防止任何人使用su命令成为root。
在vi/etc/pam.d/su中加入以下代码:
authsufficient/lib/security/pam_rootok.sodebug
authrequired/lib/security/pam_wheel.sogroup=wheel
在/etc/pam.d/su配置文件中定义wheel组。
(66)如何给一块网卡绑定多个IP。
Linux系统中的一块网卡,最多支持256个IP,执行以下代码:
#cd /etc/sysconfig/network-scripts
#cp ifcfg-eth0 ifcfg-eth0:1
#vi ifcfg-eth0:1
修改IP和设备名即可。
(67)Linux下清空ARP表的命令。
#arp-d-a (适用于BSD)
forHOSTinarp|sed'/Address/d'|awk'{print$1}';doarp-d$HOST;done
(68)如何使Linux支持NAT。
#echo1>/proc/sys/net/ipv4/ip_forward
#iptables-tnat-IPOSTROUTING-jMASQUERADE
(69)临时修改网卡MAC地址的方法。
l关闭网卡:/sbin/ifconfig eth0 down
l修改地址:/sbin/ifconfig eth0 hwether 00:AA:BB:CCD:EE
l启动网卡:/sbin/ifconfig eth0 up
(70)更改eth0为混杂模式。
打开网卡eth0,改成混杂模式:
#ifconfig eth0 promisc
关闭混杂模式:
#ifconfig eth0 –promisc
(71)如何让SSH只允许指定的用户登录。
在/etc/pam.d/sshd文件中加入:
authrequiredpam_listfile.soitem=usersense=allowfile=/etc/sshusersonerr=fail
然后在/etc下建立sshusers文件,编辑这个文件,加入允许使用SSH服务的用户名,重新启动SSHD服务即可。
(72)在Linux下如何绑定IP地址和硬件地址。
可以编辑一个地址对应文件,里面记录了IP地址和硬件地址的对应关系,然后执行“arp–f地址对应文件”。如果没有指定地址对应文件,则通常情况下以默认文件/etc/ethers为准。地址对应文件的格式如下:
192.168.12.100:0D:61:27:58:E3
192.168.12.200:40:F4:2A:2E:DC
192.168.12.300:0A:EB:5E:BA:AE
(73)已知网络中一个机器的硬件地址,如何知道它所对应的IP地址。
在Linux下,假定要查“00:0A:EB:27:17:B9”这样一个硬件地址所对应的IP地址,可以使用以下命令:
#cat /proc/net/arp|grep00:0A:EB:27:17:B9
192.168.2.540x10x600:0A:EB:27:17:B9*eth2
另外,还可以利用“arp-a”命令查询:
#arp–a|grep00:0A:EB:27:17:B9
(192.168.2.54)at00:0A:EB:27:17:B9[ether]oneth2
(74)基于Apache的HTTPD或Sendmail服务在启动时被挂起了,如何解决此问题。
遇到此类问题,请确认/etc/hosts文件中是否包含如下一行:
127.0.0.1localhost.localdomainlocalhost
注意:127.0.0.1是网络的回路地址
(75)如何使Linux系统对ping不回应。
要使Linux对ping没反应,也就是使Linux系统忽略ICMP包,可用如下命令实现:
#echo1>/proc/sys/net/ipv4/icmp-echo-ignore-all
若想恢复,可用如下命令实现:
#echo 0>/proc/sys/net/ipv4/icmp-echo-ignore-all
(76)rsync同步压缩传输文件或目录。
rsync-azessh--deletesample_dir/remote_host:remote_dir/sample_dir/
(77)无须输入密码使用SSH密钥登录。
ssh-keygen-b1024-trsa
sshserver"mkdir.ssh;chmod0700.ssh"
scp~/.ssh/id_rsa.pubserver:~/.ssh/authorized_keys
这样就不再提示输入密码,直接可以登录Server了,对文件复制、同步等操作都比较方便。
(78)命令行下发送带附件的邮件。
#cat
这里:
(79)如何增加httpd动态模块,而不重新编译Apache(以deflate模块为例)。
进入httpd源代码目录:
#cd /usr/local/src/httpd-2.2.6
执行httpd安装后目录中的bin/apxs文件:
/usr/local/apache2/bin/apxs-ciamodules/metadata/mod_deflate.c
重新启动httpd:
#service httpd restart
(80)如何变更sendmail邮件的默认存储位置。
如果sendmail使用Procmail作为MDA(邮件投递代理)的话,可以使用Procmail来指定接收邮件的默认存储位置。方法如下:
建立/etc/procmailrc文件。
编辑/etc/procmailrc文件,指定环境变量MAIL的路径,如设为“$HOME/mbox”等。
(81)新编译生成的GCC,使用的标准连接库都位于/usr/local/lib下,但使用的默认连接路径是/usr/lib,怎样添加。
exportLD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
将其写到“~/.bash_profile”里面即可。
(82)为什么编写的Shell脚本无法运行。
脚本权限要为可执行“#chmod+xtest.sh”。且脚本所在的目录在环境变量PATH中,或者直接执行“#./test.sh”。
(83)MySQL的数据库存放在什么地方。
如果使用RPM包安装,应该位于/var/lib/mysql目录下,以数据库名为目录名。
如果源码安装在/usr/local/mysql中,应该位于/usr/local/mysql/var中,以数据库名为目录名。
(84)忘记了MySQL的root口令怎么办。
#service mysql stop
#mysqld_safe--skip-grant-tables&
#mysqladmin -u user password'newpassword''
#mysqladminflush -privileges
(85)让MySQL以大内存方式启动。
将/usr/share/mysql下的某个“mysql-*.cnf”(如1GB内存时为mysql-huge.cnf)复制为“/etc/mysql.cnf”文件,并重启MySQL。
(86)通过SSH挂载远程主机上的文件夹。
sshfsname@server:/path/to/folder/path/to/mount/point
(87)显示消耗内存最多的10个运行中的进程,以内存使用量排序。
#ps aux |sort -nk +4 | tail
(88)利用Shell邮件通知。
#echo "Testmail" | mail -s“主题测试root@sampl.com
注意:主机的SMTP服务需要启用。
(89)如何在OracleRAC环境中找出由于系统程序崩溃而产生的core文件。
由于系统程序发生崩溃时,内核会把当前内存映射到core文件中,我们以X86环境为例,使用下面命令找到core的位置,还能看出是由哪个文件引起的。
#find /u01 -name core.* -exec ls -l thr {}\; | awk'{print$9}' | xargs file
/u01/oracle/product/crs/log/rac1/crsd/core.4107:ELF32-bitLSBcorefileIntel80386,version1(SYSV),SVR4-style,from'crsd.bin'
由上面这条命令,可以看出core.4107的产生,是由“crsd.bin”文件引起的。
(90)如何快速扫描出某网段(例如:192.168.150.0/24)内开机的服务器。
第一种简单方法:
#nmap –sP 192.168.150.*
第二种简单方法,使用一行Shell脚本:
for((i=1;i<=254;i++)); do ping 192.168.150.$i;done
(91)如何禁止某个进程的网络连接。
我们可以先根据进程找到端口号,然后把发出去的包直接丢掉,或者使用owner功能。
#iptables –m owner –pid -owner
(92)如何快速关闭SELinux。
#/usr/sbin/setenforce0立刻关闭SELinux
#/usr/sbin/setenforce1立刻启用SELinux
也可以编辑配置文件达到同样的目的:
#vi /etc/selinux/conf
setSELINUX=disabled
(93)如何监听80端口发给client-A或从client-A发送过来的数据包
#tcpdump –i eth0 host client-A and port80
如果你的计算机有多个网卡,请在-i后面指定好网卡。