%=====================================================================
% 秋田高専 5E 算機用応用テキスト
%　　テーマ　パソコンの取り扱い方法とコンパイル・実行
%    本テキストの内容
%        ・パソコンの取り扱い方法
%　　　　・コンパイルと実行
%
% last updated 2005.4.12
%    created by  Masashi Yamamoto
%     e-mail yamamoto@akita-nct.jp
%=====================================================================
\documentclass[10pt,a4paper]{jarticle}
\usepackage{graphicx,amsmath,amssymb,ascmac,float}
\oddsidemargin 0mm  %左の余白 25.4mm-0mm　奇数ページ
\evensidemargin 0mm %左の余白 25.4mm-0mm　偶数ページ
\textwidth 160mm
\newcommand{\tw}[1]{\texttt{#1}}
\newcommand{\command}[1]{「\texttt{#1}」}
%
\begin{document}
\title{UNIXのコマンドとコンパイル・実行}
\author{山本昌志\thanks{国立秋田工業高等専門学校　電気工学科}}
\date{2005年4月14日}
\maketitle
%
%
%=====================================================================
\section{UNIXのディレクトリー構造}
%=====================================================================
本授業で使うUNIX(Linux)のディレクトリー構造は、図\ref{fig:UNIX_file}のようになっ
ている。これは、木構造と呼ばれる階層構造で、図を反対にすれば、ちょうど木の幹と枝
のようになっていることが分かる。木は根(root)が必ずあり，そこから，枝が延び，節で
分かれ，末端には葉がる。「/」ルートディレクトリ(記号としては「スラッシュ」と発音)
が根に相当し，その他のディレクトリが節に，ファイルが葉に相当する。ディレクトリ 
(Directory)はWindowsのフォルダに相当する物で，他のファイルあるいはディレクトリを
格納できる。ディレクトリを用いる事により，種類別にファイルを整理する事ができるの
で便利である。

UNIXのディレクトリーやファイルの取り扱いについては、以下の特徴がある。
\begin{itemize}
 \item{UNIXのハードディスク\footnote{実際はハードディスクに限らず、
      CD-ROMやフロッピーディスクも、このツリー構造に含まれる。}のファ
      イル構造は、図\ref{fig:UNIX_file}のようにツリー(木)構造呼ばれる
      階層構造になっている。それは、ファイルとディレクトリーから構成さ
      れる。}
 \item{ハードディスクなどに記録されたデータのまとまりをファイルと言う。
      コンピュータが実行することができる命令の集合であるプログラムファ
      イルと、コンピュータの利用者が作成した情報を記録しておくデータファ
      イルがある。}
 \item{ファイルを分類・整理するための保管場所をディレクトリー
      \footnote{Macやwindowsではフォルダーと呼ぶ}と言う。関連する複数
      のファイルをまとめて一つのディレクトリーに入れることにより、効率
      的に記憶装置を管理することができる。ディレクトリーの中にさらにディ
      レクトリーを作成することもでき、階層構造によって細かい分類を表現
      することもできる。}
 \item{ディレクトリーには、以下のように表現されるものがある。
      \begin{itemize}
       \item{今、自分が居るディレクトリーを、カレントディレクトリーと言う。
	    \footnote{ワーキングディレクトリーと言うこともある。}カレントディ
	    レクトリーを明示したい場合は、1つのピリオド\command{.}  で表しま
	    す。}
       \item{カレントディレクトリーの1つ上のディレクトリーを親デレクトリーと
	    言う。2つのピリオド\command{..}が、親ディレクトリーを表す。}
       \item{カレントディレクトリーの1つ下のディレクトリーをサブデレクトリー
	    と言う。複数存在することが可能なので、それぞれの名前で表すしかな
	    い。}
       \item{ユーザー各個人が使用(読み、書き、実行)を許されている最上
	    位のディレクトリーをホームディレクトリーと言う。}
      \end{itemize}
      }
 \item{ファイルやフォルダの所在を示すものをパスと言う。ファイルやフォ
      ルダのハードディスクでの住所みたいのものである。それは、ディレク
      トリー名を書き並べることにより表すことができ、その区切りには
      \command{/}(スラッシュ)を使います。}
 \item{パスの表し方は、2通りある。最上位のルートディレクトリー
      \command{/}から表す絶対パスと、カレントディレクトリーから表す相
      対パスである。例えば、図\ref{fig:UNIX_file}のyamamotoをカレント
      ディレクトリーとし、\tw{hello.c}のパスは、\vspace{3mm}\\
       \begin{tabular}{lll}
	& 絶対パス & \texttt{/home/user/work/hello.c} \\
	& 相対パス & \texttt{../e99999/work/hello.c}
       \end{tabular}\vspace{3mm}\\
      となる。}
\end{itemize}
%

また、図\ref{fig:UNIX_file}には、それを扱うためのコマンドも書いてある。コマンド
については、次に勉強する。
%
\begin{figure}[hbpt]
 \begin{center}
  \includegraphics[keepaspectratio,scale=0.7]{figure/UNIX_file.eps}
  \caption{UNIXのファイル構造とそれを扱うコマンド}
  \label{fig:UNIX_file}
 \end{center}
\end{figure}
%
\newpage
%=====================================================================
\section{UNIXのコマンド}
%=====================================================================
%---------------------------------------------------------------------
\subsection{使用頻度の高いコマンド}
%---------------------------------------------------------------------
使用頻度の多いUNIXコマンドを以下に示す。これらのコマンドは、すべてターミナルから
打ち込み、コンピューターに命令を与える。他に、ファイルマネージャーもあるので、組
み合わせて使って欲しい。
%
\begin{table}[H]
 \caption{共振回路の実験に使う機器}
  \begin{center}
   \label{table:unix_command}
  \begin{tabular}{ll}\hline
   \multicolumn{1}{c}{コマンド} &
   \multicolumn{1}{c}{機能} \\
   \hline \hline
   \tw{man} & コマンドの動作の説明 \\
   \tw{pwd} & 現ディレクトリーの表示 \\
   \tw{ls} & ファイルとディレクトリーの表示 \\
   \tw{cd} & ワーキングディレクトリーの移動 \\
   \tw{mkdir} & ディレクトリーの作成 \\
   \tw{rmdir} & ディレクトリーの削除 \\
   \tw{cp} & ファイルやディレクトリーの複製 \\
   \tw{mv} & 名前変更や移動 \\
   \tw{rm} & ファイルの削除 \\
   \tw{cat} & ファイルの表示や連結 \\
   \tw{less} & ファイルの内容を一画面単位で出力 \\
   \tw{man} & コマンドのオンラインマニュアル \\
   $\uparrow$又は$\downarrow$ & history　以前のコマンドの表示　編集可能 \\
   $[$Ctrl$]$+c & プロセスの強制終了 \\
   $[$Tab$]$ & 補完機能 \\
   \hline  
  \end{tabular}
  \end{center}
\end{table}
%
%---------------------------------------------------------------------
\subsection{コマンドの動作}
%---------------------------------------------------------------------
%----------------------------------
\subsubsection{コマンドの動作を調べる}
%----------------------------------
%----------------------------------
\subsubsection{現ディレクトリーの表示}
%----------------------------------
自分が、今どこにいるか調べるコマンドである。
\begin{quote}
 \begin{tabular}{p{20mm}p{100mm}}
  \textbf{コマンド} & \tw{pwd} \\
  \textbf{語源} & \textbf{p}rint \textbf{w}orking
  \textbf{d}irectory\hspace{5mm}\\
  \textbf{機能} & 現在のワーキングディレクトリ（カレントディレクトリ）を絶対パス
  名で表示する。 \\
  %
 \end{tabular}
\end{quote}
%
%-----------------------------------------
\subsubsection{ファイルとディレクトリーの表示}
%-----------------------------------------
自分が、今いるディレクトリーの中にあるファイルやディレクトリーを調べるときに使う
コマンドである。
\begin{quote}
 \begin{tabular}{p{20mm}p{100mm}}
  \textbf{コマンド} & \tw{ls} \\
  \textbf{語源} & \textbf{l}i\textbf{s}t \\
  \textbf{機能} & 現在のワーキングディレクトリのファイルやディレクトリーの情報を
  表示する。\\
  \textbf{形式} & \tw{ls [-adFgilostux] [{\it filename}$\cdots$]} \\
  \textbf{オプション} & \\
  \multicolumn{1}{r}{なし} & ファイル名のみ並べて出力する。\\
  \multicolumn{1}{r}{\tw{-a}} & \tw{.}(ドット)で始まる隠しファイルも含めて、すべて出
  力する。\\ 
  \multicolumn{1}{r}{\tw{-l}} & ファイルの詳細管理情報をロング形式で出力する。\\
  \multicolumn{1}{r}{\tw{-d}} & filenameがディレクトリの時、その名前のみ表示する。\\
  \multicolumn{1}{r}{\tw{-F}} & ファイルの種類を記号で表示する。\\
  & $<$ 記号の意味 $>$\\
  & \begin{tabular}{ll}
    表示なし & プレーンなデータファイル \\ 
　　\tw{/} & ディレクトリファイル \\ 
　　\tw{*} & 実行可能ファイル 
  \end{tabular}\\
  \multicolumn{1}{r}{\tw{-I}} & inode番号を表示する。\\
  \multicolumn{1}{r}{\tw{-R}} & ディレクトリの階層構造を表示する。\\
  \multicolumn{1}{r}{\tw{-s}} & ファイルのサイズをプロック単位で表示する。\\
  \multicolumn{1}{r}{\tw{-t}} & 最終更新時刻の新しいものから順に表示する。\\
  \multicolumn{1}{r}{\tw{-u}} & \tw{l}オプションとの併用時、最終更新時刻の代わりに最終
  アクセス時刻を表示する。\\
  \multicolumn{1}{r}{\tw{-o}} & \tw{l}オプションと同じだが、グループ名を
  表示しない。\\
  \multicolumn{1}{r}{\tw{-x}} & ファイル名を横に並べて出力する。\\
   \end{tabular}
\end{quote}
%
%---------------------------------------
\subsubsection{カレントディレクトリーの変更}
%---------------------------------------
今いるディレクトリーから他のディレクトリーに移るときに使うコマンドである。
\begin{quote}
 \begin{tabular}{p{20mm}p{100mm}}
  \textbf{コマンド} & \tw{cd} \\
  \textbf{語源} & \textbf{c}hange \textbf{d}irectory \\
  \textbf{機能} & directoryで指定されたディレクトリに、ワーキングディレクトリを
  変更する。directoryを指定しない場合は、ログインディレクトリに移動する。\\
  \textbf{形式} & \tw{cd} {\it directory} \qquad 指定されたディレクトリーに移動 \\
  & \tw{cd} \qquad ログインでレクトリーに移動 \\
  & \tw{cd ..} \qquad 親ディレクトリーに移動
 \end{tabular}
\end{quote}
%
%---------------------------------------
\subsubsection{ディレクトリーの作成}
%---------------------------------------
ディレクトリを作成する。ディレクトリ自身を表す「\tw{.}」と、親ディレクトリを表
す「\tw{..}」の２つが、自動的に作成される。
%
\begin{quote}
 \begin{tabular}{p{20mm}p{100mm}}
  \textbf{コマンド} & \tw{mkdir} \\
  \textbf{語源} & \textbf{m}a\textbf{k}e \textbf{dir}irectory \\
  \textbf{形式} & \tw{mkdir} {\it directory} \qquad 指定されたディレクトリーを作
  成
 \end{tabular}
\end{quote}
%
%---------------------------------------
\subsubsection{ディレクトリーの削除}
%---------------------------------------
ディレクトリを削除する。
%
\begin{quote}
 \begin{tabular}{p{20mm}p{100mm}}
  \textbf{コマンド} & \tw{rmdir} \\
  \textbf{語源} & \textbf{rm}ove \textbf{dir}ectory \\
  \textbf{形式} & \tw{rmdir} {\it directory} 指定されたディレクトリーを削除 \\
  \textbf{注意} & 削除するディレクトリは空でなければならない。ディレクトリ配下に
  ファイルがある場合、配下のファイルごと削除するには\tw{rm}コマンドを使う。いず
  れの場合も\tw{mkdir}コマンド同様、親ディレクトリに書き込み権が必要。
 \end{tabular}
\end{quote}
%
%-------------------------------------------
\subsubsection{ファイルやディレクトリーのコピー}
%-------------------------------------------
filename1　を　filename2　にコピーする。directory2　配下に　directory1　をサブディ
レクトリとして、配下のファイルごとコピーする。各filename（サブディレクトリ指定可）
を、最後に指定した　directory　配下にコピーする。
%
\begin{quote}
 \begin{tabular}{p{20mm}p{100mm}}
  \textbf{コマンド} & \tw{cp} \\
  \textbf{語源} & \textbf{c}o\textbf{p}y \\
  \textbf{形式} & \tw{cp [-ip]} {\it filename1}  {\it filename2}\\
  & \tw{cp -r[-ip]} {\it directory1}  {\it directory2}\\
  & \tw{cp -r[-ipr]} {\it filename}$\cdots$  {\it directory}\\
  \textbf{オプション} & \\
  \multicolumn{1}{r}{\tw{-I}} & コピー先ファイルが既存の場合、置き換えを行うかど
  うか確認してくる。(置き換える場合=\tw{y}　、置き換えない場合=\tw{n}と入力する）
  \\
  \multicolumn{1}{r}{\tw{-p}} & 内容だけでなく、最終修正時刻・アクセス許可もコピーする。\\
  \multicolumn{1}{r}{\tw{-r}} &　ディレクトリ配下のファイルごとコピーする。（ファイルがサブディレクトリの場合は、その配下のファイルごとコピーする。） 
 \end{tabular}
\end{quote}
%
%---------------------------------------
\subsubsection{}
%---------------------------------------
時間が無くて間に合わなかった。webを見てください。
%
%=====================================================================
\section{プログラムの作成と実行}
%=====================================================================
それでは、実際に、プログラムを作成して、実行させて見ましょう。初心者が
最初に作るものとして、最も有名な'Hello World'というプログラムを作りま
す。
%
\begin{enumerate}
 \item{ターミナルの起動}
      \begin{itemize}
       \item{端末のアイコンをクリックして、ターミナルを立ち上げる。}
      \end{itemize}
      %
 \item{作業ディレクトリーの作成と移動}
      \begin{itemize}
       \item{「\tw{mkdir hello}」とタイプして、作業用ディレクトリー\tw{hello}
	    を作る。}
       \item{作業用ディレクトリーができているか、「\tw{ls}」コマンドで確認し
	    ます。すると「\tw{hello}」が表示される。}
       \item{「\tw{cd hello}」とタイプして、作業用ディレクトリーに移動する。}
       \item{「\tw{pwd}」コマンドで、作業用ディレクトリーに移れたことを確認する。}
      \end{itemize}
      %
 \item{エディターの起動}
      \begin{itemize}
       \item{「\tw{emacs hello\_world.c\&}」とタイプする。}
       \item{すると、プログラムのソースを書くウインドウが現れる。}
      \end{itemize}
      %
 \item{プログラムの記述}
      \begin{itemize}
       \item{エディターのウィンドウに以下のプログラムを書きましょう。
	    \begin{quote}
	     \setlength{\baselineskip}{12pt}
	     \begin{verbatim}
		#include <stdio.h>
		
		int main(){

		   printf("Hello World !!\n");

		   return 0;
		}
	     \end{verbatim}
	    \end{quote}
	    }
      \end{itemize}
      %
 \item{プログラムの保管}
      \begin{itemize}
       \item{プログラムを書き終わったならば、[file]メニューの[Save(current
	    buffer)] を選択する。あるいは、フロッピーディスクアイコンをクリック
	    して、ソースファイルを保管する。}
       \item{ターミナル上で「\tw{ls}」コマンドを打ち、ソースファイルが保管さ
	    れていることを確認する。}
      \end{itemize}
      %
 \item{コンパイル}
      \begin{itemize}
       \item{ターミナル上で「\tw{gcc -o aisatsu hello\_world.c}」と打ち込み、
	    先ほど作成したソースファイルをコンパイルする。}
       \item{もし、コンパイルエラーが発生したら、ソースファイルを修正
	    する。}
       \item{実行ファイルができているか、「\tw{ls}」コマンドで確認する。}
      \end{itemize}
      %
 \item{実行}
      \begin{itemize}
       \item{ターミナル上で「\tw{./aisatsu}」と打ち込み、プログラムを実行させま
	    す。}
       \item{'Hello World'と表示されれば、プログラムは動作は完璧です。}
      \end{itemize}
\end{enumerate}
%
%=====================================================================
\end{document}
