Algunos recordatorios, por supuesto todo está en las páginas man.
- / es el "separador de rutas", es decir, el carácter que separa los nombres de las carpetas (y, opcionalmente, de los archivos del terminal).
- Las rutas pueden ser relativas (al directorio de trabajo actual) o absolutas (es decir, desde la carpeta root) y una ruta que empiece por / es absoluta. Las demás son relativas.
- las carpetas tienen "entradas" que pueden ser de varios tipos, normalmente carpetas y archivos (pero no sólo)
- el comando rm toma una lista de archivos a borrar, y tiene la opción "-r" que significa : recursivo, en ese caso, puede tomar una carpeta como argumento.
- las carpetas siempre tienen entradas especiales: "." y ".." que son nombres especiales de carpetas correspondientes a las carpetas "actual" y "padre".
- Los comandos en el terminal son ejecutados por un shell, hay muchos shells, normalmente puedes encontrar tu shell usando "echo $SHELL", uno popular es "BASH". En la mayoría de los shells "*" es un "glob character", por ejemplo, abre el manual de bash (ejemplo: ejecuta: "man bash" en un terminal) y luego busca "Pathname Expansion", por ejemplo escribiendo "/Pathname Expansion", también puedes buscar "GLOBIGNORE". El comportamiento de la expansión puede ser controlado por algunas env vars y configuraciones del shell, pero podemos asumir que usas el valor por defecto, que es "reemplazar por todas las entradas que coincidan con el glob, pero que no empiecen por '.' ".
Así, el shell ejecutará el comando de la siguiente manera: rm -r /./*
- dividir la línea de comandos en elementos, separados por "espacios en blanco" : "rm" , "-r" y "/./*"
- aplicar una serie de transformaciones, en este caso sólo la expansión del nombre de la ruta del archivo " " (ejemplo de otras transformaciones: expansión de variables) a. con " "considera que el elemento es un camino b. La ruta se divide en elementos separados por "/" : "" , "." y " " c. como el primer elemento está vacío, se trata de una ruta absoluta que comienza en / (o se puede considerar que "/./ " comienza con "/" por lo que es absoluta, y luego eliminar de la lista ..) d. ok, en la carpeta root busque la entrada "." : está ahí, y de hecho informa a la misma carpeta en la que está, es decir "/" e. en esta carpeta (/), busque todas las entradas (carpetas y archivos) no cadena con "." f. sustituya el elemento globalizado en el paso 1 por la lista encontrada, es decir, obtendrá algo como: rm -r /./carpeta1 /./carpeta2 /./archivo1 ...
- ejecutar el comando resultante, creando un nuevo proceso cuyo ejecutable esté especificado por el primer elemento de lista en 1. a. si el primer argumento empieza por / es una ruta absoluta, sino el ejecutable se busca en las carpetas especificadas por la variable PATH b. otros elementos de la lista se proporcionan como argumento para el nuevo proceso : "-r" , "/./carpeta1", "/./carpeta2", "/./archivo1" etc...
- el comando rm eliminará recursivamente las carpetas y archivos especificados por la lista de carpetas y archivos ahora expandida.
La verdadera clave aquí es que los comandos en terminal son ejecutados por el shell, y un tric
e
$ echo rm -r /./*
rm -r /./Applications /./Library /./Network /./System /./Users /./Volumes /./bin /./cores /./dev /./etc /./home /./installer.failurerequests /./net /./opt /./private /./sbin /./tmp /./usr /./var
M
$ cd ..
$ rm -fr folder_to_cleanup
$ mkdir folder_to_cleanup
T
5 votos
Efectivamente, ese comando intentará borrar todos los archivos de todo tu ordenador. Las versiones recientes de MacOS protegen muchas cosas, lo que provoca errores como los que has visto. Pero los errores no le dirá qué archivos se hizo o cuáles no había podido borrar antes de que lo mataras. Va a ser difícil saber qué se ha borrado hasta que notes que falta algo. Comprueba las aplicaciones de terceros que hayas instalado, ¿todavía están ahí?
1 votos
Eso parece. Recuerdo algunas de las aplicaciones que instalé y están ahí. ¿Existe alguna forma de enviar los resultados del comando al terminal? ¿O debería hacer un restablecimiento de fábrica? TIA