Me parece que la página de manual carece de un pequeño detalle en este caso. La -fopción de rmrealmente tiene bastantes casos de uso:
Para evitar un código de salida de error
Para evitar que se le solicite
Para evitar las verificaciones de permisos
Tiene razón en que no tiene sentido eliminar un archivo inexistente, pero en los scripts es realmente conveniente poder decir "No quiero estos archivos, elimínelos si los encuentra, pero no me moleste si no lo hacen. no existe ". Algunas personas usan el set -een su script para que se detenga ante cualquier error (para evitar cualquier daño adicional que pueda causar el script), y rm -rf /home/my/garbagees más fácil que if [[ -f /home/my/garbage ]]; then rm -r /home/my/garbage; fi.
Una nota sobre las comprobaciones de permisos: para eliminar un archivo, necesita permiso de escritura en el directorio principal , no en el archivo en sí. Entonces, digamos que de alguna manera hay un archivo propiedad de rootsu directorio de inicio y no tiene sudoacceso, aún puede eliminar el archivo usando la -fopción. Si usa Git, puede ver que Git no deja el permiso de escritura en los archivos de objetos que crea:
-r--r--r-- 1 phunehehe phunehehe 62 Aug 31 15:08 testdir/.git/objects/7e/70e8a2a874283163c63d61900b8ba173e5a83c
Entonces, si usa rm, la única forma de eliminar un repositorio de Git sin usar rootes usar rm -rf.
-fno evita un código de salida de error. Si rmintenta y no elimina un archivo existente, devolverá un código de error.
Gilles 'SO- deja de ser malo'
He rechazado esta respuesta porque "Para evitar un código de salida de error" debe escribirse como "Para evitar un código de salida de error en caso de que no haya operandos de archivo o que no existan operandos de archivo". Como esta respuesta está escrita ahora, está mal.
Harold Fischer el
6
La -fopción suprime los mensajes de confirmación al eliminar un archivo de solo lectura. También suprime errores cuando uno o más archivos suministrados no existen.
La -fopción es útil cuando sabe que algunos de los archivos que está eliminando pueden ser de solo lectura y no desea que se le pregunte al respecto.
La fopción también es útil cuando desea eliminar algunos archivos en caso de que existan, y no quiere importar si existen o no. Esto se usa muy comúnmente en los archivos MAKE , para crear un comando que elimine los archivos que pueden regenerarse a partir de los archivos de origen. Por ejemplo, si foo.opuede reconstruirse desde foo.c, bar.opuede reconstruirse desde bar.cy myapppuede reconstruirse desde foo.oy bar.o, entonces, el destino del archivo MAKE
clean:
rm -f *.o myapp
elimina myapp, foo.oy bar.osi existen y no se queja si alguno de ellos no existe.
Incluir -fen las instrucciones para eliminar un árbol de directorios no es necesario en la mayoría de los casos. Puede justificarse porque si está seguro de que desea eliminar ese árbol de directorios independientemente de lo que contenga, puede especificar -fpara evitar que se le solicite en caso de que algunos archivos sean de solo lectura. Sin embargo, las personas que dicen a plazo rm -rfson a menudo simplemente la repetición de un encantamiento místico para deshacerse de algo, independientemente de si las opciones -ry -fson realmente necesarias. Si las opciones no son necesarias, no son recomendables, porque aumentan el riesgo de que un error tipográfico en el argumento destruya algo importante.
Generalmente veo que -fse usa rmcuando el rmcomando tiene un alias para que incluya el -iinterruptor para interactivo. El -finterruptor contrarresta el -i.
Ejemplo
Simular el problema con rmser alias a rm -i.
$ alias rm='rm -i'
Haz algunos datos falsos
$ touch afile
Ahora intente eliminarlo utilizando la versión de alias de rm
$ rm afile
rm: remove regular empty file `afile'?
Ahora intenta usar -f
$ rm -f afile
$
Permisos
También creo que hay casos en los que tiene acceso de solo lectura a un directorio y cuando intenta eliminar los archivos y / o subdirectorios en dicho directorio, se le cuestionará con un mensaje similar de "¿está seguro?". El uso de -fse deshace de tener que decir que sí.
Al usar el alias tiene cierto sentido. Y su respuesta coincide con lo que acabo de mostrar en las páginas de manual de openbsd. Aunque openbsd no es GNU / Linux, parece que describe lo que acabas de decir. Aquí está el enlace si alguien quisiera verificar: [link] openbsd.org/cgi-bin/…
saliarosaurus
Con bash siempre puedes \rmejecutar sin alias (\ ser un acceso directo a la commandcompilación). Creo que el mejor uso -fes en el script de shell donde tiene algo como un archivo de bloqueo que puede existir o no, -fdetiene la rm: cannot remove 'file': No such file or directoryadvertencia.
Drav Sloan el
@DravSloan Sí, eso también tiene sentido. Gracias por sus respuestas tanto Drav Sloan como slm
saliarosaurus
Yo uso a rm -fmenudo en el cleanobjetivo en Makefiles
Alex
-ino es realmente de lo que -fse trata, es más un caso marginal.
-f
no evita un código de salida de error. Sirm
intenta y no elimina un archivo existente, devolverá un código de error.La
-f
opción suprime los mensajes de confirmación al eliminar un archivo de solo lectura. También suprime errores cuando uno o más archivos suministrados no existen.La
-f
opción es útil cuando sabe que algunos de los archivos que está eliminando pueden ser de solo lectura y no desea que se le pregunte al respecto.La
f
opción también es útil cuando desea eliminar algunos archivos en caso de que existan, y no quiere importar si existen o no. Esto se usa muy comúnmente en los archivos MAKE , para crear un comando que elimine los archivos que pueden regenerarse a partir de los archivos de origen. Por ejemplo, sifoo.o
puede reconstruirse desdefoo.c
,bar.o
puede reconstruirse desdebar.c
ymyapp
puede reconstruirse desdefoo.o
ybar.o
, entonces, el destino del archivo MAKEelimina
myapp
,foo.o
ybar.o
si existen y no se queja si alguno de ellos no existe.Incluir
-f
en las instrucciones para eliminar un árbol de directorios no es necesario en la mayoría de los casos. Puede justificarse porque si está seguro de que desea eliminar ese árbol de directorios independientemente de lo que contenga, puede especificar-f
para evitar que se le solicite en caso de que algunos archivos sean de solo lectura. Sin embargo, las personas que dicen a plazorm -rf
son a menudo simplemente la repetición de un encantamiento místico para deshacerse de algo, independientemente de si las opciones-r
y-f
son realmente necesarias. Si las opciones no son necesarias, no son recomendables, porque aumentan el riesgo de que un error tipográfico en el argumento destruya algo importante.fuente
El
-i
cambio arm
Generalmente veo que
-f
se usarm
cuando elrm
comando tiene un alias para que incluya el-i
interruptor para interactivo. El-f
interruptor contrarresta el-i
.Ejemplo
Simular el problema con
rm
ser alias arm -i
.Haz algunos datos falsos
Ahora intente eliminarlo utilizando la versión de alias de
rm
Ahora intenta usar
-f
Permisos
También creo que hay casos en los que tiene acceso de solo lectura a un directorio y cuando intenta eliminar los archivos y / o subdirectorios en dicho directorio, se le cuestionará con un mensaje similar de "¿está seguro?". El uso de
-f
se deshace de tener que decir que sí.fuente
\rm
ejecutar sin alias (\ ser un acceso directo a lacommand
compilación). Creo que el mejor uso-f
es en el script de shell donde tiene algo como un archivo de bloqueo que puede existir o no,-f
detiene larm: cannot remove 'file': No such file or directory
advertencia.rm -f
menudo en elclean
objetivo enMakefile
s-i
no es realmente de lo que-f
se trata, es más un caso marginal.