1. 程式人生 > 其它 >shell 學習筆記(17)

shell 學習筆記(17)

宣告:轉載需署名出處,嚴禁用於商業用途!

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或