整理自《快乐的linux命令行一书》。
linux系统版本: Ubuntu 17.04
4、操作文件和目录
这一章主要介绍的命令有:
cp : 复制文件和目录
mv : 移动/重命名文件和目录
mkdir : 创建目录
rm : 删除文件和目录
ln : 创建硬链接和符号链接
通配符
shell提供了特殊字符来帮助你快速指定一组文件名。这些特殊字符叫做通配符。shell中使用的通配符有:
通配符 | 意义 |
---|---|
* | 匹配任意多个字符 |
? | 匹配任意一个字符 |
[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]]* | 不以数字开头的文件 |
mkdir 创建目录
使用如下的语法创建目录:
mkdir directory...
上面的...意味着参数可以重复,即可以创建一个或多个目录,比如创建dir1,dir2,dir3三个目录:
mkdir dir1 dir2 dir3
cp -复制文件和目录
cp有两种基本的用法:
1、复制单个文件或目录item1 到文件或目录item2下:
cp item1 item2
2、复制多个项目(文件或者目录)到一个目录下:
cp item... directory
cp命令有一些常用的选项:
选项 | 意义 |
---|---|
-a,--archive | 复制文件和目录,以及他们的属性,包括所有权和权限 |
-i,--interactive | 在重写已存在文件时,提示用户确认 |
-r,--recursive | 递归复制目录及目录中的内容 |
-u,--update | 当把文件从一个目录复制到另一个目录时,仅复制目标目录不存在的文件,或者是文件内容新于目标目录中已经存在的文件 |
-v,--verbose | 显示翔实的命令操作信息 |
mv-移动和重命名文件
与cp命令类似,mv有两种基本的用法:
1、移动或重命名单个文件或目录item1 到文件或目录item2下:
mv item1 item2
2、移动多个项目(文件或者目录)到一个目录下:
mv item... directory
mv命令有一些常用的选项:
选项 | 意义 |
---|---|
-i,--interactive | 在重写已存在文件时,提示用户确认 |
-u,--update | 当把文件从一个目录复制到另一个目录时,仅复制目标目录不存在的文件,或者是文件内容新于目标目录中已经存在的文件 |
-v,--verbose | 显示翔实的命令操作信息 |
rm -删除文件或目录
rm可以用来删除一个或者多个文件或目录:
rm item...
rm命令有一些常用的选项:
选项 | 意义 |
---|---|
-i,--interactive | 在删除已存在文件时,提示用户确认 |
-r,--recursive | 递归地删除文件 |
-v,--verbose | 显示翔实的命令操作信息 |
-f,--force | 忽视不存在的文件,使用该选项使-i选项无效 |
ln-创建连接
连接分为硬链接和符号链接。
使用如下的命令格式创建硬链接:
ln file link
在默认情况下,每个文件都有一个硬链接,这个硬链接给文件起名字,当我们创建一个硬连接以后,相当于给文件创建了一个额外的目录条目。硬链接不能关联它所在文件系统之外的文件,同时不能关联一个目录。我感觉硬链接就是将文件复制了一份。当一个硬链接被删除时,这个链接被删除,但文件本身的内容仍然存在,直到所有关联这个文件的连接都删除掉。
我们使用如下的命令格式创建符号链接
ln -s item link
符号链接类似于我们windows的快捷方式,如果你往一个符号链接里面写入东西,相关联的文件内容也被改变。如果删除一个符号连接时,只有这个链接被删除,文件本身不会受到影响。如果删除文件而没有删除链接,那么这个链接仍然存在,但是不会指向任何东西,想象一下windows的快捷方式,如果文件被删除了,再打开快捷方式会显示找不到改文件。
实战练习
接下来我们就实战一下刚才所介绍的内容。
首先我们创建一个playground目录,并在里面新建两个目录dir1和dir2.
接下来,我们从/etc目录复制passwd文件到当前目录,我们总共复制了三次,第一次不带任何参数,第二次加入了-v参数,它显示出了详细的复制信息,第三次添加了-i参数,由于passwd已经存在于当前目录下了,再进行复制就会覆盖原有文件,所以显示了是否覆盖的提示信息,我们这里输入y表示重写。
接下来我们使用mv命令重命名passwd文件为fun文件:接下来,我们给fun文件创建三个硬链接,查看playground文件夹下的内容:
还记得上一章讲过的知识,ls -l显示的文件详细信息中的第二个数 也就是4,代表的是文件硬链接的个数,我们可以看到fun和fun-hard硬链接个数都是4.在这里,其实fun和fun-hard其实是同样的文件,这是一个很重要的知识。我们怎么来理解这一点呢,我们可以把文件想象成两部分,数据部分和名字部分,系统分配了一些类的盘块给文件的内容并产生了一系列的索引节点,而每当一个硬链接产生,它都会指向一个索引节点,这个索引节点包含了文件的内容。我们可以在ls命令上添加-l选项来查看文件索引节点的信息,可以看到fun和fun-hard指向的索引节点相同:
接下来我们再创建三个符号链接:
要注意到
这里的第二三条创建符号链接时,要使用相对于dir1的fun文件所在位置,所以使用的../fun,表示是对dir1和dir2上层目录中的fun文件创建的符号链接。
然后我们删除fun文件,并查看fun-sym的内容,可以发现,连接已经损坏,无法查看其指向的内容。
最后我们将playground文件夹删除,大功告成!
回顾
本章我们介绍了如下命令的使用:
cp : 复制文件和目录
mv : 移动/重命名文件和目录
mkdir : 创建目录
rm : 删除文件和目录
ln : 创建硬链接和符号链接
如果你喜欢我写的文章,可以帮忙给小编点个赞或者加个关注,我一定会互粉的!
如果大家对linux感兴趣,欢迎跟小编进行交流,小编微信为sxw2251,加我要写好备注哟!