Macでターミナルとシェルを使うための基礎知識 - 環境の構築と基本的なファイル操作を知る

Macでターミナルとシェルを活用し、サクサクと作業をするには?シェルに関する多数の執筆を持つ、「シェル芸人」こと上田隆一さんが基本のテクニックを解説します。

Macでターミナルとシェルを使うための基礎知識 - 環境の構築と基本的なファイル操作を知る

こんにちは。千葉工業大学未来ロボティクス学科の上田1@ryuichiuedaです。というよりシェル芸の人と呼ばれることが多い上田です。

この記事は、「Macでターミナルやシェル、コマンドを使う」というテーマでお送りするものです。通常、シェルの話になるとサーバとして利用されるOSを環境に指定することがほとんどです。この企画もそういう暗黙の前提があったはずなのですが、「せっかくエンジニアにはMacユーザーが多いのだから、Macで普段使いできるような解説を書きたい」と筆者がダダをこねてねじ曲げて、これを書いております。

シェル(ターミナル)というと「黒い画面」と恐れられるような存在ではあるのですが、しょせんは道具です。少しずつ便利に使えるようになってもらえれば、という軽い気持ちで執筆していますので、お付き合いください。読んでいて簡単すぎる場合には、身の回りの「使ってない人」に押し付けない程度に紹介ください。

ただ、初心者向けで終わるなともくぎを刺されているので、後半はワンライナーをさく裂させます。

今回の内容

・ターミナルの外観をターミナルとコマンドを使って変える
・Finder代わりにターミナルとコマンドを使う
・シェルの設定ファイルを編集してターミナルの表示に色を付ける
・ファイルの検索をしながらシステムに潜り込む

今回の環境

・OS: macOS High Sierra(バージョン10.13.6)
・マシン: Parallels Desktop上の仮想マシン
・ターミナル(Terminal.app): バージョン2.8.3
・シェル: bash 3.2.57(1)-release

注意

1カ所だけシステムのファイルを扱うところがあって万が一の場合、ご自身のMacに不具合が出る可能性があります。試す前にはTime Machineなどでバックアップをお願いします。また、本記事を試して生じた不具合等については、筆者や掲載者は責任を負いかねますのでご注意ください。

コマンドのコピペでターミナルをカスタマイズ

最初に、細かい説明は抜きにして、ターミナルのカスタマイズをターミナルから使ってやってみましょう。早速、Launchpadからターミナルを立ち上げてみましょう。念のためですが、これ↓です。

2

立ち上げると、次のような画面が現れます。地味です。以後、この画面の「$」(プロンプト)の右側に何かを書くことによって便利にMacを使っていくわけですが、ほかのアプリのようにもうちょっとカラフルにしたいかなというところです。

3

通常この設定は、ターミナルのメニューから「環境設定」を選んで、そこで好きなようにGUIをいじって設定します。

ただ、このような情報はGoogleで「ターミナル Mac カスタマイズ」で検索することでもいろいろと調べられます。そこで、もう少しマニアックな方法をとってみたいと思います。

ひとつ注意を。 これからご紹介する操作を試すと、「my」というプロファイルを作成・保存します。すでにターミナルの設定に「my」というプロファイルが存在する場合、上書きされてしまうので、ご注意ください。また、現在のターミナルのプロファイルを保存してください。普段、ターミナルを使わず、この注意に心当たりがない場合は大丈夫です。

まず、Macがインターネットに接続された状態で次のコードをコピーしてください。

curl -L https://bit.ly/2LM2vDq > /tmp/my.terminal
open /tmp/my.terminal

そして、ターミナルが開いていない場合はターミナルを開き、画面にコードを貼り付けます。すると、次のように濃紺色のターミナルが開きます。開かない場合は、元のターミナルでreturnキーを押すと開きます。

4

次に、開いた濃紺色の方のターミナルで次のコードをコピペします1。ターミナルが閉じない場合は、元のターミナルでreturnキーを押して閉じてください。

defaults write com.apple.Terminal "Default Window Settings" my
defaults write com.apple.Terminal "Startup Window Settings" my
exit

これでターミナルのメニューから「ターミナルを終了」をクリックして、その後Launchpadで再度ターミナルを起動すると、濃紺色のターミナルがデフォルトで開くようになります。うまくいかなかった場合は、1行ずつコピペしてみたあとにターミナルを終了し、再度起動してみてください。

ターミナルは少しは使える方がいい

以上、コピペだけでターミナルの外観を変えました。この例に限らず、ターミナルを普段から使う人同士は、普段から質問への回答や作業の依頼をチャットにコマンドを貼り付けて済ますということをよくやります。

普段から使わない人に対してぶっきらぼうにこれをやると嫌がらせと捉えられてしまいますが、使う人からすると、これが「どこどこの画面を開いて……」とやるのは少々面倒です。

この意識のズレが互いにフラストレーションになることもありますが、必要なのは双方の歩み寄りです。ということで、筆者からはターミナルに興味を持ってもらえるように頭をひねって書いてますので、普段使わない人ももう少しお付き合いください。これから何十年もPCを使うことを考えると、文字だけで、しかもさまざまなシステムを扱えるシェルやコマンドというものに慣れておくことは損ではないのかなと思います。

ここまでのおさらい

ここで、今やった手順について、少し深掘りしてみます。長いウンチクになりますが、一言で言うと、「ターミナルの中でシェルを使うことで、ソフトウェアやファイルを扱える」ということになります。

ターミナルとは

まず、「ターミナル(日本語で端末)ってなに?」という話ですが、これはもともと、昔のある時期のコンピュータにつながっていたタイプライタとプリンタを意味します。

タイプライタで文字を打ってコンピュータに命令すると、コンピュータがそれを受けて文字を返してきて、それがプリンタで印字されて出力されます。プリンタはその後、テレビモニタに置き換わりました。古い話です。

Macのターミナル(Terminal.app)は、この古めかしい端末の動きを再現するソフトウェアです。Terminal.appはMac自身に接続しており、やはりなにか文字を打つと、Macが仕事をして結果(出力)を返します。

例えば、ターミナルで次のコマンドを打つと、curlというプログラムがMac上で動き、 URLの場所からデータをダウンロードしてきます。このダウンロードされたデータが「出力」として画面にザーッと表示されます。

curl -L https://bit.ly/2LM2vDq

やってることは電卓とそんなに変わりません。文字を打ち込んだら、何かの処理をコンピュータがやってくれて、結果が画面に出力された。ただそれだけです。

シェルの役割

ところで、今述べたようにターミナルは単に文字を受け付けて文字を吐き出す機械であって、受け付けた文字を解釈して出力を返すのは別の道具の仕事です。

この仕事の窓口をしているものは「シェル」と呼ばれます。上のcurlの例では、シェルはこの文字列をcurl-LとURLに分けて、ソフトウェアであるcurl-LとURLを渡します。そして、シェルはcurlからデータを受け取り、これを端末に返しています。

シェルにはさまざまな種類がありますが、本記事ではターミナルを立ち上げると同時に立ち上がるBashを使っています。また、シェルというとBashのように文字だけ扱うもののことを指すことが多いのですが、GNOME Shellのように、GUIインタフェースの名前に使われることもあります。

シェルは、ソフトウェアの入出力も扱いますが、同時にファイルも扱います。例えば、curlの後ろに付けた> /tmp/my.terminalは、プログラムの出力を/tmp/my.terminalに保存したいときのBashへの命令方法です。Bashは、> ...を解釈し、命令のとおりにcurlからのデータをファイルに書き出します。

また、ソフトウェアcurlもどこかファイルに保存されているわけで、BashはHDDやSSDなどから探してきて実行しています。シェルでは、curlのように文字列で呼び出すソフトウェアを「コマンド」と呼びます。

ターミナル+シェル+コマンドでできること

コンピュータというのはファイルとプログラムが扱えればだいたいのことができるので、ターミナルやシェルを扱えるとたいていのことができることになります。また、マウスやタッチパッドが介在する操作と比べて、作業の自動化が簡単です。先ほどのコピペはその例として示しました。

一方、シェルの仕組み上、ユーザーに画像などを提示することはできません。地味でとっつきにくいというのも敬遠される理由です。ただ、Macには先ほど使ったopendefaultsなど、その溝を橋渡しするコマンドが存在しており、使い方を知っておくと楽できる場面があります。

シェルをFinderのように使う

ということで、なるべくすぐに使える操作からシェルとコマンドの使い方を確認していきます。Finderの機能をコマンドで代用するところからシェルに慣れていきましょう。

まず、ターミナルからダウンロードしたファイルを開くということをやってみます。下準備としてWebブラウザで好きな画像を開いて保存しておいてください。

lsで表示、cdで移動、openで開く

ファイルやディレクトリ2のリストはlsというコマンドで調べることができます。

macos-10:~ ueda$ ls
Desktop     Downloads   Movies      Pictures
Documents   Library     Music       Public

このリストは、 Finderのメニューの「移動」から「ホーム」を選ぶと GUIで見ることができます(名前が日本語になっていますが)。

5

ターミナルがFinderと同じものだと考えると、ターミナルを立ち上げることは、この「ホーム」が開くことと解釈できます。

ファイルやフォルダの詳細が見たいときは、Finderでは次のような画面にします。

6

コマンドでもls -lと打つとほぼ同じものが見られます。

7

-lは、コマンドlsに与えている情報で、「引数」と呼ばれます。引数は次のように、半角スペースで区切って記述します。

$ コマンド 引数 引数

また、-lのようにコマンドの挙動を変える引数は「オプション」と呼ばれます。

ソートもできます。次の例はls -ltrを使い、古いものが上に来るように並び替えして表示する例です。 -ltrtが時刻順、rが順番の反転を意味します。それぞれ-t-rと独立したオプションとして渡しても機能します。

8

横道にそれましたが、ファイルを開く操作に戻りましょう。 lsしたときのDownloads(=Finderで見たときの「ダウンロード」)が、普段ブラウザから何かをダウンロードしたときにファイルがたまっていくディレクトリです。

このディレクトリに移動してみましょう。 Finderではフォルダをダブルクリックする操作と同じです。

移動にはcdというコマンドを使います。まず、ここまで打ちます。

macos-10:~ ueda$ cd Dow

その後、Tabキーを押します。すると、あとの文字は補完されます。

macos-10:~ ueda$ cd Downloads/

この機能はシェルのタブ補完と呼ばれます。タブ補完は必ず使うクセを付けましょう3

補完は候補が2つ以上ある場合には素直に効きませんが、その場合には適宜文字を打ち込んで候補を絞ってください。上の例ではDocumentsとのバッティングを避けるためにDowまで打ちました。

補完が終わったらreturnキーを押してコマンドを実行します。これでDownloadsディレクトリへの移動が完了します。

macos-10:~ ueda$ cd Downloads/
macos-10:Downloads ueda$

ここでlsを使うと、中のファイルが見られます。

macos-10:Downloads ueda$ ls
ai_kanabou_buki.png

ai_kanabou_buki.pngを開いてみましょう。openという、アイコンのダブルクリックに相当するMac固有のコマンドを使います。

macos-10:Downloads ueda$ open ai_kanabou_buki.png

この状態でreturnキーを押すと、次のようにプレビューが立ち上がります。これで目的が果たせました。

9

また、複数の画像を一気に開くということもできます。例えばDownloadsの中にいくつかPNG画像があるなら、

macos-10:Downloads ueda$ open *.png

で、次のようにプレビューで「全xページ」とまとめて開くことができます。

10

*.pngは、拡張子が.pngの全ファイルを指します。もし画像をDownloads内に水増ししたいならば、screencaptureというコマンドを使うとスクリーンショットを指定したファイル名で保存してくれます。

macos-10:Downloads ueda$ screencapture hoge.png

さらに、openを使えば、プレビューだけでなく、ブラウザで画像を開くということも可能です。

macos-10:Downloads ueda$ open -a firefox ai_kanabou_buki.png

上記のコマンドのように-a アプリケーション名というオプションを加えます。open -a firefox ...は、アニメーションGIFなどを閲覧するときによく使います。

今の操作が便利かどうかは人によって感じ方がさまざまです。最初はコマンドlscdopenを覚え、さらにls -ltrの場合などオプションをいくつも覚えていかないといけないので面倒なのですが、普段からよくやる操作についてはGUIでのショートカットのように覚えていくとよいでしょう。もし途中で面倒になったら、次のようにopen .と打ちましょう。

macos-10:Downloads ueda$ open .

するとFinderが開くのでFinderを使った操作に戻ることができます。

また、今はホームからDownloadsというディレクトリに入ったわけですが、ホームに戻る場合には、次のコマンドを使います。

macos-10:Downloads ueda$ cd ..

..は、「1つ上のディレクトリ」を示します。ただし、ホームに戻る場合に限っては、次のコマンドでもかまいません。

macos-10:Downloads ueda$ cd

cdだけで、どこのディレクトリからでもホームに戻れます。

mvで名前の変更、cpでコピー、rmで削除

さらにファイルを操作するコマンドを使ってみましょう。名前の変更はmv(move filesの意)を使います。次の例は、ai_kanabou_buki.pngthis_is_it.pngに変える処理です。しつこいですが、タブ補完を必ず使いましょう。

macos-10:Downloads ueda$ ls
ai_kanabou_buki.png
macos-10:Downloads ueda$ mv ai_kanabou_buki.png this_is_it.png
macos-10:Downloads ueda$ ls
this_is_it.png

次に、ファイルをコピーしてみます。cp(copyの省略)を使います。

macos-10:Downloads ueda$ cp this_is_it.png ai.png
###lsで確認###
macos-10:Downloads ueda$ ls -l
total 1184
-rw-r--r--@ 1 ueda  staff  302304  1  8 11:05 ai.png
-rw-r--r--@ 1 ueda  staff  302304  1  4 11:14 this_is_it.png

コピー元のファイルを消してみましょう。rm(removeの省略)を使います。

macos-10:Downloads ueda$ rm this_is_it.png
macos-10:Downloads ueda$ ls
ai.png                         #ai.pngだけ残る

ファイルの操作コマンドの紹介はとりあえずここまでにしておきます。普通、初心者向けの資料ではこのあとにrmdir, mkdir, chmod, ...と続いて正直、つまらないわけですが、GUIがあるので、何かわからなくなったらopen .して逃げてしまえばなんとかなります。

lsの出力に色を付ける

エンジニアHubに会員登録すると
続きをお読みいただけます(無料)。
登録のメリット
  • すべての過去記事を読める
  • 過去のウェビナー動画を
    視聴できる
  • 企業やエージェントから
    スカウトが届く