Unixバリアントで名前は同じですが、動作が異なるユーティリティを処理する方法は?

Unixバリアントで名前は同じですが、動作が異なるユーティリティを処理する方法は?

何らかの理由で私は、リモート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

解析の柔軟性は、ほとんどのコマンドがgetoptGNUバージョンでより現代的で強力なライブラリを使用しているためです。最も明白な結果は、ほとんどのコマンドが次のように文書化されていることです。

command [options] file file...

GNUライブラリを使用している場合、getoptオプションはファイル全体に分散できます。たとえば、GNU では以下を使用できます。

ls -lt fileA fileB

または

ls -l fileA -t fileB

コマンドラインのどこにでも表示される可能性があるため、-l同じ結果が得られます。-tBSDシステムでは、2番目の形式でエラーが発生したり、-t

これらすべてを念頭に置いて、GNUツールがインストールされていないMacOSコマンドラインにある場合は、コマンド名の後にすべてのオプションを入力することを忘れないでください。 。

答え2

Unix一つある複雑 歴史。時間の経過とともに、多くのバリエーションがさまざまなコマンドとオプションを蓄積してきました。

ほとんどのUnixファミリーシステムには、標準またはむしろ標準階層があります。POSIXおよびPOSIX + XSI(以前の名前:シングル Unix- 単一のUnixがPOSIXになり、XSI部分がオプションとして表示されます。アンティークや組み込みの実装ではなく、Unixに似たものに頼ることができます。POSIX-2004(Single Unix v3、Open Group Basic Spec Issue 6とも呼ばれる);現時点では、最新バージョン(POSIX-2008 = SUSv4 = Issue 7)は完全にはサポートされていません。

OSX(およびほとんどのOSXユーティリティのソースであるFreeBSD)と非埋め込みLinuxにのみ興味がある場合は、より多くのコマンドとオプションを使用できます。どちらも平均よりも多くの機能を備えています。両方のオペレーティングシステムでサポートされている内容を確認するには、マニュアルを確認する必要があります。

非組み込みLinuxシステム(および一部の高度な組み込みLinuxシステム)とCygwinが付属しています。牛に似た一種の栄養便利です。 GNUユーティリティは競合他社よりも便利な機能を持っていることがよくあります。

このstatコマンドはPOSIXには命令がなく、OSXにはいくつかの構文があり、GNUには機能は似ていますが、構文が異なる例です。

ほとんどのUnixバリアントにGNUユーティリティをインストールできます。 OSXの場合は、以下を参照してください。https://apple.stackexchange.com/questions/69223/how-to-replace-mac-os-x-utilities-with-gnu-core-utilities

共通コアに固執するか、どこにでも同じバージョンをインストールするかどうかは個人的な決定です。使用するすべてのマシンを制御できる場合は、必要なユーティリティがすべて揃っていることを確認してください。必要なものを常にインストールできないシステムで実行されるコードを書く場合は、移植可能な項目に固執する必要があります。

関連情報