Linux学习第三天--操作文件和目录

版权声明:尊重他人劳动成果,转载请注明出处 https://blog.csdn.net/qq_41432935/article/details/83753894

此时此刻,我们已经准备好了做些真正的工作!这一章节将会介绍以下命令:

  • cp -复制文件和目录
  • mv -移动/重命名文件和目录
  • mkdir -创建目录
  • rm -删除文件和目录
  • ln -创建硬链接和符号链接

这五个命令属于最长使用的Linux命令之列.它们用来操作文件和目录

现在,坦诚地说,用图形文件管理器来完成一些由这些命令执行的任务会更容易些。使用文件管理器, 我们可以把文件从一个目录拖放到另一个目录、剪贴和粘贴文件、删除文件等等。那么, 为什么还使用早期的命令行程序呢?

答案是命令行程序,功能强大灵活。虽然图形文件管理器能轻松地实现简单的文件操作,但是对于 复杂的文件操作任务,则使用命令行程序比较容易完成。例如,怎样拷贝一个目录下所有的HTML文件 ——这些文件在目标目录不存在或者版本比目标目录的文件更新——到目标目录呢? 要完成这个任务,使用文件管理器相当难,使用命令行相当容易:

cp -u *.html destination

通配符

通配符 意义
* 匹配任意多个字符(包括零个或者一个)
? 匹配任意一个字符(不包括零个)
[characters] 匹配任意一个属于characters的字符
[!characters] 匹配任意一个不是characters的字符
[[:class:]] 匹配任意一个属于指定字符类中的字符

最常使用的字符类

字符类 意义
[:alnum:] 匹配任意一个字母或数字
[:alpha:] 匹配任意一个字母
[:digit:] 匹配任意数字
[:lower:] 匹配任意一个小写字母
[:upper:] 匹配任意一个大写字母

借助通配符,为文件名构建非常复杂的选择标准成为可能。下面是一些类型匹配的范例:

模式 匹配对象
* 所有文件
g* 文件名以"g"开头的文件
b*.txt 以"b"开头,中间有零个或任意多个字符,并以".txt"结尾的文件
Data??? 以“Data”开头,其后紧接着3个字符的文件
[abc]* 文件名以"a",“b”,或"c"开头的文件
BACKUP.[0-9][0-9][0-9] 以"BACKUP."开头,并紧接着3个数字的文件
[[:upper:]]* 以大写字母开头的文件
[![:digit:]]* 不以数字开头的文件
*[[:lower:]123] 文件名以小写字母结尾,或以 “1”,“2”,或 “3” 结尾的文件

接受文件名作为参数的任何命令,都可以使用通配符

mkdir -创建目录

mkdir 命令是用来创建目录的。它这样工作:

mkdir directory...
mkdir dir1

会创建一个名为”dir1”的目录,而

mkdir dir1 dir2 dir3

会创建3个目录,名为 dir1, dir2, dir3。

cp -复制文件和目录

cp 命令,复制文件或者目录。它有两种使用方法:

cp item1 item2

复制单个文件或目录”item1”到文件或目录”item2”

复制多个项目(文件或目录)到一个目录下。

cp item... directory
有用的选项和实例

这里列举了 cp 命令一些有用的选项(短选项和等效的长选项):

选项 意义
-a, --archive 复制文件和目录,以及它们的属性,包括所有权和权限。 通常,复本具有用户所操作文件的默认属性。
-i, --interactive 在重写已存在文件之前,提示用户确认。如果这个选项不指定, cp 命令会默认重写文件。
-r, --recursive 递归地复制目录及目录中的内容。当复制目录时, 需要这个选项(或者-a 选项)。
-u, --update 当把文件从一个目录复制到另一个目录时,仅复制 目标目录中不存在的文件,或者是文件内容新于目标目录中已经存在的文件。
-v, --verbose 显示复制的命令操作信息

cp 实例

命令 运行结果
cp file1 file2 复制文件 file1 内容到文件 file2。如果 file2 已经存在, file2 的内容会被 file1 的内容重写。如果 file2 不存在,则会创建 file2。
cp -i file1 file2 这条命令和上面的命令一样,除了如果文件 file2 存在的话,在文件 file2 被重写之前, 会提示用户确认信息。
cp file1 file2 dir1 复制文件 file1 和文件 file2 到目录 dir1。目录 dir1 必须存在。
cp dir1/* dir2 使用一个通配符,在目录 dir1 中的所有文件都被复制到目录 dir2 中。 dir2 必须已经存在。
cp -r dir1 dir2 复制目录 dir1 中的内容到目录 dir2。如果目录 dir2 不存在, 创建目录 dir2,操作完成后,目录 dir2 中的内容和 dir1 中的一样。 如果目录 dir2 存在,则目录 dir1 (和目录中的内容)将会被复制到 dir2 中。

mv -移动和重命名文件

mv 命令可以执行文件移动和文件命名任务,这依赖于你怎样使用它。任何一种 情况下,完成操作之后,原来的文件名不再存在。mv 使用方法与 cp 很相像:

mv item1 item2

把文件或目录 “item1” 移动或重命名为 “item2”, 或者:

mv item... directory

把一个或多个条目从一个目录移动到另一个目录中

有用的选项和实例

mv 与 cp 共享了很多一样的选项:
mv 选项

选项 意义
-i --interactive 在重写一个已经存在的文件之前,提示用户确认信息。 如果不指定这个选项,mv 命令会默认重写文件内容。
-u --update 当把文件从一个目录移动另一个目录时,只是移动不存在的文件, 或者文件内容新于目标目录相对应文件的内容。
-v --verbose 当操作 mv 命令时,显示详细的操作信息。

mv实例

move file1 file2 移动 file1 到 file2。如果 file2 存在,它的内容会被 file1 的内容重写。 如果 file2 不存在,则创建 file2。 这两种情况下,file1 都不再存在。
mv -i file1 file2 除了如果 file2 存在的话,在 file2 被重写之前,用户会得到 提示信息外,这个和上面的选项一样。
mv file1 file2 dir1 移动 file1 和 file2 到目录 dir1 中。dir1 必须已经存在。
mv dir1 dir2 如果目录 dir2 不存在,创建目录 dir2,并且移动目录 dir1 的内容到 目录 dir2 中,同时删除目录 dir1。如果目录 dir2 存在,移动目录 dir1(及它的内容)到目录 dir2。

rm -删除文件和目录

rm 命令用来移除(删除)文件和目录:

rm item...

“item”代表一个或多个文件或目录。

有用的选项和实例

下表是一些普遍使用的选项
rm选项

选项 意义
-i, --interactive 递归地删除文件,这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。要删除一个目录,必须指定这个选项
-r, --recursive 递归地删除文件,这意味着,如果要删除一个目录,而此目录 又包含子目录,那么子目录也会被删除。要删除一个目录,必须指定这个选项。
-f, --force 忽视不存在的文件,不显示提示信息。这选项覆盖了“–interactive”选项。
-v, --verbose 在执行 rm 命令时,显示的详细操作信息。

rm 实例

命令 运行结果
rm file1 默默地删除文件
rm -i file1 除了在删除文件之前,提示用户确认信息之外,和上面的命令作用一样。
rm -r file1 dir1 删除文件 file1, 目录 dir1,及 dir1 中的内容。
rm -rf file1 dir1 同上,除了如果文件 file1,或目录 dir1 不存在的话,rm 仍会继续执行。

ln -创建链接

ln命令即可创建硬链接, 也可以创建符号链接. 可以用其中一种方法来使用它

ln file link

创建硬链接,和:

ln -s item link

创建符号链接,"item"可以是一个文件或是一个目录

硬链接

与更加现代的符号链接相比,硬链接是最初 Unix 创建链接的方式。每个文件默认会有一个硬链接, 这个硬链接给予文件名字。我们每创建一个硬链接,就为一个文件创建了一个额外的目录项。 硬链接有两个重要局限性:

  1. 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联 与链接本身不在同一个磁盘分区上的文件。
  2. 一个硬链接不能关联一个目录。
符号链接

创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个 特殊类型的文件,这个文件包含一个关联文件或目录的文本指针。在这一方面, 它们和 Windows 的快捷方式差不多,当然,符号链接早于 Windows 的快捷方式 很多年;-)

一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。 例如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而, 当你删除一个符号链接时,只有这个链接被删除,而不是文件自身。如果先于符号链接 删除文件,这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为 坏链接。在许多实现中,ls 命令会以不同的颜色展示坏链接,比如说红色,来显示它们 的存在。
关于链接的概念,看起来很迷惑,但不要胆怯。我们将要试着练习 这些命令,希望,它变得清晰起来。

实战演习

下面我们将要做些真正的文件操作,让我们先建立一个安全地带, 来玩一下文件操作命令。首先,我们需要一个工作目录。在我们的 家目录下创建一个叫做“playground”的目录。
现在,我们试着创建链接。首先是硬链接。我们创建一些关联我们 数据文件的链接:

root@iZbp1964mdfcasypu6zftxZ:~/playground# ln fun fun-hard
root@iZbp1964mdfcasypu6zftxZ:~/playground# ln fun dir1/fun-hard
root@iZbp1964mdfcasypu6zftxZ:~/playground# ln fun dir2/fun-hard

所以现在,我们有四个文件”fun”的实例。看一下目录 playground 中的内容:

root@iZbp1964mdfcasypu6zftxZ:~/playground# ls -l
total 16
drwxr-xr-x 2 root root 4096 Nov 10 10:27 dir1
drwxr-xr-x 2 root root 4096 Nov 10 10:27 dir2
-rw-r--r-- 4 root root 1535 Nov  9 16:23 fun
-rw-r--r-- 4 root root 1535 Nov  9 16:23 fun-hard

注意到一件事,列表中,文件 fun 和 fun-hard 的第二个字段是”4”,这个数字 是文件”fun”的硬链接数目。你要记得一个文件至少有一个硬链接,因为文件 名就是由链接创建的。那么,我们怎样知道实际上 fun 和 fun-hard 是同一个文件呢? 在这个例子里,ls 不是很有用。虽然我们能够看到 fun 和 fun-hard 文件大小一样 (第五字段),但我们的列表没有提供可靠的信息来确定(这两个文件一样)。 为了解决这个问题,我们更深入的研究一下。
当考虑到硬链接的时候,我们可以假设文件由两部分组成:包含文件内容的数据部分和持有文件名的名字部分 ,这将有助于我们理解这个概念。当我们创建文件硬链接的时候,实际上是为文件创建了额外的名字部分, 并且这些名字都关联到相同的数据部分。这时系统会分配一连串的磁盘块给所谓的索引节点,然后索引节点与文 件名字部分相关联。因此每一个硬链接都关系到一个具体的包含文件内容的索引节点。
ls 命令有一种方法,来展示(文件索引节点)的信息。在命令中加上”-i”选项:

root@iZbp1964mdfcasypu6zftxZ:~/playground# ls -li
total 16
1058408 drwxr-xr-x 2 root root 4096 Nov 10 10:27 dir1
1058412 drwxr-xr-x 2 root root 4096 Nov 10 10:27 dir2
1058413 -rw-r--r-- 4 root root 1535 Nov  9 16:23 fun
1058413 -rw-r--r-- 4 root root 1535 Nov  9 16:23 fun-hard

猜你喜欢

转载自blog.csdn.net/qq_41432935/article/details/83753894