у нас есть отмена в linux?

<p>я переименовал несколько файлов в один пакетный скрипт. есть ли способ отменить изменения, не переименовывая их обратно?</p><p>предоставляет ли linux какой-то собственный способ <code>undo</code>ing?</p>

<p>linux (как и другие юниты) изначально не предоставляет функции отмены. философия заключается в том, что если он ушел, он ушел. если бы это было важно, это должно было быть поддержано.</p><p>существует файловая система fuse, которая автоматически сохраняет копии старых версий: <a href="http://boklm.eu/copyfs/">copyfs</a> , доступная во всех хороших дистрибутивах. конечно, это может использовать много ресурсов.</p><p>лучший способ защиты от таких аварий - использование системы контроля версий (cvs, bazaar, darcs, git, mercurial, subversion, ...). это займет немного времени, чтобы учиться, но это окупается в среднесрочной и долгосрочной перспективе.</p>

<p>к сожалению нет.</p>

<p>нет, никакой магической отмены нет ни в одном unix. unix предполагает, что вы знаете, что делаете. для поддержки отмены используйте vcs (возможно, в вашем текстовом редакторе он тоже есть).</p><p>большинство файловых систем не имеют возможности сделать это прозрачно.</p><p>time machine и восстановление системы на mac и windows соответственно являются просто системами резервного копирования/изменения.</p>

<p>в командной строке нет отмены. однако вы можете запускать команды как <code>rm -i</code> а также <code>mv -i</code>. это подскажет вам с "вы уверены?" вопрос, прежде чем они выполнят команду.</p><p>также возможно добавить псевдоним для него в сценарий запуска (например, <code>~/.bashrc</code> или <code>/etc/bash.bashrc</code>):</p><pre><code>alias remove='rm -i' alias move='mv -i' </code></pre><p>правка: в соответствии с приведенными ниже советами, я удалил мой совет, чтобы псевдоним команды по умолчанию. вместо этого теперь вводятся новые команды).</p>

<p>причина того, что системы linux/unix не имеют восстановленных данных, связана с тем, как большинство файловых систем хранят свою информацию. файловая метаинформация хранится в передней части диска со ссылками на иноды на остальной части диска. как правило, большинство файловых систем выделяют 10 блоков для файла в этой мета-области. первые 7 относятся к первым 7 индексам. 8-й и 9-й переходят к спискам инодов (блоки с двойной связью), а 10-й - к спискам списков (блоки с тройными связями). это варьируется от файловой системы к файловой системе (ext4, jfs, xfs и т.д.), но эти списки блоков обычно могут адресовать файлы размером от 2 гб до нескольких тб.</p><p>но поскольку вся эта информация хранится в передней части диска, при удалении файла нет способа ссылаться на иноды на диске, к каким метаданным они относятся. напротив, fat32 и ntfs фактически хранят некоторую информацию заголовка вместе с самими файлами, что упрощает определение того, к какому файлу должен принадлежать набор блоков (при условии, что это пространство еще не было освобождено новыми файлами). в работе с linux, когда вы что-то удаляете, это почти всегда первое, что немедленно перезаписывается новыми данными для повышения эффективности.</p>

<p>одна вещь, которую я хотел бы добавить в мой .bashrc - это функция копирования и удаления. что-то вроде:</p><pre><code>cprm(){ cp -p $1 ~/deleted/$1 rm $1 } </code></pre><p>но вы должны привыкнуть печатать cprm, а не rm.</p><p>очевидно, что вам нужно оставаться поверх удаленной области, если у вас ограниченное дисковое пространство.</p>

<p>если вы действительно хотите отменить функцию, используйте контроль источника. <a href="http://subversion.tigris.org/">subversion</a> на самом деле очень хорошо работает на однопользовательском компьютере. я использую его для контроля всех моих личных файлов в моей домашней системе. это кажется излишним, пока не произойдет катастрофа, мошеннический сценарий или опечатка командной строки.</p>

<p>gitfs - это файловая система на основе fuse, которая автоматически рассчитывает <code>diff</code>s между версиями и позволяет восстанавливать/просматривать их.</p><p>веб-страница: <a href="https://www.presslabs.com/gitfs">https://www.presslabs.com/gitfs</a> </p><p>документы: <a href="https://www.presslabs.com/gitfs/docs/usage/">https://www.presslabs.com/gitfs/docs/usage/</a> </p>