linux下维护服务器之常用命令!
第1套如下:
正则表达式:
![wps_clip_image-4643 wps_clip_image-4643](http://img1.51cto.com/attachment/201311/11/5635432_1384151265pcrW.png)
![wps_clip_image-10659 wps_clip_image-10659](https://i-blog.csdnimg.cn/blog_migrate/a8b09e7fd36a3fd07141b962fc3a958d.png)
1.如何不要文件中的空白行和注释语句:
[root@localhost ~]# grep -v '^$' 文件名 |grep -v '^#'
![wps_clip_image-4695 wps_clip_image-4695](https://i-blog.csdnimg.cn/blog_migrate/298ff1a4f4a8d74ae6308ee1802e57f5.png)
2.如何查阅系统上面正在运作当中的程序呢?
利用静态的 ps 或者是动态的top,还能以 pstree 来查阅程序树之间的关系!
![wps_clip_image-29523 wps_clip_image-29523](https://i-blog.csdnimg.cn/blog_migrate/bd8d5ff89c1e940055398157566fb50c.png)
一个是叧能查阅自己 bash 程序癿『 ps -l 』一个则是可以查阅
所有系统运作癿程序『 ps aux 』
[root@bj02 ~]# ps -l
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 R 0 21482 23427 0 78 0 - 1070 - pts/0 00:00:00 ps
4 S 0 23427 22669 0 76 0 - 1161 wait pts/0 00:00:00 bash
[root@bj02 ~]#
系统整体癿程序运作是非常多癿,但如果使用 ps -l 则仅列出不你癿操作环境 (bash) 有关癿程序而已,
亦卲最上局癿父程序会是你自己癿 bash 而没有延伸到 init 这支程序去!那举 ps -l 秀出来癿资料有哪
些呢? 我们就来观察看看:
· F:代表这个程序旗标 (process flags),说明这个程序癿总结权限,常见号码有:
o 若为 4 表示此程序癿权限为 root ;
o 若为 1 则表示此子程序仅迚行复制(fork)而没有实际执行(exec)。
· S:代表这个程序癿状忞 (STAT),主要癿状忞有:
o R (Running):该程序正在运作中;
o S (Sleep):开程序目前正在睡眠状忞(idle),但可以被唤醒(signal)。
o D :丌可被唤醒癿睡眠状忞,通常这支程序可能在等待 I/O 癿情冴(ex>打印)
o T :停止状忞(stop),可能是在工作控制(背景暂停)戒除错 (traced) 状忞;
o Z (Zombie):僵尸状忞,程序已经终止但即无法被秱除至内存外。
· UID/PID/PPID:代表『此程序被该 UID 所拥有/程序癿 PID 号码/此程序癿父程序 PID 号码』
· C:代表 CPU 使用率,单位为百分比;
· PRI/NI:Priority/Nice 癿缩写,代表此程序被 CPU 所执行癿优先级,数值越小代表该程序越忚
被 CPU 执行。详绅癿 PRI 不 NI 将在下一小节说明。
· ADDR/SZ/WCHAN:都不内存有关,ADDR 是 kernel function,挃出该程序在内存癿哪个部
分,如果是个 running 癿程序,一般就会显示『 - 』 / SZ 代表此程序用掉多少内存 / WCHAN
表示目前程序是否运作中,同样癿, 若为 - 表示正在运作中。
· TTY:登入者癿终端机位置,若为进程登录则使用劢忞终端接口 (pts/n);
· TIME:使用掉癿 CPU 时间,注意,是此程序实际花费 CPU 运作癿时间,而丌是系统时间;
· CMD:就是 command 癿缩写,造成此程序癿觉发程序乀挃令为何。
[root@bj02 ~]# ps aux
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
root 1 0.0 0.0 2168 632 ? Ss Jul31 0:54 init [3]
root 12584 0.0 0.0 1756 436 tty6 Ss+ Jul31 0:00 /sbin/mingetty tty6
root 2387 4.2 0.6 141972 26668 ? Sl Nov07 192:01 ./s5server
root 27017 0.0 0.0 4360 968 pts/0 R+ 10:35 0:00 ps aux
· USER:该 process 属亍那个使用者账号癿?
· PID :该 process 癿程序标识符。
· %CPU:该 process 使用掉癿 CPU 资源百分比;
· %MEM:该 process 所占用癿物理内存百分比;
· VSZ :该 process 使用掉癿虚拟内存量 (Kbytes)
· RSS :该 process 占用癿固定癿内存量 (Kbytes)
· TTY :该 process 是在那个终端机上面运作,若不终端机无关则显示 ?,另外, tty1-tty6 是本机上面癿登入者程序,若为 pts/0 等等癿,则表示为由网绚连接迚主机癿程序。
· STAT:该程序目前癿状忞,状忞显示不 ps -l 癿 S 旗标相同 (R/S/T/Z)
· START:该 process 被觉发吪劢癿时间;
· TIME :该 process 实际使用 CPU 运作癿时间。
· COMMAND:该程序癿实际挃令为何?
[root@gz01 ~]# ps -lA
F S UID PID PPID C PRI NI ADDR SZ WCHAN TTY TIME CMD
4 S 0 1 0 0 80 0 - 725 - ? 00:01:43 init
1 S 0 24234 1 0 80 0 - 2052 - ? 00:00:00 openvpn
找出与s5server 与openvpn这两个朋务有关的 PID 号码?
[root@bj02 ~]# ps aux |egrep '(s5server|openvpn)'
root 2484 0.3 0.3 56104 15172 ? Sl Nov07 17:37 ./s5server
root 3054 0.0 0.0 7676 1552 ? S Jul31 0:00 /usr/sbin/openvpn --daemon --writepid /var/run/openvpn/server_202.108.54.10_53.pid --config server_202.108.54.10_53.conf --cd /etc/openvpn --script-security 3
3.观察系统的使用状态:
如果要看目前有谁在在线,可以下达『who』这个令,而如果要看网络的联机状态,可以下达『 netstat -a 』这个指令,而要看背景执行的程序可以执行『 ps -aux 』这个挃令。使用这些指令可以让你稍微浏览主机目前的使用状态!
4.僵尸 (zombie) 程序是什么?如何查找僵尸进程
造成僵尸程序的成因是因为该程序应该已经执行完毕,或者是因敀应该要终止了, 但是该程序癿父程序即无法完整癿将该程序结束掉,而造成那个程序一直存在内存当中。 如果你发现在某个程序癿 CMD 后面还接上 <defunct> 时,就代表该程序是僵尸程序啦
ps -A -o stat,ppid,pid,cmd | egrep '^[Zz]'
5.结束僵尸进程的方法有几种?
2种,一是:找到pid 然后 kill 掉;二是:reboot,因为 init 要重新启动,而重新启动 init 就是 reboot(所有癿程序都是依附在 init 这支程序底下的)
Man ps
...skipping...
-O format is like -o, but preloaded with some default columns. Identical to
-o pid,format,state,tname,time,command or -o pid,format,tname,time,cmd, see -o below.
-A Select all processes. Identical to -e.
[root@bj02 ~]# ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
Zs 11772 11775 [getss5pas.sh] <defunct>
Z 32225 14899 [sh] <defunct>
[root@bj02 ~]# ps -A -o stat,ppid,pid,cmd | egrep '^[Zz]'
Z 32225 14899 [sh] <defunct>
Zs 23615 23623 [getss5pas.sh] <defunct>
6.列出类似程序树的程序显示:
[root@www ~]# ps axjf
7.top的巧用
top 预讴使用 CPU 使用率 (%CPU) 作为排序的重点,如果你想要使用内存使用率排序,则可以按下『M』, 若要回复则按下『P』卲可。如果想要离开 top 则按下『 q 』吧!
8.如果某个进程导致负载过高,如何查该进程下面是否有子进程
先top 查找负载高的进程pid
pstree -Aup |less 然后在里面输入:/pid 搜进程,就会树状形式呈现
![wps_clip_image-17668 wps_clip_image-17668](https://i-blog.csdnimg.cn/blog_migrate/74962dc1a051dc639b1dfe6c6992abd8.png)
查进程号
[root@bj02 ~]# ps aux | grep 'syslog'
root 2806 0.0 0.0 1824 604 ? Ss Jul31 6:51 syslogd -m 0
root 3515 0.0 0.0 4028 732 pts/0 S+ 15:09 0:00 grep syslog
[root@bj02 ~]# ps aux | grep 'syslog' | grep -v 'grep'| awk '{print $2}'
2806
9.要删除某个程序,我们可以采取哪些方法:
使用 PID 或者是启动该程序癿挃令名称, 而如果要删除某个朋务呢?利用 killall ,可以将系统当中所有以某个指令名称启动的程序全部删除。
Killall -9 httpd
10.查看内存使用情况
[root@gz01 ~]# free -m
total used free shared buffers cached
Mem: 3895 3261 633 0 240 1285
-/+ buffers/cache: 1735 2159
Swap: 4031 71 3960
为何内存会被用光光?被用光是正常癿!而需要注意癿反而是 swap 癿量。一般来说, swap 最好丌要被使用,尤其 swap 最好丌要被使
用超过 20% 以上, 如果您发现 swap 癿用量超过 20% ,那举,最好还是买物理内存来揑吧! 因为,
Swap 癿敁能跟物理内存实在差徆多,而系统会使用到 swap , 绛对是因为物理内存丌足了才会这样做
癿!
11.观察系统启动时间不工作负载
uptime top
第2套如下:
1、如何删除通道
执行ips |grep 通道名字
ip tu de +通道设备名称
2、如何开启80端口的转发,此为例子,如有其他的可以参考此例。
在防火墙添加如下内容,并重启 /home/vpn/firewall.sh restart
$IPTABLES -A FORWARD -d 210.77.146.101 -j ACCEPT
$IPTABLES -t nat -A PREROUTING -p tcp --dport 80 -d 61.172.246.76 -j DNAT --to 210.77.146.101:80
$IPTABLES -t nat -A POSTROUTING -p tcp --dport 80 -d 210.77.146.101 -j SNAT --to 61.172.246.76
3、本地拨VPN测试游戏IP时,要排除不需要的端口
tcpdump -nn -i any host +ip and not port 2121 and not port 1080
4、用vi编辑器来替换文件
替换文件中全部的1为2
:%s/1/2/g
替换文件中第一行到第二行的1为2
:1,2s/1/2/g
也可以在notepad编辑器中使用编辑列来达到操作目的,需要熟练使用
5、简单的grep使用方法,查找加密后的密码
6、查看某个服务器IP的当前连接的IP和流量,一查看是否有大流量攻击,限速为1M,如有超过1M的就需要注意
iftop -i em1 -F 58.63.246.90/32
7、某个进程占用CPU较高,系统负载高
top查到该进程号
ps -ef 进程号查找是否有子进程
netstat -tanup |grep 进程号查看是什么服务,IP多少,端口多少
to +IP 查看是否有流量
都没有的话,可以重启该服务
8、查看某个IP是否可用
ping 8.8.8.8 -I 210.77.146.101
9、建立通道的方法需要掌握,快速有效建立通道。
首先在为知笔记里搜索tunnelip, 查看规划通道IP,相同的两个公网IP能且只能建立一个通道。
在服务器上查看所建的通道是否已经存在。
只需替换下面例子中通道名字和内网公网IP,建议在notepad中使用ctrl+f替换。
通道建立好,测试正常,写rc.local
#gz02-sh05
ip tunnel add gz02-sh05 mode ipip remote 61.172.246.76 local 58.63.246.91
ip add add dev gz02-sh05 1.27.12.1 peer 1.27.12.2
ifconfig gz02-sh05 1.27.12.1/30
ip link set gz02-sh05 up
route add -host 1.27.12.2 dev gz02-sh05
EOF
f 1.27.12.2
#sh05-gz02
ip tunnel add sh05-gz02 mode ipip remote 58.63.246.91 local 61.172.246.76
ip add add dev sh05-gz02 1.27.12.2 peer 1.27.12.1
ifconfig sh05-gz02 1.27.12.2/30
ip link set sh05-gz02 up
route add -host 1.27.12.1 dev sh05-gz02
10、测试服务器带宽
1、显示系统中的所有进程
ps auxf 或 ps -ef 或 top
2、查询服务器处于监控状态的进程
netstat -tnlpu
3、查看与服务器通信的数据
tcpdump -nn -i any host
4、查询与本机通信的ip地址的流量情况
iftop -i eth1 设定监测的网卡
iftop -F 10.10.1.0/24 显示特定网段的进出流量
5、查找文件
local -i(忽略大小写) 文件名 (通常需要执行updatedb命令来更新数据库)
find 目录 (-name 文件名) (-size 大小 )
6、查询路由表
ips | grep ips cache | grep
7、路由追踪
t(traceroute) + ip
第4套如下:
1.在服务器之间进行文件的拷贝。
[root@cz05 cacti]# scp -P 2121 210.77.146.101:/var/www/cacti/graphs_new_batch.php ./
graphs_new_batch.php 100% 6344 6.2KB/s 00:00
2.关于主站的报警,再确认需要重启服务之前,需要执行命令。
tcpdump -nn -i any -c 9999 -s 0 port 80 -w /home/201311110255_wpp(日期小时分钟_自己的名字)
3.分析服务器上的僵尸进程。
[root@gz01 snt]# ps -A -o stat,ppid,pid,cmd | grep -e '^[Zz]'
Z 22966 6721 [sh] <defunct>
4.点击验证登陆后出现“time out”的问题处理流程。
①首先确定是哪种加速器模式和那个服务器不能验证登陆
②进入相应的服务器上,切换到服务目录下
[root@gz01 ~]# cd /data0/soft/s5server_53_58.63.246.90/
③查询账号文件中是否存在该用户的账号信息
④如果查询不存在的话,看下这个账号文件的日期是不是最新的
[root@gz01 s5server_53_58.63.246.90]# ll s5user.cfg
-rw-r--r-- 1 root root 455461 Nov 12 03:04 s5user.cfg
⑤如果不是最新的,可能是这个原因导致验证登陆失败,需要手动执行账号同步文件。
[root@gz01 ~]# /home/sh/getss5pas.sh
downLoad ------------------>
Resolving lonlife.net... 120.31.133.106, 183.60.42.101
Connecting to lonlife.net|120.31.133.106|:80... connected.
HTTP request sent, awaiting response... 302 Found
Connecting to 120.198.233.12:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 233244 (228K) [application/x-gzip]
Saving to: ?.home/ss5/ss5user.tar.gz?
100%[===========================================================================================================>] 233,244 --.-K/s in 0.05s
2013-11-12 03:06:18 (4.82 MB/s) - ?.home/ss5/ss5user.tar.gz?.saved [233244/233244]
s5server_User.cfg
s5server_User_tw01.cfg
md50.txt
copy ------------->
5.处理openvpn单先故障流程
②进入相应的服务器,使用命令查询该服务器上所有vpn服务的状态;
[root@gz01 ~]# netstat -upln | grep openvpn
udp 0 0 58.63.246.90:23 0.0.0.0:* 13800/openvpn
udp 0 0 203.78.190.1:23 0.0.0.0:* 13772/openvpn
udp 0 0 120.197.6.174:23 0.0.0.0:* 13740/openvpn
udp 0 0 116.213.249.195:23 0.0.0.0:* 13710/openvpn
udp 0 0 110.65.68.66:23 0.0.0.0:* 13699/openvpn
udp 0 0 58.63.246.90:443 0.0.0.0:* 6301/openvpn
udp 0 0 110.65.68.66:443 0.0.0.0:* 13817/openvpn
udp 0 0 203.78.190.1:443 0.0.0.0:* 13784/openvpn
udp 0 0 120.197.6.174:443 0.0.0.0:* 13758/openvpn
udp 0 0 116.213.249.195:443 0.0.0.0:* 13725/openvpn
③找到需要重启的vpn服务的进程id号(例如:6301)
④确定此openvpn进程的是否有子进程及统计子进程id号
[root@gz01 ~]# ps -ef | grep openvpn | grep 6301
nobody 6301 1 2 Nov10 ? 01:03:34 /usr/sbin/openvpn --daemon --writepid /var/run/openvpn/server_58.63.246.90_443.pid --config /etc/openvpn/server_58.63.246.90_443.conf --cd /etc/openvpn --script-security 3
如果一条记录就是没有子进程(第二的字段是进程id,第三个字段是父进程id号)
⑤重启服务需要先kill掉,再启动服务;
kill -9 pid
ps -ef | grep openvpn | grep pid 确定进程已经被完全结束掉了!
⑥删除 此openvpn 进程 pid文件,如果不删除的话,会导致服务启动不了!
cd /var/run/openvpn/
rm /var/run/openvpn/server_58.63.246.90_443.pid
⑦切换到openvpn的配置文件的目录,启动服务!
cd /etc/openvpn
/usr/sbin/openvpn --daemon --writepid /var/run/openvpn/server_58.63.246.90_443.pid --config /etc/openvpn/server_58.63.246.90_443.conf --cd /etc/openvpn --script-security 3
⑧确定openvpn已经正常启动
netstat -upln | grep openvpn
6.本地拨台湾的vpn链接不上的办法。
由于本地拨台湾的vpn连上的几率很小,基本上每次都要在台湾的服务器上将pptpd服务重启很多次
所以有些时候为了方便使用台湾的ip进行游戏测试,可以先拨上gz01的vpn,然后将分到的vpn ip在gz01上通过高级源路由把数据转到台湾的服务器
但是实现之前必须保证gz01和你要拨的服务器之间是有通道的。
具体的操作步骤:
①本地拨gz01 vpn,查看ip(172.0.0.5);
②在gz01服务器上查看高级源路由。
[root@gz01 ~]# ip ru
0: from all lookup local
32752: from 123.66.27.2 lookup tt
32753: from 172.0.0.1 lookup 90
32754: from 172.0.0.1 lookup 90
32755: from 172.42.0.3 lookup 100
32756: from 10.11.0.0/16 lookup gf
32757: from 1.200.0.14 lookup gf
32758: from 1.200.0.14 lookup gf
32759: from 183.60.126.14 lookup ct2
32760: from 58.63.246.91 lookup ct1
32761: from 203.78.190.1 lookup tw
32762: from 120.197.6.174 lookup yd
32763: from 110.65.68.66 lookup edu
32764: from 116.213.249.195 lookup cu
32765: from 58.63.246.90 lookup ct1
32766: from all lookup main
32767: from all lookup default
③添加一条路由表格;
ip ru add from 172.0.0.5/32 tabl 110 (这个数值代表表格的名字,只要不和其他的重复就行)
④查看是否添加成功;
[root@gz01 ~]# ip ru
0: from all lookup local
32751: from 172.0.0.5 lookup 110
32752: from 123.66.27.2 lookup tt
32753: from 172.0.0.1 lookup 90
32754: from 172.0.0.1 lookup 90
32755: from 172.42.0.3 lookup 100
32756: from 10.11.0.0/16 lookup gf
32757: from 1.200.0.14 lookup gf
32758: from 1.200.0.14 lookup gf
32759: from 183.60.126.14 lookup ct2
32760: from 58.63.246.91 lookup ct1
32761: from 203.78.190.1 lookup tw
32762: from 120.197.6.174 lookup yd
32763: from 110.65.68.66 lookup edu
32764: from 116.213.249.195 lookup cu
32765: from 58.63.246.90 lookup ct1
32766: from all lookup main
32767: from all lookup default
⑤查看通道ip
[root@gz01 ~]# ips | grep tw02
1.21.10.1 dev gz01t-tw0225 scope link
1.59.15.2 dev gz01-tw02 scope link
1.59.15.0/30 dev gz01-tw02 proto kernel scope link src 1.59.15.1
1.21.10.0/30 dev gz01t-tw0225 proto kernel scope link src 1.21.10.2
⑥为80表格添加一条高级路由(假设想用tw02的ip:
220.128.48.28做测试)
ip route add default via 1.59.15.2 tab 110
⑦查看下路由是否加载成功。
[root@gz01 ~]# ip ro sh tab 110
default via 1.59.15.2 dev gz01-tw02
⑧测试(ip138.com 或者 123cha.com)
⑨不用的话,可以删除掉;
ip route del default via 1.59.15.2 tab 110
ip ru del from 172.0.0.5/32 tabl 110
7.抓取游戏的服务器ip段,通过swk分析整理数据。
①在gz02上抓取台服lol的游戏数据,导出到文本文件中(可以抓取30min,多次抓取)
tcpdump -nn -i any host 112.121 and udp > /home/wpp
②通过awk分析出台服lol的udp流量的游戏ip段;
awk '{print $5}' /home/wpp |grep -v 172.0|sort -n|uniq -c|sort -n |grep -v 8000|grep -v 74.125 | grep 112.121
1008 112.121.83.77.5186:
1038 112.121.78.76.5102:
1071 112.121.78.103.5111:
1073 112.121.84.181.5118:
1111 112.121.83.58.5111:
1118 112.121.84.226.5133:
1165 112.121.84.65.5146:
1168 112.121.83.165.5193:
1211 112.121.78.126.5115:
1220 112.121.83.87.5190:
1221 112.121.83.71.5100:
1222 112.121.88.182.5147:
1223 112.121.78.116.5120:
1231 112.121.78.53.5124:
1238 112.121.83.155.5175:
1239 112.121.84.64.5107:
1246 112.121.83.109.5101:
1270 112.121.88.224.5101:
1271 112.121.88.201.5100:
1323 112.121.83.115.5130:
1352 112.121.83.124.5103:
1400 112.121.83.82.5120:
2185 112.121.78.43.5120:
2546 112.121.78.42.5101:
分析得:台服lol的udp数据的ip段
112.121.78.0/24
112.121.83.0/24
112.121.84.0/24
112.121.88.0/24
第5套如下:
1、通过进程id查看该进程的程序的位置(例如进程id为10532)
[root@sh04 lat]# ll /proc/10532/exe
lrwxrwxrwx. 1 root root 0 Nov 11 06:30 /proc/10532/exe -> /data0/soft/s5server_443_222.73.29.34/s5server
2、通过进程id查看该进程的运行环境的当前目录 (例如进程id为10532)
[root@sh04 lat]# ll /proc/10532/cwd
lrwxrwxrwx. 1 root root 0 Nov 12 17:54 /proc/10532/cwd -> /data0/soft/s5server_443_222.73.29.34
3、通过进程id 查看该进程建立 的通信连接 (例如进程id为10532)
[root@sh04 lat]# netstat -tuanp | grep 10532
tcp 0 0 1.27.11.2:52651 112.121.85.181:36456 ESTABLISHED 10532/./s5server
tcp 0 0 1.27.11.2:42382 206.127.146.73:6112 ESTABLISHED 10532/./s5server
tcp 0 0 222.73.29.34:443 117.44.34.71:4243 ESTABLISHED 10532/./s5server
tcp 0 0 222.73.29.34:443 118.114.237.138:4296 ESTABLISHED 10532/./s5server
tcp 0 0 222.73.29.34:36669 223.252.238.166:3724 ESTABLISHED 10532/./s5server
tcp 0 0 222.73.29.34:443 59.45.23.22:43531 ESTABLISHED 10532/./s5server
tcp 0 0 222.73.29.34:443 59.45.23.22:52095 ESTABLISHED 10532/./s5server
tcp 0 0 222.73.29.34:443 222.223.234.28:2891 ESTABLISHED 10532/./s5server
tcp 0 0 222.73.29.34:443 218.79.168.41:30419 ESTABLISHED 10532/./s5server
tcp 0 0 1.27.11.2:35755 60.254.142.24:80 ESTABLISHED 10532/./s5server
4、修改已经存在的路由117.128.0.0/10 via 222.73.29.33 dev em1 为117.128.0.0/10 via 207.3.9.23 dev pip4
ip route replace 117.128.0.0/10 via 207.3.9.23 dev pip4
5、linux 下防火墙框架netfilter 链表结构
![viewfile?f=3DB52C0111F6362575220498DA326](http://mail.lonlife.net/cgi-bin/viewfile?f=3DB52C0111F6362575220498DA326AF9A9F45BAE41A25CE765088EE0A6FE474948A4B773A86B6418CC4395AFE45A695DC5B578CBA0B7C79E483319DE29AC3FBD87CDE906F5A02F96FAEFD8045C49CD2847DC8E18F748C5A0E0C4D19B27436ABD&sid=Zlx_DM6Cf6gr9W48,7)
6、从本机发出去的报会经过netfilter 框架的哪些链?顺序是什么?
output -》 postrouting
7、netfilter 框架的nat 表在哪些链上生效?
PREROUTING POSTROUTING OUTPUT