Bạn có thể xác định bản chất của một tệp thực thi trong Unix bằng cách sử dụng file
lệnh và type
lệnh.
kiểu
Bạn sử dụng type
để xác định vị trí thực thi trên đĩa như sau:
$ type -a ls
ls is /usr/bin/ls
ls is /bin/ls
Vì vậy, bây giờ tôi biết rằng ls
nó nằm ở đây trên hệ thống của tôi ở 2 địa điểm: /usr/bin/ls
& /bin/ls
. Nhìn vào những thực thi đó tôi có thể thấy chúng giống hệt nhau:
$ 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
LƯU Ý: Bạn có thể xác nhận chúng giống hệt nhau ngoài kích thước của chúng bằng cách sử dụng cmp
hoặc diff
.
với khác
$ diff -s /usr/bin/ls /bin/ls
Files /usr/bin/ls and /bin/ls are identical
với cmp
$ cmp /usr/bin/ls /bin/ls
$
Sử dụng tập tin
Nếu tôi truy vấn chúng bằng file
lệnh:
$ 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
Vì vậy, đây sẽ là các chương trình vật lý thực tế đã được biên dịch từ C / C ++. Nếu chúng là các kịch bản shell, chúng thường trình bày như thế này để file
:
$ file somescript.bash
somescript.bash: POSIX shell script, ASCII text executable
ELF là gì?
ELF là một định dạng tệp , nó là đầu ra của một trình biên dịch gcc
, như được sử dụng để biên dịch các chương trình C / C ++ như ls
.
Trong điện toán, Định dạng có thể thực thi và có thể liên kết (ELF, trước đây được gọi là Định dạng liên kết mở rộng) là định dạng tệp tiêu chuẩn phổ biến cho các tệp thực thi, mã đối tượng, thư viện dùng chung và kết xuất lõi.
Nó thường sẽ có một trong các phần mở rộng sau trong tên tệp: none, .o, .so, .elf, .prx, .puff, .bin