何らかの理由で私は、リモートLinuxサーバーを管理するためにMacbookをコンピュータとして選択します。
時々、名前は同じですが、2つのオペレーティングシステム間で異なる動作をするユーティリティに問題が発生します。
たとえば、次のようにファイルをよく見つけて、find ./ -name 'vim*' -exec stat -c "%y %n" {} \;
その情報をうまく表示します。
2015-01-08 15:14:30.000000000 +0800 ./vimrc
しかし、私のOSXでは動作しません。マニュアルを読んだ後、-f "%t%Sm %N"
結果を得るために別のフラグを使用する必要があることがわかりました。
Mar 5 18:22:00 2015 ./vimrc
このようなことは本当に面倒です。
stat
私の考えでは、ガジェットなどのLinuxバージョンがより多くの開発者の貢献をしており、継続的に更新されるため、より良いと思います。ほとんどのOSXユーザーは、これらのガジェットを使用せずにGUIを使用します。したがって、Linuxと比較して多くのデバイスがアンティークです。
私は本当にLinuxバージョンの使用を標準として扱い、OSXバージョンを維持したいと思います(触れないでください)。ところが私の頭の中ではこれが正しいわけではないという迷惑な声が聞こえた。 「問題から逃げずに直面しなければならない」、「全部学びなさい」と言いました。
UnixとLinuxでは、同じ名前を持っていますが、動作が異なるユーティリティをどのように扱うべきですか?
ベストアンサー1
これはUnixとLinuxの戦いではなく、BSDとGNUの戦いです。
どちらのシリーズもソースコード形式で提供され、両方のオペレーティングシステムのいずれかにインストールできます。 Googleで「Mac用GNU」を検索すると、Homebrewまたは他のMac OSSパッケージマネージャを使用してBSDツールをGNUバージョンに置き換える方法についての手順を含む複数のページを見つけることができます。
両方のツールセットを使用しながら気をつける方法:
私が見たほとんどの違いは、2つのキャンプに分かれています。
「追加オプション」はあなたの質問で言及されています。 GNUツールは既存のBSDおよびSystem Vツールを例として使用して作成されたため、作成者は最初から始めて、特にオプションの素晴らしい表示でいくつかの追加オプションを追加できました。 。これらのいくつかは、いくつかのツールに共通して適用されます。たとえば、多くのコマンドでは、Kilo-Mega-Giga-などの「人が読める単位」を表示するオプションを-h
許可します。-H
解析の柔軟性は、ほとんどのコマンドがgetopt
GNUバージョンでより現代的で強力なライブラリを使用しているためです。最も明白な結果は、ほとんどのコマンドが次のように文書化されていることです。
command [options] file file...
GNUライブラリを使用している場合、getopt
オプションはファイル全体に分散できます。たとえば、GNU では以下を使用できます。
ls -lt fileA fileB
または
ls -l fileA -t fileB
コマンドラインのどこにでも表示される可能性があるため、-l
同じ結果が得られます。-t
BSDシステムでは、2番目の形式でエラーが発生したり、-t
。
これらすべてを念頭に置いて、GNUツールがインストールされていないMacOSコマンドラインにある場合は、コマンド名の後にすべてのオプションを入力することを忘れないでください。 。