【linux】linux补充
1、防火墙
# 查看firewall服务状态
systemctl status firewalld
# 开启、重启、关闭防火墙命令
service firewalld start
service firewalld restart
service firewalld stop
# 查看防火墙规则
firewall-cmd --list-all #查看全部信息
firewall-cmd --list-ports #查看端口信息
# 开启端口
开端口命令:firewall-cmd --zone=public -add-port=80/tcp --permanent
重启防火墙:systemctl restart firewalld.service
--zone #作用域
--add-port=80/tcp #添加端口,格式为端口/通讯协议
--permanent #永久生效,不然重启就失效了
2、文本处理工具
除了基本的管道命令grep还有sed和gawk命令
grep命令适合查找和匹配文本;而sed适合编辑匹配到的文本;awk适合格式化文本,对文本进行复杂处理并输出
2.1、sed命令
sed(Stream Editor)是一种流编辑器,一次处理一行内容,将行存储在模式空间(临时缓冲区),然后用sed命令处理模式空间中的内容,处理完成后将内容送入屏幕,然后清除模式空间,继续读入下一行,执行下一个循环,直到文件末尾。这个过程中不会改变文件内容(除了 -i 选项)。
命令形式:
sed [选项] [sed命令] [-f <script FILE>] [FILE]
选项
-h: 显示帮助信息
-n: 仅显示 script处理后的结果,常与sed命令p连用:sed -n 'p' test.txt 打印test.txt文件内容
-e: 直接在指令列模式上进行 sed 的动作编辑,不修改原文件,输出到终端
-i: 修改文件内容,而不输出到终端
-f filename : sed 动作写在filename 内,执行 filename 内的sed 动作
-r∶ 扩展正规表达式
常用命令
a:append #后面新增:
sed -e '4 a newline' test.txt
sed -e '1 a append' test.txt
aaa
append
bbb
ccc
ddd
eee
fff
c:change #取代:
sed -e '2,5c No 2-5 number' test.txt
sed -e '2,5 c changed' test.txt
aaa
changed
fff
d:delete #删除:
sed -e '2,5d' test.txt
sed -e '/^$/d' test.txt:删除test.txt文件空行
sed -e '2,5 d' test.txt
aaa
fff
i:insert #前面插入:
sed -e '2i newline' test.txt
sed -e '1 i insert' test.txt
insert
aaa
bbb
ccc
ddd
eee
fff
p:print,
打印第一行:sed -n 'p' test.txt
打印最后一行:sed -n '$p' test.txt
s:substitute #替换:
sed -e 's/old/new/g' test.txt
sed -e 's/$/%/' test.txt:在每行末尾添加%
sed -e 's/ *//g' test.txt: 删除test.txt文件空格
sed -e "4s;old;new;g" test.txt 或者 sed -e '4s/old/new/g' test.txt:替换第4行
N:将下一行添加到pattern space中,将当前读入行和用N命令添加的下一行看成“一行”
2.2、awk命令
awk是一种文本模式扫描和处理的编程语言,由 Aho, Weinberger 和 Kernighan开发。
awk功能强大,可用于数据提取和统计,常用在shell脚本中。awk逐行读入文件,以空格为默认分隔符将每行切片,切开的部分再进行后续处理。
awk [options] 'pattern action' [FILE(s)]
pattern:正则表达式
action:对匹配到的内容执行的命令(默认为输出每行内容)
$0: 整条记录(当前列)
$1 - $n: 表示当前列的第n个域
FILENAME: awk浏览的文件名
BEGIN: 处理文本之前要执行的操作
END: 处理文本之后要执行的操作
NF: 浏览记录的域的个数/列数
NR: 已读的记录数/行数
FNR: 当前输入文件的记录数
FS: 设置输入域分隔符,等价于命令行 -F 选项,默认为空格“ ”
awk -F: '{print $1}' test.txt
或者 awk 'BEGIN {FS = ":"} {print $1}' test.txt
RS: 控制输入记录分隔符
OFS: 输出域分隔符,默认为空格“ ”
ORS: 输出记录分隔符,默认为“\n”
exit:匹配到第一行内容后退出:awk -F: '{print $2;exit}' test.txt ,grep使用 -m 参数
例子:
#/etc/passwd匹配root的所有行的,$0就是全部
[root@localhost ~]# sudo cat /etc/passwd | awk -F : '/root/ {print $0}'
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
#/etc/passwd第二列
[root@localhost ~]# sudo cat /etc/passwd | awk -F : 'NR==2 {print $0}'
bin:x:1:1:bin:/bin:/sbin/nologin
#使用 begin加入标题
[root@localhost ~]# sudo cat /etc/passwd | awk -F : 'BEGIN {print "No","User","Auth"} {print NR "|" $1 "|" $2 } END {print FILENAME}'
No User Auth
1|root|x
2|bin|x
3|daemon|x
#自定义输入域分割符,匹配第一个
[root@localhost ~]# cat test.txt
a|b|c
A|B|C
[root@localhost ~]# cat test.txt | awk -F"[|]" '{print $1}'
a
A
#自定义输入行分割符,匹配第一个
[root@localhost ~]# cat test.txt
a|b|c.A|B|C
[root@localhost ~]# cat test.txt | awk -v RS="." '{print $1}'
a|b|c
A|B|C
#自定义输入行分割符、输出行分割符
[root@localhost ~]# cat test.txt | awk -v RS="." -v ORS="-" '{print $1}'
a|b|c-A|B|C-