ファイル同期のためのrsyncで使うオプション

2024/9/18 [23:46:22] (水) 天気

仕事で使っているchromebook2台でスクリプトファイル類を同期しておきたい。

そのためにメイン機から更新のあった(タイムスタンプが新しい)ものだけをコピーしたい。


てな時にlinuxだとrsyncが便利。

scpやsftpもあるけどscpもsftpもタイムスタンプを比較できないっぽいので、今回のような場合はrsync一択。

unix系ツールの例に漏れず、rsyncもオプションが豊富ですぐにわけわからなくなってるんで、自分の使う範囲のオプションをメモ。


rsync --include="*.pl" --include="*.pm" --exclude="*" -auv -e "ssh -p 10022" [ローカルディレクトリ] ユーザー名@192.168.0.NN:[リモートディレクトリ]

--incluce="*.pl"

--incluce="*.pm"

同期したい対象ファイルは拡張子が「pl」か「pm」

--exclude="*"

includeしたもの以外は同期対象外

↑これがわかりにくくて、includeとexcludeの順番がだいじ。

まず、対象を指定して、最後にそれ以外全部除外という命令になっている、らしい。


-a

以下全部をまとめて指定

・ディレクトリを再帰的に処理する

・シンボリックリンクをシンボリックリンクのままコピーする

・パーミッションを保持する

・タイムスタンプを保持する

・所有グループをそのまま保持する

・所有者をそのまま保持する(自分以外の所有者を保持するにはroot権限が必要)

・デバイスファイルや特殊ファイルを保持する(「--devices --specials」相当


-u

・更新のあったものだけをコピーする


-v

・転送状況を表示する


-e "ssh -p 10022"

・sshで接続する。ポート番号指定つき


わたしの場合は、以上で意図通りに同期される。実際にrsyncを走らせる前に

-n--dry-run

↑このふたつは、どちらもrsyncを走らせるけど、実際はコピーをしない。コマンドが意図したものになっているか確認するために使うオプション。


--delete

↑コピー元になくて、コピー先だけあるファイルを削除するオプション。deleteから始まるオプションはあぶないのでよっぽどのことがない限り使わない。


rsyncコマンドはコピー元、リモートのコピー先、両方に必要。

(リモートにインストールしてなくて、コマンドが見つかりませんとハマったのは内緒)


ローカルにあるディレクトリごと、USBメモリなんかに同期させるだけなら


from=/mnt/chromeos/removable/USBDrive/_works
to=/mnt/chromeos/removable/_TMP/_works
if [ -d $from ] && [ -d $to ]; then
   rsync -anu --delete --log-file=$to/rsync2usb-works.log $from/ $to/
fi

バックアップというより、持ち出して作業する一時的な扱いなので、こういうのは「--delete」をつけて、ローカルにないファイル・ディレクトリはUSBから削除してくれるので便利…でも、くれぐれも「delete」は要注意


[09/19 00:26:35]追記

ディレクトリ指定に注意が必要だった。

ローカルdir1/ リモートdir1

「/」がついてると、ローカルdir1に配置されているファイルがリモートdir1のファイルと同期される。

ローカルdir1 リモートdir1

「/」がついてないと、「リモートdir1/ローカルdir1」とローカルdir1がディレクトリごとリモートdir1の下にコピーされる。

[更新]2026-02-01 09:05:53

chromebookでssh

2024/9/16 [09:47:02] (月) 天気

chromebook同士でファイル共有する方法としてニアバイシェアというのがあるけど、なんか思ってたのと違う。なので、sshで繋いでファイルのやりとりを直接やってしまおう、のメモ。


chromebookを2台使っていて、メインとサブという役割分担。

メインで使っていて作業した内容をサブ機にsshで転送・バックアップしておきたい。


まずはchromebookの設定。メイン機のLinux環境からサブ機のLinux環境に繋ぐためにポート転送を設定する。道路を繋ぐための作業、みたいなもの。


サブ機側のポート転送を設定。

「ChromeOSについて→Linux開発環境→ポート転送」


ポート番号はすでに使われている番号以外ならなんでもOK

sudo less /etc/service

↑これで確認できる。とりあえず10001〜10080のあたりが空いてるので「10022」とした

image

ポート転送を設定することで

1)サブ機のローカルIPアドレス192.168.0.NNにSSHでポート番号を指定してアクセスする

2)サブ機側がポート転送してくれて、サブ機のLinux環境にログインできる


サブ機のLinux環境でsshdサービスを立ち上げる

(サブ機をsshdサーバーにする)


sshdサービスがどうなってるのか確認。

sudo systemctl status sshd.service

この時点では「Active: inactive (dead)」という表示が出ている。ssdは立ち上がっていないので、sshdを立ち上げるために以下の作業。

(sudo、root権限で/etc/以下のファイルを編集することになるので、念のためバックアップを取っておくのが安心安全)


「/etc/ssh/sshd_not_to_be_run」というファイルがあるとsshdが立ち上がらないらしいので削除

sudo rm /etc/ssh/sshd_not_to_be_run


「/etc/ssh/sshd_config」というのがsshdの設定ファイル。

Port 10022
PubkeyAuthentication yes
PasswordAuthentication no
ChallengeResponseAuthentication no
PermitRootLogin no
UsePAM no
AcceptEnv LANG LC_*

chromebookのポート転送で指定したポート番号を記載。それ以外は呪文でOK(ルートでアクセス許可するかとか)で、上記以外はデフォルトのままでOK.


設定ファイルを編集したらsshdサービスを立ち上げる

sudo systemctl restart sshd.service

立ち上がってるか確認

sudo systemctl status sshd.service

「Active: active (running)」という表示が見えたら無事sshdのサービスは立ち上がっている。


サブ機のLinux環境のHOMEディレクトリに「.ssh」というディレクトリを作成。

chmod 700 .ssh

として、権限をオーナー限定にしておく。


メイン機でsshの秘密鍵と公開鍵を作る

ホームディレクトリで

ssh-keygen

途中パスフレーズ聞かれて、入力すると「id_rsa」(秘密鍵)「id_rsa.pub」(公開鍵)がHOMEディレクトリの「.ssh」ディレクトリに作られる。公開鍵以外の権限はオーナー限定(0600)


メイン機で作った公開鍵をサブ機のHOMEディレクトリの.sshディレクトリにコピー

scp -P 10022 id_rsa.pub ユーザー名@192.168.0.NN:~/.ssh/.

メイン機で作った公開鍵をサブ機にコピーしたら、サブ機で作業


cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys

サブ機の.sshディレクトリの「authorized_keys」というファイルに公開鍵を登録(追記コピーしてるだけ)


以上でsshは繋がる。

ssh -p 10022 -i id_rsa.pub ユーザ名@192.168.0.NN

とか

ssh -p 10022 -l ユーザー名 192.168.0.NN

メイン機からサブ機にログインしてごそごそいじったり


scp -P 10022 -r work ユーザ名@192.168.0.NN:work

などとメイン機からサブ機にファイルコピーしたり


sftp ユーザー名@192.168.0.NN:DIR

とか、sftpでログインしてアップしたいディレクトリに移動してから

put -r DIR/

などとメイン機からサブ機にディレクトリごとアップしたり、


ファイル操作がらくちんになった。

とはいえ、コマンドラインなので、上書き事故には気をつけないといけない、よなあ。


ちなみに注意するところがあって。

linux開発環境も、ポート転送も手動。chromebookを立ち上げたり、再起動したら

・Linux開発環境を立ち上げる

・ポート転送をONにする

…というのもあって、どうせ確認するわけだし、IPアドレスも自動割り当てのままにした。


以下のサイトを参考にさせていただきました(多謝

【Chromebook】SSHサーバの設定

ChromebookのLinuxコンテナにSSHでログインする


最近のネタ切れの時の弁当は2色、3色弁当。

image

なんかこういう手抜きの方が美味しかったりするから、ちょっと悔しい。

[更新]2024-09-22 10:55:27

ActivityPubの投稿公開範囲

2024/9/4 [08:03:28] (水) 天気

あれ、どうするんだっけ?と忘れがちでしょっちゅう検索してしまう投稿の公開範囲をメモしておこう(間違ってるかもしれない…気がついたら修正)


ActivityPubで、Fediverseに投げ込んだNoteの公開範囲を選べる。


・全公開

 誰でも見ることができる。

 投稿が流れるタイムライン

 →連合、ローカル、ホーム

・未収載

 誰でも見ることができる。

 投稿が流れるタイムライン

 →ホーム

・フォロワー限定

 フォロワーだけが見ることができる

 投稿が流れるタイムライン

 →ホーム

・ダイレクト(DM)

 指定したお相手だけが見ることができる

 タイムラインには流れない

※「ホーム」というのは、自分・フォロワーの「ホームタイムライン」


「未収載」と「フォロワー限定」がわかりにくいのでメモ


・未収載は

フォロワーのホームに投稿が流れる。自分をフォローしていないユーザーが、フォロワーのホームに流れている自分の投稿を見ることができる。

・フォロワー限定は

フォロワーのホームに投稿が流れる。自分をフォローしていないユーザーが、フォロワーのホームを見ても、自分の投稿は見えない。


投稿の公開範囲と宛先の組み合わせ

(Activityの指定)

公開/宛先tocc
全公開Publicfollowers
未収載followersPublic
フォロワー限定followersなし
ダイレクトお相手のinbox指定なし


ActivityPubの約束事として公開範囲については上記で全部。

このほかに、もっと細かく公開範囲を指定できるサーバーもあって。


「Fedibrid」https://fedibird.com

「公開/未収載/フォロワー限定/相互フォロー限定(対応サーバーのみ)/サークル/DM/自分限定」

↑こちらは、今日時点で投稿の公開範囲は7種類から選べる。


公開範囲は意識しておきたいところだけど、うっかりやらかしてしまうので、自戒を込めてのエントリ。


ウチのおひとり様ActivityPubサーバーは。


設定ファイルのpublic_levelで公開か未収載を選択する。

・現在のデフォルトは公開

 「to」がPublic、「cc」がわたしのfollowers

・Mentionとダイレクトは「to」がお相手のinbox

・Mentionの「cc」はわたしのfollowers

・ダイレクトの「cc」はなし



image

神田明神の妖怪展。有名なガシャドクロを始め、規模こそ小さかったけど、面白かった。

常設展もかなり面白かった。オススメ。

[更新]2025-10-27 09:31:44

<<2024/09>>
       
1234567
891011121314
15161718192021
22232425262728
2930

【最近の10件】

日常読書映画アニメゲーム健康料理グルメカメラ写真ネタ仕事パソコンインターネットperlEPUB3電子書籍ActivityPub還暦生活
検索: