四剑客第五关
1 查询file.txt 以abc结尾的行
grep 'abc$' file.txt
^ 开头
$ 结尾
[root@master ~]# cat file.txt
sdhfks
sdfsdg
sdkjfhsdjh
sdjfsdgf
abcklsdfjksegfeabc
ekhkeerjkgsekfiabc
ekfhkehhie
dfisdgjfsd
fsdfjsdfs
eiofhjeihfe
esjkfhekhfe
erjkhekfhie
asekfhiweh
ekhreuikehikfhabc
erjkfhei
ekrhksehfguiefg
agkhjdigrjkfthew
'esjfhe
ejnkrhehf
aejkthehfgwe
kwerjehuirhe
ejkrheukyruiew
abcxeklhrkehhabc
erkhef
wekrheh
erjkhekre
kwerhkweh
rjkheghuehjk
[root@master ~]# grep 'abc$' file.txt
abcklsdfjksegfeabc
ekhkeerjkgsekfiabc
ekhreuikehikfhabc
abcxeklhrkehhabc
2 删除file.txt文件中的空行
sed '/^$/d' file.txt |sponge file.txt
或者
grep -v '^$' file.txt > tmp && mv tmp file.txt
命令解释
grep -v '^$' file.txt:
grep: 是一个强大的文本搜索工具,用于搜索与指定模式匹配的行。
-v: 是一个选项,表示选择不匹配指定模式的行。
'^$': 是一个正则表达式,表示空行。^ 表示行的开始,$ 表示行的结束,所以 ^$ 匹配没有任何字符的行,即空行。
file.txt: 是要搜索的文件名。综合来说,这个命令会从file.txt中选择所有非空行,并打印它们。
> tmp:
这个符号表示重定向输出。这里,grep命令的输出(即file.txt中的所有非空行)会被重定向到一个名为tmp的新文件中。
&&:
这是一个shell操作符,表示只有当左边的命令(在这里是grep -v '^$' file.txt > tmp)成功执行(返回值为0)时,才会执行右边的命令。
mv tmp file.txt:
mv: 是一个移动或重命名文件的命令。
tmp file.txt: 这表示将tmp文件重命名为file.txt。如果file.txt已经存在,它将被tmp的内容替换。
综合起来,这条命令组合的作用是:从file.txt中删除所有空行,并将结果保存回file.txt。这里使用了临时文件tmp来存储中间结果,以确保在替换原始文件之前,新内容已经正确生成。
[root@master ~]# cat file.txt
sdhfks
sdfsdg
sdkjfhsdjh
sdjfsdgf
abcklsdfjksegfeabc
ekhkeerjkgsekfiabc
ekfhkehhie
dfisdgjfsd
fsdfjsdfs
eiofhjeihfe
esjkfhekhfe
erjkhekfhie
asekfhiweh
ekhreuikehikfhabc
erjkfhei
ekrhksehfguiefg
agkhjdigrjkfthew
'esjfhe
ejnkrhehf
aejkthehfgwe
kwerjehuirhe
ejkrheukyruiew
abcxeklhrkehhabc
erkhef
wekrheh
erjkhekre
kwerhkweh
rjkheghuehjk
[root@master ~]# sed -n '10p' file.txt
fsdfjsdfs
[root@master ~]# grep -v '^$' file.txt > tmp && mv tmp file.txt
mv: overwrite ‘file.txt’? y
[root@master ~]# cat file.txt
sdhfks
sdfsdg
sdkjfhsdjh
sdjfsdgf
abcklsdfjksegfeabc
ekhkeerjkgsekfiabc
ekfhkehhie
dfisdgjfsd
fsdfjsdfs
eiofhjeihfe
esjkfhekhfe
erjkhekfhie
asekfhiweh
ekhreuikehikfhabc
erjkfhei
ekrhksehfguiefg
agkhjdigrjkfthew
'esjfhe
ejnkrhehf
aejkthehfgwe
kwerjehuirhe
ejkrheukyruiew
abcxeklhrkehhabc
erkhef
wekrheh
erjkhekre
kwerhkweh
rjkheghuehjk
3 打印file.txt 文件中的第10行
sed -n '10p' file .txt
head -n 10 file.txt |tail -n 1
[root@master ~]# sed -n '10p' file.txt
eiofhjeihfe
root@master ~]# head -n 10 file.txt |tail -n 1
eiofhjeihfe
5 在11月份,每天的早上6点到12点中,每隔2个小时执行一次/usr/bin/httpd.sh 怎么实现
crontab -e
0 6-11/2 * 11 * /usr/bin/httpd.sh
chmod +x /usr/bin/httpd.sh
使用 crontab -e 命令编辑了cron任务,并添加了一个新的定时任务。这个任务的配置如下:
0 6-11/2 * 11 * /usr/bin/httpd.sh
chmod +x /usr/bin/httpd.sh 来给脚本添加执行权限(如果它还没有的话)
* * * * *
含义
分钟 时 日 月 周
分钟 0-59
时 0-23
日 1-31
月 1-12
周 1-7
6 iptables和firewalld 都学习下 禁止 ip 10.10.10.1 访问本地80端口
iptables -I INPUT -s 10.10.10.1/32 --dport 80 -j DROP
方法一
使用 firewalld
首先,您需要确认 firewalld 是否正在运行,并且是否是当前活动的防火墙管理工具。您可以使用以下命令来检查:
systemctl status firewalld
如果 firewalld 没有运行,您可以使用以下命令来启动它:
systemctl enable firewalld
systemctl start firewalld
下一步禁止ip设置
临时生效
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.10.10.1" port protocol="tcp" port="80" reject'
永久生效
firewall-cmd --zone=public --add-rich-rule='rule family="ipv4" source address="10.10.10.1" port protocol="tcp" port="80" reject' --permanent
这个命令会在 public 区域中添加一个规则,拒绝来自 10.10.10.1 的所有 TCP 流量到端口 80。--permanent 参数表示规则是持久的,会在系统重启后仍然生效。
重启
firewall-cmd --reload
方法二 iptables
iptables -A INPUT -p tcp -s 10.10.10.1 --dport 80 -j DROP
这条命令会在 INPUT 链中添加一条规则,丢弃来自 10.10.10.1 的所有到端口 80 的 TCP 流量。
service iptables save
service iptables restart
systemctl restart iptables
7 查看http的并发请求数及其tcp连接数
netstat -tna |grep ':80' |wc -l
netstat -an | grep tcp
netstat -an | grep :80 | wc -l
ss -tan 看所有tcp连接
ss -tan | grep :80 | wc -l
[root@master ~]# netstat -tna |grep ':80' |wc -l
0
[root@master ~]# netstat -an | grep tcp
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 36 10.0.0.164:22 10.0.0.1:13642 ESTABLISHED
tcp6 0 0 :::22 :::* LISTEN
[root@master ~]# netstat -an |grep :80 |wc -l
0
[root@master ~]# ss -tan
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 *:22 *:*
ESTAB 0 36 10.0.0.164:22 10.0.0.1:13642
LISTEN 0 128 :::22 :::*
[root@master ~]# ss -tan | grep :80 |wc -l
0
8 统计80端口连接数
netstat -ant |grep ':80' |wc -l
ss -tn state established '(sport = :80 or dport = :80)' |wc -l
9 统计已经链接上的,状态为established
ss -t state established
ss -tan state established | wc -l
[root@master ~]# ss -tan state established | wc -l
2
[root@master ~]# ss -t
State Recv-Q Send-Q Local Address:Port Peer Address:Port
ESTAB 0 36 10.0.0.164:ssh 10.0.0.1:13642
[root@master ~]# ss -t state established
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 36 10.0.0.164:ssh 10.0.0.1:13642
[root@master ~]# ss -t state established
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 36 10.0.0.164:ssh 10.0.0.1:13642
10 查出哪个IP地址连接最多
netstat -ntua |grep ESTABLISHED |awk '{print $5}' |cut -d: -f1 |sort |uniq -c| sort -nr
netstat -ntu |awk '{print $5}' |cut -d: -f1 |sort |uniq -c |sort -nr |head -n 1
ss -ntu |awk '{print $5}' |cut -d: -f1 |sort |uniq -c| sort -nr|head -n 1
netstat -ntu |awk '{print $5}' |cut -d: -f1 |sort |uniq -c|sort -nr |grep -vE "127.0.0.|10.|192.168." | head -n 1
[root@master ~]# netstat -ntu |awk '{print $5}' |cut -d: -f1 |sort |uniq -c |sort -nr |head -n 1
1 servers)
[root@master ~]# ss -ntu |awk '{print $5}' |cut -d: -f1 |sort |uniq -c| sort -nr|head -n 1
1 Local
[root@master ~]# netstat -ntu |awk '{print $5}' |cut -d: -f1 |sort |uniq -c|sort -nr |grep -vE "127.0.0.|10.|192.168." | head -n 1
1 servers)
11 统计apache的access.log中访问量最多的ip
cat access.log |awk '{print $1}' |sort |uniq -c |sort -nr |head -n 1
12 如何查看占用端口8080的进程
lsof -i :8080