it-swarm-ru.tech

У нас есть отмена в Linux?

Я переименовал несколько файлов в один пакетный скрипт. Есть ли способ отменить изменения, не переименовывая их обратно?

Предоставляет ли Linux какой-то собственный способ undoing?

55
Lazer

Linux (как и другие юниты) изначально не предоставляет функции отмены. Философия заключается в том, что если он ушел, он ушел. Если бы это было важно, это должно было быть поддержано.

Существует файловая система Fuse, которая автоматически сохраняет копии старых версий: copyfs , доступная во всех хороших дистрибутивах. Конечно, это может использовать много ресурсов.

Лучший способ защиты от таких аварий - использование системы контроля версий (cvs, Bazaar, darcs, git, Mercurial, Subversion, ...). Это займет немного времени, чтобы учиться, но это окупается в среднесрочной и долгосрочной перспективе.

56
Gilles 'SO- stop being evil'

К сожалению нет.

17
postfuturist

Нет, никакой магической отмены нет ни в одном Unix. Unix предполагает, что вы знаете, что делаете. Для поддержки отмены используйте VCS (возможно, в вашем текстовом редакторе он тоже есть).

Большинство файловых систем не имеют возможности сделать это прозрачно.

Time machine и восстановление системы на Mac и Windows соответственно являются просто системами резервного копирования/изменения.

10
xenoterracide

В командной строке нет отмены. Однако вы можете запускать команды как rm -i а также mv -i. Это подскажет вам с "вы уверены?" вопрос, прежде чем они выполнят команду.

Также возможно добавить псевдоним для него в сценарий запуска (например, ~/.bashrc или /etc/bash.bashrc):

alias remove='rm -i'
alias move='mv -i'

Правка: в соответствии с приведенными ниже советами, я удалил мой совет, чтобы псевдоним команды по умолчанию. Вместо этого теперь вводятся новые команды).

8
vdboor

Причина того, что системы Linux/Unix не имеют восстановленных данных, связана с тем, как большинство файловых систем хранят свою информацию. Файловая метаинформация хранится в передней части диска со ссылками на иноды на остальной части диска. Как правило, большинство файловых систем выделяют 10 блоков для файла в этой мета-области. Первые 7 относятся к первым 7 индексам. 8-й и 9-й переходят к спискам инодов (блоки с двойной связью), а 10-й - к спискам списков (блоки с тройными связями). Это варьируется от файловой системы к файловой системе (ext4, jfs, xfs и т.д.), Но эти списки блоков обычно могут адресовать файлы размером от 2 ГБ до нескольких ТБ.

Но поскольку вся эта информация хранится в передней части диска, при удалении файла нет способа ссылаться на иноды на диске, к каким метаданным они относятся. Напротив, FAT32 и NTFS фактически хранят некоторую информацию заголовка вместе с самими файлами, что упрощает определение того, к какому файлу должен принадлежать набор блоков (при условии, что это пространство еще не было освобождено новыми файлами). В работе с Linux, когда вы что-то удаляете, это почти всегда первое, что немедленно перезаписывается новыми данными для повышения эффективности.

4
djsumdog

Одна вещь, которую я хотел бы добавить в мой .bashrc - это функция копирования и удаления. Что-то вроде:

cprm(){
    cp -p $1 ~/deleted/$1
    rm $1
}

Но вы должны привыкнуть печатать cprm, а не rm.

Очевидно, что вам нужно оставаться поверх удаленной области, если у вас ограниченное дисковое пространство.

2
Deano

Если вы действительно хотите отменить функцию, используйте контроль источника. Subversion на самом деле очень хорошо работает на однопользовательском компьютере. Я использую его для контроля всех моих личных файлов в моей домашней системе. Это кажется излишним, пока не произойдет катастрофа, мошеннический сценарий или опечатка командной строки.

2
Stephen Jazdzewski

GitFS - это файловая система на основе Fuse, которая автоматически рассчитывает diffs между версиями и позволяет восстанавливать/просматривать их.

Веб-страница: https://www.presslabs.com/gitfs

Документы: https://www.presslabs.com/gitfs/docs/usage/

1
test30