2021-05-12 14:32:11
RHCSA 系列(二): 如何進行檔案和目錄管理
在本篇中,我們將回顧一些系統管理員日常任務需要的技能。
RHCSA: 執行檔案以及進行資料夾管理 - 第二部分
建立、刪除、複製和移動檔案及目錄
檔案和目錄管理是每一個系統管理員都應該掌握的必備技能。它包括了從頭開始的建立、刪除文字檔案(每個程式的核心設定)以及目錄(你用來組織檔案和其它目錄),以及識別已有檔案的型別。
touch
命令 不僅僅能用來建立空檔案,還能用來更新已有檔案的存取時間和修改時間。http://www.linuxidc.com/Linux/2014-03/98721.htm
touch 命令範例
你可以使用 file [filename]
來判斷一個檔案的型別 (在你用文字編輯器編輯之前,判斷型別將會更方便編輯)。
file 命令範例
使用rm [filename]
可以刪除檔案。
rm 命令範例
對於目錄,你可以使用mkdir [directory]
在已經存在的路徑中建立目錄,或者使用 mkdir -p [/full/path/to/directory]
帶全路徑建立資料夾。
mkdir 命令範例
當你想要去刪除目錄時,在你使用rmdir [directory]
前,你需要先確保目錄是空的,或者使用更加強力的命令(小心使用它!)rm -rf [directory]
。後者會強制刪除[directory]
以及它的內容,所以使用這個命令存在一定的風險。
輸入輸出重定向以及管道
命令列環境提供了兩個非常有用的功能:允許重定向命令的輸入和輸出為另一個檔案,以及傳送命令的輸出到另一個命令,這分別稱為重定向和管道。
為了理解這兩個重要概念,我們首先需要理解三個最重要的字元輸入輸出流型別,以 *nix 的話來說,它們實際上是特殊的檔案。
- 標準輸入 (即 stdin),預設連線到鍵盤。 換句話說,鍵盤是輸入命令到命令列的標準輸入裝置。
- 標準輸出 (即 stdout),預設連線到螢幕。 找個裝置“接受”命令的輸出,並展示到螢幕上。
- 標準錯誤 (即 stderr),預設是命令的狀態訊息出現的地方,它也是螢幕。
在下面的例子中,ls /var
的結果被傳送到stdout(螢幕展示),ls /tecmint 的結果也一樣。但在後一種情況下,它顯示在標準錯誤輸出上。
輸入和輸出命令範例
為了更容易識別這些特殊檔案,每個檔案都被分配有一個檔案描述符,這是用於存取它們的抽象標識。主要要理解的是,這些檔案就像其它的一樣,可以被重定向。這就意味著你可以從一個檔案或指令碼中捕獲輸出,並將它傳送到另一個檔案、命令或指令碼中。這樣你就可以在磁碟上儲存命令的輸出結果,用於稍後的分析。
要重定向 stdin (fd 0)、 stdout (fd 1) 或 stderr (fd 2),可以使用如下操作符。
轉向操作 | 效果 |
> | 重定向標準輸出到一個檔案。如果目標檔案存在,內容就會被重寫。 |
>> | 新增標準輸出到檔案尾部。 |
2> | 重定向標準錯誤輸出到一個檔案。如果目標檔案存在,內容就會被重寫。 |
2>> | 新增標準錯誤輸出到檔案尾部。 |
&> | 重定向標準錯誤和標準輸出到一個檔案。如果目標檔案存在,內容就會被重寫。 |
< | 使用特定的檔案做標准輸入。 |
<> | 使用特定的檔案做標准輸入和標準輸出。 |
與重定向相比,管道是通過在命令後和另外一個命令前之間新增一個豎槓(|)
。
記得:
- 重定向是用來定向命令的輸出到一個檔案,或把一個檔案傳送作為到一個命令的輸入。
- 管道是用來將命令的輸出轉發到另一個命令作為其輸入。
重定向和管道的使用範例
例1:將一個命令的輸出到檔案
有些時候,你需要遍歷一個檔案列表。要做到這樣,你可以先將該列表儲存到檔案中,然後再按行讀取該檔案。雖然你可以直接遍歷ls的輸出,不過這個例子是用來說明重定向。
# ls -1 /var/mail > mail.txt
將一個命令的輸出重定向到檔案
例2:重定向stdout和stderr到/dev/null
如果不想讓標準輸出和標準錯誤展示在螢幕上,我們可以把這兩個檔案描述符重定向到 /dev/null
。請注意對於同樣的命令,重定向是如何改變了輸出。
# ls /var /tecmint
# ls /var/ /tecmint &> /dev/null
重定向stdout和stderr到/dev/null
例3:使用一個檔案作為命令的輸入
cat 命令的經典用法如下
# cat [file(s)]
您還可以使用正確的重定向操作符傳送一個檔案作為輸入。
# cat < mail.txt
cat 命令範例
例4:傳送一個命令的輸出作為另一個命令的輸入
如果你有一個較大的目錄或進程列表,並且想快速定位,你或許需要將列表通過管道傳送給grep。
接下來我們會在下面的命令中使用管道,第一個管道是查詢所需的關鍵詞,第二個管道是除去產生的 grep command
。這個例子列舉了所有與apache使用者有關的進程:
# ps -ef | grep apache | grep -v grep
傳送一個命令的輸出作為另一個命令的輸入
歸檔,壓縮,解包,解壓檔案
如果你需要傳輸、備份、或者通過郵件傳送一組檔案,你可以使用一個存檔(或打包)工具,如 tar,通常與gzip,bzip2,或 xz 等壓縮工具配合使用。
您選擇的壓縮工具每一個都有自己不同的壓縮速度和壓縮率。這三種壓縮工具,gzip是最古老和可以較小壓縮的工具,bzip2提供經過改進的壓縮,以及xz是最新的而且壓縮最大。通常情況下,使用這些壓縮工具壓縮的檔案的擴充套件名依次是.gz、.bz2或.xz。
命令 | 縮寫 | 描述 |
–create | c | 建立一個tar歸檔 |
–concatenate | A | 新增tar歸檔到另外一個歸檔中 |
–append | r | 新增非tar歸檔到另外一個歸檔中 |
–update | u | 新增比歸檔中的檔案更新的檔案 |
–diff or –compare | d | 將歸檔中的檔案和硬碟的檔案進行對比 |
–list | t | 列舉一個tar壓縮包的內容 |
–extract or –get | x | 從歸檔中提取檔案 |
操作引數 | 縮寫 | 描述 |
—directory dir | C | 在執行操作前更改目錄 |
—same-permissions and —same-owner | p | 分別保留許可權和所有者資訊 |
–verbose | v | 列舉所有讀取或提取的檔案,如果和 --list 引數一起使用,也會顯示檔案的大小、所有權和時間戳 |
—exclude file | — | 從存檔中排除檔案。在這種情況下,檔案可以是一個實際的檔案或匹配模式。 |
—gzip or —gunzip | z | 使用gzip壓縮歸檔 |
–bzip2 | j | 使用bzip2壓縮歸檔 |
–xz | J | 使用xz壓縮歸檔 |
例5:建立一個tar檔案,然後使用三種壓縮工具壓縮
在決定使用這個還是那個工具之前,您可能想比較每個工具的壓縮效率。請注意壓縮小檔案或幾個檔案,結果可能不會有太大的差異,但可能會給你看出它們的差異。
# tar cf ApacheLogs-$(date +%Y%m%d).tar /var/log/httpd/* # Create an ordinary tarball
# tar czf ApacheLogs-$(date +%Y%m%d).tar.gz /var/log/httpd/* # Create a tarball and compress with gzip
# tar cjf ApacheLogs-$(date +%Y%m%d).tar.bz2 /var/log/httpd/* # Create a tarball and compress with bzip2
# tar cJf ApacheLogs-$(date +%Y%m%d).tar.xz /var/log/httpd/* # Create a tarball and compress with xz
tar 命令範例
例6:歸檔時同時儲存原始許可權和所有權
如果你正在從使用者的主目錄建立備份,你需要要儲存的個人檔案與原始許可權和所有權,而不是通過改變它們的使用者帳戶或守護行程來執行備份。下面的命令可以在歸檔時保留檔案屬性。
# tar cJf ApacheLogs-$(date +%Y%m%d).tar.xz /var/log/httpd/* --same-permissions --same-owner
建立軟連線和硬連結
在Linux中,有2種型別的連結檔案:硬連結和軟(也稱為符號)連結。因為硬連結檔案只是現存檔案的另一個名字,使用相同的 inode 號,它指向實際的資料;而符號連結只是指向的檔名。
此外,硬連結不佔用磁碟上的空間,而符號連結則佔用少量的空間來儲存的連結本身的文字。硬連結的缺點就是要求它們必須在同一個檔案系統內,因為 inode 在一個檔案系統內是唯一的。而符號連結沒有這個限制,它們通過檔名而不是 inode 指向其它檔案或目錄,所以可以跨檔案系統。
建立連結的基本語法看起來是相似的:
# ln TARGET LINK_NAME #從LINK_NAME到Target的硬連結
# ln -s TARGET LINK_NAME #從LINK_NAME到Target的軟連結
例7:建立硬連結和軟連結
沒有更好的方式來形象的說明一個檔案和一個指向它的硬連結或符號連結的關係,而不是建立這些連結。在下面的截圖中你會看到檔案和指向它的硬連結共用相同的inode,都是使用了相同的466個位元組的磁碟。
另一方面,在別的磁碟建立一個硬連結將占用5個位元組,這並不是說你將耗盡儲存容量,而是這個例子足以說明一個硬連結和軟連結之間的區別。
軟連線和硬連結之間的不同
在Linux系統上符號連結的典型用法是指向一個帶版本的檔案。假設有幾個程式需要存取檔案fooX.Y,但麻煩是版本經常變化(像圖書館一樣)。每次版本更新時我們都需要更新指向 fooX.Y 的單一參照,而更安全、更快捷的方式是,我們可以讓程式尋找名為 foo 的符號連結,它實際上指向 fooX.Y。
這樣的話,當你的X和Y發生變化後,你只需更新符號連結 foo 到新的目標檔案,而不用跟蹤每個對目標檔案的使用並更新。
總結
在這篇文章中,我們回顧了一些基本的檔案和目錄管理技能,這是每個系統管理員的工具集的一部分。請確保閱讀了本系列的其它部分,並將這些主題與本教學所涵蓋的內容相結合。
如果你有任何問題或意見,請隨時告訴我們。我們總是很高興從讀者那獲取反饋.
via: http://www.tecmint.com/file-and-directory-management-in-linux/
作者:Gabriel Cánepa 譯者:xiqingongzi 校對:wxy
本文永久更新連結地址:http://www.linuxidc.com/Linux/2015-09/122722.htm
相關文章