cpコマンドでファイルやディレクトリをコピーした際に保持される情報/属性について
(2019/4/10)本記事は「cpコマンドのコピーで保持される属性」へ移動した。
以下、以前の内容となる。
ファイルやディレクトリをコピーした際に保持できる情報/属性の種類
ファイルやディレクトリにはその名前の他にファイルシステム上の幾つかの情報が存在する。
cpコマンドでのコピーの際には、下のそれぞれについて保持するかしないかをオプション指定によって選択することができる。
- 最終更新日時と最新アクセス日時
- 所有者と所有グループ
- アクセス権(パーミッション)
- SELinuxの「コンテキスト」と呼ばれる情報(SELinuxが有効なシステムの場合のみ)
- ディレクトリ内に存在するハードリンク(ディレクトリの場合のみ・指定しないと同一内容のファイルが複数作られる)
- ファイルシステムの拡張属性(拡張属性を有効にしているファイルシステム内のみ)
ただ、コピーを行うユーザの権限によっては保持されないこともあり、例えば所有者と所有グループは一般ユーザ権限で保持しようとしてもそうはならずにcpコマンドを実行したユーザが新規に作成するファイルと同様に扱われる。
-pオプション指定時
-pオプションを付けると
- 最終更新日時と最新アクセス日時
- 所有者と所有グループ
- アクセス権(パーミッション)
が保持される。
-pオプションだけを付けた場合、シンボリックリンクを1番目の引数(コピー対象)としたときにコピー出力はそのリンク先の複製となり、シンボリックリンクはシンボリックリンクとしてはコピーされない。
-aオプション指定時
-aオプションを付けると、はじめに挙げた情報の全てが保持される。更にディレクトリ(以下全て)を対象としたコピーも可能になり、シンボリックリンクを対象としたコピー時にはコピー出力もシンボリックリンクとなる(シンボリックリンクはシンボリックリンクとしてコピーされる)。
コピー対象と同じ形が得たいときにはこのオプションを指定する習慣をつけておくとよい。
保持される情報を細かく指定する
保持される情報は--preserveというオプションで細かく指定でき、その種類を示す以下の文字列をコンマ区切りで並べた形で指定する。
- 最終更新日時と最新アクセス日時: timestamps
- 所有者と所有グループ: ownership
- アクセス権(パーミッション): mode
- SELinuxの「コンテキスト」と呼ばれる情報: context
- ディレクトリ内に存在するハードリンク: links
- ファイルシステムの拡張属性: xattr
例えば、アクセス権とタイムスタンプだけを保持したい場合は--preserve=mode,timestampsとする(一覧部分の順番は逆でも可)。
--preserve=allを指定すると、上記の全てを保持しようとする。-aオプションもこの指定を含んでいる。
--no-preserve=[一覧]オプションを指定すると、保持しない情報が指定できる(例:--no-preserve=mode,ownership)。
頻繁に用いたい組み合わせがある場合はエイリアスを定義すると便利。
関連: -aオプションに含まれる指定を同オプションを用いずに行う
指定ディレクトリ以下のコピーを行うための指定
-aオプションを付けずに指定ディレクトリ以下全てをコピーする場合は-Rオプションを付ける。
関連記事:
- cpコマンドの引数について
- GNU/Linuxにおける基本的なアクセス権について(対象/属性/表記など)
- GNU/Linuxにおける基本的なアクセス権について(属性の設定手順と初期値について)
- ハードリンクとシンボリックリンクについて
参考URL:
使用したバージョン:
- coreutils 8.20