ここでは、Linuxに実装(または移植)されているコマンドやファイルのうち、 知っておいた方がよいものを列挙した。なお、詳細(および説明がないもの) についてはオンライン・マニュアルを参照して欲しい。
また、--help オプションにより、 簡単な使用法を表示するコマンドも多い。
ちなみに、ブラウザ上では [Ctrl]+[Home] でページの先頭へ、 [Ctrl]+[End] でページの最後に移動することができる。
これらのコマンドは、他のコマンドの出力をパイプでつないでこれらの
入力とすることができる。
使用法 UNIXのコマンドには数多くのオプションがあるのでなかなか覚えきれるものではない。そこで、コマンド+オプションに自分専用の別名を用意しておいて、そのコマンドを実行するようにしておくと便利である。 なお、コマンドラインで設定したエイリアスはログオフすると消えてしまうので、通常は virc を使用して環境設定ファイルに登録しておくようにする。
cat は指定されたファイルの内容を、(内容がテキスト/バイナリにかかわらず)
無条件に標準出力に出すだけなので、以外と使い道がない。内容を表示するだけ
なら フィルタコマンド群が便利である。
複数のファイルを連結して別のファイルを作成(または別ファイルに追加)する
なら cat を使用した方がよいだろう。
UNIXでは、すべてのファイルについてパーミッション(アクセス権限)を
管理して、不正なアクセスを防いでいる。
root@t201 ~$ ll
オプションで -r を指定すると、ディレクトリを再帰的にコピーする。
DOSとは異なり、コピー先がカレントディレクトリの場合でも、明示的に
'.' を指定する必要がある。
使用法:dmesg 起動時(ログイン・プロンプト表示まで)に表示されたメッセージを表示する。dmesg > dmesg.log などとしてファイルに保存すると、ML で質問する時などに役立つ。
使用例:/etc 配下で、ファイル名に 'config' という文字列を
含むファイルを検索する。
root@t201 ~$ find /etc -name '*config*' -print
find には多くのオプションがある。見つかったファイルを対象にあるコマンドを
実行できたりもする。詳細は man find を参照のこと。
使用例:
hotta@ns ~$ file /etc/hosts
zgrep 検索文字列 [圧縮ファイル...]
検索文字列には正規表現が使用できる。正規表現は、vi の内部の検索でも使用される。
使用例:
/usr/include 直下のインクルードファイルの中で、'socket' という
使用例)
hotta@ns ~/test$ cat a.c
:tail [-行数] ファイル
指定したファイルを(-行数を指定すればその行数分)表示する。
指定したプロセスに指定したシグナルを送信する。
シグナル名が省略されるとSIGKILL が選択され、
結果としてプロセスは終了する(SIGKILL は補足できない)。
hotta@ns ~/test$ ps ax|grep tcp
リンクとは、Windows 95 でいうところの「ショートカット」である。
ls には多数のオプションがあるため、詳細は man ls を参照されたい。ここでは
設定済みのエイリアスのみを説明するにとどめる。
通常はオプションなしで実行する。その場合、カレントディレクトリにある
Makefile または makefile を探して、その中を解析・実行する。メイクファイル
の名前は、ls コマンドで先頭に来るので makefile よりは Makefile が好まれる。
以下にメイクファイルのフォーマットを示す。詳細は述べないが、青字のところを
変更するだけでオリジナルのメイクファイルが作れるはずである。あとは
そのまま使ってほしい。
#! Makefile
指定したファイルをページ単位で表示する。
例)mv a b
a というファイル(またはディレクトリ)を b というファイル
(またはディレクトリ)にリネームする。
(カレントディレクトリ配下にある *.c ファイルの中から検索文字列を含む
ファイルを抽出する。
指定したファイルを(-r を指定すれば再帰的に)削除する。
複数のファイルを1つにまとめたファイルのことをアーカイブ(書庫)と呼ぶ。
tar は、UNIX標準のアーカイバである。バックアップ用として普通に
使用される。tarファイルとして /dev/fd0 や /dev/tape などという
デバイスファイルも指定できる。
オプション:
指定したファイルのタイムスタンプを変更する。ファイルがなければ
作成する。
使用法:type コマンド名 which コマンドと同等である。詳細は which コマンドを参照のこと。
ユーザのホームディレクトリにある .bashrc ファイルを vi で開いて
編集モードになる。vi を終了すると自動的に source コマンドを実行して
追加した設定を適用する。vi で直接 .bashrc を編集した場合は source
コマンドを手動で動かさないと適用されないので注意。
使用法:wc [ファイル名....]
使用法:which コマンド名 which コマンドは、B シェル系では /usr/bin/which、csh 系では組み込みコマンドとなっている。これは、使用しているシェルにおいて which which で確認できる。 UNIXには膨大なコマンドがあり、その中には同名のコマンドがあるかもしれないので、慣れないうちはこのコマンドにより実際にはどの(どこにある)コマンドが実行されているかを確認した方がよい。 which コマンドで表示できない場合、または実行しても
と表示される場合は、以下の2つの原因が考えられる。
なお、UNIXシステムではカレントディレクトリにある実行ファイルでも、そこにパスが通っているかまたは ./command のように明示的にコマンドを指定してやらないと実行されない。
引数を付けずに実行すると、エイリアス一覧を表示する。
total 30
drwxr-xr-x 5 root root 1024 Apr 1 17:37 ./
drwxr-xr-x 19 root root 1024 Apr 1 15:44 ../
-rw-r--r-- 1 root root 796 Apr 1 17:31 .bashrc
-rwxr-xr-x 1 root root 78 Apr 1 14:43 .rhosts*
-rw-r--r-- 1 root root 267 Apr 1 16:24 .xinitrc
lrwxrwxrwx 1 root root 9 Apr 1 1997 .xsession -> .Xclients*
drwxr-xr-x 2 root root 1024 Apr 1 16:20 INST18/
-rw-r--r-- 1 root root 2019 Apr 1 17:19 x.err
パーミッションは、左のフラグによって表される。
llコマンドの出力を、左側から順に説明する。
ファイル・パーミッション
フラグ 意味 ファイル種別 - : 通常ファイル
d : ディレクトリ
l : リンク
c : キャラクタデバイス
b : ブロックデバイスオーナの読みとり r : 読みとり可能 オーナの書き込み w : 書き込み可能 オーナの実行 x : 実行可能
ディレクトリの場合は通過可能同一グループ他ユーザの読みとり r : 読みとり可能 同一グループ他ユーザの書き込み w : 書き込み可能 同一グループ他ユーザの実行 x : 実行可能
ディレクトリの場合は通過可能別グループのユーザの読みとり r : 読みとり可能 別グループのユーザの書き込み w : 書き込み可能 別グループのユーザの実行 x : 実行可能
ディレクトリの場合は通過可能以降の項目
忘れた(^_^); ファイルのオーナ ファイルのグループ 使用バイト数 更新月 更新日 更新時刻 ファイル名 '.' : カレントディレクトリ
'..' : 親ディレクトリ
上記以外の'.' で始まるファイル
(ドットファイル)は設定ファイル群であり、
通常のlsコマンド
では表示されない
:cp [オプション] コピー元 [コピー元 ...] コピー先ディレクトリ
/etc/X11/fs/config
/etc/X11/xdm/xdm-config
/etc/sysconfig
/etc/man.config
/etc/pcmcia/config
/etc/pcmcia/config.opts
/etc/hosts: data
hotta@ns ~$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1, stripped
文字列を検索する。
root@t201 ~$ grep socket /usr/include/*.h|more
/usr/include/compat.h:#define S_ISSOCK(m) ((m & 0170000) == 0140000)
/* socket */
/usr/include/resolv.h:#define RES_STAYOPEN 0x00000100 /* Keep TCP sock
et open */
....
/usr/include の1つ下にあるサブディレクトリの中のインクルード
ファイルの中で、'socket' という文字列を検索する。
root@t201 ~$ grep socket /usr/include/*/*.h|more
/usr/include/X11/Xdmcp.h: Equiv to sockaddr* for sockets and netbuf* for STREA
MS. */
/usr/include/X11/Xlib.h: int fd; /* Network socket. */
/usr/include/X11/Xlibint.h: int fd; /* Network socket. */
....
#include
void main(void)
{
char *p = NULL;
*p = 0;
}
hotta@ns ~/test$ cc -g a.c
(cc コマンドでコンパイルする。-g はデバッグオプション。
デフォルトでは a.out という実行ファイルが生成される。)
hotta@ns ~/test$ ls
a.c a.out*
(a.out が生成されている)
hotta@ns ~/test$ ./a.out
(カレントディレクトリにあるファイルであると明示するため、
./ をつけて起動する)
Segmentation fault (core dumped)
(メモリ保護違反で core を出力した)
hotta@ns ~/test$ ls
a.c a.out* core
(core ファイルが作成された)
hotta@ns ~/test$ file core
core: ELF 32-bit LSB core file of 'a.out' (signal 11), Intel 80386, version 1, s
tripped
(ファイルコマンドで core ファイルのプロパティーを表示する。
確かに 'a.out' がシグナル11番を受信して出力したものであることがわかる)
hotta@ns ~/test$ gdb ./a.out core
(デバッガで、異常終了した場所を調べる)
GDB is free software and you are welcome to distribute copies of it
under certain conditions; type "show copying" to see the conditions.
There is absolutely no warranty for GDB; type "show warranty" for details.
GDB 4.16 (i586-unknown-linux), Copyright 1996 Free Software Foundation, Inc...
Core was generated by `./a.out'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/libc.so.5.3.12...done.
Reading symbols from /lib/ld-linux.so.1...done.
#0 0x8048420 in main () at a.c:7
7 *p = 0;
(a.c の7行目にある main() でアクセス違反があったことがわかる)
(gdb) q
(gdb を終了する)
gdb 命令リファレンス
'[]'は省略可能。'|'は選択可能を示す。式とは変数または定数である。
コマンド名は、それが識別できる限り短く省略できる。たとえば、
ブレークポイントの設定を行う breakpoint コマンドは、b と省略できる。
利用できるシグナル名は、/usr/include/asm/signal.h を参照のこと。
シグナル名の指定は、SIGKILL であれば -KILL というふうに 'SIG' は省略する。
(tcpdump コマンドを殺すためにプロセスIDを調べる)
1444 p1 S 0:02 /usr/sbin/tcpdump
1433 p4 R 0:00 grep tcp
hotta@ns ~/test$ kill 1444
(tcpdump コマンドを殺す)
kill: (1444) - Not owner
(プロセスのオーナーでないため殺せない→権限不足)
hotta@ns ~/test$ su
Password:
(スーパーユーザ(システム管理者)に成り変わる)
root@t201 /home/hotta/test$ kill 1444
root@t201 /home/hotta/test$ ps ax|grep tcp
1458 p4 R 0:00 grep tcp
(こんどは正常に殺すことができた)
.EXPORT_ALL_VARIABLES:
CC = gcc
MAKE =make
INCLUDE = ../include
CPP = $(CC) -E $(INCLUDE)
SUBDIRS = rcctrl scsid chaku stubs/rmtcsl
CFLAGS = -I$(INCLUDE) -c -g -Wall -Werror
#CFLAGS = -I$(INCLUDE) -c -g -Wall -Werror -DTRACE_COND=1 -DDEBUG_LOG=1
LDFLAGS =
THIS = Makefile
TARGET = ../exe
OBJS = main.o scsi.o
all: dummy
set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i all; done
ifeq (.depend,$(wildcard .depend))
include .depend
endif
.c.o:
$(CC) $(CFLAGS) -c -o $*.o $<
.Version: $(THIS)
@echo $(THIS) was updated. Makeing 'clean'.
$(MAKE) clean
$(THIS): dummy
dep:
for i in *.c; do $(CPP) -M $$i;done > .tmpdepend
set -e; for i in $(SUBDIRS); do $(MAKE) -C $$i dep; done
mv .tmpdepend .depend
clean:
find /home/hotta \( -name core -o -name '*.o' \) -exec rm {} \;
dummy:
注意事項:
zmore 圧縮ファイル
less [ファイル ...]
zless 圧縮ファイル
tosjis(ファイルのSJISコードへの変換)
vi の使い方については
viエディタの使い方
を参照のこと。
root@t201 ~$ ls /usr
X11@ dict/ games/ lib/ man/ share/
X11R6/ doc/ include/ libexec/ openwin/ src/
bin/ etc/ info/ local/ sbin/ tmp@
(/usr 直下にファイルがいくつあるかを調べる)
root@t201 ~$ ls /usr|wc
18 18 113
(18個あることがわかる)
コマンド名: Command not found.