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

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

Utilizo BSD y Linux todos los días, nunca he tenido la circunstancia de tener que usar rmdir(1) en lugar de rm(1). ¿Cuál es el propósito de la existencia de rmdir?

Respuesta1

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

Los manuales de UNIX de la séptima edición están disponibles en línea enhttp://cm.bell-labs.com/7thEdMan(última consulta el 23 de abril de 2017); También están disponibles enhttp://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 del Volumen 2, con un enlace alFreeBSDsitio para los comandos y llamadas al sistema en el Volumen 1.

El rmcomando (un programa normal 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)comando (veraquípara su código fuente en Unix V7) existía para eliminar directorios vacíos, y el rmcomando no eliminaba directorios vacíos en sí.

Para usar rmpara eliminar directorios, debes darle a la -ropción.

También hay un argumento de simetría. Necesita un comando mkdir(1)para crear directorios; parece razonable tener un comando rmdir(1)para deshacer lo mkdir(1)que hizo. Además, (hoy en día) son simples ejercitadores de las llamadas al rmdir(2)sistema mkdir(2)y; sí, en la séptima edición de UNIX, mkdir(1)también era un programa raíz SUID, que usaba la mknod(2)llamada para crear un nodo de directorio y la link(2)llamada para crear las entradas .y ..en el directorio. .

Respuesta2

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

Respuesta3

Además, rmdir solo eliminavacíodirectorios. Si desea asegurarse de no eliminar ningún archivo adicional en un directorio, rmdires más seguro que rm -r(excepto si le puso un alias a rm de modo que siempre necesite confirmar lo que elimina, es decir, alias rm='rm -i'en ~/.bashrc o lo que esté usando ).

Respuesta4

Además, rmdirfacilita la eliminación de directorios vacíos con expresiones globales (comodines). Por ejemplo, para eliminar todos los directorios vacíos /tmpsin tocar ningún archivo o directorio con contenido:

cd /tmp ; rmdir *

información relacionada