溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Linux命令行下有什么好東西

發(fā)布時(shí)間:2021-10-21 14:33:52 來(lái)源:億速云 閱讀:158 作者:小新 欄目:系統(tǒng)運(yùn)維

這篇文章將為大家詳細(xì)講解有關(guān)Linux命令行下有什么好東西,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

tmux

雖然說(shuō)順序很隨機(jī)但這一條一定得排在第一個(gè)。很多人用 Linux 的狀態(tài)都是自己的機(jī)器是 Windows,用 putty 連到一個(gè)哪里的 Linux  服務(wù)器進(jìn)行工作。這樣的話每次斷開(kāi)的時(shí)候你運(yùn)行的程序都是會(huì)被殺掉的。你可能會(huì)希望退出的時(shí)候能把打開(kāi)的程序保持在那里,下次用連接的時(shí)候又能自動(dòng)到之前的工作狀態(tài)。tmux  就是這個(gè)問(wèn)題的終極解決方案。它們一方面的功能是能在一個(gè) Terminal  里創(chuàng)建多個(gè)“窗口”,另一方面如果你關(guān)閉連接或者意外掉線,它們默認(rèn)也不會(huì)關(guān)掉,下次連上去可以用 tmux attach 來(lái)恢復(fù)你之前的工作狀態(tài)。

如果你沒(méi)聽(tīng)說(shuō)過(guò)這個(gè)或者類似的 screen 的話,那你應(yīng)該給我一點(diǎn)現(xiàn)金。

tree

ls 可能是你最常用的命令之一。tree 可以遞歸的列出目錄下所有的文件,并以樹(shù)狀形式展現(xiàn):

$ tree  . ├── b ├── c │ └── d └── what

對(duì)應(yīng)的也有 pstree 可以以這樣的方式來(lái)顯示進(jìn)程樹(shù)。

ack

我記得我曾經(jīng)在面試的時(shí)候被問(wèn)到過(guò)“請(qǐng)寫(xiě)如何調(diào)用 grep 來(lái)列出當(dāng)前目錄下所有文件里,含有某個(gè)字符串的行”。這個(gè)問(wèn)題我的回答是 “用 ack  就可以了”。ack 的官網(wǎng)域名就叫 betterthangrep.com。由于在當(dāng)前目錄下載所有文件里查找某個(gè)字串符是如此常見(jiàn)的一個(gè)操作,執(zhí)行 ack foo  就可以在當(dāng)前目錄所有文件里查找 foo。ack 默認(rèn)會(huì)跳過(guò)很多沒(méi)用的目錄和文件,讓查找更快,輸出結(jié)果更準(zhǔn)確。另外像默認(rèn)開(kāi)啟的彩色顯示也讓人用起來(lái)很舒暢。

ack 目前大部分發(fā)行版中沒(méi)有,如果你使用的是 Ubuntu 的話其包裹名字是 ack-grep,執(zhí)行文件的名字也一樣。具體可以在這里查看文檔。

rsync

比如說(shuō)你本地有一臺(tái)電腦,遠(yuǎn)程有一臺(tái)服務(wù)器。你想把你的一個(gè)文件夾全部拷貝到另外一邊的某個(gè)地方去。你這個(gè)文件夾經(jīng)常也要更新,希望通過(guò)某種方式把更新的部分能迅速同步過(guò)去。這應(yīng)該怎么做?不知道  rsync 的話你可能會(huì)想用 git,搭建一個(gè) ftp,或者用 scp 或者別的。但事實(shí)上 rsync 才是真正的為精確的解決這個(gè)問(wèn)題而生的軟件。rsync  最棒的地方就是差量更新,也就是只把另外一邊缺少的東西傳過(guò)去,而且你不需要任何額外配置,速度快的飛起。一個(gè)例子:

rsync -arvuzp --chmod=g+rx ./built/ me@example.com:/var/www/site

aspell

作為一個(gè)程序員你總有一天會(huì)要寫(xiě)英文文檔。我等母語(yǔ)不是英文的出現(xiàn)拼寫(xiě)錯(cuò)誤實(shí)在是太正常了。如果你用 Word  的話會(huì)有下劃線提示你,但如果你是在代碼里寫(xiě)注釋或者再 Linux 下寫(xiě) markdown 的話好像就沒(méi)什么辦法。事實(shí)上這也是一個(gè)已經(jīng)被解決的問(wèn)題,aspell  正是來(lái)做這個(gè)的。aspell 可以對(duì)任何純文本進(jìn)行拼寫(xiě)檢查,作為面向程序員的工具它可以偵測(cè)文件類型,比如對(duì) C++ 程序它就只檢查注釋里的單詞。

tee

有時(shí)候某些命令運(yùn)行的結(jié)果會(huì)很長(zhǎng),你可能會(huì)用 less 來(lái)上下看。再或者你可能會(huì)用 > 來(lái)重定向到文件里。但某些時(shí)候程序有可能需要你輸入 y  來(lái)確認(rèn),或者某些程序運(yùn)行的時(shí)間很長(zhǎng),僅僅重定向的話又不太確定是不是它在正常運(yùn)行。tee 就能做到又輸出到屏幕上,又同時(shí)重定向到文件。一個(gè)簡(jiǎn)單的例子:

$ echo waht | tee out.txt

waht 會(huì)被輸出到屏幕上,同時(shí)也會(huì)被寫(xiě)到 out.txt 文件里。另外 tee 的意思其實(shí)是  T,把輸入輸出中間拉了又多扯出了一條,可謂是相當(dāng)形象。

值得一提的是 vim 也可以用在 pipe 里,例子如下:

$ echo waht | vim -

<ctrl+r\>

你肯定知道用鍵盤上下方向鍵可以來(lái)回找你的歷史,那么比如有一個(gè)很久之前打過(guò)的命令你可能需要猛按上才能找到。其實(shí)這時(shí)候只要輸入一部分然后按  bash 就會(huì)幫你往回搜索。連續(xù)按 可以按順序往前搜。(或者直接按 再進(jìn)行輸入)。接著上面一個(gè)的例子,輸入  echo 后按 效果如下:

(reverse-i-search)`echo': echo waht | vim -

有往前搜索那么一般就有往后搜索??上У氖峭笏阉鞯目旖萱I是 ,如果你試著按一下的就會(huì)發(fā)現(xiàn)...好像機(jī)器沒(méi)反應(yīng)了。這個(gè)是因?yàn)? 大部分情況下默認(rèn)是 XOFF,代表暫停接收輸入。按 就能恢復(fù)。當(dāng)然你可以把向前搜索綁定到別的鍵上,請(qǐng)自行搜索。

cloc

雖說(shuō)代碼行數(shù)不能說(shuō)明任何問(wèn)題,但有時(shí)候不知為什就是想知道。cloc  能精確的計(jì)算代碼行數(shù),把注釋和空格都區(qū)分開(kāi)。如果你是一名傳說(shuō)中的項(xiàng)目經(jīng)理的話,從今天起開(kāi)始用 cloc 給你手下的碼農(nóng)算工資吧!下附截屏:

$ cloc /usr/include/  9628 text files. 9308 unique files. 434 files ignored.  T=39.0 s (227.6 files/s, 39948.2 lines/s) ------------------------------------------------- Language files blank comment code ------------------------------------------------- C/C++ Header 8875 217366 287013 1053368 Teamcenter def 1 48 0 186 ------------------------------------------------- SUM: 8876 217414 287013 1053554 -------------------------------------------------

printenv

用 set 可以查看所有的 Shell 變量還包括 Shell 函數(shù),但是其中有一些是僅僅在當(dāng)前 shell 里其作用的。而往往你需要找的是通過(guò)  export 來(lái)定義的環(huán)境變量。printenv 就是用來(lái)做這個(gè)的。

set -o vi

bash 或者可能絕大多數(shù)常見(jiàn) shell 其實(shí)都是支持用 vi 的方式進(jìn)行命令行編輯的,比如設(shè)置了 set -o vi 后你就可以用熟悉的 hjkl  來(lái)移動(dòng),用 w, b 來(lái)跳過(guò)單詞等等。

同樣的如果你設(shè)置了 EDITOR 環(huán)境變量的話,輸入 fc  就可以把之前輸入的命令行放到編輯器里來(lái)編輯,只要保存了的話就會(huì)執(zhí)行。相反的放棄保存就等于是放棄。

find

我把上面說(shuō)到的那本書(shū)仔細(xì)看過(guò)以后,最大的收獲之一就是終于學(xué)會(huì)了用 find。這個(gè)現(xiàn)在變成了我?guī)缀趺刻於荚谟玫囊粋€(gè)命令。比如說(shuō)我要把目錄下所有的 png  文件加入到這次的 git commit 里面,我可以用:

find . -name '*.png' -exec git add {} ';'

如果你熟悉 find 的話你會(huì)知道最后的 ; 可以換為 +  會(huì)更好,但用它就是有目的的。這個(gè)命令雖然看起來(lái)很簡(jiǎn)單,但里面的單引號(hào)省略或者換成雙引號(hào)命令都是會(huì)失敗的。這些牽涉到 "shell variable  expansion" 和引號(hào)的 escape  規(guī)則,雖然感覺(jué)很惱火但其實(shí)這些只有幾個(gè)簡(jiǎn)單的規(guī)則,而且一致性非常好。所以只要你肯花點(diǎn)時(shí)間把相關(guān)東西弄清楚,這種簡(jiǎn)單的問(wèn)題就可以輕松搞定。

type

如果 foo 是一個(gè)命令行里可以直接運(yùn)行的程序的話,你應(yīng)該知道用 which foo 可以找到 foo  的可執(zhí)行文件路徑在那里。但在命令行里可以執(zhí)行的命令并不一定都對(duì)應(yīng)到某個(gè)可執(zhí)行的文件,它可以是 alias, shell  自帶的函數(shù)和用戶自己的函數(shù)等等。所以有時(shí)候用 which 找到不到東西的時(shí)候會(huì)讓人很疑惑。其實(shí)你可以用 type foo 看看 foo  到底是什么類型的。

help

上面提到了 "builtin command" 也就是內(nèi)置命令,就是由 shell 提供的一些基本的或者無(wú)法由外部程序做到的命令。平常你可以用 man  來(lái)查看文檔,但是對(duì)于內(nèi)置命令 man 會(huì)跳到 shell 自己的  manpage,在某些系統(tǒng)里那就是巨大的一頁(yè)你要再里面找到你想看的東西,有些系統(tǒng)里干脆就沒(méi)有相關(guān)的信息。這種時(shí)候用 help  這個(gè)內(nèi)置命令就可以解決這個(gè)問(wèn)題:比如要查看 set 的接受的選項(xiàng),可以用 help set 來(lái)輕松找到。

env

你應(yīng)該知道在 #! (shebang) 在腳本第一行的作用是指定其 'runtime'。比如說(shuō)你想要寫(xiě)一個(gè) Python  的腳本,但其實(shí)不太在意其版本,或者不確定其可執(zhí)行文件在不同的機(jī)器上到底在哪里。那么 env 在這里就可以派上用場(chǎng)了。可以寫(xiě)成 #!/usr/bin/env  python,這樣執(zhí)行的時(shí)候就會(huì)用當(dāng)前 PATH 中找到的 python。另一方面這個(gè)也是一個(gè)給你一個(gè)在不修改代碼的情況下,重新選擇 'runtime'  的機(jī)會(huì)。

file

如果你想知道某個(gè)路徑上的文件到底是什么類型的,那么用 file  是再合適不過(guò)的了。它能對(duì)任何東西都給出一個(gè)有意義的解釋,對(duì)于二進(jìn)制文件還會(huì)列出很多相關(guān)的重要信息。

strings

“我把我的秘密,放在了這個(gè)用 C++ 編寫(xiě)的程序里面。運(yùn)行它輸入正確的密碼才能看到”。其實(shí)萬(wàn)一遇到這種情況你只要跑 strings  program-written-in-cxx 十有八九你就能看到了。它能比較準(zhǔn)確的列出二進(jìn)制文件里包含的 C  風(fēng)格的字符串。看起來(lái)沒(méi)什么意義但是其實(shí)作用完全要靠你發(fā)揮,比如要知道某個(gè)程序是哪個(gè)版本 GCC 編譯出來(lái)的用 strings 可能有結(jié)果。

od

全程應(yīng)該是 "object dump",可以將文件按八進(jìn)制,十六進(jìn)制或者其他方式顯示出來(lái)。我覺(jué)得大部分情況下這大家都在用 od -c,將文件按 ASCII  碼 dump 出來(lái)。一個(gè)用例是用來(lái)看文件的 line ending 到底是怎樣的。比如執(zhí)行 od -c foo.txt 顯示如下結(jié)果:

$ od -c foo.txt  0000000 h e l l o \t w o r l d \r \n y e a 0000020 h 0000021

可以清楚的看到 \t 是 tab 字符, \r\n 是 Windows 風(fēng)格的換行符。

關(guān)于“Linux命令行下有什么好東西”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI