本章は 本当の初心者に Debian ワールドへの基本的なオリエンテーションを供給 します。しばらく Unix ライクなシステムを使っていたならば、ここで説明する ことは多分ほとんど知っているでしょう。常識の確認としてこれを使ってください。
PC に Debian システムをインストールした後、有用ないくつかのことを 学ぶ必要があります。素早い説明をします。
システムのリブート後、パッケージの最初の選択により、グラフィカルな ログインスクリーン又は文字ベースのログインスクリーンが表れます。 単純化のため、グラフィカルなログインスクリーンが表れた場合、 キャラクタベースのログインスクリーンを表示させるために 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]
コンピュータシステムを学ぶことは新しい外国語を学ぶことに似ていると
考えます。チュートリアルブックは有用ですが、ヘルパーツールを用いて
実際に学ぶことが必要です。こういう背景から、mc
, vim
,
lynx
, doc-linux-text
, そして
debian-policy
のようないくつかの追加パッケージを
インストールするのは良い考えです。 [6]
# apt-get update ... # apt-get install mc vim lynx doc-linux-text debian-policy ...
これらのパッケージを既にインストールしている場合、何もインストール しなくても良いです。
インストール中に、通常 root アカウントへのメールを受け取る非特権ユーザ アカウントを作成します。 [7] この特別なユーザアカウントを以降の訓練用にも使いたくないならば、 他の新ユーザアカウントを作成すべきです。
新しいユーザ名を penguin とすると、次のように タイプするとアカウントが作成されます。
root@foo:root# adduser penguin ... 質問全てに答える
[8] 先に進む前に、いくつかのことをまず学びましょう。
Debian システムには、6 個の独立した仮想端末が使えます。すなわち、 PC の VGA キャラクタコンソールスクリーンを6個の切替え可能な VT100 端末として使えるということです。スクリーンの切替えは左側の Alt キー と F1–F6 キーを同時に押すことにより行えます。仮想ターミナル それぞれに独立したアカウントでログインすることができます。 マルチユーザ環境は偉大な Unix の機能であり、非常に中毒性があります。
X Window System を起動中のシステムにおいて Alt-F7 を間違ってタイプし、 コンソールスクリーンがグラフィカルなスクリーンを表示していた場合、 Ctrl-Alt-F1 を押すことによりキャラクタコンソールへのアクセスを回復します。 この現象に慣れるため、違うコンソールに移動して元に戻ってみてください。
ファイル操作がメモリへのキャッシュにかかわる他の現代的な 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.7.4 節 を ご覧ください。
ついに Debian システムを非特権ユーザアカウント penguin を使ってできるだけリスクを負わずに楽しむ準備ができました。 [10]
penguin にログインしましょう。まだ root シェルプロンプト にいるなら、Ctrl-D をタイプしましょう。 [11] こうして root シェルでの行動を止めるために root コマンドプロンプトから 出て、ログインプロンプトに戻ります。新しく作ったユーザ名 penguin と対応したパスワードを入力しましょう。 [12] するとこのようなコマンドプロンプトが表示されるでしょう。
penguin@foo:penguin$
ここから、単純化のために、シンプルにしたコマンドプロンプトの例を下に挙げます。
まず簡単な方法 Midnight Commander (MC), 第 4.2 節 を使って Debian システムを学び、後で 適切な方法 (Unix ライクな作業環境, 第 4.3 節) を用いて学ぶことにします。
Midnight Commander (MC) は Linux コンソールや他の端末環境のための GNU 製 "スイス軍ナイフ" です。初心者にメニュドリブンなコンソール経験を与え、 標準的な Unix コマンドを習うよりもより簡単です。
Debian システムを探検するためにこのコマンドを使いましょう。これは 学習するための最良の方法です。カーソルキーとエンターキーを使うだけで いくつかの主要な場所を探検してください。
/etc
とサブディレクトリ。
/var/log
とサブディレクトリ。
/usr/share/doc
とサブディレクトリ。
/sbin
と /bin
終了時に作業ディレクトリを MC に変更させるためには、~/.bashrc
(又は .bashrc
から呼ばれる /etc/bash.bashrc
)
をマニュアルページ mc(1)
の中の -P
オプションの所に記述されているように修正する必要があります。 [13]
$ mc
MC はメニュを通じて、最小限のユーザの苦労しか要求せずに全てのファイル操作を 注意深く行います。ヘルプ表示を出すには、ただ F1 を押すだけす。 カーソルキーとファンクションキーの操作だけで MC を楽しめます。 [14]
MC の標準ではファイルリストを含む 2 つのディレクトリパネルがあります。
他の役立つモードとして、右側のウィンドウにファイルアクセス権情報などを表示する
"information" をセットするモードがあります。
次にいくつかの不可欠なキーストロークを示します。gpm
デーモン
を起動させると、マウスも使えます。(MC でのカットアンドペーストの通常の
挙動を回復するためには、shift キーを押してください。)
cd
コマンドは選択されたスクリーンに表示された
ディレクトリを変更します。
cp
や mv
コマンドで御使用ください。
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" を用います。
この内部エディタは他の外部エディタと置き換えが可能です。
また、多くのプログラムは使用するエディタを決定するために環境変数
EDITOR や VISUAL を使用します。 vim
が不快な場合、~/.bashrc
に 次に示す行を追加してエディタを
mcedit にセットします。
... export EDITOR=mcedit export VISUAL=mcedit ...
可能ならばこれらを vim にセットすることをお薦めします。
vim
コマンドに慣れることは正しいことです。なぜならば、 Vi
エディタは常に Linux/Unix 世界に存在するからです。 [15]
非常に小さなビューアです。文書内の単語を検索するための素晴らしいツールです。
/usr/share/doc
ディレクトリ内のファイルに対していつもこれを
使います。これは 大量の Linux 情報をブラウズするための最速の方法です。
このビューアはこのように直接起動できます。
$ mc -v filename_to_view
ファイルの上で Enter を押すと、適切なプログラムがファイルの内容を操作 します。これは非常に便利な MC の機能です。
実行ファイル:コマンドを実行 man, html ファイル:ビューアソフトに内容をパイプする tar.gz, deb ファイル: サブディレクトリであるかのように内容を表示
これらのビューアや仮想ファイルの機能を有効にするため、閲覧可能なファイルには
実行権が設定されていなくてはなりません。chmod
コマンドを使うか、
MC のファイルメニュ経由で状態を変更してください。
MC は FTP を用いた Internet 越しのファイルアクセスに使えます。 F9 を押してメニュに行き、`p' を押して FTP 仮想ファイルシステムを有効に します。username:passwd@hostname.domainname の形式で URL を 入力すると、それがローカルにあるかのようにリモートディレクトリを取得 します。
http.us.debian.org/debian を URL として試し、Debian ファイルアーカイブの 閲覧をしてみてください。Debian アーカイブがどのように構成されているか については Debian アーカイブ, 第 2.1 節 をご覧ください。
mc はほとんど全てのことを可能にしますが、シェルプロンプトから 実行されるコマンドラインツールの使用方法について学び、 Unix ライクな作業環境に親しむのは非常に重要なことです。 [16]
Unix ライクな環境では、特別な意味を持ついくつかのキーストロークがあります。 [17]
標準のシェルである bash
には対話的な利用を手助けする
履歴編集機能とタブ補完機能があります。
覚えておく価値のある他の重要なキーストロークを挙げます。
ここで、Linux キャラクタコンソール上でマウスを使うためには、gpm
をデーモンとして起動する必要があります。 [19] マウスの設定, 第 3.3
節 参照。
基本的な Unix コマンドを学びましょう。 [20] 非特権ユーザアカウント penguin から次に挙げる コマンドを全て試してみてください。
/..
と ".
" をのぞく。)
foo
ディレクトリに変更する。 builtins(7)
の cd
コマンドに関する 部分を参照。
/foo
に変更。
/etc/motd
の内容を表示。 command < foo, 第 4.3.10.9
節 参照。 [23]
junkfile
ファイルを作成。
foo
を新規ファイル
bar
にコピーする。
junkfile
を削除する。
foo
の名前を新しい名前
bar
に変更する。
foo
を新しい場所
bar
に移動させ、名前を baz
に変更する。ディレクトリ bar
が存在している必要があります。
foo
を他の人に読み書きできなく する。
(全ての人が実行不可)
foo
を他の人に読めるが、
書き込みができないようにする。(全ての人が実行不可)
foo
を他の人に読めるが、
書き込みができないようにする。(全ての人が実行可能)
exim
又は exim4
を起動中の全プロセスを表示。
man grep をタイプして、grep(1)
マニュアルページから正規表現について学びましょう。 [24]
foo
を圧縮し、foo.gz
を作成する。
foo.gz
を解凍して foo
を作成する。
gzip
より高圧縮率) を用いて foo
を圧縮し、foo.bz2
を作成する。
foo.bz2
を解凍して foo
を作成する。
foo.tar
アーカイブからファイルを展開する。
foo.tar.gz
アーカイブから
ファイルを展開する。
foo.tar.bz2
アーカイブから
ファイルを展開する。 [25]
bar/
の内容を foo.tar
アーカイブにアーカイブする。
bar/
の内容を
foo.tar.gz
アーカイブに圧縮アーカイブする
bar/
の内容を
foo.tar.bz2
アーカイブに圧縮アーカイブする
[26]
README.gz
の 内容を表示する。
README.gz
の内容を解凍してファイル foo
を作成する。
README.gz
の内容をファイル foo
の
末尾に追加する。(foo
が存在しない場合、先頭に作成される。)
訓練として、上記のコマンドを用いてディレクトリを横断し、システムの中を のぞきこんでみてください。コンソールのコマンドに関して質問がある場合は、 必ずマニュアルページを読んでみてください。例えば、これらのコマンドは 良い開始点でしょう。
$ man man $ man bash $ man ls
また、vim
を始め、F1 キーを押す良い時期でしょう。 少なくとも最初の
35行を読むべきです。そしてカーソルを |tutor| まで動かし、Ctrl-]
を押してオンラインコースを受けましょう。 エディタについてより詳しく学ぶには、エディタ, 第 11 章 をご覧ください。
GNU や BSD 由来の多くの Unix コマンドは次のような手順 (又は ある場合には引数無し) を行えば主要なヘルプ情報を表示できます。
$ commandname --help $ commandname -h
自習のために、 Debian tips, 第 8 章 も例として試してみてください。
ついに Debian システムの使用方法を幾らか感じとれました。 Debian システムでのコマンド実行機構について深く見ていきましょう。 [27]
シンプルなコマンドは、次の順序となります。
引用や置換を持つより複雑なコマンドについては、コマンドライン処理, 第 13.2.6 節 参照。
典型的なコマンドの実行は次のようなシェル行シーケンスを使用します。 [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
シェル上でコマンドをタイプした場合、シェルはコマンドを PATH 環境変数内にリストされたディレクトリのリストから検索します。PATH 環境変数の値は、シェルの検索パスとも呼ばれます。
標準の Debian インストールでは、ユーザアカウントの PATH 環境変数
には /sbin/
が含まれないかもしれません。それゆえ、
/sbin/
にある ifconfig
のようなコマンドを
実行したい場合は、PATH 環境変数を、このディレクトリを含むように
変更する必要があります。PATH 環境変数は通常初期化ファイル
~/.bash_profile
に含まれます。Bash 設定, 第 3.2 節 を ご覧ください。
いくつかのコマンドは引数を取ります。- 又は -- で始まる 引数はオプションと呼ばれ、コマンドの挙動を制御します。
$ date Mon Oct 27 23:02:09 CET 2003 $ date -R Mon, 27 Oct 2003 23:02:40 +0100
ここでコマンドライン引数 -R は date
コマンドが
RFC-2822 互換のデータ文字列を出力するように挙動を変更させます。
処理したいファイル名を全てタイプせずにファイルをコマンド処理したいことが よくあります。シェルの ワイルドカード を用いた ファイル名のパターン展開はこのニーズを促進します。
例えば、次の例を試してみて、自分で考えてみましょう。
$ 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
コマンドは戻り値として終了ステータスを返します。
この戻り値は実行後すぐに $? シェル変数によりアクセス できます。
$ [ 1 = 1 ] ; echo $? 0 $ [ 1 = 2 ] ; echo $? 1
戻り値はシェルのために論理的な観点で使用される場合、成功 は論理的に 真 として扱われることに注意してください。 これは 正常終了 は ゼロ の値を持つため、 いくらか非直感的です。
シェルの条件文, 第 13.2.5 節 をご覧ください。
次に挙げるシェルコマンドのイディオムを覚えてみましょう。 これらのイディオムを読んだ後に、シェルパラメータ, 第 13.2.3 節, シェルリダイレクト, 第 13.2.4 節, シェルの条件文, 第 13.2.5 節, そして コマンドライン処理, 第 13.2.6 節 をご覧ください。
command
は バックグラウンド で
サブシェルにて実行されます。バックグラウンドジョブにより、
複数のプログラムを単独のシェルで実行することが可能となります。
バックグラウンドプロセスの管理は次に挙げるシェル組込みコマンドに関連します。
jobs
, fg
, bg
, および kill
。
bash(1)
マニュアルページの "SIGNALS"、 "JOB
CONTROLS" および "SHELL BUILTIN COMMANDS" の章を
読んでみてください。 [29]
command1
の標準出力は command2
の標準入力
に導かれます。両方のコマンドは 同時に動くかも
しれません。これは パイプライン と呼ばれます。
command1
と command2
は 連続して
実行されます。
command1
がまず実行されます。コマンドの実行が
正常終了した場合は、command2
も 連続して
実行されます。command1
と command2
の
両方 が正常終了した場合に正常終了を返します。
command1
がまず実行されます。失敗した場合、 command2
も 連続して 実行されます。 command1
又は command2
のどちらかが正常終了した場合に正常終了を返します。
command
の標準出力をファイル foo
にリダイレクト (上書き) します。
command
の標準出力をファイル foo
にリダイレクト (追記) します。
command
の標準出力と標準エラー出力の両方をファイル
foo にリダイレクトします。
command
の標準入力をファイル foo に
リダイレクトします。試してみましょう。
$ </etc/motd pager ... (グリーティングメッセージを表示) $ pager </etc/motd ... (グリーティングメッセージを表示) $ pager /etc/motd ... (グリーティングメッセージを表示) $ cat /etc/motd | pager ... (グリーティングメッセージを表示)
この4つの構文は同じ出力を表示しますが、最後の例は特別な cat
コマンドを起動し、無駄なリソースを消費しています。
良く使うコマンドにエイリアスを設定できます。例えば、
$ 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
コマンドの場所への高速なアクセス
のために、内部記録を取っています。
頻繁に Unix ライクシステムで使用される標準的なテキスト処理ツールが いくつかあります。
head
はファイルの先頭部分を出力します。
tail
はファイルの末尾の部分を出力します。
sort
はテキストファイルの行をソートします。
uniq
はソートされたファイルの重複行を削除します。
tr
は文字を変換したり削除します。
diff
は 1 行ごとにファイルを比較します。
grep
はテキストにパターンをマッチさせます。
ed
は原始的なラインエディタです。
sed
はストリームエディタです。
vi
はスクリーンエディタです。
emacs
はスクリーンエディタです。
egrep
はテキストにパターンをマッチさせます。
awk
はシンプルなテキスト処理を行います。Awk, 第 13.3 節 参照。
perl
は考えられる全てのテキスト処理を行います。 Perl, 第 13.4 節 参照。
いくつかのスクリプト例は 正規表現による置換, 第 8.6.13 節, コマンドをパイプするためのわずかなスクリプト, 第 8.6.18 節, そして Perl ショートスクリプトの狂気, 第 8.6.20 節 をご覧ください。
正規表現は多くのテキスト処理ツールで使われています。シェルのワイルドカード (シェルのワイルドカード, 第 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
置換表現の場合、次の文字には特別な意味があります。
emacs
では \&
を使用)
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=&=
ここで、括弧で囲まれた 正規表現と、マッチした文字列が 異なったツールでテキスト置換処理にどのように使われるかに特別な注意を 払ってください。
これらの正規表現はエディタ内でカーソルの動きとテキスト置換アクションの両方 に対して使えます。
これらのコマンドを習うために、関連するマニュアルページを全て読んでください。
GNU/Linux や他の Unix ライク OS システムでは、ファイル は
ディレクトリ に組織化されています。 [30] 全ての
ファイル と ディレクトリ は /
を根とする 1つの大きなツリー、すなわちファイル階層に配置 されています。
これらのファイルは複数のデバイスに展開することができます。
mount(8)
コマンドは
あるデバイス上にあるファイルシステムを大きなファイルツリーに所属させます。
逆に、umount(8)
コマンドは再び分離させます。
次に挙げることは基礎知識です。
MYFILE
と
MyFile
は 異なる ファイルです。
/
として参照されます。 root ユーザとこの
"root" を混同しないでください。root
としてシェルにログインする, 第 4.1.1 節 参照。
/
を除く全ての
文字と記号を使用できます。 [31]
root ディレクトリは例外です。名前は /
("スラッシュ" や
"root ディレクトリ" と呼ぶ) であり、変えられません。
/
ディレクトリで始まり、ファイル名内のディレクトリやファイルの間には
/
がはさまります。最初の /
はディレクトリ名
ですが、その他はファイル名の部分部分を区別するための単なるセパレータです。
ここで使われる単語は混乱を招きます。次の例をご覧ください。
/usr/share/keytables/us.map.gz
これは完全に記述されたファイル名です。ある人はこれを パス
と呼びますが、us.map.gz
だけをファイル名として呼ぶ人もいます。 [32]
/etc/
や /usr/
のような複数の枝を持ちます。これらのサブディレクトリもまた
/etc/init.d/
や /usr/local/
のように、さらに
サブディレクトリに枝別れします。これらの全体をまとめて
ディレクトリツリー と呼びます。
絶対ファイル名はツリーの根元 (/
) から枝の先 (ファイル)
までの経路として考えることもできます。また、あたかもディレクトリツリーを
家系図 のように人が話すのを聞いたことがあるでしょう。
あたかもそれぞれのサブディレクトリに 親 があるとし、
パスはファイルの完全な祖先の系図のように表現します。
root ディレクトリではない他の場所から始まる相対パスもあります。
../
は親ディレクトリを参照していることを覚えておきましょう。
ファイル階層について詳細に学ぶ最も良い方法は、 Filesystem Hierarchy
Standard
に記述されています。 手始めとして次の事実を覚えるべきです。
/
/
は root ディレクトリを表す。
/etc/
/var/log/
/home/
Unix の伝統に従い、Debian システムはハードディスクや他のストレージデバイス 上の物理データ、そしてコンソールスクリーンなどのハードウェアデバイス とリモートのシリアルコンソールとの相互作用を統一された形式で表される ファイルシステムを供給します。
Debian での各ファイル、ディレクトリ、名前付きパイプ、そして物理データ
はそのデータの所有者 (owner)、データが所属するグループ、最後にアクセスされた
時間などの付随する属性を記述する inode と呼ばれる
データ構造を持ちます。 Debian GNU/Linux システムでの inode 構造
の正確な定義を知るには、 /usr/include/linux/fs.h
をご覧ください。
物理エントリの統一された表現は非常にパワフルなので、完全に異なるデバイスに 同種の操作を行うために、同じコマンドを使用することを可能とします。
すべてのファイルは 1つのディスク上に置けますし、20個のディスクに分けることも、 ネットワーク上のどこかにある違うコンピュータにあって接続することもできます。 ファイルの物理的位置がどこであれ、 ディレクトリツリーを見るだけでは見分けがつきませんし、 またほとんど全てのコマンドは同じように動きます。
ファイルとディレクトリのアクセス権はそれぞれ次に挙げる 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)
をご覧ください。
GNU/Linux のファイルには、3種類のタイプスタンプが存在します。
ctime が作成時刻ではないことに注意してください。
Debian システム上では、ファイルをただ読み込むだけで通常ファイルの書き込み操作
が発生し、inode の atime 情報が更新される
ことに注意してください。ファイルシステムを noatime
オプション付きで
マウントすると、システムはこの操作を飛ばし、ファイル読み込みアクセスが
より高速になります。mount(8)
をご覧ください。
既存のファイルのタイムスタンプを変更するには、touch(1)
をご覧ください。
異なるファイル 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から始まります。..
ディレクトリ
は親ディレクトリとリンクしているので、ディレクトリのリンク数は
新しいサブディレクトリの増加に伴い増加します。
名前付きパイプは、パイプのように働くファイルです。何かをファイルに 入れ、もう一方から出ます。こうしてこれは 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
ソケットは名前つきパイプ (FIFO) に似ており、プロセス間の情報交換を 行えます。ソケットにとって、これらのプロセスは同時に実行する必要 はありませんし、同じ祖先プロセスの子供である必要もありません。 これはプロセス間通信の終端点です。情報の交換は異なるホストの間の ネットワーク越しでさえ発生します。
デバイスファイルは、システム上のハードディスク、ビデオカード、ディスプレイ、 キーボードなどの物理デバイス又は仮想デバイスに関連します。仮想デバイスの 例として、/dev/console として表されるコンソールがあります。
デバイスには 2つのタイプがあります。
デバイスファイルの読み書きが可能ですが、ファイルには、人間にとっては
ちんぷんかんぷんで理解できないバイナリデータが多分含まれます。
データを直接デバイスファイルに書き込むことは時々ハードウェアの
接続に関するトラブルシュートに役立ちます。例えば、 プリンタデバイス
/dev/lp0
にテキストデータをダンプしたり、 適切なシリアルポート
/dev/ttyS0
にモデムコマンドを送る
ことができます。しかし、注意深くやらないと、大災害をもたらすことがあります。
ですから気をつけてください。
/dev/null
など
/dev/null
は書き込む全てを捨てる特別なデバイスファイルです。
何かをしたくない場合、それを /dev/null
に投げ込みます。
これは基本的に底無し穴です。/dev/null
を読み込むと、 ファイル終端
(EOF) 文字がすぐさま得られます。
/dev/zero
は同様に、ここから読み込むと、\0 文字
を取得します。(ASCII コードの 0 とは異なる) ダミーファイル, 第 8.6.34 節 を
ご覧ください。
デバイスノード数は 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
ここで、
/dev/hda
はmajor device number 3 と minor device number 0
を持ちます。これは disk グループに所属するユーザにより、読み書き
が可能です。
/dev/ttyS0
は major device number 4 と minor device number 64
を持ちます。これは dialout グループに所属するユーザにより読み書き
が可能です。
/dev/zero
は major device number 1 と minor device number 5
を持ちます。これはだれでも読み書き可能です。
古いシステムでは、インストール過程で /sbin/MAKEDEV
コマンド
を使ってデバイスノードを作成します。 MAKEDEV(8)
をご覧ください。
新しいシステムでは、/dev
下のファイルシステムは /proc
ファイルシステムと同様のデバイスファイルシステムにより 自動的に生成されます。
/proc
ファイルシステム
/proc
ファイルシステムは仮想ファイルシステムであり、
システムや起動中のプロセスに関する情報を含みます。
特にあるファイル - /proc/kcore
に気づくと、パニックになる人が
良くいます。これは一般に巨大です。これは (おおよそ) コンピュータのメモリ
の内容のコピーです。これは kernel をデバッグするのに用いられます。
実際にはどこにも存在しないので、そのサイズに関して心配する必要は
全くありません。
proc filesystem により Linux kernel
をチューニングする, 第 7.3 節 と proc(5)
をご覧ください。
X, 第 9.4 節 をご覧ください。
X Window System は xdm
のようなグラフィカルなログイン
デーモンにより自動的に起動できますし、コンソールから次をタイプしても
起動できます。
$ exec startx
X 環境は多くのウィンドウマネージャを提供するので、ユーザインターフェース はかなり変化します。root ウィンドウを右クリックするとメニュインターフェース が上がって来ます。これはいつも使えます。
メニュエントリが見付からない場合、関連するパッケージをインストールしてください。Debian パッケージ管理の基礎, 第 6.2 節 をご覧ください。
X Window System を起動中に覚えておくべき重要なキーストローク を次に挙げます。
現時点では、The Linux
Documentation Project: Guides
から引用する主要なガイドブックを読むことをお薦めします。
sysadmin-guide
/usr/share/doc/sysadmin-guide/html/index.html
http://www.tldp.org/LDP/sag/index.html
(not available)
(not applicable)
http://www.tldp.org/LDP/nag2/index.html
rutebook
(from non-free)
/usr/share/doc/rutebook/
http://www.icon.co.za/~psheer/book/index.html.gz
さらに学ぶためのリソースは Debian のサポート, 第 15 章 をご覧ください。
Debian リファレンス
CVS, 2005年 4月 3日 月曜日 22時59分00秒 UTC時間osamu@debian.org
tsuno@ngy.1st.ne.jp