# 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

场景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

场景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

# 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

# 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

附上状态图一张: tcp状态图

# 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

备忘:

(1)本地转发:

ssh -CNfg -L <监听端口>:<forward-host>:<forward-port>  <username>@<ssh-server-host>
转发结果: 当访问ssh客户端本地的监听端口  —>  ssh-server-host能访问到的forward-host:forward-port
1
2

(2)远程转发:

ssh -CNfg -R <监听端口>:<forward-host>:<forward-port>  <username>@<ssh-server-host>
转发结果: 当访问 ssh-server-host:监听端口  —>  ssh客户端能访问到的 forward-host:forward-port
1
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

# 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

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

# 给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

# 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