ターミナルとコマンドの基本ガイド
本ガイドではターミナルを使用したコマンドラインスキルの基礎を学び、システム上の簡単な操作を行うことを目標とした講義の補足資料です。
Linuxのコマンドを覚えることは、システム管理や開発などの作業を効率的に行うために重要です。是非、様々なコマンドを学習して、Linuxの使い方をマスターしましょう。
CUI(キャラクターユーザーインターフェース)とは
Section titled “CUI(キャラクターユーザーインターフェース)とは”GUI(グラフィックユーザーインターフェース)ではマウスを使用してアプリケーションを操作しますが、CUI(キャラクターユーザーインターフェース)ではテキストの入力を使用してアプリケーションを操作します。
例えば、Finderを使用してフォルダを作成したりファイル名を変更したりといった作業は日常的に行うかと思います。Finderでの操作はマウスを使用しますがmacOSのCUIアプリケーション(ターミナル)では下記のようなテキストを入力してReturnキーを押すことで同じ操作が可能です。
# フォルダを作成するmkdir new-folder
# ファイル名を変更するmv old-file-name.txt new-file-name.txtGUIアプリケーションは、ユーザーフレンドリーな視覚的インターフェースを提供していますが、内部的には一連のコマンドを実行しています。ユーザーがボタンをクリックしたり、メニューを選択したりする度に、そのアクションは特定のコマンドやプログラム命令に変換されます。
つまり、GUIは複雑なコマンドやプロセスを抽象化し、ユーザーが直感的に操作できるようにしているのです。これにより、コンピューターの専門知識がなくても、高度な機能を持つソフトウェアを利用できるようになっています。
しかし、CUIを使用することでタスクの処理がより効率的になる場合があります。CUIは自動化やスクリプト化が容易であり、大量の作業を自動化する際に非常に便利です。そのため、CUIを使いこなすことで効率的に作業をこなすことができるでしょう。
またテキストで操作を実行するため、操作の記録や複数人での作業時のコピー・ペーストが容易といったメリットがあります。
Linuxにおけるコマンドとは
Section titled “Linuxにおけるコマンドとは”Linuxにおけるコマンドとは、特定の操作を実行するためにコンピューターに与える指示です。
ターミナルでコマンドを実行するには、コマンドを入力してReturnキーを押します。
また、コマンドの中には明示的にコマンドを終了させないと実行し続けるものもあります。実行中のコマンドを終了させるにはControl + cを押します。
一般的にコマンドはコマンド名とその後に続く引数(argument)と呼ばれるテキストで構成されます。
下記はlsというディレクトリの中身をリスト表示するコマンドでコマンド名と2つの引数を指定しています。
ls -l /Users/tdp/Desktop-lのように-で始まる引数はコマンドの動作を変更するオプションと呼ばれるものです。オプション以外の引数にはファイル名やディレクトリ名、任意のテキストなどコマンドが必要とするテキストを指定します。
オプションの指定の方法には次の4つのパターンがあります。
-lのように1つのダッシュ(-)に1つの文字が続くパターン。--longのように2つのダッシュ(--)に単語が続くパターン。-typeのように1つのダッシュ(-)に単語が続くパターン。*このパターンは滅多にありません。- ダッシュを使わない1つの文字のパターン。*このパターンは滅多にありません。
また、多くのコマンドでは1のパターンが複数あった場合に組み合わせて指定することが可能です。
例えば下記のではlsコマンドに-lと-aというオプション組み合わせて指定しています。
# ls -l -a と同義ls -laオプションや指定する引数はコマンドによって様々なので、--helpというオプションを指定することで、使用方法を提示してくれるコマンドもありますので一度、目を通してみると良いでしょう。
# --help オプションを使用して ls コマンドの使い方を見るls --helpコマンドの使い方
Section titled “コマンドの使い方”pwd (Print Working Directory)
Section titled “pwd (Print Working Directory)”- 目的:現在の作業ディレクトリのパスを表示する
- 使用例:
pwd: 現在のディレクトリパスを表示
cd (Change Directory)
Section titled “cd (Change Directory)”- 目的:ディレクトリ(フォルダ)を変更する
- 使用例:
cd Documents: Documentsディレクトリに移動cd ../: 親ディレクトリに移動
mkdir (Make Directory)
Section titled “mkdir (Make Directory)”- 目的:新しいディレクトリを作成する
- 使用例:
mkdir NewFolder: NewFolderという名前の新しいディレクトリを作成
cp (Copy)
Section titled “cp (Copy)”- 目的:ファイルやフォルダをコピーする
- 使用例:
cp before.txt after.txt: before.txtというファイルをコピーしてafter.txtというファイルを作成
whoami
Section titled “whoami”- 目的:現在ログインしているユーザー名を表示する
- 使用例:
whoami: 現在のユーザー名を表示
ls (List)
Section titled “ls (List)”- 目的:ディレクトリの内容をリスト表示する
- 使用例:
ls: 現在のディレクトリの内容を表示ls -l: 詳細情報付きでファイルとディレクトリを表示ls -a: 隠しファイルを含むすべてのファイルを表示
コマンドの実態はどこにある?
Section titled “コマンドの実態はどこにある?”コマンドの実態は大体が/binや/usr/binなどのディレクトリ以下にプログラムが置かれている場合が多いです。しかし、プログラムをどこに置くかは任意でありどこに置いても適切に呼び出せば使用することができます。
例えば、lsコマンドを実行する場合lsのプログラムはどこに置いてあるのでしょうか?
それを確認するコマンドがwhichコマンドです。
which ls上記のコマンドを実行すると/bin/lsなどディレクトリのパスが表示されたと思います。
whichコマンドを使用すると自分が今lsというコマンドを実行して実際に動いているプログラムのパスが出力されます。
このプログラムは直接実行することも可能です。つまり、下記の2つのコマンドは同義となります。
ls -l
# which ls の出力が /bin/ls だった場合/bin/ls -lこれまでlsというコマンドを実行していたのはショートカット(のようなもの)を実行していたと思って貰ってかまいません。実際には/bin/lsというプログラムを実行していたのですが、毎回パスを書くのは面倒なのでlsと短く書けるようにしていたということです。
シェルについて
Section titled “シェルについて”シェルはコンピューターのOSとユーザーの間のインターフェースとして機能するプログラムです。
ユーザーがコマンドを入力すると、シェルがそれを解釈してOSに伝え、実行結果をユーザーに返します。代表的なシェルにはBash、Zshなどがあります。
ターミナルで以下を実行すると実行しているシェルが表示されます。
echo $SHELLbin/zshなどのパスが表示されたかと思います。macOSのデフォルト(macOS Catalina以降)ではzshがシェルとして設定されているのでzshの実行プログラムのパスが表示されます。
$SHELLとは?
Section titled “$SHELLとは?”$SHELLという表現が初めてでてきました。
シェルには環境変数という、シェルを使用する際にシステム全体で使用される重要な設定情報を保持しておくための仕組みがあります。あらかじめ環境変数に設定された情報を読み込んでシェルを使いやすく設定しておいてくれます。
以下は有名な環境変数の一覧です。環境変数名の頭に$をつけてecho $環境変数名という形でコマンドを実行すると設定されている環境変数が確認できます。
HOME- 現在のユーザーのホームディレクトリ
- 例:
/Users/username
USER- 現在ログインしているユーザー名
SHELL- 現在使用しているシェルのパス
- 例:
/bin/zsh
LANG- システムの言語と文字コードの設定
- 例:
ja_JP.UTF-8
PATH環境変数
Section titled “PATH環境変数”PATHという環境変数があります。このPATH環境変数はコマンドを実行する際の仕組みに密接に関わってきます。
まずはPATH環境変数の中身を見てみましょう。以下のコマンドを実行します。
echo $PATH/usr/local/bin:/usr/bin:/usr/sbin:/bin:/sbinなどの長いテキストが表示されたかと思います。
このテキストはディレクトリのパスをコロン(:)で区切って表現されています。つまり、
/usr/local/bin/usr/bin/usr/sbin/bin/sbin
というパスのリストが設定されている状態です。
PATH環境変数は、シェルがコマンドを実行するときに、実行可能ファイル(プログラム)を探すディレクトリのリストを保持しています。
例えば、lsコマンドを実行した場合、
/usr/local/bin以下にlsというプログラムが存在するかチェック。 なければ次のディレクトリを探す。/usr/bin以下にlsというプログラムが存在するかチェック。 なければ次のディレクトリを探す。/usr/sbin以下にlsというプログラムが存在するかチェック。 なければ次のディレクトリを探す。/bin以下にlsというプログラムが存在するかチェック。 なければ次のディレクトリを探す。/sbin以下にlsというプログラムが存在するかチェック。 見つからなければエラーになる。
という流れでコマンドのプログラムがどこにあるかを探します。
/bin以下にlsというプログラムがあれば/bin/lsとパスを全て指定せずともlsとするだけでlsコマンドが実行できるというわけです。
また、複数のlsというプログラムが/usr/local/bin/lsと/bin/lsに存在した場合は/usr/local/bin/lsの方が先に探されるためbin/lsは実行されません。
まとめると、PATH環境変数の働きは以下の2つです。
- コマンド検索の効率化
- ユーザーがコマンドを入力すると、シェルは
PATHに列挙されたディレクトリを順番に検索します。 - 最初に見つかった実行可能ファイルが実行されます。
2. フルパス指定の省略
Section titled “2. フルパス指定の省略”PATHのおかげで、コマンドを実行する際にフルパスを指定する必要がありません。- 例えば、
/bin/lsの代わりに単にlsと入力できます。
コマンドを呼び出す仕組みについて
Section titled “コマンドを呼び出す仕組みについて”ここまででコマンドが実行される流れを説明してきましたので、改めてまとめると以下のようになります。
- コマンド入力: ユーザーがターミナルにコマンドを入力します。
- シェルの解釈: 入力されたコマンドはまずシェル(例:bash, zsh)によって解釈されます。
- パスの検索: シェルは、システムの
PATH環境変数に指定されたディレクトリ内でコマンドに対応する実行ファイルを探します。 - 実行: 対応する実行ファイルが見つかると、シェルはそのプログラムをメモリにロードし、実行します。
- 出力: コマンドの実行結果(標準出力や標準エラー出力)がターミナルに表示されます。
- 終了: コマンドの実行が完了すると、制御がシェルに戻り、次のコマンド入力を待ちます。
以上がコマンドに関する基本的な情報についての説明でした。コマンドを使用する際には、オプションや引数の指定に加えて、コマンドの実行ファイルがどこにあるかや、環境変数なども考慮する必要があります。これらの知識を活用して、効率的にコマンドを利用することができるでしょう。 コマンドの使い方を把握し、ターミナル上で効率的に作業を行うことで、プログラミングやシステム管理など様々な作業をスムーズに行うことができます。是非、実際にコマンドを使いながら慣れていきましょう。