• ベストアンサー

特殊ファイル(special file)の扱い方

岩波書店の「オペレーティングシステム」でOSの勉強をしているのですが、 「UNIXでは/devの下に入出力装置の名前が登録されている。 入出力装置にアクセスするためのこれらのファイルを UNIXでは特殊ファイルと呼んでいる。 特殊ファイルは、ファイルをパラメータとして指定できるコマンド および多くのシステムコールで指定することが出来る。・・」 と本にあります。 プリンタでの例が分かり易いかなと思い、特殊ファイルへのアクセスを 試そうとしましたが、使用しているプリンタが学内のネットワークに 繋がったプリンタであるためか、/devの下に名前がありませんでした。 (プリントアウトは普通に出来ます。) 初歩的な質問で恐縮ですが、特殊ファイル名を指定してアクセスする コマンドの例にはどんなものがあるのか、 簡単な物でいいので教えていただけないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

こんばんは いちばんよくつかうのは mount じゃないでしょうか? mount -t fat -o users,rw… /dev/sda1 /mnt/hoge  とか。 この場合は/dev/{h|s}d{a-z}[*num*] のブロックデバイスのかわりに uuidで指定することもあるかもですが(特にfstabで)。(「/dev/」以降の表現のし方間違ってるかもしれませんが…) 次に良く使うのは シェルスクリプトで hogecomand param1 param2 > /dev/null とかで出力を捨てるときかなぁ grepで/dev/nullというのは#1さんのとこで既出だし。 あ, CFcardを dd if=/dev/sda of=/home/hogehoge とやって中身をコピーしたあと dd if=/dev/zero of=/dev/sda1  でまっさらにするなんてのも 私は常用してます 要は、それぞれのスペシャルファイルによって用途がちがうのでおのずと使うコマンドも限定されるんじゃないかと思います。/dev/console とか /dev/mice とか /dev/mixer とかはコマンドで使うよりシステムコールで良く使うだろうし、/dev/ttyS? や /dev/lp?はアプリケーションの設定の方に良く顔出すんじゃないでしょうか。 /dev配下のデバイスファイルには ブロックデバイスとキャラクタデバイスがあります(raw deviceもあるらしいけどこれはよくわかんないです)。違いはデータの流れにバッファが必要か否か、だったと思います。バッファに貯めてから塊(=ブロック)で送るのがブロックデバイス、貯めずに逐一流すのがキャラクタデバイス) それぞれのファイルは単一のデバイスの事ですが、逆に単一のデバイスがブロックデバイスファイルとキャラクタデバイスファイル問わず複数のファイルとして置かれていることも多いです。(例えば /dev/hdc = /dev/cdrom :これはsymlink) 既出事項も多いですが御参考程度になれば幸いです

jinna1515
質問者

お礼

回答ありがとうございます。 おっしゃる通り、スペシャルファイルを使う時は 用途に合ったコマンドでなければいけないようですね。 「特殊ファイルは、ファイルをパラメータとして指定できるコマンド および多くのシステムコールで指定することが出来る。」 という記述で勘違いしていたかもしれません・・。 知らない言葉が出て来たりで勉強不足が分かってしまいましたので、 もう少しこの辺りの勉強をしてみることにします。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

ディスクの管理をするコマンドは, だいたい /dev/ 以下のスペシャルファイルを使いますね. それ以外だと, そもそも使うスペシャルファイルが少ないんじゃないかな. /dev/null, /dev/zero, /dev/tty くらい? grep で複数のファイルから検索するときに /dev/null は使うなぁ.

jinna1515
質問者

お礼

回答ありがとうございます。 なるほど、ユーザがコマンドとして指定する スペシャルファイルは少ないのかもしれませんね。 勉強になります。 grepで/dev/null は使ったことなかったので ちょっとやってみたいと思います。

関連するQ&A

  • ログファイルが溜まってしまった。

    友人に構成してもらったsolarisのファイヤーウオールサーバーを使用しています。 unix初心者です。 proxyのアクセスログが溜まったので、クリアしたいのですが、dev/nullの使い方がいまいち分かりません。 小さいコマンドリファレンスにも出ていないし、 ネット見てもよく分からないので、どなたか 教えていただけますか? よろしくおねがいします。

  • 指定した日付に更新されたファイル

    指定した日付に、更新されたファイルやフォルダを検索するUNIXコマンドを教えてください

  • C言語でファイルの中身をソートするコマンド

    unixのsortのようなコマンドはC言語にあるのでしょうか。 配列のソートではなくてファイルに対してのコマンドです。 sortをsystem()で使用すれば良いのでしょうが、C言語のコマンドにあると聞きました。おそらくunix関連のC言語のコマンドだと思うのですが。

  • Perlでファイルを移動させる命令はあるのでしょうか?

    Perlでファイルを移動させる命令はあるのでしょうか? systemなど使わずに、UNIXのmvコマンドのような物です。

    • ベストアンサー
    • Perl
  • LVM論理ボリュームのフォーマットでエラー

    現在、LVMのスナップショット機能を利用してバックアップをとる試みを しておりますが、論理ボリュームのファイルシステム設定のコマンドで エラーが出て困っています。 HDを増設し、論理ボリュームを作成後、ファイルシステムフォーマットでエラ ーが発生します。コマンドmkfs のパラメータの書き方を教えてください。 ファイルシステム「LinuxLVMを指定するには どのようにコマンドを書けばよろしいのでしょうか。 1.サーバー環境  OS:CentOS5  物理ボリューム HD:80GB  /dev/sda1 1GB  ext2           /dev/sda2 73GB Linux LVM    320GB 追加したHD 物理ボリューム  /dev/sdb1 320GB Linux LVM  LVM ボリュームグループ:VolGroop00   論理ボリューム LogVol00 73GB ファイルシステム Linux LVM           LogVol01 1GB ファイルシステム    追加したLV  LogVol02 160GB 2.手順 ・増設HDをfdiskで設定しました。 /dev/sdb1 320GB ファイルシステム Linux LVM ・VolGroup00に追加しました。 ・論理ボリューム LogVol02 を作成しました。 ・mkfsコマンドで、ファイルシステムLinuxLVMの指定方法がわからず  エラーとなります。 3.エラー内容と教えていただきたいこと ・エラー内容 # mkfs -t LVM /dev/VolGroup00/LogVol02 mkfs.LVM: そのようなファイルやディレクトリはありません # mkfs -t reiserfs /dev/VolGroup00/LogVol02 mkfs.reiserfs: そのようなファイルやディレクトリはありません ・教えていただきたいこと コマンドmkfs のパラメータの書き方を教えてください。 ファイルシステム「LinuxLVMを指定するには どのようにコマンドを書けばよろしいのでしょうか。

  • VBでUNIX上のテキスト・ファイルを読む方法は?

    UNIX上のテキスト・ファイルを指定された条件でセレクトして PC側のAccessファイルに書きこみたいのですが, VBプログラムから直接UNIX上のテキスト・ファイルを読む方法って あるのでしょうか? どなたか,コードの書き方などご存知でしたら教えてください。

  • ファイル/bin/catへのアクセス

    オペレーティングシステムに関する話です。 UNIXの木構造のファイルシステムにおいて、 ファイル/bin/catのデータブロックへのアクセスはファイルシステムの内部では具体的にどの様に行われるか、分かる方教えて頂けませんか?

  • ubutun端末でwindowsファイルを読む

    windows10のみで使っていたPCのHDD(2TB)にパーティションを作ってubutan18.05をインストールしました。 やりたいことは、ubutunでフリーソフトのgfortranをインストールし(これはできた。terminalで実行する)、gfortranからwindows10のファイルを読むことなのですが、 そのためにまず、terminalからlsコマンドなどでこれらのファイルにどうすればアクセスできるかを調べています。 ubutanのdashにあるファイルアイコン起動後の”他の場所”には   ・コンピュータ 324GB   ・windows10  1TB     /dev/sda4   ・data     524GB  /dev/sda5   ・ボリューム        /dev/sdb1 があります。 このファイル画面の操作から、dataやwindows10内のファイルをホームのworkフォルダにコピーしたあと、ターミナル画面でこれらのファイルをgeditで参照することができています。  例: gedit work/test.txt このとき、コピーすることなしにlsなどで参照するにはどうすればよいでしょうか。 ファイルアイコン(windowsのexploreのようなものと思っています)で操作できるので、terminalのls等で操作できてもよさそうに思うのです(間違っているかも知れません) sambaでファイル共有をすればできそうに思いますが、そのためにはwindowsも立ち上がっていなければならないと思いますので(自分の知識では)、今回の場合ubutunとwindows10を同時に立ち上げることはできません(いずれかしかブートできない) あるいは、mount操作(mntコマンド?)で上記のパーティションをマウントすればよいかなと思ったりしましたが、具体的なコマンド操作(とくにパス指定)がよくわかりません。 gfortranはこれまでwindows10で実行していましたが、ある2つの理由でlinuxのgfortranで実行させたいのです。大昔linuxはほんの少し触ったことがあります。 どなたかご教授をお願いできないでしょうか。

  • fortranのファイル入出力のopen文

    fortranのファイル入出力のopen文で、パスを指定せずファイル名を指定すると、EXEのあるフォルダにそのファイルが作られますが、次の例は、サブフォルダOUTをあらかじめEXEのあるフォルダに作っておき、そこに、計算結果を判断してファイル名をvmax,timeと指定して出力した例です。この場合、サブフォルダOUTも、計算結果に応じてプログラム内で名前を指定したいのですが、できるのでしょうか。 例: open (10,file='./out/vmax.csv') open (11,file='./out/time.csv')

  • UNIXで日付を指定してファイルを移動する方法

    一定の時期よりも古いファイルをbackupフォルダに移動したいのですが、UNIXでmvコマンドで日付を条件に指定することってできますでしょうか? コマンド一発でいかなかれば、簡単なシェルを書こうと思っています。 ご存知の方がいらっしゃいましたら、教えてください。