2019-04-24

1
2
3
traceroute (Windows系统下是tracert) 命令利用ICMP 协议定位您的计算机和目标计算机之间的所有路由器。TTL值可以反映数据包经过的路由器或网关的数量,通过操纵独立ICMP呼叫报文的TTL值和观察该报文被抛弃的返回信息,traceroute命令能够遍历到数据包传输路径上的所有路由器。traceroute是一条缓慢的命令,因为每经过一台路由器都要花去大约1015秒。
tracepath命令 用来追踪并显示报文到达目的主机所经过的路由信息。
ICMP是“Internet Control Message Protocol”(Internet控制消息协议)的缩写。它是TCP/IP协议族的一个子协议,用于在IP主机、路由器之间传递控制消息。控制消息是指网络通不通、主机是否可达、路由是否可用等网络本身的消息。这些控制消息虽然并不传输用户数据,但是对于用户数据的传递起着重要的作用。

2019-04-23

sysctl命令用于运行时配置内核参数,这些参数位于/proc/sys目录下。sysctl配置与显示在/proc/sys目录中的内核参数.可以用sysctl来设置或重新设置联网功能,如IP转发、IP碎片去除以及源路由检查等。用户只需要编辑/etc/sysctl.conf文件,即可手工或自动执行由sysctl控制的功能。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
命令格式:
sysctl [-n] [-e] -w variable=value
sysctl [-n] [-e] -p <filename> (default /etc/sysctl.conf)
sysctl [-n] [-e] -a

常用参数的意义:
-w 临时改变某个指定参数的值,如 sysctl -w net.ipv4.ip_forward=1
-a 显示所有的系统参数
-p 从指定的文件加载系统参数,如不指定即从/etc/sysctl.conf中加载

如果仅仅是想临时改变某个系统参数的值,可以用两种方法来实现,例如想启用IP路由转发功能:
1) #echo 1 > /proc/sys/net/ipv4/ip_forward
2) #sysctl -w net.ipv4.ip_forward=1

以上两种方法都可能立即开启路由功能,但如果系统重启,或执行了service network restart 命令,所设置的值即会丢失,如果想永久保留配置,可以修改/etc/sysctl.conf文件将 net.ipv4.ip_forward=0改为net.ipv4.ip_forward=1

2019-04-22

Blog创建规范

1
2
3
1. 大分类:web、windows、linux、shell、python、openstack、tools、others、随笔、nfs、mysql、fastdfs、ansible
2. 文件命名与blog标题一致,命名开头 eg: 【web】,标签第一个: web
3. 从命名上分类,便于本地查看查找

2019-04-18

Centos7 如何减少/home分区,扩大/root分区

1
2
3
4
5
6
7
8
9
10
把/home内容备份,然后将/home文件系统所在的逻辑卷删除,扩大/root文件系统,新建/home:
tar cvf /tmp/home.tar /home #备份/home
umount /home #卸载/home,如果无法卸载,先终止使用/home文件系统的进程
lvremove /dev/centos/home #删除/home所在的lv
lvextend -L +50G /dev/centos/root #扩展/root所在的lv,增加50G
xfs_growfs /dev/centos/root #扩展/root文件系统
lvcreate -L 56G -n home centos #重新创建home lv
mkfs.xfs /dev/centos/home #创建文件系统
mount /dev/centos/home /home #挂载
df -h

2019-04-16

Linux添加环境变量与GCC编译器添加INCLUDE与LIB环境变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
对所有用户有效在/etc/pro

file增加以下内容。只对当前用户有效在Home目录下的
.bashrc或.bash_profile 里增加下面的内容:
(注意:等号前面不要加空格,否则可能出现 command not found)

#在PATH中找到可执行 文件程序的路径。
export PATH =$PATH:$HOME/bin

#gcc找到头文件的路径
C_INCLUDE_PATH=/usr/include/libxml2:/MyLib
export C_INCLUDE_PATH

#g++找到头文件的路径
CPLUS_INCLUDE_PATH=$CPLUS_INCLUDE_PATH:/usr/include/libxml2:/MyLib
export CPLUS_INCLUDE_PATH

#找到动态链接库的路径
LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/MyLib
export LD_LIBRARY_PATH

#找到静态库的路径
LIBRARY_PATH=$LIBRARY_PATH:/MyLib
export LIBRARY_PATH

2019-04-11

命令学习

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
readlink
输出符号链接值或者权威文件名
英文为:
print value of a symbolic link or canonical file name
-f 选项:
可以递归跟随给出文件名的所有符号链接以标准化,除最后一个外所有组件必须存在。
简单地说,就是一直跟随符号链接,直到非符号链接的文件位置,限制是最后必须存在一个非符号链接的文件。

#Absolute path to this script
SCRIPT=$(readlink -f $0)
#Absolute path this script is in
SCRIPTPATH=$(dirname $SCRIPT)
SCRIPTNAME=$(basename $SCRIPT)
echo $0 setup.sh
echo $SCRIPT /home/admin/infoShare/setup.sh
echo $SCRIPTPATH /home/admin/infoShare
echo $SCRIPTNAME setup.sh

dirname命令去除文件名中的非目录部分,仅显示与目录有关的内容。dirname命令读取指定路径名保留最后一个/及其后面的字符,删除其他部分,并写结果到标准输出。如果最后一个/后无字符,dirname 命令使用倒数第二个/,并忽略其后的所有字符。dirname 和 basename 通常在 shell 内部命令替换使用,以指定一个与指定输入文件名略有差异的输出文件名

basename命令用于打印目录或者文件的基本名称。

setfacl命令是用来在命令行里设置ACL(访问控制列表)。在命令行里,一系列的命令跟随以一系列的文件名。
setfacl -m u:admin:wx /etc/systemd/system/multi-user.target.wants

2019-04-10

防火墙简单使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#关闭已开放的端口
#!/bin/sh

for port in `sudo firewall-cmd --list-ports`
do
echo "Close port $port"
sudo firewall-cmd --permanent --zone=drop --remove-port=$port
done
sudo firewall-cmd --reload

#完全隔离
firewall-cmd --panic-on Enable panic mode
firewall-cmd --panic-off Disable panic mode
firewall-cmd --query-panic Query whether panic mode is enabled

#隔离外部访问,仅开放22端口
firewall-cmd --set-default-zone=drop
firewall-cmd --load-zone-defaults=drop --permanent
firewall-cmd --permanent --zone=drop --add-port=22/tcp
firewall-cmd --reload

生成8位随机密码

1
2
3
4
5
6
7
8
MATRIX="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz"
LENGTH="8"
while [ "${n:=1}" -le "$LENGTH" ]
do
PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
let n+=1
done
echo $PASS

2019-04-08

部署脚本涉及

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
1. 新建特权用户
useradd admin
echo -e '123456\n123456' | passwd admin
visudo
admin localhost=NOPASSWD:/usr/bin/systemctl,/usr/bin/firewall-cmd,/sbin/reboot
firewall-cmd --zone=public --permanent --add-port=80/tcp
firewall-cmd --reload
yum remove NetworkManager
yum remove mariadb-libs
2. 正则匹配
正整数
[1-9]\d*
IP地址
(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)\.(25[0-5]|2[0-4]\d|[0-1]\d{2}|[1-9]?\d)
(http|https)://(.*?):(.*?)/(.*)
3. MySQL
4. Redis
5. FastDFS/S3
6. lvs+keepalived
7. infoShare

Linux帮助使用

1
2
3
4
5
1.whatis 
2.ls --help
3.man ls
4.info ls
5.help echo

2019-04-04

Linux权限相关

1
2
3
visudo
chmod
chown

创建/删除用户

1
2
3
4
5
6
7
8
9
useraddadduser都是创建新的用户
在CentOs下useradd与adduser是没有区别的都是在创建用户,在home下自动创建目录,没有设置密码,需要使用passwd命令修改密码。

而在Ubuntu下useradd与adduser有所不同
1、useradd在使用该命令创建用户是不会在/home下自动创建与用户名同名的用户目录,而且不会自动选择shell版本,也没有设置密码,那么这个用户是不能登录的,需要使用passwd命令修改密码。
2、adduser在使用该命令创建用户是会在/home下自动创建与用户名同名的用户目录,系统shell版本,会在创建时会提示输入密码,更加友好。

userdel 删除用户,
userdel只能删除用户,并不会删除相关的目录文件。userdel -r 可以删除用户及相关目录。

Shell变量

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
变量说明:
$$
Shell本身的PID(ProcessID)
$!
Shell最后运行的后台Process的PID
$?
最后运行的命令的结束代码(返回值)
$-
使用Set命令设定的Flag一览
$*
所有参数列表。如"$*"用「"」括起来的情况、以"$1 $2$n"的形式输出所有参数。
$@
所有参数列表。如"$@"用「"」括起来的情况、以"$1" "$2""$n" 的形式输出所有参数。
$#
添加到Shell的参数个数
$0
Shell本身的文件名
$1$n

2019-04-03

Linux添加永久静态路由的static-routes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 1.在/etc/rc.local里添加
方法:
route add -net 192.168.3.0/24 dev eth0
route add -net 192.168.2.0/24 gw 192.168.2.254

# 2.在/etc/sysconfig/network里添加到末尾
方法:GATEWAY=gw-ip 或者 GATEWAY=gw-dev

# 3./etc/sysconfig/static-routes : (没有static-routes的话就手动建立一个这样的文件)
any net 192.168.3.0/24 gw 192.168.3.254
any net 10.250.228.128 netmask 255.255.255.192 gw 10.250.228.129

# 4.开启 IP 转发:
echo "1" >/proc/sys/net/ipv4/ip_forward (临时)
vi /etc/sysctl.conf --> net.ipv4.ip_forward=1 (永久开启)

文档存储

1
XPS是XML Paper Specification的简称,它是微软公司开发的一种文档保存与查看的规范。

ip命令常用操作

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
ip地址管理

# 显示ip地址
ip a
ip address show
ip addr show dev eth0
ip a sh eth0

# 增加/删除地址
ip address add 192.0.2.1/24 dev eth0
ip addr del 192.0.2.2/24 dev eth0

# 显示接口统计
ip -s link ls eth0


网卡和链路配置

# 显示链路
ip link show
ip link sh eth0

# 修改接口状态
ip link set eth0 up
ip link s gre01 down

路由表管理

# 显示路由表
ip route
ip ro show dev gre01

# 增加新路由
ip route add 10.2.2.128/27 dev gre01

# 增加默认路由
ip route add default via 192.168.1.1

# 修改默认路由
ip route chg default via 192.168.1.2

# 删除默认路由
ip route del default


隧道配置

# 增加删除GRE隧道
ip tunnel add gre01 mode gre local 10.1.1.1 remote 20.2.2.1 ttl 255
ip tunnel del gre01

# IPIP隧道
ip tunl a ipip01 mode ipip local 10.1.1.1 remote 20.2.2.1 ttl 255

# 显示隧道
ip tunnel show

# 显示隧道统计
ip -s tunl ls gre01


邻居和arp表管理

# 查看arp表
ip neigh show

# 手工增加删除arp项
ip neighbor add 10.2.2.2 dev eth0
ip neigh del 10.2.2.1 dev eth0


socket统计

# 显示当前监听
ss -l

# 显示当前监听的进程
ss -p


# 常用命令
ip link show #显示链路
ip addr show #显示地址(或ifconfig)
ip route show #显示路由(route -n)
ip neigh show #显示arp表(ping 192.168.95.50,如果主机在同一局域网内,直接加到arp表)
ip neigh delete 192.168.95.50 dev eth0 #删除arp条目,条目仍然存在状态为stale,下次通信需要确认
ip rule show #显示缺省规则
ip route del default dev eth0 #删除接口路由
ip route show table local #查看本地静态路由
ip route show table main #查看直连路由

# 添加静态路由
ip route add 10.0.0.0/24 via 192.168.92.129
ip route add 10.10.10.10 via 192.168.92.129
ip route add 172.31.100.0/24 dev eth0
ip route add 172.32.0.2 dev eth0

# 查看路由表
ip route show table main
ip route show table local

# 删除
ip route del 10.0.0.0/24
ip route del 10.10.10.10
ip route del 172.31.100.0/24
ip route del 172.32.0.2

# 添加网卡别名并添加标记 label
ip addr add 192.168.1.2/24 label eth0:0 dev eth0
ip addr show eth0

2019-04-02

异常/bin/sh^M: bad interpreter: No such file or directory

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
在Linux中执行.sh脚本,异常/bin/sh^M: bad interpreter: No such file or directory。 

分析:
这是不同系统编码格式引起的:在windows系统中编辑的.sh文件可能有不可见字符,所以在Linux系统下执行会报以上异常信息。
解决:
1)在windows下转换:
利用一些编辑器如UltraEdit或EditPlus等工具先将脚本编码转换,再放到Linux中执行。转换方式如下(UltraEdit):File-->Conversions-->DOS->UNIX即可。
2)也可在Linux中转换:
首先要确保文件有可执行权限
#sh>chmod a+x filename

然后修改文件格式
#sh>vi filename

利用如下命令查看文件格式
:set ff 或 :set fileformat

可以看到如下信息
fileformat=dos 或 fileformat=unix

利用如下命令修改文件格式
:set ff=unix 或 :set fileformat=unix

:wq (存盘退出)

最后再执行文件
#sh>./filename

杂项

1
2
3
Chromium Embedded Framework (CEF) 是一个开源项目,用于嵌入基于 Google Chromium 项目的 Web 浏览器控件。
pywebview 是一个轻量级跨平台的 HTML 浏览器控件,可以在 GUI 应用中显示 HTML 内容。
https://pywebview.flowrl.com/

负载均衡

1
2
3
1. DNS解析
2. Nginx反向代理
3. lvs+keepalive
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
ifconfig lo:0 125.12.12.77 broadcast125.12.12.77 netmask 255.255.255.255 up

route add -host 125.12.12.77 dev lo:0

netmask原意是用于分割子网网络号和子网主机号,所以大部分私有网络(如家庭网络或企业网络)会按需配置或默认的255.255.255.0(表示该子网能容纳255个主机)。在上例中,这个虚拟ip显然不需要配置子网,所以设为4255表示无子网是自然、合理的。(末尾的up表示update)

这段代码的意图是避免多台RealServer设定了相同的虚拟ip之后导致ip冲突,我猜测:

广播地址设为自己的ip,用于收到同ip发来的消息时,让系统误认为是广播消息(因此系统不觉得ip冲突)
向路由表加规则,用于向同ip发出消息时,被发送的消息将进入环回接口,即只有该主机自己能收到,不会向网络扩散。

结论:
掩码设为4255与防止ip冲突无关。

参考:
http://os.51cto.com/art/201105/264303.htm
http://os.51cto.com/art/201105/262536.htm

net-tools 和 iproute2

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
nettools(ifconfig、route、arp和netstat)
# ifconfig
Usage:
ifconfig [-a] [-v] [-s] <interface> [[<AF>] <address>]
[add <address>[/<prefixlen>]]
[del <address>[/<prefixlen>]]
[[-]broadcast [<address>]] [[-]pointopoint [<address>]]
[netmask <address>] [dstaddr <address>] [tunnel <address>]
[outfill <NN>] [keepalive <NN>]
[hw <HW> <address>] [mtu <NN>]
[[-]trailers] [[-]arp] [[-]allmulti]
[multicast] [[-]promisc]
[mem_start <NN>] [io_addr <NN>] [irq <NN>] [media <type>]
[txqueuelen <NN>]
[[-]dynamic]
[up|down] ...

<HW>=Hardware Type.
List of possible hardware types:
loop (Local Loopback) slip (Serial Line IP) cslip (VJ Serial Line IP)
slip6 (6-bit Serial Line IP) cslip6 (VJ 6-bit Serial Line IP) adaptive (Adaptive Serial Line IP)
ash (Ash) ether (Ethernet) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) rose (AMPR ROSE) tunnel (IPIP Tunnel)
ppp (Point-to-Point Protocol) hdlc ((Cisco)-HDLC) lapb (LAPB)
arcnet (ARCnet) dlci (Frame Relay DLCI) frad (Frame Relay Access Device)
sit (IPv6-in-IPv4) fddi (Fiber Distributed Data Interface) hippi (HIPPI)
irda (IrLAP) ec (Econet) x25 (generic X.25)
infiniband (InfiniBand) eui64 (Generic EUI-64)
<AF>=Address family. Default: inet
List of possible address families:
unix (UNIX Domain) inet (DARPA Internet) inet6 (IPv6)
ax25 (AMPR AX.25) netrom (AMPR NET/ROM) rose (AMPR ROSE)
ipx (Novell IPX) ddp (Appletalk DDP) ec (Econet)
ash (Ash) x25 (CCITT X.25)

# route
Usage: route [-nNvee] [-FC] [<AF>] List kernel routing tables
route [-v] [-FC] {add|del|flush} ... Modify routing table for AF.

route {-h|--help} [<AF>] Detailed usage syntax for specified AF.
route {-V|--version} Display version/author and exit.

-v, --verbose be verbose
-n, --numeric don't resolve names
-e, --extend display other/more information
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB

<AF>=Use -4, -6, '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)

# netstat
usage: netstat [-vWeenNcCF] [<Af>] -r netstat {-V|--version|-h|--help}
netstat [-vWnNcaeol] [<Socket> ...]
netstat { [-vWeenNac] -I[<Iface>] | [-veenNac] -i | [-cnNe] -M | -s [-6tuw] } [delay]

-r, --route display routing table
-I, --interfaces=<Iface> display interface table for <Iface>
-i, --interfaces display interface table
-g, --groups display multicast group memberships
-s, --statistics display networking statistics (like SNMP)
-M, --masquerade display masqueraded connections

-v, --verbose be verbose
-W, --wide don't truncate IP addresses
-n, --numeric don't resolve names
--numeric-hosts don't resolve host names
--numeric-ports don't resolve port names
--numeric-users don't resolve user names
-N, --symbolic resolve hardware names
-e, --extend display other/more information
-p, --programs display PID/Program name for sockets
-o, --timers display timers
-c, --continuous continuous listing

-l, --listening display listening server sockets
-a, --all display all sockets (default: connected)
-F, --fib display Forwarding Information Base (default)
-C, --cache display routing cache instead of FIB
-Z, --context display SELinux security context for sockets

<Socket>={-t|--tcp} {-u|--udp} {-U|--udplite} {-S|--sctp} {-w|--raw}
{-x|--unix} --ax25 --ipx --netrom
<AF>=Use '-6|-4' or '-A <af>' or '--<af>'; default: inet
List of possible address families (which support routing):
inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP)
x25 (CCITT X.25)

# arp
Usage:
arp [-vn] [<HW>] [-i <if>] [-a] [<hostname>] <-Display ARP cache
arp [-v] [-i <if>] -d <host> [pub] <-Delete ARP entry
arp [-vnD] [<HW>] [-i <if>] -f [<filename>] <-Add entry from file
arp [-v] [<HW>] [-i <if>] -s <host> <hwaddr> [temp] <-Add entry
arp [-v] [<HW>] [-i <if>] -Ds <host> <if> [netmask <nm>] pub <-''-

-a display (all) hosts in alternative (BSD) style
-e display (all) hosts in default (Linux) style
-s, --set set a new ARP entry
-d, --delete delete a specified entry
-v, --verbose be verbose
-n, --numeric don't resolve names
-i, --device specify network interface (e.g. eth0)
-D, --use-device read <hwaddr> from given device
-A, -p, --protocol specify protocol family
-f, --file read new entries from file or from /etc/ethers

<HW>=Use '-H <hw>' to specify hardware address type. Default: ether
List of possible hardware types (which support ARP):
ash (Ash) ether (Ethernet) ax25 (AMPR AX.25)
netrom (AMPR NET/ROM) rose (AMPR ROSE) arcnet (ARCnet)
dlci (Frame Relay DLCI) fddi (Fiber Distributed Data Interface) hippi (HIPPI)
irda (IrLAP) x25 (generic X.25) infiniband (InfiniBand)
eui64 (Generic EUI-64)


iproute2(ip和ss)
# ip
Usage: ip [ OPTIONS ] OBJECT { COMMAND | help }
ip [ -force ] -batch filename
where OBJECT := { link | address | addrlabel | route | rule | neigh | ntable |
tunnel | tuntap | maddress | mroute | mrule | monitor | xfrm |
netns | l2tp | macsec | tcp_metrics | token }
OPTIONS := { -V[ersion] | -s[tatistics] | -d[etails] | -r[esolve] |
-h[uman-readable] | -iec |
-f[amily] { inet | inet6 | ipx | dnet | bridge | link } |
-4 | -6 | -I | -D | -B | -0 |
-l[oops] { maximum-addr-flush-attempts } |
-o[neline] | -t[imestamp] | -ts[hort] | -b[atch] [filename] |
-rc[vbuf] [size] | -n[etns] name | -a[ll] }

# ss
Usage: ss [ OPTIONS ]
ss [ OPTIONS ] [ FILTER ]
-h, --help this message
-V, --version output version information
-n, --numeric don't resolve service names
-r, --resolve resolve host names
-a, --all display all sockets
-l, --listening display listening sockets
-o, --options show timer information
-e, --extended show detailed socket information
-m, --memory show socket memory usage
-p, --processes show process using socket
-i, --info show internal TCP information
-s, --summary show socket usage summary
-b, --bpf show bpf filter socket information
-Z, --context display process SELinux security contexts
-z, --contexts display process and socket SELinux security contexts
-N, --net switch to the specified network namespace name

-4, --ipv4 display only IP version 4 sockets
-6, --ipv6 display only IP version 6 sockets
-0, --packet display PACKET sockets
-t, --tcp display only TCP sockets
-S, --sctp display only SCTP sockets
-u, --udp display only UDP sockets
-d, --dccp display only DCCP sockets
-w, --raw display only RAW sockets
-x, --unix display only Unix domain sockets
-f, --family=FAMILY display sockets of type FAMILY

-A, --query=QUERY, --socket=QUERY
QUERY := {all|inet|tcp|udp|raw|unix|unix_dgram|unix_stream|unix_seqpacket|packet|netlink}[,QUERY]

-D, --diag=FILE Dump raw information about TCP sockets to FILE
-F, --filter=FILE read filter information from FILE
FILTER := [ state STATE-FILTER ] [ EXPRESSION ]
STATE-FILTER := {all|connected|synchronized|bucket|big|TCP-STATES}
TCP-STATES := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|closed|close-wait|last-ack|listen|closing}
connected := {established|syn-sent|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
synchronized := {established|syn-recv|fin-wait-{1,2}|time-wait|close-wait|last-ack|closing}
bucket := {syn-recv|time-wait}
big := {established|syn-sent|fin-wait-{1,2}|closed|close-wait|last-ack|listen|closing}

2019-04-01

1. python标准库-存储对象(pickle、cPickle)

1
2
3
4
5
6
7
8
9
10
11
12
13
Python运行时,对象存储在内存中,随时等待系统的调用。然而,内存里的数据会随着计算机关机和消失,如何将对象保存到文件,并储存在硬盘上呢?
计算机的内存中存储的是二进制的序列 (当然,在Linux眼中,是文本流)。我们可以直接将某个对象所对应位置的数据抓取下来,转换成文本流 (这个过程叫做serialize),然后将文本流存入到文件中。由于Python在创建对象时,要参考对象的类定义,所以当我们从文本中读取对象时,必须在手边要有该对象的类定义,才能懂得如何去重建这一对象。从文件读取时,对于Python的内建(built-in)对象 (比如说整数、词典、表等等),由于其类定义已经载入内存,所以不需要我们再在程序中定义类。但对于用户自行定义的对象,就必须要先定义类,然后才能从文件中载入对象。

import pickle
# 1) 将内存中的对象转换成为文本流(序列化):
pickle.dumps() -- 对象转换为字符串,接着存储文本文件
pickle.dump() -- 可同时完成上述两步操作
# 2) 重建对象(反序列化):
pickle.load()
pickle.loads()

cPickle包的功能和用法与pickle包几乎完全相同,不同在于cPickle是基于c语言编写的,速度是pickle包的1000倍。
import cPickle as pickle

2. Ansible模块巩固

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
1)主机连通性测试
ansible web -m ping

2)command 模块
直接在远程主机上执行命令,并将结果返回本主机。
ansible web -m command -a 'ss -ntl'

3)shell 模块
在远程主机上调用shell解释器运行命令
ansible web -m shell -a 'cat /etc/passwd |grep "fdfs"'

4)copy 模块
用于将文件复制到远程主机,同时支持给定内容生成文件和修改权限等。
ansible web -m copy -a 'src=~/hello dest=/data/hello'

5)file 模块
主要用于设置文件的属性,比如创建文件、创建链接文件、删除文件等。
ansible web -m file -a 'path=/data/app state=directory'

6)fetch 模块
用于从远程某主机获取(复制)文件到本地。
ansible web -m fetch -a 'src=/data/hello dest=/data'

7)cron 模块
用于管理cron计划任务的。其使用的语法跟我们的crontab文件中的语法一致。
ansible web -m cron -a 'name="ntp update every 5 min" minute=*/5 job="/sbin/ntpdate 172.17.0.1 &> /dev/null"'

8)yum 模块
用于软件的安装。
ansible web -m yum -a 'name=htop state=present'

9)service 模块
用于服务程序的管理。
ansible web -m service -a 'name=nginx state=started enabled=true'

10)user 模块
用来管理用户账号。
ansible web -m user -a 'name=fdfs uid=11111'

11)group 模块
用于添加或删除组。
ansible web -m group -a 'name=ops gid=12222'

12)script 模块
用于将本机的脚本在被管理端的机器上运行。
ansible web -m script -a '/tmp/df.sh'

13)setup 模块
用于收集信息,是通过调用facts组件来实现的。
facts组件是Ansible用于采集被管机器设备信息的一个功能,我们可以使用setup模块查机器的所有facts信息,可以使用filter来查看指定信息。整个facts信息被包装在一个JSON格式的数据结构中,ansible_facts是最上层的值。
facts就是变量,内建变量 。每个主机的各种信息,cpu颗数、内存大小等。会存在facts中的某个变量中。调用后返回很多对应主机的信息,在后面的操作中可以根据不同的信息来做不同的操作。
ansible web -m setup -a 'filter="*mem*"'

3. 磁盘分区

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
#!/bin/bash
disk=`fdisk -l | grep "Disk /dev/sd[a-z]"`
for i in `ls /dev/[sh]d[a-z]`;do
echo $i
done
diskpart() {
dd if=/dev/zero of=/dev/$chof bs=600 count=1
echo 'n
p
1
+512M
n
p
2
+512M
n
p
3
+2G
t
2
82
w
' | fdisk $chof
}
Mount() {
num=`grep "$chof" /etc/mtab | wc -l`
for k in `seq $[$num+1]` ;do
fuser -km $chof$k
umount $chof$k
done
}
while true ;do
read -p "Please Choose a Disk :" chof
case $chof in
/dev/[sh]d[a-z])
[ -e $chof ] && break || continue ;;
quit)
exit 5;;
*)
continue;;
esac
done
fdisk -l $chof
while true; do
cat << EOF
##############################################
# this will distory all your data!! #
# BE CAREFUL!! #
# yes|y) continue #
# no|no ) stop #
##############################################
EOF
read -p "Enter Your Choice {yes|no}: " chos
case $chos in
yes|y)
Mount
diskpart
break ;;
no|n)
exit 3 ;;
*)
echo "You must give a choice"
continue ;;
esac
done
[ ! -d /mnt/boot ] && mkdir /mnt/boot
[ ! -d /mnt/sysroot ] && mkdir /mnt/sysroot
for j in {1..3};do
if [ $j -eq 1 ]; then
mke2fs -t ext4 $chof$j
mount $chof$j /mnt/boot
elif [ $j -eq 2 ]; then
mkswap $chof$j
else
mke2fs -t ext4 $chof$j
mount $chof$j /mnt/sysroot
fi
done
echo "partision successfully"