What happens when you type ls -l in the shell

lsis a relatively simple and straightforward command. But what actually takes place behind the screen will get you to appreciate how little work is required from you to acquire the output you desire.

I will show you what is happning behind the screen.

behind the screen

the ls command is one of the popular shell commands,It list information about the FILEs (the current directory by default).

Not only that but this command has several display options, from where it helps the user to know more about his files / directory
we can cite among these options :

- all
do not ignore entries starting with .

- almost-all
do not list implied . and ..

- author
with -l, print the author of each file.

list entries by columns.

Show hidden files.


We going to get deeper just with the -l option, ls will list out files and directories in long list format.

ls -l

First, we need to know what an environment variable is. In linux, these are simple ways to share configuration settings between multiple applications and processes. For our case with using ls, we only need the PATH variable. You can print this by greping PATH from env to see what is in it.

PATH from env

PATH is an environmental variable in Linux and other Unix-like operating systems that tells the shell which directories to search for executable files (i.e., ready-to-run programs) in response to commands issued by a user. It increases both the convenience and the safety of such operating systems and is widely considered to be the single most important environmental variable.

Check for expansions and alias:

Aliases allow a string to be substituted for a word when it is used as the first word of a simple command. The shell maintains a list of aliases that may be set and unset with the alias and unalias builtin commands.

The first word of each simple command, if unquoted, is checked to see if it has an alias. If so, that word is replaced by the text of the alias. The characters ‘/’, ‘$’, ‘`’, ‘=’ and any of the shell metacharacters or quoting characters listed above may not appear in an alias name. The replacement text may contain any valid shell input, including shell metacharacters. The first word of the replacement text is tested for aliases, but a word that is identical to an alias being expanded is not expanded a second time. This means that one may alias ls to "ls -F", for instance, and Bash does not try to recursively expand the replacement text. If the last character of the alias value is a blank, then the next command word following the alias is also checked for alias expansion

The rules concerning the definition and use of aliases are somewhat confusing. Bash always reads at least one complete line of input, and all lines that make up a compound command, before executing any of the commands on that line or the compound command. Aliases are expanded when a command is read, not when it is executed. Therefore, an alias definition appearing on the same line as another command does not take effect until the next line of input is read. The commands following the alias definition on that line are not affected by the new alias. This behavior is also an issue when functions are executed. Aliases are expanded when a function definition is read, not when the function is executed, because a function definition is itself a command. As a consequence, aliases defined in a function are not available until after that function is executed. To be safe, always put alias definitions on a separate line, and do not use alias in compound commands.

Fork and execute program in the child process:

There’s a common pattern in Unix on how processes work.

A new child process is created by cloning the existing parent process (fork()). This new child process calls (exec()) to replace the parent process running in the child with the process the child wants to run.

student at holbertonschool