北海道科学大学工学部情報工学科 松﨑研究室

UNIX/LINUX コマンドの練習

はじめに

ユーザー名を"hus"として記述しています。ホームディレクトリ絶対パスで"/home/hus"であるとします。

ファイル/ディレクトリ操作

pwd

"pwd"は現在作業しているディレクトリを次のように絶対パスで表示します。

pwd
/home/hus

ls

"ls"はファイルとディレクトリの一覧を表示します。ゼミ室の環境ではオプションを付けずに実行すると

ls
rpm/

と表示されます。ディレクトリが 名前の最後に"/"が付いて表示されています。

Unix/Linuxではファイルやディレクトリ名が"."ではじまるものがあります。これらの多くは環境設定などのためのもので、上記の実行例のようにlsとしただけでは表示されません。全てのファイルを表示するには以下のようにオプション"-a"が必要です。

ls -a
.                 .bash_history .bashrc .emacs               .qti18nrc     .xemacs.el
..                .bash_logout  .canna  .emacs-color.el .rpmmacros rpm
.Xdefaults .bash_profile  .cshrc   .emacs.el           .screenrc

詳細な情報を表示するにはオプション"-l"を使います。

ls -l
drwxr-xr-x    7 hus   students     4096 Apr 20  2001 rpm

全てのファイルを表示しつつ、詳細な情報を表示するにはオプション"-a"と"-l"を組み合わせて

ls -a -l

とするか、あるいは

ls -al
合計 120
drwxr-xr-x    6 hus   students     4096 Apr 16 18:13 .
drwxr-xr-x   16 root     root      4096 Apr 15 10:36 ..
-rw-r--r--    1 hus   students     4846 Apr 20  2001 .Xdefaults
-rw-------    1 hus   students     1565 Mar  4 14:41 .bash_history
-rw-r--r--    1 hus   students       24 Apr 20  2001 .bash_logout
-rw-r--r--    1 hus   students      239 Apr 20  2001 .bash_profile
-rw-r--r--    1 hus   students      282 Apr 20  2001 .bashrc
-rw-r--r--    1 hus   students     5509 Apr 20  2001 .canna
-rw-r--r--    1 hus   students      470 Apr 20  2001 .cshrc
-rw-r--r--    1 hus   students      643 Apr 20  2001 .emacs
-rw-r--r--    1 hus   students     6648 Apr 20  2001 .emacs-color.el
-rw-r--r--    1 hus   students    16590 Jul 13  2001 .emacs.el
-rw-r--r--    1 hus   students      118 Apr 20  2001 .qti18nrc
-rw-r--r--    1 hus   students       81 Apr 20  2001 .rpmmacros
-rw-r--r--    1 hus   students     3394 Apr 20  2001 .screenrc
-rw-r--r--    1 hus   students    13359 Apr 20  2001 .xemacs.el
drwxr-xr-x    7 hus   students     4096 Apr 20  2001 rpm
$

とします。各列の意味は下記の通りです。

1列目 ファイルタイプとアクセス権
2列目 ハードリンクの数
3列目 所有者名
4列目 グループ名
5列目 バイト単位のサイズ
6列目 タイムスタンプ(修正月)
7列目 タイムスタンプ(修正日)
8列目 タイムスタンプ(修正時刻または年)
9列目 ファイルまたはディレクトリ名

1列目のファイルタイプとアクセス権について説明します。

drwxrwxrwx

の1文字目ファイルタイプをあらわし、"d"ならディレクトリ、"-"なら普通のファイルとなります。その他にもありますが、ここでは省略します。2文字目以降はアクセス権(パーミッション)をあらわし、"rwx"がこの順番で三つ並んでいるのがわかると思います。左からそれぞれ、user, group, otherのアクセス権(パーミッション)となります。アクセス可の場合、"r"、"w"、"x"が表示されます。不可の場合は"-"が表示されます。たとえばrpmの場合

drwxr-xr-x

となっているので、rpmはディレクトリであり、userはread、write、excute可、groupとotherはreadとexcuteは可、writeは不可となります。つまり、このディレクトリ所有者はこのディレクトリに 対してどのような操作でも行うことがでますが、グループのメンバーやその他はこのディレクトリに移動し、ファイル一覧を見ることはできるが、そのディレクト リ内にファイルやディレクトリを新規に作成したり、削除したり、名前の変更ができないということになります。

cd

"cd"はディレクトリ移動の移動を行います。

現在の作業しているディレクトリをホームディレクトリとします。"pwd"と"ls"で現在の位置とディレクトリの一覧を表示してみましょう。

pwd
/home/hus
ls
rpm/

ディレクトリ"rpm"に移動するには 次のようにします。

cd rpm

では、現在の位置を"pwd"で確認してみましょう。

pwd
/home/hus/rpm

元の位置に戻りましょう。一つ上に上がるには".."を使用します。移動後、"pwd"を実行してみます。

cd ..
pwd
/home/hus

今度は、ディレクトリ"rpm"に移動するのに絶対パスを指定しましょう。

cd /home/hus/rpm
pwd
/home/hus/rpm

相対パスで指定した場合と同じになりましたね。

現在の位置からもう一つ下に移動してみましょう。

ls
BUILD/  RPMS/  SOURCES/   SPECS/   SRPMS/
cd BUILD
pwd
/home/hus/rpm/BUILD

元の位置に戻るにはどのようにしたらよいでしょうか?2段階下に下がったので

cd ../..
pwd
/home/hus

とします。では、相対パスで"/home/hus/rpm/BUILD"に移動してみましょう。

cd rpm/BUILD
pwd
/home/hus/rpm/BUILD

引数に何も指定しないとホームディレクトリへ移動します。

cd
pwd
/home/hus

ホームディレクトリへ 移動の移動は、次のように"~"(チルダ)を使っても可能です。

cd ~

"~"(チルダ)はホームディレクトリをあらわす特別な記号です。現在の位置がホームディレクトリの場合、"/home/hus/rpm/BUILD"へ移動するのに、

cd rpm/BUILD

とするのと、

cd ~/rpm/BUILD

は等価です。あるいは、現在の位置を示す特別なディレクトリ"."を使用して

cd ./rpm/BUILD

としても構いません。現在の位置がホームディレクトリでなくても、

cd ~/rpm/BUILD

あるいは、絶対パス

cd /home/hus/rpm/BUILD

とすれば、"/home/hus/rpm/BUILD"へ移動できます。

mkdir

"mkdir"は新規ディレクトリの作成を行います。

"work"というディレクトリを作成するには、次のようにします。

cd
mkdir work
ls
rpm/  work/

"work"に移動して、さらに"tmp"というディレクトリを作成してみましょう。

cd work
mkdir tmp
ls
tmp/

rmdir

"mkdir"はファイルやディレクトリを含んでいないディレクトリの削除を行います。

先ほど作成した"tmp"というディレクトリを削除するには次のようにします。

rmdir tmp
ls

touch

"touch"はファイルのアクセス時刻と修正時刻の変更を行います。

新規ファイル名を指定して実行すると、以下のように新規にファイルが作成されます。

pwd
/home/hus/work
ls -a
./  ../
touch newfile.txt
ls
newfile.txt

では、作成された"newfile.txt"の日付を"ls -l"を使って確認してみましょう。

ls -l
合計 0
-rw-r--r--    1 hus   students        0 Apr 19 10:21 newfile.txt

オプションを何も指定しないで、ファイルを指定して"touch"を実行する と、現在の時刻に更新されます。

date
2002年 4月19日(金) 10時30分06秒 JST
touch newfile.txt
ls -l
合計 0
-rw-r--r--    1 hus   students        0 Apr 19 10:30 newfile.txt

("date"は現在の時刻を表示します。)

2002年4月1日0時15分6秒に設定したい場合は、オプション"-t"を 使用して次のように実行します。

touch -t 200204010015.06 newfile.txt
ls -l
合計 0
-rw-r--r--    1 hus   students        0 Apr  1 00:15 newfile.txt

cp

"cp"はファイルまたはディレクトリの複製を行います。

"newfile.txt"から"newfile2.txt"を複製するには次のようにします。

cp newfile.txt newfile2.txt
ls
newfile.txt  newfile2.txt

ディレクトリの複製をしてみましょう。まず"dir1"を作成し、"dir2"をファイルの複製のときと同じように実行してみます。

mkdir dir1
ls
dir1/  newfile.txt  newfile2.txt
cp dir1 dir2
cp: `dir1': ディレクトリは対象外です

ディレクトリをファイルと同じように複製しようとすると、上記のようにエラーになります。ディレクトリを複製するにはオプション"-R"か"-r"が必要になります。

cp -r dir1 dir2
ls
dir1/  dir2/  newfile.txt  newfile2.txt

mv

"mv"はファイルまたはディレクトリ名の変更を行います。

ファイル"newfile.txt"を"newfile1.txt"に変更するには次のようにします。

ls
dir1/  dir2/  newfile.txt  newfile2.txt
mv newfile.txt newfile1.txt
ls
dir1/  dir2/  newfile1.txt  newfile2.txt

ディレクトリ"dir2"を"dir3"に変更するには次のようにします。

ls
dir1/  dir2/  newfile1.txt  newfile2.txt
mv dir2 dir3
ls
dir1/  dir3/  newfile1.txt  newfile2.txt

rm

"rm"はファイルまたはディレクトリの削除を行います。

ファイル"newfile2.txt"を削除するには次のようにします。

ls
dir1/  dir3/  newfile.txt  newfile2.txt
rm newfile2.txt
ls
dir1/  dir3/  newfile1.txt

ディレクトリの"dir3"をファイルの削除のときと同じように実行してみます。

ls
dir1/  dir3/  newfile1.txt
rm dir3
rm: `dir3' はディレクトリです

ディレクトリをファイルと同じように削除しようとすると、上記のようにエラーになります。ディレクトリを削除するにはオプション"-R"か"-r"が必要になります。

ls
dir1/  dir3/  newfile1.txt
rm -r dir3
ls
dir1/  newfile1.txt

誤ってファイルやディレクトリを削除しないようにするためのオプション "-i"があります。

ls
dir1/  newfile1.txt
rm -i newfile1.txt
rm: `newfile1.txt' を削除しますか(yes/no)?

ここで、"yes"、"y"あるいは"Y"とタイプし、リター ンキーを押すとファイルが削除されます。それ以外のキータイプしエンターキーを 押す、あるいはエンターキーだけを押した場合は、削除されません。

cat

"cat"はテキストファイルの内容の表示を行います。

あらかじめ、次のようにファイル"/usr/local/tmp/Readme.txt"をディレクトリ"work"にコピーしてください。

pwd
/home/hus/work
cp /usr/local/tmp/Readme.txt .
ls
Readme.txt dir1/  newfile1.txt

"cat"を使用してテキストファイルの内容を表示するには次のように実行します。

cat Readme.txt

"cat"はファイルの最後まで、一気に表示してしまいます。ファイルの先頭から内容を表示したい場合は、"more"か"less"を使います。

more

"more"はテキストファイルの内容を1画面毎に表示します。

次のように実行します。

more Readme.txt

ページを送るにはスペースキーを押します。1行ずつ送るにはエンターキーを押します。終了するには"q"キーを押します。"more"は一度ページあるいは行を送ると、前には戻れません。

less

"less"はテキストファイルの内容を1画面毎に表示します。"moreの"高機能版です。前に戻るなどの豊富な機能が追加されています。

次のように実行します。

less Readme.txt

ページを送るにはスペースキーを押します。1行ずつ送るにはエンターキーあるいは"j"キーを押します。ページを戻るには"b"キーを押します。ページを1行ずつ戻るには"k"キーを押します。終了するには"q"キーを押します。

head

"head"はテキストファイルの内容の先頭数行を表示します。

オプションに何も指定しないと先頭の10行が表示されます。

head Readme.txt
LaTeXの練習です.
TeXファイルのコンパイルはコマンドライン上でplatexで行います.
なおTeXファイルの拡張子は.texでなければなりません。

[matsu@matsu TeX]platex ex.tex
This is pTeX, Version 3.14159-p3.1.5 (euc) (Web2C 7.4.5)
(./ex.tex
pLaTeX2e <2005/01/04>+0 (based on LaTeX2e <2001/06/01> patch level 0)
(/usr/share/texmf/ptex/platex/base/jarticle.cls
Document Class: jarticle 2002/04/09 v1.4 Standard pLaTeX class

表示する行数を指定する場合は、オプション"-n"のあとに行数を記述 するか,あるいは、コマンドの直後にオプション"-"に続けて行数を記述します。5行表示させるには次のように実行します。

head  Readme.txt -n5
LaTeXの練習です.
TeXファイルのコンパイルはコマンドライン上でplatexで行います.
なおTeXファイルの拡張子は.texでなければなりません。

[matsu@matsu TeX]platex ex.tex

あるいは

head -5  Readme.txt
LaTeXの練習です.
TeXファイルのコンパイルはコマンドライン上でplatexで行います.
なおTeXファイルの拡張子は.texでなければなりません。

[matsu@matsu TeX]platex ex.tex

tail

"tail"はテキストファイルの内容の末尾数行を表示します。

オプションに何も指定しないと末尾の10行が表示されます。

tail Readme.txt
・PDF形式ファイルの閲覧

xpdf ファイル名.pdf

・PDF形式ファイルの閲覧(Adobeが配布しているAcroreadの利用)

acroread ファイル名.pdf

なお、Vine Linux 4.0以降は、Postscript形式およびPDF形式ファイルの
デフォルトのViewerはevinceになっています。

表示する行数を指定する場合は、オプション"-n"のあとに行数を記述するか、あるいは、コマンドの直後にオプション"-"に続けて行数を記述します。5行表示させるには次のように実行します。

tail Readme.txt -n5

acroread ファイル名.pdf

なお、Vine Linux 4.0以降は、Postscript形式およびPDF形式ファイルの
デフォルトのViewerはevinceになっています。

あるいは

tail Readme.txt -n5

acroread ファイル名.pdf

なお、Vine Linux 4.0以降は、Postscript形式およびPDF形式ファイルの
デフォルトのViewerはevinceになっています。

chmod

"chmod"はファイルまたはディレクトリのアクセス権の変更を行います。

変更の方法は2種類あります。一つ目は、"u (user)"、"g (group)"、"o (other)"とこれら全てである"a (all)"を指定して、アクセス権を変更します。アクセス可にするには"+"、アクセス不可にするには"-"を使用 します。

二つ目は、数字を使用する方法です。"r (read)"を4、"w (write)"を2、"x (excute)"を1として、アクセス可にするものの数字を足すことで、設定します。

"newfile1.txt"のアクセス権が

ls -l newfile1.txt
-rw-r--r--    1 hus   students        0 Apr 19 11:24 newfile1.txt

"-rw-r--r--"であるとします。ここからotherに対して読まれないようにするには次のように実行します。

chmod o-r newfile1.txt
ls -l newfile1.txt
-rw-r-----    1 hus   students        0 Apr 19 11:24 newfile1.txt

これは次のように実行しても同じです。

chmod 640 newfile1.txt
ls -l newfile1.txt
-rw-r-----    1 hus   students        0 Apr 19 11:24 newfile1.txt

"newfile1.txt"が実行できるファイルで、userのみにexcute権を与えたい場合は次のように実行します。

chmod u+x newfile1.txt
ls -l newfile1.txt
-rwxr-----    1 hus   students        0 Apr 19 11:24 newfile1.txt*

これは次のように実行しても同じです。

chmod 740 newfile1.txt
ls -l newfile1.txt
-rwxr-----    1 hus   students        0 Apr 19 11:24 newfile1.txt*

ところで、"ls"で表示される"newfile1.txt"が"newfile1.txt*"というように、緑色で、ファイル名の最後に"*"がつくようになりました。これは、このファイルにexcute権が付いていることを意味します。なお、この場合の"*"はパターンマッチの"*"とは異なりますので注意してください。

全てに対してreadとexcute権を与えたい場合は次のように実行します。

chmod a+rx newfile1.txt
ls -l newfile1.txt
-rwxr-xr-x    1 hus   students        0 Apr 19 11:24 newfile1.txt*

これは次のように実行しても同じです。

chmod 755 newfile1.txt
ls -l newfile1.txt
-rwxr-xr-x    1 hus   students        0 Apr 19 11:24 newfile1.txt*

grep

"grep"は文字列の検索を行います。

"/usr/local/tmp/Readme.txt"から"eps"という文字列を検索するには次のように実行します。

grep eps Readme.txt
[3] [4] <figure.eps> <figure.eps>
-rw-r--r--    1 matsu    users       81316 Nov 28 10:50 figure.eps
(/usr/share/texmf/tex/latex/base/omscmr.fd) [1] [2] [3] [4] <figure.eps>
<figure.eps> [5] [6] [7] (./ex.aux) )

上記のように、検索対象の文字列を含む行全てを表示します。

wc

"wc"はテキストファイルのバイト数、単語数、行数の表示を行います。

wc Readme.txt
158  415 4959 Readme.txt

左から、行数、文字数、バイト数、ファイル名を出力します。

行数だけを表示するには"-l"を、文字数だけを表示するには"-w"を、バイト数だけを表示するには"-c"をオプションとして指定します。

 wc -l Readme.txt
158 Readme.txt

find

"find"はファイルやディレクトリの検索を行います。

あらかじめ、ホームディレクトリに移動しておいてください。

cd
pwd
/home/hus

現在の位置からファイル、".emacs"を検索するには次のようにします。

find . -name .emacs -print
./.emacs

最初の引数は指定した位置から下を検索することを意味します。ここでは"."を指定しているので、現在地から下を検索することになります。オプション"-name"は検索したいファイル名を指定するためのもので、オプションの引数として".emacs"を渡しています。最後のオプション"-print"は検索結果を表示するためのものです。

パターンマッチを使えば、たとえば、次のように".emacs"ではじまる全てのファイルを検索することもできます。

find . -name ".emacs*" -print
./.emacs  ./.emacs-color.el  ./.emacs.el

その際、上記のようにクォート"´"あるいはダブルクォート"""でファイル名を囲む必要があります。

検索したファイルに対して、コマンドを実行させることもできます。

find . -name Readme.txt -exec cat {} \;
            

オプション"-exec"の引数に、実行させたいコマンドを、さらにそのあとに"{} \;"を記述します(注:"\"は環境によって"\(バックスラッシュ)"か"¥"で表示されます。)オプション"-exec"のかわりに"-ok"を使用すると、次のように実行してよいかどうか確認を求められます。

find . -name Readme.txt -ok cat {} \;
< cat ... ./work/Readme.txt > ?

実行してよければ"y"をタイプ後、エンターキーを、しない場合はエンターキーを押します。

"find"のオプションにはこのほかに、最後にアクセスされた時間やファイルの所有者でファイルを検索するなど、多数のものがあります。

プロセス操作

ps

"ps"はプロセスの状態を表示を行います。

ps
PID       TTY       TIME CMD
21731 pts/2    00:00:00 bash
24400 pts/2    00:00:00 ps

"PID"はプロセス番号、"TTY"はコマンドが実行されたターミナルのタイプ、"TIME"はプロセスの実行時間、"CMD"はコマンド名です。 現在作業しているマシンのすべてのプロセスを表示させたい場合は、オプションとして、"aux"あるいは"-ef"などを指定します。特定のユーザのプロセスを表示させたい場合は、オプション"-u"に引数としてユーザ名を指定します。

kill

"kill"はプロセスの停止を行います。

あらかじめ、バックグラウンドで、"xeyes"(二つの目玉がカーソルを追いかけるソフトです。)を実行しておいてください。

xeyes &
[1] 24505

最初のかぎ括弧で囲まれた数字は、このターミナルにおいてバックグランドで実行されたプロセスの番号で、次の数字はプロセス番号(PID)です。

このプロセスを停止させるには、次のようにプロセス番号(PID)を指定します。

kill 24505
            

バックグラウンドで実行したファイルは、次のように"%"のあとにかぎ括弧で囲まれた数字を引数として指定して停止させることもできます。

kill %1
[1]+  Terminated              xeyes

基本的に、自分が実行者(UID)となっているプロセスしか停止させることができません。

圧縮/展開、アーカイブ

gzip

"gzip"はファイルの圧縮、解凍を行います。

あらかじめ、ファイル"Readme.txt"のあるディレクトリ"work"に移動して、ファイルの大きさを確認しておいてください。

cd work
ls -l Readme.txt
-rw-r--r--    1 hus   students     4959 Apr 19 11:34 Readme.txt

ファイルを圧縮するには次のように実行します。

gzip Readme.txt
ls -l Readme.txt.gz
-rw-r--r--    1 hus   students     1754 Apr 19 11:34 Readme.txt.gz

上記のように、圧縮されたファイルには拡張子".gz"が付きます。この例の場合、約1/3に圧縮されているのがわかります。

圧縮されたファイルを解凍するには次のようにオプション"-d"を使います。

gzip -d Readme.txt.gz
ls -l Readme.txt
-rw-r--r--    1 hus   students     4959 Apr 19 11:34 Readme.txt

bzip2

"bzip2"はファイルの圧縮、解凍を行います。"gzip"よりも圧縮律が高くなることが多いですが、圧縮、解凍にかかる時間が長くなります。

ファイルを圧縮するには次のように実行します。

bzip2 Readme.txt
ls -l Readme.txt.bz2
-rw-r--r--    1 hus   students     2018 Apr 19 11:34 Readme.txt.bz2

上記のように、圧縮されたファイルには拡張子".bz2"が付きます。この例の場合、"gzip"よりも圧縮率が悪くなっています。"bzip2"はファイルがある程度の大きさでなければ、"gzip"よりも圧縮率が高くならないようです。これはファイルの形式や、内容により変わってくるので、実際に圧縮して確かめてみてください。

圧縮されたファイルを解凍するには次のようにオプション"-d"を使います。

bzip2 -d Readme.txt.bz2
ls -l Readme.txt
-rw-r--r--    1 hus   students     4959 Apr 19 11:34 Readme.txt

tar

"tar"はファイルやディレクトリのアーカイブを行います。

"work"にいなければ、"work"に移動しておいてください。

pwd
/home/hus/work
ls
Readme.txt dir1/  newfile1.txt*

"tar"でよく利用されるオプションを下記に示します。

オプション名 内容
c 新しいアーカイブの作成
r アーカイブの最後にファイルを追加
u アーカイブ内の同名のファイルより新しいものの追加
x アーカイブからファイルを抽出
f 引数に指定したアーカイブファイルまたはデバイスの使用
t アーカイブ内容の一覧表示
v 処理したファイルの一覧の詳細表示
z アーカイブのgzipへのフィルター
i アーカイブのbzip2へのフィルター

Readme.txtとnewfile1.txtをarchive.tarというファイルにアーカイブするには次のように実行します。

tar cf archive.tar Readme.txt newfile1.txt
ls
Readme.txt archive.tar  dir1/  newfile1.txt*

オプション"v"をつけると、アーカイブされたファイルの一覧が表示されます。

tar cvf archive.tar Readme.txt newfile1.txt Readme.txt newfile1.txt
ls
Readme.txt archive.tar  dir1/  newfile1.txt*

アーカイブ内容の一覧表示をするには次のように実行します。

tar tf archive.tar
Readme.txt
newfile1.txt

オプション"v"をつけると、次のよう詳細なファイルの情報も表示されます。

tar tvf archive.tar
-rw-r--r-- hus/students 4959 2002-04-19 11:34:33 Readme.txt
-rwxr-xr-x hus/students    0 2002-04-19 11:24:12 newfile1.txt

アーカイブに、新たにファイルを追加するには次のように実行します。ここでは、ディレクトリdir1を追加しています。

tar rf archive.tar dir1
tar tvf archive.tar
-rw-r--r-- hus/students 4959 2002-04-19 11:34:33 Readme.txt
-rwxr-xr-x hus/students    0 2002-04-19 11:24:12 newfile1.txt
drwxr-xr-x hus/students    0 2002-04-19 11:14:25 dir1/

ここでディレクトリ"dir1"に移動してください。アーカイブを展開するには次のように実行します。

cd dir1
pwd
/home/hus/work/dir1
ls
tar xf ../archive.tar
ls
Readme.txt dir1/  newfile1.txt*

"archive.tar"が一つ上のディレクトリにあるので、"archive.tar"に".."を付けてるのに注意してください。

gzipで圧縮されたアーカイブの作成、一覧表示などは次のように実行します。

tar zcf archive.tgz *.txt dir1
ls
Readme.txt archive.tgz dir1/  newfile1.txt*
tar ztf archive.tgz
Readme.txt
newfile1.txt
dir1/

アーカイブのファイル名の拡張子には".tgz"あるいは、".tar.gz"を付けます。ここでは、アーカイブするファイル名指定に、パターンマッチを利用している点に注意してください。

ユーティリティ

man

"man"はオンラインマニュアルページを整形し表示します。

"man"の引数にオンラインマニュアルを参照したいコマンドを指定します。 例えば、"less"のマニュアルを参照したいときは次のように実行します。

man less
          LESS(1)                                                   LESS(1)

NAME
        less - opposite of more
SYNOPSIS
        less -?
        less --help
        less -V
        less --version
        less [-[+]aBcCdeEfgGiImMnNqQrsSuUVwXZ]
              [-b bufs] [-h lines] [-j line] [-k keyfile]
              [-K character set] [-{oO} logfile]
              [-p pattern] [-P prompt] [-t tag]
              [-T tagsfile] [-x tab] [-y lines] [-[z] lines]
              [-# shift] [+[+]cmd] [--] [filename]...
        (See  the OPTIONS section for alternate option syntax with
        long option names.)

DESCRIPTION
        Less is a program similar to more (1),  but  which  allows
        backward movement in the file as well as forward movement.
        Also. less does not have to read  the entire  input  file
:

ページの操作方法は"less"と同じです。

who

"who"は現在のログオン情報の表示を行います。

オプション以外の引数を与えずに実行すると、"who"は現在ログオンしているユーザそれぞれに対して、"ログイン名"、"使っている端末"、"ログインした時刻"、"リモートのホスト名または X のディスプレイの名前"を表示します。

who
hus      pts:0        2008-04-22 09:06 (:0.0)
hiroki   pts/1        2008-04-22 11:19

引数として"am i"を与えて実行すると、"who"を起動したユーザーの名前が、ホスト名を前につけて表示されます。

who am i
hus      pts:0        2008-04-22 09:06 (:0.0)

date

"date"は現在の時刻を表示します。

date
2008年  4月 10日 木曜日 10時30分06秒 JST

echo

"echo"は引数に与えられた文字列を表示します。

echo hus
hus

ネットワーク

ftp

"ftp"はネットワークを介してファイル転送を行います。

まず、リモートホスト(ここでは、ホスト名を"matsu.hus.ac.jp"と仮定)に接続します。

ftp matsu.hus.ac.jp
Connected to matsu.hus.ac.jp.
220 ProFTPD 1.2.1 Server (ProFTPD Basic Configuration) [matsu.hus.ac.jp]
Name (matsu.hus.ac.jp:hus): 

ここでログイン名を入力します。"Name (matsu.hus.ac.jpl:hus):"に示される"hus"でよければ、そのままエンターキーを押します。違うログイン名であれば、それを入力してエンターキーを押します。

331 Password required for hus.
Password:

ここでパスワードを入力し、エンターキーを押します。なお、パスワードを入力しても、画面には何も表示されませんので、注意してください。ログイン名とパスワードともに正しければ、次のようにリモートホストへの接続が成功し、"ftp"コマンドの入力待ち("ftp"セッション)となります。

230 User matsu logged in.
Remote system type is UNIX.
Using binary mode to transfer files.

もし、ログイン名やパスワードを間違って入力し、接続に失敗した場合は次のようにして再度ログイン名とパスワードを入力してください。

530 Login incorrect.
Login failed.
user  (username) hus
331 Password required for hus.
Password:
230 User hus logged in.

"ftp"コマンドの一覧を表示させるには次のようにします。

help
Commands may be abbreviated.  Commands are:
!              debug          mdir           sendport       site
dir            mget           put            size
account        disconnect     mkdir          pwd            status
append         exit           mls            quit           struct
ascii          form           mode           quote          system
bell           get            modtime        recv           sunique
binary         glob           mput           reget          tenex
bye            hash           newer          rstatus        tick
case           help           nmap           rhelp          trace
cd             idle           nlist          rename         type
cdup           image          ntrans         reset          user
chmod          lcd            open           restart        umask
close          ls             prompt         rmdir          verbose
cr             macdef         passive        runique        ?
delete         mdelete        proxy          send

各コマンドの内容を調べるには、"help"の引数にコマンド名を指定します。

help cd
cd              change remote working directory

この例から"cd"はUnix/Linuxコマンドの"cd"と機能的には同じものだとわかります。他のUnix/Linuxコマンドと同じ名前のものも機能的には同じです。リモートホストの操作には、そのままこれらのコマンドを利用すれば良いのですが、ローカルホストの操作には、各コマンドの先頭に"!"を付ける必要があります。cdの場合は、ローカルホスト用の"lcd"も使えます。

それでは、リモートホストのファイル一覧を表示させてみましょう。

ls
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
drwxr-xr-x   7 hus   students     4096 Apr 20  2001 rpm
drwxr-xr-x   3 hus   students     4096 Apr 22 18:00 work
226 Transfer complete.

ディレクトリ"work"に移動してみましょう。

cd work
250 CWD command successful.
ls
200 PORT command successful.
150 Opening ASCII mode data connection for file list.
-rw-r--r--   1 hus   students     4959 Apr 19 11:34 Readme.txt
-rw-r--r--   1 hus   students    10240 Apr 22 18:11 archive.tar
drwxr-xr-x   3 hus   students     4096 Apr 22 18:59 dir1
-rwxr-xr-x   1 hus   students        0 Apr 19 11:24 newfile1.txt
226 Transfer complete.

ローカルホストとリモートホストのカレントディレクトリを表示してみましょう。

pwd
257 "/home/hus/work" is current directory.
!pwd
/home/hus

ローカルホストのファイル一覧を表示させてみましょう。

!ls
rpm  work

リモートホストからローカルホストへファイルを取得してみましょう。ファイル取得には"get"を使います。

get archive.tar
local: archive.tar remote: archive.tar
200 PORT command successful.
150 Opening BINARY mode data connection for archive.tar (10240 bytes).
226 Transfer complete.
10240 bytes received in 0.0091 secs (1.1e+03 Kbytes/sec)
!ls
archive.tar rpm work

複数のファイルを取得するには"mget"を使います。ワイルドカードを使って、拡張子が".txt"のファイルを全て取得してみましょう。

mget *.txt
mget Readme.txt?

このように転送して良いかどうか聞かれるので、良ければ"y"キーを入力後エンターキーを押すか、エンターキーのみを押します。転送したくなければ"n"キーを入力後エンターキーを押します。

00 PORT command successful.
150 Opening BINARY mode data connection for Readme.txt (4959 bytes).
226 Transfer complete.
4959 bytes received in 0.000149 secs (4.3e+04 Kbytes/sec)
mget newfile1.txt?
200 PORT command successful.
150 Opening BINARY mode data connection for newfile1.txt.
226 Transfer complete.
!ls
Readme.txt  archive.tar  newfile1.txt  rpm  work

いちいち、転送許可の確認をしたく無い場合はあらかじめ"prompt"と入力しておきます。

prompt
mget *.txt
local: Readme.txt remote: Readme.txt
200 PORT command successful.
150 Opening BINARY mode data connection for Readme.txt (4959 bytes).
226 Transfer complete.
4959 bytes received in 0.00015 secs (4.3e+04 Kbytes/sec)
local: newfile1.txt remote: newfile1.txt
200 PORT command successful.
150 Opening BINARY mode data connection for newfile1.txt.
226 Transfer complete.

ローカルホストからリモートホストへ一つのファイルを転送するには"put"を、複数のファイルを転送するには"mput"を使用します。使用方法は"get"と同じです。試してみてください。

ファイルを転送する際に、転送ファイル形式を指定することができます。転送ファイル形式には"ascii"か"binary"があります。"ascii"は転送ファイル形式をASCII形式にします。これはデフォルト時の設定です。

ascii
200 Type set to A.

"binary"は転送ファイル形式をBINARY形式にします。イメージファイルなどのバイナリファイルを転送する時には必須となります。

binary
200 Type set to I.

セッション中、5分間何も実行しないでいると自動的に切断されてしまいます。

ls
421 No Transfer Timeout (300 seconds): closing control connection.

切断されてしまった場合は、"user"を使用して接続してください。 "ftp"セッションを終了するには、"quit"か"bye" を使います。

bye
221 Goodbye.

"ftp"は入力した文字列がそのままネットワークに流れてしまうので、インターネットを介して接続するときは、"sftp"を使うようにしましょう。

sftp

"sftp"はネットワークを介してセキュアにファイル転送を行います。

"sftp"の使用法は、ほぼ"ftp"と同じです。"ftp"では入力した文字列がそのままネットワークに流れてしまうのに対して、"sftp"では暗号化されて通信が行われます。

"slogin"や "ssh"、そしてこの"sftp"を初めてリモートホストに対して使用するときは下記のメッセージが表示されます。

sftp matsu.hus.ac.jp
Connecting to matsu.hus.ac.jp...
The authenticity of host 'matsu.hus.ac.jp (192.168.121.119)' can't be
established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?

ここで"yes"と入力してエンターキーを押します。そうするとパスワードの入力が求められるので、パスワードを入力します。

Warning: Permanently added 'matsu.hus.ac.jp,192.168.121.119' (RSA)
to the list of known hosts.
hus@matsu.hus.ac.jp's password:

次回からは、次のようになります。

sftp matsu.hus.ac.jp
Connecting to matsu.hus.ac.jp...
hus@matsu.hus.ac.jp's password:

telnet

"telnet"はリモートログインを行います。

リモートホスト(ここでは、ホスト名を "matsu.hus.ac.jp"と仮定)に接続するには次のように実行します。

telnet matsu.hus.ac.jp
Trying 192.168.40.30...
Connected to matsu.hus.ac.jp.
Escape character is '^]'.

Vine Linux 2.1.5 (Calon-Segur)  Kernel 2.2.18-0vl4.2.1 on an i686
login:

ここで、ログイン名を入力します。

login: hus
Password:

ログイン名を入力するとパスワードの入力を求められるのでパスワードを入力します。なお、パスワードを入力しても、画面には何も表示されませんので、注意してください。

Password:

リモートホストからログアウトする場合は"exit"を使用するか、"Ctrl+d"("ctrl"キーと"d"キーを同時に押す)を入力します。

もし、ログイン名やパスワードを間違って入力し、接続に失敗した場合は次のように、数度ログイン名とパスワードの入力が求められ、最後は切断されてしまいます。

telnet matsu.hus.ac.jp
Trying 192.168.40.30...
Connected to matsu.hus.ac.jp.
Escape character is '^]'.

Vine Linux 2.1.5 (Calon-Segur)  Kernel 2.2.18-0vl4.2.1 on an i686
login: hus
Password:
Login incorrect

login: hi
Password:
Login incorrect

login: hir
Password:
Login incorrect

login: hiy
Password:

Login incorrect
Connection closed by foreign host.

"telnet"は入力した文字列がそのままネットワークに流れてしまうので、インターネットを介して接続するときは、"slogin"か、"ssh"を使うようにしましょう。

rlogin

"rlogin"はリモートログインを行います。

最初にログイン名を求められない以外は、基本的に"telnet" と同じです。

rlogin matsu.hus.ac.jp
Password:

リモートホストのホームディレクトリに".rhosts"という名前のファイルを用意し、そのファイルにローカルホスト名とログイン名を続けて記述しておけば、パスワード入力が不要になります。ローカルホスト名が"matsu.hus.ac.jp"で、ログイン名が"hus"であれば、".rhosts"に次のように記述できます。

matsu.hus.ac.jp hus

"rlogin"は入力した文字列がそのままネットワークに流れてしまうので、インターネットを介して接続するときは、"slogin"か、"ssh"を使うようにしましょう。

slogin

"slogin"はセキュアなリモートログインを行います。

"slogin"の使用法は"rlogin"とほぼ同じです。"rlogin"では入力した文字列がそのままネットワークに流れてしまうのに対して、"slogin"では暗号化されて通信が行われます。

"sftp"や "ssh"、そしてこの"slogin" を初めてリモートホストに対して使用するときは下記のメッセージが表示されます。

slogin matsu.hus.ac.jp
Connecting to matsu.hus.ac.jp...
The authenticity of host 'matsu.hus.ac.jp (192.168.40.30)' can't be
established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?

ここで"yes"と入力してエンターキーを押します。 そうするとパスワードの入力が求められるので、パスワードを入力します。

Warning: Permanently added 'matsu.hus.ac.jp,192.168.40.30' (RSA) to
the list of known hosts.
hus@matsu.hus.ac.jp's password:

次回からは、次のようにパスワードの入力だけになります。

slogin matsu.hus.ac.jp
hus@matsu.hus.ac.jp's password:
 

rsh

"rsh"はリモートシェルです。

引数にリモートホスト(ここでは、ホスト名を"matsu.hus.ac.jp"と仮定) だけを指定すれば、"rlogin"と同じ動作をします。

rsh matsu.hus.ac.jp
Password:
 

リモートホスト名の後に、リモートホストで実行したいUnix/Linuxコマンド(とそのオプションや引数)を指定すれば、リモートホストでそのコマンドが実行されます。ただし、"rlogin"で説明した".rhosts"を作成し設定しておく必要があります。次の例はリモートホストで"ls"に引数"work"を付けて実行したものです。

rsh matsu.hus.ac.jp ls work
Readme.txt  archive.tar  dir1  newfile1.txt

"rsh"は入力した文字列がそのままネットワークに流れてしまうので、インターネットを介して接続するときは、"ssh"を使うようにしましょう。

ssh

"ssh"はセキュアなリモートシェルです。

"ssh"の使用法は"rsh"とほぼ同じです。"rsh"では入力した文字列がそのままネットワークに流れてしまうのに対して、"ssh"では暗号化されて通信が行われます。

"sftp"や"slogin"、そしてこの"ssh"を初めてリモートホストに対して使用するときは下記のメッセージが表示されます。

ssh matsu.hus.ac.jp
Connecting to matsu.hus.ac.jp...
The authenticity of host 'matsu.hus.ac.jp (192.168.40.30)' can't be
established.
RSA key fingerprint is xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx.
Are you sure you want to continue connecting (yes/no)?

ここで"yes"と入力してエンターキーを押します。そうするとパスワードの入力が求められるので、パスワードを入力します。

Warning: Permanently added 'matsu.hus.ac.jp,192.168.40.30' (RSA) to
the list of known hosts.
hus@matsu.hus.ac.jp's password:
 

次回からは、次のようにパスワードの入力だけになります。

ssh matsu.hus.ac.jp
hus@matsu.hus.ac.jp's password:
 

もちろん、リモートホストでコマンドを実行させることも可能です。次の例はリモートホストで"who"を実行したものです。

ssh matsu.hus.ac.jp who
hus@matsu.hus.ac.jp's password:
hus      pts:0        2008-04-22 09:06 (:0.0)

リダイレクトとパイプ

標準入力

標準入力をリダイレクトするには"<"を使います。

次の例は"cat"の標準入力にテキストファイル"Readme.txt"をリダイレクトして渡しています。

pwd  /home/hus/work
ls
Readme.txt archive.tgz dir1/  newfile1.txt*
cat < Readme.txt

標準出力

標準出力をリダイレクトするには">"を使います。

次の例は"cat"の標準出力をテキストファイル"text1.txt"にリダイレクトしてしています。

cat Readme.txt > text1.txt
ls
Readme.txt archive.tgz dir1/  newfile1.txt*  text1.txt

この場合、"Readme.txt"を"text1.txt"にコピーするのと同等になります。

次の例は"echo"の標準出力をテキストファイル"text2.txt"にリダイレクトしてしています。

echo hus > text2.txt
ls
Readme.txt archive.tgz dir1/  newfile1.txt*  text1.txt  text2.txt
cat text2.txt
hus

テキストファイルに新たな標準出力を加えるには">>"を使います。

次の例は"echo"の標準出力をテキストファイル"text2.txt"にリダイレクトしてして加えています。

echo hello >> text2.txt
ls
Readme.txt archive.tgz dir1/  newfile1.txt*  text1.txt  text2.txt
cat text2.txt
hus
hello

">>"を使わずに">"を使うと上書きされてしまいます。

cat text2.txt
hus
hello
echo world > text2.txt
cat text2.txt
world

次の例は"cat"の標準入力に"text2.txt"をリダイレクトして渡し、その標準出力をテキストファイル"text3.txt"にリダイレクトしています。

ls
Readme.txt archive.tgz dir1/ newfile1.txt* text1.txt text2.txt
cat < text2.txt > text3.txt
ls
Readme.txt archive.tgz dir1/ newfile1.txt* text1.txt text2.txt text3.txt
cat text3.txt
world

標準エラー出力

標準エラー出力をリダイレクトするには">&"を使います。 標準出力も同時にリダイレクトされます。

次の例は"ls"の出力を">"でテキストファイルへリダイレクトしています。

ls
Readme.txt archive.tgz dir1/ newfile1.txt* text1.txt text2.txt text3.txt
ls text?.txt aaa
ls: aaa: そのようなファイルやディレクトリはありません
text1.txt  text2.txt  text3.txt
ls text?.txt aaa > text4.txt
ls: aaa: そのようなファイルやディレクトリはありません
cat text4.txt
text1.txt  text2.txt  text3.txt

この場合、正常な出力は"text4.txt"へリダイレクトされ、エラー出力は画面に表示されています。 ">"の代わりに">&"を使用すると次のようになります。

ls text?.txt aaa >& text5.txt
cat text5.txt
ls: aaa: そのようなファイルやディレクトリはありません
text1.txt  text2.txt  text3.txt  text4.txt

今度はエラー出力も一緒に"text5.txt"へリダイレクトされています。

パイプ

パイプ"|"はコマンドの標準出力や標準エラー出力を次のコマンドの標準入力へ渡します。

次の例は"ps -ef"の標準出力をパイプ"|"を通して、"less"の標準入力へ渡しています。

ps -ef | less
            

tee

"tee"は標準入力から読んだ内容を標準出力とファイルに書き出します。

次の例では、まず"ls *.txt"の標準出力をパイプ"|"を通して、"tee"の標準入力へ渡しています。 次に"tee"は"ls"の出力結果を標準出力としてパイプ"|"を通して"wc -l"へ渡し、同時に、ファイル"lsout"へ書き出しています。最後に、"wc -l"の結果が表示されています。 "ls"

cd ~/work
pwd
/home/hus/work
ls
Readme.txt   dir1/          text1.txt  text3.txt  text5.txt
archive.txt  newfile1.txt*  text2.txt  text4.txt
ls *.txt
Readme.txt   newfile1.txt*  text2.txt  text4.txt
archive.txt  text1.txt      text3.txt  text5.txt
ls *.txt | tee lsout | wc -l
8
cat lsout
Readme.txt
archive.txt
newfile1.txt
text1.txt
text2.txt
text3.txt
text4.txt
text5.txt

コマンド連続実行

コマンド連続実行の例を示します。

";"を使用した例です。"ls"の後に"pwd"を実行しています。

cd
cd work
ls ; pwd
Readme.txt   dir1/  newfile1.txt*  text2.txt  text4.txt
archive.tgz  lsout  text1.txt      text3.txt  text5.txt
/home/hus/work

"&&"を使用した例です。"ls text1.txt"の後に "pwd"を実行しています。

ls text1.txt && pwd
text1.txt
/home/hus/work

最初の"ls text1.txt"が正常に実行されたので、続く"pwd"が実行されています。

次に示す例のように、"ls"でエラーが出るようにすると、続く"pwd"は実行されません。

ls aaa && pwd
ls: aaa: そのようなファイルやディレクトリはありません

"||"を使用した例です。"ls text1.txt"の後に "pwd"を実行するようにしています。

ls text1.txt || pwd

この場合、"ls text1.txt"が正常に実行されたので、続く"pwd"が実行されていません。

次に示す例のように、"ls"でエラーが出るようにすると、続く"pwd"が実行されます。

ls aaa || pwd
ls: aaa: そのようなファイルやディレクトリはありません
/home/hus/work

サブシェル

サブシェルの使用例を示します。

現在のディレクトリからサブシェルを使用して1つ上のディレクトリへ上がって"pwd"を実行します。

cd
cd work
pwd
/home/hus/work
(cd ..; pwd)
/home/hus
pwd
/home/hus/work

サブシェルではカレントディレクトリが"/home/hus"と表示されていますが、元のシェルのカレントディレクトリは変化していません。

"tar"を使用して、別のディレクトリのファイルやディレクトリをカレントディレクトリにコピーする例を示します。

pwd ; ls text?.txt
/home/hus/work
text1.txt  text2.txt  text3.txt  text4.txt  text5.txt
mkdir dir2
cd dir2
pwd ; ls
/home/hus/work/dir2
(cd .. ; tar cf - text?.txt) | tar xf -
ls
text1.txt  text2.txt  text3.txt  text4.txt  text5.txt

"tar"でアーカイブのファイル名に"-"を指定すると、標準入出力に入出力されます。上記の例は次の順で実行されています。

  1. サブシェルで"cd .."を行い一つ上のディレクト リに移動する。
  2. サブシェルで"tar cf -"が "text?.txt"をアーカイブし標準出力へ渡す。
  3. 標準出力に渡されたアーカイブがパイプを介して元のシェルの "tar xf -"の標準入力に渡され、展開される。

コマンド展開

コマンド展開の例を示します。

次の例はカレントディレクトリの1つ上のディレクトリの"text3.txt"、"text4.txt"、"text5.txt"を"ls"で表示し、その結果を"cat"の引数として渡しています。

pwd ; ls ..
/home/hus/work/dir2
Readme.txt   dir1/  lsout          text1.txt  text3.txt  text5.txt
archive.txt  dir2/  newfile1.txt*  text2.txt  text4.txt
cat `ls ../text[3-5].txt`
world
text1.txt
text2.txt
text3.txt
ls: aaa: そのようなファイルやディレクトリはありません
text1.txt
text2.txt
text3.txt
text4.txt

上記の例は

cat ../text[3-5].txt
world
text1.txt
text2.txt
text3.txt
ls: aaa: そのようなファイルやディレクトリはありません
text1.txt
text2.txt
text3.txt
text4.txt

と等価です。

特殊文字のエスケイプ

特殊文字のエスケイプの例を示します。

次の例は特殊文字ダブルクォート"""を出力しようとして失敗した例です。

echo "
> "

ダブルクォートは必ず対になっていなければならないので、閉じるダブルクォートの入力待になっています。この状態からぬけだすには、Ctrl+Cを入力するかダブルクォートを入力した後、エンターキーを入力します。

次のようにエスケイプ文字を使用するとダブルクォートを出力できます。

echo \"
"

次の例は特殊文字シングルクォート"'"とダブルクォート"""で特殊文字"*"をエスケイプした例です。

pwd ; ls
/home/hus/work/dir2
text1.txt  text2.txt  text3.txt  text4.txt  text5.txt
ls *
text1.txt  text2.txt  text3.txt  text4.txt  text5.txt
ls '*'
ls: *: そのようなファイルやディレクトリはありません
ls "*"
ls: *: そのようなファイルやディレクトリはありません

次の例はシングルクォートとダブルクォートの違いを示したものです。

echo $HOME
/home/hus
echo '$HOME'
$HOME
echo "$HOME"
/home/hus

"HOME"はホームディレクトリを示すシェルの環境変数です。これに特殊文字"$"を付けると、"HOME"の内容をコマンドに渡して使用できるようになります。シングルクォートでは特殊文字"$"がエスケイプされていますが、ダブルクォートではエスケイプされていません。