0%

打包压缩

压缩打包

​ windows下我们接触最多的压缩文件就是.rar格式, 但Linux有自己所特有的压缩工具。
​ 如果希望windows和Linux互相能使用的压缩工具, 建议.zip格式

1
2
3
4
5
6
7
8
9
10
11
压缩打包的优点:
1节省磁盘空间占用率
2节省网络传输带宽消耗
3网络传输更加快捷

格式 压缩工具
.zip zip压缩工具
.gz gzip压缩工具,只能压缩文件,会删除源文件(通常配合tar使用)
.bz2 bzip2压缩工具,只能压缩文件,会删除源文件(通常配合tar使用)
.tar.gz 先使用tar命令归档打包,然后使用gzip压缩
.tar.bz2 先使用tar命令归档打包,然后使用bzip压缩

gzip压缩工具

1
2
3
4
5
6
7
8
gzip打包会删除源文件
#压缩
[root@oldboyedu ~]# gzip file1
#解压
[root@oldboyedu ~]# gzip -d file1.gz
#不需要解压,查看文件内容
[root@oldboyedu ~]# zcat file1.gz
123

zip压缩工具

1
2
3
4
5
6
7
8
9
10
11
-r:递归压缩

#压缩
[root@oldboyedu ~]# zip zls.zip file1
#解压
[root@oldboyedu ~]# unzip zls.zip
Archive: zls.zip
replace file1? [y]es, [n]o, [A]ll, [N]one, [r]ename:
替换 不替换 替换所有 啥也不做 改名
#压缩目录
[root@oldboyedu tmp]# zip -r tmp_dir2.zip /tmp/
注意:
1.压缩不会删除源文件
2.解压不会删除压缩文件
3.解压开会覆盖源文件内容

3.tar压缩工具

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#语法:tar [-zjxcvfP] filename 
c //创建新的归档文件
x //对归档文件解包
t //列出归档文件里的文件列表
v //输出命令的归档或解包的过程
f //指定包文件名,多参数f写最后
C //指定解压目录位置
z //使用gzip压缩归档后的文件(.tar.gz)
j //使用bzip2压缩归档后的文件(.tar.bz2)
J //使用xz压缩归档后的文件(tar.xz)
X //排除多个文件(写入需要排除的文件名称)
h //打包软链接
P //连带绝对路径打包
--hard-dereference //打包硬链接
--exclude //在打包的时候写入需要排除文件或目录
1
2
3
4
5
6
7
8
9
#打包压缩
[root@oldboyedu ~]# tar zcf zls2.tar.gz /etc
行李箱(包名) 包文件名

#查看打包内容
[root@oldboyedu ~]# tar tf zls1.tar.gz

#解压
[root@oldboyedu ~]# tar xf zls1.tar.gz
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
注意:
1.不要使用绝对路径
如果非要打包绝对路径:[root@oldboyedu ~]# tar zcfP b.sh.tar.gz /usr/local/nginx/a.sh
解压的时候:[root@oldboyedu ~]# tar xfP b.sh.tar.gz
2.tar 打包可以接多个文件f
[root@oldboyedu ~]# tar zcf abc1.tar.gz 1.txt 2.txt 3.txt
格式 压缩工具
.zip zip压缩工具
zip -r dir.zip dirname
zip file.zip filename

.gz gzip压缩工具,只能压缩文件,会删除源文件(通常配合tar使用)
gzip filename

.bz2 bzip2压缩工具,只能压缩文件,会删除源文件(通常配合tar使用)

.tar.gz 先使用tar命令归档打包,然后使用gzip压缩
tar zcf dirname.tar.gz dirname

.tar.bz2 先使用tar命令归档打包,然后使用bzip压缩
tar cjf dirname.tar.bz2 dirname

.tar.xz
tar cJf dirname.tar.xz dirname

//常用打包与压缩组合
czf //打包tar.gz格式
cjf //打包tar.bz格式
cJf //打包tar.xz格式

xf //自动选择解压模式
tf //查看压缩包内容

不想打包 的文件

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

[root@oldboyedu /]# tar zcf etc3.tar.gz --exclude=Makefile etc
[root@oldboyedu /]# cat a.txt
etc/latrace.d/headers/
etc/latrace.d/headers/ctype.h
etc/latrace.d/headers/dirent.h
etc/latrace.d/headers/dlfcn.h
etc/latrace.d/headers/fcntl.h
etc/latrace.d/headers/getopt.h
etc/latrace.d/headers/inet.h
etc/latrace.d/headers/ioctl.h
etc/latrace.d/headers/latrace.h
etc/latrace.d/headers/libintl.h
etc/latrace.d/headers/libio.h
etc/latrace.d/headers/locale.h
etc/latrace.d/headers/misc.h
etc/latrace.d/headers/mman.h
etc/latrace.d/headers/ncurses.h
etc/latrace.d/headers/netdb.h
etc/latrace.d/headers/pthread.h
etc/latrace.d/headers/pwd.h
etc/latrace.d/headers/resource.h
etc/latrace.d/headers/signal.h
etc/latrace.d/headers/socket.h
etc/latrace.d/headers/stat.h
etc/latrace.d/headers/stdio.h
etc/latrace.d/headers/stdlib.h
etc/latrace.d/headers/string.h
etc/latrace.d/headers/sysdeps/
etc/latrace.d/headers/sysdeps/x86_64/
etc/latrace.d/headers/sysdeps/x86_64/latrace.h
etc/latrace.d/headers/sysdeps/x86_64/syscall.h
etc/latrace.d/headers/syslog.h
etc/latrace.d/headers/term.h
etc/latrace.d/headers/termios.h
etc/latrace.d/headers/time.h
etc/latrace.d/headers/typedefs.h
etc/latrace.d/headers/unistd.h
etc/latrace.d/headers/utmp.h
etc/latrace.d/headers/wait.h
etc/latrace.d/latrace.conf

[root@oldboyedu /]# tar zcfX etc4.tar.gz a.txt etc

#指定解压路径
[root@oldboyedu ~]# tar xf abc1.tar.gz -C /opt/

定时任务

定时任务:

​ crond就是计划任务,类似于我们平时生活中的闹钟,定点执行。

企业需求:定时任务crond

​ 1.做备份
​ 2.做巡检
​ 3.日志切割
​ 4.临时文件清理
​ 5.定时向互联网同步时间

定时任务:crond
命令:crontab

定时任务的配置文件:

1
2
3
4
5
[root@uegame ~]# vim /etc/crontab

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root

命令练习

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
#每天的凌晨2点执行ls命令
00 02 * * * ls

#每月的1号的凌晨2点执行ls命令
00 02 1 * * ls

#每年的2月14日凌晨2点执行ls命令
00 02 14 2 * ls

#每周日的凌晨2点执行ls命令
00 02 * * 7 ls

#每年的6月份里面的每个周五凌晨2点执行ls命令
00 02 * 6 5 ls

#每个月的14号,但凡是一个周日,凌晨2点就执行ls
00 02 14 * 7 ls

#如果2月14号是周日就在凌晨的2点执行 ls命令
00 02 14 2 7 ls

#每天的凌晨2点,每隔10分钟执行一次ls命令
*/10 02 * * * ls

#每年的2月14日凌晨00点执行ls命令
00 00 14 2 * ls

#每隔5分钟执行一次ls命令
*/5 * * * * ls
*/5 * * * * /usr/sbin/ntpdate ntp.aliyun.com &>/dev/null

#每年的1月5月8月的每天的凌晨2点执行ls命令
00 02 * 1,5,8 * ls

#每月的1号到8号凌晨2点执行ls命令
00 02 1-8 * * ls

#每天的21点执行ls命令
0 21 * * * ls

#每月的1号,10号,22号,的4点45分执行ls命令
45 4 1,10,22 * * ls

#每个月的1号到10号的4点45分执行ls命令
45 4 1-10 * * ls

#每个月的每隔2天的8点03分,8点15分 9 10 11点 3分 15分
3,15 8-11 */2 * * ls

#每天7到23点每隔一小时执行一次ls
0 7-23/1 * * * ls

#每周一到周五的晚上21点15分执行ls命令
15 21 * * 1-5 ls

crontab:

​ -l:查看定时任务 list
​ -e:编辑定时任务
​ -u:指定用户
​ -r:删除所有定时任务

1.每天的下午3,5点,每隔半小时执行一次sync命令
#每天的下午3,5点,每隔半小时执行一次sync命令 By:zls
*/30 15,17 * * * /usr/bin/sync &>/dev/null

2.每天凌晨3点做一次etc目录的备份,打包,备份到/backup目录下
需求:将备份命令写入一个脚本中

任务:
1.每天备份文件名要求格式:2018-02-20_hostname_etc.tar.gz
2.存放备份内容的目录要求只保留3天的数据
3.在执行计划任务时,不要输出任务信息

crontab注意事项:
1) 给定时任务注释
2) 将需要定期执行的任务写入Shell脚本中,避免直接使用命令无法执行的情况tar date
3) 定时任务的结尾一定要有&>/dev/null或者将结果追加重定向>>/tmp/date.log文件
4) 注意有些命令是无法成功执行的 echo “123” >>/tmp/test.log &>/dev/null
5)如果一定要是用命令,命令必须使用绝对路径

计划任务如何调试
1.crond调试

1
2
3
4
1) 调整任务每分钟执行的频率, 以便做后续的调试。
2) 如果使用cron运行脚本,请将脚本执行的结果写入指定日志文件, 观察日志内容是否正常。
3) 命令使用绝对路径, 防止无法找到命令导致定时任务执行产生故障。
4) 通过查看/var/log/cron日志,以便检查我们执行的结果,方便进行调试。

2.crond编写思路

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
1.手动执行命令,然后保留执行成功的结果。
2.编写脚本
脚本需要统一路径/scripts
脚本内容复制执行成功的命令(减少每个环节出错几率)
脚本内容尽可能的优化, 使用一些变量或使用简单的判断语句
脚本执行的输出信息可以重定向至其他位置保留或写入/dev/null
3.执行脚本
使用bash命令执行, 防止脚本没有增加执行权限(/usr/bin/bash)
执行脚本成功后,复制该执行的命令,以便写入cron
4.编写计划任务
加上必要的注释信息, 人、时间、任务
设定计划任务执行的周期
粘贴执行脚本的命令(不要手敲)
5.调试计划任务
增加任务频率测试
检查环境变量问题
检查crond服务日志 /var/log/cron

动静分离

$http_user_agent
手机

1
2
iphone
andriod

电脑

1
2
3
4
5
6
7
8
9
Nginx Rewrite
rewrite url替换 rewrite 正则 真实的文件 flag
return http->https return 状态码 跳转后的地址(可以使用变量)
301 permanent
302 redirect
rewrite ^(.*)$ https://$server_name$1 redirect;
return 302 https://$server_name$request_uri;
break
last:

Https证书的类型

​ DV
​ OV
​ EV

HTTPS证书购买选择

保护1个域名 www
保护5个域名 www images cdn test m
通配符域名 *.oldboy.com

HTTPS注意事项

Https不支持续费,证书到期需重新申请新并进行替换.
Https不支持三级域名解析, 如test.m.oldboy.com

Https显示绿色, 说明整个网站的url都是https的。
Https显示黄色, 因为网站代码中包含http的不安全连接。
Https显示红色, 要么证书是假的,要么证书过期。

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
#nginx必须有ssl模块
[root@Nginx ~]# nginx -V
--with-http_ssl_module

#创建存放ssl证书的路径
[root@Nginx ~]# mkdir -p /etc/nginx/ssl_key
[root@Nginx ~]# cd /etc/nginx/ssl_key

生成证书
openssl genrsa -idea -out server.key 2048
openssl req -days 36500 -x509 \
-sha256 -nodes -newkey rsa:2048 -keyout server.key -out server.crt

配置nginx
[root@Nginx ~]# cat /etc/nginx/conf.d/ssl.conf
server {
listen 443;
server_name s.oldboy.com;
ssl on;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
root /code;
index index.html;
}
}

#准备对应的站点目录, 并重启Nginx服务
[root@Nginx ~]# mkdir -p /code
[root@Nginx ~]# echo "Https" > /code/index.html
[root@Nginx ~]# systemctl restart nginx

如果希望http的流量全部导入到https上
[root@web01 conf.d]# vim s.oldboy.conf
server {
listen 443;
server_name s.oldboy.com;
root /code;
ssl on;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
index index.html;
}
}
server {
listen 80;
server_name s.oldboy.com;
return 302 https://$server_name$request_uri;
}

1.配置2台web服务器都监听在80端口
2.配置负载均衡,也监听在80端口,进行访问网站测试。
3.在负载均衡器上管理我们的ssl证书。

fastcgi_params HTTPS on; 参数是添加在后端的web上。

负载均衡器的配置

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
[root@lb01 conf.d]# cat proxy_oldboy.com.conf 
upstream node {
server 10.0.0.7:80;
server 10.0.0.8:80;
}

server {
listen 80;
server_name blog.oldboy.com;
return 302 https://$server_name$request_uri;
}

server {
listen 443;
server_name blog.oldboy.com;
ssl on;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass http://node;
include proxy_params;
}
}

server {
listen 80;
server_name zh.oldboy.com;
return 302 https://$server_name$request_uri;
}
server {
listen 443;
server_name zh.oldboy.com;
ssl on;
ssl_certificate ssl_key/server.crt;
ssl_certificate_key ssl_key/server.key;
location / {
proxy_pass http://node;
include proxy_params;
}
}

后端web的配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@web01 conf.d]# cat blog.oldboy.com.conf 
server {
listen 80;
server_name blog.oldboy.com;
root /code/wordpress;
client_max_body_size 100m;

location / {
index index.php index.html;
}

location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTPS on;
include fastcgi_params;
}

}

ssl_session_cache shared:SSL:10m; #在建立完ssl握手后如果断开连接,在session_timeout时间内再次连接,是不需要在次建立握手,可以复用之前的连接

1
2
3
4
ssl_session_timeout 1440m;           #ssl连接断开后的超时时间
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #使用的TLS版本协议
ssl_prefer_server_ciphers on; #Nginx决定使用哪些协议与浏览器进行通讯
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4; #加密套件

公网单台服务器配置https

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
server {
listen 443;
server_name blog.lingxiao998.com;
root /code/wordpress;
client_max_body_size 100m;
ssl on;
ssl_certificate ssl_key/1775624_blog.lingxiao998.com.pem;
ssl_certificate_key ssl_key/1775624_blog.lingxiao998.com.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 1440m;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
}

server {
listen 80;
server_name blog.lingxiao998.com;
return 302 https://$server_name$request_uri;
}

三剑客(四个文本处理工具)

Awk、Sed、Grep、Find。

Grep 文本过滤,会给过滤出来的内容加上颜色。

centos6需要自己设置别名,centos7不需要

选项:
-n #给过滤出来的内容加上当前内容所在的行号。
-v #取反,排除
-E #支持扩展正则使用
-i #忽略大小写
-o #只显示匹配的内容
-w #只匹配关键字(一整串的字符串)
-c #统计过滤出来的内容行数
-A #显示匹配内容的向下的行数
-B #向上匹配
-C #上下匹配
-r #递归过滤
-R #递归过滤

#-n选项
[root@oldboyedu ~]# grep -n ‘root’ passwd
1:root​:​x:​0:0:root:/root:/bin/bash
10:operator:x:11:0:operator:/root:/sbin/nologin

#-i选项
[root@oldboyedu ~]# echo Root >> passwd
[root@oldboyedu ~]# grep ‘root’ passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@oldboyedu ~]# grep -i ‘root’ passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
Root

#-v选项
[root@oldboyedu ~]# grep -v ‘/sbin/nologin’ passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
Root

#-w
[root@oldboyedu ~]# echo roott >>passwd
[root@oldboyedu ~]# grep ‘root’ passwd |wc -l
3
[root@oldboyedu ~]# grep ‘root’ passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
roott
[root@oldboyedu ~]# grep -w ‘root’ passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin

#-c选项
[root@oldboyedu ~]# grep -c ‘root’ passwd
3
[root@oldboyedu ~]# grep -c ‘root’ passwd |wc -l
1
[root@oldboyedu ~]# grep ‘root’ passwd |wc -l
3
[root@oldboyedu ~]# grep -c ‘.’ passwd
38
[root@oldboyedu ~]# wc -l passwd
38 passwd

[root@oldboyedu ~]# grep -R ‘root’ ./
./.bash_history:cd /root/nginx-1.16.0
./.bash_history:fpm -s dir -t rpm -v 1.16.0 -n nginx -d ‘pcre-devel,openssl-devel,zlib-devel’ –post-install /root/nginx.sh -f /app/nginx.1.16.0/
./.bash_history:fpm -s dir -t rpm -v 1.16.0 -n nginx -d ‘pcre-devel,openssl-devel,zlib-devel’ –post-install /root/nginx.sh -f /app/nginx.1.16.0/
./.bash_history:mv /root/nginx-1.16.0-1.x86_64.rpm .
./.bash_history:top -d 1 -u root
./.bash_history:pgrep -u root
./.bash_history:pgrep -u -l root
./.bash_history:pgrep -l -u root
./.bash_history:top -d 1 -u root
./.bash_history:wget [root@oldboyedu ~]# kill 9461
./.bash_history:mkpasswd -l 20 |passwd –stdin root
Binary file ./.gem/specs/mirrors.huaweicloud.com%443/repository/rubygems/specs.4.8 matches
Binary file ./.gem/specs/mirrors.huaweicloud.com%443/repository/rubygems/latest_specs.4.8 matches
Binary file ./.file2.swp matches
Binary file ./sysstat-11.7.3-1.x86_64.rpm matches
./1111/test.txt:root:x:0:0:root:/root:/bin/bash
./1111/test.txt:operator:x:11:0:operator:/root:/sbin/nologin
./1111/test.txt:roott
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott
[root@oldboyedu ~]# grep -r ‘root’ ./
./.bash_history:cd /root/nginx-1.16.0
./.bash_history:fpm -s dir -t rpm -v 1.16.0 -n nginx -d ‘pcre-devel,openssl-devel,zlib-devel’ –post-install /root/nginx.sh -f /app/nginx.1.16.0/
./.bash_history:fpm -s dir -t rpm -v 1.16.0 -n nginx -d ‘pcre-devel,openssl-devel,zlib-devel’ –post-install /root/nginx.sh -f /app/nginx.1.16.0/
./.bash_history:mv /root/nginx-1.16.0-1.x86_64.rpm .
./.bash_history:top -d 1 -u root
./.bash_history:pgrep -u root
./.bash_history:pgrep -u -l root
./.bash_history:pgrep -l -u root
./.bash_history:top -d 1 -u root
./.bash_history:wget [root@oldboyedu ~]# kill 9461
./.bash_history:mkpasswd -l 20 |passwd –stdin root
Binary file ./.gem/specs/mirrors.huaweicloud.com%443/repository/rubygems/specs.4.8 matches
Binary file ./.gem/specs/mirrors.huaweicloud.com%443/repository/rubygems/latest_specs.4.8 matches
Binary file ./.file2.swp matches
Binary file ./sysstat-11.7.3-1.x86_64.rpm matches
./1111/test.txt:root:x:0:0:root:/root:/bin/bash
./1111/test.txt:operator:x:11:0:operator:/root:/sbin/nologin
./1111/test.txt:roott
./passwd:root:x:0:0:root:/root:/bin/bash
./passwd:operator:x:11:0:operator:/root:/sbin/nologin
./passwd:roott

#-A
[root@oldboyedu ~]# grep -n ‘.’ passwd
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
21:nginx:x:998:996:Nginx web server:/var/lib/nginx:/sbin/nologin
22:redis:x:997:995:Redis Database Server:/var/lib/redis:/sbin/nologin
23:ntp:x:38:38::/etc/ntp:/sbin/nologin
24:rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
25:rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
26:nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin
27:oldgirl1:x:1010:1010::/home/oldgirl1:/sbin/nologin
28:oldgirl2:x:1011:1011::/home/oldgirl2:/sbin/nologin
29:oldgirl3:x:1012:1012::/home/oldgirl3:/sbin/nologin
30:oldgirl4:x:1013:1013::/home/oldgirl4:/sbin/nologin
31:oldgirl5:x:1014:1014::/home/oldgirl5:/sbin/nologin
32:oldgirl6:x:1015:1015::/home/oldgirl6:/sbin/nologin
33:oldgirl7:x:1016:1016::/home/oldgirl7:/sbin/nologin
34:oldgirl8:x:1017:1017::/home/oldgirl8:/sbin/nologin
35:oldgirl9:x:1018:1018::/home/oldgirl9:/sbin/nologin
36:oldgirl10:x:1019:1019::/home/oldgirl10:/sbin/nologin
37:Root
38:roott
[root@oldboyedu ~]# grep -n ‘.’ passwd |grep -w ‘11’
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
[root@oldboyedu ~]# grep -n ‘.’ passwd |grep -w ‘^11’
11:games:x:12:100:games:/usr/games:/sbin/nologin
[root@oldboyedu ~]# grep -n ‘.’ passwd |grep -wA9 ‘^11’
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin

#-B选项
[root@oldboyedu ~]# grep -n ‘.’ passwd |grep -w ‘^20’
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@oldboyedu ~]# grep -n ‘.’ passwd |grep -wB 9 ‘^20’
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin

#-C选项
[root@oldboyedu ~]# grep -n ‘.’ passwd |grep -Ew ‘^15|16’
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
[root@oldboyedu ~]# grep -n ‘.’ passwd |grep -Ew ‘^15|^16’
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
[root@oldboyedu ~]# grep -n ‘.’ passwd |grep -EwC4 ‘^15|^16’
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@oldboyedu ~]# grep -n ‘.’ passwd |grep -EwC4 ‘^1[56]’
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
[root@oldboyedu ~]# grep -n ‘.’ /etc/passwd |grep -EwC4 ‘^1[56]’
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
15:dbus:x:81:81:System message bus:/:/sbin/nologin
16:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
17:tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
18:abrt:x:173:173::/etc/abrt:/sbin/nologin
19:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
20:postfix:x:89:89::/var/spool/postfix:/sbin/nologin

正则:
^
[root@oldboyedu ~]# grep ‘^root’ passwd
root:x:0:0:root:/root:/bin/bash
roott
[root@oldboyedu ~]# grep ‘^r’ passwd
root:x:0:0:root:/root:/bin/bash
redis:x:997:995:Redis Database Server:/var/lib/redis:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
roott

$
[root@oldboyedu ~]# grep ‘h$’ passwd
root:x:0:0:root:/root:/bin/bash
[root@oldboyedu ~]# grep ‘bash$’ passwd
root:x:0:0:root:/root:/bin/bash

#空行
[root@oldboyedu ~]# grep -v ‘^$’ passwd
#里面空格和tab键
[root@oldboyedu ~]# grep -v ‘^\s*$’ passwd

[root@oldboyedu ~]# grep -n ‘^\s*$’ passwd

#.点匹配任意一个字符
[root@oldboyedu ~]# grep ‘.’ test.log
123
[root@oldboyedu ~]# grep -o ‘.’ test.log
1
2
3

#环境准备
cat>oldboy.txt<<EOF
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
EOF

\ 转义,取消特殊字符的特殊含义。

#只过滤以点为结尾的行
[root@oldboyedu ~]# grep ‘.$’ oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!
[root@oldboyedu ~]# grep ‘.$’ oldboy.txt
I teach linux.
not 4900000448.

#以m或者n开头的行

[] 表示多个字符串,会单个匹配[]里面的内容,[] [^] 的区别

| 或者

[root@oldboyedu ~]# grep ‘^[mn]’ oldboy.txt
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY
[root@oldboyedu ~]# grep ‘^m|^n’ oldboy.txt -E
my blog is http://oldboy.blog.51cto.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

[root@oldboyedu ~]# grep -v ‘^[mn]’ oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our size is http://blog.oldboyedu.com
[root@oldboyedu ~]# grep ‘^[^mn]’ oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
our size is http://blog.oldboyedu.com
[root@oldboyedu ~]# grep ‘[^mn]’ oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

*前面一个字符出现0次或0次以上

[root@oldboyedu ~]# grep -o ‘0’ oldboy.txt
0
0
0
0
0
0
0
0
[root@oldboyedu ~]# grep -o ‘0*’ oldboy.txt
000
00000

#.* 表示所有的意思
[root@oldboyedu ~]# grep -o ‘.*’ oldboy.txt
I am oldboy teacher!
I teach linux.
I like badminton ball ,billiard ball and chinese chess!
my blog is http://oldboy.blog.51cto.com
our size is http://blog.oldboyedu.com
my qq is 49000448
not 4900000448.
my god ,i am not oldbey,but OLDBOY!

cat>id.txt<<EOF
汤 610702199107053598
邹 371481199403259478
莫 52020319810613433X
韩 460106199111137270
荣 530124197504135438
荣 oldboy
荣 babygirl
荣 530124197504135438
阮 360702197902169951
翁 331002198504132813
任 6212231987082X5176
姜 370602198507189574
李A BBBCCC98507189574
赵B BBB602198507189574
霍 320904198403048179
EOF

#{n,m} 匹配其前面的字符至少n次,至多m次

[root@oldboyedu ~]# grep -E ‘[0-9]{17}[0-9X]{1}’ id.txt
汤 610702199107053598
邹 371481199403259478
莫 52020319810613433X
韩 460106199111137270
荣 530124197504135438
荣 530124197504135438
阮 360702197902169951
翁 331002198504132813
姜 370602198507189574
霍 320904198403048179
[root@oldboyedu ~]# grep -E -o ‘[0-9]{17}[0-9X]{1}’ id.txt
610702199107053598
371481199403259478
52020319810613433X
460106199111137270
530124197504135438
530124197504135438
360702197902169951
331002198504132813
370602198507189574
320904198403048179

#清理nginx配置文件
[root@oldboyedu ~]# grep -Ev ‘^\s*$|#’ /etc/nginx/nginx.conf.default >nginx.conf
[root@oldboyedu ~]# cat nginx.conf
worker_processes 1;
events {
worker_connections 1024;
}
http {
include mime.types;
default_type application/octet-stream;
sendfile on;
keepalive_timeout 65;
server {
listen 80;
server_name localhost;
location / {
root html;
index index.html index.htm;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}
}

#查看配置文件
[root@oldboyedu ~]# grep ‘^[a-Z]’ /etc/ssh/sshd_config
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
SyslogFacility AUTHPRIV
AuthorizedKeysFile .ssh/authorized_keys
PasswordAuthentication yes
ChallengeResponseAuthentication no
GSSAPIAuthentication no
GSSAPICleanupCredentials no
UsePAM yes
X11Forwarding yes
UseDNS no
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
Subsystem sftp /usr/libexec/openssh/sftp-server

[root@oldboyedu ~]# grep -Ev ‘^$|^#’ /etc/ssh/sshd_config

Sed 替换,取行。增删改查

选项:
-n #取消默认输出,p
-i #替换
-i.bak #先备份,在替换
-r #支持扩展正则使用
s #替换
g #全局
d #删除
p #打印
! #取反
a #追加
i #插入
$ #结尾的行

#取行。
#取单行
[root@oldboyedu ~]# sed -n ‘3p’ passwd
bin:x:1:1:bin:/bin:/sbin/nologin
#取连续的多行
[root@oldboyedu ~]# sed -n ‘5,10p’ passwd
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin

#取不连续的多行
[root@oldboyedu ~]# sed -n ‘5p;10p’ passwd
sync:x:5:0:sync:/sbin:/bin/sync
games:x:12:100:games:/usr/games:/sbin/nologin

#取反,删除。

#删除单行
[root@oldboyedu ~]# sed ‘2d’ passwd

#删除连续的多行
[root@oldboyedu ~]# sed ‘2,10d’ passwd

#删除不连续的多行
[root@oldboyedu ~]# sed ‘2d;10d’ passwd

#排除
[root@oldboyedu ~]# sed ‘2!p’ passwd

#环境准备
cat >sed.txt<<”EOF”
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
EOF

#过滤字符串
[root@oldboyedu ~]# sed -n ‘/yy/p’ sed.txt
104,$yy,CFO

#过滤多个
[root@oldboyedu ~]# sed -n ‘/oldboy/p ; /yy/p’ sed.txt
101,$oldboy,CEO
104,$yy,CF
[root@oldboyedu ~]# sed -nr ‘/oldboy|yy/p’ sed.txt
101,$oldboy,CEO
104,$yy,CFO

[root@oldboyedu ~]# sed -n ‘/oldboy/p;/yy/p’ sed.txt
101,$oldboy,CEO
104,$yy,CFO

#过滤多个连续的字符串
[root@oldboyedu ~]# sed -n ‘/oldboy/,/yy/p’ sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO

#增

a i

#在第三行后面追加内容
[root@oldboyedu ~]# sed ‘3aoldboy’ sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
oldboy
104,$yy,CFO
105,$feixue,CIO

#在第四行的上面插入内容
[root@oldboyedu ~]# sed ‘4ioldboy’ sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
oldboy
104,$yy,CFO
105,$feixue,CIO

#插入多行
[root@oldboyedu ~]# sed ‘4ioldboy\noldgirl’ sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
oldboy
oldgirl
104,$yy,CFO
105,$feixue,CIO

#追加多行
[root@oldboyedu ~]# sed ‘3aoldboy\noldgirl’ sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
oldboy
oldgirl
104,$yy,CFO
105,$feixue,CIO

#在结尾追加内容
[root@oldboyedu ~]# sed ‘$aoldboy’ sed.txt
101,$oldboy,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
oldboy

#改

#全局
[root@oldboyedu ~]# sed ‘s#oldboy#jinke#g’ sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
[root@oldboyedu ~]# sed -i.org ‘s#oldboy#jinke#g’ sed.txt

[root@oldboyedu ~]# sed ‘s#^SELINUX=.*#SELINUX=disabled#g’ /etc/sysconfig/selinux

#c 原位置替换
[root@oldboyedu ~]# sed ‘/^SELINUX=/c SELINUX=enforcing’ /etc/sysconfig/selinux

#第一行到第五行的root替换
[root@oldboyedu ~]# sed ‘1,5s#root#oldboy#g’ passwd

#替换第一行的root
[root@oldboyedu ~]# sed ‘1s#root#oldboy#g’ passwd

#替换特殊字符使用转义
[root@oldboyedu ~]# sed ‘s#$#%#g’ sed.txt
101,$jinke,CEO%
102,$zhangyao,CTO%
103,$Alex,COO%
104,$yy,CFO%
105,$feixue,CIO%
[root@oldboyedu ~]# sed ‘s#$#%#g’ sed.txt
101,%jinke,CEO
102,%zhangyao,CTO
103,%Alex,COO
104,%yy,CFO
105,%feixue,CIO

[root@oldboyedu ~]# sed ‘s//sbin/nologin/oldboy/g’ passwd

#后向引用
[root@oldboyedu ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:1d:ca:3a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::80b2:dc89:7adf:c7b1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@oldboyedu ~]# ip a s eth0 | sed -n ‘3p’
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
[root@oldboyedu ~]# ip a s eth0 | sed -n ‘3p’ |sed -r ‘s#.t (.)/.#\1#g’
10.0.0.150
[root@oldboyedu ~]# ip a s eth0 |sed -nr ‘3s#.*t (.
)/.*#\1#gp’
10.0.0.150

[root@oldboyedu ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.150 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::80b2:dc89:7adf:c7b1 prefixlen 64 scopeid 0x20
ether 00:0c:29:1d:ca:3a txqueuelen 1000 (Ethernet)
RX packets 20849 bytes 1902050 (1.8 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 15800 bytes 2443358 (2.3 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@oldboyedu ~]# ifconfig eth0 |sed -n ‘2p’
inet 10.0.0.150 netmask 255.255.255.0 broadcast 10.0.0.255
[root@oldboyedu ~]# ifconfig eth0 |sed -nr ‘2s#.t (.)#\1#gp’
10.0.0.255
[root@oldboyedu ~]# ifconfig eth0 |sed -nr ‘2s#.t (.) n.*#\1#gp’
10.0.0.150

[root@oldboyedu ~]# stat sed.txt
File: ‘sed.txt’
Size: 75 Blocks: 8 IO Block: 4096 regular file
Device: 803h/2051d Inode: 67160646 Links: 1
Access: (0644/-rw-r–r–) Uid: ( 0/ root) Gid: ( 0/ root)
Access: 2019-07-25 11:34:50.285127299 +0800
Modify: 2019-07-25 11:34:29.851127028 +0800
Change: 2019-07-25 11:34:29.851127028 +0800
Birth: -

cat>/root/hostname_ip.sh<<”EOF”
#!/usr/bin/sh
source /etc/init.d/functions
if [ $# -ne 2 ];then
echo “/bin/sh $0 hostname PartIP”
exit 1
fi
hostnamectl set-hostname $1
if [ $? -eq 0 ];then
action “hostname update Successful!” /bin/true
else
action “hostname update Failed!” /bin/false
fi
Ip=$(ip a s eth0 |awk -F ‘[./]’ ‘NR==3{print $4}’)
sed -i “s#$Ip#$2#g” /etc/sysconfig/network-scripts/ifcfg-eth[01]
if [ $? -eq 0 ];then
action “IP update Successful!” /bin/true
else
action “IP update Failed!” /bin/false
fi
systemctl restart network
bash
EOF

Awk #取列,计算,统计。数组。

选项:
-F FS #输入分隔符,默认是空格
-v #配合输出分隔符使用
OFS #输出分隔符
BEGIN END
$n #某列
NR #行号
$0 #完整内容
$NF #最后一列
i++ #计算次数
i=i+$N #计算和

#取行

[root@oldboy ~]# awk ‘NR==3’ sed.txt
103,$Alex,COO
[root@oldboy ~]# awk ‘NR==1,NR==3’ sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO
[root@oldboy ~]# awk ‘NR==1;NR==3’ sed.txt
101,$jinke,CEO
103,$Alex,COO
[root@oldboy ~]# awk ‘NR>1 && NR<3’ sed.txt
102,$zhangyao,CTO
[root@oldboy ~]# awk ‘NR>=1 && NR<=3’ sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO

#过滤

[root@oldboy ~]# awk ‘/jinke/‘ sed.txt
101,$jinke,CEO
[root@oldboy ~]# awk ‘!/jinke/‘ sed.txt
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO
105,$feixue,CIO
[root@oldboy ~]# awk ‘/jinke|yy/‘ sed.txt
101,$jinke,CEO
104,$yy,CFO
[root@oldboy ~]# awk ‘/jinke/;/yy/‘ sed.txt
101,$jinke,CEO
104,$yy,CFO
[root@oldboy ~]# awk ‘/jinke/,/yy/‘ sed.txt
101,$jinke,CEO
102,$zhangyao,CTO
103,$Alex,COO
104,$yy,CFO

#取列

[root@oldboy ~]# awk -F ‘[,]’ ‘{print $3}’ sed.txt
CEO
CTO
COO
CFO
CIO

#环境准备
cat >>reg.txt<<EOF
Zhang Dandan 41117397 :250:100:175
Zhang Xiaoyu 390320151 :155:90:201
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Wang Xiaoai 3515064655 :50:95:135
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175
EOF

#根据列进行匹配

#第三列以3开头的行
[root@oldboy ]# awk ‘$3/^3/‘ reg.txt
Zhang Xiaoyu 390320151 :155:90:201
Wang Xiaoai 3515064655 :50:95:135

#取反
[root@oldboy ]# awk ‘$3!/^3/‘ reg.txt
Zhang Dandan 41117397 :250:100:175
Meng Feixue 80042789 :250:60:50
Wu Waiwai 70271111 :250:80:75
Liu Bingbing 41117483 :250:100:175
Zi Gege 1986787350 :250:168:200
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175

#第三列以1或5为结尾的行
[root@oldboy ]# awk ‘$3/[15]$/‘ reg.txt
Zhang Xiaoyu 390320151 :155:90:201
Wu Waiwai 70271111 :250:80:75
Wang Xiaoai 3515064655 :50:95:135
Li Youjiu 918391635 :175:75:300
Lao Nanhai 918391635 :250:100:175

#显示姓zhang的人第二次的捐款金额
[root@oldboy ~]# awk -F ‘[ :]’ ‘/^Zhang/{print $1,$2,$6}’ reg.txt
Zhang Dandan 100
Zhang Xiaoyu 90

显示Xiaoyu的捐款.每个值时都有以$开头.如$520$200$135
[root@oldboy ~]# awk ‘/Xiaoyu/{print $4}’ reg.txt |tr ‘:’ ‘$’
$155$90$201

[root@oldboy ~]# awk ‘/Xiaoyu/{print $4}’ reg.txt |sed ‘s#:#$#g’
$155$90$201

[root@oldboy ~]# awk ‘/Xiaoyu/{print $4}’ reg.txt |sed ‘s#:#$#g’
$155$90$201

[root@oldboy ~]# awk -F ‘[ :]’ ‘/Xiaoyu/{print “$”$5”$”$6”$”$7}’ reg.txt
$155$90$201

[root@oldboy ~]# awk -F ‘[ :]’ -vOFS=’$’ ‘/Xiaoyu/{print “$”$5,$6,$7}’ reg.txt
$155$90$201

显示所有人的全名,以姓,名的格式显示,如Meng,Feixue
[root@oldboy ~]# awk ‘{print $1”,”$2}’ reg.txt
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai
[root@oldboy ~]# awk -vOFS=’,’ ‘{print $1,$2}’ reg.txt
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai

[root@oldboy ~]# awk ‘{print $1,$2}’ reg.txt |tr ‘ ‘ ‘,’
Zhang,Dandan
Zhang,Xiaoyu
Meng,Feixue
Wu,Waiwai
Liu,Bingbing
Wang,Xiaoai
Zi,Gege
Li,Youjiu
Lao,Nanhai

#取ip地址
[root@oldboy ~]# ifconfig eth0
eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 10.0.0.150 netmask 255.255.255.0 broadcast 10.0.0.255
inet6 fe80::80b2:dc89:7adf:c7b1 prefixlen 64 scopeid 0x20
ether 00:0c:29:1d:ca:3a txqueuelen 1000 (Ethernet)
RX packets 25397 bytes 2315305 (2.2 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 19057 bytes 2801352 (2.6 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0

[root@oldboy ~]# ifconfig eth0 |awk ‘NR==2{print $2}’
10.0.0.150
[root@oldboy ~]# ip a s eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:0c:29:1d:ca:3a brd ff:ff:ff:ff:ff:ff
inet 10.0.0.150/24 brd 10.0.0.255 scope global noprefixroute eth0
valid_lft forever preferred_lft forever
inet6 fe80::80b2:dc89:7adf:c7b1/64 scope link noprefixroute
valid_lft forever preferred_lft forever
[root@oldboy ~]# ip a s eth0 |awk -F ‘[ /]*’ ‘NR==3{print $3}’
10.0.0.150

#排除空行
[root@oldboy ~]# awk ‘!/^[ \t]$/‘ file1
lhlgsd
fdssgdgs
gsdgd
[root@oldboy ~]# awk ‘!/^\s
$/‘ file1
lhlgsd
fdssgdgs
gsdgd

[root@oldboy ~]# awk ‘/^r/‘ passwd
root:x:0:0:root:/root:/bin/bash
redis:x:997:995:Redis Database Server:/var/lib/redis:/sbin/nologin
rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin
rpcuser:x:29:29:RPC Service User:/var/lib/nfs:/sbin/nologin
roott
[root@oldboy ~]# awk ‘/h$/‘ passwd
root:x:0:0:root:/root:/bin/bash

#计算
[root@oldboy ~]# cat test.log
10 20
[root@oldboy ~]# awk ‘{print $2/$1}’ test.log
2
[root@oldboy ~]# awk ‘{print $2+$1}’ test.log
30
[root@oldboy ~]# awk ‘{print $2-$1}’ test.log
10
[root@oldboy ~]# awk ‘{print $2$1}’ test.log
200
[root@oldboy ~]# awk ‘{print $2^$1}’ test.log
10240000000000
[root@oldboy ~]# awk ‘BEGIN{print 10-10 }’
0
[root@oldboy ~]# awk ‘BEGIN{print 10+10 }’
20
[root@oldboy ~]# awk ‘BEGIN{print 10/10 }’
1
[root@oldboy ~]# awk ‘BEGIN{print 10
10 }’
100
[root@oldboy ~]# awk ‘BEGIN{print 10^10 }’
10000000000

#计算内存可用的百分比
[root@oldboy ~]# free -m
total used free shared buff/cache available
Mem: 1980 148 1526 9 305 1646
Swap: 2047 0 2047
[root@oldboy ~]# free -m |awk ‘/^Mem/‘
Mem: 1980 148 1526 9 305 1646
[root@oldboy ~]# free -m |awk ‘/^Mem/{print $4/$2}’
0.770707
[root@oldboy ~]# free -m |awk ‘/^Mem/{print $4/$2100}’
77.0707
[root@oldboy ~]# free -m |awk ‘/^Mem/{print $4/$2
100”%”}’
77.0707%

Awk 数组

#统计/etc/services 中空行的数量

[root@oldboy ~]# awk ‘/^$/‘ /etc/services |wc -l
17
[root@oldboy ~]# sed -n ‘/^$/p’ /etc/services |wc -l
17
[root@oldboy ~]# grep -c ‘^$’ /etc/services
17
[root@oldboy ~]# awk ‘/^$/{i++}END{print i}’ /etc/services
17

#统计passwd文件中所有shell的数量
[root@oldboy ~]# awk -F: ‘{print $NF}’ passwd |sort |uniq -c
1 /bin/bash
1 /bin/sync
1 /sbin/halt
32 /sbin/nologin
1 /sbin/shutdown

[root@oldboy ~]# awk -F: ‘{shell[$7]++}END{for (i in shell)print i,shell[i]}’ passwd |sort -rnk2 |column -t
/sbin/nologin 32
/sbin/shutdown 1
/sbin/halt 1
/bin/sync 1
/bin/bash 1

#计算
[root@oldboy ~]# seq 200 |awk ‘{i=i+$1}END{print i}’
20100
[root@oldboy ~]# seq 100 |awk ‘{i=i+$1}END{print i}’
5050
[root@oldboy ~]# seq 101 |awk ‘{i=i+$1}END{print i}’
5151

Nginx的常见问题

1.多个server_name容易产生冲突,会按照如下顺序匹配

​ 1.首先选择所有的字符串完全匹配的server_name。(完全匹配)
​ 2.选择通配符在前面的server_name,如.bgx.com www.bgx.com
​ 3.选择通配符在后面的server_name,如bgx.
bgx.com bgx.cn
​ 4.最后选择使用正则表达式匹配的server_name
​ 5.如果全部都没有匹配到,那么将选择在listen配置项后加入[default_server]的server块
​ 6.如果没写,那么就找到匹配listen端口的第一个Server块的配置文件

2.如何通过default_server 禁止用户通过IP地址访问,或使用default_server进行导流
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#禁止直接通过IP访问
[root@web01 conf.d]# cat server4.conf
server {
listen 80 default_server;
server_name _;
return 503;
}

#导流
[root@web01 conf.d]# cat server4.conf
server {
listen 80 default_server;
server_name _;
return 302 https://www.xuliangwei.com;
}

一台服务器配置多个网站,如果配置都写在nginx.conf主配置文件中,会导致nginx.conf主配置文件变得非常庞大而且可读性非常的差。那么后期的维护就变得麻烦。
假设现在希望快速的关闭一个站点,该怎么办?
1.如果是写在nginx.conf中,则需要手动注释,比较麻烦
2.如果是include的方式,那么仅需修改配置文件的扩展名,即可完成注释
Include包含的作用是为了简化主配置文件,便于人类可读。

inlcude /etc/nginx/online/*.conf #线上使用的配置
/etc/nginx/offline #保留配置,不启用(下次使用在移动到online中)

root与alias路径匹配主要区别在于nginx如何解释location后面的uri,这会使两者分别以不同的方式将请求映射到服务器文件上,alias是一个目录别名的定义,root则是最上层目录的定义。
root的处理结果是:root路径+location路径
alias的处理结果是:使用alias定义的路径

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
#http://image.oldboy.com/image/bd_logo1.png     root路径+location路径
server {
listen 80;
server_name image.oldboy.com;


location /image/ {
root /code;
}

}

#http://image.oldboy.com/image/bd_logo1.png 直接上alias定义的路径中去超找。
server {
listen 80;
server_name image.oldboy.com;

location /image/ {
alias /code;
}

}

server {
listen 80;
server_name image.oldboy.com;

location / {
root /code;
}

location ~* ^.*\.(png|jpg|gif)$ {
alias /code/images/;
}

}

nginx的try_file路径匹配,按顺序检查文件是否存在

1
2
3
4
5
6
7
8
9
10
11
[root@bgx ~]# cat /etc/nginx/conf.d/try_file.conf
server {
listen 80;
server_name try.bgx.com;
root /code;

location / {
try_files $uri $uri/ /404.html;
}

}

#1.检查用户请求的uri内容是否存在本地,存在则解析
#2.如果请求的url不存在,则访问对应站点目录中的404.html文件
#3.最后交给index.php处理

$uri 匹配文件名,如用户请求try.oldboy.com/index.html 那么$uri则会上对应的root指定的站点目录中查找是否存在该文件
$uri/ 匹配目录下的文件,如用户请求try.oldboy.com/,那么$uri/则会上/对应root指定的站点目录中查找文件
1.当用户访问xx.com/index.html则由Nginx提供,如果Nginx没有该文件则由Tomcat服务提供该文件

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
[root@web01 conf.d]# cat try.conf 
server {
listen 80;
server_name try.oldboy.com;
root /code;
index index.html;

location / {
try_files $uri $uri/ @java_page;
}

location @java_page {
proxy_pass http://172.16.1.8:8080;
}

}



error_page

[root@web01 conf.d]# cat error.conf
server {
listen 80;
server_name try.oldboy.com;
root /code;
location / {
index index.html;
}
error_page 403 /403.jpg;
error_page 404 /404.jpg;
}

一.bash初识

1.什么是bash shell
    是一个命令解释器,与内核进行交互(用户和操作系统的接口)
2.bash shell的作用
    文件管理
    用户管理
    权限管理
    磁盘管理
    网络管理
    软件管理
    应用管理
    ...
3.bash两种使用方式
    1)命令
        效率低,适合少量工作
    2)脚本
        效率高,适合大量工作

4.命令提示符

[root                @            centos7                ~        ]                    # :超级管理员
[oldboy                @            centos7             ~        ]                    $ :普通用户
当前登录的用户                    主机名          当前目录的位置                

/home/oldboy:普通用户家目录
/root:root用户的家目录


第一个命令:

echo:在bash shell中调用变量 $ 加$可所见数值
whoami:查看当前登录的用户

二.shell的基础语法

命令 选项 参数
command [-options] [arguments] 中括号 可有可无

echo:所见即所得。输出你echo后面参数内容
-e:识别换行符等特殊符号
:转义符
$:调用变量 age定义变量

echo ‘zls’
echo -e ‘zls\n123’

三.shell的基本特性
1.命令补全 Tab
2.参数补全:yum install -y bash-completion
3.选项补全:主要是补全 路径
C:\Users\Administrator\Documents\Virtual Machines\CentOS 64 位

linux的快捷键:
Ctrl + a:将光标跳转到行首
Ctrl + e:将光标跳转至行末
Ctrl + w:以空格为单位,将当前光标位置之前的内容删除
Ctrl + u:将当前光标位置之前的内容全部删除
Ctrl + l:清屏
Ctrl + c:终止当前命令
Ctrl + d:退出,断开当前连接(exit,logout)
Ctrl + z:挂起,放后台执行
Ctrl + r:搜索历史命令
Ctrl + s:锁屏
Ctrl + q:解锁
Ctrl + 左右:按照单词跳转光标
ESC + .  :瞬间显示出上一条命令,最后的内容,以空格分隔



#:注释,不执行


yum -y install net-tools
1.将光标移动至行首
2.将光标移动至行末并且将tools改成too
3.只留下yum -y install
4.只留下install

yum源管理

YUM管理:

​ yum是RedHat以及CentOS中的软件包管理器,能够通过互联网下载以rpm结尾的包,并且安装,并可以自动处理依赖性关系,无需繁琐的一次次下载安装。

1
2
3
4
5
6
7
yum install nginx

1.联网获取软件
2.基于RPM管理
3.自动解决依赖
4.命令简单好记
5.生产最佳实践

什么是yum源:

​ 要成功的使用yum工具安装更新软件或系统,就需要有一个包含各种rpm软件包的repository(软件仓库),这个软件仓库我们习惯称之为yum源或者yum 仓库这个源可以是本地的也可以是网络的。

1
2
3
4
5
6
各大镜像源:
阿里云:https://opsx.alibaba.com/mirror
清华源:https://mirrors.tuna.tsinghua.edu.cn/
163源:http://mirrors.163.com/
华为源:https://mirrors.huaweicloud.com/
科大源:http://mirrors.ustc.edu.cn/

1
2
3
4
查看 源列表
[root@zlsedu yum.repos.d]# yum repolist
-rw-r--r-- 1 root root 2523 Jul 30 2019 CentOS-Base.repo
-rw-r--r-- 1 root root 664 May 11 2018 epel.repo

yum包管理

yum实战命令:

1
2
3
4
5
6
7
8
9
10
11
安装:
yum install
-y:不交互安装
yum localinstall 安装本地的rpm包,并安装依赖

yum reinstall 重装

查询:
yum list 查询所有的安装包

yum info 查看安装或未安装包的详细信息

1
2
3
4
5
6
更新:
yum check-update 检查可以更新的包

yum update python -y 更新python包

yum update -y ******忘记 非常危险,更新所有包,包括内核

1
2
3
4
删除:
yum remove : 删除rpm包

yum erase : 删除rpm包

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
yum仓库相关命令:
yum repolist :查看仓库中的所有rpm包数量

yum repolist all: 查看启用的和没启用的仓库

http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/ 自己的服务,走这个源
http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/
http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/ 购买的云主机,内网源
yum-config-manager --enable : 启用yum仓库

yum provides : 查询你想要敲的命令,属于哪个rpm包

yum缓存:
yum clean all
yum makecache

1
2
3
4
5
6
yum包组相关命令:
yum groups list

yum groups install Development tools

yum groups remove -y Base

1
2
3
4
5
6
yum历史相关命令:
yum history

yum history info

yum history undo 43

源码包:

​ yum安装,优点:速度快,简单
​ 缺点:rpm -ql 查看 命令目录,配置文件目录,站点目录…

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
源码包优缺点:
优点:

1.有了源码包,那我就可以自行修改代码,提供我们使用,传说中的二次开发
2.可以定制需要的相关功能
3.新版本优先更新源码
4.自动化规范,方便落地

缺点:
1.相对于yum安装,复杂
2.耗时比较长

mysql
wget https://downloads.mysql.com/archives/get/file/mysql-5.6.42.tar.gz
nginx
wget http://nginx.org/download/nginx-1.16.0.tar.gz

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
安装源码包:

[root@db_rpm ~]# yum install -y gcc gcc-c++ glibc pcre-devel zlib-devel openssl-devel

1.解压
[root@db_rpm ~]# tar xf nginx-1.16.0.tar.gz
2.生成
[root@db_rpm nginx-1.16.0]# ./configure --prefix=/app/nginx-1.16.0
3.编译
[root@db_rpm nginx-1.16.0]# make
4.安装
[root@db_rpm nginx-1.16.0]# make install
5.启动nginx
[root@db_rpm nginx-1.16.0]# /app/nginx-1.16.0/sbin/nginx

6.关闭防火墙
[root@db_rpm nginx-1.16.0]# systemctl stop firewalld

7.打开浏览器,访问:http://10.0.0.60/


1
2
3
4
5
6
7
8
9
10
11
fpm工具安装:

wget http://download.driverzeng.com/fpm-1.3.3.x86_64.tar.gz

解压:[root@db_rpm ~]# tar xf fpm-1.3.3.x86_64.tar.gz

gem sources --add https://mirrors.huaweicloud.com/repository/rubygems/ --remove https://rubygems.org/

安装
[root@db_rpm ~]# gem install *.gem
fpm -s dir -t rpm -n nginx -v 1.16.0 -d 'pcre-devel,openssl-devel' -f /app/nginx-1.16.0

vim管理与用户管理

一.vim的视图模式

1
2
3
4
5
6
7
8
9
10
11
12
	1.可视块模式
命令模式--》ctrl + v
如何批量注释文本?
1)进入可视块模式 ctrl + v
2)进入编辑模式,进入行首 shift + i (I)
3)添加注释 shift + 3 (#)
4)ESC 返回 命令模式
2.可视行模式
命令模式--》shift + v

vim 文件 +行数,直接进入编辑某一行内容
[root@oldboyedu ~]# vim /etc/services +100

二.vim 末行模式

1
2
3
4
5
:set nu 显示行号
:set ic 忽略大小写, 在搜索的时候有用
:set ai 自动缩进
:set list 显示制表符(空行、tab键)
:set no[nu|ic|ai…] 取消临时设定的变量

三.同时编辑多个文件

​ vim -o a.sh zls.txt (水平分割)
​ vim -O a.sh zls.txt (垂直分割)

用户管理

一.用户管理

1.什么用户?
​ 用户指的是能够正常登录Linux或windows系统

2.用户的作用?

1
2
3
4

1)系统中的进程,都是用用户来运行的
2)管理文件的权限
3)进程能否访问到文件,和用户有关

3.和用户相关的文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/etc/passwd
[root@oldboyedu opt]# cat /etc/passwd

用户名称 密码占位符 用户的uid 用户的gid 注释信息 用户的家目录 用户的登录shell
root: x: 0: 0: root: /root: /bin/bash

/etc/shadow
[root@zls ~]# tail -1 /etc/shadow
zls1:!!:16312:0:99999:7:::

// /etc/shadow由 ':' 为分割符, 分为9个字段,每个字段的具体含义如下:
字段名称 注释说明
1.用户登陆名 //用户的账号名称
2.加密后的密码 //用户密码,这是加密过的口令(未设密码时为!!)
3.最近一次密码更改时间 //从1970年到最近一次更改密码时间之间过了多少天
4.密码最少使用几天 //密码最少使用几天才可以更改密码(0表示无限制)
5.密码最长使用几天 //密码使用多少天需要修改密码(默认99999永不过期)
6.密码到期前警告期限 //密码过期前多少天提醒用户更改密码(默认过期提前7天警告)
7.密码到期后保持活动的天数 //在此期限内, 用户依然可以登陆系统并更改密码, 指定天数过后, 账户被锁定
8.账户到期时间 //从1970年起,账户在这个日期前可使用,到期后失效。
9.标志 //保留

4.用户的分类(约定)

1
2
3
4
5
6
7

0:一定是超级管理员
1-200:是系统用户,系统自建
201-999:是系统用户,咱们创建
1000+:普通用户

注意: 在CentOS7系统之前, UID1-499用于系统用户, 而UID 500+则用于普通用户

二.用户的相关命令

useradd && adduser
usermod
userdel

systemd管理

什么是systemd

systemd即为system daemon守护进程,systemd主要解决上文的问题而诞生,
systemd的目标是,为系统的启动和管理提供一套完整的解决方案。

mysql mysqld rsync rsyncd vsftp ftp:// vsftpd

systemd优势

1
2
3
4
5
6

1.最新系统都采用systemd管理(RedHat7,CentOS7,Ubuntu15...)
2.CentOS7 支持开机并行启动服务,显著提高开机启动效率
3.CentOS7关机只关闭正在运行的服务,而CentOS6,全部都关闭一次。
4.CentOS7服务的启动与停止不在使用脚本进行管理,也就是/etc/init.d下不在有脚本。
5.CentOS7使用systemd解决原有模式缺陷,比如原有service不会关闭程序产生的子进程。

systemd相关的配置文件

1
2
3
/usr/lib/systemd/system #类似C6系统的启动脚本目录/etc/init.d/
/etc/systemd/system/ #类似C6系统的/etc/rc.d/rcN.d/
/etc/systemd/system/multi-user.target.wants/

systemd相关的命令:

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
C6:
启动服务:
/etc/init.d/服务名 start
service 服务名 start

关闭服务:
/etc/init.d/服务名 stop
service 服务名 stop

[root@oldboyedu ~]# chkconfig --list

设置开机自启动:
[root@oldboyedu ~]# chkconfig 服务名 on
取消开机自启动:
[root@oldboyedu ~]# chkconfig 服务名 off

查看服务的启动状态:
[root@oldboyedu ~]# /etc/init.d/sshd status
---------------------------------------------------------------------------------------------------
C7:
启动服务:
systemctl start 服务名

停止服务:
systemctl stop 服务名

设置开机自启动:
[root@oldboyedu ~]# systemctl enable 服务名
Created symlink from /etc/systemd/system/multi-user.target.wants/vsftpd.service to /usr/lib/systemd/system/vsftpd.service.

取消开机自启动:
[root@oldboyedu ~]# systemctl disable 服务名
Removed symlink /etc/systemd/system/multi-user.target.wants/vsftpd.service.

查看服务的启动状态:
[root@oldboyedu ~]# systemctl status vsftpd

CentOS6:进入单用户

1.开机grub菜单,e,选择内核,再按e
2.quit 写1 或者single
3.回车,按 b
4.修改密码
5.修改运行级别