1つのバッチスクリプトでいくつかのファイルの名前を変更しました。名前を変更せずに変更を元に戻す方法はありますか?
Linuxはundo
ingのネイティブな方法を提供していますか?
Linux(他のunicesと同様)には、元に戻す機能はありません。哲学は、それがなくなった場合、それはなくなったということです。それが重要な場合は、バックアップされているはずです。
古いバージョンのコピーを自動的に保持するFuseファイルシステムがあります。 copyfs は、すべての適切なディストリビューションで使用できます。もちろん、それは多くのリソースを使用できます。
このような事故を防ぐ最善の方法は、バージョン管理システム(cvs、Bazaar、darcs、git、Mercurial、Subversionなど)を使用することです。習得には少し時間がかかりますが、中長期的にはすばらしい成果が得られます。
残念だけど違う。
いいえ、どのUnixにも魔法の取り消しはありません。 Unixはあなたが何をしているか知っていると仮定します。元に戻すにはVCSを使用してください(テキストエディターにも組み込まれている可能性があります)。
ほとんどのファイルシステムには、透過的に実行する機能がありません。
MacとWindowsでのタイムマシンとシステムの復元は、それぞれ単なるバックアップ/変更制御システムです。
コマンドラインには取り消しはありません。ただし、コマンドはrm -i
およびmv -i
として実行できます。これにより、「よろしいですか?」というプロンプトが表示されます。コマンドを実行する前に質問します。
エイリアスをスタートアップスクリプトに追加することもできます(例:~/.bashrc
または/etc/bash.bashrc
):
alias remove='rm -i'
alias move='mv -i'
編集:以下の提案により、デフォルトのコマンドにエイリアスを付けるためのアドバイスを削除しました。代わりに、新しいコマンドが導入されました)。
Linux/Unixシステムに削除取り消しがない理由は、ほとんどのファイルシステムが情報を保存する方法に由来します。ファイルのメタ情報はすべて、ディスクの前面に格納され、残りのディスク上のiノードを参照します。通常、ほとんどのファイルシステムは、このメタエリアのファイルに10ブロックを割り当てます。最初の7つは最初の7つのiノードを指します。 8番目と9番目はiノード(二重にリンクされたブロック)のリストに行き、10番目はリスト(3つのリンクされたブロック)のリストのリストに行きます。これはファイルシステム(ext4、jfs、xfsなど)によって異なりますが、通常、これらのブロックのリストは2GBから数TBのファイルサイズに対応できます。
ただし、これらの情報はすべてディスクの前面に格納されるため、ファイルが消去されると、ディスク上のiノードを参照して、それらが属しているメタデータを参照することはできません。対照的に、FAT32とNTFSは実際にいくつかのヘッダー情報をファイル自体に格納し、ブロックのセットが属するファイルを特定するのを容易にします(そのスペースがまだ新しいファイルによって再生されていない限り)。 Linuxの作業では、何かを削除すると、ほとんどの場合、効率のために新しいデータですぐに上書きされます。
.bashrcに追加したいのは、コピーと削除の機能です。何かのようなもの:
cprm(){
cp -p $1 ~/deleted/$1
rm $1
}
ただし、rmではなくcprmと入力する習慣を身に付ける必要があります。
明らかに、ディスクスペースが限られている場合は、削除された領域の上に保つ必要があります。
元に戻す機能が本当に必要な場合は、ソース管理を使用してください。 Subversion は、実際にはシングルユーザーマシンで非常にうまく機能します。私はそれを使用して、ホームシステム上のすべての個人ファイルを制御します。災害が発生するまでは、悪質なスクリプトやコマンドラインのタイプミスが発生するまで、やりすぎのようです。
GitFSはFuseベースのファイルシステムで、バージョン間でdiff
sを自動的に計算し、バージョン間での復元/閲覧を可能にします。
ウェブページ: https://www.presslabs.com/gitfs