WenRou's Blog
一些备忘
2017-8-18 温柔哥
 


1 缺少GCC环境



yum groupinstall "Development Tools"



yum -y install gcc gcc-c++ kernel-devel



yum -y install gcc gcc-c++ make



 



2 查看服务器型号



[root@hexudong ~]# dmidecode | grep "Product Name"



        Product Name: VMware Virtual Platform



        Product Name: 440BX Desktop Reference Platform



 



3 外网yum源地址



网易(163)yum源是国内最好的yum源之一,无论是速度还是软件版本,都非常的不错,将yum源设置为163yum,可以提升软件包安装和更新的速度,同时避免一些常见软件版本无法找到。V9zz的云主机就将yum源设置为163的yum,具体设置方法如下:



1,进入yum源配置目录

cd /etc/yum.repos.d



2,备份系统自带的yum源

mv CentOS-Base.repo CentOS-Base.repo.bk

下载163网易的yum源:

wget http://mirrors.163.com/.help/CentOS-Base-163.repo



3,更新玩yum源后,执行下边命令更新yum配置,使操作立即生效

yum makecache



4,除了网易之外,国内还有其他不错的yum源,比如中科大和搜狐的,大家可以根据自己需求下载

中科大的yum源:

wget http://centos.ustc.edu.cn/CentOS-Base.repo

sohu的yum源

wget http://mirrors.sohu.com/help/CentOS-Base-sohu.repo



理论上讲,这些yum源redhat系统以及fedora也是可以用的,但是没有经过测试,需要的站长可以自己测试一下。



 



4 跳板机超时   这里不得不提到优化,请看 系统登陆基本优化文档即可得到答案



timed out waiting for input: auto-logout



超时等待输入:自动退出



 



5 僵尸进程处理



ps -ef | grep defunct



查看僵尸进程



ps -ef | grep defunct | grep -v grep | wc –l



统计僵尸进程



 



一般僵尸进程很难直接kill掉,不过您可以kill僵尸爸爸。父进程死后,僵尸进程成为”孤儿进程”,过继给1号进程init,init始终会负责清理僵尸进程.它产生的所有僵尸进程也跟着消失。



ps -e -o ppid,stat | grep Z | cut -d” ” -f2 | xargs kill -9






kill -HUP `ps -A -ostat,ppid | grep -e ’^[Zz]‘ | awk ’{print $2}’`



 



6 小软件的安装



yum install openssh-clients    scp



iftop 查看单一系统网卡流量



yum install flex byacc  libpcap ncurses ncurses-devel iftop



安装iftop



TX:发送流量

RX:接收流量

TOTAL:总流量

Cumm:运行iftop到目前时间的总流量

peak:流量峰值

rates:分别表示过去 2s 10s 40s 的平均流量



按p切换是否显示端口信息;



按T切换是否显示每个连接的总流量;



 



7 tcpdump使用方法



 



1、抓取包含10.10.10.122的数据包 

# tcpdump -i eth0 -vnn host 10.10.10.122

 

2、抓取包含10.10.10.0/24网段的数据包

# tcpdump -i eth0 -vnn net 10.10.10.0/24

 

3、抓取包含端口22的数据包

# tcpdump -i eth0 -vnn port 22 

 

4、抓取udp协议的数据包

# tcpdump -i eth0 -vnn  udp

 

5、抓取icmp协议的数据包

# tcpdump -i eth0 -vnn icmp



6、抓取arp协议的数据包

# tcpdump -i eth0 -vnn arp

 

7、抓取ip协议的数据包

# tcpdump -i eth0 -vnn ip

 

8、抓取源ip是10.10.10.122数据包。

# tcpdump -i eth0 -vnn src host 10.10.10.122

 

9、抓取目的ip是10.10.10.122数据包

# tcpdump -i eth0 -vnn dst host 10.10.10.122

 

10、抓取源端口是22的数据包

# tcpdump -i eth0 -vnn src port 22

 

11、抓取源ip是10.10.10.253且目的ip是22的数据包

# tcpdump -i eth0 -vnn src host 10.10.10.253 and dst port 22

                 

12、抓取源ip是10.10.10.122或者包含端口是22的数据包

# tcpdump -i eth0 -vnn src host 10.10.10.122 or port 22

 

13、抓取源ip是10.10.10.122且端口不是22的数据包

[root@ ftp]# tcpdump -i eth0 -vnn src host 10.10.10.122 and not port 22





14
、抓取源ip是10.10.10.2且目的端口是22,或源ip是10.10.10.65且目的端口是80的数据包。

# tcpdump -i eth0 -vnn \( src host 10.10.10.2 and dst port 22 \) or   \( src host 10.10.10.65 and dst port 80 \)



15、抓取源ip是10.10.10.59且目的端口是22,或源ip是10.10.10.68且目的端口是80的数据包。

[root@localhost ~]# tcpdump -i  eth0 -vnn 'src host 10.10.10.59 and dst port 22' or  ' src host 10.10.10.68 and dst port 80 '



16、把抓取的数据包记录存到/tmp/fill文件中,当抓取100个数据包后就退出程序。

# tcpdump –i eth0 -vnn -w  /tmp/fil1 -c 100



17、从/tmp/fill记录中读取tcp协议的数据包

# tcpdump –i eth0 -vnn -r  /tmp/fil1 tcp



18、从/tmp/fill记录中读取包含10.10.10.58的数据包

# tcpdump –i eth0 -vnn -r  /tmp/fil1 host  10.10.10.58



 



8 日志查看,宕机和开机记录



连接时间日志--由多个程序执行,把纪录写入到/var/log/wtmp和/var/run/utmp,login等程序更新wtmp和utmp文件,使系统管理员能够跟踪谁在何时登录到系统。



 



各种系统守护进程、用户程序和内核通过syslog(3)向文件/var/log/messages报告值得注意的事件



 



查看宕机和开机记录

grep halt   messages

grep reboot messages

grep shutdown messages



last

last | grep reboot

last | grep shutdown

vim /etc/logrotate.conf 
日志控制配置



 



9 cacti监控网卡



cacti 监控linux 主机网卡



修改:  55行左右



view    systemview    included   .1



 



10 php-fpm进程查看,重启



php-fpm 关闭:



kill -INT `cat /usr/local/php/var/run/php-fpm.pid`



php-fpm 重启:



kill -USR2 `cat /usr/local/php/var/run/php-fpm.pid`



查看php-fpm进程:



ps aux | grep -c php-fpm



查看php-fpm进程数:



ps aux | grep -c php-fpm | wc -l



 



11 ssh 遇到问题Write failed: Broken pipe



 



[root@WY-APP2 abcticcserver]# Write failed: Broken pipe

[root@localhost ~]# 



 



问题现象



用 ssh 命令连接服务器之后,如果一段时间不操作,再次进入 Terminal 时会有一段时间没有响应,然后就出现错误提示:



Write failed: Broken pipe



只能重新用 ssh 命令进行连接。



解决方法



方法一:如果您有多台服务器,不想在每台服务器上设置,只需在客户端的 ~/.ssh/ 文件夹中添加 config 文件,并添加下面的配置:



ServerAliveInterval 60



方法二:如果您有多个人管理服务器,不想在每个客户端进行设置,只需在服务器的 /etc/ssh/sshd_config 中添加如下的配置:



ClientAliveInterval 60



方法三:如果您只想让当前的 ssh 保持连接,可以使用以下的命令:



$ ssh -o ServerAliveInterval=60 user@sshserver



 



12  Rz 上传文件太大,导致乱码。有的删不掉的文件



 



通过ls –I 查找inode



通过find ./ -inum 1843184 | xargs rm –f



删除掉乱码文件。 对应的号就是乱码文件的inode号。






总结:主要用到单个命令参数,平时积累



ls –i 直接查看文件的inode。



通过find  参数 –inum 对应的inode号进行删除。






find /etc/ -maxdepth 1 -type d ! -name "."



 



13 F5日志,apache转发



LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" \"%{Content-Length}i\" \"%{ecsid}C\"" combined



 



 14 网络扫描nmap 实战



http://nmap.org



Nmap  扫描类型  选项 扫描目标



-P 指定扫描端口  -n 禁用反向DNS解析,加快速度



-sS,TCP SYN扫描(半开)



-sT,TCP 连接扫描(全开)



-sF,TCP FIN扫描



-sU,UDP扫描



-sP,ICMP扫描



-P0,跳过ping检测



检测192.168.4.0/24网段有哪些主机提供FTP服务



nmap -p 21 192.168.4.0/24



检测192.168.4.0/24网段有哪些存活主机



nmap -n -sP 192.168.4.0/24



cacti : 被控端要启用snmp服务,并对其相应配置



安装:



tar xf nmap-5.51.tgz



./configure



make && make install                 which namp



 



15 tcp/ip netstat -n 连接  TIME_WAIT 很大,网上找的方法



 



客户端与服务器端建立TCP/IP连接后关闭SOCKET后,服务器端连接的端口

状态为TIME_WAIT



如发现系统存在大量TIME_WAIT状态的连接,通过调整内核参数解决,

vim /etc/sysctl.conf

编辑文件,加入以下内容:

net.ipv4.tcp_syncookies = 1

net.ipv4.tcp_tw_reuse = 1

net.ipv4.tcp_tw_recycle = 1

net.ipv4.tcp_fin_timeout = 30

然后执行 /sbin/sysctl -p 让参数生效。



也就是TCP/IP设计者本来是这么设计的

主要有两个原因

1。防止上一次连接中的包,迷路后重新出现,影响新连接

(经过2MSL,上一次连接中所有的重复包都会消失)

2。可靠的关闭TCP连接

在主动关闭方发送的最后一个 ack(fin) ,有可能丢失,这时被动方会重新发

fin, 如果这时主动方处于 CLOSED 状态 ,就会响应 rst 而不是 ack。所以

主动方要处于 TIME_WAIT 状态,而不能是 CLOSED 。



TIME_WAIT 并不会占用很大资源的,除非受到攻击。



 



老师推荐解决方法:



查看SOCKET状态:cat /proc/net/sockstat

TIME_WAIT状态的socket一般需要等到2msl时间后,socket才会被回收。

修改(添加)系统内核参数:/etc/sysctl.conf



#改系統默认的TIMEOUT时间

net.ipv4.tcp_fin_timeout=2



#启重用,允许将TIME-WAIT sockets重新用于新的TCP连接 默认为0表示关闭

net.ipv4.tcp_tw_reuse=1 



#开启TCP连接中TIME-WAIT sockets的快速回收 默认为0 表示关闭

net.ipv4.tcp_tw_recycle=1



使新增参数生效:sysctl -p



 



统计TCP状态



netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'



awk -F "[ :]+" '/EST/ {print $6}' netstat.log|sort|uniq -c|sort -rn -k1



一种是数组的方法,一种是考察sort



 



16  戴尔服务地址



http://support.ap.dell.com



 



17 命令访问慢,或没有成功运行排查工具



strace -f mount -o loop CentOS-6.4-x86_64-bin-DVD2.iso /mnt



 



18 weblogic报错



There are 1 nested errors:



 



java.lang.ClassCastException: com.octetstring.vde.backend.BackendRoot cannot be cast to com.octetstring.vde.backend.standard.BackendStandard



        at weblogic.ldap.EmbeddedLDAP.start(EmbeddedLDAP.java:273)



        at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)



        at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)



        at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)



 



root启动的,用root给普通用户文件权限,用普通用户再次启动。



 



 



19 web服务,磁盘满了



grep log httpd.conf



sed -i 's@CustomLog logs/access_log combined@CustomLog /app/logs/access_log combined@g' httpd.conf



[root@hexudong /]# dd if=/dev/zero of=/dev/sdb bs=8K count=10



10+0 records in 记录了10+0的读入



10+0 records out 记录了10+0的写入



81920 bytes (82 kB) copied, 0.000709742 s, 115 MB/s



已复制



mkfs -t ext3 /dev/sdb 格式化



mount -o loop /dev/sdb /app/log/ 挂载



磁盘空间满了,web日志存放在此目录



删除日志依然不起左右,因为连接依然存在。






查看文件的占用情况



[root@hexudong log]# lsof | grep del



httpd 1386 root 7w REG 7,0 416 13 /app/log/abc.we360-error_log (deleted)



deleted在占用。



重启释放 重载不生效



清空文件,不删除



不要删当天的被进程占用的文件,删以前的



for n in `seq 1000`;do curl -s 127.0.0.1 >/dev/null;done



访问1千次



echo >abc.we360-access_log



>abc.we360-access_log






为何空间不释放?



Hardink 硬连接



进程占用这个文件



磁盘空余空间维护出现问题






 



20 突然断电



Lost+fount 垃圾的文件就会跑到这个里面来,重启的时候用fsak做检查发现inode不存在,删除。






进程还占着文件,这是断电了



Kernel没有机会回收文件所占用的磁盘空间了



磁盘空间可能仍被标记为“已用”



文件系统可能会不一致



死文件,谁也访问不到了,以及没有文件名指向这些空间了



需要fsck或其他机制回收空间






 



21 /var/log/messages 出现kernel: nf_conntrack: table full, dropping packet.什么问题?



上述结果会让业务访问很慢!

net.nf_conntrack_max = 25000000

net.netfilter.nf_conntrack_max = 25000000

net.netfilter.nf_conntrack_tcp_timeout_established = 180

net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120

net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60

net.netfilter.nf_conntrack_t
cp_timeout_fin_wait = 120



 






22 No space left on device



如果向磁盘写入数据提示如下错误:No space left on device,通过df -h查看磁盘空间,发现没满,请问可能原因是什么?



[root@oldboy mnt]# touch {1..26113}

touch: cannot touch `26102': No space left on device

touch: cannot touch `26103': No space left on device



没有空间剩余了,在这个设备上。



Df –h 还有空间 df –I 满了。



企业邮件临时队列/var/spool/clientmquene 这里内容被大量小文件占满导致



C5.8 会装cendmail c6.6 默认没有sendmail. 改成postfix



 



23 解决邮件爆满



C5:



/var/spool/clientmqueue



C6



/var/spool/postfix/maildrop/



1   >/dev/null 2>&2



2   cd /var/spool/postfix/maildrop; ls | xargs rm -rf; 



3   vi /etc/crontab ;将‘MAILTO=root’替换成‘MAILTO="",然后service crond restart即可。如不行crontab -e 第一行增加MAILTO=""







 



24 -bash-4.1$



用户的环境变量没了。



/etc/skel目录



    用来存放新用户配置文件的目录,新创建的用户提供统一的,标准的,初始化用户环境。



由cat /etc/default/useradd 这个配置文件控制。



解决方法: cp /etc/skel/.bash* /home/yanghu/ 用户家目录 



 用户PS1=’[\u@\h \W]\$’ 环境变量



为用户进入系统 看到的目录 [root@svn ~]#



由[root@hexudong ~]# set | grep PS1



PS1='[\u@\h \W]\$ '



\u 是用户 \h 第一个主机名 \w 目录 \n 换行 \$ 提示符



\A 显示时间 24小时 \t 显示时间12小时 \v bash版本信息



PS1='[\u@\h \w \A #\#]\$ '



 



25 crontab发送不出来环境变量问题



[root@localhost jiaoben]# cat static.sh



#!/bin/bash



export.UTF-8



cd /home/statics



WEIZHI=Stat_`date +%Y-%m-%d`.csv



if [ -f /home/statics/$WEIZHI  ];then



cat /home/statics/$WEIZHI | mail -s 'AAAAA' wangfeihuzxl@126.com



fi



 



26 网络连接出现了“too many open files”的错误



系统对打开的socket不能及时释放,于是调整一些系统运行时对TCP/IP的设置可能会解决此问题.只是可能,还没最终测试,但设置的方法倒值得一学,且对今后也会有用处.



缺省值:



tcp_fin_timeout 180 

tcp_keepalive_time 7200 

tcp_window_scaling 1 

tcp_sack 1 

tcp_timestamps 1



调整值:

第一种方法:将下面的设置添加到/etc/sysctl.conf,然后重启网络(sysctl.conf是对内核参数的一些设置)



# Decrease the time default value for tcp_fin_timeout connection 

net.ipv4.tcp_fin_timeout = 30 

# Decrease the time default value for tcp_keepalive_time connection 

net.ipv4.tcp_keepalive_time = 1800 

# Turn off tcp_window_scaling 

net.ipv4.tcp_window_scaling = 0 

# Turn off the tcp_sack 

net.ipv4.tcp_sack = 0 

#Turn off tcp_timestamps 

net.ipv4.tcp_timestamps = 0



第二种方法:向/etc/rc.local添加如下代码

echo "30">/proc/sys/net/ipv4/tcp_fin_timeout

echo "1800">/proc/sys/net/ipv4/tcp_keepalive_time 

echo "0">/proc/sys/net/ipv4/tcp_window_scaling

echo "0">/proc/sys/net/ipv4/tcp_sack 

echo "0">/proc/sys/net/ipv4/tcp_timestamps





参考:通过调整Linux TCP参数提示服务器性能



 



27 对2T磁盘分区



Parted与fdisk区别



支持gpt分区表,可以对大于2T的磁盘分区



分区直接生效,不需要使用命令写入磁盘,partprobe /dev/sdb



格式化挂载等和fdisk无区别



28 NFS 出现问题报错



1)客户端查找没有。



[root@hexudong ~]# showmount -e 192.168.74.128



clnt_create: RPC: Program not registered



解决:



[root@hexudong html]# /etc/init.d/nfs restart



2)客户端



[root@hexudong ~]# showmount -e 192.168.74.128



clnt_create: RPC: Port mapper failure - Unable to receive: errno 111 (Connection refused)



解决:



[root@hexudong html]# /etc/init.d/rpcbind start



[root@hexudong html]# /etc/init.d/nfs restart 



3)客户端



[root@hexudong ~]# showmount -e 192.168.74.128



clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)



解决:



[root@hexudong html]# /etc/init.d/iptables stop



4)服务端



[root@hexudong html]# /etc/init.d/nfs restart



Shutting down NFS daemon:                                  [  OK  ]



Shutting down NFS mountd:                                  [  OK  ]



Shutting down NFS quotas:                                  [  OK  ]



Shutting down NFS services:                                [  OK  ]



Shutting down RPC idmapd:                                  [  OK  ]



Starting NFS services:  exportfs: Failed to stat /var/www/html/aaa: No such file or directory



没有这个目录



5)客户端提示 : Temporary failure in name resolution



服务端配置挂载地址不对。



6)[root@hexudong hexudong]# /bin/mount -t nfs 192.168.74.131:/data/w_shared /hexudong/b_w/



mount.nfs: rpc.statd is not running but is required for remote locking.



mount.nfs: Either use '-o nolock' to keep locks local, or start statd.



mount.nfs: an incorrect mount option was specified



服务端没有目录



29  密钥创建,不用敲回车。



ssh-keygen  -t dsa -P '' -f ~/.ssh/id_dsa

发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容