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 filelệnh và typelệ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 lsnó 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 cmphoặ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 filelệ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