Eu queria saber se existe uma possibilidade (simples) de refazer / reverter um comando que foi executado no shell bash? (para desfazer)
Existe algo semelhante à combinação ctrl+ zpara refazer qualquer ação (por exemplo, no word ou no LibreOffice)?
command-line
Fraenzine
fonte
fonte
undo
comando, portanto, ter um backup atualizado de todo o sistema operacional é realmente útil. Quando algo der errado, você apenas restaura o estado anterior. Dê uma olhada em rsnapshot por exemploshutdown
comando lol .. não acredito que essas perguntas também podem receber 8 upvotes em um dia !!Respostas:
Você deve entender que
bash
é apenas um ambiente de execução. Ele executa comandos que você chama - não é da conta do shell nem mesmo saber o que o comando faz; você pode chamar qualquer executável que desejar. Na maioria dos casos, ainda não está claro o que um desfazer faria - por exemplo, você pode "desfazer" um filme? Você pode "cancelar o envio" de um email? O que "desfazer a execução do firefox" significaria, por exemplo? Você pode fechá-lo, mas favoritos, downloads e histórico não serão os mesmos.Se você executar um comando, ele será executado, faça o que fizer. Cabe a você saber o que está fazendo. Observe que isso não significa que comandos individuais não tenham "desfazer" ... eles podem - você pode até escrever uma função de invólucro que faz algo para protegê-lo de erros tolos.
Por exemplo,
mv
é facilmente reversível apenas movendo o arquivo de volta de onde veio, a menos que você tenha sobrescrito algo. É por isso que o-i
switch existe, para perguntar antes de substituir. Tecnicamente, o inverso decp
érm
, a menos que algo tenha sido sobrescrito (novamente,-i
você pergunta sobre isso).rm
é mais permanente, para tentar recuperar os arquivos, você precisa fazer alguns hackers de nível inferior (existem ferramentas para isso). Se você considerasse o sistema de arquivos como uma caixa preta, tecnicamente não seria possível (apenas os detalhes do layout lógico e físico dos dados permitem que você faça algum controle de danos).rm
significa querm
, se você quiser a funcionalidade "lixo", isso é apenasmv
em algum diretório pré-arranjado (e possivelmente um serviço agendado para mantê-lo ou esvaziá-lo) - nada de especial nele. Mas você pode usar-i
para avisar antes da exclusão. Você pode usar uma função ou um alias para sempre incluir-i
nesses comandos.Observe que a maioria dos aplicativos está protegendo você da perda de dados de maneiras diferentes. A maioria (~ todos) dos editores de texto cria arquivos de backup
~
no final, caso você queira trazer a versão antiga de volta. Em algumas distros,ls
é alternativo por padrão, para ocultá-las (-B
), mas elas estão lá. Muita proteção é dada ao gerenciar as permissões corretamente: não seja root, a menos que seja necessário, torne os arquivos somente leitura se não quiser que eles sejam alterados. Às vezes, é útil ter um ambiente de "sandbox" - você executa as coisas em uma cópia, verifica se está tudo bem e depois mescla as alterações (ou as abandona).chroot
oulxc
pode impedir que seus scripts escapem de um diretório e causem danos.Quando você tenta executar coisas em massa - por exemplo, se você possui um comando find complexo, enquanto loop, um pipeline longo ou algo assim, é uma boa ideia primeiro apenas
echo
os comandos que serão executados. Então, se os comandos parecerem razoáveis, removaecho
e execute-o de verdade. E, claro, se você realmente não tem certeza do que está fazendo, faça uma cópia primeiro. Às vezes, apenas crio um tarball do diretório atual.Falando de tarballs - tarbombs e zipbombs são bastante comuns, infelizmente (quando as pessoas fazem um arquivo sem um subdiretório adequado e a descompactação espalha os arquivos, causando uma enorme bagunça). Eu me acostumei a fazer um subdiretório antes de descompactar (eu poderia listar o conteúdo, mas sou preguiçoso). Estou pensando em criar um script que criará um subdiretório somente se o conteúdo tiver sido arquivado sem um subdiretório. Mas quando isso acontece,
ls -lrt
ajuda a encontrar os arquivos mais recentes para colocar onde eles pertencem. Eu apenas dei isso como um exemplo - um programa pode ter muitos efeitos colaterais que o shell não tem como saber (como poderia? É um programa diferente sendo chamado!) A única maneira certa de evitar erros é ter cuidado (pense duas vezes, execute uma vez).Possivelmente os comandos mais perigosos são os que lidam com o sistema de arquivos: mkfs, fdisk / gdisk e assim por diante. Eles podem destruir completamente o sistema de arquivos (embora com o software forense adequado, pelo menos a engenharia reversa parcial seja possível). Sempre verifique duas vezes o dispositivo que você está formatando e o particionamento está correto antes de executar o comando.
fonte
Não, não existe um "desfazer" no Bash, desculpe. É por isso que você deve verificar seus comandos ou testá-los primeiro em arquivos sem importância (se isso for possível). E verifique três vezes se você está fazendo as coisas como root;)
fonte
rm
, o arquivo se foi, passou, faleceu, não existe mais, é um ex-arquivo (alerta Monty Python). Agora seus parentes choram de tristeza e você não pode desfazer sua ação. O que você está falando é desfazer a digitação ou a exclusão de caracteres e suspeito que seja um recurso do seu emulador de terminal. Eu apenas tentei no Terminator e funciona. Mudar para um console diferente (Ctrl + Alt + F1 no meu caso) não permite que ele funcione.Não, não há desfazer genérico, mas algumas consequências são mais reversíveis que outras. Tomemos, por exemplo
rm
: é essencialmente usado para dois propósitos - evitando confusão e liberando espaço para novos arquivos. Com um pouco de sorte, você pode recuperar o conteúdo do arquivo usando ferramentas comoextundelete
, porque apenas o ponteiro para o início do arquivo é substituído quando você executarm
; o conteúdo é substituído quando o sistema operacional reutiliza esse espaço (o que pode acontecer milissegundos ou anos depois). Devido a essa funcionalidade,rm
ocorre no meio de uma escala de sistemas ser mais ou menos destrutiva. Por um lado, há lixosistemas, que fornecem uma maneira de evitar confusão sem o risco de perder os dados imediatamente (porque desfazer é trivial). Ainda mais conservadores são os sistemas de gravação única, leitura de muitos ("WORM"), em que os dados não podem ser excluídos ou substituídos à vontade pelo sistema que está gravando nele. No outro extremo da escala estão os sistemas de trituração , que substituem o conteúdo do arquivo (geralmente várias vezes), além do ponteiro. Nesse ponto, a tecnologia para recuperar seus dados provavelmente ainda nem existe (e possivelmente nunca pode existir).Assim, você pode ver como a ferramenta específica mais utilizada (
rm
) não é a única alternativa, mas fornece uma compensação que a maioria das pessoas parece se sentir confortável com:Se as vantagens e desvantagens de suas ferramentas são inaceitáveis para você, dê uma olhada. As chances são de que existem ferramentas por aí que tomam as decisões certas para você .
fonte
Os aplicativos que fornecem um recurso "desfazer" fazem isso mantendo um histórico de ações executadas e um método de reverter a ação ou um instantâneo do estado de um objeto para restaurar um estado anterior. Os comandos executados em um shell executam ações diretas ou executam comandos para executar ações.
O próprio shell não teria a capacidade de desfazer as ações resultantes de qualquer comando ou programa que foi executado. Se o comando ou programa mantiver um histórico e tiver uma função de desfazer, talvez isso possa ser usado, mas o próprio shell não pode.
Por exemplo, se você executar
rm important_file.txt
, isso informará o driver do sistema de arquivos para "desvincular" o arquivo no sistema de arquivos. O shell não executa a ação, apenas chama orm
que faz.No caso de querer cancelar a exclusão de um arquivo perdido, pode ser possível fazê-lo, pois normalmente a exclusão do arquivo não o remove, mas apenas a referência a ele. Após algum tempo, o conteúdo do arquivo será sobrescrito à medida que outros dados forem salvos no disco, mas por um tempo o arquivo original pode ser restaurado usando utilitários que podem encontrá-lo e "vinculá-lo novamente".
fonte
Não, não existe, mas se, digamos que você mexeu com um diretório com privilégios de root e estragou algo, sua melhor aposta é salvar todos os arquivos que puder em um drive USB ou cartão SD e reiniciar o sistema operacional de o arquivo ISO (se você ainda o tiver, se não, poderá colocar outro offline ...). Se você excluiu algo, pode, como disse o wraeth , fazer o download de um aplicativo para vincular novamente os dados do arquivo ao nome do arquivo e salvar o conteúdo dos arquivos (consulte esta pergunta aqui ). Para uma resposta mais aprofundada, você pode nos dizer o que fez de errado?
fonte
Não vou repetir o que os outros disseram, mas posso ver de onde você está vindo. Minha abordagem padrão para executar comandos "perigosos" sempre foi repeti-los para ver se todas as variáveis são adequadamente expandidas ou não. Se você pode citar algumas instâncias específicas, poderemos ajudar ainda mais.
Por exemplo, em uma situação como:
fonte
Como outras boas respostas disseram: não há "desfazer" no shell. Mas, no seu caso de uso específico, para desfazer a
shutdown
, você pode interromper o processo de desligamento: consulte /programming//a/526330fonte