lsのようなシステムコマンドはどのように作成されますか?


19

* nixに関して疑問があります。

  • ls.sh、.ksh、または他の種類のシステム実行可能ファイルであるかどうか、実行可能ファイルのタイプがわからない場合、それは何ですか?

  • 私はのソースコードであるかを確認しようとしたときlsのようなコマンドに見える、それが読めないこれらの種類のファイルを作成するために、* nixの使用を何方法、読めない何かを示していて、私は(のように、これらのファイルへの私のファイルは、同様のことができますls-読めません)。



4
それは、dupよりも上のURLに関連していると思います。
slm

回答:


31

fileコマンドとコマンドを使用して、Unixの実行可能ファイルの性質を判別できtypeます。

タイプ

次のtypeようにして、ディスク上の実行可能ファイルの場所を決定します。

$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls

だから、私は今、それlsが私のシステムの2つの場所にあることを知っています:/usr/bin/ls/bin/ls。これらの実行可能ファイルを見ると、それらが同一であることがわかります。

$ ls -l /usr/bin/ls /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /bin/ls
-rwxr-xr-x. 1 root root 120232 Jan 20 05:11 /usr/bin/ls

注:cmpまたはを使用して、サイズが同じであることを確認できますdiff

差分あり
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
cmpを使用
$ cmp /usr/bin/ls /bin/ls
$ 

使用ファイル

fileコマンドを使用してそれらを照会する場合:

$ file /usr/bin/ls /bin/ls
/usr/bin/ls: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped
/bin/ls:     ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=0x303f40e1c9349c4ec83e1f99c511640d48e3670f, stripped

したがって、これらはC / C ++からコンパイルされた実際の物理プログラムになります。シェルスクリプトの場合、通常は次のように表示されfileます。

$ file somescript.bash 
somescript.bash: POSIX shell script, ASCII text executable

ELFとは何ですか?

ELFはファイル形式であり、などのコンパイラの出力であり、などのgccC / C ++プログラムをコンパイルするために使用されますls

コンピューティングでは、Executable and Linkable Format(ELF、以前はExtensible Linking Formatと呼ばれていました)は、実行可能ファイル、オブジェクトコード、共有ライブラリ、およびコアダンプの一般的な標準ファイル形式です。

通常、ファイル名には次の拡張子のいずれかがあります:none、.o、.so、.elf、.prx、.puff、.bin


@lgeorget -どのタイプの対使用上のヒントについては、このQ&Aを参照してください:unix.stackexchange.com/questions/85249/...を。一般的typeには、whichまたはを使用したい場所で使用することをお勧めしますwhereis
slm

3
さらに、GNUツールのために、ソースコードは自由に利用可能である、であなたの検索を開始gnu.org/software
グレン・ジャックマン

同一のテストでは、ファイルサイズと時間をチェックするだけでなく、md5sumまたはのようなものを実際に使用する必要がありsha1sumます。
ボブ14年

@Bob-これらのファイルは同一であり、Qとは何の関係もないため、簡単な方法を示しました。ファイルを比較するには、バイナリファイルを比較するためのcmpなどのより適切なツールを使用します。また、提供されているパッケージを確認すると、それらが関連しているかどうかがわかります。それらは両方の一部でcoreutils-8.21-13.fc19.x86_64あり、Red Hatリリースを扱った20年間で同一であることを知っています。
slm

@Bob-ファイルを比較する例の更新を参照してください。
slm

9

これはバイナリ実行可能ファイルです(ほとんどのシステムと同様に、マシンコードにコンパイルされます)。シェルスクリプトは、パーツを結合して既存のものから迅速かつ柔軟にソリューションを作成する「接着剤」に似ています。それが* nixの力です。

コンパイルされた実行可能ファイルだけでなく、ソースコード(c、場合によってはc ++、* nixで最も一般的な言語)が必要です。オープンソースなので、すべてのコードをオンラインリポジトリから取得できます(コアユーティリティは通常gnuプロジェクトから取得されます)。ただし、gitまたは他のバージョン追跡システムの使用方法がわからない場合は、少し注意が必要です。

それは場合に役立ちます。ここls.cファイルは、次のとおりです。 http://git.savannah.gnu.org/cgit/coreutils.git/tree/src/ls.c


ああ、バイナリアプリケーションの作成方法に関する質問を明確にするために:無数のプログラミング言語から選択します(Python、java、javascriptなど、従来はスタンドアロンの実行可能ファイルを生成しない、解釈または半解釈されるカップルを除く)バイナリーファイル)。次に、その言語の使用方法とコンパイル方法を学びます。
オリオン14年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.