RHCSA 系列:如何执行文件和目录管理 - 第 2 部分
在本文RHCSA 第 2 部分:文件和目录管理中,我们将回顾系统管理员日常任务所需的一些基本技能。
创建、删除、复制和移动文件和目录
文件和目录管理是每个系统管理员都应该具备的关键能力。这包括从头开始创建/删除文本文件(每个程序配置的核心)和目录(您将在其中组织文件和其他目录)的能力,以及找出现有文件的类型的能力。
touch命令不仅可以用来创建空文件,还可以更新现有文件的访问和修改时间。
您可以使用 file [filename] 来确定文件的类型(这在启动您喜欢的文本编辑器进行编辑之前会派上用场)。
和 rm [文件名]
将其删除。
至于目录,您可以使用 mkdir [directory]
在现有路径中创建目录,或使用 mkdir -p [/full/path/to/directory]
创建完整路径。
当涉及到删除目录时,您需要在发出 rmdir [directory] 命令之前确保它们是空的,或者使用更强大的(小心处理!) rm -rf [目录]。最后一个选项将强制递归删除[directory]
及其所有内容 - 因此使用它需要您自担风险。
输入和输出重定向和流水线
命令行环境提供了两个非常有用的功能,允许将命令的输入和输出重定向到文件,并将命令的输出发送到另一个命令,称为分别是重定向和管道。
为了理解这两个重要的概念,我们必须首先理解三种最重要的 I/O(输入和输出)字符流(或序列)类型,它们实际上是特殊文件,在 *nix 的意义上。
- 标准输入(又名 stdin)默认连接到键盘。换句话说,键盘是向命令行输入命令的标准输入设备。
- 标准输出(又名 stdout)默认连接到屏幕,该设备“接收”命令的输出并将其显示在屏幕上。
- 标准错误(又名 stderr)是命令的状态消息默认发送到的位置,也是屏幕。
在以下示例中,ls /var
的输出以及 ls /howtoing 的结果发送到 stdout(屏幕) 。但在后一种情况下,显示的是 stderr 。
为了更容易地识别这些特殊文件,每个文件都被分配了一个文件描述符,这是一种用于访问它们的抽象表示。需要了解的重要一点是,这些文件与其他文件一样可以重定向。这意味着您可以捕获文件或脚本的输出并将其作为输入发送到另一个文件、命令或脚本。例如,这将允许您在磁盘上存储命令的输出以供以后处理或分析。
要重定向 stdin (fd 0)、stdout (fd 1) 或 stderr (fd 2),可以使用以下运算符。
- Redirection Operator
效果
- >
将标准输出重定向到包含标准输出的文件。如果目标文件存在,它将被覆盖。
- >>
将标准输出附加到文件。
- 2>
将标准错误重定向到包含标准输出的文件。如果目标文件存在,它将被覆盖。
- 2>>
将标准错误附加到现有文件。
- &>
将标准输出和标准错误重定向到文件;如果指定的文件存在,它将被覆盖。
- <
使用指定的文件作为标准输入。
- <>
-
指定的文件用于标准输入和标准输出。
与重定向相反,管道操作是通过在命令之后和另一个命令之前添加竖线 (|)
来执行的。
记住:
- 重定向用于将命令的输出发送到文件,或将文件作为命令的输入发送。
- 管道用于将一个命令的输出作为输入发送到另一个命令。
重定向和管道的示例
示例 1:将命令的输出重定向到文件
有时您需要迭代文件列表。为此,您可以首先将该列表保存到文件中,然后逐行读取该文件。虽然您确实可以直接迭代 ls 的输出,但此示例用于说明重定向。
ls -1 /var/mail > mail.txt
示例 2:将 stdout 和 stderr 重定向到 /dev/null
如果我们想阻止 stdout 和 stderr 显示在屏幕上,我们可以将这两个文件描述符重定向到 /dev/null
。请注意当对同一命令实施重定向时输出如何变化。
ls /var /tecmint
ls /var/ /tecmint &> /dev/null
示例 3:使用文件作为命令的输入
而 cat 命令的经典语法如下。
cat [file(s)]
您还可以使用正确的重定向运算符发送文件作为输入。
cat < mail.txt
示例 4:将一个命令的输出作为另一个命令的输入发送
如果您有一个大型目录或进程列表,并且希望能够一目了然地找到某个文件或进程,您将需要将列表通过管道传输到 grep。
请注意,我们在以下示例中使用管道。第一个查找所需的关键字,而第二个将从结果中消除实际的 grep 命令。此示例列出了与 apache 用户关联的所有进程。
ps -ef | grep apache | grep -v grep