Unix / Linux - 文件管理

在本章中,我们将详细讨论 Unix 中的文件管理。 Unix 中的所有数据都组织成文件。 所有文件都组织到目录中。 这些目录被组织成称为文件系统的树状结构。

当您以某种方式使用 Unix 时,您大部分时间都在处理文件。 本教程将帮助您了解如何创建和删除文件、复制和重命名文件、创建文件链接等。

在 Unix 中,文件分为三种基本类型 −

  • 普通文件 − 普通文件是系统上包含数据、文本或程序指令的文件。 在本教程中,您将了解如何使用普通文件。

  • 目录 − 目录存储特殊文件和普通文件。 对于熟悉 Windows 或 Mac OS 的用户来说,Unix 目录相当于文件夹。

  • 特殊文件 − 一些特殊文件提供对硬件的访问,例如硬盘驱动器、CD-ROM 驱动器、调制解调器和以太网适配器。 其他特殊文件类似于别名或快捷方式,使您能够使用不同的名称访问单个文件。


列出文件

要列出当前目录下存放的文件和目录,使用以下命令 −

$ls

这是上述命令的示例输出 −

$ls

bin        hosts  lib     res.03
ch07       hw1    pub     test_results
ch07.bak   hw2    res.01  users
docs       hw3    res.02  work

命令 ls 支持 -l 选项,这将帮助您获得有关列出的文件的更多信息 −

$ls -l
total 1962188

drwxrwxr-x  2 amrood amrood      4096 Dec 25 09:59 uml
-rw-rw-r--  1 amrood amrood      5341 Dec 25 08:38 uml.jpg
drwxr-xr-x  2 amrood amrood      4096 Feb 15  2006 univ
drwxr-xr-x  2 root   root        4096 Dec  9  2007 urlspedia
-rw-r--r--  1 root   root      276480 Dec  9  2007 urlspedia.tar
drwxr-xr-x  8 root   root        4096 Nov 25  2007 usr
drwxr-xr-x  2    200    300      4096 Nov 25  2007 webthumb-1.01
-rwxr-xr-x  1 root   root        3192 Nov 25  2007 webthumb.php
-rw-rw-r--  1 amrood amrood     20480 Nov 25  2007 webthumb.tar
-rw-rw-r--  1 amrood amrood      5654 Aug  9  2007 yourfile.mid
-rw-rw-r--  1 amrood amrood    166255 Aug  9  2007 yourfile.swf
drwxr-xr-x 11 amrood amrood      4096 May 29  2007 zlib-1.2.3
$

这里是所有列出的列的信息 −

  • 第一列 − 表示文件类型和文件的权限。 以下是所有类型文件的说明。

  • 第二列 − 表示文件或目录占用的内存块数。

  • 第三列 − 代表文件的所有者。 这是创建此文件的 Unix 用户。

  • 第四列 − 代表所有者的组。 每个 Unix 用户都有一个关联的组。

  • 第五列 − 以字节为单位表示文件大小。

  • 第六列 − 表示最后一次创建或修改此文件的日期和时间。

  • 第七列 − 表示文件或目录名称。

ls -l 列表示例中,每个文件行都以 d-l 开头 >。 这些字符指示所列文件的类型。

序号 前缀 & 描述
1

-

常规文件,例如 ASCII 文本文件、二进制可执行文件或硬链接。

2

b

块特殊文件。 块输入/输出设备文件,例如物理硬盘。

3

c

字符特殊文件。 原始输入/输出设备文件,例如物理硬盘驱动器。

4

d

包含其他文件和目录列表的目录文件。

5

l

符号链接文件。 任何常规文件的链接。

6

p

命名管道。 一种进程间通信机制。

7

s

用于进程间通信的套接字。


元字符

元字符在 Unix 中有特殊的含义。 例如,*? 是元字符。 我们使用 * 匹配 0 个或多个字符,问号 (?) 匹配单个字符。

例如 −

$ls ch*.doc

显示所有以ch开头,.doc结尾的文件 −

ch01-1.doc   ch010.doc  ch02.doc    ch03-2.doc 
ch04-1.doc   ch040.doc  ch05.doc    ch06-2.doc
ch01-2.doc ch02-1.doc c

这里,* 用作与任何字符匹配的元字符。 如果你想显示所有以.doc结尾的文件,那么你可以使用下面的命令 −

$ls *.doc

隐藏文件

不可见文件是一个文件,其第一个字符是点或句点字符 (.)。 Unix 程序(包括 shell)使用这些文件中的大部分来存储配置信息。

隐藏文件的一些常见示例包括文件 −

  • .profile − Bourne shell ( sh) 初始化脚本

  • .kshrc − Korn shell (ksh) 初始化脚本

  • .cshrc − C shell (csh) 初始化脚本

  • .rhosts − 远程shell配置文件

要列出不可见文件,请将 -a 选项指定给 ls

$ ls -a

.         .profile       docs     lib     test_results
..        .rhosts        hosts    pub     users
.emacs    bin            hw1      res.01  work
.exrc     ch07           hw2      res.02
.kshrc    ch07.bak       hw3      res.03
$
  • 单点(.) − 这代表当前目录。

  • 双点 (..) − 这表示父目录。


创建文件

您可以使用 vi 编辑器在任何 Unix 系统上创建普通文件。 您只需要给出以下命令 −

$ vi filename

上述命令将打开具有给定文件名的文件。 现在,按 i 键进入编辑模式。 进入编辑模式后,您可以开始在文件中写入内容,如以下程序所示 −

This is unix file....I created it for the first time.....
I'm going to save this content in this file.

完成程序后,请按照以下步骤操作 −

  • esc 键退出编辑模式。

  • 同时按下两个键 Shift + ZZ 可以完全退出文件。

您现在将在当前目录中创建一个使用filename 的文件。

$ vi filename
$

编辑文件

您可以使用 vi 编辑器编辑现有文件。 我们将简要讨论如何打开现有文件 −

$ vi filename

文件打开后,您可以按i 键进入编辑模式,然后您可以继续编辑文件。 如果你想在一个文件中到处移动,那么首先你需要通过按 Esc 键退出编辑模式。 在此之后,您可以使用以下键在文件内移动 −

  • l 键移动到右侧。

  • h 键移动到左侧。

  • k 键在文件中向上移动。

  • j 键在文件中向下移动。

因此,使用上述键,您可以将光标定位在您想要编辑的任何位置。 定位后,您可以使用 i 键进入编辑模式。 完成文件中的编辑后,按 Esc,最后按两个键 Shift + ZZ 以完全退出文件。


显示文件内容

您可以使用cat 命令查看文件的内容。 下面是一个简单的例子来查看上面创建的文件的内容 −

$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$

您可以使用 -b 选项和 cat 命令来显示行号,如下所示 −

$ cat -b filename
1   This is unix file....I created it for the first time.....
2   I'm going to save this content in this file.
$

计算文件中的单词数

您可以使用 wc 命令来计算文件中包含的行数、单词数和字符数。 下面是一个简单的例子来查看上面创建的文件的信息 −

$ wc filename
2  19 103 filename
$

这是所有四列的详细信息 −

  • 第一列 − 表示文件中的总行数。

  • 第二列 − 表示文件中的总字数。

  • 第三列 − 表示文件中的总字节数。 这是文件的实际大小。

  • 第四列 − 代表文件名。

您可以提供多个文件并一次获取有关这些文件的信息。 以下是简单的语法 −

$ wc filename1 filename2 filename3

复制文件

要复制文件,请使用cp 命令。 命令的基本语法是 −

$ cp source_file destination_file

以下是创建现有文件 filename 的副本的示例。

$ cp filename copyfile
$

您现在将在当前目录中找到另一个文件copyfile。 此文件将与原始文件 filename 完全相同。


重命名文件

要更改文件的名称,请使用mv 命令。 以下是基本语法 −

$ mv old_file new_file

以下程序会将现有文件 filename 重命名为 newfile

$ mv filename newfile
$

mv 命令会将现有文件完全移动到新文件中。 在这种情况下,您只会在当前目录中找到 newfile


删除文件

要删除现有文件,请使用 rm 命令。 以下是基本语法 −

$ rm filename

注意 − 文件可能包含有用的信息。 始终建议在使用此删除 命令时要小心。 最好将 -i 选项与 rm 命令一起使用。

以下示例显示了如何完全删除现有文件 filename

$ rm filename
$

您可以使用下面给出的命令一次删除多个文件 −

$ rm filename1 filename2 filename3
$

标准 Unix 流

正常情况下,每个Unix程序在启动时都会为其打开三个流(文件) −

  • stdin − 这称为标准输入,关联的文件描述符为 0。这也表示为 STDIN。 Unix 程序将从 STDIN 读取默认输入。

  • stdout − 这称为标准输出,关联的文件描述符为 1。这也表示为 STDOUT。 Unix 程序将在 STDOUT 写入默认输出

  • stderr − 这称为标准错误,关联的文件描述符为 2。这也表示为 STDERR。 Unix 程序将在 STDERR 处写入所有错误消息。