您的位置:首页 > 运维架构 > Linux

RHCSA 系列(二): 如何進行文件和目錄管理命令_Linux RHCSA 系列(二): 如何進行文件和目錄管理 命令用法详解:

2018-10-16 13:55 1946 查看

在本篇中,我們將回顧一些系統管理員日常任務需要的技能。

RHCSA: 运行文件以及进行文件夹管理 - 第二部分

创建、删除、复制和移动文件及目录

文件和目錄管理是每一個系統管理員都應該掌握的必備技能。它包括了從頭開始的創建、刪除文本文件(每個程序的核心配置)以及目錄(你用來組織文件和其它目錄),以及識別已有文件的類型。

touch 命令 不仅仅能用来创建空文件,还能用来更新已有文件的访问时间和修改时间。

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的輸出,不過這個例子是用來說明重定向。

 
  1. # ls -1 /var/mail > mail.txt

将一个命令的输出重定向到文件

例2:重定向stdout和stderr到/dev/null

如果不想让标准输出和标准错误展示在屏幕上,我们可以把这两个文件描述符重定向到 /dev/null。请注意对于同样的命令,重定向是如何改变了输出。

 
  1. # ls /var /tecmint
  2. # ls /var/ /tecmint &> /dev/null

重定向stdout和stderr到/dev/null

例3:使用一个文件作为命令的输入

cat 命令的经典用法如下

 
  1. cat [file(s)]

您还可以使用正确的重定向操作符发送一个文件作为输入。

 
  1. # cat < mail.txt

cat 命令实例

例4:發送一個命令的輸出作為另一個命令的輸入

如果你有一個較大的目錄或進程列表,並且想快速定位,你或許需要將列表通過管道傳送給grep

接下來我們會在下面的命令中使用管道,第一個管道是查找所需的關鍵詞,第二個管道是除去產生的

 grep command。這個例子列舉了所有與apache用戶有關的進程:

 
  1. ps -ef | grep apache | grep -v grep

发送一个命令的输出作为另一个命令的输入

归档,压缩,解包,解压文件

如果你需要傳輸、備份、或者通過郵件發送一組文件,你可以使用一個存檔(或打包)工具,如 tar,通常與gzipbzip2,或 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文件,然後使用三種壓縮工具壓縮

在決定使用這個還是那個工具之前,您可能想比較每個工具的壓縮效率。請註意壓縮小文件或幾個文件,結果可能不會有太大的差異,但可能會給你看出它們的差異。

 
  1. # tar cf ApacheLogs-$(date +%Y%m%d).tar /var/log/httpd/* # Create an ordinary tarball
  2. # tar czf ApacheLogs-$(date +%Y%m%d).tar.gz /var/log/httpd/* # Create a tarball and compress with gzip
  3. # tar cjf ApacheLogs-$(date +%Y%m%d).tar.bz2 /var/log/httpd/* # Create a tarball and compress with bzip2
  4. # tar cJf ApacheLogs-$(date +%Y%m%d).tar.xz /var/log/httpd/* # Create a tarball and compress with xz

tar 命令实例

例6:歸檔時同時保存原始權限和所有權

如果你正在從用戶的主目錄創建備份,你需要要存儲的個人文件與原始權限和所有權,而不是通過改變它們的用戶帳戶或守護進程來執行備份。下面的命令可以在歸檔時保留文件屬性。

 
  1. # tar cJf ApacheLogs-$(date +%Y%m%d).tar.xz /var/log/httpd/* --same-permissions --same-owner

创建软连接和硬链接

在Linux中,有2種類型的鏈接文件:硬鏈接和軟(也稱為符號)鏈接。因為硬鏈接文件只是現存文件的另一個名字,使用相同的 inode 號,它指向實際的數據;而符號鏈接只是指向的文件名。

此外,硬鏈接不占用磁盤上的空間,而符號鏈接則占用少量的空間來存儲的鏈接本身的文本。硬鏈接的缺點就是要求它們必須在同一個文件系統內,因為 inode 在一個文件系統內是唯一的。而符號鏈接沒有這個限制,它們通過文件名而不是 inode 指向其它文件或目錄,所以可以跨文件系統。

創建鏈接的基本語法看起來是相似的:

 
  1. ln TARGET LINK_NAME #从LINK_NAME到Target的硬链接
  2. # ln -s TARGET LINK_NAME #从LINK_NAME到Target的软链接

例7:創建硬鏈接和軟鏈接

沒有更好的方式來形象的說明一個文件和一個指向它的硬鏈接或符號鏈接的關系,而不是創建這些鏈接。在下面的截圖中你會看到文件和指向它的硬鏈接共享相同的inode,都是使用了相同的466個字節的磁盤。

另一方面,在別的磁盤創建一個硬鏈接將占用5個字節,這並不是說你將耗盡存儲容量,而是這個例子足以說明一個硬鏈接和軟鏈接之間的區別。

软连接和硬链接之间的不同

在Linux系統上符號鏈接的典型用法是指向一個帶版本的文件。假設有幾個程序需要訪問文件fooX.Y,但麻煩是版本經常變化(像圖書館一樣)。每次版本更新時我們都需要更新指向 fooX.Y 的單一引用,而更安全、更快捷的方式是,我們可以讓程序尋找名為 foo 的符號鏈接,它實際上指向 fooX.Y。

這樣的話,當你的X和Y發生變化後,你只需更新符號鏈接 foo 到新的目標文件,而不用跟蹤每個對目標文件的使用並更新。


總結

在這篇文章中,我們回顧了一些基本的文件和目錄管理技能,這是每個系統管理員的工具集的一部分。

相关命令

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐