UNIXコマンド・操作

メモのために作成したものです.ワークステーション仕様がところどころに残っています.

システムとの対話

コマンドは,%コマンド, [オプション], (引数)で構成されている.

date 今日の日付を表示

cal カレンダーを表示(例 calだけの場合今月を表示,cal 1900の場合1年間を表示)

who loginしているユーザ名を表示

write 他のユーザにメッセージを送信

mesg メッセージ送信を拒否または再開

bc 電卓機能

man 英文のマニュアルを表示(例 man date)

jman 日本語マニュアルを表示

pg 一画面ごとに区切って表示

ディレクトリ(階層構造,操作)

階層型ディレクトリを作成したり,ファイル一覧を表示させたり,削除したりするためのコマンドは以下の通りである.

pwd ワーキングディレクトリの表示 (Print Working Directory)

ls ディレクトリ内容の表示

オプション -l を付加すると詳細情報を表示する.

cd ワーキングディレクトリの変更(Change Directory).

cd kekka

mkdir ディレクトリの作成

mkdir kekka

rmdir ディレクトリの削除(空の場合),

中身がある場合は,rmdir -rで削除可能

mv ディレクトリ名の変更(MoVe)

mv abc.dat abc1.dat

階層型ディレクトリ

ファイル構造

ls -lコマンドで表示されるファイル一覧の第1カラムにファイルのタイプが表示される.第2カラム以降には,ファイルのアクセス権が表示される.

% ls -l

total 9

-rw-r--r-- 1 p4080 191727 Jun 27 1993 3blm

-rw-r--r-- 1 p4080 47838 Jun 23 1993 3blm.mop

-rw-r--r-- 1 p4080 116964 Jun 28 1993 6LYZ

-rw-r--r-- 1 p4080 52164 Jun 28 1993 9INS

drw-rw-rw- 1 p4080 1947 Dec 9 1993 usr/

-rw-r--r-- 1 p4080 35111 Feb 23 1994 DAOUT

-rw-r--r-- 1 p4080 32723 Dec 9 1993 DAOUT.zzz

drwxr-xr-x 1 p4080 512 Apr 5 1993 lm/

-rw-r--r-- 1 p4080 0 Apr 5 1993 IN

%

_ 通常のファイル

d ディレクトリファイル

r 読み出し権

w 書き込み権

x 実行権


ファイル名

英大文字と英小文字は区別される

先頭の文字がドットで始まるファイル名はシステムが特別なファイル(動作環境設定ファイルなど)として取り扱う.

例 .login, .cshrc, .profileなど

.c .h .f .s .p .o などで終わるファイル名は以下に示す内容のファイルであるため一般のファイル名としては使用できない.

aaa.c C言語ファイル

bbb.h Cヘッダファイル

ccc.f FORTRANファイル

ddd.s アセンブラ言語ファイル

eee.p PASCAL言語ファイル

fff.o オブジェクトファイル


ファイル操作

cat ファイルの作成,表示,連結

% cat test.f test.fが存在しない場合キーボードからの入力を読み込む

c test program

do 10 i=1,9

do 10 j=1,9

k-i*j

print *, k

10 continue

stop

end

%

% cat abc cba ファイルabcとファイルcbaを連結する

% cat test.f 既存ファイルtest.fを表示する

less catはファイル全体を一挙に表示する.lessは画面をスクロール表示する.

more catはファイル全体を一挙に表示する.moreは一部つづ表示する.

head 指定ファイルの最初の部分の表示

tail 指定ファイルの最後の部分の表示

pg 1画面ごとに表示

cp ファイルの複写

% cp test.f test.tmp

mv ファイルの移動(ファイル名変更)

% mv test.f mydocmnt 別のディレクトリに移動

% mv test.f myprg.f ファイル名の変更

rm ファイルの消去

grep パターンによるファイルの検索

grep [-cilv] ‘検索文字列’ [filename・・・・]

[オプション]

-c マッチングに成功した行の数を表示する.

-i マッチングの際に英大文字と小文字の区別をしない.

-l 検索文字列を含むファイルのファイル名を出力する.

-v 検索文字列を含まない行を表示する.

下記の例はSCFを含む行を検索して表示する.正規表現(後述)も使用できる.

% grep SCF gaus98.out

find 条件を満たすファイルを探す

find 検索開始ディレクトリ名 条件 処理

「検索開始ディレクトリ」配下のディレクトリ階層を下降しながら検索する.

「条件」(オプション)に一致するファイルを探し,該当ファイルに対して

「処理」(オプション)を実行する.

オプションの詳細はman コマンドで調べる.

% find /usr -name dbtmp /usrディレクトリ以下からdbtmp のファイルを検索する.

whereis, which コマンドがどこに保管されているか探す.

% whereis ls lsコマンドの格納個所を調べる

ls: /sbin/ls /usr/bin/ls /usr/share/man/man1/ls.1.gz

OSX10.6の場合,/bin/ls


ファイルの所有権と保護

ファイルを作成すると,その所有権は作成者であるユーザに在る.ファイルの所有権および実行権などは

ls -l で知ることができる.

保護モードの変更

chmodコマンドによって保護のモードを変えることができる(CHange MODe)

chmod u(and/or g and/or o), +(and/or -), r(and/or w and/or x) ファイル名

%> chmod go-rwx exam.data

exam.dataというファイルに対してグループおよびその他のユーザのアクセスを禁止している.自分だけが読み出し,書き込み,実行ができる.

% chmod u+x aaa.sh, bbb.sh aaa.shとbbb.shの二つのファイルを所有者が実行できるようにする.

ugo+xを指定すると誰もが実行可能になる.


数値による許可モード指定

% ls -l

-rw-r--r-- 1 harano 1001 11484 9月 14日 10:58 BCydTB1-2

-rwxr-xr-- 1 harano 1001 393 9月 14日 18:18 mpc2sub


ファイルの属性,許可モード

まず,-rw-r--r-- の意味を理解する.読み書き実行の許可モードである.

1番左の1桁を除いて,残りの9桁を左から3桁づつ区切る.最初の3桁は,ファイル所有者(作成者)に関すること,所有者がファイルを読むことができる場合はr ,書き込むことができればw ,ファイルが実行可能ならx である.

次の3桁はグループ,最後の3桁はそれ以外の利用者についての定義である.

ファイルmpc2sub はモードが-rwxr-xr-- であり.実行可能(スクリプト)である.

これらの定義,変更はchmod コマンドを用いる.

chmod 許可モード ファイル名

% chmod 700 mndo

許可モード

これらの数値のうち,許可したいものを取り出し,合計したものが許可モードになる.

すべての数値を合計した777はすべてを許可するモードである.

所有者の変更

ファイルの所有権を変更するにはchown (change owner) を用いる.

% ls -l

drwxrwxr-x 2 root 4096 Aug 20 12:30 xraydata 所有者はroot

% su root になる

Passowrd: root パスワード入力

% chown kuma xraydata 所有者をkuma に変更

% ls -l

drwxrwxr-x 2 kuma 4096 Aug 20 12:30 xraydata 所有者はkuma

所有グループの変更

ファイルの所有グループを変更するにはchgrp (change group を用いる.

% chgrp kuma xraydata


ファイル管理

ファイルを管理するコマンドには次のようなものがある.

% df パーティション名 ディスクの空き領域

% du ディレクトリ名 指定したディレクトリ以下のディスクの使用状況

% df

Filesystem 512-blocks Used Available Capacity Mounted on

root_domain#root 524288 137970 374080 27% /

/proc 0 0 0 100% /proc

usr_domain#usr 4194304 2020260 2117488 49% /usr

/dev/rz0h 10760194 629496 9054678 7% /home

/dev/rz2c 8132100 2217608 5101282 31% /home2

/dev/rz3c 8132100 2123992 5194898 30% /home3

%


ネットワークファイルシステム(NFS)

NFSとは,サン・マイクロシステムズ社が開発したネットワーク機能で,他機のファイルシステムを自機のファイルシステムにマウントして,共有するシステムである.

実行例

ネットワーク上に存在する他機(アドレス133.95.70.235)のディレクトリ(lib)を自機のディレクトリ(mnt)配下にマウントして,利用する.

% mount -t nfs 133.95.70.235:/home/lib /mnt

mount

UNIX 系 OS のファイルシステムでは,複数のファイルシステム(ディスクパーティション)やデバイスを仮想的に単一のツリー構成で扱うことができる.デバイスなどはシステムに「マウント」された時点からアクセス可能になり,「アンマウント」されるとアクセス不能になる.

UNIX では,ハードディスクのパーティション,フロッピーディスク,CD-ROM などのデバイスのほか,NFSや Samba などのネットワークリソースもマウントして,ローカルデバイスと同じようにアクセスできる.

マウントは mount コマンドによって,アンマウントは umount コマンドによって行なう.また,/etc/fstab ファイルにマウントするデバイスを指定することで,システムの起動時などに自動的にマウントすることもできる.


ファイルの展開,圧縮

圧縮ファイルの展開

[.tar.gz][.tgz] tar でまとめた後,gzip で圧縮されたファイルである.

tar は複数のファイルを一つのファイルにまとめるアーカイブ形式の一つである.

tar zxvf ファイル名.tar.gz

[.gz]

gzip -d ファイル名

gunzip ファイル名

[.bz2] 新しい圧縮率の高いファイル

bunzip ファイル名.bz2

bzip2 -d ファイル名.bz2

[.tar.bz2]

bzip2 -dc ファイル名.tar.bz2 ¦ tar xv


ファイルのアーカイブ・圧縮

tar cvt アーカイブファイル名 ディレクトリー名

同時に gzip 圧縮を行うには以下を実行する.

tar zcvf アーカイブファイル名 ディレクトリー名

gzip, bzip2 圧縮するには以下のコマンドを用いる.

gzip ファイル名

bzip2 ファイル名

あるディレクトリ以下を一つのファイルにまとめて一挙にバックアップする時などに利用する.

compress/uncompress

ファイルの圧縮のため,標準的に用意されているコマンドである.

compress で圧縮すると,拡張子”.Z”のファイルが生成する. -c オプションを指定すると元のファイルを残したまま圧縮ファイルを製作できる.文字データの場合,1/3位に圧縮される.

% compress main_data.ps

このファイルを元に戻すにはuncompressコマンドを使いる.

% uncompress main_data.ps.Z

圧縮例(ab initio 計算結果)

%> ls -l keteneIMPhBet321.out

-rw-r--r-- 1 yakko users 2641310 May 15 13:28 keteneIMPhBet321.out

%> compress keteneIMPhBet321.out

%> ls -l keteneIMPhBet321*.*

-rw-r--r-- 1 yakko users 730541 May 15 13:28 keteneIMPhBet321.out.Z

UNIX の世界では,ネットワーク環境下マルチユーザを前提にしていることもあり,定期的にバックアップをとるのは常識になっている.最近はネットワーク絡みのイタズラが多いので,消去されたら復元できないデータベース,ホームページのデータなどはバックアップをとるように心掛ける必要がある.


UNIXのシェル

コマンド実行のしくみ シェルとカーネル

UNIXではプログラムが実行される時は,ハードディスクからメモリに組み込まれ実行される.電源が入るとUNIXのOSプログラム(カーネル)がメモリに読み込まれ実行される.このほかファイルの障害

(ネットワークなども含む)をチェックするためのデーモンと呼ばれるプログラムも起動される.入力した文字列はシェルと呼ばれるプログラムに渡され,文字列をコマンドとして解釈し,コマンドを起動するようにカーネルに指示を出します.

シェルはユーザにプロンプトを出し,コマンド入力を促す.

ユーザはコマンドを入力する.

入力コマンドはシェルが受け取り,コマンド内容を解釈し,カーネルに対してコマンドの実行の要求を出す.

コマンド実行の要求はカーネルが処理する

コマンドの実行が終了するとカーネルはシェルに終了通知を出す.

終了通知を受け取ったシェルはユーザの端末上にプロンプトを表示し,初期状態に戻る.

コマンドの入力 コマンドの実行

ユーザ ⇄ シェル ⇄ カーネル

% 実行終了通知

カーネルはルートディレクトリに存在し,ファイルの入出力とプログラムの実行を管理するサブルーチンの

集合である.各プログラムの実行の監視,入出力装置の制御,CPUやメモリのの割り当てなどを実行する

基本プログラムである.

上記のようにシェルはユーザからコマンドを受け取ってコマンドの内容を解釈し,プログラムを実行するた

めにプロセスを生成する.シェルには標準シェル(ボーンシェル)とその機能拡張を行ったCシェルが一般

的である.

sh ボーンシェル

csh Cシェル

Cシェルからボーンシェルに移行するには

% sh

$

ボーンシェルからCシェルにもどるには

$exit

%

を実行する.

Cシェルにはヒストリー機能とエイリアス(別名)機能があるが,ボーンシェルにはない.

○シェルの種類

B shell: Bourne shell と呼ばれ,UNIX の一番基本的なシェルである.コマンドプロンプトから「sh」と入力することで起動する.

C shell: B shell の拡張シェルで多くのワークステーションで採用されている.記述形式がc言語に似ていることからこの名がついた.「csh」で起動する.

bash: Bourne Again shell といわれ,Bourne シェルの強化拡張シェルである.Linux の標準シェルとして多く採用されている.今回の実習で使用したシェルもこれである.「bash」で起動.

このほかにもtcsh, zsh などがよく使われる.MacOSX では tcsh がデフォルトで起動する.これらのシェルの相違点は主に機能性で,bash や tcsh では操作性が向上している.ヒストリー機能(カーソルキーの上矢印で以前のコマンドを参照できる)やインクリメントサーチ(ファイル名の始めの一部分を入力して TAB キーを押すことで残り部分の補完を行う)などの機能はとても便利である.


UNIXのエディタ

プログラム,メール,テキストなどを作成するにはエディタ(編集機能)が必要である.一般にワードプロセッサと呼ばれる機械あるいはパソコン上で走らせるワードプロセッサは一種の本格的エディタであり,文書を快適に作成し,印刷するために使用される.ここで言うエディタはワードプロセッサのような複雑な機能を持つ必要はない.最低限の修正,消去,挿入,移動,置換などができる機能を持っているものを指す.

vi エディタの特徴

機種に依存することなくほとんどのUNIX マシンで使用できる画面エディタであり,半角英数字のみ編集できる.

起動の仕方

% vi prg.f

コマンドモードとテキストモード

コマンドモードはvi コマンドと呼ばれる一連の簡単なコマンドを用いて画面編集を行うことができる.一方,テキストモードとはテキストを入力するモードである.

これらのモード間の移動は以下の図の通りである.ESCキーを押せばコマンドモードになる.

viエディタの終了

:wq セーブして終了

ZZ 〃

:q! 強制終了

:w file名 別名でセーブして終了

基本的なコマンドの一覧は以下の通りである.

カーソル移動コマンド

h(←), j(↓), k(↑), l(→), <return>(↓)

画面移動コマンド

G ファイルの一番最後へ

nG ファイルのn行目へ

テキストおよび行挿入コマンド

a カーソル位置の後ろにテキスト挿入

i カーソル位置の前にテキスト挿入

I カーソル行の先頭にテキスト挿入

A カーソル行の行末にテキスト挿入

O カーソル行の上に新しい行を挿入

o カーソル行の下に新しい行を挿入

テキストおよび行削除コマンド

x カーソル位置の一文字削除

dd カーソル行の削除

ndd カーソル行から n 行削除

cc カーソル行を削除してそこに新しく書く

バッファを使った複写,移動

nyy カーソル行以下 n 行をバッファに取り込む

ndd カーソル行から n 行をバッファに削除取り込み

p バッファの内容をカーソル行の下に挿入

P バッファの内容をカーソル行の上に挿入

検索コマンド

/ 検索文字列 文字列の検索(順方向)

? 検索文字列 文字列の検索(逆方向)

n 以前の検索の繰り返し

その他のコマンド

r 一文字置換

u 直前のコマンドの取り消し

U 同じ行で行われた変更の取り消し

. 直前のコマンドの繰り返し

プログラムの編集中,下記のようなコマンドを次々に投入した場合について説明する.

100行目にカーソルを移動し,カーソル以下15行をコピー対象とし,200行に移ってさきほどの15行をペーストすることを意味する.G は行末に飛び,1G は1行目にもどることを意味する.

100G

15yy

200G

p

G

1G

vi エディタは一般に使いにくいと言われる.これは画面上のカーソル位置ですべてが解決できるワープロ機能になれてしまっているからである.計算機環境はどこも豊かであるとは限らない.どのような場所,いかなる環境においてもテキストを編集できるためにはめんどうではあるが,viエディタの概要を知っておく必要がある.コマンドの文字数も少なく一覧表を手許に置いておけば意外と便利である.

標準入力と標準出力

UNIX におけるファイルの考え方は非常に柔軟性に富んでいてシンプルである.「標準入力」および「標準出力」と名付けられた窓口が用意されている.いままではキーボードからコマンドを入力し,ディスプレイにその結果を出力させてきた.このキーボードからの入力を「標準入力」といい,ディスプレイへの出力を「標準出力」という. 次で学ぶリダイレクションでは入出力先を選択することが可能である.

入出力先を省略した際は,標準入力と標準出力が選ばれる.

リダイレクション

標準入出力の切り換えには下記の記号を用いる.

< 標準入力の切り換え記号

> 標準出力の切り換え記号

>> 出力をファイルに追加

% ls > filelst →ファイル一覧を画面ではなくファイルに書き込む.

% mail murayama < chinjo → 予め作成しておいたファイルを村山氏にメールする,

% cat file1 file2 >> file3 → ファイルを連結してfile3に追加書きされる.

% lpr filelst → ファイルの一覧を画面ではなくプリンターに出力する.

% mm98<in.dat>kekka.out → データをin.dat から入力し,結果をファイルkekka.out に出力する.


パイプライン

大変便利な機能である.具体的例で理解してほしい.

例 システムにアクセスしている利用者をアルファベット順に並べるにはwhoとsortの2個のコマンドを順次実行すれば実現できる.

% who >file.tmp

% sort < file.tmp

これを一度に実行するにはパイプラインを利用すればよい.

% who|sort

例(OSXターミナル)

KH$ ls -l(ファイルの詳細を表示)

KH$ ls -l|sort(ファイルの詳細を表示させ,ファイル名でソート)

KH$ ls -l|sort -k5(ファイルの詳細を表示させ,空白区切りで5番目,ファイルサイズ順でソート)

KH$ ls -l|sort -k5

total 176504

-rw-r--r-- 1 KH staff 0 10 30 10:43 z

-rw-r--r--@ 1 KH staff 487 10 27 19:57 out.txt

-rw-r--r--@ 1 KH staff 1174 10 27 20:58 out1.txt

-rw-r--r--@ 1 KH staff 344185 10 26 23:25 a13.eml

-rw-r--r--@ 1 KH staff 1023515 10 28 20:38 a01.eml

-rw-r--r--@ 1 KH staff 1023520 10 26 23:21 a02.eml

-rw-r--r--@ 1 KH staff 1023520 10 26 23:21 a03.eml

-rw-r--r--@ 1 KH staff 1023520 10 26 23:23 a05.eml

-rw-r--r--@ 1 KH staff 1023520 10 26 23:23 a06.eml

-rw-r--r--@ 1 KH staff 1023520 10 26 23:24 a08.eml

-rw-r--r--@ 1 KH staff 1023520 10 26 23:24 a09.eml

-rw-r--r--@ 1 KH staff 1023520 10 26 23:25 a11.eml

-rw-r--r--@ 1 KH staff 1023520 10 26 23:25 a12.eml

-rw-r--r--@ 1 KH staff 1023525 10 26 23:23 a07.eml

-rw-r--r--@ 1 KH staff 1023567 10 26 23:24 a10.eml

-rw-r--r--@ 1 KH staff 1023587 10 26 23:22 a04.eml

-rw-r--r-- 1 KH staff 2047035 10 27 20:49 b.eml

-rw-r--r-- 1 KH staff 12481219 10 27 19:23 aaa

-rw-r--r-- 1 KH staff 12626539 10 27 20:57 c.eml

-rw-r--r-- 1 KH staff 12626539 10 28 20:13 d.eml

-rw-r--r-- 1 KH staff 12626539 10 28 20:40 e.eml

-rw-r--r-- 1 KH staff 12626539 10 28 20:51 f.eml

-rw-r--r-- 1 KH staff 12626539 10 30 10:38 all.eml

KH$

AWK プログラムと組み合わせるともっと便利なことができる.

bunsi%> ls -l | awk '{a+=$5;} END {print a;}'

15226877

パイプ (|) の後ろにある awk が AWK のコマンドである.そのあに⦆'{a+=$5;} END {print a;}'⦆と,書かれているのが,AWK のプログラムである.空白で区切られた5番目のカラム($5, ディスク使用量)を合計{a+=$5;} し,印刷 {print a;} する.詳細は後述する.

ほかにもいくつか例を示す.

date | cat - sign.txt >letter.txt

キーボードから入力した文書の前に日付をつけ,末尾に署名 (sign.txt) を加えてファイル letter.txtに書き出す.(キーボードからの入力を終了するにはcontrol+d)

date | cat 1027.doc >> daily.log

ファイル daily.log に,日付を加えた 1027.doc ファイルを追記する.

パターン処理言語AWK等については別項参照


プロセスとバックグラウンド処理

シェルはプロンプトを表示し,コマンド行の入力を待つ.コマンドが入力されるとコマンドの内容を解析し,プロセスを生成しコマンドを実行する.終了したら再びプロンプトを表示する.

ジョブとプロセス

一般にコンピュータが処理する仕事の単位をジョブという.UNIX では一つのコマンド行が1ジョブである.一つのコマンドはプロセスと呼ぶ.したがって,一つのコマンド行に複数のコマンドを指定すると,一つのジョブで複数のプロセスが実行される.

フォアグラウンドジョブとバックグラウンドジョブ

UNIX のジョブはフォアグラウンドジョブとバックグラウンドジョブに大別される.

フォアグラウンドジョブ

バックグラウンドジョブ

通常はフォアグラウンドで実行されるが,コマンド行の最後に&を付けるとバックグラウンドで実行されるのでフォアグラウンドでは別の仕事ができる.

% f77 prg.f を実行するとこの仕事が終了するまで別のコマンドは受け付けられないが,

% f77 prg.f & とするとバックグラウンドで実行されるため別の仕事ができる.

バックグラウンドで実行が開始されるとプロセスのIDが発行されるから,ps コマンドでジョブの実行状況を知ることができる.

% ps

PID TTY TIME COMMAND

1023 ttyp000 12:08 csh

1125 ttyp005 12:21 csh

1315 ttyp010 12:35 ps

ジョブの打ち切り

ジョブを実行したが,途中で実行を中止したい,killコマンドを使用する.

% kill 1234

1234 はPID(プロセスID番号)である.

パソコンのようにリセットボタンを押してリスタートすることは絶対にしない.