=================== POSIX 環境の使い方 =================== .. contents:: 目次 :depth: 4 .. _start_commandline: コマンドラインの起動 ==================== :ref:`Howto-start-Ubuntu` で紹介している方法で WSL 上の Ubuntu を起動しましょう。 explorer.exe で開いているフォルダを作業ディレクトリに設定済みの状態で開くには :ref:`LinuxShellHere` または :ref:`WSLUbuntuHere` で紹介している方法を使うと便利です。 .. _command: コマンド ========== コマンドラインでは、 コマンド待ち受け状態の shell にコマンドを与えることで命令を行います。 コマンドは一般に :numref:`usage of the standard command` のような書式で与えます。 コマンド名は例えば ``help`` や ``ls`` 等、shell のビルトインコマンドや コマンド検索対象のディレクトリに置かれたプログラムのファイル名となります。 パラメータは各コマンドの動作を切り替えるオプションや コマンドに処理させるファイル等を与えます。 .. code-block:: :name: usage of the standard command :caption: 一般的なコマンドの書式 コマンド名 [パラメータ]... コマンドの使い方を説明される時 パラメータが大括弧で ``[FILE]`` のように囲まれている場合は、 そのパラメータが省略可能であることを意味します。 括弧なしで ``FILE`` のように示された場合は、 そのパラメータが必須であることを意味します。 パラメータの末尾に ``FILE...`` や ``[FILE]...`` のように ``...`` が付与されている場合、 直前のパラメータを任意の回数繰り返す事が出来ることを意味します。 空白を含むパラメータはダブルクォーテーション ``" ... "`` またはシングルクォーテーション ``' ... '`` で括る必要があります。 両者の違いは、クオートされたパラメータ内の変数が展開されるか否かです(:ref:`shell_variable_and_environment_variable` で後述します)。 コマンドには様々な種類のものがありますが、 例えば、インターネットからファイルをダウンロードするコマンド ``wget`` や ``curl`` を使ってファイルをダウンロードするには :numref:`wget https://ds0n.cc.yamaguchi-u.ac.jp/~okadalab/hello.py` や :numref:`curl -OLR https://ds0n.cc.yamaguchi-u.ac.jp/~okadalab/hello.py` のようにします。 .. code-block:: bash :name: wget https://ds0n.cc.yamaguchi-u.ac.jp/~okadalab/hello.py :caption: wget による hello.py の取得 :class: forCnP wget https://ds0n.cc.yamaguchi-u.ac.jp/~okadalab/hello.py .. code-block:: bash :name: curl -OLR https://ds0n.cc.yamaguchi-u.ac.jp/~okadalab/hello.py :caption: curl による hello.py の取得 :class: forCnP curl -OLR https://ds0n.cc.yamaguchi-u.ac.jp/~okadalab/hello.py .. _Howto_learn_the_command: コマンドの調べ方 ================= .. _help: ヘルプ ------- POSIX 用のコマンドの多くはオプションとして ``-h`` または ``--help`` を与えると、 そのコマンドの使い方を説明したヘルプを表示する機能を備えます(例: :numref:`help --help`, :numref:`result of help --help`)。 Shell のビルトインコマンドの場合は ``help`` コマンドでも使い方を調べることができます(例: :numref:`help help`, :numref:`result of help help`)。 .. code-block:: bash :name: help --help :caption: help コマンドのヘルプ表示 :class: forCnP help --help .. code-block:: console :name: result of help --help :caption: help コマンドのヘルプ表示結果 $ help --help help: help [-dms] [pattern ...] Display information about builtin commands. Displays brief summaries of builtin commands. If PATTERN is specified, gives detailed help on all commands matching PATTERN, otherwise the list of help topics is printed. Options: -d output short description for each topic -m display usage in pseudo-manpage format -s output only a short usage synopsis for each topic matching PATTERN Arguments: PATTERN Pattern specifying a help topic Exit Status: Returns success unless PATTERN is not found or an invalid option is given. .. code-block:: bash :name: help help :caption: help コマンドによる help コマンドのヘルプ表示 :class: forCnP help help .. code-block:: console :name: result of help help :caption: help コマンドによる help コマンドのヘルプ表示結果 $ help help help: help [-dms] [pattern ...] Display information about builtin commands. Displays brief summaries of builtin commands. If PATTERN is specified, gives detailed help on all commands matching PATTERN, otherwise the list of help topics is printed. Options: -d output short description for each topic -m display usage in pseudo-manpage format -s output only a short usage synopsis for each topic matching PATTERN Arguments: PATTERN Pattern specifying a help topic Exit Status: Returns success unless PATTERN is not found or an invalid option is given. man page ---------- POSIX 用のコマンドの多くには man page と呼ばれる 以下の 8 セクションに分類されたマニュアル (manual: 取扱説明書) も用意されています。 1. ユーザーコマンド 2. システムコール 3. C ライブラリ関数 4. スペシャルファイル 5. ファイルフォーマット 6. ゲームプログラム 7. 概要、慣習やその他 8. 管理コマンドと特権コマンド これは :file:`/usr/share/man` 以下のディレクトリ格納されていており、 `man `_ コマンド(:numref:`man command`)により検索や閲覧が可能です。 .. code-block:: bash :caption: man コマンド :name: man command man [man options] [[section] page ...] ... man -k [apropos options] regexp ... man -K [man options] [section] term ... man -f [whatis options] page ... man -l [man options] file ... man -w|-W [man options] page ... 例えば ``man`` コマンド自体の man page を見たい場合は ``man man`` と入力します(:numref:`man man`)。 .. code-block:: bash :caption: man コマンドの man page を表示するコマンド :name: man man :class: forCnP man man man page の閲覧中はカーソルキーの上下や :kbd:`PageUp` , :kbd:`PageDown` , :kbd:`j` , :kbd:`k` 等のキーで上下にスクロールします。 また、 :kbd:`/` に続けて :term:`正規表現` を入力して :kbd:`ENTER` キーを叩くことで検索も出来、 :kbd:`n`, :kbd:`N` キーで上下の該当箇所にジャンプすることも出来ます。 終了は :kbd:`q` キーです。 ``man`` コマンドの実行時に幾つかのオプションで動作を変更でき、 ``-f`` オプションを用いるとコマンドの概要が記録されている whatis データベースの完全マッチ検索(`whatis `__ コマンド相当)、 ``-k`` オプションを持ちると whatis データベースの :term:`正規表現` 検索 (`apropos `__ コマンド相当) の動作をします。 なお、WSL に Ubuntu をインストールしただけの状態では、日本語の man page や日本語の設定が行われていません。 WSL の Ubuntu で日本語の man page を利用したい場合は、 :numref:`setup manpages-ja` のコマンドを実行してください(要パスワード)。 実行が完了したら、一旦 WSL のウインドウを閉じて、WSL を開き直すと日本語マニュアルが利用可能になります。 .. code-block:: bash :name: setup manpages-ja :caption: 日本語 man page の設定 :class: forCnP function setup_manpages_ja () { sudo apt update sudo apt install -y manpages-ja{,-dev} sudo locale-gen --lang ja_JP.UTF-8 sudo update-locale LANG=ja_JP.UTF-8 } setup_manpages_ja 英語に戻したい場合は、:numref:`setup manpages-en` を実行して WSL を開き直しましょう。 .. code-block:: bash :name: setup manpages-en :caption: 英語の man page に戻す設定 :class: forCnP sudo update-locale LANG=C.UTF-8 英語と日本語の man page を使い分けたい場合は、 コマンドの前に環境変数 LANG の設定を与えて、使いたい :term:`ロケール` を指定します (:numref:`show manpages-en`, :numref:`show manpages-ja`)。 .. code-block:: bash :name: show manpages-en :caption: 英語の man page を引くコマンド :class: forCnP LANG=C man man .. code-block:: bash :name: show manpages-ja :caption: 日本語の man page を引くコマンド :class: forCnP LANG=ja_JP.UTF-8 man man 一時的に切り替えたい場合は環境変数 LANG に使いたい :term:`ロケール` を指定します (:numref:`LANG=C.UTF-8`, :numref:`LANG=ja_JP.UTF-8`)。 .. code-block:: bash :name: LANG=C.UTF-8 :caption: 英語のケールに切り替えるコマンド :class: forCnP LANG=C.UTF-8 .. code-block:: bash :name: LANG=ja_JP.UTF-8 :caption: 日本語のロケールに切り替えるコマンド :class: forCnP LANG=ja_JP.UTF-8 man page を日本語に翻訳・公開している `JM Project`_ や `Ubuntu manuals` 及び `Ubuntu manpages から日本語マニュアルを検索する`_ 方法も 知っておくと良いでしょう。 * `JM Project `_ * `Ubuntu manuals `_ * `Ubuntu manpages から日本語マニュアルを検索する <_static/ubuntu_manuals_ja.html>`_ info ------ `info `__ コマンド(:numref:`info command`)を用いると、 `texinfo `__ 形式のより詳しいマニュアルを確認出来る場合もあります。 これらのドキュメントは :file:`/usr/share/info/` 以下のディレクトリに格納されています。 .. code-block:: bash :caption: info コマンド :name: info command info [OPTION]... [MENU-ITEM...] .. _file_directory_folder: ファイルとディレクトリとフォルダ ================================ ファイルはデータを格納する仕組みです。 今日、多くの OS では テキストや画像、音声等様々な形式のデータをファイルとして保存しています。 ディレクトリはファイルを整理するための仕組みであり、複数のファイルを格納するための特殊なファイルです。 ディレクトリの中にディレクトリを作ることで親子関係のある階層構造を作ることも出来ます。 Windows でフォルダと呼ばれているファイルが、POSIX ではディレクトリと呼ばれます。 両者は基本的に同じ仕組みです。 .. _working_directory: 作業ディレクトリ ================= コマンドラインには、作業ディレクトリという概念があります。 コマンドにファイルやディレクトリを与える際には、 :term:`ルートディレクトリ` (:term:`root directory`) を起点とする :term:`絶対パス` (:term:`absolute path`) または :term:`作業ディレクトリ` (:term:`current directory`, :term:`working directory`) を起点とする :term:`相対パス` (:term:`relative path`) で位置を指し示します。 コマンドラインで作業するには、まず、目的のファイルがあるディレクトリに移動する必要があります。 作業ディレクトリを変更するには ``cd`` (change directory) コマンド(:numref:`cd command`)に、 移動先のディレクトリを :term:`絶対パス` または :term:`相対パス` として与えてください。 親ディレクトリへ移動する際は、親ディレクトリを意味する記号 ``..`` を用います。 現在の作業ディレクトリを調べるには ``pwd`` (print working directory) コマンド (:numref:`pwd command`)を使います。 .. code-block:: bash :name: cd command :caption: cd コマンド cd [OPTION]... [DIR] .. code-block:: bash :name: pwd command :caption: pwd コマンド pwd [OPTION]... POSIX 環境では、:term:`ホームディレクトリ` (:term:`HOME directory`) は 通常 :file:`/home/USERNAME` に作成されます(:file:`USERNAME` は各自のユーザー名になります)。 Ubuntu は初期設定ではコマンドラインの入力待ちの行に ``USERNAME@HOSTNAME:~$`` ような表示が行われますが、 末尾の ``$`` は一般ユーザー権限で実行中を意味し、 その前の ``:`` との間の部分が現在の作業ディレクトリを意味します。 ``~`` はホームディレクトリを意味する短縮表記です。 ``cd`` コマンドはパラメータなしで実行、またはパラメータとして ``~`` を与えて実行すると 作業ディレクトリをホームディレクトリに変更します。 .. code-block:: bash :name: cd to HOME directory type1 :caption: ホームディレクトリに移動するコマンド1 :class: forCnP cd .. code-block:: bash :name: cd to HOME directory type2 :caption: ホームディレクトリに移動するコマンド2 :class: forCnP cd ~ また、パラメータとして ``-`` を与えた場合、 ``cd`` コマンドで設定された、1 つ前の作業ディレクトリに戻ります。 .. code-block:: bash :name: cd to OLDPWD :caption: 作業ディレクトリを 1 つ前の作業ディレクトリに戻すコマンド :class: forCnP cd - .. _file_operation: ファイル操作 ============== POSIX では `cat `_, `cp `_, `ls `_, `mkdir `_, `mv `_, `rm `_, `rmdir `_ 等のファイル操作用コマンドを利用可能です。 それぞれ、ファイルの表示、コピー、一覧、移動、削除を行います。 :numref:`file operation command` にファイル操作コマンドの概要を示します。 .. .. table:: ファイル操作コマンドの概要 :name: file operation command +-------+-------------------------------+ |用途 |コマンド | +=======+===============================+ +表示 || cat [OPTION]... [FILE]... | +-------+-------------------------------+ +コピー || cp [OPTION]... SRC DST | + || cp [OPTION]... SRC... DIR | + || cp [OPTION]... -t DIR SRC... | +-------+-------------------------------+ +一覧 || ls [OPTION]... [FILE]... | +-------+-------------------------------+ +移動 || mv [OPTION]... [-T] SRC DST | + || mv [OPTION]... SRC... DIR | + || mv [OPTION]... -t DIR SRC... | +-------+-------------------------------+ +削除 || rm [OPTION]... [FILE]... | +-------+-------------------------------+ .. list-table:: ファイル操作コマンドの概要 :name: file operation command :header-rows: 1 :widths: 10, 25 * - 用途 - コマンド * - 表示 - | cat [OPTION]... [FILE]... * - コピー - | cp [OPTION]... SRC DST | cp [OPTION]... SRC... DIR | cp [OPTION]... -t DIR SRC... * - 一覧 - | ls [OPTION]... [FILE]... * - ディレクトリ作成 - | mkdir [OPTION]... [DIR]... * - 移動 - | mv [OPTION]... [-T] SRC DST | mv [OPTION]... SRC... DIR | mv [OPTION]... -t DIR SRC... * - 削除 - | rm [OPTION]... [FILE]... * - ディレクトリ削除 - | rmdir [OPTION]... [DIR]... テキストファイルの表示 ----------------------- テキストファイルの表示は `cat`_ (concatenate)コマンドを用います。 何らかのテキストファイルの(例えば :download:`hello.py`)を cat コマンドで表示するには、 ファイルを保存しているフォルダで :numref:`cat hello.py` を実行します(:numref:`result of cat hello.py`)。 .. code-block:: bash :name: cat hello.py :caption: cat コマンドで hello.py を表示 :class: forCnP cat hello.py .. code-block:: console :name: result of cat hello.py :caption: cat コマンドで hello.py を表示結果 $ cat hello.py #!/usr/bin/env python3 print("hello, world") ファイルのコピー ---------------- ファイルのコピーは `cp`_ (copy)コマンドを用います。 :numref:`file operation command` では SRC がコピー元(source)ファイル、DST がコピー先(destination)ファイルです。 :file:`hello.py` を :file:`hello2.py` にコピーしたい場合は :numref:`cp hello.py hello2.py` のようにします (:numref:`result of cp hello.py hello2.py`)。 ``-v`` オプションはなくても問題ありませんが、実行結果の詳細を表示するために付与しています。 .. code-block:: bash :name: cp hello.py hello2.py :caption: hello.py を hello2.py にコピーするコマンド :class: forCnP cp -v hello.py hello2.py .. code-block:: console :name: result of cp hello.py hello2.py :caption: hello.py を hello2.py にコピーするコマンド実行結果 $ cp -v hello.py hello2.py 'hello.py' -> 'hello2.py' ファイルを複数与えた場合は、それらのファイルをディレクトリにコピーするコマンドになります。 オプションを与えることで、同名のファイルがあった時の振る舞い等を変更できます。詳細は man page で確認してください。 ファイルの一覧 --------------- ファイルの一覧は `ls`_ (list)コマンドを用います(:numref:`ls command`, :numref:`result of ls command`)。 .. code-block:: bash :class: forCnP :name: ls command :caption: ファイルを一覧するコマンド ls .. code-block:: bash :name: result of ls command :caption: ファイルを一覧するコマンド実行結果 $ ls hello.py hello2.py オプションを与えることで、読み込み、書き込み、実行フラグや、所有者、 ファイル更新日時等の詳細情報付きで一覧することも出来ます。 ディレクトリの作成 ------------------ ディレクトリの作成は `mkdir`_ (make directory)コマンドを用います。 例えば、:file:`IP2023` というディレクトリを作成したい場合は :numref:`mkdir IP2023` のようにします (:numref:`result of mkdir IP2023`)。 ``-v`` オプションはなくても問題ありませんが、実行結果の詳細を表示するために付与しています。 .. code-block:: bash :name: mkdir IP2023 :caption: IP2023 というディレクトリを作成するコマンド :class: forCnP mkdir -v IP2023 .. code-block:: bash :name: result of mkdir IP2023 :caption: IP2023 というディレクトリを作成するコマンド実行結果 $ mkdir -v IP2023 mkdir: created directory 'IP2023' ファイルの移動 ---------------- ファイルのコピーは `mv`_ (move)コマンドを用います。 SRC が移動元(source)ファイル、DST が移動先(destination)ファイルです。 :file:`hello2.py` を :file:`hello3.py` に移動したい場合は :numref:`mv hello2.py hello3.py` のようにします (:numref:`result of mv hello2.py hello3.py`)。 ``-v`` オプションはなくても問題ありませんが、実行結果の詳細を表示するために付与しています。 .. code-block:: bash :name: mv hello2.py hello3.py :caption: hello2.py を hello3.py に移動するコマンド :class: forCnP mv -v hello2.py hello3.py .. code-block:: console :name: result of mv hello2.py hello3.py :caption: hello2.py を hello3.py に移動するコマンド実行結果 $ mv -v hello2.py hello3.py renamed 'hello2.py' -> 'hello3.py' ファイルを複数与えた場合は、それらのファイルをディレクトリに移動するコマンドになります。 オプションを与えることで、同名のファイルがあった時の振る舞い等を変更できます。詳細は man page で確認してください。 ファイルの削除 -------------- ファイルの削除は `rm`_ (remove)コマンドを用います。 :file:`hello3.py` 削除したい場合は :numref:`rm hello3.py` のようにします (:numref:`result of rm hello3.py`)。 ``-v`` オプションはなくても問題ありませんが、実行結果の詳細を表示するために付与しています。 .. code-block:: bash :name: rm hello3.py :caption: hello3.py に削除するコマンド :class: forCnP rm -v hello3.py .. code-block:: console :name: result of rm hello3.py :caption: hello3.py に削除するコマンド実行結果 $ rm -v hello3.py removed 'hello3.py' オプションを与えることで、ファイルが含まれるディレクトリを再帰的に削除したり、削除の際に確認を行ったりと、振る舞いの変更ができます。 詳細は man page で確認してください。 ディレクトリの削除 ------------------ ディレクトリの削除は `rmdir`_ (remove directory)コマンドを用います(例: :numref:`rmdir IP2023`)。 :file:`IP2023` 削除したい場合は :numref:`rmdir IP2023` のようにします (:numref:`result of rmdir IP2023`)。 ``-v`` オプションはなくても問題ありませんが、実行結果の詳細を表示するために付与しています。 .. code-block:: bash :name: rmdir IP2023 :caption: IP2023 というディレクトリを削除するコマンド :class: forCnP rmdir -v IP2023 .. code-block:: bash :name: result of rmdir IP2023 :caption: IP2023 というディレクトリを削除するコマンド実行結果 $ rmdir -v IP2023 rmdir: removing directory, 'IP2023' `rmdir`_ は空のディレクトリしか削除できません。ディレクトリに含まれるファイルごと削除したい場合は `rm`_ コマンドに ``-r`` オプションを与えます。 所有者とモードビット ==================== POSIX ではファイルには所有者の情報と、ファイルを公開するグループの情報が設定されている他、 :term:`モードビット` (:term:`mode bit`) と呼ばれる ファイルの読み込み、書き込み、実行に関する権限が設定されています。 これらの情報は `ls`_ コマンドに ``-l`` オプションを与えると 確認出来ます(:numref:`ls -l`, :numref:`result of ls -l`)。 .. code-block:: bash :name: ls -l :caption: ファイルを詳細付きで一覧するコマンド :class: forCnP ls -l .. code-block:: bash :name: result of ls -l :caption: ファイルを詳細付きで一覧するコマンド実行結果 $ ls -l total 0 -rw-r--r-- 1 USERNAME GROUPNAME 45 5月 22 21:38 hello.py ここで、USERNAME GROUPNAME となっているのが所有者とグループです。 ``-rw-r--r--`` となっている部分はファイルの属性で、右側9文字がモードビットとなります。 これを 3 文字ずつに分割して ``rx-`` 、 ``r--`` 、 ``r--`` とすると、 それぞれ user, group, other に対する権限を意味します。 rwx が読み込み(r: read)、書き込み(w: write)、実行(x: execute)属性となります。 所有者は `chown `_ コマンドで変更できます。 所有者を他のユーザーに変更する場合、通常は ``sudo`` を付与して super user 権限で変更する必要があります。 モードビットは `chmod `_ コマンドを用いると変更出来ます。 例えば x 属性を付与する場合は ``+x``、解除する場合は ``-x`` のように指定します。 rwx をの ON, OFF を 1, 0 に対応させて 3 bit の数値として r を 4、w を 2、x を 1 扱いすることで、 user, group, other の属性をそれぞれ 8 進表記した 1 桁の数として与えることも出来ます。 これは -rwxr--r-- なら 744 となります。 例えば :file:`hello.py` に実行属性を付与するには :numref:`chmod +x hello.py` のようにします (:numref:`result of chmod +x hello.py`)。 .. code-block:: bash :name: chmod +x hello.py :caption: hello.py に実行属性を付与するコマンド :class: forCnP chmod -v +x hello.py .. code-block:: bash :name: result of chmod +x hello.py :caption: hello.py に実行属性を付与するコマンド実行結果 $ chmod -v +x hello.py mode of 'hello.py' changed from 0644 (rw-r--r--) to 0755 (rwxr-xr-x) $ ls -l total 0 -rwxr-xr-x 1 USERNAME GROUPNAME 45 5月 22 21:38 hello.py .. _pipeline: パイプライン ============= POSIX では、複数のコマンドの入出力をパイプラインと呼ばれる仕組みで繋ぐことで、 単純な機能のコマンドを複数合わせて使う事が可能です。 パイプラインはコマンドとコマンドの間を ``|`` で繋ぎます。 例えば、 `ls`_ コマンドの出力を ファイルのバイト数・単語数・行数を表示する `wc `_ コマンドの入力に渡すには :numref:`ls -l | wc` のようにします(:numref:`result of ls -l | wc`)。 .. code-block:: bash :name: ls -l | wc :caption: ls の結果を wc で集計するコマンド :class: forCnP ls -l | wc .. code-block:: bash :name: result of ls -l | wc :caption: ls の結果を wc で集計するコマンド実行結果 $ ls -l | wc 2 11 68 .. _redirect: リダイレクト ============= POSIX では、キーボードの代わりにファイルから入力をしたり、 画面の代わりにファイルに出力するリダイレクトの機能が利用出来ます。 ファイルからコマンドに入力するには ``< FILENAME``、 コマンドからファイルに出力するには ``> FILENAME`` を使います。 例えば、 `ls`_ コマンドの出力をファイル :file:`a.txt` にリダイレクトし、 `wc`_ コマンドの入力としてファイル :file:`a.txt` の内容をリダイレクトするには、 :numref:`ls -l > a.txt`、 :numref:`wc < a.txt` のようにします (:numref:`result of ls -l > a.txt; wc < a.txt`)。 .. code-block:: bash :name: ls -l > a.txt :caption: ls の結果を a.txt にリダイレクトするコマンド :class: forCnP ls -l > a.txt .. code-block:: bash :name: wc < a.txt :caption: a.txt を wc にリダイレクトするコマンド :class: forCnP wc < a.txt .. code-block:: bash :name: result of ls -l > a.txt; wc < a.txt :caption: ls の結果を a.txt にリダイレクトし、a.txt を wc にリダイレクトした結果 $ ls -l > a.txt $ wc < a.txt 2 11 68 ここで上記の a.txt の内容は :numref:`cat a.txt` 次の通りです。 .. code-block:: console :name: cat a.txt :caption: a.txt の内容 $ cat a.txt total 0 -rwxr-xr-x 1 USERNAME GROUPNAME 45 5月 22 21:38 hello.py .. _editing_commandline: コマンドラインの編集 (履歴と補完) ================================= 近代的な shell ではコマンドラインの履歴や補完の機能が充実しています。 カーソルの上下キーを押してみると、ここまでで入力したコマンドの履歴を順に表示することが可能です。 また、カーソルキーの左右でテキストカーソルを動かし、以前実行したコマンドを修正して実行することも出来ます。 ``history`` コマンドを用いると、それら実行済みコマンドの一覧を得ることも出来ます。 ``history`` コマンドで得られた履歴一覧にはインデックス番号がついています。 ``!`` に続けてインデックス番号を入力し [ENTER] キーを叩くことで任意の履歴を実行することも出来ます。 ファイル名やディレクトリ名の入力の際には、[TAB] キーを押すことで、入力候補の表示や補完を行ってくれます。 [CTRL]+[a]、[CTRL]+[e] で行頭・行末、[CTRL]+[←]、[CTRL]+[→] で前後の単語の境界へ移動等、 様々なショートカットキーも設定されています。 編集の際に使えるショートカットキーついては bash man page の `Readline コマンド名 `_ の箇所に説明があります。 .. _comment: コメント ========= ``#`` から行末まではコメントとして扱われます。 .. _shell_variable_and_environment_variable: シェル変数と環境変数 ==================== Shell では一時的に値を記録するための変数を利用できます (:numref:`シェル変数への代入`、:numref:`シェル変数の参照`)。 .. code-block:: bash :name: シェル変数への代入 :caption: シェル変数への代入 name=[value] .. code-block:: bash :name: シェル変数の参照 :caption: シェル変数の参照 $name 空白を含むパラメータはダブルクォーテーション ``" ... "`` またはシングルクォーテーション ``' ... '`` で括る必要があり、 両者の違いは、クオートされたパラメータ内の変数が展開されるか否かであると :ref:`working_directory` で述べました。 実際の違いを比べておきましょう (:numref:`シェル変数の使用例`、:numref:`シェル変数の使用例実行結果`)。 ダブルクォーテーション ``" ... "`` 内では、 バックスラッシュ ``\`` を用いると環境変数の参照を意味する ``$`` のような特殊文字の 意味を打ち消すことができる他、 エスケープシーケンスと呼ばれる機能で改行などの制御記号を入力することも出来ます。 詳細は bash man page の `クオート `__ の部分を参照してください。 `echo `_ コマンドでは ``-e`` オプションを用いることで、 パラメータ中でバックスラッシュによって記述されたエスケープ文字を有効化出来ます。 .. code-block:: bash :name: シェル変数の使用例 :caption: シェル変数の使用例 :class: forCnP x=hello y=world echo "$x, $y" echo '$x, $y' echo "$x, \$y" echo -e "$x, \n$y" .. code-block:: console :name: シェル変数の使用例実行結果 :caption: シェル変数の使用例実行結果 $ x=hello $ y=world $ echo "$x, $y" hello, world $ echo '$x, $y' $x, $y hello, $y $ echo -e "$x, \n$y" hello, world Shell で使用する変数のうち、 ``export`` または ``declare -x`` コマンドで指定された変数は、 環境変数扱いされてて shell から起動した子プロセスからも参照できるようにるようになります。 環境変数は親プロセスから子プロセスに情報を伝達する手段として利用できます。 PATH ======== POSIX 環境において重要な環境変数の一つに PATH があります。 この変数には、コマンド実行時に実行ファイルを検索するためのパスが ``:`` 区切りで列挙してあります。 Windows にも同名で同様の環境変数 PATH がありますがこちらは ``;`` 区切りとなっています。 :numref:`環境変数 PATH の確認コマンド` コマンドを実行して環境変数 PATH の内容を確認してみましょう。 .. code-block:: bash :name: 環境変数 PATH の確認コマンド :caption: 環境変数 PATH の確認コマンド :class: forCnP echo $PATH `tr `_ コマンドを用いると、 文字の置換や削除が行えます。 ``:`` を改行に置き換えて見易く表示するには :numref:`環境変数 PATH の改行区切りで確認するコマンド` のようにします。 .. code-block:: bash :name: 環境変数 PATH の改行区切りで確認するコマンド :caption: 環境変数 PATH の改行区切りで確認するコマンド :class: forCnP echo $PATH | tr : "\n" コマンドは、環境変数 PATH で指定されたパスを順に検索されます。 bash の builtin コマンド ``type`` を用いると、 実行ファイル検索パスの中のどのコマンドが実行対象になっているかを 確認出来ます (:numref:`実行ファイル検索パスからどの echo コマンドが実行されるか調べるコマンド`)。 .. code-block:: bash :name: 実行ファイル検索パスからどの echo コマンドが実行されるか調べるコマンド :caption: 実行ファイル検索パスからどの echo コマンドが実行されるか調べるコマンド :class: forCnP type -a echo