都是檔案惹的禍?

在 Raspbian 的世界裡,一切都是『檔案』。這是真的嗎?從古早的 Unix 系統開始,就用著一種『統一』unified 的觀點來看待檔案。假如說 『程式』是執行檔很好了解,可是講到『硬體裝置』不過是特殊檔呢?這得從兩個方面來理解。首先抽象上來說,各種硬體設備可以分類成『輸入』裝置、『輸出』裝置和『輸出入』裝置。這些裝置,要嘛一個一個的作出入 ── 比如鍵盤一按輸入一個字元;滑鼠一動從一點移動到另一點 ── ;要不就一塊一塊的來讀寫 ── 就像硬碟一讀一個磁區,SD 卡一寫一個區塊。所以又被劃成了『字元』和『區塊』兩類。另一方面從操作共性上來講,檔案是可讀可寫的,可以一個一個字元的讀寫,也可以一區塊一區塊的讀寫,那為什麼不能表示不同的裝置呢?Why not!  就這樣裝置成了『特殊檔案』──裝置檔了,一般放在 Linux 檔案系統  /dev 目錄下。難道真的所有裝置都是這樣的嗎?事實上,上網用的乙太網路裝置,並不放在 /dev 目錄下,而被放在 /proc/net 目錄之下。原因正由於前面提到的『操作共性』這一個非常重要的『類化』原則 ── 如何『比類相宜』。就像 python 的鴨子上說的一樣︰

當看到一隻鳥走起來像鴨子、游泳起來像鴨子、叫起來也像鴨子, 那麼這隻鳥就可以被稱為鴨子。

linux_file_system

既然都是檔案,那深入了解檔案系統就十分必要的了。左圖說明兩種常用的檔案系統模型,請點擊閱讀。此處我們將著重於介紹命令的『運作』觀點,就讓我們談談『族譜』吧!

如果檔案系統比類為族譜,一個姓氏的始祖,就是『 /根目錄了。你現在的家,是由始祖經世世代代祖先再經你父母而後到達你的,這個『由始祖經世世代代祖先再經你父母』冠上歷代先祖的名諱,加上父輩稱謂,就是你個人的譜系,指稱唯一的『你家』;在檔案系統術語上,譜系的類比就是『從根目錄到一指定檔案的父目錄』──叫作檔案的絕對路徑 path。然而由『你』的時位,也可以相對的定位「父祖輩」與「子孫輩」,分割成了『上』、『下』與『同』輩。所以當你稱祖父、曾祖父、曾曾祖父 …等等時,這些稱謂都是相對於你來講的。在 Linux 的檔案系統裡,也是這麼用的,用『../』表示『父目錄』,『../../』就是『父之父目錄』了。這種相對路徑有什麼好處呢?用族譜來說,比方經過了考證,你發現族譜上的始祖是更早或更晚的某某,你的譜系雖然變了,但是你的父母兄弟姊妹、甚至三代、五代的『關係』依然沒變。在 Linux 的檔案系統裡,有一種『鏈接檔』,相似於網頁的鏈接,可以用「相同」或「不同」的命名,指稱「同目錄」或「不同目錄」裡的另一個「檔案」或「目錄」。當我們考慮檔案系統管理可能變遷一事時,比方說,上層目錄的重新命名,這時為了確定鏈接檔不變的鏈接關係,習慣上都使用相對路徑。

當你剛登入作業系統時,你所在的目錄是你的『家目錄』,每個使用者都有自己的家目錄,該目錄由使用者自己管理。比方使用者 pi 的家目錄是 /home/pi/,存放 pi 的各種檔案或 pi 自己創建的目錄。這是每個使用者最常用的目錄,因此有一個簡短的代表符號『~/』指這個目錄。〔︰Linux 檔案系統的路徑使用,通常最後一個目錄名稱之後的 “/” 可以省略。所以 /home/pi 就是 /home/pi/,~ 同於 ~/ 〕這也說明了預設提示符裡的 ~ 的由來。在『除蟲!除錯?終端機。』一文中,我們提到了 root 這個最高權限管理者,它的家目錄就是 /root 。

如何在命令列使用檔案系統呢?『想像』你是一個檔案系統的設計師,你會提供哪些辦法,讓使用者能好好使用這棵大樹呢?知道自己目前在哪? pwd 。去任何目錄? cd 。看看目錄內容? ls 。了解檔案內容? cat 。刪除檔案? rm 。…這些種種…?…?等等。練習這樣的設想,能讓自己更輕鬆的掌握重點,學習知識。更好的是,如果你喜歡享受閱讀的樂趣 ,特此介紹鳥哥的 Linux 私房菜,可以吃得很過癮。

實驗是科學上的重要『方法學』,『嘗試錯誤』是經驗的起始。學習電腦系統也是一樣的,下面指令,你如何找到『??』所指?替換之後輸入下面的命令,此時如果你移動滑鼠會發生什麼事?

cat /dev/input/by-id/usb-??-event-mouse

假如你想結束命令,請按 Ctrl  + c  組合鍵

至於說如何摘蘋果?那只能問牛頓了。