Linux常见疑难问答

时间:2023-03-08 16:29:30
Linux常见疑难问答

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)并上传文件。

#ssh root@10.10.10.1 mkdir/var/www/html/upload

#scp *.cfg root@10.10.10.1 : /var/www/html/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)远程服务器上没有磁带机,怎么对它进行异地备份。

#tar cvf -/home/etc | ssh root@10.101.10.1 "cat > /mnt/backup/remoteserver 1_$
(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<mailcontent.txt>|mutt-s"title"-a<attachfile>mail@address

这里:<mailcontent.txt>代表邮件正文内容。<attachfile>代表本地需要作为附件的文件名。

(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 <processid> -j REJECT

(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后面指定好网卡。

(94)如何实现系统某用户登陆后不显示用户名称?
我们将系统用户的shell环境变量中/sbin/bash改成/sbin/nologin即可,注意不能将root用户,改成/sbin/nologin,否则无法登陆。nologin的作用还可以限制某些用户通过ssh登陆到shell上