UNIXの基本操作とC言語プログラミング

UNIX の基本操作と C 言語プログラミング
電気情報工学科 ∗ コンピュータシミュレーション
2015 年 4 月 10 日 (金)
概要
UNIX における C 言語プログラミングの復習を行う.ここでは,UNIX における
ファイル構造を理解し,基本的な操作を行えるよう頻繁に使うコマンドを示す.また,
C 言語によるプログラミングを行うため,エディタ emacs の基本操作と,C 言語プロ
グラムのコンパイルと実行までの一連の流れを理解し,自分でできるようになること
を目指す.
1 UNIX におけるファイル(ディレクトリ)構造
UNIX(Linux,Mac) におけるファイル構造は,図 1 のようになっており,木のようである
ことからツリー構造と呼ばれている.
このファイル構造には,以下のような特徴がある.
• UNIX のファイル構造は,図 1 のようにツリー (木) 構造呼ばれる階層構造になって
いる.それは,ファイルとディレクトリから構成されている.
• 記憶媒体に記録されたデータのまとまりをファイルと言う.コンピュータが実行す
ることができる命令の集合であるプログラムファイルと,コンピュータの利用者が
作成した情報を記録しておくデータファイルがある.
• ファイルを分類・整理するための保管場所をディレクトリ 1 と言う.関連する複数
のファイルをまとめて一つのディレクトリに入れることにより,効率的に記憶装置
を管理することができる.ディレクトリの中にさらにディレクトリを作成すること
もでき,階層構造にすることができる.
• ディレクトリには,以下のように表現されるものがある.
∗
1
秋田工業高等専門学校
windows ではフォルダと呼ぶ
1
– 今,自分が居るディレクトリを,カレントディレクトリと言う.カレントディ
レクトリを明示したい場合は,1 つのピリオド「.」で表す.
– カレントディレクトリの 1 つ上のディレクトリを親デレクトリと言う.2 つの
ピリオド「..」が,親ディレクトリを表す.
– カレントディレクトリの 1 つ下のディレクトリをサブデレクトリと言う.複数
存在することが可能なので,それぞれの名前で表す.
– ユーザ各個人が使用 (読み,書き,実行) を許されている最上位のディレクトリ
をホームディレクトリと言う.
– ログインしたときに入るディレクトリをログインディレクトリと言う.通常は
ホームディレクトリと同じである.
• ファイルやフォルダの所在を示すものをパスと言う.ファイルやフォルダのハード
ディスクでの住所みたいのものである.それは,ディレクトリ名を書き並べること
により表すことができ,その区切りには「/」(スラッシュ) を使う.
• パスの表し方は,2 通りある.最上位のルートディレクトリ「/」から表す絶対パス
と,カレントディレクトリから表す相対パスである.例えば,図 1 の sakamoto をカ
レントディレクトリとし,hello.c のパスは,
絶対パス
相対パス
/home/user/e99999/work/hello.c
../e99999/work/hello.c
となる.これを見て分かるように,絶対パスの場合,カレントディレクトリに関係な
く,一意に決まる.それに対して,相対パスは,カレントディレクトリに依存する.
2
!!
"#$!
!"#$$&&4!
%&'(!
)*$!
+()!
"#($!
(,,,!
#*-*!
%&$2+6%&.(!
%&.(!
%&$2+611!
0$&.! 0$&.12!
/&$-!
%&!
3".*!
+,!
'-+5$63".*6!
4(#4!
)*!
$'+5$64(#46!
3&&! %&.(%&.(!
'("!
%&.(%&.(!
')66%&.(%&.(611!%&.(!!
)*!
$'63&&6!
7*$!
206%&.(%&.(67*$!
図 1: UNIX のファイル構造とそれを扱うコマンド
2 UNIX の基本操作(コマンド)
UNIX で作業する時は,ターミナルにおいてコマンドを用いて対話形式で操作を行うと
効率的である.もちろん,windows のようなファイルマネージャーもあるが,慣れてくる
とコマンド操作の方が圧倒的に効率良く作業できるようになる.
2.1
よく使うコマンド
これからプログラムを作成するために,おそらく頻繁に使用することになるコマンドは
以下のようなもである.他にも多くのコマンドが用意されているが,必要に応じて調べる
と良い.
2.2
各コマンドの使い方
これから,コマンドの動作について記述するが,形式あるいは機能・形式のところのカ
ギ括弧 [ ] 内は省略可能を示している.これはオプションなので,必要なときに使う.
3
表 1: UNIX でよく使われるコマンド.下の 5 つは,正確にはコマンドではないが,便利
な機能である.
2.2.1
コマンド
機能
man
pwd
ls
cd
mkdir
rmdir
cp
mv
rm
cat
less
↑ 又は ↓
[Ctrl]+c
[Tab]
左ドラッグ
中クリック
コマンドのオンラインマニュアル
現ディレクトリの表示
ファイルとディレクトリの表示
ワーキングディレクトリの移動
ディレクトリの作成
ディレクトリの削除
ファイルやディレクトリの複製
ファイルやディレクトリの名前の変更や移動
ファイルの削除
ファイルの表示や連結
ファイルの内容を一画面単位で出力
history 以前のコマンドの表示 編集可能
プロセスの強制終了
補完機能
左ボタンのドラッグとドロップで文字列のコピー
コピーされた文字列をペースト
コマンドの使用方法を調べる
指定されたコマンドのオンラインマニュアルを一画面分ずつ表示する.
コマンド
語源
形式
注意
例
2.2.2
man
manual
man commandname
次の頁を見るときには f キーを,前の頁を見るときには
b キーを押す.表示をやめるときには,q キーを押す.
次に説明している命令「ls」の動作を調べる.
man ls
現ディレクトリの表示
自分が,今どこにいるか調べるコマンドである.
コマンド
語源
機能
pwd
print working directory
現在のワーキングディレクトリ(カレントディレクトリ)
を絶対パス名で表示する.
4
2.2.3
ファイルとディレクトリの表示
自分が,今いるディレクトリの中にあるファイルやディレクトリを調べるときに使う.
コマンド
語源
機能
形式
オプション
なし
-a
-l
-d
-F
-I
-R
-s
-t
-u
-o
-x
2.2.4
ls
list
現在のワーキングディレクトリのファイルやディレクト
リの情報を表示する.
ls [-adFgilostux] [filename· · · ]
ファイル名のみ並べて出力する.
.(ドット) で始まる隠しファイルも含めて,すべて出力
する.
ファイルの詳細管理情報をロング形式で出力する.
filename がディレクトリの時,その名前のみ表示する.
ファイルの種類を記号で表示する.
< 記号の意味 >
表示なし プレーンなデータファイル
/
ディレクトリファイル
*
実行可能ファイル
inode 番号を表示する.
ディレクトリの階層構造を表示する.
ファイルのサイズをブロック単位で表示する.
最終更新時刻の新しいものから順に表示する.
l オプションとの併用時,最終更新時刻の代わりに最終
アクセス時刻を表示する.
l オプションと同じだが,グループ名を表示しない.
ファイル名を横に並べて出力する.
ディレクトリの移動
今いるディレクトリから他のディレクトリに移動するときに使うコマンドである.
コマンド
語源
機能・形式
cd
change directory
指定されたディレクトリに移動
cd directory
ログインディレクトリに移動
cd
親ディレクトリに移動
cd ..
5
2.2.5
新しいディレクトリの作成
ディレクトリを作成する.ディレクトリ自身を表す「.」と,親ディレクトリを表す「..」
の2つが,自動的に作成される.
コマンド
語源
形式
2.2.6
mkdir
make dirirectory
mkdir directory
指定されたディレクトリを作成
ディレクトリの削除
ディレクトリを削除する.
コマンド
語源
形式
注意
rmdir
rmove directory
rmdir directory
削除するディレクトリは空でなければならない.ディレ
クトリ配下にファイルがある場合,配下のファイルごと
削除するには rm コマンドを使う.いずれの場合も mkdir
コマンド同様,親ディレクトリに書き込み権が必要.
6
2.2.7
ファイルやディレクトリのコピー
ファイルやディレクトリのコピーを作成したい場合に使う.
コマンド
語源
機能・形式
オプション
-i
-p
-r
2.2.8
cp
copy
filename1 を filename2 という名前でコピーを作成する.
cp [-ip] filename1 filename2
directory2 の配下に directory1 をサブディレクトリとし
て,配下のファイルごとコピーする.
cp -r[-ip] directory1 directory2
各 filename(サブディレクトリ指定可)を,最後に指定
した directory 配下にコピーする.
cp -r[-ipr] filename· · · directory
コピー先ファイルが既存の場合,置き換えを行うかどう
か確認してくる.(置き換える場合=y ,置き換えない
場合=n と入力する)
内容だけでなく,最終修正時刻・アクセス許可もコピー
する.
ディレクトリ配下のファイルごとコピーする.
(ファイ
ルがサブディレクトリの場合は,その配下のファイルご
とコピーする.
)
ディレクトリやファイルの移動と名前の変更
ディレクトリやファイルを移動させるときに使う.また,名前を変えるときにも使う.
コマンド
語源
機能・形式
オプション
-i
mv
move
filename1 を filename2 に名前を変える.
mv [-i] filename1 filename2
directory1 を directory2 に名前を変える.directory2 が既
存の場合,directory2 の配下に directory1 を移動する.
mv [-i] directory1 directory2
各 filename(サブディレクトリ指定可)を,最後に指定
した directory 配下に移動する.
mv [-i] filename · · · directory
移動先ファイルが既存の場合,置き換えを行うかどうか
確認してくる.置き換える場合=y,置き換えない場合=n
と入力する.
7
2.2.9
ファイルの削除
ファイルを削除するときに使う.また,オプションを付けて,ディレクトリごと削除す
ることもできる.
コマンド
語源
機能・形式
rm
re move
ディレクトリから各 filename を削除する.
rm [-i] filename1
directory 配下のファイルから順に削除していき,directory
自身も削除する.
オプション
-i
-r
-f
rm -r[i]directory
削除していいかどうか確認のメッセージを出す.削除す
る場合=y,削除しない場合=n と入力する.
directory 配下のファイルを削除し,directory 自身も削
除する.
ファイルを強制的に削除する.
3 プログラミングの流れ
ディレクトリの操作ができるようになったので,次はプログラムを作成と実行の練習を
行う.まず,初心者が最初に作るものとして,最も有名な’Hello World’ というプログラム
をつくる.
1. ターミナルの起動
• ターミナル (端末) のアイコンをクリックして,ターミナルを立ち上げる.
2. 作業ディレクトリの作成と移動
• 「mkdir hello」とタイプして,作業用ディレクトリ hello を作る.
• 作業用ディレクトリができているか,
「ls」コマンドで確認する.すると「hello」
が表示される.
• 「cd hello」とタイプして,作業用ディレクトリに移動する.
• 「pwd」コマンドで,作業用ディレクトリに移れたことを確認する.
3. エディタの起動
• 「emacs hello world.c&」とタイプする.
• すると,プログラムのソースを書くウインドウが現れる.
4. プログラムの記述
8
• エディタのウィンドウに以下のプログラムを書く.
#include <stdio.h>
int main(void)
{
printf("Hello World !!\n");
return 0;
}
5. プログラムの保管
• プログラムを書き終わったならば,[file] メニューの [Save(current buffer)] を選
択する.あるいは,フロッピーディスクアイコンをクリックして,ソースファ
イルを保管する.
• ターミナル上で「ls」コマンドを打ち,ソースファイルが保管されていること
を確認する.
6. コンパイル
• ターミナル上で「gcc -o aisatsu hello world.c」と打ち込み,先ほど作成
したソースファイルをコンパイルする.
• もし,コンパイルエラーが発生したら,ソースファイルを修正する.
• 実行ファイルができているか,
「ls」コマンドで確認する.
7. 実行
• ターミナル上で「./aisatsu」と打ち込み,プログラムを実行させる.
• ’Hello World’ と表示されれば,プログラムは動作は完璧である.
以上のプログラム作成の手順をまとめると,図 2 のようなフローになる.
4 emacs の基本的な使い方
4.1
実行方法
ターミナル上で,
「emacs」と打ち込めば,エディタが立ち上がり操作可能となる.しか
し,このようにすると,後でファイル名を指定する必要が生じ面倒なので,通常は,ファ
イル名 (例 hogehoge.c) をつけて,
emacs hogehoge.c &
9
始め
Linux 起動
ターミナルの起動
作業ディレクトリー作成(省略可)
作業ディレクトリーに移動
エディターの起動
プログラム作成
ソースファイルの保管
コンパイル エラー発生
ターミナルのアイコンをダブルクリック
mkdir 作業ディレクトリー名
cd 作業ディレクトリー名
emacs ソースファイル名
File/save
gcc -o
かフロッピーディスクアイコン
実行ファイル名 ソースファイル名
./実行ファイル名
実行
結果表示
終わり
エラー発生
図 2: プログラムの作成のフローチャート
のようにする.こうすると,カレントディレクトリーに「hogehoge.c」の有無により次
の動作を行う.
• ファイルが無い場合には,新規にファイルを作成する.
• ファイルが既にある場合には,そのファイルの編集モードに入る.
ファイル名の後の「&」は,emacs をバックグラウンドで動作させるということを示し
ている.こうすると,端末から次の命令を打ち込むことができて便利である.例えば,編
集したソースファイルを同じ端末でコンパイルすることができる.
4.2
編集機能
表 2 に emacs の操作を示すが,そのキー操作は次の約束に従う.
• 表中の C-x は,Ctrl キーを押したまま x キーをタイプする.
• 表中の Esc-x は,Esc キーを押し,離してから x キーをタイプする.
これを忘れないで,表の機能を使って,効率よくプログラムを作成しよう.
10
表 2: emacs の基本的なキー操作
キー操作
C-g
C-k
C-Space
Esc-w
C-w
C-y
C-s
C-r
Esc-x replace-string
C-x,s
機能
現在実行中のコマンドを中断
カーソルの位置から行末までカット.カットされた部分
は,C-y でペーストできる.
現在の位置を領域の開始としてマークする.後は,上下
左右の矢印でカーソルを移動して,領域を決める.そし
て,Esc-w や C-w を使う.
領域をコピーする.コピーされた部分は,C-y でペース
トできる.
領域をカットする.カットされた部分は,C-y でペース
トできる.
コピーやカットした部分をペースト (張り付け) する.
順方向にサーチを開始する.
逆方向にサーチを開始する.
文字列を置換する.
ファイルを上書き保存する.
5 演習
[練習 1] 自分のホームディレクトリに,この講義(コンピュータシミュレーショ
ン)のディレクトリを作成し,その中に今日の日付のディレクトリを作
成しなさい.
[練習 2] 練習 1 で作成したディレクトリに移動し,ファイル名 namecade.c として
emacs を起動しなさい.
[練習 3] 練習 2 で起動した emacs の中に,実行すると以下のようにターミナルに
出力される C 言語プログラムを書きなさい.
Akita National College of Technology
Department of Electrical and Computer Engineering
No.20-00(自分の学籍番号), Fumito SAKAMOTO(自分の名前)
[練習 4] 練習 3 で作成したプログラムを実行ファイル名を name としてコンパイル
し,実行しなさい.
[練習 5] 三角関数 (sin θ, cos θ, tan θ) の角度とその時の値の表を出力するプログラ
ムを作成し,実行しなさい.
11