久々にというか十何年ぶりにMacのOSがメジャーアップデートされ新しくなりました(macOS Big Sur。今回からバージョン11に)。Macはこれまでも何度も大きなOSの変更を行ってきたので、それからすると今回は無茶苦茶変わった、という感じではなさそうです(System6(漢字Talk)→7に近い感じ? MacOS 9→MacOS Xよりは変わってない感じでしょうか。CPUがIntelからAppleシリコンに変わった方が話題性があったようです。ちなみに、この原稿はM1 Chip搭載のMacBook Airで書いてます)。

追加されたコマンドを調べる

OSがバージョンアップされると気になるのが追加・削除されたコマンドです。もちろんコマンド自体がバージョンアップしていることもありますが、とりあえず追加・削除されたコマンドがわかればOKです。ということで今回はなんとなく標準で用意されているコマンドを使って追加・削除されたコマンドを調べてみます。

コマンドがある場所

 まず、Macで使えるコマンドは以下の場所にあります。/はディレクトリ(フォルダ)の区切り記号です。

/bin
/sbin
/usr/bin
/usr/sbin
/usr/local/bin
/usr/local/sbin

 sbinという名前のディレクトリは管理者用のコマンドが入っています。今回は管理者およびユーザーが追加したコマンド(/usr/local/bin)はチェックしません。ですので、今回チェックするのは/binと/usr/binの2つのディレクトリ内にあるコマンドということにします。もちろん、気が向いたらsbin内も同様に調べてみるとよいでしょう。

ディレクトリ内のファイルを表示

 コマンドはディレクトリ内にあるので、ディレクトリ内を表示するコマンドを使えばOKです。ディレクトリ内を表示するコマンドはlsです。lsの後に内容を表示したいディレクトリ名(ディレクトリパス)を指定します。まずは/binのディレクトリ内容を表示してみます。以下のように入力してリターンキーを押せばOKです。

ls /bin
  • Big Surでの結果

    Big Surでの結果

  • catalinaでの結果

    catalinaでの結果

/binに入っているコマンドは少数です。少ないので表示されたコマンドを手作業で比較しても問題ないほどです。どうやら見た目だけでもBig Surとcatalinaには同じ名前、同じ数だけコマンドがあるのがわかります。

同じだと連載のネタにならないので次の/usr/binディレクトリ内を調べてみます。この場合はlsの後に/usr/binを指定します。以下のように入力してリターンキーを押せばOKです。

ls /usr/bin
  • Big Surでの結果

    Big Surでの結果

  • catalinaでの結果

    catalinaでの結果

どうもコマンドが多すぎて表示しきれないようです。ですが、ターミナル.appはスクロールバー部分をドラッグすればさかのぼって見ることができます。気合いを入れてチェックすればできなくもありません。が、コンピューター系では根性論は、どちらかというとご法度みたいな雰囲気もなきにしもあらずなので気合いでチェックするのは無しにしましょう。

何にしても、この状態ではBig Surとcatalinaのコマンドの差異を確認するのは面倒です。そこで、それぞれのOSでlsコマンドの結果をテキストファイルに保存しておいて比較することにします。

テキストファイルとして保存

 UNIXのシェルにはリダイレクトという便利な機能があります。これを利用すると簡単に出力結果をファイルに保存することができます。出力をリダイレクトするには>記号を使います。

 以下のように入力するとls /usr/binの出力がデスクトップ上にcommand.txtという名前でテキストファイルが保存されます。

ls /usr/bin > ~/Desktop/command.txt

 catalinaでも同様にコマンドを入力しますが、コマンドを比較するので異なるファイル名にしておきます。

ls /usr/bin > ~/Desktop/command_10.15.txt

 テキストファイルにしてしまえば、あとはテキストエディタやエクセルに流し込んで比較することができます。

 比較したいところですが、これではどこが違うのか把握しにくいというのはあります。エクセルで頑張って比較して違うコマンドだけ色をつけるという事も可能ですが面倒です。

2つのテキストファイルの差異をチェック

 実はdiffという2つのテキストファイルを比較できる便利なコマンドがあります(ちなみにdiff3という3つのファイルを比較するのもあります)。以下のようにdiff -yの後に比較する2つのファイル名(ファイルパス)を指定します。異なる部分には不等号記号の><が表示されます。

diff -y command.txt command_10.15.txt

 差異が表示されたのはいいのですが、まとめて表示されてしまうので、どこが違うのかはターミナル.appのスクロールバーを操作してチェックしないといけません。これは、やはり面倒です。ということで、ここでは1ページずつ表示するコマンドを使います。1ページずつ表示するコマンドはlessmoreがあります。

 UNIXではパイプによってコマンドの結果を次のコマンドにつなげることができます。パイプの記号は|です。以下のようにするとdiffコマンドの出力結果をlessに渡してくれます。

diff -y command.txt command_10.15.txt | less

 先ほどのdiffだけの実行結果と違って今度は表示が止まったままです。lessはカーソルキーの上下で1行ずつスクロールすることができます。

 スペースキーを押すと次のページに進みます。fキーでも同様です。ちなみに前のページに戻るにはbキーを押します。

 ページの最後までいくと図のように(END)と表示されます。lessを終了させるにはqキーを押します。

 ちなみにlessの代わりにmoreを使っても同じです。

 画面に出力して比較するのではなくファイルに保存して、テキストエディタでゆっくり比較したい、とりあえず結果としてファイルで残したい場合は以下のようにリダイレクトしてファイルに保存してしまえばOKです。

diff -y command.txt command_10.15.txt > ~/Desktop/d.txt

Ubuntuの場合

 UbuntuもUNIX系ですので、同じようにコマンドを使うことができます。Ubuntuなら色分けしてくれるcolordiffを入れた方が分かりやすくていいかもしれません。Ubuntu 20には標準では入っていませんので、以下のようにしてインストールします。

sudo apt install colordiff

 インストールしたらcolordiffというコマンドを入力します。diffと同様に

 colordiff -y command.txt command_10.15.txt

と入力すると2つのファイル内容を色分けして表示してくれます。

 moreを使ってページ単位でチェックすることもできます。

PowerShellの場合

 Windowsに標準で入っているPowerShellでもdiffを使うことができます。ただ、diffの後に直接ファイル名(ファイルパス)を指定しません。PowerShellではファイルの内容を出力して比較するのでcatを使います。catはGet-Contentのエイリアスになっているのでcatの代わりにGet-Contentと書いても同じ結果になります。が、長いので結局catを使うことになるかと思います。

diff (cat '.\command.txt') (cat '.\command_10.15.txt')

 実行すると=>や<=という記号が表示されますが、これはどちら側が違っているかを示しています。=>なら右側のファイルに違いがある、<=なら左側のファイルに違いがあるということです。

 PowerShellのdiffも実行すると表示が流れてしまい最後の部分しか表示されません。PowerShellでもページ単位で表示するmoreを使うことができます。以下のように|記号を使って書きます。PowerShellでも|はパイプ記号となっています。

diff (cat '.\command.txt') (cat '.\command_10.15.txt')|more

 次のページに表示を進めるにはスペースキーを押します。表示を終了するにはqキーを押します。

 出力結果をファイルに保存してゆっくり見比べるのもよいかもしれません。その場合はリダイレクト記号の>を使ってファイルに出力結果を保存します。以下のようにするとカレントディレクトリ(現在のディレクトリ)にlist.txtという名前のテキストファイルが保存されます。

diff (cat '.\command.txt') (cat '.\command_10.15.txt') > list.txt

 PowerShellのdiffはCompare-Objectのエイリアスになってます。ちなみにリファレンスは以下にあります。頑張ればUNIXのdiffのように見やすくできるらしいのですが・・・。今回はそこまでやる根性がないのと、元々macOSのBig Surと、それ以前のOSのコマンドの違いを見たいだけなので、ここまでということにしておきます。

https://docs.microsoft.com/ja-jp/powershell/module/microsoft.powershell.utility/compare-object?view=powershell-7.1

著者 仲村次郎
いろいろな事に手を出してみたものの結局身につかず、とりあえず目的の事ができればいいんじゃないかみたいな感じで生きております。