This is an open-source eBook with 101 Linux commands that everyone should know. No matter if you are a DevOps/SysOps engineer, developer, or just a Linux enthusiast, you will most likely have to use the terminal at some point in your career.
Make sure to star the repository ⭐
- Basics
- Disk and File System Management
- Text Readers & Editors
- User and Group Management
- File System Permissions
- SSH
- Cronjobs
- Package Management
- 📃List of commands by category
- 📃List of commands by chapter
- 🔗Links
- 📖Other E-Books
- 🤲Contributing
Path | Content |
---|---|
/bin |
Binaries (User) |
/boot |
Static boot loader files |
/etc |
Host specific configs |
/lib |
Shared libraries and kernel modules |
/sbin |
Binaries (System/root) |
/var |
Varying files (e.g. Logs) |
/usr |
3rd party software |
/proc |
Pseudo file system |
/sys |
Pseudo file system |
/mnt |
Mountpoint for internal drives |
/media |
Mountpoint for external drives |
/home |
User homes |
/run |
PID files of running processes |
File System Commands
Command | Options | Description |
---|---|---|
cd |
- |
Navigate to last dir |
~ |
Navigate to home | |
~username |
Navigate to home of specified user | |
pwd |
Print working dir | |
ls |
Print dir content | |
-l |
Format as list | |
-a |
Show hidden items (-A without . and .. ) |
|
-r |
Invert order | |
-R |
Recurse | |
-S |
Sort by size | |
-t |
Sort by date modified | |
mkdir |
-p |
Create dir with parents |
cp |
-r |
Copy dir |
rmdir |
-p |
Remove dir and empty parents |
rm |
-rf |
Remove dir recursively, -f without confirmation |
mv |
Move recursively | |
find |
-iname pattern |
Search dir/file case-insensitive |
-mmin n |
Last modified n minutes ago | |
-mtime n |
Last modified n days ago | |
-regex pattern |
Path matches pattern | |
-size n[kMG] |
By file size (-n less than; +n greater than) |
|
! searchparams |
Invert search |
File Manipulation
Command | Options | Description |
---|---|---|
cat |
file |
Print content |
tac |
file |
Print content inverted |
sort |
file |
Print sorted |
file -r -u |
Print sorted descending without dublicates | |
head |
-n10 file |
Print lines 5-10 |
tail |
-f file |
Print new lines automatically |
cut |
-f -4,7-10,12,15- file |
Print selected fields (tab delimited) |
-c -4,7-10,12,15- file |
Print selected characters positions | |
-f 2,4 -d, --output-delimiter=$'\t' file |
Change delimiter (but use tab for output) | |
uniq |
file |
Hide consecutive identical lines |
file -c |
Show consecutive identical line count | |
file -u |
Hide consecutive identical lines | |
file |
file |
Get file type |
wc |
file |
Count Lines, Words, Chars (Bytes) |
Archiving
Command | Options | Description |
---|---|---|
tar |
cfv archiv.tar file1 file2 |
Create archive / add or overwrite content |
tfv archiv.tar |
Show content | |
xf archiv.tar [-C ~/extracted] |
Extract (and decompress) archive (to ~ / extracted) | |
cfvj archiv.tar.bz2 file |
Create bzip2 compressed archive | |
cfvz archiv.tar.gz file |
Create gzip compressed archive | |
cfa archiv.tar.[komp] file |
create compressed archive (auto type based on name) | |
bzip2 |
file1 file2 |
Dateien (einzeln) komprimieren |
-d file1 file2 |
Compress files (one at a time) | |
gzip |
file1 file2 |
Dateien (einzeln) komprimieren |
-d file1 file2 |
Decompress files |
Creating physical partitions is not required! You can create PVs directly!
Command | Options | Description |
---|---|---|
fdisk |
-l |
List physical disks and partitions |
/dev/sdb n |
Create new partition | |
/dev/sdb t 8e |
Change partition type to Linux LVM | |
mkfs.xfs |
/dev/myVG/myVol |
Format LV with XFS |
mkfs.ext4 |
-f /dev/myVG/myVol |
Format LV with EXT4 (overwrite) |
blkid |
/dev/myVG/myVol |
Show UUID and formatting of volume |
mount |
Show what is mounted where | |
-t ext4 /dev/myVG/myVol /mountpoint |
Mount LV to /mountpoint | |
-a |
Mount as configured in /etc/fstab | |
umount |
/dev/myVG/myVol |
Unmount LV from /mountpoint |
/mountpoint |
Unmount LV from /mountpoint | |
df |
- | Show disk usage |
xfs_growfs |
/dev/myVG/myVol |
Resize xfs filesystem |
resize2fs |
/dev/myVG/myVol |
Resize ext3/4 filesystem |
Other
Command | Options | Description |
---|---|---|
<command> |
--help |
Help of current command (not standardized) |
-h |
||
-? |
||
man |
<command> |
Manual page of command |
-k keyword |
Search command by keyword (oder apropos ) |
|
alias |
Show aliases | |
name='befehl' |
Create alias |
The dot .
in front of hidden items is ignored by glob patterns!
Character | Description |
---|---|
? |
Any single character |
* |
Any characters |
[ac-e] |
1 character in enum |
[!ac-e] |
1 character not in enum |
Bash itself does not know regex. Use programs like grep
, sed
, awk
.
Control characters
Character | Description |
---|---|
. |
Any single character |
[ac-e] |
1 character in enum |
[^ac-e] |
1 character not in enum |
^ |
Start of string |
$ |
End of string |
\d |
Digit |
\D |
Not a digit |
\s |
Whitespace |
\S |
Not a Whitespace |
\< |
Start of word |
\> |
End of word |
pattern? |
Quantifier 0 or 1 |
pattern* |
Quantifier 0..n |
pattern+ |
Quantifier 1..n |
pattern{x} |
Quantifier exactly x |
pattern{x,} |
Quantifier x..n |
pattern{x,y} |
Quantifier x..y |
pattern{,y} |
Quantifier 0..y |
Grep
Command | Options | Description |
---|---|---|
grep |
pattern file |
Extended Regex |
-E pattern file |
Extended Regex | |
-v pattern file |
Invert match | |
-w pattern file |
Word match | |
-i pattern file |
Ignore case |
>
overwrite>>
append
Character | Description |
---|---|
> file or 1> file |
STDOUT to file |
< file |
Datei to STDIN |
2> file |
STDERR to file |
2>&1 |
STDERR to same target as STDOUT |
> file 2>&1 |
STDOUT and STDERR to file |
Command | Description |
---|---|
q |
Quit |
R |
Refresh content |
F |
Auto scroll |
g number |
Go to line |
m lowercaseLetter |
Mark line |
' lowercaseLetter |
Go to mark |
/pattern |
Search forward |
?pattern |
Search backward |
n |
Next search result |
N |
Last search result |
ESC u |
Remove highlighting from search |
VI/VIM
Editing
To leave editing mode press ESC
.
Command | Description |
---|---|
i |
insert before cursor |
a |
insert after cursor |
A |
insert at end of line |
o |
new line below |
O |
new line above |
u |
undo |
. |
repeat last command |
yy |
copy line |
5yy |
copy 5 lines |
p |
paste below |
P |
paste above |
x |
delete character |
5x |
delete 5 characters |
dd |
delete line |
5dd |
delete 5 lines |
:10,20d |
delete lines 10-20 |
d0 |
delete to line begin |
d$ |
delete to line end |
Navigation
Navigate as usual with arrow keys
, home
, end
, pg up
, pg dn
.
Command | Description |
---|---|
5G |
go to line 5 |
H |
go to top of screen |
M |
go to middle of screen |
L |
go to end of screen |
5w |
move over 7 words |
5b |
move back 5 words |
Other
Command | Description |
---|---|
/foo |
search forward |
?foo |
search backwards |
n |
repeat search |
:w |
save |
:q |
close |
:wq |
save and close |
:q! |
close without saving |
:!command |
run bash command |
:r foo |
read file foo into this file |
UID
UID | Type |
---|---|
<1000 | system account |
>1000 | user account |
User Database
User info without passwords is stored in /etc/passwd
.
username | PW | UID | GID | Kommentar | HOME | SHELL |
---|---|---|---|---|---|---|
hfict | x | 1000 | 1000 | /home/hfict | /bin/bash |
Group Database
Group info with secondary group members are stored in /etc/group
.
Primary group members are identified by GID in user database.
groupname | PW | GID | Users |
---|---|---|---|
wheel | x | 10 | hfict,user2 |
Password Database
Hashed user passwords are stored in /etc/shadow
.
Password encryption is configured in /etc/login.defs
.
username | PW | Last PW change | Minimum | Maximum | Warn | Inactive | Expire |
---|---|---|---|---|---|---|---|
hfict | [hash] | 17803 | 0 | 99999 | 7 |
PW:
[hash]
Encrypted test password! [hash]
Account locked!!
or*
Account locked, no password set
** Commands **
Command | Param | Description |
---|---|---|
id |
username |
Show a user's ID and groups |
who |
Show logged in users | |
last |
Show last logins | |
lastb |
Show last failed logins | |
sudo |
-u user command |
Execute command with user rights (default is root) |
-i or su - |
Shell with root rights | |
su |
Shell as root (non-login shell) | |
- |
Shell as root (login shell) | |
- user |
Shell as user | |
useradd |
-u 2101 -g primarygroup -c comment username |
Create user (without -g , new group will be created) |
usermod |
-G group1, group2 |
Define (overwrite) secondary groups |
-ag group, group2 |
Add secondary groups | |
-l username |
Change username | |
-L |
Lock Account | |
-U |
Unlock Account | |
-s shellpath |
Change shell | |
userdel |
-r username |
Delete user including home and mail spool |
passwd |
username |
Change password (interactive) |
groupadd |
groupname |
Create group (optionally set GID with -g ) |
groupdel |
groupname |
Delete group |
Permissions can be set on:
- User (owner)
- Group (owner)
- Others
Only root can change User. User can change Group.
Basic permissions (Add binary flags to combine):
Char | Binary Flag | Permission |
---|---|---|
r | 4 | read |
w | 2 | write |
x | 1 | execute |
Advanced permissions (place in front of basic permissions: chmod 1777 shared
).:
Char | Binary Flag | Name | Description |
---|---|---|---|
t / T | 1 | Sticky Bit | Others can't delete content (only applicable for directories) |
s / S | 2 | SGID-Bit | File: run with permissions of Group Dir: New elements inherit Group |
s / S | 4 | SUID-Bit | File is run with permissions of User (only applicable for files) |
Advanced permissions replace the x when using ls -l
. Lower case if x is set, upper case if x is not set.
Read permission on a directory only allows to see the directory itself but not it's contents. Use execute permission to show contents.
Commands
Command | Options | Description |
---|---|---|
chmod |
-R [uog] dirname |
Set permissions recursively using binary flags |
+[suog] filename |
Add permissions using binary flags | |
-[suog] filename |
Remove permissions using binary flags | |
u+x filename |
Add execute permission for User | |
g+wx filename |
Add write and execute permissions for Group | |
o-r filename |
Remove read permission for Others | |
chown |
-R user:group filename |
Change owner (User & Group) recursively |
user filename |
Change owner (User) | |
:group filename |
Change owner (Group) | |
chgroup |
group filename |
Change owner (Group) |
SSH
Configuration is done in /etc/ssh/sshd_config
.
Reload SSH service with systemctl reload sshd
to apply changes!
DenyUsers, AllowUsers, DenyGroups, AllowGroups override each other and are applied in the order listed above.
Config | Option | Description |
---|---|---|
PermitRootLogin |
no |
Deny root to login via SSH |
yes |
Allow root to login via SSH | |
without-password |
Allow only with private/public key auth | |
AllowUsers |
user1 user2 |
Allow only user1 and user2 |
DenyUsers |
user1 user2 |
Allow all users but user1 and user2 |
AllowGroups |
group1 group2 |
Allow only users from specified groups |
DenyGroups |
group1 group2 |
Allow all users but those in specified groups |
Cronjobs are configured in crontab files. Do not edit these files directly. Use crontab -e
instead. This runs all required actions to activate a cronjob after saving the edited crontab. The locations are as follows:
/var/spool/cron/username
user specific/etc/crontab
system wide crontab
The format of the files is (user specific crontabs do not have the column user-name):
Example of job definition:
.---------------- minute (0 - 59 | */5 [every 5 minutes])
| .------------- hour (0 - 23)
| | .---------- day of month (1 - 31)
| | | .------- month (1 - 12) OR jan,feb,mar,apr ...
| | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
| | | | |
* * * * * user-name command to be executed
Command | Description |
---|---|
rpm -q cronie |
Check if package is installed |
systemctl status crond.service |
Check if service is running |
crontab -l |
List current users crontab |
crontab -e |
Edit current users crontab |
crontab -e -u username |
Edit specific users crontab |
crontab -r |
Remove current users crontab |
Script folders
Scripts in one of the following directories will be executed at the intervall specified by the directory's name:
/etc/cron.hourly
/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
Allow / Deny usage
Add user names one per line to the following files:
/etc/cron.allow
Whitelist/etc/cron.deny
Blacklist
If none of the files exists, all users are allowed.
Logs and Results
Execution of cronjobs is logged in /var/log/cron
.
Results are sent to the users mail /var/spool/mail/username
.
Command | Description |
---|---|
rpm -i rpmfile|rpmurl |
Install package |
rpm -e packagename |
Uninstall package |
rpm -q packagename |
Check if package is installed |
rpm -ql packagename |
List files in a package |
rpm -qa |
List all installed packages |
rpm -qf /path/to/file |
Get package that installed the file |
rpm -qf $(which <exe>) |
Get package that installed the executable |
rpm -V packagename |
Validate installed package |
YUM
is configured in /etc/yum.conf
Repos are configured in /etc/yum.repos.d/
Log is in /var/log/yum.log
Command | Description |
---|---|
yum install packagename [-y] |
Install package (-y no confirm message) |
yum remove packagename |
Uninstall package |
yum update |
Update all installed packages |
yum update packagename |
Update specific package |
yum update pattern* |
Update packages using wildcard |
yum info packagename |
Get detailed info about package |
yum list packagename |
List installed and available packages |
yum search searchstring |
search for a package (name & summary) |
yum search all searchstring |
search for a package (all infos) |
yum deplist packagename |
List dependencies of a package |
yum reinstall packagename |
Reinstall (corrupted) package |
yumdownloader --resolve packagename |
Download rpm package with dependencies |
If you want to contribute, feel free to pick up a topic marked as TODO
and submit a pull request 🙌
Feel free to add new topics in case that you don't find one that you like from the current list.
- cd - change working directory
- ls - list directory contents
- dir - directory listing, columnar format
- pwd - return working directory name
- tree - list subdirectories in a tree structure
- cat/tac - concatenate and print files
- diff/sdiff - compare files line by line
- find - search for files
- grep - file pattern matcher
- head - display the first lines of a file
- locate - find files and directories
- stat - display file status
- tail - display the last lines of a file
- uniq - report or filter out repeated lines in a file
- awk - pattern-directed scanning and processing language
- chmod - change permissions
- chown - change file owner and group
- cp - copy files and directories
- cut - remove sections from files
- mkdir - make a new directory
- mv - move files and directories
- nano - text editor
- rm - delete files and directories
- rmdir - remove directory
- paste - merge corresponding or subsequent lines of file
- rsync - remote copy files
- scp - secure copy
- basename - strips directory information and suffixes from file path
- sed - text transformation tool
- sort - arrange or merge lines of files
- split - split a file into pieces
- touch - change file access and modification times
- vim - text editor
- bzip2 - block-sorting file compressor
- gzip - compression tool
- gunzip - decompression tool
- tar - create, extract and manipulate archives
- zip - package and compress files
- unzip - list, test, extract compressed ZIP files
- crontab - maintain individual tables used to drive the cron daemon
- df - display free disk space
- du - display disk usage statistics
- free - show memory usage information
- hostname - set or print name of current host system
- hostnamectl - change hostname settings
- ionice - get/set I/O process priority
- iostat - I/O statistics
- kill - terminate or signal a process by id
- killall - kill processes by name
- lsblk - display block and loop devices
- lsof - list open files
- mpstat - CPU statistics
- ncdu - curses-based disk usage
- ps - display process status
- pstree - show processes in tree format
- reboot - restart the system
- service - run an init script
- shutdown - close down the system at a specific time
- top/htop - display process information
- uname - prints operating system details
- useradd - add/update user accounts
- userdel - delete user account
- usermod - modify user properties
- vmstat - virtual memory statistics
- whereis - locate programs
- dig - DNS lookup utility
- ifconfig - configure network interface parameters
- ip - perform network administration tasks
- iptable - configure IPv4 network firewall
- lscpu - display CPU architecture information
- netstat - show network status
- ping - check network connectivity
- whois - information about Internet domain names and network numbers
- apt - Debian package management
- rpm - RPM package manager (RedHat)
- yum - package manager for RedHat Linux
For user modification, see useradd, userdel, usermod under System commands
- groups - show group memberships
- finger - shows information about users
- last - displays most recent user logins
- passwd - modify a user's password
- w - display who is logged in and what they are doing
- who - display who is logged in
- whoami - display effective user id
- clear - clear terminal screen
- env - display environment variables, or set variables for command execution
- exit - close the active session/shell
- printenv - print specified environment variables
- history - display the command history
- login - login and initiate a user session
- nohup - invoke a utility immune to hangups
- sleep - suspend execution for a time interval
- ssh - secure shell login
- su - substitute user identity
- sudo - execute a command as another user
- screen - start a screen session
- man - format and display online manual pages
- help - displays help about basic commands not covered by 'man'
- whatis - display one-line command descriptions
- bc - basic calculator
- cal - displays a calendar
- cmatrix - enter the Matrix
- curl - transfer data to or from a server
- echo - display interpreted arguments
- factor - prints prime factors of numbers
- printf - format output
- sl - runs a steam locomotive across your terminal
- wget - non-interactive web file download
- xargs - construct argument lists and execute utility
- yes - print continous output stream
- banner - Writes ASCII character strings in large letters to standard output.
If you want to contribute, feel free to pick up a topic, update it with New Examples | [Options]
and submit a pull request 🙌
Feel free to add new topics in case that you don't find one that you like from the current list.
- 001-the-ls-command.md
- 002-the-cd-command.md
- 003-the-cat-tac-command.md
- 004-the-head-command.md
- 005-the-tail-command.md
- 006-the-pwd-command.md
- 007-the-touch-command.md
- 008-the-cal-command.md
- 009-the-bc-command.md
- 010-the-df-command.md
- 011-the-help-command.md
- 012-the-factor-command.md
- 013-the-uname-command.md
- 014-the-mkdir-command.md
- 015-the-gzip-command.md
- 016-the-whatis-command.md
- 017-the-who-command.md
- 018-the-free-command.md
- 019-the-top-htop-command.md
- 020-the-sl-command.md
- 021-the-echo-command.md
- 022-the-finger-command.md
- 023-the-groups-command.md
- 024-the-man-command.md
- 025-the-passwd-command.md
- 026-the-w-command.md
- 027-the-whoami-command.md
- 028-the-history-command.md
- 029-the-login-command.md
- 030-the-lscpu-command.md
- 031-the-cp-command.md
- 032-the-mv-command.md
- 033-the-ps-command.md
- 034-the-kill-command.md
- 035-the-killall-command.md
- 036-the-env-command.md
- 037-the-printenv-command.md
- 038-the-hostname-command.md
- 039-the-nano-command.md
- 040-the-rm-command.md
- 041-the-ifconfig-command.md
- 042-the-ip-command.md
- 043-the-clear-command.md
- 044-the-su-command.md
- 045-the-wget-command.md
- 046-the-curl-command.md
- 047-the-yes-command.md
- 048-the-last-command.md
- 049-the-locate-command.md
- 050-the-iostat-command.md
- 051-the-sudo-command.md
- 052-the-apt-command.md
- 053-the-yum-command.md
- 054-the-zip-command.md
- 055-the-unzip-command.md
- 056-the-shutdown-command.md
- 057-the-dir-command.md
- 058-the-reboot-command.md
- 059-the-sort-command.md
- 060-the-paste-command.md
- 061-the-exit-command.md
- 062-the-diff-sdiff-command.md
- 063-the-tar-command.md
- 064-the-gunzip-command.md
- 065-the-hostnamectl-command.md
- 066-the-iptable-command.md
- 067-the-netstat-command.md
- 068-the-lsof-command.md
- 069-the-bzip2-command.md
- 070-the-service-command.md
- 071-the-vmstat-command.md
- 072-the-mpstat-command.md
- 073-the-ncdu-command.md
- 074-the-uniq-command.md
- 075-the-rpm-command.md
- 076-the-scp-command.md
- 077-the-sleep-command.md
- 078-the-split-command.md
- 079-the-stat-command.md
- 080-the-useradd-command.md
- 081-the-userdel-command.md
- 082-the-usermod-command.md
- 083-the-ionice-command.md
- 084-the-du-command.md
- 085-the-ping-command.md
- 086-the-rsync-command.md
- 087-the-dig-command.md
- 088-the-whois-command.md
- 089-the-ssh-command.md
- 090-the-awk-command.md
- 091-the-crontab-command.md
- 092-the-xargs-command.md
- 093-the-nohup-command.md
- 094-the-pstree-command.md
- 095-the-tree-command.md
- 096-the-whereis-command.md
- 097-the-printf-command.md
- 098-the-cut-command.md
- 099-the-sed-command.md
- 100-the-vim-command.md
- 101-the-chown-command.md
- 102-the-find-command.md
- 103-the-rmdir-command.md
- 104-the-lsblk-command.md
- 105-the-cmatrix-command.md
- 106-the-chmod-command.md
- 107-the-grep-command.md
- 108-the-screen-command.md
- 109-the-nc-command.md
- 110-the-make-command.md
- 111-the-basename-command.md
- 112-the-banner-command.md
- 113-the-alias-command.md
- 114-the-which-command.md
- 115-the-date-command.md
- ebook/en/content/116-mount-command.md
- Introduction to SQL
- Introduction to Git and GitHub
- Introduction to Bash Scripting
- Laravel tips and tricks
If you are contributing 🍿 please read the contributing file before submitting your pull requests.