常用shell彙總

2021-09-28 11:40:43 字數 3995 閱讀 2512

1、查詢並刪除/data這個目錄7天前建立的檔案

[root@ansible learngit]# find /data -ctime +7 -exec rm -fr {} \;

[root@ansible learngit]# find /data -ctime +7 | xargs rm -fr

[root@ansible learngit]# find / -size +500m   #大於500m的檔案

[root@ansible learngit]# find / -type f -name *.log -size +10m

[root@ansible storage]# find / -name sshd_config ! -path /storage/* -print   #查詢檔案,排查某些目錄

[root@ansible storage]# find / -name sshd_config -maxdepth 3  #在三層子目錄中查詢

[root@ansible storage]# find ./ -name '*.jpg' -o -name '*.png'  #一次性查詢多種型別

在root目錄及其1層深的子目錄中查詢passwd. (例如root — level 1, and one sub-directory — level 2)

2、tar命令壓縮進查某個目錄

# tar zcvf data.tar.gz /root/* --exclude=bui_nginx --exclude=recovered_files

#--exclude引數為不包含某個目錄或檔案,後面也可以跟多個

3、檢視tar包存檔檔案,不解壓

# tar tf data.tar.gz #t是列出存檔檔案目錄,f是指定存檔檔案

4、批量解壓tar.gz檔案

for tar in *.tar.gz; do tar zxvf $tar; done

5、篩除出檔案中的注釋和空格

[root@ansible home]# grep -v "^#" /etc/ssh/sshd_config |grep -v "^$"

6、篩選/etc/passwd檔案中所有的使用者

方法1:

# cat /etc/passwd |cut -d: -f1

方法2:

# awk -f ":" '' /etc/passwd

7、iptables**跳轉

1)開啟路由**

echo "1" > /proc/sys/net/ipv4/ip_forward  #臨時生效

2)內網訪問外網(snat):發起訪問的內網ip位址轉換為指定的ip位址

iptables –t nat -a postrouting -s [內網ip或網段] -j snat --to [公網ip]

3)公網訪問內網(dnat)(公網埠對映內網埠):

iptables –t nat -a prerouting -d [對外ip] -p tcp --dport [對外埠] -j dnat --to [內網ip:內網埠]

8、iptables將本機80埠**到本地8080埠

iptables -t nat -a prerouting -p tcp --dport 80 -j redirect --to-ports 8080

9、find命令查詢檔案,並複製到/opt目錄

方法1:

# find /etc -name httpd.conf -exec cp -rf {} /opt/ \;   #-exec執行後面命令,{}代表前面輸出的結果,\;結束

方法2:

# find /etc -name httpd.conf |xargs -i cp {} /opt     #-i表示輸出的結果由{}代替

10、檢視伺服器ip連線數

netstat -tun |awk '' | cut -d: -f1|sort |uniq -c|sort -n

-tun:-tu是顯示tcp和udp連線,n是以ip位址顯示

cut -d:-f1:cut是乙個選擇性顯示一行的內容命令,-d指定:為分隔符,-f1顯示分隔符後的第乙個字段。

uniq -c:報告或刪除文中的重複行,-c在輸出行前面加上出現的次數

sort -n:根據不同型別進行排序,預設排序是公升序,-r引數改為降序,-n是根據數值的大小進行排序

11、插入一行到391行

sed -i "391 s/^/#this is a test/" /etc/ssh/sshd_config

12、列出nginx日誌訪問最多的10個ip位址

awk '' access.log|sort |uniq -c| sort -nr|head -n 10

sort :排序

uniq -c:合併重複行,並記錄重複次數

sort -nr :按照數字進行降序排序

13、顯示nginx日誌一天訪問量最多的10個ip

# awk '$4>="[16/may/2017:00:00:01" && $4<="[16/may/2017:23:59:59"' access_test.log |sort |uniq -c |sort-nr |head -n 10

14、獲取當前時間前一分鐘日誌訪問量

grep `date +%d/%b/%y:%h:%m --date="-1 minute"` access.log |awk 'end'

15、找出ip位址

# ifconfig |grep -o '[0-9]\\.[0-9]\\.[0-9]\\.[0-9]\' #-o只顯示匹配字元

16、檢視網路狀態命令

# netstat -antp #檢視所有網路連線

# netstat -lntp #只檢視監聽的埠資訊

# netstat -tun  #只檢視tcp、udp連線的資訊

# lsof -p pid   #檢視程序開啟的檔案控制代碼

# lsof -i:80    #檢視埠被哪個程序占用

17、生成8位隨機字串

方法1:

# echo $random |md5sum |cut -c 1-8

方法2:

# openssl rand -base64 4

方法3:

# cat /proc/sys/kernel/random/uuid | cut -c 1-8

18、while死迴圈

while true; do                 #條件精確等於真,也可以直接用條件[ "1" == "1" ],條件一直為真

19、數字求和

# cat a.txt

1023

5356

方法1:

#!/bin/bash

while read num;

dosum=`expr $sum + $num`

done < a.txt

echo $sum

方法2:

# cat a.txt |awk 'end'

20、判斷是否為數字(字串判斷也如此)

# [[ $num =~ ^[0-9]+$ ]] && echo yes || echo no  

^ $:從開始到結束是數字才滿足條件

=~:乙個操作符,表示左邊是否滿足右邊(作為乙個模式)正規表示式

30、檢視文字中20至30行內容

方法1:

# awk '' /etc/ssh/sshd_config

方法2:

# sed -n '20,30p' /etc/ssh/sshd_config 

方法3:

# head -30 /etc/ssh/sshd_config|tail

22、head和tail

n head和tail命令

都用於檢視文字檔案,區別在於: head顯示檔案的頭n行,tail顯示檔案的尾n行,預設情況n都為10行。可以通過-n方式指定行數,如:

head -100 file和tail -100 file分別表示顯示檔案頭100行和尾100行內容。

shell問題彙總

1.sudo執行指令碼找不到變數 當普通使用者下,設定並export乙個變數,然後利用sudo執行echo命令,能得到變數的值,但是如果把echo命令寫入指令碼,然後再sudo執行指令碼,就找不到變數,未能獲取到值,如題情況如下 cat demo.sh echo var1 var1 a1 expor...

運維 我常用的shell指令碼彙總

某天發現 home分割槽滿了,想知道是哪個目錄佔了大頭,使用該指令碼可以幫你完成排序 du max depth 1 home sort n r max depth 1只統計一級目錄 sort n r按照數字 逆序排序 ps ef egrep foo bar grep v grep awk xargs...

常用的shell命令彙總,夯實Linux基礎

lscpu 檢視cpu的統計資訊 cat proc cpuinfo 檢視cpu詳細資訊,如每個cpu的型號等free m 概要檢視記憶體情況,這裡的單位是mb cat proc meminfo 檢視記憶體詳細資訊lsblk 檢視硬碟的分割槽分布,顯示很值觀 df lh 檢視各分割槽的情況 cat p...