計算機基礎 - 第11回: UNIX を使ってみよう (2) - 基本操作
Table of Contents
1. ログイン・ログアウト
UNIX を利用するには「ログイン」と「ログアウト」という操作が必要ですが, WSL2 (Windows) やターミナル (Mac) では特に意識する必要はありません。
- ログイン
- ID とパスワードを入力して利用開始します。
- ログアウト
- UNIX の利用を終えたらログアウトします。ログアウトを忘れると他人が勝手に使える状態になってしまいます。
cc2000 や万有館 2F にある計算機室を利用するとき必要になるので,教科書 pp.7-10 の内容を「そんなこともあったな」くらいに覚えておいてください。
2. シャットダウン
コンピュータの電源を切れる状態にすることです。シャットダウンは「root」と呼ばれる管理者のみが実行できます。
いきなり電源を切るとシステムが壊れる (ことがある) ので注意しましょう。
これも WSL2 (Windows) やターミナル (Mac) では特に意識する必要はありません。
3. ファイルとディレクトリ
UNIX はデータをファイルとして扱います。これは Windows や Mac とまったく同じです。
- ファイルは「ディレクトリ」と呼ばれる入れ物に入れて管理されます。
- ディレクトリは Windows や Mac のフォルダと同じものです。
- ディレクトリの中にディレクトリを作って,階層を作ることができます。
- ディレクトリの中にあるディレクトリを「サブディレクトリ」ということがあります。
UNIX の標準的なディレクトリ構造を以下に示します。
ルートディレクトリ ( / ) (システム全体を収めたディレクトリ) ├── bin/ (基本コマンドを収めたディレクトリ) ├── etc/ (設定ファイルを収めたディレクトリ) ├── var/ (ログやキャッシュなどの動的データ) ├── dev/ (デバイスファイル ※ハードウェアもここにマウント) └── home/ (ユーザーのホームディレクトリを収めたディレクトリ, Mac では Users) ├── takagi/ (ユーザ takagi のホームディレクトリ) │ ├── 課題.docx │ ├── doc/ │ ├── html/ │ ├── html/comp-2025/ │ ├── html/comp-2026/ │ │ ├── no11.html │ │ └── no12.html │ └── kadai/ └── hanako/ (ユーザ hanako のホームディレクトリ)
このようなディレクトリ構造を「ツリー構造」と呼びます。 UNIX では
- 最上位のディレクトリを「ルートディレクトリ」
- ユーザが作業を行っているディレクトリを「カレントディレクトリ」
といいます。
4. 絶対パスと相対パス
ディレクトリやファイルがどこにあるかを表す方法として,「絶対パス」と「相対パス」の2通りがあります。
絶対パス
ルートディレクトリを基準として表す方法です。
/home/takagi/doc /home/takagi/html/comp-2006/no11.html
カレントディレクトリがどこであっても絶対パスは変わりません。
相対パス
カレントディレクトリ (いま自分がいる場所) を基準として表す方法です。
例として /home/takagi/html/comp-2006/no11.html を相対パスで表してみましょう。
■カレントディレクトリが /home/takagi/html であるときは,
comp-2006/no11.html または ./comp-2006/no11.html
となります。
. はカレントディレクトリを表します。
■カレントディレクトリが /home/takagi/doc であるときは,
../html/comp-2006/no11.html
と表します。
.. は親ディレクトリ (1つ上のディレクトリ) を表します。この例ではカレントディレクトリが /home/takagi/doc なので,
.. は /home/takagi を表します。
このように,相対パスはカレントディレクトリによって表し方が変わります。
5. 基本コマンド
pwd カレントディレクトリを表示する (print working directory)
自分がいま作業をしているディレクトリは pwd コマンドで調べられます。コマンドはターミナルのコマンドラインに,以下のように入力して実行します。
pwd
コマンドを実行すると,カレントディレクトリが絶対パスで表示されます。
実行例
ターミナルでキーボードから pwd と入力し,エンターキーまたはリターンキーを押してみましょう。
$ pwd /Users/takagi <-- カレントディレクトリが表示された
$ はシェルのプロンプト (コマンドを受け付ける印) なので,自分で入力する必要はありません。
(シェルについては次回説明します)
cd カレントディレクトリを移動する (change directory)
cd コマンドはカレントディレクトリを別のディレクトリに変更する
(別のディレクトリに移動する) ために利用します。
cd [移動先ディレクトリ]
移動先ディレクトリの表記には,絶対パスと相対パスの両方が使用できます。また,移動先ディレクトリを省略するとホームディレクトリに移動します。
$ cd .. # 相対パスで指定 $ pwd /Users $ cd /usr/bin # 絶対パスで指定 $ pwd /usr/bin $ cd # 移動先を省略するとホームディレクトリに移動 $ pwd /Users/takagi
cd のコマンド引数として移動先ディレクトリを入力する際に,ディレクトリ名の先頭文字のいくつかを入力したあとに TAB キーを押すと,自動的にディレクトリ名が補完されます。
ls ファイルやディレクトリを表示する (list)
ls コマンドでカレントディレクトリの中にあるファイルやサブディレクトリを表示できます。また,オプションを付けることで,ファイルやディレクトリの保護モードといった情報を得られます。
ls [オプション] [ファイルまたはディレクトリ]
ls のみをタイプして実行すると,カレントディレクトリ内にあるファイルとディレクトリが表示されます。
(実際に表示される内容は人によって異なります)
$ ls local sample.txt sample_dir tmp work
オプションには次のようなものがあります。
-a ファイル名が . から始まる隠しファイルや隠しディレクトリも表示する -l パーミッションや最終更新時刻などの詳細情報を表示する -F ディレクトリには / を付けて,実行ファイルには * を付けて表示する -R サブディレクトリがあれば,再帰的にサブディレクトリも一覧表示する
ls で複数のファイルを指定する方法として,「ワイルドカード」があります。例えば, s* は s で始まる文字列すべてを指すことになります。
* 任意の文字列 a* (a から始まるすべてのファイルやディレクトリ)
*.jpg (拡張子が jpg のすべてのファイル)
? 任意の1文字 ???.html (名前が3文字で拡張子が html であるファイル)
以下の例では /usr/bin にある z で始まるファイルをすべて表示しています。
$ ls -F /usr/bin/z* /usr/bin/zcat* /usr/bin/zgrep* /usr/bin/zipsplit* /usr/bin/zstdcat@ /usr/bin/zcmp* /usr/bin/zip* /usr/bin/zless* /usr/bin/zstdgrep* /usr/bin/zdiff* /usr/bin/zipcloak* /usr/bin/zmore* /usr/bin/zstdless* /usr/bin/zegrep* /usr/bin/zipdetails* /usr/bin/znew* /usr/bin/zstdmt@ /usr/bin/zenity* /usr/bin/zipgrep* /usr/bin/zsh* /usr/bin/zvbi-atsc-cc* /usr/bin/zfgrep* /usr/bin/zipinfo* /usr/bin/zsoelim@ /usr/bin/zvbi-chains* /usr/bin/zforce* /usr/bin/zipnote* /usr/bin/zstd* /usr/bin/zvbi-ntsc-cc*
cp ファイルやディレクトリをコピーする (copy)
cp コマンドはファイルやディレクトリのコピーを作成するために利用します。
cp ではコマンドの後ろにコマンドライン引数としてコピー元とコピー先を記述します。コピー先には,
- (1) ファイル名を指定する場合
cp [オプション] コピー元ファイル コピー先ファイル - (2) ディレクトリ名を指定する場合
cp [オプション] コピー元ファイル1 コピー元ファイル2 ... コピー先ディレクトリ
の2通りの指定方法があります。
(1) コピー先にファイル名を指定する場合
- コピー元ファイルは1つしか指定できません。
- コピー先ファイルが存在しない場合は,新たに作成されます。
- コピー先ファイルがすでに存在している場合は,上書きされます。要注意!
(2) コピー先にディレクトリ名を指定する場合
- コピー元ファイルを複数指定することができます。
- コピー元として指定されたファイルがコピー先のディレクトリの中に複製されます。
実行例
以下の例では sample.txt を sample2.txt にコピーし, sample.txt と sample2.txt を sample_dir の中にさらにコピーしています。
$ ls -F local/ sample.txt sample_dir/ tmp/ work/ $ cp sample.txt sample2.txt $ ls -F local/ sample.txt sample2.txt sample_dir/ tmp/ work/ $ cp sample.txt sample2.txt sample_dir $ ls -F sample_dir sample.txt sample2.txt
mv ファイルやディレクトリの移動 (move)
mv コマンドでファイルやディレクトリの場所を変更できます。
移動元が1つの場合には,
mv [オプション] 移動元 移動先
移動元が複数ある場合には,移動先にはすでに存在しているディレクトリを指定する必要があります。
mv [オプション] 移動元ファイル1 移動元ファイル2 ... 移動先ディレクトリ
移動元と移動先の違いによる mv の動作の違いをまとめると以下のようになります。
移動元 移動先 結果
--------------------------------------------------------------------------------
1つ 既存のディレクトリ 移動先のディレクトリ内に移動元のファイルやディレクトリが移動する
1つ 既存のディレクトリ 移動元が移動先として指定した位置・名称で移動する
ではない
複数 既存のディレクトリ 移動元が移動先ディレクトリ内に移動する
mv を利用してファイルやディレクトリの名前を変更することができます。
mv 古い名前 新しい名前
mkdir ディレクトリを作成する (make directory)
mkdir コマンドを使うと新しいディレクトリを作成できます。
mkdir [オプション] 作成するディレクトリ
同じ名前のディレクトリがすでに存在する場合にはエラーになります。
$ mkdir new_dir $ ls -F local/ new_dir/ sample.txt sample2.txt sample_dir/ tmp/ work/
rm ファイルやディレクトリを削除する (remove)
rm コマンドでファイルやディレクトリを削除できます。
rm [オプション] ファイル1またはディレクトリ1 [ファイル2またはディレクトリ2] ...
ディレクトリを削除する場合は -r オプション (recursive) を付けます。
-r オプションを付けると,指定したディレクトリに含まれるファイルとサブディレクトリもすべて削除されます。
ls コマンドと同様に,ワイルドカードによるファイル名展開も使用できますが,削除してはいけないファイルまで削除しないように,十分注意しましょう。
# 危険な間違いの例 $ rm -r * _dir # *_dir を削除したかったのだが・・・
exit ターミナルを終了する
ターミナル (正確にはシェル) を終了します。
$ exit
6. 練習問題
課題1
/usrディレクトリに絶対パスを使って移動しなさい。- どのようなファイルやディレクトリが含まれているか,確認しなさい。
/usr/shareディレクトリに相対パスを使って移動しなさい。- どのようなファイルやディレクトリが含まれているか,確認しなさい。
/usr/binディレクトリに相対パスを使って移動しなさい。- ホームディレクトリに移動しなさい。
課題2
- ホームディレクトリに移動しなさい。
- ホームディレクトリの中に
renshuというディレクトリを作りなさい。 /etc/passwdというファイルをrenshuディレクトリの中にコピーしなさい。renshuディレクトリに移動しなさい。lsコマンドでpasswdファイルのファイルサイズを調べなさい。passwdファイルをpasswd.txtという名前に変更しなさい。passwd.txtをpasswd.txt.tmpという名前でコピーしなさい。- ホームディレクトリに移動しなさい。
renshuディレクトリを (中にあるファイルも含め) 削除しなさい。
課題3
gnuplot で \(y=2 \cos x\) のグラフを描いてみましょう。
まず,ターミナルで gnuplot を起動します。
$ gnuplot G N U P L O T Version 6.0 patchlevel 4 last modified 2025-12-18 Copyright (C) 1986-1993, 1998, 2004, 2007-2025 Thomas Williams, Colin Kelley and many others gnuplot home: http://www.gnuplot.info faq, bugs, etc: type "help FAQ" immediate help: type "help" (plot window: hit 'h') gnuplot>
gnuplot> は gnuplot のプロンプトで,gnuplot に対するコマンド入力を受け付けます。
gnuplot のプロンプトに対し
plot 2*cos(x) と入力すると \(y=2 \cos x\) のグラフが表示されます。
gnuplot> plot 2*cos(x)
gnuplot を終了するには quit または Ctrl-D と入力します。
gnuplot> quit
課題4
gnuplot で \(y = e^{-x} \sin x\) のグラフを \(0\leqq x \leqq 4\pi\) の範囲で描いてみましょう。
指数関数 \(e^x\) を表す exp(x) という関数が用意されています。範囲の指定方法などは検索して調べてください。
課題5
gnuplot で \(y=x \sin(x)\), \(y=x\), \(y=-x\) の3つのグラフを重ねてプロットしましょう。見やすい値の範囲を工夫してください。
課題6
gnuplot で次の関数をプロットしてみましょう。 \[ y = \sin x + \dfrac{\sin 3x}{3} + \dfrac{\sin 5x}{5} + \dfrac{\sin 7x}{7} + \dfrac{\sin 9x}{9} \]
グラフがガタガタになってしまう場合は
set samples 2000 などとしてサンプリング数を増やしてください。
gnuplot> set samples 2000 gnuplot> plot sin(x)+sin(3*x)/3+sin(5*x)/5+...
課題7
gnuplot で曲面 \(z=x^2+y^2\) を3次元プロットしてみましょう。
ヒント:3次元プロットには splot コマンドを利用します。
7. タッチタイピング
今日も毎分120文字を目指しましょう。
- タイピンガーZの「0から始めるタイピング」で基礎を勉強してください。
- 慣れてきたら寿司打の「お勧め5000円コース」で練習しましょう。
- インターネットでタイピング練習 の「ローマ字タイピング」か「英語タイピング」もよさそうです。