# Getting started with GNU/Linux
# Useful shortcuts
# Using The Terminal
The examples in this document assume that you are using a POSIX-compliant (such as bash, sh, zsh, ksh) shell.
Large portions of GNU/Linux functionality are achieved using the terminal. Most distributions of Linux include terminal emulators that allow users to interact with a shell from their desktop environment. A shell is a command-line interpreter that executes user inputted commands. Bash (Bourne Again SHell) is a common default shell among many Linux distributions and is the default shell for macOS.
These shortcuts will work if you are using Bash with the emacs keybindings (set by default):
# Open terminal
- Ctrl + Alt + T or Super + T
# Cursor movement
- Ctrl + A Go to the beginning of the line you are currently typing on.
- Ctrl + E Go to the end of the line you are currently typing on.
- Ctrl + XX Move between the beginning of the line and the current position of the cursor.
- Alt + F Move cursor forward one word on the current line.
- Alt + B Move cursor backward one word on the current line.
- Ctrl + F Move cursor forward one character on the current line.
- Ctrl + B Move cursor backward one character on the current line.
# Text manipulation
- Ctrl + U Cut the line from the current position to the beginning of the line, adding it to the clipboard. If you are at the end of the line, cut the entire line.
- Ctrl + K Cut the line from the current position to the end of the line, adding it to the clipboard. If you are at the beginning of the line, cut the entire line.
- Ctrl + W Delete the word before the cursor, adding it to the clipboard.
- Ctrl + Y Paste the last thing from the clipboard that you cut recently (undo the last delete at the current cursor position).
- Alt + T Swap the last two words before the cursor.
- Alt + L Make lowercase from cursor to end of word.
- Alt + U Make uppercase from cursor to end of word.
- Alt + C Capitalize to end of word starting at cursor (whole word if cursor is at the beginning of word).
- Alt + D Delete to end of word starting at cursor (whole word if cursor is at the beginning of word).
- Alt + . Prints the last word written in previous command.
- Ctrl + T Swap the last two characters before the cursor.
# History access
- Ctrl + R Lets you search through previously used commands.
- Ctrl + G Leave history searching mode without running a command.
- Ctrl + J Lets you copy current matched command to command line without running it, allowing you to make modifications before running the command.
- Alt + R Revert any changes to a command you’ve pulled from your history, if you’ve edited it.
- Ctrl + P Shows last executed command, i.e. walk back through the command history (Similar to up arrow).
- Ctrl + N Shows next executed command, i.e. walk forward through the command history (Similar to down arrow).
# Terminal control
- Ctrl + L Clears the screen, similar to the clear command.
- Ctrl + S Stop all output to the screen. This is useful when running commands with lots of long output. But this doesn't stop the running command.
- Ctrl + Q Resume output to the screen after stopping it with Ctrl+S.
- Ctrl + C End currently running process and return the prompt.
- Ctrl + D Log out of the current shell session, similar to the exit or logout command. In some commands, acts as End of File signal to indicate that a file end has been reached.
- Ctrl + Z Suspends (pause) currently running foreground process, which returns shell prompt. You can then use
bgcommand allowing that process to run in the background. To again bring that process to foreground, use
fgcommand. To view all background processes, use
- Tab Auto-complete files and directory names.
- TabTab Shows all possibilities, when typed characters doesn't uniquely match to a file or directory name.
# Special characters
- Ctrl + H Same as Backspace.
- Ctrl + J Same as Return (historically Line Feed).
- Ctrl + M Same as Return (historically Carriage Return).
- Ctrl + I Same as Tab.
- Ctrl + G Bell Character.
- Ctrl + @ Null Character.
- Esc Deadkey equivalent to the Alt modifier.
# Close Terminal
- Ctrl + Shift + W To close terminal tab.
- Ctrl + Shift + Q To close entire terminal.
Alternatively, you can switch to the vi keybindings in bash using
set -o vi. Use
set -o emacs to switch back to the emacs keybindings.
# File Management Commands
Linux uses some conventions for present and parent directories. This can be a little confusing for beginners.
Whenever you are in a terminal in Linux, you will be in what is called the current working directory. Often your command prompt will display either the full working directory, or just the last part of that directory. Your prompt could look like one of the following:
user@host ~/somedir $ user@host somedir $ user@host /home/user/somedir $
which says that your current working directory is
.. represents the parent directory and
. represents the current directory.
Therefore, if the current directory is
cd ../somedir will not change the working directory.
The table below lists some of the most used file management commands
# Directory navigation
| ||Get the full path of the current working directory.|
| ||Navigate to the last directory you were working in.|
| ||Navigate to the current user's home directory.|
| ||Go to the parent directory of current directory (mind the space between |
# Listing files inside a directory
| ||List the files and directories in the current directory in long (table) format (It is recommended to use -l with ls for better readability).|
| ||List information about the directory |
| ||List all the files including the hidden ones (File names starting with a |
| ||Appends a symbol at the end of a file name to indicate its type (|
| ||List the files sorted by last modified time with most recently modified files showing at the top (remember -l option provides the long format which has better readability).|
| ||List the file sizes in human readable format.|
| ||Shows all subdirectories recursively.|
| ||Will generate a tree representation of the file system starting from the current directory.|
# File/directory create, copy and remove
| ||Will copy the file from |
| ||Will copy source directory to specified destination recursively.|
| ||In Linux there is no rename command as such. Hence |
| ||Asks you before every file removal for confirmation. IF YOU ARE A NEW USER TO LINUX COMMAND LINE, YOU SHOULD ALWAYS USE |
| ||Will remove the directory |
| ||Will remove the directory |
| ||Will remove the directory |
| ||Create a directory |
| ||Create a directory hierarchy. Create parent directories as needed, if they don't exist. You can specify multiple directories.|
| ||Create a file |
# File/directory permissions and groups
| ||Change the file permissions. Specifications = |
| ||Change the permissions of a directory recursively. To change permission of a directory and everything within that directory, use this command.|
| ||Add read permission for the owner and the group.|
| ||Allow all users to read, write or execute |
| ||Remove read permission from the group and others.|
| ||Change ownership of a file to user |
| ||Change primary group ownership of file |
| ||Change primary group ownership of directory |
# Hello World
Type the following code into your terminal, then press Enter:
echo "Hello World"
This will produce the following output:
# Basic Linux Utilities
Linux has a command for almost any tasks and most of them are intuitive and easily interpreted.
Getting Help in Linux
| ||Read the manual page of |
| ||Read the manual page of |
| ||Output all the software whose man pages contain |
| ||Outputs all man pages containing |
| ||Output all the applications whose one line description matches the word editor. When not able to recall the name of the application, use this command.|
| ||In Bash shell, this will display the list of all available bash commands.|
| ||In Bash shell, this will display the info about the |
| ||View all the information about |
| ||Output a list of all installed packages on a Debian-based system.|
| ||Will list out the files installed and path details for a given package on Debian.|
| ||Return all .deb installed packages with |
| ||Return descriptions of all available packages.|
| ||List a one-line description of vim.|
| ||Display usage information about the |
User identification and who is who in Linux world
| ||Display hostname of the system.|
| ||Displays Fully Qualified Domain Name (FQDN) of the system.|
| ||Change password of current user.|
| ||Username of the users logged in at the terminal.|
| ||List of all the users currently logged in as a user.|
| ||Display current system status, time, duration, list of users currently logged in on system and other user information.|
| ||Who recently used the system.|
| ||When was the last time root logged in as user.|
| ||Shows all bad login attempts into the system.|
| ||Changing permissions - read,write,execute of a file or directory.|
Process related information
| ||List all processes sorted by their current system resource usage. Displays a continually updated display of processes (By default 3 seconds). Use |
| ||List processes currently running on current shell session|
| ||List all of the processes and commands root is running|
| ||List all the processes by all users on the current system|
# Searching for files by patterns in name/contents
A common and task of someone using the Linux Command Line (shell) is to search for files/directories with a certain name or containing certain text. There are 2 commands you should familiarise yourself with in order to accomplish this:
# Find files by name
find /var/www -name '*.css'
This will print out the full path/filename to all files under
/var/www that end in
.css. Example output:
For more info:
# Find files containing text
grep font /var/www/html/style.css
This will print all lines containing the pattern
font in the specified file. Example output:
font-weight: bold; font-family: monospace;
grep font /var/www/html/
This doesn't work as you'd hoped. You get:
grep: /var/www/html/: Is a directory
You need to
grep recursively to make it work, using the
grep -R font /var/www/html/
Hey nice! Check out the output of this one:
/var/www/html/admin/index.php: echo '<font color=red><b>Error: no dice</b></font><br/>'; /var/www/html/admin/index.php: echo '<font color=red><b>Error: try again</b></font><br/>'; /var/www/html/style.css: font-weight: bold; /var/www/html/style.css: font-family: monospace;
Notice that when
grep is matching multiple files, it prefixes the matched lines with the filenames. You can use the
-h option to get rid of that, if you want.
For more info:
# File Manipulation
Files and directories (another name for folders) are at the heart of Linux, so being able to create, view, move, and delete them from the command line is very important and quite powerful. These file manipulation commands allow you to perform the same tasks that a graphical file explorer would perform.
Create an empty text file called
mv myFile myFirstFile
View the contents of a file:
View the content of a file with pager (one screenful at a time):
View the first several lines of a file:
View the last several lines of a file:
Edit a file:
See what files are in your current working directory:
Create an empty directory called
Create multi path directory: (creates two directories, src and myFirstDirectory)
mkdir -p src/myFirstDirectory
Move the file into the directory:
mv myFirstFile myFirstDirectory/
You can also rename the file:
user@linux-computer:~$ mv myFirstFile secondFileName
Change the current working directory to
Delete a file:
Move into the parent directory (which is represented as
Delete an empty directory:
Delete a non-empty directory (i.e. contains files and/or other directories):
rm -rf myFirstDirectory
Make note that when deleting directories, that you delete
/ that will wipe your whole filesystem.
# File/Directory details
ls command has several options that can be used together to show more information.
l option shows the file permissions, size, and last modified date. So if the root directory contained a dir called
test and a file
someFile the command:
user@linux-computer:~$ ls -l
Would output something like
-rw-r--r-- 1 user users 70 Jul 22 13:36 someFile.txt drwxrwxrwx 2 user users 4096 Jul 21 07:18 test
The permissions are in format of
drwxrwxrwx. The first character represents the file type
d if it's a directory
- otherwise. The next three
rwx are the permissions the user has over the file, the next three are the permissions the group has over the file, and the last three are the permissions everyone else has over the file.
rwx stands for if a file can be read, the
w represents if the file can be modified, and the
x stands for if the file can be executed. If any permission isn't granted a
- will be in place of
So from above
user can read and modify
someFile.txt but the group has only read-only rights.
To change rights you can use the
chmod ### fileName command if you have sudo rights.
r is represented by a value of 4,
w is represented by 2, and
x is represented by a 1.
So if only you want to be able to modify the contents to the
Owner rwx = 4+2+1 = 7 Group r-x = 4+0+1 = 5 Other r-x = 4+0+1 = 5
So the whole command is
chmod 755 test
Now doing a
ls -l would show something like
drwxr-xr-x 2 user users 4096 Jul 21 07:20 test
Used in conjunction with the
l option the
h option shows file sizes that are human readable. Running
user@linux-computer:~$ ls -lh
total 4166 -rw-r--r-- 1 user users 70 Jul 22 13:36 someFile.txt drwxrwxrwx 2 user users 4.0K Jul 21 07:18 test
To view hidden files use the
a option. For example
user@linux-computer:~$ ls -a
.profile someFile.txt test
Total Directory Size
To view the size of the current directory use the
s option (the
h option can also be used to make the size more readable).
user@linux-computer:~$ ls -s
total 4166 someFile.txt test
test directory had a file
anotherFile and you wanted to see it from the root folder, you could use the
R option which would list the recursive tree.
user@linux-computer:~$ ls -R
.: someFile.txt test ./test: anotherFile