大学の環境を利用するため以下のキャラクターベースのツールを設定したので解説する。すべて無料である。いまのところ、私の備忘のために項目だけだが、そのうち補充する。
- SSHによるremote login
- FUSE (Fuse4x)とsshfsを用いたSSHを経由したremote mount (ファイル共有)
- MacFuseは、サポートが打ち切りになったらしいし、sshfsとの相性が悪く、dialog boxが出てきて、うまく使えなかった。
- X11のSSHフォワーディング
- 大学のサーバへのfirefoxをinstallして遠隔ブラウズの確認、Stanford大工学部図書館所蔵の4万冊の電子ブックが家で読める。O'Reillyをはじめ、めぼしいものは、ほとんどありそう。通常は、閲覧者数の制限もかかっていないとのこと。(後述する、後日別記事に分離する予定)
- rsyncによる差分バックアップ
- FUSEでマウントした作業データのlocal diskへのコピー。ローカルデータのNASへのバックアップに利用する。time machineのように特定時点には戻れないが、backupしたファイルの中身に随時参照できること、バックアップ項目の制御が楽なのが利点だと思う
- 日本語ファイル名の漢字コードがおかしいものがあるらしく、途中で止まる
- bashによるバックアップスクリプトのサンプル
- そのうち、cronを使いつつ、mountでトリガをかけて、自動化したいと思っている
- emacsによる編集
- .emacsのサンプル
- terminal内で、ATOKの英語・日本語切り替えがうまくいかないので調査中である
- mailをemacsで読む。文字化けの対策やらメイルヘッダをいじったりしたいので、融通の利くemacsでのメイルプログラムを立ち上げたい。
- http://takanory.net/takalog/1266 を参照し、emacsをemacs23に置き換え、Wanderlustを入れる予定。
emacs23の紹介は以下) http://sakito.jp/emacs/emacs23.html emacsからIMEの切り替えをする設定法はここに出ている。 - メイルプログラムの一覧は、以下: http://femt.ddo.jp/modules/xpwiki/?emacsでメールな環境にしてみる
- まずは、簡便なunixのmailコマンド、sendmailを有効化して、vimやemacsで編集した、mailのデータを送り込めば必要なことはできる。以下のURLでは、post fixは起動している前提なので、postfix reloadではなく、postfix startで良い。これで、ちゃんとメイルが送れることを確認した。IMAP4の設定はしていないので、送るしかできない。(以下) http://yasuwagon.blogspot.com/2011/05/mac-os-x-mail.html
- postfixの起動は以下にもあるが、面倒なやり方を説明しているだけ: http://earlybirds.ddo.jp/namahage/inegalog/article.php?id=60
Macの概要については、以下に書いた。
2011年10月23日日曜日: Macはすごい
SSHによるリモートアクセス)
ツールはすべてMacに最初から備わっている。
ツールはすべてMacに最初から備わっている。
- キーペアを生成する
- ssh-keygen -t rsa -C "Comment" など
Passphraseで改行をいれると秘密鍵のPasspharaseなしになるが、秘密鍵が盗まれると危険なので、秘密鍵とペアで認証に必要になる、パスフレーズを設定した方が良い。また、秘密鍵は、networkやMailでは送らない。複数のクライアントPCからリモートログインしたいときには、PCごとにキーペアを変えておけば、盗難にあったときに、そのPCからのログインだけ無効化できる - ssh-keygenの使い方は以下など) http://www.21linux.com/archives/2005/12/sshkeygen.html
や https://drupal.org/node/1070130 - キーは、~/.sshに生成される。rsaの場合には、デフォルトでは、id_rsaが秘密鍵、id_rsa.pubが公開鍵である。公開鍵はtextファイルである
- 公開鍵を、サーバの~/.ssh/authorized_keys に書き込む。いくつでも公開鍵は登録できる
- キーペアを用いたSSH認証は以下に説明がある。http://www.c.csce.kyushu-u.ac.jp/kb/wiki/index.php?ssh%20%A4%C7%A5%D1%A5%B9%A5%D5%A5%EC%A1%BC%A5%BA%C7%A7%BE%DA
- sshでログインする
- ssh -Y -i ~/.ssh/id_rsa USER_NAME@HOST_NAME
- -Y オプションは、X11トンネリングをするためにつける。ないしは、/etc/ssh_config に、ForwardX11Trusted yes の行を入れておく
編集のやり方は、sudo vim /etc/ssh_config など - 初回だけ、passcodeを要求されるが、次回からはpasscodeはキーチェインに保存されるのか要求されない。これは以下の利点がある
- ログインが簡単で高速
- ログイン時間に影響しないので、秘密鍵には、非常に長い複雑なパスコードをつけて、安全性を高めることができる
- パスコードを毎度入れないので、盗み見による不正ログインの危険がない。PCを物理的にアクセスされるか・盗難されない限り安全である
- 万一PCが盗難にあっても、サーバ側の~/.ssh/authorized_keys を編集すれば即刻無効化できる。なにからなにまで、自己完結できるのが、私は好ましいと思う
- キーペアのビット長を長くしておけば、さらに安全である。これは、ssh-keygenの" -b キー長 " のオプションで指定できると思う
- http://www.macupdate.com/app/mac/39025/fuse4x よりFuse4xを取得。Macのインストーラになっているので、そのままインストールする。
- https://github.com/downloads/fuse4x/fuse4x/sshfs-2.3.0.zip を取得。以下のコマンドで、sshfsを/usr/local/binに展開。
- sudo unzip sshfs-2.3.0.zip -d /
- local_mountpoint のdirectoryをMacに作っておく
- sshfs USER@HOST_NAME:/home/satoshi local_mountpoint で、マウントする
- mount コマンドで、mountの様子が見られる
- terminalからは、local_mount の名前でmountされて見えるが、finderアプリからは、違う名前で見える
sshによるX11のフォワーディング)
terminalからsshでログインする際に、先にsshに書いたようにTrustedである、-Yオプションをつければ良い。-Xオプションでうまくいくこともある。
DISPLAYのshell変数が設定され、x11対応のプログラムを立ち上がると、ssh経由でX11のデータが転送され、Mac側にwindowが立ち上がる。Mac側のxserverも自動的に起動される。
まず試すにはxeyesとかxclockがお手軽だろう。
emacsは、DISPLAY変数をみて、X11 forwardingされているとリモートウィンドウを立ち上げる。結構遅いので、これがいやな場合には、emacs -nw としてnon windowモードで立ち上げればよい。
大学内のLAN, WLANであれば、電子ブックが読めるので、以下のサイトから、サーバにfirefoxをinstallした。これはローカルにダウンロードして、FUSE+sshfsにマウントしたdiskから転送できる。
http://mozilla.cdn.leaseweb.com/firefox/releases/latest/linux-x86_64/en-US/
terminalからsshでログインする際に、先にsshに書いたようにTrustedである、-Yオプションをつければ良い。-Xオプションでうまくいくこともある。
DISPLAYのshell変数が設定され、x11対応のプログラムを立ち上がると、ssh経由でX11のデータが転送され、Mac側にwindowが立ち上がる。Mac側のxserverも自動的に起動される。
まず試すにはxeyesとかxclockがお手軽だろう。
emacsは、DISPLAY変数をみて、X11 forwardingされているとリモートウィンドウを立ち上げる。結構遅いので、これがいやな場合には、emacs -nw としてnon windowモードで立ち上げればよい。
大学内のLAN, WLANであれば、電子ブックが読めるので、以下のサイトから、サーバにfirefoxをinstallした。これはローカルにダウンロードして、FUSE+sshfsにマウントしたdiskから転送できる。
http://mozilla.cdn.leaseweb.com/firefox/releases/latest/linux-x86_64/en-US/
画像を飛ばしているので、かなり遅い。
実はもっと良いやり方がある。
実はもっと良いやり方がある。
- http, httpsをSSHでforwardingする。これは試していないが、以下のようにできると思う。
ssh -L10080:host.stanford.edu:80 -L10443:host.stanford.edu:443 -Y -i ~/.ssh/id_rsa satoshi@host.stanford.edu
最初の引数でhttpのポートである80を10080からforwardし、次の引数でhttpsのポートである、443を10443からフォワードするように、host.stanford.eduに指示しつつ SSHにuser名 satoshiでログインするという設定である。これに対しては、ブラウザに
http://searchworks.stanford.edu:10080/ のように : の後ろに、local port名を指定してloginすれば良い。 - ところがである、ちゃんと大学は、そういうproxyを用意してくれていた。
windows, Mac, iPhone, iPadでの設定の仕方も丁寧に書いてあった。このproxyを設定すると、libraryの電子ブックにアクセスしようとすると、stanford大学のlogin IDとパスワードを要求され、loginが必要になる。学内のWiFiならそれは必要ないが、そもそも学内netに接続するために、loginの設定がされているからである。
この設定をして、自宅でもどこでも電子ブックが読める。もはや参考書に金を払い、重たい本を持ち運ぶ必要はない。MacbookAirと、MiWiをinstallして3Gのルータになった脱獄iPhone(以下参照)だけがあればすむのである。これはまさに理想の環境である。
2011年10月16日日曜日
iPhoneをポケットWiFiルータにしよう
大学の図書館の電子ブック)
Safariというサイトなど、複数と契約している。webで以下のように読める。これが上記のX11フォワードとfirefoxで自宅で読めるようになった。図書の貸し出しといっしょなので、IDを登録してもらえば、local なブラウザにloginして読めるだろう。 上記のProxy設定でこれは解決した。
電子ブックの利点は、
IDを登録してもらうと自宅からloginしても読めるらしいが、 前節で示したProxy設定で解決した。これなしでアカウントにログインして図書館をアクセスしてもサンプルとなりページの半分が読めない。
電子ブックの蔵書数)
工学部図書館には4万冊の電子ブックがあり、Python, C++など、ほとんどの本はどこからでも読める。webで図書館のhomepageを見ると、Stanford大学全体で、計6,627,606冊のbook,Journalなど検索対象がある模様。(紙の書籍やマイクロィルムを含む)
"C++ program"で検索すると55,493冊がhitする。ただし、C,C#も引っかかっている。 O'Reillyなど有名どころの本はほとんどある。Infinibandだと18冊である。かなり偏りはある。
ほとんどの電子ブックは以下のsafariと契約している。アカウントなしでは、トップページにしかいけないが、個人契約もできるようである。
http://proquest.safaribooksonline.com/
WiFiが完備しているので、学内なら、芝生の上でもカフェでも、webで本が読める。重たい本を持ち運ばずに、Macbookだけで、どこでも、好きな本が読め、仕事ができる。環境を変えると、脳が刺激され発想に幅が出るように思う。理想の環境に一歩近づいた。
bashによるshell script)
Macのxterminal, terminalのshellは、bashである。私は、長いことcshellを使ってきたが、制御性等を考えると本流はbashなどBourne Shell(ボーンシェル)系であろう。shell scriptは、chmod +x ファイル名 で、実行属性を付けておけばよい。別に.batとかいった拡張子はいらない。
Bourne Shell(ボーンシェル) http://ja.wikipedia.org/wiki/Bourne_Shell
Safariというサイトなど、複数と契約している。webで以下のように読める。こ
電子ブックの利点は、
- 本を持ち歩く必要も無い
- 図書館に出向く必要も無い
- 原則アクセス数リミットがないので、返却を待つ必要も無い
- マウスオーバで辞書が引ける
電子ブックの蔵書数)
工学部図書館には4万冊の電子ブックがあり、Python, C++など、ほとんどの本はどこからでも読める。webで図書館のhomepageを見ると、Stanford大学全体で、計6,627,606冊のbook,Journalなど検索対象がある模様。(紙の書籍やマイクロィルムを含む)
"C++ program"で検索すると55,493冊がhitする。ただし、C,C#も引っかかっている。 O'Reillyなど有名どころの本はほとんどある。Infinibandだと18冊である。かなり偏りはある。
ほとんどの電子ブックは以下のsafariと契約している。アカウントなしでは、トップページにしかいけないが、個人契約もできるようである。
http://proquest.safaribooksonline.com/
WiFiが完備しているので、学内なら、芝生の上でもカフェでも、webで本が読める。重たい本を持ち運ばずに、Macbookだけで、どこでも、好きな本が読め、仕事ができる。環境を変えると、脳が刺激され発想に幅が出るように思う。理想の環境に一歩近づいた。
bashによるshell script)
Macのxterminal, terminalのshellは、bashである。私は、長いことcshellを使ってきたが、制御性等を考えると本流はbashなどBourne Shell(ボーンシェル)系であろう。shell scriptは、chmod +x ファイル名 で、実行属性を付けておけばよい。別に.batとかいった拡張子はいらない。
Bourne Shell(ボーンシェル) http://ja.wikipedia.org/wiki/Bourne_Shell
bashのシェルスクリプトの作り方の解説) http://cyberam.dip.jp/linux_command/shellscript/shellscript_main.html#a7
シェル変数の説明)
http://www.atmarkit.co.jp/flinux/rensai/shell05/parameter.html
シェル変数の説明)
http://www.atmarkit.co.jp/flinux/rensai/shell05/parameter.html
$ /bin/sh --version
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.
$ /bin/bash --versionATOKを使っているが、terminalでは、設定した入力モード切替に設定したCtrl-Jが通らない。標準のCtrl-Shift-ZやCtrl-Shift-Cは通る。bashがCtrl-Jを食っているのかと思い、~/.inputrcを変更してみたがうまくいかない。
GNU bash, version 3.2.48(1)-release (x86_64-apple-darwin11)
Copyright (C) 2007 Free Software Foundation, Inc.
.inputrcについては以下) http://x68000.q-e-d.net/~68user/unix/pickup?~%2F.inputrc
unixのbashなどのshellは、shell scriptの先頭に以下の行をいれておけば、任意のインタプリタを用いた、scriptが書ける。windowsのbatファイルより、はるかに柔軟性が高い。たとえば、Max OS-Xに最初から入っている /usr/bin/perl を使う場合には、以下のように入れておけば良い。-fというperlのオプションは、起動を高速化するものだと考えておけば良い。bashの機能は、windowsとは比べものにならないくらい高機能で柔軟性が高い。unixは、1970年台から世界中の優秀な研究者達が、オープンソースとして改良を加え続けていのだから当然である。
#/usr/bin/perl -fbashなどのShell scriptを使うと高度な処理が簡単にできる。例えばフォルダにあるファイル名の一部を付け替えるのは、 ターミナルウィンドウから
$ for i in *
> do
> mv $i `echo $i|sed s/18Dec/17Dec/`
> done
とやることで、18Decの部分を17Decに全部置き換えてくれる。これとfindコマンドなどを組み合わせれば、任意のフォルダ配下のファイル名の一括置換もできる。小さなtextコマンドを組み合わせることで何でも出来るのが、unixの美学なのである。Macでは文字コードがUTF-8に統一されているので、これらの検索やファイル名には日本語も使える。
rsyncによるバックアップ)
/user/bin/rsync は、Macに標準で入っている。
rsyncとは) http://www.itmedia.co.jp/enterprise/articles/0804/21/news013.html
rsyncの使い方) http://futuremix.org/2011/02/rsync
さきのbashのシェルスクリプトを使うと以下のようなバックアップコマンドが作れる。
- SRC変数に、バックアップしたいソースのdirectory (MacやWindowsでいうfolder)を入れておく。
- TARG変数に、バックアップ先のdirectoryを入れておく。これは、NASのback先である。
- 除外したいファイルやdirectoryのリストをEXCLに指定したファイルに書いておく。
--- nas_backup.sh ---
#! /bin/sh -f---
echo
echo '----------------'
echo backup to NAS on `date`
OPT="-av -delete $@"
# OPT="-avn -delete" # for debugging -- dry run. --> -n option with this scripts force dry run.
EXCL=--exclude-from=$HOME/scripts/rsync_exclude.list
SRC=(~/Desktop/ ~/Music/ ~/work/)
TARG=/Volumes/disk/Backup/MacbookAirHomeRsync/ # NAS mount point on Mac OS-X
for f in ${SRC[@]}
do
echo Running : rsync $OPT $EXCL $f $TARG
rsync $OPT $EXCL $f $TARG
done
$HOME/scripts/rsync_exclude.list の形式は以下の通り。
- # から始まる行、#の後ろはコメント
- - から始まる行が、除外ファイル。正規表現で指定が可能。directoryの場合には、- で終わる
- + から始まる行は、除外から再度外したいファイルやdirectory
-- execlude.listのサンプル --
# files excluded from ~/Desktop/--
- UnUsed/
- work/
# files excluded from ~/Music/
# files excluded from ~/work/
- iTunes\ Media/
# below is precious
+ iTunes\iTunes\ Media/Mobile\ Applications/
- *.dmg
- *~
~/.emacsを置くことで、起動時設定が変更できる。これはelispというlisp言語もどきで書かれている。
開発元Gnuのelispリファレンス) http://www.bookshelf.jp/texi/elisp-manual/21-2-8/jp/elisp.html
簡単な説明) http://mibai.tec.u-ryukyu.ac.jp/~oshiro/Doc/elisp_primer.html
.emacsのサンプル)
セミコロン ";" 以下はコメントになる。
とりあえず最初の3行があれば、私は使える。yatexモードは今は使っていないが、参考に残した。
1行目がないと、ctrl-hはヘルプになってしまう。2行目で、markをアサインし、3行目でundoをctrl-x ctrl-uにキーアサインしている。
--
(global-set-key "\C-h" 'delete-backward-char)
(global-set-key "\C-@" 'set-mark-command)
(global-set-key "\C-x\C-u" 'undo-only)
;; yatex setting
(setq auto-mode-alist (cons (cons "\\.tex$" 'yatex-mode) auto-mode-alist))
(autoload 'yatex-mode "yatex" "Yet Another LaTeX mode" t)
(setq tex-command "/Users/satoshi/Library/TeXShop/bin/platex2pdf-euc" dvi2-command "open -a TexShop")
(add-hook 'yatex-mode-hook
'(lambda ()
(setq buffer-file-coding-system 'euc-japan-unix)))
--
lrunというコマンドを作った)
#/bin/bash -f
# run with logfile
fname=`date +%Y%m%d`.log
date +"%n----Log: %c ----%n$*%n" >> $fname
cmd="$* 2>&1 | tee -a $fname"
echo log is written to $fname ....
# echo $cmd
eval $cmd
lrun ls -l とかlrunのうしろにコマンドを打つ。すると、20120105.logみたいに日付名のファイルに、標準出力と標準エラー出力を追記する。なければ新規に作る。
どうじに通常通り画面にも出力を表示する。logファイルには、----Log: 日付 ---
の行を挿入するので、----Log: でサーチすれば、区切りに飛べる。
bashの機能と、date, teeという2つのコマンドの組み合わせで、簡単にこういうものが作れる。
teeについてはココ) http://x68000.q-e-d.net/~68user/unix/pickup?tee
bashのリダイレクトについてはココ) http://x68000.q-e-d.net/~68user/unix/pickup?%A5%EA%A5%C0%A5%A4%A5%EC%A5%AF%A5%C8
--
Disk spaceが足らなくなってきた)
2012/1/13追記:
MacbookAirは256GBのSSDだが空きdiskが大分減ってきた。調べるのは、terminal windowから、
du -md 4 / | sort -rn | tee ~/du.log
で一発。man du, man sortなどで調べれば使い方も直ぐに分かる。
ま、perlやpythonのスクリプトにしても良いが。
ゴミ箱、iTunesライブラリと写真が大量に食っていた。ゴミ箱は消去。写真はNASに置いて、古い写真は消すことにする。
ベースがBSD UNIXのMac OS-Xは本当に良い。iOSもunixなので脱獄すれば自由に使える。Androidはベースがlinuxである。これは元々ルートになれるものもある。
いまどきベースのOSが意味不明なのは、MS windowsくらいなものかも。
--
ファイル名を付け替える)
for 文は、do xxx; のように、1行にまとめて書ける。以下では、ファイル名中のPR0をPR10に一気に書き換える処理を1行に書いている。
for i in *.JPG; do j=`echo $i | sed -e 's/PR0/PR10/'`; mv $i $j; done
--
残りは後ほど。。
--
ファイル名を付け替える)
for 文は、do xxx; のように、1行にまとめて書ける。以下では、ファイル名中のPR0をPR10に一気に書き換える処理を1行に書いている。
for i in *.JPG; do j=`echo $i | sed -e 's/PR0/PR10/'`; mv $i $j; done
--
残りは後ほど。。