5 款新型 Linux 命令列工具,實用!
點選關注公眾號,Java乾貨及時送達
使用新的替代工具來改進舊的命令列工具。
在Linux/Unix系統的日常使用中,我們需要使用很多命令列工具來完成工作,以及理解和管理我們的系統,例如使用du來監視磁碟利用率、top來顯示系統資源。有些工具已經有很長的歷史了。例如,top於1984年首次釋出,而du的首次問世可追溯至1971年。
多年來,這些工具已經過現代化的改造,並移植到了不同的系統中,但總的來說,它們仍然保留了最初的想法、外觀和感覺。
這些工具都非常優秀,對於許多系統管理員的工作流程來說都是必不可少的。但近年來,開源社群開發了不少更具優勢的替代工具。雖然有些工具華而不實,但有些則大大提高了實用性,成為了現代系統的絕佳選擇。在本文中,我將介紹五種標準Linux命令列工具的替代品。
du的替代:ncdu
NCurses磁碟使用率(NCurses DiskUsage,即ncdu)工具提供了與du類似的結果,但其基於curses的互動式介面可以顯示消耗了大部分磁碟空間的目錄。
首先Ncdu需要花一些時間分析磁碟,然後按照最常用的順序顯示目錄或檔案,如下所示:
ncdu 1.14.2 ~ Use the arrow keys to navigate, press ? for help
--- /home/rgerardi ------------------------------------------------------------
96.7 GiB [##########] /libvirt
33.9 GiB [### ] /.crc
7.0 GiB [ ] /Projects
. 4.7 GiB [ ] /Downloads
. 3.9 GiB [ ] /.local
2.5 GiB [ ] /.minishift
2.4 GiB [ ] /.vagrant.d
. 1.9 GiB [ ] /.config
. 1.8 GiB [ ] /.cache
1.7 GiB [ ] /Videos
1.1 GiB [ ] /go
692.6 MiB [ ] /Documents
. 591.5 MiB [ ] /tmp
139.2 MiB [ ] /.var
104.4 MiB [ ] /.oh-my-zsh
82.0 MiB [ ] /scripts
55.8 MiB [ ] /.mozilla
54.6 MiB [ ] /.kube
41.8 MiB [ ] /.vim
31.5 MiB [ ] /.ansible
31.3 MiB [ ] /.gem
26.5 MiB [ ] /.VIM_UNDO_FILES
15.3 MiB [ ] /Personal
2.6 MiB [ ] .ansible_module_generated
1.4 MiB [ ] /backgrounds
944.0 KiB [ ] /Pictures
644.0 KiB [ ] .zsh_history
536.0 KiB [ ] /.ansible_async
Total disk usage: 159.4 GiB Apparent size: 280.8 GiB Items: 561540
你可以通過方向鍵導航到每個結果。如果在選中的結果上按下Enter,則ncdu將顯示該目錄的內容:
--- /home/rgerardi/libvirt ----------------------------------------------------
/..
91.3 GiB [##########] /images
5.3 GiB [ ] /media
你可以深入各個目錄,找出哪些檔案佔用的磁碟空間最多。使用左方向鍵可以返回到上一個目錄。在預設情況下,你可以按d鍵刪除檔案,但在刪除檔案之前ncdu會要求確認。如果你想禁止刪除操作以防止發生意外,則可以通過-r選項設定只讀訪問:ncdu -r。
ncdu可用於許多平臺和Linux發行版。例如,你可以使用dnf從官方程式碼庫直接將其安裝在Fedora上:
$ sudo dnf install ncdu
更多有關該工具的資訊,請參見:https://dev.yorhel.nl/ncdu。另外,Linux 系列面試題和答案全部整理好了,微信搜尋Java技術棧,在後臺傳送:面試,可以線上閱讀。
top的替代:htop
htop是一個類似於top的互動式程序瀏覽器,提供了更好的使用者體驗。在預設情況下,htop顯示的各項指標與top相同,而且是漂亮的彩色。
預設的htop如下所示:
與預設的top相比:
此外,htop的頂部還提供了系統的概述資訊,底部的命令欄則顯示了功能鍵命令,你還可以按下F2進入設定頁面來自定義界面。在設定頁面中,你可以更改其顏色,新增或刪除指標、更改概述欄的顯示選項。
雖然top的最新版本也可以通過配置獲得相似的結果,但htop提供的預設配置更為合理,作為一個程序瀏覽器更加易於使用。
如果想了解有關該專案的更多資訊,請檢視htop主頁(https://hisham.hm/htop/)。
man的替代:tldr
tldr命令列工具顯示可以簡化的命令文件,而且大部分文件都提供示例。它是tldr pages專案(https://tldr.sh/)的客戶端。
這個工具不是man的替代品。man pages仍然是許多工具的規範以及完整的資訊源。但是,在某些情況下,man的內容太多了。有時,你不需要有關命令的所有資訊。你只需要記住基本選項。例如,curl命令的man page幾乎有3,000行。相比之下,curl的tldr只有40行,如下所示:
$ tldr curl
# curl
Transfers data from or to a server.
Supports most protocols, including HTTP, FTP, and POP3.
More information: <https://curl.haxx.se>.
- Download the contents of an URL to a file:
curl http://example.com -o filename
- Download a file, saving the output under the filename indicated by the URL:
curl -O http://example.com/filename
- Download a file, following [L]ocation redirects, and automatically [C]ontinuing (resuming) a previous file transfer:
curl -O -L -C - http://example.com/filename
- Send form-encoded data (POST request of type `application/x-www-form-urlencoded`):
curl -d 'name=bob' http://example.com/form
- Send a request with an extra header, using a custom HTTP method:
curl -H 'X-My-Header: 123' -X PUT http://example.com
- Send data in JSON format, specifying the appropriate content-type header:
curl -d '{"name":"bob"}' -H 'Content-Type: application/json' http://example.com/users/1234
... TRUNCATED OUTPUT
TLDR的全稱是“too long; didn'tread”(太長;未讀),這是一句網路流行語,表示文章太長。這個名字非常適合這個彙總工具,因為manpages雖然非常實用,但內容太長。
在Fedora中,tldr客戶端是用Python編寫的。你可以使用dnf安裝。有關其他客戶端選項,請參見tldr pages專案(https://tldr.sh/)。
通常,tldr工具需要訪問網際網路才能查詢tldr頁面。Fedora中的Python客戶端允許你下載和快取這些頁面以供離線訪問。
有關tldr的更多資訊,請執行tldr tldr。推薦一個 Spring Boot 基礎教程及實戰示例:https://github.com/javastacks/spring-boot-best-practice
用sed/grep查詢JSON資料的替代:jq
jq是JSON的命令列處理器。就像sed或grep一樣,但主要是為了處理JSON資料。如果你是日常任務需要使用JSON的開發人員或系統管理員,那麼這是你的工具箱中必不可少的工具。
與通用文字處理工具(例如grep和sed)相比,jq的主要優點在於它瞭解JSON資料結構,你可以通過一個表示式建立複雜的查詢。
舉例說明,假設你正在嘗試在下列JSON檔案中查詢容器的名稱:
{
"apiVersion": "v1",
"kind": "Pod",
"metadata": {
"labels": {
"app": "myapp"
},
"name": "myapp",
"namespace": "project1"
},
"spec": {
"containers": [
{
"command": [
"sleep",
"3000"
],
"image": "busybox",
"imagePullPolicy": "IfNotPresent",
"name": "busybox"
},
{
"name": "nginx",
"image": "nginx",
"resources": {},
"imagePullPolicy": "IfNotPresent"
}
],
"restartPolicy": "Never"
}
}
$ grep name k8s-pod.json
"name": "myapp",
"namespace": "project1"
"name": "busybox"
"name": "nginx",
grep會返回所有包含單詞name的行。你可以在grep中新增一些其他選項來限制查詢結果,並通過正則表示式操作找到容器的名稱。在使用jq獲得所需結果時,你只需要使用一個模擬向下導航資料結構的表示式,如下所示:
$ jq '.spec.containers[].name' k8s-pod.json
"busybox"
"nginx"
該命令會返回兩個容器的名稱。如果你只想檢視第二個容器的名稱,則可以在表示式中新增陣列元素索引:
$ jq '.spec.containers[1].name' k8s-pod.json
"nginx"
因為jq能夠理解資料結構,所以即使檔案格式稍有變化,它也可以提供相同的結果。但對於grep和se來說,格式稍有變化提供的結果就會完全不同。
jq還有很多功能,我需要用另寫一篇文章才能介紹其所有的功能。有關更多資訊,請參見jq專案頁面(https://stedolan.github.io/jq/)、manpages或tldr jq。
find的替代:fd
fd是find命令的一種簡單快速的替代。它的目的不是替換find的功能,而是提供一些合理的預設值,在某些情況下非常有用。
例如,在包含Git程式碼庫的目錄中搜索原始碼檔案時,fd會自動排除隱藏的檔案和目錄(包括.git目錄),並忽略.gitignore檔案中的模式。通常,它可以更快地查詢,並提供相關度更高的結果。
在預設情況下,fd會針對當前目錄執行不區分大小寫的模式搜尋,並輸出彩色的結果。使用find進行的相同搜尋時,你需要提供其他命令列引數。例如,搜尋當前目錄中所有的markdown檔案(即.md或.MD檔案),find命令如下所示:
$ find . -iname "*.md"$ find . -iname "*.md"
而如下fd搜尋能夠返回相同的結果:
$ fd .md
在有些情況下,fd也需要其他選項。例如,如果想讓搜尋包括隱藏的檔案和目錄,則必須使用選項-H,而find則不需要。
fd可用於許多Linux發行版。在Fedora中安裝fd可使用標準程式碼庫:
$ sudo dnf install fd-find
有關更多資訊,請請見fd的GitHub程式碼庫(https://github.com/sharkdp/fd/)。
優秀的替代工具與久經考驗的實用程式
儘管我還是習慣使用舊工具,尤其是在遠端連線到伺服器時,但新的替代工具提供了額外的好處,而且在許多情況下都很有幫助性。特別是幫助我在Linux桌上型電腦和膝上型電腦上管理和工作。
你是否使用其他工具來處理工作流程?請在下方留言。另外,關注公眾號Java技術棧,在後臺回覆:面試,可以獲取我整理的 Linux 系列面試題和答案,非常齊全。
原文:https://opensource.com/article/20/6/modern-linux-command-line-tools
作者:Ricardo Gerardi
譯者:彎月,責編:屠敏
出品:CSDN(ID:CSDNnews)





關注Java技術棧看更多幹貨

本文分享自微信公眾號 - Java技術棧(javastack)。
如有侵權,請聯絡 [email protected] 刪除。
本文參與“OSC源創計劃”,歡迎正在閱讀的你也加入,一起分享。
- 有了 for (;;) 為什麼還需要 while (true) ? 到底哪個更快?
- 再見,Spring Security OAuth!!
- Spring Boot Vue Shiro 實現前後端分離、許可權控制
- Java 技術棧中介軟體優雅停機方案設計與實現全景圖
- Java 技術棧中介軟體優雅停機方案設計與實現全景圖
- JHipster:Java和JavaScript的全棧框架
- 面試官:Spring 註解 @After,@Around,@Before 的執行順序是?
- C 與Java“相愛相殺”:一個步步緊逼,一個節節敗退
- C 即將超越Java、360企業安全雲或將上線“一鍵強制下班”功能、Glibc增加面向Arm SVE優化的記憶體拷貝 ...
- 面向開發人員的映象和容器實踐指南
- 面試官:生成訂單 30 分鐘未支付,則自動取消,該怎麼實現?
- 臥槽!!IntelliJ IDEA 居然偷偷改程式碼。。
- 鑑權 5 兄弟:cookie、session、token、jwt、單點登入,終於有人說清楚了!
- 高逼格的 SQL 寫法:行行比較,別問為什麼,問就是逼格高。。
- 你見過最垃圾的程式碼長什麼樣?(來長長見識)
- 不捲了!技術團隊成員集體辭職
- 引爆全球的 Log4j2 核彈級漏洞,JNDI 到底是個什麼鬼?
- TIOBE 1月程式語言排行榜出爐:Python蟬聯冠軍,C和JAVA分列二三
- 再見,CentOS!2021/12/31 宣佈正式停服。。
- 基於 ElasticSearch 實現站內全文搜尋,寫得太好了!