Welcome to Mashykom WebSite



Linux OS 入門:コマンドとシェルスクリプトの説明


 Edge Computing & IoT 及び Robotics などの運用ではシングルボードコンピュータを使用するので、Linux OS の知識は必要不可欠になっています。このページは、こうした Edge Computing 及び Robotics の領域にこれから第一歩を踏み入れようと考えている方に Linux OS の基礎的な知識を提供するものです。

 Linux OSは、Linux カーネルと言われる核の部分と Linux シェルと呼ばれるコマンド群から構成されています。Linux カーネルはコンピュータのハードウエアを直接操作する命令群から構成されます。しかし、ユーザーがカーネルを直接操作することはできないので、カーネルとユーザーの間にインターフェースが必要になります。この役割を果たすのがシェルの領域です。一般に Linux OS と呼ばれるときは、このカーネルとシェルの両方を含めたものを指します。

 Linux OS をインストールするときは、どの Linux ディストリビューションを選択するかが重要です。なぜなら、ディストリビューションに依存してシェルの部分が若干異なるからです。 Linux ディストリビューションは大きく分けて以下の2系統になります。Red Hat 系(CentOS、Fedora など)と Debian 系(Debian GNU/Linux 、 Ubuntuなど)になります。2系統において、シェルの領域には異なるコマンドがありますが、共通する部分が大多数で、カーネルは同一になっています。

 このページでは Debian 系ディストリビューションを利用します。Ubuntu の公式ページのダウンロードサイトはこちらです。このページを読めば分かる通り、ダウンロードできるバージョンは数種類あります。最も一般的なバージョンは Ubuntu Desktop で、Ubuntu 、 Mac 、 Windows PCにインストールできます。サーバー向けのバージョンは Ubuntu Server で、Mac をはじめ、 ARM CPU マシン、IBM Power などにインストールします。Raspberry Pi などの IOT 機器にインストールできるバージョンも準備されています。また、Ubuntu Mate 、 Kubuntu 、 Xubuntu などの配布サイトもあります。Ubuntu Mate はRaspberry Pi へのインストールでよく利用されています。Raspberry Pi に Ubuntu Mate をインストールする手続きについてはUbuntu Mate のページを参照ください。Jetson Nano への Linux OS のインストールについては、こちらのページを見て下さい。

以下では、Debian 系の Ubuntu 20.04 LTS をインストールして、ログインシェルの仕組み、コマンドの紹介、シェルスクリプトの記述などについて説明します。LTS は Long Term Support の略で、2025年までのアップデートやサポートが保障されます。Ubuntu での Python の環境構築については、こちらのページを参照ください。2022年4月に、Ubuntuの最新LTS、22.04 LTS(Jammy Jellyfish)が公開されました。22.04 LTS(Jammy Jellyfish)をインストールするときは、Ubuntu 20.04をUbuntu 22.04 LTS(Jammy Jellyfish)に読み替えて下さい。

Last updated: 2022.6.30


Ubuntu 20.04LTSのインストール


 

 Linux ディストリビューションは大きく分けて以下の2系統になります。Red Hat 系(CentOS、Fedora など)と Debian 系(Debian GNU/Linux 、 Ubuntuなど)になります。2系統において、シェルの領域には異なるコマンドがありますが、共通する部分が大多数で、カーネルは同一になっています。ここでは、Debian 系の Ubuntu をインストールします。

 最初に、Ubuntu 20.04 のイメージファイルをダウンロードする手続きについて説明します。Ubuntu の公式ページのサイトからもダウンロードできますが、日本語版をダウンロードします。日本語版Ubuntu用のイメージファイルは日本語版ダウンロードサイトからダウンロードできます。ubuntu-ja-20.04.1-desktop-amd64.iso(ISOイメージ)をPCにダウンロードします。

 ここで、VirtualBoxにインストールするケースについて簡単に説明します。この場合、ダウンロードしたISOファイルをそのまま使います。

 VirtualBoxのダウンロードページ にアクセスして、Mac の場合「OS X hosts」をクリックして、最新のVirtualBox6.1.32をダウンロードします。ダウンロードされたパッケージを開いて、インストールの手順に沿ってインストールします。完了したら「閉じる」をクリックして終了します。

 次に、VirtualBox を起動して、ポップアップする指示に従って設定します。VirtualBoxにUbuntuをインストールする説明については、web 上に解説が多数ありますので、それらを参考にできます。少しばかり古いですが、学生向けに書かれたPDFが詳細に書かれているので参考になります。一通りの設定が終了したら、「VirtualBox」のトップで「起動」ボタンをクリックします。起動ハードディスクを選択の画面で、「empty」欄の右端をクリックして、光学ディスク選択で「追加」をクリックして、Ubuntu のイメージファイル(ubuntu-ja-20.04.1-desktop-amd64.iso)を選択して、「起動」します。Ubuntu のインストール画面が表示されますので、VirtualBox にインストールします。以下に説明するPC にインストールする手順と同じ手続きで進みます。VirtulaBox に割り当てられたハードディスクにインストールしますので、PCのOSそのものを変更するインストールではありません。

 VirtualBox を利用しないときは、ISOイメージファイルをUSBメモリなどに書き込む必要があります。ISOイメージを書き込んだUSBは「ライブUSB」とも呼ばれます。通常は、このライブUSB を用いて、PC にUbuntu をインストールします。ただ、Linux OS の勉強をするだけのときは、PC にインストールする必要はありません。この場合、PCにセットして電源を入れることで、PCにインストールすることなくUbuntu 20.04 LTSのデスクトップを試したりできます。

 ライブUSBの作成方法について説明します。ライブUSBを作成するにあたり、使用するUSBに古いOS等が残っている場合、FAT形式でフォーマットします(新品のUSBの時はフォーマットする必要はありません)。ダウンロードしておいた Ubuntu のISOイメージファイルをUSBにコピーします。Ubuntu イメージファイルを Mac にインストールする手続きはこの公式サイトに(英文)説明があります。Mac や Windows でライブUSBを作成するために用いられるソフトに、Etcherというフリーソフトがあります。このEtcherを起動して、ISOイメージファイルをUSBにコピー(flash)します。

 ISOファイルをコピーしたライブUSBをPCのUSBポートに接続して、電源を入れます。Macでは、「option」キーを押しながら電源を入れます。スタートアップ・マネジャーが Ubuntu の EFI boot を表示するので、これを選択します。Windows PCでは、「F2」や「Del」といったボタンなどのキーを押しながら起動して、BIOSあるいはUEFIの設定画面を出し、USBメモリから起動するよう選択します。

 ライブUSBからの起動時に、ファイルが壊れていないかのチェックが自動実行されるようになっていますので、ファイルの読み込みに30分程度の時間がかかります。起動が完了すると、インストール画面が表示されます。

ubuntu-20-04.png

 左側の言語リストをスクロールダウンし、「日本語」をクリックしてください。そうすると、画面が日本語での表示に変わります。Linux OS の知識を得るためだけの場合には、「Try Ubuntu」をクリックして下さい。PCのストレージにはインストールされません。PCにインストールするときは、「ubuntuをインストール(Install Ubuntu)」をクリックします。画面の指示に従って進みます。キーボードの選択は「Japanese」を選んだ方がベターでしょう。後で変更することはできます。

 インストールは1時間程度かかります。気長に待ちましょう。インストールが終了すると、再起動することが要求されます。再起動すると、以下のようなメッセージが表示された場合は、USBメモリを抜いて、Enterキーを押してください。
「please remove the installation medium, then press ENTER」

 ログイン画面が出て、コマンド入力を要求する状態のプロンプトが表示されます。ログインに成功すると、Ubuntuのデスクトップが表示されます。最初に「オンラインアカウントへの接続」ページが表示されます。アカウントを登録したい各項目をクリックして設定することで、Ubuntuから各オンラインサービスを利用できるようになります。右上の「スキップ」を押して次のページに進むことができます。なお、オンラインサービスへの接続や接続解除は設定アプリでいつでも設定できます。

 日本語入力をオンにするには、日本語(mozc)がインストールされているので、地域と言語の設定画面で日本語(mozc)を選択します。ログインした時、画面右上に「日本語 (Mozc)」が表示されているかを確認して、「日本語 (Mozc)」をクリックして、入力方式を「hiragana」とすると、日本語が入力できます。英語に戻するときは、入力方式の設定で「direct input」をクリックします。

なお、MacBookAirのキーボード配列に合わせるためには、以下で説明するターミナルから以下のコマンドを入力して


sudo dpkg-reconfigure keyboard-configuration

 キーボードのモデルとして、Apple Aluminium (JIS)を選択、キーボードが由来する国で「日本語」、キーボードのレイアウトで「日本語ー日本語(Macintosh)、ナショナル・ラテンモードで「切り替えなし」、ナショナル・ラテン入力で「一時切替えなし」、「キーボード配置のデフォルト」、「コンポーズキーなし」、Control+Alt+Backspaceキー使用で「いいえ」を選択します。「英数」キーは機能しません。mozcモードで「かな」キーで半角全角の切り替えはできますが、日本語と英字との切り替えはやはり、入力方式で切り替える必要があります。


Linux OS と MacOSにおけるログインシェル

 Linux 及び MacOS は歴史的にはUnix から派生してきた OS になります。その意味では、Linux と MacOS は思想的には類似の OS ですので、共通する部分が多いです。

 Unix の起源は、1960年代中ごろに、マサチューセッツ工科大学 (MIT)、ベル研究所、General Electric (GE) がGEのメインフレームコンピュータ向けのタイムシェアリングオペレーティングシステム(Multics)を共同開発していたことにさかのぼると言われています。Multics の開発の反省からUNIXという名前のOSがベル研究所のケン・トンプソンらのチームによってつくられます。AT&Tは、独占禁止法によってコンピュータ業界への参入を禁じられていたため、UNIXのソースコードは無償で公開されることになり、大学や研究機関に爆発的に広まった。1970年代末から1980年代初頭にかけて、Unixは学術分野だけではなく産業分野でも使われるようになっていき、 1980年代の末には、AT&T Unixシステムズ・ラボラトリーズとサン・マイクロシステムズが共同でUNIX System V を開発しました。これが、その後の多くの商用Unixの母体となった OS です。

 一方で、1983年にリチャード・ストールマンは、フリーソフトウェアのみによって「完全なUnix互換ソフトウェアシステム」を作り上げることをプロジェクトのゴールとするGNUプロジェクトを開始します。1985年にはストールマンは、フリーソフトウェア財団を立ち上げ、1989年には GNU 一般公衆利用許諾書 (GNU GPL) を提案します。1990年代初頭までに、オペレーティングシステムに必要な多くのプログラム(ライブラリ、コンパイラ、テキストエディタ、Unixシェル、ウインドウシステム)が完成した。

 1991年には、当時フィンランドのヘルシンキ大学の学生であったリーナス・トーバルズはオペレーティングシステムの開発に興味を持ち、ファイルシステムなどのUnix互換APIを実装し、Unixのシェルを改変したりして、独自のOSカーネルの開発を開始した。最終的にこれが現在のLinuxカーネルになっていきます。Linux OS は、フリーで利用可能なGNUプロジェクトのコードを積極的に取り込んでいくことを通して、急速に発展し、広範囲な領域で採用されていきます。

 1990年代には、BSD(Berkeley Software Distribution)やLinuxといったUnix系OSが、コンピュータ・ネットワークを通じて世界中の開発者の協力を得て開発され、人気を得ることになった。2000年には、AppleがUnixに基づいてDarwinというコアに基づくMac OS Xを開発した。

 同時期に、IBM、ヒューレット・パッカード、シリコングラフィックス、インテルなどの企業にフルタイムで雇用されたプログラマも Linux の開発に加わるようになります。2007年、リナックスを一層発展させるためにLinux Foundationが発足します。Linux カーネルはフリーソフトウェアで、 GNU GPL というライセンス制を採用しています。このライセンスの下では、ユーザーはプログラムの複製、改変したプログラムの配布を自由することができます。

 Linuxカーネルは、プロセス管理、メモリ管理、デバイス管理、ネットワーク、ファイルシステムの提供などを行なっていいる命令群から構成さています。デバイスドライバは、システムの動作中にモジュールとしてロードするか、カーネルに直接組み込むことができる。

 Linux カーネルとは別のシェルと呼ばれる領域がカーネルとユーザーの間のインターフェースになり、システムの高水準な機能のほとんどはこのシェルよってユーザーに提供されている。GNUが提供するソフトウェア群は、Linuxシステムの重要なシェルの部分です。標準 C 言語のライブラリの最も一般的な実装である GNU Cライブラリは、Unixシェル、Unixツールの多くを提供しており、オペレーティングシステムの基本的なタスクを担います。

 ここでは、Linux の Debian パッケージである Ubuntu が OS としてインストールされているとします。ログインするためには、Ubuntu のログイン画面でパスワードを入力する必要があります。パスワードを入力すると、Ubuntu のデスクトップ画面が表示されます。

 Linux カーネルの操作は Windows や Mac のようにマウスで操作するGUI(グラフィカルユーザインタフェース)方式ではなく、キーボードからコマンドを打って操作するCUI(キャラクタユーザインタフェース)方式になります。Ubuntu のデスクトップ画面で、ターミナルのウインドウを起動させて、このターミナルのプロンプトの後にコマンドを入力します。

 デスクトップ画面で、「アクティビティ」をクリックして、検索で「terminal」と入力すると、「端末」というウインドウが表示されます。これをクリックするとターミナル画面が出ます。または、次のようにもできます。デスクトップ画面の左メニューバーの最も下にある「アプリケーションを表示する」という箇所をクリックすると、使用可能なソフトが表示されます。その中に、「ユーティリティ」というウインドウがあり、この中に「端末」があります。これをメニューバーに移動して常駐させることができます。

例えば、ターミナルのプロンプト画面で「$」記号の後に


koichi@MacBookAir:~$ sudo apt install gedit nano

 と入力すると、gedit と nano というテキストエディタがインストールされます。「sudo」はルート権限でインストールする時に使用しますので、認証のためにパスワードが要求されます。「 sudo apt install パッケージ名」はUbuntu で新しくソフトをインストールするときの定石です。

 上で、「$」記号の後ろに「 sudo apt install ...」と入力しましたが、これがコマンドと言われる命令です。「koichi@MacBookAir:~$」はログインシェルが表示しているプロンプトと言われ、入力を要求しています。つまり、Linux シェルへの操作命令がコマンドで実行されています。このログインシェルはユーザーがログインしたとき自動的に起動されます。ちなみに、macOSでも同じようにログインシェルのメカニズムが作動します。

 上の例のように、端末画面にキーボードからコマンドを打ち込んでシェルを操作する方法を対話型方式と言います。これに対比して、一連のコマンド群を記述したファイルを作成しておいて、このファイルをシェルに指定することでこれらの一連のコマンド群を実行することもできます。コマンド群を記述したファイルをシェルスクリプトと言います。

 ログインシェルには複数のタイプのものがあります。bash と zsh という2種類が代表的なシェルになります。デフォルトでは、 bash 形式になっています。mac OS でも bash シェルがデフォルトで使用されています。シェルを切り替えて使用することもできますが、通常の使用では、bash シェルのままで十分でしょう。

 ログインすると、/etc/profile が読み込まれ、次に、~/.bash_profile あるいは /etc/bash.bashrc が読み込まれます。最終的に、シェルスクリプト ~/.bashrc が読み込まれてログインシェルの設定が実行されます。通常は、各ユーザーはこの~/.bashrc ファイルに設定を記述します。

 最後に、コマンドラインの使用法について簡単に説明します。覚えておくと便利なショートカットキーを列挙します。

ショートカットキー  説明
↑ ↓  コマンド履歴を順に表示
tabキー  フォルダやファイル名の予測変換
Ctr(control) + a  カーソルを先頭に
Ctr + e  カーソルを終端に
Ctr + b  カーソルを一文字戻す
Ctr + f カーソルを一文字進める
Ctr + d カーソル位置の文字を消す
Ctr + h カーソル位置の左側の文字を消す
Ctr + w カーソル位置の左側の単語を消す
Ctr + r コマンド履歴の中で検索する

 mac OS のターミナルでも、上記のショートカットキーは使用できます。


Linux におけるディレクトリ構造


 Linux ディレクトリはルートディレクトリを頂点とする以下のような階層構造になっています。

/ (root)
│  ・頂点のディレクトリであるルートディレクトリ

│──bin
│    ・バイナリ(Binary Folder)の略
│    ・ユーザーが使用する実行ファイルが入っているディレクトリ
│    ・Linux 動作に最低限必要なcat、chmod、chown、cp、date、echo、ln、ls、mkdirなどのコマンド

│──boot
|    ・システム起動に必要なファイルが入っているディレクトリ

|──dev
|    ・デバイス(device)の略
|    ・ハードウェア機器を表すファイルが保存されるディレクトリ
|    ・ キーボード、マウス、プリンターなどのデバイスをファイル

|──etc
|    ・Linux設定のファイルが保存されているディレクトリ

|──home
|  |  ・ユーザーのホームディレクトリ
|  |  ・MacではUsers
|  |──/koichi  ユーザー個人(koichi)に割り当てられたホームディレクトリ
|  |    |
|  |    |──/catkin_ws
|  |
|  |──/guest


|──usr
|  |  ・各種applicationのファイルやドキュメントを保存するディレクトリ
|  |──/bin
|  |──/local


|──lib
|    ・カーネルモジュールファイルとプログラムに必要な各種ライブラリファイルを保存しているディレクトリ

|──sbin
|    ・ システム管理者が使用するシステム管理者用コマンドを保存しているディレクトリ

|──var
|    ・ヴァリアブル(Variable)の略
|    ・システム運用中に生成されて削除されるデータを保存するためのディレクトリ
|    ・ログファイル、データベースキャッシングファイルなど

|──media
|    ・リムーバブルメディアのマウントポイント
|    ・/mntディレクトリと区別必要

|──mnt
     ・マウントポイント
     ・Macの場合Volumes

 ログインすると、ユーザー個人(koichi)に割り当てられたホームディレクトリがカレントディレクトリになります。このディレクトリにあるフォルダを表示させたいときは、以下のように ls コマンド使用します。


koichi@MacBookAir:~$ ls

 ディレクトリを移動するときは、cd コマンドを使用します。


koichi@MacBookAir:~$ cd 行きたいディレクトリ名


よく使うLinuxコマンド一覧


 よく使うLinuxコマンド一覧を以下に示します。


コマンド 説明使用例
 cd ディレクトリ(フォルダ)移動 :~$ cd 移動したいディレクトリ名
 ls ディレクトリの内容をリスト形式で表示する 中身をみたいディレクトリに移動して、:~$ ls (オプション)
 よく使うオプション:
-a:すべて表示
-l:ファイル詳細の表示
-1:リストを縦にソート
-r:逆順で表示
-t:更新時間順にソート
-m:ファイル名をカンマ区切り表示
-h:単位を読みやすい形式で表示
 mv ファイルを移動 :~$ mv 移動元ファイル名 移動先ファイル名
 pwd   現在いるディレクトリ位置を表示する :~$ pwd
 mkdir  ディレクトリ(フォルダ)を作成する :~$ mkdir (オプション) ディレクトリ名
 よく使うオプション:
-m:作成するディレクトリのパーミッションを設定
-p:必要に応じて親ディレクトリも作成
-v:経過表示
 rmdir 空のディレクトリを削除する :~$ rmdir ディレクトリ名
 rm ファイルやディレクトリを削除する :~$rm (オプション) ファイル名またはディレクトリ名
 よく使うオプション
-f:存在しないファイルを無視
-i: 削除前に確認
-v:経過を表示
-d:unlinkでディレクトリを削除
-r:ディレクトリを再帰的に削除
 cp ファイルやディレクトリをコピーする :~$ cp (オプション) 移動元ファイル名 移動先ファイル名
よく使うオプション:
-i:上書前に確認
-v:実行内容の表示
-n:存在するファイルの上書き制御
-f:強制的に上書き
-b:上書きファイルのバックアップ生成
-S 接尾辞:バックアップファイル生成時、ファイル名末尾に付ける文字
 touch ファイルを作成する :~$ touch ファイル名
 vim (vi) Linux デフォルトのVim エディタを起動してファイルを作成する :~$ vim ファイル名
 find ファイルの検索をする :~$ find -name ファイル名
 cat ファイルの内容を表示する :~$ cat ファイル名
 chmod  ファイルやフォルダのアクセス権限を変更する :~$ chmod (オプション) ファイル名
 オプション
+:追加
-:削除
=:設定
r:読み込み
w:書き込み
x:実行
 grep 指定した文字列がテキスト内に存在した場合その行を抽出する :~$ grep 指定した文字列 ファイル名
 echo 文字列を表示する :~$ echo Hello World
 tar ファイルの圧縮及び展開 解凍の例:~$ tar -xvf アーカイブ名.tar
 オプション:
-c:新しいtarファイルを作る (create)
-v:圧縮・解凍状況を表示
-f:圧縮ファイル名指定 (filename)
-x:解凍 (extract)
-z:gz
-j:bz2
-J:xz
 ln ファイルにリンクを設定す :~$ ln リンク元ファイル名 リンク先ファイル名
 chown ファイルのオーナーを変更する :~$chown 変更したいユーザー名 変更したいファイル名
 cat テキストファイルの内容を表示 :~$ cat ファイル名
 tail 最終行から指定された行数分表示 :~$ tail ファイル名
 man コマンドのマニュアル、オプションなどを表示する :~$ man コマンド名

 上記の表にあるように、Linuxのコマンドはコマンドごとにオプションが用意されています。たとえば、「ls」コマンドだったらファイルを一覧で表示させたり、更新されたファイル順に表示させたいときもあるでしょう。そんなときは「man」コマンドを使用すると、対象のコマンドの使い方や使用できるオプションを調べることができます。manコマンドは以下のように記述します。


koichi@MacBookAir:~$ man ls

 vim (または vi) コマンドは Linux のデフォルトのテキストエディタを起動するコマンドで、指定したファイルがあればそのファイルが Vim エディタで開かれ、指定したファイルがなければ新規作成します。 新しくファイルを作成しつつ、そのファイルに何か書き込みたい際は、touch コマンドより vim コマンドの方が便利です。ただし、vim エディタは、慣れてしまえば問題ないのですが、初心者には若干複雑なテキストエディタです。コマンド gedit を用いての編集の方がシンプルです。Vim エディターの使用に関する簡単な説明はラクスブログのvi コマンド【使い方まとめ】が参考になるでしょう。

 ディレクトリを指定するパスの表現には、絶対パスと相対パスがあります。ルートディレクトリを起点としてファイルやディレクトリのパスを表現することを絶対パスと言います。例えば、


koichi@MacBookAir:~$ cd /usr/local/bin
koichi@MacBookAir:/usr/local/bin$ pwd

/usr/local/bin

のようにパスの指定をします。カレントディレクトリをディレクトリ /usr/local/bin/ に移動できます。カレントディレクトリを起点として表現されたパスを相対パスと言います。ログインすると、カレントディレクトリは/home/koichi にありますので、ディレクトリ catkin_ws に移動したい時は


koichi@MacBookAir:~$ cd ./catkin_ws
koichi@MacBookAir:catkin_ws$ ls

 と相対パスを使用します。なお、


koichi@MacBookAir:~$ ls .
koichi@MacBookAir:~$ cd ..

 のようなパス指定もできます。「 . 」はカレントディレクトリを指定します。「 .. 」はカレントディレクトリから見た親(上の階層)ディレクトリへのパスを指定します。また、


koichi@MacBookAir:/usr/local/bin$ cd
koichi@MacBookAir:~$

 とパス指定なしにすると、個人ユーザーのホームディレクトリに戻ります。

 ネットワーク関連を設定したい時に使用するコマンドとして、
・route ルーティングの表示や設定を行う
・ftp ファイルをFTPで転送する
・ssh sshでログインする
などがあります。

 当然のことながら、上述したコマンドはすべて mac OS でも使用できます。


bash の設定とシェルスクリプトの記述


 すでに上の箇所で説明したように、通常は、ユーザーはログインシェルでの設定を ~/.bashrc ファイルに記述します。ここでは、bash ファイルの設定の仕方について簡単に説明します。Python を使用している多くの人は、Anaconda 環境や pyenv 環境を構築します。このような環境を構築するに当たっては、bashrc ファイルにパスの設定を追加する必要が出てきます。mac OS では bash_profile にパスの設定を追加します。

 周知のように、Anaconda を用いて Python 環境を構築するときは、以下のようなパス設定の追加がAnaconda のインストール時に自動的になされます。


# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/Users/koichi/anaconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/Users/koichi/anaconda3/etc/profile.d/conda.sh" ]; then
        . "/Users/koichi/anaconda3/etc/profile.d/conda.sh"
    else
        export PATH="/Users/koichi/anaconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

 これは mac OS のものですが、Linux でも /Users/ が /home/ になるだけで、同じ設定が行われます。また、 pyenv を用いて Python の仮想環境を構築するときは、以下のような記述を bashrc に追加する必要があります。


export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"

 この追加の記述のすべてが理解できるように説明することはしませんが、大枠で理解できるように説明します。

「export」コマンドは環境変数を設定するために使用するものです。環境変数とは、外部コマンドからも値を参照することできるようにしたシェル変数を環境変数と言います。シェル変数とはシェルスクリプトで使用される変数のことで、


testv="test variable"

のように定義される変数 testv のことを指します。シェル変数を使用するときは、記号「$」を前につけて利用します。


$ echo $testv

test variable

 PATH は特別なシェル変数の一つで、コマンド検索パスの環境変数として定義されたものです。PATH は、コマンドを実行するときに(このコマンドの)実行ファイルがインストールされているディレクトリを指定します。以下のように使用すると、パスの設定が表示できます。


$ echo $PATH 

/usr/local/bin:/usr/bin:/usr/local/sbin:/bin

「export PYENV_ROOT="$HOME/.pyenv"」は PYENV_ROOT をシェル変数とし、その値を「$HOME/.pyenv」とする環境変数に定義するものです。「export PATH="$PYENV_ROOT/bin:$PATH"」はコマンド検索パス設定の中に「$PYENV_ROOT/bin」を新しく追加することを意味します。つまり、/home/koichi/.pyenv/bin がコマンド検索パス設定に追加されます。 環境変数 HOME は,ログインユーザのホームディレクトリを示します。なお、以下のコマンドを入力すると設定されている環境変数のリストが表示できます。


$ printenv

 「 eval "文字列"」コマンドは、指定した文字列を評価した後、現在のシェルに実行させます。なので、「 pyenv init - 」が実行されます。主にシェルスクリプトや環境設定用のファイルで使用されます。

  bashrc ファイルを修正したときは、bashrc ファイルを再度読み込んで実行する必要があります。あるいは、再度ログインすることが必要です。ログインシェルのターミナルで、


$ source ~/.bashrc     

と入力すると、bashrc ファイルが実行されます。「source」はシェルスクリプトを読み込んで実行するコマンドです。なお、「$ . ~/.bashrc」と入力することと同じです。

 ここで、シェルスクリプトの記述の様式を簡単に説明します。mac OS も同じです。以下の例は最も簡単なbashシェルスクリプトです。


#!/usr/bin/bash

echo hello world

 1行目の「 #! 」で始まる行はsheban(シバン)と言われるもので、「#!/usr/bin/bash」はbash シェルで実行することを宣言しています。必要不可欠です。このスクリプトをテキストエディタで作成して、ファイル名「 shellscript.sh 」として保存します。この拡張子「 .sh 」は bash スクリプて通常使用されるものです。このシェルスクリプトを実行するときは、


$ source ./shellscript.sh     

 と実行します。すると、ターミナル画面に「 hello world」と表示されます。シェルスクリプトはコマンド群のプログラムなので、プログラム言語で書かれたファイルと同じように実行できます。中身はコマンド群で記述されたファイルですので、記述様式は少し異なります。シェルスクリプトでは条件分岐の if 文、及び、繰り返し処理の for 文が使用できます。if 文は以下の構造を取ります。


if [ 条件文 ];then
    処理文
fi

 例を挙げましょう。


#!/usr/bin/bash
x1=10
x2=20

# 変数の大小比較
if [ $x1 -lt $x2 ];then
	echo 'x2のほうが大きい'
fi

 条件の中で、「 -lt 」は算術記号「 < 」と同じ意味です。「 [ 」及び「 ] 」と条件文の間にスペースを入れないとコマンドエラーが出ます。シェル変数(x1、x2)の定義で「 = 」の前後にスペースを入れるとコマンドとみなされます。なお、記号「 # 」はそれ以降の文がコメントと見做されます(先頭行を除いて)。

 シェルスクリプトの書き方についての説明はインターネット上に多数ありますが、sejuku.net のLinux 入門が易しいです。より詳細な説明は書籍で、『新しい Linux の教科書』(三宅英明、大角祐介共著、SB Creative )が参考になります。

*** 続く ***


Docker でLinux 環境設定

Ubuntu での Python 環境構築

このページの先頭に戻る

トップページに戻る