web-dev-qa-db-ja.com

LinuxコマンドとスクリプトをCygwinで動作させるにはどうすればよいですか?

フォローアップの質問で戻ってきました。 LinuxコマンドをCygwinで動作させるにはどうすればよいですか?最初に、WindowsでLinuxスクリプトを実行するためにどのツールを使用すればよいかを尋ねました。Cygwinを提案し、それに加えていくつかのパッケージをインストールしました。現在、iostat、free、ifconfigなどのLinux環境で使用するいくつかのコマンドを試していますが、機能しません。だから私の質問は:

  1. 一部のコマンドが機能しないのはなぜですか?
  2. スクリプトはどこに置くべきですか?また、拡張子が.batである必要がありますか、それとも拡張子.shを保持する必要がありますか?

みんなありがとう!私はあなたがこれで私を助けてくれることを本当に望んでいます。

3
endlesslearning

まず、用語を明確にしておきましょう。

  • Linux =オペレーティングシステムカーネル
  • Linuxディストリビューション= Linuxカーネル+ユーザースペースユーティリティ(bash、ifconfigなど)
  • Windows = NTカーネル+ユーザースペースユーティリティ
  • Cygwin =ユーザースペースユーティリティ

NTカーネルとLinuxカーネルには根本的な違いがあるため、Windowsでスクリプトが変更されずに動作しているとは数えられません。 OSカーネルにあまり固有ではないものもありますが、ほとんど同じように機能し、Bashもその1つです。一方、ifconfigはOS固有であり、 net-tools プロジェクトの一部です。このプロジェクトは、2001年以降更新されておらず、2004年以降非推奨になっています。cygwinバージョンがあると思います。 ifconfigの場合、構成を更新することはおそらく機能しないでしょうが、それを印刷することは問題なく機能するはずです。ブライアンC.はそれがインストールされていることを確認する方法を指摘しています。

2番目の質問については、Bashからスクリプトを開始する限り、拡張子は重要ではありません( 実行権限 および シバン行 に依存します)。ただし、Bashの外部から開始する場合は、.shで終了することをお勧めします(詳細については、 この回答 を参照してください)。

3
mkalkov

Linux ifconfigは、Windowsでは(大まかに)ipconfigコマンドに変換されます。 Cygwin-inside-Windowsでは、PATH =に沿ったバッチファイルや追加のユーザー追加プログラムを含む、Windowsプログラムの全範囲にアクセスできます。

c:\ windows\system32\ipconfig.exeプログラムである "ipconfig.exe/all"を試してください。
実際には/ cygdrive/c/Windows/System32/ipconfig.exe

はい、これはifconfigの理想的な代替ではありません

Cygwin.comの真のifconfigが見つかるまで、次のことを試してください。
エイリアスifconfig =/cygdrive/c/Windows/System32/ipconfig.exe

マシンのIPアドレスを取得します。
ipconfig.exe -all | grep -i "IPv4アドレス" | head -n 1
これをsed/awkして、IPアドレスのみを取得できます。

2
Ajax4Hire

最初に。一部のLinuxシステムレベルモニターは、エミュレーションレイヤーで実行しているため、Windowsネイティブバージョンのコマンド(使用可能な場合)よりも正確な結果が得られない可能性があるため、存在しません。

次に、これらのコマンドを含むパッケージがインストールされていることを確認します。詳細については、 Cygwinパッケージリスト を検索してください。コンパイル済みのビルドが利用できない場合は、Cygwin内からコマンドをコンパイルする必要がある場合があります。

質問の2番目の部分については、これらがbashスクリプトの場合は、.sh拡張子を使用してください。それらはどこからでも実行できますが、Windowsコマンドプロンプトからではなく、Cygwinシェルから実行する必要があることに注意してください。もちろん、実行を許可するためにアクセス許可を修正する必要がある場合もあります。

1
Bryan C.

さまざまなLinuxバージョンでさえ互いに互換性がありません。たとえば、プログラムをインストールできます。 apt-getとLinuxの1つのディストリビューションは、あるデポジトリからプログラムを取得し、別のディストリビューションは別のデポジトリからプログラムを取得しますが、プログラムに違いがある可能性があります。 sshのようなプログラムは、構成ファイルを/ etc/sshに保存する場合もあれば、Linuxシステム上でどこにあるかを確認する必要がある/ etcだけに保存​​する場合もあります。

また、構成方法によっては1つのLinuxバージョンであっても、スクリプトは両方と互換性がない場合があります。たとえば、Debian(そして間違いなくDebianだけでなく)では、「mail」コマンドは1つのメールプログラムを実行しますが、別のメールプログラムを実行するように構成できます。メールプログラムが異なれば、パラメータも異なります。

そして、どのプログラムをインストールしたかという問題があります。スクリプトがインストールされていないプログラムにアクセスすると、スクリプトは機能しません。これはcygwinまたはlinuxに適用されます。そして、それはほんの小さなプログラムかもしれません。

そしてLinuxにはさまざまなシェルがあります。また、シェルを通常とは異なる方法で構成することもできます。たとえば、* include .および.. か否か。 Linuxは、明らかに想像もしていなかった複雑さの海にあなたを開きます。

.batと.shのどちらをうまく使うかという質問について。単純なcmd.exeno cygwinで実行している場合、スクリプトは.batになります(インタープリターとして機能する別のプログラムへのパラメーターとして実行される場合もありますが、他のスクリプトまたはプログラムもあります)cygwin内で実行している場合拡張機能は何も変更しません。

スクリプトを使用する前に、スクリプトについて少し考えて、知っておく必要があります。それがウェブサイトからのワンライナーであるならば、それがどのように機能するかについて少なくとも何かを知ることは合理的です。物事を完全に盲目的に実行しないでください。ダウンロードした複雑なプログラムの一部である巨大なスクリプトの場合は、実行する前にスクリプトを確認することをお勧めしますが、スクリプトのすべてまたは多くを理解していなくても大丈夫かもしれません。 Linuxは複雑さで気を散らすことがありますが、複雑さを回避することはお勧めしません。 「a」が「b」と互換性があるかどうかを尋ねるのは、特定のケースに直面したときに、ディストリビューションまたはcygwinに対して正しい方法で実行していることを確認した場合に、より役立つ回答が得られる可能性がある一般的な質問です。 。取得元のreadmeまたはWebサイト、あるいはインストールファイルに記載されているはずです。それぞれが独自のやり方を持つことができます。

0
barlop