web-dev-qa-db-ja.com

バックアップアーカイブのシンボリックリンクと権限

Linuxを別のコンピューターにインストールし、/ homeディレクトリーをそのコンピューターに移動したいと考えています。ファイルの権限、シンボリックリンクなどでそのディレクトリをバックアップしたいのですが、どうすればいいですか? tar gzipのパラメーターはありますか?

6
piotrek

シンボリックリンクが指すファイルを含める場合は、_-h_を使用します。

_tar -chzf foo.tar.gz directory/
_

権限と所有権はデフォルトで保持されます。シンボリックリンクをシンボリックリンクとして含めるだけの場合は、_-h_を省略します。小さい_-z_はgzip用です。

これはすべて_man tar_で表記されています。スラッシュキーを使用してmanの用語(「symlink」など)を検索できます /


アーカイブ(_tar -xzf foo.tar.gz_)を抽出すると、所有権rootとしてアンパックした場合にのみ保持されます、そうでない場合、すべてのファイルはあなたが所有します。これは、通常のユーザーが(たとえば)ダウンロードしたアーカイブ内のファイルにアクセスできないことがよくあるためです。モーダル権限(読み取り/書き込み/実行)は同じままです。通常のユーザーとして所有権を保持したい場合は、_-p_スイッチを使用できます(したがって_tar -xzpf foo.tar.gz_)。

ただし、落とし穴があります。

ファイルの所有権は、実際には名前ではなく番号として格納されます。システムは、_/etc/passwd_の値と関連付けることで名前を報告します。あなたはあなたのユーザー名に対応する番号を見つけることができます:

_grep yourusername < /etc/passwd
_

これは次のようなものを出力します:

_piotek:x:1001:1001::/home/piotek:/bin/bash
_

最初の番号はユーザー番号、2番目の番号はグループ番号です(通常は同じです)。その他のフィールドについては、_man 5 passwd_で説明しています(_5_に注意してください)。

その結果、いくつかのファイルをtarして別のシステムにrootとしてアンパックするか、または_-p_を使用して(所有権が保持されるように)、そのシステムにユーザー番号1001のユーザーがいる場合、それらのファイルユーザーの名前がpiotekでなくても(また、対応する番号が異なるpiotekユーザーがシステムに存在する場合でも)、そのユーザーが所有します。

tarのマニュアルページは、_-p_スイッチがファイルのアクセス許可を含むものとして参照されているため、この点で少し混乱しています。これは、読み取り/書き込み/実行ビットの状態がmodeと呼ばれるコンテキストで一般的な* nixのあいまいさです。

10
goldilocks