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/コピー先ファイル 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