《快乐的Linux命令行》学习记录——操作文件和目录

版权声明:共同提高:) https://blog.csdn.net/u011436427/article/details/83034132

这一章节将会介绍以下命令:
• cp —复制文件和目录
• mv —移动/重命名文件和目录
• mkdir —创建目录
• rm —删除文件和目录
• ln —创建硬链接和符号链接

命令行程序,功能强大灵活。虽然图形文件管理器能轻松地实现简单的文件操作,但是对于复杂的文件操作任务,则使用命令行程序比较容易完成

1 通配符
因为 shell 频繁地使用文件名, shell 提供了特殊字符来帮助你快速指定一组文件名。这些特殊字符叫做通配符。使用通配符(也以文件名代换著称)允许你依据字符类型选择文件名

通配符的符号
在这里插入图片描述

最常使用的字符类
在这里插入图片描述

重点关注常用的类型匹配的例子
在这里插入图片描述

mkdir是用来创建目录的

mkdir directory…

当有三个圆点跟在一个命令的参数后面,这意味着那个参数可以重复
eg:

mkdir dir1 dir2 dir3

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

2 cp —复制文件和目录
cp 命令:复制文件或者目录
使用方法:
1)

cp item1 item2

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

2)

cp item… directory

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

3 有用的选项和实例(这种东西最好结合具体eg使用比较好)
短选项和等效的长选项
在这里插入图片描述
在这里插入图片描述

重点关注cp实例
在这里插入图片描述

4 mv —移动和重命名文件
mv 命令可以执行文件移动和文件命名任务,任何一种情况下,完成操作之后,原来的文件名不再存在。

mv item1 item2

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

mv item… directory

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

5 有用的选项和实例

mv的一些选项
在这里插入图片描述

关于mv的具体的重要例子
在这里插入图片描述

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

rm item…

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

6 有用的选项和实例
rm选项
在这里插入图片描述

具体的rm实例
在这里插入图片描述

注意:rm与通配符一起使用的时候,先要用ls命令测试通配符,最好看一下要删除的文件列表

7 ln —创建链接
ln 命令即可创建硬链接,也可以创建符号链接
1)创建硬链接

ln file link

2)创建符号链接

ln -s item link

“item” 可以是一个文件或是一个目录

8 硬链接(了解)
硬链接就是给文件起名字,当我们创建一个硬链接以后,就为文件创建了一个额外的目录条目,但是硬链接有两个局限性:

  1. 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联与链接本身不在同一个磁盘分区上的文件
  2. 一个硬链接不能关联一个目录
    当一个硬链接被删除时,这个链接被删除,但是文件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配),直到所有关联这个文件的链接都删除掉

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

一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。例如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而,当你删除一个符号链接时,只有这个链接被删除,而不是文件自身。如果删除这个文件早于文件的符号链接,这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为坏链接(ls命令会显示为红色)。

(实战演习)

=============================================================================
10 创建游戏场

首先,我们需要一个工作目录。在我们的主目录下创建一个叫做 “playground” 的目录。
1 创建目录

[me@linuxbox ~]$ cd
[me@linuxbox ~]$ mkdir playground

在 playground 目录下创建一对目录,分别叫做 “dir1”和”dir2”

[me@linuxbox ~]$ cd playground
[me@linuxbox playground]$ mkdir dir1 dir2

2 复制文件

使用 cp命令,我们从/etc 目录复制 passwd 文件到当前工作目录下

[me@linuxbox playground]$ cp /etc/passwd .

注意:我们怎样使用当前工作目录的快捷方式,命令末尾的单个圆点

如果我们执行 ls 命令,可以看到我们的文件:

[me@linuxbox playground]$ ls -l
total 12
drwxrwxr-x 2 me me 4096 2008-01-10 16:40 dir1
drwxrwxr-x 2 me me 4096 2008-01-10 16:40 dir2
-rw-r–r-- 1 me me 1650 2008-01-10 16:07 passwd

重复操作复制命令,使用 “-v” 选项(唠叨),看一个它的作用。cp 命令再一次执行了复制操作,但是这次显示了一条简洁的信息,指明它进行了什么操作。注意, cp 没有警告,就重写了第一次复制的文件。这是一个案例, cp 假定你知道你的所作所为。

[me@linuxbox playground]$ cp -v /etc/passwd .
/etc/passwd' ->./passwd’

为了得到警示信息,在命令中包含 “-i” 选项:

[me@linuxbox playground]$ cp -i /etc/passwd .
cp: overwrite `./passwd’?

响应命令提示信息,输入 “y”,文件就会被重写,其它的字符(例如, ”n”)会导致 cp 命令不理会文件

3 移动和重命名文件

首先,把 fun 文件移动目录 dir1 中

[me@linuxbox playground]$ mv passwd fun

再把 fun 文件从 dir1 移到目录 dir2,

[me@linuxbox playground]$ mv dir1/fun dir2

最后,再把 fun 文件带回到当前工作目录。

[me@linuxbox playground]$ mv dir2/fun .

下一步,来看看移动目录的效果。首先,我们先移动我们的数据文件到 dir1 目录:

[me@linuxbox playground]$ mv fun dir1

然后移动 dir1 到 dir2 目录,用 ls 来确认执行结果

[me@linuxbox playground]$ mv dir1 dir2
[me@linuxbox playground]$ ls -l dir2
total 4
drwxrwxr-x 2 me me 4096 2008-01-11 06:06 dir1
[me@linuxbox playground]$ ls -l dir2/dir1
total 4
-rw-r–r-- 1 me me 1650 2008-01-10 16:33 fun

最后,把所有的东西放回原处。

[me@linuxbox playground]$ mv dir2/dir1 .
[me@linuxbox playground]$ mv dir1/fun .

4 创建硬链接
创建一些关联我们数据文件的链接,想象文件是由两部分组成:数据部分包含文件的内容,名字部分包含文件的名字。当我们创建了文件的硬链接,实际上,我们给文件添加了额外的名字,这些名字都涉及一样的数据内容。

首先,创建一些关联我们数据文件的链接:

[me@linuxbox playground]$ ln fun fun-hard
[me@linuxbox playground]$ ln fun dir1/fun-hard
[me@linuxbox playground]$ ln fun dir2/fun-hard

看一下目录 playground 中的内容:

[me@linuxbox playground]$ ls -l
total 16
drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir1
drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir2
-rw-r–r-- 4 me me 1650 2008-01-10 16:33 fun
-rw-r–r-- 4 me me 1650 2008-01-10 16:33 fun-hard

在这个例子里, ls 不是很有用。虽然我们能够看到 fun 和 fun-hard 文件大小一样(第五字段),但我们的列表没有提供可靠的信息来确定(这两个文件一样)。

ls 命令有一种方法,来展示(文件索引节点)的信息,系统分配了一系列的盘块给所谓的索引节点,它和文件名字想关联。因此每个硬链接都关系到一个具体的索引节点,这个节点包含了文件的内
容。

[me@linuxbox playground]$ ls -li
total 16
12353539 drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir1
12353540 drwxrwxr-x 2 me me 4096 2008-01-14 16:17 dir2
12353538 -rw-r–r-- 4 me me 1650 2008-01-10 16:33 fun
12353538 -rw-r–r-- 4 me me 1650 2008-01-10 16:33 fun-hard

第一字段表示文件索引节点号,正如我们所见到的, fun 和 fun-hard共享一样的索引节点号,这就证实这两个文件是一样的文件。

5 创建符号链接
建立符号链接的目的是为了克服硬链接的两个缺点:
1)硬链接不能跨越物理设备
2)硬链接不能关联目录,只能是文件

符号链接是文件的特殊类型,它包含一个指向目标文件或目录的文本指针

第一个实例相当直接,在 ln 命令中,简单地加上 “-s” 选项就可以创建一个符号链接,而不是一个硬链接。

[me@linuxbox playground]$ ln -s fun fun-sym
[me@linuxbox playground]$ ln -s …/fun dir1/fun-sym
[me@linuxbox playground]$ ln -s …/fun dir2/fun-sym

记住,当我们创建一个符号链接的时候,会建立一个目标文件在哪里和符号链接有关联的文本描述
如果我们看看 ls 命令的输出结果,比较容易理解

[me@linuxbox playground]$ ls -l dir1
total 4
-rw-r–r-- 4 me me 1650 2008-01-10 16:33 fun-hard
lrwxrwxrwx 1 me me 6 2008-01-15 15:17 fun-sym -> …/fun

目录 dir1 中, fun-sym 的列表说明了它是一个符号链接,通过在第一字段中的首字符 “l”可知,并且它还指向 “…/fun”,也是正确的。相对于 fun-sym 的存储位置, fun 在它的上一个目录。同时注意,符号链接文件的长度是 6,这是字符串 “…/fun” 所包含的字符数,而不是符号链接所指向的文件长度

当简历符号链接的时候,可以使用的两种方式:
1)使用绝对路径

ln -s /home/me/playground/fun dir1/fun-sym

2)使用相对路径
使用相对路径名更令人满意,因为它允许一个包含符号链接的目录重命名或移动,而不会破坏链接。

除了普通文件,符号链接也能关联目录:

[me@linuxbox playground]$ ln -s dir1 dir1-sym
[me@linuxbox playground]$ ls -l
total 16
… 省略

6 移动文件和目录
rm 命令被用来删除文件目录

首先,删除一个硬链接:

[me@linuxbox playground]$ rm fun-hard
[me@linuxbox playground]$ ls -l
total 12
… 省略

下一步,我们会删除文件 fun,我们会包含 “-i” 选项,看一个它的作用:

[me@linuxbox playground]$ rm -i fun
rm: remove regular file `fun’?

在提示符下输入 “y”,删除文件。让我们看一下 ls 的输出结果。注意, fun-sym 发生了什么事? 因为它是一个符号链接,指向已经不存在的文件,链接已经坏了(大多数 Linux 的发行版本配置 ls 显示损坏的链接。在 Fedora 系统中,坏的链接以闪烁的红色文本显示!):

如果我们试着使用损坏的链接,会看到以下情况:

[me@linuxbox playground]$ less fun-sym
fun-sym: No such file or directory

稍微清理一下现场。删除符号链接:

[me@linuxbox playground]$ rm fun-sym dir1-sym
[me@linuxbox playground]$ ls -l
total 8
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir1
drwxrwxr-x 2 me me 4096 2008-01-15 15:17 dir2

对于符号链接,有一点值得记住,执行的大多数文件操作是针对链接的对象,而不是链接本身。

用 rm 命令加上选项 (-r),来删除目录 playground,和目录下的所有内容,包括子目录:

[me@linuxbox playground]$ cd
[me@linuxbox ~]$ rm -r playground

猜你喜欢

转载自blog.csdn.net/u011436427/article/details/83034132