環境構築初級10分で読めます

macOSにHomebrew経由でGNU Coreutilsを導入する

macOSに標準搭載されているBSDコマンドはLinuxのGNU版と挙動が異なります。Homebrewを使ってGNU coreutilsを導入し、Linux互換のターミナル環境を構築する方法を解説します。

macOSのコマンドがLinuxと異なる理由

macOSはBSD Unixをベースに構築されており、コマンドラインツールもBSDプロジェクト由来です。LinuxのGNUツールとは別物です。基本的な使い方は同じですが、オプションやフラグの細部に違いがあります。

代表的な違いを見てみましょう。

コマンドGNU(Linux)BSD(macOS)
sedの直接編集sed -i 's/old/new/' filesed -i '' 's/old/new/' file
lsのカラー表示ls --color=autols -G
日付の計算date -d '2 days ago'date -v-2d
シンボリックリンクの解決readlink -f path非対応(grealpath が必要)

Linuxベースのチュートリアルやコースでターミナルを学ぶ場合、Mac上にGNUツールを入れておけば同じように動作します。

Homebrewのインストール

HomebrewはmacOSの標準的なパッケージマネージャーです。すでにインストール済みの場合は、次のセクションに進んでください。

1

ターミナルを開く

アプリケーション > ユーティリティ から ターミナル.app を開くか、Spotlight(Cmd + Space)で「ターミナル」と検索します。

2

Homebrewインストーラを実行する

以下のコマンドを貼り付けてEnterを押します。

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

画面の指示に従ってください。macOSのパスワード入力を求められる場合があります。

3

インストールを確認する

brew --version

バージョン番号が表示されれば、Homebrewの準備は完了です。

NOTE

Apple Silicon Mac(M1/M2/M3/M4)ではHomebrewは /opt/homebrew/ にインストールされます。Intel Macでは /usr/local/ になります。インストーラが正しいパスを案内します。

GNU Coreutilsのインストール

1

coreutilsパッケージをインストールする

brew install coreutils

lscatcpmvsortdate などのGNU版がインストールされます。既存のBSDツールとの競合を避けるため、デフォルトでは g プレフィックス付きの名前になります(例:ls の代わりに gls)。

2

GNUツールをPATHに追加する

GNU版を(g プレフィックスなしで)デフォルトとして使うには、gnubinディレクトリをPATHの先頭に追加します。

zsh(現在のmacOSのデフォルトシェル)の場合:

echo 'export PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"' >> ~/.zshrc
source ~/.zshrc

bash の場合:

echo 'export PATH="$(brew --prefix coreutils)/libexec/gnubin:$PATH"' >> ~/.bash_profile
source ~/.bash_profile
3

動作を確認する

ls --version

出力に GNU coreutils と表示されていれば、GNU版がデフォルトになっています。「illegal option」というエラーが出る場合は、PATHの変更が反映されていないので、新しいターミナルウィンドウを開いてみてください。

その他のGNUツールのインストール

Coreutilsは基本をカバーしますが、他にもBSD/GNUの違いがあるツールがいくつかあります。以下もインストールしておくと便利です。

brew install gnu-sed    # GNU sed('' なしで直接編集可能)
brew install grep       # GNU grep(--color、-P でPerl正規表現対応)
brew install findutils  # GNU find、xargs、locate
brew install gawk       # GNU awk
brew install gnu-tar    # GNU tar

これらも g プレフィックスなしで使うには、gnubinディレクトリをPATHに追加します。

# ~/.zshrc または ~/.bash_profile に追加
export PATH="$(brew --prefix gnu-sed)/libexec/gnubin:$PATH"
export PATH="$(brew --prefix grep)/libexec/gnubin:$PATH"
export PATH="$(brew --prefix findutils)/libexec/gnubin:$PATH"
export PATH="$(brew --prefix gawk)/libexec/gnubin:$PATH"
export PATH="$(brew --prefix gnu-tar)/libexec/gnubin:$PATH"
NOTE

これらのPATH設定行はまとめてシェル設定ファイルに追加できます。編集後、source ~/.zshrc を実行する(または新しいターミナルを開く)と変更が反映されます。

解消される主な違い

GNUツールを導入すると、以下の一般的な問題が解消されます。

sedの直接編集

# GNUのsedなら、LinuxでもmacOSでも同じ書き方でOK
sed -i 's/foo/bar/' file.txt

macOSで -i の後に '' を付ける必要がなくなります。

日付の計算

# GNU date — LinuxでもmacOSでも同じ
date -d '2 days ago' +%Y-%m-%d
date -d 'next friday' +%Y-%m-%d

grepの拡張正規表現

# GNU grep は -P(Perl互換正規表現)に対応
grep -P '\d{3}-\d{4}' contacts.txt

BSDツールに戻すには

元のBSD版を使いたい場合は、フルパスで直接実行できます。

/usr/bin/sed    # BSD sed
/usr/bin/grep   # BSD grep

完全に元に戻すには、PATHからgnubinディレクトリを削除してください。

次のステップ

GNUツールの導入により、macOSのターミナルがLinuxと同じ挙動になりました。Linux向けに作られたチュートリアルやガイド、コースがそのまま動作します。WebTerm Learnのインタラクティブコースも同様です。

関連コース

実際に手を動かして学んでみませんか?

関連記事

記事一覧に戻る