点击访问 Linux 命令大全 >>
本章节将讨论在 Linux 中,怎样移动、复制和删除文件及目录。
mv 取了 move 的缩写形式。这个命令用来移动文件,下面将当前目录的 hello.txt 文件移动到 ~/tmp/data 目录下。如下:
## 查看当前目录下面的文件列表 [root@localhost ~]# ll 总用量 8 -rw-------. 1 root root 1259 7月 28 17:48 anaconda-ks.cfg -rw-r--r--. 1 root root 6 7月 28 17:52 hello.txt drwxr-xr-x. 3 root root 18 7月 28 17:40 tmp ## 将 hello.txt 文件移动到 ~/tmp/data/ 目录 [root@localhost ~]# mv hello.txt ~/tmp/data/ ## 查看目标目录内容 [root@localhost ~]# ll ~/tmp/data/ 总用量 4 -rw-r--r--. 1 root root 6 7月 28 17:52 hello.txt
mv 命令在执行过程中不会有任何提示信息。如果目标目录有一个同名文件,mv 将使用当前文件替换目标文件。这是一个非常危险的动作,可能一不小心将一些非常重要的配置文件覆盖了。
为此 mv 命令提供了 -i 选项,用于在发现有同名文件时,给出提示信息。如下:
[root@localhost ~]# mv -i hello.txt ~/tmp/data/ mv:是否覆盖"/root/tmp/data/hello.txt"? y [root@localhost ~]#
输入“Y + 回车”表示覆盖目标文件,输入“N+回车”表示跳过这个文件。
另一个比较有用的 -b 选项,这个选项用一种不同的方式来处理文件覆盖问题。在移动文件前,首先在目标目录同名文件的文件名后加一个“~”,从而避免这个文件被覆盖。如下:
## 移动文件 [root@localhost ~]# mv -b hello.txt ~/tmp/data/ mv:是否覆盖"/root/tmp/data/hello.txt"? y ## 查看目标目录内容 [root@localhost ~]# ll ~/tmp/data/ 总用量 0 -rw-r--r--. 1 root root 0 7月 28 18:10 hello.txt -rw-r--r--. 1 root root 0 7月 28 18:06 hello.txt~
Linux 没有“重命名”这个命令,重命名无非就是将一个文件在同一个目录里移动,这是mv命令最擅长的工作。如下:
## 查看当前目录的内容 [root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 1259 7月 28 17:48 anaconda-ks.cfg -rw-r--r--. 1 root root 0 7月 28 18:13 hello.txt drwxr-xr-x. 3 root root 18 7月 28 17:40 tmp ## 重名 hello.txt 文件为 hello_bak.txt [root@localhost ~]# mv hello.txt hello_bak.txt ## 查看结果 [root@localhost ~]# ll 总用量 4 -rw-------. 1 root root 1259 7月 28 17:48 anaconda-ks.cfg -rw-r--r--. 1 root root 0 7月 28 18:13 hello_bak.txt drwxr-xr-x. 3 root root 18 7月 28 17:40 tmp
上面实例,将 hello.txt 重命名为 hello_bat.txt 文件。
cp 命令用来复制文件和目录。例如:
## 将 hello_bak.txt 文件复制到 ~/tmp/data/ 目录 [root@localhost ~]# cp hello_bak.txt ~/tmp/data/ ## 查看目标目录结果 [root@localhost ~]# ll ~/tmp/data/hello_bak.txt -rw-r--r--. 1 root root 0 7月 28 18:25 /root/tmp/data/hello_bak.txt
和 mv 命令一样,cp 命令默认会覆盖目标目录中的同名文件。可以使用 -i 选项对重复文件给出提示,以及使用 -b 选项对同名文件改名后再复制。例如:
[root@localhost ~]# cp -i hello_bak.txt ~/tmp/data/ cp:是否覆盖"/root/tmp/data/hello_bak.txt"? n
输入 n 表示跳过这个文件。
cp 命令在执行复制任务的时候回自动跳过目录。例如:
[root@localhost ~]# cp data1/ ~/tmp/ cp: 略过目录"data1/"
如果我们需要复制目录以及其子目录下面的所有文件,则可以使用 -r 选项。例如:
[root@localhost ~]# cp -r data1/ ~/tmp/ [root@localhost ~]# ll ~/tmp/ 总用量 0 drwxr-xr-x. 2 root root 62 7月 28 18:25 data drwxr-xr-x. 2 root root 22 7月 28 22:08 data1
rmdir 命令用于删除目录。这个命令使用非常简单,只需要在命令后面跟上要删除的目录作为参数即可。例如:
## 创建 myData 目录 [root@localhost ~]# mkdir myData ## 删除 myData 目录 [root@localhost ~]# rmdir myData ## 查看目录是否被删除 [root@localhost ~]# ll myData ls: 无法访问myData: 没有那个文件或目录
注意,rmdir 命令只能删除空目录。如果删除的目录非空目录,则会给出错误信息。例如:
## 查看 data1 目录的内容 [root@localhost ~]# ll data1 总用量 0 -rw-r--r--. 1 root root 0 7月 28 21:29 data.txt ## 删除 data1 目录 [root@localhost ~]# rmdir data1 rmdir: 删除 "data1" 失败: 目录非空
因此,在使用 rmdir 删除目录之前,需要将目标目录下面的所有子目录和文件删除,而删除文件则需要使用 rm 命令。
rm 命令可以一次删除一个或几个文件。例如:删除 data1 目录下面所有的 txt 文件,如下:
## 查看 data1 目录内容 [root@localhost ~]# ll data1 总用量 0 -rw-r--r--. 1 root root 0 7月 28 21:29 data.txt -rw-r--r--. 1 root root 0 7月 28 22:15 test.txt ## 删除 data1 目录下面所有的 txt 文件 [root@localhost ~]# rm data1/*.txt
rm 命令和 mv 命令一样,在删除文件时不会做任何提示。使用 rm 命令删除的文件将永远的从文件系统消失,而且不会将删除的文件放入到“回收站”临时目录。
注意,在使用 rm 删除文件是,为了安全着想,建议使用 -i 选项,这个选项会在删除文件前给出提示。例如:
## 查看 data1 目录内容 [root@localhost ~]# ll data1 总用量 0 -rw-r--r--. 1 root root 0 7月 28 21:29 data.txt -rw-r--r--. 1 root root 0 7月 28 22:15 test.txt ## 删除 data1 目录下面所有的 txt 文件 [root@localhost ~]# rm -i data1/*.txt rm:是否删除普通空文件 "data1/data.txt"?y rm:是否删除普通空文件 "data1/test.txt"?y
但是,对于只读文件,即便不使用 -i 选项,rm 命令也会对此进行提示。例如:
## 查看文件权限信息 [snow@localhost ~]$ ll 总用量 0 -r--r--r--. 1 snow snow 0 7月 28 22:30 test.txt ## 删除只读文件 [snow@localhost ~]$ rm test.txt rm:是否删除有写保护的普通空文件 "test.txt"?n
如果你不想在删除只读文件时不给出提示,可以使用 -f 选项来实现(rm 会自动对这个问题回答 Y)。例如:
[snow@localhost ~]$ ll 总用量 0 -r--r--r--. 1 snow snow 0 7月 28 22:32 test.txt [snow@localhost ~]$ rm -f test.txt [snow@localhost ~]$ ll 总用量 0
如果要删除指定目录以及子目录和文件,可以使用 -r 选项,进行递归删除。例如:
## 查看 tmp 目录的树结构 [snow@localhost ~]$ tree tmp/ tmp/ ├── data │ ├── hello.txt │ └── test.txt └── readme.txt 1 directory, 3 files ## 递归删除 tmp 目录 [snow@localhost ~]$ rm -fr tmp/ [snow@localhost ~]$ ll 总用量 0
注意:使用 rm 命令的时候应该格外小心。特别是以 root 身份执行该命令时。
【注意】
如果你在你的 Linux 操作系统中使用 rm 或 mv 命令时,并没有带有 -i 选项,而命令依然给出了提示信息。这是因为 Linux 系统在 .bashrc 文件中将 rm -i 或 mv -i 定义成了 rm 和 mv 别名。内容如下:
# .bashrc
# User specific aliases and functions
alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'
# Source global definitions
if [ -f /etc/bashrc ]; then
. /etc/bashrc
fi