diff --git a/archetypes/default.md b/archetypes/default.md index ef85f04..6f8968a 100644 --- a/archetypes/default.md +++ b/archetypes/default.md @@ -9,7 +9,7 @@ hideToc: false enableToc: true enableTocContent: true tocPosition: inner -tocLevels: ["h2", "h3", "h4"] +tocLevels: ["h1", "h2", "h3"] tags: - series: diff --git a/config/_default/config.toml b/config/_default/config.toml index bb4de01..cd9fbb6 100644 --- a/config/_default/config.toml +++ b/config/_default/config.toml @@ -33,9 +33,9 @@ googleAnalytics = "" lineNumbersInTable = true noClasses = false [markup.tableOfContents] - endLevel = 4 + endLevel = 3 ordered = false - startLevel = 2 + startLevel = 1 [outputs] home = ["HTML", "RSS", "SearchIndex"] diff --git a/content/en/posts/bash_cheatsheet.md b/content/en/posts/bash_cheatsheet.md new file mode 100644 index 0000000..639a368 --- /dev/null +++ b/content/en/posts/bash_cheatsheet.md @@ -0,0 +1,187 @@ +--- +author: "Devoalda" +authorEmoji: 🐺 +title: "Bash Cheatsheet" +date: 2020-07-06T16:47:03+08:00 +description: Simple Bash Cheatsheet +draft: false +hideToc: false +enableToc: true +enableTocContent: true +tocPosition: inner +tocLevels: ["h1", "h2", "h3"] +tags: +- bash +- linux +- script +- cheetsheet +series: +- Bash +categories: +- bash +- script +image: +--- + +# Introduction +This is a simple bash script cheatsheet. + +# Variables +## Define variables +```bash +abc=123 +hello=321 +qwerty=asdf +``` +### Assign output of command to variable +``` bash +music=$(mpc) +``` + +### Argument +```bash +word=$1 +``` + +### Argument and default value +``` bash +words=${1-hello} # If variable not set or null, use default. +FOO=${VARIABLE:=default} # If variable not set or null, set it to default. +``` + +{{< alert theme="info" dir="ltr" >}} +Ensure no spaces between variable name and value +{{< /alert >}} + +## View variable content +```bash +$ echo $abc +# outputs: 123 +$ echo "$(echo "upg")" +# outputs: upg +$ echo '$(echo "upg")' +# outputs: $(echo "upg") +``` +# Loops +## For loop +``` bash +for i in {1..5} +do + echo "Hello $i" +done +``` + +### {START..END..INCREMENT} +``` bash +for i in {0..10..2} +do + echo "Hello $i" +done +``` + +### Files +``` bash +for file in $HOME +do + echo $file +done +``` + +## While loop +``` bash +while [ condition ] +do + echo "hello" +done +``` + +### Infinite while loop +``` bash +while true +do + echo "hello" +done +``` +{{< alert theme="info" dir="ltr" >}} +Hit CTRL-C to stop the loop +{{< /alert >}} + +### Read File +``` bash +#!/usr/bin/env bash +FILE=${1-hello.txt} + +while read line +do + # use $line variable to process line + echo $line +done < "$FILE" +``` +# If Else Loop +``` bash +if [ condition ]; then + echo 1 +elif [ condition2 ]; then + echo 2 +else + echo 3 +fi +``` +# Conditions +| Operator | Description | +|----------|----------------------| +| -eq | Equal | +| -lt | Less than | +| -ge | Greater than | +| == | 2 Strings equal | +| != | 2 Strings not equal | +| ! | Statement is false | +| -d | Directory is present | +| -e | File is present | + +## Condition Usage Examples +``` bash +if [[ "$1" == "bash" && "$2" = "shell" ]]; then + echo "$1 $2" + +elif [ "$1" == "bash" ]; then + echo "$1" + +elif [ -e "$HOME/hello.txt" ] + echo "File Present" + +elif [ ! -d "$HOME/Documents" ] + echo "Directory NOT Present" +else + echo Condition +fi +``` +# Case +``` bash +word=$1 + +case "$word" in + hello) + echo hello + ;; + + bye) + echo bye + ;; + + *) + echo Universal + ;; +esac +``` +# Functions +``` bash +function fun(){ + echo fun +} +``` +{{< expand "Credits/References" >}} +[stackoverflow1](https://stackoverflow.com/questions/6697753/difference-between-single-and-double-quotes-in-bash) +[stackoverflow2](https://stackoverflow.com/questions/2013547/assigning-default-values-to-shell-variables-with-a-single-command-in-bash) +{{< /expand >}} + diff --git a/content/en/posts/directory_cleanup.md b/content/en/posts/directory_cleanup.md index 2aa81b1..da7cfee 100644 --- a/content/en/posts/directory_cleanup.md +++ b/content/en/posts/directory_cleanup.md @@ -9,7 +9,7 @@ hideToc: false enableToc: true enableTocContent: true tocPosition: inner -tocLevels: ["h2", "h3", "h4"] +tocLevels: ["h1", "h2", "h3"] tags: - python - automation @@ -22,25 +22,25 @@ categories: image: images/postImages/Broom.png --- -## Introduction +# Introduction This is a script to automate cleanups in any directory. It will move files into folders according to the file extension. -### Why? +## Why? A clean home/project directory allows us to be able to work productively, without spending much time searching for the particular document/file we need. This is a simple script to help you clean your directory in seconds -### Caution +## Caution {{< alert theme="danger" dir="ltr" >}} __DO NOT__ run the script on any directory containing system/important files. {{< /alert >}} -## Dependencies +# Dependencies * [Python3.8](https://www.python.org/) ## Code -### Imports +## Imports This is a python script, we will be using modules [os](https://docs.python.org/3/library/shutil.html) and [shutil](https://docs.python.org/3/library/shutil.html). First of all, create a new script called script.py, and import the modules required for this ```python #!/usr/bin/env python @@ -56,7 +56,7 @@ Without the shebang, we will need to use the full command ```bash python3 script.py ``` -### Defining Main +## Defining Main This step is __optional__, although it will make the code look cleaner ```python def main(): @@ -68,10 +68,10 @@ if __name__ == "__main__": This is how I usually start my code, you will be able to run your code now with the command ```bash ./script.py -# Output: Hello,World! + Output: Hello,World! ``` -### Defining a dictionary +## Defining a dictionary A dictionary has a key, value pair, similar to a JSON file structure. In this script, we will create a dictionary of File type(Key) and File Extensions (Value). Insert the following ___above___ the line ```def main():``` @@ -89,7 +89,7 @@ DIRECTORIES_DICTIONARY = { ``` You are able to expand this dictionary by adding your own file types and file extensions in a similar structure. -### Creating folders based on directory key +## Creating folders based on directory key In ```def main():```, add the following lines ```python DIRECTORIES= [] @@ -103,7 +103,7 @@ for dir in DIRECTORIES_DICTIONARY: _Note_ the indentation of the lines! When you run the script, you will see new folders being created in your directory -### Moving file to correct directories +## Moving file to correct directories Append the following lines to your main function ```python file_moved_counter = 0 @@ -137,20 +137,20 @@ These lines will move files to their folder based on their file extensions, and In this script, I've used both modules os and shutil to move files to show the difference in syntax for each of the modules. -### Running the script +## Running the script ```bash ./script.py ``` To test the script, you should add/create files with any extensions in the same directory as your script. Upon running the script, you should see all your files moved and categorized according to their file extensions. -## Tips +# Tips * I usually create a project folder for any scripts that I create, and run the script in the folder. This prevents any unwanted modifications to any directory. * Note that indentations in a python script is very __important__. * This script is useful in certain directories, like Documents or Downloads, as it categorizes those files accordingly and cleans the directory. -## Summary +# Summary Thats it! You have yourself a cleanup script that you can use to clean any directory you want! The full code is below, do take a look if you are facing any problems! -### Full Code +## Full Code {{< expand "Python Code" >}} ``` python #!/usr/bin/env python @@ -212,7 +212,7 @@ if __name__ == "__main__": ``` {{< /expand >}} -## Credits +# Credits {{< expand "Credits" >}} Broom icon icon by Icons8 diff --git a/content/en/posts/fail2ban.md b/content/en/posts/fail2ban.md index 7595133..fedcd67 100644 --- a/content/en/posts/fail2ban.md +++ b/content/en/posts/fail2ban.md @@ -21,16 +21,14 @@ series: - Linux Programs --- -# Fail2ban Setup guide - -## Introduction +# Introduction Fail2ban scans log files (e.g. /var/log/apache/error_log) and bans IPs that show the malicious signs -- too many password failures, seeking for exploits, etc. Generally Fail2Ban is then used to update firewall rules to reject the IP addresses for a specified amount of time, although any arbitrary other action (e.g. sending an email) could also be configured. Out of the box Fail2Ban comes with filters for various services (apache, courier, ssh, etc). Fail2Ban is able to reduce the rate of incorrect authentications attempts however it cannot eliminate the risk that weak authentication presents. Configure services to use only two factor or public/private authentication mechanisms if you really want to protect services. I have Fail2Ban set up on my personal workstation to help protect my machine from bruteforce attacks. Fail2Ban is a free and open source software that helps in securing your Linux server against malicious logins. If you have set up an SSH server on your machine, you might find a huge number of IPs trying to login to your machine via SSH, hence Fail2Ban will be able to protect your system from unwanted malicious logins. -## Installation +# Installation Install fail2ban on machine ```bash yay -S fail2ban diff --git a/content/en/posts/ssh.md b/content/en/posts/ssh.md index 9ac97b7..07bb46d 100644 --- a/content/en/posts/ssh.md +++ b/content/en/posts/ssh.md @@ -9,7 +9,7 @@ hideToc: false enableToc: true enableTocContent: true tocPosition: inner -tocLevels: ["h2", "h3", "h4"] +tocLevels: ["h1", "h2", "h3"] image: images/postImages/SSH.png tags: - linux @@ -22,9 +22,8 @@ categories: - linux - program --- -# SSH Setup guide -## Introduction +# Introduction SSH is an important tool as a system administrator. It allows for remote connection to your machine through a client, and the ability to control your machine from wherever you are. However, malicious attackers are able to do a brute force attack on your machine via SSH. Therefore, this tutorial will not only setup your ssh server, it will strengthen the server to help against unwanted brute force attacks. @@ -33,19 +32,19 @@ This tutorial will setup SSH on your machine on port 2222, instead of the defaul You will need 2 machines to use keypair authentication -## Installation +# Installation Install openssh and ufw with your package manager on both your local and remote machines ```bash yay -S openssh ufw ``` -## Start and enable ssh service +# Start and enable ssh service ```bash sudo systemctl start sshd sudo systemctl enable sshd ``` -## Key generation +# Key generation Use Command ```bash ssh-keygen -t rsa @@ -56,7 +55,7 @@ Follow the prompt to generate a key, copy key to remote machines **REST** of the configurations below are done in the ___remote___ machine -## SSH Configurations +# SSH Configurations On the **remote** machine, edit sshd_config file ```bash sudo vim /etc/ssh/sshd_config @@ -95,7 +94,7 @@ Allow ssh port on the firewall, I am using non-default ports for ssh sudo ufw limit 2222/tcp comment 'SSH Port 2222 limit' ``` -## Connection +# Connection On your machine, connect to the remote machine with: ``` ssh -p 2222 @