Мне было интересно, есть ли (простая) возможность повторить / отменить команду, которая была выполнена в оболочке bash? (чтобы отменить это)
Есть ли что-то похожее на комбинацию ctrl+, zчтобы повторить какое-либо действие (например, в word или LibreOffice)?
command-line
Fraenzine
источник
источник
undo
команда, поэтому иметь актуальное резервное копирование всей операционной системы, действительно полезна. Когда что-то идет не так, вы просто восстанавливаете предыдущее состояние. Взгляните, например, на rsnapshotshutdown
команду lol .. не могу поверить, что такие вопросы могут также получить 8 голосов за день !!Ответы:
Вы должны понимать, что
bash
это просто среда исполнения. Он выполняет команды, которые вы вызываете - дело не в том, чтобы оболочка даже знала, что делает команда, вы можете вызвать любой исполняемый файл, который захотите. В большинстве случаев даже неясно, что будет делать отмена - например, можете ли вы «разыграть» фильм? Можете ли вы "отослать" электронное письмо? Что бы, например, означало «отменить запуск firefox»? Вы можете закрыть его, но закладки, загрузки и история не будут одинаковыми.Если вы запускаете команду, она выполняется независимо от того, что она делает. Вам решать, что вы делаете. Обратите внимание, что это не означает, что отдельные команды не имеют «отмены» ... они могут - вы даже можете написать функцию-обертку, которая защитит вас от глупых ошибок.
Например,
mv
он легко обратим, просто переместив файл туда, откуда он пришел, если вы что-то не перезаписали. Вот почему-i
существует переключатель, чтобы спросить вас перед перезаписью. Технически, инверсияcp
естьrm
, если что-то не было перезаписано (опять же,-i
спрашивает вас об этом).rm
является более постоянным, чтобы попытаться вернуть файлы, вы должны на самом деле сделать более низкий уровень взлома (для этого есть инструменты). Если вы рассматривали файловую систему как черный ящик, технически это было бы невозможно вообще (только детали логического и физического расположения данных позволяют вам контролировать повреждения).rm
означаетrm
, что если вы хотите "мусор" функциональность, это на самом деле простоmv
в какой-то заранее подготовленный каталог (и, возможно, запланированный сервис для его обслуживания или очистки) - ничего особенного в этом нет. Но вы можете использовать,-i
чтобы предложить вам перед удалением. Вы можете использовать функцию или псевдоним, чтобы всегда включать-i
в эти команды.Обратите внимание, что большинство приложений защищают вас от потери данных по-разному. Большинство (~ всех) текстовых редакторов создают файлы резервных копий
~
в конце на случай, если вы захотите вернуть старую версию. В некоторых дистрибутивахls
по умолчанию используется псевдоним, поэтому он скрывает их (-B
), но они есть. Большая защита обеспечивается путем правильного управления разрешениями: не будьте пользователем root, если вам это не нужно, делайте файлы доступными только для чтения, если вы не хотите, чтобы они менялись. Иногда полезно иметь среду «песочницы» - вы запускаете вещи на копии, проверяете, все ли в порядке, а затем объединяете изменения (или отказываетесь от изменений).chroot
илиlxc
может помешать вашим скриптам выйти из каталога и нанести ущерб.Когда вы пытаетесь выполнять вещи массово - например, если у вас есть сложная команда поиска, хотя цикл, длинный конвейер или что-то в этом роде, хорошей идеей будет сначала просто
echo
выполнить команды, которые будут выполнены. Затем, если команды выглядят разумно, удалитеecho
и запустите его по-настоящему. И, конечно, если вы действительно не уверены в том, что делаете, сначала сделайте копию. Иногда я просто создаю архив текущей директории.Говоря о tarballs - к сожалению, tarbombs и zipbombs довольно распространены (когда люди создают архив без надлежащего подкаталога, а распаковка разбрасывает файлы вокруг, создавая огромный беспорядок). Я привык просто делать подкаталог сам перед распаковкой (я мог перечислить содержимое, но я ленив). Я думаю о создании сценария, который будет создавать подкаталог, только если содержимое было заархивировано без подкаталога. Но когда это происходит,
ls -lrt
помогает найти самые последние файлы и поместить их туда, где они должны быть. Я просто привел это в качестве примера - у программы может быть много побочных эффектов, о которых оболочка не может знать (как это могло быть? Это другая программа, вызываемая!) Единственный надежный способ избежать ошибок - быть осторожным (подумайте дважды, беги один раз).Возможно, наиболее опасными являются команды, которые работают с файловой системой: mkfs, fdisk / gdisk и так далее. Они могут полностью уничтожить файловую систему (хотя при наличии надлежащего криминалистического программного обеспечения возможна хотя бы частичная обратная инженерия). Всегда дважды проверяйте устройство, которое вы форматируете, и правильное разбиение на разделы перед выполнением команды.
источник
Нет, в Bash нет такой вещи, как "отмена", извините. Вот почему вы должны перепроверить ваши команды или сначала проверить их на неважных файлах (если это возможно). И трижды проверь, делаешь ли ты как root;)
источник
rm
, файл ушел, он ушел, он умер, он больше не является, это бывший файл (предупреждение Monty Python). Теперь его родственники плачут в горе, и вы не можете отменить свой поступок. То, о чем вы говорите, это отмена ввода или удаления символов, и я подозреваю, что это особенность вашего эмулятора терминала. Я только что попробовал это в Терминаторе, и это работает. Переключение на другую консоль (в моем случае Ctrl + Alt + F1) не позволяет работать.Нет, общего отмены нет, но некоторые последствия более обратимы, чем другие. Возьмем, к примеру
rm
: он по сути используется для двух целей - избегая беспорядка и освобождая место для новых файлов. Если вам повезет, вы можете получить содержимое файла, используя такие инструменты, какextundelete
, потому что только указатель на начало файла перезаписывается при запускеrm
; содержание перезаписывается , когда операционная система повторно это пространство (которое может произойти миллисекунды или годы). Из-за этой функциональности,rm
попадает в середину шкалы систем, более или менее разрушительных. С одной стороны, есть мусорсистемы, которые обеспечивают способ избежать беспорядка без риска потери данных немедленно (потому что отмена является тривиальной). Еще более консервативными являются системы однократной записи и чтения («WORM»), в которых данные не могут быть удалены или перезаписаны по желанию системой, записывающей данные. На другом конце шкалы находятся системы измельчения , которые перезаписывают содержимое файла (обычно несколько раз) в дополнение к указателю. На этом этапе технология восстановления ваших данных, вероятно, еще даже не существует (и, возможно, никогда не будет существовать).Таким образом, вы можете видеть, что конкретный инструмент, наиболее используемый (
rm
), не является единственной альтернативой, но он обеспечивает компромисс, который большинству людей кажется удобным:Если компромиссы, которые делают ваши инструменты, для вас неприемлемы, посмотрите вокруг. Скорее всего, есть инструменты, которые принимают решения, которые подходят именно вам .
источник
Приложения, которые предоставляют функцию отмены, делают это, поддерживая историю предпринятых действий и либо метод отмены действия, либо снимок состояния объекта для восстановления предыдущего состояния. Команды, выполняемые в оболочке, выполняют прямые действия или выполняют команды для выполнения действий.
Сама оболочка не сможет отменить действия, возникающие в результате выполнения любой команды или программы. Если команда или программа сохраняют историю и имеют функцию отмены, возможно, это можно использовать, но сама оболочка не может.
Например, если вы запустите
rm important_file.txt
, это скажет драйверу файловой системы «отсоединить» файл в файловой системе. Оболочка не выполняет действие, она только вызывает,rm
который выполняет.В случае необходимости восстановления потерянного файла, это может быть возможно, так как обычно удаление файла фактически не удаляет его, а только удаляет ссылку на него. Через некоторое время содержимое файла будет перезаписано, так как другие данные будут сохранены на диске, но на некоторое время исходный файл может быть восстановлен с помощью утилит, которые могут найти и «связать» его.
источник
Нет, нет, но если, скажем, вы запутались с привилегированным корневым каталогом и каким-то образом испортили что-то, то лучше всего сохранить все файлы, которые вы можете, на USB-накопитель или SD-карту и перезагрузить операционную систему из файл ISO (если у вас все еще есть, если нет, вы можете получить еще один в автономном режиме ...). Если вы удалили что-то, вы можете, как сказал Уэрт , загрузить приложение, чтобы связать данные файла с именем файла и сохранить содержимое файла (см. Этот вопрос здесь ). Для более глубокого ответа, можете ли вы сказать нам, что вы сделали не так?
источник
Я не буду повторять то, что говорили другие, но я могу видеть, откуда вы идете. Мой стандартный подход к выполнению «опасных» команд всегда заключался в том, чтобы отобразить их, чтобы увидеть, правильно ли развернуты все переменные или нет. Если вы можете процитировать некоторые конкретные случаи, мы могли бы помочь в дальнейшем.
Например, в такой ситуации:
источник
Как и в других хороших ответах, сказано: в оболочке нет «отмены». Но в вашем конкретном случае использования, чтобы отменить
shutdown
, вы можете прервать процесс завершения работы: см. Https://stackoverflow.com/a/526330источник