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/
このようにすれば、フォルダ構成も属性もすべて保持したまま、バックアップが取れます。
まとめ
今回の記事では、Linuxでファイルやディレクトリを「丸ごと複製」したいときに非常に便利なcp -aオプションについて、初心者でも理解しやすい形で解説しました。cpコマンドはLinuxの基本操作の中でも特に使用頻度が高いものですが、その中でも-a(アーカイブモード)は、単純なコピーとは違い、所有者・パーミッション・更新日時・シンボリックリンク・ディレクトリ構造などの属性をすべて維持したまま完全コピーしてくれる非常に強力な機能です。通常のコピーでは失われてしまう細かい情報もそのまま保持されるため、バックアップ用途や正確な複製が求められる環境では欠かせません。
Linuxのファイルシステムでは、単なる中身のコピーだけでは不十分なケースが多くあります。例えば、設定ファイルの権限が変わってしまうと正しく動かなくなることもあるため、cp -aによる属性保持は非常に重要です。一般的なcp -rでは再帰コピーはできますが、属性までは保持されません。そこで-aを使うと、内部で-r、-d、-pなどをまとめて実行し、より確実なコピーを行ってくれます。
また、コピー先に既にファイルが存在する場合、cp -a は確認なしに上書きするという特徴もあるため、慎重に操作したいときには -i オプションを併用して、上書き前に確認する方法も紹介しました。
cp -ai config config_backup
このようにすることで、誤って大切なファイルを上書きしてしまう事故を防げるため、初心者だけでなく熟練者にも推奨される使い方です。
さらに、cp -a の動作を実際に確かめるために、コピー前後の属性を 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
この結果からも分かるように、cp -a を使うとパーミッションや所有者、更新日時がすべて保持されていることが確認できます。これは、Linuxの動作に関わる重要な属性を正確に残したままコピーできている証拠です。特に、設定ファイルやシステムディレクトリのバックアップではこの属性保持が欠かせないポイントとなります。
cp -a は、ホームディレクトリのバックアップからプロジェクト全体の複製、設定ファイルの安全な保存まで、幅広い用途に対応できます。例えば外部ストレージへのバックアップでは次のような使い方が非常に便利です。
cp -a ~/Documents /mnt/usb_backup/
このように、フォルダ構造、権限、ファイル属性などを保ったまま安全にバックアップが取れるため、後から元に戻す際にも正確に復元できます。日々の作業環境を守りたい人にとって、cp -a は頼もしい味方になります。
Linuxのファイル管理は、権限やタイムスタンプなど細かい情報がそのまま動作に影響する世界です。その中で cp -a を活用すれば、安心してバックアップを取ったり、正確なコピーを作成したりできるようになります。初心者の方も、まずは小さなフォルダで試しながら、cp -a の便利さを実感してみてください。習得すれば、Linux操作の幅が一段と広がり、ファイル管理をより安全かつ効率的に行えるようになります。
生徒
「先生、cp -a がここまで便利だとは知りませんでした!属性まで全部コピーされるなんて、普通の cp とどう違うのかよく分かりました。」
先生
「その理解はとても大事だよ。Linux のファイルは、中身だけじゃなく、権限やタイムスタンプといった属性もそのまま動作に影響するからね。それを丸ごと複製できるのが cp -a の強みなんだ。」
生徒
「バックアップのときに使う理由もよくわかりました。cp -r だけだと不十分なケースがあるんですね。」
先生
「そうなんだ。特に設定ファイルは権限が変わるだけで動かなくなることも多いから、状態を保ったままコピーできる cp -a はとても役に立つよ。今日の説明でその重要性が伝わったなら嬉しいね。」
生徒
「はい!まずは自分のフォルダで試してみます!安全なコピーって大事ですね。」
先生
「その意識があれば大丈夫。Linux の世界は奥深いけれど、ひとつひとつ覚えていけば確実に力になるよ。」