計算機基礎 - 第12回: UNIX を使ってみよう (3) - 基本コマンド

Table of Contents

1. シェルとカーネル

シェル (Shell) とはユーザが入力したコマンドを解釈し, OS (Operating System) の中核であるカーネル (Kernel) に伝達するプログラムです。

ユーザ              シェル              カーネル                      ハードウェア
----------------------------------------------------------------------------------------
コマンド入力    →  コマンドを解釈
                    指令を送る      →  指令内容を処理
                                        ハードウェアに命令を送信  →  指令内容を処理
処理結果を確認  ←  処理結果を出力  ←  処理結果を返す            ←  処理結果を返す

カーネルはユーザからのコマンドに従ってハードウェア (CPU, メモリ, SSD など) を制御しています。

シェルの主な役割と機能

コマンドの通訳
キーボードから入力された文字 (コマンド) を解釈し,コンピュータに実行させます。
結果の表示
処理結果を画面にテキストとして返します。
カーネルとの橋渡し
OS の根幹であるカーネルを操作するための「殻」 (Shell) のような外殻層として機能します。
自動化
よく使う一連のコマンドをファイル (シェルスクリプト) に記述し,まとめて実行できます。

主なシェルの種類

sh
Bourne Shell. 最も歴史の古いオリジナルシェル。
bash
Bourne-Again Shell. GNU プロジェクトが Bourne Shell のオープンソース版として開発。最も広く普及している標準的なシェル。
zsh
最も機能が豊富なシェルで高度な補完機能が特徴。 macOS (10.15 以降) の標準シェル。
csh / tcsh
C言語に似た文法を持つシェル。

2. 基本的なコマンド

Ubuntu (Windows) またはターミナル (Mac) を立ち上げて,以下のコマンドを試してみましょう。

echo 画面に文字列を表示する

echo は指定した文字列や変数の値をターミナル画面 (標準出力) に表示します。

echo [オプション] 表示する文字列

実行例

$ echo "Hello World"
Hello World

cat ファイル内容を表示する (concatenate)

指定した複数のファイルを結合して出力したり,単一ファイルの中身を画面に表示したりするために使用されます。

cat [オプション] ファイル1 [ファイル2] ...

指定したファイルが1つの場合は,そのファイルの内容が画面に表示されます。
指定したファイルが複数の場合は,ファイルの内容が指定した順番に表示されます。

実行例

/etc/passwd の内容を画面に表示する。

$ cat /etc/passwd

file1.txt と file2.txt を連結して combined.txt という新しいファイルに保存する。

$ cat file1.txt file2.txt > combined.txt

> は「リダイレクト」と呼ばれ,コマンドの実行結果を画面 (標準出力) に出力せず,ファイルに保存します。

>    ファイルを新規作成または上書きして結果を保存
>>   ファイルの末尾に結果を追加する (ファイルが存在しない場合は新規作成)

less ファイル内容を表示する

less コマンドはファイル内容を1画面ごとに表示します。 (同様のコマンドに more がありますが, lessmore よりも高機能です)

less ファイル

lesscat と同様に,ファイルの内容を画面上に表示しますが,ファイル内容を1画面分表示すると,そこでいったん表示が止まります。
Enter または を押すと1行だけ次に進みます。 Space を押すと1画面だけ次に進みます。

less のオプションには以下のようなものがあります (他にもたくさんあります)。

-q                    ビープ音を鳴らさない
-M                    総行数などの情報を画面下部に表示する
-N                    行番号を表示する

less の主な操作方法をまとめておきます。

f or SPACE            次のページへ進む
b                     前のページに戻る
j or ↓ or ENTER      ファイル内を下にスクロールする
k or ↑               ファイル内を上にスクロールする
g or <                ファイルの先頭にジャンプする
G or >                ファイルの末尾にジャンプする
/pattern              pattern を含む行を検索する
n                     直近の検索を繰り返す
N                     直近の検索を逆方向に繰り返す
数字 + g              指定した行 (数字行目) にジャンプする
q                     less を終了する

実行例

/etc/passwd ファイルを less で表示し,操作方法を試してみましょう。

$ less /etc/passwd

| パイプ

「左側のコマンドの実行結果 (出力)」を「右側のコマンドの入力」として直接渡す機能です。一時ファイルを作成することなく,複数のコマンドを連携させて複雑な処理を連続 (パイプライン処理) で行うことができます。

長いリストを1画面ずつ表示するには less と組み合わせるとよいでしょう。

$ ls -lF /usr/bin | less

sort コマンドと組み合わせて,文字列やファイルを並べ替えることができます。

$ cat /etc/passwd | sort | less

wc (word count) コマンドと組み合わせて,行数を数えることができます。

$ cat /etc/passwd | wc
     140     368    9196

find ファイルを探す

find コマンドはファイルを見つけるために利用します。

find 検索ディレクトリ 検索条件 [アクション]

「検索ディレクトリ」は絶対パス,相対パスのどちらでも構いません。

  • . を指定すると,カレントディレクトリ以下が検索対象となります。
  • / を指定すると,すべてのディレクトリが検索対象となります。

よく使われる検索条件を以下に示します。

-name 名前           名前と一致するファイルやディレクトリ (大文字・小文字の区別あり)
                     -name "report.docx"    report.docx というファイル
                     -name "*.txt"          拡張子が txt のファイル
-iname 名前          名前と一致するファイルやディレクトリ (大文字・小文字の区別なし)
                     -iname "a*"            a または A から始まるファイル
-mtime n             n 日前に更新されている
                     -mtime -8      7日以内に更新されたファイルやディレクトリ
                     -mtime +6      7日以上前に更新されたファイルやディレクトリ
-type ファイル種別   ファイルの種類がファイル種別と一致
                     -type f        通常ファイル
                     -type d        ディレクトリ

「アクション」は検索条件にあう対象がみつかったときに行われる処理です。

-print     みつかったファイルの絶対パスを表示する
-exec      みつかったファイルに対して,任意のコマンドを実行する

アクションを省略すると -print が仮定されます。

which コマンドを検索する

which コマンドは環境変数 PATH に指定されたディレクトリを検索し,実行したいコマンドがシステム上のどこに配置されているかを特定します。

$ which less
/usr/bin/less

環境変数 PATH の役割

通常,コンピュータであるコマンドを実行するには,そのコマンドを絶対パスで指定する必要があります。

$ /usr/bin/less file.txt

これは少々面倒ですね。

コマンドがあるディレクトリの場所 (この例では /usr/bin) をあらかじめ環境変数 PATH に登録しておくと,コマンド名を入力するだけでどこからでもそのコマンドを実行することができます。この操作を「PATH を通す」と表現します。

例えば,ターミナルで python3 と入力したとします。

PATH が通っていない場合
OS はどこに python3 があるのかわからず,command not found とエラーを出します。
PATH が通っている場合
OS は PATH に設定されているディレクトリを順番に検索し,該当する実行ファイルをみつけて実行します。

カレントディレクトリに python3 の実行ファイルがあっても,カレントディレクトリが PATH に含まれていないと python3 だけでは実行できません。このような場合には ./python3 として実行します。

$ ls
python3*
$ python3
python3: command not found
$ ./python3
Python 3.12.3 (main, Mar 23 2026, 19:04:32) [GCC 13.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> 

head, tail テキストファイルの先頭と末尾を表示する

head はファイルの先頭部分, tail はファイルの末尾部分を表示します。

head [オプション] ファイル
tail [オプション] ファイル

表示する行数はオプションで指定することができます。指定しないと10行が表示されます。

実行例

/etc/passwd から先頭の5行を表示するには以下のようにします。

$ head -5 /etc/passwd

grep 文字列を検索する

grep コマンドを利用するとファイル中の特定の文字列 (パターン) を含む行を表示することができます。

grep [オプション] パターン [ファイル]

grep は指定されたファイル (ファイルが指定されていない場合は標準入力) を読み込み,与えられた文字列 (パターン) とマッチする行を表示します。

/etc/passwd から and という文字列を含む行を表示させるには次のようにします。

$ grep 'and' /etc/passwd

オプションに -v を指定するとパターンにマッチしない行を表示することができます。

実行例

/etc/passwd から # で始まる行を除いた先頭の5行を表示するには以下のようにします。

$ grep -v '^#' /etc/passwd | head -5

touch ファイルのタイムスタンプを更新する / 空のファイルを新規作成する

touch は指定したファイルのタイムスタンプ (アクセス時刻と変更時刻) を更新します。存在しないファイル名を指定すると,内容が空の新しいファイルが作成されます。

touch [オプション] ファイル

実行例

タイムスタンプの更新

$ ls -l report.docx
-rw-r--r-- 1 takagi staff 225105 Jun 20 12:39 report.docx
$ touch report.docx
$ ls -l report.docx
-rw-r--r-- 1 takagi staff 225105 Jun 28 10:30 report.docx

新規ファイルの作成

$ ls -l newfile.txt
ls: newfile.txt: No such file or directory
$ touch newfile.txt
$ ls -l newfile.txt
-rw-r--r-- 1 takagi staff 0 Jun 28 10:31 newfile.txt

date 日時を表示する

実行例

$ date
Sun Jun  7 15:48:16 JST 2026

cal カレンダーを表示する (calendar)

実行例

$ cal                           # 今月のカレンダーを表示
     June 2026        
Su Mo Tu We Th Fr Sa  
    1  2  3  4  5  6  
 7  8  9 10 11 12 13  
14 15 16 17 18 19 20  
21 22 23 24 25 26 27  
28 29 30 
$ cal 1 2027                    # 2027年1月のカレンダーを表示
     June 2026        
Su Mo Tu We Th Fr Sa  
    1  2  3  4  5  6  
 7  8  9 10 11 12 13  
14 15 16 17 18 19 20  
21 22 23 24 25 26 27  
28 29 30 

3. 練習問題

練習1

  1. ホームディレクトリ直下に practice というディレクトリを作成してください。
  2. 作成した practice ディレクトリの中に移動してください。
  3. 空のファイル memo.txt を作成してください。

練習2

  1. echo コマンドとリダイレクトを使って memo.txt に「Linux Basic Command」という文字列を書き込んでください。
  2. memo.txt の中身を表示して確認してください。

練習3

  1. memo.txt を memo_backup.txt という名前でコピーしてください。
  2. 現在のディレクトリにあるファイルの一覧 (詳細情報付き) を表示して,ファイルがコピーされているか確認してください。
  3. memo.txt を削除してください。

練習4

/etc/passwd ファイルから「daemon」という文字列を含む行を抜き出して画面に表示してください。

練習5

gnuplot で媒介変数を利用したグラフを作成してみましょう。

媒介変数表示に移るには set parametric としてパラメトリックモードに移ります。簡単な例として \(x=\cos(t)\), \(y=\sin(t)\) をプロットしてみましょう。

gnuplot> set parametric

        dummy variable is t for curves, u/v for surfaces
gnuplot> plot cos(t), sin(t)
gnuplot> set size ratio -1
gnuplot> replot

媒介変数の変域はデフォルトで \(-10 \leqq t \leqq 10\) となっています。 set trange [下限:上限] で変更することができます。

gnuplot> set trange [0:pi]
gnuplot> replot

パラメトリックモードを終了するには unset parametric とします。

gnuplot> unset parametric

練習6

Gnuplot でリサジュー図形 \(x=\cos 3t\), \(y=\sin t\) をプロットしましょう。 \(t\) の変域は \(0 \leqq t \leqq 2\pi\) とします。

練習7

Gnuplot で以下の例を試してみましょう。
https://ayapin-film.sakura.ne.jp/Gnuplot/Primer/parametric.html

間違えないように Gnuplot のプロンプトに1行ずつ入力してください。

set parametric
set trange [-2*pi/3:2*pi]
set size ratio -1
set samples 400
unset border
set xtics axis
set ytics axis 1
set xzeroaxis lt -1
set yzeroaxis lt -1
unset key
f(a,t) = t - a*sin(t)
g(a,t) = 1 - a*cos(t)
set object circle center 0,1 radius 1 fs solid 1 fc rgb "gray90" behind
plot f(2,t), g(2,t), f(1,t), g(1,t), f(1/2.0,t), g(1/2.0,t), f(1/3.0,t), g(1/3.0,t)

4. タッチタイピング

今日も毎分120文字を目指しましょう。

Copyright © 2026 Masahiro Takagi. All right reserved.

Date: 2026-07-06 Mon 08:28

Emacs 29.4 (Org mode 9.6.15)

Validate