Quais são seus momentos Unix * dolorosos * favoritos


34

Que tal compartilhar seus momentos favoritos das lições aprendidas ?


Engraçado quantas das respostas envolvem o rmcomando. Ou triste.
Barry Brown

Respostas:


67

Eu estava curioso para chmod 000 /dar certo.

Bem, na perfeição. Alguns minutos depois, eu estava procurando por um CD de resgate.


11
Uau, eu nunca considerei isso até você mencionar. Um bom.
Stefan Lasiewski

O que acontece se você fizer isso em um arquivo regular?
Luc H

@Luc Eu acho que você só precisa chmod-lo de volta
phunehehe

Normalmente, faço esses 'experimentos' na minha VM do Arch. Se bombardear, eu apenas retrocedo.
André Paramés

Eu cometi esse erro uma vez. Foi altamente embaraçoso, mas uma lição valiosa.
12137 Charles Sprayberry

37

Quando comecei a trabalhar como consultor de usuários para a universidade em que participava, recebi sudodireitos limitados para ajudar os alunos que haviam perdido / esquecido suas senhas. sudo passwd <username>era meu novo amigo. Uma hora depois da minha orientação, minha curiosidade tomou conta de mim e eu digitei sudo passwde olhei horrorizada a solicitação de uma nova senha. Fiquei um pouco assustado ^C, pensando (erroneamente, ao que parece) que eu poderia deixar a conta em questão em um estado transitório, então digitei uma senha e imediatamente subi as escadas para o domínio sagrado do segundo andar do SuperUser do campus e perguntou se ele gostaria de saber a senha root do sistema principal.


4
heh, dono! Confuso Deputado: P
Spudd86

30
você poderia ter digitado uma senha de incompatibilidade no segundo prompt de confirmação, para que nada fosse afetado e a senha passasse.
Wadih M.

11
@ Wadih: passwdcomporta - se engraçado quando executado como root. Por exemplo, ao falhar na verificação de erros de digitação, ele pergunta novamente.
György Andrasek

Você poderia ter mudado de volta para o que era antes.
HandyGandy

11
@HandyGandy ele não sabia a senha root original. Ele só tinha direitos de sudo para executar senhas.
gnud

32

Surpreendido, ninguém mais mencionou este ainda:

rm -rf .*

(Ao tentar remover todos os arquivos e subdiretórios ocultos, esquecendo completamente que ele retornará para .e ..)


3
Embora isso tenha me queimado no passado, muitas versões rmnão o farão agora. Eu tentei Darwin e recebi o erro rm: "." and ".." may not be removed.
Stefan Lasiewski

7
Faço isso o tempo todo, em todos os tipos de plataformas. Funciona como pretendido no OpenBSD, NetBSD, Linux e OpenSolaris.
precisa saber é

Se você deseja combinar todos os arquivos de ponto, exceto .e .., use .[^.]*. (Bem, isso vai realmente perder todos os arquivos começando com .., mas normalmente há apenas uma.)
Sven Marnach

@ Sven: Outra maneira é .??*, que eu acho mais fácil digitar. Este não corresponde a arquivos de ponto de duas letras .a, mas também são incomuns. Eu pesquiso os arquivos de configuração no meu diretório pessoal com grep -r .??*, por exemplo.
Neil Mayhew

31

Makefile:

clean:
    @rm -f * .o

O que, é claro, faz com que make cleanlimpe seu código-fonte em vez de apenas arquivos de objeto.

Lição: use o controle de versão.


11
Se você não pode vê-lo, observe o caractere de espaço entre *e.o
Denilson Sá Maia

11
Eu sinto sua dor, aconteceu a todos nós em algum momento :)
axel_c

Lição recarregada: sempre que você fizer coisas de concha e vir um " ", seja * extra , não, seja extra extra extra cuidado.
Jürgen A. Erhard

Eu fiz isso manualmente, depois de puxar a noite toda no laboratório. O projeto era devido algumas horas depois. Acabou sendo uma bênção disfarçada; a nova versão reescrita que entreguei era muito melhor do que a versão enfaixada que apaguei.
Barry Brown

11
Referência obrigatória do zangão: github.com/MrMEEE/bumblebee/commit/a047be
Residuum

30

Um amigo rodou :() { :|:&}; :em um servidor remoto onde não tínhamos acesso ao console. Não foi possível reiniciá-lo, completamente congelado, servidor de produção .

Dividido (por solicitação) para torná-lo um pouco mais legível.

:() # Define ':' as a function. Every time we say ':' execute the following code block
{ # Start of code block
    : # Call ':' again. 
    | # Pipe output to...
    : # Another ':' 
    & # Disown process. 
    # All on one line this would read :|:&, 
} # End of code block
; # End definition of ':' as a function
: # Call ':'

Pode ser mais fácil olhar para ele como

bomb() { bomb|bomb& }; bomb

11
Você gostaria de explicar o que faz? Eu não posso descobrir isso e eu não quiser experimentá-lo;)
naugtur

23
Parece uma bomba de garfo. Não tente fazer isso, a menos que você realmente saiba o que está fazendo.
Zaid

5
Sim. É uma bifurcação. E um ótimo :) Parece que bifurca o interpretador do bash, pois ele tenta interminavelmente analisá-lo. Se você pular o último :, não fará nada. E não usa memória, apenas bifurca-se bastante. [Sim, eu tentei :)]. Os efeitos podem ser bloqueados com uma cota no número de processos por usuário.
naugtur


4
+1 no comentário acima. É muito mais fácil entender do que parece.
Umang

29

Eu quis dizer bem, eu realmente fiz. Tentando chmodrecursivamente um diretório e acabou trocando ./com /.

Como raiz, é claro, porque somente com a raiz a verdadeira dor (e, portanto, a iluminação) pode ser alcançada.


23
+1 para citável "Somente com raiz a dor verdadeira (e, portanto, a iluminação) pode ser alcançada."
Stefan Lasiewski

21

Limpei a tabela de partição da minha unidade principal por acidente, pensando que estava trabalhando em outra unidade.

Com o scrollback, o uso cuidadoso df, a memória e a sorte, pude recriá-lo exatamente, reescrevê-lo, reiniciar e ter esperança ... E funcionou.


6
Um amigo fez isso e eu o ajudei a restaurar a mesa. Infelizmente, não tínhamos os valores anteriores para os tamanhos e compensações da partição, então usamos um loop bash com a ddleitura do primeiro bloco de 4k de cada cilindro canalizado file -para encontrar o superbloco e, portanto, o início do sistema de arquivos. Este estava em um CD ao vivo e não havia RAM suficiente para fazer tudo o que precisávamos (incluindo a instalação de um ou dois pacotes), por isso entramos em um processo em execução no ssh em outra máquina.
Neil Mayhew

2
Ai. É por isso que eu sempre uso sempre sfdisk -Oo backup da tabela de partições. FYI: cgsecurity.org/wiki/TestDisk pode automatizar o que o @Neil Mayhew fez.
ephemient 17/11/2010

2
Eu também estava lá, testdisksalvei minha caixa
phunehehe

Atualmente, temos gpart, que procura coisas que podem se parecer com sistemas de arquivos e constrói uma tabela de partição a partir disso.
Simon Richter

19

Não é realmente o meu momento, mas o de outra pessoa.

Quando eu trabalhava em uma instalação de pesquisa em ciências nucleares, costumávamos executar vários computadores SunOS, Ultrix e Linux, e os pesquisadores tinham que compartilhar a CPU nessas máquinas. Como grupos de pesquisa individuais obtiveram suas próprias bolsas de pesquisa, adquiriram seus próprios computadores, principalmente SparcStations, e eles mesmos administraram o sistema.

O SunOS costumava ser fornecido com a área de trabalho do OpenView e um bom gerenciador de arquivos, e era assim: texto alternativo

A maioria dos nossos pesquisadores estava rodando como root e, mais de uma vez, tivemos que reinstalar seus sistemas operacionais porque alguém havia decidido arrumar o diretório raiz e movido / bin, / etc, / tmp e tudo o que atrapalhava a exibição. a Lixeira ou alguma subpasta.

Outros usuários optaram por arrumar o diretório / bin e remover qualquer comando que não conheciam.

Os sortudos tinham backups, a maioria havia comprado uma unidade de fita, mas não possuíam a tradição de executar backups.


11
Arrumar o diretório raiz? Sério? MESMO? soluço
Alex B

41
TRWTF é que eles estavam rodando como raiz, em uma instalação de pesquisa em ciências nucleares!
Invert

4
captura de tela legal! me deixa nostálgico.
Gabe.

@Alex - bem, havia esse arquivo vmunix grande que eu não estava usando ....
Martin Beckett

11
Em versões antigas do Mac OS, você poderia praticamente mover qualquer lugar do arquivo, talvez isso é o que eles estavam esperando ...
Kevin Cantu

18

Em meados do final da década de 90, um amigo meu e eu estávamos discutindo a loucura rm -rf *e em que momento uma caixa do Linux iria falir. Entramos em bibliotecas vinculadas estaticamente versus dinamicamente e eu postulei que o sistema poderia viver muito bem sem /libe, em seguida, passamos a renomeá-lo na minha estação de trabalho. Coisas ruins aconteceram , mas ficamos com várias janelas de console abertas para tentar corrigir o dano (o desligamento não era mais uma opção). Nenhum dos editores seria executado. É incrível os usos esotéricos que você pode encontrar para o echocomando.


19
Há uma história clássica sobre esse tópico exato: lug.wsu.edu/node/414 #
Alex B

11
@Alex B: A história também faz parte do Unix Horror Stories , que é ótimo de ler.
Bobby

18

vie Caps-Lockvs./etc/passwd

  1. Conecte-se a uma caixa Solaris antiga usando um terminal serial antigo que não atualiza a tela corretamente.
  2. su -
  3. vi /etc/passwd. Não há vipw, e "estamos apenas fazendo pequenas edições" de qualquer maneira.
  4. Pressione a Caps-Locktecla e não perceba.
  5. Bata jalgumas vezes para rolar para baixo. Ignore o fato de que você acabou de digitar J("Join"), que combina essa linha com a próxima. A tela do terminal serial não estava sendo atualizada corretamente, então você não viu que acabou de combinar as 5 primeiras linhas em uma linha Loooooong, corrompendo os 5 primeiros usuários ('root', 'daemon' etc.).
  6. Finalize as OUTRAS edições pretendidas no arquivo, na parte inferior.
  7. Salvar Arquivo.
  8. Sair.

Eu fiz isso uma vez. Surpreendentemente, o sistema permaneceu funcional por meses. Cronjobs correu bem, nenhum erro se destacou nos arquivos de log.

Não notamos esse problema até reiniciar o sistema meses depois e não conseguimos fazer login no console. psmostrou vários trabalhos de propriedade do UID '0' e não do usuário 'root'.

Não era possível fazer login como root, nem executar suou su -, e não havia sudonessa caixa. Não havia unidade de disquete, o CD-ROM foi bloqueado e nenhuma porta USB (portanto, nenhum CD-ROM externo). O modo de usuário único não funcionou, porque você precisa digitar a senha para root e isso vem /etc/passwd.


2
Certamente "J" é o comando "Join" (como nas linhas de junção juntas)?
dr-jan

2
Espere um minuto, não preciso digitar a senha para inicializar no modo de usuário único. De fato, é assim que redefino a senha root se a perder. Ou era diferente nos velhos tempos?
Phreinhe #

No Solaris, você precisa saber a senha root para entrar no modo de usuário único. Eu tive que fazer isso há duas semanas, na verdade.
Stefan Lasiewski

@phunehehe Acho que você está pensando no truque init = / bin / sh. Isso de fato não requer a senha root. No entanto o nível de execução 1 não ainda exigem passe de raiz
Patrick

18
rm -f * ~

e

rm -rf ${DIR}/

quando DIRnão foi definido!


4
Você quer dizer ${DIR}? Porque $(DIR)tentaria executar o comando DIR.
Denilson Sá Maia

16

Lembro-me de tentar enviar uma SysRqsequência de teclas para uma máquina remota ...

... mas foi capturado pelo local.


14

Um simples haltreconhecimento, alguns segundos depois, de que não estou em um shell local e não tenho possibilidade de ligar o servidor de produção novamente.

Lições aprendidas? O prompt da máquina agora parece

[ --> root <-- @kompost:/home/echox] #

com uma boa marcação vermelha ;-)


6
Existe uma ferramenta chamada molly-guardque verifica se você está conectado remotamente e pergunta se você realmente deseja fazer isso.
Simon Richter

IPMI é um dado conveniente ter :-)
Andre Holzner

13

Meu momento favorito foi quando um colega de trabalho, usuário do emacs, queria editar um arquivo importante.

Como emacsé demais digitar, ele havia configurado um alias para emacs:

alias em=emacs

Sob a influência de café insuficiente ou em excesso, ele naturalmente digitou incorretamente em...

Bem, este é apenas mais um motivo para usar vi...;)


O que eu realmente amo nesse caso é o fato de ele estar preocupado com o tempo que o emacs durou, mas não apenas usá-lo alias e=emacs.
Steven D

Além de café, aviso de que 'e' e 'r' não são muito distante perto do teclado ...
leonbloy

11

Ou outra experiência, como se sentir realmente estúpido em algumas etapas fáceis que não parecem tão estúpidas individualmente.

Etapa 1: estabelecer uma conta para o garoto, caso ele queira usar uma caixa Linux. Dê uma senha trivial, pois, afinal, esse é um sistema doméstico e não está exposto à rede.

Etapa 2: aguarde o tempo decorrido, para que você não se lembre da etapa um.

Etapa 3: abrir a porta SSH no firewall (na verdade o NAT no roteador) para fazer o ssh. Afinal, minhas contas têm senhas muito boas e não é como se houvesse algo tremendamente valioso.

Etapa quatro: receba uma notificação do ISP de que há algum tipo de atividade do DOS indo para um site sueco. Suponha que sejam provavelmente as caixas do Windows e examine e reforce-as.

Etapa 5: receba uma notificação do ISP de que ainda está acontecendo. Peça alguns detalhes, obtenha o endereço IP do site sueco, inicie o Wireshark e encontre de qual caixa o ataque está ocorrendo.

Etapa seis: limpe a caixa do Linux, sentindo-se estúpido. Encontre o logon veio de um endereço romeno. Remova contas sem boas senhas.


11
Esteve lá. Certa vez, criei uma conta com um login de test: test, pretendendo usá-lo por apenas cerca de cinco minutos. Esqueci de excluí-lo e obtive os mesmos resultados que você. Nunca mais. Eu vou todos os autenticação de chave pública agora.
ATC

11
Sim, eu também uso chaves públicas / privadas. Às vezes, podem ser um pouco chatos, mas muito mais seguros do que senhas simples.
Denilson Sá Maia

4
Ao abrir o SSH na Internet, NUNCA permita a autenticação de senha. Somente autenticação de chave pública / privada, para que você não seja pego de surpresa.
wazoox

@ wazoox: otp também é uma boa alternativa.
Jürgen A. Erhard

Eu uso uma porta não padrão e de número alto para ssh, encaminhada do roteador para a porta ssh padrão nas minhas caixas Linux e Mac OS X. Eu nunca recebi nenhuma tentativa de logon. Eu tenho a porta configurada em um atalho em ~ / .ssh / config em minhas outras máquinas, então geralmente nem preciso digitá-la.
Neil Mayhew

11

Nos laboratórios de informática, quando eu estava na faculdade, eles tinham um protetor de tela que simulava um monte de bolas que flutuavam para frente e para trás. Eles puxaram cada um com gravidade simulada.

Uma vez, enquanto eu estava mexendo nas configurações, ele travou com o erro Error: force on balls too great


10

Eu estava desenvolvendo um driver de dispositivo para Unix. Ele tinha um problema de ponteiro e, durante o teste, começou a gravar o final de uma matriz na memória do kernel. Eu demorei a perceber isso e não apertei o botão de reset imediatamente. O driver rabiscou todo o cache do buffer de disco, que foi liberado para o disco antes de eu pressionar Reset. Muitos dos blocos eram inodes e diretórios, e acabei com um sistema de arquivos totalmente destruído. Acho que 6000 arquivos órfãos foram colocados lost+foundantes de eu desistir e reinstalar. Felizmente, este era apenas um sistema de teste, não minha estação de trabalho com todos os meus arquivos.


Agora fazendo isso em seu sistema de trabalho teria sido realmente estúpido ;-)
Jürgen A. Erhard

8

Eu apaguei / etc e depois o recuperei . Acho que não aprendi minha lição ... Também tive que me recuperar de uma excluída /bin. Parece acontecer quando eu estiver trabalhando com um chroot.


Eu gostaria muito de saber por que eu tenho downmodded
xenoterracide

11
Eu tenho testemunhado isso também. Estou surpreso que um sistema possa sobreviver sem o / etc --- apenas não reinicie nada.
Stefan Lasiewski

7

No ano passado, um colega meu estava usando uma de nossas estações de trabalho Linux para criar cópias de discos flash usando o ddcomando Ele acidentalmente digitou algo semelhante ao seguinte:

dd if=flash-image.img of=/dev/sda1

Quando ele percebeu seu erro - sobrescrever o disco rígido da máquina em vez da unidade flash - a máquina já estava na mangueira. Tivemos que reconstruir a caixa, que aliás também era a máquina que hospedava todas as nossas VMs de desenvolvimento na época ...


2
+1 - tenha muito, muito, muito cuidado com dd!!! :-)
Josh

7

Isso aconteceu comigo no ano passado. Eu estava removendo alguns arquivos do servidor usando uma variável temporária:

rm -rf ${prefix}*

Adivinha? A variável $prefixnão foi definida!
Você pode imaginar o desastre ... resultou em alguns arquivos muito críticos excluídos.

Eu quase quebrei o Control-Ce corri para a CPU para remover o cabo de rede !!

Hahaha, tenho certeza que alguém já fez isso ...


7

Enquanto no meu segundo ano estudando ciência da computação, recebemos uma tarefa de casa para escrever um programa em C que geraria vários subprocessos forke os faria se comunicar com tubos em um "círculo" e descobrir qual deles deveria ser o "líder". "

Ainda éramos bastante nobres naquela época e a maioria das pessoas não tinha nenhuma máquina Linux, por isso trabalhamos em nossas contas no servidor principal de nossa faculdade (que hospedava sites e contas de funcionários e sites oficiais). A maioria das pessoas escreveu forkbombs em algum momento da tentativa de fazer a lição de casa. Mais da metade do meu grupo chegou ao abusersarquivo. Essa foi a carga mais alta nesse servidor em um tempo muito longo :)


isso foi bobagem da parte deles ... eles não deveriam colocá-lo na mesma máquina que os servidores da web e outras coisas. (A minha escola tem a mesma coisa, mas temos severs dedicados a conchas remotos para os forkbombs anuais realmente não ficar muito fora de mão)
Spudd86

A Microsoft conseguiu o corpo docente para entrar em parceria, e o Windows e o .net já eram muito promovidos. Ninguém esperava que um bando de noobs no servidor :)
naugtur

6

Quando minha universidade decidiu mudar a rede sem fio para usar a autenticação proprietária do Cisco LEAP ...

Começou uma batalha muito longa que terminou bem o suficiente. Escreveu documentação para outras pessoas que queriam executar o Linux e ter acesso à Internet. Seis meses depois, eles decidiram adicionar o suporte ao PEAP também. tapa na cara

É o meu favorito porque ganhei. Eu tenho que trabalhar.


6

Como raiz no Solaris,

$ kill -9 1

... e tudo deu certo.

Meu amigo foi demitido por causa disso.


6

Eu era um assistente de laboratório para uma aula de Linux. Uma das alunas me ligou porque ela não podia mais su -porque estava recebendo permission denied. OK, ela não se lembrou / digitou incorretamente a senha. Reinicie no modo de usuário único e redefina. O que?! suAINDA não funciona ?! DEVE curvar-se à minha vontade! Então, eu reinicio no modo de usuário único para descobrir o que ela fez. Eu percebi que ela corriachmod -R 777 /var/www/html/drupal-6.19 /

Observe o espaço entre o nome do diretório e a barra final.

Depois de alguns minutos de "Eu realmente não quero que ela seja reinstalada, então o que isso está fazendo e como.", Consegui descobrir que / bin / su agora tinha permissões de arquivo de 777. Isso também pode ser lido como permissões de arquivo 0777, das quais remove o bit setuid /bin/su. Um rápido chmod u+s /bin/sue eu era um herói.


5
Essa era a única coisa que você precisava mudar para desarmar o sistema dela?
Michael Mrozek

11
Tenho certeza de que ainda estava quebrado, mas talvez tenha funcionado bem o suficiente para o resto da classe.
Stefan Lasiewski

11
Funcionou bem o suficiente para o resto da turma; evidentemente, a escola exige que todos os alunos sejam reinstalados a cada trimestre. E ela não continuaria com o Linux depois que este trimestre terminasse, então eu não me incomodei em corrigi-lo o resto do caminho.
Kevin M

5

Não é tão doloroso ... Mas um momento divertido:

Eu mal digitado lscomo sle descobriu que o sysadmin tinha algo instalado para tal caso.

(já disponível nos repositórios Debian , Ubuntu , Gentoo , ...)


4
É mais um ovo de Páscoa do que um momento doloroso. Eu li sobre isso antes de me deparar com isso, mas nunca me vi digitando errado, então não há +1.
Umang

Grinn .. Eu tinha um usuário uma vez que veio a mim "Você é sistema é hackeado !!! 11one Eu tenho uma animação ASCII-art, quando eu digitei ls"
blauwblaatje

^ Não é tão engraçado!
Mr_eclair 31/07

5
git init
git clean -f

Isso não remove o repositório. Isso remove tudo o que não está no repositório.

Depois de tentar se livrar do repositório existente e reiniciar o controle de origem (na primeira versão concluída de um projeto), esses dois comandos desmarcaram meu código inteiro.


git rebase (com squashing) e git filter-branch (para remover arquivos) são seus amigos :-) Com isso, quero dizer que existem maneiras mais seguras de remover cruft do seu histórico de repositórios e terminar com um projeto relativamente limpo. Normalmente, faço uma cópia de backup da ramificação atual antes de fazer uma ampla recuperação.
Neil Mayhew

5

Uma empresa em que eu trabalhava tinha seu produto em execução no SCO. Eu estava fazendo uma depuração de aplicativos que ficavam muito lentos em nosso servidor de demonstração e, ao mesmo tempo, vários clientes receberam uma demonstração / palestra sobre os próximos novos recursos.

Então, eu executei o aplicativo que costumava ficar preso, fiz minhas coisas para verificar a causa raiz, mas como ainda estava "preso", tentei matá-lo:

pkill -9 mytestapplication

O que eu aprendi foi que o pkill não faz exatamente o mesmo no SCO e no linux =)

... Basicamente, mata tudo o que o usuário tem acesso, e com root ... isso é tudo =)


11
Você poderia descrever o que ele faz no SCO? Não faço ideia e não consegui encontrá-lo facilmente no google.
Denilson Sá Maia

11
que basicamente mata tudo o que o usuário tem acesso, e com raiz .. é tudo =)
rasjani

3

Minha mudança do Debian para o Ubuntu começou no dia em que tentei excluir alguns arquivos e diretórios, o que significa digitar

rm -r /var/tmp/*

Infelizmente, inseri um espaço entre "/ var / tmp /" e "*" e, pior ainda, estava na raiz do sistema de arquivos.

root@workstation:/# rm -r /var/tmp/ *

Por favor, não tente isso em casa!


'zsh: com certeza você deseja excluir todos os arquivos em / [yn]?' - é bastante útil
André Paramés

isso excluirá os arquivos de / como?
mr_eclair 31/07

3

Há um truque legal para fazer o equivalente a dirnamee basename, respectivamente, no Bash:

${path%/*}
${path##*/}

Não é tão engraçado quando $pathcontém uma barra à direita ...


3

Eu tinha duas unidades instaladas em um ponto e o sistema de arquivos raiz da segunda unidade foi montado em um diretório dentro /mnt. Eu estava naquele diretório e tentei excluir, varmas acabei digitando rm -rf /var. Pareceu surgir algum instinto que dizia que var deveria ser precedido de uma barra!

Quando percebi o que tinha feito, bati imediatamente, Ctrl-Cmas já era tarde demais. Meu rpmbanco de dados já havia saído do prédio há muito tempo. Passei séculos voltando ao normal.

Agora, a parte dolorosa.

Volto a esse diretório /mntpara retomar o que estava fazendo. O que eu digito? Bem, digamos que o instinto entrou em ação novamente.

Pelo menos eu fui capaz de restaurar o sistema muito mais rápido na segunda vez;)


11
Acho que isso foi antes de você descobrir sobre o chroot (1)?
Kevin M
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.