UNIXコマンド概説

ここでは、Linuxに実装(または移植)されているコマンドやファイルのうち、 知っておいた方がよいものを列挙した。なお、詳細(および説明がないもの) についてはオンライン・マニュアルを参照して欲しい。

また、--help オプションにより、 簡単な使用法を表示するコマンドも多い。

ちなみに、ブラウザ上では [Ctrl]+[Home] でページの先頭へ、 [Ctrl]+[End] でページの最後に移動することができる。


   <目次>

  1. 自作コマンド/シェルスクリプト・エイリアス
  2. ユーザ・コマンド
    1. ユーザ環境設定
    2. ファイル関連
    3. ディレクトリ関連
    4. フィルタ・コマンド
    5. プログラム開発関連
    6. ネットワーク操作関連
    7. システム管理者用コマンド
  3. 設定ファイル
  4. カーネル検査用ファイル(/proc ファイルシステム)

  1. 自作コマンド/シェルスクリプト・エイリアス

    1. toeuc(ファイルのEUCコードへの変換)
    2. tosjis(ファイルのSJISコードへの変換)
    3. pktdump(リモコン電文解析ツール)
    4. virc(シェル環境設定用ファイルの編集と適用)

  2. ユーザ・コマンド

    1. ユーザ環境設定

      1. alias(コマンドの別名定義)
      2. env(環境変数一覧の表示)
      3. export(環境変数の設定/表示:B シェル系)
      4. reset(端末の再初期化)
      5. set(シェル変数の設定/表示)
      6. setenv(環境変数の設定/表示:C シェル系)
      7. type(コマンド実体の表示)
      8. which(コマンド実体の表示)
      9. whoami(現在のユーザ名を表示)

    2. ファイル関連

      1. ls(ファイル名の一覧表示)
      2. cp(ファイルのコピー)
      3. mv(ファイルの移動)
      4. rm(ファイルの削除)
      5. cat(ファイル内容の表示、ファイル連結)
      6. chmod(ファイルのパーミッション変更)
      7. ln(リンクの作成)
      8. file(ファイル・プロパティの表示)
      9. find(ファイルの検索)
      10. touch(空ファイルの作成、タイムスタンプ変更)

    3. ディレクトリ関連

      1. pwd(カレントディレクトリの表示)
      2. mkdir(ディレクトリの作成)
      3. rmdir(ディレクトリの削除)
      4. df(ファイルシステム毎の容量表示)
      5. du(ディレクトリ毎の容量表示)

    4. フィルタ・コマンド

      これらのコマンドは、他のコマンドの出力をパイプでつないでこれらの 入力とすることができる。

      1. head/tail (標準入力/ファイル内容の先頭/末尾部分の表示)
      2. sort(標準入力のソート)
      3. uniq(標準入力のうちの重複行を削除)
      4. more/less (標準入力/ファイル内容のページ単位の表示)
      5. wc(標準入力の行数、単語数、バイト数のカウント)
      6. grep(文字列の検索)
      7. od(ファイルのダンプ)
      8. xargs(標準入力よりコマンドラインを作成、実行)

    5. プログラム開発関連

      1. make(コンパイル/リンクの自動実行)
      2. gdb(デバッガ)
      3. kill(プロセスを終了させる)
      4. lha(DOS標準の圧縮機能付きアーカイバ)
      5. tar(UNIX標準の圧縮機能付きアーカイバ)
      6. diff(テキストファイルの差分表示)
      7. ipcs(プロセス間通信用資源の一覧表示)
      8. sleep(秒単位のスリープ)

    6. ネットワーク関連

      1. ping(ネットワークホストの診断)
      2. traceroute(ネットワーク経路の表示)
      3. rcp(リモートコピー)
      4. rlogin(リモートログイン)
      5. telnet(仮想端末)
      6. netstat(ソケット状態表示)

    7. その他

      1. man(オンライン・マニュアル表示)
      2. echo(文字列の表示)
      3. su(ログインユーザの変更)
      4. zdiff(圧縮ファイル対象のdiff)
      5. zgrep(圧縮ファイル対象のgrep)
      6. zmore/zless(圧縮ファイル対象のmore/less)

  3. システム管理コマンド

    1. adduser(新規ユーザの登録)
    2. chsh(シェルの変更)
    3. date(日付/時刻の表示、設定)
    4. dmesg(カーネルメッセージの表示)
    5. mount(ファイルシステムのマウント状態表示/設定)
    6. umount(ファイルシステムのアンマウント)
    7. free(メモリ使用状況の表示)
    8. ps(プロセス一覧の表示)
    9. top(プロセス一覧のリアルタイム表示)
    10. passwd(ログインパスワードの変更)
    11. /sbin/fdisk(ディスク・パーティション・テーブルの表示/編集)
    12. /sbin/halt(システムの停止)
    13. /sbin/reboot(システムの再起動)
    14. /sbin/ifconfig(ネットワークインターフェースの表示/設定)
    15. /usr/local/sbin/tcpdump(ネットワーク・パケット解析)
    16. vi(スクリーン・エディタ)

  4. 設定ファイル

    1. /etc/hosts(IPアドレスとホスト名の対応表)
    2. /etc/fstab(ファイルシステムのマウント設定)
    3. /etc/smb.conf(Samba(LanManager 互換サーバ)用設定)

  5. カーネル検査用ファイル(/proc ファイルシステム)

    以下のファイルはカーネル内部の状態を表示するコマンドとして、 cat filename という使い方をする。

    1. /proc/cpuinfo(CPU情報)
    2. /proc/dma(DMA割り当て状況)
    3. /proc/filesystems(サポート中ファイルシステム)
    4. /proc/interrupts(IRQ割り当て状況)
    5. /proc/ioports(IOポート割り当て状況)
    6. /proc/version(OSのバージョン情報)
    7. /proc/net/arp(ARPテーブル)
    8. /proc/プロセスID(各プロセス毎の管理情報)

alias(コマンドの別名定義)

使用法

  • (B シェル系) alias [別名='実際に実行するコマンド']
  • (C シェル系) alias [別名 実際に実行するコマンド]

UNIXのコマンドには数多くのオプションがあるのでなかなか覚えきれるものではない。そこで、コマンド+オプションに自分専用の別名を用意しておいて、そのコマンドを実行するようにしておくと便利である。

なお、コマンドラインで設定したエイリアスはログオフすると消えてしまうので、通常は virc を使用して環境設定ファイルに登録しておくようにする。
引数を付けずに実行すると、エイリアス一覧を表示する。

cat(ファイル内容の表示、ファイル連結)

使用法:cat ファイル [ファイル ...] [> ファイル]

cat は指定されたファイルの内容を、(内容がテキスト/バイナリにかかわらず) 無条件に標準出力に出すだけなので、以外と使い道がない。内容を表示するだけ なら フィルタコマンド群が便利である。

複数のファイルを連結して別のファイルを作成(または別ファイルに追加)する なら cat を使用した方がよいだろう。

chmod(ファイルのパーミッション変更)

使用法:chmod パーミッション文字列 ファイル ...

UNIXでは、すべてのファイルについてパーミッション(アクセス権限)を 管理して、不正なアクセスを防いでいる。

root@t201 ~$ ll

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(ファイルのコピー)

使用法:cp [オプション] コピー元 コピー先
    :cp [オプション] コピー元 [コピー元 ...] コピー先ディレクトリ

オプションで -r を指定すると、ディレクトリを再帰的にコピーする。

DOSとは異なり、コピー先がカレントディレクトリの場合でも、明示的に '.' を指定する必要がある。

dmesg(カーネルメッセージの表示)

使用法:dmesg

起動時(ログイン・プロンプト表示まで)に表示されたメッセージを表示する。dmesg > dmesg.log などとしてファイルに保存すると、ML で質問する時などに役立つ。

find(ファイルの検索)

使用法:find 検索開始ディレクトリ -name 'ファイル名称  -print

使用例:/etc 配下で、ファイル名に 'config' という文字列を 含むファイルを検索する。

root@t201 ~$ find /etc -name '*config*' -print
/etc/X11/fs/config
/etc/X11/xdm/xdm-config
/etc/sysconfig
/etc/man.config
/etc/pcmcia/config
/etc/pcmcia/config.opts

find には多くのオプションがある。見つかったファイルを対象にあるコマンドを 実行できたりもする。詳細は man find を参照のこと。

file(ファイル・プロパティの表示)

使用法:file ファイル

使用例:

hotta@ns ~$ file /etc/hosts
/etc/hosts: data
hotta@ns ~$ file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1, stripped

grep(文字列の検索)

使用法:grep  検索文字列 [ファイル...]

    zgrep  検索文字列 [圧縮ファイル...]

検索文字列には正規表現が使用できる。正規表現は、vi の内部の検索でも使用される。

使用例:

  /usr/include 直下のインクルードファイルの中で、'socket' という
  文字列を検索する。
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. */
....

gdb(デバッガ)

使用法:gdb 実行ファイル [coreファイル]

使用例)

hotta@ns ~/test$ cat a.c
#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 と省略できる。

  1. コマンド入力方法

    コマンドヒストリーの呼び出し
    1文字戻る
    1文字進む
    ctrl + a
    その行の先頭にカーソルを移動
    ctrl + e
    その行の末尾にカーソルを移動

  2. 実行制御(running)

    breakpoint [関数名]|[ソースファイル名:]行番号|相対アドレス
    ブレークポイントの設定
    where
    スタック(関数の呼び出し状態)の表示
    run [引数...]
    プログラムの実行(最初から再開)
    continue
    プログラムの(ブレークポイントからの)続行
    step
    次の1行を実行。関数には入らない。
    next
    次の1行を実行。関数にも入る。
    signal シグナル番号
    シグナルを与えてプログラムを続行。 結果的に、(あれば)シグナルハンドラ関数へ飛ぶ。
    quit
    gdb を終了する。

  3. データ表示(data)

    whatis データ名
    データのデータタイプを表示
    ptype データタイプ
    データタイプの定義を表示
    p[rint] 式
    式の値を表示
    printf "フォーマット文字列" [式 ...]
    式の値を printf() の形式で表示
    display [式]
    プログラムが停止する度に式の値を表示。引数を省略すると、 現在の display 設定状況を表示。
    delete display 式の番号
    display 設定式を削除
    x/[数字]xb メモリアドレス
    メモリ内容の表示。数字は表示したいバイト数。 変数実体の内容を表示するには、メモリアドレスとして 変数名の前に '&' をつけて渡してやる。

head/tail(標準入力/ファイル内容の先頭/末尾部分の表示)

使用法:head [-行数] ファイル

    :tail [-行数] ファイル

指定したファイルを(-行数を指定すればその行数分)表示する。

kill(プロセスを終了させる)

使用法:kill [-シグナル名] プロセスID [プロセスID...]

指定したプロセスに指定したシグナルを送信する。 シグナル名が省略されるとSIGKILL が選択され、 結果としてプロセスは終了する(SIGKILL は補足できない)。
利用できるシグナル名は、/usr/include/asm/signal.h を参照のこと。 シグナル名の指定は、SIGKILL であれば -KILL というふうに 'SIG' は省略する。

hotta@ns ~/test$ ps ax|grep tcp
  (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
  (こんどは正常に殺すことができた)

ln(リンクの作成)

使用法:ln [-fs] ファイル実体 リンクファイル

リンクとは、Windows 95 でいうところの「ショートカット」である。

ls(ファイル名の一覧表示)

使用法:ls [オプション] [ファイル名]

ls には多数のオプションがあるため、詳細は man ls を参照されたい。ここでは 設定済みのエイリアスのみを説明するにとどめる。

  • ls ‥‥ ls -F のエイリアス。ディレクトリはファイル名の末尾に '/'、 実行ファイルは '*'、リンクには '@' をつけて表示する。
  • la ‥‥ ls -a のエイリアス。ls で表示されない隠しファイル ('.' で始まるファイル。ドットファイルと呼ぶ)も表示する。
  • ll ‥‥ ls -la のエイリアス。各ファイルの詳細情報を表示する。
make(コンパイル/リンクの自動実行)

使用法:make [オプション]

通常はオプションなしで実行する。その場合、カレントディレクトリにある Makefile または makefile を探して、その中を解析・実行する。メイクファイル の名前は、ls コマンドで先頭に来るので makefile よりは Makefile が好まれる。 以下にメイクファイルのフォーマットを示す。詳細は述べないが、青字のところを 変更するだけでオリジナルのメイクファイルが作れるはずである。あとは そのまま使ってほしい。

#! Makefile

.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:

注意事項:

  • 各行はかならず1カラム目から書く。
  • ただし、インデントされているところは[Tab]で進める。[Space]は不可。
  • '#' 以降はコメントとみなされる。
  • DOSのエディタは使わない。改行コードが異なるのでエラーとなる。

INCLUDE
カレントディレクトリおよびシステムのインクルードディレクトリ以外に あるヘッダファイルを参照したい場合に、そのディレクトリ名を指定する。

SUBDIRS
ディレクトリが階層化されていて、各ディレクトリにメイクファイルが ある場合、ここにカレントからのディレクトリのパスを並べて書けば、 make が自動的にそれらのサブディレクトリにもぐってゆき、 各サブディレクトリの Makefile を再帰的に実行する。これにより、 トップディレクトリで make とやれば、そべての実行ファイルを作成 できる。

TARGET
このメイクファイル自身が作成するべき実行 ファイル(ターゲット)名。

OBJS
このメイクファイル自身が作成するべき実行 ファイル(ターゲット)を構成するオブジェクトファイル名。リンカは これらをリンクして TARGET を作成しようとする。

CFLAGS
Cコンパイラに渡すオプション。特に変更する必要はないが、デバッグ オプションを付ける場合は -Dxxxx=1 などを追加する。

FIND オプション
別に必須ではないが、このディレクトリをきちんと指定しておけば、 make clean とやればカレント配下のすべての .o ファイル (オブジェクトファイル)と core ファイル(アプリが不正なメモリに アクセスしたときなどに作成される。デバッグ時は大変便利)を 削除してくれる。
man(オンライン・マニュアル表示)
使用法:man コマンド名
more/less(標準入力/ファイル内容のページ単位の表示)

使用法:more [ファイル ...]
    zmore 圧縮ファイル
    less [ファイル ...]
    zless 圧縮ファイル

指定したファイルをページ単位で表示する。

mv(ファイルの移動)

使用法:mv [オプション] 移動元 移動先

例)mv a b

a というファイル(またはディレクトリ)を b というファイル (またはディレクトリ)にリネームする。

od(ファイルのダンプ)

使用法:od -x [ファイル]

xargs(標準入力からコマンドラインを作成し、それを実行)

使用法:find . -name \*.c|xargs grep 検索文字列

(カレントディレクトリ配下にある *.c ファイルの中から検索文字列を含む ファイルを抽出する。

rm(ファイルの削除)

使用法:rm [-r] ファイル [ファイル ...]

指定したファイルを(-r を指定すれば再帰的に)削除する。

tar(UNIX標準の圧縮機能付きアーカイバ)

使用法:tar [c|x|t]v[z]f  tarファイル

複数のファイルを1つにまとめたファイルのことをアーカイブ(書庫)と呼ぶ。 tar は、UNIX標準のアーカイバである。バックアップ用として普通に 使用される。tarファイルとして /dev/fd0 や /dev/tape などという デバイスファイルも指定できる。

オプション:

c‥‥tarファイルの作成
tar ファイルを無条件に作成し、あれば上書きする。拡張子は慣習的に .tar とする。UNIXの開発でよく発生する事故は、 テープからバックアップファイルを復元するのに、間違えて c オプションを 指定してしまい、バックアップを破壊してしまうというものである。 c オプションを使うときには注意すること。
x‥‥tarファイルの展開
tar ファイルをカレントディレクトリ配下に展開する。
t‥‥tarファイルの内容表示
x オプションを使用する前に、t オプションで内容を確認する習慣を つけておくとよい。
z‥‥圧縮指定
圧縮ファイルを指定する。拡張子は慣習的に .tar.gz とする。 DOSに渡す場合は .tgz とする。

touch(空ファイルの作成、タイムスタンプ変更)

使用法:touch [オプション] ファイル名 [ファイル名 ...]

指定したファイルのタイムスタンプを変更する。ファイルがなければ 作成する。

toeuc(ファイルのEUCコードへの変換)
tosjis(ファイルのSJISコードへの変換)
使用法:toeuc(tosjis) ファイル名(ワイルドカードも使用可)

type(コマンド実体の表示)

使用法:type コマンド名

which コマンドと同等である。詳細は which コマンドを参照のこと。

virc(シェル環境設定用ファイルの編集と適用)

使用法:virc

ユーザのホームディレクトリにある .bashrc ファイルを vi で開いて 編集モードになる。vi を終了すると自動的に source コマンドを実行して 追加した設定を適用する。vi で直接 .bashrc を編集した場合は source コマンドを手動で動かさないと適用されないので注意。
vi の使い方については
viエディタの使い方 を参照のこと。

wc(標準入力の行数、単語数、バイト数のカウント)

使用法:wc [ファイル名....]

使用例:
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個あることがわかる)
which(コマンド実体の表示)

使用法:which コマンド名

which コマンドは、B シェル系では /usr/bin/which、csh 系では組み込みコマンドとなっている。これは、使用しているシェルにおいて which which で確認できる。

UNIXには膨大なコマンドがあり、その中には同名のコマンドがあるかもしれないので、慣れないうちはこのコマンドにより実際にはどの(どこにある)コマンドが実行されているかを確認した方がよい。

which コマンドで表示できない場合、または実行しても

   コマンド名: Command not found.

と表示される場合は、以下の2つの原因が考えられる。

  • 存在しないコマンド名を指定した。
  • そのコマンドがあるディレクトリへパスが通っていない。

なお、UNIXシステムではカレントディレクトリにある実行ファイルでも、そこにパスが通っているかまたは ./command のように明示的にコマンドを指定してやらないと実行されない。

戻る