cp -aオプションとは?Linuxで属性付きコピーをするアーカイブモードの基本
生徒
「Linuxのcpコマンドで-aオプションって見かけたんですけど、これは何をするものですか?」
先生
「-aはアーカイブモードと言って、ただコピーするだけじゃなくて、ファイルの属性やパーミッション、タイムスタンプなんかも全部そっくりそのままコピーしてくれるオプションなんですよ。」
生徒
「なるほど!ただのコピーとは違うってことなんですね。詳しく教えてください!」
先生
「それでは、実際にcp -aの使い方やポイントを見ていきましょう。」
1. cp -aとは?アーカイブモードの意味
cp -aは、Linuxでファイルやディレクトリを「そのままの状態」でコピーするアーカイブモードです。「archive(アーカイブ)」のaが由来です。
このオプションを使うことで、以下のような情報も含めてコピーされます:
- ファイルの所有者
- パーミッション(読み書き実行の権限)
- タイムスタンプ(作成日時・更新日時)
- シンボリックリンク
- ディレクトリ構造
つまり「ただ中身だけコピーする」のではなく、「状態も含めて完全コピー」するイメージです。
2. 基本的な使い方
cp -aの基本的な書き方は以下のとおりです。
cp -a コピー元 コピー先
たとえば、data_folderというフォルダをbackup_dataとして完全コピーしたい場合はこう書きます。
cp -a data_folder backup_data
この操作で、data_folderの中のファイルやディレクトリ、属性情報まですべてそっくりbackup_dataに複製されます。
3. cp -aとcp -rの違い
cp -rもディレクトリを再帰的にコピーできますが、属性まではコピーされません。
たとえばcp -rでコピーすると、所有者や作成日時などが変わってしまうことがあります。
一方でcp -aは、-rに加えて、-d(リンク保持)や-p(属性保持)などをまとめたオプションなので、より完全なバックアップが可能です。
4. 属性とは何か?初心者向けに解説
Linuxでの「属性」とは、次のような情報のことを指します。
- 所有者:誰のファイルなのか(例:user1)
- パーミッション:誰が読み書きできるか(例:rw-r--r--)
- タイムスタンプ:ファイルがいつ作られたか、いつ更新されたか
- シンボリックリンク:別のファイルへの参照(ショートカットのようなもの)
cp -aを使えば、こうした属性もすべて維持されます。
5. コピー先に既にファイルがあるときは?
cp -aはコピー先に同じ名前のファイルがあると確認なしで上書きします。重要なデータを守るためには、-i(確認)をつけるのもおすすめです。
cp -ai config config_backup
このようにすると、「上書きしてもいいですか?」と聞かれるようになります。
6. 実際に属性を比較してみよう
コピー前後で属性が同じかどうかはls -lコマンドで確認できます。
ls -l original.txt
-rw-r--r-- 1 user user 1234 9月 15 12:00 original.txt
cp -a original.txt copied.txt
ls -l copied.txt
-rw-r--r-- 1 user user 1234 9月 15 12:00 copied.txt
このように、パーミッションや更新日時なども元のままコピーされていることが確認できます。
7. バックアップ用途でのおすすめ
cp -aは、システム設定ファイルのバックアップや、重要なデータの完全コピーに最適です。
例:ホームディレクトリを外付けHDDにコピーしたいとき
cp -a ~/Documents /mnt/usb_backup/
このようにすれば、フォルダ構成も属性もすべて保持したまま、バックアップが取れます。