以前はオフィスに専任のスタッフが必要で、次に専任のマシンが必要だったドキュメントをコピーします。今日、コピーは、コンピュータユーザーが何も考えずに行うタスクです。コンピューターにデータをコピーするのは非常に簡単なので、ファイルを外部ドライブにドラッグするときなど、気付かないうちにコピーが作成されます。
デジタルエンティティを複製するのは簡単であるという概念が普及しているため、ほとんどの現代のコンピュータ専門家は、自分の作品を複製するために利用できるオプションについて考えていません。それでも、Linuxでファイルをコピーする方法はいくつかあります。それぞれの方法には、何をする必要があるかに応じて、役立つ可能性のある微妙な機能があります。
Linux、BSD、およびMacでファイルをコピーする方法はいくつかあります。
GUIでのコピー
Linuxコンテナ
- Linuxコンテナとは何ですか?
- コンテナ用語の概要
- ダウンロード:Containers Primer
- Kubernetesオペレーター:コンテナオーケストレーションプラットフォームの自動化
- eBook:クラウドネイティブアプリを設計するためのKubernetesパターン
- Kubernetesとは何ですか?
ほとんどのオペレーティングシステムと同様に、必要に応じてGUIですべてのファイル管理を行うことができます。
ドラッグアンドドロップ
ファイルをコピーする最も明白な方法は、おそらくコンピュータでファイルをコピーするのに慣れている方法、つまりドラッグアンドドロップです。ほとんどのLinuxデスクトップでは、あるローカルフォルダから別のローカルフォルダにドラッグアンドドロップすると移動します デフォルトではファイル。 Ctrl を押したままにすると、この動作をコピー操作に変更できます。 ファイルのドラッグを開始した後、キーを押します。
カーソルにプラス記号などのインジケータが表示され、コピーモードであることを示す場合があります。
ファイルがリモートシステムに存在する場合、それがウェブサーバーであろうと、ファイル共有プロトコルを介してアクセスする独自のネットワーク上の別のコンピュータであろうと、デフォルトのアクションは、ファイルを移動するのではなく、コピーすることです。
>デスクトップ上でファイルをドラッグアンドドロップすると不正確または不器用な場合、またはキーボードから手を離しすぎる場合は、通常、右クリックメニューを使用してファイルをコピーできます。この可能性は、使用するファイルマネージャーによって異なりますが、通常、右クリックすると、一般的なアクションを含むコンテキストメニューが表示されます。
コンテキストメニューのコピーアクションでは、ファイルパス(システム上にファイルが存在する場所)がクリップボードに保存されるため、貼り付けできます。 別の場所にあるファイル:
この場合、ファイルの内容を実際にクリップボードにコピーしているわけではありません。代わりに、ファイルパスをコピーしています。貼り付けると、ファイルマネージャはクリップボードのパスを確認してから、コピーコマンドを実行し、そのパスにあるファイルを貼り付け先のパスにコピーします。
GUIはファイルをコピーするための一般的に馴染みのある方法ですが、ターミナルでのコピーの方が効率的です。
cp
デスクトップにファイルをコピーして貼り付けるのと同等の端末ベースの明らかなものは、 cpです。 指図。このコマンドはファイルとディレクトリをコピーし、比較的簡単です。おなじみのソースを使用します およびターゲット (厳密にこの順序で)構文なので、 example.txtというファイルをコピーします ドキュメントに ディレクトリ:
$ cp example.txt ~/Documents
ファイルをフォルダにドラッグアンドドロップするときと同じように、このアクションはドキュメントを置き換えません。 example.txtを使用 。代わりに、 cp ドキュメントを検出します はフォルダであり、 example.txtのコピーを配置します それに。
また、ファイルをコピーするときに、便利に(そして効率的に)ファイルの名前を変更することもできます:
$ cp example.txt ~/Documents/example_copy.txt
元のディレクトリと同じディレクトリにファイルのコピーを作成できるため、この事実は重要です。
$ cp example.txt example.txt
cp: 'example.txt' and 'example.txt' are the same file.
$ cp example.txt example_copy.txt
ディレクトリをコピーするには、 -rを使用する必要があります オプション。これは-再帰的の略です。 。このオプションはcpを実行します ディレクトリinode 、次にディレクトリ内のすべてのファイル。 -rなし オプション、 cp ディレクトリをコピー可能なオブジェクトとして認識しません:
$ cp notes/ notes-backup
cp: -r not specified; omitting directory 'notes/'
$ cp -r notes/ notes-backup
猫 コマンドは最も誤解されているコマンドの1つですが、それはPOSIXシステムの極端な柔軟性を例示しているからです。とりわけ猫 します(con catの意図された目的を含む ファイルを生成する)、コピーすることもできます。たとえば、猫 1つのコマンドで1つのファイルから2つのコピーを作成できます。 cpではそれを行うことはできません 。
猫を使用することの重要性 ファイルをコピーすることは、システムがアクションを解釈する方法です。 cpを使用する場合 ファイルをコピーするには、ファイルの属性がファイル自体と一緒にコピーされます。つまり、複製のファイル権限は元のファイルと同じです:
$ ls -l -G -g
-rw-r--r--. 1 57368 Jul 25 23:57 foo.jpg
$ cp foo.jpg bar.jpg
-rw-r--r--. 1 57368 Jul 29 13:37 bar.jpg
-rw-r--r--. 1 57368 Jul 25 23:57 foo.jpg
猫の使用 ただし、ファイルの内容を別のファイルに読み込むには、システムコールを呼び出して新しいファイルを作成します。これらの新しいファイルは、デフォルトの umaskの対象となります 設定。 umask
の詳細については 、一般的なumaskと権限について説明しているAlexJuarezの記事を読んでください。
umaskを実行します 現在の設定を取得するには:
$ umask
0002
この設定は、この場所で作成された新しいファイルに 664が付与されることを意味します ( rw-rw-r- ) umaskの最初の桁で何もマスクされていないため許可 設定(および実行可能ビットはファイル作成のデフォルトビットではありません)であり、書き込み権限は最後の桁によってブロックされます。
猫でコピーする場合 、実際にはファイルをコピーしません。 猫を使用します ファイルの内容を読み取り、出力を新しいファイルにリダイレクトするには:
$ cat foo.jpg > baz.jpg
$ ls -l -G -g
-rw-r--r--. 1 57368 Jul 29 13:37 bar.jpg
-rw-rw-r--. 1 57368 Jul 29 13:42 baz.jpg
-rw-r--r--. 1 57368 Jul 25 23:57 foo.jpg
ご覧のとおり、猫 システムのデフォルトのumaskが適用された新しいファイルを作成しました。
結局、ファイルをコピーするだけの場合、技術は重要ではないことがよくあります。ただし、ファイルをコピーして、デフォルトの権限セットと catを使用する場合があります。 すべてを1つのコマンドで実行できます。
rsync
rsync コマンドは、ファイルをコピーするための用途の広いツールであり、ソースと宛先を同期する優れた機能を備えています。最も単純なrsync cpと同様に使用できます コマンド:
$ rsync example.txt example_copy.txt
$ ls
example.txt example_copy.txt
コマンドの真の力は、しない能力にあります。 必要のないときにコピーします。 rsyncを使用する場合 ファイルをディレクトリにコピーしますが、そのファイルはすでにそのディレクトリに存在している場合は、 rsync わざわざコピー操作を実行する必要はありません。ローカルでは、その事実は必ずしも多くを意味するわけではありませんが、ギガバイトのデータをリモートサーバーにコピーする場合、この機能は世界に違いをもたらします。
ただし、ローカルでも違いを生むのは、同じ名前を共有しているが異なるデータを含むファイルを区別するコマンドの機能です。同じディレクトリであることが意図されているものの2つのコピーに直面したことがある場合は、 rsync それぞれからの最新の変更を含む1つのディレクトリにそれらを同期できます。この設定は、バージョン管理の魔法をまだ発見していない業界や、信頼できる唯一の情報源が存在するバックアップソリューションでよく見られます。
例と呼ばれる2つのフォルダを作成することで、この状況を意図的にエミュレートできます。 およびその他のexample_dupe :
$ mkdir example example_dupe
最初のフォルダにファイルを作成します:
$ echo "one" > example/foo.txt
rsyncを使用する 2つのディレクトリを同期します。この操作の最も一般的なオプションは-aです。 (アーカイブの場合 、シンボリックリンクやその他の特殊ファイルが確実に保持されるようにします)および -v ( verbose の場合 、コマンドの進行状況に関するフィードバックを提供します):
$ rsync -av example/ example_dupe/
ディレクトリには同じ情報が含まれるようになりました:
$ cat example/foo.txt
one
$ cat example_dupe/foo.txt
one
ソースとして扱っているファイルが分岐している場合、ターゲットは一致するように更新されます:
$ echo "two" >> example/foo.txt
$ rsync -av example/ example_dupe/
$ cat example_dupe/foo.txt
one
two
rsync コマンドは、バージョン管理システムとして機能するのではなく、データをコピーすることを目的としています。たとえば、宛先のファイルがソースのファイルよりも何らかの形で先行している場合、 rsync のため、そのファイルは引き続き上書きされます。 ファイルの相違を比較し、宛先が常にソースをミラーリングすることを意図していると想定します:
$ echo "You will never see this note again" > example_dupe/foo.txt
$ rsync -av example/ example_dupe/
$ cat example_dupe/foo.txt
one
two
変更がない場合、コピーは発生しません。
rsync コマンドには、 cpでは使用できない多くのオプションがあります 、ターゲット権限の設定、ファイルの除外、両方のディレクトリに表示されない古いファイルの削除などの機能など。 rsyncを使用する cpの強力な代替として 、またはちょうど便利なサプリメントとして。
POSIXシステムで本質的に同じ結果を達成する方法はたくさんあるので、柔軟性に対するオープンソースの評判は十分に得られているようです。データをコピーする便利な方法を見逃したことがありますか?コメントでコピーハックを共有してください。