linux 基礎命令(一):文件系統跳轉與操作系統探究——date,cal,df,free,exit,pwd,cd,ls,命令選項和參數,file,less,系統目錄,硬鏈接與軟鏈接

 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”的家目錄。

關於文件名的重要規則

  1. 以 “.” 字符開頭的文件名是隱藏文件。這表示,ls 命令不能列出它們, 用 ls -a 命令就可以了。

  2. 文件名和命令名是大小寫敏感的。文件名 “File1” 和 “file1” 是指兩個不同的文件名。

  3. Linux 沒有“文件擴展名”的概念,可以用你喜歡的任何名字來給文件起名。文件內容或用途由其它方法來決定。雖然類 Unix 的操作系統,不用文件擴展名來決定文件的內容或用途,但是有些應用程序會。

  4. 雖然 Linux 支持長文件名,文件名可能包含空格,標點符號,但標點符號僅限 使用 “.”,“-”,下劃線。需要注意的是,最好不要在文件名中使用空格。如果你想表示詞與詞間的空格,用下劃線字符來代替。

選項和參數

命令名經常會帶有一個或多個用來更正命令行爲的選項, 更進一步,選項後面會帶有一個或多個參數,這些參數是命令作用的對象。一般形式爲:

command -options arguments

大多數命令使用的選項,是由一箇中劃線加上一個字符組成,例如,“-l”,但是許多命令,也支持長選項,長選項由兩個中劃線加上一個字組成,如“--reverse”。同時,許多命令也允許把多個短選項串在一起使用,如“-lt”。

ls 命令選項
選項 長選項 描述
-a --all 列出所有文件,甚至包括文件名以圓點開頭的默認會被隱藏的隱藏文件。
-d --directory 通常,如果指定了目錄名,ls 命令會列出這個目錄中的內容,而不是目錄本身。 把這個選項與 -l 選項結合使用,可以看到所指定目錄的詳細信息,而不是目錄中的內容。
-F --classify 這個選項會在每個所列出的名字後面加上一個指示符。例如,如果名字是 目錄名,則會加上一個'/'字符。
-h --human-readable 當以長格式列出時,以人們可讀的格式,而不是以字節數來顯示文件的大小。
-l   以長格式顯示結果。
-r --reverse 以相反的順序來顯示結果。通常,ls 命令的輸出結果按照字母升序排列。
-S   命令輸出結果按照文件大小來排序。
-t   按照修改時間來排序。
ls 長格式列表的字段
字段 含義
-rw-r--r-- 對於文件的訪問權限。第一個字符指明文件類型。在不同類型之間, 開頭的“-”說明是一個普通文件,“d”表明是一個目錄。其後三個字符是文件所有者的 訪問權限,再其後的三個字符是文件所屬組中成員的訪問權限,最後三個字符是其他所有人的訪問權限。
1 文件的硬鏈接數目。
root 文件所有者的用戶名。
root 文件所屬用戶組的名字。
32059 以字節數表示的文件大小。
2007-04-03 11:05 上次修改文件的時間和日期。
oo-cd-cover.odf 文件名。

確定文件類型

調用 file 命令,會打印出文件內容的簡單描述。

file filename

用 less 瀏覽文件內容

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

 

複製粘貼小技巧:可以通過鼠標雙擊來複制字符串、文件名和命令名等,也可以通過鼠標三擊來複制整段文本,然後點擊鼠標中鍵完成粘貼。

 

Linux 系統中的目錄
目錄 評論
/ 根目錄。
/bin 包含系統啓動和運行所必須的二進制程序。
/boot

包含 Linux 內核、初始 RAM 磁盤映像(用於啓動時所需的驅動)和 啓動加載程序。

有趣的文件:

  • /boot/grub/grub.conf or menu.lst, 被用來配置啓動加載程序
  • /boot/vmlinuz,Linux 內核。
/dev 這是一個包含設備結點的特殊目錄。“一切都是文件”,也適用於設備。 在這個目錄裏,內核維護着所有設備的列表。
/etc

這個目錄包含所有系統層面的配置文件。它也包含一系列的 shell 腳本, 在系統啓動時,這些腳本會開啓每個系統服務。這個目錄中的任何文件應該是可讀的文本文件。

有趣的文件:雖然/etc 目錄中的任何文件都有趣,但這裏只列出了一些我一直喜歡的文件:

  • /etc/crontab, 定義自動運行的任務
  • /etc/fstab,包含存儲設備的列表,以及與他們相關的掛載點。
  • /etc/passwd,包含用戶帳號列表。
/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

第一字段表示文件索引節點號。

硬鏈接有兩個重要侷限性:

  1. 一個硬鏈接不能關聯它所在文件系統之外的文件。這是說一個鏈接不能關聯與鏈接本身不在同一個磁盤分區上的文件。

  2. 一個硬鏈接不能關聯一個目錄。

一個硬鏈接和文件本身沒有什麼區別。當你列出一個包含硬鏈接的目錄內容時,你會看到沒有特殊的鏈接指示說明。當一個硬鏈接被刪除時,這個鏈接被刪除,但是文件本身的內容仍然存在, 直到所有關聯這個文件的鏈接都刪除掉。

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

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章