It is a great advantage to understand the basics of the "shell", also known as "command Line" or "terminal". This tool allows the ability to accomplish and automate tasks on a computer without the use of a graphical user interface. It also allows sending of simple text commands to the computer to do things such as navigate through a directory or copy a file, and form the basis for many more complex automation and programming skills.
Different Operating Systems use different Shell software. MacOS uses terminal by default, with Windows using Command Prompt but also has Windows Terminal which was released in 2019. Linux uses have several different versions of the terminal depending on the distribution such as gnome-terminal, konsole, xterm, rxvt, kvt, nxterm, and eterm.
When jumping into the terminal there is various commands that allow you to navigate, create, remove, rename and many more. Lets run through some of the basic commands used.
Print Working Directiory
pwd - returns the name of the directory currently being browsed
ls [OPTIONS] [FILES / DIRECTORY] - lists files and directories within the file system, and shows detailed information about them.
ls Desktop Downloads Movies Pictures Documents Library Music Public
A couple of options that can be used such as:
ls -l- list with long format - show permissions
ls -a- list all files including hidden file starting with '.'
There are various other options which can be used such as
ls -d- list directories - with ' */'
ls -la- list long format including hidden files
ls -lh- list long format with readable file size
ls -ls- list with long format with file size
ls -r- list in reverse order
ls -R- list recursively directory tree
ls -s- list file size
ls -S- sort by file size
ls -t- sort by time & date
ls -X- sort by extension name
cd changes the directory/folder of the terminal's shell. Hint Pressing the tab button will auto complete the directory name. Lets have a look further on how
cd- by itself will return back to the home directory.
cd ~- also returns back to the home directory.
cd /- changes to the root directory.
cd ..- changes to the parent directory.
cd Documents- changes to sub directory Documents.
cd Documents/Books- changes to sub directory Documents/Books.
cd /home/user/Desktop- changes to directory with absolute path /home/user/Desktop.
Dealing with white spaces in directories:
cd My\ Images
cd "My Images"
cd 'My Images'
touch command is the easiest way to create new, empty files. It is also used to change the timestamps (i.e. dates and times of the most recent access and modification) on existing files and directories.
touch's syntax is
touch [option] [file_name(s)...]
Touch creates new files for any file names that are provided as arguments (i.e., input data) if files with such names do not already exist. Touch can create any number of files simultaneously. For example, the following command would create three new, empty files named file1, file2 and file3:
touch file1 file2 file3
mkdir - creates directories / folders. This command can create multiple directories at once as well as set the permissions for the directories. It is important to note that the user executing this command must have enough permissions to create a directory in the parent directory, or he/she may receive a ‘permission denied’ error.
mkdir [options...] [directory...]
mv - is used to move files and directories.
$ mv [options] [source...] [destination...]
Some examples of its use is as follows:
mv file.c file1.h /home/usr/files/- moves file.c file1.h files to /home/usr/files/ directory.
mv *.c bak- moves all C files in current directory to sub directory bak.
mv bak/* .- move all files in sub directory bak to current directory.
mv main.c main.bak- renames file main.c to main.bak.
cp - copies files and directories.
cp [options] [source...] [destination...]
cp -a- archive files.
cp -f- force copy by removing the destination file if needed.
cp -i- interactive - ask before overwrite.
cp -R- recursive copy (including hidden files).
cp -u- update copy when source is newer than destination.
cp -v- verbose - print informative messages.
cp command examples
cp main.c bak- copies single file main.c to destination directory bak.
cp main.c def.h /home/usr/rapid/- copies 2 files main.c and def.h to destination absolute path directory /home/usr/rapid/
cp *.c bak- copies all C files in current directory to sub directory bak.
cp src /home/usr/rapid/- copies directory src to absolute path directory /home/usr/rapid/.
cp -R dev bak- copies all files and directories in dev recursively to subdirectory bak.
cp -f test.c bak- force file copy.
cp -i test.c bak- interactive prompt before file overwrite.
cp -u * bak- update all files in current directory - copy only newer files to destination directory bak.
rm is used to remove objects such as files, and directories. By default, it does not remove directories. This command normally works silently and so be very careful while running rm command because once deleted, the files are not able to be recovered.
rm [options...] [files / directories ...]
rm command examples
rm a.txt- removes the file a.txt.
rm b.txt c.txt- removes the file b.txt and c.txt file.
rm -i d.txt- asks the user for confirmation before removing each file.
rm -f e.txt- This option overrides this minor protection and removes the file forcefully.
rm -r /files/*- Recursive Deletion: with -r(or -R) option rm command performs a tree-walk and will delete all the files and sub-directories recursively of the parent directory. At each stage it deletes everything it finds. Normally, rm wouldn’t delete the directories but when used with this option, it will delete.
cat [options...] [files / directories ...]
cat - displays the content of text files and to combine several files to one file.
cat list1.txt - views a text file
cat list1.txt milk bread apples cat list2.txt house car
cat list1.txt list2.txt - Combines 2 text files
cat list1.txt list2.txt milk bread apples house car
cat list1.txt list2.txt > todo.txt - Combines 2 text files to another file.
There is a tonne more that is possible within the Command line, however this should be sufficient to getting started.