了解IT技術
老九你最好的選擇

Linux入門大全

Linux 入門
本文翻譯自“Introduction to Linux, A Hands on Guide”,作者 Machtelt Garrels。 該書的版權信息如下: Copyright information * Copyright (c) 2002-2007, Machtelt Garrels * All rights reserved. * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * * Neither the name of the author, Machtelt Garrels, nor the * names of its contributors may be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS “AS IS” AND ANY * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE * DISCLAIMED. IN NO EVENT SHALL THE AUTHOR AND CONTRIBUTORS BE LIABLE FOR ANY * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. The logos, trademarks and symbols used in this book are the properties of their respective owners.
第一章 什么是 LINUX
1.1. Linux 歷史
1.1.1. UNIX
為了理解 Linux 的人氣,我們要回到過去,大約 30 年前。 想象計算機有房子,甚至體育場館那么大。這些計算機的尺寸已經是一個很大的問題了, 但是另外一件事使得情況更加糟糕:每一臺計算機都有自己的操作系統。軟件總是為了某個目 的而定制的,并且一個系統的軟件不能在另外一個系統上面運行。你能在一個系統里工作并不 意味著你就一定能在另外一個系統里工作。對于用戶和系統管理員來說都是很困難的。 那個時候,計算機非常的昂貴,并且在購買了計算機后,為了讓用戶明白計算機是怎么工 作的,還要花很多錢。每個計算能力的總成本非常的龐大。 那個時候技術還沒有那么先進,所以人們在接下來的 10 年中,只能用這種體積巨大的計算 機。1969 年,Bell 實驗室的一群軟件開發人員開始想辦法解決軟件的兼容性問題。他們開發了 一個新的操作系統。這個操作系統有這樣 3 個特點: 簡單而精致 使用 C 語言而不是匯編語言 可以重復利用代碼 他們把這個項目叫做“UNIX”。 可以重復利用代碼是一個非常重要的特性。在那之前,所有的商業計算機系統都是用某個 計算機的特定的代碼來編寫的。而 UNIX 只需要很少的那種特定的代碼,也就是所謂的內核。這 個內核是唯一的需要針對每個特定的系統而編寫的,它是 UNIX 的基礎。操作系統和所有其他的 功能都是以這個內核為基礎,用 C 語言來編寫。C 語言是為了建立 UNIX 系統而設計的。使用這 個新技術,開發一個能夠在很多不同的硬件上面運行的操作系統就容易多了。 軟加開發商馬上就跟進了,因為他們可以毫不費力的賣出十倍的軟件。這樣出現了一個新 的現象:想象一下,比如說不同廠商的計算機可以在同一個網絡中相互通訊,或者不同計算機 系統的用戶不用額外的培訓就能使用不同的計算機。UNIX 讓用戶能夠使用不同的系統了。 UNIX 在接下來的幾十年里一直在發展。更加多的事情變得可能,而且更加多的硬件和軟件 廠商為他們的產品提供了對 UNIX 的支持。 UNIX 一開始只用在非常大的機構里的大型機和小型機上(注意一臺 PC 是微型計算機)。 你要在大學,政府或者大的金融機構工作才能接觸到 UNIX。 但是較小的計算機一直在被開發。到 80 年代末的時候,很多人都已經有了家用電腦。在那
個時候,已經有幾個 UNIX 版本是為 PC 架構設計的,但是他們都不是免費的,而且非常非常的 慢。所以大部分人在家用電腦上運行 MS DOS 或者 Windows 3.1。
1.1.2. Linus 和 Linux
到了 90 年代初,家用電腦終于能夠運行一個完整的 UNIX 了。Linus Torvalds,一個在赫 爾辛基大學學習計算機科學的年輕人,覺得應該有免費的教育版的 UNIX。于是他很快的就開始 編寫代碼。 他開始詢問問題,尋找能夠幫助他把 UNIX 移植到 PC 上的答案和方法。下面是他在 1991 年 發在 comp.os.minix 上面的一個帖子: From: [email protected] (Linus Benedict Torvalds) Newsgroups: comp.os.minix Subject: Gcc-1.40 and a posix-question Message-ID: [email protected] Date: 3 Jul 91 10:00:50 GMT Hello netlanders, Due to a project I’m working on (in minix), I’m interested in the posix standard definition. Could somebody please point me to a (preferably) machine-readable format of the latest posix rules? Ftp-sites would be nice. 從一開始,Linus 的目標就是開發一個和 UNIX 完全兼容的免費的操作系統。這就是為什么 他詢問 POSIX 標準。POSIX 現在還是 UNIX 標準。 在那個時代,即插即用還沒有發明,但是很多人都希望有他們自己的 UNIX 系統,所以即使 沒有即插即用也只是一個小問題了。各種各樣新硬件都有了新的驅動程序,并且新驅動程序出 現的速度在不斷的加快。幾乎是一個新的硬件一出現,馬上就有人把它買了后交給 Linux test (這個項目慢慢演變而成的名字),從而為越來越多的硬件發布更加多的免費代碼。這些開發 者并不只是針對他們的 PC;他們能找到的每件硬件對 Linux 都是有用的。 在那個時候,這些人被叫做書呆子或者怪物。但是這對他們來說無所謂,只要 Linux 支持 的硬件名單越來越長。有了這些人,Linux 現在不但能很好的運行在新的 PC 上,而且還是那些 舊的或者稀有的硬件的選擇。沒有 Linux,那些硬件是一無用處的。 Linus 的帖子發布的 2 年后,總共有了 12000 個 Linux 用戶。這個在計算機愛好者中很流 行的項目,在遵循 POSIX 標準的同時在穩定的增長。在接下來的幾年中,UNIX 的所有功能都加 了進來,演變成了目前的 Linux,一個成熟的操作系統。Linux 是一個完整的 UNIX 克隆,適合 于工作站和中高檔服務器。今天,軟件和硬件市場中的重要商家都有他們自己的 Linux 開發團 隊;你甚至可以在你的本地代理商那里購買預安裝的,有原廠支持的 Linux 系統,盡管還有很 多的軟硬件沒有得到支持。
1.1.3. 當前 Linux 系統的應用
今天 Linux 已經進入到了桌面市場。Linux 開發者一開始的時候集中關注網絡和服務功 能,所以辦公應用軟件就成為了最后的障礙。我們不愿意承認微軟在統治著這個市場,所以在 過去的幾年中,出現了很多替代應用程序來讓 Linux 變成一個可以讓人接受的工作站。這些替 代產品提供了簡單的用戶界面以及和微軟的辦公應用程序兼容的軟件,像文檔處理,電子表 格,演示文稿,等等。 在服務器方面,Linux 是眾所周知的穩定和可靠的平臺,為像著名的網上書店 Amazon,美 國郵局,德國軍隊和其他許多的公司機構提供數據庫和交易服務。Internet 供應商和服務商特 別愿意把 Linux 用作防火墻,代理服務器和 Web 服務器。你總能在每個 UNIX 系統管理員的旁邊 找到一臺 Linux,因為這是他們的使用起來很方便的管理站。Linux 集群曾經被用于“泰坦尼克 號“,“怪物史瑞克”以及其他電影的拍攝中。在郵局里,他們是分撿郵件的神經中樞,在大 型搜索引擎里,集群被用于 internet 搜索。這些只是世界各地 Linux 每天都在做的成千上萬的 重要工作中的幾個例子。 值得一提的是,現代的 Linux 不僅能夠運行在工作站和中高檔服務器上,而且能在像 PDA,手機,嵌入式應用產品甚至實驗性質的手表這樣的“小玩意“上。這是 Linux 成為當今世 界上唯一能被廣泛的應用于不同的硬件的操作系統。
1.2. Linux 用戶界面
1.2.1. Linux 難學嗎?
Linux 是否難學取決于你問的人。有經驗的 UNIX 用戶會說不難,因為 Linux 是高端用戶和 程序員的理想操作系統,而且它曾經是,現在也是由這些人在開發的。 一個好的程序員希望的東西 Linux 都有:編譯器,庫,開發和調試工具。每個標準 Linux 版都有這些軟件包。C 編譯器是免費,不象很多 UNIX 發行版那樣對這一工具收費。所有的文檔 和手冊都很齊全,并且有很多例子幫助你能夠馬上開始做你的工作。它給人的感覺就好像 UNIX,所以從 UNIX 轉換到 LINUX 是很自然的事情。 在 linux 的早期,只有專家才能使用它。那些掌握了 Linux 的人感到比其余的失敗者要高 人一等。他們經常告訴初學者去讀手冊。盡管每個系統都有手冊,但是很難找到文檔,即使找 到了,里面的解釋用了很多的技術術語。所以初學者很容易就放棄了。 Linux 社區開始意識到,如果 Linux 要成為操作系統市場中的重要一員,必須要做一些認 真的改變,讓 Linux 變得容易讓人們接近。
1.2.2. 為菜鳥準備的 Linux
RedHat,SuSE 和 Mandriva 這樣的公司冒了出來,他們提供適合大眾消費的打包的 Linux 發行版。他們整合了大量的由社區開發的用戶圖形界面(GUI),使用戶很容易管理程序和服 務。作為一個今天的 Linux 用戶,你仍然有各種辦法來徹底的了解你的操作系統,但是這已經 不是必須的了。 今天你可以通過圖形界面登錄,不用打一個字符就可以開始運行需要的應用程序,當然如 果需要的話,你還是可以看到系統的代碼。因為這樣的結構,Linux 允許一個用戶由淺如深的 掌握這個系統:它同時適合新老用戶。新用戶沒有必要去做一些困難的事情,而老用戶沒有必 要一直用他們一開始接觸 Linux 時候用的方法。 在服務領域的開發還在繼續的同時,也正在為一般被認為不了解系統的桌面用戶提供很好 的東西。桌面應用程序的開發者正在非常努力的開發你曾經見過的最漂亮的桌面系統,或者把 你的 Linux 機器看起來像你以前的 MS Windows 或者一個 Apple 工作站。最近的發展包括了 3D 加速的支持,USB 設備的支持,單點進行系統和軟件包的更新,等等。Linux 有這些東西,并且 把這些服務用普通用戶能夠理解的形式呈現出來。下面列舉了一些非常好的例子;這些網站上 有很多的截圖,能夠讓你一窺 Linux 桌面的風采: http://www.gnome.org/ http://kde.org/screenshots/ http://www.openoffice.org http://www.mozilla.org
1.3. Linux 有前途嗎?
1.3.1. 開源
開源軟件背后的主意非常簡單:當程序員可以讀,發布和修改源代碼,那么源代碼就會成 熟。人們可以適應它,修復它,調試它,而且他們可以以很快的速度做這些事情,這讓那些在 傳統的公司里的軟加開發者的進度看起來像蝸牛爬一樣慢。這樣的軟件比那些用傳統方法開發 出來的軟件更加的靈活和高質量,因為更多的人在更多不同的條件下測試了開源軟件,而這是 封閉環境下的軟件開發人員辦不到的。 開源倡議開始引起了商業世界的注意,并且逐漸的,商業供應商們開始明白了。盡管很多 的學術和技術人員在 20 年前就明白了這是一條正確的路,商業供應商們需要 Internet 這樣的 應用才能讓他們明白他們是可以從開源獲利的。現在 Linux 早已過了被用作只有對有技術背景 的人才有用的學術系統的階段。 當前 Linux 不僅僅提供操作系統:已經有了一整套的基礎設施來支持操作系統的開發,為 操作系統而開發和測試程序,把所有需要的東西提供給用戶,并且提供維護,更新和支持,和 定制,等等。今天,Linux 已經準備好接受一個快速變化的世界的挑戰。
1.3.2. 有十年的經驗來為你提供服務
Linux 也許是最著名的開源倡議,但是有另外一個項目為 Linux 的流行作出了巨大的貢 獻。這個項目叫作 SAMBA,它的成就是對 MS Windows NT,OS/2,和 Linux 內置支持的,在 PC 機 上用于文件和打印服務的 Server Message Block (SMB)/Common Internet File System (CIFS) 協議做了逆向工程。現在幾乎所有的系統都有適用的 SAMBA 軟件包,這些軟件包提供了在混合 環境中使用 MS Windows 協議的交互連接方案:Windows 兼容的(向上支持到 WinXP)文件和打 印服務。 也許比 SAMBA 項目更加成功的是 Apache HTTP server 項目。這個服務器能夠在 UNIX, Windows Nt 和許多其他的操作系統。它最初被叫作“A PAtCHy server”,是建立在一些現成 的代碼和補丁上的。它成熟的代碼值得被冠以 Apache 這個美國土著部落的名字。這個部落的人 民有優秀的戰爭戰略和無窮無盡的忍耐力。Apache 比其他很多的 Web 服務器都要快很多,更加 的穩定而且有更加多的功能。Apache 運行在每天有幾百萬訪問者的網站上。盡管開發者沒有提 供什么官方的支持,Apache 用戶社區可以為你提供所有問題的答案。現在有些第三方公司提供 商業支持。 在辦公應用程序方面,有 MS Office 辦公套件的克隆,包括從部分到全部的 MS Windows 工 作站上的應用程序。這些倡議讓 Linux 被桌面系統市場接受起了很大的幫助,因為用戶可以不 用新的培訓就能使用新的操作系統。隨著桌面系統帶來了普通用戶的肯定,也同時帶來了他們 的變得越來越復雜和苛刻的特殊的要求。 開源社區主要由已經在里面超過 5 年以上的人組成。他們保證 Linux 在桌面市場和通用的 IT 應用中是重要的一員。拿薪水的雇員和志愿者一起努力使得 Linux 保持在市場中的位置。越 來越多的用戶,會帶來越來越多的問題。開源社區保證答案會源源不斷的來,并且以懷疑的眼 光留意答案的質量,這樣就使得 Linux 更加的可靠和容易接近。 本書不打算列舉所有的 Linux 軟件,因為有成千上萬的軟件包。在整個過程中,我們會提 供給你最常用的軟件包,這些軟件包幾乎都是免費的。為了讓初學者減少害怕,這里是一個你 最最想要的程序的截圖。你可以看到他們不遺余力的讓從 Windows 轉過來的新用戶感到自在。 圖表 1-1. OpenOffice 與微軟兼容的電子表格
1.4. Linux 的特性
1.4.1. Linux 的優點
Linux 的大量優點歸根于他的起源,即扎根于 UNIX。當然這不包括第一個優點。 Linux 是免費的。 他們說就像是免費的啤酒。如果你不想花一分錢的話,你甚至連 CD 都不用買。Linux 可以 全部免費從 Internet 網上下載下來。沒有注冊費,沒有每個用戶的費用,免費更新,并且如果 你想要改變你的系統的行為的話你可以免費拿到源代碼。 最重要的是,Linux 是自由的。 常用的許可證是 GNU Public License (GPL)。這個許可證允許任何人修改 Linux 并且最終 重新發布修改后的發行版,只要修改后的源代碼還是免費的。實際上,你可以免費拿到一個內 核鏡像,然后比如說增加對心靈傳輸機器的支持,或者對時間旅行機器的支持,然后賣掉你的 新發行版,只要你的客戶還是能拿到你的源代碼。 Linux 可以被移植到任何硬件平臺。
一個想要賣一種新電腦,或者不知道他的機器會運行什么樣的操作系統(比如說你汽車或 者洗衣機里面的 CPU)的供應商可以拿來一個 Linux 內核,修改后使它在他的硬件上工作,因 為他可以免費拿到做這些事情所需要的文檔。 Linux 是能長期運行的。 就象 UNIX,一個 Linux 系統是不需要重啟就能長期運行的。這就是為什么很多任務被安排 在夜間或者其他不忙的時候執行,使得在繁忙的時候有高可用性和對硬件更加合理的使用。這 個特性使得 Linux 適合于那些人們無法或者沒有時間來日夜控制他們的系統的環境中。 Linux 是安全的和多功能的。 Linux 的安全模式是基于 UNIX 的安全設計。UNIX 安全設計是堅固的,并且已經被證明是高 質量的。但是 Linux 不僅僅適合作為抵抗 Internet 上敵人進攻的城堡,它還可以利用同樣的高 安全標準來適應其他的情況。你的開發機器和控制站會和你的防火墻一樣的安全。 Linux 是可擴展的。 通過增加或者刪除適當的軟件包,Linux 可以運行在從只有 2MB 內存的掌上型電腦到有幾 百個節點的有千兆兆(PB)級存儲空間的集群。你已經不再需要超級計算機了,因為你可以利用 Linux 系統提供給你的搭建模塊來做更大的事情。如果你想做一些小事情,比如說給一個處理 器建一個操作系統或者只是廢物利用你的舊 486 機器,Linux 也可以做的很好。 Linux 操作系統和大部分的 Linux 程序有非常短的調試周期。 因為有成千的人在開發和測試 Linux,一般來說能夠很快的發現錯誤并且找到人來改正這些錯 誤。有的時候錯誤被發現后幾個小時就能被改正。
1.4.2. Linux 的缺點
有太多的發行版了。 就像羅馬人說的,“Quot capites, tot rationes” (人越多,意見越多)。乍看起來, Linux 發行版的數量可能會讓你感到害怕或者讓你覺得很荒謬,但是這也說明每個人都能找到 他或她所需要的。你沒有必要是專家才能找到合適的發行版。 如果你問的話,一般 Linux 用戶會說他用的發行版是最好的。所以你應該選擇那個發行版 呢?其實沒有必要擔心太多,因為每個發行版基本上都包括了基本的軟件包。在這個基礎上, 一些第三方軟件使得 TurboLinux 更加適合于中小企業,RedHat 適合于服務器,而 SuSE 適合于 工作站。但是,區別很可能只是表面的。最好的策略是測試一下幾個發行版;很可惜的是,不 是每個人都有時間這樣做。幸運的是,有足夠多的建議告訴你怎樣選擇你的 Linux。利用關鍵 字“choosing your distribution”在 google 上做個很快的搜索,就能給你幾十個很好的建議
的連接。Installation HOWTO ( http://www.tldp.org/HOWTO/Installation-HOWTO/ )也討論 了怎樣選擇你需要的發行版。 Linux 對初學者不是很友善,并且讓他們感到困惑。 必須承認 Linux,至少是它的核心系統,不如 MS Windows 友善,而且肯定比 MacOS 要難 用。但是……隨著 Linux 的流行,已經做了很多的努力讓 Linux 變得容易使用,特別是對初 學者。每天都有更多的信息被發布來填補給不同水平用戶的文檔的空白,比如說本書。 開源產品值得信任嗎? 免費的產品能是可靠的嗎?Linux 用戶可以選擇是否使用 Linux,和那些使用專有軟件而沒 有這樣的自由的用戶比,他們很大的優勢。經過長時間的測試,大部分的 Linux 用戶得出結 論,Linux 不但很好,而且在很多情況下比傳統的方案更好更快。如果 Linux 不好的話,它早 就不存在了,不會有現在的普及和幾百萬的用戶。現在用戶可以影響他們的系統,并且和社區 分享他們的想法和意見。這使得系統每天都在改進。這確實是一個永遠也做不完的項目,但是 在一個不斷變化的環境中,Linux 同時也是一個不斷爭取完美的項目。
1.5. Linux 版本
1.5.1. Linux 和 GNU
盡管有大量的 Linux 實現,如果僅僅是因為每個 Linux 機器是按照你的需要而把建造模塊 放在一起的一個盒子,那么你會發現不同發行版之間有很多相似的地方。安裝一個系統只是一 個長期關系的開端。就在你認為你有了一個很好的運行的機器的時候,Linux 會刺激你的想象 力和創造力。你越意識到這個系統能給你的威力,你越想重新定義它的極限。 按照發行版,你的硬件和個人喜好,Linux 也許看起來不一樣,但是作為所有的圖形和其 他的界面的基礎的那部分是一樣的。Linux 系統是基于 GNU(Gnu’s Not UNIX)工具,這些工具 提供了一套標準的方法來處理和使用系統。所有的 GNU 工具都是開源的,所以它們可以被安裝 在任何的系統上。大多數的發行版提供預編譯的最常用工具的軟件包,比如 RedHat 的 RPM 軟件 包和 Debian 的 Debian 軟件包(也叫 deb 或者 dpkg),這樣即使你不是個程序員你也能在你的 系統上安裝一個軟件包了。然后,如果你喜歡自己動手,那么你會更加喜歡 Linux 的,因為大 多數的發行版提供一套完整的開發工具來讓你從源代碼安裝一個新軟件。這種設置也允許你安 裝那些沒有以適合你的系統的預編譯形式存在的軟件。 常用 GNU 軟件: Bash:GNU 命令外殼 GCC:GNU C 編譯器
GDB:GNU 調試器 Coreutils:一套基本的 UNIX 風格的實用工具,比如說 ls, cat 和 chmod Findutils:查找文件 Fontutils:轉換字體格式或者建立新的字體 The Gimp:GNU 圖像處理軟件 Gnome:GNU 桌面環境 Emacs:一個非常強大的編輯器 Ghostscript 和 Ghostview:PostScript 文件的解釋程序和圖形界面 GNU Photo:和數字照相機互動的軟件 Octave:一門主要是做數字計算和圖形處理的編程語言 GNU SQL:關系數據庫系統 Radius:一個遠程驗證和賬戶服務器 …… 還有很多商業應用程序可以在 Linux 上運行。要了解他們更多的信息的話,就要看他們的 文檔了。在本書中,我們只討論免費軟件,他們大部分采用 GNU 許可證。 為了安裝缺少的或者新的軟件包,你需要一種軟件管理格式。最常見的格式包括 RPM 和 dpkg。RPM 是 RedHat 軟件包管理器。它被用于多種 Linux 系統中,盡管名字聽起來不象。Dpkg 是 Debian 軟件包管理系統,它使用一種叫 apt-get 的界面,這種界面也能管理 RPM 軟件包。 Novell Ximian Red Carpet 是帶圖形界面的 RPM 的第三方實現。另外的第三方軟件供應商也許 有他們自己的安裝過程,有時候會模仿像 MS Windows 和其他平臺上面的 InstallShield。當你 慢慢的深入 Linux 的時候,你很可能會接觸一個或多個這種程序。
1.5.2. GNU/Linux
Linux 內核(你系統的骨骼,參見 3.2.3.1)不屬于 GNU 項目,但是使用相同的許可證。絕 大部分的使用程序和開發工具(你系統的肌肉)是從 GNU 項目里拿來的,他們不是 Linux 獨有 的。因為任何可用的系統都必須包括內核和至少一個最精簡的實用程序集,一些人認為這樣的 一個系統應該被稱作 GNU/Linux 系統。 為了最大程度的獨立于不同的發行版,在本書中我們就討論這樣的 Linux。如果我們不是 在討論 GNU/Linux 的時候,我們會表明特定的發行版,版本號和程序名。
1.5.3. 我應該安裝哪個發行版
在安裝前,硬件是你最重要的因素。既然每個 Linux 發行版包括了基本的軟件包,而且能 夠按照任何不同的需求而建立起來(因為他們都使用 Linux 內核),你只要考慮這個發行版是 否能在你的硬件上運行。比如說,LinuxPPC 能夠在 Apple 和其他的 PowerPC 上面運行,但是不 能運行在普通的基于 x86 的 PC 上。LinuxPPC 確實能在新的 Mac 上運行,但是你不能把它用于 一些使用舊 BUS 技術的電腦。另外一個難以處理的情況是 Sun 硬件,它可能是舊的 SPARC CPU 或者新的 UltraSparc,這兩者需要不同的 Linux。 有些 Linux 發行版是為一些特定的處理器優化過的,比如說為 Athlon CPU,但是他們也能 很好的運行在標準的 486,586 和 686 因特爾處理器上。有時候為特殊 CPU 制作的發行版不是那 么可靠,因為較少的人測試過。 大多數的 Linux 發行版提供一套準對通用 PC 的程序和為基于 Intel x86 CPU 優化后的內 核。這些發行版經過很好的測試,并且被定期維護。它們集中精力于穩定的服務器的實現和簡 單的安裝和更新過程。這樣的例子包括 Debian,Ubuntu,Fedora,SuSE 和 Mandriva。他們是 最主流的 Linux 系統,一般認為對初學者來說他們是很容易上手的,但是也不妨礙專業人員最 大限度的利用他們的 Linux 機器。Linux 同時也很好的運行在筆記本和中檔的服務器上。新硬 件的驅動程序只有經過了廣泛的測試才會被包括在系統里,這樣就增加了系統的穩定性。 一個系統的標準桌面系統也許是 Gnome,但是另外一個系統也許是 KDE。一般情況下, Gnome 和 KDE 都可以運行于所有主流的 Linux 發行版。另外的窗口和桌面管理器適合更加高級 的用戶。 標準的安裝過程允許用戶在不同的基本配置之間選擇,比如作為工作站的話,就會安裝每 天要用的軟件包和開發工具,或者為服務器安裝的話,就會選擇不同的網絡服務。專家級的用 戶在 初始安裝過程中可以安裝他們需要的軟件包的任何一個組合。 本指南的目標是適合所有的 Linux 發行版。但是為了你自己方便,強烈建議初學者挑選一 個主流的發行版,它默認狀態下就支持常見的硬件和程序。 下面的是一些非常適合新手的選擇: Fedora Core Debian SuSE Linux Mandriva (以前叫 MandrakeSoft) Knoppix:一個在你的 CD-ROM 上運行的操作系統,你沒有必要安裝任何東西
ISO 鏡像可以從 LinuxISO.org 下載。主要的發行版可以從正規的計算機商店里購買。
第 2 章. 快速入門
為了最有效的使用這個指南文檔,我們將馬上開始一個連接到 Linux 系統并進行基本實驗 操作的實踐章節。 我們將討論: ? 系統連接 ? 系統斷開連接 ? 文本和圖形模式 ? 更改賬戶密碼 ? 通過文件系統導航 ? 識別文件類型 ? 查看文本文件 ? 查找幫助信息
2.1. 登錄, 激活用戶界面和登出
2.1.1. 簡介
為了能在 Linux 系統直接工作,你將需要提供一個用戶名和密碼。你總是需要身份驗證才 能訪問系統。正如我們已經在第 1 章練習中提到,大多數基于 PC 的 Linux 系統有兩種基本的系 統運行模式:一是快速,清醒的文本控制臺模式,它看起來像帶有鼠標的 DOS,多任務和多用 戶功能,或在圖形模式,它看起來更好,但會消耗更多的系統資源。.
2.1.2. 圖形模式
這是現今大多數臺式計算機的默認模式。當你最初被要求輸入你的用戶名,然后在一個新 窗口,需要輸入你的密碼,你就知道你將使用圖形模式連接到該系統。 要登錄時,請確保鼠標指針在登錄窗口,提供您的用戶名和密碼給系統驗證,然后點擊確 定或按回車鍵。 小心使用 root 帳號! 人們普遍認為使用 root 用戶,即系統管理員帳戶,來連接(圖形化的)系統是一個壞主 意。因為使用圖形需要包括運行許多額外的程序,在使用 root 用戶下涉及很多額外的權限。為 了讓所有的風險盡可能低,應該使用一個普通用戶帳戶進行圖形的連接。但是,有足夠的風險 使得要記住這個一般性的建議,所有的 root 帳號的使用:只作為 root 用戶登錄時需要額外的 特權。 在輸入您的用戶名/密碼組合后,它可能需要一些時間才啟動圖形環境,這取決于您的計算 機 CPU 速度,您使用的軟件和您的個人設置。
若要繼續,您需要打開一個終端窗口或簡化的 xterm(X 代表支持圖形環境的基礎軟件名 稱)。這個程序可以在應用程序->工具,系統工具或互聯網菜單這些地方找到,這取決于您所 使用的窗口管理器類型。可能有圖標作為一個快捷方式以獲得 xterm 窗口,而且桌面上點擊鼠 標右鍵,背景通常會提示一個包含終端窗口的應用程序菜單。 在瀏覽菜單時,你會發現很多事情可以在不通過鍵盤輸入指令下完成。對于大多數用戶而 言,傳統’n’點擊來處理計算機任務的方法也可行。但是,本指南是為未來的需要更改系統核心 的網絡和系統管理員準備的。他們需要一個比用鼠標更強大的工具來處理所有任務。這個工具 就是 shell,當在圖形模式下,我們通過啟動一個終端窗口中打開我們的 shell。 該終端窗口是您的系統控制面板。幾乎所有后面涉及到的任務都可以使用這個簡單但又強 大的文本工具完成。一個終端窗口在打開后應始終顯示一個命令提示。該終端顯示標準提示, 它顯示用戶的登錄名和當前工作目錄,由(?)代表: 圖 2-1. 終端窗口
另一種常用的提示形式是: [[email protected] dir] 在上面的例子中, user 代表你的登錄名,hosts 代表工作所在的主機名,而 dir 指示你當 前所在的文件系統路徑。 稍后我們將詳細的討論提示和它的行為。現在,只需知道,提示可以顯示各種信息,但它 們不是你提交給系統的命令的一部分。 要從使用圖形模式的系統斷開,您需要關閉所有終端窗口和其他應用程序。在此之后,擊 中注銷圖標或菜單中找到退出按鈕。關閉一切都沒有必要的,系統能為你做這個,但當你再次 連接時會話管理可以在你的屏幕上顯示當前打開的應用程序,這需要較長時間并且不是我們預 期的效果。然而,這種行為是可配置的。 當你看到登入界面時,輸入用戶名和密碼,這樣退出系統就成功了。 Gnome 或 KDE? 我們已經提過 Gnome 和 KDE 桌面幾次了。這是兩個最流行的桌面管理方式,雖然還有很多 很多其他的方式。無論你選擇的桌面工作是哪種- 只要你知道如何打開一個終端窗口就可行 了。不過,我們會繼續應用 Gnome 和 KDE 作為實現某些任務的最流行的方法。
2.1.3. Text mode
You know you’re in text mode when the whole screen is black, showing (in most cases white) characters. A text mode login screen typically shows some information about the machine you are working on, the name of the machine and a prompt waiting for you to log in 當整個屏幕為黑色,顯示(在大多數情況下)字符時,你知道你是處于文 本模式下了。一個典型的文本模式登錄屏幕顯示一些關于你工作機器的資料,機器的名稱和提 示等你登錄: RedHat Linux Release 8.0 (Psyche) blast login: _ 文本模式登錄與圖形登錄不同,你必須先提供您的用戶名,然后按下回車鍵,因為有在屏 幕上你不能用鼠標點擊任何按鈕。然后你輸密碼,輸入后再按回車鍵。你不會看到任何跡象表 明你鍵入的字符,甚至沒有一個星號,你不會看到光標移動。但是,這在 Linux 上是正常的, 是出于安全因素而設計的。 當系統認為你是有效用戶,你可能會得到一些更多的信息,稱為日期信息,它可以是任何 內容。此外,顯示 cookie 是 UNIX 系統中流行的做法,它包含一些一些明智或不明智的(這取 決于你)想法。在此之后,你會得到一個 shell,使用圖形模式下同樣的提示。 別以 root 用戶登錄 在文本模式類似的:只在做絕對需要管理員權限的安裝和配置時才以 root 用戶登錄,如添 加用戶,安裝軟件,并進行網絡和其他系統配置。一旦你完成后,立即退出這個特別帳號并以 一個非特權用戶來繼續其他的工作。另外,有些系統如 Ubuntu,迫使你使用 sudo,這樣你不需 要直接訪問管理員帳戶。. 輸入 logout 命令并按下回車鍵進行退出操作。當你看到登錄窗口的時候,就表明你退出成 功了。
電源按鈕 盡管 Linux 不應應用了不恰當的程序而導致的系統被阻塞而關閉,但按下電源按鈕就相當 于在新的系統上啟動這些程序。然而,斷電停機過程中沒有運行完阻塞進程可能會造成嚴重的 系統損壞!如果你想更安全些,就需要在退出圖形界面下的系統時始終使用關閉選項,或者在 登錄屏幕上(如你必須提供你的用戶名和密碼)尋找一個關閉按鈕。. 到現在為止,我們知道如何登錄和退出系統了,這就為我們開始使用命令做好了準備。
2.2. 基礎知識
2.2.1. 命令
這是快速指南,用于方便入門;我們將在后面的章節對它們進行詳細的描述。 Table 2-1. 命令快速入門
命令 ls cd directory passwd file cat pwd exit or logout man command info command apropos string filename textfile
含義 顯示當前工作目錄下的文件, 類似 DOS 的 dir 命令 更改工作目錄 更改當前用戶的密碼 顯示文件的文件名和文件類型 在顯示屏上顯示文件的內容 顯示當前目錄的文件系統路徑 退出會話 從 man 中獲得命令信息 從 info 中獲得命令信息 search the whatis database for strings
2.2.2. 一般說明
在圖形或字符界面下的終端窗口,你在提示符之后輸入這些命令, 然后輸入回車鍵。 命令可以發出單獨的指令,如 ls。當你指定一個選項可得到不同的命令行為,通常使用一 個破折號(前面 – ),例如 ls – 1。相同的選項在另一個命令可能得到不同的含義。 GNU 程 序需要長的選項,由兩個破折號指示(–), 類似于前面說明的 ls –all。有一些命令沒有選 擇。 命令的參數指定了這個命令需要起作用的對象。一個例子如:ls /etc,其中的目錄/ etc 是 ls 命令的參數。這表明,你希望看到該目錄的內容,而不是默認的當前目錄的內容,想獲得 當前目錄內容只要輸入 ls 之后鍵入 Enter 就能獲得。有些命令需要參數,有時參數是可選的。. 你能從在線幫助中找出一個命令是否帶選項和參數,以及哪些是合法的,請參考 Section 2.3 。 在 Linux 中,如在 UNIX 中,目錄是使用斜線分開的,如在網絡所使用的地址(URLs)。我們 將在后面深入討論的目錄結構。 符號 . 和
在目錄意義上有特殊的意義。我們會在練習中盡量了解,并在下一章進行更 多的了解。 盡量避免登錄或使用系統管理員帳戶,root。除了做你的正常工作,大部分任務,包括系 統檢查,收集信息等,可以使用沒有任何特殊權限的普通用戶帳戶。如果需要,例如當創建一 個新用戶或安裝新軟件時,獲得 root 訪問的首選方法是通過切換用戶的 ID,請參閱 Section 3.2.1 中的例子。 本書幾乎所有可以執行的命令不需要系統管理員權限。在大多數情況下,當以非特權用戶 發出一個命令或啟動一個程序時,如果系統需要 root 權限時,會發出警告或提示你輸入 root 密碼。一旦完成后,立即現有離開應用程序或會話以使你擁有 root 權限。 讀文檔應成為你的第二習慣。特別是在開始的時候,重要的是要閱讀系統文檔,基本命
令,HOWTOs 手冊等。由于文件數量是如此巨大,所有不可能包括所有相關的文件。這本書將引 導你去閱讀每個討論主題所涉及的最合適文檔,以激勵閱讀 man 手冊的習慣。
2.2.3. 使用 Bash 特性
Bash 的幾個特殊的組合鍵讓你比在使用了 GNU 的 shell 做事情更容易,它幾乎是任何 Linux 系統默認的 shell,參見第 3.2.3.2。下面是最常用的功能列表,強烈建議你作出的一種 習慣去使用它們,以從一開始使用 Linux 就能獲得最優體驗。 Table 2-2. Bash 的主要組合鍵 Key or key combination Ctrl+A Ctrl+C Ctrl+D Ctrl+E Ctrl+H Ctrl+L Ctrl+R Ctrl+Z ArrowLeft and ArrowRight ArrowUp and ArrowDown Shift+PageUp and Shift+PageDown Function Move cursor to the beginning of the command line. End a running program and return the prompt, see Chapter 4. Log out of the current shell session, equal to typing exit or logout. Move cursor to the end of the command line. Generate backspace character. Clear this terminal. Search command history, see Section 3.3.3.4. Suspend a program, see Chapter 4. Move the cursor one place to the left or right on the command line, so that you can insert characters at other places than just at the beginning and the end. Browse history. Go to the line that you want to repeat, edit details if necessary, and press Enter to save time. Browse terminal buffer (to see text that has “scrolled off” the screen). Command or filename completion; when multiple choices are possible, the system will either signal with an audio or visual bell, or, if too many choices are possible, ask you if you want to see them all. Shows file or command completion possibilities.
Tab
Tab Tab
上述表的最后兩個命令可能需要一些額外的解釋。例如,如果你想變更目錄到目錄 directory_with_a_very_long_name,你不會輸入很長名稱,不會。你只要在命令行鍵入 cd 目 錄,然后按下 Tab 鍵,如果沒有其他文件也具有相同的前三個字符,然后 shell 就自動為你顯 示完整的文件名。當然,如果沒有其他文件以”d”開頭,那么你可能只需鍵入 cd d 和 Tab。 如果超過一個文件具有相同的開始字符時,這個 shell 將告知你,你可以在間隔很短的情況下
兩次鍵入 Tab,Shell 就會顯示你所需要的選擇: your_prompt> cd st starthere stuff stuffit 在上面的例子中,如果你在輸入前兩個字符后鍵入”a”,并再次點擊 Tab,沒有其他的可 選性后,Shell 自動完成目錄的名稱,你就不必鍵入字符串“rthere”: your_prompt> cd starthere 當然,你還需要鍵入 Enter 使 Shell 接受你的命令。 同一個例子,如果你輸入“U”,然后按下 Tab,shell 將自動為您添加“ff”,但隨后它 不做選擇了,因為后面有多個可能的選擇。如果你輸入制表符 Tab 鍵再次,您會看到的選擇, 如果你鍵入一個或多個字符,使系統明確的選擇你所需要的,并再次鍵入 Tab,或在你輸入選 擇的完整個文件名稱后鍵入 Enter,外殼程序匹配完整的文件名稱并更改至該目錄 – 如果它確 實是一個目錄名稱。. 這對命令的參數是文件名的情況同樣適用。 類似命令名稱匹配。輸入 ls 然后鍵入 Tab 兩次,這將列出您的路徑中的所有以 ls 開頭的 命令(見第 3.2.1): your_prompt> ls ls lsattr lsdev lsmod lspci lspgpot lspnp lsraid lss16toppm lsusb lsw
lsb_release lsof
2.3. 獲取幫助信息
2.3.1. 警告
GNU / Linux 越來越涉及主動性。通常這一系統有幾種方法來實現這一目標。一種常見的 獲得幫助的方法是找到一個知道的人,不過耐心的和愛好和平的 Linux 社區成員希望,你要先 去嘗試本節提到的一個或多個方法,然后才請求他們的幫助,如果你能不遵循這個基本規則,那么他們的表達方式可能就比較苛刻了。
2.3.2. The man pages
很多用戶一開始都害怕使用 man 手冊,因為他們是所有文件的來源。但他們卻是很有條理 的,你會從下面的 man man 的例子看出來。 通常是在圖形模式下的終端窗口下讀取 man 手冊的,或者如果你喜歡也可以只在文本模式 下。在提示之后輸入如下的命令,然后在鍵入 Enter: [email protected] ~> man man
man 文檔在你鍵入 Enter 后將顯示在你的屏幕上: man(1) man(1) NAME man – format and display the on-line manual pages manpath – determine user’s search path for man pages SYNOPSIS man [-acdfFhkKtwW] [–path] [-m system] [-p string] [-C config_file] [-M pathlist] [-P pager] [-S section_list] [section] name …… DESCRIPTION man formats and displays the on-line manual pages. If you specify section, man only looks in that section of the manual. name is normally the name of the manual page, which is typically the name of a command, function, or file. However, if name contains a slash (/) then man interprets it as a file specification, so that you can do man ./foo.5 or even man /cd/foo/bar.1.gz. 使用空格鍵來瀏覽下一個頁面。你可以使用 B 鍵回到以前的頁面。當你到達終點,man 通 常會退出,你會重新獲得命令提示符。輸入 q 如果你想到達結束前離開,或者在用戶到達尾頁 后 man 不自動退出。 頁面閱讀器 操作 man 頁面的組合鍵取決于你的所使用的發行版本的頁面瀏覽器。大多數發行版本使用 less 命令來查看網頁和左右滾動。參閱第 3.3.4.2 頁面瀏覽器的更多信息。 每一個 man 頁面都包括幾個標準段落,就像我們從 man man 的例子中看到的一樣: 第一行包含的你正在閱讀的命令名稱,以及本手冊頁所在的段 ID 號。Man 頁面根據章節排 序。命令可能有多個 man 頁面,例如用戶手冊頁部分,系統管理手冊頁部分,以及程序員節手 冊頁。 顯示的該命令名稱和簡短描述,可以用于構建 man 頁面的索引。你可以查找這個索引中使 用 apropos 命令。 該命令的大綱規定了此命令擁有的所有選項和技術符號/或參數。你可以把選擇想像成執行 這條命令的一種方式。所帶的參數就是命令的執行對象。一些命令沒有選擇或沒有參數。可選 的選項和參數放在“[”“]”之間,以表明它們是可選的。 接著給出了對這個命令的更長的詳細描述。 列出選項和它們的描述。選項通常可以組合在一起。如果不是這樣的話,本節將會告訴 你。 環境變量介紹了影響該命令的 shell 變量(不是所有的命令都有環境變量)。 有時候還提供這個命令的具體章節。
對其他 man 頁面的參考鏈接提供在 “SEE ALSO”一節。括號中的數字是能查到到這個命令 的 man 頁面段落。有經驗的用戶經常使用 / 命令附上搜索字符串,并鍵入 Enter 來切換到 “SEE ALSO”部分。 通常也有有關已知錯誤(異常信息)的信息,并提交報告您可能會發現的新錯誤的地方。 可能還會提供作者和版權的信息。 Some commands have multiple man pages. For instance, the passwd command has a man page in section 1 and another in section 5. By default, the man page with the lowest number is shown. If you want to see another section than the default, specify it after the man command: 一些命令有多個 man 頁面。例如,passwd 命令有一個 man 頁面在第 1 部分并且在第 5 部分也有另一個 man 頁面。默認情況下,只顯示最低數字的 man 頁面。如果你想看到另一個部分,在 man 命令后指定該部分: man 5passwd 如果你想看到 man 的所有頁面,一頁接一頁的,就需要在 man 命令后附上-a 參數: man -apasswd 使用這種方式,當你到達第一個 man 頁面的末尾后并再次鍵入 SPACE,下一部分的 man 頁面就 會顯示出來。
2.3.3. More info
2.3.3.1. Info 頁面
除了 man 頁面,您可以使用 info 命令查閱該命令的信息頁面。這些信息頁面通常含有較多 的最新信息,是比較容易使用。一些命令的 man 頁面就是參考信息頁面的。 在終端上輸入 info info: File: info.info, Node: Top, Next: Getting Started, Up: (dir) Info: An Introduction * Info is a program, which documentation of computer of its on-line manuals in “Info reader” to read the now. you are using now, for reading programs. The GNU Project distributes most the Info format, so you need a program called manuals. One of such programs you are using
If you are new to Info and want to learn how to use it, type the command h' now. It brings you to a programmed instruction sequence. To learn advanced Info commands, typen’ twice. This brings you to Info for Experts', skipping over theGetting Started’ chapter.
* Menu: * Getting Started:: Getting started using an Info reader. * Advanced Info:: Advanced commands within Info. * Creating an Info File:: How to make your own Info file. –zz-Info: (info.info.gz)Top, 24 lines –TopWelcome to Info version 4.2. Type C-h for help, m for menu item. 使用箭頭鍵來瀏覽文本上下文,移動光標到起始字符為星號并且包含你想要的信息的關鍵 字的一行,然后按下回車。使用 P 和 N 鍵移動到上一個或下一個主題。空格鍵會讓你翻到下一 頁,無論是否啟動一個新主題或另一命令的信息頁。使用 Q 退出。該 info 程序還有很多其他的 信息資料。
2.3.3.2.
whatis 和 apropos 命令
可使用 whatis 命令來得到一個簡短的命令解釋,如下面的例子: [your_prompt] whatis ls ls (1) – list directory contents 它列出了一個命令的簡單信息,而且在 man 頁面的第一部分也包含了這樣的一個信息頁。 如果你不知道從哪里開始入手并且不知道開始閱讀哪個 man 頁,apropos 可以讓你獲得更多的 信息。比如說你不知道如何啟動一個瀏覽器,那么你可以輸入以下命令: another prompt> apropos browser Galeon galeon – gecko-based GNOME web browser lynx (1) – a general purpose distributed information browser for the World Wide Web ncftp (1) – Browser program for the File Transfer Protocol opera (1) – a graphical web browser pilot (1) – simple file system browser in the style of the Pine Composer pinfo (1) – curses based lynx-style info browser pinfo pman – curses based lynx-style info browser viewres (1x) – graphical class browser for Xt 按 Enter 后你會看到,你的機器上有很多與瀏覽器相關的東西:不僅是網絡瀏覽器,而且 文件和 FTP 瀏覽器,以及文件瀏覽器。如果您還安裝開發包,你也有可能得到編寫瀏覽器相關
程序所附帶的 man 頁說明。一般來說,在 man 頁命令說明在第一頁,所以標為“(1)”,適合 作為用戶進行嘗試。發出上述 apropos 命令的用戶可能因此嘗試啟動 galeon,lynx 或 opera 命 令,因為這些顯然都與瀏覽萬維網有關。
2.3.3.3. –help 選項
大部分的 GNU 支持—help 選項,該選項給出了如何使用這個命令的簡短說明以及這個命令 的一系列選項。 下面就是 cat 命令帶有—help 選項后的輸出結果: [email protected]: cat –help Usage: cat [OPTION] [FILE]…… Concatenate FILE(s), or standard input, to standard output. -A, –show-all equivalent to -vET -b, –number-nonblank number nonblank output lines -e equivalent to -vE -E, –show-ends display $ at end of each line -n, –number number all output lines -s, –squeeze-blank never more than one single blank line -t equivalent to -vT -T, –show-tabs display TAB characters as ^I -u (ignored) -v, –show-nonprinting use ^ and M- notation, except for LFD and TAB –help display this help and exit –version output version information and exit With no FILE, or when FILE is -, read standard input. Report bugs to .
2.3.3.4. 圖形幫助
如果你喜歡的圖形用戶界面的話也不用絕望。 Konqueror,默認的 KDE 文件管理器,提供 豐富多彩進入 man 和 info 頁的方式。你可能想在地址欄嘗試”info:info”,你會得到一個關 于 info 命令的可瀏覽的 info 頁。同樣的,輸入”man:ls”將向你輸出 ls 命令的 man 頁。你 甚至可以完成命令的名稱:你會在 man 頁里看到所有由“ls”開頭的命令下拉菜單。在地址欄 位置輸入”info:/dir”就會顯示 info 頁,以工具排列順序顯示。優秀的幫助內容,包括 Konqueror 的手冊。從啟動菜單或通過在終端窗口輸入命令的 konqueror,在鍵入 Enter,就能 見到下面的截圖了。
Figure 2-2. Konqueror as help browser
Gnome 的幫助瀏覽器也具有非常好的用戶友好性。你可以啟動它使用以下幾種方法,從 Gnome 的菜單中選擇應用->幫助來啟動,通過點擊桌面上的 liftguard 圖標或在一個終端窗口 輸入命令 gnome –help 來啟動。該系統文件和 man 頁可以方便的通過使用簡單的接口進行瀏 覽。 Nautilus 文件管理器提供了對 man 和 info 頁搜索的索引,所以很容易瀏覽并被關聯。 Nautilus 可以從命令行,或單擊您的主目錄圖標,或從 Gnome 的菜單啟動。 GUIs 對系統文件最大的好處是,所有的信息是完全相通的,所以你可以單擊“請參閱”部 分和所有其他人的網頁鏈接,瀏覽和獲取,從而不必在瀏覽和獲取知識上中斷幾個小時。
2.3.3.5. 特殊命令
一些命令沒有單獨的文檔,那是由于其他命令的一部分。cd, exit, logout 和 pwd 就是 這些特殊命令。 它們是你的 shell 程序的一部分,所以被叫做 shell 內嵌命令。請參考你使用 的 shell 的 man 和 info 手冊來來獲得這些信息。用戶開始使用 Linux 系統一般都是使用 Bash Shell。參考 Section 3.2.3.2 以獲得更多的 shell 信息。 如果你更改了原始的系統配置,可能 man 手冊還在,但是卻由于你的 shell 環境的變更而 變得不可見。這種情況下,你需要檢查 MANPATH 環境變量。如何做將會在 Section 7.2.1.2 描 述。
一些程序或包只有在/usr/share/doc 有一些簡介或參考信息。具體情況請參見 Section 3.3.4。 最壞的情況,你可能偶然的從你的系統中移除了這些文檔(希望只是偶然,因為這是非常不 好的主意)。在這種情況下,首先要確定在搜索工具搜索下找不到任何有用的信息,搜索工具參 考 Section 3.3.3。如果是這樣的話,你需要重新安裝與這些文檔相關的命令的手冊包,參見 Section 7.5。
2.4. 總結
Linux 系統通常運行在文本模式或圖形模式。由于現今的 CPU 和 RAM 再也不是昂貴的資 源,使得每個 Linux 用戶都使用圖形模式而且很多人確實是這么做的。但是這并不是說你不需 要了解文本模式:我們將在本課程中使用文本模式環境,使用終端窗口的方式。 Linux 鼓勵用戶自主的獲取知識并具有獨立性。不可避免的,你需要閱讀大量的文檔以達 到這樣的目標;那也是你所看到的,我們在本書中為每個命令,工具和問題參考了其他的文 檔。你閱讀越多的文檔,你就更容易并更快的查閱相關手冊。盡快的讓閱讀文檔成為你的一種 習慣。當你不知道一個問題的答案時,參考相關文檔應該成為你的習慣。 我們已經學習了一些命令: Table 2-3. New commands in chapter 2: Basics
apropos cat cd exit file info logout ls man passwd pwd
Search information about a command or subject. Show content of one or more files. Change into another directory. Leave a shell session. Get information about the content of a file. Read Info pages about a command. Leave a shell session. List directory content. Read manual pages of a command. Change your password. Display the current working directory.
2.5. 練習
我們所學的大部分內容是制造錯誤并查看是如何出錯的。這些練習的作用是讓你看到一些 錯誤信息。做這些練習的順序很重要。 不要忘記在命令行使用 Bash 特性:盡量少輸入字符來完成這些練習!
2.5.1. 連接和斷開
判定你是工作于文本模式還是圖形模式 我正在文本/圖形模式下工作(刪除不使用的東西) 使用你安裝時設定的用戶名和密碼登錄系統 退出系統 再次登陸,使用一個不存在的用戶名 ->發生了什么?
2.5.2. 密碼
使用你的用戶名和密碼再次登陸。 ·更改你的密碼為 P6p3.aa! 并單擊 Enter 鍵。 ->發生了什么? ·再試一次,這次輸入非常簡單的密碼,比如 123 或 aaa. ->發生了什么? ·再試一次,這次不輸入密碼僅僅是單擊 Enter 鍵 –>發生了什么? 使用命令 psswd 替代 passwd –>發生了什么?
新密碼 如果你的密碼不更改會原來的密碼,新密碼將是”P6p3.aa!”。在這次練習之后還原你的密 碼。 注意某些系統不允許循環使用密碼,比如在一定時間內或一定密碼變更次數內恢復原來的 密碼。
2.5.3. 目錄
這些練習會幫助你對這部分內容更熟悉。 ? 輸入命令 cd blah ->發生了什么? ? 輸入命令 cd
記住在”cd” 和 “
“之間有空格! 使用 pwd 命令 ->發生了什么?
使用 s 命令列出目錄的內容 ->你將會看到什么? ->你覺得這些是什么? -> 使用 pwd 命令檢查一下 ? 輸入 cd 命令 ->發生了什么? ? 重復第 2 步的動作 2 次 ->發生了什么? ? 顯示目錄的內容 輸入命令 cd root ->發生了什么? ->你進入了哪個目錄? ? 重復第 4 步 你知道另一種可能的方法來查看你所在的目錄嗎?
2.5.4. Files
更改目錄到/ 然后至 etc。使用 ls 命令;如果輸出比你的窗口還長,則拉長窗口,或者試試 Shift+PageUp 和 Shift+PageDown. 文件 inittab 包含了列表中第一個問題答案。使用 file 命令查看它的屬性。 -> inittab 的文件類型是 …… ? 使用命令 cat inittab 并讀取該文件的內容 -> 你的計算機的默認模式是什么? ? 使用 cd 命令返回到你的 home 目錄。 ? 輸入命令 file -> 這條命令能查找到文件”.”的意義嗎? ? 你能使用 cat 命令查看到”.”問嗎? ? 用—help 選項顯示 cat 命令的幫助。使用計算輸出行數的選項來計算 /etc/passwd 文件列 出的 用戶個數
2.5.5. 獲取幫助
查看 man intro ? 查看 man ls ? 查看 info passwd ? 輸入 apropos pwd 命令 ? 對 cd 命令試試 man 或 info -> 你如何查找更多的關于 cd 命令的信息? ? 讀 ls –help 并試驗一下.
第 3 章. 文件和文件系統
通過第 2 章的學習,我們準備更詳細的討論 Linux 系統的文件和目錄。很多 Linux 用戶覺 得 Linux 系統難用是由于他們缺少哪種數據存儲在哪些地方的整體認識。我們將會盡量說明文 件系統的文件組織架構。 我們將列舉最重要的文件和目錄,使用不同的方法來查看這些文件的內容,并學習如何創 建,移動和刪除文件和目錄。 在完成本章的練習之后,你將能夠了解: ? 描述 Linux 文件系統的設計 ? 顯示和設置路徑 ? 描述最重要的文件,包括 Kernel 和 Shell ? 查找隱藏文件 ? 創建,移動和刪除文件和目錄 ? 顯示文件的內容 ? 了解并使用不同的鏈接類型 ? 找出文件屬性并更改文件權限
3.1. Linux 文件系統概覽
3.1.1. 文件
3.1.1.1. 概述
UNIX 系統的一個簡單描述,同樣也適用于 Linux 系統,就是: “在 UNIX 上,一切都是文件;如果哪個東西不是文件,那么它就是一個進程。” 這個描述是正確的,即使有一些特殊的文件可能不僅僅是普通文件(比如,指定的管道和套 接字),但是為了簡單起見,任務一切都是文件是可以接受的廣泛含義。Linux 系統里,類似于 UNIX 系統,文件和目錄是沒有區別的,因為目錄只是包含了其他文件名的一種文件。程序,服 務,文本,圖像等等都是文件。輸入和輸出設備,以及其他的所有設備,根據系統定義都被認
為是文件。 為了有序的管理這些文件,人們總是把它們想象成位于硬盤上的一種類似于樹形結構,就 像我們所知的 MS-DOS 一樣。較大的分支包含了更多的分支,末端分支包含樹形結構的葉子節點 或普通文件。現在開始我們使用這種樹形圖像,但是我們在后面發現為什么這并不是完全正確 的圖像。
3.1.1.2. 文件分類
大部分文件叫做規則文件; 它們包含普通數據,比如文本文件,可執行文件或是程序文 件,輸入到程序里或從程序里輸出等。 當你在說 Linux 系統遇到的任何東西是文件時,注意有幾個例外。 目錄: 包含一系列其他文件的文件。 特殊文件: 用于輸入和輸出的一種機制。大部分特殊文件都位于 /dev 目錄下,我們將在 后面討論它們。 鏈接 s: 它使得文件或目錄在系統文件樹的不同部分可見。我們將詳細討論鏈接。 (域)套接字: 一種特殊的文件,類似于 TCP/IP 套接字,提供了受文件系統訪問控制保護的進程 間網絡保護。 指定管道: 類似于套接字,并形成一種進程間通信的方式,不需要使用網絡套接字語義。 Ls 命令的-l 選項使用輸出行的第一個字符顯示出文件的類型: jaime:~/Documents> ls -l total 80 -rw-rw-r–1 jaime jaime 31744 Feb 21 17:56 intro Linux.doc -rw-rw-r–1 jaime jaime 41472 Feb 21 17:56 Linux.doc drwxrwxr-x 2 jaime jaime 4096 Feb 25 11:50 course 下面這個表總體描述了文件類型的特征: Table 3-1. 文件類型 符號 d l c s p b 含義 普通文件 目錄 鏈接 特殊文件 套接字 管道 塊設備
為了不一直使用長長的清單來查看文件類型,很多系統不是僅僅使用 ls,而是使用 ls –F 命令,它能在文件名后面添加”/=|@”以顯示文件的類型。為了方便剛入門的用戶,-F 和—顏色 選擇通常組合起來使用,參見 Section 3.3.1.1。我們將在整篇文檔中使用 ls –F 以獲得更好 的可讀性。 作為用戶,你只需要直接處理平面文件,可執行文件,目錄和鏈接文件。特殊類型的文件 是為了系統處理你特殊的需求的,并且通常由系統管理員和編程人員來操作。 現在,在我們學習重要文件和目錄之前,需要先了解一下分區的作用。 3.1.2. 關于分區 3.1.2.1.為什么要分區? 很多人對分區是什么的認識比較含糊,因為每個操作系統都有創建和刪除分區的能力。 Liunx 在同一個物理磁盤上使用多個分區看起來可能有些奇怪,即使使用的是標準安裝,所以 需要加以解釋一下。 不同分區的其中一個目標是在災難中獲得更高的數據安全性。通過將硬盤分區,數據能夠 聚集和分離。當事故發生的時候,只有事故分區的數據會丟失,而其他分區的數據則很可能會 幸存下來。 當 Linux 沒有使用基于日志的文件系統并且遇到了斷電情況,這將導致災難發生。基于安 全和健壯性的原因來分區,這樣系統的一部分損壞就不會導致整臺計算機的損壞。這就是現今 使用分區最主要的原因。一個簡單的例子:一個用戶創建了一個腳本,一個程序或是一個 web 應用來填滿整個硬盤。如果硬盤只包括一個大的分區,整個系統在硬盤滿了之后將會停止運 作。如果這個用戶將數據存儲在別的分區,那么這個只會影響該數據分區,而系統分區和其他 分區則會繼續保持正常運作。 請記住使用基于日志的文件系統只能在斷電和突然與存儲設備斷開的情況下提供數據保 護。它并不會提供文件系統的壞塊和邏輯錯誤保護。出現這種錯誤情況,你應該使用 RAID(冗 余磁盤陣列)解決方案。 3.1.2.2. 分區設計和類型 Linux 系統有兩類主要的分區: 數據分區:正常的 Linux 系統數據,包括根分區 ,它包含了啟動和運行系統的所有數據。 交換分區: 計算機物理內存的擴展,位于磁盤的額外內存空間。 大部分的系統包含一個根分區,一個或多個數據分區,一個或多個交換分區。在混合環境 中的系統可能還包含其他系統數據的分區,比如使用 FAT 或是 VFAT 文件系統來存儲 MS Windows 數據的分區。 大部分的 Linux 系統在安裝時使用 fdisk 來設置分區的類型。可能你從第 1 章的練習中已 經注意到,這經常自動發生。然后,在某些偶然情況下,你可能沒有這么幸運。在這種情況 下,你將需要手動的選擇分區類型并手動進行磁盤分區。標準的 Linux 分區可以有 82 個交換分 區和 83 個數據分區,這些分區可以是基于日志的(ext3) 或常規的(ext2, 老的文件系統)。 fdisk 工具設計有內含的幫助,你大可忘記這些具體值。 除了這兩種類型,Linux 還支持大量的其他類型的文件系統,比如 Reiser 文件系統, JFS,NFS,FATxx 以及很多其他的(私有的)操作系統的文件系統。 標準的根分區(以一個單斜杠標示,/)大約有 100-500MB 大小,包含了系統配置文件,大部 分的基本命令和系統程序,系統鏈接庫,一些臨時空間和管理員帳戶的 home 目錄。一個標準類 型的安裝需要 250MB 的根分區。 交換空間(用 swap 說明) 只供系統自己使用,在正常操作中被隱藏起來。交換分區類似于 UNIX 系統的交換分區,保證了不管發生什么系統都可以持續的運作。在 Linux 上,由于有了這 塊額外的內存,你不會看到類似于內存溢出,請關閉一些應用再重試這樣氣人的消息。交換分 區或叫虛擬內存已經在 UNIX 系統以外的很多操作系統被采用很長時間了。 使用磁盤上的內存天然的比計算機上的真實物理內存要來得慢,但是有這個額外的內存卻 能極大的緩和系統內存使用。我們將在討論 Chapter 4 時對交換分區進一步的了解。 Linux 系統極大的依賴于位于磁盤上的兩倍于物理內存大小的交換分區。當安裝一個系統 的時候,你必須做到如何處理這種事情。比如有一個系統的 RAM 有 512 MB 大小: 第一種可能:一個有 1 GB 大小的交換分區 第二種可能:兩個 512 MB 大小的交換分區 第三種可能:有兩塊磁盤,每塊磁盤上有一個 512MB 大小的交換分區 最后一種選擇在高 I/O 負載的情況下會得到最好的性能。 根據特定需求閱讀相應軟件的文檔。一些應用軟件,比如數據庫,可能就需要更多的交換 空間。其他的,比如手持系統,由于缺少磁盤可能根本就沒有交換空間。交換空間可能還依賴 于你內核的版本。 內核在很多版本中是位于獨立的分區的,這是因為它是你的系統最重要的文件。如果是這 樣的話,你可以發現你還有一個/boot 分區,里面存放著你的內核文件和相關數據文件。 其余的磁盤通常被分作數據分區,所有的非系統核心數據可能位于一個分區,比如你在配置一 個標準的工作站的安裝。當非系統核心數據被分別存放在不同的分區時,通常按照如下的設置 模式: 一個分區用于用戶程序(/usr) 一個分區包含用戶的個人數據信息(/home) 一個分區存儲打印和郵件請求這個的臨時數據 (/var) 一個分區用于存放第三方和額外的軟件(/opt) 當分區被設置好之后,你只能去增加它了。變更已有分區的大小和屬性是可能的但并不推 薦。 磁盤劃分為分區取決于系統管理員。在大型系統中,他或她可能使用恰當的軟件來跨多個 磁盤設置為一個分區。很多發行版本針對工作站(一般用戶)和普通服務器的用途安裝標準的分 區,但是也可以客戶化分區。在安裝過程中你可以使用系統特定的工具或 fdisk 定義你自己的 分區設計方案,系統特定工具通常有圖形界面,而 fdisk 則是一個創建分區并設置其屬性的文 本工具。 工作站或客戶化的安裝主要的用途是一個人和相同一個人使用。選擇的安裝軟件反映了這 種用途并打包成一個通用的用戶包,比如友好的桌面主題,開發工具,E-mail 的客戶程序,多 媒體軟件,網絡和其他服務。所有東西放在同一個大分區中,交換分區設置為 RAM 的兩倍大 小,這樣一般的工作站就完成了,它為個人使用數據提供了最大的磁盤空間,但是不利的地方 是當發生問題的時候會缺少數據的一致性。 在服務器上,系統數據應該和用戶數據分離。提供服務的程序與這些服務涉及的數據存儲 于不同的地方。在這種類型的系統上需要創建不同的分區: ? 一個分區存放啟動機器的所有比需的數據。 ? 一個分區存放配置信息和服務程序。 ? 一個或多個分區存放服務器數據,比如數據庫表,用戶郵件和 ftp 歸檔等。 ? 一個分區存放用戶程序和應用。 ? 一個或多個分區存放用戶特定的文件(home 目錄) ? 一個或多個交換分區(虛擬內存) 服務器通常擁有更多的內存,因此也就有更多的交換空間。某些服務器進程,比如數據庫 進程,可能需要比平常更多的交換空間;查看指定的文檔以了解詳細信息。為了獲得更好的性 能,交換空間通常被分成不同的交換分區。 3.1.2.3. 掛載點 所有的分區都是通過掛載點掛載到系統上的。掛載點指定了在文件系統上存放一個特定數 據集的地方。通常,所有的分區都是通過根分區連接的。根分區,使用斜線表示(/),目錄就創 建在它上面。這些空目錄將是掛載到它上面的分區的掛載點。例如:給定含有以下目錄的一個 分區: videos/cd-images/pictures/ 我們要將這個分區掛載到文件系統上一個叫/opt/media 的目錄上。為了實現這個目標,系 統管理員必須確認目錄/opt/media 存在。最好,它是一個空目錄。這個步驟如何實現將在這章 的后面部分解釋。然后,使用 mount 命令,管理員就可以將分區掛載到系統上了。當你查看先 前的空目錄/opt/media ,你就會看到它包含掛載分區(磁盤或磁盤分區,CD, DVD, 閃存卡, USB 或其他存儲設備)的文件和目錄。 當系統啟動時,所有的分區都將被掛載到系統上,就像文件/etc/fstab 所描述的那樣。一 些分區沒有默認的掛載到系統上,如果它們沒有經常連接進系統,比如你的數碼相機的存儲 卡。如果配置正確,設備在系統發現連接后就會被掛載上,或者它也能由用戶手動掛載。你在 掛載和卸載設備的時候并不需要管理員帳號。在 Section 9.3.就有一個示例。 在系統運行時,分區和掛載點的信息可以通過使用 df 命令(代表 disk full or disk free) 顯示出來。在 Linux 上,df 命令屬于 GNU 版本所有,并且它支持 -h 或 human readable 選 項,這極大提高了用戶的可讀性。 注意到商業 UNIX 機器通常有它們自己版本的 df 和很多其他 命令。它們的功能通常相同,可是 GNU 版本的命令通常有更多更好的特性。 df 命令只顯示活動的非交換分區的分區信息。這些分區可以包含其他網絡系統的分區,就像下 面這個例子,其 home 目錄掛載到了網絡上的一個文件系統,這種情況在企業環境里經常能夠遇 到。 freddy:~> df-h Filesystem /dev/hda8 /dev/hda1 /dev/hda5 /dev/hda6 Size 496M 124M 19G 7.0G Used Avail Use% Mounted on 183M 288M 39% / 8.4M 109M 8% /boot 15G 2.7G 85% /opt 5.4G 1.2G 81% /usr Introduction to Linux /dev/hda7 fs1:/home 3.7G 8.9G 2.7G 867M 77% /var 3.7G 4.7G 44% /.automount/fs1/root/home 3.1.3. 更多的文件系統形式 3.1.3.1. 圖形化 為了方便,Linux 文件系統經常被想象成樹狀結構。在標準的 Linux 系統上,你將發現文 件系統的設計與圖 3-1 所示的類似。 這是 RedHat Linux 系統的一種文件系統形式。根據系統管理,操作系統和 UNIX 機器的任 務,這個結構可以多種多樣,而且目錄也可以隨意的刪除和增加。它們的名字甚至并非必須 的,它們只是一個約定。 文件系統的樹形結構以斜線(/)作為起點。這個目錄,包含了所有的底層目錄和文件,也被 叫做根目錄或文件系統的”根”。 在根目錄下一層的目錄通常在其前面加上斜線,以指示它們所處的位置同時預防與其他同 名目錄的沖突。當啟動一個系統后,去查看根目錄的內容是一種好的習慣。讓我們來看看你能 看到什么: emmy:~> cd / emmy:/> ls bin/ dev/ home/ lib/ misc/ opt/ root/ tmp/ var/ boot/ etc/ initrd/ lost+found/ mnt/ proc/ sbin/ usr/ 圖 3-1. Linux 文件系統形式 Table 3-2. 根目錄的子目錄 目錄 /bin /boot 內容 Common programs, shared by the system, the system administrator and the users The startup files and the kernel, vmlinuz. In some recent distributions also grub data. Grub isthe GRand Unified Boot loader and is an attempt to get rid of the many different boot-loaders we know today. Contains references to all the CPU peripheral hardware, which are represented as files with special properties. /dev /etc /home /initrd /lib /lost+found /misc /mnt /net /opt /proc Most important system configuration files are in /etc, this directory contains data similar to those in the Control Panel in Windows Home directories of the common users. (on some distributions) Information for booting. Do not remove! Library files, includes files for all kinds of programs needed by the system and the users. Every partition has a lost+found in its upper directory. Files that were saved during failures are here. For miscellaneous purposes. Standard mount point for external file systems, e.g. a CD-ROM or a digital camera. Standard mount point for entire remote file systems Typically contains extra and third party software. A virtual file system containing information about system resources. More information about the meaning of the files in procis obtained by entering the command man procin a terminal window. The file proc.txtdiscusses the virtual file system in detail. The administrative user’s home directory. Mind the difference between /, the root directory and /root, the home directory of the root user. Programs for use by the system and the system administrator. Temporary space for use by the system, cleaned upon reboot, so don’t use this for saving any work! Programs, libraries, documentation etc. for all user-related programs. Storage for all variable files and temporary files created by users, such as log files, the mail queue, the print spooler area, space for temporary storage of files downloaded from the Internet, or to keep an image of a CD before burning it. /root /sbin /tmp /usr /var 你如何來發現一個目錄是位于哪個分區上的呢?使用 df 命令后接點(.)選項來顯示現在的 目錄所處的分區,并告知這個分區已經使用的空間數量: sandra:/lib> df -h . Filesystem Size Used Avail Use% Mounted on /dev/hda7 980M 163M 767M 18% / 一般來說,根目錄下的所有目錄都是在根分區上的,除非在 df 命令顯示的列表下該目錄有 一個單獨的入口。 更多信息請參考 man hier。 3.1.3.2. 實際的文件系統 對大部分的用戶和平常的系統管理任務來說,認為文件和目錄是按照樹形機構來組織的已 經足夠了。但是,計算機,并不能理解樹或樹形結構的含義。 每一個分區都有它自己的文件系統。設想所有的這些文件系統統一在一起,你可以把整個 系統想象成一個樹形結構,但是事實上它并非如此簡單。在文件系統里,一個文件表示成一個 inode,它是一種序列號包含了構成文件實際數據的信息:這個文件屬于誰,以及在磁盤上的存 儲位置等。 每一個分區都有其自己的一系列 inodes;在有多個分區的整個文件系統上,有相同 inode 號的文件也能并存。 每一個 inode 均描述了磁盤上的一個數據結構,該結構存儲文件的屬性,包括文件數據的 物理位置。當一個磁盤初始化以存儲數據時,通常在系統安裝過程中或是當添加額外磁盤到現 有系統上時,每個分區上一個確定數目的 inode 就會被創建。Inode 的數目將是磁盤可同時容 納文件(目錄文件,特殊文件,鏈接文件等)的最大數目。我們通常設計一個 inode 管理存儲上 的 2-8Kb 大小。 在文件剛創建的時候,它會得到一個空閑的 inode。其中包含了如下的相關信息: 文件所有者和組所有者 文件類型 文件的權限 創建,最后一次讀和更改的日期和時間 Inode 信息更改的日期和時間 文件的鏈接引用數目 文件大小 文件數據的實際存放地址 Inode 唯一不包含的信息是文件名和所在目錄。這些目錄存儲于特定的目錄文件中。比較 文件名和 inode 號后,系統就能構建一個用戶理解的樹形結構了。用戶可以使用 ls 加-i 選項 來顯示 inode 號。Inodes 在磁盤上有它們自己的存儲空間。 3.2. 文件系統的定位 3.2.1. 路徑 當你需要系統執行一條命令的時候,你不需要對這個命令指定完整的路徑名。例如,我們 知道 ls 命令在/bin 目錄下(用 which –a ls 查看),我們并不需要輸入/bin/ls 來顯示當前目 錄下的所有內容。 PATH 環境變量會關聯這些命令到具體目錄上。它能列舉出可執行文件所在的系統目錄,因 此節省了用戶大量的記住并輸入命令所在具體目錄的精力。所有 PATH 變量自然的包含了大量的 含有 bin 的目錄,就像如下用戶驗證的那樣。Echo 命令可以用來顯示 PATH 變量的內容: rogier:> echo $PATH /opt/local/bin:/usr/X11R6/bin:/usr/bin:/usr/sbin/:/bin 在這個例子中,當需要制定程序時就會在目錄/opt/local/bin, /usr/X11R6/bin, /usr/bin, /usr/sbinand /bin 中進行搜索。只要有合適的程序被找到,搜索就會停止,即使 沒有搜索全部的目錄。這可能導致奇怪的現象。在下面的第一個例子中,用戶知道有一個程序 sendsms 可以用于發送 SMS 信息,而且系統中的另一個用戶也可以使用它,但是他卻不能用這 個命令。區別就在于 PATH 變量的配置上: [[email protected] jenny]$ sendsms bash: sendsms: command not found [[email protected] jenny]$ echo $PATH /bin:/usr/bin:/usr/bin/X11:/usr/X11R6/bin:/home/jenny/bin [[email protected] jenny]$ su – tony Password: tony:~>which sendsms sendsms is /usr/local/bin/sendsms tony:~>echo $PATH /home/tony/bin.Linux:/home/tony/bin:/usr/local/bin:/usr/local/sbin:\ /usr/X11R6/bin:/usr/bin:/usr/sbin:/bin:/sbin 注意 su (變換用戶)工具的使用方法,它允許你使用另一個用戶的 shell 環境變量,只要 你知道該用戶的登錄密碼。 一個反斜線表示繼續到下一行的內容,而不需要 Enter 來分隔行。 在下面的這個例子中,一個用戶想要使用 wc(字數統計)命令來檢查文件的行數,但是沒有 任何反應,他必須使用 Ctrl+C 組合鍵來終止該程序: jumper:~> wc -l test (Ctrl-C) jumper:~> which wc wc is hashed (/home/jumper/bin/wc) jumper:~> echo $PATH /home/jumper/bin:/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\ /usr/bin:/usr/sbin:/bin:/sbin which 命令顯示在用戶的 home 目錄下有一個 bin 目錄,該目錄包含了 wc 程序。因為這個 wc 程序在該用戶的 home 目錄下首先被搜索到,因此這個”自身的”程序就被執行了,但由于 輸入參數它并不理解,導致我們必須停止它。要解決這個問題有幾種方法(通常在 UNIX/Linux 中要解決一個問題都有幾種方法):一種方案是重命名該用戶的 wc 程序,另一種方案是給出這 個命令的完整路徑名,該路徑名可以使用帶-a 選項的 which 命令得到。 如果用戶頻繁使用其他目錄的程序,他可以更改 path 變量將自己的目錄放在最后: jumper:~> export PATH=/usr/local/bin:/usr/local/sbin:/usr/X11R6/bin:\ /usr/bin:/usr/sbin:/bin:/sbin:/home/jumper/bin 變更沒有永久生效! 注意當在 shell 里使用 export 命令設置變量時,這個變更是臨時的并只對當前會話生效 (直到你退出會話)。新開一個會話,即使當前的會話依舊運行,在新會話的 path 變量也不會反 映已經做的更改。我們將在 Section 7.2 看到我們如何使這種類型的變更永久的保存,使用的 方法是在一個 shell 配置文件上添加這些參數。 3.2.2. 絕對路徑和相對路徑 路徑,就是你在文件系統的樹形結構里查到到一個給定文件的途徑,能從樹的主干(/或 root 目錄)起始。這種情況下,路徑起始于斜線/,被稱為絕對路徑,因為那不會產生錯誤:系 統上只有一個文件在那里。 在另一種情況,路徑不是以斜線/開始并且可能會產生沖突,比如前面的例子~/bin/wc(在 用戶的 home 目錄下)和 bin/wc 在/usr 目錄下就有可能沖突。不以斜線/開頭的路徑經常叫做相 對路徑。 在相對路徑下,我們也用. 和 來表示當前目錄和父目錄。幾個實際的例子: ? 當你在編譯源代碼的時候,安裝文檔經常指示你運行./configure 命令,表示在當前目錄運 行 configure 程序(新代碼產生的地方),而不是系統其他目錄的 configure 程序。 ? 在 HTML 文件上,經常使用相對路徑來使得頁面移動到別的地方更容易: 再一次注意兩者的區別: theo:~> ls /mp3 ls: /mp3: No such file or directory theo:~>ls mp3/ oriental/ pop/ sixties/ 3.2.3. 至關重要的文件和目錄 3.2.3.1. 內核 內核是系統的核心。它與底層的硬件和外圍設備通信。內核還保證進程和后臺進程(系統進 程)在正確的時間啟動和停止。內核還有很多其他重要的任務,因為眾多以致在這一領域有一個 特殊的內核開發郵件列表,在這個郵件列表里會共享大量的信息。詳細討論內核可能會使我們 偏離主題。從現在開始,我們應該知道內核文件是 Linux 系統最重要的文件。 3.2.3.2. The shell 3.2.3.2.1. 什么是 shell? 當我在尋找一種恰當的方式來解釋 shell 概念的時候,我發現這比我預期的難。有各種各 樣的定義,從簡單的比對”shell 猶如車的方向盤”,到 Bash 手冊里面對 shell 的模糊定 義”bash 是兼容 sh 的命令解釋器”,后者更模糊的解釋”shell 管理系統與用戶的交換”。 Shell 更比這些描述的做得更多。 Shell 能比做與計算機通信的一種方式,一種語言。很多用戶知道其他語言,如桌面系統 的點擊類型的語言。但是這種語言計算機主導著會話,而用戶被動的接受任務。讓編程者在 GUI 格式下包含命令的所有選項和可能的使用方式很困難。因此,GUIs 比命令或后端指令的功 能來的弱。 另一方面,shell 是與計算機交流的一種高級方式,因為它允許雙向通信并啟動發起會 話。會話雙方的地位是平等的,因此新想法可以被方便的測試。Shell 允許用戶以一種靈活的 方式管理系統。一個額外有用的性質是 shell 允許任務自動運行。 3.2.3.2.2. Shell 類型 就像人們懂得不同的語言和方言,計算機也懂得不同的 shell 類型: sh or Bourne Shell: 是一種最初的 shell,現在仍然用在 UNIX 系統和 UNIX 相關的環境 上。這是最基本的 shell,特性比較小的一種小程序。在 POSIX 兼容的模式下,bash 將仿效這 種 shell。 bash or Bourne Again SHell: 這是標準的 GNUshell 類型,直觀并且靈活。可能是新手最 有用的,同時也是高級用戶的一種強大的工具。在 Linux 上,bash 是普通用戶標準的 shell 類 型。它是 Bourne shell 所謂的超集,有一系列的附件和插件。這說明 Bourne Again SHell 與 Bourne shell 是兼容的:能在 sh 使用的命令,也能在 bash 中運用。然后,反過來就不一定成 立了。本書的所有例子和練習都是使用 bash。 csh or C Shell: 這種 shell 的語義類似于 C 編程語言。有時程序員會使用這種 shell。 tcsh or Turbo C Shell: C shell 的一個超集,增強了用戶的友好型和速度。 ksh or the Korn shell: 有時被具有 UNIX 使用背景的用戶所贊賞。它是 Bourne shell 的超集,對初學者其配置可能是一個夢魘。 文件/etc/shells 給出了 Linux 已知的 shell 類型: mia:~> cat /etc/shells /bin/bash /bin/sh /bin/tcsh /bin/csh 假的 Bourne shell 注意/bin/sh 經常鏈接到 Bash,當這個調用的話可以使用 Bourne shell 兼容的方式運行。 你的默認 shell 在文件/etc/passwd 里面設置,就像用戶 mia 這樣: mia:L2NofqdlPrHwE:504:504:Mia Maya:/home/mia:/bin/bash 為了從一種 shell 類型切換到另一個類型,只需要在終端窗口鍵入該 shell 的名稱。系統 就會自動查找 PATH 變量設置目錄名稱,由于 shell 是一個可執行文件(程序),當前 shell 啟動 并執行它。由于每種 shell 都有它特定的外觀,所以將會呈現一個新的提示: mia:~> tcsh

[[email protected] ~]

$ 3.2.3.2.3. 我使用的是哪一種 shell? 如果你不知道你使用的是哪種 shell,可以檢查/etc/passwd 文件下你對應用戶名的那一 行,或者輸入如下命令: echo $SHELL 3.2.3.3. 你的 home 目錄 你的 home 目錄是你登錄系統后默認到達的目錄。很多情況下它是/home 的子目錄,盡管這 可能會不同。你的 home 目錄有可能位于遠程文件服務器的磁盤上;這種情況下你的 home 目錄 可能表示為 /nethome/your_user_name。另外某些情況,系統管理員可能采用比較難懂的設 置,你的 home 目錄可能位于/disk6/HU/07/jgillard。 不管你的 home 目錄的路徑如何,你并不需要過份在意它。正確的 home 目錄路徑存儲在 HOME 環境變量上,以防止某些程序需要它。使用 echo 命令你就能正確的獲得這個變量的值: orlando:~> echo $HOME /nethome/orlando 你能在你的 home 目錄下做任何事情。你能在你想要的盡可能多的文件在里面,盡管數據和 文件的總量受到限制,這些限制來自硬件和分區的大小,有時候還可能是系統管理員應用了空 間額度限制。當磁盤空間很昂貴的時候設置磁盤空間使用是一種通用的方式。現在,空間限制 在大型環境下是不推薦使用的。使用 quota 命令你能自己查看如果你被限制了磁盤使用空間: [email protected]:/> quota -v Diskquotas for user pierre (uid 501): none 萬一額度被設置了,你可以查看被限制的分區和它們的特定限制參數列表。在寬限期內超 額使用空間可能會被接受,該期限只有很少或根本沒有限制條件。使用 info quota 或 man quota 命令可以獲得詳細的信息。 配額不夠? 如果你的系統找不到 quota,那么文件系統就沒有被應用了限制。 你的 home 目錄由波浪 線 (~)表示,它是對/path_to_home/user_name 的簡寫。在 HOME 變量里也存儲了相同的路徑, 因此你不需要進行其他任何操作就能啟用它。一個簡單的例子: 從/var/music/albums/arno/2001 目錄 切換到你的 home 目錄下的 images 目錄使用如下命令: rom:/var/music/albums/arno/2001> cd ~/images rom:~/images> pwd /home/rom/images 在這章后面我們將討論管理文件和目錄的命令,以保持你的 home 目錄規整。 3.2.4. 最重要的配置文件 我們在前面提到了,大部分的配置文件存儲在/etc 目錄下。 這些文件的內容可以使用 cat 命令查看,它將把文本文件的內容發送到你的標準輸出(通常是你的終端)。具體語法如下: cat file1file2…… fileN 在這一部分我們將給出最常用配置文件的概覽。這當然不是一個完整的列表了。增加額外 的包將會在/etc 目錄下相應的增加額外的配置文件。當閱讀配置文件的時候,你會發現這些文 件注釋良好并不需加以額外的說明。一些文件也有包含額外文檔的 man 手冊,比如 man group Table 3-3. 最常用的配置文件 File Information/service Mail aliases file for use with the Sendmail and Postfix mail server. Running a mail server on each and every system has long been common use in the UNIX world, and almost every Linux distribution still comes with a Sendmail package. In this file local user names are matched with real names as they occur in E-mail addresses, or with other local addresses. Config files for the Apache web server. The system-wide configuration file for the Bourne Again SHell. Defines functions and aliases for all users. Other shells may have their own system-wide config files, like cshrc. Configuration of tasks that need to be executed periodically – backups, updates of the system databases, cleaning of the system, rotating logs etc. Default options for certain commands, such as useradd. Known file systems: ext3, vfat, iso9660 etc. Lists partitions and their mount points. Configuration of the ftp-server: who can connect, what parts of the system are accessible etc. Configuration file for user groups. Use the shadow utilities groupadd, groupmod and groupdel to edit this file. Edit manually only if you really know what you are doing. aliases apache bashrc crontaband the cron. directories
default filesystems fstab ftp*
group
hosts
A list of machines that can be contacted using the network, but without the need for a domain name service. This has nothing to do with the system’s network configuration, which is done in /etc/sysconfig. Information for booting: mode, number of text consoles etc. Information about the distribution (release version and/or kernel info). Locations of library files. Boot information for the LInux LOader, the system for booting that is now gradually being replaced with GRUB. Rotation of the logs, a system preventing the collection of huge amounts of log files. Directory containing instructions for the behavior of the mail server. Configuration of modules that enable special features (drivers). Message Of The Day: Shown to everyone who connects to the system (in text mode), may be used by the system admin to announce system services/maintenance etc. Currently mounted file systems. It is advised to never edit this file. Order in which to contact the name resolvers when a process demands resolving of a host name. Configuration of authentication modules. Lists local users. Use the shadow utilities useradd, usermod and userdel to edit this file. Edit manually only when you really know what you are doing. Outdated but still frequently used printer configuration file. Don’t edit this manually unless you really know what you are doing. System wide configuration of the shell environment: variables, default properties of new files, limitation of resources etc.
inittab issue ld.so.conf lilo.conf, silo.conf, aboot.confetc. logrotate.* mail modules.conf
motd
mtab nsswitch.conf pam.d
passwd
printcap
profile
rc* resolv.conf sendmail.cf services sndconfigor sound ssh
Directories defining active services for each run level. Order in which to contact DNS servers (Domain Name Servers only). Main config file for the Sendmail server. Connections accepted by this machine (open ports). Configuration of the sound card and sound events. Directory containing the config files for secure shell client and server. Directory containing the system configuration files: mouse, keyboard, network, desktop, system clock, power management etc. (specific to RedHat) Settings for the graphical server, X. RedHat uses XFree, which is reflected in the name of the main configuration file, XFree86Config. Also contains the general directions for the window managers available on the system, for example gdm, fvwm, twm, etc. Configuration files for Internet services that are run from the system’s (extended) Internet services daemon (servers that don’t run an independent daemon).
sysconfig
X11
xinetd.or inetd.conf 通過這個指南后面我們將會更多的了解這些文件并對其中的一部分進行詳細的學習。 3.2.5. 最常用的設備 設備,即 PC 機中除了 CPU 之外其他幾乎所有的外圍設備,都會作為/dev 目錄下的一個入 口顯示在系統上。這種 UNIX 方式的設備處理方法,其中一個優點就是不管是用戶還是系統都不 需要擔心設備的規格問題。 Linux 或 UNIX 的新手一般承受不起他們需要學習的大量的新名字和新概念。這也是在這 部分的介紹包含一系列常用設備的原因。 Table 3-4. 常用設備 Name cdrom console cua dsp* Device CD drive Special entry for the currently used console. Serial ports Devices for sampling and recording
fd* hd[a-t][1-16] ir* isdn* js* lp* mem midi* mixerand music modem mouse(also msmouse, logimouse, psmouse, input/mice, psaux) null par pty* radio* ram* sd* sequencer tty* usb* video*
Entries for most kinds of floppy drives, the default is /dev/fd0, a floppy drive for 1.44 MB floppies. Standard support for IDE drives with maximum amount of partitions each. Infrared devices Management of ISDN connections Joystick(s) Printers Memory midi player Idealized model of a mixer (combines or adds signals) Modem All kinds of mouses Bottomless garbage can Entries for parallel port support Pseudo terminals For Radio Amateurs (HAMs). boot device SCSI disks with their partitions For audio applications using the synthesizer features of the sound card (MIDI-device controller) Virtual consoles simulating vt100 terminals. USB card and scanner For use with a graphics card supporting video.
3.2.6. 最常用的變量文件
在/var 目錄下你將發現一系列存儲可變數據的目錄(與不經常改變甚至從不變更的 ls 程序 或系統配置文件不同形成對比)。所有更改頻繁的文件,比如日志文件,郵件,鎖文件,打印文 件等都保存在/var 的子目錄下。 出于安全考慮,這些文件與主要的系統文件是區分開存儲的,因此我們可以持續的監視并 根據需要設置嚴格的權限。很多這種類型的文件也比平常需要更多的權限,比如/var/tmp 就要 求任何用戶都能寫入。很多用戶活動將在這邊進行,可能還有連接到你的系統的網絡上匿名的 用戶。這也是/var 目錄及其所有子目錄通常位于一個單獨分區的原因。采用這種方法,比如受 到郵件攻擊才不至于文件系統的其他分區,這些分區包含了很多更重要的數據,比如你的程序
和配置文件。 /var/tmp 和 /tmp 目錄/tmp 下的文件在正常的系統活動或系統重啟時可以被不經意的刪除。在一些系統(客 戶化的)目錄/var/tmp 的行為也是不可預知的。然而,這種情況并不是默認的行為,我們還是 建議使用 /var/tmp 目錄來保持臨時文件。當不確定的時候,跟你的系統管理員進行確認一 下。如果你管理你自己的系統,你就可以肯定的保證這個地方是安全的,只要你沒有故意的修 改目錄/var/tmp 的設置(修改通常需要 root 用戶,普通用戶無法操作). UNIX 系統上的其中一個安全系統,通常在 Linux 系統上也得到實現,就是日志保持功能, 該功能記錄了用戶的動作,進程,系統事件等。叫做 syslogdaemon 的后臺進程的配置文件決 定了哪些以及多久這些日志信息將被保存。默認的日志保存地方是/var/log 目錄,包含了訪問 日志,服務器日志,系統消息等不同的日志文件。 在/var 目錄下,我們可以找到服務器數據,這些數據與關鍵數據比如服務器程序和它的配 置文件等區別開。 一個典型的 Linux 系統例子是/var/www,它包含了包含了 web 服務器提供實 際的 HTML 頁面,腳本和圖像。FTP 服務器的 FTP 結構(通過遠程客戶端能下載數據)也是被存放 在/var 的其中一個子目錄里的。 由于這些數據可以公開訪問并經常被匿名用戶更改,所有跟 保存敏感數據的分區或目錄分開,單獨保存在這邊才是安全。 在大多數的工作站安裝中,/var/spool 至少包含 at 和 cron 目錄,其中包含了預定的任 務。在正式的環境中,該目錄通常還包括 lpd 目錄,該目錄包含了打印隊列和打印機的配置文 件,以及打印機的日志文件。 在服務器系統我們通常設有目錄/var/spool/mail,包含本來用戶接收到的郵件,分類為一 個用戶一個相應的文件,即用戶的”收件箱”。 一個相關的目錄是 mqueue,是未送出郵件信 息的打印區域。這些部分在處理大量用戶的郵件系統可能會非常繁忙。新聞服務器也會使用 /var/spool 目錄區域,因為它要處理巨大的信息量。 目錄/var/lib/rpmd 特定于基于 RPM (RedHat 包管理器) 的發行版本;這個地方是 RPM 包 存放信息的地方。其他的包管理器一般將數據存儲與/var 的某個地方。
3.3. 操作文件
3.3.1. 查看文件屬性
3.3.1.1. ls 的更多信息
除了文件名,ls 命令還給出了很多其他的信息,比如我們已經討論過的文件類型。它也能 顯示文件的權限,文件大小,inode 號,創建的日期和時間,所有者和文件的鏈接數。在 ls 命 令上加上-a 選項,隱藏文件也能被顯示出來。有許多文件以點作為文件名的開始字符。一個典 型的例子是你的 home 目錄下的配置文件。當你使用一種系統達到一定的時間,你將會注意到有 幾十種文件和目錄被創建但卻沒有自動顯示在目錄索引上。幾乎每個目錄都包含一個名字叫點 (.)的文件和兩個點(
)的文件,這兩個文件結合它們的 inode 號可以覺得目錄在文件系統樹形 機構中的位置。 你應該認真的去閱讀下 ls 的 info 手冊,因為它是附帶有很多選項的常用命令。選擇可以 組合使用,就像大部分 UNIX 命令和它們的選項。一個常用的組合是 ls –al;它顯示了一系列
文件以及它們的屬性,以及鏈接指向的地址。 ls –latr 顯示了相同的文件名,但是這次這些 文件名是根據更改時間反向排序的,因此最近更改的文件位于列表的底端。這里有幾個例子: krissie:~/mp3> ls Albums/ Radio/ Singles/ gene/ index.html krissie:~/mp3> ls -a ./ .thumbs Radio gene/
/ Albums/ Singles/ index.html krissie:~/mp3> ls -l Radio/ total 8 drwxr-xr-x 2 krissie krissie 4096 Oct 30 1999 Carolina/ drwxr-xr-x 2 krissie krissie 4096 Sep 24 1999 Slashdot/ krissie:~/mp3> ls -ld Radio/ drwxr-xr-x 4 krissie krissie 4096 Oct 30 1999 Radio/ krissie:~/mp3> ls -ltr total 20 drwxr-xr-x 4 krissie krissie 4096 Oct 30 1999 Radio/ -rw-r–r–1 krissie krissie 453 Jan 7 2001 index.html drwxrwxr-x 30 krissie krissie 4096 Oct 20 17:32 Singles/ drwxr-xr-x 2 krissie krissie 4096 Dec 4 23:22 gene/ drwxrwxr-x 13 krissie krissie 4096 Dec 21 11:40 Albums/ 在大部分 Linux 版本中 ls 命令默認是 color-ls 的別名。這個特性允許你只適用 ls 而不附 帶其他選項就能查看文件類型。為了達到這樣的目的,每個文件類型都有屬于它們自己的顏 色。標準的顏色方案位于目錄/etc/DIR_COLORS 下: Table 3-5. Color-ls default color scheme
red white pink cyan yellow green
compressed archives text files images links devices executables
flashing red
broken links
更多的信息查看 man 手冊。在早期相同的信息是以在每個非標準文件名前加個前綴實現 的。不需要顏色標示的使用形式(像打印一個目錄列表)和一般的易讀性,這些方案至今仍然可 以使用: Table 3-6. Default suffix scheme for ls
Character nothing / * @ = | File type regular file directory executable file link socket named pipe
命令 ls 的完整功能和特性可以參考 info coreutils ls.
3.3.1.2. 更多工具
為了我們正在處理的數據類型,我們可以使用 file 命令。應用某些測試來確認文件系統下 的文件屬性,數字和語言測試,file 命令可以有根據的推測出文件的格式類型。一些例子如 下: mike:~> file me+tux.jpg me+tux.jpg: JPEG image data, JFIF standard 1.01, resolution (DPI), “28 Jun 1999”, 144 x 144 mike:~> file 42.zip.gz 42.zip.gz: gzip compressed data, deflated, original filename, 42.zip', last modified: Thu Nov 1 23:45:39 2001, os: Unix mike:~> file vi.gif vi.gif: GIF image data, version 89a, 88 x 31 mike:~> file slide1 slide1: HTML document text mike:~> file template.xls template.xls: Microsoft Office Document mike:~> file abook.ps abook.ps: PostScript document text conforming at level 2.0 mike:~> file /dev/log /dev/log: socket mike:~> file /dev/hda /dev/hda: block special (3/0) 命令 file 有一系列的選項,其中-z 選項可以查看壓縮文件。查看 info file 以獲得更詳 細的描述。謹記 file 命令產生的結果不是絕對的,它只是一種猜測。換句話說,file 命令有 可能會被欺騙了。 為什么對文件類型和文件格式這么大驚小怪? 簡單的說,我們將討論幾個命令行工具用于查看平面文本文件。這些工具當作用于錯誤類 型的文件時會出錯。最壞的情況,它們將摧毀你的終端窗口并且/或者發出大量的雜音。如果你 遇到這種情況,只需關閉這個終端會話并開始一個新的會話。但是應盡量避免這種情況,因為 這樣經常會吵到其他人。 3.3.2. 創建和刪除文件和目錄 3.3.2.1 制造垃圾…… …… 這并不難做到。現在很多服務器是連接到網絡的,因此自然的文件就從這臺機器拷貝 到另一臺機器了。特別是在圖形環境下使用,創建文件極其容易而且經常不需要用戶的許可。 為了證明這個問題,以下是一個新用戶目錄的完整內容,在標準的 RedHat 系統上創建的: [[email protected] user]$ ls -al total 32 drwx3 user user 4096 Jan 16 13:32 . drwxr-xr-x 6 root root 4096 Jan 16 13:32 -rw-r--r--1 user user 24 Jan 16 13:32 .bash_logout -rw-r--r--1 user user 191 Jan 16 13:32 .bash_profile -rw-r--r--1 user user 124 Jan 16 13:32 .bashrc drwxr-xr-x 3 user user 4096 Jan 16 13:32 .kde -rw-r--r--1 user user 3511 Jan 16 13:32 .screenrc -rw1 user user 61 Jan 16 13:32 .xauthDqztLr 第一眼看上去,”使用的”home 目錄內容看起來并不是很糟糕: olduser:~> ls app-defaults/ crossover/ [email protected] mp3/ OpenOffice.org638/ articles/ Desktop/ GNUstep/ Nautilus/ staroffice6.0/ bin/ Desktop1/ images/ nqc/ training/ brol/ desktoptest/ [email protected] ns_imap/ webstart/ C/ Documents/ mail/ nsmail/ xml/ closed/ [email protected] Mail/ office52/ Xrootenv.0 但是當所有的以點開始命名的文件和目錄也包含進來,在這個目錄下就會有 185 個條目 了。這是由于在用戶的 home 目錄下,大部分的應用程序有它們自己的目錄和/或文件,這些文 件包含了用戶特定的設置。通常的這些文件在你第一次啟動應用程序的時候被創建。在某些情 況下,要創建一個不存在的目錄可能會通知你,但是大部分情況下這些都是自動完成的。 而且,新文件可以被連續的創建,因為用戶想要保持文件,保存文件的不同版本,使用網絡應 用,以及下載文件并保存到它們本地的機器上。這個過程不會停止。因此每個人都需要一個方 案以明確地保持對事態的概覽。 在下一節,我們將討論我們保持有序性的方法。我們只討論可用于 shell 的文本工具,因 為圖形工具很直觀而且跟著名的點擊類型的 MS Windows 文件管理器看起來一樣,包括圖形幫助 功能和你期望從這類應用中獲得的功能。下表就是最流行的 GNU/Linux 文件管理器的概述。大 部分文件管理器可以從你的桌面菜單中啟動,或者點擊你的 home 目錄圖標,或者從命令行,發 出這些命令: nautilus: Gnome 中默認的文件管理器,GNU 桌面。使用這個工具的優秀的文檔可以從 http://www.gnome.org 獲得。 konqueror: 經常用于 KDE 桌面的文件管理器。其操作手冊位于 http://docs.kde.org. mc: Midnight Commander, Norton Commander 之后的 UNIX 文件管理器。 所有的文檔可以從 http://gnu.org/directory/ 或其鏡像網站 http://www.ibiblio.org 找到。 這些應用程序通常非常值得去試試而且會給 Linux 的初學者留下很深的印象,因為這里有 多種多樣的方式:這些知識最流行的目錄和文件管理工具,還有很多其他的類似項目已經在發 展中了。現在讓我們找出內在因素并看看這些圖形工具是如何使用普通的 UNIX 命令的。 3.3.2.2. 工具聚 3.3.2.2.1. 創建目錄 保存事務在同一個地方的一種方法是通過創建目錄和子目錄(或者文件夾和子文件夾)保存 這些文件在一個默認的位置。這個可以通過 mkdir 命令實現: richard:~> mkdir archive richard:~> ls -ld archive drwxrwxrwx 2 richard richard 4096 Jan 13 14:09 archive/ 一步同時創建目錄和子目錄可以使用-P 選項來實現: richard:~> cd archive richard:~/archive> mkdir 1999 2000 2001 richard:~/archive> ls 1999/ 2000/ 2001/ richard:~/archive> mkdir 2001/reports/Restaurants-Michelin/ mkdir: cannot create directory2001/reports/Restaurants-Michelin/’: No such file or directory richard:~/archive> mkdir -p 2001/reports/Restaurants-Michelin/ richard:~/archive> ls 2001/reports/ Restaurants-Michelin/
當這個新文件需要創建文件默認的權限之外的其他權限時,新的訪問權限可以再次被設 置,還是使用命令 mkdir,更多請參考 Info 手冊。我們將在學習下一部分文件安全時討論文件 的訪問方式。 目錄的名字需要遵循規則文件名稱命名的規則。一個最重要的限制是你在同一個目錄下不 同有兩個相同名稱的文件(但是謹記 Linux,類似于 UNIX,是一種大小寫敏感的操作系統)。事 實上文件名的長度沒有限制,但是一般保持小于 80 個字符,這樣它才適合終端窗口的一行。你 可以在文件名上使用任何字符,盡管實際使用上應排除對 shell 有特殊含義的字符。當你對此 迷惑時,請查看 Appendix C。 3.3.2.2.2. 文件移動 現在我們已經合理的構建了我們的 home 目錄,因此是時候使用 mv 命令清理無類別的文件 了: richard:~/archive> mv
/report[1-4].doc reports/Restaurants-Michelin/ 當重命名文件的時候也可以使用這個命令: richard:~> ls To_Do -rw-rw-r–1 richard richard 2534 Jan 15 12:39 To_Do richard:~> mv To_Do done richard:~> ls -l done -rw-rw-r–1 richard richard 2534 Jan 15 12:39 done 必須清楚這樣只是更改了文件名。所有的其他屬性都是保持不變的。 關于 mv 命令的詳細的語法和特性可以在 man 或 info 手冊上查到。當你面臨一個問題的時 候使用這個文檔應該是你的第一反應。涉及問題的答案很可能就在系統文檔里面。每一個有經 驗的用戶都似乎每天閱讀 man 手冊的,因此初學者更應該一直閱讀它。一段時間以后,你將知
道那些最常用命令的最常用的選項,但是你還是應該以這些文檔作為注意的信息來源。注意到 HOWTOs,FAQs,man 手冊和其他來源的信息正被慢慢的合并到 info 手冊中,它也是現在最新的 在線文檔了。 3.3.2.2.3. 文件拷貝 使用 cp 命令拷貝文件和目錄。一個有用的用于遞歸拷貝的選項(拷貝目錄下所有的文件和 目錄),使用 cp 附加-R 選項。一般的語法如下: cp [-R] fromfiletofile 作為一個例子,用戶 newguy,想要用戶 oldguy 相同的 Gnome 桌面設置。解決這個問題的 一種方法是拷貝用戶 oldguy 的設置到用戶 newguy 的 home 目錄下。 victor:~> cp -R
/oldguy/.gnome/ . 在涉及文件權限上這種方法會產生一些錯誤,但是所有的這些錯誤與用戶 newguy 不需要 的私人文件有關。我們將在下一節討論如何來更改這些權限,如果確實需要的話。 3.3.2.2.4. 刪除文件 使用 rm 命令來刪除單一的文件,用 rmdir 命令移除整個空目錄(使用 ls –a 來確認目錄 是否為空)。 rm 命令也有選項來刪除一個非空目錄以及該目錄下的所有子目錄,參考 info 手 冊以了解這些危險的選項。 How empty can a directory be? 通常情況下目錄 . (點)和
(雙點)不可以刪除,因為空目錄也需要它們來判斷目錄在文 件系統等級中的級別。在 Linux 系統,就像 UNIX 系統一樣,沒有垃圾回收站 – 至少 shell 沒 有,盡管可以有很多其他方案可作為垃圾回收站。因此一旦被刪除,文件就永遠移除了,沒有 辦法重新找回來除非你有系統備份,或者你足夠快且具備非常好的系統管理能力。為了防止初 學者失誤,可以使用-i 選項來啟動 rm, cp 和 mv 命令的交換模式。這樣系統就不會在請求后 立即操作。相反的它需要額外的鍵入 Enter 來形成這種操作: mary:~> rm -ri archive/ rm: descend into directory archive'? y rm: descend into directoryarchive/reports’? y rm: remove directory archive/reports'? y rm: descend into directoryarchive/backup’? y rm: remove archive/backup/sysbup200112.tar'? y rm: remove directoryarchive/backup’? y rm: remove directory archive'? y 我們將在 Chapter 7 討論如何把這個選項設置為默認的,這將討論客戶化你的 shell 環 境。 3.3.3. 文件查找 3.3.3.1. 使用 shell 特性 在移動文件的例子中你就看到了 shell 如何一次性操作多個文件。在那個例子中,shell 通過在放括號"[" 和 "]"之中設置必要條件自動找出用戶想要的。Shell 能夠數字范圍并大寫 或小寫類似的字符。它還能使用星號替代你所想要的大量的字符,以及用問號替代一個字符。 所有類型的替代可以同時使用;shell 能合理的處理它們。比如 Bash shell 可以方便的處理類 似于這樣的表達式 ls dirname/*/*/*[2-3]。 在其他類型的 shell,星號通常用于減少用戶輸入的字符數:用戶可以用 cd dir*來替代 輸入 cd directory。然而使用 Bash,這個就沒必要了,英文 GNU shell 有一個特性就文件名 自動完全匹配。就是說你可以輸入命令(所有的)或文件(當前目錄下的)的最開始的幾個字符并 且如果沒有沖突,shell 將找出你所需要的。比如在一個包含很多文件的目錄下,你能只需要 輸入 ls A 并按兩次 Tab 鍵就能查看是否有文件以 A 字母開頭,而不用按 Enter。如果只有一 個文件以"A"開頭,這個文件就會馬上作為 ls 參數的命令(或者其他任何 shell 命令)。 3.3.3.2. Which 一個很簡單的查找文件的方法是使用 which 命令,它在用戶路徑的目錄下查找要求的文 件。當然,由于查找路徑只包含有可執行文件的目錄,因此 which 不支持二進制文件。Which 命令在解決”命令找不到”的問題時很有用。在下面的例子中,用戶 tina 無法使用 acroread 程序,但是他的同事在同一個系統里卻沒有問題。這個問題類似于前面的 PATH 問題:tina 的 同事告訴他能夠看見所需程序位于/opt/acroread/bin 目錄下,但是這個目錄卻不在他的當前 路徑下: tina:~> which acroread /usr/bin/which: no acroread in (/bin:/usr/bin:/usr/bin/X11) 如果提供這個命令的完整路徑就可以解決這個問題,或者重新設置 PATH 變量的以引入該路徑: tina:~> export PATH=$PATH:/opt/acroread/bin tina:~> echo $PATH /bin:/usr/bin:/usr/bin/X11:/opt/acroread/bin 使用 which 命令也可以檢查一個命令是否是另一個命令的別名: gerrit:~> which -a ls ls is aliased tols -F –color=auto’ ls is /bin/ls 如果你的系統不能這么用,也可以使用 alias 命令獲得別名信息: [email protected]:~/mail$ alias ls alias ls=’ls –color’
3.3.3.3. 查找并定位
當查找不是位于默認路徑下的其他路徑時,這就是真實有用的工具了。這個 find 工具,
繼承自 UNIX,功能非常的強大,因此也導致了語法有點復雜。然后,GNU find 解決了語法的 問題。這個命令不僅允許你查找文件名,它也能把文件大小,最后更改的日期和其他文件屬性 作為查找參數。最常使用的是查找文件名: find
-name 它的含義是:”查找給定路徑下的所有文件和子目錄,打印出文件名包含了搜索字符串的文 件名” (不包含內容中匹配的)。 find 的另一個應用是查找某種大小的文件,就像下面的例子,用戶 peter 想要找出當前 目錄或其子目錄下的所有大小超過 5M 的文件: peter:~> find . -size +5000k psychotic_chaos.mp3 如果你仔細查看 man 手冊,你還能發現 find 在查找到的文件上進行其他操作。常用的例 子是刪除該文件。最好最初不用使用–exec 選項以查找到正確的文件,之后使用該選項重新運 行一遍以刪除找到的文件。如下,我們查找以.tmp 結尾的文件: peter:~> find . -name “.tmp” -exec rm {} \; peter:~> 最優化! 這個命令將會多次調用 rm 只要查找到到符合條件的文件。在最壞的情況下,這可能有幾千 上萬次。它將是系統的極大負擔。一個更好的方法是使用管道(|)并且使用帶有 rm 參數的 xargs 工具。這種方式下,rm 僅在命令完成后才被調用,而不是每次找到文件。參考 Chapter 5 以了解更多關于 I/O 重定向消除每天工作量的情況。 再后來(根據 man 手冊是在 1999 年,在 find 出現 20 年后),locate 被發展出來。這個程 序更容易使用,但是比 find 有更多的限制。因為它的輸出是基于文件索引數據庫,而且每天只 更新一次。另一方面,在 locate 數據庫里的搜索比 find 使用更少的資源,因此能立刻的顯示 結果。 現在大部分的 Linux 版本使用 slocate,安全的 locate,現代的 locate 以防止用戶訪問到 他們沒有權限訪問的目錄。Roots 的 home 目錄就是這方面的一個例子,這些目錄不能被公開訪 問。一個用戶想查找某個懂得 C shell 人只需發出 locate .cshrc 命令,就能顯示所有擁有 C shell 的客戶化配置文件的用戶。假設用戶 root 和 jenny 都運行 C shell,那么只有 /home/jenny/.cshrc 文件將會被顯示,而不會顯示 root’s 的 home 目錄下的那個 C shell 配置 文件。在大部分系統上,locate 引用了 slocate 程序: billy:~> ls -l /usr/bin/locate lrwxrwxrwx 1 root slocate 7 Oct 28 14:18 /usr/bin/locate -> slocate 用戶 tina 能使用 locate 來查找他想要的應用: tina:~> locate acroread
/usr/share/icons/hicolor/16×16/apps/acroread.png /usr/share/icons/hicolor/32×32/apps/acroread.png /usr/share/icons/locolor/16×16/apps/acroread.png /usr/share/icons/locolor/32×32/apps/acroread.png /usr/local/bin/acroread /usr/local/Acrobat4/Reader/intellinux/bin/acroread /usr/local/Acrobat4/bin/acroread 沒有包含 bin 子目錄的目錄不能含有該程序-它們不含有可執行文件。因此只剩下三種可能 的路徑了。在目錄/usr/local/bin 里面的文件正是 tina 想要的:它是啟動該程序的實際 shell 腳本的鏈接: tina:~> file /usr/local/bin/acroread /usr/local/bin/acroread: symbolic link to
/Acrobat4/bin/acroread tina:~> file /usr/local/Acrobat4/bin/acroread /usr/local/Acrobat4/bin/acroread: Bourne shell script text executable tina:~> file /usr/local/Acrobat4/Reader/intellinux/bin/acroread /usr/local/Acrobat4/Reader/intellinux/bin/acroread: ELF 32-bit LSB executable, Intel 80386, version 1, dynamically linked (uses shared libs), not stripped 為了保持路徑盡可能的短,這樣可以使系統在用戶需要執行一條命令時不需要搜索太長時 間,我們添加目錄/usr/local/bin 到路徑中,而不是其他只包含特定程序二進制文件的目錄, /usr/local/bin 目錄還包含了其他有用的程序。 同樣的,find 和 locate 的完整描述可以在 info 手冊查到。
3.3.3.4. grep 命令
3.3.3.4.1. 一般的行過濾 一個簡單但很強大的程序,grep 可以用于過濾輸入行并返回某種模式給輸出。Grep 在字 面上有幾千種應該程序。在下面的例子中,用戶 jerry 使用 grep 來查看它使用 find 做了什 么: jerry:~> grep -a find .bash_history find . -name userinfo man find find
/ -name common.cfg
查找歷史 bash 的搜索功能有很有用,該功能使用 Ctrl+R 啟動,比如我們想要再次檢查 find 到底做 什么: thomas ~> ^R
(reverse-i-search)find': find/home/thomas` -name *.xml 在你的搜索提示下輸入你的搜索字符串。你輸入的字符越多搜索的限制就越多。它讀取 shell 會話的命令歷史記錄(當你退出會話后它被寫入你的 home 目錄的.bash_history 文件 中)。當最近發生的并含有你的搜索字符將會被顯示。如果你想要查看包含相同字符串的以前的 命令,需要再次鍵入 Ctrl+R。 更多關于 bash 請查看 info 手冊。 所有的 UNIX 使用者有一個在線目錄。Linux 同樣也有。該目錄包含一系列位于 words 文件 中的知名的單詞,位于目錄/usr/share/dict。為了快速的確認一個單詞是否正確,并不需要圖 形化的應用程序: william:~> grep pinguin /usr/share/dict/words william:~> grep penguin /usr/share/dict/words penguin penguins 字典 vs. 文字列表 一些版本提供 dict 命令,該命令比簡單的在文字列表中查找文字提供了更多的功能。 在我下面的那個 home 目錄的所有者是誰,請看,這是他的電話號碼! lisa:~> grep gdbruyne /etc/passwd gdbruyne:x:981:981:Guy Debruyne, tel 203234:/home/gdbruyne:/bin/bash Arno 的郵件地址是什么? serge:~/mail> grep -i arno * sent-mail: To: sent-mail: On Mon, 24 Dec 2001, [email protected] wrote: find 和 locate 經常和 grep 一起組合使用來定義一些復雜的查詢。想獲得更多的信息, 請查看關于 I/O 重定向的 Chapter 5 3.3.3.4.2. 特殊字符 對 shell 有特殊含義的字符必須被轉換。在 Bash 里轉換字符使用反斜線,其他 shell 也類 似;這樣就能把字符的特殊含義去除了。Shell 里有很多特殊字符,其中最常見的是/, ., ? 和 。在 info 手冊和 shell 文檔里面可以查找到這些特殊字符的完整列表。 例如,如果你要顯示文件”” 而不是目錄下的所有文件,你必須這樣來使用: less * 當文件名包含空格時也可這么處理: cat This\ File
3.3.4. 查看文件內容的更多方式
3.3.4.1. 常用方式
除了直接將文件輸出到標準輸出的 cat 命令之外,還有其他的工具可以查看文件內容。 最簡單的方式是使用圖形界面來查看文件而不是使用命令行工具。在簡介部分我們已經看 過了一種辦公軟件 OpenOffice.org。其他的例子有 GIMP (在命令行輸入 gimp 來啟動),它是 GNU 圖形處理工具;使用 xpdf 來查看 pdf 文件;用 GhostView (gv)查看日記腳本文件;用 Mozilla/FireFox,links (一種文本模式的瀏覽器),Konqueror,Opera 很有很多其他的工具來 查看 web 內容;用 XMMS,CDplay 以及其他工具來查看多媒體文件內容;用 AbiWord, Gnumeric,Koffice 等查看辦公軟件。Linux 有數千個應用程序,要全部列舉它們需要幾天的時 間。 我們將集中精力與 shell 或文本模式的應用軟件,它們是其他應用工具的基礎。這些命令 對文本環境下的文本工作良好。當有疑問的時候,首先需要使用 file 命令檢查下文件的類型。 所有,讓我們看看有哪些有用的文本工具可以用于查看文件的內容。 字體問題 比如我們現在正在討論的純文本工具,在作用于”無格式”的文本文件的時候通常會遇到 字符編碼的問題。特殊的字符,比如重音符號的字面字符,中文字符和其他語言的字符,它們 使用與 en_US 編碼不同的編碼方式,就會以錯誤的方式顯示或生成不可取的垃圾字符。 這些問題將會在 Section 7.4 討論。
3.3.4.2. “less 就是 more”
毫無疑問當你工作在 UNIX 環境下,遲早會聽到某人說起這個短語的。一些 UNIX 的歷史說 明了這點: 首先使用的是 cat。輸出以一種不可控制的流方式輸出。 然后就是 pg,這個命令依然可以在舊的 UNIX 系統中找到。這個命令將文本一次一頁輸出 到標準輸出。 more 是 pg 的改進版本。這個命令現在還可以在每個 Linux 系統上使用。 less 是 more 的 GNU 版本,它又額外的特性以允許高亮搜索字符串,回滾等。它的語法很簡 單: less name_of_file 更多的信息請參考 info 手冊。
3.3.4.3. head 和 tail 命令
這兩個命令分別顯示一個文件的最初 / 最后幾行。要查看最后 10 行內容只需輸入: tony:~> tail -10 .bash_history locate configure | grep bin
man bash cd xawtv & grep usable /usr/share/dict/words grep advisable /usr/share/dict/words info quota man quota echo $PATH frm head 的原理與其類似。tail 命令便利的特性可以在文件發生變更的時候持續的顯示最后 n 行記錄。-f 選項常常被系統管理員用于檢查 log 文件。更多的信息請參見系統文檔。
3.3.5. 鏈接文件
3.3.5.1. 鏈接類型
在我們更多的了解了文件系統的文件和文件表示方法后,理解鏈接(或快捷鍵)是一件很容 易的事情了。鏈接只是一種兩個或更多個文件名匹配到相同數據的一種方式。有兩種方式來實 現這種目標: ? 硬鏈接:用相同的 inode 關聯兩個或多個文件名。硬鏈接共享磁盤上的相同數據庫,盡管在 形式上它們表示為一個獨立的文件。 這里就有一個不利因素了:硬鏈接不能跨分區,因為 inode 號在一個給定分區里是唯一的。 ? 軟鏈接或符號鏈接:一個指向其他文件的小文件。符號鏈接包含了目標文件的路徑而不是磁 盤的物理位置。由于這種方式方式沒有使用 inode,所有軟鏈接可以跨分區使用。 這兩種鏈接表現類似,但是并不相同,表現在如下的示例: Figure 3-2. 硬鏈接和軟鏈接的機制
注意移除軟鏈接的目標文件將無法繼續使用這個鏈接。 每一個規則文件原則上是一個硬鏈接。硬鏈接不能跨分區,因為它們使用 inode 而且 inode 號在一個分區里具有唯一性。 可能我們還會議論第三種類型的鏈接,user-space 鏈接,它類似于 MS Windows 的快捷 鍵。這種鏈接文件包含有只能被圖形文件管理器解釋的元數據。對內核和 shell 來說這些僅僅 是普通文件。它們可能以.desktop 或 .lnk 為后綴。可以在~/.gnome-desktop 找到這樣的例 子: [[email protected] .gnome-desktop]$ cat La\ Maison\ Dupont [Desktop Entry] Encoding=Legacy-Mixed Name=La Maison Dupont Type=X-nautilus-home X-Nautilus-Icon=temp-home URL=file:///home/dupont 下面是與 KDE 桌面相關的一個例子: [[email protected] Desktop]$ cat camera [Desktop Entry] Dev=/dev/sda1 FSType=auto
Icon=memory MountPoint=/mnt/camera Type=FSDevice X-KDE-Dynamic-Device=true 使用你的圖形環境的特性來創建這種類型的鏈接非常容易。如果你需要幫助,你的系統文 檔是你首選的參考資料。 在下面這一節,我們將學習如何使用命令行來創建 UNIX 類型的符號鏈接。
3.3.5.2. 創建符號鏈接
符號鏈接對初學者來說特別有趣:它們顯而易見而且不需要擔心分區方面的問題。 創建鏈接的命令用 ln。為了創建符號鏈接,你需要使用–s 選項: ln –s targetfile linkname 在下面的例子中,用戶 freddy 在他 home 目錄下的一個子目錄里面創建了一個鏈接指向系 統其他部分的一個目錄: freddy:~/music> ln -s /opt/mp3/Queen/ Queen
freddy:~/music> ls -l lrwxrwxrwx 1 freddy freddy 17 Jan 22 11:07 Queen -> /opt/mp3/Queen 符號鏈接通常是非常小的文件,而硬鏈接跟原始文件有著相同的大小。 符號鏈接的使用非常廣泛。它們通常可以用于節省空間,在安裝時需要文件在另一個地點 的情況下做文件拷貝,解決突發的需要在新環境下運行腳本的需求并能節省大量的工作量。系 統管理員可能決定需要轉移一個用戶的 home 目錄到一個新地點,比如 disk2,但是如果他想要 所有的事情運轉得跟原來一樣,比如使用/etc/passwd 文件,最小的代價就是創建從/home 目錄 一個符號鏈接執行新的/disk2/home。
3.4. 文件安全
3.4.1.訪問權限: Linux’s first line of defense
Linux 的安全模式是基于 UNIX 系統使用的安全模式的,它遵循嚴格的已經被證明是健壯的 UNIX 安全模式(有時候甚至更強)。在 Linux 系統上,每個文件錄屬于一個用戶和一個組用戶。 還有第三種類型的用戶,這種用戶不是文件的所有者也不是文件所有組的一員。類似于這樣的 用戶,他們讀,寫和執行文件的權限可以被賦予或是拒絕。 我們已經能夠使用附帶 long 選項的 ls –l 命令來列舉文件。這個命令會為這三種類型的 用戶顯示文件權限屬性;這些權限會表示為首個字符之后的九個字符,文件屬性行的首個字符 表示文件的類型。如下例子所示,代表文件權限的九個字符的前三個表示文件所有者對文件的 訪問權限。接下去的三個字符表示文件所有組的用戶對該文件的訪問權限,最后三個字符表示 其他用戶的訪問權限。權限通常具有相同的順序的:所有者,組和其他用戶的讀,寫,執行權
限。幾個例子如下: marise:~> ls -l To_Do -rw-rw-r–1 marise users 5 Jan 15 12:39 To_Do marise:~> ls -l /bin/ls -rwxr-xr-x 1 root root 45948 Aug 9 15:01 /bin/ls* 第一個文件是規則文件。用戶 marise 或者屬于組 users 的用戶可以讀和寫(更改/移動/刪 除)文件,但是他們不能執行該文件。其他用戶只允許讀這個文件,而不能寫或執行它. 第二個例子是關于可執行文件的,區別在于:每個人可以執行這個程序,但是你需要 root 用戶 才能去更改它。 在 info 手冊里有對如何使用 ls 命令來顯示文件訪問權限的詳細資料,查看 What information is listed 這一節的內容。 為了便于使用這些命令,訪問權限或模式以及用戶組都有一個相關的編碼。請看下表。 Table 3-7. 訪問模式代碼 代 碼 0 or 4 or r 2 or w 1 or x 意義
沒有授權,不能使用該位置的訪問權限。
讀權限被授予這個位置的用戶。
寫權限被授予這個位置的用戶。
執行權限被授予這個位置的用戶。
Table 3-8. 用戶組的代碼 代 碼 u g o
意義 用戶權限 組用戶權限 其他用戶權限
這種簡單的設計方式會被嚴格的執行,即使無網絡安全保護也能提供非常高可的安全性。 使用其他功能,安全配置可管理程序的用戶訪問,它能根據對文件基礎的認識為文件服務,并 能包含類似于 home 目錄和系統配置文件這樣的敏感數據。 你應該知道你的用戶名是什么。如果你不知道,使用 id 命令系統可以顯示出你的用戶名, 以及你所屬的默認組和其他的成員組。 tilly:~> id uid=504(tilly) gid=504(tilly) groups=504(tilly),100(users),2051(org) Your user name is also stored in the environment variable USER: tilly:~> echo $USER tilly
3.4.2. 工具集
3.4.2.1. chmod 命令
應用嚴格的文件權限,它有時候甚至是件麻煩事,其中一個通常的后果是需要根據各種各 樣的原因修改文件的訪問權限。我們使用 chmod 命令來實現這種需求,最后 to chmod h 成為 了一個非常流行的英語單詞,意思是更改一個文件的訪問權限。chmod 命令可以搭配字符或數 字選擇,只有你覺得好用。 下面的例子使用字符選項來解決一個初學者通常會遇到的權限問題: asim:~> ./hello bash: ./hello: bad interpreter: Permission denied asim:~> cat hello #!/bin/bash echo “Hello, World” asim:~> ls -l hello -rw-rw-r– 1 asim asim 32 Jan 15 16:29 hello asim:~> chmod u+x hello asim:~> ./hello Hello, World asim:~> ls -l hello -rwxrw-r– 1 asim asim 32 Jan 15 16:29 hello* 字符+ 和 – 選項被用于對相關的組賦予或收回權限。用逗號分隔的組合也是允許的。在
info 和 man 手冊里包含了很多有用的例子。這里有另一個例子,運行如下命令使得先前的那個 文件就變成了用戶 asim 的私人獨享的文件了: asim:~> chmod u+rwx,go-rwx hello asim:~> ls -l hello -rwx1 asim asim 32 Jan 15 16:29 hello* 這種類型的問題會遇到一個權限被拒絕的錯誤信息,它通常就是一個訪問權限方面的問題 了。還有,這些說法,”它昨天還能正常運行”,以及”當我使用 root 用戶它能正常運行”, 很可能就是由于文件權限引起的問題了。 當使用數字參數的 chmod 命令,該值需要根據每一組將訪問權限代表的數字加起來。因此 我們能得到 3 個數字號碼,這些號碼就是 chmod 所作用的符號值。下表列出了最常用的組合: 如果你的 chmod 命令參數少于三個,缺少的這個字符將從左邊開始算起用 0 替代。Linux 上通 常還有第四個數字,在第一組三個數字之前,并代表了特殊的訪問模式。任何涉及這些以及更 多的信息請考考 info 手冊。 Table 3-9. 使用 chmod 進行文件保護 命令 chmod 400 file chmod 500 directory 意義 保護一個文件以防止意外重寫 保護你自己以防止意外的移除,重命名目錄或是從目錄中轉移文 件。
chmod 600 file chmod 644 file chmod 660 file chmod 700 file chmod 755 directory chmod 775 file chmod 777 file
只有做這個權限設置的用戶才能修改此私有文件。 公共的可讀文件,只有進行這個權限設置的用戶才能修改它。 跟你在同一個組的用戶可以修改該文件,其他用戶不能做任何訪 問。 保護文件使得其他用戶均無法訪問該文件,但是該文件的所有者 則擁有所有文件權限。 其他用戶可以讀和執行這些文件,但是只有命令發起的用戶才能 更改該文件。 組內共享的標準文件。 任何用戶都可以對文件進行任何操作。
3.4.2.2. 登錄其他用戶組
當你在命令行輸入 id 命令,在你的目前登錄的用戶名和組名之后,你將得到你從屬的所有 組的列表。然后,在很多 Linux 系統,你一次只能登錄到一個組中。默認的,這個活動的或主
要組就是你在文件/etc/passwd 中指派的組。在這個文件的第四列表示的是主要組的 id 號,該 id 號可以在文件/etc/group 查找到。一個例子如下: asim:~> id uid=501(asim) gid=501(asim) groups=100(users),501(asim),3400(web) asim:~> grep asim /etc/passwd asim:x:501:501:Asim El Baraka:/home/asim:/bin/bash asim:~> grep 501 /etc/group asim:x:501: 在文件/etc/passwd 的第四列包含了值”501″,表示以上例子的 asim 組。從文件 /etc/group 我們可以獲得這個組 id 號對應的組名稱。當開始連接系統時,用戶就使用組 asim 來登錄了。 用戶私有組的設計方式 為了獲得更大的靈活性,大部分 Linux 系統遵循所謂的用戶私有組的設計方式,就是把每 個用戶賦給它們的自己的組。這個組只包含這個特定用戶,所有叫做”私有組”。通常的這個 組名和用戶登錄的名稱一樣,這可能會引起一些混淆。 除了他自己的私有組之外,用戶 asim 也能是組 users 和 web 的成員。由于這是用戶的次 級組,他將需要使用 newgrp 命令來登錄這些次級組(首先使用 gpasswd 來設置組的密碼)。在 這個例子中,用戶 asim 需要創建屬于組 web 下的新的文件: asim:/var/www/html> newgrp web asim:/var/www/html> id uid=501(asim) gid=3400(web) groups=100(users),501(asim),3400(web) 當 asim 現在創建新文件時,這些新文件就屬于組 web 所有,而不是先前的 asim 組: asim:/var/www/html> touch test asim:/var/www/html> ls -l test -rw-rw-r–1 asim web 0 Jun 10 15:38 test 登錄到新的組會阻止你使用 chown (參見 Section 3.4.2.4) 或者可以請求系統管理員為 你更改你的身份。 為獲得更多關于 newgrp 的信息請參考 man 手冊。
3.4.2.3. 文件權限模板
當新文件保存在某個地方,它首先應該服從標準的安全程序。文件沒有設定權限不能在 Liunx 系統上存在。標準的文件權限是在新文件創建時根據模板來決定的。模板的值可以使用 umask 命令顯示出來:
bert:~> umask 0002 跟為每個文件添加符號值,類似于 chmod 的方式不同, 為了計算一個新文件的權限,它們 需要減去所有可能的訪問權限。在上面的例子中,我們可以看到顯示了 4 個值,但是只有 3 個 權限類別: 用戶,組,和其他。第一個 0 是特殊文件屬性的一部分,這方面的內容我們將在 Section 3.4.2.4 和 Section 4.1.6 進行討論。當你輸入 umask 命令時也有可能你的系統并不 會顯示第一個 0,這樣你只能看到 3 個數字號碼來代表默認的文件權限。 每一個類似于 UNIX 的系統都有創建新文件的系統功能,該功能也被叫做每次用戶使用程序 就會創建新文件,例如,從網絡上下載一個文件,保存一個新的文本文檔等等。這種功能能創 建新文件和新目錄。當創建一個新目錄的時候,會賦予所有用戶全部的讀,寫和執行權限。當 創建新文件時,會賦予所有用戶讀和寫權限,但是執行權限不給賦予任何用戶。這樣,在權限 模板還沒有被應用之前,一個目錄的權限是 777 或 rwxrwxrwx,一個文件的權限是 666 或 rw-rw-rw-。 使用這種功能創建文件或目錄,權限的值根據默認的權限減去 umask 值所得的。因此,假 如 mask 的值是(0)002 的話一個新建的目錄默認權限為 775,一個文件默認權限為 664。這個可 以從下面的實例中得到證明: bert:~> mkdir newdir bert:~> ls -ld newdir drwxrwxr-x 2 bert bert 4096 Feb 28 13:45 newdir/ bert:~> touch newfile bert:~> ls -l newfile -rw-rw-r–1 bert bert 0 Feb 28 13:52 newfile
文件與目錄 目錄默認有更多的權限:它通常有執行權限。如果你沒有這個權限,它就服務被訪問了。 試一試,通過把目錄權限更改為 644!如果你使用 newgrp 命令登錄到別的組上,這個 mask 值 保持不變。因此,如果這個值是 002 的話,你在新組里面創建的文件和目錄也可以被改組其他 用戶訪問,而不需要使用 chmod 來更改權限。 Root 用戶通常有更嚴格的文件創建權限: [[email protected] root]# umask 這些默認值在 shell 配置文件里其作用范圍被設置成系統范圍的,配置文件有/etc/bashrc 或/etc/profile。你能在你的 shell 配置文件里進行更改,請參考 Chapter 7 關于如何客戶化 你的 shell 環境。
3.4.2.4. 更改用戶和組的所有權
當一個文件屬于錯誤的用戶或組時,可以通過 chown (更改所有者) 和 chgrp (更改組) 命 令進行相應的解決。在一個文件文件需要被組里其他成員共享的環境下更改文件的所有權是一 個很頻繁的系統管理任務。兩個命令都很靈活,使用—help 選項你可以查到它們的使用方法。 chown 命令可以更改文件的用戶和組的所有權,而 chgrp 命令只能更改組的所有權。當 然,系統會檢查想更改該文件的用戶是否對該文件有足夠的權限。 為了只更改文件的用戶所有權,使用如下語法: chown newuser file 如果你在用戶名之后使用冒號(參加 info 手冊),也會把組更改成發出該命令的用戶的優先 組。在 Linux 系統,每個用戶有他自己的組,因此這樣的形式可以把文件變成私有的: jacky:~> id uid=1304(jacky) gid=(1304) groups=1304(jacky),2034(pproject) jacky:~> ls -l my_report -rw-rw-r– 1 jacky project 29387 Jan 15 09:34 my_report jacky:~> chown jacky: my_report jacky:~> chmod o-r my_report jacky:~> ls -l my_report -rw-rw 1 jacky jacky 29387 Jan 15 09:34 my_report 如果 jacky 想要共享這個文件,不需要使用對每個用戶賦予讀權限,只需要似乎用 chgrp 命令進行更改就可以了: jacky:~> ls -l report-20020115.xls -rw-rw 1 jacky jacky 45635 Jan 15 09:35 report-20020115.xls jacky:~> chgrp project report-20020115.xls jacky:~> chmod o= report-20020115.xls jacky:~> ls -l report-20020115.xls -rw-rw 1 jacky project 45635 Jan 15 09:35 report-20020115.xls 采用這種方式,組 project 中的用戶就可以對這個文件進行操作了。不在這個組下的用戶 跟它就沒有什么關系無法操作它。 chown 和 chgrp 使用-R 選項,都可以用來實現所有權的遞歸處理。這種情況下,給定目錄 底下的所有文件和子目錄都會屬于該用戶和/或該組。 約束 在大部分系統上,一般是限制普通用戶使用 chown 和 chgrp 命令的。如果你不是系統管 理員,由于安全因素你就不能更改用戶和組的所有權。如果這些命令的時候不被限制,有惡意 的用戶可以將這些文件的所有權賦予其他用戶和組,并更改這些用戶的用戶環境,最終引起其 他用戶文件的損壞。
3.4.2.5. 特殊模式
為了系統管理方便,而不是一直被解決權限問題給阻礙了,可以對整個目錄或單獨的程序 賦予特殊的訪問權限。有三種特殊模式: ? Sticky bit 方式: 在執行一個任務后,命令被保存在系統內存中。最初這是節省內存 的廣泛使用的特性:大任務只有一次被裝載進內存。但是現在內存比較便宜并且出現了更好的 技術來處理它,因此它不再用戶處理單個文件的優化了。當應用于整個目錄時,sticky bit 卻 有不同的含義。在這種情況下,用戶想更改一個目錄下的文件,他必須是這個文件的所有者或 者這個文件有恰當的使用權限。這個特性使用與類似/var/tmp 這樣的目錄,這種目錄可以被任 何人訪問,但是它不適合用戶去更改或刪除別的用戶的數據。sticky bit 特性在文件的權限字 段末端用 t 來顯示: mark:~> ls -ld /var/tmp drwxrwxrwt 19 root root 8192 Jan 16 10:37 /var/tmp/ sticky bit 方式可以使用命令 chmod o+t directory 來設置。這個著名的”t” 表示 UNIX 中保留正文入門的特性。 ? SUID (設置用戶 ID) 和 SGID (設置組 ID):在用戶或組權限字段由字符 s 表示。當在 可執行文件被設置為這種模式時,該模式將作用于文件的用戶和組的權限,進而代替了用戶的 命令設置,因此可以訪問系統資源。我們將在 Chapter 4 詳細討論。 ? SGID (設置組 ID)在一個目錄上:在這種特殊情況下目錄下創建的每個文件都與該目錄 擁有一致的組所有者(而通常的行為是文件是屬于創建它的用戶所有)。使用這種方式,當共享 目錄的時候,用戶不需要擔心文件的所有權: mimi:~> ls -ld /opt/docs drwxrws4 root users 4096 Jul 25 2001 docs/ mimi:~> ls -l /opt/docs -rw-rw1 mimi users 345672 Aug 30 2001-Council.doc This is the standard way of sharing files in UNIX. 現有文件將保持不變! 在別的地方創建的文件移至 SGID 目錄將保持它們的初始的用戶和組所有者屬性不點。這 可能會有些迷惑。
3.5. 總結
在 UNIX 系統,同樣在 Linux 系統,所有的實體在某種方式或其他方式都表現為帶有恰當文 件屬性的文件。使用(預定的)路徑運行用戶和系統管理員查找,讀取并操作文件。 我們已經邁向了通往專家的第一步:我們已經討論了真實的和偽裝的文件系統,并且我們 知道了 Linux 文件的安全模式,以及幾個系統默認的其他安全防范策略。 Shell 是與系統進行交互的最重要的工具。我們在本章學習了幾個 shell 工具,請參考下 表。
Table 3-10. 第 3 章的新命令: 文件和文件系統 命令 bash cat cd file(s) directory 意義 GNU shell program. Send content of file(s) to standard output. Enter directory. cd is a bash built-in command. Change the group ownership of file(s) to newgroup Change access permissions on file(s) Change file owner and group ownership. Copy sourcefileto targetfile. Reports on used disk space on the partition containing file. Display a line of text Part of bash that announces variables and their values to the system. Determine file type of filename. Find files in the file system hierarchy Print lines in filecontaining the search pattern. Send the first part of fileto standard output Prints real and effective user name and groups. Read documentation about command. View filewith a powerful viewer. Make a link with name linknameto targetfile. Print all accessible files matching the search pattern. Prints directory content. Format and display online (system) manual pages for command.
chgrp newgroup file(s) chmod modefile(s) chown newowner[:[newgroup]] file(s) cp sourcefiletargetfile df file echo string export file filename find pathexpression grep PATTERNfile head file id info command less file ln targetfilelinkname locate searchstring ls file(s) man command
mkdir newdir mv oldfilenewfile newgrp groupname pwd
Make a new empty directory. Rename or move oldfile. Log in to a new group. Print the present or current working directory.
quota rm file rmdir file tail file umask [value] wc file which command
Show disk usage and limits. Removes files and directories. Removes directories. Print the last part of file. Show or change new file creation mode. Counts lines, words and characters in file. Shows the full path to command.
我們也強調一個事實,你應該讀 man 手冊。這個文件是你的必備文檔,它包含了很多問題 的答案。上面列表包含了你在日常管理中使用到的基本命令,但是它們能比我們在這討論的功 能做得更多。 最后但不是最終,簡單看下文件權限的基本情況: Table 3-11. 文件權限 Who\What r(ead) w(rite) (e)x(ecute) u(ser) g(roup) o(ther) 4 4 4 2 2 2 1 1 1
3.6. 練習
僅以你的常用用戶 ID 登錄系統。
3.6.1. 分區
你的 home 目錄在哪個分區? 你的系統有多少個分區? 你安裝的 Linux 系統總大小是多少?
3.6.2. 路徑
顯示你的搜索路徑。 輸出一個無意義的路徑通過命令 export PATH=blah 并顯示該目錄的內容。你的 home 目錄 的路徑是什么?另一個用戶如何從它的 home 目錄去訪問你的 home 目錄,使用相對路 徑? 到/var 下面的 tmp 目錄。 只使用一個命令共享目錄/usr 目錄。然后轉至 doc 目錄。你現在的工作目錄是什么?
3.6.3. 遍歷系統
將目錄更改至/proc 目錄。 你的系統運行的是哪種類型的 CPU(s) ? 現在使用的 RAM 是多少? 你有多少交換空間? 系統裝載了哪種類型的驅動? 系統已經運行了多少個小時了? 你的系統能解析哪個文件系統? 轉至/etc/rc.d | /etc/init.d | /etc/runlevels 并為你的運行級別選擇恰當的目錄。 什么服務應該在這種級別上運行? 哪個服務可以運行于圖形模式而不能運行于文本模式? 更改到目錄/etc 監控用戶的日志在系統保留多長時間? 你運行的是哪個版本? 工作期間是否有任何的問題或消息? 你的系統有多少個用戶?不要自己去數,讓計算機幫你做! 有多少個組? 時區信息保存在哪個地方? 你的系統安裝 HOWTOs 手冊了嗎? 變更目錄到/usr/share/doc. 指出 N GNU coreutils 包的三個程序 你的系統安裝的是哪個 bash 版本?
3.6.4. 操作文件
在你的 home 目錄下創建新的目錄。 你能把這個目錄移動到與你的 home 目錄同級別的地方嗎? 從目錄/usr/share/pixmaps 拷貝所有的 XPM 到這個新目錄。XPM 是什么意思?
按字母反序排列文件。 更改目錄到你的 home 目錄。創建一個新目錄并拷貝/etc 目錄下的所有文件到這個新目錄 下。確認你們同時拷貝了/etc 的子目錄的文件和目錄(遞歸拷貝) 到新目錄下,根據文件以大寫和小寫字母開頭為依據創建兩個目錄,并分別將對應的文件放至 兩個目錄下。用最少的命令來完成這個任務。 移除剩下的文件。 使用一個命令刪除整個目錄及其內容。 使用 grep 命令查找哪些腳本啟動了圖形模式的 Font Server。 Sendmail 服務程序位于哪個地方? 在你的 home 目錄創建一個鏈接文件至指向目錄/var/tmp。檢查它可以正常使用。 在你的 home 目錄下創建另一個鏈接文件執行剛才的創建的鏈接文件。檢查它能正常使用。 移除第一個鏈接文件并列出目錄的內容。第二個鏈接文件發生了什么改變?
3.6.5. 文件權限
你能在/home 目錄下更改文件的權限嗎? 你的標準文件創建模式是什么? 更改目錄/etc 的所有權為你自己的用戶和組。t 更改文件~/.bashrcso 的權限使得只有你和你的主要組成員才能讀它。 發出命令 locate root。你有沒有注意到什么特別的? 創建一個鏈接文件指向目錄/root。它可以被使用嗎?
更多免費txt電子書,歡迎您到www.txtsk.com下載
聲明:本電子書僅供讀者預覽,請在下載24小時內刪除,不得用作商業用途;如果喜歡請購買正版圖書!

贊(3) 打賞
未經允許不得轉載:老九IT技術網 » Linux入門大全

評論 2

  • 昵稱 (必填)
  • 郵箱 (必填)
  • 網址
  1. #1
    頭像

    哇,好長啊

    知識共享網2個月前 (05-08)回復

老九為IT技術人提供最全面的IT資訊和交流互動

歡迎投稿廣告合作

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

微信掃一掃打賞

足彩计算器混合过关