1. 程式人生 > >Linux學習第二天--探究作業系統

Linux學習第二天--探究作業系統

探究作業系統

既然我們已經知道了如何在檔案系統中跳轉,是時候開始 Linux 作業系統之旅了。然而在開始之前,我們先學習一些對研究 Linux 系統有幫助的命令。

  • ls -列出目錄內容
  • file - 確定檔案型別
  • less -遊覽檔案內容

甚至可以列出多個指定目錄的內容。在這個例子中,將會列出使用者家目錄(用字元“~”代表)和/usr 目錄的內容.
ls命令有大量的選項, 下面列出最常使用的選項

  • -a 列出所有檔案,甚至包括檔名以圓點開頭的預設會被隱藏的隱藏檔案。
  • -d 通常,如果指定了目錄名,ls 命令會列出這個目錄中的內容,而不是目錄本身。 把這個選項與 -l 選項結合使用,可以看到所指定目錄的詳細資訊,而不是目錄中的內容。
  • -F 這個選項會在每個所列出的名字後面加上一個指示符。例如,如果名字是 目錄名,則會加上一個’/'字元。
  • -h 當以長格式列出時,以人們可讀的格式,而不是以位元組數來顯示檔案的大小。
  • -l 以長格式顯示結果。
  • -r 以相反的順序來顯示結果。通常,ls 命令的輸出結果按照字母升序排列。
  • -S 命令輸出結果按照檔案大小來排序。
  • -t 按照修改時間來排序。

深入研究長格式輸出

正如我們先前知道的,“-l”選項導致 ls 的輸出結果以長格式輸出。這種格式包含大量的有用資訊。下面的例子目錄來自 於 Ubuntu 系統:

[email protected]
:~# ls -l total 4648 drwxr-xr-x 3 root root 4096 Aug 6 12:52 deploy drwxr-xr-x 4 root root 4096 Jul 18 20:44 django_web drwxr-xr-x 4 root root 4096 Sep 11 10:43 flask_web drwxr-xr-x 2 root root 4096 Aug 15 18:03 heikeji -rw-r--r-- 1 root root 88042 Aug 20 09:16 index.html -rw------- 1 root root 73 May 29 09:19 nohup.out drwxrwxr-x 6 1000 1000 4096 May 28 16:22 openresty-1.13.6.2 -rw-r--r-- 1 root root 4635916 May 15 04:26 openresty-1.13.6.2.tar.gz drwxr-xr-x 3 root root 4096 May 17 14:20 python3.5_env drwxr-xr-x 3 root root 4096 Aug 9 18:24 test
  1. drwxr-xr-x 對於檔案的訪問許可權。第一個字元指明檔案型別。在不同型別之間, 開頭的“-”說明是一個普通檔案,“d”表明是一個目錄。其後三個字元是檔案所有者的 訪問許可權,再其後的三個字元是檔案所屬組中成員的訪問許可權,最後三個字元是其他所 有人的訪問許可權。
  2. 3 檔案的硬連結數目
  3. root 檔案所有者的使用者名稱。
  4. root 檔案所屬使用者組的名字。
  5. 4096 以位元組數表示的檔案大小
  6. Aug 6 12:52 上次修改檔案的時間和日期。
  7. deploy 檔名。

確定檔案型別

隨著探究作業系統的進行,知道檔案包含的內容是很有用的。我們將用 file 命令來確定檔案的型別。我們之前討論過, 在 Linux 系統中,並不要求檔名來反映檔案的內容。然而,一個類似 “picture.jpg” 的檔名,我們會期望它包含 JPEG 壓縮影象,但 Linux 卻不這樣要求它。可以這樣呼叫 file 命令:

file filename

當呼叫file命令後,file命令會打印出檔案內容簡單描述.例如:

[email protected]:~# file openresty-1.13.6.2.tar.gz 
openresty-1.13.6.2.tar.gz: gzip compressed data, was "openresty-1.13.6.2.tar", last modified: Mon May 14 20:25:03 2018, max compression, from Unix

有許多種型別的檔案。事實上,在類 Unix 作業系統中比如說 Linux 中,有個普遍的觀念就是“一切皆檔案”。 隨著課程的進行,我們將會明白這句話是多麼的正確。
雖然系統中許多檔案格式是熟悉的,例如 MP3和 JPEG 檔案,但也有一些檔案格式不太常見,極少數檔案相當陌生

用less遊覽檔案內容

less 命令是一個用來瀏覽文字檔案的程式。縱觀 Linux 系統,有許多人類可讀的文字檔案。less 程式為我們檢查文字檔案 提供了方便。
less命令是這樣使用的

less filename

一旦執行起來,less 程式允許你前後滾動檔案。例如,要檢視一個定義了系統中全部使用者身份的檔案,輸入以下命令:

[email protected]:~# less /etc/passwd

一旦 less 程式執行起來,我們就能瀏覽檔案內容了。如果檔案內容多於一頁,那麼我們可以上下滾動檔案。按下“q”鍵, 退出 less 程式。
下面列出less程式最常使用的鍵盤命令

命令 行為
Page UP or b 向上翻滾一頁
Page Down or space 向下翻滾一頁
UP Arrow 向上翻滾一行
Down Arrow 向下翻滾一行
G 移動到最後一行
1G or g 移動到開頭一行
/charaters 向前查詢指定的字串
n 向前查詢下一個出現的字串,這個字串是之前所指定查詢的
h 顯示幫助螢幕
q 退出less程式

less 就是 more

less 屬於”頁面排程器”類程式,這些程式允許以逐頁方式輕鬆瀏覽長文字文件。 more 程式只能向前翻頁,而 less 程式允許前後翻頁,此外還有很多其它的特性。

旅行指南

Linux 系統中,檔案系統佈局與類 Unix 系統的檔案佈局很相似。實際上,一個已經發布的標準, 叫做 Linux 檔案系統層次標準,詳細說明了這種設計模式。不是所有Linux發行版都根據這個標準,但 大多數都是。

下一步,我們將在檔案系統中漫遊,來了解 Linux 系統的工作原理。這會給你一個溫習跳轉命令的機會。 我們會發現很多有趣的檔案都是純人類可讀文字。下面旅行開始,做做以下練習:

  1. cd 到給定目錄
  2. 列出目錄內容 ls -l
  3. 如果看到一個有趣的檔案,用 file 命令確定檔案內容
  4. 如果檔案看起來像文字,試著用 less 命令瀏覽它
    linux系統中的目錄
目錄 內容
/ 根目錄, 萬物起源
/bin 包含系統啟動和執行所必需的二進位制檔案
/boot 包含 Linux 核心、初始 RAM 磁碟映像(用於啟動時所需的驅動)和 啟動載入程式。
/dev 這是一個包含裝置結點的特殊目錄。“一切都是檔案”,也適用於裝置。 在這個目錄裡,核心維護著所有裝置的列表。
/etc 這個目錄包含所有系統層面的配置檔案。它也包含一系列的 shell 指令碼, 在系統啟動時,這些指令碼會開啟每個系統服務。這個目錄中的任何檔案應該是可讀的文字檔案。
/home 在通常的配置環境下,系統會在/home 下,給每個使用者分配一個目錄。普通使用者只能 在自己的目錄下寫檔案。這個限制保護系統免受錯誤的使用者活動破壞。
/lib 包含核心系統程式所使用的共享庫檔案。這些檔案與 Windows 中的動態連結庫相似。
/lost+found 每個使用 Linux 檔案系統的格式化分割槽或裝置,例如 ext3檔案系統, 都會有這個目錄。當部分恢復一個損壞的檔案系統時,會用到這個目錄。這個目錄應該是空的,除非檔案系統 真正的損壞了。
/media 在現在的 Linux 系統中,/media 目錄會包含可移動介質的掛載點, 例如 USB 驅動器,CD-ROMs 等等。這些介質連線到計算機之後,會自動地掛載到這個目錄結點下。
/mnt 在早些的 Linux 系統中,/mnt 目錄包含可移動介質的掛載點。
/opt 這個/opt 目錄被用來安裝“可選的”軟體。這個主要用來儲存可能 安裝在系統中的商業軟體產品。
/proc 這個/proc 目錄很特殊。從儲存在硬碟上的檔案的意義上說,它不是真正的檔案系統。 相反,它是一個由 Linux 核心維護的虛擬檔案系統。它所包含的檔案是核心的窺視孔。這些檔案是可讀的, 它們會告訴你核心是怎樣監管計算機的。
/root root帳號的家目錄
/sbin 這個目錄包含“系統”二進位制檔案。它們是完成重大系統任務的程式,通常為超級使用者保留。
/tmp 這個/tmp 目錄,是用來儲存由各種程式建立的臨時檔案的地方。一些配置導致系統每次 重新啟動時,都會清空這個目錄。
/usr 在 Linux 系統中,/usr 目錄可能是最大的一個。它包含普通使用者所需要的所有程式和檔案
/usr/bin /usr/bin 目錄包含系統安裝的可執行程式。通常,這個目錄會包含許多程式。
/usr/lib 包含由/usr/bin 目錄中的程式所用的共享庫。
/usr/local 這個/usr/local 目錄,是非系統發行版自帶程式的安裝目錄。 通常,由原始碼編譯的程式會安裝在/usr/local/bin 目錄下。新安裝的 Linux 系統中會存在這個目錄, 並且在管理員安裝程式之前,這個目錄是空的。
/usr/sbin 包含許多系統管理程式。
/usr/share /usr/share 目錄包含許多由/usr/bin 目錄中的程式使用的共享資料。 其中包括像預設的配置檔案、圖示、桌面背景、音訊檔案等等。
/usr/share/doc 大多數安裝在系統中的軟體包會包含一些文件。在/usr/share/doc 目錄下, 我們可以找到按照軟體包分類的文件。
/var 除了/tmp 和/home 目錄之外,相對來說,目前我們看到的目錄是靜態的,這是說, 它們的內容不會改變。/var 目錄存放的是動態檔案。各種資料庫,假離線檔案, 使用者郵件等等,都位於在這裡。
/var/log 這個/var/log 目錄包含日誌檔案、各種系統活動的記錄。這些檔案非常重要,並且 應該時時監測它們。其中最重要的一個檔案是/var/log/messages。注意,為了系統安全,在一些系統中, 你必須是超級使用者才能檢視這些日誌檔案。

符號連結

在我們到處檢視時,我們可能會看到一個目錄,列出像這樣的一條資訊:

lrwxrwxrwx 1 root root 11 2007-08-11 07:34 libc.so.6 -> libc-2.6.so

注意看,為何這條資訊第一個字元是“l”,並且有兩個檔名呢? 這是一個特殊檔案,叫做符號連結(也稱為軟連結或者 symlink )。 在大多數“類 Unix” 系統中, 有可能一個檔案被多個檔名所指向。雖然這種特性的意義並不明顯,但它真的很有用

描繪一下這樣的情景:一個程式要求使用某個包含在名為“foo”檔案中的共享資源,但是“foo”經常改變版本號。 這樣,在檔名中包含版本號,會是一個好主意,因此管理員或者其它相關方,會知道安裝了哪個“foo”版本。 這會導致另一個問題。如果我們更改了共享資源的名字,那麼我們必須跟蹤每個可能使用了 這個共享資源的程式,當每次這個資源的新版本被安裝後,都要讓使用了它的程式去尋找新的資源名。 這聽起來很沒趣。

這就是符號連結存在至今的原因。比方說,我們安裝了檔案 “foo” 的 2.6 版本,它的 檔名是 “foo-2.6”,然後建立了叫做 “foo” 的符號連結,這個符號連結指向 “foo-2.6”。 這意味著,當一個程式開啟檔案 “foo” 時,它實際上是開啟檔案 “foo-2.6”。 現在,每個人都很高興。依賴於 “foo” 檔案的程式能找到這個檔案,並且我們能知道安裝了哪個檔案版本。 當升級到 “foo-2.7” 版本的時候,僅新增這個檔案到檔案系統中,刪除符號連結 “foo”, 建立一個指向新版本的符號連結。這不僅解決了版本升級問題,而且還允許在系統中儲存兩個不同的檔案版本。 假想 “foo-2.7” 有個錯誤(該死的開發者!),那我們得回到原來的版本。 一樣的操作,我們只需要刪除指向新版本的符號連結,然後建立指向舊版本的符號連結就可以了。

在上面列出的目錄(來自於 Fedora 的 /lib 目錄)展示了一個叫做 “libc.so.6” 的符號連結,這個符號連結指向一個 叫做 “libc-2.6.so” 的共享庫檔案。這意味著,尋找檔案 “libc.so.6” 的程式,實際上得到是檔案 “libc-2.6.so”。 在下一章節,我們將學習如何建立符號連結。

硬連結

討論到連結問題,我們需要提一下,還有一種連結型別,叫做硬連結。硬連結同樣允許檔案有多個名字, 但是硬連結以不同的方法來建立多個檔名。在下一章中,我們會談到更多符號連結與硬連結之間的差異問題。