Las personas que no entienden Terminal a menudo tienen miedo de usarlo por temor a que puedan estropear su comando y bloquear su computadora. Aquellos que conocen Terminal mejor saben que ese no es el caso, por lo general, Terminal solo generará un error. Pero, ¿hay realmente comandos que bloqueen su computadora?
48
Respuestas:
Una forma de bloquear una computadora es ejecutar una llamada bomba de horquilla .
Puede ejecutarlo en un sistema unix mediante:
Es un comando que generará procesos de forma recursiva hasta que el sistema operativo esté tan ocupado que ya no responda a ninguna acción.
fuente
;
con un&
y puedes eliminar todos los archivos y la bomba tenedor al mismo tiempo, ¡y ver qué rompe primero el sistema!No estoy seguro de lo que quiere decir sobre 'bloquear' la computadora: si lo reformula para decir 'dejar la computadora inutilizable', entonces sí. Ciertamente, todo lo que se necesita es un solo comando perdido: solo un momento en el que no estás pensando claramente en lo que estás haciendo, de manera similar a cuando hablas sin pensar, y el daño puede ser inmenso y casi inmediato. El ejemplo clásico:
Si deja que ese comando se ejecute solo por un segundo, eso puede borrar lo suficiente de su sistema para que no se pueda arrancar y posiblemente causar una pérdida de datos irreversible. No lo hagas
fuente
-r
significa eliminar recursivamente archivos en un directorio.-f
significa "forzar" ya que no solicite confirmación, independientemente de los permisos de un archivo determinado./
es el directorio raíz del sistema de archivos, lo que significa que destruirá cualquier cosa, excepto algunos archivos especiales que no se comportan como archivos típicos. Además, tendrá dificultades para encontrar un comando breve que bloqueará su sistema sin permisos de administrador / root.rm -rf /
un tiempo yrm
dije que si desea eliminar la raíz, use tal y tal bandera. No se perdieron datos. Parece que ahora hay una protección de seguridad contra la ejecución a ciegasrm -rf /
.rm -rf
muy similar a uno legal, que salió muy mal: /Suponga que no sabe qué está haciendo e intentando hacer una copia de seguridad de algún disco duro
Bueno, si los mezcla (cambie si y de), sobrescribirá los datos nuevos con datos antiguos, sin hacer preguntas.
Pueden ocurrir mezclas similares con las utilidades de archivo. Y francamente con la mayoría de las utilidades de línea de comandos.
Si desea un ejemplo de una mezcla de un carácter que bloqueará su sistema, eche un vistazo a este escenario: Desea mover todos los archivos del directorio actual a otro:
Aceptemos el hecho de que aprendió a usar
./
para denotar el directorio actual. (Sí) Bueno, si omite el punto, comenzará a mover todos sus archivos. Incluidos los archivos de su sistema. Tienes suerte de que no sudaste esto. Pero si lees en alguna parte que con 'sudo -i' nunca más tendrás que escribir sudo, ahora estás conectado como root. Y ahora su sistema se está comiendo frente a sus propios ojos.Pero nuevamente, creo que cosas como sobrescribir mis preciosos archivos de código con basura, porque confundí un personaje o porque mezclé el orden de los parámetros, es más problema.
Digamos que quiero ver el código de ensamblador que genera gcc:
Supongamos que ya tengo un program.s y uso la finalización de TAB. Tengo prisa y olvido TAB dos veces:
Ahora tengo el código ensamblador en mi program.c y ya no tengo código c. Lo cual es al menos un verdadero revés para algunos, pero para otros es un tiempo de inicio desde cero.
Creo que estos son los que causarán un "daño" real. Realmente no me importa si mi sistema falla. Me importaría que mis datos se pierdan.
Lamentablemente, estos son los errores que deberán cometerse hasta que aprenda a utilizar el terminal con las precauciones adecuadas.
fuente
gcc program.c -o program.c
gracias precisamente a la finalización de la pestaña. Aprendí a usar el control de versiones religiosamente después de eso.Causar un pánico en el núcleo es más parecido a estrellarse que las otras respuestas que he visto aquí hasta ahora:
(código tomado de aquí y también encontrado en la documentación de Apple )
También puedes probar:
No he verificado que el segundo allí realmente funcione (y no tengo la intención de hacerlo, ya que tengo algo de trabajo abierto en este momento).
fuente
No matching processes were found
dtrace: system integrity protection is on, some features will not be available
dtrace: description 'BEGIN' matched 1 probe
dtrace: could not enable tracing: Permission denied
dtrace
fue efectivamente neutralizado por SIP.kernel_task
No es un proceso normal. Es inmortal; No se puede matar excepto a través de un error propio (y eso se llamaría un KP y derriba toda la máquina).kernel_task
El PID es nominalmente 0, pero si proporciona eso a lakill(pid, sig)
llamada al sistema, la página del manual dice que sipid
es igual a 0,sig
se envía a cada proceso en el grupo de procesos del proceso de llamada. . Entonces simplemente no puedes enviarkernel_task
una señal.MacOS moderno hace que sea realmente difícil bloquear su máquina como un usuario no privilegiado (es decir, sin usar
sudo
), porque los sistemas UNIX están destinados a manejar miles de usuarios sin permitir que ninguno de ellos rompa todo el sistema. Entonces, afortunadamente, por lo general, se le pedirá que lo indique antes de hacer algo que destruya su máquina.Desafortunadamente, esa protección solo se aplica al sistema mismo. Como ilustra xkcd, hay muchas cosas que le interesan que no están protegidas por la Protección de integridad del sistema, los privilegios de root o las solicitudes de contraseña:
Entonces, hay toneladas de cosas que puede escribir que arruinarán su cuenta de usuario y todos sus archivos si no tiene cuidado. Algunos ejemplos:
rm -rf ${TEMPDIR}/*
. Esto parece totalmente razonable, hasta que te das cuenta de que la variable de entorno está escritaTMPDIR
.TEMPDIR
generalmente no está definido, lo que hace que esto sea asírm -rf /
. Incluso sinsudo
esto, esto eliminará felizmente todo lo que tenga permisos de eliminación, que generalmente incluirá toda su carpeta de inicio. Si deja que esto se ejecute el tiempo suficiente, también destruirá cualquier unidad conectada a su máquina, ya que generalmente tiene permisos de escritura.find ~ -name "TEMP*" -o -print | xargs rm
.find
normalmente ubicará archivos que coincidan con ciertos criterios y los imprimirá. Sin-o
esto, hace lo que esperaría y elimina todos los archivos que comienzan conTEMP*
( siempre que no tenga espacios en la ruta ). Pero,-o
significa "o" (¡no "salida" como lo hace para muchos otros comandos!), Lo que hace que este comando elimine todos sus archivos. Gorrón.ln -sf link_name /some/important/file
. Ocasionalmente, la sintaxis de este comando es incorrecta, y con mucho gusto sobrescribirá su archivo importante con un enlace simbólico inútil.kill -9 -1
matará a todos sus programas, cerrándolo con bastante rapidez y posiblemente causando pérdida de datos.fuente
find
tiene un-delete
argumento que es mucho más seguro que contarloxargs rm
ln -sf
puede hacer ... y cómo recuperarse de ella :-)find -print0 | xargs -0
para manejar con seguridad caracteres extraños en los nombres de archivo.<whatever> | xargs echo <something>
primero, para obtener una vista previa de los comandos que realmente ejecutará xargs. xargs es un gran ejemplo de por qué la CLI es tan poderosa: puede operar en muchos, muchos artículos a la vez sin una molesta confirmación y agarre de la mano ... solo asegúrese de decirle que haga lo que quiere.Otra que puedes hacer (que he hecho por error antes) es:
Esto hará que todo su sistema de archivos (que significa todos los comandos y programas) sea inaccesible ... excepto por el usuario root. Esto significa que necesitaría iniciar sesión directamente como usuario root y restaurar el sistema de archivos, PERO no puede acceder al
sudo
comando (o cualquier otro comando, para el caso). Puede restaurar el acceso a comandos y archivos iniciando en modo de usuario único, montando y restaurando el sistema de archivoschmod 755 /
.Si esto se hace de forma recursiva,
chmod -R 0 /
entonces el sistema quedará inutilizable. La solución adecuada en ese punto es utilizar la Utilidad de Discos de la partición de recuperación para reparar los permisos del disco . Es mejor que solo restaure una instantánea o una copia de seguridad de su sistema de archivos si se ejecutó de forma recursiva.fuente
chmod 755 /
dejará su sistema inseguro y roto de manera sutil. La única recuperación completa dechmod 0 /
es a través de la restauración de instantáneas, restauración de copia de seguridad y / o reinstalación.-R
bandera, así que pensé que los permisos de los subdirectorios no se verían afectados./
se ve afectado.sudo chmod -R 700 /
computadora nueva, pensando que sería mucho más seguro si lo hiciera. Sorprendentemente, arrancó y terminó con una barra de menú vacía y un escritorio en blanco. Nada más funcionó, ¡pero los permisos de restauración de la utilidad de disco de la partición de recuperación lograron configurar casi todo correctamente!Las respuestas a esa llamada
sudo
deben considerarse inválidas. Estos ya suponen acceso administrativo al sistema.Tratar
perl -e 'exit if fork;for(;;){fork;}'
. OSX puede tener alguna protección contra esto ahora. Si aparece una burbuja de manzana que le pregunta si desea finalizar la aplicación Terminal y los subprocesos, está (casi) bien.while true ; do cat /dev/zero > /dev/null & done
También es muy útil, especialmente. Si usted no tieneperl
.for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & done
solo hará una pequeña y divertida prueba de carga de CPU. Muy bueno para verificar si su disipador térmico y ventilador están a la altura.fuente
Claro, asegúrese de tener una copia de seguridad y guarde los archivos que le interesen, luego escriba
halt
Suponiendo que luego se utiliza
sudo
para ser root, la Mac se bloqueará.El mayor riesgo de la línea de comando es la pérdida de datos. La interfaz macOS está diseñada durante décadas para no sorprender a las personas y destruir sus datos, configuraciones o aplicaciones. La interfaz gráfica de macOS también existe para eliminar la curva de aprendizaje (una empinada) para que sea segura y domine las secuencias de comandos de shell.
Pierdes esas protecciones, por eso advierto a las personas que comienzan con la aplicación de terminal o ssh. Si tiene una copia de seguridad que sabe que funciona y tiene el tiempo y la confianza / habilidad para realizar una restauración, entonces debe sumergirse y aprender e incluso romper cosas.
fuente
Accidentalmente realicé un
kill -9 -1
script en perl, ejecutándome como root. Eso fue tan rápido como tirar del cable de alimentación. Al reiniciar, el servidor realizó una comprobación del sistema de archivos y continuó ejecutándose correctamente.Nunca probé ese
sudo kill -9 -1
comando en la línea de comandos. Es posible que no funcione, porque el ID de proceso "-1" significa "matar todos los procesos que pertenecen al grupo de procesos del llamador".No estoy seguro, si con sudo, eso también significa init y todas las cosas del kernel ... Pero si eres root,
kill -9 -1
definitivamente harás una parada inmediata, al igual que tirar del cable de alimentación. Por cierto, ¡nada aparecerá en los archivos de registro, porque ese comando es el asesino más rápido en el oeste!En realidad, para recuperarme, fui a nuestros administradores de sistemas y les dije lo que hice. Hicieron un reinicio completo, porque no había forma de iniciar sesión en ese servidor (RHEL6).
A
kill -9 -1
como root mata todos los procesos, que se ejecuta como root. Es decir, sshd. Eso me desconectó de inmediato e impidió que alguien volviera a iniciar sesión. Cualquier proceso iniciado por init, incluido init, se ha eliminado, a menos que hayan cambiado UID o GID. Incluso iniciar sesión a través de la consola en serie ya no era posible.ps -eaf | grep root
muestra algunos procesos sofisticados que, si reaccionan en un SIGKILL de la manera predeterminada, prácticamente detendrían incluso la escritura básica en HD.No intentaré esto ahora en mi computadora portátil :-) No tengo la curiosidad de descubrir si un
kill -9 165
([ext4-rsv-conver]) realmente dejaría de escribir en el HD.fuente
init
normalmente, pero puede matar todas las sesiones gettys y SSH y dejar la máquina inutilizable. Un Magic SysRq debería haber permitido un reinicio limpio, pero a menudo es más fácil simplemente reiniciar y confiar en el diario FS :)Sí, puedes destruir completamente tu sistema. Hacer accidentalmente algo con
sudo
privilegios es un ejemplo que se ha publicado, ya sea olvidando algunos caracteres que le indican al terminal que haga algo completamente diferente de lo que pretendía.rm
ing en/
lugar de/tmp/\*
es solo una diferencia de 5 caracteres. Poner un espacio en el lugar equivocado también podría hacer algo completamente diferente. Otras veces, las instrucciones aparentemente bien intencionadas podrían tener código malicioso ofuscado. Algunas personas en Internet son muy buenas para ofuscar el código.También hay comandos que, usando html, pueden hacer que el tamaño de fuente sea cero, por lo que algo completamente inocuo, cuando se copia en el portapapeles, de hecho podría estar instalando el repositorio git de alguien como una fuente confiable y descargando malware.
Y hay comandos que puede ejecutar que lo abren para explotar, o que podrían ser perfectamente bien intencionados pero eliminan archivos o programas importantes o corrompen su disco. De hecho, el uso incorrecto de herramientas podría hacer algo tan básico como escribir accidentalmente sobre su sector de arranque, o la cabeza de su disco, o muchos otros problemas.
Un ejemplo de algo menos destructivo que no se ha publicado es abrir archivos binarios
vi
. Si alguna vez lo ha intentado, sabrá que puede dañar su terminal hasta el punto de que no se puede usar hasta que lo seareset
.Alternativamente, hay comandos que atascarán su máquina, como:
Puedes probarlo, no hará daño, pero atascará tu procesador y tendrás que matar cada proceso que hayas generado.
Dicho esto, en informática generalmente se considera que no se puede hacer una tortilla sin romper algunos huevos. Debe ser cauteloso en la terminal, pero la única forma de mejorar el uso del sistema operativo es aprendiendo y practicando.
fuente
reset
, eso debería aclarar un terminal que tiene una salida binaria impresa. o simplemente genera un nuevo TTYreset
truco! Para más información: unix.stackexchange.com/questions/79684Solo soy un principiante, pero puedes establecer un tiempo Verdadero; hacer MANDO; hecho; La mayoría de las personas probarían Ctrl + C que detendrá el comando, no el proceso externo (ctrl + Z, que luego debe eliminarse). Supongo que si el comando es una operación pesada, como multiplicar un gran número a su propio poder, eso podría interferir con sus recursos. Pero, de hecho, el sistema operativo moderno generalmente está protegido contra tal desorden.
fuente
while true do cat /dev/zero > /dev/null & done
^C
también matará el ciclo while, pero simplemente se repite demasiado rápido para que se detecte la interrupción. Mantener presionado^C
puede salir del circuito. El cierre de la terminal también lo hará :)Seguramente aún puede causar un bloqueo del sistema usando los comandos ingresados con Terminal.
Con los años se está volviendo más difícil, probablemente debido a todo tipo de límites y medidas de protección aplicadas, pero como dice la ley de Murphy: "Nada es infalible para un tonto lo suficientemente capaz".
Las "bombas de horquilla" y todas esas
rm -rf
cosas de script kiddies son cosas conocidas para UNIX. Con Mac OS X puede divertirse más usando sus partes del subsistema GUI (WindowServer
por mencionar) o algo así como el firewall de OpenBSD, también conocido porPF
los ingenieros de Apple, pero que nunca logró actualizar desde su estado de 2008.PF
obras en el kernel por lo que cuando atrapa una peculiaridad que es hora de Apple te dice " que reinicia la computadora debido a un pánico" o cosas como esta.La peor parte de esto es que nunca puedes tener una idea de dónde y por qué entró en pánico, porque Apple no proporciona ningún rastro significativo de la pila; solo puede tener números hexadecimales de las direcciones de retorno del marco de la pila.
fuente
Es un poco ambiguo lo que quieres decir con "bloquear" tu computadora ... y no hay una respuesta correcta definitiva para eso, aunque hay algunos ejemplos útiles en otras respuestas. Como su pregunta es más ambigua y general, me gustaría centrarme en la naturaleza de la pregunta y darle una respuesta más general.
Creo que la línea de comando es una espada de doble filo y, a menudo, muy afilada. Su mayor fortaleza es también su mayor debilidad para los nuevos usuarios: los programas CLI hacen lo que usted dice, sin preguntar si realmente es lo que quería decir. A menudo no piden confirmación, no brindan ayuda manual o interactiva, y sus opciones son breves, a menudo breves, a veces confusas cadenas basadas en texto. Tenga en cuenta que generalmente están muy bien documentados, uno solo tiene que leer el manual (que es casi siempre
man <command you are about to run>
) y tomarse el tiempo para comprender qué hará la línea de comando que van a ejecutar.Este modo de operación es poderoso : significa que los usuarios experimentados de CLI pueden crear "canales" de comandos largos que realizan tareas complejas con comandos únicos. Esto se debe a que la tarea no preguntará "¿Estás seguro?" A cada paso del camino, hace lo que se le dice. Pero para un usuario que no está familiarizado con este modo, y está acostumbrado a una GUI donde la ayuda en línea está a un clic de distancia, no es familiar y da miedo.
¿Puedes "bloquear" tu computadora usando la CLI? Tal vez. Ciertamente puede causar pérdida de datos si utiliza un comando destructivo incorrectamente. Por ejemplo, muchas de las respuestas aquí mencionadas
rm
, un comando que elimina archivos. Obviamente, puede causar pérdida de datos con ese comando, para eso fue diseñado el comando.Como han señalado otras respuestas, puede usar la línea de comando para dejar su máquina prácticamente inutilizable durante un período de tiempo: puede apagarla sin confirmación, hacer que un proceso use el 100% de sus recursos disponibles sin confirmación, eliminar todos sus programas o destruir su sistema de archivos. Si realmente quisiera, podría usar la CLI para crear una extensión del núcleo que haga que el núcleo entre en pánico (que es lo más parecido a un "bloqueo" que se me ocurre).
La línea de comando (a la que se accede a través de la Terminal) es una herramienta poderosa. A menudo es más rápido resolver un problema usando Terminal que la GUI. Algunas soluciones solo están disponibles con los comandos de Terminal. Sin embargo, la clave de la CLI es la comprensión . No ejecute comandos aleatorios que vea en línea. Lea las páginas de manual y comprenda qué hacen los comandos. Si no está seguro, pregúntele a alguien u obtenga más información sobre un comando antes de ejecutarlo.
fuente