The Linux Command Line
說到命令行,我們真正指的是 shell。shell 就是一個程序,它接受從鍵盤輸入的命令, 然後把命令傳遞給操作系統去執行。幾乎所有的 Linux 發行版都提供一個名爲 bash 的 來自 GNU 項目的 shell 程序。“bash” 是 “Bourne Again SHell” (作者叫做Bourne,雙關born again shell)的首字母縮寫。
使用圖形用戶界面時,我們需要另一個和 shell 交互的叫做終端仿真器的程序。它允許我們訪問shell。
當我們打開終端時,首先會出現一行shell提示符,通常包括你的用戶名@主機名,緊接着當前工作目錄和一個美元符號。如果提示符的最後一個字符是“#”, 而不是“$”, 那麼這個終端會話就有超級用戶權限。
命令行上手
date 顯示系統當前時間和日期。
cal 顯示當前月份的日曆。
df 查看磁盤剩餘空間。
free 顯示空閒內存的數量。
exit 退出終端
幕後控制檯
即使終端仿真器沒有運行,在後臺仍然有幾個終端會話運行着。這些終端會話可以通過按下 Ctrl-Alt-F1 到 Ctrl-Alt-F6 訪問。當一個會話被訪問的時候, 它會顯示登錄提示框,我們需要輸入用戶名和密碼。要從一個虛擬控制檯轉換到另一個, 按下 Alt 和 F1-F6(中的一個)。返回圖形桌面,按下 Alt-F7。(當然,如果你的鍵盤通過Fn鍵控制F1-F12,你同時還需要按下Fn)。
文件系統跳轉
pwd 打印當前目錄
cd 改變目錄
ls 列出目錄內容
絕對路徑從根目錄開始,直到它的目的地,而相對路徑開始於工作目錄。 爲了做到這個(用相對路徑表示), 我們在文件系統樹中用一對特殊符號來表示相對位置。 這對特殊符號是 “.” (點) 和 “..” (點點)。符號 “.” 指的是工作目錄,”..” 指的是工作目錄的父目錄。
快捷鍵 | 運行結果 |
---|---|
cd | 更改工作目錄到你的家目錄。 |
cd - | 更改工作目錄到先前的工作目錄。 |
cd ~user_name | 更改工作目錄到用戶家目錄。例如, cd ~bob 會更改工作目錄到用戶“bob”的家目錄。 |
關於文件名的重要規則
-
以 “.” 字符開頭的文件名是隱藏文件。這表示,ls 命令不能列出它們, 用 ls -a 命令就可以了。
-
文件名和命令名是大小寫敏感的。文件名 “File1” 和 “file1” 是指兩個不同的文件名。
-
Linux 沒有“文件擴展名”的概念,可以用你喜歡的任何名字來給文件起名。文件內容或用途由其它方法來決定。雖然類 Unix 的操作系統,不用文件擴展名來決定文件的內容或用途,但是有些應用程序會。
-
雖然 Linux 支持長文件名,文件名可能包含空格,標點符號,但標點符號僅限 使用 “.”,“-”,下劃線。需要注意的是,最好不要在文件名中使用空格。如果你想表示詞與詞間的空格,用下劃線字符來代替。
選項和參數
命令名經常會帶有一個或多個用來更正命令行爲的選項, 更進一步,選項後面會帶有一個或多個參數,這些參數是命令作用的對象。一般形式爲:
command -options arguments
大多數命令使用的選項,是由一箇中劃線加上一個字符組成,例如,“-l”,但是許多命令,也支持長選項,長選項由兩個中劃線加上一個字組成,如“--reverse”。同時,許多命令也允許把多個短選項串在一起使用,如“-lt”。
選項 | 長選項 | 描述 |
---|---|---|
-a | --all | 列出所有文件,甚至包括文件名以圓點開頭的默認會被隱藏的隱藏文件。 |
-d | --directory | 通常,如果指定了目錄名,ls 命令會列出這個目錄中的內容,而不是目錄本身。 把這個選項與 -l 選項結合使用,可以看到所指定目錄的詳細信息,而不是目錄中的內容。 |
-F | --classify | 這個選項會在每個所列出的名字後面加上一個指示符。例如,如果名字是 目錄名,則會加上一個'/'字符。 |
-h | --human-readable | 當以長格式列出時,以人們可讀的格式,而不是以字節數來顯示文件的大小。 |
-l | 以長格式顯示結果。 | |
-r | --reverse | 以相反的順序來顯示結果。通常,ls 命令的輸出結果按照字母升序排列。 |
-S | 命令輸出結果按照文件大小來排序。 | |
-t | 按照修改時間來排序。 |
字段 | 含義 |
---|---|
-rw-r--r-- | 對於文件的訪問權限。第一個字符指明文件類型。在不同類型之間, 開頭的“-”說明是一個普通文件,“d”表明是一個目錄。其後三個字符是文件所有者的 訪問權限,再其後的三個字符是文件所屬組中成員的訪問權限,最後三個字符是其他所有人的訪問權限。 |
1 | 文件的硬鏈接數目。 |
root | 文件所有者的用戶名。 |
root | 文件所屬用戶組的名字。 |
32059 | 以字節數表示的文件大小。 |
2007-04-03 11:05 | 上次修改文件的時間和日期。 |
oo-cd-cover.odf | 文件名。 |
確定文件類型
調用 file 命令,會打印出文件內容的簡單描述。
file filename
用 less 瀏覽文件內容
less filename
命令 | 行爲 |
---|---|
Page UP or b | 向上翻滾一頁 |
Page Down or space | 向下翻滾一頁 |
UP Arrow | 向上翻滾一行 |
Down Arrow | 向下翻滾一行 |
G | 移動到最後一行 |
1G or g | 移動到開頭一行 |
/charaters | 向前查找指定的字符串 |
n | 向前查找下一個出現的字符串,這個字符串是之前所指定查找的 |
h | 顯示幫助屏幕 |
q | 退出 less 程序 |
複製粘貼小技巧:可以通過鼠標雙擊來複制字符串、文件名和命令名等,也可以通過鼠標三擊來複制整段文本,然後點擊鼠標中鍵完成粘貼。
目錄 | 評論 |
---|---|
/ | 根目錄。 |
/bin | 包含系統啓動和運行所必須的二進制程序。 |
/boot |
包含 Linux 內核、初始 RAM 磁盤映像(用於啓動時所需的驅動)和 啓動加載程序。 有趣的文件:
|
/dev | 這是一個包含設備結點的特殊目錄。“一切都是文件”,也適用於設備。 在這個目錄裏,內核維護着所有設備的列表。 |
/etc |
這個目錄包含所有系統層面的配置文件。它也包含一系列的 shell 腳本, 在系統啓動時,這些腳本會開啓每個系統服務。這個目錄中的任何文件應該是可讀的文本文件。 有趣的文件:雖然/etc 目錄中的任何文件都有趣,但這裏只列出了一些我一直喜歡的文件:
|
/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。注意,爲了系統安全,在一些系統中, 你必須是超級用戶才能查看這些日誌文件。 |
硬鏈接
類似於c++中引用的概念,即給一個文件設置多個名字。每個文件默認會有一個硬鏈接, 這個硬鏈接給予文件名字。我們每創建一個硬鏈接,就爲一個文件創建了一個額外的目錄項。只是這些目錄項指向的是同一個內存段。
A是B的硬鏈接(A和B都是文件名),則A的目錄項中的inode節點(文件索引節點)號與B的目錄項中的inode節點號相同,即一個inode節點對應兩個不同的文件名,兩個文件名指向同一個文件,A和B對文件系統來說是完全平等的。如果刪除了其中一個,對另外一個沒有影響。每增加一個文件名,inode節點上的鏈接數增加一,每刪除一個對應的文件名,inode節點上的鏈接數減一,直到爲0,inode節點和對應的數據塊被回收。注:文件和文件名是不同的東西,rm A刪除的只是A這個文件名,而A對應的數據塊(文件)只有在inode節點鏈接數減少爲0的時候纔會被系統回收。
ls 命令有一種方法,來展示(文件索引節點)的信息。在命令中加上”-i”選項:
ls -li
第一字段表示文件索引節點號。
硬鏈接有兩個重要侷限性:
-
一個硬鏈接不能關聯它所在文件系統之外的文件。這是說一個鏈接不能關聯與鏈接本身不在同一個磁盤分區上的文件。
-
一個硬鏈接不能關聯一個目錄。
一個硬鏈接和文件本身沒有什麼區別。當你列出一個包含硬鏈接的目錄內容時,你會看到沒有特殊的鏈接指示說明。當一個硬鏈接被刪除時,這個鏈接被刪除,但是文件本身的內容仍然存在, 直到所有關聯這個文件的鏈接都刪除掉。
ln filename hardlink
符號鏈接
符號鏈接(也稱爲軟鏈接或者 symlink ),類似於windows中的快捷方式,讓多個文件名指向同一個文件。創建符號鏈接是爲了克服硬鏈接的侷限性。符號鏈接生效,是通過創建一個特殊類型的文件,這個文件包含一個關聯文件或目錄的文本指針。如果你往一個符號鏈接裏面寫入東西,那麼相關聯的文件也被寫入。然而, 當你刪除一個符號鏈接時,只有這個鏈接被刪除,而不是文件自身。如果先於符號鏈接刪除文件,這個鏈接仍然存在,但是不指向任何東西。這個鏈接被稱爲壞鏈接。
A是B的軟鏈接(A和B都是文件名),A的目錄項中的inode節點號與B的目錄項中的inode節點號不相同,A和B指向的是兩個不同的inode,繼而指向兩塊不同的數據塊。但是A的數據塊中存放的只是B的路徑名(可以根據這個找到B的目錄項)。A和B之間是“主從”關係,如果B被刪除了,A仍然存在(因爲兩個是不同的文件),但指向的是一個無效的鏈接。
比如一個典型的應用是,多個程序需要使用某一個共享鏈接文件,但是這個文件經常改變版本,而隨着版本號的改變文件名也發生了改變。那麼我們就必須跟蹤每個可能使用了這個共享鏈接文件的程序,每當文件更新一次新版本,都要更改所有使用該文件的程序。
這時,我們可以使用符號鏈接來解決這個問題,比方說,我們安裝了文件 “foo” 的 2.6 版本,它的 文件名是 “foo-2.6”,然後創建了叫做 “foo” 的符號鏈接,這個符號鏈接指向 “foo-2.6”。 這意味着,當一個程序打開文件 “foo” 時,它實際上是打開文件 “foo-2.6”。當升級到 “foo-2.7” 版本的時候,僅添加這個文件到文件系統中,更改符號鏈接 “foo”指向新版本即可。這有些類似於c語言中宏定義的符號常量,而不是別名。
ln -s filename softlink
參考:https://www.cnblogs.com/ylan2009/p/4287929.html
http://billie66.github.io/TLCL/book/index.html