Linux には DOS によく似たファイルシステム --- すなわち、「ディレクトリ とファイルの構造」 --- があります。ファイルは一定のルールに従って名前 が付けられ、ディレクトリに保存され、いくつかのファイルは実行可能で、実 行可能なファイルにはいくつかのコマンドスイッチが用意されています。加え てワイルドカードやリダイレクト、パイプを使うことも可能です。DOS のファ イルシステムとはわずかな違いしかありません。
NOTENOUG.TXT
など。Linux ではそのような制限はありません。
Linux を ext2 や umsdos を使ってインストールしていれば、(最大 255 文字
までの)ずっと長いファイル名を使うことも、一個以上のドットを使うことも
可能です。例えば、This_is.a.VERY_long.filename
など。大文字と
小文字の両方を使っていることに注意してください。実際のところ、、
FILENAME.tar.gz
と filename.tar.gz
は違うファイルに
なります。コマンド名も ls
であり、LS
は間違いです。
ls -F
した時にアスタリスク '*
' で示されます。例え
ば:
$ ls -F
letter_to_Joe cindy.jpg cjpg* I_am_a_dir/ my_1st_script* old~
cjpg*
と my_1st_script
は「プログラム」、すなわち実
行可能ファイルです。DOS では、バックアップファイルは .BAK という拡張子
を持ちますが、 Linux では、ファイル名の末尾にチルダ(~
)
が付きます(emacs/mule を使う場合)。また、ドットで始まるファイル名は隠
しファイルになります。例えば、 .I.am.a.hidden.file
というファ
イルは ls
コマンドでは表示されません。
/switch
がプログラムのオプションスイッ
チになります。一方、Linux では -switch
か --switch
がオプションスイッチとなります。例えば dir /s
は ls -
R
になります。多くの DOS プログラム、例えば PKZIP
や
ARJ
は Unix 風のオプションスイッチを使っていることに注意して
ください。
次に 各種コマンドの DOS から Linux への翻訳 の 章へ進んでも構いませんし、このまま読み進めてもらっても構いません。
Unix には DOS にない種類のファイル、すなわちシンボリック・リンクがあり
ます。シンボリック・リンクはファイルやディレクトリへのポインタと考えられ、
実際のファイルやディレクトリの代りに使うことが可能です。シンボリック・
リンクは Win 95 の「ショートカット」によく似ています。シンボリック・リ
ンクの例として、例えば /usr/X11
は /usr/X11R6
へのシ
ンボリック・リンクになっており、/dev/modem
は
/dev/cua0
か /dev/cua1
へのポインタになっています。
シンボリック・リンクを作るには以下のようにします。
$ ln -s <file_or_dir> <linkname>
例:
$ ln -s /usr/doc/g77/DOC g77manual.txt
これで /usr/doc/g77/DOC
の代りに g77manual.txt
とい
うファイル名が使えます。
DOS のファイルとディレクトリには以下の 4 つの属性があります: A (アーカ イブ)、H (隠しファイル)、R (リードオンリー)、S (システムファイル)。こ のうち H と R の属性のみ、Linux に対応する属性があります。隠しファイル はドットで始め、リードオンリーの属性については、、もう少し読み続けてく ださい。
Unix の世界では、ファイルには各種の「許可属性(パーミッション)」と所有 者の概念があります。所有者は何らかの「グループ」に属しています。以下の 例を見てください。
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
最初の欄が /bin/ls
の許可属性を示しています。所有者はルートで、
グループは bin です。のこりの情報は別の機会に説明することにして(Matt
の著書がそれらを説明しています)、ここでは-rwxr-xr-x
の意味を
説明します(左から右に読みます)。
-
はファイルの種類を示します(- は一般のファイル、d はディレク
トリ、l はリンク、などなど)。その次の 3 つ、rwx
はファイルの
所有者に対する許可属性です(この例では読み出し、書きこみ、実行の全てが
可能になっています)。次の 3 つ、-xr
はファイルの所有者が属す
るグループに対する許可属性です(読み出しと実行のみが可能です)(この文書
ではグループについては扱いません。初心者の間はグループを気にしないでも
大丈夫です ;-)。最後の r-x
はその他全てのユーザに対する許可属
性です(読み出しと実行のみが可能)。
このような許可属性になっているため、ルート以外のユーザには
/bin/ls
は削除できません。なぜならば、ルート以外のユーザには
書きこみ許可が与えられていないからです。ファイルの許可属性を変えるため
のコマンドは
$ chmod <whoXperm> <file>
です。
ここで、who は u
(ユーザ、すなわち所有者自身)、か g
(ユーザの属するグループ)、o
(その他のユーザ) で、X は
+
か -
になります。perm はr
(読み出し) か
w
(書きこみ)、あるいは x
(実行) のいずれかです。例え
ば、
$ chmod u+x file
この指定では、ファイルの所有者に実行許可を与えます。一種のショートカッ トとして使えますね。
$ chmod go-wx file
この指定では、所有者以外(グループと一般ユーザ)の書きこみと実行許可を外 しています。
$ chmod ugo+rwx file
こうすれば誰でも読みこみや書き出し、実行が可能になります。
# chmod +s file
この指定はいわゆる ``setuid''、すなわち ``suid'' されたファイルを作り ます。このファイルは誰もがルートの権限で実行できます。
許可属性は数字で指定することも可能です。rwxr-xr-x
は 755 と表
現できます(許可属性を示す各文字が一つのビットに対応します。すなわち、
---
は 0 で、--x
は 1 、-w-
が 2 で、
-wx
は 3 等々)。一見複雑そうですが、しばらく練習すればその
意味が理解できるでしょう。
ルート、いわゆるスーパーユーザ、は全てのユーザのファイルの許可属性を変 更することができます、詳細については --- chmod について RMP してくださ い。
次の表の左が DOS のコマンドで、右に示すものが対応する Linux のコマンド です。
COPY: cp
DEL: rm
MOVE: mv
REN: mv
TYPE: more, less, cat
リダイレクトと標準入力を切り替えるオペレータは < > >> |
です。
ワイルドカード: * ?
nul: /dev/null
prn, lpt1: /dev/lp0 か /dev/lp1; lpr
いくつか例を示します。
DOS Linux
---------------------------------------------------------------------
C:\GUIDO>copy joe.txt joe.doc $ cp joe.txt joe.doc
C:\GUIDO>copy *.* total $ cat * > total
C:\GUIDO>copy fractals.doc prn $ lpr fractals.doc
C:\GUIDO>del temp $ rm temp
C:\GUIDO>del *.bak $ rm *~
C:\GUIDO>move paper.txt tmp\ $ mv paper.txt tmp/
C:\GUIDO>ren paper.txt paper.asc $ mv paper.txt paper.asc
C:\GUIDO>print letter.txt $ lpr letter.txt
C:\GUIDO>type letter.txt $ more letter.txt
C:\GUIDO>type letter.txt $ less letter.txt
C:\GUIDO>type letter.txt > nul $ cat letter.txt > /dev/null
該当なし $ more *.txt *.asc
該当なし $ cat section*.txt | less
注意点:
more
を使う場合、続きを読むには SPACE を押し、終了する
には `q' か CTRL-C を押します。less
は more
よりもさ
らに賢くて、矢印キー(カーソルキー)を使うことも可能です。
less
で日本語のファイルを表示する際には環境変数
LESSCHARSET
を設定する必要があります。bash
を使う場
合、
$ export LESSCHARSET=japanese-ujis
UNDELETE
はありません。ですから、何か
を削除する際には十分注意してください。
<、>、>>
に加えて、Linux では
2>
でエラーメッセージ(stderr)を切り変えることが可能です。
加えて、2>&1
とすると stderr を stdout に出力し、
1>&2
で stdout を stderr にリダイレクトできます。
[]
というワイルドカードも使えます。
[abc]*
は最初の文字が a か b か c で始まるワイルドカードの指
定です。*[I-N,123]
は末尾が I, J, K, L, M, N, 1, 2, 3 で終わ
るファイルにマッチします。
RENAME
はありません。すなわち、
mv
*.xxx *.yyy は使えません。
cp -i
か mv -i
を
使って、確認モードで実行してください。
プログラムを動かすには DOS と同様にそのコマンドの名前を打ちこむだけで
す。起動したいプログラムがパス環境変数 (
システムの初期設定を参照) が通っているディレク
トリにあれば、そのまま実行することが可能です。DOS とは異なり、Linux で
は今いるディレクトリにあるプログラムでも、パスが通っていないと実行する
ことはできません。その場合、プログラム名を prog
とすると
./prog
と入力します。
典型的なコマンドラインは以下のようになります。
$ command -s1 -s2 ... -sn par1 par2 ... parn < input > output
ここで -s1
, ... ,-sn
はプログラムのオプションスイッ
チで、par1
, ..., parn
はプログラムのパラメータです。
以下のように ; で区切って複数のコマンドを並べることも可能です。
$ command1 ; command2 ; ... ; commandn
これでプログラムの動かし方については終りですが、もう一歩を進めるのは簡 単でしょう。Linux を使う理由の一つに、Linux はマルチタスク OS で、複数 のプログラム(以後プロセスと呼びます)を同時に動かせるから、というのがあ ります。この機能を使えばプログラムをバックグラウンドで実行しながら今の 仕事を続けることも可能です。加えて、Linux では複数のセッションを同時に 動かすことも可能です。その場合、同時に複数のコンピュータを使っているよ うに感じます。
$ ALT-F1 ... ALT-F6
とします。
$ su - <loginname>
とします。
例えば、
$ su - root
通常、ルートのみがディスクをマウントできるので、ディスクをマウントした
い場合(詳細は
フロッピー の章を参照のこと)、
こうしてセッションを切り替えれば便利です。
$ exit
とします。停止中のジョブが残っていれば(詳細は後述)警告が表示されます。
$ progname [-switches] [parameters] [< input] [> output]
とします。
&
' を付けます。
$ progname [-switches] [parameters] [< input] [> output] &
[1] 123
シェルはプロセスをジョブ番号(この例では [1]
がジョブ番号です。
詳細は後述)とプロセス ID(この例では 123) で区別しています。
$ ps -a
とすると、現在動いているプロセスのリストが表示されます。
$ kill <PID>
プログラムの正しい終了方法が分らない場合など、プロセスを殺す必要が生じ
るかも知れません、、;-) プロセスの中には、以下のようにしないと死なない
ものもあります。
$ kill -15 <PID>
$ kill -9 <PID>
加えて、シェルはプロセスを一時停止したり、バックグラウンドに送ったり、
バックグラウンドからフォアグラウンドへ戻したりすることが可能です。この
場合、プロセスは特に「ジョブ」と呼ばれます。
$ jobs
とします。この場合、各ジョブはプロセス ID ではなくジョブ番号で表示され
ます。
$ CTRL-C
を入力します。
$ CTRL-Z
を入力します。
$ bg <job>
とします。
$ fg <job>
とします。
$ kill <%job>
とします。
ここで、<job> は 1, 2, 3, ... などの番号です。これらのコマンドを
駆使することで、ディスクのフォーマットや複数ファイルの圧縮、プログラム
のコンパイル、アーカイブファイルの展開などを同時に行ないながら、さらに
プロンプトを出して、コマンド入力を可能にしておくことができます。これを
DOS でやってごらんなさい! また、Windows でやってみて、どれくらい性能に
違いがあるかを見るのも面白いでしょう。
ホスト名が remote.bigone.edu
のリモートコンピュータでプログラ
ムを実行するには、まず
$ telnet remote.bigone.edu
してそのコンピュータにログインします。
ログインすれば好きなプログラムを動かすことができます。言うまでもありま
せんが、remote.bigone.edu
にはあなたのアカウントが必要です。
X11 を使えば、X 用のアプリケーションをリモートコンピュータで実行して、
表示を手元のマシンの X ウィンドウの画面に出力することも可能です。
remote.bigone.edu
が X ウィンドウの動かせるリモートコンピュー
タで local.linux.box
をあなたの Linux マシンとします。
local.linux.box
から remote.bigone.edu
にある X
のプログラムを動かすには以下のようにします。
xterm
か同等のターミナルエミュレータを
起動します(日本語を使う場合 kterm
を使います。以下でも
xterm
はkterm
と読みかえてください)。そして、以
下のように入力します。
$ xhost +remote.bigone.edu
$ telnet remote.bigone.edu
remote.bigone.edu
にログインして、以下のように入力します。
remote:$ DISPLAY=local.linux.box:0.0
remote:$ progname &
(remote.bigone.edu
に csh 系のシェルが乗っていれば
DISPLAY=...
の代りに setenv DISPLAY
local.linux.box:0.0
とする必要があるかも知れません)
これで、progname
が remote.bigone.edu
で起動して、
画面があなたの local.linux.box
で表示されます。でも、これは
ppp のような遅い接続経由ではやらない方が無難です。