Command-Line
“命令”一詞背後隱藏的概念是什麼?
我已經為 Linux 使用、學習和開發了好幾年了,隨著時間的推移,我成功地說服了一些人加入這個事業,並轉向 Linux。
然而,當這些人去發現這個全新的世界時,他們每個人最終都來找我,問我做這個或那個的命令是什麼:
- 安裝軟體的命令是什麼?
- 列出目前目錄內容的命令是什麼?
- 打開我的網路瀏覽器的命令是什麼?
- …
但對我來說,感覺就像他們在問錯誤的問題。事實上,我實際上希望他們會問:
- 我們使用什麼程序來管理系統上安裝的軟體?
- 什麼程序可以列出目前目錄內容?
- 有哪些可用的網頁瀏覽程序?
- …
在我看來,命令一詞是一個非常抽象的詞,用於描述您在 shell 提示符後鍵入的幾乎所有內容。帶著這樣的想法,我帶來的幾個新人開始相信:
- Linux 由大量的命令組成。
- 一切都有一個命令,每個命令都專門做一件事。
- 通過適配更多命令,我將變得更有能力成為一名 Linux 使用者/管理員。
- 通過執行,
./something
我不執行命令,而是儲存在目前目錄中的程序,可能是我自己編譯的。- …
因此,我傾向於不使用命令這個詞,而更喜歡使用程序或執行檔。我還解釋了這些執行檔可以自動找到,而無需輸入它們的絕對路徑,這要歸功於該
$PATH
機制。多虧了這一點,鍵入ls
執行/bin/ls
,這是一個儲存在變數中註冊的目錄中的程序。/bin``$PATH
儘管如此,我還是在許多書籍、教程、指南……中遇到了命令這個詞,這最終讓我想到了這個問題:命令這個詞在 UNIX/Linux 詞彙表中是否真的有意義?它是否指的是*“無論您在終端中輸入什麼”*以外的實際概念?
POSIX shell 規範指的是簡單命令、複合命令、命令位置和命令
command
。前兩個參考如何/何時解析和執行shell*命令。*例如:
#one compound command { simple command; simple command && simple command; }
複合命令是在評估和執行其組成的簡單命令之前,shell 必須讀取多少作為輸入。
命令位置是每個簡單命令中的第一個單詞,它具有特殊的意義,因為它決定瞭如何解析命令的其餘部分。某些保留字(例如
if
andwhile
)在命令位置時,可以向解析器指示後面的內容應被解釋為複合命令,而不僅僅是簡單命令。該命令
command
可用於將命令移出命令位置。例如,這兩者的執行方式相同,但解析方式可能不同:command simple command simple command