As pessoas que não entendem o Terminal geralmente têm medo de usá-lo por medo de atrapalhar o comando e travar o computador. Quem conhece o Terminal sabe que esse não é o caso - geralmente o Terminal apenas gera um erro. Mas, na verdade, existem comandos que irão travar seu computador?
48
Respostas:
Uma maneira de travar um computador é executar a chamada bomba de forquilha .
Você pode executá-lo em um unix-sytem:
É um comando que gera recursivamente processos até que o sistema operacional esteja tão ocupado que não responda mais a nenhuma ação.
fonte
;
por um&
e você remove todos os arquivos e o fork bomb ao mesmo tempo e vê o que interrompe o sistema primeiro!Não sei o que você quer dizer com 'travar' o computador - se você o reformular para dizer 'tornar o computador inutilizável', então sim. Certamente, basta um único comando perdido - apenas um momento em que você não está pensando claramente sobre o que está fazendo, semelhante a quando você fala sem pensar, e o dano pode ser imenso e quase imediato. O exemplo clássico:
Se você deixar esse comando ser executado por apenas um segundo, isso pode acabar com o sistema suficiente para torná-lo não inicializável e possivelmente causar perda irreversível de dados. Não faça isso.
fonte
-r
significa excluir recursivamente os arquivos em um diretório.-f
significa "forçar", como em não pedir confirmação, independentemente das permissões de um determinado arquivo./
é o diretório raiz do sistema de arquivos, o que significa que ele destruirá tudo e qualquer coisa, exceto talvez alguns arquivos especiais que não se comportam como arquivos típicos. Além disso, você terá muita dificuldade em encontrar um breve comando que trava o sistema sem permissões de administrador / root.rm -rf /
um tempo atrás erm
disse que, se você deseja remover a raiz, use esse sinalizador. Nenhum dado foi perdido. Parece que agora existe uma proteção de segurança contra a execução cegarm -rf /
.rm -rf
realmente semelhante a um legal, que foi realmente errado: /Suponha que você não saiba o que está fazendo e tentando fazer backup de algum disco rígido
Bem, se você misturá-los (alterne se e de), ele substituirá os dados novos por dados antigos, sem perguntas.
Podem ocorrer misturas semelhantes com os utilitários de arquivo. E, francamente, com a maioria dos utilitários de linha de comando.
Se você deseja um exemplo de uma mistura de um caractere que trava o sistema, observe este cenário: Você deseja mover todos os arquivos no diretório atual para outro:
Vamos aceitar o fato de que você aprendeu a usar
./
para denotar o diretório atual. (Sim) Bem, se você omitir o ponto, ele começará a mover todos os seus arquivos. Incluindo os arquivos do sistema. Você tem sorte de não ter sudo isso. Mas se você ler em algum lugar que, com 'sudo -i', nunca mais precisará digitar sudo, pois você está logado como root agora. E agora seu sistema está se alimentando diante de seus próprios olhos.Mas, novamente, acho que coisas como sobrescrever meus preciosos arquivos de código com lixo, porque errei um caractere ou porque misturei a ordem dos parâmetros, são mais problemas.
Digamos que eu queira verificar o código do assembler que o gcc está gerando:
Suponha que eu já tenha um program.s e use a conclusão do TAB. Estou com pressa e esqueça o TAB duas vezes:
Agora eu tenho o código do assembler no meu program.c e não tenho mais o código c. O que é pelo menos um verdadeiro revés para alguns, mas para outros é começar do zero.
Eu acho que esses são os que causam "danos" reais. Eu realmente não me importo se meu sistema travar. Eu me importaria com a perda de meus dados.
Infelizmente, esses são os erros que deverão ser cometidos até você aprender a usar o terminal com as devidas precauções.
fonte
gcc program.c -o program.c
graças exatamente à conclusão da guia. Aprendi a usar o controle de versão religiosamente depois disso.Causar um pânico no kernel é mais parecido com o travamento do que as outras respostas que eu vi aqui até agora:
(código retirado daqui e também encontrado na documentação da Apple )
Você também pode tentar:
Eu não verifiquei se o segundo realmente funciona (e não pretendo, pois tenho algum trabalho aberto no momento).
fonte
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
foi efetivamente neutralizado pelo SIP.kernel_task
não é um processo normal. É imortal; Ele não pode ser eliminado, exceto por um erro próprio (e isso seria chamado de KP e derrubaria toda a máquina).kernel_task
O PID é nominalmente 0, mas se você fornecer isso aokill(pid, sig)
syscall, a página de manual diz que Se forpid
igual a 0,sig
será enviada a todos os processos no grupo de processos do processo de chamada. . Portanto, você simplesmente não consegue enviarkernel_task
um sinal.O macOS moderno torna muito difícil travar sua máquina como um usuário sem privilégios (ou seja, sem usar
sudo
), porque os sistemas UNIX destinam-se a lidar com milhares de usuários sem permitir que nenhum deles quebre o sistema inteiro. Portanto, felizmente, você precisará ser avisado antes de fazer algo que destrua sua máquina.Infelizmente, essa proteção se aplica apenas ao próprio sistema. Como o xkcd ilustra, há muitas coisas importantes para você que não são protegidas pelo System Integrity Protection, privilégios de root ou solicitações de senha:
Portanto, existem várias coisas que você pode digitar que acabarão com a sua conta de usuário e todos os seus arquivos, se você não tomar cuidado. Alguns exemplos:
rm -rf ${TEMPDIR}/*
. Isso parece totalmente razoável, até você perceber que a variável de ambiente está escritaTMPDIR
.TEMPDIR
geralmente é indefinido, o que torna issorm -rf /
. Mesmo semsudo
, isso removerá com prazer qualquer coisa para a qual você tenha permissões de exclusão, que geralmente inclui toda a sua pasta pessoal. Se você deixar isso funcionar por tempo suficiente, também danificará qualquer unidade conectada à sua máquina, já que você geralmente tem permissões de gravação para elas.find ~ -name "TEMP*" -o -print | xargs rm
.find
normalmente localizará arquivos que correspondem a determinados critérios e os imprimirá. Sem-o
isso, o que você esperaria e exclui todos os arquivos iniciadosTEMP*
( desde que você não tenha espaços no caminho ). Mas, os-o
meios "ou" (não "saída", como acontece com muitos outros comandos!), Fazendo com que este comando realmente exclua todos os seus arquivos. Vadio.ln -sf link_name /some/important/file
. Ocasionalmente, recebo a sintaxe errada deste comando e ele substitui o arquivo importante com um link simbólico inútil.kill -9 -1
irá matar todos os seus programas, desconectando você rapidamente e possivelmente causando perda de dados.fonte
find
tem um-delete
argumento que é muito mais seguro do que a tubagem axargs rm
ln -sf
pode fazer ... e como recuperar a partir dele :-)find -print0 | xargs -0
para manipular com segurança caracteres estranhos nos nomes de arquivos.<whatever> | xargs echo <something>
primeiro, para visualizar quais comandos o xargs realmente executará. O xargs é um ótimo exemplo de por que a CLI é tão poderosa: você pode operar em muitos, muitos itens ao mesmo tempo, sem a confirmação incômoda e a manipulação manual ... apenas certifique-se de dizer para fazer o que quiser.Outro que você pode fazer (que eu já fiz por engano antes) é:
Isso tornará todo o seu sistema de arquivos (o que significa todos os comandos e programas) inacessível ... exceto pelo usuário root. Isso significa que você precisaria efetuar login diretamente como usuário root e restaurar o sistema de arquivos, MAS não poderá acessar o
sudo
comando (ou qualquer outro comando, nesse caso). Você pode restaurar o acesso a comandos e arquivos inicializando no modo de usuário único, montando e restaurando o sistema de arquivoschmod 755 /
.Se isso for feito recursivamente
chmod -R 0 /
, isso tornará o sistema inutilizável. A correção adequada nesse momento é usar o Utilitário de Disco da partição de recuperação para reparar permissões de disco . Pode ser melhor apenas restaurar um instantâneo ou backup do seu sistema de arquivos, se este for executado de forma recursiva.fonte
chmod 755 /
deixará seu sistema inseguro e quebrado de maneiras sutis. A única recuperação completachmod 0 /
é através da restauração de instantâneo, restauração de backup e / ou reinstalação.-R
sinalizador - então pensei que as permissões dos subdiretórios não seriam afetadas?/
é afetado.sudo chmod -R 700 /
um computador novo, imaginando que seria muito mais seguro se eu fizesse isso. Surpreendentemente, ele inicializou e acabou com uma barra de menus vazia e uma área de trabalho em branco. Nada mais funcionou, mas as Permissões de Restauração de Utilitário de Disco da partição de recuperação conseguiram definir quase tudo certo!As respostas dessa chamada
sudo
devem ser consideradas inválidas. Eles já assumem acesso administrativo ao sistema.Tente
perl -e 'exit if fork;for(;;){fork;}'
. O OSX pode ter alguma proteção contra isso agora. Se for apresentado um balão de maçã perguntando se você deseja finalizar o aplicativo e subprocessos do Terminal, você é (quase) bom.while true ; do cat /dev/zero > /dev/null & done
também é muito útil, esp. se você não tiverperl
.for i in 1 2 3 4 ; do cat /dev/zero > /dev/null & done
apenas fará um pequeno teste de carga de CPU engraçado. Muito bom para verificar se o dissipador de calor e o ventilador estão no mesmo nível.fonte
Claro, verifique se você possui um backup, salve os arquivos de que gosta e digite
halt
Supondo que você
sudo
seja root, o Mac falhará.O maior risco da linha de comando é a perda de dados. A interface do macOS foi projetada ao longo de décadas para não surpreender as pessoas e destruir seus dados, configurações ou aplicativos. A interface gráfica do macOS também existe para remover a curva de aprendizado (uma íngreme) para ser segura e dominar os scripts de shell.
Você perde essas proteções e é por isso que aconselho as pessoas que começam com app terminal ou ssh. Se você tem um backup que você sabe que funciona e tem tempo e confiança / habilidade para executar uma restauração, deve se aprofundar, aprender e até quebrar as coisas.
fonte
Eu acidentalmente executei um
kill -9 -1
em um script perl, executando como root. Isso foi tão rápido quanto puxar o cabo de força. Na reinicialização, o servidor fez uma verificação do sistema de arquivos e continuou funcionando corretamente.Eu nunca tentei esse
sudo kill -9 -1
comando na linha de comando. Pode não funcionar, porque o ID do processo "-1" significa "eliminar todos os processos que pertencem ao grupo de processos do chamador".Não tenho certeza, se com sudo, isso também significa init e todo o material do kernel ... Mas se você é root,
kill -9 -1
definitivamente fará uma parada imediata - assim como puxar o cabo de alimentação. A propósito - nada aparecerá nos arquivos de log, porque esse comando é o assassino mais rápido do oeste!Na verdade, para me recuperar, fui aos nossos administradores de sistemas e contei o que fiz. Eles fizeram uma reinicialização forçada, porque não havia como fazer login no servidor (RHEL6).
A
kill -9 -1
como raiz mata todos os processos, que são executados como raiz. Ou seja, sshd. Isso me desconectou imediatamente e impediu que alguém fizesse login novamente. Qualquer processo iniciado pelo init, incluindo o init, foi eliminado, a menos que eles alterassem o UID ou o GID. Mesmo o login através do console serial não era mais possível.ps -eaf | grep root
mostra alguns processos sofisticados, que, se eles reagirem a um SIGKILL da maneira padrão, praticamente impedirão a gravação básica em HD.Não vou tentar isso agora no meu laptop :-) Não tenho curiosidade suficiente para descobrir se um
kill -9 165
([ext4-rsv-convert]) realmente pararia de gravar no HD.fonte
init
normalmente, mas pode matar todas as sessões gettys e SSH e tornar a máquina inutilizável. A mágica SysRq deveria ter permitido para uma reinicialização limpa, mas muitas vezes é mais fácil de ciclo de energia justo e contar com a revista FS :)Sim, você pode destruir completamente o seu sistema. Fazer algo acidentalmente com
sudo
privilégios é um exemplo que foi publicado, seja esquecendo alguns caracteres que instruem o terminal a fazer algo completamente diferente do que você pretendia.rm
ing em/
vez de/tmp/\*
é apenas uma diferença de 5 caracteres. Colocar um espaço no lugar errado também poderia fazer algo completamente diferente. Outras vezes, instruções aparentemente bem-intencionadas poderiam ter ocultado um código malicioso. Algumas pessoas na internet são muito boas em ofuscar código.Também existem comandos que, usando html, podem ser tornados zero o tamanho da fonte, para que algo completamente inócuo, quando copiado para a área de transferência, possa de fato estar instalando o repositório git de alguém como uma fonte confiável e fazendo o download de malware.
E existem comandos que você pode executar que o abrem para serem explorados, ou que poderiam ser perfeitamente bem-intencionados, mas removem arquivos ou programas importantes ou corrompem seu disco. De fato, o uso incorreto de ferramentas pode fazer algo tão básico quanto escrever acidentalmente em seu setor de inicialização, na cabeça do seu disco ou em muitos outros problemas.
Um exemplo de algo menos destrutivo que não foi publicado é a abertura de arquivos binários
vi
. Se você já experimentou, saberá que ele pode atrapalhar o seu terminal a ponto de ser inutilizável até que sejareset
.Como alternativa, existem comandos que atolarão sua máquina, como:
Você pode tentar esse, não vai causar danos, mas atrapalha o seu processador, e você terá que matar cada processo que gerou.
Dito isto, na computação é geralmente considerado que você não pode fazer uma omelete sem quebrar alguns ovos. Você deve ser cauteloso no terminal, mas a única maneira de melhorar o uso do sistema operacional é aprendendo e praticando.
fonte
reset
, isso deve limpar um terminal que tenha uma saída binária impressa nele. ou, simplesmente gerar um novo TTYreset
truque! Para obter mais informações: unix.stackexchange.com/questions/79684Eu sou apenas um iniciante no bash, mas você pode definir um tempo como True; COMMAND; feito; A maioria das pessoas tentaria Ctrl + C que interromperá o comando, não o processo externo (ctrl + Z, que precisa ser eliminado). Eu acho que se o comando é uma operação pesada, como multiplicar um grande número pelo seu próprio poder, isso pode prejudicar seus recursos. Mas, de fato, o sistema operacional moderno geralmente está protegido contra essa bagunça.
fonte
while true do cat /dev/zero > /dev/null & done
^C
também matará o loop while, mas ele se repete muito rápido para que a interrupção seja capturada. Manter pressionado^C
pode sair do circuito. Fechando o terminal também vai :)Certamente você ainda pode causar uma falha no sistema usando os comandos inseridos no Terminal.
Com o passar dos anos, está ficando mais difícil, provavelmente devido a todos os tipos de limites e medidas de proteção aplicadas, mas como a lei do tipo Murphy declara: "Nada é infalível para um tolo suficientemente capaz".
"Fork bombs" e todo esse
rm -rf
material infantil de script são coisas conhecidas do UNIX. Com o Mac OS X, você pode se divertir mais usando as partes do subsistema da GUI (WindowServer
para mencionar) ou algo como o firewall do OpenBSD, também conhecidoPF
pelos engenheiros da Apple, mas que nunca conseguiram atualizar desde o estado de coisas de 2008.PF
funciona no kernel; portanto, quando ele percebe uma peculiaridade, é hora da Apple dizer " você reiniciou o computador devido a um pânico" ou coisas assim.A pior parte disso é que você nunca pode ter uma idéia de onde e por que entrou em pânico - porque a Apple não fornece nenhum rastreamento significativo de pilha; você pode ter apenas números hexadecimais dos endereços de retorno do quadro da pilha.
fonte
É um pouco ambíguo o que você quer dizer com "travar" seu computador ... e não há resposta correta definitiva para isso, embora haja alguns exemplos úteis em outras respostas. Como sua pergunta é mais ambígua e geral, gostaria de focar na natureza da pergunta e fornecer uma resposta mais geral.
Eu acho que a linha de comando é uma faca de dois gumes, e muitas vezes muito afiada. Sua maior força também é sua maior fraqueza para novos usuários: os programas CLI fazem o que você diz, sem perguntar se é realmente o que você quis dizer. Geralmente, eles não pedem confirmação, não fornecem ajuda interativa ou de mãos dadas e suas opções são curtas, muitas vezes concisas, às vezes confusas. Observe que eles geralmente são muito bem documentados, basta ler o manual (o que é quase sempre
man <command you are about to run>
) e dedicar um tempo para entender o que a linha de comando que eles executarão fará.Esse modo de operação é poderoso - significa que os usuários experientes da CLI podem criar "pipelines" de comando longos, que executam tarefas complexas com comandos únicos. Isso ocorre porque a tarefa não pergunta "Você tem certeza?" a cada passo do caminho, ele faz o que é dito. Porém, para um usuário não familiarizado com esse modo e acostumado a uma GUI em que a ajuda on-line está a um clique de distância, isso é desconhecido e assustador.
Você pode "travar" seu computador usando a CLI? Talvez. Você certamente pode causar perda de dados se você usar um comando destrutivo incorretamente. Por exemplo, muitas das respostas mencionadas aqui
rm
, um comando que exclui arquivos. Obviamente, você pode causar perda de dados com esse comando, é para isso que o comando foi projetado.Como outras respostas apontaram, você pode usar a linha de comando para tornar sua máquina praticamente inutilizável por um período de tempo: você pode desligar sem confirmação, fazer com que um processo use 100% dos recursos disponíveis sem confirmação, matar todos os seus programas ou destrua seu sistema de arquivos. Se você realmente quisesse, poderia usar a CLI para criar uma extensão do kernel que causasse pânico no kernel (que é o mais próximo de um "travamento" em que consigo pensar).
A linha de comando (acessada através do Terminal) é uma ferramenta poderosa. Muitas vezes, é mais rápido resolver um problema usando o Terminal do que a GUI. Algumas soluções estão disponíveis apenas usando os comandos do Terminal. No entanto, a chave para a CLI é o entendimento . Não execute comandos aleatórios que você vê online. Leia as páginas de manual e entenda o que os comandos fazem. Se não tiver certeza, pergunte a alguém ou saiba mais sobre um comando antes de executá-lo.
fonte