BuffaloのNASをrsyncサーバとして使う
BuffaloのNAS、
LinkStation LS-XHLシリーズの、
LS-XH1.0TLを購入した。
そこで、保証が切れない範囲で弄ってみる。
早速、nmapでポートスキャン。
$ nmap -sT NAS-HOSTNAME
TCPでどんなサービスが動いてるか調べてみる。
と、こんな結果に。
PORT STATE SERVICE 80/tcp open http 139/tcp open netbios-ssn 445/tcp open microsoft-ds 548/tcp open afp 873/tcp open rsync 8873/tcp open unknown 22939/tcp open unknown
「rsyncが動いてるじゃん。
このNAS、自宅用rsyncサーバとして使えるんじゃね?」
と、思いrsyncでアクセス。
$ rsync -avvvn rsync://admin@NAS-HOSTNAME:873/ .
しかし、下記の様な結果になり、
公開されているモジュールが無い。
opening tcp connection to NAS-HOSTNAME port 873 sending daemon args: --server --sender -vvvnlogDtpre.iLs . /
よくよく調べてみると、
LinkStationではファイルのバックアップにrsyncを利用しているらしい。
なので、下記の様に公開先をバックアップにするとモジュールとして登録されるっぽい。
公開先をバックアップにして再度アクセス。
opening tcp connection to NAS-HOSTNAME port 873 sending daemon args: --server --sender -vvvnlogDtpre.iLs . / disk1_forRsync
モジュール名が取得出来た。
どうやらprefixとしてdisk1_とか付くみたいだ。
これで普通にrsyncサーバとして使えるみたい。
$ rsync -avz hoge rsync://admin@NAS-HOSTNAME:873/disk1_forRsync
とかやると、hogeファイルがrsyncでバックアップ出来るよ!
Macだと、TimeMachineとrsyncのダブルでバックアップできる。
とっても便利。
*.appをopenするコマンドの作成
Macで*.appのアプリケーションをターミナルから開きたい。
しかし、
$ open -a /Applications/Safari.app hoge.html
とかいちいち打ち込むのもめんどくさい。
なんでシェルスクリプトを書いて、
$ safari hoge.html
で、開けるようにした。
#! /bin/sh App="/Applications/Safari.app" open -a "${App}" "$@"
しかし、*.appのアプリケーションはいっぱいあるので、
いちいちこのスクリプトを手で書いていくのはめんどくさい。
なので、上記のコードを生成するスクリプトを書いた。
アプリケーションの絶対パスを引数として、
フォルダ$HOME/binに上記の様なシェルスクリプトを生成する。
生成されるファイル名は、bオプションで指定が無い限り、
"Application APP.app"を引数としたら、
"application_app"の様に、
".app"を省略し、スペースをアンダーバーに、大文字を小文字に変換したものにしている。
#! /bin/sh ## コマンド名 make_app_bin ## コマンドを生成する標準のフォルダ名 folderName="${HOME}""/bin" binName="" ## bオプションは、生成するシェルスクリプトのファイル名を指定する。 ## fオプションは、生成するシェルスクリプトを格納するフォルダ名を指定する。 while getopts 'b:f:' OPTION do case $OPTION in b) binName="$OPTARG" ;; f) folderName="$OPTARG" ;; ?) echo "Usage: "`basename "$0"`"[-b binName] [-f folderName] appName" exit 2 ;; esac done ## オプション部分を切り捨てる。 shift `expr $OPTIND - 1` if [ "$#" -ne 1 ]; then echo "Usage: "`basename "$0"`"[-b binName] [-f folderName] appName" exit 2 fi ## bオプションが指定されていなかったら、 ## ".app"を省略し、スペースをアンダーバーに、大文字を小文字に変換したものをコマンド名にする。 if [ -z "${binName}" ]; then binName=`basename "$1" | sed -e s/".app"/""/g | tr " " "_" | tr A-Z a-z` fi bin="${folderName}""/""${binName}" ## ファイルかシンボリックリンクがあったらスルーする。 if ([ -e "${bin}" ] || [ -L "${bin}" ]); then echo "Warnings: "`basename "$0"`": ""${bin}"": file exists" else ## コマンド生成。 echo make: \""${binName}"\" -\> \"$1\" echo \#\! /bin/sh > ${bin} echo >> ${bin} echo App=\"$1\" >> ${bin} echo >> ${bin} echo open -a \"\$\{App\}\" \"\$@\" >> ${bin} chmod 755 ${bin} fi
と、ここまで書けたので、後はApplicationsフォルダより下の階層から*.appを探してきて、
自動でコマンドを生成してくれれば完成である。
その為に以下のコマンドを実行。
$ find /Applications -name "*.app" -print0 |xargs -0 -I{} make_app_bin "{}"
これでターミナルから楽に*.appを開けるようになった。
満足。