Linuxで元に戻すことはできますか?


回答:


53

Linuxは(他の大学と同様に)元に戻す機能を提供しません。哲学は、もしそれがなくなったら消えるというものです。重要な場合は、バックアップする必要がありました。

古いバージョンのコピーを自動的に保持するfuseファイルシステム:copyfsがあり、すべての適切なディストリビューションで利用できます。もちろん、それは多くのリソースを使用する可能性があります。

このような事故から保護する最善の方法は、バージョン管理システム(cvs、bazaar、darcs、git、mercurial、subversionなど)を使用することです。学ぶには少し時間がかかりますが、中長期的には見事に成果を上げます。


1
良い代替はdevlopmentの下にあるgitfs、あるかもしれない
test30

1
ステージングまたはコミットしていないファイルを誤って削除または上書きした場合、CVSでも
役に立た

14

残念だけど違う。


19
私はこれが不幸だと思っていることを知りません...元に戻すを実装するにはかなりのリソースが必要です。デフォルト-irm有効になっているオプションも気に入らない。私のUnixシステムは私の手を握るべきではありません。
xenoterracide

5
-iはデフォルトで有効になっていますか?!私のディストリビューションではありません。
ステファン

9

いいえ、Unixには魔法のような取り消しはありません。Unixは、あなたが何をしているのか知っていると仮定します。元に戻すサポートには、VCSを使用します(おそらくテキストエディターにも組み込まれています)。

ほとんどのファイルシステムには、透過的に実行する機能がありません。

MacおよびWindowsでのタイムマシンとシステムの復元は、それぞれ単なるバックアップ/変更制御システムです。


7

コマンドラインには元に戻すことはできません。ただし、rm -iおよびとしてコマンドを実行できますmv -i。これにより、「よろしいですか?」というプロンプトが表示されます。コマンドを実行する前に質問します。

スタートアップスクリプトにエイリアスを追加することもできます(~/.bashrcまたは/etc/bash.bashrc)。

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

編集:以下の提案により、デフォルトのコマンドをエイリアス化するアドバイスを削除しました。代わりに、新しいコマンドが導入されました)。


1
+1。ここに追加するだけです。上記のエイリアスを設定した後、場合によって「本当に」プロンプトなしで直接削除したい場合は、エイリアスをバイパスするために\ rmと\ mvを使用できます。-fオプションも使用できます。
ヘマント

2
mv -iファイルを上書きするときにのみプロンプトを表示します(これにより、ファイルが便利になり、不快ではなくなります)。同じように、alias cp='cp -i'
ジル「SO-悪であるのをやめる」

8
rmとmvのエイリアスは非常に悪い考えです。(rmは何よりも悪いことです。)rmを使用してrm -iを意味する習慣を身に付けないでください。最終的には、エイリアスが定義されていない場所で使用し、何かを削除します。プロンプトが表示されたら、常にrm -iを使用する習慣を身に付けてください。
msakr

プロンプトが表示されたら、別の名前でエイリアスを使用してください。move = 'mv -i'、copy = 'cp -i'、symlink = 'ln -si'を使用し、rmの代わりに使用するゴミ箱コマンドをインストールします。スクリプト作成時にはmv、cp、rmを直接使用しますが、インタラクティブな使用にはこれらのエイリアスが便利です。

@mahmoudsakrあなたは完全に正しい、私はその点を見逃した。これらのコマンドにはエイリアスもありません。それらを別のコマンドとしてエイリアス化することは、最も健全なオプションのようです!
vdboor

4

Linux / Unixシステムに元に戻す機能がない理由は、ほとんどのファイルシステムが情報を保存する方法に由来します。ファイルのメタ情報はすべてディスクの前面に保存され、残りのディスク上のiノードへの参照が含まれます。通常、ほとんどのファイルシステムは、このメタ領域のファイルに10ブロックを割り当てます。最初の7つは最初の7つのiノードを指します。8番目と9番目はiノードのリスト(二重にリンクされたブロック)に行き、10番目はリストのリスト(三重にリンクされたブロック)に行きます。これはファイルシステム(ext4、jfs、xfsなど)によって異なりますが、これらのブロックリストは通常​​2GBから数TBのファイルサイズに対応できます。

ただし、これらの情報はすべてディスクの前面に保存されるため、ファイルが消去されると、ディスク上のiノードを使用して、所属するメタデータを参照する方法がなくなります。対照的に、FAT32とNTFSは実際にいくつかのヘッダー情報をファイル自体に保存し、ブロックのセットがどのファイルに属するのかを識別しやすくします(そのスペースが新しいファイルによってまだ回収されていない限り)。Linuxの作業では、何かを削除すると、ほとんどの場合、効率のために新しいデータですぐに上書きされます。


2

元に戻す機能が本当に必要な場合は、ソース管理を使用します。 Subversionは、実際にはシングルユーザーマシンで非常にうまく機能します。これを使用して、ホームシステム上のすべての個人ファイルを制御します。災害、不正なスクリプト、またはコマンドラインの入力ミスが発生するまでは、やり過ぎのようです。


1
rm -r .しかし、それはあなたを保護しません。;)
ウマン

1
@Umang私は実際に私が誤ってローカルリポジトリを維持し、gitの、と一度それをしましたrm -r project.git。あなたが起こることは稀だリモートサーバー上の別のバージョンに保つ幸い場合
phunehehe

1
@phuneheheと私のコメントを+1した人:私たちもDVCSに慣れていて、私が完全に間違っていたことを認識していました。SVNはレポ(ブランチではありません)にコミットします。だからあなた実際に保護されrm -r .ます。本当にばか。
ウマン

2

.bashrcに追加したいことの1つは、コピーと削除の機能です。何かのようなもの:

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

ただし、rmではなくcprmと入力する習慣を身に付ける必要があります。

ディスクスペースが限られている場合は、削除された領域を常に把握する必要があります。


4
あなたは本当に〜/削除された/ $ 1 $ 1をmvをすることを短縮することができ
ステファン・

はい"$1"。引用が正しい場合、ファイル「new Document 1」を別の「new Document 1」で上書きします。
ユーザー不明

@userunknown:DeanoとStefanのコードで$ 1を「$ 1」として引用する必要があるということですか?
ティム

@ティム:はい、そうです。
ユーザー不明

cpとrmの代わりに移動しないのはなぜですか?
user1559897

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.