3.1.3 目录的相关操作

与其他操作系统一样,Linux也有目录的概念,目录的作用在于存放其他的目录和文件。本节将介绍Linux下目录相关操作的方法。

1.进入目录:cd

该命令是change directory的简写,方便用户切换到不同的目录。以下是该命令使用方法的演示,示例中使用的pwd命令可以显示当前所处的目录:


  1. [root@localhost ]# cd #
  2. 无任何参数,默认进入root
  3. 的家目录
  4. [root@localhost ]# pwd #
  5. 看一下当前的目录
  6. root #
  7. 确实在root
  8. 的家目录中,也就是root
  9. [root@localhost ~]# cd tmp #
  10. 进入tmp
  11. 目录
  12. [root@localhost tmp]# pwd
  13. tmp
  14. [root@localhost tmp]# cd mnt
  15. [root@localhost mnt]# pwd
  16. /mnt

2.创建目录:mkdir

该命令是make directory的简写,其用途是创建目录,使用方法是在后面跟上目录的名称,如下所示:


  1. [root@localhost ]# cd #
  2. 无任何参数,默认进入root
  3. 的家目录
  4. [root@localhost ]# mkdir dir1 #
  5. 创建目录dir1
  6. [root@localhost ~]# cd dir1/ #
  7. 进入目录dir1
  8. [root@localhost dir1]# mkdir dir2 #
  9. dir1
  10. 中创建dir2
  11. [root@localhost dir1]# cd dir2/ #
  12. 进入目录dir2
  13. [root@localhost dir2]# pwd #
  14. 显示当前目录
  15. rootdir1/dir2

如上面例子所示,创建一个目录后,又在该目录中创建了一个子目录。如果需要继续在dir2中创建dir3,然后在dir3中创建dir4,可以使用-p参数一次性创建所有目录,这样就不用费力地一个个创建了,命令如下所示:


  1. [root@localhost dir2]# mkdir -p dir3/dir4

上面使用的是相对路径的方式,也可以使用绝对路径的方式来创建,如下所示:


  1. [root@localhost dir2]# mkdir -p rootdir1/dir2/dir3/dir4

大家可以任选一种来创建这种多层的目录结构。

3.删除目录:rmdir和rm

该命令是remove directory的简写,用来删除目录。但是需要注意的是,它只能删除空目录,如果目录不为空(存在文件或者子目录),那么该命令将拒绝删除指定的目录。继续上例,假设目前所在的目录是rootdir1/dir2,当前目录下存在dir3,但dir3不为空,因为包含dir4,我们试图使用该命令来删除dir3,结果如下:


  1. [root@localhost dir2]# rmdir dir3/
  2. rmdir: dir3/: Directory not empty

这里系统给出的信息是,dir3非空。如果先将dir3中的dir4目录删除,然后再删除dir3看看是否可行:


  1. [root@localhost dir2]# rmdir dir3/dir4/ #
  2. 先删除dir4
  3. 目录
  4. [root@localhost dir2]# rmdir dir3/ #
  5. 再删除dir3
  6. [root@localhost dir2]# #
  7. 删除成功,系统无提示

由于dir4目录是空的,所以顺利删除了dir4,然后再删除dir3时就成功了。考虑一下这种情况:dir3中有成百上千个文件和目录,按照上面的方法,我们需要上千次地递归删除dir3下的所有文件和目录,直至dir3目录为空,然后才能删除该目录,这是否也太低效了?或者说是很愚蠢的方法。为了解决这个问题,可以使用rm命令来删除。

之前学习了如何使用rm来删除文件,如果需要使用它删除目录,只需要使用一个-r参数就可以做到,如下所示:


  1. [root@localhost dir2]#cd
  2. [root@localhost ]# #
  3. 进入/root
  4. 目录
  5. [root@localhost ]# rm -r dir1/
  6. rm: descend into directory 'dir1/'? y #
  7. 是否删除dir1
  8. 中的文件
  9. rm: remove directory 'dir1//dir2'? y #
  10. 是否删除dir2
  11. 目录
  12. rm: remove directory 'dir1/'? y #
  13. 是否删除dir1
  14. 目录

这样就删除了dir1目录,同时删除了目录中的所有其他目录。但是这里同样也存在一个问题:如果dir1中有数百个文件,那我们就需要不厌其烦地输入“y”来确认。命令rm在发现需要递归删除一个目录时,会尽量多地给你提示确认,希望以此引起管理员的注意,以加强操作的安全性,但是毕竟一次又一次地确认还是很烦琐的。所以,在使用rm删除目录时,最常用的组合参数是-rf,这样就不会有任何提醒了,可直接将目录删除干净。但是使用这个命令要极其小心,因为一旦删除了几乎是不可能恢复的了。另外,由于root用户在Linux系统中的权限非常高,甚至可以用rm–rf/命令来删除全部的系统文件(这样做的后果是灾难性的),所以使用-rf参数删除目录一定要慎之又慎!

4.文件和目录复制:cp

该命令是copy的简写,用于复制文件和目录。如果是复制文件,其后接两个参数,第一个参数是要复制的源文件,第二个参数是要复制到的目录或复制后的文件名,如下所示:


  1. [root@localhost ]# #
  2. 现在是在/root
  3. 目录中
  4. [root@localhost ]# ls #
  5. 查看一下该目录中有什么文件
  6. anaconda-ks.cfg install.log install.log.syslog
  7. [root@localhost ~]# cp anaconda-ks.cfg anaconda-ks-copy.cfg

如果是复制到其他目录中去,比如说复制到/tmp目录中,命令如下:


  1. [root@localhost ~]#cp anaconda-ks.cfg tmpanaconda-ks-copy.cfg

如果想复制过去保持原文件名而不重命名,可以简单地写成下面的形式:


  1. [root@localhost ~]# cp anaconda-ks.cfg tmp

复制目录同样也是使用cp命令。相对于复制文件,复制目录只需要使用-r参数即可,如下所示:


  1. [root@localhost ~]# mkdir a #
  2. 创建a
  3. 目录
  4. [root@localhost ]# cp a b #
  5. 试图将a
  6. 目录复制成b
  7. 目录
  8. cp: omitting directory 'a' #cp
  9. 命令略过了目录,未发生复制
  10. [root@localhost ]# cp -r a b #
  11. 加了-r
  12. 参数后,复制成功