十 款你不知道的 Linux 環(huán)境下的替代工具!
在 Linux 操作系統(tǒng)下,我們經(jīng)常使用 cat 命令去連接多個文件并打印到標(biāo)準(zhǔn)輸出,合成幾個文件為一個目標(biāo)文件,追加幾個文件到目標(biāo)文件中。
最近我在 GitHub 上發(fā)現(xiàn)了一個具有相似作用的命令叫做 “Bat”,它是 cat 命令的替代品,具有一些例如語法高亮、 Git 集成和自動分頁等非??岬奶匦?。
在這篇文章中,就來給大家介紹下如何在 Linux 中安裝和使用 bat 命令。
01.bat
安裝 bat
Arch Linux
bat 可以在 Arch Linux 操作系統(tǒng)的默認(rèn)軟件源中進(jìn)行獲取,可直接使用 pacman 命令在任何基于 Arch 的系統(tǒng)上來安裝它。
- pacman -S bat
Fedora
- dnf install bat
macOS
- brew install bat
Ubuntu 21.10
我是通過 Ubuntu 環(huán)境下安裝的 bat,從 bat 的發(fā)布頁面下載.deb文件,可執(zhí)行如下命令進(jìn)行下載和安裝。
- sudo apt-get install wget
- wget https://github.com/sharkdp/bat/releases/tag/v0.18.3/bat_0.18.3_amd64.deb
- sudo dpkg -i bat_0.18.3_amd64.deb
對于其他系統(tǒng),也許需要從軟件源編譯并安裝,或參考 GitHub 上 bat 的其他操作系統(tǒng)安裝方式。
bat 命令的使用
bat 命令的使用與 cat 命令的使用非常相似。
使用 bat 命令創(chuàng)建一個新文件:
- bat > jiaoben1.sh
使用 bat 命令查看文件內(nèi)容:
- bat jiaoben1.sh
使用 bat 命令同時查看多個文件:
- bat jiaoben1.sh jiaoben2.sh
使用 bat 命令將多個文件的內(nèi)容合并到一個單獨的文件中:
- bat jiaoben1.sh jiaoben2.sh > test.txt
上述介紹了 bat 創(chuàng)建新文件、查看文件內(nèi)容、將多個文件的內(nèi)容合并到一個單獨的文件中的方式。
接下來,我們就來看一下 bat 命令一些非常酷的特性。
bat 命令支持大多數(shù)編程和標(biāo)記語言的語法高亮,那么我們就來使用 cat 和 bat 命令展示下 jiaoben1.sh 里面的內(nèi)容做個鮮明的對比。
可以看出,cat 命令以純文本格式顯示文件的內(nèi)容,而 bat 命令顯示了語法高亮和整齊的文本對齊格式。
從上面 bat 命令的輸出,可以看出是有表格線的,如果你只想顯示行號(而沒有表格)可以使用-n參數(shù)來實現(xiàn),雖然 cat 執(zhí)行也會顯示行號,但還是沒有 bat 執(zhí)行輸出后的效果美觀。
- bat -n jiaoben2.sh
bat 命令支持 Git 集成,可以輕松查看和編輯 Git 存儲庫中的文件,bat 與 Git 連接可顯示關(guān)于索引的修改。
bat 支持自動分頁,這點特性也是需要值得注意的。
支持分頁意思也就是說,當(dāng)文件的輸出內(nèi)容超出屏幕顯示的時候,bat 命令會自動將自己輸出的內(nèi)容傳到 less 命令中,你將可以使用回車鍵一頁一頁的查看輸出內(nèi)容,使用空格鍵可直接跳轉(zhuǎn)至文末最后一行。
當(dāng)你使用 bat 命令時這些都是不必要的,bat 命令將自動傳輸跨越多個頁面的文件的輸出。
- bat jiaoben3.sh
對比下 cat 命令,查看 jiaoben3.sh 跨多個頁面文件內(nèi)容時,提示符會直接跳到文件的最后一頁,將無法看到跨多個頁面文件開頭及中間部分的內(nèi)容。
- cat jiaoben3.sh
如果你想要通過 cat 來實現(xiàn) bat 命令的效果,則需要去使用 cat 的輸出傳輸?shù)?less 命令中去,這樣就可以從開頭部分一頁一頁的查看內(nèi)容了。
- cat jiaoben3.sh | less
同樣,這種方式也是可以使用回車鍵一頁一頁的查看輸出內(nèi)容以及使用空格鍵可直接跳轉(zhuǎn)至文末最后一行。
bat 定制主題
目前 bat 定制主題有 24 種,包括:Coldark-Cold、GitHub、Monokai Extended Light、OneHalfDark、Solarized (light)、TwoDark、Visual Studio Dark+、base16、zenburn 等;
如果你不喜歡默認(rèn)主題,也是可以根據(jù)自己的風(fēng)格進(jìn)行修改,只需執(zhí)行:bat --list-themes命令,即可顯示可用的主題。
- # bat --list-themes
- Theme: 1337
- // Output the square of a number.
- fn print_square(num: f64) {
- let result = f64::powf(num, 2.0);
- println!("The square of {:.2} is {:.2}.", num, result);
- }
- ......
例如你要選擇Dracula主題,可直接執(zhí)行:bat --theme=Dracula 文件名
如果你想永久改變某一個主題,可使用export BAT_THEME="Dracula"在你的 shell 啟動文件,以使更改為永久。
您可以使用--style參數(shù)選項來控制bat輸出的外觀,配置元素包括:行號、文件頭、網(wǎng)格邊框、Git修改來顯示除文件內(nèi)容之外的東西,參數(shù)是一個逗號分隔的列表。
--style=numbers,changes可以使用僅顯示 Git修改和行號,而不顯示網(wǎng)格和文件標(biāo)題,設(shè)置BAT_STYLE環(huán)境變量以使這些更改為永久。
關(guān)于更多 bat 的使用方法可通過執(zhí)行命令man bat或bat --help。
除此之外,也可以通過 bat 項目的 GitHub 庫查看更多詳細(xì)信息,我用過 bat 后就不會再想用回 cat 了!
02.duf
在 Linux 環(huán)境下,我們知道 df 命令是用于顯示磁盤分區(qū)上可使用的磁盤空間,默認(rèn)顯示單位為 KB,你還可以利用該命令來獲取硬盤被占用了多少空間,目前還剩下多少空間等信息。
- # df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/sda3 18439940 4943264 12559972 29% /
- tmpfs 506176 76 506100 1% /dev/shm
- /dev/sda1 99150 30003 64027 32% /boot
- /dev/sr0 4363088 4363088 0 100% /media/CentOS_6.5_Final
除此之外,du 命令也是查看使用空間的,但與 df 命令不同的是 Linux du 命令是對文件和目錄磁盤使用的空間的查看,和 df 命令還是有一些區(qū)別的。
- # du
- 4 ./.abrt
- 8 ./.dbus/session-bus
- 12 ./.dbus
- 4 ./.nautilus
- 40 ./.local/share/gvfs-metadata
- 24 ./.local/share/applications
- 68 ./.local/share
- 72 ./.local
接下來就跟大家介紹一款終端工具,你可以理解為傳統(tǒng)的 Linux 命令 df 和 du 整合版 —— duf。
duf 是一個用 Golang 編寫的跨平臺磁盤使用情況工具,可以讓你輕松地檢查可用磁盤空間,對輸出進(jìn)行分類,并以用戶友好的方式進(jìn)行呈現(xiàn),適用于 Linux、Windows、macOS、Android、FreeBSD;
Ubuntu 安裝方式:
- $ sudo apt install gdebi
- #如果報錯,F(xiàn)ailed to fetch http://security.ubuntu.com......
- # sudo apt-get update
- $ sudo gdebi duf_0.5.0_linux_amd64.deb
- #要先在下載duf_0.5.0_linux_amd64.deb,下載地址為:https://github.com/muesli/duf/releases/download/v0.5.0/duf_0.5.0_linux_amd64.deb
MacOS 安裝方式:
- #先安裝Homebrew,按照提示安裝即可。
- /bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)"
- #安裝duf
- brew install duf
- #或者
- sudo port selfupdate && sudo port install duf
Windows 安裝方式:
- choco install duf
- #或者
- scoop install duf
安裝完畢后,可直接使用 duf,方法也非常簡單。
不添加任何參數(shù),會輸出所有本地設(shè)備、已掛載的任何云存儲設(shè)備以及任何其他特殊設(shè)備(包括臨時存儲位置等)的詳細(xì)信息;
- $ duf
如果你只想查看本地連接設(shè)備的詳細(xì)信息,而不想看其他的,可執(zhí)行:
- $ duf --only local
如果你只想根據(jù)大小按特定順序?qū)敵鲂畔⑦M(jìn)行排序,可執(zhí)行:
- $ duf --sort size
更多參數(shù)使用方式:
- duf /home /some/file 根據(jù)參數(shù),則 duf 將僅列出特定的設(shè)備和安裝點
- duf --all 列出所有內(nèi)容
- duf --hide-network 隱藏網(wǎng)絡(luò)文件系統(tǒng),與之對應(yīng)的 --hide-fuse --hide-special --hide-loops --hide-binds
- duf --inodes 列出inodes
- duf --output mountpoint,size,usage 指定輸出的格式 對應(yīng)的還有(mountpoint, size, used, avail, usage, inodes, inodes_used, inodes_avail, inodes_usage, type, filesystem)
- duf --json 以json格式輸出
- duf --theme light 如果 duf 無法正確檢測終端的顏色,可以設(shè)置一個主題
- duf --help 查看所有 duf 的可用命令
03.tldr
對于初學(xué)者學(xué)習(xí) Linux 來說,遇到最多的問題就是在 Linux 操作系統(tǒng)下有記不完的命令以及包括各種參數(shù)的使用方法,其實你根本不用死記硬背它,當(dāng)你用到時去查找相關(guān)資料或通過man命令來查看相關(guān)文檔,man手冊輸出的信息也比較多,而對于參數(shù)較多的命令來說,翻看man手冊也非常吃力。
這次就給大家介紹一款工具:tldr,它的全稱是:Too Long, Don't Read,中文意思:太長不看的意思。
其實跟man命令的結(jié)果基本上就是太長不看,tldr 這個工具你可以理解為簡化了 man 命令的幫助文檔,把 Linux 命令最常用的一些命令用法列舉出來,非常容易看懂。
同時,tldr包括非常多語言編寫的客戶端,比如:C、Go、iOS、Python、nodejs 等等,你可以使用不同的客戶端來安裝;
我這里的環(huán)境是 Ubuntu,需要先安裝 Node.js,然后根據(jù)下述安裝方式操作:
- sudo apt-get install nodejs
- sudo apt-get install npm
- sudo npm install -g tldr
執(zhí)行完上述三條命令后,還需要再執(zhí)行tldr --update,更新tldr至最新的狀態(tài),然后就可以直接使用了;
- tldr --update
tldr 的使用:
tldr 命令的使用也非常簡單,只需 tldr + 你所要查詢的命令即可;
04.htop
在 Linux 操作系統(tǒng)上顯示進(jìn)程運行狀態(tài)信息最常用工具是我們熟悉的 top,它是每位系統(tǒng)管理員的好幫手。
htop 可以說是 top 的絕佳替代品,它是用 C 寫的,是一個跨平臺的交互式的進(jìn)程監(jiān)控工具,具有更好的視覺效果,一目了然更容易理解當(dāng)前系統(tǒng)的狀況,允許垂直和水平滾動進(jìn)程列表以查看它們的完整命令行和相關(guān)信息,如內(nèi)存和 CPU 消耗。還顯示了系統(tǒng)范圍的信息,例如平均負(fù)載或交換使用情況。
顯示的信息可通過圖形設(shè)置進(jìn)行配置,并且可以交互排序和過濾,與進(jìn)程相關(guān)的任務(wù)(例如終止和重新處理)可以在不輸入其 PID 的情況下進(jìn)行完成。
安裝也很簡單,只需執(zhí)行命令:apt install htop即可完成。
htop 比起 top,優(yōu)勢很明顯,除了功能更加完善以外,它的色彩搭配也很豐富,整體上使用起來更加友好。
05.glances
Glances 是用 Python 寫的一個跨平臺的監(jiān)控工具,旨在通過 curses 或基于 Web 的界面呈現(xiàn)大量系統(tǒng)監(jiān)控信息,該信息根據(jù)用戶界面的大小動態(tài)調(diào)整,是 GNU/Linux、BSD、Mac OS 和 Windows 操作系統(tǒng)的 top/htop 替代品。
它可以在客戶端/服務(wù)器模式下工作,遠(yuǎn)程監(jiān)控可以通過終端、Web 界面或 API(XML-RPC 和 RESTful)完成,統(tǒng)計數(shù)據(jù)也可以導(dǎo)出到文件或外部時間/值數(shù)據(jù)庫。
除了列出所有進(jìn)程及其 CPU 和內(nèi)存使用情況之外,它還可以顯示有關(guān)系統(tǒng)的其他信息,比如:
- 網(wǎng)絡(luò)及磁盤使用情況
- 文件系統(tǒng)已使用的空間和總空間
- 來自不同傳感器(例如電池)的數(shù)據(jù)
- 以及最近消耗過多資源的進(jìn)程列表
06.exa
提到 ls 命令,大家都不陌生,在 Linux 環(huán)境下,其主要作用:列出當(dāng)前目錄下所包含的文件及子目錄,如果當(dāng)前目錄下文件過多,則使用命令 ls 不是很好,因為這輸出出來的結(jié)果跟你所要查找的文件未能達(dá)成一致,第一:需要進(jìn)行二次過濾查找;第二:文件過多時,終端輸出結(jié)果較慢;
EXA 是 Unix 和 Linux 操作系統(tǒng)附帶的命令行程序的 ls 現(xiàn)代替代品,賦予它更多功能和更好的默認(rèn)值。它使用顏色來區(qū)分文件類型和元數(shù)據(jù)。它了解符號鏈接、擴(kuò)展屬性和 Git。它體積小、速度快,而且只有一個二進(jìn)制文件。
EXA 與 LS 有什么不同之處?
- 終端屏幕不再是瓶頸:exa 功能強(qiáng)大,比 ls 要友好,輸出結(jié)果會更快;
- 顏色:exa 大量使用顏色;
- 不與 ls 命令沖突
EXA 的特征
- 色彩:文件類型列表以及如何區(qū)分文件;
- 網(wǎng)格視圖:在與終端窗口大小相同的網(wǎng)格中顯示文件;
- 長遠(yuǎn):在表中顯示文件及其元數(shù)據(jù);
- 樹視圖:在樹中顯示文件及其子代;
- Git 集成:在存儲庫中時,查看文件的 Git 狀態(tài);
- 篩選:隱藏列表中的文件,顯示不可見的文件,并對輸出進(jìn)行排序;
- Xattrs:列出文件的擴(kuò)展屬性;
Ubuntu 21.10 安裝只需執(zhí)行命令:apt install exa即可。
顯示選項
- -1,--oneline:每行顯示一個條目
- -G,--grid:將條目顯示為網(wǎng)格(默認(rèn))
- -l,--long:顯示擴(kuò)展細(xì)節(jié)和屬性
- -R,--recurse:遞歸到目錄
- -T,--tree:作為樹遞歸到目錄中
- -x,--across:對網(wǎng)格進(jìn)行排序,而不是向下排序
- -F,--classify:按文件名顯示類型指示器
- --colo[u]r:何時使用終端顏色
- --colo[u]r-scale : 清楚地突出顯示文件大小的級別
- --icons : 顯示圖標(biāo)
- --no-icons : 不顯示圖標(biāo)(總是覆蓋 --icons)
過濾選項
- -a,--all:顯示隱藏和“點”文件
- -d,--list-dirs:像普通文件一樣列出目錄
- -L,--level=(depth):限制遞歸深度
- -r,--reverse:反轉(zhuǎn)排序順序
- -s,--sort=(field):按哪個字段排序
- --group-directories-first:在其他文件之前列出目錄
- -D,--only-dirs:只列出目錄
- --git-ignore:忽略中提到的文件.gitignore
- -I,--ignore-glob=(globs):要忽略的文件的全局模式(管道分隔)
傳遞該--all選項兩次以同時顯示.和..目錄。
關(guān)于 EXA 更多可參考:《一款開源替代 ls 的工具你值得擁有!》
07.fd
fd 是一個在文件系統(tǒng)中查找條目的程序,它是 find 命令的一個簡單、快速且用戶友好的替代品,fd 目的不是取代 find 命令所提供的全部功能,而是在多數(shù)用例中提供了合理的默認(rèn)值,在某些情況下非常有用。
fd 輸出是彩色的,類似于某些 ls 模式,它是遞歸的,在包含 Git 存儲庫的目錄中搜索源代碼文件時,fd 會自動排除隱藏的文件和目錄,包括.、.git目錄,并忽略.gitignore文件中的模式。一般來說,搜索速度更快,而且第一次搜索時會提供了更多相關(guān)結(jié)果。
默認(rèn)情況下,fd 在當(dāng)前目錄中執(zhí)行不區(qū)分大小寫的模式搜索,但是,如果你的搜索模式包含一個大寫字母,fd 將以區(qū)分大小寫的模式進(jìn)行執(zhí)行。當(dāng)然,也可以重寫默認(rèn)值,但在許多情況下還是有利的。同樣使用 find 進(jìn)行相同的搜索需要你提供額外的命令行參數(shù)。
fd 可用于許多 Linux 發(fā)行版,執(zhí)行以下命令,可以使用標(biāo)準(zhǔn)存儲庫在 Ubuntu 中安裝:
- sudo apt install fd-find
在 Ubuntu 操作系統(tǒng)中,命令是 fdfind,避免與其他現(xiàn)有的實用程序名稱發(fā)生沖突,如果希望它是 fd,可以設(shè)置一個別名:
- alias fd=fdfind
要使別名保持不變,在重啟后仍然可用,請將其放入“.bashrc”或“.bash_aliases”文件中。
使用不帶參數(shù)選項的 fd,則類似于 ls,不同之處在于它默認(rèn)情況下也會將子目錄中的文件進(jìn)行列出。
- fd
- bat_0.18.3_amd64.deb
- fd_8.3.0_amd64.deb
- jiaoben1.sh
- jiaoben2.sh
- jiaoben3.sh
- snap
- snap/firefox
- snap/firefox/631
- snap/firefox/731
- snap/firefox/common
- snap/firefox/current
- snap/snap-store
- snap/snap-store/557
- snap/snap-store/558
- snap/snap-store/common
- snap/snap-store/current
- test.md
在當(dāng)前目錄中搜索所有的 markdown 文件(.md 或.MD ),find 命令如下:
- find . -iname "*.md"
- ./test.md
使用 fd 進(jìn)行同樣的搜索:
- fd *.md
- test.md
在某些情況下,fd 需要額外的選項;例如,如果你想包含隱藏文件和目錄,則必須使用選項 -H,而這在 find 中是不需要的,關(guān)于 fd 更多命令行參數(shù)選項的使用方法,可查閱 fd GitHub 存儲庫。
08.ag
ack和ag是兩個文本搜索工具,比自帶的grep要好用得多。
在指定目錄下搜索文本時,不需要像 grep 那樣指定各種命令行選項,輸出結(jié)果也會包含文件名和行號,并且會高亮顯示搜索關(guān)鍵字。
ag是可以比grep、ack更快的遞歸搜索文件內(nèi)容。
Ubuntu 21.10 安裝 ag 和 ack
- apt-get install silversearcher-ag
- apt install ack
ag 命令常用參數(shù)
- ag -g (文件名):類似于 find . -name (文件名)
- ag -i sed:忽略大小寫搜索含 sed 文本
- ag -A sed:搜索含 sed 文本,并顯示匹配內(nèi)容之后的 n 行文本
- ag -B sed:搜索含 sed 文本,并顯示匹配內(nèi)容之前的 n 行文本
- ag -C sed:搜索含 sed 文本,并同時顯示匹配內(nèi)容以及它前后各 n 行文本的內(nèi)容
- ag -w sed:全匹配搜索,只搜索與所搜內(nèi)容完全匹配的文本
- ag --java sed:在 java 文件中搜索含 sed 的文本
- ag --xml sed:在 XML 文件中搜索含 sed 的文本
ag 命令的使用
根據(jù)文件名進(jìn)行搜索對應(yīng)的文件,可使用-g參數(shù)選項。
- ag -g jiaoben
- jiaoben2.sh
- jiaoben1.sh
- jiaoben3.sh
搜索當(dāng)前目錄下有關(guān) sed 關(guān)鍵字的文本。
- ag -w sed
- jiaoben1.sh
- 10: sed -i '2d' "$new_filename"
更多參數(shù)選項,大家可根據(jù)自身實際場景進(jìn)行運用。
09.axel
axel 是命令行多線程下載工具,下載文件時可以替代 curl、wget。
Ubuntu 21.10 安裝 axel
- apt-get install axel
axel 參數(shù)選項
- -n:指定線程數(shù)
- -o:指定另存為目錄
- -s:指定每秒的最大比特數(shù)
- -q:靜默模式
案例
- # axel -n 10 -o /tmp/ http://mirrors.163.com/ubuntu/ls-lR.gz
- # exa /tmp/ls-lR.gz
- /tmp/ls-lR.gz
可以看出,我們通過 axel 也是可以把 ls-lR.gz 這個文件正常下載到 /tmp 目錄下的。
10.pydf
在 Linux 系統(tǒng)下,我們可以使用df命令來顯示磁盤的相關(guān)信息。
- # df
- 文件系統(tǒng) 1K-塊 已用 可用 已用% 掛載點
- tmpfs 199180 1660 197520 1% /run
- /dev/sda3 19946096 10317864 8589692 55% /
- tmpfs 995884 0 995884 0% /dev/shm
- tmpfs 5120 4 5116 1% /run/lock
- /dev/sda2 524252 5344 518908 2% /boot/efi
- tmpfs 199176 100 199076 1% /run/user/1000
- /dev/sr0 3043440 3043440 0 100% /media/jacktian/Ubuntu 21.10 amd64
- tmpfs 199176 60 199116 1% /run/user/0
Ubuntu 21.10 安裝 pydf
- apt install pydf
pydf 可以說是 df 的替代品,它以更簡潔的方式顯示磁盤使用狀態(tài)。
參考
bat:https://github.com/sharkdp/bat
duf:https://github.com/muesli/duf
tldr:https://github.com/tldr-pages/tldr
htop:https://github.com/htop-dev/htop
glances:https://github.com/nicolargo/glances
exa:https://github.com/ogham/exa
fd:https://github.com/sharkdp/fd/
最后
雖然我們在日常工作中,大多數(shù)還都是用的默認(rèn)基本命令工具,當(dāng)如果你替換成上述所介紹的 10 款替代品工具時,相信在許多場景中還是非常有用的。當(dāng)然了,可能還有更多的 Linux 命令行替代工具,也歡迎大家在下面的留言區(qū)補(bǔ)充。
以上就是今天所要分享的全部內(nèi)容了。