# linux命令几个
# 善用命令组合(grep,sort,cut,uniq)
2016.07.04
先看一段数据, 文件名 sys.log
[INFO] 10:30:01 [OrderAdd] – id=0001,customerid=C0001,buyOrSell=2,qty=3
[DEBUG] 10:30:02 [OrderUpdate] – id=0001,customerid=C0001,buyOrSell=2,qty=3
[DEBUG] 10:30:03 [OrderDel] – id=0001,customerid=C0001,buyOrSell=2,qty=3
[INFO] 10:30:04 [OrderAdd] – id=0002,customerid=C0002,buyOrSell=2,qty=3
[DEBUG] 10:30:05 [OrderAdd] – id=0003,customerid=C0003,buyOrSell=2,qty=3
[ERROR] 10:30:06 [OrderUpdate] – id=0003,customerid=C0003,buyOrSell=2,qty=3
[INFO] 10:30:07 [OrderProcess] – id=0002,customerid=C0002,buyOrSell=2,qty=3
[ERROR] 10:30:08 [OrderUpdate] – id=0003,customerid=C0003,buyOrSell=2,qty=3
[DEBUG] 10:30:09 [OrderDel] – id=0002,customerid=C0002,buyOrSell=2,qty=3
[ERROR] 10:30:10 [OrderDel] – id=0003,customerid=C0003,buyOrSell=2,qty=3
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
场景1:检索所有ERROR日志信息
cat sys.log | grep 'ERROR'
1
场景2:检索所有DEBUG或ERROR日志信息
cat sys.log | grep -E 'DEBUG|ERROR'
1
场景3:id都出现了那些
cat sys.log | cut -d ',' -f 1 | cut -d '=' -f 2 | sort | uniq
#或者使用grep精确匹配,当然,上面的cut直接截取效率更高
cat sys.log | grep -P -o 'id=.*?,' | cut -d "," -f1 | cut -d "=" -f2 | sort | uniq
1
2
3
2
3
场景4:id都出现了那些,每个出现多少次
cat sys.log | cut -d ',' -f 1 | cut -d '=' -f 2 | sort | uniq -c
1
场景5:id都出现了那些,每个出现多少次,并按次数从大到小排序
cat sys.log | cut -d ',' -f 1 | cut -d '=' -f 2 | sort | uniq -c | sort -n -k1 -r
1
场景6:customerid都出现了那些,每个出现多少次,并按次数从大到小排序
cat sys.log | grep 'customerid' | cut -d ',' -f 2 | sed 's/customerid=//g' | sort | uniq -c | sort -n -k1 -r
1
# sort命令多列排序
2018.01.30
把文本1.txt,按第二列正序、第一列倒序的方式排序
[root@localhost ~]# cat 1.txt
a 1 c
d 3 d
b 1 a
c 3 a
[root@localhost ~]# cat 1.txt | sort -s -t"\t" -k2,2 -k1r,1
sort: 多字符标签"\\t"
[root@localhost ~]# cat 1.txt | sort -s -t'\t' -k2,2 -k1r,1
sort: 多字符标签"\\t"
[root@localhost ~]# cat 1.txt | sort -s -t$"\t" -k2,2 -k1r,1
sort: 多字符标签"\\t"
[root@localhost ~]# cat 1.txt | sort -s -t$'\t' -k2,2 -k1r,1
b 1 a
a 1 c
d 3 d
c 3 a
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# iptables防火墙设置:限制访问
2017.09.01
#禁止访问192.168.50.73的22以外端口。
iptables -t filter -A OUTPUT -p tcp --dst 192.168.50.73 --dport 22 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp --dst 192.168.50.73 -j DROP
1
2
3
2
3
# linux按连接状态分组统计连接数
2017.05.16
netstat -n | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}'
TIME_WAIT 48
CLOSE_WAIT 2228
ESTABLISHED 86
1
2
3
4
5
2
3
4
5
附上状态图一张:
# SSH端口转发
2017.04.18
看参考链接吧: 实战 SSH 端口转发 (opens new window) SSH端口转发 (opens new window)
-C 压缩数据传输
-f 后台登录用户名密码
-N 不执行shell[与 -g 合用]
-g 允许打开的端口让远程主机访问
-L 本地端口转发
-R 远程端口转发
-D 动态端口转发
-p ssh 端口
1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
备忘:
(1)本地转发:
ssh -CNfg -L <监听端口>:<forward-host>:<forward-port> <username>@<ssh-server-host>
转发结果: 当访问ssh客户端本地的监听端口 —> ssh-server-host能访问到的forward-host:forward-port
1
2
2
(2)远程转发:
ssh -CNfg -R <监听端口>:<forward-host>:<forward-port> <username>@<ssh-server-host>
转发结果: 当访问 ssh-server-host:监听端口 —> ssh客户端能访问到的 forward-host:forward-port
1
2
2
注意:ssh服务端需要开启,/etc/ssh/sshd_config 配置 GatewayPorts yes,重启sshd服务,然后重新建立ssh连接,然后设置转发
(3)动态转发:
ssh -CNfg -D <监听端口> <username>@<ssh-server-host>
1
转发结果:实现了sock5代理
# VIM正则表达式,贪婪模式与非贪婪
2017.03.21
name="password" id="password"
贪婪,使用*
/name=".*"
匹配结果:name="password" id="password"
非贪婪,使用\{-}
/name=".\{-}"
非贪婪匹配结果:name="password"
1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
# grep实战:查找所有type=password的input的name
2017-03-21
#找出当前目录及子目录下所有jsp文件,并过滤出type=password的表单记录,将结果输出到文件1.out
find . -name "*.jsp" | xargs grep -E "(type=\"password\"|type=password|type='password')" > 1.out
#对结果进行匹配,找出所有name,并排序去重复
cat 1.out | grep -P -o 'name=".+?"' | sort | uniq
1
2
3
4
2
3
4
grep 的-P参数是正则表达式,并使用非贪婪模式,-E是正则表达式,贪婪模式 结果很完美
name="bankCardPassword"
name="bankPassword"
name="cfmPassword"
name="confirmPassword"
name="confirmpwd"
name="entity.password"
name="newpwd"
name="newPwd"
name="newpwd1"
name="obj.old"
name="obj.password"
name="obj.phonePWD"
name="oldpass"
name="oldPassword"
name="oldpwd"
name="oldPwd"
name="password"
name="passWord"
name="password1"
name="password2"
name="password3"
name="passwords"
name="phonePWD1"
name="pwd"
name="pwd1"
name="rnewpwd"
name="specialforAudit.password1"
name="tpassword"
name="truePassword"
name="upassword"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 给vps增加swap
2016.08.24
有的vps没有swap,可以通过下面的方法增加一个
dd if=/dev/zero of=swap.file bs=1024 count=1024000
mkswap swap.file
swapon swap.file
echo '/root/swap.file swap swap defaults 0 1' >> /etc/fstab
1
2
3
4
2
3
4
# curl检测网址访问是否返回HTTP状态码200
curl -k -o /dev/null -s -m 10 --connect-timeout 10 -w %{http_code} "https://www.baidu.com"
1
说明:-k 表示忽略证书警告信息
# 配置debian的locales区域设置
locale -a 看不到需要的语言,执行
dpkg-reconfigure locales
选择后,按tab选择ok,保存等待即可。
# Ubuntu 16.04安装有道词典1.1.0
Ubuntu 16.04安装有道词典官方1.1.0
下载地址:http://codown.youdao.com/cidian/linux/youdao-dict_1.1.0-0-deepin_amd64.deb
安装:
$ sudo dpkg -i –force-depends youdao-dict_1.1.0-0-deepin_amd64.deb
$ sudo apt-get -f install
1
2
2