-
/dev/null: 許可がありません
Posted on 1月 19th, 2009 はおりん No comments/dev/null
業務で利用しているLinuxサーバーにログインしたとき、こんなメッセージが表示された。
bash: /dev/null: 許可がありません
いやいやいやいやいや、おかしいだろ。/dev/nullというのは、Linuxのデバイスファイルで、なにもしない、何も出力しない、何も入力しない、本当に何もしないデバイスをエミュレート(?)してくれているものだ。だれでも書きこめるし、誰でも読み出せるが、その内容は常に空っぽ。しかし、開発環境ではこのデバイスが通常ファイルになっており、しかもrootしか書きこみできなくなっていた。誰が上書いたんだ・・・
デバイスファイルを作り直そう
デバイスファイルを作り直すにはmknodを使用する。実際に/dev/nullを作り直すには、スーパーユーザ(普通はroot)で以下のコマンドを実行する。
mknod -m 666 /dev/null c 1 3
「-m 666」とは、モードの指定で、chmodの指定と同じだ。この場合は「誰でも読み書きできる」という意味になる。
「/dev/null」がデバイスファイルのパス。
「c」はキャラクタデバイスのことで、文字列やバイナリデータを入出力できるデバイス、という点でブロックデバイスと同じだが、こちらはバッファせずに入出力する。
「1 3」はデバイス番号。これについては僕も良く知らないが、デバイスファイルの種類によって決められている。/dev/nullの場合は「1 3」。逆を言えば、/dev/nullと同じ機能を持ったデバイスファイルを別の名前で作ることも出来る。デバイス番号
デバイス番号は「/usr/src/linux/Documentation/devices.txt」に書いてあるらしい、が、このファイルはたぶんカーネルのソースをダウンロードしてこないと入ってないんじゃないだろうか。カーネル2.2版だが、以下のURLで日本語訳が閲覧できる。
http://www.linux.or.jp/JF/JFdocs/kernel-docs-2.2/devices.txt.html
ありがたいことである。昔は良く使った、らしい
まだOSがPnP(Plug and Play)に対応していなかったころ、デバイスにIRQなどのリソースを割り当てたら、このコマンドでデバイスファイルを作り、このデバイスファイルを介してハードウェアを制御した、と聞いている。その頃僕はまだ小学生で、Linuxなど触ったことが無かったため、さすがにその時代のことはわからない。デバイスファイルのことを突き詰めていくとカーネルにぶち当たるのであまり調べていない。が、Linuxで食っていこうという人は、必須の知識であろう。もしかしたらLPICを受験した人はみんな持ってる知識なのかな?
未分類コメントを書く