shell 學習筆記(17)
阿新 • • 發佈:2022-04-28
宣告:轉載需署名出處,嚴禁用於商業用途!
1601.關於rsync相同檔案後 du 大小不一樣的問題:
不一樣大小很正常,因為檔案系統的block不一樣,或者檔案系統底層用了壓縮什麼的。
因為du是塊大小,ls是檔案的實際大小,系統的塊大小一般為4KB,
所以du的檔案一般比ls的結果要大,而且系統塊大小可以更改。
1602.檢視系統塊大小:
tune2fs -l /dev/sda1 | grep Block
1603.vi -u NONE -N 開啟超大檔案:
關掉所有vim外掛,用非相容模式開啟,否則語法分析等操作很佔資源的
1604.shell整數運算支援自增運算:
((s+=++i)) 相當於 i=$(($i+1)) && s=$(($s+$i))
1605.ssh 會截獲標準輸入, 例如當while裡套 ssh的時候,while 讀了一個值之後,ssh會讀取剩下的資料,
可以 echo ""|ssh 或者 ssh -n 也可以避免
1606.find|xargs 檔名包含了單引號: xargs: unmatched single quote
find -regex .... -printf %h\n
find ...| grep ..| xargs -d 'n' -I {} dirname {}
find ... -print0| grep ...| xargs -0I {} dirname {}
1607.用 dd 快速建立一個指定大小的空洞檔案(4G壓縮後只有4M):
dd if=/dev/zero of=4G.txt bs=1G seek=4 count=0
1608.一個網段內,遍歷哪些 ip 被佔用可:
nmap -v -sP 192.168.0.0/24|grep "up"|awk '{print $2}'
1609.如何清理操作及登入日誌記錄:
> /var/log/lastlog
> /var/log/wtmp
> /var/log/auth.log
> /var/log/messages
> ~/.bash_history
> ~/.viminfo # grep cmd ~/*
kill -9 $$
1610.echo 轉義輸出 16 進位制ascii的字元形式:echo -e "x42"
1611.把一組 16 進位制轉換為ascii:
n=54542D4632352D44362D5345
echo $n | sed 's/(..)/\\x1/g' | xargs echo -e
1612.利用bash擴充套件列出所有目錄:ls ${PATH//:/ } #第一個//表示全域性替換
1613.如何踢掉指定終端 tty/pts:
pkill -t,根據tty殺也可以或者 pts,pkill -t pts/1 #-9 強制,-15 正常結束
1614.如何禁掉外網網絡卡:
ifdown eth0
cd /etc/sysconfig/network/
vim ifcfg-eth0
#IP Config information for eth0:
#IPADDR='113.108.1.9'
NETMASK='255.255.255.128'
STARTMODE='off'
GATEWAY='113.1.1.1'
1615.把10000個檔案切割成 100*100:
find /root -name "*.*" -type f|split -l 100 -100a2 # -da2 用數字做字尾,限制兩位,-a 預設就是兩位,split -dl 100 也行
1616.man 重定向到檔案出現退格符 ^H的解決辦法:col -b
1617.建立臨時檔案的方法:直接mktemp就行了,隨機+判斷檔案是否存在,-u、--suffix、--tmpdir、XXX 或者直接 $$
1618.產生 a-z 的字母序列:
echo {a..z} | awk 'NF=5' #利用 bash 擴充套件
awk 'BEGIN{for(i=97;i<101;i++)printf("%c ", i);printf("%cn", i)}' #利用 ascii
1619.刪除包含空格或tab的空行:
grep -v -E "^[[:blank:]]*$" 或者 sed '/^s*$/d'
1620.利用 split 返回陣列長度判斷字串出現的位置:替換x~y之間,出現 abc 的字串為 _XYZ_
echo 1abc56abc01abc5678abc|awk -vn=6 '{print gensub("abc","_XYZ_",split(substr($0,1,n+10),a,"abc")-1,$0)}' #有bug
echo 1abc56abc01abc5678abc|awk '{n=6;start=substr($0,1,n-1);mid=substr($0,n,n+10);end=substr($0,n+11);gsub("abc","xyz",mid);print start""mid""end}'
1621.screen的妙用:在SSH斷開的情況下,伺服器端繼續執行程式,甚至從公司回到家裡,你都可以還原你的linux會話狀態。
screen -S test #建立一個名為test的screen任務
#輸入要執行的命令,enter
#Ctrl + a + d儲存screen
screen -ls #檢視所有screen
screen -r test #恢復screen
exit #退出screen
1622.crontab語法詳解:
crontab [-u 使用者名稱] [-elr]
#crontab -e
# 分 時 日 月 周 [使用者] command
# 每分鐘執行一次第一個引數可以寫成樣 1-59 或者 */1
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * command to be executed
1623.設定開機啟動:
vi /etc/rc.d/rc.local
1624.帶有顏色的echo:
設定顏色的格式: e[背景色;前景色;高亮me[0m
e或