Linux的命令行方式有著強(qiáng)大的功能,對(duì)于熟練的Linux系統(tǒng)管理員來說,往往只需要通過各種技巧,組合構(gòu)成一條復(fù)雜的命令,從而完成用戶任務(wù)。
那么一條復(fù)雜的Linux命令怎樣構(gòu)成呢?下面來介紹幾個(gè)技巧。
利用輸入/輸出重定向
?
在Linux命令行模式中,如果命令所需的輸出不是來自鍵盤,而是來自指定的文件,這就是輸入重定向。同理,命令的輸出也可以不顯示在屏幕上,而是寫入到指定文件中,這就是輸出重定向。
接下來看看標(biāo)準(zhǔn)輸入/輸出重定向在構(gòu)造一條Linux命令中的實(shí)際應(yīng)用。
1.輸入重定向和輸出重定向
?
# wc home.txt
第一條命令將文件aa.txt作為wc命令的輸入,統(tǒng)計(jì)出aa.txt的行數(shù)、單詞數(shù)和字符數(shù)。第二條命令將ls命令的輸出保存在一個(gè)名為home.txt的文件中。如果>符號(hào)后邊的文件已存在,那么這個(gè)文件將被重寫。
2.同時(shí)使用輸入和輸出重定向
?
# iconv -f gb18030 -t utf-8 new-aa.txt
這條命令里同時(shí)用到了輸入重定向(new-aa.txt)。aa.txt實(shí)際是一個(gè)gb18030編碼的文件,而new-aa.txt則是將aa.txt的內(nèi)容轉(zhuǎn)換成utf-8格式的新文件。
利用管道
利用Linux所提供的管道符“|”將兩個(gè)命令隔開,管道符左邊命令的輸出就會(huì)作為管道符右邊命令的輸入。連續(xù)使用管道意味著第一個(gè)命令的輸出會(huì)作為第二個(gè)命令的輸入,第二個(gè)命令的輸出又會(huì)作為第三個(gè)命令的輸入,依此類推。下面來看看管道是如何在構(gòu)造一條Linux命令中得到應(yīng)用的。
1.利用一個(gè)管道
# rpm -qa|grep licq
這條命令使用一個(gè)管道符“|”建立了一個(gè)管道。管道將rpm -qa命令的輸出(包括系統(tǒng)中所有安裝的RPM包)作為grep命令的輸入,從而列出帶有l(wèi)icq字符的RPM包來。
2.利用多個(gè)管道
# cat /etc/passwd | grep /bin/bash | wc -l
這條命令使用了兩個(gè)管道,利用第一個(gè)管道將cat命令(顯示passwd文件的內(nèi)容)的輸出送給grep命令,grep命令找出含有“/bin/bash”的所有行;第二個(gè)管道將grep的輸入送給wc命令,wc命令統(tǒng)計(jì)出輸入中的行數(shù)。這個(gè)命令的功能在于找出系統(tǒng)中有多少個(gè)用戶使用bash。
利用命令替換
在Linux命令行模式下,當(dāng)遇到一對(duì)“`” (上分割符)時(shí),將首先執(zhí)行“`”中間包含的命令,然后將其輸出結(jié)果作為參數(shù)代入命令行中,這就是命令替換了。它類似于輸入輸出的重定向功能,但區(qū)別在于命令替換是將一個(gè)命令的輸出作為另外一個(gè)命令的參數(shù)。下面來看它的實(shí)際應(yīng)用。
1.使用命令替換
# touch `date +%Y%m%d%k%M%S`.txt
該命令使用了一次命令替換,date +%Y%m%d%k%M%S命令將首先執(zhí)行,它將按指定格式輸出當(dāng)前的時(shí)間。然后,這個(gè)時(shí)間將被作為touch命令的參數(shù),其結(jié)果是建立了一個(gè)以當(dāng)前時(shí)間為文件名的文件。
2.使用命令替換
?
# kill `/sbin/pidof smbd`
該命令將殺掉sshd的所有進(jìn)程。這里用pidof這個(gè)命令給出進(jìn)程號(hào),因?yàn)閗ill是針對(duì)進(jìn)程號(hào)進(jìn)行操作的。兩者通過命令替換,實(shí)現(xiàn)了只用一條命令就殺掉sshd所有進(jìn)程的功能。
綜合應(yīng)用
?
在理解和熟悉了前面的幾個(gè)技巧后,將它們綜合運(yùn)用起來就是較高的技巧了。同時(shí),一些常用的、且本身用法就比較復(fù)雜的Linux命令一定要熟練掌握。在構(gòu)造Linux命令中常常用到的一些基礎(chǔ)的、重要的命令有g(shù)rep、tr、sed、awk、find、cat和echo等,下面來看一些綜合應(yīng)用的例子。
1.
# man ls | col -b > ls.man.txt
這條命令同時(shí)運(yùn)用了輸出重定向和管道兩種技巧,作用是將ls的幫助信息轉(zhuǎn)成一個(gè)可以直接閱讀的文本文件。
2.
# kill -9 `ps -ef | grep smbd | tr -s ' ' | awk -F' ' '{print $2}'`
這個(gè)例子的功能和上面的功能是一樣的,不過它不依賴pidof命令,使用的是多數(shù)Unix類系統(tǒng)中都有的命令,適用于更多的系統(tǒng)環(huán)境。但是它看起來更復(fù)雜一些,使用了三個(gè)管道和一次命令替換,另外使用了grep、tr和awk三個(gè)與字符操作相關(guān)的命令。
從前面的介紹可以看出,通過幾種技巧的組合,Linux命令可以完成復(fù)雜的功能。除此之外,還可以將這些命令組織到一個(gè)腳本中來,加上函數(shù)、變量、判斷和循環(huán)等功能,再加入一些編程思想,就是功能更強(qiáng)大的Shell腳本了。
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
