Tuesday, May 14, 2024
16
rated 0 times [  16] [ 0]  / answers: 1 / hits: 4825  / 1 Year ago, thu, may 11, 2023, 3:43:11
$ ls -l /usr/bin
total 200732

-rwxr-xr-x 1 root root 156344 Oct 4 2013 adb
-rwxr-xr-x 1 root root 6123 Oct 8 2013 add-apt-repository
list goes long ---------


In the above adb is a binary file and add-apt-repository is a script file.I get this information by viewing the files through nautilus.But through command line, i didn't find any differences.I am not able to predict whether a file is binary file or a script file.



So how do I differentiate between script and binary files through the command-line?


More From » command-line

 Answers
1

Just use file:



$ file /usr/bin/add-apt-repository
/usr/bin/add-apt-repository: Python script, ASCII text executable
$ file /usr/bin/ab
/usr/bin/ab: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=569314a9c4458e72e4ac66cb043e9a1fdf0b55b7, stripped


As explained in man file:



NAME
file — determine file type

DESCRIPTION
This manual page documents version 5.14 of the file command.

file tests each argument in an attempt to classify it. There are three
sets of tests, performed in this order: filesystem tests, magic tests,
and language tests. The first test that succeeds causes the file type to
be printed.

The type printed will usually contain one of the words text (the file
contains only printing characters and a few common control characters and
is probably safe to read on an ASCII terminal), executable (the file con‐
tains the result of compiling a program in a form understandable to some
UNIX kernel or another), or data meaning anything else (data is usually
“binary” or non-printable). Exceptions are well-known file formats (core
files, tar archives) that are known to contain binary data. When adding
local definitions to /etc/magic, make sure to preserve these keywords.
Users depend on knowing that all the readable files in a directory have
the word “text” printed. Don't do as Berkeley did and change “shell
commands text” to “shell script”.


You can also use a trick to run this directly on the name of the executable in your $PATH:



$ file $(type -p add-apt-repository | awk '{print $NF}')
/usr/local/bin/add-apt-repository: Python script, ASCII text executable
$ file $(type -p ab | awk '{print $NF}')
/usr/bin/ab: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.32, BuildID[sha1]=569314a9c4458e72e4ac66cb043e9a1fdf0b55b7, stripped





To find the file type of all executables that can be found in the directories of your $PATH, you can do this:



find $(printf "$PATH" | sed 's/:/ /g') -type f | xargs file


And to run file on all files in a particular directory (/usr/bin, for example), just do



file /usr/bin/*

[#26043] Saturday, May 13, 2023, 1 Year  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
aciousoun

Total Points: 178
Total Questions: 110
Total Answers: 98

Location: Lithuania
Member since Fri, Sep 4, 2020
4 Years ago
;