Unix実行可能ファイルを読み取るための基本的な方法(追加の項目をインストールまたはダウンロードせずに)はありますか?ファイルを読んで内容を確認し、そのファイルで何ができるかを理解するだけです。
私が本当にやりたいことは、ワイヤレス診断アプリが何をしているのかを理解することです。どのようにそれをしました。私はMac用のネットワーク診断アプリケーションを自分で構築しようとしています。そこで、ワイヤレス診断アプリケーション(場所:/System/Library/CoreServices/Applications/Wireless Diagnostics.app)の内容を読みたかったので、アプリケーションで実行可能ファイルを見つけて何でも収集できることを確認しました。それが私が取り除きたいものです。
答え1
シェルプロンプトで実行できるコマンドについて話している場合は、マニュアルページが必要です。
$ man someprogram
このような結果が出たら、No manual entry for foo
GNUを試してみてくださいinfo
。
$ info someprogram
すべてのUnixおよびUnixファミリのオペレーティングシステムにGNU情報があるわけではありませんが、多くのオペレーティングシステムにGNU情報があり、通常は基本ページman
よりも特定のコマンドに関するより多くの情報を提供します。
コマンドがあり、info
コマンドがわからない場合は、No menu item 'someprogram' in node '(dir)Top'
画面下部のような内容が表示されます。Q終了をタップしますinfo
。
このようなシステムでは、プログラムは通常、一部のパッケージマネージャが所有するか、パッケージマネージャにプログラムを要求することができる。たとえば、に興味があり、someprogram
そのコマンドでシェルを使用しているとしますwhich
。後者が利用できない場合は、実行可能ファイルへのパスを手動で提供できます/usr/bin/someprogram
。
RPMベースのLinux(RHEL、Fedora、CentOS ...)
まず、プログラムが属するパッケージを探します。
$ rpm -qf `which someprogram`
somepackage-1.2.3-4
その後、RPM にパッケージをリクエストします。
$ rpm -qi somepackage
Name : somepackage
Version : 1.2.3
Release : 4
...etc...
DEBベースのLinux(Debian、Ubuntu、Mint...)
このモードはRPMと同じです。まず、ファイル所有者が誰であるかを確認してください。
$ dpkg -S `which someprogram`
somepackage: /usr/bin/someprogram
次に、パッケージ自体について尋ねます。
$ dpkg -s somepackage
Package: somepackage
Essential: no
Status: install ok installed
...etc...
Mac OS X
「基本」OS Xパッケージマネージャは、あらゆる目的には役に立ちませんが、試してみる価値のある隠しオペレーティングシステムの機能です。パターンは上記と同じです。
$ pkgutil --file-info `which someprogram`
volume: /
path: /usr/bin/someprogram
pkgid: com.example.bundles.somepackage
pkg-version: 1.2.3
...etc...
その後、追加情報を入手してくださいsomepackage
。
$ pkgutil --pkg-info com.example.bundles.somepackage
$ pkgutil --files com.example.bundles.somepackage
...etc...
サードパーティのパッケージマネージャのいずれかをインストールした場合(自分で作った、Macポートまたはファンキージャズ)自分が所有するパッケージに関する情報を取得するための同様のコマンドがあります。
これらのシステムの外部にインストールされたプログラムを扱っている場合は、おそらく内部メカニズムを使用して自分自身についてのすべてを知らせるGUIプログラムを扱っています。 (箱、ヘルプなどについて)
FreeBSD
伝統的に、BSDは公式パッケージマネージャを使用していませんでしたが、過去数年間、FreeBSDはゆっくり使用する方向に進んでいます。pkg
、PkgNGとも呼ばれます。
また、上記のシステムと使用パターンは同じです。
$ pkg which `which someprogram`
/usr/bin/someprogram was installed by package somepackage-1.2.3-4
$ pkg info somepackage
somepackage-1.2.3-4
Name : somepackage
Version : 1.2.3-4
...etc...
おそらくいつかFreeBSDシステムにインストールされているほとんどのプログラムがインストールに合格するでしょうがpkg
、今日はそうではありません。
プログラムでインストールした場合ポート、インストールされているポートを確認することができます。
$ cd /usr/ports
$ ls -d */somepackage
net/somepackage
$ cat net/somepackage/pkg-descr
答え2
od -tx1 somefile | less
ファイルのバイナリ(16進数)ダンプを参照できます。ファイルに何があるのかを教えてくれますが、もちろん人が読める言語になっているわけではありません。通常、バイナリ実行可能ファイルは人間が読み取ることができません。ほとんどの人は台本を読むことができません。
さまざまな方法で実行可能ファイルから情報を取得できます。
file myprogram
どのタイプのマシンに適しているかなど、どのタイプのファイルであるかを教えてくれます。./myprogram --help
一部の使用情報が表示されることがあります。ただし、これはプログラムの作成者が遵守することも、遵守しない場合もある契約ではありません。これが有効なオプションではないと./myprogram --help
文句を言う場合、 、 または引数なしでプログラムを実行するなどの他のオプションを提案できます。--help
./myprogram -h
./myprogram -help
./myprogram -?
ldd myprogram
、動的にリンクされた実行可能ファイルの場合、ロードされるライブラリを通知します。strings myprogram
ファイルの ASCII 印刷可能文字で構成されるすべてのビットをリストします。これはすべて意味があるわけではありません。ファイルには、印刷可能な文字であるバイトシーケンスと意味のある文字列を区別するものがないためです。objdump -d myprogram
実行可能ファイルを分解するか、少なくとも試してください。
実際、期待する情報を得ることができる魔法のような方法はありません。 (myprogram --help
この特別な場合の出力が要件を満たさない限り)存在しません。実行可能ファイルは、人間ではなくコンピュータが読めるように作成されています。