SHELL利器:比較經常使用的SHELL命令(持續更新)

awk,說shell中的瑞士軍刀不爲過吧html

# 實現SQL中的group by功能,例如對「姓名    地點    年齡」按照地點字段統計其年齡之和
awk '{arr[$2]+=$3} END{for(i in arr) print i,arr[i]}' source_file.txt
# 對下述數據peo.o,按照城市分組(組內年齡降序排序),並使得全局分組的排序以組內年齡最大值降序排序
# 姓名    城市    年齡    
# 老Q    上海    65
# 老K    南京    68
# 小A    上海    24
# 小M    西安    25
# 老M    西安    88
# 老A    南京    45
# 指望結果
# 姓名    城市    年齡
# 老M    西安    88(組與組之間最大)
# 小M    西安    25(組內降序)
# 老K    南京    68
# 老A    南京    45
# 老Q    上海    65
# 小A    上海    24
sort -t $'\t' -k 3nr peo.o > peo_sort.o   # 預處理,對年齡全局降序排序
awk 'NR==FNR{if(arr[$2]=="") arr[$2]=$3} NR>FNR{print $0,"\t",arr[$2]} ' peo_sort.o peo_sort.o | sort -t $'\t' -k 4nr -k 3nr | cut -f 1-3 > peo_rs.o 
# awk中第一次遍歷文檔獲得同城年齡最大值集合,第二次從新輸出文件,其中每行新添一字段用以標註其所在組的最大年齡,sort中對新添字段排序,這時結果將按照組內年齡最大值分組降序排序,cut中截取原文檔字段進行輸出。

# 待續

sort,對文檔數據進行排序node

# 對txt.o第三列(以tab符分割)按照數值降序排序,輸出到sort.o文件中
sort -t $'\t' -r -n -k 3 txt.o > sort.o
# 對txt.o第三列(以冒號分割)按照數值降序,第一列數值升序,第二列字符降序排列
sort -t $':' -k 3nr -k 1n -k 2r txt.o > sort.o
# 精確地對某個域進行排序(-k 2n多是對從第二個域到最後的範圍進行排序)
sort -t $'\t' -k1,1 -k7,7nr txt.o > sort.o #(對第一個域1,1和第7個域7,7nr進行排序)

-r    # 默認爲升序,該參數將其改成降序排序
-t    # 按照後面指定的字符進行行切分,例如要按照tab符分割,則用$'\t'
-k    # 指定按照切分後的某列(字段)進行排序,首列爲1
-n    # 將設置以數值進行排序,否則10會在2前面
-o    # sort默認將結果輸出至標準輸出,重定向>則將結果寫入新文件,若重定向到原文件,則會清空原文件;該參數可將結果寫入原文件,如 sort -r number.txt -o number.txt
-u    # 排序時去除重複的行
-f    # 忽略大小寫(將小寫字母都轉換爲大寫字母來進行比較) 
-c    # 檢查文件是否已排好序,若是亂序,則輸出第一個亂序的行的相關信息,最後返回1
-C    # 檢查文件是否已排好序,若是亂序,不輸出內容,僅返回1 
-M    # 會以月份來排序,好比JAN小於FEB等 
-b    # 忽略每一行前面的全部空白部分,從第一個可見字符開始比較

參考和補充(例如以第二個字段第二個字符排序之類):Linux Shell之sort命令shell


df,顯示目前全部檔案系統的最大可用空間及使用情形url

# 經常使用命令,以易讀格式顯示文件系統使用狀況
df -h

-a    # 顯示所有的檔案系統和各分割區的磁盤使用情形
-i    # 顯示i -nodes的使用量
-h    # 顯示使用「Human-readable」的輸出(GB、MB 等易讀的格式)
-k    # 大小用k來表示 (默認值)
-m    # 大小用M表示
-t    # 顯示某一個檔案系統的全部分割區磁盤使用量
-x    # 顯示不是某一個檔案系統的全部分割區磁盤使用量
-T    # 顯示每一個分割區所屬的檔案系統名稱

du,查詢檔案或目錄的磁盤使用空間spa

# 經常使用命令,以易讀格式顯示文件的磁盤使用空間,最後附上總計
du -ch

-a    # 顯示所有目錄和其次目錄下的每一個檔案所佔的磁盤空間
-b    # 大小用bytes來表示 (默認值爲k bytes)
-c    # 最後再加上總計 (默認值)
-h    # 顯示使用「Human-readable」的輸出(GB、MB 等易讀的格式)
-s    # 只顯示各檔案大小的總合 (summarize)
-x    # 只計算同屬同一個檔案系統的檔案
-L    # 計算全部的檔案大小

參考和補充:df命令和du命令用法詳解
.net


tar,對文件目錄進行打包備份 unix

# 將整個 /etc 目錄下的文件所有打包成爲 /tmp/etc.tar
tar -cvf /tmp/etc.tar /etc        # 僅打包,不壓縮!
tar -zcvf /tmp/etc.tar.gz /etc    # 打包後,以 gzip 壓縮
tar -jcvf /tmp/etc.tar.bz2 /etc   # 打包後,以 bzip2 壓縮
# 將 /tmp/etc.tar.gz 文件解壓縮在 /usr/local/src 底下
cd /usr/local/src
tar -zxvf /tmp/etc.tar.gz

-c    # 創建新的歸檔文件 (create )
-x    # 從歸檔文件中解出文件
-r    # 向歸檔文件末尾追加文件    注意	#  在參數的下達中,c/x/t 僅能存在一個。
-O    # 將文件解開到標準輸出
-v    # 處理過程當中輸出相關信息
-f    # 對普通文件操做
-z    # 調用gzip來壓縮歸檔文件,與x聯用時調用gzip完成解壓縮
-Z    # 調用compress來壓縮歸檔文件,與x聯用時調用compress完成解壓縮

參考和補充:tar命令的詳細解rest


scp,主機之間拷貝文件code

-a    # 儘量將檔案狀態、權限等資料都照原狀予以複製
-r    # 若 source 中含有目錄名,則將目錄下之檔案亦皆依序拷貝至目的地
-f    # 若目的地已經有相同檔名的檔案存在,則在複製前先予以刪除再行復制

參考和補充:SCP 命令htm


cron,定時執行任務

crontab -l    # 顯示當前用戶的cron服務
crontab -u    # 爲某用戶設置cron服務(通常root用戶在執行cron命令時須要此參數)
crontab -e    # 編輯當前用戶的cron服務(配合-u參數)
crontab -r    # 刪除當前用戶的全部cron服務(配合-u參數)
/sbin/service crond start/stop/restart/reload    # 啓動/中止/重啓/從新加載配置文件
# 單行爲一個執行命令,前五個字段分別表明「分 時 日 月 周」,具體參看參考連接;
# 用戶經過crontab -e設定的cron服務內容會被保存到/var/spool/cron/username文件中,在該文件被修改後,cron守護進程會從新讀到內存;
# 在/etc/crontab文件中會有cron.hourly/cron.daily/cron.weekly/cron.monthly等內容,分別指定按時/日/周/月執行的內容文件;若是某cron服務須要根據調度來執行,而非按時/日/周/月執行,則可添加到/etc/cron.d目錄中。

參考和補充:crontab 詳解crontab命令詳解


grep,全局正則搜索(Global search Regular Expression(RE) and Print out the line)

grep myword -r *    #在當前目錄下面搜索全部含有myword的行
-n    # 在匹配的行前面打印行號
-r    # 遞歸搜索文件夾中目錄及每一個文件
-i    # ignore-case,忽略大小寫
-h    # 打印時不顯示文件名
-l    # 只顯示包含匹配模板的行的文件名清單(不一樣項目之間用換行符分割)
-v    # 反檢索,只顯示不匹配的行
匹配tab符號:grep $'\t'

若是文章對你有用,請在收藏之餘「頂/贊」一下以示鼓勵吧 (/ω\)

相關文章
相關標籤/搜索