Working with Files and Folders

Creating directories

The command to create a new directory is mkdir

$ ls
file.txt  folder  script.sh

$ mkdir subfolder
$ ls -F
file.txt  folder/  script.sh*  subfolder/

A very useful option of this command is -p, which doesn’t cause an error should the folder already exist. Additionally, if we are creating a subfolder, it will create parent directories as needed if they don’t exist

$ mkdir -p subfolder/sub_subfolder/lowelevel

Creating and editing a file

An empty file can be created using the command touch

$ ls -l
total 4
-rw-r--r-- 1 flescai domain users   0 Feb 19 11:03 file.txt
drwxr-xr-x 2 flescai domain users  10 Feb 19 11:03 folder
-rwxr-xr-x 1 flescai domain users 122 Feb 19 11:03 script.sh
drwxr-xr-x 3 flescai domain users  34 Feb 19 13:17 subfolder

$ touch newfile.txt
$ ls -l
total 4
-rw-r--r-- 1 flescai domain users   0 Feb 19 11:03 file.txt
drwxr-xr-x 2 flescai domain users  10 Feb 19 11:03 folder
-rw-r--r-- 1 flescai domain users   0 Feb 19 13:19 newfile.txt
-rwxr-xr-x 1 flescai domain users 122 Feb 19 11:03 script.sh
drwxr-xr-x 3 flescai domain users  34 Feb 19 13:17 subfolder

The file can then be edited using one of the many command line editors in shell, like vi or vim or nano, according to one’s preferences. A new file can also be created by editing it straight away, even if it doesn’t exist yet: the command will create it first, and open for editing.

$ vim textfile.txt

The use of vi or vim should be explained more extensively elsewhere.

Moving and copying files and folders

The basic command to move a file or a folder is mv.

For example, we can use it to move our new text file into the subfolder with this syntax

$ ls -F
file.txt  folder/  newfile.txt  script.sh*  subfolder/

$ mv file.txt subfolder/.
$ ls -F
folder/  newfile.txt  script.sh*  subfolder/

The use of the final dot is not strictly necessary, it just makes the command more safe: the dot indicates the same folder, i.e. it is like writing right here.

There is not much difference in UNIX between moving a file or renaming a file: i.e. renaming is like moving one file into another with a different name. Therefore, if I wanted to change the name of newfile.txt into something else, I would do the following

$ mv newfile.txt oldfile.txt
$ ls -F
folder/  oldfile.txt  script.sh*  subfolder/

Copying is done using the command cp and an important option is -r which allows to copy files recursively, i.e. by copying also the content of folders and sufolders.

$ ls *
oldfile.txt  script.sh

folder:

subfolder:
file.txt  sub_subfolder

We want to copy the directory named subfolder which contains a file and a sub-subfolder

$ cp -r subfolder newfolder
$ ls *
oldfile.txt  script.sh

folder:

newfolder:
file.txt  sub_subfolder

subfolder:
file.txt  sub_subfolder

Removing files and folder

The command to remove files is rm and by adding the option -r i.e. recursively we can also remove folders and their content.

$ rm -r newfolder
$ ls -F
folder/  oldfile.txt  script.sh*  subfolder/

Warning

Deleting is permanent

The Unix shell doesn’t have a trash bin that we can recover deleted files from: therefore once you have deleted a file with the command rm there is no way to recover the file and it is lost forever (unless a backup exists somewhere)

Peek at file content

A couple of useful commands allow us to inspect quickly at a file content, either at the beginning (head) or at the end (tail) of a file.

$ head oldfile.txt
first line
second line
third line
fourth line
fifth line
sixth line
seventh line
eighth line
ninth line
tenth line

$ tail oldfile.txt
third line
fourth line
fifth line
sixth line
seventh line
eighth line
ninth line
tenth line
eleventh line
twelfth line

By default the command will print the first or last 10 lines of the file. You can change this using the option -n and specifying the number of lines.