工学基礎実験実習 - ファイル操作とシェル

岡山大学工学部情報系学科 
 

基本情報

  • 科目名: 工学基礎実験実習 ( Laboratory Work and Practice on Basic Engineering )
  • 区分: 専門基礎科目
  • 講義番号: 090235
  • 担当: 後藤 佑介,右田 剛史
  • 主な対象: 情報系学科 1 年次生
  • 学期: 前期
  • 時限: 火曜 4,5,6,7 限
  • 講義室: 工学部4号館 5階 プログラミング演習室
  • 種別: 必修
  • 単位数: 2 単位
  • 教科書: 本学科で編集したテキスト及び,B.W. カーニハン/D.M. リッチー著 「プログラミング言語C」
  • 本講義では,開発者向けとして世の中で広く使われているUNIX系の計算機を利用して,講義・演習を行うことにより計算機に関する基本的な知識や計算機の使用法について学ぶ.

  • 具体的には,UNIXオペレーティングシステムの基本的な操作法とコマンドを学習する.
    1. ファイルとディレクトリ
    2. シェル
    3. コマンドと実行可能ファイルの関係

講義日程(予定)

日( 4〜7 限)内容
01 2020.06.23 教科書4.1節「ファイルとディレクトリ」〜4.2.3節「ファイル名の補完」
022020.06.30 教科書4.2.4節「ファイルリダイレクション」〜4.5節「資料:その他のコマンド」

単位と試験について

  1. レポート,及び毎回の提出物で総合的に判断する.
  2. レポートの締め切りは,講義中で指示する.

学習項目

    目的:授業を通して,UNIX の基礎を学習する.

    1. ファイルとディレクトリ
    2. シェル
    3. コマンドと実行可能ファイルの関係

レポートの提出に関する注意

    レポートの提出に関する注意は,以下の通り.

    1. 第 1 回,第 2 回のレポートは,それぞれ個別のレポートとして期日までに提出すること.
    2. レポートは,moodle から TeXファイル"report1_095xxxxx.tex"と,PDFファイル"report1_095xxxxx.pdf"を2種類提出すること.
    3. レポートの作成については,本レポート用のTeXフォームをダウンロードして,利用すること.
    4. レポートの提出,印刷については,教育用計算機のページ からたどれる 演習/実験に関する情報 及び プリンタ使用について のページを参照のこと.
    5. レポートをコピーしない(されない)こと.アドバイスするのは良い.
    6. 本ページに記載しているレポート作成例をコピー&ペーストしてそのまま提出しないこと. そのようなレポートは大きく減点される.
    7. その他,レポート作成に関する一般的な注意については,レポート作成要項 を参照のこと.

第 1 回レポート

    まず 解説 を読んで考えてみましょう.第 1 回レポートの詳細は下記の通り.

    1. 授業で紹介したコマンドを使って,自分のホームディレクトリを整理して下さい.
      1. ユーザ自身のホームディレクトリ上で,"p1" というディレクトリを作る.

        /home/users/ecs/$USER/p1/
        

      2. ディレクトリ "p1" 内で,講義回ごとのディレクトリをさらに作り,関連するファイルを整理して格納する. このとき,自身のホームページ( "./$USER/public_html/index.html" )は変更,消去しないこと.
      3. 不要なファイル( ~ で終わるファイル,"#" ではさまれたファイル,および "%" を含むファイルなど)を削除する. 変なファイル名は "filename" のように,引用符で囲む必要がある場合がある.

    2. ディレクトリ "p1" で作成した "file1" というディレクトリで, 今回のレポート作成に使用する "report1_095xxxxx.tex" (xxxxxは学籍番号)という texファイルを作り, 下記 3. の課題をレポートにまとめて下さい.レポートは,TeX と PDF の 2 種類のファイルを moodle に提出すること.

      /home/users/ecs/$USER/p1/file1/report1_095xxxxx.tex
      

    3. 各コマンドのオプションを調べ,実行結果と解説をファイルに記述しなさい.以下は例.

      1. はじめに
      ( "\section{はじめに}" と書くと良い.)
      (何を解くのか,どういう結果が得られたか,などを記載する.)
      (記載例)ここでは,UNIX環境下において有効なコマンドのうちいくつかを説明する.
      
      2. ディレクトリ操作のコマンド
      
      2.1 ls : ディレクトリ内容の表示
      ( "\subsection{\texttt{ls}関数}" と書くと良い.)
      
      (1) 機能
      カレントディレクトリ内のファイル一覧を表示する.
      
      (2) 形式
       (A) ls (option) [directory name]
      
      (3) オプション
       (A) -l:  ファイルの詳細を表示
       (B) -a:  . と .. を含めて表示
       (C) etc...
      
      (4) 実行例
      
        $ ls -la
        合計 20
        drwxr-xr-x 2 gotoh staff 4096 2014-04-26 11:40 .
        drwxr-xr-x 8 gotoh staff 4096 2007-12-01 22:26 ..
        -rw-r--r-- 1 gotoh staff 6671 2014-04-26 11:40 index.html
        -rw-r--r-- 1 gotoh staff 2193 2014-04-26 10:18 index.html~
        $
      
      
      2.2以降〜 rm, pwd, mkdir, rmdir, cd, などを節ごとに記載
      
      3. ファイル操作のコマンド
      
      3.1 cat
      
      (1) 機能
      ファイル内容の連結・表示
      
      (2) 形式
       (A) cat (option) [file name]
      
      (3) オプション
       (A) -n:行番号を付けて表示
       (B) -v:制御コードなどを含むファイルを表示するときに指定
       (C) etc...
      
      (4) 実行例
       p.49を参考にして記載する.
      
      3.2以降〜 less, mv, cpなどを節ごとに記載
      
      4. 考察
      (本レポートで気づいたこと,感じたことを記載する.)
      
      5. まとめ
      (2章以降の内容を概要に追加してまとめる.)
      
      

第 2 回レポート

    第 2 回レポートの詳細は下記の通り.

    1. ディレクトリ "p1" で作成した "file2" というディレクトリで, 今回のレポート作成に使用する "report2_095xxxxx.tex" (xxxxxは学籍番号)というtexファイルを作り, 下記 3. の課題をレポートにまとめて下さい.

      /home/users/ecs/$USER/p1/file2/report2_095xxxxx.tex
      

    2. レポートは,TeXファイル"report2_095xxxxx.tex"と,PDFファイル"report2_095xxxxx.pdf"の2種類となります. moodle に提出すること.

    3. 課題
      1. ファイルリダイレクションとパイプ(参考: 4.2.4 節,4.2.5 節)
      2. リダイレクション <, >, とパイプ | を用いて,sort, head, tail, history, cat, ls などのコマンドを実行し,考察する.

      3. コマンドと実行可能ファイルの関係(参考: 4.3 節)
      4. "Hello !" などの簡単な文を表示するC言語プログラムとシェルスクリプトを記述し, 実行ファイルを作って実行するまでの流れを記述する.

      5. コマンド実行(参考: 4.3 節,4.4 節)
      6. which, ps, ^Z, bg, & , kill を実行し,考察する.

      7. aliasの使用(参考: 4.5 節)
      8. alias で,どのようなコマンドを定義すると便利かを考察する.

    4. 各コマンドについて,その結果をレポートに記述し,考察も書くこと. 例えば,以下の通り.

    1. 概要
    (何を解くのか,どういう結果が得られたか,などを記載する.)
    
    2. ファイルリダイレクションとパイプ
    
    2.1 リダイレクション 
    ( <, > は 4.2.4 節を参照.) 
    
    2.1.1 標準出力のリダイレクション
    (pp.53-54 を参考にして,機能および具体例を記載する.)
    コマンドや実行ファイルの実行結果は画面上に表示されるが,
    リダイレクションを用いて出力先を変更できる.
    具体的には,以下のようにする.
    
      $ ls > test.txt
    
    このようにすると,ls の結果が test.txt ファイルに記録される.
    
    2.1.2 標準入力のリダイレクション
    (p.54 を参考にして,,機能および具体例を記載する.)
    
    上記で述べた add.c から作られた a.out では,2 つの数字を入力する必要がある.
    このような入力は,下記のようにすることで,ファイルから得ることができる.
    
      $ cat data
      3 7
      $ ./a.out < data
      10
      $
    
    
    2.2. パイプ 
    ( | は 4.2.5 節を参照して,機能および具体例を記載する..)
    
    ls の結果を sort の入力とすることを考える.
    一つ目の方法は,一時的に,tmp ファイルに ls の結果を置く方法である.
    
      $ ls -l > tmp
      $ sort -k 5 < tmp
      ...
      $
    
    次のようにすると,tmp ファイルを作ることなく同じ結果が得られる.
    
      $ ls -l | sort -k 5
      ...
      $
    
    より複雑な例を以下に示す.
    
    これは,history の結果から sed で左端の数字を除去し, sort で辞書順に並び替え,uniq で同一行の反復を除去するコマンドの実行である. $ history | sed 's|^ *[0-9]* ||' | sort | uniq ... $ 次の 4 つの結果を比較して考察する. $ history $ history | sed 's|^ *[0-9]* ||' $ history | sed 's|^ *[0-9]* ||' | sort $ history | sed 's|^ *[0-9]* ||' | sort | uniq 3. コマンドと実行可能ファイルの関係 3.1 実行ファイルの作成 (4.3 節に,C言語ソースプログラムとシェルスクリプトが記載されているので 参考にすると良い.) C 言語で書かれたソースファイル( 例:add.c )を gcc コマンドでコンパイルすると, 実行ファイル( ./a.out )が作成される. このファイルは,"./a.out" で実行できる. $ cat add.c #include<stdio.h> main(){ int a,b; scanf("%d%d",&a,&b); printf("%d\n",a+b); } $ gcc add.c $ ./a.out 2 5 7 $ ./a.out を実行して,2つの数字 "2 5" を入力すると,それらを足した結果 "7" が表示される. 3.2 シェルスクリプト シェルスクリプト( hello.sh )を ./hello.sh で実行可能にするためには, chmod コマンドを用いる必要がある.これは,このファイルのパーミッションが現在〜〜〜であり, このままでは〜〜〜することができないためである. 実行可能ではないシェルスクリプトを実行しようとすると,"Permission denied" と表示される. $ cat hello.sh #!/bin/sh echo "Hello !" $ ./hello.sh -bash: ./hello.sh: Permission denied このため,下記のようにパーミッションを 755 に変更することでシェルスクリプトが実行できる ようになる. なお,パーミッションを755に変更する理由は,〜〜〜である. $ chmod 755 hello.sh $ ./hello.sh Hello ! $ 4. コマンド実行 コマンドの概要および使い方について,記述すること. コマンドごとに節でまとめてもよいし,コマンドを順番に実行する過程を 説明してもよい. (which は p.58 の 4.3 節,&,^Z,bg,kill は p.59 の 4.4 節を参照.) (例) 4.1 ps コマンド (1) 機能 実行中のプロセスを表示する. (2) 形式 (A) ps (option) [pids] (3) オプション (A) -u:ユーザ名と開始時刻の情報を付加して表示 (B) -l:より詳細な情報を表示 (C) etc... (4) 実行例 p.49を参考にして記載する. $ ps PID TTY TIME CMD 28373 pts/0 00:00:00 bash 28380 pts/0 00:00:03 firefox 28385 pts/0 00:00:00 dbus-launch 28413 pts/0 00:00:00 emacs 28414 pts/0 00:00:00 ps $ ps を実行すると,上記のような結果が得られた. この結果より,ブラウザ(firefox),エディタ(emacs),ps コマンドなどが 実行されていることが分かる. ここで,PID は ... を表し, ... に使うことができる. ps -l とすると,次のような詳細な表示になった. ... 4.2 &,^Z,bg,kill コマンド (1) 機能 プロセスおよびジョブを強制終了する. (2) 形式 (A) kill (option) [pid] (3) オプション (A) pid:終了させるプロセスIDまたはジョブを指定 (B) -l:シグナルの一覧を表示 (C) etc... (4) 実行例 emacs をフォアグラウンドで起動した後,バックグラウンドに変更する (&なしで起動した後に,端末がコマンドを受け付けるようにする). 更に,emacs の pid を ps コマンドで調べて,kill コマンドで emacs を終了させる. $ emacs ^Z [3]+ Stopped emacs $ bg [3]+ emacs & $ ps PID TTY TIME CMD ... 28420 pts/0 00:00:00 emacs ... $ kill 28420 $ これで emacs をターミナルから終了させることができた. 正常に動作しているプログラムをこのようにして終了させることはないが, いくつかのプログラムは信頼性が低く,キー入力を受け付けなくなる場合がある. そのような場合は,kill で終了させる必要がある. 4.3以降〜 &, ^Z, bg などを節ごとに記載 5. aliasの使用 (1) 機能 コマンドの別名を登録する. (2) 形式 (A) 調べてまとめる. (3) オプション (A) 調べてまとめる. (4) 実行例 ls のオプション -l をデフォルトで有効にする. $ ls a.out hello.c hello.sh $ alias ls="ls -l" $ ls 合計 12 -rwxr-xr-x 1 gotoh staff 9041 2014-05-11 14:47 a.out -rw-r--r-- 1 gotoh staff 52 2014-05-11 14:47 hello.c -rw-r--r-- 1 gotoh staff 25 2014-05-11 14:50 hello.sh $ 初めの ls ではファイル名のみが表示されている. alias 定義後は,-l オプションを書かなくても詳細が表示されている. 同様にして,mv や rm の -i オプションを有効にする方法が考えられる. 5. 考察 (本レポートで気づいたこと,感じたことを記載する.) 6. まとめ (2章以降の内容を概要に追加してまとめる.)

連絡先

 後藤 佑介 (707号室) gotoh_at_cs.okayama-u.ac.jp( _at_ は @に変換) まで.


戻る