碎小无章的记录。
1、vim替换小技巧
This is the first line This is the second line www.linuxpk.com hello good moring www.linuxpk.com hi good afternoon www.linuxpk.com foo good evening This is the last line 要求:删除所有含有"www.linuxpk.com"的行,以及该行下面的两行。使得结果要成为: This is the first line This is the second line This is the last line
www\.linuxpk\.com
1. 如何删除所有带有www.linuxpk.com的行,及其下面的3行
:g/www\.linuxpk\.com/ norm 4dd
1. 如何删除所有带有www.linuxpk.com的行,及其下面的3行
:g/www\.linuxpk\.com/ norm dap
2、nfs挂载 客户端需要开放portmap这个服务 centos下开启nfs服务也需要这个服务
3、关于分区
一个潜在的黑客如果要攻击你的Linux服务器,他首先就会尝试缓冲区溢出。在过去的几年中,以缓冲区溢出为类型的安全漏洞是最为常见的一种形式了。 更为严重的是,缓冲区溢出漏洞占了远程网络攻击的绝大多数,这种攻击可以轻易使得一个匿名的Internet用户有机会获得一台主机的部分或全部的控制 权!
为了防止此类攻击,我们从安装系统时就应该注意。如果用root分区纪录数据,如 log文件和email,就可能因为拒绝服务产生大量日志或垃圾邮件,从而导致系统崩溃。所以建议为/var开辟单独的分区,用来存放日志和邮件,以避免 root分区被溢出。最好为特殊的应用程序单独开一个分区,特别是可以产生大量日志的程序,还有建议为/home单独分一个区,这样他们就不能填满/分区 了,从而就避免了部分针对Linux分区溢出的恶意攻击。
4\查看连接 IP的连接数
netstat -an | awk ‘/^tcp/{ A[$NF]++} END{ for (a in A) print a, A[a]}’
netstat -an |awk ‘/LISTEN/{next};/^tcp/{s=split($5, N,”:”); \
A[N[s-1]]++} END{ for (a in A) print a, A[a]}’
通过执行 netstat -anpo | grep “php-cgi” | wc -l 判断,是否接近你启动的FastCGI进程,接近你的设置,表示进程不够
经长时间观察和大量试验查明,此乃request header过大所引起,request过大,通常是由于cookie中写入了较大的值所引起。
所幸在nginx中是有办法解决这个问题:
在nginx.conf中,将client_header_buffer_size和large_client_header_buffers都调大,可缓解此问题。
其中主要配置是client_header_buffer_size这一项,默认是1k,所以header小于1k的话是不会出现问题的。
按我现在配置是:
client_header_buffer_size 16k;
large_client_header_buffers 4 400k;
这个配置可接收16k以下的header,在浏览器中cookie的字节数上限会非常大,所以实在是不好去使用那最大值。‘
shell#/sbin/lspci
shell#/usr/sbin/dmidecode
8、添加suhosin补丁
假设php源代码和一下要用到的文件都保持在/usr/local/src下,php源代码版本为:php-5.2.6
先下载跟你的php版本对应的Suhosin补丁:http://www.hardened-php.net/suhosin/download.html
解压缩:
1 |
gzip -d ./suhosin-patch-5.2.6-0.9.6.2.patch.gz |
进入php源代码目录:
1 2 |
cd php-5.2.6 patch -p 1 -i ../suhosin-patch-5.2.6-0.9.6.2.patch |
重建php的configure脚本
1 |
./buildconf --force |
然后重新编译php:
1 2 3 |
./configure --enable-suhosin --with-what-you-want make make install |
9、 SELinux问题 cannot restore segment prot after reloc: Permission denied
/usr/bin/setenforce 修改SELinux的实时运行模式
setenforce 1 设置SELinux 成为enforcing模式 不能继续执行
setenforce 0 设置SELinux 成为permissive模式 可以继续 只记录 日志
在命令后加个 -Z 或者加 –context
[root@python azureus]# ls -Z
-rwxr-xr-x fu fu user_u:object_r:user_home_t azureus
-rw-r–r– fu fu user_u:object_r:user_home_t Azureus2.jar
-rw-r–r– fu fu user_u:object_r:user_home_t Azureus.png
2)chcon
更改文件的标签
[root@python tmp]# ls –context test.txt
-rw-r–r– root root root:object_r:staff_tmp_t test.txt
[root@python tmp]# chcon -t etc_t test.txt
[root@python tmp]# ls -lZ test.txt
-rw-r–r– root root root:object_r:etc_t test.txt
10、wget断点续传是自动的,只需要加上-c参数即可,例如:
wget -c http://www.abc.com/abc.zip
另外注意,使用wget断点续传要求服务器支持断点续传。
11、在 VIM,如何给注释多行 或者取消注释
加注释
:m,ns/^/#/
其中 m 和 n 是行号
去掉注释
:m,ns/^#//
其中 m 和 n 是行号
12、dig查看解析情况
# 查找一个域的授权 dns 服务器
dig sohu.com +nssearch# 从根服务器开始追踪一个域名的解析过程
dig sohu.com + trace
13.Linux rar解压打包
安装好Linux的rar后
解压rar x test.rar
打包rar a test.rar *.jpg
14、PHP发送邮件乱码
Warning: mb_send_mail(): Unsupported charset "utf-X" - will be regarded as ascii in ...
這下我明白了,凶手就是 mb_send_mail()。原來 mail() 實際上已經被 mb_send_mail() 覆寫了,而 mb_send_mail() 會判讀 header 內容對信件內容編碼。這正是造成亂碼的原因。
我直覺想到這與 mbstring extension 有關。只要不載入 mbstring extension 或是在 php.ini 中設定 mbstring.func_overload = 6(not overload mail()),那麼問題便可迎刃而解。我測試後確實可解,取消 mbstring.func_overload 對 mail() 之覆寫動作後, mail() 的行為跟以前一樣,不會對信件內容亂編碼。
检查PHPINFO 发现我的是mbstring.func_overload 是7 7的话把mail重载了 所以改成0 或者6都没有问题了
15、查看连接的IP并且排序
第一种用awk
netstat -an |awk ‘/LISTEN/{next};/^tcp/{s=split($5, N,”:”); \
A[N[s-1]]++} END{ for (a in A) print a, A[a]}’ | awk ‘{print $2″::”$1}’ | sort -nt:
第二种 简单的
netstat -ntu | awk ‘{print $5}’ | cut -d: -f1 | sort | uniq -c | sort -n
查看状态
netstat -nat | awk ‘{print $6}’ | sort | uniq -c | sort -rn
16、I refuse to run as root emesene默认不允许root用户运行 但我的习惯一般一直用root 所以只好查查怎么解决了。
参考:http://www.songzi.org/blog/article.asp?id=666
I undestand the problem. You have to edit the Controller.py file (is in the emesene root folder).
Find and comment or delete the next lines:
if os.name == ‘posix’ and os.getuid() == 0:
print “I refuse to run as root”
return
Save the file.
其实也不用删除,把这三行前面加上注释就好了:
# if os.name == ‘posix’ and os.getuid() == 0:
# print “I refuse to run as root”
# return
再执行 “./emesene “,ok。
17、查出网站的爬虫
/usr/sbin/tcpdump -i eth0 -l -s 0 -w - dst port 80 | strings | grep -i user-agent | egrep -i 'bot|crawler|slurp|spider'
18、用Shell查看网络连接数 命令解説
Shell写起来很简单,效果却很神奇,你可以先尝试执行一下这条命令:
netstat -n | awk ‘/^tcp/ {++state[$NF]} END {for(key in state) print key,”\t”,state[key]}’
会得到类似下面的结果,具体数字会有所不同:
LAST_ACK 1
SYN_RECV 14
ESTABLISHED 79
FIN_WAIT1 28
FIN_WAIT2 3
CLOSING 5
TIME_WAIT 1669
也就是说,这条命令可以把当前系统的网络连接状态分类汇总。
下面解释一下为啥要这样写:
一个简单的管道符连接了netstat和awk命令。
——————————————————————
先来看看netstat:
netstat -n
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 123.123.123.123:80 234.234.234.234:12345 TIME_WAIT
你实际执行这条命令的时候,可能会得到成千上万条类似上面的记录,不过我们就拿其中的一条就足够了。
——————————————————————
再来看看awk:
/^tcp/
滤出tcp开头的记录,屏蔽udp, socket等无关记录。
state[]
相当于定义了一个名叫state的数组
NF
表示记录的字段数,如上所示的记录,NF等于6
$NF
表示某个字段的值,如上所示的记录,$NF也就是$6,表示第6个字段的值,也就是TIME_WAIT
state[$NF]
表示数组元素的值,如上所示的记录,就是state[TIME_WAIT]状态的连接数
++state[$NF]
表示把某个数加一,如上所示的记录,就是把state[TIME_WAIT]状态的连接数加一
END
表示在最后阶段要执行的命令
for(key in state)
遍历数组
print key,”\t”,state[key]
打印数组的键和值,中间用\t制表符分割,美化一下。
19、判断受到何种DDOS攻击
如果出现了以下情况就是遭到了DDOS攻击:
1. SYN数量大于100则是遭到了SYNFlood式的DDOS攻击。
2. ACK数量大于500则遭受了ACKFlood式的DDOS攻击(下载站正常情况下也可能会达到1000个以上)。
3. ICMP数量大于50则可能遭到了ICMPFlood式的DDOS攻击。
4. UDP数量很少而带宽占用很大,则可能遭到了UDPFlood攻击。
5. CPU占用率大于80%,并且主要被MSSQLServer或MySQL数据库进程占用了则可能遭到了CC类的DDOS攻击。
20、grep 的时候记得过虑他自己 下面两种方法都可以
ps aux | grep httpd | grep -v grep | wc -l
pgrep httpd | wc -l
21、Linux下使用pmap命令能查看一个具体进程所用内存的分布情况。
22、清空 ARP表
#arp -d -a(适用于bsd)
for HOST in `arp | sed ‘/Address/d’ | awk ‘{ print $1}’` ; do arp -d $HOST; done
命令里面一定要注意标点符号 BLOG贴上去之后 很多标点就变了
回复