1. Overview
The ls command is a command line tool that lists files and directories within the file system. We can also use it to show us detailed information about the listed files. It’s part of the GNU core utilities package, which is installed by default on all Linux distros.
In this tutorial, we’ll explore common options of the ls command. We’ll delve into basic examples and more advanced example utilization that streamlines file management tasks.
2. Common ls Command Options
The basic syntax of the ls command is fairly straightforward:
ls [OPTIONS] [FILES]
- [OPTIONS]: the various command-line options of the ls command
- [FILES]: represents the name(s) of the file(s) to be processed
Let’s look at some of the most commonly used ls command options:
Options
Description
-m
Lists directory contents, separated by commas
-Q
Displays directory contents, enclosed within quotation marks
-l
Displays files in a long-list format
-lh
Displays file sizes in human-readable format
-g
Omits the group ownership column
-F
Adds a forward slash to directories
-i
Displays the inode number of files and directories
-a
Displays all files, including hidden files
-la
Displays all files and directories in a long list format
-r
Sort files in reverse order
-X
Sorts files alphabetically by file extension
-R
Displays files and directories recursively
3. Common ls command Examples
Let’s dive deeper into some practical examples of using ls.
3.1. List Files and Directories in Linux
Using ls by itself is the most basic and common form of the command. For example, let’s list all the directories and files in our current working directory:
$ ls
automation meeting_minutes.txt
AWS-ETL-S3-to-Snowflake MISP
AWSKEY Music
bin my_file.txt
...
3.2. Long Listing of Files in Linux
For a more detailed view of files and directories, we use the -l option. In particular, this option provides a long listing format, including information such as ownership, file permission, size, and modification time:
$ ls -l
total 37996
drwxr-xr-x 5 kali kali 4096 Jan 16 13:39 guest-authoring
drwxr-xr-x 8 kali kali 4096 Jan 20 1970 idea-IC-233.13135.103
-rwxrw-rw- 1 kali kali 10282364 Sep 11 2023 SampleVideo.mp4
-rw-r--r-- 1 kali kali 28613436 Apr 10 03:12 warp-terminal_0.2024.04.02.08.02.stable.01_amd64.deb
...
From the output, each line represents a file or directory. The first column shows the file permission. Then, the next shows the owner, the group, the modification time, and finally, the file or directory name.
If we want to also include hidden files and directories, we need to use the -a option:
$ ls -a
. ISMS
.. .java
.anaconda .jupyter
automation .lesshst
.avidemux6
...
In the output, we can see additional entries that are each preceded by a dot, representing hidden files and directories.
The -l option is often combined with the -a option to give us a better view, listing all files and directories in our current working directory, including hidden ones:
$ ls -la
total 335536
drwx------ 85 kali kali 4096 Apr 16 15:38 .
drwxr-xr-x 7 root root 4096 Apr 6 14:48 ..
drwxr-xr-x 3 kali kali 4096 Jun 26 2023 .anaconda
drwxr-xr-x 2 kali kali 4096 Dec 1 04:19 automation
...
3.3. Display File Size in a Human-Readable Format
Next, we can use the -lh option to make file sizes more easily understandable. In particular, this option displays file sizes in a human-readable format, using units such as kilobytes (K), megabytes (M), and gigabytes (G).
For example, let’s list all the files and directories in the current directory with human-readable file sizes:
$ ls -lh
-rwxrw-rw- 1 kali kali 9.9M Sep 11 2023 SampleVideo.mp4
-rw------- 1 kali kali 2.4K May 2 19:20 sincere-muse-422223-0c570b360e21.json
-rw-r--r-- 1 kali kali 26M Apr 24 06:26 terraform_1.8.2_linux_amd64.zip
The system chooses a suitable unit that’s easier to understand than just the total number of bytes.
3.4. Distinguish Directories and Files in Linux
To distinguish between directories and regular files in Linux, we can add the -F option. This option adds a slash character to the end of each directory in the list.
For example, let’s check the listing of all files and directories in the current directories with distinguishing characters:
$ ls -F
automation/ meeting_minutes.txt
AWS-ETL-S3-to-Snowflake/ MISP/
AWSKEY/ Music/
bin/ my_file.txt
cred.py
...
In the output, directories are denoted by a trailing slash (/), while regular files appear without any appended special characters.
3.5. Sorting of Files
We can also use the ls command to sort files. By default, ls sorts in lexical order.
Let’s first demonstrate this default behavior:
$ ls
guest-authoring SampleVideo.mp4
However, we can sort files in reverse lexical order with the -lr option:
$ ls -lr
total 335268
-rw-r--r-- 1 kali kali 9279 Nov 30 06:31 your_output_file.csv
drwxr-xr-x 8 kali kali 4096 Jul 1 2023 XSStrike
-rw-r--r-- 1 kali kali 320 Jan 17 13:08 wget-log
...
Moreover, we can also use the ls command with the -lt option to sort files based on their modification time. In particular, sorting files by modification time can be particularly useful when we need to identify recently modified files or track changes in a directory:
$ ls -lt
total 335268
-rw-r--r-- 1 kali kali 42 Apr 16 09:35 dir3
-rw-r--r-- 1 kali kali 42 Apr 16 09:32 dir1
-rw-r--r-- 1 kali kali 42 Apr 16 08:31 dir2
-rwxr-xr-x 1 kali kali 323 Apr 15 10:02 copy_multiple.sh
...
The output displays files and directories listed in descending order based on their modification time, with the most recently modified files appearing first.
We can also use this command to sort by file size with the -S option.
For example, let’s sort files by size by listing all files and directories in the current directory:
$ ls -S
ideaIC-2023.3.2.tar.gz mage-zoomcamp
jdk-21_linux-x64_bin.deb Music
In this output, files and directories are listed in descending order based on their size, with the largest files appearing first.
3.6. List File Inode Number in Linux
ls also provides the ability to display the inode number of files and directories. Thus, we can use the ls command with the -i option to list the inode number along with the files and directories:
$ ls -i
3932431 automation
3935686 meeting_minutes.txt
...
In this output, each line represents a file or directory, with the inode number displayed at the beginning of each line.
3.7. List Specific File Types or Extensions
We can utilize the ls command along with the wildcard character (*) to match specific file types or extensions.
For example, let’s list only text files in the current directory with ls command and wildcards:
$ ls *.txt
meeting_minutes.txt my_file.txt test.txt
Additionally, we can use wildcards to match files that begin with the same prefix.
For example, to list all files starting with m, we can use:
$ ls m*
meeting_minutes.txt my_file.txt
This allows for more flexible and specific file listing based on patterns and prefixes.
4. Conclusion
In this article, we explored the versatility of the ls command in displaying details about the files and directories in our system.
We looked at some common commands and how ls has flexibility in both the information it displays and the order of the files and directories it shows us.