基本文件管理
本节讨论初级管理(LPIC-1)考试 101 的主题 1.103.3 的内容。这个主题的权值是 3。
在本节中,学习以下主题:
- 列出目录内容
- 复制、移动和删除文件和目录
- 递归地操作多个文件和目录
- 使用通配符模式操作文件
- 使用
find 命令根据类型、大小或时间来定位和操作文件
列出目录
在前面关于 使用命令行 的一节中,在讨论路径时说过,Linux 和 UNIX® 系统上的所有文件都是一个大型树结构的文件系统的一部分,这个文件系统的根是 /。
列出目录项
如果您在前面的一节按照我们的说明进行操作,就已经在主目录中创建了一个目录,lpi103。文件和目录名可以是绝对的(意味着它们以 / 开头),也可以是相对 于当前工作目录 的(意味着它们不以 / 开头)。文件或目录的绝对路径包括一个 /,后面跟着零个或几个目录名,每个目录名后面跟着一个 /,然后是最后一个名称。如果给出了相对于当前工作目录的文件或目录名,只需将工作目录的绝对路径、/ 和这个目录的相对路径组合起来。例如,在前一节中在我的主目录 /home/ian 中创建了 lpi103 目录,所以它的完整(即绝对)路径是 /home/ian/lpi103。清单 43 演示了三种使用 ls 命令列出这个目录中文件的方式。
VqALinux联盟
清单 43. 列出目录项
[ian@echidna lpi103]$ pwd
/home/ian/lpi103
[ian@echidna lpi103]$ echo $PWD
/home/ian/lpi103
[ian@echidna lpi103]$ ls
sedtab text2 text4 text6 xab yab
text1 text3 text5 xaa yaa
[ian@echidna lpi103]$ ls "$PWD"
sedtab text2 text4 text6 xab yab
text1 text3 text5 xaa yaa
[ian@echidna lpi103]$ ls /home/ian/lpi103
sedtab text2 text4 text6 xab yab
text1 text3 text5 xaa yaa
|
可以看到,可以将目录名作为参数提供给 ls 命令,它会列出这个目录的内容。
列出细节
在存储设备上,文件或目录包含在块 的集合中。关于文件的信息包含在 inode 中,记录的信息包括拥有者、最近一次访问文件的时间、文件的大小、它是否是目录以及谁可以读或写它。inode 号也称为文件序列号(file serial number) ,这个编号在特定的文件系统中是惟一的。可以使用 -l(或 --format=long)选项来显示 inode 中存储的一些信息。
在默认情况下,ls 命令不列出特殊文件,即名称以点(.)开头的文件。除根目录之外的每个目录都至少有两个特殊项,目录本身(.)和父目录(..)。根目录没有父目录。
清单 44 使用 -l 和 -a 选项以长格式列出所有文件,包括 . 和 .. 目录项。
VqALinux联盟
清单 44. 长格式目录清单
[ian@echidna lpi103]$ ls -al
total 56
drwxrwxr-x 2 ian ian 4096 Sep 30 15:01 .
drwxr-xr-x 94 ian ian 8192 Sep 27 12:57 ..
-rw-rw-r-- 1 ian ian 8 Sep 26 15:24 sedtab
-rw-rw-r-- 1 ian ian 24 Sep 23 12:27 text1
-rw-rw-r-- 1 ian ian 25 Sep 23 13:39 text2
-rw-rw-r-- 1 ian ian 84 Sep 25 17:47 text3
-rw-rw-r-- 1 ian ian 26 Sep 25 22:28 text4
-rw-rw-r-- 1 ian ian 24 Sep 26 12:46 text5
-rw-rw-r-- 1 ian ian 98 Sep 26 16:09 text6
-rw-rw-r-- 1 ian ian 15 Sep 23 14:11 xaa
-rw-rw-r-- 1 ian ian 9 Sep 23 14:11 xab
-rw-rw-r-- 1 ian ian 18 Sep 23 14:11 yaa
-rw-rw-r-- 1 ian ian 7 Sep 23 14:11 yab
|
在清单 44 中,第一行显示列出的文件所使用的磁盘块的总数(56)。余下的字段说明文件的情况。
- 第一个字段(在这个示例中是 drwxrwxr-x 或 -rw-rw-r--)说明这是目录(d)还是常规文件(-)。还可能看到符号链接(l)或表示某些特殊文件(比如 /dev 文件系统中的文件)的其他值。类型后面是三组权限(比如 rwx 或 r--),分别针对拥有者、拥有者的组中的成员以及所有用户。组中的三个值分别表示拥有者、组或所有用户是否具有读(r)、写(w)或执行(x)权限。后面会讨论其他使用方式,比如 setuid。
- 下一个字段是一个数字,说明了文件的硬链接 数量。我们说过,inode 包含关于文件的信息。文件的目录项包含到文件的 inode 的硬链接(即指针),所以列出的每个项应该至少有一个硬链接。目录项还有针对 . 项的硬链接以及针对每个子目录的 .. 项的硬链接。所以从上面的清单中可以看到,我的主目录有许多子目录。
- 下两个字段是文件的拥有者和拥有者的主组。某些系统(比如 Red Hat 系统)为每个用户默认提供一个单独的组。在其他系统上,所有用户可能属于一个或几个组。
- 下一个字段包含文件的长度。
- 倒数第二个字段包含最近一次修改的时间戳。
- 最后一个字段包含文件或目录的名称。
ls 命令的 -i 选项显示 inode 号。在本教程后面以及在针对主题 104 的教程中讨论硬链接和符号链接时,我们将使用这个命令。
多个文件
还可以为 ls 命令指定多个参数,其中每个参数是文件或目录的名称。如果参数是目录名称,那么 ls 命令列出这个目录的内容,而不是列出关于目录本身的信息。在我们的示例中,假设希望获得关于 lpi103 目录项本身的信息,就像父目录中列出的一样。命令 ls -l ../lpi103 会给出像前一个示例一样的清单。清单 45 显示如何使用 ls -ld 以及如何列出多个文件或目录。
VqALinux联盟
清单 45. 使用 ls -d
[ian@echidna lpi103]$ ls -ld ../lpi103 sedtab xaa
drwxrwxr-x 2 ian ian 4096 Oct 2 18:49 ../lpi103
-rw-rw-r-- 1 ian ian 8 Sep 26 15:24 sedtab
-rw-rw-r-- 1 ian ian 15 Sep 23 14:11 xaa
|
注意,lpi103 的修改时间与前一个清单中不一样。另外,与前一个清单一样,目录中文件的时间戳不一样。您预料到这种情况了吗?正常情况下不会这样的。但是,在开发本教程时,我创建了一些额外的示例,然后删除了,所以目录时间戳反映了这一事实。在本节后面讨论 搜索文件 时会进一步讨论文件时间。
对输出进行排序
在默认情况下,ls 按照字母表次序列出文件。有许多用于对输出进行排序的选项。例如, ls -t 按照修改时间排序(从最新的到最旧的),而 ls -lS 将按大小次序产生一个长清单(从最大的到最小的)。添加 -r 选项将反转排序次序。例如,使用 ls -lrt 产生从最旧到最新的长清单。列出文件和目录的其他方式请参考手册页。
复制、移动和删除
我们已经学习了一些创建文件的方式,但是可能希望复制文件、对文件进行重命名、在文件系统层次结构中移动文件,甚至删除文件。使用下面这三个命令来完成这些任务。
cp
用于复制一个或多个文件。必须 提供至少两个文件名,一个或多个源 文件名和一个目标 文件名。如果指定两个文件名,那么第一个文件被复制到第二个文件中。源和目标文件名都可以包含路径说明。如果将一个目录指定为最后一个参数,那么可以指定多个要复制进这个目录的文件。将从文件现在的位置复制所有文件,副本的文件名称与原来的文件相同。注意,与 DOS 和 Windows 操作系统不同,并不假设目标目录是当前目录。
mv
用于移动 或重命名 一个或多个文件或目录。使用的名称大体上遵循与 cp 命令相同的规则;可以对单个文件进行重命名,或者将一组文件移动到新目录中。因为名称只是一个链接到 inode 的目录项,所以 inode 号应该不变,除非 文件移动到了另一个文件系统中,在这种情况下,移动文件实际上是复制然后删除原来的文件。
rm
用于删除 一个或多个文件。稍后我们会讨论如何删除目录。
清单 46 演示如何使用 cp 和 mv 创建文本文件的一些备份副本。还使用 ls -i 显示一些文件的 inode。
1. 先将 text1 文件复制为 text1.bkp。
2. 然后使用 mkdir 命令创建一个备份目录。
3. 再建立 text1 的第二个备份副本,这一次在备份目录中,并显示这三个文件的 inode 是不同的。
4. 然后将 text1.bkp 移动到备份目录,并将它重命名以便与第二个备份更一致。其实可以在一个命令中完成这两个操作,这里使用两个命令是为了演示。
5. 再次检查 inode 并确认 inode 为 2129019 的 text1.bkp 已经不在 lpi103 目录中了,这个 inode 现在是备份目录中的 text1.bkp.1。
VqALinux联盟
清单 46. 复制和移动文件
[ian@echidna lpi103]$ cp text1 text1.bkp
[ian@echidna lpi103]$ mkdir backup
[ian@echidna lpi103]$ cp text1 backup/text1.bkp.2
[ian@echidna lpi103]$ ls -i text1 text1.bkp backup
2128984 text1 2129019 text1.bkp
backup:
1564497 text1.bkp.2
[ian@echidna lpi103]$ mv text1.bkp backup
[ian@echidna lpi103]$ mv backup/text1.bkp backup/text1.bkp.1
[ian@echidna lpi103]$ ls -i text1 text1.bkp backup
ls: text1.bkp: No such file or directory
2128984 text1
backup:
2129019 text1.bkp.1 1564497 text1.bkp.2 |
在正常情况下,cp 命令可以覆盖现有的副本,如果现有的文件是可写的话。另一方面,如果目标文件存在,那么 mv 将不会移动或重命名这个文件。对于 cp 和 mv 的这种行为,有几个有用的相关选项可以进行控制。
-f 或 --force
将使 cp 尝试删除现有的目标文件,即使它是不可写的。
-i 或 --interactive
要求在尝试替换现有文件之前进行确认。
-b 或 --backup
对被替换的任何文件建立备份。
关于这些选项和用于复制和移动的其他选项的完整细节,请参考手册页。
在清单 47 中,演示带备份操作的复制以及文件删除。
VqALinux联盟
清单 47. 备份复制和文件删除
[ian@echidna lpi103]$ cp text2 backup
[ian@echidna lpi103]$ cp --backup=t text2 backup
[ian@echidna lpi103]$ ls backup
text1.bkp.1 text1.bkp.2 text2 text2.~1~
[ian@echidna lpi103]$ rm backup/text2 backup/text2.~1~
[ian@echidna lpi103]$ ls backup
text1.bkp.1 text1.bkp.2
|
Linux联盟收集整理 ,转贴请标明原始链接,如有任何疑问欢迎来本站Linux论坛讨论