2023-06-05 07:09:39 阅读( 2697)
如现在在操作系统中有个目录文件compierebook,在其下面有两个子目录文件,分别为chap01与chap02。
比如操作系统中有一个目录文件compierebook,它下面有两个子目录文件,分别是chap01和chap02。现在用户需要删除目录文件compierebook。
这时候我该怎么办?如果用户直接使用rmdir compierebook命令,系统会提示错误信息“目录不为空,无法删除”。用户只能先通过命令删除子目录,
然后删除这个compierebook目录文件?其实不是,下面我给大家介绍一个删除了子目录的目录文件。即同时删除所有子目录文件和当前目录文件。
I .文件创建和删除的控制和管理。
在Unix操作系统中,普通的文件和目录都是文件。因此,在操作系统中,普通文件和目录文件都对应一个文件名和inode号。当用户创建目录时,
关于创建目录的文件名和inode信息将被添加到该文件的父目录文件中。同样,删除一个目录文件时,其上级目录文件中要删除的目录的信息也会被删除。所以当删除一个目录时,系统会查看目录文件。
看看它是否有关于下级子目录的信息。如果有,会拒绝删除,并提醒用户“除非目录为空,否则无法删除”。如果没有子目录信息,那么系统将删除用户指定的目录。因此,在Unix系统中删除目录时,
必须在第一级删除。现在删除子目录,然后删除上一级目录。
第二,在rmdir中取多个参数。
在大多数情况下,当我们使用rmdir命令删除一个目录时,我们只需要一个目录文件名参数,比如rmdir compierebook。事实上,如果您查看该命令的帮助,您会发现该命令可以接受多个文件名参数。
即同时删除多个目录文件。例如,用户可以使用rmdir目录文件1、目录文件2和目录文件3(用空格分隔)同时删除多个目录文件。需要注意的话,删除目录的时候是有顺序的。
即先删除目录文件1,再删除目录文件2,最后删除目录文件3。因此,虽然在同一个命令中引入了三个参数,但在删除时并不是一起删除,而是按照参数的顺序依次删除文件。
这能给我们一些启示吗?由于它们实际上是一个一个删除的,所以我们可以先放子目录文件参数,最后放上级目录文件参数。可以一次性删除带子目录的目录文件吗?如上面的例子所示,
如果作者使用rmdir chap01chap02compierbook会怎么样?执行完这个命令后,大家会惊讶地发现,这个命令居然可以成功执行。然后查看相关目录,
你会发现这个目录文件(包括它的两个子目录文件)已经被删除了。因此,当我们删除一个带有子目录的目录文件时,我们不需要多次执行rmdir命令。而是只需要在这个命令中依次填入多个目录文件名参数。
然后执行一次。执行该命令时,系统将首先删除子目录chap01,然后删除其上级目录文件compierebook中关于chap01目录的文件名和inode信息。在这个步骤完成之后,
然后删除第一个文件,第02章。它也执行这两个步骤,在删除自己目录的同时更新上级目录文件的相关信息。然后删除第三个文件。删除第三个文件时,由于目录文件中没有子目录文件的信息,
所以这第三个文件此时可以正常删除。
在执行这个命令的时候,主要注意三个细节问题。一是这个命令可以带多个目录文件参数,不同的参数之间利用空格隔开。注意这里不是利用分号或者冒号等符号分割,只需要使用空格即可。
二是这个命令中的各个参数文件是由先后顺序的。如果目录文件的参数位置不对,很可能删除作业不会成功,甚至会出现一些莫名其妙的结果。对于这一点,笔者在后面的内容中还会具体举例子说明。
第三在删除某个目录文件时,用户必须位于这个目录之外的位置。如果这个命令中带了多个目录文件名参数时,要在这些指定的目录之外。否则的话系统会提示用户无法删除这些目录。这个比较容易理解,
因为在windows操作系统中也有类似的控制。
笔者最好强调一点,当删除某个目录文件时其主要会进行两步操作,分别为删除自身目录与更新上级目录中的信息。当一个命令中带有多个目录文件参数时,这两步操作也是同时完成的。而不是说先全部删除所指定的目录文件,
然后再更新其上级目录文件中的信息。理解这个内容,对于真正的理解rmdir命令删除多个目录文件会有很大的帮助。
三、若目录文件名位置放置不当会导致什么后果?
如果在使用这个rmdir命令的时候,这个目录文件名参数的位置放置不对,会有什么后果呢?如笔者现在是按这个格式书写这个命令:rmdir compierebook chap01 chap02。
在执行了这个命令之后,我们再查看系统目录会发现compierebook这个目录文件没有被删除。但是其下面的两个子目录文件chao01与chap02已经被删除了。
最后系统会提示用户“目录非空不能够删除”。这到底是怎么回事情呢?
在解释这个原因之前,笔者再给大家举一个例子。如笔者现在使用命令rmdir chap01 compierebook chap02。将第一个目录文件参数与第二个目录文件参数位置对调一下。
然后再执行这个命令,会出现什么结果呢?其实这个命令的执行结果与上面这个命令的执行结果一样。compierebook目录文件仍然存在,但是其与两个子文件已经被删除了。
不过最后系统仍然会提示一个“目录非空、删除失败”的错误信息。Unix操作系统到底是在变什么模式呢?
其实,我们只要将这个命令分解成三个命令即可。
如可以将rmdir compierebook chap01 chap02命令分解为rmdir compierebook、rmdir chap01 与rmdir chap02。在执行第一个命令的时候,
由于此时其下面的子目录文件还没有被删除,故第一个命令执行失败。然后再执行第二个命令,由于在目录文件chao01下面没有子目录文件了,故可以正常删除。同理,第三个命令也正确执行了。
从以上的分析中至少可以看出三点。一是某个目录删除失败并不会影响其他的目录的删除操作。二是这个命令并不会循环操作。即在删除第一个目录文件时,如果失败了,则会直接跳过。在其他目录删除完成之后,
不会再回过头来尝试再次删除上次删除失败的目录文件。由于不会循环操作,为此这个目录文件参数位置的放置就直接影响到这个命令的执行结果。第三是目录删除成功不会有错误警告信息。但是如果目录删除失败了,
则会提醒错误信息。如果有两个目录文件没有被成功删除,那么系统就会提醒两个错误信息。并且会提示,那个目录文件没有被成功删除。所以这个命令执行完成后,如果有错误信息的话,
那么仔细查看这个错误提示就非常有必要。特别是对比错误信息的条数与提供的目录文件参数的数量,可以判断有多少目录文件被成功删除了。如利用脚本程序来实现这个功能的话,
就可以利用cat命令来统计错误信息出现的次数,然后自动与参数的个数进行比较,并得出有多少目录文件被成功删除的结论。
四、利用mkdir来建立目录树。
了解了这个rmdir目录文件删除操作的原理之后,那么再来理解mkdir命令来建立目录树就会比较轻松了。建立目录树就是一次性建立多个目录,并且是带子目录的目录。也就是说,
现在要一次性建立三个目录computerbook、chap01、chap02。其中后面两个目录为第一个目录的子目录。现在这三个目录都不存在。一个个的运行mkdir命令虽然可以最终实现既定的结果,
但是显然操作起来比较麻烦。如果要建立目录比较多的话,那要执行能够多个命令了。其实根据上面的rmdir命令的工作原理,大家也可以想的到,通过mkdir命令加多个参数的形式来一次性建立目录树。
如要实现上面的需求,可以使用命令mkdir conputerbook chap01 chap02命令即可。注意参数的顺序非常的重要。如果参数的位置前后颠倒的话,那么这个命令就可能执行不成功。
会一个目录文件都没创建或者只是创建了部分的目录。所以在使用这个命令的时候,需要注意参数的顺序。同时要清楚一点,带多个参数的情况下,其建立各个目录的动作是相对独立的。了解这些内容后,
那么利用mkdir命令来一次性创建目录树就会变得简单许多。
猜你喜欢
Guessyoulike