提升效率的一些linux命令以及shell 語法整理

整理一下日常開發(fā)中l(wèi)inux下的常用命令:

  1. 根據(jù)進(jìn)程名找到進(jìn)程id 并且kill掉

    $ps ux | grep demo
    userzhao+   378  0.0  0.0  10540   552 tty1     S    21:30   0:00 ./demo1
    
    # 找到進(jìn)程id
    $ps ux | grep demo | grep -v grep | awk '{print $2}'
    378
    
    # 然后kill掉 xargs 是個(gè)好東西
    # xargs -t 表示輸出對應(yīng)的命令
    $ps ux | grep demo | grep -v grep | awk '{print $2}' | xargs -t kill -9
    kill -9 378
    
  2. grep某個(gè)區(qū)間時(shí)間段的日志

    $ grep "2019-05-21 14:42:4[5-6]" dpkg.log
    2019-05-21 14:42:45 status not-installed linux-headers-generic:amd64 <none>
    2019-05-21 14:42:45 status installed linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:45 remove linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54 <none>
    2019-05-21 14:42:45 status half-configured linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:45 status half-installed linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:46 status config-files linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:46 status config-files linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:46 status config-files linux-headers-4.15.0-50-generic:amd64 4.15.0-50.54
    2019-05-21 14:42:46 status not-installed linux-headers-4.15.0-50-  generic:amd64 <none>
    2019-05-21 14:42:46 status installed linux-headers-4.15.0-50:all 4.15.0-50.54
    
    # 查詢cpu 80~89之間的日志
    grep "cpu : 8[0-9]%" *.log
    
    cat out.log 
    [20210708 23:29:01.645568] cpu usage: 0%
    [20210708 23:29:06.642943] cpu usage: 1%
    [20210708 23:29:11.643244] cpu usage: 2%
    [20210708 23:29:16.640893] cpu usage: 3%
    [20210708 23:29:21.642805] cpu usage: 4%
    [20210708 23:29:26.646420] cpu usage: 5%
    
    // 查看cpu操過3%的記錄
    grep "cpu" out.log | awk -F'%' '{print $1}'|awk '{if ($NF > 3) print $0}'
    

    其他的grep,find的相關(guān)的alias:
    http://www.reibang.com/p/ea22a699e456

  3. awk使用substr打印前n個(gè)字符

    $ cat /etc/passwd | awk -F : '{print substr($1,0,3)}'
    roo
    dae
    bin
    sys
    syn
    gam
    man
    
  4. 性能指標(biāo)查詢的相關(guān)命令

    top -b > profile.log    # 記錄某個(gè)時(shí)間的cpu和內(nèi)存狀態(tài) 
    top -H -p pid             # 查看某個(gè)進(jìn)程下面的線程cpu狀態(tài)
    free -g                      # 查看內(nèi)存
    iotop                         # 查看io
    pidstat -p pid            # 查看某個(gè)進(jìn)程
    
  5. mysql 在shell上面直接執(zhí)行查詢

    mysql -uroot -e "use information_schema;select * from COLUMNS limit 1;"
    
  6. 查找相關(guān)的命令 grep的結(jié)果高亮顯示 --color=auto

    // 查找文件中包含某個(gè)字符串的
    grep "xxxxx" xxx.log --color=auto 
    grep -rn "xxxx"  xxx.log
    
    // 查找包含某個(gè)字符串的文件名
    find . -name "table*"       // # 尋找是table開頭的文件名
    find . -name "*table*"      // # 尋找包含table的文件名
    
  7. 統(tǒng)計(jì)文件中單詞的數(shù)量

    $ cat test.txt 
    welcome shell 
    welcome to shell
    shell
    
     #方法1:
     $ cat test.txt| awk '{for(i=1; i<=NF;i++){a[$i]++}} END{for(key in a){print key" "a[key]}}'
     to 1
     welcome 2
     shell 3
    
     #方法2:
     $ cat test.txt | tr " " "\n" | awk '{if($1 != ""){a[$1]++}} END{for(key in a){print key" "a[key]}}'
     to 1
     welcome 2
     shell 3
    
  8. sort 排序

    $ cat out.txt 
    1 1000 40
    2 900 20
    3 600 80
    
    # 默認(rèn)從小到大
    $ sort out.txt      
    1 1000 40
    2 900 20
    3 600 80
    
    # 相反的排序
    $ sort -r out.txt
    3 600 80
    2 900 20
    1 1000 40
    
    # 根據(jù)第3列排序
    $ sort -k 3n out.txt
    2 900 20
    1 1000 40
    3 600 80
    
  9. uniq去重

    cat testfile
    hello
    world
    friend
    hello
    world
    hello
    
    #cat testfile | sort |uniq
    friend
    hello
    world
    

shell的基本語法
  1. 定義變量的時(shí)候购笆,不能加空格
a=100 # 不能加空格
  1. 條件判斷必須要加空格
#判斷等于
if [ $a1 = $b1 ]   #必須加上空格
then
   echo "eq"
else
   echo "not eq"
fi
  1. 其他的語法:
    https://github.com/zhaozhengcoder/CoderNoteBook/blob/master/note/bash%26shell%E7%BC%96%E7%A8%8B.md

  • 簡單的shell操作
# 這基本上是變量的替換
path="/var/www"
cd $path
cp -r $src_code_path $build_name
  • shell操作數(shù)據(jù)庫
# 使用shell再數(shù)據(jù)庫上面創(chuàng)建database
src_db_user=root
build_db_name=test

mysql -u $src_db_user << EOF 2>/dev/null
CREATE DATABASE $build_db_name
EOF
if [ $? -eq 0 ]  
then 
    echo "created DB" 
else 
    echo "DB already exists, sh exit"
    exit 1;
fi

Shell中通常將 EOF與 << 結(jié)合使用减宣,表示后續(xù)的輸入作為子命令或子Shell的輸入悟衩,直到遇到EOF為止狰晚,再返回到主調(diào)Shell盏筐。 可以把EOF替換成其他東西,意思是把內(nèi)容當(dāng)作標(biāo)準(zhǔn)輸入傳給程序晋柱。

回顧一下< <的用法恩脂。當(dāng)shell看到< <的時(shí)候,它就會知道下一個(gè)詞是一個(gè)分界符趣斤。在該分界符以后的內(nèi)容都被當(dāng)作輸入,直到shell又看到該分界符(位于單獨(dú)的一行)黎休。這個(gè)分界符可以是你所定義的任何字符串浓领。

參考:https://blog.csdn.net/wyl9527/article/details/72655277

  • shell結(jié)合sed命令
src_db_host=10.12.235.102
build_db_host=10.12.235.102
# sed 替換到匹配到的內(nèi)容
sed -i "s/host=${src_db_host}/user=${build_db_host}/g" file

# sed 替換到匹配到這一行
sed -i "/${src_db_host} /c ${build_db_host}"  file
  • shell拿到命令執(zhí)行的結(jié)果
# 打印一個(gè)目錄下面所有的php文件
for file in `ls | grep .php`
do 
   echo $file
done
  • shell中常見到的
0:表示鍵盤輸入(stdin)
1:表示標(biāo)準(zhǔn)輸出(stdout),系統(tǒng)默認(rèn)是1 
2:表示錯誤輸出(stderr)

1>/dev/null:表示標(biāo)準(zhǔn)輸出重定向到空設(shè)備文件玉凯。
也就是不輸出任何信息到終端,不顯示任何信息。

2>&1:表示標(biāo)準(zhǔn)錯誤輸出重定向等同于標(biāo)準(zhǔn)輸出联贩。
因?yàn)橹皹?biāo)準(zhǔn)輸出已經(jīng)重定向到了空設(shè)備文件,所以標(biāo)準(zhǔn)錯誤輸出也重定向到空設(shè)備文件漫仆。
  • shell 結(jié)合ini文件
    example.ini:

    DBNAME=test
    DBUSER=scott
    DBPASSWORD=tiger
    

    example.sh

    #!/bin/bash
    #Including .ini file
    . example.ini
    echo "${DBNAME}   ${DBUSER}  ${DBPASSWORD}"
    
  • shell的符號

$# 是傳給腳本的參數(shù)個(gè)數(shù)
$0 是腳本本身的名字
$1 是傳遞給該shell腳本的第一個(gè)參數(shù)
$2 是傳遞給該shell腳本的第二個(gè)參數(shù)
$@ 是傳給腳本的所有參數(shù)的列表
$* 是以一個(gè)單字符串顯示所有向腳本傳遞的參數(shù),與位置變量不同泪幌,參數(shù)可超過9個(gè)
$$ 是腳本運(yùn)行的當(dāng)前進(jìn)程ID號
$? 是顯示最后命令的退出狀態(tài)盲厌,0表示沒有錯誤,其他表示有錯誤

shell函數(shù)
  1. shell函數(shù)的例子
#!/bin/sh

# Define your function here
Hello () {
   echo "Hello World"
}

# Invoke your function
Hello
  1. shell函數(shù)處理輸入和返回輸出
# input  /var/www/
# output \/var\/www\/
handle_path_str()
{    
    echo $1 | sed 's#\/#\\\/#g'
}

build_path= /var/www/
build_path_str="$(handle_path_str $build_path)"
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末祸泪,一起剝皮案震驚了整個(gè)濱河市吗浩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌没隘,老刑警劉巖懂扼,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異右蒲,居然都是意外死亡阀湿,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進(jìn)店門瑰妄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來陷嘴,“玉大人,你說我怎么就攤上這事间坐≡职ぃ” “怎么了?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵眶诈,是天一觀的道長涨醋。 經(jīng)常有香客問我,道長逝撬,這世上最難降的妖魔是什么浴骂? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮宪潮,結(jié)果婚禮上溯警,老公的妹妹穿的比我還像新娘。我一直安慰自己狡相,他們只是感情好梯轻,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著尽棕,像睡著了一般喳挑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天伊诵,我揣著相機(jī)與錄音单绑,去河邊找鬼。 笑死曹宴,一個(gè)胖子當(dāng)著我的面吹牛搂橙,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播笛坦,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼区转,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了版扩?” 一聲冷哼從身側(cè)響起废离,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎资厉,沒想到半個(gè)月后厅缺,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡宴偿,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年湘捎,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片窄刘。...
    茶點(diǎn)故事閱讀 39,977評論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡窥妇,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娩践,到底是詐尸還是另有隱情活翩,我是刑警寧澤,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布翻伺,位于F島的核電站材泄,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏吨岭。R本人自食惡果不足惜拉宗,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望辣辫。 院中可真熱鬧旦事,春花似錦、人聲如沸急灭。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽葬馋。三九已至卖鲤,卻和暖如春肾扰,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背扫尖。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工白对, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人换怖。 一個(gè)月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像蟀瞧,于是被迫代替她去往敵國和親沉颂。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,927評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 官網(wǎng) 中文版本 好的網(wǎng)站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,383評論 0 5
  • 管道符、重定向 管道符 "|":將前一個(gè)命令的標(biāo)準(zhǔn)輸出當(dāng)作后一個(gè)命令的標(biāo)準(zhǔn)輸入 輸入輸出重定向:>與< 命令行通配...
    Kylin824閱讀 480評論 0 1
  • 一切端、Python簡介和環(huán)境搭建以及pip的安裝 4課時(shí)實(shí)驗(yàn)課主要內(nèi)容 【Python簡介】: Python 是一個(gè)...
    _小老虎_閱讀 5,746評論 0 10
  • 經(jīng)過一個(gè)周的學(xué)習(xí)踏枣,真的收獲超級超級多昌屉,對工作和生活也有了更好的規(guī)劃和安排,最直觀的感受就是時(shí)間“多了”茵瀑。具體有哪些呢间驮?
    小恩叨逼叨閱讀 290評論 1 4
  • 我們何其幸運(yùn) 在這是圓非圓的世界 恰好遇見 我們何其幸運(yùn) 在這六道輪回的時(shí)空 偏偏相逢 一切必有因 奈何糾結(jié)果 —...
    小5寫日記閱讀 518評論 4 8