====== Linux ======
===== BASH Cheat sheet =====
\\
==== BASH scripting basics ====
^Syntax^Explanation^
|#!/bin/bash|Used to tell the operating system the path it should use to interpret the file.|
|bash file.sh|Used to execute the script in the terminal.|
|./file.sh|Used to execute the script if it is executable.|
|#|Used to make comments in the script.|
|&&|logical AND operator.|
|| ||logical OR operator.|
|$#|Used to expands the number of arguments passed to the script.|
|$0|Used to expands to the name of the shell.|
|$1, $2|Used as an input parameter that you can add when running script.|
|exit [0-255]|Used to exit the script and return the number from 0 to 255.|
|$|Used for parameters and variables.|
|()|Used for running commands in a subshell.|
|$()|Used to save the output of commands.|
|(())|Used for arithmetic.|
|$(())|Used to retrieve the output of arithmetic expressions.|
|[]|Used in filename expansion and string manipulation.|
|<( )|It is very similar to a pipe and used for process substitution.|
|{ }|Used to expand sequences.|
|${ }|Used for string manipulation and variable interpolation.|
|||Used to run multiple commands together.|
|>|Used to send output to a file.|
|>>|Used to append output to a file.|
|;|Used to separate multiple commands.|
|<|Used to get input from a file.|
|~|Expands to the home directory.|
|~/.bashrc|Read by every non-login shell.|
|/etc/profile|Executed automatically at login.|
\\
==== File Test Operators ====
Here, we will list some helping testing operators for permissions, size, date, file type, or existence in the bash script.
^Operators^Explanation^
|-e|To test if a file exists.|
|-f|To test if a given file is a regular file.|
|-d|To test if the file is a directory.|
|-b|To test if the file is a block device.|
|-s|To test if the file is not zero sizes.|
|-L|To test if the file is a symbolic link.|
|-S|To test if the file is a socket.|
|-r|To test if the file has read permission.|
|-w|To test if the file has write permission.|
|-x|To test if the file has execute permission.|
|-g|Set group id on file or directory.|
|-u|Set user id on file or directory.|
|-k|Set a sticky bit.|
|-O|You are the owner of the file.|
|f1 -nt f2|file f1 is newer than f2.|
|f1 -ot f2|file f1 is older than f2|
\\
==== Comparison Operators ====
Comparison operators are used in bash to compare two strings to check if they are equal or not. Here, we will list some comparison operators including, string, and integer operators.
^Integer Operators^^
^Operators^Explanation^
|-eq|is equal to|
|-ne|is not equal to|
|-gt|is greater than|
|-ge|is greater than or equal to|
|-lt|is less than|
|-le|is less than or equal to|
^String Operators^^
^Operators^Explanation^
|=|is equal to|
|==|is equal to|
|!=|is not equal to|
|<|less than|
|<=|is less than or equal to|
|>|greater than|
|>=|is greater than or equal to|
|-z|string is null|
|-n|string is not null|
\\
==== Regular Expressions ====
Regular expressions are shortened as ‘regexp' or ‘regex'. They are strings of characters that define a search pattern. It can be used as a search or search & replace operation.
^Expressions^Explanation^
|.|Matches any single character.|
|?|The preceding item is optional and will be matched, at most, once.|
|*|The preceding item will be matched zero or more times.|
|+|The preceding item will be matched one or more times.|
|{N}|The preceding item is matched exactly N times.|
|{N,}|The preceding item is matched N or more times.|
|^|Matches the empty string at the beginning of a line.|
|$|Matches the empty string at the end of a line.|
|[a-d]|Matches any one character in the range a-d.|
\\
==== Loops and Conditions ====
A loop is a statement in a bash programming language that allows code to be repeatedly executed. You can set specific conditions during the script execution.
^Loops^Explanation^
|if then fi|Used to test a condition.|
|if then else fi|Used to test a condition and use a fallback if the test fails.|
|if then elif else fi|Used to test a condition and use a fallback if all tests fail.|
|for do done|Iterate over a list of values.|
|while do done|Used to performs a given set of commands an unknown number of times as long as the given condition evaluates to true.|
|until do done|Used to execute a given set of commands as long as the given condition evaluates to false.|
|sleep time|Wait for a specified amount of time before continuing through the script.|
|break|Used to exit from the while or for loop but continue the rest of the script.|
|continue|Used to skip the current iteration of a loop and continue to the next iteration of the loop.|
\\
==== Bash Arrays and Functions ====
^Array^Explanation^
|array=("elements of array")|Used to create an array of strings.|
|${array[0]}|Used to get the first element of the array.|
|${array[*]}|Used to get all values in the array.|
|${array[-1]}|Get the last value in the array.|
|${array[@]}|Expand all of the array elements.|
|shift|Move argument from $2 to $1.|
|function() { content-of-function }|Used to define a function.|
|alias|Used to list all aliases defined in the current session.|
|alias alias='any command'|Used to define an alias.|
\\
==== Common Utilities and Switches ====
This cheat sheet will show you the most useful commands and switches to help you in your network and system administration.
^Commands^Explanation^
|ls -l|List files by type and permission.|
|ls -a|List all files, including hidden files.|
|pwd|Display current working directory.|
|whoami|Who you are logged in as.|
|last|Display last user logins information.|
|find /home -name *.txt|Search all text files in /home directory.|
|find . -size 10k -print|Find all files greater than 10k in the current directory.|
|egrep "(foo|bar)" file.txt|Find the words foo and bar in file.txt.|
|sed s/foo/bar/g file.txt|Find the word foo and replace it with a bar in file.txt.|
|locate file.txt|Find the location of the file.txt quickly.|
|grep foo file.txt|Searches the word foo in file.txt.|
|ps -ef|To check all running services.|
|netstat -ant|To check all network connections.|
|netstat -ent|To check established network connections.|
|ifconfig|To check all network interfaces, IPs, and Mac addresses.|
|ping|Used to check host reachability.|
|nslookup|Used for DNS query.|
|ssh|Used to login remote Linux system.|
|scp -r dir user@remote-ip:/opt/|Copy all files and directories recursively from the local system to a remote system.|
|scp -r user@remote-ip:/opt/ dir/|Copy all files and directories recursively from the remote system to a local system.|
|rsync -avz localdir user@remote-ip:/backup|Synchronize files/directories between the local and remote systems.|
|df -h|Shows free and used space on mounted filesystems.|
|du -sh|Shows total disk usage of the current directory.|
|free -m|Show free and used memory and swap space.|
|lsof|Lists files opened by running processes.|
|chown user:group filename|Change the owner of the file and directory.|
|chmod ugo file.txt|Change the user, group, and other permissions for file.txt.|
|kill pid|Kill any running process.|
|passwd username|Used to set or reset the user password.|
|top|Display all running processes, memory usage, cpu usage in real-time.|
\\
==== Shell Builtins ====
Builtin commands are contained within the shell itself. They called from a shell, that is executed directly in the shell instead of an external executable program.
^Builtins^Explanation^
|.|Used to reads and runs commands from a designated file in the current shell.|
|alias|Used to define an alias for a specific command.|
|bg|Run a job in background mode.|
|bind|Used to bind a keyboard sequence.|
|break|Used to exit from a running loop in script.|
|cd|Change the directory to another directory.|
|command|Run a specific command without the normal shell lookup.|
|continue|Resumes the next iteration of the loop in script.|
|declare|Used to declare a variable.|
|dirs|Shows a list of all remembered directories.|
|disown|Remove a job from the job table.|
|enable|Used to enable or disable built-in command.|
|exec|Replace the shell process with the specified command.|
|exit|Used to exit the shell with an exit status.|
|export|Used to set a variable available for sub-process.|
|fc|Select a list of commands from the history list.|
|fg|Run a job in foreground mode.|
|hash|Used to find and remember the full path of the specified command.|
|help|Used to display the help file.|
|history|List the history of all commands.|
|jobs|List all active jobs.|
|logout|Used to exit from the current shell.|
|pwd|Display the path of the current working directory.|
|read|Read one line from STDIN and assigns it to a variable.|
|popd|Removes entries from the directory stack.|
|pushd|Add a directory to the directory stack.|
|printf|Displays text in a formatted string.|
|source|Read and executes commands from a specified file in the current shell.|
|times|Displays the accumulated user and system shell time.|
|wait|Make the shell wait for a job to finish.|