この記事を書いた人
machida

早いところKUROIGAMENの本来の目的であるデザインテロ活動をガシガシやって、そのレポートを書いていきたいところなのですが、その前に「黒い画面はデザイナーでも出来ちゃうんですよ」とか「黒い画面って楽しいよ」とか「プログラマーってこんな楽しいことやってるんですよ、俺らデザイナーもそれに入れてもらおうぜ」…といったいことも知らせておきたくて、まぁ、KUROIGAMENの予備軍育成というか、布教活動というか、まぁ、しばらくの間はその辺に注力していきたいと思います。

それにしても、今回記事を書くに当たって、Webデザイナーの為の「本当は怖くない」”黒い画面”入門 を読みながら復習したり、知らなかったことを覚えたり、なんとなく使ってたけどちゃんと理解していなかったり、という感じで記事を書いているのですが、これはいい勉強になりますね。デザイナーの方もどんどん勉強したことをブログを書くのをおすすめします(別に黒い画面に関することじゃなくても)。

「こんな記事書いたよ」とか、「黒い画面やってみたよ」とか、「あの記事間違ってるよ」とか、「この記事を読んでやってみるのがデザイナーにおすすめ」とかがあったら、お気軽にtwitterやブログのコメント欄やメール(machida@fjord.jp)でメッセージください。あと、仕事の依頼も。

Package Managerの導入

三回に渡って黒い画面での基礎的なコマンドを実際にやってみるのシリーズもやっと終わり、今回は新しいことに挑戦です。

今回はPackage Manager(パッケージマネージャー)の一つである「Homebrew」の導入に挑戦していきたいと思います。今回は Webデザイナーの為の「本当は怖くない」”黒い画面”入門 Part.06のエントリーを読みながら進めていきます。

さて、突然「Package Manager(パッケージマネージャー)」なんていう新しい言葉が出てきましたが、Webデザイナーの為の「本当は怖くない」”黒い画面”入門にその説明がありましたのでコピペをします。

“黒い画面”では以前紹介したlsやcurlなど、単機能のコマンドを組み合わせることで複雑な処理を実現します。一つのソフトが複数のソフトを利用するため、”ソフトAをアップデートしたらソフトB、ソフトCが動かなくなった”という状況が発生します。”ソフトB 5.0にはソフトA 2.0以上が必要”といった関係があるためです。これをソフトの依存関係と言います。

無数のソフトの依存関係を手動で管理するのは面倒過ぎるのでPackage Manager(パッケージマネージャー)と呼ばれる種類のソフトがよく使われます。Package Managerは”そのソフトにどのソフトのバージョン何以上が必要か”、”今インストールされているソフトは何か”といった情報を持っているため、必要に応じてソフトを勝手にダウンロードしてきてインストールしてくれます。便利過ぎますね。今回は最近Macで人気のあるPackage ManagerのHomebrewを使ってみます。(“黒い画面”のテーマ名”Homebrew”とたまたま同名ですね。)

ふむふむ、Package Managerとはソフトを管理するソフトのことのようですね。「Manager」とは「管理するもの」という意味だから、Package Managerの「パッケージ」とは「ソフト」を指しているようです。つまり、「ソフト」を管理するソフトという意味ですね。
それにしても「ソフト?」、「パッケージ?」、「プログラム?」、「コマンド?」…ちょっと用語について混乱してきました。一旦整理しておきたいと思います。

ここで一旦、用語のまとめ

コマンド
黒い画面を使ってコンピューターにやらせる命令のこと
プログラム
コンピュータが行うべき処理を順序立てて記述したもの。言い換えると「コンピュータがやる命令を受けた際に行うこと」。コマンドとプログラムはほとんど同じ意味。
ソフト
コンピュータを動作させる手順・命令をコンピュータが理解できる形式で記述したもの。つまり「コマンド」、「プログラム」、「ソフト」はほとんど同じ意味。
パッケージ
ソフトを動かすにはそのソフト以外の別のソフトを必要とすることが多い。そういったソフトを動かすためのソフト群をまとめたもの。

Package Managerとは何なのかというのは大事っぽいので、Package Managerとは何か、についてちょっと詳しくまとめておきたいと思います。

Package Managerとは?

  • ソフトとはその他のソフトから成り立っている。
  • そのため、「ソフトA」を動かすためには「ソフトB」と「ソフトC」が必要ということが起こる。
  • しかも、「ソフトA」を動かすためには「ソフトBのバージョン2.0」と「ソフトCのバージョン3.0」が必要というバージョンまで合わせる必要がある。
  • そこで登場するのが「Package Manager」。「Package Manager」に「ソフトA」が欲しい、と命令をすれば、「ソフトA」に必要な「ソフトBのバージョン2.0」と「ソフトCのバージョン3.0」も一緒に用意してくれる。そういう意味で「Package Manager」はソフトをパッケージとして扱う(例で言うと「ソフトA」は「ソフトA」と「ソフトBのバージョン2.0」と「ソフトCのバージョン3.0」のパッケージ)。
  • また、「ソフトA」を削除する場合は「ソフトA」を動かすために一緒に付いてきた「ソフトB」、「ソフトC」も削除してくれる。

…ということで、Package Managerとは名前の通りで「ソフトのパッケージの管理をしてくれるソフト」ですね。

Homebrewのインストール

説明だけでずいぶん長くなってしまいましたが、いよいよPackage Manager「Homebrew」のインストールに挑戦したいと思います。

では、Webデザイナーの為の「本当は怖くない」”黒い画面”入門に載ってるHomebrewのインストールの手順をコピペ。

Homebrewのインストール方法は斬新です。

$ sudo chown -R `whoami` /usr/local

まずは/usr/localディレクトリの所有者を自分のユーザーに変更します。

sudoは引数に渡したコマンドを管理者権限で実行するコマンドです。suはSuper Userの略で管理者の事です。Super Userで実行するからsudoです。sudoは起動に必要なファイルを消すとか致命的なコマンドでも実行できてしまうので注意して扱いましょう。

chownはCHange OwNerの略でファイルやディレクトリの所有者を変更するコマンドです。所有者のユーザー名と変更したいファイル・ディレクトリ名を指定します。-Rは指定したディレクトリより下全部を変更するというオプションです。

whoamiは自分のユーザー名を表示するコマンドです。Who am I?(私は誰?)なのでそのままですね。

`(バッククォート)は”黒い画面”に備わってる特殊な機能です。バッククォートで文字を囲うとその文字をコマンドとして実行して、出力結果に置き換えます。

$ ls `pwd`

つまり上記を実行すると、 バッククォートで囲われたpwdコマンドが実行され、その出力結果である/Users/komagataに置き換わるので最終的には

$ ls /Users/komagata

と入力したのと同じことになります。

最初のコマンドをもう一度見直してみましょう。

$ sudo chown -R `whoami` /usr/local

僕の環境で言えば、”/usr/local以下全てのディレクトリの所有者をkomagataに変更する”という動作になります。

これならばみなさんそれぞれの環境、例えばユーザー名がmachidaだったとしても同じ1行のコマンドで実行できて便利というわけです。”黒い画面”は単機能のコマンドを組み合わせて複雑な動作をするという意味がおわかりいただけたでしょうか。

これから/usr/local以下に色々入れるのでディレクトリの所有者を自分に変更しました。次でHomebrewを実際にインストールします。

$ ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"

上記はrubyコマンドとcurlコマンドを組み合わせています。上記のURLにはrubyプログラムでHomebrewのインストールプログラムが書かれています。それをcurlで取ってきてrubyで実行しているわけです。(curlの-f -s -S -Lオプションをそれぞれmanで調べてみましょう。)

これならば1行”黒い画面”にコピペすればインストールが完了するのでユーザーは簡単ですし、ソフトの提供側もインストールプログラムに変更があっても上記のファイルの中身を変えればユーザーに気付かれずに対応できます。

Homebrewをインストールするための最初のコマンド

では、実際にやってみたいと思います。まず最初のコマンドは、

$ sudo chown -R `whoami` /usr/local

おっと、いきなり知らないコマンドとオプションがバババッと登場ですね。なんか怖い感じになってきました。ここで登場したやつを一個一個見ていきたいと思います。

  • sudo
  • chown
  • -R
  • `whoami`

まずは「sudo」から。

sudo

  • 引数に渡したコマンドを管理者権限で実行するコマンド
  • super userの略

黒い画面で使うコマンドの中で、そのディレクトリの場所やファイルによっては、普通に使うことが出来ない場合があります。
例えば、「/usr」の中で「mkdir」をしようとしても出来ません。「/usr」自体が隠しフォルダになっているのですが、その中には大事なコマンドやらが入ってる場所なので、その中で好き勝手されるとコンピューター自体がおかしくなる可能性があるので出来ないようになっています。
こんな感じで特定のディレクトリ内、特定のフォルダ、特定のファイルに対してコマンドを実行できないものがあります。そういった、ディレクトリやファイルに対してコマンドを強引に実行してしまえるってのが「sudo」コマンドです。つまり、一時的に何でも出来る管理者権限を持ってコマンドを実行させるためのコマンドですね。俺が買ったMacの分際で許可とか何様のつもりだ、と思ってしまいそうですが、安全のためにそうなってるのです。

コマンドを実行させるためのコマンドなので、「sudo」に入力する変数にはコマンドを入れます。

$ sudo mkdir adult_pictures

…と、このように使います。

POINT!

今、「こんな感じで特定のディレクトリ内、特定のフォルダ、特定のファイルに対してコマンドを実行できないものがあります。」…という文章を書いていて気がついたのですが、「ディレクトリ」と「フォルダ」は同じ意味だけど、「ディレクトリ」は階層をさして、「フォルダ」は階層を持つファイルの入れ物って感じで使い分けるとすっきりする(僕だけだったらごめんなさい)。これは僕が日本人だからなのか、windowsを使ってた期間が長かったからなのか…。

chown

  • 引数に渡したコマンドを管理者権限で実行するコマンド
  • change ownerの略

次に出てきたのは「chown」ですね。チョ…ウン?中国の方かしら?と思ってしまいそうな名前のコマンドですが、change ownerの略だそうです。

ファイルやディレクトリの所有者を変更するコマンドで(名前のままですが)、このコマンドを実行できるのは、管理者(sudoで出てきたsuper userですね)か、その所有者だけになります。だれでも所有者を変更できたら所有者ってもの自体の意味もなくなってしまうから、当然といえば当然ですね。なので、「chown」にはいつも「sudo」がセットです。

「chown」「ユーザーまたはグループ」「ファイルまたはディレクトリ」と、書きます。

$ sudo chown machida adult_pictures

これで「adult_pictures」は「machida」のものになりました。

今回の場合、「chown」の後に「-R」というオプションが付いてますね。これは「ディレクトリの所有者を変更する際に、そのディレクトリだけでなく、中のファイルやサブディレクトリの所有者変更を適用する」というオプションです。

例であげた「adult_pictures」がフォルダだった場合、

$ sudo chown -R machida adult_pictures

とすれば、「adult_pictures」内のもの全てが「machida」のものになります。

whoami

  • Who am I?(私は誰?)…そのまま
  • 自分のユーザー名を表示するコマンド

「whoami」コマンドは自分のユーザー名表示するだけのコマンドです。こんなコマンドまであるんですね。実際やってみます。

「whoami」をやった結果20110106015425

うわ、地味に「machida」って表示されました。はい、確かに私はmachidaです。

` (バッククォート)

ただ、この「whoami」は普段見慣れない「 ` (バッククォート)」で囲われてますね。このバッククォートにも意味があるようです。

`(バッククォート)は”黒い画面”に備わってる特殊な機能です。バッククォートで文字を囲うとその文字をコマンドとして実行して、出力結果に置き換えます。

なるほど、先にそのコマンドをやっておいて、その結果を元のコマンドの引数として使う、という意味ですね。これを使えばコマンドの引数を動的することが出来る。

これは元のコマンド全体を見ながら確認した方がわかりやすそうです。

$ sudo chown -R `whoami` /usr/local

これを日本語にしてみると、管理者権限を持って「/usr/local」とその中身すべての所有者を「whoami」で出した結果のユーザーのものにする、というコマンドだったんですね。

「whoami」を使わない場合、[ この部分にuser名を入れる ] みたいな注意書きをしないといけないところをバッククォート付きの「whoami」を使うことによって、誰でも同じ一行で済んでしまう、という。「whoami」?ユーザー名なんか表示しなくてもわかってるよ、なんてなめてましたが、バッククォートと組み合わせた「`whoami`」ってすごく便利!

やっと、最初のコマンドの意味がわかったところで、早速、黒い画面にそのコマンドを打ってみたいと思います。

$ sudo chown -R `whoami` /usr/local

「sudo」を使ったのでパスワードを聞かれました。

Passwordを聞いてくる黒い画面Passwordを聞いてくる黒い画面

「sudo」のパスワードはMacを立ち上げるときや、アプリをインストールする際に聞かれるパスワードです。それを入力して「enter」キーをポチッ。

「sudo chown -R `whoami` /usr/local」をやった結果「sudo chown -R `whoami` /usr/local」をやった結果

何っ!「/usr/loca」なんていうファイルもディレクトリもないよ、って言ってきた!これはWebデザイナーの為の「本当は怖くない」”黒い画面”入門に書いていなかった展開。

ここは思い切って、「ないなら作ったらいいじゃない」と、ディレクトリを作成するコマンド「mkdir」を使って自分で作ることにしました。

$ mkdir /usr/local

「mkdir /usr/local」をやった結果「mkdir /usr/local」をやった結果

むむっ、今度は「permission denied」…アクセス拒否がされました、と出た。パーミッションということは権限関係のこと、「sudo」を付けたらOKなんじゃないの?

$ sudo mkdir /usr/local

「sudo mkdir /usr/local」をやった結果「sudo mkdir /usr/local」をやった結果

よし、出来たみたい。一応「ls」で確認。それにしてもこっちは苦労してるのにやっぱり黒い画面は何にも言ってくれないです。

$ ls ../../usr

「ls ../../usr」をやった結果20110106020607

おおっ!ちゃんと「usr」の中に「local」がいました。

では、改めて、

$ sudo chown -R `whoami` /usr/local

「sudo chown -R `whoami` /usr/local」をやった結果「sudo chown -R `whoami` /usr/local」をやった結果

はい、黒い画面は何にも言ってくれませんが出来たっぽいです。とりあえずこれで一つ目のコマンドは終了。

Homebrewをインストールするコマンド

いよいよ次のコマンドはHomebrewをインストールするコマンド。Homebrewのインストールもう目の前です。では、コマンドを見てみましょう。

$ ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"

また新しいコマンドが!あのイケてるってプログラマーの間で人気の言語でおなじみの「ruby」が出てきました。「ruby」はプログラム言語だけじゃなくて、「ruby」自身のコマンドもあったんですね。「ruby」コマンドについては「ls」や「cd」のような単純なコマンドではなさそうなので、ここで説明はしないことにします。一応、ちょこっと調べたところ、「ruby 」に「-e」というオプションを付けると、その後の引数に書かれたスクリプトを「ruby」で実行するそうです。おっと、「ruby」は飛ばしましたが「script」という言葉については気になるので調べたい思います。

script(スクリプト)とは?
機械語への変換作業を省略して簡単に実行できるようにした簡易プログラムのこと。

プログラムは人間が読める形(数字と一部英字を使い2進数や16進数などで表現されたもの)から機械が読める形に変換する作業を行ったものと、その変換作業を省略した人間が読める形のまま実行できるものがあるようです。で、scriptとは後者のプログラムを指すようで、まぁ、プログラムの種類の一つのことですね。また、scriptを書くための言語をスクリプト言語と言うそうです。
デザイナーがよく触る、Wordpressでお馴染みの「php」やMovable Typeでお馴染みの「Perl」、このサイトでも使われてるCMS、Lokkaの「Ruby」、Googleが使ってるってことで何だか良さそうな気がしてくる「Python」、いつもお世話になってる「JavaScript」もスクリプト言語です。

もしかしたら、「あいつのせいでJavaのコンパイルが通らない」なんていう言葉をプログラマーから聞いたり、プログラマーのtweetで見かけたりしたことがあるかもしれません。コンパイルとは、人間が読める形のものを機械が読める形に変換する作業のことで、人間が読める形でプログラミングをしていたときに、そのプログラマーの同僚が間違えを犯したまま帰宅してしまい、そのせいで機械語に変換できなくて同僚の犯したミスを見つけて解決するまで帰宅できないという状況下のプログラマーのぼやきですね。

さて、本題に戻って、次は「"$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"」の部分です。

「curl」はよそから取ってくるコマンドでしたね。「https://gist.github.com/raw/323731/install_homebrew.rb」を取ってきて、それを「ruby」で実行するっていうのは何となくわかりますね。でも、「curl」に付いてるオプションたち「-fsSL 」ってそれぞれどんなことをするオプションなんだろう?

curlの-f -s -S -Lオプションをそれぞれmanで調べてみましょう。

と、komagataさんも書いているので、ここは言われるままにmanで調べてみますか。

$ man curl

「man curl」をやった結果「man curl」をやった結果

はい、英語がバーっと出てきました。「man」で表示されるマニュアルは長いのでオプションの説明が出てくるまでカーソルの「↓」キーを押し続けます。

「↓」キーを押し続けてオプションが出現「↓」キーを押し続けてオプションが出現

では、-f -s -S -Lのオプションの説明を読んでみたいと思います。

-f/--fail

(HTTP) Fail silently (no output at all) on server errors. This is mostly done to better enable scripts etc to better deal with failed attempts. In normal cases when a HTTP server fails to deliver a document, it returns an HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and return error 22.

This method is not fail-safe and there are occasions where nonsuccessful response codes will slip through, especially when authentication is involved (response codes 401 and 407).

-s/--silent

Silent or quiet mode. Don't show progress meter or error messages. Makes Curl mute.

-S/--show-error

When used with -s it makes curl show an error message if it fails.

-L/--location

(HTTP/HTTPS) If the server reports that the requested page has moved to a different location (indicated with a Location: header and a 3XX response code), this option will make curl redo the request on the new place. If used together with -i/--include or -I/--head, headers from all requested pages will be shown. When authentication is used, curl only sends its credentials to the initial host. If a redirect takes curl to a different host, it won't be able to intercept the user+password. See also --location-trusted on how to change this. You can limit the amount of redirects to follow by using the --max-redirs option.

When curl follows a redirect and the request is not a plain GET (for example POST or PUT), it will do the following request with a GET if the HTTP response was 301, 302, or 303. If the response code was any other 3xx code, curl will re-send the following request using the same unmodified method.

おっ、ちょっとググッたらcURL - How To Use (マニュアルページ日本語訳)を発見!今回はここのを引用させていただきます。

-f/--fail

(HTTP) サーバエラーが生じたときに黙って(何も出力しないまま)終わらせます。これはスクリプトなどが失敗した試行をより扱いやすくするためによく利用されるものです。一般的に HTTP サーバは文書の配信ができない場合、その旨を記載した HTML 文書を返信してきます(多くの場合、その理由その他の情報も含まれます)。このオプションは、その出力を止めてエラー番号 22 を返すようにします。

この方式は確実性に欠けます。特に認証が絡んでいる場合、失敗した試行に対する応答コード(401 と 407)が無視されてしまうことがあります。

-s/--silent

沈黙モードにします。プログレスメータやエラーメッセージは表示されません。 curl の出力を止めます。

-S/--show-error

-s/--silent と伴用すると、失敗時にはエラーメッセージが表示されるようになります。

-L/--location

(HTTP/HTTPS)要求したページが別の場所に移動していた場合に(サーバからの Location: ヘッダ行と 3XX 応答コードで検知されます)、このオプションにより、新しい場所に対して要求を再試行するようになります。 -i/--include または -I/--head と伴用された場合、要求したページすべてのヘッダが示されます。認証を用いている場合、 curl はその信任状( credentials )のみを最初のホストに対し送信し、異なるホストにリダイレクトされても、ユーザ名+パスワードは傍受されません。このふるまいの変更については --location-trusted をご覧ください。リダイレクト追跡の回数は --max-redirs オプションで制限することができます。

リダイレクトを追跡する際にリクエストが単なる GET でない場合(例えば POST や PUT など)、 HTTP 応答コードが 301, 302, 303 のいずれかならば、リクエストは GET メソッドで再試行されます。応答コードが他の 3xx コードであったならば、前と全く同じメソッドでリクエストが再試行されます。

引用元:cURL - How To Use (マニュアルページ日本語訳)

日本語の方を読んでみたけど、ちょっと日本語でも難しい。とりあえずざっとまとめてみました。ざっと過ぎて「cURL」に詳しいプログラマーから怒られそうですが…。

  • 「-f」はサーバエラーで「cURL」が失敗したときにおかしくならないように何もしないまま終わらせるオプション。
  • 「-s」は沈黙モードというモードがあって、それにするオプション。沈黙モードにすると、プログレスメータやエラーメッセージが表示されない。まぁ、そのまま黙って「cURL」をやらせるオプションですね。
  • 「-S」は「-s」と併用すると、プログレスメータなどは表示せずに黙ってるけど、エラーメッセージだけは出させるというオプション。「-S」と「-s」って大文字と小文字の違いだけでわかりずらいのに、それを併用して使うなんて。
  • 「-L」は「cURL」で取ってくる先が引っ越していた場合、そのリダイレクト先で「cURL」をやるというコマンド。

やっとひと通りの「Homebrew」インストールのコマンドの確認が終わりました。一応まとめると、

$ ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"

「https://gist.github.com/raw/323731/install_homebrew.rb」というファイルを取ってくるが、もし、取ってくるときに失敗したら何もせずに終了し、プログレスメーターなどは表示せず、でもエラーが出たときはエラーメッセージだけは出し、取ってくる先のhttps://gist.github.com/raw/323731/install_homebrew.rbのURLが引越してた場合は、そのリダイレクト先から取ってくること。で、取ってきたらそれを「ruby」で実行しなさい。

というコマンドでした。

ちなみに、https://gist.github.com/raw/323731/install_homebrew.rbはどんなことをするscriptなのか、直接見に行けば確認できます。

では、いよいよ「Homebrew」のインストール。

$ ruby -e "$(curl -fsSL https://gist.github.com/raw/323731/install_homebrew.rb)"

を黒い画面に打ちます。

続けるなら「enter」キーを押して

続けるなら「enter」キーを押してって言ってきましたので、「enter」キーをポチッ!しばらくたったら「successful」の文字が。インストール成功!

「successful」

ちゃんと、「Instalation Successful !」なんて文字を出すなんて、「Homebrew」はなかなか気がきくやつだ。

これでHomebrewの導入は完了です。次回はHomebrewを使ってソフトをインストールするっていうのに挑戦したいと思います。

この記事を書いた人
machida

コマンドに挑戦の続き。

今回はWebデザイナーの為の「本当は怖くない」”黒い画面”入門のPart.07で紹介されているコマンドに挑戦していきますので、こちらも合わせて読んでください。

touch

  • 本来既にあるファイルに触って(touchして)最終更新日を更新するだけのコマンド
  • 空ファイルを作るのに使われる

黒い画面でファイルの作成に挑戦。「touch」コマンドを使うみたいです。「本来既にあるファイルに触って(touchして)最終更新日を更新するだけのコマンド」って一体どんなシチュエーションで役に立つんだろう?まだまだ黒い画面の世界についての謎は尽きないです。

まぁ、それは置いておいて挑戦。

$ touch foo

「touch」の後に入れる引数が作られるファイル名になりますので、うまくいけば今回は「foo」という名前のファイルが作られるはずです。

「touch foo」を打ったがノーリアクションの黒い画面「touch foo」を打ったがノーリアクションの黒い画面

はい、やってみましたが黒い画面は何にも言ってくれないパターンです。なので、「ls」で確認。

$ ls

「ls」で確認20110104100137

成功してました。「touch」クリア!

mkdir

  • “make directory”の略
  • フォルダを新規に作成するコマンド

さっきはファイルを作成するコマンドでしたが、次はフォルダを作るコマンド「mkdir」に挑戦です。

$ mkdir bar

「mkdir」の後に入れる引数が作られるフォルダ名になりますので、うまくいけば今回は「foo」という名前のフォルダが作られるはずです。ちなみに、以前も説明しましたが、「フォルダ」と「ディレクトリ」は同じ意味です。

「mkdir bar」を打ったがノーリアクションの黒い画面「mkdir bar」を打ったがノーリアクションの黒い画面

はい、例によって今回も黒い画面は何にも言ってくれません。

また今回も

$ ls

で、確認。

「ls」で確認「ls」で確認

無事出来てました。「mkdir」もクリア!

オプション「-p」で複数階層を持つディレクトリも一発で作れます。

mkdirはMaKe DIRectoryの略でディレクトリを作成します。-pオプションで深い階層を持つディレクトリも一気に作れるのが便利です。

$ mkdir -p foo/bar/buz

ターミナル — bash — 80×24

cp

  • copyの略
  • ファイルをコピーするコマンド

ファイル作成、フォルダ作成に続いて、次はファイルのコピーを行うコマンド、「cp」に挑戦。元記事をコピペします。

$ cp foo /tmp

cpはCoPyの略で、そのまんまですがファイルをコピーするコマンドです。上記ではfooファイルを/tmpディレクトリにコピーしています。

$ cp foo bar

ファイル名を指定すればその名前でコピーされます。fooの複製barが出来ました。

では、順に挑戦していきます。ますはこれ。

$ cp foo /tmp

先程「touch」コマンドで作った「foo」というファイルを「/tmp」というディレクトリに移動する、という意味ですね。

「foo /tmp」をやったが無反応な黒い画面「foo /tmp」をやったが無反応な黒い画面

「cp」をしても黒い画面は無反応なので、ちゃんとコピー出来ているかの確認をしたいと思います。
まずは「/tmp」フォルダをlsで表示してみて、それから「tmp」の中に移動して、ちゃんと「foo」が「tmp」の中にコピーされたかを「ls」で確認する、という作業をしてみます。

まずは「ls」で「tmp」を表示させる作業から。

「/tmp」は絶対パス「/」の直下にあります。現在の場所は「pwd」で確認すると、「/Users/machida(ユーザー名)」と表示され、「/」が二つあるので、二階層上に「tmp」があるということがわかります。

ということで、「tmp」があるに階層上へ移動。

$ cd ../../

「tmp」がいるか「ls」で確認してみます。

$ ls

「tmp」いました「tmp」いました

続いて「tmp」の中に入って、

$ cd tmp

「ls」で「foo」がコピーされていることを確認。

「foo」いました「foo」いました

ちゃんと「foo」が「tmp」の中にコピーされてました。「cp」もクリア!

「cp」はオプション「-r」を使うと、ディレクトリを丸ごとコピーも出来ます。

$ cp -r foo /tmp

-rオプションを付ければディレクトリを丸ごとコピーできます。

ターミナル — bash — 80×24

-rを付けないと”fooはディレクトリだからコピーできないよ”とエラーが出ています。親切ですね。

rm

  • removeの略
  • ファイルを削除するコマンド

さてさて、「ファイルを作成」、「フォルダを作成」、「ファイル・フォルダをコピー」とやってきましたが、次は「ファイル・フォルダの削除」のコマンド「rm」に挑戦です。削除をCUIで行うのは、間違って別のものを削除してしまったりしそうで怖いですね。では、「rm」の説明をコピペ。

$ rm foo

rmはReMoveの略でファイルを削除するコマンドです。略し過ぎですね。

$ mkdir -p foo/bar/buz
$ rm -r foo

-rオプションを付けるとディレクトリを丸ごと削除してくれます。危ないですね。sudoと組み合わせればどんな物も削除出来てしまうので注意してください。下記は絶対に実行してはいけません。

$ sudo rm -rf / # 絶対に実行してはいけない

「rm」コマンドを使って、「touch」で作ったファイル「foo」と、「mkdir」で作ったフォルダ「bar」、「cp」で「/tmp」の中にコピーしたファイル「foo」の削除に挑戦してみたいと思います。

まずは「foo」の削除から

「foo」の置いてある場所は「/Users/machida(ユーザー名)」なので、まずはそのディレクトリに移動。一応、「pwd」で現在地を確認して、「ls」でファイル「foo」があることを確認。そして「rm」コマンドを実行。

$ rm foo

ちゃんと削除されているかを「ls」で確認。

fooの削除成功fooの削除成功

ファイル「foo」の削除に成功。

続いて、フォルダ「bar」の削除に挑戦。

「bar」の置いてある場所も「/Users/machida(ユーザー名)」なので、まずはそのディレクトリに移動。一応、「pwd」で現在地を確認して、「ls」でファイル「bar」があることを確認。「bar」はフォルダだから今度は「-r」オプションを付けて「rm -r」コマンドを実行。

$ rm-r bar

barの削除成功20110104120752

フォルダ「bar」の削除に成功。

最後に「cp」で「/tmp」の中にコピーしたファイル「foo」の削除に挑戦。

「foo」の置いてある場所は「/tmp」なので、まずはそのディレクトリに移動。一応、「pwd」で現在地を確認して、「ls」でファイル「foo」があることを確認。そして「rm」コマンドを実行。

$ rm foo

fooの削除成功 fooの削除成功

ファイル「foo」の削除に成功。「rm」もクリア!

ちなみに、「rm」は引数をパスから書いて、

$ rm /tmp/foo

と、書くことも出来ます(こっちの方が楽でしたね)。

cat

  • concatenateの略
  • 本来は引数に渡した二つのファイルを繋げて表示するコマンド
  • でも、ファイルの中身を表示するコマンドとして使われている

いよいよ最後のコマンドになりました。最後のコマンドは「cat」。なかなか可愛らしいコマンドです。

「cat」の説明をコピペします。

$ cat /etc/hosts
##
# Host Database
#
# localhost is used to configure the loopback interface
# when the system is booting.  Do not change this entry.
##
127.0.0.1     localhost
255.255.255.255     broadcasthost
::1             localhost
fe80::1%lo0     localhost

catはconCATenateの略でファイルの中身を表示するコマンドです。concatenateは連結させるという意味で本来は引数に渡した二つのファイルを繋げて表示するコマンドですが、一つしかファイルを渡さなければ単に中身を表示するのでその用途の方で主に使われている悲しいコマンドです。lsやrmやcatのような基本的なコマンドは問答無用で覚えさせられることが多いので「cat?何で猫がファイルを表示するんだろう?」と思う人は多い(ハズ)です。

なるほど、「cat」の引数にファイルを入れればその中身が見れるようですね。では、やってみたいと思います。フォルダ「ユーザー」の中のフォルダ「machida(ユーザー名)」の中のフォルダ「サイト」の中にあるindex.htmlの中身を開く、というのに挑戦してみます。

$ cat /Users/machida/Sites/index.html

index.htmlの表示に成功index.htmlの表示に成功

index.htmlの表示に成功しました。「cat」もクリア!

コマンドに挑戦、今回でとりあえず終了です。今後もまた新しいコマンドに出会ったり、既にここで紹介したコマンドでも新しい変数を使って別な使い方をしたりなどがあると思いますが、今後はその都度紹介していきたいと思います。それにしてもキャプチャ撮ったり貼ったり疲れました。やっと次に進めます。

この記事を書いた人
machida

ついに正月休みも終わってしまいましたが、KUROIGAMENは続きます。仕事が立てこんで更新ペースが落ちてしまったらごめんなさい。今のところまだまだ書きたいことはたくさんあるので、早いところそれらを形にしてしまいたくて仕方ないです。

前回はWebデザイナーの為の「本当は怖くない」”黒い画面”入門の記事を実際に僕が読んでやってみるというレポートを書きましたが、今後もこういったレポートも書いていきたいと思っているので、もしデザイナー向けの記事を書きましたら、「おい、machida、これやってみてくれ!」と声をかけてください。

前回の続きでコマンドに挑戦。

今回もWebデザイナーの為の「本当は怖くない」”黒い画面”入門を読みながら進めていきますので、こちらも合わせて読んでください。

cd

  • Change Directoryの略
  • ディレクトリを移動するコマンド

今回の一発目は「cd」。Finderとダブルクリックでやってたディレクトの移動もCUIでは文字を入れなくちゃなんないのか…。ディレクトリの移動はかなり使うことになりそうです。

前回見たように$PATHに入ってるディレクトリはディレクトリ名を省略して実行できるんでしたね。また、コマンドには文字を渡して実行できることも学びました。

これについては、前回の「便利な仕組みPATHについて」で僕もやりました。今回やる、「cd」、「man」、「open」「cURL」もPATHに設定された「/bin」の中にあるので、「/bin/コマンド」の「/bin/」の部分は省略してOK。

$ cd /bin

cdはChange Directoryの略で引数に与えたディレクトリに現在のワーキングディレクトリを変更するコマンドです。要はディレクトリを移動するコマンドです。Finderでフォルダをダブルクリックするのと同じと思って貰えればOKです。

何も表示されないので本当に移動できたのかわかりませんね。pwdで確認してみましょう。

$ pwd
/bin

ターミナル — bash — 80×24

/binと表示されました。これまでは/Users/komagataだったのが/binに移動してます。ではここでlsしてみましょう

$ ls

ターミナル — bash — 80×24

沢山出ました。lsコマンドは何も文字を渡さない場合は現在いるディレクトリ(カレントワーキングディレクトリといいます)のファイル一覧を表示します。今は/binの中のファイル一覧が表示されているわけです。

では、僕もやってみます。

cd

「/bin」へ移動して、「ls」で中身を確認した後、「pwd」でちゃんと「/bin」にいるのか確認をして、それからちょっと背伸びをして、「/sbin」なんていうフォルダへ移動して、そこで「pwd」でちゃんと移動出来てるかを確認した後、「ls」で「/sbin」の中には何があるかを見ています。

「相対パス指定」についても確認しておきます。

“黒い画面”では”今いる場所(カレントワーキングディレクトリ)からみて一つ上のディレクトリ”や”今いる場所からみてfoo/barというディレクトリ”といった相対的な指定が出来ます。

..(ドット二つ)が一つ上のディレクトリ、.(ドット一つ)が今いるディレクトリ、foo/barは今いる場所から見てfoo/barというディレクトリ(先頭が/から始まるかどうかで決まります)という意味です。

これはhtmlやcssでも画像などを指定する時使うので分かると思います。../images/logo.pngとか書きますよね?

なるほど、「..(ドット二つ)」が一つ上のディレクトリを表すので、

$ cd ../

と打つと、一つ上の階層に移動出来るんですね。HTMLで画像を<img src="../../unko.png">って書くときの「../」と同じですね。

man

  • manualの略
  • そのコマンドのマニュアルが存在する場合はマニュアルを表示するコマンド

さて、次はmanです。まずはmanの説明のコピペ。

-hなどで表示されるヘルプは簡易的なものなので、もっと詳しく知りたい場合はmanコマンドを使いましょう。manはmanualの略でそのままの意味です。コマンド名を渡すと、そのコマンドのマニュアルが存在する場合はマニュアルを表示してくれます。

$ man ls

ターミナル — less — 80×24

おっと、最初の方に「-h」の話が出てきますね。これはオプションの一つで(オプションについての詳しい説明は今回の記事の一番最後に書いてあります)、「コマンド -h」と打つとそのコマンドの簡易的な使い方が表示されるそうです。「h」は「help」の「h」ですね。
では、試しに「ls」のhelpを見てみます。

$ ls -h

あれ、出ない!

ls -h

普通に「ls」を打ったときの結果が表示されてしまった。

じゃあこれはどうだ、と、今までやってきたコマンド「pwd -h」、「echo -h」、「cd -h」もやったけど出ませんでした。

lsやcd、echoなどは歴史の古いコマンドなのであまりこのガイドラインに従っていません。新しいコマンドを見つけた時はとりあえず-hか–helpで使い方を調べましょう。

Webデザイナーの為の「本当は怖くない」”黒い画面”入門 Part.04にも書いてありました。古いコマンドには「-h」が出ないものがあるようです。

最後に今やってる「man」に「-h」を。

$ man -h

出ました、出ました!

「man -h」の結果20110104015252

「man」は「-a」や「-c」や「-d」や「-D」などが使えるみたいです。

ついつい本題から外れて「-h」オプションに夢中になってしまいましたが、まぁ、こんな感じで「-h」で表示される使い方の説明は簡易的なもので、ちゃんとしたマニュアルを見たかったら「man」コマンドを使え、ということですね。

では、「-h」では見れなかった「cd」のマニュアルを見てみたいと思います。

$ man cd

「man cd」の結果20110104020953

なんかたくさん英語が出てきた。ガンガン黒い画面をやってきて、久しぶりに黒い画面の恐怖と再開した感じがします。

英語ですね・・・。日本語のmanもありますが、ググった方が早いかもしれません。manualは矢印キーでスクロールし、qキーで終了できます。SYNOPSISは概要、DESCRIPTIONは説明です。

はい、komagataさんもそう言ってます。ググった方が早そうでした。
ここはそそくさと「q」キーを押して終了します。

open

  • openはその名の通り開くコマンド

次のコマンドは「open」。なんかやる前からどんなものなのか予想が出来てしまいますね。

openはその名の通り開くコマンドです。

$ open スタックについて.pdf
$ open http://www.facebook.com
$ open .

普通のファイルはMacで関連付けられてるソフトで開きます。URLは標準のブラウザで開きます。最後のはよく使うんですが、今いるディレクトリをFinderで開きます。.(ドット)は今いるディレクトリの意味でしたよね。

おおっ、「普通のファイルはMacで関連付けられてるソフトで開きます。URLは標準のブラウザで開きます。」とは、黒い画面を使ってるのに、黒い画面からブラウザだとか別のアプリが立ち上がるとは面白い。

では、やってみます。

$ open http://fjord.jp/love/617.html

ブラウザが立ち上がって「http://fjord.jp/love/617.html」を表示してる!名前を見てナメてましたが、結構びっくりでした(ここはキャプチャはなしで)。

cURL

  • “Client for URLs”の略
  • ネットからファイルをダウンロードするコマンド

次のコマンドは「cURL」。なんか今までと違ってアルファベットの大文字と小文字が混じっているので高級な感じがします。おまけに概要を見ると「ネットからファイルをダウンロードするコマンド」とあるので、今までのGUIでのクリックやダブルクリックで済んでたことをCUIでわざわざ文字を入力してやるってのとは違ってわくわくしますね。

では、Webデザイナーの為の「本当は怖くない」”黒い画面”入門 Part.05の「cURL」の説明をコピペ。

ネットからファイルを簡単にダウンロードできるcurl(シーユーアールエル)というコマンドがあります。”Client for URLs”の略だそうです。

$ curl http://example.com
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>
<HEAD>

  <META http-equiv="Content-Type" content="text/html; charset=utf-8">
  <TITLE>Example Web Page</TITLE>
</HEAD>
<body>
<p>You have reached this web page by typing "example.com",
"example.net","example.org&quot
  or "example.edu" into your web browser.</p>

<p>These domain names are reserved for use in documentation and are not available
  for registration. See <a href="http://www.rfc-editor.org/rfc/rfc2606.txt">RFC
  2606</a>, Section 3.</p>
</BODY>
</HTML>

curlは引数にURLを指定するとネットから取ってきて表示してくれます。ブラウザからhttp://example.comにアクセスしてソースを表示したときと同じものが表示されているはずです。

$ curl http://example.com -o foo.html

ターミナル — bash — 80×24

curlは-oオプションにファイル名を渡すと内容をそのファイル名で保存してくれます。他のソフトをインストールするときも、curlでこうやってダウンロードしてくると楽ですね。

早速僕も挑戦してみます。

$ curl http://fjord.jp/love/617.html -o kuroigamen-5.html
  • 「curl」がcURLコマンドを実行
  • 「http://fjord.jp/love/617.html」は取ってきたいURL
  • 「-o」はファイル名を渡すと内容をそのファイル名で保存してくれるというcURLのオプション
  • 「kuroigamen-5.html」は「-o」に渡すファイル名

「curl http://fjord.jp/love/617.html -o kuroigamen-5.html」の結果curl http://fjord.jp/love/617.html -o kuroigamen-5.htmlの結果

はい、こんな画面が出ましたが、黒い画面は「出来たよ、おめでとう!」とか言ってくれないので自分で出来たかどうか確認してみます。

もうお馴染みの

$ ls

で確認。

「ls」で確認kuroigamen-5.html

「kuroigamen-5.html」いました!cURLも無事クリア。

引数とオプションについて詳しく

今回のコマンドの挑戦はここまでにして、Webデザイナーの為の「本当は怖くない」”黒い画面”入門 Part.04にある「引数とオプションについて詳しく」を確認したいと思います(ここにも大事な気配を感じました)。

引数はコマンドに渡す文字列です。コマンドの後にスペースを一個いれて文字を打ち込むんでした。

$ echo hello

実は引数は複数渡すことができます。スペースで区切って3つ引数を渡してみましょう

$ echo hello my friend
hello my friend

はたから見ると単語を4つ書いているだけに見えますが、実際はechoコマンドに3つの引数を渡しているだけだということが分かると思います。

引数をどう処理してくれるのかはコマンドによって違います。echoは引数をスペースでつなげて表示します。(そういう風にechoの作者が作っただけ)

オプションとは

lsは-aという引数を渡すとドットファイルも表示するんでした。lsはファイルやディレクトリのパスを渡すことでその一覧を見ることができます。

$ ls /bin

-aとパスの両方を渡すこともできます。

$ ls -a /bin

引数の中で特に-(ハイフン)から始まっているものをオプションといいます。引数やオプションにはこうあるべきというガイドラインはありますが、必ずそれに従わないといけないわけではありません。ガイドラインが出来る前の古いコマンドは従っていませんし、無視しているフリーダムなコマンドもあります。

オプションのガイドライン

-(ハイフン)のあとアルファベット一文字がオプションです。オプションは複数指定できます。

$ command -a -b -c foo

オプションに文字を渡すことが出来るものがあります。(ファイルを指定する-fオプションがあった場合)

$ command -f /tmp/foo

アルファベット一文字だと覚えにくいので、–(ハイフン二つ)から始まる同じ機能を持つオプションがある場合があります。ハイフン一つのものをショートネームオプション(short name option)、ハイフン二つのものをロングネームオプション(long name option)と呼びます。

$ command --name

ロングネームオプションに文字を渡すことが出来るものがあります。ロングネームオプションに文字を渡す場合=(イコール)を付けます。下記の2行は同じ動作をします。

$ command -f /tmp/foo
$ command --file=/tmp/foo

ショートネームオプションとロングネームオプションは混在させることができます。

$ command -a --file=/tmp/foo bar

-hもしくは–helpでそのコマンドの使い方が表示されます。Usageは利用法という意味です。

$ command --help
Usage: command [options] [arguments]
  -a    append mode
  -f    target file

-vもしくは–versionでそのコマンドのバージョン番号が表示されます。

$ command --version
command 1.2.3

lsやcd、echoなどは歴史の古いコマンドなのであまりこのガイドラインに従っていません。新しいコマンドを見つけた時はとりあえず-hか–helpで使い方を調べましょう。

ふむふむ。では、「引数」と「オプション」についてまとめてみたいと思います。

引数

  • コマンドの後にスペースを一個いれて文字を打ち込む
  • 引数をどう処理してくれるのかはコマンドによって違う
  • 引数は複数渡すことができる

個人的に追加しておきたいこともあったので、それも書いておきます。

  • 引数は「ひきすう」と読む
  • 引数は「数」と入っているが、文字を入れる

オプション

  • オプションには守られていないコマンドも中にはあるが、こうあるべきというガイドラインがある
  • 引数の中で特に「-(ハイフン)」から始まっているものをオプションという(「特に」と付いたのは、ガイドラインを守ってないコマンドもあるため)

オプションのガイドライン

  • 「-(ハイフン)」のあとアルファベット一文字がオプション
  • オプションに文字を渡すことが出来るものがある
  • 「--(ハイフン二つ)」から始まる同じ機能を持つオプションがある場合があり、それをロングネームオプション(long name option)と呼ぶ
  • 一方、ハイフン一つのものはショートネームオプション(short name option)と呼ぶ
  • ロングネームオプションはアルファベット一文字ではないのでわかりやすい(例えば、「-v → --version」、「-h → --help」など)。
  • ロングネームオプションにも文字を渡すことが出来るものがある
  • ロングネームオプションに文字を渡す場合=(イコール)を付ける
  • ショートネームオプションとロングネームオプションは混在させることができる
この記事を書いた人
machida

前回、前々回と黒い画面を使う為の準備をしてきましたが、今回は実際に黒い画面を使ってみたいと思います。

今回はkomagataさんが書いてくれた
Webデザイナーの為の「本当は怖くない」“黒い画面”入門
を並行して読みながら進めていきますので、ちょくちょくこちらの記事の引用が登場します。こちらも合わせて読んでください。

「ターミナル」を立ち上げる。

Finderの検索窓に「ターミナル」と打つと現れるまさに黒い画面のアイコン。こいつが黒い画面の正体です。これから頻繁にターミナルを使うことになりますので、ターミナルはDockに追加することをおすすめします。

ターミナル

ちなみに、ターミナルは「“アプリケーション” > “ユーティリティ”」にあります。ではさっそくダブルクリックでターミナルを立ち上げてみます。

はい、立ち上がりました。ターミナルが立ち上がりましたよ

ターミナルは立ち上がりましたが、黒い画面のアイコンに反して、実際現れたターミナルは白いです。

一応これも。20110103201116

ターミナルのカスタマイズ

はい、黒い画面が白いです。そこで黒い画面を黒くする為のカスタマイズ方法の説明。

  1. 「ターミナル > 環境設定」へ

    ターミナル > 環境設定

  2. 左下の「+」をクリックして新規の設定を作成。
    「テキスト」からフォントの色を設定、「ウインドウ」から背景、ウインドウのサイズを設定。

    ターミナルの設定

大きくて黒背景、緑文字のオリジナルの設定を作ってみました。

kuroigamenという名前を付けた20110103205623

黒い画面を使う前に用語を整理。

Webデザイナーの為の「本当は怖くない」“黒い画面”入門 Part.01に、僕の中で曖昧だった用語の解説が載ってたのでコピペしておきます。

コマンド?ディレクトリ?

プログラムを“コマンド”と言ったりしますが同じ意味です。またフォルダのことをディレクトリ(directory)と言う場合もあります。ディレクトリは名簿という意味です。(元々はディレクトリでしたが、Windows95からMicrosoftが取っ付き易いようにフォルダという名称を使い始めました。)

まとめると、

  • コマンド = プログラム
  • ディレクトリ = フォルダ

なるほどー。どっちがどっちだかわからなくなってた曖昧だったやつは、結局どっちも同じ意味だったのか。スッキリ。

GUIとCUI。

さて、黒い画面を使ってみるとは言っても、黒い画面って何をするものなのか?

  • 黒い画面には文字が表示される
  • 黒い画面に文字を打てる

今ある黒い画面についての知識はこの二つだけです。

ここでまたもやWebデザイナーの為の「本当は怖くない」“黒い画面”入門 Part.01コピペ。

FinderなどのGUIアプリではプログラムのアイコンをダブルクリックすることで実行しますが、“黒い画面”ではプログラムのファイル名を入力することで実行します。

「GUI」という言葉が出てきましたが、調べたところGUIは「Graphical User Interface」の略だそうです。まぁ、簡単に言ってしまえば名前のまま。グラフィカルなユーザーインターフェイスのことで、普段デザイナーが使ってるMacやWindowsの画面のことですね。ドラッグアンドドロップでファイルを移動させたり、クリックしてファイルを選択したり、ダブルクリックしてアプリを起動させたり、Finderからファイルを探したり…あのいつもやってるやつがGUIだったんですね。

逆に「CUI」というものもあるそうです。CUIは「キャラクタユーザインタフェース (character user interface)」、「キャラクタベーストユーザインタフェース (character-based user interface)」、「コマンドラインユーザインタフェース (command line user interface)」の略だそうで(wikipediaより)、ってどれだよ!という感じですが、まぁ、ようするにGUIのグラフィックとは違って、文字を打ってファイルを移動させたり、ファイルを選択したり、アプリを起動させたり、ファイルを探したり…するインターフェイスのことなんですね。これってまさに今目の前にある黒い画面のことじゃん。

一旦整理すると、

  • 黒い画面はターミナルのこと。
  • ターミナルはCUIである。

ふむふむ。黒い画面では使いたいプログラムのファイル名を文字を打つことによってやりたいことが実行される為、プログラマーは文字だけの画面を見ていたんですね。

黒い画面にコマンドを打ってみる。

今回と次回とその次でWebデザイナーの為の「本当は怖くない」“黒い画面”入門で紹介されているコマンド、

  • ls
  • pwd
  • echo
  • cd
  • man
  • open
  • cURL
  • touch
  • mkdir
  • cp
  • mv
  • rm
  • cat

に挑戦したいと思います。コマンドって多すぎ!

では、地道にそれぞれのコマンドに挑戦。

ls

  • LiStの略でファイルやディレクトリの一覧を表示するプログラム
  • Finderでは「書類」、「ムービー」などの日本語のフォルダも黒い画面で表示する場合は英語で出る(Mac OS Xがきちんと日本語化されているため)

では、まずは「ls」から。
Webデザイナーの為の「本当は怖くない」“黒い画面”入門 Part.01に書いてあるのをそのまま真似してやってみたいと思います。

bin

lsは/binの中にあるので、正式なファイル名(フルパス)は/bin/lsです。

$ /bin/ls

とエンターキーを黒い画面に打ってみましょう。(”黒い画面”に実際に入力するのは$以降の文字です。通常、$から始まっているものはそれ以降を黒い画面に打ち込むということを表しています。)

やってみました!

20110103221756

僕の場合、ユーザーのホームディレクトリが「machida」なので、machidaの中にあるものが文字で表示されてます。
そういえば「ls」ではドットファイルが表示されないのか。

調べたところ、

$ /bin/ls -a

と、「 -a」を追加するとドットファイルも表示されました。

ちなみに、「/bin/ls -a」の「-a」の部分のことを「オプション」と呼びます。それぞれのコマンドにはそれぞれのオプションを持っていて、「-a」はドットファイルも表示するlsのオプションということになります。

「-l」というコマンドもあるそうです。

$ /bin/ls -l

と打つと、ファイル名だけでなく「パーミッション、リンク数、所有者名、グループ名、サイズ、タイムスタンプ、ファイル名」という順番でファイルの詳細が表示されます。

$ /bin/ls -al

または、

$ /bin/ls -a -l

と書いてオプションの合わせ技も使えます。上記二つは書き方は違いますがやってることは同じです。

The Sixwish projectの記事も参考にさせていただきました。

pwd

  • Print Working Directoryの略(ワーキングディレクトリとは現在作業してるディレクトリという意味)
  • 現在いるディレクトリのパスを表示するコマンド

pwdというプログラムが見えるので(/binフォルダの中に)これを使ってみましょう。

bin

黒い画面にまた

/bin/pwd

と打ち込んで見て下さい。(エンターキーで実行することになります)

ターミナル — bash — 80×24

/Users/komagata

と表示されました。

やってみました。

pwd

僕の場合はユーザーのディレクトリ名が「machida」なので、

/Users/machida

と、表示されました。うーむ、「pwd」のやってみたレポートはあんまり意味なかったなぁ。

echo

  • echo(エコー)は反響ややまびこという意味
  • 文字を表示するプログラム

さて、どんどん進んでいきます。続いては「echo」

/binの中にechoというプログラムがあったので使ってみましょう。

$ /bin/echo hello

/bin/echoの後にスペースを一個入れて、その後に適当な文字を入力してみてください。その文字が画面に表示されます。

ターミナル — bash — 80×24

“黒い画面”ではプログラムのファイル名を入力することでプログラムを実行しますが、その後ろにスペースを空けて文字を入れると、そのプログラムに文字を渡して実行することになります。この例ではhelloやheyという文字を/bin/echoに渡して実行していることになります。

このプログラムに渡す文字のことを引数(ひきすう)と言います。”引用する数”という意味でしょうか?英語ではargument(アーギュメント)といって、数学の用語だそうです。僕の記憶にはありませんが、高校とかで習ったかもしれません。

echo(エコー)は反響ややまびこという意味です。echoは引数として与えた文字をそのまま画面に表示するプログラムです。渡した文字を表示するだけのこんなプログラム何の役に立つんでしょう?

何っ!komagataさんまで何の役に立つのか?と言ってるではないか。
まぁ、とりあえずやって次に進みたいと思います。

引数は「hello」20110103225535

それにしても、オプションやら引数やら、ただ文字を入力するだけなのに意味が違ったりしてCUIってややこしいですね。

便利な仕組みPATHについて

一旦コマンドに挑戦するのは休憩して、Webデザイナーの為の「本当は怖くない」”黒い画面”入門 Part.02に出てきた「便利な仕組みPATHについて」に重要な気配を感じたので、こちらを勉強したいと思います。

とりあえずその部分を引用してみます。

前回、”黒い画面”ではファイル名を入力することでプログラムを実行すると言いました。/bin/lsとか/bin/pwdとか。しかし、これでは凄く深いディレクトリにあるプログラムを実行するのが面倒臭くて仕方がありません。

/Users/komagata/Documents/hoge/fuga/piyo/ls

こんな場所にlsがあったら面倒ですよね。試しに上記のようなディレクトリをFinderで作ってそこにlsをコピーしてみてください。問題無く実行できますが、入力するのがかなり面倒なはずです。

そこで”黒い画面”にはPATH(パス)という超便利な機能があります。PATHは”黒い画面”に設定されている項目の一つで、ここにディレクトリ名を設定しておくと、そこの中にあるプログラムはディレクトリ名を省略してファイル名だけで実行できるようになります。

例えば、/binというディレクトリは最初からPATHに設定されているので、今まで/bin/lsと入力してきましたが、実はlsだけでも実行できます。

ターミナル — bash — 80×24

pwdもechoも同じです。お気を悪くなさらないでください。PATHは飽くまで便利機能であって、”黒い画面”は所詮はプログラムのファイル名を打ち込んでいるだけなんだということをお知らせしたかったのです。

PATHのお陰で見た目上コンピューターに正にCommand(指令)を送っているように見えますよね。「一覧(list)を表示しろ!」みたいに。

PATHには他にどんなディレクトリが設定されているんでしょう。これは先程のechoで見ることが出来ます。

$ echo $PATH

と打ってみてください。

ターミナル — bash — 80×24

いくつかのディレクトリ名が“:”(コロン)で区切られて出てきたと思います。この:で区切られた一つ一つが全てPATHに設定されたディレクトリです。/binもちゃんとありますね。このディレクトリの中にあるプログラムはディレクトリ名を省略して打つことができます。

その前に$PATHの$ですがこれは何でしょう。echoは渡した引数を表示してくれるコマンドでした。だったら$PATHと表示されなければおかしいはずですよね。これは”黒い画面”に”$から始まる文字はそういう名前の設定項目の中身を表示する”という機能があるためです。echoも役に立ちましたね。

$PATHのように中身を変更できるものを変数(へんすう)と言います。英語ではvariableで変化するものという意味です。$PATH以外にもユーザー名が入ってる$USER、そのユーザーのホームディレクトリが入っている$HOMEなど、色々な変数が”黒い画面”では使われています。

ターミナル — bash — 80×24

ふむふむ、長い引用になってしまいました。PATHについてをまとめて整理したいと思います。

  • 毎回コマンドを使うときに、そのプログラムが置いてあるある場所までのパスを文字で入力するのは面倒。その手間を省くのがPATH(パス)という便利な機能
  • PATHにディレクトリ名を設定しておくと、そこの中にあるプログラムはディレクトリ名を省略してファイル名だけで実行できるようになる
  • 「echo $PATH」と打つとPATHに設定されたディレクトリの一覧を見ることが出来る
  • さっきまでやっていた「ls」、「pwd」、「echo」のコマンドは「/bin」の中にあるプログラムだが、「/bin」もPATHに設定されているので、例えば「ls」の場合、「/bin/ls」とは打たずに、「ls」と打つだけでいい

はい、PATHを理解出来ました。
次回は残りのコマンドに挑戦したいと思います。

最新の実績

  • Remember The Wordpress
  • happy1000days
  • happy1000days
  • happy1000days

こちらも合わせてどうぞ

  • webデザイナーの為の「本当は怖くない」“黒い画面”入門

アフィリエイト