shell命令/使用場景

命令列表:

  • sleep seconds

  • date +%s 返回10位時間戳

  • cat/vim/more file

  • head/tail -n 10 file

  • wc [-L行/c字符/w單詞] file 統(tǒng)計文件行數(shù)/字符數(shù)/單次數(shù)

  • sudo ln -s 源文件 目標文件

ln -s  類似Windows下的超級鏈接。

舉例:
當前目錄是/local,而我經(jīng)常要訪問/usr/local/linux/work
那么我就可以使用在local下建立一個文件linkwork,
`sudo ln -s /usr/local/linux/work  /local/linkwork`

刪除鏈接
`rm -rf   symbolic_name`   注意不是
`rm -rf   symbolic_name/`
那么上面我就是
`rm -rf   /local/linkwork`
  • grep [-option] pattern file 如:grep '^我是10$’ grep.txt
-o 只顯示匹配的,輸出一行一個
-v 反轉(zhuǎn)-o
-n  顯示行號
-R/-r  遞歸
-e  正則
-A/B/C 查看指定內(nèi)容上下幾行

如何在 Linux 中找到最大的 10 個文件呢?

  1. find /home/homework/ -type f -print0 | xargs -0 du -h | sort -rh | head -n 10

  2. 切換到當前目錄:
    du -h |grep -P "\d+G"
    du -h |grep -P "\d+M"

  • find <指定目錄> <指定條件> <指定動作>
> find <指定目錄> <指定條件> <指定動作>
<指定目錄>: 所要搜索的目錄及其所有子目錄。默認為當前目錄。
<指定條件>: 所要搜索的文件的特征。
<指定動作>: 對搜索結(jié)果進行特定的處理。
如果什么參數(shù)也不加,find默認搜索當前目錄及其子目錄,并且不過濾任何結(jié)果(也就是返回所有文件),將它們?nèi)硷@示在屏幕上。


[find -print0和xargs -0原理及用法(https://www.cnblogs.com/liuyihua1992/p/9689314.html)

find -print0 表示在find的每一個結(jié)果之后加一個NULL字符,而不是默認加一個換行符。find的默認在每一個結(jié)果后加一個'\n',所以輸出結(jié)果是一行一行的。當使用了-print0之后,就變成一行了.

xargs -0表示xargs用NULL來作為分隔符
  • locate file ; updatedb
 locate 命令其實是“find -name”的另一種寫法,但是要比后者快得多,原因在于它不搜索具體目錄,而是搜索一個數(shù)據(jù)庫(/var/lib/locatedb),這個數(shù)據(jù)庫中含有本地所有文件信息。

Linux系統(tǒng)自動創(chuàng)建這個數(shù)據(jù)庫,并且每天自動更新一次,所以使用locate命令查不到最新變動過的文件。

為了避免這種情況,可以在使用locate之前,先使用updatedb命令,手動更新數(shù)據(jù)庫。
  • sed ’s/pattern/replace/‘ file 替換 ( -i 可以將替換應(yīng)用于原 文件)
  • command | xargs (xargs 默認是以空白字符 (空格, TAB, 換行符) 來分割記錄的)
-n 3   每行 3 個參數(shù)
-d X   自定義分界符

ls /home/xxx/ | tail | awk '{print $8}' | xargs -n 1 -I {}  bash -c "echo {};hadoop fs -cat {}

xargs -n 1 -I {} -P 30
    -n 每行輸出的數(shù)量
    -i/-I  參數(shù)配合{}即可進行文件的操作。
         加-i 參數(shù)直接用 {}就能代替管道之前的標準輸出的內(nèi)容;
         加 -I 參數(shù) 需要事先指定替換字符
        command| xargs  -i echo {}   == command| xargs  -I {} echo {} 
    -P 30 開30個線程
bash -c String 從輸入流執(zhí)行shell

  • ps
  • kill pid
  • pkill pname -9強制
  • cron
  • ssh user@host -p 端口(默認22)
  • lftp username@ftphost (端口21)
  • scp source destination 其中source和destination都可以是 user@host:path -r 遞歸復(fù)制

如:scp -r ./dist/* www@182.92.232.41:/home/wwwroot/p.[51tiancai.com/public/](http://51tiancai.com/public/)

  • ssh-keygen -t rsa -C "youremail@example.com"
  • open -a Google\ Chrome --args --disable-web-security
  • 壓縮命令:tar -zcvf 壓縮文件名.tar.gz 被壓縮文件名
  • 解壓縮命令:tar -zxvf 壓縮文件名.tar.gz

場景應(yīng)用

  1. 批量殺死所有存活的隊列進程
pids=`ps -ef|grep app:queue|grep "\-\-process="|grep -v touch|grep -v grep |awk '{print $2}'`
if [ ! -z "$pids" ]
then
    echo $pids|xargs kill
    echo "kill $pids success"
else
    echo 'process not found'
fi

image.png

cat test.log |awk '{print $3}' | sort | uniq -c

1、刪除以html結(jié)尾的10天前的文件,包括帶空格的文件:
find /usr/local/backups -name "*.html" -mtime +10 -print0 |xargs -0 rm -rfv

xargs -i 參數(shù)或者-I參數(shù)配合{}即可進行文件的操作。
加-i 參數(shù)直接用 {}就能代替管道之前的標準輸出的內(nèi)容;
加 -I 參數(shù) 需要事先指定替換字符

1.1復(fù)制以html結(jié)尾的10天前的文件,包括帶空格的文件到/dir/目錄下
find /usr/local/backups -name "*.html" -mtime +10 -print0 |xargs -0 cp {} /dir

2、統(tǒng)計所有c文件的行數(shù)
find source_code_dir_path -type f -name "*.c" -print0 | xargs -0 wc -l

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容