![ec139c364b314162e7e1b22ca71e6bf7.png](https://img-blog.csdnimg.cn/img_convert/ec139c364b314162e7e1b22ca71e6bf7.png)
1. Linux的文件夹目录的含义
![77b26d422d4261aa48f0135ffe39083e.png](https://img-blog.csdnimg.cn/img_convert/77b26d422d4261aa48f0135ffe39083e.png)
2. 操作文件和目录
- cp:复制文件和目录。
- mv:移动或重命名文件和目录。
- mkdir:创建目录。
- rm:移除文件和目录。
- in:创建硬链接和符号链接。
2.1 通配符
在开始使用命令之前,我们需要介绍一个使命令行如此强大的shell特性。由于shell需要经常使用文件名,因此它提供了一些特殊字符来帮助你快速指定一组文件名。这些特殊字符称为通配符。通配符(也叫文件名替换)允许用户依据字符模式选择文件名。
![321d9e3b9f277a77b175541f8bd37ffe.png](https://img-blog.csdnimg.cn/img_convert/321d9e3b9f277a77b175541f8bd37ffe.png)
![42d4043beffc5d9a39d608e15281170f.png](https://img-blog.csdnimg.cn/img_convert/42d4043beffc5d9a39d608e15281170f.png)
![850746f3c7162abf84e390d7b3a2e1ac.png](https://img-blog.csdnimg.cn/img_convert/850746f3c7162abf84e390d7b3a2e1ac.png)
通配符可以与任一个使用文件名为参数的命令一起使用。
2.2 mkdir--创建目录
mkdir dir1
可创建单个dir1目录,而输入:
mkdir dir1 dir2 dir3
可创建3个目录,分别命名为dir1、dir2和dir3。
2.3 cp--复制文件和目录
cp命令用来复制文件和目录。它有两种不同的使用方式,如下所示。
cp item1 item2
将单个文件或目录item1复制到文件或目录item2中。
cpitem… directory
将多个项目(文件或目录)复制进一个目录中。
![4b78e4c5d88f88b1df3d3055e34508ab.png](https://img-blog.csdnimg.cn/img_convert/4b78e4c5d88f88b1df3d3055e34508ab.png)
![7e406ebad8a3a933a4799ec4fc5db6d3.png](https://img-blog.csdnimg.cn/img_convert/7e406ebad8a3a933a4799ec4fc5db6d3.png)
![3978d0bf088cdda1af612887a791cb20.png](https://img-blog.csdnimg.cn/img_convert/3978d0bf088cdda1af612887a791cb20.png)
2.4 mv--移除和重命名文件
mv的使用方法与cp基本相似。
mv item1 item2
将文件(或目录)item1移动(或重命名)为item2,或是
mvitem…directory
将一个或多个条目从一个目录移动到另一个目录下。
![b7b589717aeced97b12bc21a92033ff0.png](https://img-blog.csdnimg.cn/img_convert/b7b589717aeced97b12bc21a92033ff0.png)
![32d5bd9e7630cc2db837c877164c4165.png](https://img-blog.csdnimg.cn/img_convert/32d5bd9e7630cc2db837c877164c4165.png)
![96223364c3a047e8b3392b26475f3aba.png](https://img-blog.csdnimg.cn/img_convert/96223364c3a047e8b3392b26475f3aba.png)
2.5 rm--删除文件和目录
rmitem…
其中,item是一个或多个文件(或目录)的名称。
小心rm命令
类UNIX操作系统(如Linux)并不包含还原删除操作的命令。一旦使用rm命令,就彻底地删除了。Linux系统默认用户是明智的,并清楚自己在干什么。
rm命令与通配符在一起使用时要特别小心。来看下面这个经典的示例。假设我们只希望删除目录中的HTML文件,为此需要输入以下正确的命令:
rm *.html
如果不小心在*与.html之间多打了一个空格,如下所示:
rm * .html
rm 命令将会删除目录中所有文件,并提示说明目录中没有叫做.html 的文件。提示:
当rm命令与通配符一起使用时,除仔细检查输入内容外,可使用ls命令预先对通配符做出测试,这将显示欲删除的文件。紧接着,你可以按下向上方向键调用之前的命令,并使用rm代替ls。
![c6076c96b817db34812ae46940dd9c75.png](https://img-blog.csdnimg.cn/img_convert/c6076c96b817db34812ae46940dd9c75.png)
![cd3246e1c96b043dd176d34eb9df1b4a.png](https://img-blog.csdnimg.cn/img_convert/cd3246e1c96b043dd176d34eb9df1b4a.png)
2.6 ln--创建链接
ln命令可用来创建硬链接或是符号链接。它的使用方式有两种。
ln file link
用来创建硬链接,而
ln –sitem link
用来创建符号链接,这里的item可以是文件也可以是目录。
硬链接是最初UNIX用来创建链接的方式,符号链接较之更为先进。默认情况下,每个文件有一个硬链接,该硬链接会给文件起名字。当创建一个硬链接的时候,也为这个文件创建了一个额外的目录条目。硬链接有两条重要的局限性。
- 硬链接不能引用自身文件系统之外的文件。也就是说,链接不能引用与该链接不在同一磁盘分区的文件。
- 硬链接无法引用目录。
硬链接和文件本身没有什么区别。与包含符号链接的目录列表不同,包含硬链接的目录列表没有特别的链接指示说明。当硬链接被删除时,只是删除了这个链接,但是文件本身的内容依然存在(也就是说,该空间没有释放),除非该文件的所有链接都被删除了。
因为会经常遇到它们,了解硬链接就显得特别重要。但是现在大多使用的是符号链接,下面将会有所介绍。
符号链接是为了克服硬链接的局限性而创建的。符号链接是通过创建一个特殊类型的文件来起作用的,该文件包含了指向引用文件或目录的文本指针。就这点来看,符号链接与Windows系统下的快捷方式非常相似,但是,符号链接要早于Windows的快捷方式很多年。
符号链接指向的文件与符号链接自身几乎没有区别。例如,将一些东西写进符号链接里,那么这些东西同样也写进了引用文件。而当删除一个符号链接时,删除的只是符号链接而没有删除文件本身。如果先于符号链接之前删除文件,那么这个链接依然存在,但却不指向任何文件。此时,这个链接就称为坏链接。在很多实现中,ls命令会用不同的颜色来显示坏链接,比如红色,从而显示它们的存在。
3. 实战演练
由于我们要做一些实际的文件操作,我们先来创建一个安全的地带,来执行文件操作命令。首先,我们需要一个工作目录。我们在主目录里创建一个目录并命名为playground。
- 创建目录
mkdir命令用来创建一个目录。为了创建playground目录,我们首先要保证当前目录是主目mkdir命令用来创建一个目录。为了创建playground目录,我们首先要保证当前目录是主目录,然后再创建新目录。
[me@linuxbox ~]$cd
[me@linuxbox ~]$mkdir playground
为了让我们的实战演练更有意思,我们在playground目录中新建两个目录,命名为dir1、dir2。为此,我们应先将当前的工作目录切换为playground,然后再次执行mkdir命令。
[me@linuxbox ~]$cd playground
[me@linuxbox playground]$mkdir dir1 dir2
需要注意的是,mkdir命令可以接受多个参数,从而允许我们用一个命令创建两个目录。
2. 复制文件
接下来,让我们在创建的目录中放入一些数据。这一过程可通过文件复制来完成。通过使用cp命令,我们可以将/ect目录中的passwd文件复制到当前工作目录里。
[me@linuxbox playground]$cp /etc/passwd .
注意我们是如何使用当前工作目录的快捷方式的,即在命令末尾加单个句点。如果我们此时执行ls命令,将会看到我们的文件。
[me@linuxbox playground]$ls -l
![4a6ff6cf2177649af31a834f2c4b5c31.png](https://img-blog.csdnimg.cn/img_convert/4a6ff6cf2177649af31a834f2c4b5c31.png)
现在让我们使用-v选项,重复操作复制命令,来看看结果如何。
[me@linuxbox playground]$cp -v /etc/passwd .
'/etc/passwd' -> './passwd'
cp命令再次执行复制操作,但是,这一次显示了一条简洁的信息来指明它正在执行什么操作。需要注意的是,在没有任何警告的情况下,cp命令覆盖了第一次的复制内容。cp命令会假定用户清楚自己当前的操作。加上-i(交互式)选项可以获得警告信息。
![3eb56395d02b1ab2458fa43fc059cf6c.png](https://img-blog.csdnimg.cn/img_convert/3eb56395d02b1ab2458fa43fc059cf6c.png)
3. 移动和重命名文件
现在,passwd这个名字似乎没有那么有趣,而我们毕竟是在进行实战演练,因此我们给它改个名字。
[me@linuxbox playground]$mv passwd f
![513cf4f18ef139783e0923e6bf16fca5.png](https://img-blog.csdnimg.cn/img_convert/513cf4f18ef139783e0923e6bf16fca5.png)
现在传送fun文件,这是通过将重命名的文件移动到各个目录,然后再移动回当前目录来实现的:
[me@linuxbox playground]$mv fun dir1
首先移到目录dir1下,然后:
[me@linuxbox playground]$ mv dir1/fun dir2
将文件从目录dir1移到dir2,然后:
[me@linuxbox playground]$mv dir2/fun .
再将文件fun重新移到当前工作目录下。下面来看mv命令的效果。首先,再次将数据文件移到目录dir1。
![7228e87a684cf4b71ca31f7cea367645.png](https://img-blog.csdnimg.cn/img_convert/7228e87a684cf4b71ca31f7cea367645.png)
![b2853e8e9a79bffe84d1a8025990a1eb.png](https://img-blog.csdnimg.cn/img_convert/b2853e8e9a79bffe84d1a8025990a1eb.png)
4 创建硬链接
现在,我们试着创建一些链接。首先是创
建硬链接,我们先按照如下方式创建一些指向数据文件的链接:
![aa842f4b1b6742156806dd7606663c95.png](https://img-blog.csdnimg.cn/img_convert/aa842f4b1b6742156806dd7606663c95.png)
可以注意到,在列表中,文件fun和fun-hard的第二个字段都是4,这是文件fun存在的硬链接数目。你要记得,由于文件名是由链接创建的,所以一个文件通常至少有一个链接。那么,我们是如何知道fun和fun-hard实际上是同一个文件的呢?这种情况下,ls命令无济于事。虽然从第5个字段得知fun和fun-hard文件大小相同,但是我们的列表并没有提供可靠的方式来确认它们是否是同一个文件。要解决这个问题,必须做进一步研究。
提到硬链接时,可以想象文件是由两部分组成的,即包含文件内容的数据部分和包含文件名的名称部分。创建硬链接时,实际上是创建了额外的名称,这些名称都指向同一数据部分。系统分配了一系列的盘块给所谓的索引节点(inode),该节点随后与文件名称部分建立关联。因此,分配了一系列的盘块给所谓的索引节点(inode),该节点随后与文件名称部分建立关联。因此,每个硬链接都指向包含文件内容的具体索引节点。
ls命令有一种方式可以显示上述信息。它是通过在命令中加上-i选项来实现的。
[me@linuxbox playground]$ls -li
![407e1d5bde11298bf387d915c526533c.png](https://img-blog.csdnimg.cn/img_convert/407e1d5bde11298bf387d915c526533c.png)
5 创建符号链接
只所以创建符号链接,是为了克服硬链接的两大不足,即硬链接无法跨越物理设备,也无法引用目录,只能引用文件。符号链接是一种特殊类型的文件,它包含了指向目标文件或目录的文本指针。
创建符号链接与创建硬链接相似,如下所示。
![512bf9e22ae2328650fee0d6927b8086.png](https://img-blog.csdnimg.cn/img_convert/512bf9e22ae2328650fee0d6927b8086.png)
在目录dir1中,fun-sym的列表显示它是一个符号链接,这是通过第1个字段中的首字符“l”来确认的,并且它也指“../fun”,这也是正确的。相对于fun-sym的实际位置,文件fun在它的上一级目录。还要注意到,符号链接文件的长度是6,这是“../fun”字符串中字符的数目,而不是它所指向的文件的长度。
创建符号链接时,可以使用绝对路径名,如下所示:
[me@linuxbox playground]$ln -s /home/me/playground/fun dir1/fun-sym
也可以使用相对路径,如前面的示例所示。因为相对路径允许包含符号链接的目录被重命名和/或移动,而且不会破坏链接,因此更可取一些。
除了普通文件之外,符号链接也可以引用目录。
![287be6acf79af8ad8700134336b69844.png](https://img-blog.csdnimg.cn/img_convert/287be6acf79af8ad8700134336b69844.png)
6 移除文件和目录
前面讲到,使用rm命令可以删除文件和目录。那么我们就用它来清空playground目录。首先,我们删除目录中的一个硬链接。
[me@linuxbox playground]$rm fun-hard
[me@linuxbox playground]$ls -l
![5976ec76f96146919d504a9006ef7cb8.png](https://img-blog.csdnimg.cn/img_convert/5976ec76f96146919d504a9006ef7cb8.png)
不出所料,文件file-hard被删除了,文件fun的链接数相应的也由4变成了3,如目录列表的第二个字段所示。接下来,我们删除文件fun,为了好玩,我们还会加上-i选项,看看执行了哪些操作。
[me@linuxbox playground]$rm -i fun
rm:remove regular file 'fun'?
在提示符下输入字符y,文件就被删除了。现在看一下ls命令的输出。注意fin-sym文件发生了什么变化?由于它是一个符号链接,且指向的文件现在已经不存在,所以链接也就破坏了。
![88644a571e7122d57397b9fced6b4340.png](https://img-blog.csdnimg.cn/img_convert/88644a571e7122d57397b9fced6b4340.png)
大多数Linux发行版会配置ls命令,来显示破坏的链接。在Fedora系统中,破坏的链接是以闪烁的红色来显示的!受破坏的链接并不危险,但是会相当混乱麻烦。如果试图调用破坏的链接,将会看到如下情况:
[me@linuxbox playground]$less fun-sym
fun-sym:No such file or directory
稍微清理一下。我们准备删除符号链接。
[me@linuxbox playground]$rm fun-sym dir1-s
![2d3e4facc5620f34b614cfa01fddecee.png](https://img-blog.csdnimg.cn/img_convert/2d3e4facc5620f34b614cfa01fddecee.png)
![cd1334caaa6d9d1b80502cca8b83c062.png](https://img-blog.csdnimg.cn/img_convert/cd1334caaa6d9d1b80502cca8b83c062.png)
有关符号链接,需要记住一点,即大部分文件操作是以链接目标为对象的,而非链接本身。而rm命令是个例外。当删除一个链接的时候,链接本身被删除,但是目标文件依旧存在。
最后,我们需要删除目录playground。为此,我们将返回主目录,使用rm命令的递归选项(-r)来删除playground目录以及包括子目录在内的所有内容。