While it may seem antiquated in this day and age of modern operating systems, the command line remains the most flexible and powerful way to perform tasks in Linux. In the
first part of our command line series, we discussed some of the very basics of the Linux command line including directory navigation, file/directory operations and search.
In this follow up article we build on that as we go deeper to discuss file metadata, permissions, timestamps, as well as some new tools like tee, Vim, and more.
<- Go to Part 1 for Linux CLI Basics #1 to #12. 13. How to access file metadata like size, permissions, and more? Use the
ls command with
-l option to display file metadata in output. For example:

Each line in the output contains metadata information related to a file or a sub-directory present in the current directory. This information can be divided into the following eight parts:
+permissions that apply to the owner
|
| +permissions that apply to all other users
| |
| | +number of
hard links
| | |
| | | +file size +last modification date/time
_|_ _|_ | _|___ ________|__
d
rwxr-xr-x 3
himanshu himanshu 4096 Jul 3 14:26 Desktop
__ ________ ________ ______
| | | |
| | | +name of file/ directory
| | |
| | +group the file belongs to
| |
| +owner of the file
|
+permissions that apply to the members of the group the file belongs to
The first character represents the file type. For example, in the line shown above,
d indicates this is a directory. Other values can be:
- for normal file,
s for socket file,
l for link file, and more.
The next 9 characters represent permissions --
r - read,
w - write,
x- execute. The first set of three characters represents the owner’s permission, the next three are group's permission, and the final three represent permissions granted to others who are neither the owner, nor the part of the group the file belongs to. In the example shown above, the
owner has read, write and execute permissions, while the
group as well as
others both have only read and execute permissions.
Tip: Use the
-h command line option along with
-l to display file size in human readable format.
14. How to change file permissions? Use the
chmod command to alter file permissions. There are two ways in which this command can be used. The first method, also known as
letters method, uses
+,
-, and
= signs to add, remove, and assign permissions. Letters
a,
o,
u, and
g represent all, others, owner, and group respectively.
For example, the
chmod u=rwx somefile command assigns read, write, and execute permissions to the owner of the file
somefile. Similarly, the
chmod o+w somefile command adds write permission for others, the
chmod g-r somefile removes read permission from the group the file belongs to, and the
chmod a+x somefile command adds execute permission for everyone.
Specifying
a is not mandatory, which means that setting permissions like
+x or
-r without specifying owner, group or other automatically applies it to all.
The second method is the
numbers method and it uses
4,
2, and
1 instead of
r,
w, and
x. The values are added together in sets of 3 to give us a three digit number denoting permissions.
For example, the
chmod 761 somefile command gives rwx, rw, and r permissions to the owner, group, and others, respectively. Here
7 represents the sum of numbers corresponding to r,w, and x. Similarly,
6 represents the sum of numbers corresponding to r and w, while
1 represents x.
15. How to change file timestamps? Use the
touch command to change file timestamps. There are three types of timestamps associated with a file:
Access time,
Modification time, and
Change time. While the first two are self explanatory, the third one represents the time when the
inode information or the meta data related to file last changed. Use the
stat command to display these timestamps:

To change the file
access time to the current time, use the
touch command with the
-a option:
touch -a somefile. Similarly, the
-m option changes the file
modification time to the current time.
To change file timestamps to a time other than the current time, use the
-t command line option. For example, the command
touch -t 201407020900.01 -a somefile changes the access timestamp of
somefile to
2014/07/02 09:00:01. You can also pass a specific date and time in human readable form. Use the
-d command line option for this. Here are some examples:
touch -d "2013-01-10 10:00:07" -a somefile
touch -d "next sunday" -m somefile
touch -d "3 hours ago" -a somefile
16. How to determine file types? Use the
file command to determine file types. As shown in the example below, the command expects a filename as an argument. You can also use the wildcard * in place of file name to display the file type for every file in the current directory:
file *
17. I’ve downloaded an executable file, but it doesn’t execute, why? In Linux (and other *nix systems) whether a file is executable or not depends solely on its permissions, not on its extension or content. When a file is downloaded, its original permissions are not known, and is hence given a default set of permissions that are determined by
umask.
If the user really intends to execute the downloaded file, they’ll have to explicitly give executable permissions to it using the
chmod command explained above. Giving permissions manually also helps prevent virus, worms, and more from infecting your system without your knowledge.
18. How to print the number of new lines, words, and bytes in files? Use the
wc command to print newline, word, and byte counts for a file. Here is an example:

In the output shown above,
5 represents the number of lines,
12 represents the number of words, and
52 represents the number of bytes. You can also use the
-l,
-w, and
-c command line options to separately produce number of lines, words, and bytes, respectively in the output.
19. How to display disk usage of files and directories? Use the
du command to display disk usage of files and directories. Here is an example:
Note - The
-h command line option is used to produce the size in human readable format.
An important thing to note here is that the
du command outputs the
resident size of a file, which could be different from the
actual size that the
ls -l command displays. The reason behind this difference is either
slack space or sparse files.
To display the combined size of a directory as well as all its subdirectories, use the
-s option, while
-S can be used to display separate sizes. To display the amount of disk space available on the
file system containing a specific file or directory use the
df command.

Here again, the
-h option is used to display the output in human readable format. If the
df command is run without any file/directory name, it'll show disk usage for all the file systems.
20. How to compare two files? Use the
diff command to compare two files. The command examines both the files and produces the output in a particular format to let you know what changes are required for the files to match. The command requires two filenames as arguments, as shown in the example below.

Use the
diff command to compare these files:

Decrypting the output shown above,
5c5 means that the fifth line of
somefile is changed, and should be replaced by the fifth line of the file
anotherfile. The line in question from the first file is marked with a
< symbol, while line from the second file is marked with a
> symbol.
Note- Besides
c, which signifies a changed line, the diff command also points which lines need to be added (
a) and deleted (
d) for the files being compared to match.
More complex examples of this command can be found
here.
21. How to view the first few and last few lines of a file? Use the
head and
tail commands to quickly view the first and last few lines of a file. These commands come in handy when you just want to have a quick peek inside the file. For example, the
head -n2 somefile command displays the first
2 lines of the file
somefile. Similarly, the
tail -n3 somefile command displays the last
3 lines of the file.
Not only lines, you can also quickly view a specified number of bytes using these commands. For this, use the
-c command line option instead of
-n. By default, when the number of lines is not specified, both the commands display
10 lines in the output.
22. How to store and view the output of a command at once? Use the
tee command to simultaneously write the output of any other command to standard output as well as to one or more files. For example, the
ls | tee ls-dump command displays the output of the
ls command on console and stores the output in the file
ls-dump.
While the
tee command is mostly used for capturing and analyzing logs at the same time, it can also be used to speed up your workflow. For example, the
echo "Linux command line" | tee file1 > file2 command writes the string to both files in one go.
23. How to compress and uncompress a file? Working on Linux requires you to deal with archives like
.tar,
.tar.gz,
.bz2, and more. To create as well as uncompress these archives you can use the
tar command.
For example, the
tar -cvf practice.tar practice/ command compresses the
practice folder and creates a
.tar archive named
practice.tar. The
-c command line option tells the
tar command to create an archive,
-v displays the files added to the tarball , and
-f specifies the filename.
To uncompress the
.tar archive created above, use the
tar -xvf practice.tar command. The
-x command line option signals the command to extract the archive. This command untars the file in the current directory. Use the
-C option to specify a different target directory.
To create
.tar.gz and
.tar.bz2 archives, add an extra
-z and
-j command line option, respectively. The command to uncompress these archives is same as the one used for
.tar files. Use the
-t command line option (along with
v and
f) in case you just want to list the contents of an archive.
Tip - To deal with
.zip files, use the
zip command.
24. How to edit a file using Vim editor? While the Vim editor is one of the most powerful command line text editors, it also requires you to learn a lot of keyboard shortcuts. But the basics of editing are simple and easy.
To open a file in the editor, run the
vim command with the file name as an argument. For example,
vim textfile. If the file
textfile doesn’t exist in the specified directory, the editor will create and open a new file by that name, otherwise it will open the existing file.
There are two operation modes in Vim:
command mode and
insert mode. The editor opens the file in command mode, where you can move the cursor using the arrow keys on your keyboard, but cannot edit the file until you press
i -- activating the insert mode as shown below.

Once you are done editing the file, you have to press the
Esc key to come out of the insert mode and into the command mode before being able to save the file.

To save the file, type the
:w command and then hit
Enter.

To quit the editor, type the
:q command and press Enter, or
:wq to save and quit in one go.
Note - To quickly copy or delete a line, switch the editor to the
command mode, bring the cursor to the desired line, and type
yy or
dd, respectively. To paste, press
p in the command mode.
Wrap up Each command mentioned in the article is capable of doing a lot more than what we’ve discussed but this should give you an overall grasp of their use. You can use man pages (
discussed in part one) to learn more about them. If you get stuck somewhere, you can leave a comment or head to our
Alternative OS forum.
Bookmarks