Możesz określić charakter pliku wykonywalnego w Uniksie za pomocą file
polecenia i type
polecenia.
rodzaj
Służy type
do określania lokalizacji pliku wykonywalnego na dysku w następujący sposób:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
Teraz wiem, że ls
znajduje się tutaj w moim systemie w 2 lokalizacjach: /usr/bin/ls
i /bin/ls
. Patrząc na te pliki wykonywalne, widzę, że są identyczne:
$ 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
UWAGA: Możesz potwierdzić, że są identyczne poza swoimi rozmiarami, używając cmp
lub diff
.
z różnicą
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
z cmp
$ cmp /usr/bin/ls /bin/ls
$
Korzystanie z pliku
Jeśli zapytam je za pomocą file
polecenia:
$ 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
Byłyby to więc rzeczywiste programy fizyczne skompilowane z C / C ++. Gdyby były to skrypty powłoki, zwykle prezentowałyby się tak file
:
$ file somescript.bash
somescript.bash: POSIX shell script, ASCII text executable
Co to jest ELF?
ELF jest formatem pliku , jest to wynik kompilatora takiego jak gcc
, który jest używany do kompilacji programów C / C ++ takich jak ls
.
W informatyce format wykonywalny i możliwy do połączenia (ELF, wcześniej nazywany formatem rozszerzalnego łączenia) jest powszechnym standardowym formatem plików wykonywalnych, kodu obiektowego, bibliotek współdzielonych i zrzutów rdzenia.
Zwykle będzie miał jedno z następujących rozszerzeń w nazwie pliku: none, .o, .so, .elf, .prx, .puff, .bin