8. 字符串查找
(1) 在 /data/hadoop/目录下查找包含字符串的saveVersion.sh后缀名为 .xml 的文件:
find /data/hadoop/ -name "*.xml" | xargs grep -H "saveVersion.sh"
(2) 查找/home/user下文件中查找cool
1. 统计目录下文件个数:
文件: find ./ -type f|wc -l; 目录就是-d了
2. 统计文件夹大小:
all size: du -s
列出所有的directory: du -S
4. linux kill含某关键字的进程
4.1 无处不在的: ps x|grep gas|grep -v grep |awk '{print $1}'|xargs kill -9
4.2 ps -ef|grep keyword|grep -v grep|cut -c 9-15|xargs kill -9
"ps -ef" 罗列所有进程的命令;"grepkeyword" 的过滤含有关键字"keyword"的进程; "grep -v grep" 是在列出的进程中去除含有关键字"grep"的进程;
"cut -c 9-15" 是截取输入行的第9个字符到第15个字符,对应是进程号PID; "xargs kill -9" 中的xargs 命令是用来把前面命令的输出结果(PID)作为"kill -9"命令的参数,并执行该命令。"kill -9"会强行杀掉指定进程。
5. Apache日志分析: http://www.yaoyingying.com/2009/05/02/apache%E6%97%A5%E5%BF%97%E5%88%86%E6%9E%90/
1,查看apache进程:
ps aux | grep httpd | grep -v grep | wc -l
2,查看80端口的tcp连接:
netstat -tan | grep "ESTABLISHED" | grep ":80" | wc -l
3,通过日志查看当天ip连接数,过滤重复:
cat access_log | grep "20/Oct/2008" | awk '{print $2}' | sort | uniq -c | sort -nr
为什么要用cat呢? 直接grep "20/Oct/2008" access_log |....
参考文章: http://sd.csdn.net/a/20120406/2804243.html
4,当天ip连接数最高的ip都在干些什么:
cat access_log | grep "20/Oct/2008:00" | grep "122.102.7.212" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10
5,当天访问页面排前10的url:
cat access_log | grep "20/Oct/2008:00" | awk '{print $8}' | sort | uniq -c | sort -nr | head -n 10
6,用tcpdump嗅探80端口的访问看看谁最高
tcpdump -i eth0 -tnn dst port 80 -c 1000 | awk -F"." '{print $1"."$2"."$3"."$4}' | sort | uniq -c | sort -nr
<pre>
接着从日志里查看该ip在干嘛:
<pre lang="php">
cat access_log | grep 122.102.7.212| awk '{print $1"\t"$8}' | sort | uniq -c | sort -nr | less
7,查看某一时间段的ip连接数:
grep "2006:0[7-8]" www20060723.log | awk '{print $2}' | sort | uniq -c| sort -nr | wc -l
6. shell 与或非
两个特殊操作
命令1 && 命令2 :只有在命令1执行成功时才执行命令2;
命令1 || 命令2 :命令1失败才执行命令2;
[root@sp ~]# str="hh"
[root@sp ~]# [ -n "$str" ] && echo true || echo false
true
[root@sp ~]# [ -n $str ] && echo true || echo false
true
[root@sp ~]# str=""
[root@sp ~]# [ -n "$str" ] && echo true || echo false
false
[root@sp ~]# [ -n $str ] && echo true || echo false
true
7. 字符串替换
7.1 在shell中使用find结合grep进行文件的替换
# find ./ -exec grep str1 ‘{}’ /; -exec sed -i.bak s/str1/str2/g ‘{}’ /;
上面命令可以在当前目录下(包括子目录)查找包含str1的文件,自动替换成str2,并且生成源文件的bak文件
7.2 用sed命令可以批量替换多个文件中的字符串。
sed -i "s/原字符串/新字符串/g" `grep 原字符串 -rl 所在目录`
例如:我要把linux替换为windows,执行命令:
sed -i "s/linux/windows/g" `grep linux -rl /myfolder`
上面的都出错了,下面这条有效的:
find ./old/ -type f -print0 | xargs -0 sed -i 's/old/new/g'
8. 区分空格与tab键
[uq@ubuntu]$ sed -n l tab_space.txt
this is tab\tfinish.$
this is several space finish.$
如果是制表符(TAB),那么会显示为\t符号,如果是空格,就会原样显示, 通过此方法即可以判断制表符和空格了。
3. 一个有趣的问题:scp 传输命令后的文件大小不一致:
问题分析:
3.1 一个8个节点集群,集群的操作系统完全一样都是RHEL5.3的。 需要从其中一台节点传输数据到不同的节点;
3.2 同一个文件 abc.bin, ls -s 大小为: 1168424, md5sum为7e4b6cbf62ca054ba1de3d263e0fe601
3.3 相同的scp命令,传输到某些节点时, ls -s abc.bin大小为1168428, md5sum为7e4b6cbf62ca054ba1de3d263e0fe601
3.4而另外的一些节点大小与源文件一致,md5也一致;
问题可能出在什么地方呢?