¿Puedes usar Terminal para colgar tu computadora?

Las personas que no entienden a Terminal a menudo tienen miedo de usarlo por temor a que puedan desorderar su command y bloquear su computadora. Quienes conocen Terminal saben mejor que ese no es el caso, por lo general, la Terminal emitirá un error. ¿Pero realmente hay commands que bloquearán tu computadora?

ADVERTENCIA: puede perder datos si los escribe o copy pegar, especialmente los commands sudo y rm .

Una forma de bloquear una computadora es ejecutar una bomba tenedor .

Puede ejecutarlo en un sistema unix de la siguiente manera:

 :(){ :|: & };: 

Es un command que generará processs recursivamente hasta que el sistema operativo esté tan ocupado que ya no responda a ninguna acción.

No estoy seguro de lo que quiere decir con "bloquear" la computadora; si la reformulara para decir "deje la computadora inutilizable", entonces sí. Ciertamente, todo lo que se necesita es un único command aislado: solo un momento en el que no estás pensando claramente sobre lo que estás haciendo, similar a cuando hablas sin pensar, y el daño puede ser inmenso y casi inmediato. El ejemplo clásico:

 $ sudo rm -rf / 

Si dejas que ese command se ejecute solo por un segundo, eso puede eliminar lo suficiente de tu sistema para que no se pueda iniciar y posiblemente cause la pérdida irreversible de datos. No lo hagas

Supongamos que no sabe lo que está haciendo e intenta hacer una copy de security de un disco duro

 dd if=/dev/disk1 of=/dev/disk2 

Bueno, si los combina (cambie si y de), sobrescribirá los datos nuevos con datos antiguos, sin hacer preguntas.

Mezclas similares pueden ocurrir con utilidades de file. Y francamente con la mayoría de las utilidades de command-line.

Si quiere un ejemplo de confusión de un carácter que bloqueará su sistema, eche un vistazo a este escenario: desea mover todos los files en el directory actual a otro:

  mv -f ./* /path/to/other/dir 

Aceptemos el hecho de que aprendió a usar ./ para denotar el directory actual. (Lo hago) Bueno, si omites el punto, comenzará a mover todos tus files. Incluyendo tus files de sistema. Tienes suerte de que no hayas hecho esto. Pero si lees en alguna parte que con 'sudo -i' nunca más tendrás que escribir sudo, estás conectado como root ahora. Y ahora tu sistema se está comiendo frente a tus propios ojos.

Pero de nuevo creo que cosas como sobreescribir mis valiosos files de código con basura, porque estropeé un personaje o porque mezclé el order de los parameters, es más problemas.

Digamos que quiero verificar el código de ensamblador que gcc está generando:

 gcc -S program.c > program.s 

Supongamos que ya tenía un progtwig. Y uso la finalización de TAB. Tengo prisa y me olvido de TAB dos veces:

 gcc -S program.c > program.c 

Ahora tengo el código ensamblador en mi progtwig.c y no código c más. Lo cual es, al less, un retroceso real para algunos, pero para otros es el inicio desde el momento cero.

Creo que estos son los que causarán un "daño" real. Realmente no me importa si mi sistema falla. Me preocuparía que mis datos se pierdan.

Desafortunadamente, estos son los errores que se deben cometer hasta que aprenda a usar la terminal con las precauciones adecuadas.

Causar un pánico en el kernel es más parecido a estrellarse que las otras respuestas que he visto hasta ahora:

 sudo dtrace -w -n "BEGIN{ panic();}" 

(código tomado de aquí y también encontrado en la propia documentation de Apple )

También puedes probar:

 sudo killall kernel_task 

No he verificado que el segundo allí realmente funcione (y no tengo la intención, ya que tengo un trabajo abierto en este momento).

Modern macOS hace que sea realmente difícil bloquear su máquina como un usuario sin privilegios (es decir, sin usar sudo ), ya que los sistemas UNIX están diseñados para manejar miles de usuarios sin que ninguno de ellos rompa todo el sistema. Por lo tanto, afortunadamente, por lo general, se te debe solicitar antes de hacer algo que destruya tu máquina.

Desafortunadamente, esa protección solo se aplica al sistema en sí. Como lo ilustra xkcd, hay muchas cosas que le importan y que no están protegidas por System Integrity Protection, privilegios de root o requestes de contraseña:

XKCD 1200

Por lo tanto, hay toneladas de cosas que puede escribir que arruinarán su count de usuario y todos sus files si no tiene cuidado. Algunos ejemplos:

  • rm -rf ${TEMPDIR}/* . Esto parece totalmente razonable, hasta que te das count de que la variable de entorno se escribe TMPDIR . TEMPDIR generalmente no está definido, lo que hace que esta rm -rf / . Incluso sin sudo , esto eliminará felizmente cualquier cosa que tenga permissions de eliminación, que generalmente includeá toda su carpeta de inicio. Si dejas que esto se ejecute lo suficiente, también activará cualquier disco conectado a tu máquina, ya que normalmente tienes permissions de escritura para esos.
  • find ~ -name "TEMP*" -o -print | xargs rm find ~ -name "TEMP*" -o -print | xargs rm . find localizará normalmente files que coincidan con ciertos criterios y los imprimirá. Sin el -o esto hace lo que esperaría y borra todos los files que comienzan con TEMP* ( siempre y cuando no tenga espacios en la ruta ). Pero, -o significa "o" (¡no "salida" como lo hace para muchos otros commands!), Haciendo que este command realmente borre todos sus files. Gorrón.
  • ln -sf link_name /some/important/file . La syntax para este command es incorrecta ocasionalmente, y con mucho gusto sobrescribirá tu file importante con un enlace simbólico inútil.
  • kill -9 -1 matará a cada uno de tus progtwigs, iniciando session rápidamente y posiblemente causando la pérdida de datos.

Otro que puede hacer (que he hecho por error antes) es:

 sudo chmod 0 / 

Esto hará que su sistema de files completo (lo que significa todos los commands y progtwigs) sea inaccesible … excepto por el usuario raíz. Esto significa que debe iniciar session directamente como usuario root y restaurar el sistema de files, PERO no puede acceder al command sudo (o cualquier otro command, para el caso). Puede restaurar el acceso a commands y files iniciando en modo monousuario, montando y restaurando el sistema de files con chmod 755 / .

Si esto se hace de forma recursiva con chmod -R 0 / , esto hará que el sistema quede inutilizable. La solución correcta en ese punto es usar la Utilidad de Discos desde la partición de recuperación para reparar los permissions del disco . Puede que sea mejor simplemente restaurar una instantánea o copy de security de su sistema de files si se ejecutó recursivamente.

Las respuestas que llaman sudo deben considerarse inválidas. Estos ya asumen el acceso administrativo al sistema.

Pruebe con perl -e 'exit if fork;for(;;){fork;}' . OSX puede tener alguna protección contra esto ahora. Si se presenta una burbuja de manzana preguntándote si deseas terminar la aplicación y los subprocesss de la Terminal, eres (casi) bueno.

while true ; do cat /dev/zero > /dev/null & done while true ; do cat /dev/zero > /dev/null & done también es muy útil, esp. si no tienes perl .

for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & done for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & done solo hará una pequeña testing de carga de CPU. Muy bueno para verificar si su disipador de calor y ventilador están a la par.

Claro, asegúrese de tener una copy de security y save los files que le interesan, luego escriba halt

Asumiendo que luego uses sudo para ser root, la Mac se bloqueará.

El mayor riesgo de la línea de command es la pérdida de datos. La interfaz de macOS está diseñada durante décadas para no sorprender a las personas y destruir sus datos o configuraciones o aplicaciones. La interfaz gráfica de macOS también existe para eliminar la curva de aprendizaje (una pendiente pronunciada) para estar seguro y dominar los scripts de shell.

Pierdes esas protecciones y es por eso que advierto a las personas que comienzan con la aplicación de terminal o ssh. Si tiene una copy de security que sabe que funciona y tiene el time y la confianza / habilidad para realizar una restauración, entonces debe bucear, aprender e incluso romper cosas.

 sudo kill -9 -1 

Accidentalmente ejecuté un kill -9 -1 en un script perl, ejecutándome como root. Eso fue tan rápido como tirar del cable de alimentación. Al reiniciar, el server realizó una comprobación del sistema de files y continuó funcionando correctamente.

Nunca intenté ese command sudo kill -9 -1 en la command-line. Puede que no funcione, porque la ID de process "-1" significa "matar a todos los processs que pertenecen al grupo de processs de la persona que llama".

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á una parada inmediata, igual que si tiraras del cable de alimentación. Por cierto, nada aparecerá en los files de logging, ¡porque ese command es el asesino más rápido en el oeste!

En realidad, para recuperarme, fui a nuestros administradores del sistema y les dije lo que hice. Hicieron un reinicio duro, porque no había forma de iniciar session en ese server (RHEL6).

Un kill -9 -1 como root mata a cada process, que se ejecuta como root. Es decir, sshd. Eso me desconectó inmediatamente e impidió que alguien vuelva a iniciar session. Cualquier process iniciado por init, incluido init, ha sido eliminado, a less que hayan cambiado el UID o el GID. Incluso el inicio de session a través de la console serie ya no era posible. ps -eaf | grep root ps -eaf | grep root muestra algunos processs sofisticados, que, si reactjsn en un SIGKILL de la manera pnetworkingeterminada, prácticamente detendrían incluso la escritura básica en HD.

No intentaré esto ahora en mi computadora portátil 🙂 No tengo la curiosidad suficiente para descubrirlo, si un kill -9 165 ([ext4-rsv-conver]) dejara de escribir en HD.

Sí, puedes destruir completamente tu sistema. Accidentalmente hacer algo con los privilegios de sudo es un ejemplo que se ha publicado, ya sea que se olvide de unos pocos caracteres que indican a la terminal que haga algo completamente diferente de lo que pretendía. rm ing / lugar de /tmp/\* es solo una diferencia de 5 caracteres. Poner un espacio en el lugar equivocado podría hacer algo completamente diferente también. Otras veces, las instrucciones aparentemente bien intencionadas podrían tener un código malicioso ofuscado. Algunas personas en Internet son muy buenas para descifrar el código.

También hay commands que, usando html, pueden hacer que el tamaño de fuente sea cero, por lo que algo completamente inofensivo, cuando se copy al portapapeles, de hecho podría ser instalar el repository git de alguien como una fuente confiable y download malware.

Y hay commands que puede ejecutar que le abren para explotar, o que podrían ser perfectamente adecuados, pero eliminan files o progtwigs importantes o corrompen su disco. De hecho, usar herramientas incorrectamente podría hacer algo tan básico como escribir accidentalmente sobre el sector de inicio, o el encabezado de su disco, o muchos otros problemas.

Un ejemplo de algo less destructivo que no se ha publicado es abrir files binarys en vi . Si alguna vez lo has probado, sabrás que puede estropear tu terminal hasta el punto de que no se puede usar hasta que se reset .

Alternativamente, hay commands que bloquearán su máquina, como:

 yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & yes >> /dev/null & 

Puedes intentarlo, no va a hacer daño, pero va a empantanar tu procesador, y tendrás que matar cada process que has engendrado.

Dicho esto, en el cálculo generalmente se considera que no se puede hacer una tortilla sin romper algunos huevos. Debe tener cuidado con la terminal, pero la única forma en que uno puede ser mejor al usar el sistema operativo es aprendiendo y practicando.

Solo soy un principiante bash, pero podrías establecer un time True; hacer COMANDO; hecho; La mayoría de las personas intentaría Ctrl + C que detendría el command, no el process externo (ctrl + Z, que luego necesita ser eliminado). Supongo que si el command es una operación pesada como multiplicar un gran número por su propia potencia, eso podría interferir con tus resources. Pero, de hecho, los sistemas operativos modernos generalmente están protegidos contra ese desorder.

Es un poco ambiguo lo que quiere decir con "bloquear" su computadora … y no hay una respuesta correcta definitiva para eso, aunque hay algunos ejemplos útiles en otras respuestas. Dado que su pregunta es más ambigua y general, me gustaría centrarme en la naturaleza de la pregunta y dar una respuesta más general.

Las personas que no entienden Terminal a menudo tienen miedo de usarlo por temor a que puedan desorderar su command y bloquear su computadora

Creo que la línea de command 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 progtwigs de CLI hacen lo que usted dice, sin preguntar si realmente es lo que usted quiso decir. A menudo no piden confirmación, no ofrecen ayuda interactiva o interactiva, y sus opciones son cortas, a menudo escuetas, a veces confusas, basadas en text. Tenga en count que, en general, están muy bien documentados, uno solo tiene que leer el manual (que casi siempre es man <command you are about to run> ) y tomarse el time para entender qué hará la command-line que van a ejecutar.

Este modo de operación es poderoso : significa que los usuarios experimentados de CLI pueden crear "tuberías" de command largas que completan tareas con commands únicos. Esto se debe a que la tarea no preguntará "¿Estás seguro?" cada paso del path, hace lo que se dice. Pero para un usuario que no está familiarizado con este modo y que está acostumbrado a una GUI donde la ayuda en línea está a un clic de distancia, no le resulta familiar y atemorizante.

¿Pero realmente hay commands que bloquearán tu computadora?

¿Puedes "bloquear" tu computadora usando la CLI? Tal vez. Ciertamente puede causar la pérdida de datos si utiliza un command destructivo incorrectamente. Por ejemplo, muchas de las respuestas aquí mencionan rm , un command que borra files. Obviamente, puede causar la pérdida de datos con ese command, es lo que el command fue diseñado para hacer.

Como han señalado otras respuestas, puede usar la línea de command para dejar su máquina virtual inutilizable por un período de time: puede cerrar sin confirmación, hacer que un process use el 100% de sus resources disponibles sin confirmación, matar todos sus progtwigs o destruye tu sistema de files Si realmente quisiera, podría usar la CLI para crear una extensión de kernel que cause pánico en el kernel (que es lo más cercano a un "crash" que puedo pensar)

La línea de command (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 commands de Terminal. Sin embargo, la key de la CLI es la comprensión . No ejecute commands aleatorios que vea en línea. Lea las páginas man y entienda lo que hacen los commands. Si no está seguro, pregúntele a alguien u obtenga más información sobre un command antes de ejecutarlo.

Seguramente todavía puede causar un locking del sistema utilizando commands ingresados ​​con Terminal.

Con los años, es cada vez más difícil debido probablemente 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 suficientemente capaz".

Las "bombas de horquilla" y todo lo que rm -rf script kiddies son cosas antiguamente conocidas para UNIX. Con Mac OS X puedes divertirte más usando sus partes del subsistema GUI ( WindowServer para mencionar) o algo así como el firewall OpenBSD aka PF que trajeron los ingenieros de Apple pero que nunca logró actualizar desde su estado de cosas 2008. PF funciona en kernel, por lo que cuando detecta una peculiaridad, es hora de que Apple le diga "reinició la computadora debido al pánico" o cosas como esta.

La peor parte de esto es que nunca se puede tener una idea de dónde-n-por qué entró en pánico, porque Apple no proporciona ningún rastro de stack significativo; solo puedes tener numbers hexadecimales de las direcciones de retorno del marco de stack.