最初に注意
この記事は、シェルの解説としてはあまりにも初歩的な内容であり、しかもかなり偏りがあることを予めご了承下さい。
Mac OS X のターミナル上で何かしら作業をしなければいけない時の最低限の知識・操作に絞って書いてみました。
ターミナルを起動する
Mac でシェルコマンドを操作するためにはまずターミナル(ターミナル.app)を起動しないと始まらない。
起動の仕方はいくつかある。
オーソドックスな方法は、Finder を開いて、「アプリケーション」フォルダの中にある「ユーティリティ」の更にその中に「ターミナル.app」というのがあるので、そいつをダブルクリックする。
(ターミナル.app を Doc にドラッグ・アンド・ドロップで登録しておくことをオススメする。)
もう一つの方法は、Ctrl + Space で Spotlight を起動し「terminal」と打ち込むと検索結果の中にターミナル.app が出てくるのでそれを選択&エンターでも起動できる。
ディレクトリの中身を表示(ls)する
ターミナルを起動すると通常ユーザのホームディレクトリ(~)にログインした状態になる。
今いるディレクトリ(カレントディレクトリ(.))の中に何が置かれているかを見るには ls コマンドを使用する(List Segments)。
この時、ls コマンドに -F オプションをつけて実行すると、名前の最後に付く記号で属性を見分けることができる。
# ls のマニュアルから抜粋 $ man ls ... -F Display a slash (`/') immediately after each pathname that is a directory, an asterisk (`*') after each that is exe- cutable, an at sign (`@') after each symbolic link, an equals sign (`=') after each socket, a percent sign (`%') after each whiteout, and a vertical bar (`|') after each that is a FIFO. ... $ ls -F Desktop/ Documents/ Downloads/ ...
よく見かけるのは、
- dir_name/
最後に / が付くのがディレクトリ - script_file*
最後に * で実行可能ファイル(中にプログラムが書いてあって何かの仕事をするもの) - alias@
最後に @ で何かのエイリアス
これら / * @ などは名前そのものではなく、ls コマンドの -F オプションが目印に付け加えているものだということを忘れないように。
ディレクトリを移動(cd)する
ディレクトリの移動(Change Directory)には cd コマンドを使用する。
cd の引数に行きたいディレクトリを入力すれば移動できる。
また、現在位置を確認するには pwd コマンドを使用する。
$ pwd /Users/user_name # ユーザのホームディレクトリにいるようだ # ホームディレクトリの中身をリストアップする $ ls -F Desktop/ Documents/ Downloads/ ... # Documents に移動してみよう $ cd Documents # 確認 $ pwd /Users/user_name/Documents
実際の仕事でよく使うディレクトリへの移動にはキーワードを設定して簡単に移動できるようにしている。
もう一つ Finder との合わせ技を紹介しよう。
ターミナルでのディレクトリ操作に慣れないうちは Finder で目的のディレクトリに辿り着いたほうが早いこともあるだろう。
ターミナルで cd と打ち込んだ後、半角スペースを開けて移動したいフォルダを Finder からドラッグ・アンド・ドロップすれば長いディレクトリの入力を省略できる。
また、Finder の「表示」設定で「パスバーを表示」をオンにしておくと、Finder の下にパスバーが出る。
パスバーの右端がカレントディレクトリだから、こいつをドラッグ・アンド・ドロップすれば今表示しているディレクトリに移動できる。
open コマンド
Mac には open コマンドというのがあって、ターミナルからフォルダを開いたりアプリを立ち上げたりするのに使う。
$ open . # . はカレントディレクトリのことだから、今いるディレクトリが Finder で開く $ open -a firefox # -a オプションを付けてアプリの名前を打ち込んでやればそのアプリが立ち上がる
ファイルを作成・編集する
いずれは Vim や Emacs など、ターミナル上で直接ファイルを編集できるようになることが望ましいが、これらのエディタを使いこなすにはそれなりに色々なコマンドを覚えなければならない。
Mac でプレーンテキストを編集するには テキストエディット.app というのが標準で入っている。
ただおすすめはフリーの mi というエディターだ。
mi は テキストエディット.app と同じような操作でテキストが編集できるのはもちろん、表示、検索、文字エンコードなど、細かいところまで気の利いた機能が揃っている。
例えば、カレントディレクトリに Sample.txt というファイルを新規作成して mi で編集を始めたいとする。
手順としては、空の Sample.txt を作成しておいて、前述の open コマンドで開く。
$ : > Sample.txt # : はヌルコマンドで「何もしない」という意味 # > は > の左辺の出力を右辺に渡す(リダイレクト) # まとめると「何も出力しないことを Sample.txt (という新規ファイル)に # 書き出しなさい」という命令になる # つまり中身が空の新規ファイルが出来る $ open -a mi Sample.txt # mi はアプリケーションなので -a オプションを付けて呼び出す # mi の後に開きたいファイル(Sample.txt)を指定する # Sample.txt が mi で開く
ひとつ注意としては $ : > Sample.txt とリダイレクトを実行したとき、既に Sample.txt が存在していて中には大事な内容が書き込んであったとしても、ターミナル(というかシェル)は何の断りもなしに Sample.txt の中身を消去してしまうということ。
Finder で重複した名前の新規ファイルが出来てしまった時のように Sample(1).txt みたいな新しい名前を付けてくれるサービスはシェルにはそもそもない。
その他よく使うコマンド
mkdir | ディレクトリ作成。 $ mkdir dir_name |
cp | ファイルをコピーする。 $ cp original copy |
mv | ファイルを移動する(リネームも同様)。 $ mv from to |
rm | ファイルを削除する。 $ rm remove_file |
head | $ head -n 10 file とすると file の先頭から10行目までを表示。 |
cat | $ cat file で file の中身を全て表示。 |
tail | $ tail -n 10 file とすると file の末尾10行を表示。 |
chmod | ファイルのモードを変更する。 例えば新規で作成した do_something.pl という Perl スクリプトはそのままだとファイル自体に実行権限がないので、$ perl do_something.pl のように perl コマンドの引数として与えないと実行できない。 $ chmod 0755 do_something.pl として do_something.pl を実行可能ファイルにすることによって $ do_something.pl と直接ファイルの名前をコマンドのように実行できる。 |
fgrep | ファイル内検索コマンドのひとつ。 本来は grep から紹介すべきだろうが、fgrep は正規表現をいちいち考えなくて良いという利点がある。その代わり検索に使える技も限られるわけだが・・・。ともかく、 $ fgrep ‘検索ワード‘ *.csv のようにすればカレントディレクトリにある全てのCSVファイル(*.csv)の中で 検索ワード が含まれるファイル名と該当行を書き出してくれる。 大文字小文字を無視して検索させたければ -i オプションを付けて $ fgrep -i ‘検索ワード‘ *.csv |
man | コマンドのマニュアルを表示する。 $ man Command man ページから元の画面に戻りたいときは q |
which | コマンドがインストールされている場所を確認する。 $ which Command |
もう少し掘り下げた記事を読みたければ、こちらのブログがなかなか分かり易い。
覚えておいて損はないと思うこと
- Run しているコマンドやスクリプトを中止するには Ctrl + C
- プロンプトで入力の終了をシェルに知らせたいときは Ctrl + D
- シェルでは大文字小文字が区別される
- 半角スペースには入力を区切るという役割が与えられてる。つまり半角スペースもひとつのコマンドだと思えばより理解が深まる
- 文字列は ‘ か ” で囲む癖を付けよう
- ターミナルで Command + Tab で新しいタブが開く。この時 Command + Tab を押した時点でアクティブだったタブのカレントディレクトリを新規タブが引き継ぐ
参考書籍
Mac OS X UNIX活用大全 Mac OS X 10.6 Snow Leopard対応版 (MacPeople Books)
僕が Mac でターミナルを使うようになったきっかけはこの本。
少々古い本(OS X が Snow Leopard)だが、シェルの基本操作は変わらないし、基礎的な内容がとても丁寧に、かつ割りと広い範囲で解説されているので入門書としておすすめ。
入門UNIXシェルプログラミング―シェルの基礎から学ぶUNIXの世界
Mac という限られた環境から離れて Unix 一般として基礎からシェルプログラミングを習うのであればこの本がおすすめ。
ポケット詳解 Mac UNIXコマンド辞典 (Pocket詳解)
Mac でしかシェルコマンドを使わないなら潔くリファレンスはこれでいいと思う。