四劍客第五關

liu4356發表於2024-03-14

四劍客第五關

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





相關文章