[ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


Debian リファレンス
第 4 章 - Debian チュートリアル


本章は 本当の初心者に Debian ワールドへの基本的なオリエンテーションを供給 します。しばらく Unix ライクなシステムを使っていたならば、ここで説明する ことは多分ほとんど知っているでしょう。常識の確認としてこれを使ってください。


4.1 始め方

PC に Debian システムをインストールした後、有用ないくつかのことを 学ぶ必要があります。素早い説明をします。


4.1.1 root としてシェルにログインする

システムのリブート後、パッケージの最初の選択により、グラフィカルな ログインスクリーン又は文字ベースのログインスクリーンが表れます。 単純化のため、グラフィカルなログインスクリーンが表れた場合、 キャラクタベースのログインスクリーンを表示させるために Ctrl-Alt-F1 を押してください。 [3]

あなたのホスト名が foo と仮定すると、ログインプロンプトは 次のようになります。

     foo login:

root とタイプし、Enter キーを押してインストール手順の間に 選んだパスワードをタイプしてください。Debian システムでは、 Unix の伝統に従い、パスワードは大文字と小文字が区別されます。 ログインに成功すると、システムは歓迎メッセージを表示し、root コマンド プロンプトを表示してあなたの入力を待ちます。 [4]

     foo login: root
     Password: 
     Last login: Sun Oct 26 19:04:09 2003 on tty3
     Linux foo 2.4.22-1-686 #6 Sat Oct 4 14:09:08 EST 2003 i686 GNU/Linux
     
     Most of the programs included with the Debian GNU/Linux system are
     freely redistributable; the exact distribution terms for each program
     are described in the individual files in /usr/share/doc/*/copyright
     
     Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
     permitted by applicable law.
     
     root@foo:root#

あなたは既にこの root コマンドプロンプトからシステム管理を行う準備が できています。この root アカウントは、スーパーユーザや特権ユーザとも 呼ばれています。このアカウントからは、次のようなことができます。

パスワードを共有することにより root アカウントへのアクセスを 共有することは非常にまずい考えです。sudo(8) のようなプログラムを使って管理者権限を共有するのが良い考えです。

管理行動を行おうとする場合でも、まず自分の非特権者アカウントでログイン するのは、良い Unix 的習慣であると考えられていることに注意してください。 必要な際に制限された root 権限を得るために、sudo, super, や su -c コマンドを使いましょう。 sudo を使ってより安全に作業をする, 第 9.2.4 節 をご覧ください。 [5]


4.1.2 最小限の初心者用環境をセットアップ

コンピュータシステムを学ぶことは新しい外国語を学ぶことに似ていると 考えます。チュートリアルブックは有用ですが、ヘルパーツールを用いて 実際に学ぶことが必要です。こういう背景から、mc, vim, lynx, doc-linux-text, そして debian-policy のようないくつかの追加パッケージを インストールするのは良い考えです。 [6]

     # apt-get update
      ...
     # apt-get install mc vim lynx doc-linux-text debian-policy 
      ...

これらのパッケージを既にインストールしている場合、何もインストール しなくても良いです。


4.1.3 ユーザアカウントを追加

インストール中に、通常 root アカウントへのメールを受け取る非特権ユーザ アカウントを作成します。 [7] この特別なユーザアカウントを以降の訓練用にも使いたくないならば、 他の新ユーザアカウントを作成すべきです。

新しいユーザ名を penguin とすると、次のように タイプするとアカウントが作成されます。

     root@foo:root# adduser penguin
     ... 質問全てに答える

[8] 先に進む前に、いくつかのことをまず学びましょう。


4.1.4 仮想コンソールを切替える

Debian システムには、6 個の独立した仮想端末が使えます。すなわち、 PC の VGA キャラクタコンソールスクリーンを 6 個の切替え可能な VT100 端末として使えるということです。スクリーンの切替えは左側の Alt キー と F1–F6 キーを同時に押すことにより行えます。仮想ターミナル それぞれに独立したアカウントでログインすることができます。 マルチユーザ環境は偉大な Unix の機能であり、非常に中毒性があります。

X Window System を起動中のシステムにおいて Alt-F7 を間違ってタイプし、 コンソールスクリーンがグラフィカルなスクリーンを表示していた場合、 Ctrl-Alt-F1 を押すことによりキャラクタコンソールへのアクセスを回復します。 この現象に慣れるため、違うコンソールに移動して元に戻ってみてください。


4.1.5 シャットダウンのやりかた

ファイル操作がメモリへのキャッシュにかかわる他の現代的な OS と同様に、 Debian システムは電源を OFF にする前にファイルの完全性を維持するため、 適切なシャットダウン手順を取る必要があります。 システムをシャットダウンするためには、 root コマンドプロンプトから 次に示すコマンドを実行してください。

     # shutdown -h now

これは通常のマルチユーザモード用です。シングルユーザモードの場合は、 root コマンドプロンプトから次のコマンドを実行してください。

     # poweroff -i -f

これの代わりに、Ctrl-Alt-Delete を押してシャットダウンできるかもしれません。 [9]

システムが "System halted" と表示するまで待ち、そして電源を OFF に しましょう。BIOS と Linux により APM 又は ACPI の機能が有効化された場合、 システムは何もせずに電源を OFF にします。詳細は 大容量メモリおよび自動電源 OFF, 第 3.8.4 節 を ご覧ください。


4.1.6 プレイ時間

ついに Debian システムを非特権ユーザアカウント penguin を使ってできるだけリスクを負わずに楽しむ準備ができました。 [10]

penguin にログインしましょう。まだ root シェルプロンプト にいるなら、Ctrl-D をタイプしましょう。 [11] こうして root シェルでの行動を止めるために root コマンドプロンプトから 出て、ログインプロンプトに戻ります。新しく作ったユーザ名 penguin と対応したパスワードを入力しましょう。 [12] するとこのようなコマンドプロンプトが表示されるでしょう。

     penguin@foo:penguin$

ここから、単純化のために、シンプルにしたコマンドプロンプトの例を下に挙げます。

まず簡単な方法 Midnight Commander (MC), 第 4.2 節 を使って Debian システムを学び、後で 適切な方法 (Unix ライクな作業環境, 第 4.3 節) を用いて学ぶことにします。


4.2 Midnight Commander (MC)

Midnight Commander (MC) は Linux コンソールや他の端末環境のための GNU 製 "スイス軍ナイフ" です。初心者にメニュドリブンなコンソール経験を与え、 標準的な Unix コマンドを習うよりもより簡単です。

Debian システムを探検するためにこのコマンドを使いましょう。これは 学習するための最良の方法です。カーソルキーとエンターキーを使うだけで いくつかの主要な場所を探検してください。


4.2.1 強化型 MC

終了時に作業ディレクトリを MC に変更させるためには、~/.bashrc (又は .bashrc から呼ばれる /etc/bash.bashrc) をマニュアルページ mc(1) の中の -P オプションの所に記述されているように修正する必要があります。 [13]


4.2.2 MC の開始

     $ mc

MC はメニュを通じて、最小限のユーザの苦労しか要求せずに全てのファイル操作を 注意深く行います。ヘルプ表示を出すには、ただ F1 を押すだけす。 カーソルキーとファンクションキーの操作だけで MC を楽しめます。 [14]


4.2.3 MC でのファイル操作

MC の標準ではファイルリストを含む 2 つのディレクトリパネルがあります。 他の役立つモードとして、右側のウィンドウにファイルアクセス権情報などを表示する "information" をセットするモードがあります。 次にいくつかの不可欠なキーストロークを示します。gpm デーモン を起動させると、マウスも使えます。(MC でのカットアンドペーストの通常の 挙動を回復するためには、shift キーを押してください。)


4.2.4 MC のコマンドライントリック


4.2.5 MC 内のエディタ

MC の内部エディタは興味深いカットアンドペースト機構を持ちます。 F3 キーを押すと、選択範囲の開始としてマークし、次に F3 を押すと、 選択範囲の終了としてマークし、選択範囲を強調します。そして カーソルを動かすことができます。F6 を押すと、選択範囲はカーソルの位置 に移動します。F5 を押すと、選択範囲はコピーされ、カーソルの位置に 挿入されます。F2 を押すとファイルをセーブします。F10 を押すと選択範囲 はなくなります。ほとんどのカーソルキーは直感的に働きます。

このエディタはファイル上で直接起動できます。

     $ mc -e filename_to_edit
     $ mcedit filename_to_edit

これはマルチモードエディタではありませんが、同じ効果を発揮させるため、 複数の Linux コンソール上で使用できます。ウィンドウ間のコピーを行うには、 Alt-Fn キーを押して仮想コンソールを切替えて、ファイルの一部を 他のファイルに動かすために "File->Insert file" や "File->Copy to file" を用います。

この内部エディタは他の外部エディタと置き換えが可能です。

また、多くのプログラムは使用するエディタを決定するために環境変数 EDITORVISUAL を使用します。 vim が不快な場合、~/.bashrc に 次に示す行を追加してエディタを mcedit にセットします。

     ...
     export EDITOR=mcedit
     export VISUAL=mcedit
     ...

可能ならばこれらを vim にセットすることをお薦めします。 vim コマンドに慣れることは正しいことです。なぜならば、 Vi エディタは常に Linux/Unix 世界に存在するからです。 [15]


4.2.6 MC 内のビューア

非常に小さなビューアです。文書内の単語を検索するための素晴らしいツールです。 /usr/share/doc ディレクトリ内のファイルに対していつもこれを 使います。これは 大量の Linux 情報をブラウズするための最速の方法です。 このビューアはこのように直接起動できます。

     $ mc -v filename_to_view

4.2.7 MC の自動起動機能

ファイルの上で Enter を押すと、適切なプログラムがファイルの内容を操作 します。これは非常に便利な MC の機能です。

     実行ファイル:コマンドを実行
     man, html ファイル:ビューアソフトに内容をパイプする
     tar.gz, deb ファイル:  サブディレクトリであるかのように内容を表示

これらのビューアや仮想ファイルの機能を有効にするため、閲覧可能なファイルには 実行権が設定されていなくてはなりません。chmod コマンドを使うか、 MC のファイルメニュ経由で状態を変更してください。


4.2.8 MC の FTP 仮想ファイルシステム

MC は FTP を用いた Internet 越しのファイルアクセスに使えます。 F9 を押してメニュに行き、`p' を押して FTP 仮想ファイルシステムを有効に します。username:passwd@hostname.domainname の形式で URL を 入力すると、それがローカルにあるかのようにリモートディレクトリを取得 します。

http.us.debian.org/debian を URL として試し、Debian ファイルアーカイブの 閲覧をしてみてください。Debian アーカイブがどのように構成されているか については Debian アーカイブ, 第 2.1 節 をご覧ください。


4.3 Unix ライクな作業環境

mc はほとんど全てのことを可能にしますが、シェルプロンプトから 実行されるコマンドラインツールの使用方法について学び、 Unix ライクな作業環境に親しむのは非常に重要なことです。 [16]


4.3.1 特別なキーストローク

Unix ライクな環境では、特別な意味を持ついくつかのキーストロークがあります。 [17]

標準のシェルである bash には対話的な利用を手助けする 履歴編集機能とタブ補完機能があります。

覚えておく価値のある他の重要なキーストロークを挙げます。

ここで、Linux キャラクタコンソール上でマウスを使うためには、gpm をデーモンとして起動する必要があります。 [19] マウスの設定, 第 3.3 節 参照。


4.3.2 基本的な Unix コマンド

基本的な Unix コマンドを学びましょう。 [20] 非特権ユーザアカウント penguin から次に挙げる コマンドを全て試してみてください。

訓練として、上記のコマンドを用いてディレクトリを横断し、システムの中を のぞきこんでみてください。コンソールのコマンドに関して質問がある場合は、 必ずマニュアルページを読んでみてください。例えば、これらのコマンドは 良い開始点でしょう。

     $ man man
     $ man bash
     $ man ls

また、vim を始め、F1 キーを押す良い時期でしょう。 少なくとも最初の 35 行を読むべきです。そしてカーソルを |tutor| まで動かし、Ctrl-] を押してオンラインコースを受けましょう。 エディタについてより詳しく学ぶには、エディタ, 第 11 章 をご覧ください。

GNU や BSD 由来の多くの Unix コマンドは次のような手順 (又は ある場合には引数無し) を行えば主要なヘルプ情報を表示できます。

     $ commandname --help
     $ commandname -h

自習のために、 Debian tips, 第 8 章 も例として試してみてください。


4.3.3 コマンドの実行

ついに Debian システムの使用方法を幾らか感じとれました。 Debian システムでのコマンド実行機構について深く見ていきましょう。 [27]


4.3.4 シンプルなコマンド

シンプルなコマンドは、次の順序となります。

  • 変数の割り当て (任意)

  • コマンド名

  • 引数 (任意)

  • リダイレクト (任意: >, >>, <, <<, など)

  • 制御演算子 (任意: &&, ||, <newline>, ;, &, (, ))

  • 引用や置換を持つより複雑なコマンドについては、コマンドライン処理, 第 13.2.6 節 参照。


    4.3.5 コマンド実行と環境変数

    典型的なコマンドの実行は次のようなシェル行シーケンスを使用します。 [28]

         $ date
         Sun Oct 26 08:17:20 CET 2003
         $ LC_ALL=fr_FR date
         dim oct 26 08:17:39 CET 2003
    

    ここで、プログラム date はフォアグランドジョブで実行されています。 環境変数 LC_ALL は次のようになっています。

    ほとんどのコマンドの実行は通常前の環境変数の定義を使用しません。 上の例では、次のように実行することもできます。

         $ LC_ALL=fr_FR
         $ date
         dim oct 26 08:17:39 CET 2003
    

    ここで見たように、コマンドの出力は環境変数により影響され、フランス語の 出力が行われました。環境変数をサブプロセスに継承されるようにしたい (すなわち、シェルスクリプトを呼ぶ時) 場合は、代わりに次のように "export" する必要があります。

         $ export LC_ALL
    

    4.3.6 コマンド検索パス

    シェル上でコマンドをタイプした場合、シェルはコマンドを PATH 環境変数内にリストされたディレクトリのリストから検索します。PATH 環境変数の値は、シェルの検索パスとも呼ばれます。

    標準の Debian インストールでは、ユーザアカウントの PATH 環境変数 には /sbin/ が含まれないかもしれません。それゆえ、 /sbin/ にある ifconfig のようなコマンドを 実行したい場合は、PATH 環境変数を、このディレクトリを含むように 変更する必要があります。PATH 環境変数は通常初期化ファイル ~/.bash_profile に含まれます。Bash 設定, 第 3.2 節 を ご覧ください。


    4.3.7 コマンドラインオプション

    いくつかのコマンドは引数を取ります。- 又は -- で始まる 引数はオプションと呼ばれ、コマンドの挙動を制御します。

         $ date
         Mon Oct 27 23:02:09 CET 2003
         $ date -R
         Mon, 27 Oct 2003 23:02:40 +0100
    

    ここでコマンドライン引数 -Rdate コマンドが RFC-2822 互換のデータ文字列を出力するように挙動を変更させます。


    4.3.8 シェルのワイルドカード

    処理したいファイル名を全てタイプせずにファイルをコマンド処理したいことが よくあります。シェルの ワイルドカード を用いた ファイル名のパターン展開はこのニーズを促進します。

    例えば、次の例を試してみて、自分で考えてみましょう。

         $ mkdir junk; cd junk; touch 1.txt 2.txt 3.c 4.h .5.txt
         $ echo *.txt
         1.txt 2.txt
         $ echo *
         1.txt 2.txt 3.c 4.h
         $ echo *.[hc]
         3.c 4.h
         $ echo .*
         . .. .5.txt
         $ echo .[^.]*
         .5.txt
         $ echo [^1-3]*
         4.h
         $ cd ..; rm -rf junk
    

    4.3.9 コマンドの戻り値

    コマンドは戻り値として終了ステータスを返します。

    この戻り値は実行後すぐに $? シェル変数によりアクセス できます。

         $ [ 1 = 1 ] ; echo $?
         0
         $ [ 1 = 2 ] ; echo $?
         1
    

    戻り値はシェルのために論理的な観点で使用される場合、成功 は論理的に として扱われることに注意してください。 これは 正常終了ゼロ の値を持つため、 いくらか非直感的です。

    シェルの条件文, 第 13.2.5 節 をご覧ください。


    4.3.10 典型的なコマンドシーケンス

    次に挙げるシェルコマンドのイディオムを覚えてみましょう。 これらのイディオムを読んだ後に、シェルパラメータ, 第 13.2.3 節, シェルリダイレクト, 第 13.2.4 節, シェルの条件文, 第 13.2.5 節, そして コマンドライン処理, 第 13.2.6 節 をご覧ください。


    4.3.10.1 command &

    commandバックグラウンド で サブシェルにて実行されます。バックグラウンドジョブにより、 複数のプログラムを単独のシェルで実行することが可能となります。

    バックグラウンドプロセスの管理は次に挙げるシェル組込みコマンドに関連します。 jobs, fg, bg, および killbash(1) マニュアルページの "SIGNALS"、 "JOB CONTROLS" および "SHELL BUILTIN COMMANDS" の章を 読んでみてください。 [29]


    4.3.10.2 command1 | command2

    command1 の標準出力は command2 の標準入力 に導かれます。両方のコマンドは 同時に動くかも しれません。これは パイプライン と呼ばれます。


    4.3.10.3 command1 ; command2

    command1command2連続して 実行されます。


    4.3.10.4 command1 && command2

    command1 がまず実行されます。コマンドの実行が 正常終了した場合は、command2連続して 実行されます。command1command2両方 が正常終了した場合に正常終了を返します。


    4.3.10.5 command1 || command2

    command1 がまず実行されます。失敗した場合、 command2連続して 実行されます。 command1 又は command2 のどちらかが正常終了した場合に正常終了を返します。


    4.3.10.6 command > foo

    command の標準出力をファイル foo にリダイレクト (上書き) します。


    4.3.10.7 command >> foo

    command の標準出力をファイル foo にリダイレクト (追記) します。


    4.3.10.8 command > foo 2>&1

    command の標準出力と標準エラー出力の両方をファイル foo にリダイレクトします。


    4.3.10.9 command < foo

    command の標準入力をファイル foo に リダイレクトします。試してみましょう。

         $ </etc/motd pager
          ... (グリーティングメッセージを表示)
         $ pager </etc/motd
          ... (グリーティングメッセージを表示)
         $ pager /etc/motd
          ... (グリーティングメッセージを表示)
         $ cat /etc/motd | pager
          ... (グリーティングメッセージを表示)
    

    この 4 つの構文は同じ出力を表示しますが、最後の例は特別な cat コマンドを起動し、無駄なリソースを消費しています。


    4.3.11 コマンドエイリアス

    良く使うコマンドにエイリアスを設定できます。例えば、

         $ alias la='ls -la'
    

    ここで、la は 1 列形式で全ファイルをリストする ls -la の短縮形として働きます。

    type コマンドを使って、正確なパス又はコマンドの正体を 識別できます。例えば、

         $ type ls
         ls is hashed /bin/ls)
         $ type la
         la is aliased to `ls -la'
         $ type echo
         echo is a shell builtin
         $ type file
         file is /usr/bin/file
    

    ここで ls は最近検索されましたが、file はそうではないので、ls は "ハッシュされた" といいます。 すなわち、シェルは ls コマンドの場所への高速なアクセス のために、内部記録を取っています。


    4.4 Unix ライクなテキスト処理

    頻繁に Unix ライクシステムで使用される標準的なテキスト処理ツールが いくつかあります。

    いくつかのスクリプト例は 正規表現による置換, 第 8.6.13 節, コマンドをパイプするためのわずかなスクリプト, 第 8.6.18 節, そして Perl ショートスクリプトの狂気, 第 8.6.20 節 をご覧ください。


    4.4.1 正規表現

    正規表現は多くのテキスト処理ツールで使われています。シェルのワイルドカード (シェルのワイルドカード, 第 4.3.8 節 参照) に似ていますが、より複雑かつパワフルです。

    正規表現はパターンマッチを記述し、テキスト文字と メタ文字 からなります。メタ文字は単なる特別な意味を持つ文字です。BRE と ERE の 2つの主要な形式がありますが、どちらを使うかは Unix ライクなテキスト処理, 第 4.4 節 に記述されているテキストツールの種類に依ります。

    ERE の場合、メタ文字 には "\ . [ ] ^ $ * + ? ( ) { } |" が含まれます。 正規表現は次の意味を持ちます。

    BRE では、メタ文字 "+ ? ( ) { } |" はその特別な意味を失っています。その代わり、バックスラッシュされた "\+ \? \( \) \{ \} \|" を使います。それゆえ、grouping construct (r1|r2) は BRE では \(r1|r2\) の ように引用符で囲む必要があります。emacs は、基本的に BRE を使いますが、"+ ?" を メタ文字 として 扱います。それゆえ、引用符で囲む必要はありません。grouping construct がどのように使われるかについては 置換表現, 第 4.4.2 節 をご覧ください。

    例えば、grep は正規表現を用いてテキスト検索を行うために使えます。

         $ egrep 'GNU.*LICENSE|Yoyodyne' /usr/share/common-licenses/GPL
                             GNU GENERAL PUBLIC LICENSE
                             GNU GENERAL PUBLIC LICENSE
           Yoyodyne, Inc., hereby disclaims all copyright interest in the program
    

    4.4.2 置換表現

    置換表現の場合、次の文字には特別な意味があります。

    Perl の置換文字列の場合、$n\n の代わりに用いられ、& は 特別な意味を持ちません。

    例を示します。

         $ echo zzz1abc2efg3hij4 | \
           sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/=&=/'
         zzz=1abc2efg3hij4=
         $ echo zzz1abc2efg3hij4 | \
           sed -e 's/\(1[a-z]*\)[0-9]*\(.*\)$/\2===\1/'
         zzzefg3hij4===1abc
         $ echo zzz1abc2efg3hij4 | \
           perl -pe 's/(1[a-z]*)[0-9]*(.*)$/$2===$1/'
         zzzefg3hij4===1abc
         $ echo zzz1abc2efg3hij4 | \
           perl -pe 's/(1[a-z]*)[0-9]*(.*)$/=&=/'
         zzz=&=
    

    ここで、括弧で囲まれた 正規表現と、マッチした文字列が 異なったツールでテキスト置換処理にどのように使われるかに特別な注意を 払ってください。

    これらの正規表現はエディタ内でカーソルの動きとテキスト置換アクションの両方 に対して使えます。

    これらのコマンドを習うために、関連するマニュアルページを全て読んでください。


    4.5 Unix ライクなファイルシステム

    GNU/Linux や他の Unix ライク OS システムでは、ファイルディレクトリ に組織化されています。 [30] 全ての ファイルディレクトリ/ を根とする 1 つの大きなツリー、すなわちファイル階層に配置 されています。

    これらのファイルは複数のデバイスに展開することができます。 mount(8) コマンドは あるデバイス上にあるファイルシステムを大きなファイルツリーに所属させます。 逆に、umount(8) コマンドは再び分離させます。


    4.5.1 Unix ファイルの基礎

    次に挙げることは基礎知識です。

    ファイル階層について詳細に学ぶ最も良い方法は、 Filesystem Hierarchy Standard に記述されています。 手始めとして次の事実を覚えるべきです。


    4.5.2 Debian でのファイルシステムの概念

    Unix の伝統に従い、Debian システムはハードディスクや他のストレージデバイス 上の物理データ、そしてコンソールスクリーンなどのハードウェアデバイス とリモートのシリアルコンソールとの相互作用を統一された形式で表される ファイルシステムを供給します。

    Debian での各ファイル、ディレクトリ、名前付きパイプ、そして物理データ はそのデータの所有者 (owner)、データが所属するグループ、最後にアクセスされた 時間などの付随する属性を記述する inode と呼ばれる データ構造を持ちます。 Debian GNU/Linux システムでの inode 構造 の正確な定義を知るには、 /usr/include/linux/fs.h をご覧ください。

    物理エントリの統一された表現は非常にパワフルなので、完全に異なるデバイスに 同種の操作を行うために、同じコマンドを使用することを可能とします。

    すべてのファイルは 1 つのディスク上に置けますし、20 個のディスクに分けることも、 ネットワーク上のどこかにある違うコンピュータにあって接続することもできます。 ファイルの物理的位置がどこであれ、 ディレクトリツリーを見るだけでは見分けがつきませんし、 またほとんど全てのコマンドは同じように動きます。


    4.5.3 ファイルとディレクトリのアクセス権

    ファイルとディレクトリのアクセス権はそれぞれ次に挙げる 3つの 影響されるユーザのカテゴリのために定義されています。

    ファイルでは、それぞれに対応する権限は次のようになります。

    ディレクトリでは、対応する権限はそれぞれ次のようになります。

    ここで、ディレクトリでの 実行 権はディレクトリにあるファイルの 読み込みを許可するだけでなく、サイズや修正時間などの属性を見ることも許可します。

    ファイルやディレクトリのアクセス権情報 (やそれ以上) を表示するには、 ls が使われます。ls(1) をご覧ください。 ls-l オプション付きで実行すると、次の情報が この順序で表示されます。

    ファイルの所有者を変更するには、root アカウントから chown を 使用します。ファイルのグループを変更するには、ファイルの所有者又は root アカウントから chgrp を使用します。ファイルやディレクトリの アクセス権を変更するには、ファイルの所有者又は root アカウントから chmod を使います。foo ファイルの操作を行う 基本的な文法は次の通り。

         # chown newowner foo
         # chgrp newgroup foo 
         # chmod  [ugoa][+-=][rwx][,...] foo
    

    詳細は chown(1), chgrp(1), および chmod(1) をご覧ください。

    例えば、ディレクトリツリーの所有者をユーザ foo に変更し、 グループ bar で共有する場合、root アカウントから次のコマンドを 実行します。

         # cd /some/location/
         # chown -R foo:bar .
         # chmod -R ug+rwX,o=rX .
    

    3つのさらに専門的なアクセス権ビットが存在します。

    ここで ls -l のこれらのビットを表す出力は、これらのビットが出力 されることにより隠される実行ビットがセットされていない場合、大文字になります。

    setuid ビット を実行ファイルにセットすると、ユーザは ファイルの所有者 ID (例えば、root) により実行ファイルを 実行することを許可します。同様に、 setgid ビット を実行ファイルにセットすると、ユーザは ファイルのグループ ID (例えば、root) により実行ファイルを 実行することを許可します。これらの設定はセキュリティを破るリスクを引き起こす ので、これらのビットを有効にするには特別な注意が必要です。

    setgid ビット をディレクトリに対して有効にすると、 ディレクトリに作成した全ファイルがディレクトリの グループ に所属するという BSD ライクなファイル生成手法が有効になります。

    sticky ビット をディレクトリに対して有効にすると、 ディレクトリにあるファイルがファイルの所有者以外から削除されるのを防ぎます。 /tmp やグループの書き込み可能なディレクトリなどの world-writable なディレクトリにあるファイルの内容を安全にするためには、 書き込み 権を無効にするだけでなく、 ディレクトリに sticky ビット もセットする必要があります。 さもなければ、ディレクトリに書き込みできるユーザにより、ファイルが削除され、 同じ名前で新しいファイルが作成されることを許してしまいます。

    次にファイルアクセス権の興味深い例を挙げます。

         $ ls -l /etc/passwd /etc/shadow /dev/ppp /usr/sbin/pppd
         crw-rw----    1 root     dip      108,   0 Jan 18 13:32 /dev/ppp
         -rw-r--r--    1 root     root         1051 Jan 26 08:29 /etc/passwd
         -rw-r-----    1 root     shadow        746 Jan 26 08:29 /etc/shadow
         -rwsr-xr--    1 root     dip        234504 Nov 24 03:58 /usr/sbin/pppd
         $ ls -ld /tmp /var/tmp /usr/local /var/mail /usr/src
         drwxrwxrwt    4 root     root         4096 Feb  9 16:35 /tmp
         drwxrwsr-x   10 root     staff        4096 Jan 18 13:31 /usr/local
         drwxrwsr-x    3 root     src          4096 Jan 19 08:36 /usr/src
         drwxrwsr-x    2 root     mail         4096 Feb  2 22:19 /var/mail
         drwxrwxrwt    3 root     root         4096 Jan 25 02:48 /var/tmp
    

    chmod(1) コマンドを用いて、ファイルアクセス権を 記述するためのもう一つの数字モードが存在します。この数字モードは 8進数 を使った 4桁の数字を用います。各桁は次のように対応します。

    これは複雑に聞こえるかもしれませんが、実際は本当にシンプルです。 ls -l コマンドの出力の最初の数行を見て、それをファイルアクセス権の バイナリ (2進数) 表現 ("-" を "0"、 "rwx" を "1) として読むと、 この数字モードの値はファイルアクセス権の 8 進数表現として意味を持ちます。 [33] 例えば、次を試してみてください。

         $ touch foo bar
         $ chmod u=rw,go=r foo
         $ chmod 644 bar
         $ ls -l foo bar
         -rw-r--r--    1 penguin  penguin  0 Nov  3 23:30  foo
         -rw-r--r--    1 penguin  penguin  0 Nov  3 23:30  bar
    

    標準のファイルアクセス権マスクは umask シェル組込み コマンドを使うことによりセットできます。builtins(7) をご覧ください。


    4.5.4 タイムスタンプ

    GNU/Linux のファイルには、3 種類のタイプスタンプが存在します。

    ctime が作成時刻ではないことに注意してください。

    Debian システム上では、ファイルをただ読み込むだけで通常ファイルの書き込み操作 が発生し、inodeatime 情報が更新される ことに注意してください。ファイルシステムを noatime オプション付きで マウントすると、システムはこの操作を飛ばし、ファイル読み込みアクセスが より高速になります。mount(8) をご覧ください。

    既存のファイルのタイムスタンプを変更するには、touch(1) をご覧ください。


    4.5.5 リンク

    異なるファイル bar とファイル foo を連携させる 2つの方法があります。

    リンク数の変更と rm コマンドの結果の厳密な違いについての次の例 をご覧ください。

         $ echo "Original Content" > foo
         $ ls -l foo
         -rw-r--r--    1 osamu    osamu           4 Feb  9 22:26 foo
         $ ln foo bar     # hard link
         $ ln -s foo baz  # symlink
         $ ls -l foo bar baz
         -rw-r--r--    2 osamu    osamu           4 Feb  9 22:26 bar
         lrwxrwxrwx    1 osamu    osamu           3 Feb  9 22:28 baz -> foo
         -rw-r--r--    2 osamu    osamu           4 Feb  9 22:26 foo
         $ rm foo
         $ echo "New Content" > foo
         $ cat bar
         Original Content
         $ cat baz
         New Content
    

    シンボリックリンクは上の例に示したように、常にファイルアクセス権 "rwxrwxrwx" を持ちますので、シンボリックリンクが指すファイルのアクセス権により指示される ファイルアクセス権が実際の効果を持ちます。

    . ディレクトリは、 それ自身が中にあるディレクトリとリンクしていますので、 新しいディレクトリリンク数は 2 から始まります。.. ディレクトリ は親ディレクトリとリンクしているので、ディレクトリのリンク数は 新しいサブディレクトリの増加に伴い増加します。


    4.5.6 名前付きパイプ (FIFO)

    名前付きパイプは、パイプのように働くファイルです。何かをファイルに 入れ、もう一方から出ます。こうしてこれは FIFO 又は First-In-First-Out と呼ばれます。つまり、最初にパイプに入れるものが最初にもう一方から出てきます。

    名前付きパイプに書き込んだ場合、パイプに書き込んだプロセスは情報が パイプから読み込まれるまで終了しません。名前付きパイプを読み込んだ場合、 読み込んだプロセスは何か読み込むものが存在するまで終了するのを待ちます。 パイプのサイズは常に 0 です。 -- 名前付きパイプはデータを保存せず、 シェルの | のように 2 つのプロセスをリンクするだけです。 しかし、このパイプは名前を持つので、2 つのプロセスは同じコマンドライン にあったり、同じユーザにより実行される必要さえありません。

    次を実行することにより、名前つきパイプを試せます。

         $ cd; mkfifo mypipe
         $ echo "hello" >mypipe & # バックグラウンドに入れる
         [1] 5952
         $ ls -l mypipe
         prw-r--r--    1 penguin penguin  0 2003-11-06 23:18 mypipe
         $ cat mypipe
         hello
         [1]+  Done                    echo hello >mypipe
         $ ls mypipe
         prw-r--r--    1 penguin penguin  0 2003-11-06 23:20 mypipe
         $ rm mypipe
    

    4.5.7 ソケット

    ソケットは名前つきパイプ (FIFO) に似ており、プロセス間の情報交換を 行えます。ソケットにとって、これらのプロセスは同時に実行する必要 はありませんし、同じ祖先プロセスの子供である必要もありません。 これはプロセス間通信の終端点です。情報の交換は異なるホストの間の ネットワーク越しでさえ発生します。


    4.5.8 デバイス名

    デバイスファイルは、システム上のハードディスク、ビデオカード、ディスプレイ、 キーボードなどの物理デバイス又は仮想デバイスに関連します。仮想デバイスの 例として、/dev/console として表されるコンソールがあります。

    デバイスには 2つのタイプがあります。

    デバイスファイルの読み書きが可能ですが、ファイルには、人間にとっては ちんぷんかんぷんで理解できないバイナリデータが多分含まれます。 データを直接デバイスファイルに書き込むことは時々ハードウェアの 接続に関するトラブルシュートに役立ちます。例えば、 プリンタデバイス /dev/lp0 にテキストデータをダンプしたり、 適切なシリアルポート /dev/ttyS0 にモデムコマンドを送る ことができます。しかし、注意深くやらないと、大災害をもたらすことがあります。 ですから気をつけてください。


    4.5.8.1 /dev/null など

    /dev/null は書き込む全てを捨てる特別なデバイスファイルです。 何かをしたくない場合、それを /dev/null に投げ込みます。 これは基本的に底無し穴です。/dev/null を読み込むと、 ファイル終端 (EOF) 文字がすぐさま得られます。

    /dev/zero は同様に、ここから読み込むと、\0 文字 を取得します。(ASCII コードの 0 とは異なる) ダミーファイル, 第 8.6.34 節 を ご覧ください。


    4.5.8.2 デバイスノード数

    デバイスノード数は ls を次のように実行すると表示されます。

         $ ls -l /dev/hda /dev/ttyS0 /dev/zero
         brw-rw----    1 root     disk       3,   0 Mar 14  2002 /dev/hda
         crw-rw----    1 root     dialout    4,  64 Nov 15 09:51 /dev/ttyS0
         crw-rw-rw-    1 root     root       1,   5 Aug 31 03:03 /dev/zero
    

    ここで、

    古いシステムでは、インストール過程で /sbin/MAKEDEV コマンド を使ってデバイスノードを作成します。 MAKEDEV(8) をご覧ください。

    新しいシステムでは、/dev 下のファイルシステムは /proc ファイルシステムと同様のデバイスファイルシステムにより 自動的に生成されます。


    4.5.9 /proc ファイルシステム

    /proc ファイルシステムは仮想ファイルシステムであり、 システムや起動中のプロセスに関する情報を含みます。

    特にあるファイル - /proc/kcore に気づくと、パニックになる人が 良くいます。これは一般に巨大です。これは (おおよそ) コンピュータのメモリ の内容のコピーです。これは kernel をデバッグするのに用いられます。 実際にはどこにも存在しないので、そのサイズに関して心配する必要は 全くありません。

    proc filesystem により Linux kernel をチューニングする, 第 7.2 節proc(5) をご覧ください。


    4.6 X Window System

    X, 第 9.4 節 をご覧ください。


    4.6.1 X Window System を起動する

    X Window System は xdm のようなグラフィカルなログイン デーモンにより自動的に起動できますし、コンソールから次をタイプしても 起動できます。

         $ exec startx
    

    4.6.2 X Window System におけるメニュ

    X 環境は多くのウィンドウマネージャを提供するので、ユーザインターフェース はかなり変化します。root ウィンドウを右クリックするとメニュインターフェース が上がって来ます。これはいつも使えます。

    メニュエントリが見付からない場合、関連するパッケージをインストールしてください。Debian パッケージ管理の基礎, 第 6.2 節 をご覧ください。


    4.6.3 X Window System でのキーボードシーケンス

    X Window System を起動中に覚えておくべき重要なキーストローク を次に挙げます。


    4.7 Further study

    現時点では、The Linux Documentation Project: Guides から引用する主要なガイドブックを読むことをお薦めします。

    さらに学ぶためのリソースは Debian のサポート, 第 15 章 をご覧ください。


    [ 前のページ ] [ 目次 ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ 次のページ ]


    Debian リファレンス

    CVS, 2007年 1月 18日 木曜日 11時54分01秒 UTC時間

    Osamu Aoki (青木 修) osamu#at#debian.org
    翻訳: 角田 慎一 tsuno#at#ngy.1st.ne.jp
    著者, 第 A.1 節