GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cuál es la razón por la que rmdir(1) y rm(1) coexisten?

La razón principal es probablemente histórica. En los viejos tiempos, no había rmdir(2) y mkdir(2) llamadas al sistema (estamos hablando de la 7.ª edición de UNIX™ aquí), y rmdir(1) era (por necesidad) un programa raíz SUID que usaba el unlink(2) llamada al sistema para eliminar directorios.

Los manuales de UNIX de la séptima edición están disponibles en línea en http://cm.bell-labs.com/7thEdMan (última consulta el 23 de abril de 2017); También están disponibles en http://plan9.bell-labs.com/7thEdMan (última consulta el 23 de abril de 2017). También parece haber al menos una fuente alternativa en línea, http://wolfram.schneider.org/bsd/7thEdManVol2/, para los artículos en el Volumen 2, con un enlace al sitio de FreeBSD para los comandos y llamadas al sistema en el Volumen 1. .

El rm comando (un programa regular que no es SUID) invocó el rmdir(1) Comando para eliminar directorios vacíos. No podría hacerlo por sí mismo; que requería privilegios de root. Entonces, el rmdir(1) (ver aquí para su código fuente en Unix V7) existía para eliminar directorios vacíos, y el rm El comando no eliminó los directorios vacíos por sí mismo.

Para usar rm para eliminar directorios, tienes que dar el -r opción.

También hay un argumento de simetría. Necesitas un comando mkdir(1) para crear directorios; parece razonable tener un comando rmdir(1) para deshacer lo mkdir(1) hizo. Además, son (en estos días) simples ejercitadores del rmdir(2) y mkdir(2) llamadas al sistema:sí, en la 7.ª edición de UNIX, mkdir(1) también era un programa raíz SUID, usando el mknod(2) llamada para crear un nodo de directorio y el link(2) llamar para crear el . y .. entradas en el directorio.


"rm" no funciona en directorios. Debe usar rmdir o especificar el interruptor -r para una eliminación recursiva. La razón es histórica:unlink y rmdir son llamadas al sistema separadas y lo han sido desde los primeros días de Unix.


Además, rmdir solo elimina vacío directorios. Si quiere asegurarse de no eliminar ningún archivo adicional en un directorio, rmdir es más seguro que rm -r (excepto si usó un alias de rm de tal manera que siempre necesita confirmar lo que elimina, es decir, alias rm='rm -i' en ~/.bashrc o lo que estés usando).


Linux
  1. ¿Cuál es la diferencia entre InnoDB y MyISAM?

  2. ¿Cuál es la diferencia entre strtok_r y strtok_s en C?

  3. ¿Cuál es la diferencia entre adduser y useradd?

  4. ¿Cuál es la identificación de partición/tipo de sistema de archivos para UDF?

  5. ¿Cuál es la diferencia entre $(CC) y $CC?

¿Cuál es la diferencia entre Linux y Unix?

El Punto De Uniq -u Y Que Hace??

¿Qué es un Hipervisor? ¿Cuál es la diferencia entre el tipo 1 y 2?

¿Cuál es la diferencia entre curl y Wget?

¿Cuál es la diferencia entre unlink y rm?

¿Cuál es la diferencia entre ruta y ruta ip?