Linux は DOS/Win にとても似たディレクトリやファイル構成になっています。 ファイルにはファイル名があり、これらは特別なルールに従います。これらは ディレクトリ内にしまわれ、その中には実行可能ファイルもあり、それらのほ とんどはコマンドスイッチをもっています。さらに、ワイルドカードやリダイ レクト、パイプを使うこともできます。ただし、DOS/Win とは微妙に異なる点 も少しだけあります。
NOTENOUG.TXT
)。Linux ではよりよいものになっています。もしも
あなたが ext2 や umsdos 等のファイルシステム上に Linux をインストール
した場合は、さらに長いファイル名が使えますし (255 文字まで)、複数の
ドットを使うことができます (例えば This_is.a.VERY_long.filename
)。
ここで大文字と小文字を混ぜて使ったことに注意してください。実は、
FILENAME.tar.gz
と filename.tar.gz
は二つの異なるファ
イルです。ls
はコマンドですが、LS
は間違いです。
$ # 次のコマンドで 「My old files」 という名前のディレクトリを作成します。
$ mkdir "My old files"
$ ls
My old files bin tmp
さらに、次の文字は使うべきではありません:
!*$&#
ls -F
コマンドを実行すると
実行ファイルにはアスタリスク 「*
」がファイル名の後ろにつきます。
例えば:
$ ls -F
I_am_a_dir/ cindy.jpg cjpg* letter_to_Joe my_1st_script* old~
cjpg*
と my_1st_script*
は実行可能ファイル、
つまりは「プログラム」です。バックアップファイル名は DOS 上では .BAK
でおわりますが、Linux では波線「~
」になります。
さらに、ファイル名がドットから始まるファイルは隠しファイルと見なされま
す。例えば .I.am.a.hidden.file
という名前のファイルは ls
コマンドでは表示されません。
/switch
で使うことができますが、Linux でのスイッチは -switch
か
--switch
となります。つまり dir /s
は ls -R
になります。たくさんの DOS プログラムでも、例えば PKZIP
や ARJ
などは UNIX スタイルのスイッチを使うことを覚えておいてください。
コマンドを DOS から Linux へ翻訳する のセクションまで一気に読み飛ばすこともできますが、 私があなただったらこのまま読み続けます。
UNIX には DOS では存在しないようなタイプのファイルがあります。
シンボリックリンクです。これはファイルやディレクトリを指し示すもの (ポインタ)
で、それが指し示すファイルやディレクトリの
代わりとして使用できます。これは Windows のショートカット
に似ていますね。シンボリックリンクの例として、/usr/X11R6/
を指し示す /usr/X11
、/dev/ttyS0
か
/dev/ttyS1
を指し示す /dev/modem
等があります。
シンボリックリンクを作るには:
$ ln -s <file_or_dir> <linkname>
例:
$ ln -s /usr/doc/g77/DOC g77manual.txt
これで /usr/doc/g77/DOC
を参照する代わりに g77manual.txt
を参照できます。ディレクトリを表示させた場合、リンクは以下のように見えます。
$ ls -F
g77manual.txt@
$ ls -l
(several things...) g77manual.txt -> /usr/doc/g77/DOC
DOS のファイルとディレクトリは次のような属性を持ちます。 A (アーカイブ)、H (隠しファイル)、R (読み専用)、そして S (システムファイル)。 H と R だけが Linux 上では意味のあるものとなりま す。隠しファイルはドットで始まります。 R 属性についてはこのまま読み進めてください。
UNIX 上ではファイルには「パーミッション」と所有者、 そして所有グループが存在します。次の例を見てください。
$ ls -l /bin/ls
-rwxr-xr-x 1 root bin 27281 Aug 15 1995 /bin/ls*
最初のフィールドは /bin/ls
のパーミッションを含み、
/bin/ls
は root に所有され、グループ bin に所属します。
残りの情報は置いておいて、-rwxr-xr-x
の意味を探ってみましょう。
左から右へ読んでいきます。
-
はファイルのタイプを意味します(-
= 普通のファイル、
d
= ディレクトリ、l
= リンク、等)。
rwx
はファイル所有者のパーミッションを意味します
(read(読み)、write(書き)、execute(実行));(ここでは group の
意味を説明しませんが、初心者ならこの意味を知らなくても
やっていけるでしょう ;-) r-x
はほかのユーザに対するパーミッション
です(read、execute)。
ディレクトリ /bin
もパーミッションを持ちます (詳しくは
ディレクトリのパーミッション
を参照)。 root でない限り /bin/ls
ファイルを削除できないのは、パーミッションで許可されていないからです。
ファイルのパーミッションを変更するには次のようにコマンドを打ちます。
$ chmod <whoXperm> <file>
who は u
(user、つまり所有者)、g
(group)、o
(other)、
X は +
か -
、perm は r
(read)、w
(write)、か
x
(execute)。一般的な chmod
の使い方は次のようになります。
$ chmod +x file
これでファイルを実行可能にします。
$ chmod go-rw file
所有者以外の読み書き権限を剥奪します。
$ chmod ugo+rwx file
全てのユーザに読み書き、そして実行の権限を与えます。
# chmod +s file
これは「setuid」とか、「suid」と呼ばれるファイル (全てのユーザが 所有者の権限でファイルを実行できる) を作ります。 よく見かけるのは root に setuid したファイルです。 これらは重要なシステムファイルであることがよくあります ( X サーバ等)。
数字を使うことによってパーミッションを素早く設定できます。
rwxr-xr-x
は 755 と表現されることができます
(全ての文字はビットに対応します:---
は 0、--x
は 1、-w-
は 2 、-wx
は 3 というように)。
難しく見えるかもしれませんが、ちょっと使い込めばすぐ理解
できると思います。 root (スーパーユーザ) は全てのユーザのファイル権限
を変更できます。RMP。
左側は DOS コマンド、右側は対応する Linux のコマンド。
ATTRIB: chmod
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>ATTRIB +R FILE.TXT $ chmod 400 file.txt
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
n/a $ more *.txt *.asc
n/a $ cat section*.txt | less
注意:
*
は Linux 上では便利に使えます:*
は隠しファイルを除く全て
のファイルにマッチします。.*
は全ての隠しファイルにマッチ
(カレントディレクトリ「.
」と、親ディレクトリ「..
」にもマッチ
することに注意!);*.*
は中間か終わりがドットのファイルにマッチし、
p*r
は「peter」と「piper」両方にマッチします。*c*
は「picked」
と「peck」の両方にマッチします。
more
を使用するとき、<SPACE> を押してファイルを読み進め、
「q」で終了します。less
はさらに直観的に扱え、矢印キーを使うことがで
きます。
UNDELETE
は存在しないので、何を削除するまえにも良く考えてくださ
い。
< > >>
のほかにも、Linux は 2>
でエラーメッセージ(stderr)をリダイレクトできます。さらに、
2>&1
は stderr から stdout にリダイレクトし、
1>&2
は stdout から stderr にリダイレクトします。
[]
使い方:
[abc]*
は a、b、c で始まるファイルにマッチします。*[I-N1-3]
は I、J、K、L、M、N、1、2、3 で終わるファイルにマッチします。
lpr
<file> はファイルをバックグラウンドで印刷します。
プリント待ちの状態を調べるには lpq
、プリント待ちの状態から
ファイルを削除する場合は lprm
を使います。
RENAME
は存在しません。つまり、mv *.xxx *.yyy
はできないということです。REN に似たコマンドは以下で入手可能です。
ftp://sunsite.unc.edu/pub/Linux/utils/file
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 は複数のセッションをあなたに与えてくれます。 これは、まるでたくさんのコンピュータを同時に扱っているみたいですね!
su - <loginname>
とタイプします。例えば
su - root
。これは root でしか実行できないタスクを実行したいとき
などに役に立ちます。
exit
とタイプします。これによって停止された
プロセス(後を参照)があれば警告がでます。
&
」
をコマンドラインの終わりに付け足します。
$ progname [-switches] [parameters] [< input] [> output] &
[1] 123
シェルはプロセスをジョブ番号と(例: [1]
; 下を参考)、
PID 番号(Process Identification Number; 上記の例では 123 )で認識します。
ps ax
と
タイプします。これは現在起動しているプロセスのリストを出力します。
kill <PID>
とタイプします。
どうやればプロセスを正しい方法で終了させるか分からない場合は
プロセスを kill することが必要になるかもしれません。
あなたが root でない限り、ほかのユーザのプロセスを kill することはでき
ません。プロセスは kill -SIGKILL <PID>
によってでしか kill
できないこともあります。
付け加えると、シェルはプロセスを止めたり、一時的にサスペンドしたり、
プロセスをバックグラウンドに送ったり、バックグラウンドから前面に持って来たり
できます。この環境ではプロセスは「ジョブ(job)」と呼ばれます。
jobs
とタイプしま
す。ここではジョブは PID 番号ではなくジョブ番号によって認識されます。
bg <%job
とタイプします(これはジョブになる)。
fg <%job
とタイプします。
最後にバックグラウンドに送られたジョブを最前面に持って来るには単純に
fg
とタイプします。
kill <%job
とタイプします。
<%job の所は 1、2、3 .. のようになります。
これらのコマンドを使うことによってディスクをフォーマットしたり、 たくさんのファイルを zip で圧縮したり、プログラムをコンパイルしたり、 アーカイブを unzip したりしつつ、同じときにプロンプトを自由 に使えます。同じことを Windows 上でやってみてどれだけ パフォーマンスに違いがあるか試してみてください(もちろんクラッシュ しなかったらの話ですが)。
remote.machine.edu
という名前のリモートマシン上でプログラムを実行
するには:
$ telnet remote.machine.edu
ログインの後は好きなプログラムを実行できます。当然ですが、 あなたはリモートマシン上にもアカウントを持っている必要があります。
もしも X11 を持っているならリモートコンピュータ上で X アプリケーショ
ンを実行して、それを自分の X 画面上に表示することもできます。remote.machine.edu
がリモート X コンピュータで local.linux.box
があなたの Linux マ
シンだと想定すると local.linux.box
から remote.machine.edu
にある X プログラムを実行するには以下のようにします:
xterm
か同等のターミナルエミュレータを起動し、
以下のようにタイプします:
$ xhost +remote.machine.edu
$ telnet remote.machine.edu
remote:$ DISPLAY=local.linux.box:0.0
remote:$ progname &
(DISPLAY...
とタイプする代わりに、setenv DISPLAY
local.linux.box:0.0
とタイプする必要があるかもしれません。これは
リモートコンピュータのシェル次第) するとどうでしょう! progname
が remote.machine.edu
で起動され、
あなたのマシン上に表示されます。しかし遅くて使い物にならない
のでこれをモデム間では行わないください。さらに、これは危なっかしく雑
な方法です。「Remote X Apps mini-HOWTO」
http://sunsite.unc.edu/LDP/HOWTO/mini/Remote-X-Apps.html
(日本語訳:
http://www.linux.or.jp/JF/JFdocs/Remote-X-Apps.html)
を読んでみてください。