WEB+DB PRESS plusシリーズ[新版 zsh&bash対応]macOS×コマンド入門
──ターミナルとコマンドライン、基本の力

[表紙][新版 zs

紙版発売
電子版発売

A5判/400ページ

定価2,948円(本体2,680円+税10%)

ISBN 978-4-297-11225-7

電子版

→学校・法人一括購入ご検討の皆様へ

書籍の概要

この本の概要

初学者の方々に向けた「macOS×コマンドライン」の解説書。
zshとbashに両対応し,解説を刷新しました。

本書では,macOSベースでOSの基礎知識とコマンドラインのテクニックを丁寧に解説。
macOSの源流にあるUnix系OSのコンセプトを押さえつつ,ファイルやファイルシステム,ユーザやプロセスの概念,シェル,ターミナル.appなど,コマンド実行に役立つOS&関連知識を丁寧に取り上げます。独学でも楽しみながら学べるように,ポイントを押さえた図解や実例が満載です。

新版では巻末附録として,主要なコマンド&オプションが一覧できる「クイックリファレンス」に加え,パーソナルユースを想定した「Python」「Raspberry Pi」の2つの環境構築例も収録。
macOS,そしてこれからのコンピューターを使いこなしていくための基本の力を身につけたい方々へ向けて,充実の解説をお届けします。

※本書は『[基礎知識+リファレンス]macOSコマンド入門 ――ターミナルとコマンドライン,基本の力』(西村めぐみ著,新居雅行技術監修,技術評論社,2017)を元に,大幅な加筆/修正,目次構成の変更,最新情報へのアップデートを行ったものです。

こんな方におすすめ

  • コマンドをこれから使ってみたい方々
  • macOSの,GUIとは別の一面に興味をお持ちの方々
  • OSの基本を実機で試しながら学習してみたい方々

本書の構成

本書では,macOSでコマンドにはじめて接する方々に向けて,ファイル操作やテキスト処理など基本的なコマンドや学習しやすいコマンドを中心に取り上げています。実行例で示している内容は個人用のマシンを想定し,各コマンドは概ね見本どおりに入力して試せるようになっています。動作確認はmacOS Catalina(10.15)で行いました。本書の構成は以下のとおりです。第1章から第3章は,とくに基本事項を重点的に扱っています。

第1章[入門]macOSとコマンドライン
「コマンド」を入力する場所や入力した内容のことを「コマンドライン」と言います。ここではコマンドラインがどのようなものかを少しだけ試しているほか,コマンドの使い方を理解する上で役立つ知識として,macOSの成り立ちや歴史,Unix系OSとの関係について簡単に紹介しています。
第2章ターミナルとFinderの基本
コマンド入力に使用するアプリケーションである「ターミナル」の設定や,普段見ている「フォルダ」がターミナルではどのように見えるかなどを確認する章です。後半のFinderとターミナルを連携させる方法は,コマンド入力に少し親しんだら,改めて読み返してみてください。
第3章シェル&コマンドラインの基礎
コマンドラインの基礎部分を取り上げた章です。入力に楽をする方法やコマンドの組み合わせ方などを扱います。最後に,macOSを操作する上で重要な意味を持つroot(ユーザ)についても解説しています。第3章までを把握すれば,コマンドラインの日常的な利用ができるようになるでしょう。
第4章ファイルシステム
そもそもファイルシステムとは何か,どのような用語が使われているか,また,macOS Catalina(10.15)で新しく取り入れられたシステムはコマンドラインからはどのように見えるか,などを解説しています。
第5章ファイル&ディレクトリの探検
コマンドによるファイルやディレクトリの操作について扱います。普段Finderで操作しているようなことが,コマンドラインでできるようになるでしょう。実際に試せるように,テスト用のファイルを作成していますのでぜひ同じコマンドを入力してみてください。
第6章ファイルの属性とパーミッション
ファイルやディレクトリについてさらに理解を深めるための章です。ファイルの所有者や更新日時などの情報をどのように確認するか,あるいは,読み書き可能などの許可をどのように設定するか,また,ファイルを探したり圧縮したりといった操作についても扱います。
第7章シェルの世界[zsh/bash対応]
ファイルの操作を通じてコマンドラインに慣れてきたら,シェルについてもう少し詳しく学習してみましょう。macOS Catalina(10.15)から標準シェルとなったzshと,これまでの標準シェルであるbashについて,まずは共通の操作について,次にそれぞれの環境設定について解説します。
第8章テキスト処理とフィルター
コマンドラインの得意分野であるテキスト処理の章です。まずは表示に関するコマンド,続いて並べ替えや置換などの簡単な加工を扱い,最後に高度なテキスト処理としてgrepと正規表現,sed,awk,vi(vim)コマンドを扱います。
第9章プロセスとコマンドの関係
プロセス関連のコマンドによってmacOSで現在何が行われているかを調べ,シグナルによって実行中のプロセスに対して働きかける方法を扱います。また,ジョブコントロールやシステムを再起動する方法なども取り上げています。
第10章システムとネットワーク
システム全体の情報とネットワーク,そしてシステムのメンテナンスについての章です。これらの項目は,macOSでは基本的にGUIで操作しますが,コマンド操作に置き換えることで使い勝手が向上するかもしれません。
第11章Homebrew×パッケージ管理
Homebrewはソフトウェアのインストールやアップデートなどを安全に効率良く行う「パッケージ管理システム」の一つです。パッケージ管理システムの役割と,Homebrewの具体的な利用方法を紹介します。
Appendix A[基本コマンド&オプション]クイックリファレンス
本編で登場したコマンドを中心に,便利なコマンドの基本の使い方と主要オプションを紹介しています。本編での登場ページも掲載していますので,あわせて参考にしてみてください。
Appendix Bコマンドラインで広がる世界
最後に,おもにパーソナルユースを想定し,コマンドラインを実際に使う具体例を2つ取り上げています。B.1節はHomebrewとpyenvによるPython環境の構築です。Pythonを使いたい人にはもちろん,Pythonを使う予定がなくても,シンボリックリンクやシェルの設定がどのように働いているかを見ていくことで,これまで見てきたさまざまな設定や操作への理解が深まります。B.2節は小型のシングルボードコンピュータ「Raspberry Pi」の環境をmacOSで構築し,macOSから操作しています。コマンドラインであればさまざまな操作ができること,Unix系OSであれば,macOS以外のPCも同じように操作できることが実感できるでしょう。

この書籍に関連する記事があります!

まえがき 使える道具を増やす
本書は,macOSのコマンドを知り,活用していくための解説書です。
本書に寄せて macOSとコマンドの話
本書を手に取られた方の中には,本書のタイトルにある「コマンド」(command)って何のことだろうと思っている方もいらっしゃるでしょう。

本書のサンプル

本書の紙面イメージは次のとおりです。画像をクリックすることで拡大して確認することができます。

サンプル画像1

サンプル画像2

サンプル画像3

サンプル画像4

サンプル画像5

目次

[基礎知識]macOSの「アカウント名」と本書で扱う「ユーザ名」について

第1章 [入門]macOSとコマンドライン

1.1 はじめてのコマンドライン ……まずは試してみよう

  • コンピュータを「文字」で操作する ……コマンドとコマンドライン
  • ターミナル ……コマンド入力に使うアプリケーション
  • プロンプトとカーソル
  • コマンドの入力
  • コマンドラインの表記方法
  • コマンドのオプションと引数
  • ターミナルとシェルの関係

1.2 macOSの特徴 ……OSの基礎,Unix系OSという一面,macOSの変遷

  • 基本となるソフトウェア「OS」
    • OSの中心部分は「カーネル」
    • macOSのベースは「Darwin」
    • Unix系OSの特徴
  • Unix系OSの歴史
    • UNIXは研究所で誕生し,無償公開されていた
    • Unixの系統の1つが「BSD系」
    • 商用UNIXの登場とUnix系OSの進化
    • さまざまなディストリビューション
    • POSIX,商標UNIXとSUS ……UNIXの標準規格
  • Unix系OS間の違い ……系統の違いはコマンドラインに影響する?
  • Unix系OSと操作環境 ……ウィンドウを使うかどうかは設定で決める
  • macOSの歴史
    • Classic Mac OS
    • 新しいOS「Mac OS X」の誕生
    • ハードウェアの変化 ……PowerPCからIntel Macへ
    • Mac OS Xから「OS X」へ名称変更
    • OS Xから「macOS」へ名称変更
    • Darwinの歴史
    • バージョンと名称の変遷
  • macOSとX Window System
    • Darwin用のXは「XQuartz」

第2章ターミナルとFinderの基本

2.1 ターミナルの基本 ……起動と終了,設定の確認

  • ターミナルの起動と終了
    • 複数のターミナルを起動して使う
    • シェルを終了させる
  • ターミナルの設定
    • プロファイルで見た目をカスタマイズ
    • ウィンドウタイトルに表示する内容
    • ターミナルで使用するシェルの設定
    • テキストエンコーディングの設定
    • 「\」(バックスラッシュ)の基礎知識
    • 「\」の表示を確認
  • いろいろな地域の言語を使えるようにするしくみ
    • テキストエンコーディングと文字コード
    • 日本語環境で使われているテキストエンコーディング
    • 世界中の文字を表すことを目指して作られた「Unicode」
    • [言語と地域]の設定

2.2 Finderとコマンドライン ……フォルダとディレクトリ,openコマンド

  • Finderの基本 ……フォルダとディレクトリ
    • フォルダはディレクトリを視覚化したもの
    • フォルダとディレクトリはどう対応しているか
    • ホームディレクトリ
  • Finderとターミナルとの連携
    • ドラッグ&ドロップでファイル名を簡単に入力する
    • [セキュリティとプライバシー]-[フルディスクアクセス]の設定
    • Finderからターミナルを開く
  • Finderにパスを表示する設定
    • パスバーを表示する
    • ウィンドウのタイトルにパスを表示する
  • ターミナルからアプリケーションを起動する3つの方法 ……openコマンド
  • [1]ターミナルからFinderのウィンドウを開く
  • [2]ターミナルからデータファイルを開く
    • テスト用ファイルの作成
    • openコマンドで開いてみよう
  • [3]ターミナルから好きなアプリケーションを起動する

第3章シェル&コマンドラインの基礎

3.1 シェル概論 ……コマンドラインを担う「シェル」を知る

  • シェルの役割 ……コマンド入力をカーネルに伝える
    • コマンドラインでのあれこれはシェルが受け持っている
    • シェルでできることは「シェルスクリプト」で自動化できる
    • シェルは環境の設定にも使われている
  • シェルの種類 ……macOSの標準シェルはzsh
    • シェルによる違い ……コマンドは共通,コマンドラインの機能は異なる
    • プロンプトで使われている記号の意味
  • シェルスクリプトの基礎知識
    • シェルスクリプト以外のスクリプト ……macOSにインストールされているスクリプト言語

3.2 [速習]コマンドライン入力 ……効率の良い方法をマスター

  • コマンドラインの編集と履歴の活用
    • コマンドラインの編集
    • 前に入力した内容を呼び出す ……ヒストリ機能
  • 補完機能の活用
    • コマンド名の補完
    • ファイル名の補完
    • 複数の候補がある場合
  • ファイルをまとめて指定
    • 「*」にはすべてがあてはまる
    • 「?」は何か1文字を表す
    • 「パス名展開」はシェルの仕事
  • パイプとリダイレクトの活用
    • パイプでコマンドの出力をほかのコマンドに渡す
    • リダイレクトで出力結果をファイルに保存する
    • リダイレクトで既存ファイルに「追加」する
  • 画面のクリア ……clearコマンド

3.3 コマンドの基礎知識 ……コマンドの使い方&調べ方

  • 環境変数「PATH」とコマンドの優先順位 ……コマンドを動かす前に
    • コマンドを実行するにはパスが必要
    • PATHの役割 ……「パスが通って」いれば省略できる
    • PATHの確認 ……PATHに登録されているディレクトリ
    • PATHに登録されているディレクトリの使い分け
  • シェルに組み込まれているコマンド ……ビルトインコマンド
  • コマンドの優先順位 ……①エイリアス,②ビルトインコマンド,③PATH
    • 「何」が実行されているのかを知るには ……whichコマンド,typeコマンド
  • コマンドのルール ……オプション,引数,サブコマンド
    • ショートオプションとロングオプション
    • オプションの組み合わせ方
    • 引数があるオプション
    • ヘルプやバージョンを表示するオプション
    • サブコマンド
  • コマンドのマニュアルを確認 ……man
    • manコマンドでマニュアルを表示する
    • ターミナルのメニューでマニュアルを参照する
    • manで表示されるマニュアルの構成
  • SYNOPSIS(書式)の読み方
    • SYNOPSIS内の[ ]は省略可能であることを表す
    • 「...」は複数指定可能であることを表す
    • 「|」はどちらかを選択することを示す
  • マニュアルの章番号
  • ビルトインコマンドのマニュアル

3.4 管理者よりも強力なユーザ「root」 ……sudo/rootless機能

  • ユーザの種類と権限
    • 「root」って何だろう
    • rootの権限を使えるsudoコマンド
    • rootでシェルを使う
  • 新しいセキュリティ機能「rootless」 ……SIP
    • ディレクトリが保護されているかを確認する ……拡張属性「com.apple.rootless」

第4章ファイルシステム

4.1 ファイルシステムの基礎知識 ……APFS/フォーマット/パーティション/マウント

  • ファイルシステムの基礎知識
    • ファイルシステムの種類 ……macOS,Windows,Unix系OS
    • 新しいファイルシステム「APFS」
    • APFSとHFS+の選択のバリエーション ……暗号化,大文字/小文字,ジャーナリング
    • ファイルシステムとコマンドラインの関係 ……ファイル操作系のコマンドは共通
  • フォーマット ……記憶媒体を特定のファイルシステム用に準備
    • パーティション ……記憶媒体はパーティションを作って管理
    • ボリューム ……フォーマットされた領域には名前を付けて管理
  • マウント ……記憶媒体をOSからアクセスできるようにする
    • /Volumes ……macOSのマウントポイント
    • APFSの「コンテナ」と「ボリューム」

4.2 ファイルシステムの操作 ……[ディスクユーティリティ]/diskutil/デバイスノード/df/mount

  • [ディスクユーティリティ]と情報の表示
    • [ディスクユーティリティ]でコンテナも表示する
  • ディスクの情報の調査/マウント/修復 ……diskutil
  • 接続されているディスクの確認と情報表示 ……diskutil list
    • デバイスノード ……デバイス単位の操作時に,ディスクやボリュームの指定に用いる
    • マウント状況や使用量などの確認 ……diskutil info
    • ボリュームのマウント/マウント解除/イジェクト ……diskutil mount/umount/eject
  • ディスクの空き領域の表示 ……df
  • マウント状況とファイルシステムの確認 ……mount

第5章ファイル&ディレクトリの探検

5.1 ディレクトリ ……「/」(ルート),「~」(ホーム),「.」(カレント),「..」(親),絶対パス&相対パス

  • macOSのディレクトリツリー ……ファイルはディレクトリによって整理されている
    • Firmlinks ……ファイルシステムの新たなしくみ
  • ルートディレクトリを見てみよう ……「/」
    • ルートディレクトリの下にあるディレクトリを見る場合
  • ホームディレクトリを見てみよう ……「~」
    • ホームディレクトリの下にあるディレクトリを見る場合
  • 自分以外のユーザのホームディレクトリを表示する方法
  • カレントディレクトリは「現在の作業場」
    • カレントディレクトリの下にあるディレクトリを確認する
    • 違うディレクトリをカレントディレクトリにする ……cd
  • パスの基本 ……パスの表し方
    • 絶対パス(フルパス)と相対パス,親ディレクトリを表す「..」
    • 相対パスと絶対パスを使ったコマンド操作
    • カレントディレクトリを表す ……「.」
    • 「~」と組み合わせて指定する
    • 「~」を使った指定も絶対パス
  • ディレクトリを表す記号のまとめ

5.2 ドットファイル ……普通のファイルなのに見えないファイル(⁉)

  • 見えないファイル「ドットファイル」
    • ドットファイルを表示してみよう ……ls -a,-A
    • ワイルドカードでドットファイルを指定する
  • ドットファイルは「隠れている」ファイル

5.3 コマンドによるファイルとディレクトリの操作 ……mkdir/rmdir/rm/mv/cp

  • ディレクトリの作成 ……mkdir
  • 空のディレクトリの削除 ……rmdir
    • ディレクトリが削除できない場合
  • ファイルやディレクトリの削除 ……rm
    • ディレクトリの削除 ……-R
    • 確認メッセージを表示せずに削除する ……-f
    • -R(-r)オプションを使用する際の注意点
  • ファイルやディレクトリの移動/名前の変更 ……mv
    • mvでディレクトリの移動/名前の変更をする場合
    • mvでファイル名を変更する際の注意点
  • ファイルやディレクトリのコピー ……cp
    • コピー先にディレクトリを指定する ……補完機能を使う習慣をつけてミス防止
    • ディレクトリのコピー ……-R
    • コピー先のディレクトリがある場合の注意点

5.4 シンボリックリンク ……ハードリンクとinode/ln/エイリアスとの違い

  • ハードリンク&シンボリックリンク
    • ハードリンクとinode ……ファイルやディレクトリには固有の番号がある
    • 「ハードリンク数」の意味 ……サブディレクトリの数+2
    • ハードリンク数の変化を見てみよう
    • シンボリックリンク ……ファイルやディレクトリへのリンク
  • シンボリックリンクの作成 ……ln
    • シンボリックリンクの削除
    • リンク先の削除
    • ディレクトリのシンボリックリンクの作成 ……作り方はファイルのときと同じ
    • Finderの「エイリアス」との違い

第6章ファイルの属性とパーミッション

6.1 ファイル&ディレクトリの属性 ……パーミッション/ファイルフラグ/ACL/拡張属性

  • ファイルの情報を眺めてみよう ……属性
  • 読み/書き/実行の許可を管理する「パーミッション」 ……パーミッションは3種類×3組
    • ファイルの「読み/書きの許可」 ……r/w
    • ファイルの「実行許可」 ……x
    • ディレクトリのパーミッションはどう働くか
    • ホームディレクトリのパーミッション
  • このほかの属性 ……ファイルフラグ,ACL,拡張属性
    • ファイルフラグ ……Finderの表示や変更可能かを決める
    • ACL ……アクセス制限を細かく定義する
    • 拡張属性 ……Finderでの表示方法などを保存する

6.2 ファイル情報の表示 ……ls/stat

  • ファイルリストの表示 ……ls
    • 詳細情報を表示する ……-l
    • ディレクトリやシンボリックリンクの情報を表示する ……-l,-d
    • ドットファイルを表示する ……-a,-A
    • ファイルの種類を表示する ……-F,-G
    • サブディレクトリの中も表示する ……-R
    • ファイルの更新日で並べ替える ……-t
  • ファイルの属性情報の表示 ……stat

6.3 ファイルの所有者やパーミッションの変更 ……chmod/chflags/chown/touch

  • パーミッションの変更 ……chmod
    • パーミッションを表すアルファベットと数値
    • パーミッションとマスク値
    • デフォルトのパーミッション
    • chmodとデフォルトのパーミッション
    • ACL情報の操作
  • ファイルフラグの変更 ……chflags
    • ファイルを「変更禁止」にする ……uchg属性
  • ファイルの所有者とグループの変更 ……chown
  • ファイルなどの更新日や最終アクセス日の変更&新規ファイルの作成 ……touch

6.4 ファイルの検索/圧縮/同期 ……find/zip/unzip/tar/gzip/guzip/rsync/du

  • ファイルの検索 ……find
    • 検索するディレクトリの階層を指定するには ……-maxdepth
    • 検索対象外とする条件を加えるには ……-prune
    • ファイルを検索して削除 ……-exec,-ok
  • ZIP形式による圧縮と展開 ……zip,unzip
    • リソースフォークや拡張属性は含めず圧縮できる ……他OSとのやりとりする際に便利
    • パス名展開を使用した場合の注意点
    • サブディレクトリも含めて圧縮する
    • 条件に合うファイルを探してZIPファイルにする ……-i
    • findコマンドと組み合わせてZIPファイルにする ……-@
    • ZIPファイルを作成して元のファイルを削除する ……-m
    • ZIP形式のファイルを展開する ……unzip
    • 一部のファイルだけを展開する
  • アーカイブの作成/展開 ……tar
  • ファイルの圧縮と伸張 ……gzip,gunzip
  • ディレクトリの同期 ……rsync
    • ファイルの削除も同期する
    • ドットファイルを除外する
  • ディレクトリのディスク使用量の集計 ……du
    • 指定したディレクトリの集計のみを表示
    • シンボリックリンクの注意点
    • ドットファイルの注意点

第7章シェルの世界[zsh/bash対応]

7.1 [入門]コマンドの組み合わせ&実行 ……入出力/パイプ/リダイレクト/Nullデバイス/コマンド置換/サブシェル

  • パイプとリダイレクト ……| > >> 2> <
    • 入出力を変更するパイプとリダイレクト
    • 「標準入力」と「標準出力」
    • 第2の出力「標準エラー出力」
    • パイプは何をしているのか
    • フィルターコマンド ……標準入力から受け取った内容を加工して標準出力へ出力
    • リダイレクトは何をしているのか
    • 標準入力のリダイレクト ……<
    • 標準出力と標準エラー出力を保存する ……> 1> 2> &>
    • リダイレクトでファイルに追加する ……>> 1>> 2>>
    • 出力を「捨てる」 ……Nullデバイス(/dev/null)
    • すべての出力をパイプする
    • パイプとリダイレクトを組み合わせる ……マルチIO(zsh),tee(bash)
    • パイプとリダイレクトのまとめ
  • 複数コマンドを1行で実行 ……; && || &
    • 複数のコマンドを1行のコマンドラインで実行する ……;
    • 1行で実行できるとなぜ便利なのか ……ヒストリやエイリアスで活用しやすくなる
    • 先に実行したコマンドの結果によって処理を変える ……&&
    • 先に実行したコマンドが終わるのを待たずに次の処理をする ……&
  • コマンド置換 ……` ` $( )
    • コマンドの実行結果を引数にする
    • コマンドの実行結果を引数の一部として使用する
    • コマンド置換の「ネスト」
  • サブシェル ……( )
    • サブシェルを使って標準エラー出力をパイプに渡す

7.2 コマンドライン入力の省力化 ……ヒストリ/エイリアス/各種展開/ショートカット

  • ヒストリ(コマンド履歴)の活用
    • コマンド履歴を一覧表示する ……history
    • ヒストリ番号を使って実行する ……! !!
  • エイリアス(コマンドエイリアス)の設定と活用 ……alias/unalias
    • エイリアスを定義する ……alias
    • 定義済みのエイリアスを確認する
    • 定義済みのエイリアスを削除する ……unalias
    • グローバルエイリアス(zshのみ) ……引数にエイリアスを使う
    • 接尾辞エイリアス(zshのみ) ……拡張子ごとのエイリアス
  • パス名展開 ……* ? [ ]
    • パス名展開で使用される記号
    • 「*」は任意の文字列,「?」は任意の1文字
    • 文字を限定した指定をする ……[ ]
  • このほかの展開
    • ブレース展開 ……{ }
    • チルダ展開 ……~
  • 各種展開を組み合わせてみよう
    • 「.*」でドットファイルを表示する
    • echoコマンドで展開の結果を確認
  • パス名展開ができなかった場合 ……zshとbashの違い
    • zshの場合 ……パス名展開に失敗すると,コマンドが実行されない
    • bashの場合 ……パス名展開されないままの文字列を引数にしてコマンドが実行される
  • 記号の意味を打ち消す ……\ ' ' " "
    • 「\」と「' '」と「" "」の違い
  • ターミナルで使えるキーボードショートカット ……よく使う操作を簡単に
    • ターミナルウィンドウ関係の操作
    • 表示や実行を制御する操作
    • ヒストリと行内編集関係

7.3 zshの設定 ……環境変数,シェル変数,設定ファイル

  • 環境変数とシェル変数 ……シェルやコマンドの動作を変える
    • 「変数」って何? ……変数の役割,参照方法
    • シェル変数は,環境変数とどう違う?
  • シェル変数と環境変数の定義と値の表示
    • 定義されている環境変数の値を変更する
    • 環境変数を設定してコマンドを実行する
  • zshの設定ファイル
    • システム全体用の設定ファイルと個人用/ユーザ固有の設定ファイル
    • 「~/.zshrc」の作成と編集
  • テキストエディットを使う際の注意
    • [注意❶]標準テキストで保存する
    • [注意❷]スマート引用符をOFFにする
  • 設定ファイルの動作確認 ……source
  • zshの設定ファイルはどう読み込まれる?
  • シェルの起動方法と設定ファイルの使い分け ……
  •  ……インタラクティブシェル,ログインシェル,ノンインタラクティブシェル
    • シェルの設定ファイルと実行順 ……設定ファイルは起動方法によって異なる
    • なぜ異なる設定ファイルを使用するのか ……人間向けの処理を行うかどうかがポイント
  • zshの設定例 ……エイリアス,プロンプトの表示,シェルオプション
    • エイリアスを設定する
    • プロンプトの表示内容を変更する
  • シェルオプションによるシェルの動作設定
    • コマンド実行時にディレクトリ末尾の「/」を削除しない ……AUTO_REMOVE_SLASH
    • 補完候補の表示をbashと同様にする ……BASH_AUTO_LIST
    • コマンド入力を補正する ……CORRECT

7.4 bashの設定 ……設定ファイルと設定例

  • bashの設定ファイル ……ユーザ設定は「~/.bash_profile」へ
    • システム全体用の設定ファイルと個人用/ユーザ固有の設定ファイル
    • 「~/.profile」と「~/.bash_profile」の違い
    • 「~/.bash_profile」の作成と編集
    • 設定ファイルの動作確認 ……source
    • bashの設定ファイルはどう読み込まれる?
  • bashの設定例 ……エイリアス,プロンプトの表示,シェルオプション
    • エイリアスを設定する
    • プロンプトの表示内容の変更
    • プロンプトの色を変更する
  • シェルオプションによるシェルの動作設定
  • 「The default interactive shell is now zsh.」を表示しない

第8章テキスト処理とフィルター

8.1 テキストの表示 ……more/less/head/tail/cat/say

  • 1画面ごとの表示 ……more/less
    • コマンドの実行結果を表示しながらファイルにも保存する
    • 表示開始位置を指定する
    • 表示内容を検索する
  • 先頭と末尾の表示 ……head,tail
    • headでコマンドの実行結果を素早く確認
  • ファイルの表示と連結 ……cat
    • キーボードから入力した内容をファイルに保存する
  • テキストの読み上げ ……say
    • ほかの話者(ほかの言語)を指定する ……-v

8.2 テキストの加工 ……sort/cut/tr/iconv/wc/diff

  • テキストの並べ替え ……sort
    • 数の大小で並べ替える
    • フィールドを指定して並べ替える
  • 文字の切り出し ……cut
    • CSVファイルから必要な部分だけを取り出す
  • 文字列の置き換え ……tr
    • 特定の文字や制御文字を削除する
    • 固定長のデータをCSVやタブ区切りにする
  • テキストエンコーディング(文字コード)の変換 ……iconv
    • 使用できるテキストエンコーディングを確認する
  • テキストファイルの行数/単語数/文字数 ……wc
    • 実行結果の件数を数える
  • テキストファイルの比較 ……diff
    • context形式
    • unified形式

8.3 高度なテキスト処理 ……grep/sed/awk/vi(vim)

  • 文字列の検索 ……grep
    • 検索パターンに正規表現を使用する ……シンボリックリンクをリストアップする2つの例
    • 基本正規表現と拡張正規表現
    • 複数のパターンで検索する
    • 前後関係やファイル中の位置がわかるようにする
  • コマンドによるテキスト編集 ……sed
    • sedによる処理の基本
    • 行番号で処理を行う
    • 検索パターンで処理を行う
    • 行を指定する方法
    • 置き換えコマンド
    • 正規表現で文字の一部を取り出す
    • パターン全体を取り出す
  • パターン処理によるテキスト操作 ……awk
    • パターンとアクション
    • パターン(条件)の指定方法
    • BEGINとEND
    • 出力を加工する
    • 区切り文字を変更する
  • テキストエディタ ……vi(vim)

第9章プロセスとコマンドの関係

9.1 プロセスとシグナル ……[アクティビティモニタ]/top/ps/killall/kill

  • プロセスの基礎知識
    • コマンドの実行≒プロセスの開始
    • topコマンドでプロセスを表示する
    • topでコマンドが実行されている様子を見てみよう
  • 実行中のプロセスの表示 ……ps
    • プロセスID ……プロセスにはIDがある
  • プロセスと端末 ……「端末と結び付けられているプロセス」の存在
  • 親プロセスと子プロセス ……プロセスには親子関係がある
    • 親プロセスを辿る ……親プロセスのIDを調べる
  • プロセスに「シグナル」を送る
    • 「killall Finder」はFinderにシグナルを送っている
    • シグナル送信前後の「PID」の変化を見る
    • プロセスIDを指定してシグナルを送る ……kill
    • シグナルの種類
    • シグナルに対しどう動くかは受け取り手次第
  • プロセスの親子関係と起動/終了
  • 終了しているはずなのに存在している「ゾンビプロセス」

9.2 ジョブの役割 ……ジョブコントロール/jobs/fg/bg/nohup

  • ジョブコントロールの基礎知識
    • プロセスはカーネルが,ジョブはシェルが管理している
    • [control]+[Z]でジョブを一時停止する ……zshの例
    • [control]+[Z]でジョブを一時停止する ……bashの例
    • ジョブの再開
  • フォアグラウンドジョブとバックグラウンドジョブ
    • バックグラウンドジョブのメリット
    • バックグラウンドジョブとして起動する ……findコマンドをバックグラウンドで実行する例
    • 複数のジョブを切り替える
    • [control]+[C]でジョブを終了させる
    • バックグラウンドジョブと親プロセスの終了 ……nohup

9.3 システムの再起動とシャットダウン ……reboot/halt/shutdown

  • システムの再起動とシャットダウン ……reboot,halt
  • タイミングを指定した再起動とシャットダウン ……shutdown
    • シャットダウンや再起動のタイミングを指定する
    • シャットダウンや再起動を中止する

第10章システムとネットワーク

10.1 システム環境設定 ……[システム情報]/system_profiler/systemsetup/defaults

  • システムのバージョン情報の表示 ……sw_vers,uname
  • システムの詳細情報の表示 ……system_profiler
  • インストールされているアプリケーションの名前,バージョン,場所の表示
    • システム環境設定
  • システムの環境設定の変更 ……systemsetup
  • アプリケーション設定の一覧表示/操作 ……defaults
    • ドメインを一覧表示する ……defaults domains
    • ドメインのキーを一覧表示する ……defaults read
  • プロパティリストの表示/操作 ……plutil
    • アプリケーションの設定をデフォルトに戻す
  • 自動起動や定期実行の設定 ……launchctl
    • 現在ロードされているサービスを表示する❶ ……launchctl list
    • 現在ロードされているサービスを表示する❷ ……launchctl print
    • システムのサービスを表示する
    • ユーザのサービスを表示する
    • 詳細情報から設定ファイルと実行コマンドを探す

10.2 ネットワーク設定 ……[ネットワーク]/ifconfig/networksetup/scutil/hostname/ping

  • ネットワーク設定とインターネット接続の基礎知識
    • ネットワークインターフェイス
    • IPv4とIPv6
    • ローカルIPアドレスとグローバルIPアドレス
    • グローバルIPアドレスを確認する
  • ネットワーク設定の表示/変更 ……ifconfig,networksetup
    • Wi-Fiネットワークに接続する
  • ホスト名の表示と設定 ……scutil,hostname
    • macOSの3つの名前
    • hostnameによるホスト名の表示と設定
  • 接続相手の確認 ……ping
    • pingで応答がない/応答までに時間がかかる場合

10.3 リモート接続とダウンロード ……[共有]/ssh/ssh-keygen/ssh-copy-id/ssh-add/curl

  • リモート接続 ……ssh
    • SSH接続用の公開鍵と秘密鍵の作成 ……ssh-keygen,ssh-copy-id,ssh-add
    • GitHubにSSH接続するための例
  • ファイルのダウンロード ……curl
    • リダイレクトされている場合
    • ファイルを連番で指定する

10.4 システムのメンテナンス ……[Spotlight]/mdutil/mdworker/tmutil/softwareupdate

  • Spotlight検索のインデックスの管理 ……mdutil
    • Spotlight検索&登録情報のメタデータの表示 ……mdfind,mdls
    • インデックス構築を行う ……mdworker
  • Time Machineの操作 ……tmutil
    • バックアップ先とバックアップ状況を確認する
    • バックアップからファイルを復元する
    • Time Machineバックアップとハードリンク
    • ローカルスナップショットを削除する
  • ソフトウェアアップデート ……softwareupdate

第11章Homebrew×パッケージ管理

11.1 [入門]パッケージ管理システム ……パッケージ管理の役割と主要な選択肢

  • パッケージ管理システムの役割
    • インストール
    • アップデート(更新)
    • アンインストール
  • どのようなパッケージ管理システムがあるか

11.2 Homebrewのセットアップ ……インストール/主要ディレクトリ/基本用語

  • Homebrewのインストール
    • インストールコマンドの実行
    • Homebrewの実行コマンド
    • Homebrewの更新とメンテナンス
    • Homebrewのアンインストール
  • Homebrewのディレクトリと用語
    • Homebrewのディレクトリ
    • Formula
    • Cellar
    • Cask
  • Homebrewのリポジトリ
  • Homebrewのマニュアル

11.3 パッケージのインストール/更新/アンインストール ……brew install/list/outdated/upgrade/uninstall/unlink/cleanup

  • パッケージのインストールと更新 ……brew install
    • パッケージはどのようにインストールされているか
    • パッケージはどこにダウンロードされているか
  • パッケージの更新 ……brew outdated,brew upgrade
  • パッケージのアンインストール ……brew uninstall
    • [参考]コマンドを一時的に使用不可にしたい場合brew unlink/link
  • キャッシュファイルの削除 ……brew cleanup
  • GUIアプリケーションのインストールとアンインストール ……brew cask
    • Caskのパッケージはどのようにインストールされているか

11.4 パッケージの検索と情報の確認 ……brew search/info/cat/home

  • パッケージ(Formula)の検索 ……brew search
  • パッケージ情報の確認 ……brew info/cat/home

Appendix A[基本コマンド&オプション]クイックリファレンス

A.1 macOSアプリケーションの実行と設定

  • openmacOSアプリケーションの実行
  • defaultsアプリケーション設定の一覧表示/操作

A.2 マニュアルの閲覧

  • -hヘルプの表示(コマンド全般)
  • manマニュアルを表示/検索
  • help bashのビルトインコマンドの使い方を表示 [bash]

A.3 コマンドライン環境

  • pwdカレントディレクトリの表示
  • cdカレントディレクトリの移動
  • aliasコマンドエイリアスを設定/表示
  • unaliasコマンドエイリアスを削除
  • historyヒストリ(コマンド履歴)を表示
  • fcヒストリ(コマンド履歴)を表示する,編集して実行する
  • source現在のシェルでファイルを実行
  • eval引数を連結してシェルで実行
  • typeシェルが実行しているコマンドの検索
  • whichコマンドの検索
  • whence/where/which/typeシェルが実行しているコマンドの検索 [zsh]
  • hashシェルが記憶しているコマンドのパスを確認,リセット

A.4 環境変数/シェル変数/シェルオプション

  • echo文字列の表示,変数の値の表示
  • printenv/env環境変数の表示/設定
  • export環境変数の設定
  • set/setopt/unsetoptシェルオプションの設定と表示 [zsh]
  • set/shopt シェルオプションの設定と表示 [bash]

A.5 プロセス

  • ps実行中のプロセスの表示
  • top実行中のプロセスの監視/表示
  • kill/killallプロセスの終了/再起動
  • halt/reboot/shutdownシステムの終了/再起動

A.6 rootおよびユーザ関連

  • sudoコマンドをほかのユーザとして実行
  • id/whoami/groupsユーザの識別情報を表示

A.7 ファイルシステム

  • diskutilディスクの状況の確認/修復
  • mountディスクをマウント
  • umountディスクのマウントを解除
  • dfディスクの空き領域の確認
  • duディレクトリのディスク使用量の確認
  • ddブロック単位でファイルをコピー,変換

A.8 ファイルの操作❶ ……属性やパーミッションの表示と変更

  • lsファイルリストの表示
  • stat属性の表示
  • chflagsファイルフラグの変更
  • xattr拡張属性の表示/変更
  • chmodパーミッションの変更
  • chown所有者/グループの変更
  • chgrp所有グループの変更
  • touchファイルやディレクトリの最終更新日と最終アクセス日の変更
  • fileファイルの種類の確認

A.9 ファイルの操作❷ ……コピー,削除

  • mkdirディレクトリの作成
  • rmdir空のディレクトリの削除
  • rmファイルやディレクトリの削除
  • mvファイルやディレクトリの移動/名前の変更
  • cpファイルやディレクトリのコピー
  • lnシンボリックリンクの作成
  • rsyncディレクトリの同期

A.10 ファイルの操作❸ ……検索

  • findファイルの検索
  • mdfindSpotlightを利用したファイルの検索
  • dot_cleanリソースフォークを削除する

A.11 ファイルの操作❹ ……圧縮,展開

  • zipZIP形式での圧縮
  • unzipZIPファイルの展開
  • tarアーカイブの作成/展開
  • gzip/gunzipファイルの圧縮/伸張

A.12 フィルターとテキスト処理

  • catファイルの表示/複数ファイルの連結
  • head先頭部分の表示
  • tail末尾部分のみ表示
  • more/less1画面ごとの表示
  • sayテキストの読み上げ
  • sortテキストの並べ替え
  • uniq重複行の除去/抽出
  • cut文字の切り出し
  • tr文字列の置き換え
  • iconvテキストエンコーディング(文字コード)の変換
  • wcテキストファイルの行数/単語数/文字数
  • diffテキストファイルの比較
  • grep文字列の検索
  • sedコマンドによるテキスト編集
  • awkパターン処理によるテキスト操作
  • vi(vim)テキストエディタ

A.13 システムの情報/メンテナンス

  • sw_vers/hostinfomacOSのバージョンとシステムの情報の表示
  • unameカーネルの名前やバージョンを表示
  • dateシステム時刻の表示と設定
  • system_profilerシステムの詳細な情報を表示
  • systemsetupシステムの設定を表示/変更
  • launchctl 自動実行/定期実行の設定を行う
  • plutilプロパティリストの表示/操作
  • mdutilSpotlightのインデックスの管理
  • tmutilTime Machineの操作
  • softwareupdateソフトウェアアップデート

A.14 ネットワーク

  • scutilホスト名の表示/設定
  • hostnameホスト名の表示/設定
  • ifconfigネットワーク設定の表示
  • networksetupネットワーク設定の表示/変更
  • ping接続相手の確認
  • route/tracerouteネットワークの「経路」を表示
  • nslookup接続先のIPアドレスとドメインを調べる
  • arpIPアドレスとMACアドレスの対応を調べる
  • netstat現在の通信状態を調べる
  • sshセキュアな通信によるリモート接続
  • ssh-keygen公開鍵と秘密鍵の作成
  • ssh-copy-id公開鍵を接続先にコピー
  • scpリモートマシンとの間でファイルをコピー
  • curlファイルのダウンロード

A.15 Homebrew

  • brewHomebrewの操作を行う

Appendix Bコマンドラインで広がる世界

B.1 Python環境の構築 ……Homebrew&pyenv

  • macOSとPython
    • Pythonのバージョンによる違い
  • Python,pyenv,anaconda環境のインストール
    • pyenvのインストール
    • pyenvによるPythonのインストール
    • pyenv用の環境設定
    • シェルの設定ファイルに追加
    • pyenvでPythonのバージョンを切り替える❶
    • pyenvでPythonのバージョンを切り替える❷
  • pyenvによるAnacondaのインストール

B.2 macOSで簡単接続! Raspberry Pi ……セットアップ,VNC&ssh経由の操作に挑戦

  • Raspberry Piの基礎知識
    • Raspberry Pi用のOS ……Raspbianなど
  • Raspberry PiへのOSのインストール
  • [1]インストールイメージのダウンロード ……curl
    • [参考]ダウンロードが中断された場合
  • [2]ダウンロードファイルの照合 ……shasum
  • [3]ダウンロードしたZIPファイルの展開 ……unzip
  • [4]デバイス番号の確認とデバイス間のファイルの転送 ……diskutil list,dd
    • diskutil listによるデバイス番号の確認
    • ddコマンドによる転送
    • ddの途中経過を確認する
    • どのような状態で書き込まれているか
  • [5]設定ファイルの追加 ……vi(vim),touch
    • Wi-Fi用の設定ファイル
    • ssh接続を有効化するファイル
  • [6]SDカードのイジェクト ……diskutil eject
  • [7]Raspberry Piにsshでリモート接続
    • sshによる接続
    • ssh接続時のWARNING(警告)が表示された場合
  • [8]VNCによる接続のための設定 ……raspi-config
    • VNC用のパスワードの設定 ……vncpasswd
    • VNCの認証方法の変更 ……systemctl
    • 画面共有でVNC接続
    • RaspbianのデスクトップでのVNCの認証方式の変更方法
  • [9]Wi-Fiパスワードの書き換え ……wpa_passphrase
  • [10]sudoでパスワードの入力を求める設定
  • [11]suコマンドでrootユーザになる設定 ……passwd

索引

Column

  • 補完機能を積極的に使おう ……入力ミスの削減,指定ミスの発見
  • macOSとiOSの関係は?
  • Boot Campや仮想環境 ……Macで,ほかのOSも使ってみたい
  • ターミナルの「マーク」と「ブックマーク」
  • Finderでもタブ補完を使いたい!
  • フォルダではない姿で表示されるディレクトリ ……バンドル
  • [概観]macOSとUnix系OSのルートにあるディレクトリ
  • ワイルドカードと正規表現
  • macOS独自のコマンドを探す
  • sudoコマンドとsuコマンド
  • ファイル名やディレクトリ名の大文字/小文字
  • macOS Catalina(10.15)のシステムボリューム ……「rootless」,システム保護の強化,Firmlinks
  • mount/umountコマンドによるマウントとマウント解除
  • カレントディレクトリとプロンプト
  • 「.DS_Store」って何だろう ……おなじみのドットファイル(!?)
  • フォルダ名のローカライゼーション
  • フォルダの日本語名表示を試す
  • ディレクトリへのシンボリックリンクの補完方法を変更する(bash)
  • ユーザIDとグループID
  • リソースフォーク
  • ユーザの所属グループとプライマリグループ ……id(コマンド)❶,groups
  • 特別なパーミッション
  • コマンドによるコピー&ペースト ……pbcopy/pbpasteコマンド
  • ファイル名を指定するオプション,動作を決定づけるオプションの指定
  • 圧縮/伸張だけを行うコマンド
  • リッチテキスト ……textutilコマンドで標準テキストに変換
  • 実ユーザ/実グループと実効ユーザ/実効グループ ……id(コマンド)❷
  • デバイスファイルへのリダイレクト ……キャラクタスペシャルファイル,ブロックスペシャルファイル
  • ディレクトリ名だけで移動する ……AUTO_CD
  • 「**/」による再帰(zsh)
  • デフォルトのシェルの変更 ……chshコマンド
  • AppleScriptをコマンドラインで動かそう
  • 文字の置き換えと文字列の置き換え
  • タブとスペース ……expand,unexpand
  • GNU版awkによるCSVの加工
  • psコマンドのオプション ……-aとa
  • 実行中のシェルの切り替え ……exec
  • プロセス,スレッド,プロセスグループ,セッション,ジョブ,そしてタスク
  • ウィンドウアプリケーションとバックグラウンドジョブ
  • コマンドラインでアプリケーションを開く ……open
  • MACアドレス ……ネットワークのハードウェアアドレス
  • ファイル共有のプロトコル ……APFSではSMBかNFSを使用する
  • さまざまなネットワークコマンド ……nslookup,route,traceroute,netstat
  • wget ……Webサイトをまるごとダウンロードする
  • 「サービスプロセス」とlaunchdの役割
  • 「ライブラリ」と「依存関係」
  • Homebrewの用語 ……Cellar,Formula,Cask
  • ソースコードからのインストール
  • GPLとBSDライセンス
  • 著者プロフィール

    西村めぐみ(にしむらめぐみ)

    1990年代,生産管理ソフトウェアの開発およびサポート業務/セミナー講師を担当。書籍および雑誌での執筆活動を経て㈱マックス・ヴァルト研究所に入社,マーケティングリサーチの企画および実査を担当。その後,PCおよびMicrosoft Officeのeラーニング教材作成/指導,新人教育にも携わる。おもな著書は『図解でわかるLinuxのすべて』(日本実業出版社),『シェルの基本テクニック』(IDGジャパン),『Accessではじめるデータベース超入門[改訂2版]』(技術評論社)など。


    新居雅行(にいまさゆき)

    ライフマティックス㈱勤務,システム開発,コンサルティング,トレーニングを主業務とする。iOS,macOS,サーバ,データベース,FileMaker,Webアプリケーションがおもなフィールド。DB連動Webアプリケーション向けのフレームワーク「INTER-Mediator」の開発者。代表的な著作は1990年代の『Macintoshアプリケーションプログラミング』(上下巻,ディ・アート)など。電気通信大学大学院修了。博士(工学)。