Executables versus processes
Programs are distributed as executable files. In many historical operating systems, programs would be loaded from files directly into memory byte by byte. That approach was certainly simple to implement, but it has many limitations (most notably, the requirement to have a fixed memory layout and the inability to store any metadata), so later systems invented special formats for executable files.
For example, if we inspect the Bourne Again Shell (Bash) executable with the file command, we’ll see something like this:
$ file /bin/bash /bin/bash: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=9c4cb71fe5926100833643a8dd221ffb879477a5, for GNU/Linux 3.2.0, stripped
If you use a Linux distribution other than Debian or Red Hat derivatives (which are the main focus of this book) and the preceding command fails for you, you can find the location of the bash executable...