Linux - 後端開發常用指令

壓縮

  • 壓縮/解壓縮
    # 壓縮
    tar -zcvf dst.tar.gz src1 src2 ...
    # 解壓縮
    tar -xvf dst.tar.gz
    # 排除version control的檔案(.svn|.git)進行壓縮
    tar --exclude-vcs -cvf dst.tar src
    
  • tar目錄結構
    # ex: /tmp/1/2/3/4/a.txt
    # 當前目錄:/tmp
    
command tar檔結構
tar -cf a.tar 1/2/3/4 1/2/3/4/a.txt
tar -cf a.tar -C 1/2/3/ 4 4/a.txt

檔案

  • 搜尋

    # 找所有檔案 | 排除.svn檔 | 全部刪除
    find -type f -name '*.*' | grep -v "\.svn" | xargs rm -v
    
  • 搜檔後利用指令處理

    find . -name '*' -exec ls -l {} \;
    => ls -l A; ls -l B; ls -l C; 
    find . -name '*' | xargs ls -l
    => ls -l A B C
    

    -exec類似foreach, xargs則是build成command的參數

  • 搜尋過期檔案

    # greater than n days
    find . -type f -name '*' -mtime +n
    # exactly n days
    find . -type f -name '*' -mtime n
    # less than n minutes
    find . -type f -name '*' -mmin -n
    
  • 檔案絕對路徑

    readlink -f ${target_file}
    
  • dirname/basename

    s="a/b/c/d/123.txt"
    dirname $s => "a/b/c/d"
    basename $s => "123.txt"
    
  • 建立softlink

    ln -sf ${target} ${link_name}
    
  • SCP (Secure Copy),遠端拷貝

    scp -i ${keyFile} ${filepath} username@${ip}:/path/to/dst
    
  • streaming查看log檔尾

    tail -f ${log_path}
    

全文檢索

  • 全文檢索
    # grep
    # @param: n - 列出行號
    # @param: H - 列出檔名
    # @param: R,r - 遞迴
    # @param: i - ignore-case
    grep "${keyword}" $files -nHri
    grep "${keyword}" * -nHri # * : all files
    # 特定檔案
    # @param: --include - filename pattern
    grep --include "*.java" "${keyword}" * -nHr
    grep "${keyword}" * -nHr | grep '\.java' (同上,但效率差很多!)
    

目錄結構的md5

# md5sum指令
echo -n "str" | md5sum
# 列出目錄結構(和time無關),再md5
find . -name * | xargs ls -lu --full-time | awk '{print $9}' | md5sum
find /path -type f -name * -exec md5sum {} + | awk '{print $1}' | sort | md5sum

效能監控

top -d1 -b -p 1  # 查看cpu,按1可看多核情況
free -s 1        # 查看記憶體
iostat -xd 1 20  # 查看io
vmstat 1         # 查看虛擬憶體體, process, ...

crontab

# 每小時
0 * * * * root run_task.sh && run_task2.sh
# 每天03:00
0 3 * * * root run_task.sh
# 每天03:00, 06:00
0 3,6 * * * root run_task.sh
# 每t分鐘
*/t * * * * root run_task.sh
# 每週五16:30
30 16 * * 5 root run_task.sh
# 每週日16:30
30 16 * * 0 root run_task.sh
# 每月1日04:42
42 4 1 * * root run_task.sh

curl

curl -X POST $url \
-H "Content-Type: application/json" \
-H "$key: $value" \
-d "your_post_data_to_server" \
--connect-timeout 5

開機loader

  • 使用者開機啟動程序
    /etc/rc.d/rc.local
    
  • 更細的設定
    # level 0: halt(直接關機)
    # K: 關機
    # S: 開機
    /etc/rc0.d/K01xxx # 依序由K01->K02->...->K99
    /etc/rc0.d/K02xxx
    ...
    /etc/rc0.d/K99xxx
    /etc/rc0.d/S01xxx
    /etc/rc0.d/S02xxx
    ...
    /etc/rc0.d/S99xxx
    ...
    # level 1
    /etc/rc1.d/...
    # level 3: 含有網路功能的文字模式
    /etc/rc3.d/...
    ...
    # level 6: reboot, 重開機
    /etc/rc6.d/...
    

results matching ""

    No results matching ""