现在,我们准备好做些实际工作了,本章将介绍如下命令:
- cp:复制文件和目录。
- mv:移动或重命名文件和目录。
- mkdir:创建目录。
- rm:移除文件和目录。
- in:创建硬链接和符号链接。
这 5 个命令属于最常使用的Linux命令之列,可用来操作文件与目录。
为何要使用这些命令行程序?
原因就在于命令行程序具有更强大的功能和灵活的操作。 虽然使用图形文件管理器能轻松实现简单的文件操作,但是对于复杂的任务,使用命令行程序更容易完成。 例如:怎样仅因为文件在目标目录中不存在或存在旧的版本,就将所有HTML文件从一个目录复制到目标目录里呢?使用文件管理器完成很困难,而用命令行则很容易。
一、通配符
一个使命令行如此强大的 shell 特性 —— 通配符。 由于 shell 需要经常使用文件名,因此它提供了一些特殊字符来帮助我们快速指定一组文件名,这些特殊字符称为通配符。 通配符(也叫文件名转换)允许用户依据字符模式选择文件名。
1.通配符
通配符 | 匹配项 |
---|---|
* | 匹配任意多个字符(包括 0 个和 1 个) |
? | 匹配任一单个字符(不包括 0 个) |
[characters] | 匹配任意一个属于字符集中的字符 |
[!characters] | 匹配任意一个不属于字符集中的字符 |
[[:class:]] | 匹配任意一个属于指定字符类中的字符 |
2.最常用的字符类
字符类 | 匹配项 |
---|---|
[:alnum:] | 匹配任意一个字母或数字 |
[:alpha:] | 匹配任意一个字母 |
[:digit:] | 匹配任意一个数字 |
[:lower:] | 匹配任意一个小写字母 |
[:upper:] | 匹配任意一个大写字母 |
通配符的使用使得为文件名构建复杂的筛选标准成为可能。
3.示例
模式 | 匹配项 |
---|---|
* | 所有文件 |
g* | 以g开头的任一文件 |
b*.txt | 以b开头,中间有任意多个字符,并以 .txt 结尾的任一文件 |
Data??? | 以Data开头,后面跟 3 个字符的任一文件 |
[abc]* | 以 abc 中的任一个开头的任一文件 |
BACKUP.[0-9] [0-9] [0-9] | 以BACKUP.开头,后面紧跟 3 个数字的任一文件 |
[[:upper:]]* | 以大写字母开头的任一文件 |
[![:digit:]]* | 不以数字开头的任一文件 |
*[[:lower:]123] | 以小写字母 或 数字 1、2、3 中的任一个结尾的任一文件 |
通配符可以与任一个使用文件名为参数的命令一起使用。
4.字符范围
可能遇到 [A-Z] 或 [a-z]形式的字符范围表示法。这些都是传统的 UNIX 表示法,在早期的 Linux 版本中仍然奏效。 尽管它们仍然起作用,但使用时请务必小心,因为一旦配置不当,就会产生非预期的结果。目前要避免使用它们,而是使用字符类。
二、mkdir-创建目录
mkdir 命令是用来创建目录的。
1.格式
代码语言:javascript复制mkdir directory...
若参数后面带有 3 个点号(如上),表示该参数可以重复。
(1)创建单个目录
代码语言:javascript复制mkdir dir1
# 创建单个目录,命名为 dir1
(2)创建多个目录
代码语言:javascript复制mkdir dir1 dir2 dir3
# 创建 3 个目录,分别命名为 dir1、dir2、dir3
三、cp-复制文件和目录
cp 命令用来复制文件和目录。它有 2 种不同的使用方式:
1.格式
(1)单个复制
代码语言:javascript复制cp item1 item2
将单个文件或目录 item1 复制到文件或目录 item2 中。
(2)多个复制
代码语言:javascript复制cp item... directory
将多个文件(或目录)复制进一个目录中(若是文件复制进另一个目录,directory 必须已经存在)。
2.cp 常用的选项
短选项 和 等价的长选项。
选项 | 含义 |
---|---|
-a,--archive | 复制文件和目录及其属性,包括所有权和权限。通常来说,复制的文件具有用户所操作文件的默认属性。 |
-i,--interactive | 在覆盖一个已存在的文件前,提示用户进行确认。如果没有指定该选项,cp会默认覆盖文件。 |
-r,--recursive | 递归地复制目录及其内容。复制目录时需要需要这个选项(或 -a 选项) |
-u,--update | 当将文件从一个目录复制到另一个目录时,只会复制那些目标目录中不存在的文件或是目标目录相应文件的更新文件。 |
-v,--verbose | 复制文件时,显示信息性消息。 |
3.cp命令示例
命令 | 结果 |
---|---|
cp file1 file2 | 将 file1 复制到 file2 。如果 file2 存在,则会被 file1 的内容覆盖。如果 file2 不存在,则创建 file2 。 |
cp -i file1 file2 | 同上,区别在于:在覆盖一个已存在的文件前,会提示用户进行确认。 |
cp file1 file2 dir1 | 将 file1 、file2 复制到目录 dir1 里。dir1 必须已经存在。 |
cp dir1/* dir2 | 通过使用通配符,将 dir1 中的所有文件复制到 dir2 中。dir2 必须已经存在。 |
cp -r dir1 dir2 | 将 dir1 目录(及其内容)复制到 dir2 目录中。如果 dir2 不存在,创建 dir2 ,且包含与 dir1 目录相同的内容。 |
四、mv-移动和重命名文件
mv 命令可以执行文件移动和文件重命名操作,具体取决于如何使用它。 这 2 种情况下,完成操作之后,原来的文件名将不存在。 mv 命令的使用方法与 cp 基本相似。
1.格式
(1)单个移动(或重命名)
代码语言:javascript复制mv item1 item2
将文件(或目录 )item1 移动(或重命名)为 item2。
(2)多个移动(或重命名)
代码语言:javascript复制mv item... directory
将一个或多个条目从一个目录移动到另一个目录下。
2.mv 选项
mv 命令很多选项与 cp 命令是共享的。
选项 | 含义 |
---|---|
-i,--interactive | 在覆盖一个已存在的文件前,提示用户进行确认。如果没有指定该选项,mv 会默认覆盖文件。 |
-u,--update | 将文件从一个目录移动到另一个目录,只移动那些目标目录中不存在的文件或是目标目录里相应文件的更新文件。 |
-v,--verbose | 移动文件时显示信息性消息。 |
3.示例
命令 | 结果 |
---|---|
mv file1 file2 | 将 file1 移动到 file2。如果 file2 存在,则会被 file1 的内容覆盖 |
mv -i file1 file2 | 同上,仅当 file2 存在时,覆盖之前通知用户确认。 |
mv file1 file2 dir1 | 将 file1、file2 移动到目录 dir1 下。dir1必须已经存在。 |
mv dir1 dir2 | 将目录 dir1(及其内容) 移动到目录 dir2 下。如果 dir2 不存在,则创建目录 dir2 ,将目录 dir1 的内容移动到 dir2 下,同时删除目录 dir1 。 |
五、rm-删除文件和目录
rm 命令用来删除文件和目录。
1.格式
代码语言:javascript复制rm item...
其中,item是一个或多个文件(或目录)的名称。
2.rm 选项
选项 | 含义 |
---|---|
-i,--interactive | 删除一个已存在的文件前,提示用户确认。如果没有这个选项,rm 命令会默认删除文件。 |
-r,--recursive | 递归地删除目录。也就是说,如果删除的目录有子目录的话,也要将其删除。要删除一个目录,则必须指定该选项。 |
-f,--force | 忽略不存在的文件并无需提示确认。该选项会覆盖 --interactive 选项。 |
-v,--verbose | 删除文件时显示信息性消息。 |
3.示例
命令 | 结果 |
---|---|
rm file1 | 在不提示用户的情况下,删除 file1。 |
rm -i file1 | 删除 file1 前,提示用户确认。 |
rm -r file1 dir1 | 删除 file1、dir1 以及它们的内容。 |
rm -rf file1 dir1 | 同上,当 file1 或 dir1 不存在时,rm 仍会继续执行,且不提示用户。 |
4.小心 rm 命令
Linux 并不包含还原删除操作的命令。一旦使用 rm 命令,就彻底地删除了。Linux 系统默认用户是明智的,并清楚自己在干什么。
六、ln-创建链接
ln 命令可用来创建硬链接 或是 符号链接。它的使用方式有两种:
1.格式
(1)创建硬链接
代码语言:javascript复制ln file link
用来创建硬链接。
(2)创建符号链接
代码语言:javascript复制ln -s item link
用来创建符号链接,这里的item可以是文件也可以是目录。
2.硬链接
硬链接是最初 UNIX 用来创建链接的方式,符号链接较之更为先进。 默认情况下,每个文件有一个硬链接,该硬链接会给文件起名字。当创建一个硬链接的时候,也为这个文件创建了一个额外的目录条目。 硬链接 和 文件本身没有什么区别。与包含符号链接的目录列表不同,包含硬链接的目录列表没有特别的链接指示说明。当硬链接被删除时,只是删除了这个链接,但是文件本身的内容依然存在(也就是,该空间没有释放),除非该文件的所有链接都被删除了。 因为会经常遇到它们,了解硬链接就显得特别重要。但是现在大多使用的是符号链接。
(1)两条重要的局限性
① 硬链接不能引用自身文件系统以外的文件。(也就是,链接不能引用与该链接不在同一磁盘分区的文件。) ② 硬链接无法引用目录。
3.符号链接
符号链接是为了克服硬链接的局限性而创建的。 符号链接是通过创建一个特殊类型的文件来起作用的,该文件包含了指向引用文件或目录的文本指针。从这点上看,符号链接与 Windows 系统下的快捷方式非常相似,但是,符号链接要早于 Windows 的快捷方式很多年。 符号链接指向的文件与符号链接自身几乎没有区别。例如:将一些东西写进符号链接里,那么这些东西同样也写进了引用文件。而当删除一个符号链接时,删除的只是符号链接而没有删除文件本身。如果先于符号链接之前删除文件,那么这个链接依然存在,但却不指向任何文件。此时,这个链接就称为坏链接。在很多实现中,ls 命令会用不同的颜色来显示坏链接,比如红色,从而显示它们的存在。