シェルの紹介
最終更新日:2024-11-22 | ページの編集
概要
質問
- コマンドシェルとは何で、なぜそれを使うべきなのか?
目的
- シェルがキーボード、画面、オペレーティングシステム、ユーザーのプログラムにどのように関連しているかを説明する。
- グラフィカルインターフェースではなくコマンドラインインターフェースを使用すべき状況とその理由を説明する。
背景
人間とコンピュータは、キーボードとマウス、タッチスクリーンインターフェース、または音声認識システムなど、さまざまな方法でやり取りします。 個人用コンピュータとやり取りする最も一般的な方法は、グラフィカルユーザーインターフェース(GUI)と呼ばれています。 GUIでは、マウスをクリックしてメニュー操作を行うことで指示を出します。
GUIの視覚的な助けは学習を直感的にしますが、この方法では指示を拡張するのが非常に困難です。 次のようなタスクを想像してください: 文献検索のために、1000個の異なるディレクトリ内の1000個のテキストファイルの3行目をコピーして、1つのファイルに貼り付ける必要がある場合です。 GUIを使用すると、何時間もクリックを続けるだけでなく、反復作業の過程でエラーを犯す可能性もあります。 ここで役立つのがUnixシェルです。 Unixシェルは、コマンドラインインターフェース(CLI)であると同時にスクリプト言語でもあり、こうした反復作業を自動かつ迅速に行うことができます。 適切なコマンドを使用すれば、シェルは必要に応じてタスクを何度でも繰り返すことが可能です。 シェルを使用すれば、この文献検索の例のタスクは数秒で完了します。
シェル
シェルは、ユーザーがコマンドを入力できるプログラムです。 シェルを使うことで、気候モデリングソフトウェアのような複雑なプログラムを呼び出したり、 1行のコードで空のディレクトリを作成する簡単なコマンドを実行することができます。 最も一般的なUnixシェルはBash(Bourne Again Shellの略で、Stephen Bourneによって作成されたシェルに由来します)です。 Bashは、ほとんどの最新のUnix実装やWindows用のUnixライクツールパッケージのデフォルトシェルです。 「Git Bash」は、WindowsユーザーがGitと対話する際にBashライクなインターフェースを使用できるようにするソフトウェアです。
シェルの使用は、ある程度の努力と学習時間が必要です。 GUIが選択肢を提示するのに対し、CLIでは選択肢が自動的に提示されることはありません。 そのため、新しい言語を学ぶ際の語彙のように、いくつかのコマンドを覚える必要があります。 しかし、話し言葉とは異なり、少数の「単語」(つまりコマンド)を覚えるだけで非常に多くのことができるようになります。 今日、その基本的なコマンドについて学びます。
シェルの文法を使用すれば、既存のツールを組み合わせて強力なパイプラインを作成したり、大量のデータを自動的に処理したりすることができます。 コマンドのシーケンスをスクリプトに書き込むことで、ワークフローの再現性を向上させることができます。
さらに、コマンドラインはリモートマシンやスーパーコンピュータと対話する最も簡単な方法であることがよくあります。 シェルの習熟は、高性能コンピューティングシステムを含むさまざまな専門ツールやリソースを操作するためにほぼ必須です。 クラスタやクラウドコンピューティングシステムが科学データ処理でますます普及する中、 シェルを操作するスキルはますます必要とされています。 ここで学ぶコマンドラインスキルを基に、さまざまな科学的課題や計算上の課題に取り組むことができます。
さあ、始めましょう。
シェルを最初に開いたとき、プロンプトが表示されます。 これは、シェルが入力を待機していることを示します。
シェルは通常、プロンプトとして$
を使用しますが、異なる記号を使用することもあります。
このレッスンの例では、プロンプトを$
として表示します。
最も重要なことは、プロンプトを入力しないことです。
コマンドはプロンプトの後に続く部分のみを入力してください。
このルールは、このレッスンだけでなく、他のリソースのレッスンにも適用されます。
また、コマンドを入力した後は、Enterキーを押して実行する必要があります。
プロンプトの後には、テキストカーソルが表示されます。 これは、入力した文字が表示される位置を示すものです。 カーソルは通常、点滅するまたは固定されたブロックですが、アンダースコアやパイプであることもあります。 例えば、テキストエディタプログラムで見たことがあるかもしれません。
プロンプトは少し異なる場合があります。
特に、ほとんどの一般的なシェル環境では、デフォルトでユーザー名とホスト名が$
の前に表示されます。
例えば、次のようになります:
プロンプトにこれ以上の情報が含まれることもあります。
プロンプトが短い$
でなくても気にしないでください。
このレッスンは、この追加情報に依存しませんし、作業の妨げにもなりません。
注目すべき唯一の重要な項目は$
文字自体であり、その理由については後ほど説明します。
では、最初のコマンドls
を試してみましょう。
これは、現在のディレクトリの内容をリスト表示するコマンドです:
出力
Desktop Downloads Movies Pictures
Documents Library Music Public
ネルのパイプライン:典型的な問題
ネル・ネモは海洋生物学者で、 北太平洋環流を
6か月間調査して帰ってきたばかりです。 彼女は大太平洋ゴミベルトで
ゼラチン質の海洋生物を採取していました。
彼女は1520のサンプルを、300種類のタンパク質の相対量を測定するアッセイ装置にかけました。
彼女はこれら1520のファイルを、goostats.sh
という架空のプログラムで処理する必要があります。
さらに、この大作業に加えて、今月中に結果をまとめて、Aquatic Goo
Lettersの特集号に論文を掲載するための準備をする必要があります。
ネルがGUIを使って手作業でgoostats.sh
を実行すると、
1520回ファイルを選択して開かなければなりません。
goostats.sh
が各ファイルを処理するのに30秒かかる場合、
この作業にはネルの
注意を12時間以上必要とします。 シェルを使用すれば、ネルはこの単調な作業をコンピュータに任せ、自分は論文作成に集中することができます。
次のいくつかのレッスンでは、ネルがこれを達成する方法を探ります。
具体的には、コマンドシェルを使用してgoostats.sh
プログラムを実行し、
ファイル名の入力を繰り返すステップを自動化するためにループを使用する方法を説明します。
これにより、彼女が論文を書いている間、コンピュータが作業を行うことができます。
さらに、処理パイプラインを一度構築すれば、 データをさらに収集するたびに再利用することが可能になります。
彼女のタスクを達成するために、ネルは次のことを知る必要があります:
- ファイル/ディレクトリに移動する
- ファイル/ディレクトリを作成する
- ファイルの長さを確認する
- コマンドを連鎖させる
- ファイルのセットを取得する
- ファイルを繰り返し処理する
- パイプラインを含むシェルスクリプトを実行する
まとめ
- シェルは、主にコマンドを読み取り、他のプログラムを実行することを目的としたプログラムです。
- このレッスンでは、Unixの多くの実装でデフォルトシェルであるBashを使用します。
- Bashでは、コマンドラインプロンプトでコマンドを入力することでプログラムを実行できます。
- シェルの主な利点は、キー操作に対する高いアクション効率、反復作業の自動化のサポート、ネットワーク化されたマシンへのアクセス機能です。
- シェルを使用する際の大きな課題は、実行する必要があるコマンドとその実行方法を知ることです。