今天闲着无聊,在办公室的电脑上装cygwin,结果弄了近一个小时都不行,一直报unable get setup.ini from… 或不能获得镜像列表,或者能读取但一会就报某程序不能正确获取等错误,刚开始的时候以为是安装程序出错,下载了几次都是。随后又以为是镜像问题,换N个镜像也还是错误。
Google一下,原来不止我一个出现这问题,解决办法更简单,那就是:在安装选择网络连接方式的时候不要选直连,选择IE5的连接方式-_-!,IE5啥年代的了,我就是被IE5给误导了,想怎么都不会使用IE5的连接方式。结果还真得选它再汗一个!
gentoo 下面配置xorg
Gentoo下面配置xorg是非常容易的,步骤如下:
emerge xorg-x11 安装好xorg
然后 只需要Xorg -configure 一下就会自动产生xorg的配置文件,不过要注意的是产生的新配置文件是在/root里面
下一步测试新配置文件
X -config /root/xorg.conf.new
正常情况下是不会启动成功的:),因为还没安装卡的驱动
emerge nvidia-drivers (这里因为我的是n卡所以用的nvidia-drivers,根据自己的情况看)
安装显卡驱动
安装完以后再
Xorg -configure
X -config /root/xorg.conf.new
看看是不是成功了呢?反正我是没成功(好事多磨哦)
看失败原因(直接会显示在屏幕上,如果你有 兴趣也可以去/var/log/里看xorg的log)
Failed to load module “wfb” (module does not exist, 0)
解决方法如下:
执行
eselect opengl set nvidia
然后再
Xorg -configure
X -config /root/xorg.conf.new
一下,终于成功了,看到了几个简陋的窗口
其实gentoo的文档资源是非常的丰富的,只要遇到问题你去gentoo上面查找一般都能找到howto。当然,google更是好老师,遇到问题就去Google一般都能找到答案
Linux webserver 常用维护命令
这里是维护时常用的一些命令,放在这里,备忘
注:大部分非原创,只是收集到这里而已
实时查看正在执行的sql语句
1./usr/sbin/tcpdump -i eth0 -s 0 -l -w - dst port 3306 | strings | egrep -i ‘SELECT|UPDATE|DELETE|INSERT|SET|COMMIT|ROLLBACK|CREATE|DROP|ALTER|CALL’查看http连接
1.netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”\t”,state[key]}’查看SYN状态的http连接
1.netstat -an | grep SYN | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more查看TIME_WAIT状态的http连接
1.netstat -tna | cut -b 49- |grep TIME_WAIT | sort |more
2.netstat -an | grep TIME_WAIT | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more查看ESTABLISHED状态的http连接
1.netstat -an | grep ESTABLISHED | awk ‘{print $5}’ | awk -F: ‘{print $1}’ | sort | uniq -c | sort -nr | more
2.netstat -an | grep “:80” | grep ESTABLISHED | sort | more批量kill进程
1.ps -efww|grep sqlr-listener|grep -v grep|cut -c 9-15|xargs kill -9查看活动的php-cgi连接数
1.netstat -anpo|grep php-cgi|wc -l按ip查看httpd连接数
1.netstat -anlp | grep 80 | grep tcp | awk {‘print $5’} | awk -F: {‘print $1’}| sort |uniq -c | sort -nr禁IP
1.iptables -A INPUT -s IP地址 -j REJECT
2.iptables -A INPUT -s IP地址/24 -j REJECT
3.route add -net IP地址 netmask 255.255.255.0 reject调试命令
1.strace -p pid跟踪指定的进程pid.
1.gdb -p pid跟踪指定的进程pid.
批量查找文件并删除
1.find . -name test.php -exec rm {} \;
2.find . -name test.php | xargs rm -rf更改某一目录下所有目录的权限, 不包括文件, aaa 是目录名
1.find aaa -type d -exec chmod 755 {} \;替换文件内容
1.sed -i ‘s/b/strong/g’ index.html
此命令搜索 index.html 文件中的 b 并将其替换为 strong。
调整SSHD的启动优先级别
在实际的服务器使用中,我们经常遇到的一个情况就是服务器无响应,有可能是由于apache或者是mysql等服务过载造成服务器无响应。九王爷就遇到过几次这种情况,好几次说服务器没响应,ssh也上不去,只好请机房的人员帮助重启机器。重启机器后发现log等服务还是在运行的,也就是说服务器不是真的死机了,而是反应不过来,如果当时能ssh上去看看的话就能找到原因了。所以希望能在apache等没反应以后还能ssh上服务器
这就需要将ssh的运行优先级给调高一些,而我又是个懒人,希望能每次重启后自动的就把优先级给调整了。查看sshd_conf里面没有相应的选项,就只好在启动脚本里面打主意了。
查看启动脚本/etc/init.d/sshd ,修改里面的
$SSHD $OPTIONS && success || failure
为
nice -n -2 $SSHD $OPTIONS && success || failure
使用-2优先级是希望sshd服务的优先级高于apache等的0,但低于log等的-5
sudo /etc/init.d/sshd restart
一下,然后
ps -aeo cmd,pid,nice |grep sshd
看下优先级是不是变成-2了呢?
[linux服务器][进程管理]用fuser杀掉进程
转的CU上一条大牛的,转载这里备忘(以前是不转过来的,但是最近发现很多文章所在网站都死掉了,因为没保存,很多好文也没有了)原文地址 http://blog.chinaunix.net/u2/82938/showart_1839189.html
用fuser杀掉进程
一,为什么要使用fuser?
先说 fuser的作用,
fuser能识别出正在对某个文件或端口访问的进程
大家想一下,还有哪个命令具备这个功能?
没错,是lsof,
我们前面讲过, lsof能够找出正在对指定文件访问的进程,
那么它们两者之间有何区别?
fuser有一个特别的用法在于它可以一次杀死那些正在访问指定文件的进程
二,如何使用fuser?
1,如何用fuser得到正在使用指定文件的进程?
用法: fuser 文件
说明:它会把正在使用当前文件的进程id列出
[root@localhost lhd]# umount /
umount: /: device is busy.
(In some cases useful info about processes that use
the device is found by lsof(8) or fuser(1))
[root@localhost lhd]# fuser /
/: 1rc 2rc 3rc 4rc 5rc 6rc 7rc 80rc 82rc 84rc 85rc 153rc 157rc 158rc
160rc 165rc 168rc 203rc 204rc 205rc 253rc 441rc 444rc 516rc 521rc 524rc 582rc 583rc
584rc 633rc 1052rc 1392rc 1394rc 1417rc 1597rc 1609rc 1617rc 1620rc 1683rc 1744rc 1783r 1785rc
1788rc 1806r 1808r 1810rc 1811rc 1812rc 1813rc 1814rc 1815rc 1848rc 1886rc 1899rc 1900rc 2001rc
……太多不一一列出
说明:
这些进程号后面的rc是什么意思?
c 将此文件作为当前目录使用。
e 将此文件作为程序的可执行对象使用。
r 将此文件作为根目录使用。
s 将此文件作为共享库(或其他可装载对象)使用
2,如何列出进程的详细信息,而不仅仅是进程id?
用 -v参数即可
说明: -v: 含义是:verbose output,详细的输出信息
例子:
[root@dev ~]# fuser /var/log
/var/log: 4196c
[root@dev ~]# fuser -v /var/log
USER PID ACCESS COMMAND
/var/log: root 4196 ..c.. bash
3,如何列出进程所属的用户?
用 -u参数即可
说明: -u: 含义:display user IDs,显示用户id
例子:
[root@dev ~]# fuser -u /var/log
/var/log: 4196c(root)
4,如何杀死所有正在访问指定文件的进程?
用 -k参数即可
说明: -k:含义: kill processes accessing the named file
例子:
[root@localhost lhd]# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3185 f…. tail
[root@localhost lhd]# fuser -k /root/install.log
/root/install.log: 3185
[root@localhost lhd]# fuser -v /root/install.log
说明: -k参数能够杀死所有的正在访问指定文件的进程,所以用来杀进程时非常方便
说明之二: fuser如何杀死的进程?
它发送的是这个信号:SIGKILL
三,多学一点知识
1,fuser可以列出它所知的信号:
用 -l参数即可
例子:
[root@dev ~]# fuser -l
HUP INT QUIT ILL TRAP ABRT IOT BUS FPE KILL USR1 SEGV USR2 PIPE ALRM TERM
STKFLT CHLD CONT STOP TSTP TTIN TTOU URG XCPU XFSZ VTALRM PROF WINCH IO PWR SYS
UNUSED
2,fuser可以发送它已知的信号给访问的指定文件进程而代替-k参数默认发送的SIGKILL
例如:只是挂起进程,那么发送HUP信号就可以了
例子:
[root@localhost lhd]# fuser -v /root/install.log
用户 进程号 权限 命令
/root/install.log: root 3347 f…. tail
[root@localhost lhd]# fuser -k -SIGHUP /root/install.log
/root/install.log: 3347
[root@localhost lhd]# fuser -v /root/install.log
服务器备份一例
这两天服务器无故死机2次,查看log又没有看到有什么异常。只能怀疑是日常的备份让服务器给down掉了。然后今天就将日常备份脚本给删除了,希望这样能看出是不是备份的时候出的问题。
顺便做个全备份。万一是硬件问题也不至于有太大问题。
- 数据库备份时现成的(做了个小脚本,每3天都会自动备份一个),直接下载到本地机器上。
- 网站数据备份,因为看到log比较大,而我又不需要log资源,所以就去掉了log
语句如下:
nohup nice -n 19 tar –exclude var/www/web/log/ -czvf /home/csbde/backup/webbak20090319.tar.gz /var/www/ > /home/csbde/backup/webbak20090319.log
语句简单解释:
退出终端以后还会继续执行(nohup),设置运行级为最低的19(nice -n 19),这样就不会因为运行这个程序而影响其他程序了。排除目录(–exclude var/www/web/log/)注意var前面没有/,好像有/也没关系,会自动帮你去掉。压缩/var/www/(我的网站目录)到webbak20090319.tar.gz,并写入log到webbak20090319.log
- 备份/etc目录
sudo nohup nice -n 19 tar cvzf bak_etc_20090320.tar.gz /etc > bak_etc_20090320.log
- 备份apache设置
sudo nohup nice -n 19 tar cvzf bak_apache_config_20090320.tar.gz /usr/local/apache2/conf > bak_apache_config_20090320.log
小知识点:
优先级范围-20~19,-20为最高优先级,19为最低
显示命令名,进程id即优先级ps -eo cmd,pid,nice
按优先级N执行程序
nice -n N command
调整已执行程序的优先级
renice [+N/-N] process
或者使用top进行直观的调整(运行top然后按r)
vim里对程序的自动排版功能
ssh 超时(ssh timeout) 解决办法
原来的ssh是不会超时的, 但是不知道从什么时候起, 出现了ssh 超时现象:只要putty连续3分钟左右没有输入, 就自动断开, 然后必须重新登陆, 很麻烦.
在网上查了很多资料, 发现原因有多种, 环境变量TMOUT引起,ClientAliveCountMax和ClientAliveInterval设置问题或者甚至是防火墙的设置问题. 所以可以这么尝试:
1, echo $TMOUT
如果显示空白,表示没有设置, 等于使用默认值0, 一般情况下应该是不超时. 如果大于0, 可以在如/etc/profile之类文件中设置它为0.
Definition: TMOUT: If set to a value greater than zero, the value is interpreted as the number of seconds to wait for input after issuing the primary prompt. Bash terminates after waiting for that number of seconds if input does not arrive.
2. ClientAliveInterval 60
在/etc/ssh/sshd_config中增加ClientAliveInterval 60, ClientAliveInterval指定了服务器端向客户端请求消息的时间间隔, 默认是0, 不发送.而ClientAliveInterval 60表示每分钟发送一次, 然后客户端响应, 这样就保持长连接了.这里比较怪的地方是:不是客户端主动发起保持连接的请求(如FTerm, CTerm等),而是需要服务器先主动.
另外,至于ClientAliveCountMax, 使用默认值3即可.ClientAliveCountMax表示服务器发出请求后客户端没有响应的次数达到一定值, 就自动断开. 正常情况下, 客户端不会不响应.
ClientAliveCountMax
Sets the number of client alive messages (see below) which may be
sent without sshd(8) receiving any messages back from the client.
If this threshold is reached while client alive messages are
being sent, sshd will disconnect the client, terminating the ses-
sion. It is important to note that the use of client alive mes-
sages is very different from TCPKeepAlive (below). The client
alive messages are sent through the encrypted channel and there-
fore will not be spoofable. The TCP keepalive option enabled by
TCPKeepAlive is spoofable. The client alive mechanism is valu-
able when the client or server depend on knowing when a connec-
tion has become inactive.
The default value is 3. If ClientAliveInterval (see below) is
set to 15, and ClientAliveCountMax is left at the default, unre-
sponsive SSH clients will be disconnected after approximately 45
seconds. This option applies to protocol version 2 only.
ClientAliveInterval
Sets a timeout interval in seconds after which if no data has
been received from the client, sshd(8) will send a message
through the encrypted channel to request a response from the
client. The default is 0, indicating that these messages will
not be sent to the client. This option applies to protocol ver-
sion 2 only.
3. 启用putty keepalive
putty -> Connection -> Seconds between keepalives ( 0 to turn off ), 默认为0, 改为60.
4. 上述3个方法应该能解决大部分问题, 如果不行, 请 man sshd_config, 然后尝试更改其他设置吧.
Linux文件名编码转换
从Linux往windows 拷贝文件或者从windows往Linux拷贝文件,有时会出现中文文件名乱码的情况,出现这种问题的原因是因为,windows的文件名中文编码默认为 GBK,而Linux中默认文件名编码为UTF8,由于编码不一致,所以导致了文件名乱码的问题,解决这个问题需要对文件名进行转码。
在Linux中专门提供了一种工具convmv进行文件名编码的转换,可以将文件名从GBK转换成UTF-8编码,或者从UTF-8转换到GBK。
首先看一下你的系统上是否安装了convmv,如果没安装的话用:
yum -y install convmv
安装。
下面看一下convmv的具体用法:
convmv -f 源编码 -t 新编码 [选项] 文件名
常用参数:
-r 递归处理子文件夹
–notest 真正进行操作,请注意在默认情况下是不对文件进行真实操作的,而只是试验。
–list 显示所有支持的编码
–unescap 可以做一下转义,比如把%20变成空格
比如我们有一个utf8编码的文件名,转换成GBK编码,命令如下:
convmv -f UTF-8 -t GBK –notest utf8编码的文件名
这样转换以后”utf8编码的文件名”会被转换成GBK编码(只是文件名编码的转换,文件内容不会发生变化)。
注意:不要在NTFS和FAT文件系统中使用此命令,否则可能产生意外结果,如果要在Linux中正确的显示NTFS和 FAT的中文件名,可以通过mount参数来解决,具体方法查看一下man手册。
50元以内的共享上网方法(单网卡,ADSL+HUB集线器)
网络共享是网络应用的很重要的方面,特别是现在很多家庭里都2台以上的电脑.总不能再拉根网线吧,我们还是工薪阶级。举一个简单例子,家里装了ADSL宽带,但是家里有几台电脑,在只有一个Ip地址条件下怎么实现上网。一个简单实用的方案就是单网卡共享ADSL方案。从字面上理解很多人以为单网卡共享ADSL方案就是只有一个网卡,其实是连接的每台电脑都需要网卡,我们所说的单网卡是指服务器的那台机器只有一个网卡。网上有很多文章都介绍这种方案,但是按照这些文章所说的方面很多难实现共享上网,而且很多具体的步骤说的不清楚。我今天详细介绍单网卡共享组网,只需要一个HUB集线器就搞定,连ADSL都不要有路由功能,像我家的ADSL拨号的就是电信送的,没有路由管理功能。
一、组网方案原理
二、硬件连接(只需一张网卡)
网卡:服务器与客户机均使用一张带有RJ45接口的10M或100M网卡。
集线器(HUB):只需要一个集线器
网线: 需要准备两种,一种是ADSL MODEM与集线器连接的交叉线一条;第二种是每台机器与集线器的直连线,有多少台机器就买多少条,长度按照每台机器的具体距离来买。当然网线需要带水晶头。
三、操作过程
按照上面的图连接好各个硬件。连线应该不存在任何的困难,有一点要注意的,交叉线和直连线不要连错了。
服务器设置:
由于采用了其中一台机做服务器,所以我们先要对这台机器进行设置。
1、在网上邻居—>属性页面,可以见到两个连接,一个是本地连接,另一个是ADSL连接。如图所示:
2、保证本机ADSL能拨号成功的前提下,打开ADSL连接的属性页,在“高级”页中选中“允许其他网络用户通过此计算机的internet连接来连接”和“在我的网络上的计算机尝试访问internet时建立一个拨号连接”
3、打开本地连接—>属性。设置如下:192.168.0.1
255.255.255.0
192.168.0.1
DNS: 202.96.128.86(68)
202.96.128.110
4、此时计算机会提示,如果启用此连接的internet连接共享,会自动将本地连接的IP地址置为:192.168.0.1,与internet的连接可能会失效。不用管它的警告,点“是”就行。
5、如果计算机提示这个IP地址与网上的其他IP地址冲突,不要紧,是因为其他的局域网服务器用了这个(192.168.0.1)作网关。我们拨掉网线,再按确定好了。
6、然后,重新启动机器,将网卡的IP地地重新设置为ISP指定的IP地址即可。此时,在我们建立的ADSL拨号连接上出现了一个共享的标记:一只手托着这个连接,说明共享已经打开。然后,一切OK。
客户机设置:
打开本地连接—>属性。设置如下:A:192.168.0.2 B:192.168.0.3
设置好后,在DOS 窗口下用 Ping 192.168.0.1 或 2、3分别测试各机器中间的通讯是否正常。