w3resource

Linux - Working with directories

Introduction

In this session, we have covered an overview of the most common commands to work with directories : pwd, cd, ls, mkdir, rmdir. These commands are available on any Linux (or Unix) system. We have also discussed the absolute and relative paths and path completion in the bash shell.

pwd

Displays the full path-name for the current directory. Open a command line interface (like gnome-terminal, konsole, xterm, or a tty) and type pwd.

datasoft@datasoft-linux:~$ pwd
/home/datasoft

cd

You can change your current directory (working directory) with the cd command.

datasoft@datasoft-linux:~$ cd /etc
datasoft@datasoft-linux:/etc$ pwd
/etc
datasoft@datasoft-linux:/etc$ cd /bin
datasoft@datasoft-linux:/bin$ pwd
/bin
datasoft@datasoft-linux:/bin$ cd /home/datasoft/
datasoft@datasoft-linux:~$ pwd
/home/datasoft

cd ~<

Typing cd without a target directory will return you to your home directory. Typing cd ~ has the same effect.

datasoft@datasoft-linux:~$ cd /etc
datasoft@datasoft-linux:/etc$ pwd
/etc
datasoft@datasoft-linux:/etc$ cd
datasoft@datasoft-linux:~$ pwd
/home/datasoft
datasoft@datasoft-linux:~$ cd ~
datasoft@datasoft-linux:~$ pwd
/home/datasoft

To go to the parent directory (moves you up one directory), type cd ..

datasoft@datasoft-linux:~$ pwd
/home/datasoft
datasoft@datasoft-linux:~$ cd ..
datasoft@datasoft-linux:/home$ pwd
/home

To stay in the current directory, type cd . ;-) We will see the useful use of the . character representing the current directory later.

cd -

Another useful shortcut with cd is to just type cd - to go to the previous directory.

datasoft@datasoft-linux:~$ pwd
/home/datasoft
datasoft@datasoft-linux:~$ cd /etc
datasoft@datasoft-linux:/etc$ pwd
/etc
datasoft@datasoft-linux:/etc$ cd -
/home/datasoft
datasoft@datasoft-linux:~$ cd -
/etc

Absolute paths

Absolute paths begin at the top / (referred to as root) and then look down for the requested directory. The tree command below is used as an example for the purpose of explaining cd.

linux tree command

Suppose you are currently in the user directory and you want to switch to the user1 directory, you need to move up in the directory tree.
If you type :

linux command cd pwd

While you are in the user directory, you will get an error message "No such file or directory". This is because there is no user1 directory below user directory.

To go to user1 directory, you would type :

linux cd/user1

This is an absolute path. It tells linux to start at the top (here it is a home directory) and look down until it finds the user1 directory.

Therefore absolute paths will take you TO any directory, FROM any directory.

Relative paths

Any path that does not begin with a / or a ~ is a relative path. You can use an absolute path anywhere, a relative path can be used as well. Unlike an absolute path where your current location doesn't matter, it does matter where your current directory is, when using a relative path. Two special symbols "." (dot) and ".." (dot dot) are used to represent relative positions in the file system tree. The tree command below is used as an example for the purpose of explaining relative path.

linux tree command

Let's change the working directory to /home/user

linux cd home user

Let's say that we want to change the working directory to /home/usre1 (see the above tree structure). We can do that two different ways. Either with an absolute pathname :

linux absolute path

Or, with a relative pathname :

linux relative path

Therefore we get an identical result from two different methods.

Here is another example :

linux tree command

We can change the working directory from /home to /home/user1 in two different ways. Either using an absolute pathname:

more linux absolute path

Or, with a relative pathname:

linux relative path1

It is suggested that you can omit the "./". See the following command which will give you the identical result.

linux relative path2

Be aware of where you are

Always you should know which working directory you are in before you state the relative path to the directory or file you want to get to. You do not have to worry about your position in the file system, though, when you state the absolute path to another directory or file. If you are not sure, type pwd (print the name of the current directory).

path completion

The tab key can help you in typing a path without errors. Typing cd /et followed by the tab key will expand the command line to cd /etc/. When typing cd /Et followed by the tab key, nothing will happen because you typed the wrong path (upper case E).

You will need fewer key strokes when using the tab key, and you will be sure your typed path is correct!

ls

ls command is used to list names of files and sub-directories of a directory.

datasoft@datasoft-linux:~$ ls
abc.txt  Documents  examples.desktop  Pictures  Templates   Videos
Desktop  Downloads  Music             Public    typescript
datasoft@datasoft-linux:~$

ls -a

Lists all the files in the directory, including the hidden files (.filename).

datasoft@datasoft-linux:~$ ls
abc.txt  Documents  examples.desktop  Pictures  Templates   Videos
Desktop  Downloads  Music             Public    typescript
datasoft@datasoft-linux:~$ ls -a
.              .cache     Downloads         Pictures    Videos
..             .compiz    examples.desktop  .pki        .Xauthority
abc.txt        .config    .gconf            .profile    .xsession-errors
.bash_history  Desktop    .ICEauthority     Public      .xsession-errors.old
.bash_logout   .dmrc      .local            Templates
.bashrc        Documents  Music             typescript
datasoft@datasoft-linux:~$

The .. and . at the top of your list refer to the parent directory and the current directory, respectively.

Each directory file has an entry for itself (the dot file (.)) and for its parent directory (the dot-dot file (.. ). The -a option can be combined with -l option.

ls -l

Lists details about contents, including permissions (modes), owner, group, size, creation date, whether the file is a link to somewhere else on the system and where its link points.

datasoft@datasoft-linux:~$ ls -l
total 48
-rw-rw-r-- 1 datasoft datasoft  729 Jul 28 15:34 abc.txt
drwxr-xr-x 2 datasoft datasoft 4096 Jun 20 12:41 Desktop
drwxr-xr-x 2 datasoft datasoft 4096 Jun 20 12:41 Documents
drwxr-xr-x 2 datasoft datasoft 4096 Jun 20 12:41 Downloads
-rw-r--r-- 1 datasoft datasoft 8980 Jun 20 11:42 examples.desktop
drwxr-xr-x 2 datasoft datasoft 4096 Jun 20 12:41 Music
drwxr-xr-x 2 datasoft datasoft 4096 Jun 20 12:41 Pictures
drwxr-xr-x 2 datasoft datasoft 4096 Jun 20 12:41 Public
drwxr-xr-x 2 datasoft datasoft 4096 Jun 20 12:41 Templates
-rw-rw-r-- 1 datasoft datasoft    0 Jul 28 16:21 typescript
drwxr-xr-x 2 datasoft datasoft 4096 Jun 20 12:41 Videos
datasoft@datasoft-linux:~$

The output shown in above file displays the :

  • Column-1 : File type - First character.
  • Column-2 : No of links
  • FAP : Column-1, 2nd-10th characters
  • Column-3 : File Owner (user name)
  • Column-4 : Group Owner (group name)
  • Column-5 : File size (in bytes)
  • Column-6,7 & 8 : Last modification of the file.
  • Column-9 : File Owner (user name)

ls -lh

Another frequently used ls option is -h. It shows the numbers (file sizes) in a more human readable format. Also shown below is some variation in the way you can give the options to ls. We will explain the details of the output later in this book.

datasoft@datasoft-linux:~$ ls -l -h
total 52K
-rw-rw-r-- 1 datasoft datasoft  729 Jul 28 15:34 abc.txt
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Desktop
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Documents
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Downloads
-rw-r--r-- 1 datasoft datasoft 8.8K Jun 20 11:42 examples.desktop
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Music
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Pictures
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Public
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Templates
-rw-rw-r-- 1 datasoft datasoft 4.0K Jul 28 16:46 typescript
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Videos
datasoft@datasoft-linux:~$ ls -lh
total 52K
-rw-rw-r-- 1 datasoft datasoft  729 Jul 28 15:34 abc.txt
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Desktop
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Documents
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Downloads
-rw-r--r-- 1 datasoft datasoft 8.8K Jun 20 11:42 examples.desktop
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Music
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Pictures
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Public
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Templates
-rw-rw-r-- 1 datasoft datasoft 4.0K Jul 28 16:46 typescript
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Videos
datasoft@datasoft-linux:~$ ls -hl
total 52K
-rw-rw-r-- 1 datasoft datasoft  729 Jul 28 15:34 abc.txt
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Desktop
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Documents
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Downloads
-rw-r--r-- 1 datasoft datasoft 8.8K Jun 20 11:42 examples.desktop
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Music
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Pictures
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Public
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Templates
-rw-rw-r-- 1 datasoft datasoft 4.0K Jul 28 16:46 typescript
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Videos
datasoft@datasoft-linux:~$ ls -h -l
total 52K
-rw-rw-r-- 1 datasoft datasoft  729 Jul 28 15:34 abc.txt
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Desktop
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Documents
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Downloads
-rw-r--r-- 1 datasoft datasoft 8.8K Jun 20 11:42 examples.desktop
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Music
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Pictures
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Public
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Templates
-rw-rw-r-- 1 datasoft datasoft 4.0K Jul 28 16:46 typescript
drwxr-xr-x 2 datasoft datasoft 4.0K Jun 20 12:41 Videos
datasoft@datasoft-linux:~$

mkdir

mkdir command is used to create a new dir. You have to give at least one parameter to mkdir, the name of the new directory to be created. Think before you type a leading / .

datasoft@datasoft-linux:~/MyDir$ mkdir test
datasoft@datasoft-linux:~/MyDir$ cd test
datasoft@datasoft-linux:~/MyDir/test$ ls -al
total 8
drwxrwxr-x 2 datasoft datasoft 4096 Jul 28 16:51 .
drwxrwxr-x 5 datasoft datasoft 4096 Jul 28 16:51 ..
datasoft@datasoft-linux:~/MyDir/test$ mkdir staff
datasoft@datasoft-linux:~/MyDir/test$ mkdir casualstaff
datasoft@datasoft-linux:~/MyDir/test$ ls -l
total 8
drwxrwxr-x 2 datasoft datasoft 4096 Jul 28 16:53 casualstaff
drwxrwxr-x 2 datasoft datasoft 4096 Jul 28 16:52 staff
datasoft@datasoft-linux:~/MyDir/test$

mkdir -p

When given the option -p, then mkdir will create parent directories as needed.

datasoft@datasoft-linux:~$ mkdir -p test3/Mytest/sample
datasoft@datasoft-linux:~$ ls test3
Mytest
datasoft@datasoft-linux:~$ ls test3/Mytest
sample
datasoft@datasoft-linux:~$ ls test3/Mytest/sample
datasoft@datasoft-linux:~$

rmdir

rmdir is used to remove an empty directory.

datasoft@datasoft-linux:~$ rmdir test3/Mytest/sample
datasoft@datasoft-linux:~$ ls
abc.txt  Documents  examples.desktop  MyDir     Public     test3       Videos
Desktop  Downloads  Music             Pictures  Templates  typescript
datasoft@datasoft-linux:~$ cd ..
datasoft@datasoft-linux:~$ rmdir test3/Mytest/sample
datasoft@datasoft-linux:~$

rmdir -p

And similar to the mkdir -p option, you can also use rmdir to recursively remove directories.

datasoft@datasoft-linux:~$ mkdir -p dir/subdir/subdir2
datasoft@datasoft-linux:~$ rmdir -p dir/subdir/subdir2
datasoft@datasoft-linux:~$

Exercise and Solution:

1. Display your current directory.

pwd

2. Change to the /etc directory.

Code:

cd /etc

3. Now change to your home directory using only three key presses.

Code:

cd (and the enter key)

4. Change to the /boot/grub directory using only eleven key presses.

Code:

cd /boot/grub (use the tab key)

5. Go to the parent directory of the current directory.

Code:

cd .. (with space between cd and ..)

6. Go to the root directory.

Code:

cd /

7. List the contents of the root directory.

Code:

ls

8. List a long listing of the root directory.

Code:

ls -l/

9. Stay where you are, and list the contents of /etc.

Code:

ls /etc

10. Stay where you are, and list the contents of /bin and /sbin.

Code:

ls /bin /sbin

11. Stay where you are, and list the contents of ~.

Code:

ls ~

12. List all the files (including hidden files) in your home directory.

Code:

ls -al ~

13. List the files in /boot in a human readable format.

Code:

ls -lh /boot

14. Create a directory testdir in your home directory.

Code:

mkdir ~/testdir

15. Change to the /etc directory, stay here and create a directory newdir in your home directory.

Code:

cd /etc ; mkdir ~/newdir

16. Create in one command the directories ~/dir1/dir2/dir3 (dir3 is a subdirectory from dir2,
and dir2 is a subdirectory from dir1 ).

Code:

mkdir -p ~/dir1/dir2/dir3

17. Remove the directory testdir.

Code:

rmdir testdir

18. If time permits (or if you are waiting for other students to finish this practice), use and understand pushd and popd. Use the man page of bash to find information about these commands.

Code:

man bash

Previous: Linux - Control-operators
Next: Linux - Working with files



Follow us on Facebook and Twitter for latest update.