101 Linux commands Open-source eBook and CLI tool

💻 ++101 Linux commands Open-source eBook
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 ⭐
If you need a Linux virtual machine to test these commands on, use the following referral link to get a free $200 Credit For DigitalOcean!
Introduction to Linux eBook
If you are looking for a comprehensive guide for beginners, check out this eBook: Introduction to Linux eBook
📙 Online eBook
An online copy :zap:🌐 of this ebook is available here 📙.
🔽 Download links
📚 Multiple Formats Available
This eBook is now available in multiple formats to suit different reading preferences:
- 📄 PDF (Light Theme): Download PDF - Perfect for printing and desktop reading
- 🌙 PDF (Dark Theme): Download PDF - Ideal for dark mode readers
- 📱 EPUB: Download EPUB - Compatible with e-readers, tablets, and mobile devices
- 🌐 HTML: Download HTML - Single-page web version
🔄 Latest Releases
Visit our Releases page to download the latest versions or browse previous releases.
Star History
Content
- File Hierarchy Standard (FHS) - Commands - General Disk Manipulation (non-LVM) - Globs (Wildcards) - Regex - Stream redirection - Less - VI - RPM - YUM - Directory Navigation - File Commands - File and Directory Manipulation - Package archive and compression tools - System commands - Networking Commands - Package Management - User Information commands - Session commands - Getting Help - ApplicationsBasics
File Hierarchy Standard (FHS)
| 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 |
Commands
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 |
Disk and File System Management
General Disk Manipulation (non-LVM)
Creating physical partitions is not required! You can create PVs directly!
| Command | Options | Description | | --------------------------------------------------------------------------------------------------------- | ------------------------------------- | ------------------------------------ | | fdisk | -l | List physical disks and partitions | | | /dev/sdbn | Create new partition | | | /dev/sdbt8e | 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 current mounted file systems | | | -t ext4 /dev/myVG/myVol /mountpoint | Mount LV to /mountpoint | | | -a | Mount as configured in /etc/fstab | | umount | | Unmount a file system | | | /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 |
Globs (Wildcards)
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 |
Regex
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 |
Stream redirection
>overwrite>>append
> 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 |
Text Readers & Editors
Less
| 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
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 |
User and Group Management
UID
| UID | Type | | ----- | -------------- | | <1000 | system account | | >1000 | user account |
User Database
User info without passwords is stored in /etc/passwd.
| username | PW | UID | GID | GECOS | 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
| 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 |
File System Permissions
Permissions can be set on:
- User (owner)
- Group (owner)
- Others
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
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
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/usernameuser specific/etc/crontabsystem wide crontab
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 interval specified by the directory's name:
/etc/cron.hourly/etc/cron.daily/etc/cron.weekly/etc/cron.monthly
Add user names one per line to the following files:
/etc/cron.allowWhitelist/etc/cron.denyBlacklist
Logs and Results
Execution of cronjobs is logged in /var/log/cron. Results are sent to the users mail /var/spool/mail/username.
Package Management
RPM
| 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
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 |
📃 List of commands by category:
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.
Directory Navigation
- 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
File Commands
- cat/tac - concatenate and print files
- column - format text into columns
- 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
File and Directory Manipulation
- 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
- ln - create links between 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
Package archive and compression tools
- bzip2 - block-sorting file compressor
- cpio - copy files to/from archives
- gzip - compression tool
- gunzip - decompression tool
- tar - create, extract and manipulate archives
- zip - package and compress files
- unzip - list, test, extract compressed ZIP files
System commands
- badblocks - search for bad blocks on storage devices
- cfdisk - curses-based disk partitioning tool
- crontab - maintain individual tables used to drive the cron daemon
- df - display free disk space
- dmidecode - retrieve hardware information from DMI table
- dmesg - display kernel ring buffer messages
- du - display disk usage statistics
- free - show memory usage information
- fsck - file system check and repair
- hostname - set or print name of current host system
- hostnamectl - change hostname settings
- ionice - get/set I/O process priority
- iostat - I/O statistics
- journalctl - view systemd journal logs
- kill - terminate or signal a process by id
- killall - kill processes by name
- lsb_release - display LSB and distribution information
- lsblk - display block and loop devices
- lsof - list open files
- lspci - list PCI devices
- mkfs - build file systems
- 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
- systemctl - control systemd services
- top/htop - display process information
- tty - print terminal name
- uname - prints operating system details
- useradd - add/update user accounts
- userdel - delete user account
- usermod - modify user properties
- vmstat - virtual memory statistics
- watch - execute commands repeatedly
- whereis - locate programs
Networking Commands
- dig - DNS lookup utility
- ifconfig - configure network interface parameters
- ip - perform network administration tasks
- iptables - configure netfilter firewall
- lscpu - display CPU architecture information
- netstat - show network status
- nmcli - NetworkManager command line interface
- ping - check network connectivity
- traceroute - trace network path to destination
- ufw - uncomplicated firewall
- whois - information about Internet domain names and network numbers
Package Management
- apt - Debian package management
- rpm - RPM package manager (RedHat)
- yum - package manager for RedHat Linux
User Information commands
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
Session commands
- bg - put jobs in background
- clear - clear terminal screen
- env - display environment variables, or set variables for command execution
- exit - close the active session/shell
- export - set environment variables
- fg - bring jobs to foreground
- history - display the command history
- jobs - display active jobs
- login - login and initiate a user session
- nohup - invoke a utility immune to hangups
- printenv - print specified environment variables
- screen - start a screen session
- sleep - suspend execution for a time interval
- ssh - secure shell login
- su - substitute user identity
- sudo - execute a command as another user
- wall - message to all users
Getting Help
- apropos - search manual page names and descriptions
- man - format and display online manual pages
- help - displays help about basic commands not covered by 'man'
- whatis - display one-line command descriptions
Applications
- !! - history expansion (repeat last command)
- 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
- time - measure command execution time
- 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.
- aplay - aplay is a command-line to play audio files.
- spd-say - plays the given text as the sound from the command line.
📃 List of commands by chapter:
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-iptables-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