本講習会のスケジュール
シェルの便利な使い方z

UNIX中級講習会

zzz

九州大学情報基盤センター

ファイルに関する操作

zzzzz

本資料は以下のURLで閲覧できます.
http://www.cc.kyushu-u.ac.jp/scp/lecture/unix2/

シェルの機能zzzz

シェルスクリプト
Make

Emacsのバッファ操作

アクセス権の設定
ファイルの取りまとめ、圧縮ファイルの探索
ファイル内の文字列探索

基本的な役割：
コマンド受付のプロンプトを表示
キーボードからコマンド受付z コマンドに対応する OS 機能の呼び出し
z OSからの結果を画面に表示

zzzz

一括処理

Tcsh： 高機能シェル

シェル ＝ 利用者の応対係
zz

高機能シェル Tcsh
ファイル名の置換プロセスの管理

通常のシェルに様々な機能を追加し,より便利になったシェル.
z

便利な機能

z

ファイル名の一部だけでファイルを指定する
z 起動されたプロセスを”ジョブ”として管理する
z 条件分岐や繰り返しを使って複雑な処理を実現する
etc.

zz

コマンド
利用者

補完機能コマンドやファイル名を途中まで入力し,TABキーを押すと残りを補完する.
コマンド履歴の呼び出し機能
今まで入力したコマンドを矢印キーの上下で呼び出す.
コマンド行編集機能
入力中のコマンドの書き換え、カットアンドペースト等.

OSの機能呼び出し
OS
結果

シェル表示

ファイル名の置換 ＊Tcshの利用法
開始： tcsh コマンドで起動
終了： exit (元のシェル csh に戻る)
z 通常のコマンドに加え,以下の機能を利用可能
zz

名前の一部だけでファイルやディレクトリを指定

zz

例1) ファイル名の最初が test であるファイルを消去
kyu-cc% rm test*

キー操作機能→ (もしくは C-f)

カーソルを一つ右に移動← (もしくは C-b)

カーソルを一つ左に移動

C-a

左端に移動

C-e

右端に移動

C-u

全部削除

C-k

カーソルから右側を切り取り

C-y

直前に切り取った部分を貼り付け↑ (もしくは C-p)

実行したコマンド履歴の古い方へ↓ (もしくは C-n)

実行したコマンド履歴の新しい方へ

TABキー

コマンドやファイルの補完z例2) ファイル名の末尾が .f90 である
ファイルを fortran ディレクトリに移動
kyu-cc% mv *.f90 fortranz

例3) ファイル名の最初が hello で末尾が .c のファイルをhelloディレクトリにコピー
kyu-cc% cp hello*.c helloz

例4) カレントディレクトリの下の全てのディレクトリの下のファイルのうち名前の末尾が .f90 のものをtest ディレクトリにコピー
kyu-cc% cp */*.f90 test1

注意： 誤って消去したり上書きしたりしないように
z 実行前に ls コマンドで他のファイル名も確認．

コマンドには -i オプションを付け，消去，上書きされるファイル名を確認．

実習1

実習１： Tcshの利用及びファイル名の置換
z Tcshの機能の確認
z ＊を利用したファイル操作

z cp，mv，rm

ジョブの管理z

シェルのジョブの状態

注意： バッチ処理のジョブとは違う．
z

全ての UNIXで使用可能.
基本的に，対話型利用．
z 課金も対話型（於 本センター） ．
z ログアウトすると強制終了される．
（強制終了されずに残ってしまう場合もある）
zz

z

z フォアグラウンド

シェルのジョブはバッチ処理のジョブは主にセンターのような共同利用施設の計算機で使用.
基本的にバッチ型利用．
z 課金もバッチ型（於 本センター）．
z ログアウトしても終了しない．

zzz

実行中に一時停止された状態

z 終了
z

終了した、または終了させられた状態

ジョブ管理のコマンド、キー操作

ジョブ管理

z コマンドz バックグラウンドz

フォアグラウンドジョブの裏で同時に実行している状態

z 中断

z
z

直接端末から入出力を行える状態．

z バックグラウンド

見かけ上､同時に複数の処理を実行

fg
bg

通常:
kyu-cc%./a.out

バックグラウンド:
kyu-cc%kyu-cc%コマンドの後ろに & を付ける./a.out&注意:
ログアウトしてもバックグラウンドジョブが残ることがあるので､全てのバックグラウンドジョブを終了させてからログアウトする

中断状態のジョブを再開
中断状態のジョブをバックグラウンドで再開

kill –KILL %番号 指定した番号のジョブを強制終了
jobs
バックグラウンドで実行中のジョブ，及び中断状態のジョブを表示
z キー操作

C-z
C-c

フォアグラウンドジョブを中断
フォアグラウンドジョブを強制終了

2ジョブ管理：使用例
z

一旦起動したプログラムをバックグラウンドに変更
kyu-cc% ./hello
Ctrlキーを押しながら z
C-z[1] + 19277 Suspended
kyu-cc% bg[1]./hello &kyu-cc%z

注意：z./hello

キーボードからの入力や画面への出力を行う
プログラムはそのままではバックグラウンドで実行できない.
zプログラムへのデータ入力とコマンド入力，コマンドプロンプト kyu-cc% とプログラムの出力が混ざって使いづらいため.

z

バックグラウンドで実行しようとすると,強制的に中断状態になる.

z以下のようにリダイレクションを使って対処.

不要なジョブを強制終了
kyu-cc% jobs
[1]
Running[2] + Running[3] - Runningkyu-cc% kill –KILL
kyu-cc%./hello./a.out
emacs
%2

kyu-cc%./a.out < data > log &実習2

実習2： ジョブ管理本講習会のスケジュール

z ジョブの起動、中断、再開、終了

z

シェルの便利な使い方
zzzz

ファイルに関する操作
zzzz

ファイルのアクセス権

file１

見えるzz

z

シェルスクリプト
Make

Emacsのバッファ操作

アクセス権の設定
ファイルの取りまとめ、圧縮ファイルの探索
ファイル内の文字列探索

各ファイルについて－ ユーザのカテゴリ毎に－ アクセス権を設定可能
ユーザのカテゴリ

見える
file２

z

ユーザ
B

見えない

見える

一括処理

ファイルのアクセス権

z ファイルごとにアクセス権を指定可能

ユーザAz

高機能シェル Tcsh
ファイル名の置換プロセスの管理

アクセス権•ファイルの所有者•読み出し権•同じグループ•書き込み権

•それ以外

•実行権

3

ファイルのアクセス権表示
ls -l
このファイルの所有者
z 実行例

アクセス権の変更
chmod

このファイルの所属グループ

z 利用方法kyu-cc% ls –l hello.txt-rw------- 1 a79999a
usr 989 May 22 19:26 hello.txt
所有者のアクセス権
同じグループのユーザのアクセス権

アクセス権の表記

それ以外のユーザのアクセス権

r 読出し権w 書込み権x 実行権

ファイルの種類- 通常ファイル
d ディレクトリ

アクセス権の変更
chmod
zz

chmod u+x hello.txt

chmod g+rw hello.txt

例3) 所有者以外の全てのアクセスを禁止

kyu-cc%

変更するアクセス権
r 読み出し権w 書き込み権
x 実行権

一つ以上

どちらか一つ一つ以上

ファイルのアクセス権とディレクトリのアクセス権は少し意味が異なる．
z

読み出し権：そのディレクトリにあるファイルの名前を閲覧する権利z

書き込み権：
そのディレクトリでファイルの削除や新規作成をする権利z

実行権：
そのディレクトリに移動する権利．
ただし，実行権が無ければ閲覧もファイルの編集・削除・新規作成も出来ない．

chmod go-rwx hello.txt

実習3

実習3： アクセス権
z ファイルとディレクトリのアクセス権の操作

読み出し権
書き込み権
z 実行権
z＋ 権利を与える‐ 権利を与えない

例2) 同じグループのユーザーに読み出し権と書き込み権を与える

kyu-cc%
z

権利の与奪

u 所有者
g 同じグループの利用者
o それ以外の利用者
a 全ての利用者

例1) ファイルの所有者に実行権を与える

kyu-cc%z

変更するカテゴリ

ディレクトリのアクセス権

利用例z

アクセス権を変更するファイル

chmod

アクセス権設定の応用：限られた利用者だけでファイルを共有
z

グループはシステムの管理者でなければ設定できないので，センターでは使えない．
→ アクセス権を利用し，アクセスできる利用者を限定する．

zfile1a99999arwx--x--x

work

rwxr-xr-x
file2•work というディレクトリ名は所有者にしか見えない•しかし，すべてのユーザーが work に移動可能•すなわち，work のパスを知っているユーザーだけがfile1, file2 を参照できる

4

ファイルの取りまとめと展開
tar

ファイルのとりまとめと圧縮z

多数のファイルを保管したり他の計算機に転送する
とき，一つのファイルにまとめて，圧縮（サイズを小さく）すると便利．
まとめる

たくさんのファイルやディレクトリ

z 複数のファイルを一つにまとめる
z

本来はテープに保存する（tape archive）コマンド
複数のファイル、ディレクトリ

圧縮

一つのファイルtar ファイル
ディレクトリディレクトリtar

保管, 転送file1 file2 file3 file4

ファイルの取りまとめと展開
tar

ファイルのとりまとめと展開
tar

z 利用法

tar

z

file1 file2 ...
処理内容

どれか一つ

c 1つのファイルにまとめる
t まとめられたファイルの内容表示
x まとめられたファイルの展開

利用例z 例1） カレントディレクトリの work と tmp ディレクトリをtest.tar というファイルにまとめる．

kyu-cc%tar cf test.tar work tmp

ファイル名の末尾を .tar としておくと tar でまとめたファイルであることが分かって便利です.

表示に関する指示

オプションv 詳細情報表示（処理内容で表示が異なる）
c の場合：まとめられる各ファイル名
t の場合：まとめられたファイルのサイズなどの詳細情報
x の場合：展開される各ファイル名

対象の取りまとめファイル
f ファイル名
ファイル名が ー の場合は標準入出力

ディレクトリ
file1
file2
file3
file4

z

例２） test.tar の中身を表示（詳細情報も表示）z例３） test.tar を元の形に展開（展開される各ファイルも表示）

kyu-cc%kyu-cc%

必ず指示tar でディレクトリをまとめるときの注意

tar tvf test.tar

tar xvf test.tar

tar ファイルを展開するときの注意z

展開時に同じパスのファイルがあると上書きする．

z

対策1：

z ディレクトリは相対パスで指定した方が良い
kyu-cc%z

tar cvf test.tar test

任意の位置に展開することができる→ バックアップや他の計算機での利用が容易z

事前に
tar tvf tarファイル

で tarファイルの内容を確認したり
ls -R

z

もし絶対パスで指定した場合
kyu-cc%tar cvf test.tar /home/user3/k70043a/test

全く同じ絶対パスにしか展開できない｡

で現在カレントディレクトリ以下にあるファイルを調べる．
z

対策2：
z

一旦，新しいディレクトリを作成してその中で展開し，必要なものをコピーする．
mkdir tmp
cd tmptar xvf tarファイル

5

ファイルの圧縮，解凍
gzip

ファイルの圧縮, 解凍

zz 圧縮：ファイル中の冗長な部分を削って利用法： 圧縮
gzip

サイズを小さくする．
z 解凍：削られた冗長部分を補って元のファイルに戻す．

zz

圧縮するファイル名

圧縮結果は，元のファイル名の末尾に .gz が付いたファイルに格納される．
例） hello.txt を圧縮する．( hello.txt.gz が作成される．)
kyu-cc%z

圧縮

利用法： 解凍
gzip -dファイル
ファイル

ファイル

z

解凍

gzip hello.txt

解凍するファイル名例） hello.txt.gz を解凍する．(hello.txt が作成される．）
kyu-cc%gzip –d hello.txt.gz

注意: 圧縮,解凍コマンド実行後，元のファイルは消える

tar と gzip を組み合わせると効果的圧縮するファイルの選択
z ファイルを圧縮する利点

ファイルの転送が速い
z ディスクを有効に利用できる
zSRC

file1

file2

file3

file4

z 不便な点z

通常､使用する前に復元（解凍）が必要

tar cvf SRC.tar SRC
SRC.tar ファイルができる通常，他の計算機に転送するファイルやしばらく利用しないファイルを圧縮する取りまとめて圧縮されたファイルの復元
SRC

file1 file2 file3 file4

SRC.tar
SRC/
file1
file2
file3
file4

tar xvf SRC.tar
SRCディレクトリ以下が展開される

SRC.tar
SRC/
file1
file2
file3
file4

SRC.tar.gz
SRC
file1
file2
file3
file4

SRC.tar.gz
SRC
file1
file2
file3
file4

gzip SRC.tar
SRC.tar.gzファイルができる

tar cvf - SRC | gzip > SRC.tar.gz
一度に実行

ファイルの探索z ファイルやディレクトリが増えてくると,目的のファイルがどこにあるかわからなくなってくる.
→ 探索コマンド findgzip -d SRC.tar
SRC.tarファイルができる

gzip –dc SRC.tar.gz | tar xvf 一度に実行
gzip –dc ファイル名
解凍結果を標準出力に出力

6

ファイルの探索
find

ファイルの探索findz 利用法

z

利用例
z

find 探索開始ディレクトリ –name 名前 探索後の処理

探索開始ディレクトリは絶対パス,相対パスどちらで指定してもよい.
z 主な”探索後の処理”：-print
見つかったファイルを表示-exec
見つかったファイルに対してコマンドを実行

例1） work ディレクトリ以下から proj1.f90 を探して表示zkyu-cc% find work –name proj1.f90 -printz

例２） ホームディレクトリ以下から末尾が~であるファイルを探して削除
kyu-cc% find ~ -name '*~' –exec rm –i {} ¥;zz

コマンドには,見つかったファイル名を {} で指定する.
コマンドの末尾は”空白を一つ以上置いて” ¥;文字列の探索文字列の探索grep

z ファイル内から特定の文字列を含む行を探してz利用法

表示する.

grep オプション 検索文字列 ファイルzz プログラムのデバッグなどに利用

文字列の探索grepz

利用例z

例1） ファイル test.c から total という文字列を含む行を探索する.
kyu-cc%z

grep –i total test.c

例２） ファイル名の末尾が .f90 のファイルから,！を含まない行を探索する.

z

主なオプション
-i
大文字小文字を区別しない-n

行番号も表示する-l

指定した文字列を含むファイルの名前だけを表示する（複数のファイルを指定した場合に利用）-v

指定した文字列を含まない行を表示する.

実習4

演習4： ファイル操作
z ファイルの取りまとめ、展開
z ファイルの圧縮、解凍
z ファイルの検索
z ファイル内の文字列検索

kyu-cc% grep –v '¥!' *.f90! のような特殊記号は '¥!' のように￥を付け, ' で囲んで指定する.

7

本講習会のスケジュール
シェルの便利な使い方

zzzz

ファイルに関する操作

zzz

zzz

高機能シェル Tcsh
ファイル名の置換プロセスの管理

シェルスクリプト

一括処理
zzz

シェルスクリプト
Makezzz

Emacsのバッファ操作

アクセス権の設定
ファイルの取りまとめ、圧縮ファイルの探索
ファイル内の文字列探索

シェルスクリプト

引数を受け付けるかどうかは,シェルスクリプトの内容による.

z

コマンドとして実行する前にchmod で実行権限を与えておく.
kyu-cc%

引数に指定されたファイルが存在すれば,そのファイルで member という文字列を探索する. #!/bin/csh(-f $1) thengrep 'member' $1
else
echo "$1 doesn't exist."
endifzz

z

複雑な処理

z

バッチジョブとして投入する処理z

バッチジョブのスクリプト#!/bin/csh
cd work
frt test.f90./test-o test

シェルスクリプトの例3z

カレントディレクトリにある,ファイル名の末尾が .c であるファイルに対し,ファイル名の末尾にさらに .old を付ける.
#!/bin/csh
foreach cfile ( *.c )mv ${cfile} ${cfile}.old
echo ${cfile} ${cfile}.oldend

ifz

何度も行う決まった処理

chmod u+x スクリプトファイル名

シェルスクリプトの例2zztest.f90 をコンパイルして実行する.

カレントディレクトリにある場合は./ を忘れない.

z用途：

z workディレクトリに移動し,スクリプトファイルのパス オプションz

条件分岐,繰り返しなども利用可能

シェルスクリプトの例１

利用法

z

一連のコマンドをファイルに列挙し一括して実行

引数は $数字 で指示する.
$1 ： １番目の引数.
ファイルが存在するか否かの判定
if (-f ファイル名)
メッセージの出力
echo メッセージzzzz

繰り返しはforeach 変数 ( 変数のとる値 )から end まで．
ここでは変数のとる値として ＊.c 、すなわちカレントディレクトリにある、ファイル名の末尾が .c のファイルの名前を指定している.
条件を満たすファイル名について,順に繰り返しの中を実行する.
変数の中身は ${変数}で参照.

8

分割コンパイルの支援

分割コンパイルの支援
makez 分割コンパイルzzz

ファイルの依存関係を元に必要なコンパイルだけを行う仕組み.

一つのプログラムを複数のファイルに分割→ 大規模なプログラムの管理が容易

file1.f90

一部のファイルに修正を施した後,再度全部をコンパイルするのは無駄.
→ 修正を行ったファイルのみコンパイル

file2.f90
file3.cf90 -cf90 -ccc -cfile1.occ

file2.oprogramfile3.omake

ファイルの依存関係は Makefile というファイルに記述.

z

Makefileの例
zz

FortranとC言語の混成プログラム.
コンパイル以外のターゲットも作成可能
例）zzclean: 途中でできた不要ファイルを削除
backup: 必要なファイルをまとめて圧縮

Makefileの書き方
基本形zターゲット:
ターゲット作成に必要なファイル
TAB アクション

all: program
program: file1.o file2.o file3.o
cc -o program file1.o file2.o file3.ofile1.o: file1.f90
f90 -c file1.f90
file2.o: file2.f90
f90 -c file2.f90
file3.o: file3.c
cc file3.cclean:
rm -f file1.o file2.o file3.o *~backup: files.tar.gz
files.tar.gz: file1.f90 file2.f90 file3.ctar -cf - file1.f90 file2.f90 file3.c | gzip > files.tar.gz

分割コンパイルの支援
make
z 利用法
make ターゲット

ターゲット： 何を生成するか→Makefileに記述されているものを指定する.
z 何もターゲットが指定されない場合,all が指定されたものとして実行される.
zz

ターゲット： 目的z

ターゲット作成に必要なファイル名：z

アクション：zz

ファイル,もしくは単なる名前
複数指定可ターゲットを作成するスクリプト
複数行にまたがっても可z 行の先頭は必ず TABzz

実習5

演習5： 一括処理
z シェルスクリプトによる一括処理
zz

サンプルの実行（応用） 簡単なシェルスクリプトの作成

z Makeの利用
zz

Makefile の例
一括コンパイル

9

本講習会のスケジュールz

シェルの便利な使い方
zzzz

ファイルに関する操作
zzzzz

高機能シェル Tcsh
ファイル名の置換プロセスの管理

一括処理
zz

z

Emacsのバッファ操作

z

Emacs内で扱われるファイルのイメージ
z Emacsでは複数のバッファの扱いが可能.
z さらに,画面を分割して複数のバッファの内容を同時に表示することが可能.

バッファの作成
C-x C-f ファイル名

Emacsの操作

zz バッファ：

シェルスクリプト
Make

アクセス権の設定
ファイルの取りまとめ、圧縮ファイルの探索
ファイル内の文字列探索

z Ctrlキーを押しながら…

Emacsのバッファ操作の操作

C-x… Ctrl キーを押しながら x を押す．
C-BackSpace ... Ctrl キーを押しながらBackSpaceキーを押す

z

指定した名前のバッファを作成

z

指定した名前のファイルが存在すればそのファイルの内容を読み込んで編集.
zz

同じ名前のバッファがすでに存在する場合：zz

バッファの切り替えC-x b バッファ名

存在しなければ空の状態から編集開始.

対応するファイルも同じならそのバッファに切り替え対応するファイルが異なるなら、バッファ名はファイル名 <2>のようにファイル名に作成順の番号が付く.

バッファの削除
C-x k バッファ名

z 指定したバッファに切り替える.

z

バッファ名を省略して改行すると,直前に扱っていたバッファが削除される.

z バッファ名を指定する前に TABキーを押すとz

バッファの内容を書き換えた後保存していなければ,ファイルに保存するか否かを尋ねられるので保存したい場合は y を,保存したくない場合は n を入力.

z

上記で n を入力すると,本当に削除してよいか尋ねられるので yes と入力.

選択可能なバッファ名の一覧を表示

10

画面の分割z

現在カーソルのある画面を分割
zzz

画面を移動
z

z

C-x 2
画面を上下に分割
C-x 3
画面を左右に分割
C-x o
カーソルを次の画面に移動

画面を減らすzz

C-x 0
現在カーソルのある画面を削除（バッファは残る）
C-x 1
現在カーソルのある画面を残し,他の画面を削除

Emacsのコマンド
キー操作
C-x C-f意味C-x b

バッファの切り替え

C-x 2

画面を上下に分割

C-x 3

画面を左右に分割

C-x 1

現在カーソルのある画面のみにする

C-x 0

現在カーソルのある画面を消す

C-x o

次の画面に移る

C-z

Emacs の中断

新しくバッファを作成

実習6

演習6： Emacsのバッファ操作
z バッファの作成、切り替え

お疲れ様でしたz 実習で利用した

ID は 1週間利用できます.
z 不明な点等はrequest@cc.kyushu-u.ac.jp
もしくはnanri@cc.kyushu-u.ac.jp
まで.

11