UNIX(MacOSX)の使い方(印刷したもの)(6/11

UNIX(MacOSX) の使い方
2015 年 6 月 9 日
情報科学1
高知工科大学 システム工学群
第1章
UNIX について
1.1 UNIX の特徴
Linux や FreeBSD そしてそれらの源流である UNIX の操作の大部分は、もともとキー
ボードから文字によるコマンドを入力することで行えるように設計された。
UNIX が開発された 1960 年代後半の段階では、コマンド入力のみが操作の手段であった
が、その後、CPU の処理能力の向上により、1980 年代の前半にはグラフィカルなディスプ
レイが使えるようになり GUI 環境が実装された。
現在では、GUI 環境において、グラフイカルなボタンやメニューの操作だけでも多くの
作業をこなすことができるようになっているが、コマンド操作でしかできないことや、コマ
ンド操作の方が手早く簡単にできてしまう作業も数多くある。
UNIX は、OS に対する指示命令であるコマンド、コマンドを解読するシェル、OS の本
体でありハードウェアの管理・制御を行なうカーネルなどから構成される。シェルやコマン
ドやアプリケーション・ソフトウェアがカーネルの幾能を使う場合にはシステムコールを介
して行う。
以下では、UNIX のシェルやコマンドを使用するにあたって重要となる、入出力の考え方
とファイルの保護モードの扱いについて簡単に説明する。
1.2 標準入出力とリダイレクション
通常、プログラムは何らかのデータを入力し計算した結果を出力するように作成される。
入力には、ファイル中のデータやキーボードやネットワークから入力されるデータなどがあ
り、出力先にはファイルやディスプレイ・プリンタやネットワークなどがある。
UNIX では、プログラムにおけるデー夕の入出力に関して、標準入出力という概念を導入
することで特定の機器に依存しない一般的な記述を可能にしている。標準入出力では、入出
力することは決まっているが、どの入出力装置を用いるかは、プログラムを実行させる段階
になってシェルが具体的な装置を割り当てるまではわからない。つまり、標準入出力を使う
ことにより、データの入出力が特定の機器やファイルに依存することなく、実行時にファイ
ルやキーボードやネットワークなどへ簡単に切り換えることができることになる。
1
一つの標準入力と通常の出力用とエラーメッセージの出力用の 2 つの標準出力が定義さ
れている。デフォルトでは標準入力がキーボードに、標準出力と標準エラー出力がディスプ
レイ(ターミナルウインドウ)に割り当てられている。
標準入力 汎用的な入力専用装置(デフォルトではキーボード)
標準出力 汎用的な出力専用装置(デフォルトではディスプレイ)
標準エラー出力 もう一つの標準出力(デフォルトではディスプレイ)
(慣習的にエラーメッセージなどの出力先として用いられている)
デフォルトではキーボードとディスプレイに割り当てられている標準入出力を、実行時に
ファイルなどに切り換える操作をリダイレクションという。リダイレクションは、あくまで
も標準入出力を用いて「UNIX 流にプログラムされたコマンドに対してだけ適用できるも
のであり、プログラム内で直接ファイルを指定している場合には適用できない。
1.3 パイプ
リダイレクションを用いることで、例えば A プログラムの出力結果を作業ファイルに保
存し、その作業ファイルの内容を B プログラムの入力とするといった使い方ができる。し
かしこの方法では、A プログラムの処理が完全に終了して結果を作業ファイルに保存し終る
まで、次の B プログラムの実行を開始することができない。
そこで、あるプログラムの標準出力を別のプログラムの標準入力に接続し、二つのプログ
ラムを並行して動かすことが出来れば、作業ファイルを作ることなく作業をすることが出来
る。このあるプログラムの標準出力を別のプログラムの標準入力に連結する機能のことを
パイプという。
1.4 ファイルの保護モード
UNIX ではファイルやディレクトリに保護モードを設定でる。保護モードは、そのファ
イルに対して「誰が」
「何を」できるか/できないかを決めるものである。「誰が」に対して
は、ファイルの所有者(user)、所有者ではないが同じグループに属す利用者(group)、そ
してそのどちらでもない利用者(other)という区分がある。一方「何を」に相当するもの
としては、読み出し(read)、書き込み(write)、 実行(execute) がある。ただし、対象が
ファイルかディレクトリかによって保護モードの意味するものが少し異なっているので注
意が必要である。ファイルの所有者はこの「誰」と「何」の組み合わせ差許可する/しない
の設定を行なうことによって、自分のファイルを他人と共有したり他人から保護したりでき
るようになっている。
2
read ファイルの内容を読むことができる。
ディレクトリに存在するファイルを参照できる
write
ファイルの内容の追加,修正ができる。
ディレクトリにファイルを作成したり、削除したりできる
execute ファイルがコマンドとして実行できる。
ディレクトリの下のファイルの検索がでリきとる、
あるいは、そこをカレントデイレクトすることができる
ファイルの保護モードは ls コマンドにオプション-l を付けて確認することができる。
また、chmod コマンドで変更することが出来る。
ls コマンドにオプション-l を付けて実行した場合の表示は (もちろん,人により異なる
が) 以下の様になるはずである.
-rw-r--r-- 1 foobar 34 Nov 14 23:23 honyara.tex
各部分の内容は,
1.
2.
3.
4.
5.
6.
7.
- : ファイルの種類 (d:ディレクトリ,-:普通のファイル)
rw-r--r-- : アクセスの許可情報
1 : リンク数
foobar : ファイルの所有者
34 : ファイルの大きさ
Nov 14 23:23 : 最終更新日時
honyara.tex : ファイル名
を表している.ここで,アクセス許可情報は,
r:読み取り許可
w:書き込み許可
x:実行許可 (ディレクトリの場合は探索許可)
を表し,-は不許可を表す.また,アクセス許可情報は 3 種類の user に対する情報を、所有
者、グループ、その他のユーザの順に並べたものである.ここで,所有者 とは,そのファ
イルを作成したユーザーであり,グループ とはユーザの所属するグループを表す.Unix で
はユーザは複数のグループに属することができ,それを利用することでグループ間でファイ
ルのアクセスを行なうことが出来るようになっている.また,その他のユーザとはシステム
にアクセスできるすべてのユーザを表す.
3
第2章
ファイルシステム
2.1 ファイルファイルシステムとは
ファイルとは文書、プログラム、データなどの情報をコンピュータに保存するための単位
である。エディタやコマンドの実行により作成した情報をファイルとして保存することで
あとで利用したり加工することが出来る。
個々のファイルは名前(ファイル名)により区別されるため、ファイルごとに異なる名前
を付ける必要がある。しかし、コンピュータに保存されるファイルの数は膨大なものにある
ので、ファイルを効率よく整理するためにファイルは階層化されている。このようなファイ
ルの構造をファイルシステムと呼んでいる。
また、UNIX ではキーボードからの入力や画面への出力もファイルとして扱えるように
なっており、これを標準入力、標準出力(および標準エラー出力)と呼んでいる。
2.2 ファイルの階層化
ファイルを階層化するためには、複数のファイルをひとまとめにして名前を付ける必要が
ある。このためにはディレクトリ(フォルダ)と呼ばれるものを使用する。ここで、ディレ
クトリとは MacOSX や Windows のフォルダと同じものである。このディレクトリには、
ディレクトリが含むファイルの情報とディレクトリがさらにディレクトリを含む場合には
そのディレクトリの情報が保存されている。UNIX や MacOSX ではこのディレクトリも
ファイルとして扱える様になっている。
2.2.1 親ディレクトリ、子ディレクトリ
あるファイルやディレクトリから見て、自分が「含まれているディレクトリのことを親
ディレクトリといい、逆に、親ディレクトリから見て「含んでいる」 ディレクトリを子ディ
レクトリまたはサブディレクトリという。UNIX では、すべてのファイルとディレクトリ
がこの親子関係で結ぼれている。
4
2.2.2 木構造
この構造は図に描いてみると木を逆さに描いたよう見えるので、木構造またはツリー構造
と呼ばれる。この構造ですべてのファイル(ディレクトリ)への道筋をたどれる位置にある
ディレクトリをルート(根)ディレクトリと呼び、それ以上枝分かれしない位置にあるファ
イル(ディレクトリ)をリーフ(葉)と呼ぶ。
学生の使用できるすべてのファイルはファイル
サーバと呼ばれる装置に保存されていて、学内のどこ
からアクセスしても同じに見えるようになっている。
(このファイルサーバーは UNIX で動いている。
)
このようなファイルシステムでは、含まれるディレ
クトリが異なれば、同じ名前のファイルが存在して
も良い。このため、ファイルの名前を付けるのが楽に
なる。
2.2.3 ファイル名
UNIX では、ファイル名の記述には英数字を使うの
図 2.1 木構造のファイルシステム
が普通である。この時、大文字と小文字は区別され、
たとえば foo.c と FOO.c は別のファイルである。名
前の最大長は UNIX の種類などによって異るが、多くの場合 255 文字(英数字換算)まで
使用できる。また、特殊な用途に用いる以下の 18 文字はファイル名に使つてはいけない。
/ * ? ’ " ; & ( ) | < > \ [ ] ! { }
なお,ファイル名における文字.(ピリオド)については、通常の文字としても使用するが,
いくつかの場面では特別な意味を持つので注意が必要である。
まず、ファイル名のピリオドから最後までの部分がそのファイルの種類を表わす場合があ
り、これを拡張子(extension)またはサフィックス (suffix) と呼ぶ。UNIX では,拡張子は
表のように使い分けられている。アプリケーションによっては、プログラムを保存したファ
イルの拡張子が決められている場合があるので、特別な理由がない限りこの慣習にしたがっ
た方がよい。主なサフィックスとしては以下の様なものがある。
.jpeg
.pdf
.txt
.c
.h
.html
JPEG 形式の画像ファイル
PDF形式のファイル
テキストファイル
C のソースファイル
C のヘッダーファイル
HTML のファイル
5
また、先頭の文字がピリオドやアンダースコアであるファイル名のファイルは、利用者の環
境設定情報の保管など,少し特殊な用途のために使われる。こうしたファイルはファイル名
の表示を行なうコマンド ls でも普通は表示されない。
日本語のファイル名が使える場合もあるが、利用環境や使用するアプリケーシヨンによっ
てはうまく取り扱えないこともある。
2.2.4 絶対パス名
/
すべてのファイルはルートからディレクトリをた
Applications
どった道筋にあるディレクトリの名前をつなげてい
Users
tacibana
furuta
けば区別できることになる。このような道筋をパス
名と呼び、とくにルートから始まるものを絶対パス名
と呼ぶ。UNIX および MacOSX では、1文字の/で
C
C
helloworld.c
/Users/tacibana/C/helloworld.c
helloworld.c
図 2.2
ルートを表し、道筋のディレクトリ名を/で区切るこ
とで絶対パス名を表現する。
図 2.2 の場合、ルートから Users、tacibana、C と
絶対パス名
3つのディレクトリを経由しているので、絶対パス名
は/Users/tacibana/C/helloworld.c となる。
2.2.5 相対パス名
/
絶対パス名は長くなるので、ファイルの指定にいち
Applications
いち絶対パス名を使うのは不便である。そこで、いく
Users
tacibana
furuta
つかの基準点からの相対位置でファイルを指定でき
るようになっている。
C
C
helloworld.c
. = /Users/tacibana/C
= ~/C
helloworld.c
図 2.3
相対パス名
基準点として用いられるのはルート (/)、ホーム
ディレクトリ (~)、カレントディレクトリ(.)の3つ
であり、特にホームディレクトリ、カレントディレク
トリからの道筋を相対パス名と呼ぶ。また、カレント
ディレクトリやホームディレクトリから親ディレク
トリ(..) を経由した道筋を指定することも出来る。
図 2.3 は、カレントディレクトリが/Users/tacibana/C であることを表していて、ホー
ムディレクトリが/Users/tacibana である場合、カレントディレクトリ. は~/C と表す
ことも出来る。図 2.4 では、親ディレクトリを経由しすることで、/Users/furuta/C を
../../furuta/C という相対パス名で表している。
ルート(/)はファイルシステムに1つしか無く、ファイルシステムの最上位の基準点で
ある。カレントディレクトリ(.)は現在(カレント)利用者が作業を行っているディレク
トリであり、カレントワーキングディレクトリと呼ばれることもある。ホームディレクトリ
6
(~)はユーザの所有できるファイルの最上位の基準点であり、ユーザごとに1つ定められて
いて、ユーザが変えることは出来ない。また、ユーザがログインした時点でのカレントディ
レクトリでもある。
ルートとホームディレクトリは移動することが出来ないが、カレントディレクトリは移動
することが出来る。また、アプリケーションごとにカレントディレクトリを決めることが出
来る。
\
~
.
..
~user
ルートディレクトリ
ホームディレクトリ
カレントディレクトリ
親ディレクトリ
ユーザ名が user のホームディレクトリ
たとえば、授業で使う「ターミナル」というアプリ
/
../..
Applications
ケーションでは、起動したときにはユーザのホーム
Users
tacibana
../../furuta
ディレクトリがカレントディレクトリであるが、ディ
furuta
レクトリを移動するコマンド (cd)で移動することが
..
C
helloworld.c
C
出来る。また、Office のようなアプリケーションもカ
../../furuta/C
helloworld.c
レントディレクトリを持っている。たとえば、ファイ
ルメニューからファイルを読み書きするときには、カ
レントディレクトリのファイルを読む、または、カレ
図 2.4 親ディレクトリを経由した相対
パス名
ントディレクトリにファイルを書くようなダイアロ
グが現れる。この時にディレクトリを変えるとカレ
ントディレクトリも移動することになる。
また、複数のアプリケーションがおなじディレクトリをカレントディレクトリとしても問
題はない。逆に同じディレクトリを複数のアプリケーションのカレントディレクトリとす
ることで、アプリケーション間でファイルを受け渡すことが可能になる。
7
第3章
UNIX コマンドとその使い方
3.1 シェル(bash)の操作
コマンドを入力して UNIX を使うのに必要な、シェル(bash)の基本的な操作について
説明する。ターミナルウインドウでコマンドを入力して実行させる操作の際に、プロンプト
を表示してコマンド入力を受け付け、必要なコマンドを実行して結果を表示したりするの
はシェルの仕事である。シェルは非常に多くの機構を持っているが、ここでは、人間がキー
ボードから操作をする観点から、よく使われるものを説明する。
3.1.1 コマンド行の編集と再利用
カーソルキーでカーソルキーを移動して編集する
↑
1つ前のコマンドを表示
←
カーソルを左へ移動
↓ 1つ後のコマンドを表示
→ control +a
カーソルを右へ移動
control +e
delete control +d
行の先頭
行の末尾
カーソルの1つ前の文字を削除
カーソル位置の文字を削除
3.1.2 コマンド履歴の利用
コマンドの履歴を利用することで同じコマンドの入力が簡単に出来るようになっている。
!で始まる入力はコマンド履歴にあるコマンドを実行する。また,コマンド履歴は history
コマンドで表示できる。
8
!!
直前のコマンドを再実行
!str
str が先頭にあるコマンドを実行 (str は文字列)
^str1^str2 1つ前のコマンドの str1 を str2 に変えて実行 (str1,str2 は文字列)
!*
1つ前のコマンドのコマンド名を除くすべての引数
!$
1つ前のコマンドの最後の引数
例えば、history の結果が以下のような場合
%history
2 cd ..
3 ls
4 cd ../../..
5 ls
6 gcc xxxx.c
7 ls
8 pwd
9 cd Documents/tacibana-1
コマンド履歴を利用すると、
!!
!9
!-3
!g
cd ..
cd Documents/tacibana-1
cd ../../..
gcc xxx.c
のようにコマンドを実行できる。
3.1.3 日本語/英文字入力モード
コマンドは英文字で入力する。以下は ATOK でのモード切替を示す。
control
+
shift +c
control +shift +z
control +shift +x
control +shift +v
英字モード(コマンドはこのモードで入力する)
ひらがなモード
カタカナモード
日本語での英字モード
(このモードは英字が出るがコマンドの入力には使えない)
3.1.4 コマンド入力時の操作
おなしな状態になってしまったときは次のキー入力を1つずつ試してみる。
9
return enter control +q
control +c
control +d
これでだめなら、ターミナルを一旦閉じて、再度起動する。
3.1.5 ファイル名とコマンド名の補完
tab esc +?
補完できるところまで補完し、複数候補のある位置まで表示
補完候補の一覧を表示。ファイル、コマンドの両方を表示できる
3.1.6 ワイルドカードを使ったファイル名の簡略指定
*
0個以上の任意の文字
?
任意の1文字
[xyz] x,y,z の内、いずれか1文字
[a-z] a から z の内、いずれか1文字
[^abc] a,b,c 以外の任意の1文字
3.1.7 リダイレクション
デフォルトでは標準出力と標準エラー出力は画面に、標準入力はキーボードに設定されて
いる。標準出力をファイルに切り替えるときに使用するのが > である.標準入力を切り替
えるのには < を使用する.このような入出力の切り替えをリダイレクションという.
command > file
command >> file
command < file
標準出力をファイルへ切り替える
標準出力をファイルへ切り替え、ファイルの最後に追加する
標準入力をキーボードからファイルに切り替える
• ls -l > filelist を実行しなさい。
• filelist というファイルがどのようなものかを確認しなさい。
この例では、カレントディレクトリのファイルの情報が、filelist というファイルに書
き込まれる。したがって、filelist の内容は、ls -l の結果と同じものになる。
<と>を一つのコマンドで使用することもできる。>を使用した場合、ファイルは常に上書
きされる。すでにあるファイルに追加したい場合は、>>を使用する。
• ls -l > filelist
• cat < filelist > ffff
10
• cat < filelist >> ffff
の結果を確認しなさい.。
ffff には filelist が追加される。もともと ffff には filelist が書かれていたので,こ
のコマンドにより、もう一回書かれることになる。
• cat > xxx に続いて適当な文字を入力し。最後にcontrol +d を入力しなさい。ファ
イル xxx の内容がどうなっているかを確認しなさい。
このコマンドでは入力にリダイレクトされるのはキーボードからの入力である。したがっ
て xxx にはキーボードからの入力が書き込まれる。
標準出力と標準エラーを同一のファイルへ切り替えるときは &> を使用する。また、< と
> を組み合わせて使用することで、標準入力、標準出力ともにファイルへ切り替えることが
出来る。
command &> file
command < datafile > outfile
標準出力をファイルへ切り替える
標準入力、標準出力ともにファイルに切り替える
3.1.8 パイプ
「パイプ」は複数のコマンドの標準入力と標準出力を接続する.
• ls -l > file2
grep ’public_html’ file2
を実行しなさい.
grep コマンドはパターンを検索するコマンドである.上のコマンドではカレントディレ
クトリから public_html の含まれる行を表示する.
• ls -l | grep ’public_html’
を実行しなさい.
上のコマンドは一つ上のコマンドと同じ出力となるが,file2 を使わない.パイプは何段
でも重ねることができる.このため,コマンドの出力を次のコマンドの入力にすることがで
き,簡単なコマンドの連続で複雑な操作を行うことができる.UNIX のコマンドはこのよう
な使い方ができるように標準入力を処理して標準出力に出力する構成になっているものが
多い.また,パイプを使うことを前提として,
「無駄な」出力を行わないようになっている.
command1 | command2
.... 複数のコマンドの標準入力と標準出力を接続する
3.2 UNIX コマンド
コマンドもファイルであり、/bin、/usr/bin、/usr/local/bin などのディレクトリに置
かれている。これらのディレクトリは環境変数 PATH に:で区切って記録されており、シェ
11
ルはそれらのディレクトリを検索してコマンドを探し実行する。また、/usr/bin/ls とか
./bin/mycommand のようにパス名を含む場合は、パス名で指定されるファイルをコマンド
として実行する。環境変数 PATH の値は echo $PATH で確認できる。
3.2.1 コマンドの形式と例
コマンドの一般的な形式は以下の様になっている。
コマンド名 [オプション] [引数] ...
たとえば、ls -l ~/C
では、ls がコマンド、-l がコマンドの動作を変更するオプション、
~/C が引数でこの場合はパス名になっている。オプションや引数は複数並ぶこともある。
以下に基本的なコマンドを列挙する.注意点:Unix では一度消したファイルは二度と復
活はできないと考えること.
引数で指定された文字列を表示
echo
echo str
echo $PATH
文字列str を表示する
環境変数PATH の内容を表示する
日時を表示する
date
date
date -u
現在の日付、時刻を表示する
世界標準時で、現在の日付、時刻を表示する
カレンダーを表示する
cal
cal
cal 05 2016
今月のカレンダーを表示する
指定された月、年のカレンダーを表示する
(この例の場合は 2016 年 5 月)
文字列をファイルの中から検索し、見つかった行を表示する
grep
grep if ff.c
sort
ff.c から if という単語を含んでいる文を検索する
入力ファイルの内容を行単位でソートする
12
ファイルの情報を表示する
ls
カレントディレクトリのファイルの情報をを表示する
ls
ls d
ls -al
指定されたディレクトリd にあるファイルの情報を表示する
名前以外の詳しい情報も表示する
pwd
カレントディレクトリを表示する
cd
カレントディレクトリを移動する
ホームディレクトリへ移動する
cd
cd ..
cd d
親のディレクトリへ移動する
ディレクトリd へカレントディレクトリを移動する
空のファイルをつくる、ファイルの更新時刻を更新する
touch
f という名前の長さ0のファイルを作る
f の更新時刻を更新する
touch f
ファイルをコピーする
cp
cp f1 f2
cp f1 f2 d
f1 をコピーして、名前をf2 とする
一つ以上のファイルをディレクトリd にコピーする
コピー元のファイル名は空白で区切る
この例ではf1 とf2 という 2 つファイルをコピーしている
ファイルを移動する/名前を変える
mv
ファイルf をディレクトリd に移動する
mv f d
mv f1 f2
ファイルf1 の名前をf2 に変える
ファイルを消す
rm
ファイルf を消去する
rm f
ディレクトリを作る
mkdir
d という名前のディレクトリを作る
mkdir d
ディレクトリを消す
rmdir
ディレクトリd を消去する
rmdir d
file
ファイルの種類を判別する
file files
files の種類を判別する
ファイルを印刷する
lpr
lpr -Pp f プリンタ名p を指定して、ファイルf を印刷する
マニュアルを表示する
man
man c
コマンドc のマニュアルを表示する
操作はless と同じ
13
ファイルの内容を表示
cat
cat f
ファイル f の内容を表示する
画面のコントロールは行わないため、
行数の大きなファイルを表示するとスクロールして見えなくなる
cat f1 f2 f1 とf2 の内容を連結して表示する
この出力をリダイレクトしてファイルに書き込むと、
2つのファイルの内容を連結したファイルができる
cat -v f
cat -n f
表示できない文字コードが含まれているファイル f を表示する
1から始まる行番号を付けてファイル f を表示する
ファイルの内容を表示
less
less f
f の内容を表示する
cat と異なり、画面のコントロールを行うため、
行数の大きなファイルの表示を行うことができる
space b
return y
g
G
/str
n
q
サブコマンドとして以下のようなものがある
1画面先に進む
1画面目に戻る
1行先に進む
1行前に戻る
ファイルの最初に移動
ファイルの最後に移動
文字列str を検索
前回の検索の繰り返し
終了
14