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...