3.1.3 目录的相关操作
与其他操作系统一样,Linux也有目录的概念,目录的作用在于存放其他的目录和文件。本节将介绍Linux下目录相关操作的方法。
1.进入目录:cd
该命令是change directory的简写,方便用户切换到不同的目录。以下是该命令使用方法的演示,示例中使用的pwd命令可以显示当前所处的目录:
- [root@localhost ]# cd #
- 无任何参数,默认进入root
- 的家目录
- [root@localhost ]# pwd #
- 看一下当前的目录
- root #
- 确实在root
- 的家目录中,也就是root
- [root@localhost ~]# cd tmp #
- 进入tmp
- 目录
- [root@localhost tmp]# pwd
- tmp
- [root@localhost tmp]# cd mnt
- [root@localhost mnt]# pwd
- /mnt
2.创建目录:mkdir
该命令是make directory的简写,其用途是创建目录,使用方法是在后面跟上目录的名称,如下所示:
- [root@localhost ]# cd #
- 无任何参数,默认进入root
- 的家目录
- [root@localhost ]# mkdir dir1 #
- 创建目录dir1
- [root@localhost ~]# cd dir1/ #
- 进入目录dir1
- [root@localhost dir1]# mkdir dir2 #
- 在dir1
- 中创建dir2
- [root@localhost dir1]# cd dir2/ #
- 进入目录dir2
- [root@localhost dir2]# pwd #
- 显示当前目录
- rootdir1/dir2
如上面例子所示,创建一个目录后,又在该目录中创建了一个子目录。如果需要继续在dir2中创建dir3,然后在dir3中创建dir4,可以使用-p参数一次性创建所有目录,这样就不用费力地一个个创建了,命令如下所示:
- [root@localhost dir2]# mkdir -p dir3/dir4
上面使用的是相对路径的方式,也可以使用绝对路径的方式来创建,如下所示:
- [root@localhost dir2]# mkdir -p rootdir1/dir2/dir3/dir4
大家可以任选一种来创建这种多层的目录结构。
3.删除目录:rmdir和rm
该命令是remove directory的简写,用来删除目录。但是需要注意的是,它只能删除空目录,如果目录不为空(存在文件或者子目录),那么该命令将拒绝删除指定的目录。继续上例,假设目前所在的目录是rootdir1/dir2,当前目录下存在dir3,但dir3不为空,因为包含dir4,我们试图使用该命令来删除dir3,结果如下:
- [root@localhost dir2]# rmdir dir3/
- rmdir: dir3/: Directory not empty
这里系统给出的信息是,dir3非空。如果先将dir3中的dir4目录删除,然后再删除dir3看看是否可行:
- [root@localhost dir2]# rmdir dir3/dir4/ #
- 先删除dir4
- 目录
- [root@localhost dir2]# rmdir dir3/ #
- 再删除dir3
- [root@localhost dir2]# #
- 删除成功,系统无提示
由于dir4目录是空的,所以顺利删除了dir4,然后再删除dir3时就成功了。考虑一下这种情况:dir3中有成百上千个文件和目录,按照上面的方法,我们需要上千次地递归删除dir3下的所有文件和目录,直至dir3目录为空,然后才能删除该目录,这是否也太低效了?或者说是很愚蠢的方法。为了解决这个问题,可以使用rm命令来删除。
之前学习了如何使用rm来删除文件,如果需要使用它删除目录,只需要使用一个-r参数就可以做到,如下所示:
- [root@localhost dir2]#cd
- [root@localhost ]# #
- 进入/root
- 目录
- [root@localhost ]# rm -r dir1/
- rm: descend into directory 'dir1/'? y #
- 是否删除dir1
- 中的文件
- rm: remove directory 'dir1//dir2'? y #
- 是否删除dir2
- 目录
- rm: remove directory 'dir1/'? y #
- 是否删除dir1
- 目录
这样就删除了dir1目录,同时删除了目录中的所有其他目录。但是这里同样也存在一个问题:如果dir1中有数百个文件,那我们就需要不厌其烦地输入“y”来确认。命令rm在发现需要递归删除一个目录时,会尽量多地给你提示确认,希望以此引起管理员的注意,以加强操作的安全性,但是毕竟一次又一次地确认还是很烦琐的。所以,在使用rm删除目录时,最常用的组合参数是-rf,这样就不会有任何提醒了,可直接将目录删除干净。但是使用这个命令要极其小心,因为一旦删除了几乎是不可能恢复的了。另外,由于root用户在Linux系统中的权限非常高,甚至可以用rm–rf/命令来删除全部的系统文件(这样做的后果是灾难性的),所以使用-rf参数删除目录一定要慎之又慎!
4.文件和目录复制:cp
该命令是copy的简写,用于复制文件和目录。如果是复制文件,其后接两个参数,第一个参数是要复制的源文件,第二个参数是要复制到的目录或复制后的文件名,如下所示:
- [root@localhost ]# #
- 现在是在/root
- 目录中
- [root@localhost ]# ls #
- 查看一下该目录中有什么文件
- anaconda-ks.cfg install.log install.log.syslog
- [root@localhost ~]# cp anaconda-ks.cfg anaconda-ks-copy.cfg
如果是复制到其他目录中去,比如说复制到/tmp目录中,命令如下:
- [root@localhost ~]#cp anaconda-ks.cfg tmpanaconda-ks-copy.cfg
如果想复制过去保持原文件名而不重命名,可以简单地写成下面的形式:
- [root@localhost ~]# cp anaconda-ks.cfg tmp
复制目录同样也是使用cp命令。相对于复制文件,复制目录只需要使用-r参数即可,如下所示:
- [root@localhost ~]# mkdir a #
- 创建a
- 目录
- [root@localhost ]# cp a b #
- 试图将a
- 目录复制成b
- 目录
- cp: omitting directory 'a' #cp
- 命令略过了目录,未发生复制
- [root@localhost ]# cp -r a b #
- 加了-r
- 参数后,复制成功