Author Archive

    はてなブックマーク - ディレクトリ内のファイル容量を調べる方法(CUI)
    このエントリーをはてなブックマークに追加

    Fusic 北岸です。

    もう今年も終わりますね。
    休みの日に近所でバドミントンをしているのですが、
    昨日で今年最後の分が終わってしまいました。
    打ち損じでカツーンなんて音をさせてばかりではありますが、来年も楽しく頑張ります!

    さてさて、今回のテーマは 「CUIでファイルサイズの合計を調べる」 です。
    すごく基本的な内容ではありますが、以前ちょっと気になって調べたのでまとめておきます。

    ファイルサイズを調べるコマンド

    皆さんは、ファイルサイズを調べる時に、どのようなコマンドを使用されていますか?
    私がすぐに思いつくのは、次のコマンドです。

     $ ls -l

    そして、ディレクトリの容量を調べるなら、このコマンドですね。

     $ du

    しかし、この du というコマンド、きちんとファイルサイズを測れません。

    この du は、ブロックサイズを単位としてサイズを計測しています。

    今回用意したシステムは ブロックサイズが4096バイト(=4.0KB) なので、
    例えば次のような結果が得られます。

    sky@ub1110x64:~/contrail$ ls -l ./substance/
    合計 12
    -rw-rw-r-- 1 sky sky 4097 2011-12-26 07:22 ice_grain
    -rw-rw-r-- 1 sky sky 4096 2011-12-26 07:22 moisture
    sky@ub1110x64:~/contrail$ du -ah ./substance/
    4.0K	./substance/moisture
    8.0K	./substance/ice_grain
    16K	./substance/

    たった1バイトしか違わないのに、du コマンドだと 4.0KB も違う事になっていますね。

    どうやってファイルサイズを測るか

    では、どうすればブロックサイズに左右されずに、
    フォルダ内の容量を測れるのでしょうか。

    調べて分かったのは、 find コマンドです。
    一例を示します。

     $ find ./ -printf "%s\n"

    階層的にディレクトリ内ファイルを検索してくれるコマンド find には、
    そのファイルに関する情報を出力してくれるアクションがあります。

    それが 「-printf」 です。

    「 find ./ 」のみだと、カレントディレクトリ配下のディレクトリの内容を出力するだけですが、
    「-printf」を利用する事により、出力内容を変える事が出来ます。

    ここで使用しているフォーマットは次の通りです。
    %s : ファイルサイズのバイト表示
    \n : 改行

    実行結果の一例を示します。

    sky@ub1110x64:~/contrail$ ls -l *
    sky:
    合計 24
    -rw-rw-r-- 1 sky sky 6789 2011-12-26 07:22 high
    -rw-rw-r-- 1 sky sky 1234 2011-12-26 07:22 light
    -rw-rw-r-- 1 sky sky 9999 2011-12-26 07:22 scraper
     
    substance:
    合計 12
    -rw-rw-r-- 1 sky sky 4097 2011-12-26 07:22 ice_grain
    -rw-rw-r-- 1 sky sky 4096 2011-12-26 07:22 moisture
    sky@ub1110x64:~/contrail$ find ./ -printf "%s : %f\n"
    4096 : ./
    4096 : sky
    1234 : light
    6789 : high
    9999 : scraper
    4096 : substance
    4096 : moisture
    4097 : ice_grain

    ※見やすいようにファイル名(%f)も表示しています。

    sky@ub1110x64:~/contrail$ du -ah
    4.0K	./sky/light
    8.0K	./sky/high
    12K	./sky/scraper
    28K	./sky
    4.0K	./substance/moisture
    8.0K	./substance/ice_grain
    16K	./substance
    48K	.

    ちなみに、次のようにディレクトリ指定を省略すれば、
    カレントディレクトリ配下を検索するため、同じ出力が得られます。

     $ find -printf "%s : %f\n"

    現状のままでは、各ファイルやディレクトリのサイズが列挙されただけで、合計の値が得られていません。
    もう一手間加えます。

    というわけで、 awk コマンドを組み合わせたものがこちらです。

    sky@ub1110x64:~/contrail$ find ./ -printf "%s\n" | awk '{ sum += $1; }; END { print sum }'
    38503

    各ファイルサイズについて、{ sum += $1; }; の部分で次々と足し合わされ、
    END { print sum } の部分によって、最後に1回だけ、変数 sum が出力されます。

    いかがでしょうか。
    私にとって、awk コマンドはまだまだ慣れないものではありますが、
    とても応用が効きそうなコマンドだなと思いました。

    物理をやってたあの頃

    研究室を思い出すと、、、やっぱりまだありました、変なもの、不思議なもの。
    前回は片栗粉でしたが、今回は ペットボトル です。

    それは エッキー って呼ばれてました。
    中身は、500ml いっぱいの水と、砂が4分の1程度、ピンが3、4個ほどだったと思います。

    では、何のためのものなのかと言うと 「液状化現象」 を見るためです。
    液状化っていうと、地震の時に水がしみ出してくるアノ現象ですね。

    使い方としては、
    このエッキーをよく振って、静かに置きます。
    この時、ピンは砂に埋もれて見えない状態になっているはずです。

    この状態で、デコピンなどしてエッキーに刺激を与えると、ピンが飛び出してきます。
    これが、地震後の液状化に対応しています。

    ちなみに最近知ったのですが、
    エッキーって、商品名でした。
    どうも、キットとして売られているようです。

    おしまいです。
    ではでは。

    { 2011.11.22 }

    autofs + sshfs の設定

      はてなブックマーク - autofs + sshfs の設定
      このエントリーをはてなブックマークに追加

      初めまして。
      物理系出身で、新人の北岸です。

      ブログ初投稿ですが、よろしくお願いします。

      今回のテーマは 「autofs を使って、sshfs を利用する」 です。

      単純にsshfsを使うより、
      autofsと組み合わせた方が何かと便利かなーって思ったので、
      このテーマで進めたいと思います。

      というのも、毎回 sshfs コマンドを叩くのも煩わしいですし、
      起動時にマウントさせる設定などしてると、
      ネットに繋がっていない環境ではそこでエラーになってしまいます。

      でも、autofs なら大丈夫!
      そんな感じです。

      用意した環境

      Virtualbox 上にLinux を2台
      1. Ubuntu 11.10 64bit Desktop
      2. CentOS 5.7 64bit

      概要

      Ubuntu にて、
      ・公開鍵認証の設定
      ・autofs の設定
      ・sshfs でマウント
      という流れで進めます。

      公開鍵認証の設定

      root ユーザになり、
      秘密鍵と公開鍵のセットを作成するために次のコマンドを実行します。

      root@ub1110x64:~# ssh-keygen

      この時、秘密鍵の場所は、「/root/.ssh/id_rsa.bright」を指定し、パスフレーズは空で設定しました。

      SSH接続の際に、この秘密鍵を読み込むための設定をします。
      ファイル ~/.ssh/config に、次の設定を記述します。

      Host bright
      User root
      HostName 192.168.55.101
      IdentityFile ~/.ssh/id_rsa.bright

      後は、この公開鍵を CentOS に設置するだけです。
      次の手順で設置しました。

      root@ub1110x64:~# scp .ssh/id_rsa.bright.pub root@192.168.55.101:/root/
      root@ub1110x64:~# ssh root@192.168.55.101
      [root@localhost ~]# mkdir .ssh
      [root@localhost ~]# touch ~/.ssh/authorized_keys
      [root@localhost ~]# cat id_rsa.bright.pub >> .ssh/authorized_keys

      これで無事、次のコマンドなどを実行して、
      Ubuntu からパスワード無しでSSH接続が出来るようになりました。

      root@ub1110x64:~# ssh bright

      autofs の設定

      まず次のコマンドで、sshfs と autofs をインストールします。

      root@ub1110x64:~# apt-get install sshfs autofs

      次に、autofs の設定をしていきます。
      これは2つのファイルに、1行ずつ書くだけです。

      まず、ファイル /etc/auto.master の最終行に、次の一行を追加します。
      /home/sky/bright /etc/auto.sshfs --timeout 0 --ghost

      この設定の意味は、
      ディレクトリ /home/sky/bright に、
      ファイル /etc/auto.sshfs の内容に従ってマウントするというものです。

      --timeout 0

      これは、自動切断をする時間のための設定で、
      ゼロを指定しているため、自動でアンマウントしない設定です。

      --ghost

      これは、実際にアクセスするまでマウントしないという設定です。

      最後に、ファイル /etc/auto.sshfs というファイルを作成して、
      blue -fstype=fuse,allow_other :sshfs\#bright\:/
      だけ記述します。

      この設定の意味は、
      ファイル /etc/auto.master に記述されたディレクトリ上の、
      ディレクトリ blue に sshfs でマウントするというものです。

      -fstype=fuse,allow_other

      これは、sshfs の FUSE options で allow_other を指定するという設定です。
      これを加える事で、例えば一般ユーザ sky でも
      マウントしたディレクトリにアクセス出来るようになります。

      autofs の設定はここまでです。

      最後に、次のコマンドで、autofs を再起動するだけです。

      root@ub1110x64:~# service autofs restart

      autofs の設定に関する余談

      1. もし、/root/.ssh/config ファイルの設定をしていなかったら
      設定ファイル /etc/auto.sshfs に関しては、次のように書かないとマウント出来ません。

      blue -fstype=fuse,allow_other,IdentityFile=/root/.ssh/id_rsa.bright :sshfs\#root@192.168.55.101\:/

      2. 1 の条件で、sshfs コマンドでマウントするとしたら
      次の2つのコマンドを実行する必要があります

      root@ub1110x64:~# mkdir -p /home/sky/bright/blue/
      root@ub1110x64:~# sshfs -o allow_other,IdentityFile=~/.ssh/id_rsa.bright /home/sky/bright/blue/ root@192.168.55.101:/

      マウントの確認

      マウントしたポイントは、/home/sky/bright/blue/ です。

      次のコマンドを実行してみると、
      無事にマウントが出来ている事が確認出来ました。

      root@ub1110x64:~# ll /home/sky/bright/blue/
      合計 112
      drwxr-xr-x 1 root root  4096 2011-11-13 03:58 ./
      drwxr-xr-x 3 root root     0 2011-11-13 13:20 ../
      -rw-r--r-- 1 root root     0 2011-11-13 03:57 .autofsck
      -rw-r--r-- 1 root root     0 2011-10-05 14:17 .autorelabel
      drwxr-xr-x 1 root root  4096 2011-10-28 01:00 bin/
       
      *** (略) ***

      試しに、適当なファイルを作成してみたいと思います。
      今回は Ubuntu の一般ユーザ(sky)でやってみます。

      sky@ub1110x64:~$ cat /etc/issue >> ~/bright/blue/sky.txt
      sky@ub1110x64:~$ ll ~/bright/blue/sky.txt
      -rw-r--r-- 1 root root 20 2011-11-13 04:21 /home/sky/bright/blue/sky.txt

      無事に作成できました。

      CentOS にログインしてみても、確かにファイルは存在してました。

      [root@localhost ~]# ll /sky.txt
      -rw-r--r-- 1 root root 20 11月 13 04:21 /sky.txt
      [root@localhost ~]# cat /sky.txt
      Ubuntu 11.10 \n \l

      おわり

      初投稿で、文章を書くのも苦手で、なかなか苦戦しました。
      準備でもケアレスミスの連続で大変でした。。。
      まだまだ未熟ですが、めげずに頑張っていきます!

      ちなみに、自分の開発環境を Windows から Ubuntu に変更したので、
      積極的にこの設定を使っていこうと思います。

      物理をやってたあの頃

      豆知識ってわけではありませんが、
      物理をやってたあの頃の割とどうでもいい事をつらつらと。。。

      研究室に、片栗粉がありました。
      しかも、料理のためではありません。
      水と混ぜる、それだけのためです。
      それ以外の使い方を見た事がありません!

      なぜ混ぜるのか、
      それは、ダイラタント流体を作るためです。

      もしかすると、テレビなどで、
      白い液体の上を走る人を見たことがあるかと思います。
      アレです。

      このダイラタント流体は、
      圧力を加えると固体のように振る舞い、
      そうでないと液体のような振る舞いをするというものです。

      実際に、水と片栗粉をスプーンでかき混ぜて、
      そのスプーンでその白い液体を叩くと、
      固体のような手応えを受けます。
      一方で、ゆっくりスプーンをあてると、
      液体のように飲み込まれていきます。

      何とも不思議なやつなんです~

      今度こそお終いです。
      ではでは。