Unix Tutorial
Unix 練習

班分け

以下の班分けに従って着席せよ.

表 2.1 午前クラス座席表
午前座席表

表 2.2 午後クラス座席表
午後座席表

Unix の起動

PC に何も接続せずに 電源を投入し,カーソルキーで Linux (GRUB) を選択し, Enter キーを押せ. ブートローダによる選択画面が表示されるので カーソルキーで午前クラスは

YAMAMOTO 1

午後クラスは

YAMAMOTO 2

を選択し,Enter キーを押して Ubuntu を起動せよ.

nauser を選択し, 授業で連絡するパスワードを入力し,ログインせよ.

ユーザ

一般ユーザの追加

PC には管理者ユーザとして nauser が登録されている状態になっている.Linux など多くの OS では 誤って他のユーザのファイルを消したりしないように利用者ごとに 専用のユーザを登録し,ファイルの書き込み権限等をコントロールしている.

実習1

班のすべてのPCに班全員のユーザを作成する.以下の順に作業を行え.

  1. メンバー全員が自分のログイン名とパスワードを決める. ログイン名は半角英数字の系列で,英字から始まるものとせよ. パスワードは他の班員にも知らせるため,この実験だけに使う ものにせよ.(大事なパスワードを使い回してはいけない) 欠席者のログイン名,パスワードは出席者が決めよ.
  2. 全メンバーのログイン名,パスワードの一覧を作り,班の全員で共有せよ.
  3. 全ての計算機について以下の操作を行え.
    1. 画面左のドックの歯車のアイコン「システム管理」→ 「ユーザーアカウント」を選択し「ユーザアカウント」ウィンドウを開け.
    2. 右上の「ロック解除」ボタンを押し,ログインした ユーザー(nauser) のパスワードを入力し,「認証する」ボタンを押せ. 以下の作業を班員の数だけ繰り返す.
    3. 左下にある「+」のボタンを押せ.「アカウントの追加」 ウィンドウが表示される.
    4. この実習では登録したユーザで計算機管理を行なうため, 登録したユーザ全員に管理者権限を与える. 「アカウントの種類」プルダウンメニューで「管理者」を 選び,フルネームとユーザー名を入力する.
    5. 「フルネーム」欄は自由に記入してよい. 「ユーザ名」欄に用意したユーザ名を記入して. 「追加」ボタンを押せ.「ユーザーのデータを変更するには認証が必要になります」 というウィンドウが表示されたら,ログインしているアカウント (nauser)のパスワードを入力し,「認証する」ボタンを押せ.
    6. ウィンドウ左側で今作成したユーザーが選択されていることを 確認し,右側の「パスワード(P)」の右,「アカウントは無効です」と 表示されている部分をクリックせよ.「パスワードの変更」ウィンドウが開く.
    7. 「新しいパスワード」欄にパスワード,「パスワードの確認」欄 に繰り返し同じパスワードを入力し「変更」ボタンを押せ. 推測されやすいパスワードを入力すると 警告が出る.その場合は該当ユーザーが警告に従った新しいパスワードを考え, やり直せ.パスワードを変更した場合,班全員に連絡せよ.
    8. これを全員分繰り返せ.全員分終了すればウィンドウ左上の角の「x」ボタン を押してユーザ設定を終了せよ.

GUI と CUI

GUI とはグラフィカルユーザインターフェース, CUI はキャラクタユーザインターフェースの略である. GUI の特徴は画面上のボタンやマウスを使った直感的な操作であり, CUI での操作はキーボード入力によるコマンド操作が主体になる. パーソナルコンピュータにおいて GUI は計算機の能力の向上と共に普及し, 現在一般ユーザは GUI でほぼすべての PC を操作することが主流となっている.

CUI は GUI に取って代わられたわけではなく,CUI にも利点がある.そのうち,

のような利点から,サーバソフトウェアでは現在も CUI を用いて 設定作業を行い,設定状況はテキストファイルとして保持する方式が 主流であり,GUI インターフェースをもつ画面上でも CUI インターフェースを エミュレートして実現しているほどである.

Ubuntu などの最新の Linux では GUI 環境も充実しているが, 本演習はサーバ管理の演習であるため,CUI の操作も重視する.

上記のユーザーの追加操作は GUI で行ったが 後述の「ターミナル(端末)」を使った CUI でも実行できる. ユーザを追加するコマンドは useradd, パスワードを設定するコマンドは passwd である.多数のユーザを登録する場合はループを使ったスクリプトなどで 一括処理できるのでこの CUI を使った方法のほうが有用である.

CUI のコマンド

実習2

作成したユーザでのログイン

一旦ログアウトし,自分のユーザ名でログインする.ログアウトは 画面右上のアイコンから「ログアウト」を選択して行なう.

ログアウトが完了すると,ログイン画面に戻る. 自分のユーザ名を選択し,パスワード入力欄にパスワードを入力せよ.

以降の実験は自分のユーザ名でログインした状態で行え. 以下では自分のユーザ名を user1 であるとして説明する.

ターミナル

ログインすると,GUI 環境でのログインが完了した状態に なっているはずである. Unix 系 OS で CUI 操作に用いるソフトウェアが「ターミナル」(端末)である.

ターミナルをいつでも起動できるように画面左のドックに登録 する.手順は以下の通りである.

  1. 左上のアイコン「ダッシュホーム」をクリックし, 検索窓に terminal と入力する.
  2. 表示された「端末」のアイコンを左のランチャーのどこかにドラッグする

ランチャー上に作ったターミナルのアイコンをクリックし, ターミナルを起動せよ.

ターミナルを開くとシェルと呼ばれるプログラムが動作し, ユーザの入力を待つ状態になる.

コマンドを入力するにはキーボードでコマンド名を打ち込み,Enter キーを押せば良い. 例えば計算機内の時計が指している現在時刻を表示するコマンドは date である. ターミナルにキーボードから date と打ち込んで Enter キーを押せ. このとき入力が日本語モードにならないように注意する. コマンド入力では日本語モードの文字は使用しない.

次に使用頻度の高いコマンドをいくつか説明するが,その前にファイル構造, 特にディレクトリ構造について説明する.

階層構造は非常に多いアイテムを検索しやすくするためによく使われる. たとえば図書館の本を 「技術」→「電気工学,電子工学」→「コンピュータ」→「オペレーティングシステム」 (日本十進分類法)として検索する方法で,書籍のように膨大なアイテムでも効率よく 管理できる.計算機の世界ではドメイン名,IP アドレスなども階層構造を利用している.

計算機が保持するデータの単位が「ファイル」である.計算機では多数のファイルを 効率よく検索できるように階層構造を持たせ,木構造を利用してファイルを管理している.図 2.3 は実習で使用する OS のファイルの構造である. 四角で囲まれているのがディレクトリ名で角が丸いものは末端のファイルを示している.

ディレクトリ構造
図 2.3 ディレクトリ構造

ファイルの木構造の中で,シェルは自分が現在どこにいるのかの情報を保持している. 自分が現在いるディレクトリをカレントディレクトリとよぶ.

ls

ls とだけ入力した場合,カレントディレクトリに存在するファイル, ディレクトリのリストが表示される.以下のコマンドを実行してみよ.

user1@na-NNN:~$ ls

いくつか日本語のディレクトリが表示されるはずである. Ubuntu では日本語ファイル名,ディレクトリ名を使うことができるが, サーバの設定ファイルではファイル名,ファイルの内容に日本語モードの 文字が紛れ込むと紛らわしいエラーを起こす場合がある.本実習では特にファイル名に 関しては日本語のファイル名を使用しないように注意せよ. ファイルの内容には日本語が使えることが多いがサーバの設定を記述するファイルでは 日本語によってエラーが起こることも少なくないので注意せよ. 特に日本語の空白文字は設定ファイル等では「空白」と扱われないので注意せよ.

コマンドのふるまいを微調整するために コマンドの後ろにオプションと呼ばれるデータを与えることができるコマンドがある. オプションは多くの場合 -で始まる文字,または --で始まる文字列である. ls コマンドにも多くのオプションがあり,-l オプションはデフォルトよりも 多くの情報を出力する(ロングフォーマット)ためのオプションである.以下を実行せよ.

user1@na-NNN:~$ ls -l

ロングフォーマット指定によりファイルのサイズ,作成日時,時刻などの 情報がファイル名と共に表示される.

cd

cd はカレントディレクトリを変更するコマンドである. 「引数」とはコマンド(あればオプションも)の次に入力するもので, コマンドに渡すパラメータとして使われる. cd に移動先のディレクトリを引数として与えることでそのディレクトリに移動する.

図 2.1 のようにディレクトリは木構造であるから,ある節点の親は 一意に決まる.親節点は名前で示す必要がないため Unix では ".." (ピリオド 2 つ)で親節点を示す決まりになっている. cd コマンドに移動先として親節点を引数で与えるコマンドは以下のようになる.

user1@na-NNN:~$ cd ..

上記の後,ls コマンドで移動後のディレクトリの内容を確認せよ. 班員のユーザ名が並んでいるなずである.

現在図 2.1 の home ディレクトリがカレントディレクトリであるが, もとのディレクトリである user1 に戻る場合も cd コマンドを使う. 子の節点は一般に複数あるので名前を指定する必要がある. 自分のユーザ名と同じディレクトリ名を指定して cd を行え. cd の後 ls を実行し,最初と同じ場所にいることを確認せよ.

user1@na-NNN:/home$ cd user1(実際には自分のユーザ名を書く)

ターミナルを起動した時に初期状態でカレントディレクトリ となっている場所をホームディレクトリと呼ぶ.ここまでの実習では ホームディレクトリは図 2.1 の user1 である. cd コマンドを引数無しで実行するとカレントディレクトリがどこであっても ホームディレクトリがカレントディレクトリになる. ディレクトリの奥深くに入ったときも引数無しで cd コマンドを入力すればただちにホームディレクトリに戻る.

pwd

複雑なディレクトリ構造を移動していると, 現在のカレントディレクトリを確認したい場合がある. pwd コマンドはカレントディレクトリを表示するコマンドである.cd コマンドで ディレクトリを移動しながら,pwd でカレントディレクトリを表示してみよ.

絶対パスと相対パス

ls や cd の引数にファイル名,ディレクトリ名を与えることができるが, この記述の方法には絶対パスと相対パスと呼ばれる 2 種類の方法がある.

pwd コマンドで表示されるパスの表記を絶対パスとよぶ.絶対パスには 図2.1 のディレクトリ構造の根からのたどるべき全ての情報が含まれている. 例えば cd コマンドでカレントディレクトリに戻って pwd コマンドを実行すると, /home/user1 と表示されるはずである.絶対パスは必ず / で始まり, 途中で通るディレクトリ名を順に / で繋げたものとなっている. / だけからなる絶対パスは木構造の根のディレクトリを示し, ルートディレクトリと呼ばれる.

いろいろなディレクトリに移動してコマンド ls /home/user1 を実行してみよ カレントディレクトリがどこであっても同じファイルが表示されることが確認できる はずである.

絶対パスに対し,自分のカレントディレクトリからの相対的な位置を示すのが 相対パスである./ で始まらなければ相対パスであると区別できる. この実習の最初に行った cd .. や cd user1 は相対パスの例である. 自分のいるディレクトリの直下のファイルやディレクトリを操作する場合に 簡単で便利である.相対パスも繋げて表現することができる.図 2.1 の home がカレントディレクトリである場合,examples.desktop を示す相対パスは user1/examples.desktop であり, log を示す相対パスは ../var/log である.以下のようにして確認できる.

以下のコマンドでカレントディレクトリを home にする.

user1@na-NNN:~$ cd
user1@na-NNN:~$ cd ..

pwd コマンドで home に移動できていることを確認し,ls user1/examples.desktop や ls ../var/log を実行してみよ.

ファイル処理

テキストエディタ

フォント,文字の大きさ,色などの書式情報をもたない文字データをプレーンテキストと呼ぶ. プログラムのソースコード,サーバソフトウェアの設定ファイルなどはプレーンテキストで 書かれるのでその操作に特化したソフトウェアが存在し,テキストエディタと呼ばれる.

ヘビーユーザーのこだわりどころなので高機能なエディタ,伝統的なエディタなど 多数のものが好んで使われている.Unix 文化で有名なものは ed, vi, emacs 等であるがこの実習では標準でインストールされている gedit を使用する.

実習3

画面左上のダッシュホームをクリックして検索欄に gedit と入力し,表示された「テキストエディター」をクリックして gedit を起動せよ.

gedit で自己紹介文を書け.ここでは日本語を使用しても良い. 「半角/全角」キーで日本語モードと英語モードの切り替えができる.

文書を書いたら保存を行う.今回は自分のホームディレクトリに text1.txt というファイル名で保存する. gedit の「保存」ボタンを押し,「名前を付けて保存」ダイアログを開き, 「次のフォルダーに保存」欄の表示が user1 ディレクトリになっていることを 確認し,「名前」を text1.txt として右下の「保存」ボタンを押せ.

ウィンドウ左上の「x」ボタンを押して gedit を終了せよ.cd や ls を使って作成したファイルが あることを確認せよ.

各自自分の計算機に自分のアカウントで自己紹介文を作製, 保存したら一旦ログアウトし,班内で座席を入れ替えよ. 座ったPCに自分のアカウントでログインし,自分の端末で 作製した時と同様に自己紹介分を作製,保存しログアウトせよ.

上記作業が終わればもとの座席に戻って自分の名前でログオンした状態に戻れ.

cat

cat コマンドでファイルの内容を確認できる.ホームディレクトリで ls text1.txt によりファイルが存在することを確認したのち, cat text1.txt を実行してみよ. 作製した各アカウントのホームディレクトリは /home の直下にある. 他の班員が自分の端末を使った時に保存した自己紹介ファイルも 確認できるはずなので cd, ls, cat を使って探し,確認せよ.

cp(第二引数がディレクトリの場合)

cp コマンドは引数を 2 個とる. cp は第二引数としてファイルを指定する場合とディレクトリを指定する場合で 動作が異なるので注意せよ. 以下は第二引数が新規ファイル名の場合である.ホームディレクトリで実行せよ. 第一引数がコピー元,第二引数がコピー先となる.

user1@na-NNN:~$ cp text1.txt text2.txt

ls, cat を利用してファイルが複製されていることを確認せよ.

mkdir

mkdir は新規ディレクトリを作成するコマンドである. ホームディレクトリで

user1@na-NNN:~$ mkdir testdir

を実行し, ls -l 等で状況を確認せよ

ホームディレクトリがカレントディレクトリの状態で以下のコマンドを実行せよ.

user1@na-NNN:~$ cp text1.txt testdir

上記が cp の第二引数をディレクトリ名とした場合の動作である. 第二引数をディレクトリ名とした場合はコピー先の ディレクトリ内に同じ名前のファイルが作成される.cd, ls 等で確認せよ.

cp の第二引数(コピー先)にカレントディレクトリを指定したい場合がある. カレントディレクトリを指定する相対パスはピリオド1個(.)である. testdir にいるときに

user1@na-NNN:~/testdir$ cp ../text2.txt .

を実行すると一つ上のディレクトリの text2.txt がカレントディレクトリにコピーされる. 確認せよ.

計算機管理

管理者は計算機の設定の変更やソフトウェアのインストールを行うことができる.

オンラインマニュアル

Unix コマンドについて調べたい場合,Web で検索するのは 手軽ではあるが, OS のバージョンにより同じコマンドでも 細かい仕様が違う可能性がある. Unix では標準でオンラインマニュアルが実装されているので, 実際に使う計算機にログインし,オンラインマニュアルを 利用して調べることで仕様する計算機のバージョンでのコマンドの 仕様を確実に知ることができる.

実習4

この授業で使用する Ubuntu のバージョンではインストール直後は 英語版の man のみが利用できる状態になっている.以下の2つの コマンドにより日本語版の man が利用できるようになるので順に実行せよ. update により情報が最新のものに更新され,install により実際の インストールが行われる.

user1@na-NNN% sudo apt-get update
user1@na-NNN% sudo apt-get install manpages-ja

sudo からパスワードを聞かれたらログインしたユーザのパスワードを入力せよ.

以下のように入力し, オンラインマニュアルのコマンド man を利用して pwd コマンドについて調査せよ

jtXXXX0b@na-NNN% man pwd

man の操作では,スペースキーで1ページ送り,b で1ページ戻し, カーソルキー上下で1行の進み,戻りができる. man を終了するには実行中にqを押せば良い.

ユーザー情報

現在登録されているユーザの情報を /etc/passwd というファイルで確認することが できる.

実習4

ターミナルで /etc/passwd の内容を表示させ (cat を使え) 登録したユーザ名が 存在することを確認せよ.

/etc/passwd は管理者でなくとも読む事のできるファイルである. 過去にはユーザのパスワードを暗号化したものを保存するファイルであったが, セキュリティの問題から現在は別のファイルに保存されている. /etc/passwd ファイルのフォーマットはコロンでフィールドを区切るものである. 1 番目の要素がユーザ名,3 番目の要素がユーザ ID, 6 番目がそのユーザのホームディレクトリである.

実習5

今回作成したユーザ名全てについてこれらを調べよ.

grep は多くの行からなるファイルから,指定したパターンに一致する行だけを 表示するコマンドである.今回の場合,自分が作成したユーザ名が user1 であれば,grep user1 /etc/passwd で /etc/passwd ファイルのうち user1 という文字列を含む行のみを出力する. grep は膨大なファイルから必要な情報を探すのに利用される.

今回作成した管理者権限を与えたユーザとは異なり,システムには 最初から固有の管理者専門のユーザが設定されている.この 特別なユーザのことをスーパーユーザと呼び,ユーザ名は root, ユーザ ID は 0 である.grep を使って /etc/passwd ファイルから 必要な行を抜き出して確かめよ.

ファイルパーミッション

オーナーとグループ

共同でソフトウェアを開発している場合などで, 自分が書いたソースファイルに対して,

  1. 自分はファイルへの読み書きを許可したい,
  2. 共同開発者にはファイルを読ませることは許可するが,書き換えは許可しない
  3. 共同開発者以外には読み書きの両方を許可しない.

というようなレベルごとに異なる許可設定をしたい場合がある. Unix 系 OS ではこれを実現するためにグループという概念が導入されている.

グループはシステムに登録されたユーザの集合で,一人のユーザは複数のグループに 参加できるがユーザにとってメインとなるグループ(プライマリグループ) は一つである.

システム上の全てのファイル,ディレクトリには所属するユーザ(ファイルのオーナー) と所属するグループ(ファイルのグループ)が設定されている.

各ファイルについて,1.読むことを許可するか,2.書き込むことを許可するか, 3.実行ファイルとして実行することを許可するか,について, A.そのファイルのオーナー B.そのファイルのグループのメンバー C.それ以外, に対して別々に設定できる.この属性情報をパーミッションとよぶ.

例えばあるソフトウェアの開発に関わるユーザ hiroshi, keisuke, naoki を あらかじめグループ developer に所属させておく.hiroshi のプライマリグループ が developer であれば通常の設定では hiroshi が作成したファイルの オーナーは hiroshi, ファイルのグループは developer になる. このファイルのパーミッションを

オーナー
読み出し許可,書き込み許可,実行不可
グループ
読み出し許可,書き込み不可,実行不可
その他
読み出し不可,書き込み不可,実行不可

に設定しておくことで,最初に述べた

  1. 自分はファイルへの読み書きを許可したい,
  2. 共同開発者にはファイルを読ませることは許可するが,書き換えは許可しない
  3. 共同開発者以外には読み書きの両方を許可しない.

設定にできる.

ls -l

-l オプションつきの ls コマンドでファイルのオーナー,グループ,パーミッションを確認できる.

/etc/passwd ファイルに対して ls -l を実行せよ.以下のように表示されるはずである.

-rw-r--r-- 1 root root 1714 2010-04-23 10:56 /etc/passwd

まず,root root の部分は左がファイルのオーナー,右がグループを 表す.このファイルの所属オーナーは root ユーザーで, 所属グループは root (こちらは root という名前のグループ)であることが わかる.

最も左に表示される - は /etc/passwd がディレクトリではなくファイルであることを示す. ディレクトリであればこの部分は d となる(ls -l / を実行して確認せよ) その次からの 9 文字 rw-r--r-- がこのファイルのパーミッションを表す. これは 3 文字づつ区切って読み,左から 3 文字がファイルのオーナーに対する パーミッション,次の 3 文字がファイルの所属グループの構成員に対するパーミッション, 残りの 3 文字がその他へのパーミッションである.

次に 3 文字に分割したあとの読み方を説明する. 例えばこのファイルのオーナーへのパーミッションは rw- である. これは左から読み出し(r:許可, -:不可),書き込み(w:許可, -:不可), 実行(x:許可, -:不可)についての 状況を表す. 読み出しが許可されていれば 3 文字のうち左の文字は r, されていなければ - となる. 書き込みが許可されていれば中央の文字は w, されていなければ - となる. 実行許可については最後の文字は x, されていなければ - となる.つまり rw- は読み出し許可,書き込み許可,実行不可を意味する.

グループと他人については同じパーミッションが設定されており, 読み出し許可,書き込み不可,実行不可となっていることがわかる.

シャットダウン

システムを終了するには画面右上の ubuntu メニューから「シャットダウン」 を選ぶ.

第 1 回課題「Unix 実習」 を提出せよ.

レポート作製について

fn キーを押しながら prt sc キーを押すことでスクリーンショット を得ることができる.

自分が持参したUSBメモリは挿入することでデスクトップに表示され, 使える状態になる.取り外す前には必ず取り出し操作を行わなければならない. 取り出し操作はUSBメモリのアイコン上で右クリックから 「取り出す」で行える.


Updated in April 23, 2012, index.html, Yamamoto Hiroshi