用戶必會的 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