赤は斜め

A kawana name

初心者向け:シェルコマンドは英語と同じ

教員「りなっくすをやります」

この言葉を聞いたとき、Windows以外になじみがない多くの人々はうわあ、と思うはずです。Linuxといえばあの黒い画面に向かってキーボードをカタカタしながら何やら呪文を打ち込む黒魔術であって、テキスト丸写しすると動くけれどやっていることの意味はよく分からないものの代表格だからでしょう。そりゃそうだ。だって初めてなのにそこ説明してくれないんだもん。

ということで、Linuxの呪文的なアレの初歩の初歩が知りたい!という高校生以上向けの理解の入り口を書き置きしておきます。なぜ高校生以上かというと、アレは英語だからです。

まず例の呪文、アレのことを shell (シェル) と言います。shellは人間とコンピュータの意思疎通を仲立ちするプログラムで、黒い画面上ではシェルを通して人間とコンピュータは情報を伝え合っています。要は通訳です。

では、あなたは通訳に翻訳を頼むとき何をするでしょうか。もちろん、言葉を話すでしょう。同じようにシェルを作った人も言葉を翻訳してもらえたら楽だなーと思ったはずです。なのでシェルコマンドはまるで話しかけるかのように設計されました。英語で。

 Ubuntu:wei/soiya$ cd ../

例を挙げましょう。これはカレントディレクトリを移動するシェルコマンドです。ここで、: の左側はコンピュータの名前やアカウントの名前などのパラメータを表示しているだけで、コマンドの文法には含まれていません。重要なのは : の右からです。

wei/soiya は自分が今いる位置を示しています。英語ではgoとcomeの使い分けが話し手の意識のある位置からの相対的関係に依るように、自分がどこを現在地として思考しているかを示すことが重要です。英語であるシェルスクリプトも同様で、ここで wei/soiya は、ホームディレクトリにあるweiというディレクトリの中の、soiyaというディレクトリを現在地として考えていることを明示しています。

そして、メインである $ cd ../ の部分です。ここで $ は主語を示しています。主語の内容はいまログインしているユーザー、つまり自分、I です。普段は$しか見ることがないでしょうが、管理者権限を得て主語が、このマシンの管理者 になると#になります。
次に、 cd は述語動詞の働きをしています。cd は change directory の略なので中身は目的語まで含む2語ですが、細かいことは関係ありません。略して一語になった以上、一語の動詞です。
../ は動詞の目的語を表します。ここではcd の目的語で、カレントディレクトリの移動先を指定しています。

ここまでくると理解してもらえたと思います。 $ cd ../ とは、英語における基本文型のひとつ、SVOの文であるということです。次の例を見てみましょう。

 Ubuntu:wei$ cp -r ./soiya ../

ここでcpは○を△へコピーする、というコマンドで、-rはコピーするものがディレクトリだよ!と教えてあげているオプションです。英語でも動詞haveには持つ、食べるなど様々な意味があるのと同様に、同じコマンドでも複数の用途がある場合、コンピュータに明示的にどの意味かを教えてあげる必要があります。動詞に含まれると考えていいでしょう。

すると、 $ cp -r ./soiya ../ は英語で I copy ./soiya ../. というSVOOの文であることがわかります。

同じようにSVやSVOCのコマンドも存在しますが基本は変わりません。「主語+述語(+目的語や補語)」を、英文と同じようにスペースで区切って打ち込んでいるだけです。英語話者が、自分たちに使いやすいように作ったのだから当然といえば当然でしょう。

ここまでで「入試で英語は勉強したけれどもりなっくすはからっきし...」という人も「なんだたいしたことないじゃーん」と思ってもらえたと思います。初めて見るコマンドでも雰囲気で、あのファイルが目的語だからあいつになんかしてるんだな〜ということを察してもらえると思います。しかしながら、勉強を進めていくと大量の例外や繰り返し等コンピュータ特有の構文に出会うことになり、この考え方だけではどうしようもない部分が出てきます。でもそこに達する頃には、シェルへの心理的な壁はきっとなくなっているでしょう。そうなってくれれば本稿の目的は達成です。所詮はアメリカ人が自分に使いやすいように作ったコトバ、そう思って気軽に楽しいShell Lifeを送ってもらいたいです。