Linux備忘録8:コピー系コマンド雑多(scp、rsync、dd)

ssh通信を使用してファイルコピー】

<scp> : root以外の{ユーザー名}を使用してローカル/tmp/file1をリモート/tmpへコピー
    scp <コピー元> <コピー先>

# scp /tmp/file1 {ユーザー名}@{コピー先サーバー}:/tmp
※フィンガープリント登録とパスワード入力求められる 

 

【scpコマンドオプション色々】

 秘密鍵ファイルを指定

# scp -i {秘密鍵パス} 

 

 フィンガープリント登録を無視する

# scp -o StrictHostKeyChecking=no 

 

 ポート番号を指定します。

# scp -P {ポート番号}

 

 コピー元の更新時間とモードを維持します。

# scp -p  

 

 ディレクトリ内を再帰的にコピーします。

# scp -r 

 

rsyncコマンドを使用してファイル同期させる】

<rsync>:同期先ディレクトリーのファイルを追加、更新
※宛先ディレクトリに新しいファイルが存在する場合はコピー元ディレクトリのファイルが更新される

# rsync --recursive --times --update {コピー元パス} {コピー先パス}
※「rsync -r -t -u」または「rsync -rtu」でも可

-uオプションを使用するのはアップデートのみを許可する場合 

# rsync -u

 

rsyncディレクトリ指定時の注意点】
同期元のディレクトリ末尾の「/」を省略した場合は、
同期先のディレクトリの“中”に同期元と同じ名前のディレクトリが作成されます。

例えば、「rsync -av mydata/ backup-mydata/」とした場合は、「mydata」の中にあるファイルやディレクトリが「backup-mydata」ディレクトリの中にコピーされます。

 

これに対し、「rsync -av mydata backup-mydata/」とした場合は、「backup-mydata」の中に「mydata」ディレクトリが作成されることになります。
なお、同期先の末尾の「/」の有無は影響しません。

 

 

【同期元にファイルが無い場合、同期先ディレクトリのファイルを削除】
※取扱注意 ⇒ 同期元に存在しない新しいファイルが作られている場合、削除されてしまう!!!

# rsync -rtu --delete {コピー元パス} {コピー先パス}

 

rsyncコマンドを実行せずに実行結果を表示する

# rsync -rtu --delete --dry-run {コピー元パス} {コピー先パス}
※削除対象のファイルには画面出力に「deleting」と表示 

 

 

同期先のリモート側で管理者権限でrsyncを実行する

# rsync -rtu --rsync-path='sudo rync' {同期元} {リモート先ユーザー名@リモートサーバ:同期先パス} 

※当初は{-a}オプションを付与してやっていたけど、{-a}オプションはファイルの削除はしないけど、同名ファイルが存在する場合、コピー元の情報で上書きしてしまうことがわかったため、-rtuオプションが無難。

→コピー元の古いファイルの内容で過去のものに上書きされてしまう。

 

 

 【デバイス単位でコピーを行う】

 <dd>コピー元、コピー先でデバイスを指定し、ブロック単位でのコピーが可能。 また指定容量でのファイル作成や内容変換、ファイル中身の途中からのコピーが

可能。

 

ディスクからディスクへデータをコピー

# dd if=/dev/コピー元デバイスファイル of=/dev/コピー先デバイスファイル 

 

ファイルの小文字英字を大文字に変換

# dd if=/dev/コピー元ファイル of=/dev/コピー先ファイル conv=ucase 

 

任意のファイルサイズのファイル作成

→このコマンドでイメージファイルを作成して、ファイルシステムでフォーマットして

マウントすることで一時的に別の領域(ルート構造?)を作成出来る。

# dd if=/dev/zero of=10mb bs=1 count=1 seek=20M

 

参考例:

# dd if=/dev/zero of=/tmp/sysinfo.img bs=1 count=1 seek=20M
# mkfs.xfs /tmp/sysinfo.img

# mount /tmp/sysinfo.img /mnt/sysinfo