コンテンツにスキップ

ターミナルとコマンドの基本ガイド

本ガイドではターミナルを使用したコマンドラインスキルの基礎を学び、システム上の簡単な操作を行うことを目標とした講義の補足資料です。

Linuxのコマンドを覚えることは、システム管理や開発などの作業を効率的に行うために重要です。是非、様々なコマンドを学習して、Linuxの使い方をマスターしましょう。

CUI(キャラクターユーザーインターフェース)とは

Section titled “CUI(キャラクターユーザーインターフェース)とは”

GUI(グラフィックユーザーインターフェース)ではマウスを使用してアプリケーションを操作しますが、CUI(キャラクターユーザーインターフェース)ではテキストの入力を使用してアプリケーションを操作します。

例えば、Finderを使用してフォルダを作成したりファイル名を変更したりといった作業は日常的に行うかと思います。Finderでの操作はマウスを使用しますがmacOSのCUIアプリケーション(ターミナル)では下記のようなテキストを入力してReturnキーを押すことで同じ操作が可能です。

Terminal window
# フォルダを作成する
mkdir new-folder
# ファイル名を変更する
mv old-file-name.txt new-file-name.txt

GUIアプリケーションは、ユーザーフレンドリーな視覚的インターフェースを提供していますが、内部的には一連のコマンドを実行しています。ユーザーがボタンをクリックしたり、メニューを選択したりする度に、そのアクションは特定のコマンドやプログラム命令に変換されます。

つまり、GUIは複雑なコマンドやプロセスを抽象化し、ユーザーが直感的に操作できるようにしているのです。これにより、コンピューターの専門知識がなくても、高度な機能を持つソフトウェアを利用できるようになっています。

しかし、CUIを使用することでタスクの処理がより効率的になる場合があります。CUIは自動化やスクリプト化が容易であり、大量の作業を自動化する際に非常に便利です。そのため、CUIを使いこなすことで効率的に作業をこなすことができるでしょう。

またテキストで操作を実行するため、操作の記録や複数人での作業時のコピー・ペーストが容易といったメリットがあります。

Linuxにおけるコマンドとは、特定の操作を実行するためにコンピューターに与える指示です。

ターミナルでコマンドを実行するには、コマンドを入力してReturnキーを押します。

また、コマンドの中には明示的にコマンドを終了させないと実行し続けるものもあります。実行中のコマンドを終了させるにはControl + cを押します。

一般的にコマンドはコマンド名とその後に続く引数(argument)と呼ばれるテキストで構成されます。

下記はlsというディレクトリの中身をリスト表示するコマンドでコマンド名と2つの引数を指定しています。

lsコマンド
ls -l /Users/tdp/Desktop

-lのように-で始まる引数はコマンドの動作を変更するオプションと呼ばれるものです。オプション以外の引数にはファイル名やディレクトリ名、任意のテキストなどコマンドが必要とするテキストを指定します。

オプションの指定の方法には次の4つのパターンがあります。

  1. -lのように1つのダッシュ(-)に1つの文字が続くパターン。
  2. --longのように2つのダッシュ(--)に単語が続くパターン。
  3. -typeのように1つのダッシュ(-)に単語が続くパターン。*このパターンは滅多にありません。
  4. ダッシュを使わない1つの文字のパターン。*このパターンは滅多にありません。

また、多くのコマンドでは1のパターンが複数あった場合に組み合わせて指定することが可能です。

例えば下記のではlsコマンドに-l-aというオプション組み合わせて指定しています。

Terminal window
# ls -l -a と同義
ls -la

オプションや指定する引数はコマンドによって様々なので、--helpというオプションを指定することで、使用方法を提示してくれるコマンドもありますので一度、目を通してみると良いでしょう。

Terminal window
# --help オプションを使用して ls コマンドの使い方を見る
ls --help
  • 目的:現在の作業ディレクトリのパスを表示する
  • 使用例:
    • pwd : 現在のディレクトリパスを表示
  • 目的:ディレクトリ(フォルダ)を変更する
  • 使用例:
    • cd Documents : Documentsディレクトリに移動
    • cd ../ : 親ディレクトリに移動
  • 目的:新しいディレクトリを作成する
  • 使用例:
    • mkdir NewFolder : NewFolderという名前の新しいディレクトリを作成
  • 目的:ファイルやフォルダをコピーする
  • 使用例:
    • cp before.txt after.txt : before.txtというファイルをコピーしてafter.txtというファイルを作成
  • 目的:現在ログインしているユーザー名を表示する
  • 使用例:
    • whoami : 現在のユーザー名を表示
  • 目的:ディレクトリの内容をリスト表示する
  • 使用例:
    • ls : 現在のディレクトリの内容を表示
    • ls -l : 詳細情報付きでファイルとディレクトリを表示
    • ls -a : 隠しファイルを含むすべてのファイルを表示

コマンドの実態はどこにある?

Section titled “コマンドの実態はどこにある?”

コマンドの実態は大体が/bin/usr/binなどのディレクトリ以下にプログラムが置かれている場合が多いです。しかし、プログラムをどこに置くかは任意でありどこに置いても適切に呼び出せば使用することができます。

例えば、lsコマンドを実行する場合lsのプログラムはどこに置いてあるのでしょうか?

それを確認するコマンドがwhichコマンドです。

Terminal window
which ls

上記のコマンドを実行すると/bin/lsなどディレクトリのパスが表示されたと思います。

whichコマンドを使用すると自分が今lsというコマンドを実行して実際に動いているプログラムのパスが出力されます。

このプログラムは直接実行することも可能です。つまり、下記の2つのコマンドは同義となります。

Terminal window
ls -l
# which ls の出力が /bin/ls だった場合
/bin/ls -l

これまでlsというコマンドを実行していたのはショートカット(のようなもの)を実行していたと思って貰ってかまいません。実際には/bin/lsというプログラムを実行していたのですが、毎回パスを書くのは面倒なのでlsと短く書けるようにしていたということです。

シェルはコンピューターのOSとユーザーの間のインターフェースとして機能するプログラムです。

ユーザーがコマンドを入力すると、シェルがそれを解釈してOSに伝え、実行結果をユーザーに返します。代表的なシェルにはBash、Zshなどがあります。

ターミナルで以下を実行すると実行しているシェルが表示されます。

Terminal window
echo $SHELL

bin/zshなどのパスが表示されたかと思います。macOSのデフォルト(macOS Catalina以降)ではzshがシェルとして設定されているのでzshの実行プログラムのパスが表示されます。

$SHELLという表現が初めてでてきました。

シェルには環境変数という、シェルを使用する際にシステム全体で使用される重要な設定情報を保持しておくための仕組みがあります。あらかじめ環境変数に設定された情報を読み込んでシェルを使いやすく設定しておいてくれます。

以下は有名な環境変数の一覧です。環境変数名の頭に$をつけてecho $環境変数名という形でコマンドを実行すると設定されている環境変数が確認できます。

  • HOME
    • 現在のユーザーのホームディレクトリ
    • 例: /Users/username
  • USER
    • 現在ログインしているユーザー名
  • SHELL
    • 現在使用しているシェルのパス
    • 例: /bin/zsh
  • LANG
    • システムの言語と文字コードの設定
    • 例: ja_JP.UTF-8

PATHという環境変数があります。このPATH環境変数はコマンドを実行する際の仕組みに密接に関わってきます。

まずはPATH環境変数の中身を見てみましょう。以下のコマンドを実行します。

Terminal window
echo $PATH

/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbinなどの長いテキストが表示されたかと思います。

このテキストはディレクトリのパスをコロン(:)で区切って表現されています。つまり、

  • /usr/local/bin
  • /usr/bin
  • /usr/sbin
  • /bin
  • /sbin

というパスのリストが設定されている状態です。

PATH環境変数は、シェルがコマンドを実行するときに、実行可能ファイル(プログラム)を探すディレクトリのリストを保持しています。

例えば、lsコマンドを実行した場合、

  1. /usr/local/bin以下にlsというプログラムが存在するかチェック。 なければ次のディレクトリを探す。
  2. /usr/bin以下にlsというプログラムが存在するかチェック。 なければ次のディレクトリを探す。
  3. /usr/sbin以下にlsというプログラムが存在するかチェック。 なければ次のディレクトリを探す。
  4. /bin以下にlsというプログラムが存在するかチェック。 なければ次のディレクトリを探す。
  5. /sbin以下にlsというプログラムが存在するかチェック。 見つからなければエラーになる。

という流れでコマンドのプログラムがどこにあるかを探します。

/bin以下にlsというプログラムがあれば/bin/lsとパスを全て指定せずともlsとするだけでlsコマンドが実行できるというわけです。

また、複数のlsというプログラムが/usr/local/bin/ls/bin/lsに存在した場合は/usr/local/bin/lsの方が先に探されるためbin/lsは実行されません。

まとめると、PATH環境変数の働きは以下の2つです。

  1. コマンド検索の効率化
  • ユーザーがコマンドを入力すると、シェルはPATHに列挙されたディレクトリを順番に検索します。
  • 最初に見つかった実行可能ファイルが実行されます。
  • PATHのおかげで、コマンドを実行する際にフルパスを指定する必要がありません。
  • 例えば、/bin/ls の代わりに単に ls と入力できます。

コマンドを呼び出す仕組みについて

Section titled “コマンドを呼び出す仕組みについて”

ここまででコマンドが実行される流れを説明してきましたので、改めてまとめると以下のようになります。

  1. コマンド入力: ユーザーがターミナルにコマンドを入力します。
  2. シェルの解釈: 入力されたコマンドはまずシェル(例:bash, zsh)によって解釈されます。
  3. パスの検索: シェルは、システムのPATH環境変数に指定されたディレクトリ内でコマンドに対応する実行ファイルを探します。
  4. 実行: 対応する実行ファイルが見つかると、シェルはそのプログラムをメモリにロードし、実行します。
  5. 出力: コマンドの実行結果(標準出力や標準エラー出力)がターミナルに表示されます。
  6. 終了: コマンドの実行が完了すると、制御がシェルに戻り、次のコマンド入力を待ちます。

以上がコマンドに関する基本的な情報についての説明でした。コマンドを使用する際には、オプションや引数の指定に加えて、コマンドの実行ファイルがどこにあるかや、環境変数なども考慮する必要があります。これらの知識を活用して、効率的にコマンドを利用することができるでしょう。 コマンドの使い方を把握し、ターミナル上で効率的に作業を行うことで、プログラミングやシステム管理など様々な作業をスムーズに行うことができます。是非、実際にコマンドを使いながら慣れていきましょう。