Linux常用命令history/tcpdump/awk/grep
1. 历史命令回显history
查询是什么时间什么人操作过文件:
echo 'export HISTTIMEFORMAT="%F %T `whoami` "' >> /etc/profile
ubuntu系统:查询是什么时间什么人登录的ip操作过文件:
export HISTFILESIZE=10000000 export HISTSIZE=1000000 # 实时记录历史命令,默认只有在用户退出之后才会统一记录,很容易造成多个用户间的相互覆盖>。 export PROMPT_COMMAND="history -a" USER_IP=`who -u am i 2>/dev/null| awk '{print $NF}'|sed -e 's/[()]//g'` if [ $USER_IP = ":0" ];then USER_IP=localhost fi export HISTTIMEFORMAT="%F %T `whoami`:$USER_IP "
2. 抓包tcpdump
tcpdump -X -s 0 -i any port 8123 -w ./tcpdump/xdrout.pcap -s 抓报长度,一般设置为0,即65535字节 -i 就是监听的网络接口,是eth0,eth1 还是什么,any 表示所有的网络接口。 port 8123 就是只监听8123 端口的信息。 -w 就是将记录保存在一个指定的文件中,后面自然就是这个文件的地址了。 -X 打印十六进制和ASCII的数据,每一个数据包(减去其链路层报头)
捕获的pcap包可以用wireshark分析。
3. 文本处理awk
awk '{for(i=1;i<=NF;i++)a[$i]++;} END {for(i in a)print i" = "a[i]}' test.txt
test.txt
eclipse test one to one
many to many foreign
output: eclipse = 1 to = 2 test = 1 many = 2 foreign = 1 one = 2
注释:
NF表示单行(记录 )中字段 数,$i表示对应字段 ,假设 文本是 "a b c d a b a" ,a出现3次所以a[a]++执行了3次,a[a]的值增加了3,这个循环完成 后a数组 中为已经读取的行相同内容字段出现次数
for (i in a) 表示 依次迭代a数组 的下标 ,赋值给变量 i,如上例a数组的下标 会是a,b,c,d(顺序是随机的),这四个下标会被按随机顺序赋值给变量 i。
print i"="a[i],打印字段 i和其出现次数a[i]
4. grep
使用扩展正则匹配(-E)规则,排除二进制文件(--binary-file=without-match)检索文件file中的"keyValue"
$ grep -nirE "keyValue" file --binary-file=without-match
--exclude-dir=参数就是为了排除某个目录的,即不包含等号后面的目录,所以我们可以利用此参数去掉.svn的隐藏目录。
可以把--exclude-dir=参数通过加入配置文件 ~/.bashrc (这是bash的当前用户配置文件) 的方法来简化操作,提高效率。
在~/.bashrc文件的末尾添加以下命令:
export GREP_OPTIONS="--exclude-dir=\.svn"
然后保存,执行source ~/.bashrc或者. ~/.bashrc,使修改起作用。
`dirname $0` 定位到运行脚本的相对位置