ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

酒とLinuxの日々コミュのしぇるすくりぷとっ!w

  • mixiチェック
  • このエントリーをはてなブックマークに追加
Windowsのお気に入りを、Sambaサーバでネットワーク上で共有しようというもくろみにはまってしまいました。

えーと、ぼくはお気に入りを、古い「インターネットイエローページ」という本に従ったディレクトリ構造にして使っています。

./インターネット/サーチエンジン
        /プロバイダー


./ホビー/自動車
    /オートバイ

みたいな感じです。


単純に共有フォルダにサブフォルダを作るだけで、LinuxのGUIでやろうが、CUIでやろうが、アクセスするWindows側からやろうがどうやってもできるわけですが、せっかくこんなコミュを作ってるから、シェルスクリプトで作ろうとしたわけです。

まぁそんな難しいものではなく、for文の入れ子とcase文を使ったスクリプトをせっせと書いたのですが(サブフォルダの数が多いので、フォルダ名を書くのが大変でしたが)、動きません。

Bashが、「そんなバイナリなんか実行してやんないよ」とか言ってきます。

えー、これってスクリプト中の日本語の問題?変数に半角数字を混ぜた日本語をがんがん使っているから?

でもよくわかりません。

コマンドで mkdir ./てすと
ってやると、ちゃんとなります。
ところが、スクリプトでそれをやると、「バイナリは実行でけん!」となります。

かなり悩んで時間経過。

ところで、実はこのスクリプト、Windowsのメモ帳で書いたものだったのです。
日本語が多かったもので、viで書くのは面倒と、メモ帳で書いてネットワークでLinux内に置いたもの。
LinuxのLANGがUTF-8で、この文字コードはメモ帳の保存時に選べるからと、それを選んで作ったのでした。

ためしに、Linux上でviを使って簡単なスクリプトを作ると、日本語が入っていても動きます。

それで、fileコマンドで両方のファイルを見てみると、

メモ帳で作った動かないスクリプト:UTF-8 Unicode text
Linux上でviで作ったスクリプト:Bourne shell script text executable
(両方ともパーミッションでの実行権限はつけてあります。わからんついでに、所有者もグループもルートにしたりしていますw)

となってるw
えー?じゃなに?viで書いたやつの文字コードは何なんだよぉ?w

# echo $LANG
ja_JP.UTF-8

ということしかわかりません。
結局、今日は解決しませんでしたw

おそらく、すんごいど素人モードくがっぴでございますw

コメント(3)

♪朝もはよから文字のコードをせっせとせっせと検める♪
(わかる人います?wアラジンですw)

kccというツールを入れてみました。
これは、自動判別機能つき漢字コード変換というもの。
ファイルの文字コードを調べてくれます。

# kcc -c favorites.sh ←判別のみのcオプションでスクリプトを調べる
favorites.sh: data ←文字コードに矛盾があって判別できないという答え

メモ帳はなんという不可解なファイルを作成するですか?w
文字コードとか日本語処理は、本が一冊できあがってしまうような世界で、ど素人が立ち入ってはいけない奥深いところに迷い込んだのではないかしらん?w

こらいかんと思い、Windows機に時折愛用するK2Editerというエディタを入れて、ネットワーク越しにスクリプトを開いて文字コードと改行コードがどうなってるか見てみます。

文字コード:UTF-8(BOM付)
改行コード:CR+LF

一応これは、Windows2000以降のメモ帳でUTF-8保存した時のデフォルトみたいです。
で、どうすれば動くの?w

改行コードはLFのみみたいだけど、文字コードはなんだろう?

ということで、片っ端から変えてみますww

すると、UTF-8Nにしたら、fileコマンドの答えが変わりました。

# file favorites.sh  ←fileコマンドでスクリプトを調べる
favorites.sh: Bourne shell script text executable ←実行可能との答え

ちなみにkccでは判別不能のままです。

# kcc -c favorites.sh  ←kccでスクリプトを調べる
favorites.sh: data  ←やはり分からんと言いよる

なんでも、BOMというのは、そのコードがUnicodeであることを示すためにファイルの先頭に挿入されるByteOrderMarkというもので、普通にUTF-8という場合はBOM付を言い、逆にそれが挿入されてないUTF-8を、UTF-8Nと表記されるそうです。
はぁ、ややこしい。



とりあえず動くようなので実行してみよう。。。


きゃぁぁぁぁ!!!w





(文字コードで実行できない問題は解決しましたが、スクリプトにバグがw)
ふぅ。

for in 文で変数名を間違えて、一つのフォルダに150ほどのサブフォルダを作ってしまいましたw

とりあえず、シェルスクリプト完成♪
(追記)
ネットワーク共有の「お気に入り」フォルダができたので、Windows側でレジストリをいじって、お気に入りとマイドキュメントをネットワークフォルダに変更。

これ、便利なんだけど、ちょっと難がある。

ネットワークフォルダにアクセスできない時、Windowsが勝手にデフォルトに戻しちゃうんだよね。

その対策に、変更したレジストリをファイルに書き出して保存。ダブルクリックで設定を戻せるようにする。

Windowsの「オフラインファイル」を使うと、ネットワークフォルダにアクセスできなくても、Windowsのキャッシュで使えるようにはできるんだけど、ネットワークフォルダが壊れると大変な目に遭うので、これはパス。

共有スペースを提供するサーバを、壊れないサーバにするのが一番基本なんだと思う。
(当たり前だけど)

まぁ、それを考えて、UPSも完全実装したし、機を見てソフトウェアRAIDも実装しようと思っている。
丁度、サーバのRachelには、5インチベイが3つ余っているので、HDDのリムバーブルケースを使ってRAID5を組む予定。

RAID1(ミラーリング)は単純明快で、個人レベルでも普及してるみたいだけど、ディスク容量がもったいない。これは単純に、二つのHDDに同じデータを書き込むというもの。どっちか一つ壊れてもデータは失われない。

RAID5は3台以上のHDDが必要になるけど、ディスク容量の効率がいい。
これは、複数のHDDにデータとそのパリティを分散して書き込む方式。
一つのHDDが壊れても、残りのHDDからデータの再現ができるし、同時に分散して書き込むので速度上昇も期待できるというもの。

これを知った時、疑心暗鬼で「そんなこと本当にできるの?」と思ったもんだが、試しにパリティも含む2進数の計算を紙の上でやってみて、感動した記憶がある。
パリティまで作っていると、どのディスクが駄目になっても本当に復元できるんだよね。



ところで、お気に入りスクリプトの不備に気づいた。
パーミッションの問題。

ルート権限でスクリプトを使ってフォルダを生成するんだけど、そのままではSamba経由で書き込みができない。

chmod -R 777 ./* を追記
このRオプション(その下のフォルダ全部に適用する)って素敵だよね。
これがないと、途方に暮れるw

もし無かったら、それはそれで新しいシェルスクリプトを作る勉強の機会になるのかもだけどw

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

酒とLinuxの日々 更新情報

酒とLinuxの日々のメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング