目录
通配符
mkdir – 创建目录
cp – 复制文件和目录
mv – 移动和重命名文件
rm – 删除文件和目录
ln – 创建链接
硬链接
符号链接
本文介绍Linux用于操作文件和目录的命令,介绍的命令有:
- cp – 复制文件和目录
- mv – 移动/重命名文件和目录
- mkdir – 创建目录
- rm – 删除文件和目录
- ln – 创建硬链接和符号链接
通配符
在开始使用命令之前,我们先介绍一个强大的shell特性。shell提供了特殊字符来帮助我们快速指定一组文件名,这些特殊字符叫做通配符。使用通配符允许我们依据字符的组合模式来选择文件名。下表列出了这些通配符以及它们所选择的对象:
通配符 | 意义 |
* | 匹配任意多个字符(包括零个或一个) |
? | 匹配任意一个字符(不包括零个) |
[characters] | 匹配任意一个属于字符集中的字符 |
[!characters] | 匹配任意一个不是字符集中的字符 |
[[:class:]] | 匹配任意一个属于指定字符类中的字符 |
下表列出了最常用的字符类:
字符类 | 意义 |
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母 |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[:upper:] | 匹配任意一个大写字母 |
借助通配符,为文件名构建非常复杂的选择标准成为可能。下表列举出了一些类型匹配的示例:
模式 | 匹配对象 |
* | 所有文件 |
g* | 文件名以“g”开头的文件 |
a*.txt | 以“a”开头,中间有零个或任意多个字母,并以“.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
会创建三个目录,分别为dir1、dir2和dir3。
cp – 复制文件和目录
cp命令,复制文件或者目录。它有两种使用方法:
cp item1 item2
复制单个文件或目录“item1”到文件或目录“item2”,和:
cp item... directory
复制多个项目(文件或目录)到一个目录下。
接下来我们列举了一些cp命令有用的选项和相关实例,具体如下面表格所示。
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共享了很多一样的选项:
选项 | 长选项 | 描述 |
-i | –interactive | 在重写一个已经存在的文件之前,提示用户确认信息。如果不指定这个选项,mv命令会默认重写文件内容。 |
-u | –update | 当把文件从一个目录移动到另一个目录时,只是移动不存在的文件,或者文件内容新于目标目录相应文件的内容。 |
-v | –verbose | 当操作mv命令时,显示翔实的操作信息。 |
下表列举了mv命令的一些操作实例:
命令 | 运行结果 |
mv 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 | 在删除已存在的文件前,提示用户确认信息。如果不指定这个选项,rm会默默地删除文件。建议在删除文件时使用该选项,以避免误删文件。 |
-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仍会继续执行。 |
小心使用rm!
类Unix的操作系统,比如说Linux,没有复原命令。一旦你用了rm删除了一些东西,它就消失了。
ln – 创建链接
ln命令既可以创建硬链接,也可以创建符号链接。可以用其中一种方法来使用它:
ln file link
创建硬链接,和:
ln -s item link
创建符号链接,“item”可以是一个文件或是一个目录。
硬链接
硬链接是最初Unix创建链接的方式。每个文件默认会有一个硬链接,这个硬链接给予文件名字。我们每创建一个硬链接,就为一个文件创建了一个额外的目录项。硬链接有两个重要局限性:
- 一个硬链接不能关联它所在文件系统之外的文件。这是说一个链接不能关联与链接本身不在同一个磁盘分区上的文件。
- 一个硬链接不能关联一个目录。
一个硬链接和文件本身没有什么区别。不像符号链接,当你列出一个包含硬链接的目录内容时,你会看到没有特殊的链接指示说明。当一个硬链接被删除时,这个链接被删除,但是文件本身的内容仍然存在(这是说,它所占的磁盘空间不会被重新分配),直到所有关联这个文件的链接都删除掉。知道硬链接很重要,因为我们可能会遇到它们,但在实际中更喜欢使用符号链接。
符号链接
创建符号链接是为了克服硬链接的局限性。符号链接生效,是通过创建一个特殊类型的文件,这个文件包含了一个关联文件或目录的文本指针。在这一方面,它们和Windows系统中的快捷方式差不多。
一个符号链接指向一个文件,而且这个符号链接本身与其它的符号链接几乎没有区别。例如,如果你往一个符号链接里面写入东西,那么相关联的文件也被写入。然而,当你删除一个符号链接时,只有这个链接被删除,而不是文件本身。如果先于符号链接删除文件,这个链接仍然存在,但是不指向任何东西。在这种情况下,这个链接被称为坏链接。在许多实现中,ls命令会以不同颜色展示坏链接,比如说红色,来显示它们的存在。
关于本文命令内容的参考来自《快乐的Linux命令行》一书。
欢迎关注我的公众号