見出し画像

もっとMacOSやLinuxと仲良くなりたい

先日「シグナル 長期未解決事件捜査班」が面白かったという話になって、元になった韓国のドラマ「シグナル」も気になっていたのを思い出したのでNetflixで観始めてしまいました。韓国版は事件にリアリティがあって、オリジナルの力というか凄みを感じます。さて、今日はLinuxのしくみを理解するために、いろいろ試します。

MacOSやLinuxと仲良くなるには

先月使い始めたMacに開発環境を作ったつもりが、コードを修正して実行しようとしたらインストールしたはずのNode.jsがない状態で実行できなかったのです。改めて環境を作り直したんですが、その中で「MacOSやMacのファイルシステムのことがわかっていない」ことに課題を感じました。何とかしたい。

シンボリックリンク!

Node.jsをインストールするために、nodebrewを使っています。Node.jsをインストールしたあと、nodebrew use v22.1.0 を何度実行してもcurrentに反映されなかったんです。(前回は、できたのに!)

% nodebrew ls

v22.1.0
current: none

.zshrcや.zprofileにパスの設定を追加して、sourceで環境に反映できているので、他に何か定義が必要なのかも?と思って、nodebrewのソースのuseコマンドを見ることにしました。すると、currentとして、対象バージョンのnodeのシンボリックリンクを設定しているらしいことがわかりました。インストール済の複数のバージョンのnode.jsのバイナリを、どれを使うか選んだときにcurrentとして参照できるように切り替えているんですね。これはスマートなやり方だなぁ。

unlink $self->{current} if -l $self->{current};
symlink $target, $self->{current};
symlink "$self->{brew_dir}/nodebrew", $nodebrew_path unless -l $nodebrew_path;

改めて自分の環境の/Users/jnkykn/.nodebrewディレクトリを見ると、空のcurrentディレクトリがありました。シンボリックリンクではなく、mkdirで作成されたディレクトリです(まったく記憶にないのですが、自分がやらかしたことに間違いなさそうです💦)このcurrentディレクトリを削除したところ、無事にnodebrew useで使いたいバージョンが設定できました。

% nodebrew use v22.1.0
use v11.5.0
% nodebrew ls

v22.1.0
current: v22.1.0

% which node
/Users/jnkykn/.nodebrew/current/bin/node

無事に開発環境ができて、修正後の実行もできました。このとき、「シンボリックリンク」の機能は思い出せたものの、使い方などを思い出せないのは何とかしたいと思ったのです。(30年以上前までUNIX環境で仕事をしていたので、その頃できていたレベルまで復旧したいきもち)

MacOSとLinuxって似ていますよね?

さて、MacOSを使いこなしたいと思いつつ、私物のPCはWindows11です。コードを書くときは、いつもWSL2(Ubuntu 20.04)を使っています。Mac OSってLinuxと近いんじゃなかったっけ?と思ったら、「MacはLinuxだった」って本当? 「そうだね……」元Mac雑誌編集者は昔語りを始めたによると、UNIX系には違いないもののLinuxではなく、Darwinという別のUNIX系OSがベースになっているそうです。それでも、Ubuntuともっと仲良くなれれば、MacOSとも仲良くなれるのでは!?と思いました。

試してLinuxのしくみを理解するという野望

さて、「やみくもに何かを試すよりも、道しるべがあると学習しやすい」と考えたときに、「試して理解Linuxのしくみ」が積読状態なことを思い出しました。(買って安心してしまったパターン)この機会に、しっかり学習したいと思います。というわけで、今日はGoとpythonで”hello world”と出力するために呼び出されるシステムコール数が大きく違うことを確認したり、sarコマンドで論理CPUが実行している命令の割合を知ることができるのを確認したりしました。

$ sar -P 0 1 1
Linux 5.15.146.1-microsoft-standard-WSL2 (JunkosX1)     05/12/24        _x86_64_        (8 CPU)

16:42:49        CPU     %user     %nice   %system   %iowait    %steal     %idle
16:42:50          0      0.00      0.00      1.98      0.00      0.00     98.02
Average:          0      0.00      0.00      1.98      0.00      0.00     98.02

まとめ

今まで、Ubuntuを使うことはあっても、実行に必要なライブラリをインストールしたり、ビルドしたりという浅い使い方しかしていませんでした。「試して理解Linuxのしくみ」の冒頭に書かれているとおり、1つ下のレイヤーまでの理解にとどまっていたのです。このままだと、トラブルシュートもできなさそうなので、OSについても理解する努力をしていきたいと思います。MacOSとファイルシステムについては、他の教材を探さなくては。
今週はここまでで、終わります。次回は、また次の週末に何かを試す予定です。

この記事が気に入ったらサポートをしてみませんか?