Autor(es) original(es) | Ken Thompson , Dennis Ritchie ( Laboratorios Bell de AT&T ) |
---|---|
Desarrollador(es) | Varios desarrolladores comerciales y de código abierto |
Lanzamiento inicial | 3 de noviembre de 1971 ( 03-11-1971 ) |
Escrito en | do |
Sistema operativo | Unix , similar a Unix , V , Plan 9 , Inferno , KolibriOS , IBM i |
Plataforma | Multiplataforma |
Tipo | Dominio |
Licencia | coreutils : GPLv3+ Plan 9: Licencia MIT |
rm
(abreviatura de remove ) es un comando básico en sistemas operativos Unix y similares que se utiliza para eliminar objetos como archivos de computadora , directorios y enlaces simbólicos de los sistemas de archivos y también archivos especiales como nodos de dispositivos , tuberías y sockets , similar al comando en MS-DOS , OS/2 y Microsoft Windows . El comando también está disponible en el shell EFI . [1]del
El rm
comando elimina referencias a objetos del sistema de archivos mediante la llamada al sistema unlink , donde esos objetos pueden haber tenido múltiples referencias (por ejemplo, un archivo con dos nombres diferentes), y los objetos mismos se descartan solo cuando se han eliminado todas las referencias y ningún programa todavía tiene identificadores abiertos para los objetos.
Esto permite escenarios en los que un programa puede abrir un archivo, eliminarlo inmediatamente del sistema de archivos y luego usarlo como espacio temporal, sabiendo que el espacio del archivo se recuperará después de que el programa salga, incluso si sale fallando.
El comando generalmente no destruye los datos del archivo, ya que su propósito es simplemente desvincular referencias, y el espacio del sistema de archivos liberado puede contener aún datos sobrantes del archivo eliminado. Esto puede ser un problema de seguridad en algunos casos, y las versiones reforzadas a veces permiten borrar los datos cuando se corta el último vínculo, y hay programas como shred y srm que brindan específicamente la capacidad de borrar datos.
rm
Generalmente solo se ve en sistemas operativos derivados de UNIX , que normalmente no permiten la recuperación de archivos eliminados a través de un mecanismo como la papelera de reciclaje , [2] de ahí la tendencia de los usuarios a encerrarlos rm
en algún tipo de contenedor para limitar la eliminación accidental de archivos.
Existen utilidades de recuperación que intentarán reconstruir el índice y pueden recuperar el archivo si las partes no se reutilizaron.
En algunas versiones antiguas de Unix, el rm
comando eliminaría directorios si estuvieran vacíos. [3] Este comportamiento aún se puede obtener en algunas versiones de rm
con el -d
indicador, por ejemplo, los BSD (como FreeBSD , [4] NetBSD , [5] OpenBSD [6] y macOS ) derivados de 4.4BSD-Lite2.
La versión rm
incluida en GNU coreutils fue escrita por Paul Rubin, David MacKenzie, Richard Stallman y Jim Meyering. [7] Esta versión también proporciona -d
una opción para ayudar con la compatibilidad. [8] El comando estándar proporciona la misma funcionalidad rmdir
.
La -i
opción de la versión 7 reemplazó a , o "eliminar de los dsw
conmutadores", que debutó en la versión 1. Doug McIlroy escribió que dsw
"era una herramienta desesperada diseñada para limpiar archivos con nombres impronunciables". [9]
El comando está disponible como un paquete separado para Microsoft Windows como parte de la colección UnxUtils de puertos Win32 nativos de utilidades comunes de tipo Unix de GNU. [10] KolibriOS incluye una implementación del comando. [11] El comando rm también ha sido portado al sistema operativo IBM i . [12] rm
rm
elimina el archivo especificado después de agregar las opciones. Los usuarios pueden usar una ruta completa o una ruta de archivo relativa para especificar los archivos que se eliminarán. rm
No elimina un directorio de manera predeterminada. [13]rm foo
elimina el archivo " foo " en el directorio en el que se encuentra actualmente el usuario.
rm
, al igual que otros comandos, utiliza opciones para especificar cómo se comportará:
-r
, "recursivo", que elimina directorios, eliminando el contenido recursivamente de antemano (para no dejar archivos sin un directorio donde residir).-i
, "interactivo" que pide que se confirme cada eliminación.-f
, "fuerza", que ignora los archivos inexistentes y anula cualquier solicitud de confirmación (cancelando efectivamente -i
), aunque no eliminará archivos de un directorio si el directorio está protegido contra escritura.-v
, "verbose", que imprime lo que rm
está haciendo en la terminal-d
, "directorio", que elimina un directorio vacío y solo funciona si el directorio especificado está vacío.--one-file-system
, solo elimina archivos en el mismo sistema de archivos que el argumento e ignorará los sistemas de archivos montados.rm
Puede superponerse con una función de alias de shell ( alias de shell C , Bourne shell o Bash) de " " para evitar la eliminación accidental de archivos. Si un usuario aún desea eliminar una gran cantidad de archivos sin confirmación, puede cancelar manualmente el argumento agregando la opción (ya que la opción especificada más adelante en la línea de comando expandida " " tiene prioridad). Desafortunadamente, este enfoque genera hábitos peligrosos hacia el uso de comodines, lo que lleva a su propia versión de eliminaciones accidentales.rm -i
-i
-f
rm -i -f
rm -rf
(de forma variada, rm -rf /
, rm -rf *
, y otros) se utiliza con frecuencia en chistes y anécdotas sobre desastres de Unix, [14] como la pérdida de muchos archivos durante la producción de la película Toy Story 2 en Pixar . [15] La rm -rf /
variante del comando, si la ejecuta un superusuario , haría que todos los archivos accesibles desde el sistema de archivos actual se eliminen de la máquina.
rm
se utiliza a menudo junto con xargs para proporcionar una lista de archivos a eliminar:
xargs rm < lista de archivos
O bien, para eliminar todas las imágenes PNG en todos los directorios debajo del actual:
buscar . -nombre '*.png' -exec rm {} +
Por lo general, en la mayoría de los sistemas de archivos, para borrar un archivo se requiere permiso de escritura en el directorio padre (y permiso de ejecución, para poder ingresar al directorio en primer lugar). (Tenga en cuenta que, para confusión de los principiantes, los permisos en el archivo en sí son irrelevantes. Sin embargo, GNU rm
solicita confirmación si se va a borrar un archivo protegido contra escritura, a menos que se use la opción -f). [16]
Para eliminar un directorio (con rm -r
), uno debe eliminar todo su contenido recursivamente. Esto requiere que uno deba tener permiso de lectura, escritura y ejecución para ese directorio (si no está vacío) y todos los subdirectorios no vacíos recursivamente (si hay alguno). Los permisos de lectura son necesarios para listar el contenido del directorio con el fin de eliminarlo. Esto a veces conduce a una situación extraña donde un directorio no vacío no se puede eliminar porque uno no tiene permiso de escritura en él y por lo tanto no puede eliminar su contenido; pero si el mismo directorio estuviera vacío, uno podría eliminarlo. [17]
Si un archivo reside en un directorio con el bit persistente activado, entonces para eliminar el archivo es necesario ser el propietario del archivo.
Sun Microsystems introdujo rm -rf /
la protección " " en Solaris 10, lanzado por primera vez en 2005. Al ejecutar el comando, el sistema informa ahora que no se permite la eliminación de /. [18] Poco después, se introdujo la misma funcionalidad en la versión FreeBSD de rm
la utilidad. [19] GNU rm
se niega a ejecutar si se proporciona rm -rf /
la opción, [20] que ha sido la opción predeterminada desde que se lanzó la versión 6.4 de GNU Core Utilities en 2006. En los sistemas más nuevos, este mecanismo de seguridad siempre está activo, incluso sin la opción. Para ejecutar el comando, el usuario debe omitir el mecanismo de seguridad agregando la opción , incluso si es el superusuario.--preserve-root
--no-preserve-root
Los administradores de sistemas, diseñadores e incluso los usuarios a menudo intentan defenderse contra la eliminación accidental de archivos creando un alias o una función como la siguiente:
alias rm = "rm -i"
rm () { /bin/rm -i " $@ " ; }
Esto hace que rm
se le pida al usuario que confirme archivo por archivo si debe eliminarse, presionando la tecla Y o N. Desafortunadamente, esto tiende a entrenar a los usuarios para que sean descuidados con los comodines que usan en sus rm
comandos, además de fomentar una tendencia a presionar alternativamente la tecla de inicio y
y la tecla de retorno para confirmar las eliminaciones, hasta justo después del archivo que necesitaban conservar. [ cita requerida ] Se ha visto a usuarios incluso llegar al punto de insertar automáticamente una "y" para cada archivo. [ cita requerida ]yes | rm files
Un compromiso que permite a los usuarios confirmar solo una vez, fomenta el uso adecuado de comodines y facilita la verificación de la lista se puede lograr con algo como:
si [ -n " $PS1 " ] ; entonces rm () { ls -FCsd " $@ " echo 'eliminar[ny]? ' | tr -d '\012' ; leer si [ "_ $REPLY " = "_y" ] ; entonces /bin/rm -rf " $@ " de lo contrario echo '(cancelado)' fi } fi
Es importante tener en cuenta que esta función no debe convertirse en un script de shell, ya que se correría el riesgo de que se encuentre antes que el sistema rm
en la ruta de búsqueda, ni debe permitirse en shells no interactivos donde podría interrumpir los trabajos por lotes. Incluir la definición en la if [ -n "$PS1" ] ; then .... ; fi
construcción protege contra esto último.
Existen alternativas de terceros que evitan la eliminación accidental de archivos importantes, como “safe-rm” [21] o “trash”. [22]
La implementación de GNU Core Utilities utilizada en múltiples distribuciones de Linux estará limitada en el número de bytes de argumentos de línea de comandos que se asignan dentro del núcleo para argumentos de línea de comandos antes del núcleo 2.6.23 publicado el 9 de octubre de 2007 [23] [24] que se definieron en el momento de compilación del núcleo en una variable MAX_ARG_PAGES
en include/linux/binfmts.h
el archivo, pero los nuevos núcleos limitan la longitud máxima de argumentos al 25% del límite máximo de pila (ulimit -s). Error: /bin/rm: Argument list too long.
se solicitará un aviso si se excede el límite de argumentos de línea de comandos [25]
{{cite news}}
: CS1 maint: URL no apta ( enlace )