Anda dapat menentukan sifat suatu executable di Unix menggunakan file
perintah dan type
perintah.
Tipe
Anda menggunakan type
untuk menentukan lokasi yang dapat dieksekusi pada disk seperti:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
Jadi sekarang saya tahu bahwa ls
ini terletak di sistem saya di 2 lokasi: /usr/bin/ls
& /bin/ls
. Melihat itu executable saya bisa melihat mereka identik:
$ 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
CATATAN: Anda dapat mengonfirmasi bahwa mereka identik di luar ukurannya dengan menggunakan cmp
atau diff
.
dengan diff
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
dengan cmp
$ cmp /usr/bin/ls /bin/ls
$
Menggunakan file
Jika saya meminta mereka menggunakan file
perintah:
$ 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
Jadi ini akan menjadi program fisik aktual yang telah dikompilasi dari C / C ++. Jika mereka adalah skrip shell, mereka biasanya menyajikan seperti ini untuk file
:
$ file somescript.bash
somescript.bash: POSIX shell script, ASCII text executable
Apa itu ELF?
ELF adalah format file , ini adalah output dari kompiler seperti gcc
, yang digunakan untuk mengkompilasi program C / C ++ seperti ls
.
Dalam komputasi, Format Eksekusi dan Linkable (ELF, sebelumnya disebut Extensible Linking Format) adalah format file standar umum untuk executable, kode objek, perpustakaan bersama, dan dump inti.
Biasanya akan memiliki salah satu ekstensi berikut dalam nama file: none, .o, .so, .elf, .prx, .puff, .bin