四劍客第五關
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