大多數 Linux 系統管理員需要做的事情都可以在 GNU coreutils 或 util-linux 中找到。
許多 Linux 系統管理員最基本和常用的工具主要包括在兩套實用程式中:GNU 核心實用程式(coreutils)和 util-linux。它們的基本功能允許系統管理員執行許多管理 Linux 系統的任務,包括管理和操作文字檔案、目錄、資料流、儲存媒介、進程控制、檔案系統等等。
這些工具是不可缺少的,因為沒有它們,就不可能在 Unix 或 Linux 計算機上完成任何有用的工作。鑑於它們的重要性,讓我們來研究一下它們。
要了解 GNU 核心實用程式的起源,我們需要乘坐時光機進行一次短暫的旅行,回到貝爾實驗室的 Unix 早期。編寫 Unix 是為了讓 Ken Thompson、Dennis Ritchie、Doug McIlroy 和 Joe Ossanna 可以繼續他們在大型多工和多使用者計算機專案 Multics 上的工作:開發一個叫做《太空旅行》遊戲的小東西。正如今天一樣,推動計算技術發展的似乎總是遊戲玩家。這個新的作業系統比 Multics(LCTT 譯註:multi- 字頭的意思是多數的)的局限性更大,因為一次只能有兩個使用者登入,所以被稱為 Unics(LCTT 譯註:uni- 字頭的意思是單獨的)。後來這個名字被改成了 Unix。
隨著時間的推移,Unix 取得了如此巨大的成功,開始貝爾實驗室基本上是將其贈送給大學,後來送給公司也只是收取媒介和運輸的費用。在那個年代,系統級的軟體是在組織和程式設計師之間共用的,因為在系統管理這個層面,他們努力實現的是共同的目標。
最終,AT&T 公司的老闆們決定,他們應該在 Unix 上賺錢,並開始使用限制更多的、昂貴的許可證。這發生在軟體變得更加專有、受限和封閉的時期,從那時起,與其他使用者和組織共用軟體變得不可能。
有些人不喜歡這種情況,於是用自由軟體來對抗。Richard M. Stallman(RMS),他帶領著一群“反叛者”試圖編寫一個開放的、自由的可用作業系統,他們稱之為 GNU 作業系統。這群人建立了 GNU 實用程式,但並沒有產生一個可行的核心。
當 Linus Torvalds 開始編寫和編譯 Linux 核心時,他需要一套非常基本的系統實用程式來開始執行一些稍微有用的工作。核心並不提供命令或任何型別的命令 shell,比如 Bash,它本身是沒有任何用處的,因此,Linus 使用了免費提供的 GNU 核心實用程式,並為 Linux 重新編譯了它們。這讓他擁有了一個完整的、即便是相當基本的作業系統。
你可以通過在終端命令列中輸入命令 info coreutils
來了解 GNU 核心實用程式的全部內容。下面的核心實用程式列表就是這個資訊頁面的一部分。這些實用程式按功能進行了分組,以方便查詢;在終端中,選擇你想了解更多資訊的組,然後按確認鍵。
* Output of entire files:: cat tac nl od base32 base64* Formatting file contents:: fmt pr fold* Output of parts of files:: head tail split csplit* Summarizing files:: wc sum cksum b2sum md5sum sha1sum sha2* Operating on sorted files:: sort shuf uniq comm ptx tsort* Operating on fields:: cut paste join* Operating on characters:: tr expand unexpand* Directory listing:: ls dir vdir dircolors* Basic operations:: cp dd install mv rm shred* Special file types:: mkdir rmdir unlink mkfifo mknod ln link readlink* Changing file attributes:: chgrp chmod chown touch* Disk usage:: df du stat sync truncate* Printing text:: echo printf yes* Conditions:: false true test expr* Redirection:: tee* File name manipulation:: dirname basename pathchk mktemp realpath* Working context:: pwd stty printenv tty* User information:: id logname whoami groups users who* System context:: date arch nproc uname hostname hostid uptime* SELinux context:: chcon runcon* Modified command invocation:: chroot env nice nohup stdbuf timeout* Process control:: kill* Delaying:: sleep* Numeric operations:: factor numfmt seq
這個列表裡有 102 個實用程式。它涵蓋了在 Unix 或 Linux 主機上執行基本任務所需的許多功能。但是,很多基本的實用程式都缺失了,例如,mount
和 umount
命令不在這個列表中。這些命令和其他許多不在 GNU 核心實用程式中的命令可以在 util-linux 中找到。
util-linix 實用程式包中包含了許多系統管理員常用的其它命令。這些實用程式是由 Linux 核心組織發布的,這 107 條命令中幾乎每一個都來自原本是三個單獨的集合 —— fileutils、shellutils 和 textutils,2003 年它們被合併成一個包:util-linux。
agetty fsck.minix mkfs.bfs setpriv blkdiscard fsfreeze mkfs.cramfs setsid blkid fstab mkfs.minix setterm blockdev fstrim mkswap sfdisk cal getopt more su cfdisk hexdump mount sulogin chcpu hwclock mountpoint swaplabel chfn ionice namei swapoff chrt ipcmk newgrp swapon chsh ipcrm nologin switch_root colcrt ipcs nsenter tailf col isosize partx taskset colrm kill pg tunelp column last pivot_root ul ctrlaltdel ldattach prlimit umount ddpart line raw unshare delpart logger readprofile utmpdump dmesg login rename uuidd eject look renice uuidgen fallocate losetup reset vipw fdformat lsblk resizepart wall fdisk lscpu rev wdctl findfs lslocks RTC Alarm whereis findmnt lslogins runuser wipefs flock mcookie script write fsck mesg scriptreplay zramctl fsck.cramfs mkfs setarch
這些實用程式中的一些已經被淘汰了,很可能在未來的某個時候會從集合中被踢出去。你應該看看維基百科的 util-linux 頁面來了解其中許多實用程式的資訊,而 man 頁面也提供了關於這些命令的詳細資訊。
這兩個 Linux 實用程式的集合,GNU 核心實用程式和 util-linux,共同提供了管理 Linux 系統所需的基本實用程式。在研究這篇文章的過程中,我發現了幾個有趣的實用程式,這些實用程式是我從不知道的。這些命令中的很多都是很少需要的,但當你需要的時候,它們是不可缺少的。
在這兩個集合裡,有 200 多個 Linux 實用工具。雖然 Linux 的命令還有很多,但這些都是管理一個典型的 Linux 主機的基本功能所需要的。