用戶必會的 20 個 Linux 基礎命令
在黝黑的終端窗口中輸入命令,這樣的方式對某些人群來說可能好像過時了,但對許多專業計算機人員來說,這幾乎是計算機完成能夠執行的所有任務的最有效、最簡便和最清晰的方式。如今,一些項目將開源命令引入了 macOS 和 Windows 等非開放平台,因此終端命令不僅僅是針對 Linux 和 BSD 用戶,更是與每個人都息息相關。你可能會驚訝地發現,在一台普通的 POSIX 計算機上安裝了數千個命令,當然,其中很多命令並不是真的有用,至少不是直接或經常性被使用。而其中的一部分命令雖然不是有效終端必須使用的命令,但相比其他命令而言使用頻率較高,值得大家學習一下。
以下是終端用戶最可能會使用的前 20 個命令:
cd
在終端外,你可以單擊圖標從一個文件夾移動到另一個文件夾,但在終端中,你需要使用 cd。cd 命令代表 變更目錄 ,是用戶在 Linux 系統中移動的方式。這是 Linux 中從一個地方到另一個地方最快、最直接的路線。
例如,在桌面上,當你想從你的主目錄(你保存所有文件夾的地方)移動到一個名為 presentations 的文件夾時,你首先要打開你的 Documents 文件夾,然後打開一個名叫 work 的文件夾,然後是 projects 文件夾,然後是 conference 文件夾,最後是 presentations 文件夾,裡面存放的是 LibreOffice Impress 幻燈片。這個過程包含了很多次的雙擊操作。同時屏幕上還需要許多滑鼠移動動作,這取決於新窗口出現的位置,以及大腦需要跟蹤的許多路徑點。許多人通過將 所有文件 都放在桌面上來避免這個看似微不足道的任務。
而終端用戶只需鍵入以下內容即可避免此問題:
$ cd ~/Documents/work/projects/conference/presentations
一些有經驗的終端用戶甚至都懶得輸入所有這些,而是使用 Tab 鍵自動完成單詞填充。更甚者,有時你都不必依賴自動完成,而是改用通配符:
$ cd ~/Doc*/work/*/conf*/p*
pwd
用 Buckaroo Banzai 的話來說:「無論你走到哪裡,你就在那裡。」
當你想弄清楚確切位置時,就可以使用 pwd 命令。pwd 代表 列印工作目錄 ,這正是它的作用。--physical(在某些情況時縮寫為 -P)顯示解析所有符號鏈接後的確切位置。
$ pwd
/home/tux/presentation
$ pwd --physical
/home/tux/Documents/work/projects/conference/presentations
sed
流編輯器 sed 更廣為人知的是一個強大的批量 查找和替換 命令,但它同時也是一個正當合理的文本編輯器。你可以通過閱讀我的 介紹性文章 來學習使用它,然後通過我的 高級教程和備忘錄 成為老手。
grep
grep 命令使用很普遍,以至於經常被用作動詞(例如 「我會對一些文件進行 grep」)和動名詞(例如 「grep 一些輸出」)。無論是查看日誌文件還是解析其他命令的輸出,它都是在 shell 中解析文本時的關鍵組件。這是忙碌的用戶專註於特定信息的一種方式。考慮一下計算世界中的數據量,grep 命令的流行就見怪不怪了。你可以通過閱讀我的 介紹性文章 了解 grep,然後下載 備忘錄 學習。
file
當你需要知道文件包含什麼類型的數據時,請使用 file 命令:
$ file example.foo
example.foo: RIFF (little-endian) data, Web/P image [...]
$ file example.bar
example.bar: ELF 64-bit LSB executable, x86-64 [...]
當然,file 命令並不神奇。它只不過是根據文件如何標識自身而進行輸出的,並且文件可能是錯誤的、損壞的或偽裝的。使用 hexdump 進行嚴格檢查的方式確定性更強,但對於日常使用而言,file 命令非常方便。
awk
awk 不僅僅是一個命令,它還是一種字面意義上的 編程語言。點此下載我們的免費 Awk 電子書 進行學習,你可能會寫出遠超你想像的腳本。
curl
curl 命令是用於終端的 非互動式 Web 瀏覽器。它是面向 Web 和 API 開發人員的 開發工具。它是一個複雜靈活的命令,但如果你想從你的終端順利地與 Web 服務交互,該命令是很值得學習的。
下載我們免費的 curl 備忘錄,你可以從中學會 curl 的許多選項。
ps
管理系統資源主要由內核負責,當你更喜歡或更需要手動管理時,可以使用 ps 命令。讀者可以在我的 使用 procps-ng 監控 Linux 系統 文章中了解 ps。
cat
cat 命令 是 連接 的縮寫,它曾因為能將若干小文件合併而顯得非常有用,這些小文件可能是由於大小限制而(使用 split 命令)拆分的。如今,cat 主要是用來將文本文件的內容轉儲到終端中以供快速閱讀,除非你為此專門去使用 head、tail、more 或 less 等命令。
儘管它的原始用途幾乎已被棄用,並且其他幾個命令也主要提供了其次要功能,但 cat 仍然是一個有用的工具。例如,它可以是複製(cp)命令的替代品:
$ cat myfile.ogg > /backups/myfile.ogg
它可以顯示文件中不便觀察的隱形字元。例如,使用 --show-tabs 選項,分割 YAML 的 Tab 字元就會顯示為 ^I:
$ cat --show-tabs my.yaml
- hosts: all
tasks:
- name: Make sure the current version of 'sysstat' is installed.
dnf:
name:
^I- sysstat
^I- httpd
^I- mariadb-server
state: latest
它還可以用 --show-nonprinting 顯示非列印字元,用 --show-ends 標記行尾,用 --number 提供行號,等等。
find
find 命令可以用來查找文件,但它還有許多選項,這些選項可以幫助你通過各種過濾器和參數查找文件。讀者可以從我的 介紹性文章 中學習該命令的基礎知識。
如果你一直想知道為什麼最基本的、不起眼的 ls 命令,不在本文列表中,那是因為 find 的靈活性。它不僅可以列表文件:
$ find .
./bar.txt
./baz.xml
./foo.txt
[...]
它還可以提供包含詳細信息的長列表功能:
$ find . -ls
3014803 464 -rw-rw-r-- 1 tux users 473385 Jul 26 07:25 ./foo.txt
3014837 900 -rwxrwxr-x 1 tux users 918217 Nov 6 2019 ./baz.xml
3026891 452 -rw-rw-r-- 1 tux users 461354 Aug 10 13:41 ./foo.txt
[...]
這是一個技術問題,但也是很一個巧妙的技巧。
tar
人們有時會引用 BSD 的 tar 語法來拿 Linux 命令開玩笑。儘管有這樣的名聲,但 tar 命令實際上非常直觀。讀者可以閱讀我的 如何解壓縮 tar.gz 文件 文章,了解在需要時使用 tar 命令的簡單知識。
more、less 和 most
這些統稱為分頁命令。分頁命令與 cat 類似,但前者會在屏幕底部暫停輸出,直到你向下滾動查看更多內容。這些命令比較簡單,但每個之間都有細微差別。用戶是用箭頭鍵還是空格鍵滾動?是必須手動退出,還是在顯示的文件末尾自動退出?用戶的首選搜索行為是什麼樣的?選擇你最喜歡的分頁命令並將其設置在 .bashrc 中吧!
ssh 和 scp
OpenSSH 不僅有助於保護與遠程系統的連接安全,還可以用於啟用其他命令。例如,對於許多用戶來說,有了 .ssh 目錄,他們才能與 Git 存儲庫順利交互、將更新發布到網站、登錄雲控制平台。
mv
mv 命令有雙重作用:它既可以 移動文件 又可以 重命名文件。它有幾個可用的保護措施,例如 --interactive 和 --no-clobber 選項避免破壞現有文件,--backup 命令確保數據在新位置驗證之前被保留,以及 --update 選項確保舊版本不會替換新版本文件。
sudo
當某個用戶賬戶的用戶名已知,且具有 全部 系統許可權時,該用戶很快就會成為黑客攻擊的目標。sudo 命令消除了對字面上 root 用戶的需求,從而優雅地移除了有關係統的重要信息。不過這還不是全部,使用 sudo 你還可以輕鬆地管理單個命令、用戶和組的許可權。你可以在選定的命令上啟用無密碼執行、記錄用戶會話、使用摘要驗證來驗證命令,等等。
alias
使用 alias 命令將長命令變成易於記憶的快捷方式:
$ alias ls='ls --classify --almost-all --ignore-backups --color'
clear
有時終端會顯得很混亂,輸入 clear(或在某些 shell 中按 Ctrl+L)後,你就能得到漂亮、刷新的屏幕了。
setfacl
傳統上,POSIX 文件許可權由 chown 和 chmod 決定。然而,如今系統變得更加複雜,因此有一個靈活性更高的命令。setfacl 命令允許創建一個 訪問控制列表(ACL),可以配置任意用戶所需許可權,並可以為文件夾及其中創建的內容設置默認許可權。
netcat
可能需要使用 netcat(nc)的人不多,但這些使用它的人確離不開它。nc 命令是一個通用的網路連接工具。
它可以連接到一個埠,類似於 telnet 命令:
$ nc -u 192.168.0.12 80
它可以 ping 一個埠,類似於 ping 命令:
$ nc -zvn 192.168.0.12 25
它可以探測開放埠,類似於 nmap 命令:
$ nc -zv 192.168.0.12 25-80
以上僅是該命令的一小部分用途。
你自己構建的命令
在某種程度上,Linux 終端是一個創造性解決問題的平台。當你學習命令時,你也在學習可用於創建自己的命令的組塊。我的 shell 歷史 中的許多命令都是自己編寫的 shell 腳本,從而實現了根據自己想要的工作方式定製工作流程。你為自己的效率和舒適度而設計的命令也可以作為 shell 中的基本命令。花些時間了解一些很棒的命令,然後試著構建自己的命令吧。當你構建出的命令非常好用時,把它開源,這樣就可以與他人分享你的想法啦!
via: https://opensource.com/article/21/9/essential-linux-commands
作者:Seth Kenlon 選題:lujun9972 譯者:unigeorge 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive

















