Tool.Yun
Handy tools for developers
Barcode Reader
Barcode generator
GTIN Validator
QR Code decoder
QR Code generator
QR Contact Info generator
WiFi QR Code generator
tools.epc-qrcode-generator.name
Bash Cheatsheet
CSS Selectors Cheatsheet
Common Regex Cheatsheet
Docker Cheatsheet
Docker Compose cheatsheet
Docker SWARM cheatsheet
Dockerfile cheatsheet
Git Semantic Commit Cheatsheet
Git cheatsheet
JSONPath Syntax Cheatsheet
Jq Cheatsheet
K8s Cheatsheet
Markdown Cheat Sheet
Nano CheatSheet
Nginx Cheatsheet
Powershell Cheatsheet
Regex cheatsheet
Screen Command Cheatsheet
Sed cheatsheet
Tmux Command Cheatsheet
VIM Cheatsheet
XPath Syntax Cheatsheet
Zellij Command Cheatsheet
chmod Command Cheatsheet
Base64 Hex array encoder/decoder
Base64 file converter
Base64 string encoder/decoder
Csv to Data
Data Storage Unit converter
Email normalizer
Energy Consumption and Expense Computer
Env Variables Format Converter
Excel to data
Geographic Coordinates Converter
Integer base converter
Many Units Converter
Properties converter
Roman numeral converter
Text to UTF-8 binary
Text to Unicode
Torrent to Magnet
ULID generator
Unicode Characters to Java Entities Converter
dBm mW Converter
AGE Cryptography
Ansible vault crypt decrypt
Argon2 Hasher
Bcrypt
Bech32 Encoder/Decoder
CRC calculator
CSR Generator
Certificate/Key parser
ECDSA key pair generator
Ed25519 key pair generator
Encrypt / decrypt text
File Hasher
Hash text
Hmac generator
JWT Generator
JWT parser
Jasypt String Encryption
Niceware Bytes to Passphrase
PGP File Encryption
PGP encryption
PGP keygen
Paseto/PASERK Local
Paseto/PASERK Public/Private
RSA encryption
RSA key pair generator
RSA/DSA/ECDSA Signer and Verifier
SAML Parser
SSL Certificate converter
Shamirs Secret Sharing
X509 certificate generator
BMI Calculator
Calendar Converter
Credit Card Checker
Currency Converter
Explain Shell Command
IBAN validator and parser
IES Lighting Guidelines
ISBN Validator and Parser
ISO 3166 Country Codes Searcher
ISO 639 Searcher
Luhn Validator
Online Dictionary
Phone parser and formatter
RMB Uppercase Converter
Running Pace Calculator
SLA calculator
Software licence compatibility
Unicode Search
VAT Numbers Validator
Chronometer
Countdown
Cron/Weekday Alarm
Date+Durations Calculator
Date-time converter
Days Calculator
Duration Calculator
ETA calculator
ICAL File Parser
ICAL Generator
TTL calculator
Time Alarm
Timezone Converter
Week Numbers Converter
Which Day?
iCal Merger
Cron Expression Builder
ANSI Escape Tester
API Tester
CSS/JS Prettify & Minify
Cli command editor
Code/Scripts Highlighter
Curl Converter
Data Faker
Database Connection String Builder
Database Creation Builder
Database Table Generator
Django Secret Generator
Favicon Generator
File Splitter
GitIgnore Generator
Gitattributes Generator
HEX File Converter
Javascript Obfuscator
Javascript Prettifier
Javascript Unobfuscator/Unpacker
Json to Protobuf
Json to SQL INSERT
Json to Typescript
K6 Load Testing Script Generator
Mailto Generator
Open graph meta generator
Picomatch Tester
Pomodoro Timer
Quote Converter
SQL Minifier
SQL Parameters Generator
SQL prettify and format
Stacktrace prettier
String Escaper
Swagger UI tester
Docker Compose Format Converter
Docker Compose Validator
Docker Compose to .env file
Docker Compose to Docker run converter
Docker Compose to Quadlets
Docker Image Downloader
Docker Pangolin Labels
Docker compose to kubernetes
Docker inspect to Docker run
Docker run to Docker compose converter
Docker run to Quadlets
Docker run to kubernetes
Dockerfile Label Generator
Kubernetes RBAC Generator
Traefik Docker Compose Maker
Amortization Calculator
ActiveDirectory LDAP properties searcher
Bounce Email Parser
Cookies Parser
DMARC Report Analyzer
DNS Propagation Tester
DNS Tester
Dead Pixel Tester
EMV TLV decoder
ETH Transaction Decoder
Email Parser
File Type Detector
Floating point number converter
GZip/Deflate converter
HTTPS Tester
Hex Encoder/Decoder
Keycode info
MIME Encoding Converter
Middle-Endian Converter
MongoDB ObjectId Converter
Nmap Command Builder
Outlook MSG Parser
Outlook Safelink decoder
Parquet files Reader
RJ45 Cat6 Wiring Cheatsheet
Resistor Calculator
SMART Raw Converter
Sensitive data masker
Serial Port Console
Sharepoint Share Url Decoder
Short Urls Expander
Snowflake ID extractor
TCPDump Generator
Text Charset Detector/Decoder
URL Builder
URL parser
้”ฎ็›˜ๆต‹่ฏ•ๅ™จ
Card Picker
Coin Flipper
Dice Roller
Fortune wheel
BIP39 passphrase generator
Diceware Password Generator
NanoIDs generator
Numeronym generator
OTP code generator
Passphrase Generator
Pin Code Generator
Random numbers generator
Token generator
UUID converter
UUIDs generator
Camera recorder
Crop image
GIF to MP4
HEIC Converter
ICO/PNG converter
Image Color Inverter
Image Comparer
Image EXIF/Metadata/GPS/JPEG Quality reader
Image Formats Converter
Image resizer
Image to SVG (potrace)
OCRize image and PDF
Remove EXIF
Remove Image Background
SVG Previewer
Watermarker
CSV to JSON
JS to JSON converter
JSON Editor
JSON Flattener/Unflattener
JSON Linter
JSON Merger
JSON diff
JSON minify
JSON prettify and format
JSON sort master
JSON to .env
JSON to C#
JSON to CSV
JSON to Data
JSON to Go
JSON to JS converter
JSON to Java Entity
JSON to MessagePack
JSON to TOML
JSON to TS
JSON to XML
JSON to YAML converter
JSON to object
Jq/JSONPath Tester
Json Escaper/Unescaper
Json Query
Json Size Analyzer
Json string converter
Json to PHP Code
Json to PHP-Array
Json to Python
Json to SQL DDL
Json to Schema
Message Pack to JSON
ObjGen to JSON
PHP-Array to JSON
tools.json-patch.name
Epub to Markdown
Format Converter
HTML to markdown
Markdown Diff
Markdown Editor
Markdown Lorem Ipsum
Markdown Table Generator
Markdown Table Prettifier
Markdown preview
Markdown to DOCX
Markdown to HTML
Markdown to Text
Markdown to data
Markdown toc generator
Paste as Markdown
Binary Calculator
Math Formats Converter
Math OCR
Math evaluator
Tip calculator
Trigonometric/Equation Curve Visualizer
Aspect Ratio Calculator
Benchmark builder
Geo distance calculator
Percentage calculator
ARPA Decoder
Apache LogRotate Generator
BIMI DNS Generator
Basic auth generator
Chmod calculator
Cloudflare DNS/RDAP Queries
Crontab generator
Curl Command Generator
DKIM DNS Generator
DMARC DNS Generator
DNS Queries
DNSBL Checker
Data Transfer Rate Calculator
FStab Generator
HAR Sanitizer
HDD calculator
HTAccess generator
Htpasswd/htaccess generator
IP Geo Location
IP Subnets Exclude Calculator
IPv4 Subnets Lister
IPv4 address converter
IPv4 range expander
IPv4 subnet calculator
IPv4-6/IPRange/CIDR in IPRange/CIDR/IPMask
IPv4/6 Range to CIDR(s) Calculator
IPv6 ULA generator
Integers to IPv4/IPv6
Iptables Generator
Ipv4/6 CIDR to IP Range Calculator
Ipv6 address converter
Ipv6 subnet calculator
MAC Address Converter
MAC address generator
MAC address lookup
Microphone Tester
Multi link downloader
My IP Address
Nginx formatter
Option43 generator
PTR DNS Generator
Password strength analyser
Ping
Port Numbers
Punycode Converter
RAID Calculator
RAID Reliability Calculator
Random port generator
Restic Command Generator
Rsync Generator
SIP Authorization
SPF DNS generator
Shell Commands Formatter
Shell Commands Linearizer
Shutdown Command Generator
TCP/UDP Port Tester
UFW Command Generator
Visual Subnet Calculator
WPA PSK generator
Websocket tester
Whois Checker
Wireguard Config Generator
X-VR-SpamCause Decoder
ZPOOL RAID calculator
ZPool Cheatsheet
Zxcvbn Password Strength
firewalld command line generator
tools.url-redirection-checker.name
HTML to PDF
PDF Compressor
PDF Text Extractor
PDF signature checker
Pdf Concatener
Pdf Decrypt and Unlock
Pdf Encrypt
Pdf Linearize/FastWeb
Pdf Page Extractor
Acceleration Converter
Angle Units Converter
Area Units Converter
Energy Units Converter
Fitness Computer
Food Energy Converter
Force Units Converter
Frequency Converter
Illuminance Converter
Length Units Converter
Mass Units Converter
Power Converter
Pressure Units Converter
SI Prefixes Converter
Speed Converter
Temperature converter
Volume Flow Rate Converter
Volume Units Converter
TOML Linter
TOML to JSON
TOML to YAML
AI Prompt Splitter
ASCII Art Text Generator
Case converter
Citation Generator
Distinct Words
Duplicate Lines Finder
Emoji picker
Extract text from HTML
Folder Structure Diagram
Font Compare
GPT Token Encoder/Decoder
GPT Token Estimator
I and L Checker
Image to ASCII Art
JSON to TOON
Keyboard Layout Converter
Levenshtein Calculator
List converter
Lists Comparer
Lorem ipsum generator
Mermaid exporter
Morse Code Converter
Pack files for AI
RSVP Reader
Random Line Picker
Regex Tester
Rune converter
Sed Command generator
Smart Text Replacer and Linebreaker
Social Link Sharer
String obfuscator
TOON to JSON
Tab to Spaces
Text Translator
Text diff
Text statistics
Text to NATO alphabet
Text to Unicode Names
Unicode Formatter
Unicode to GSM-7
Zalgo Generator/Banner
CSS Gradient Generator
CSS Units Converter
CSS XPath Converter
Color Contrast Checker
Color Wheel
Color converter
Css prettifier
Device information
Encode/decode url formatted strings
Escape HTML entities
HTML Minifier
HTML Prettifier
HTML WYSIWYG editor
HTML cleaner
HTML to XHTML
HTML to data
HTTP status codes
Image to CSS
MIME types
REM Pixel converter
SVG placeholder generator
Slugify string
UTM Url Generator
Url Cleaner
Url Fanger
Url Text Search Fragment Maker
User-agent parser
ObjGen to HTML
XML Linter
XML formatter
XML to JSON
XPath Tester
XSLT tester
YAML Flattener/Unflattener
YAML Merger
YAML prettify and format
YAML to JSON converter
YAML to TOML

Bash Cheatsheet

Bash common commands

Bash is the default shell on most Linux systems and the language of most glue scripts. This sheet covers the interactive shortcuts, the syntax you forget between scripts, and the safety flags worth putting at the top of every file.

#!/usr/bin/env bash
set -euo pipefail

โŒจ๏ธ Keyboard Shortcuts

KeysDoes
Ctrl+A / Ctrl+EJump to the start / end of the line
Ctrl+B / Ctrl+FBack / forward one character
Alt+B / Alt+FBack / forward one word
Ctrl+U / Ctrl+KCut to the start / end of the line
Ctrl+WCut the word before the cursor
Alt+DCut the word after the cursor
Ctrl+YPaste back what you last cut
Ctrl+T / Alt+TSwap the last two characters / words
Alt+.Insert the last argument of the previous command
Ctrl+LClear the screen
Ctrl+RSearch the history backwards
Ctrl+GAbort the history search
Ctrl+CInterrupt the running command
Ctrl+DEnd of input โ€” logs out of an empty prompt
Ctrl+ZSuspend the running command
Ctrl+S / Ctrl+QFreeze / resume terminal output
Alt+U / Alt+LUpper-case / lower-case to the end of the word

๐Ÿ•ฐ History

# the last few hundred commands
history

# run command number 42
!42

# run the last command again, or the last one starting with 'ssh'
!!
!ssh

# the last argument of the previous command โ€” also Alt+.
!$

# every argument of the previous command
!*

# re-run the last command with a substitution
^old^new

# forget a command you would rather not keep
history -d 42

# do not record commands that start with a space, and drop duplicates
export HISTCONTROL=ignoreboth
export HISTSIZE=10000 HISTFILESIZE=20000

๐Ÿ“ Files & Directories

# list: long, human sizes, hidden files, newest last
ls -lhAtr

# tree view of a directory
tree -L 2

# copy, move, delete
cp -r src/ dest/
mv old new
rm -rf directory

# create nested directories in one go
mkdir -p project/{src,test,docs}

# symbolic and hard links
ln -s /path/to/target linkname
ln target hardlink

# where is a file, and what is it?
find . -name '*.log' -mtime -7
find . -type f -size +100M
locate nginx.conf
which python3
type -a ls
file archive.bin
stat report.pdf

# disk usage: this directory, and the filesystem
du -sh *
du -h --max-depth=1 | sort -h
df -h

# archives
tar czf backup.tar.gz directory/
tar xzf backup.tar.gz
zip -r archive.zip directory/
unzip archive.zip

๐Ÿ”Ž Text & Search

# grep: recursive, line numbers, case-insensitive
grep -rni "pattern" .

# only the matching part, or only the file names
grep -o 'v[0-9.]*' file
grep -rl "TODO" src/

# invert, count, context
grep -v "debug" app.log
grep -c "error" app.log
grep -B2 -A2 "exception" app.log

# head, tail, follow
head -20 file
tail -f /var/log/syslog

# columns, sorting, counting
cut -d',' -f1,3 data.csv
sort -u names.txt
sort -k2 -n scores.txt
uniq -c sorted.txt
wc -l file

# the classic: what are the top ten IPs in this log?
awk '{print $1}' access.log | sort | uniq -c | sort -rn | head

# replace across many files
sed -i 's/old/new/g' *.conf

# translate or delete characters
tr 'a-z' 'A-Z' < file
tr -d '\r' < dos.txt > unix.txt

# split a stream: to a file and onward down the pipe
command | tee output.log | grep error

# build command lines from input
find . -name '*.py' | xargs wc -l
find . -name '*.tmp' -print0 | xargs -0 rm

๐Ÿ–ง System & Network

# who and where am I
whoami; hostname; uname -a; uptime

# processes
ps aux | grep nginx
pgrep -a node
top
htop

# memory and load
free -h
vmstat 1 5

# what is listening, and what has this file open
ss -tulpn
lsof -i :8080
lsof /var/log/app.log

# connectivity
ping -c 4 example.com
traceroute example.com
dig example.com +short
ip addr show
curl -I https://example.com

# transfer files
scp file user@host:/path/
rsync -avz --progress src/ user@host:/dest/

# remote shell, with a tunnel
ssh user@host
ssh -L 8080:localhost:80 user@host

# services and logs (systemd)
systemctl status nginx
journalctl -u nginx -f --since "1 hour ago"

๐Ÿ“ฆ Variables

# assignment: no spaces around the =
name="value"

# only for this one command
DEBUG=1 ./script.sh

# export to child processes
export PATH="$HOME/bin:$PATH"

# read input from the user
read -p "Name: " name
read -rs -p "Password: " pass

# command substitution
today=$(date +%F)

# arithmetic
count=$(( count + 1 ))
let "n = 5 * 3"

# read-only and integer variables
declare -r VERSION=1.0
declare -i counter=0
VariableHolds
$0The name of the script
$1 โ€ฆ $9Positional arguments
$#How many arguments were passed
$@All arguments, each one quoted separately
$*All arguments as a single word
$?Exit status of the last command
$$PID of the current shell
$!PID of the last background job
$_Last argument of the previous command
$HOME $USER $PWD $OLDPWDThe usual environment
$RANDOMA random integer
$LINENOThe current line number โ€” handy in traps

๐Ÿ”ค Parameter Expansion

ExpansionResult
${var:-default}default when var is unset or empty
${var:=default}The same, and assigns it
${var:?message}Abort with message when unset โ€” great for required arguments
${var:+value}value only when var is set
${#var}The length of the value
${var:offset:length}A substring
${var#pattern}Strip the shortest match from the start
${var##pattern}Strip the longest match from the start โ€” ${path##*/} is basename
${var%pattern}Strip the shortest match from the end โ€” ${file%.txt} drops the extension
${var%%pattern}Strip the longest match from the end
${var/old/new}Replace the first match
${var//old/new}Replace every match
${var^^} / ${var,,}Upper-case / lower-case the whole value
path="/var/log/app.log"
echo "${path##*/}"    # app.log
echo "${path%/*}"     # /var/log
echo "${path%.log}"   # /var/log/app

๐Ÿ“š Arrays

# indexed arrays
fruits=(apple banana cherry)
fruits[3]="date"

echo "${fruits[1]}"       # banana
echo "${fruits[@]}"       # every element
echo "${#fruits[@]}"      # how many elements
echo "${!fruits[@]}"      # the indexes
echo "${fruits[@]:1:2}"   # a slice

for fruit in "${fruits[@]}"; do
  echo "$fruit"
done

# associative arrays (bash 4+)
declare -A color
color[apple]="red"
color[banana]="yellow"

echo "${color[apple]}"
for key in "${!color[@]}"; do
  echo "$key is ${color[$key]}"
done

๐Ÿงช Tests & Conditions

Use [[ ... ]] in bash โ€” it handles empty variables and patterns far better than the old [ ... ].

FilesTrue when
-e fileIt exists
-f fileIt exists and is a regular file
-d fileIt exists and is a directory
-L fileIt is a symbolic link
-s fileIt exists and is not empty
-r -w -xYou can read / write / execute it
-O fileYou own it
f1 -nt f2f1 is newer than f2 (-ot for older)
StringsTrue when
-z "$s"The string is empty
-n "$s"The string is not empty
"$a" == "$b"They are equal (= also works)
"$a" != "$b"They differ
"$a" < "$b"Sorts before, in the current locale
"$s" == pre*Glob match โ€” unquoted right-hand side
"$s" =~ ^re$Regex match, captures land in $BASH_REMATCH
NumbersMeaning
-eqEqual
-neNot equal
-ltLess than
-leLess than or equal
-gtGreater than
-geGreater than or equal
if [[ -f "$config" && -r "$config" ]]; then
  echo "readable"
elif [[ -d "$config" ]]; then
  echo "that is a directory"
else
  echo "missing"
fi

# arithmetic comparison reads more naturally in (( ))
if (( count > 10 )); then echo "plenty"; fi

๐Ÿ”€ Flow Control

# for over a list, a glob, or a range
for name in alice bob; do echo "$name"; done
for f in *.log; do gzip "$f"; done
for i in {1..10}; do echo "$i"; done
for (( i = 0; i < 10; i++ )); do echo "$i"; done

# while and until
while read -r line; do echo "$line"; done < input.txt
until ping -c1 host &>/dev/null; do sleep 5; done

# case
case "$1" in
  start)   echo "starting" ;;
  stop)    echo "stopping" ;;
  restart) echo "restarting" ;;
  *)       echo "usage: $0 {start|stop|restart}"; exit 1 ;;
esac

# select builds a numbered menu
select choice in build test deploy; do
  echo "you picked $choice"
  break
done

# loop control
continue   # skip to the next iteration
break      # leave the loop

๐Ÿงฐ Functions

greet() {
  local name="${1:?name required}"
  local greeting="${2:-Hello}"
  echo "$greeting, $name!"
  return 0
}

greet "World"
greet "World" "Good morning"

# capture the output, and check the status
message=$(greet "World")
if ! greet; then echo "greet failed"; fi

# make a function available to subshells
export -f greet

โžก๏ธ Redirection

SyntaxDoes
> fileSend stdout to a file, replacing it
>> fileAppend stdout to a file
2> fileSend stderr to a file
2>&1Send stderr wherever stdout is going
&> fileSend both to a file (bash)
> file 2>&1The portable form of the same
< fileRead stdin from a file
<<EOF โ€ฆ EOFHere-document
<<-EOF โ€ฆ EOFHere-document, leading tabs stripped
<<< "string"Here-string
|Pipe stdout into the next command
|&Pipe stdout and stderr
> /dev/null 2>&1Discard everything
<(command)Process substitution โ€” a command as a file
tee fileWrite to a file and pass the stream on
# a heredoc, expanded
cat <<EOF > config.ini
host=$HOSTNAME
port=8080
EOF

# a heredoc, literal (quoted delimiter)
cat <<'EOF' > script.sh
echo "$HOME is not expanded here"
EOF

# compare the output of two commands without temporary files
diff <(sort a.txt) <(sort b.txt)

โš™๏ธ Jobs & Processes

# run in the background, and list the jobs
long_task &
jobs

# bring back to the foreground, or resume in the background
fg %1
bg %1

# Ctrl+Z suspends the foreground job

# survive logout
nohup ./script.sh > out.log 2>&1 &
disown -h %1

# wait for background jobs
wait
wait $!

# signals
kill 1234
kill -9 1234
kill -TERM %1
pkill -f "node server.js"

# give a command a deadline
timeout 30s ./slow_task.sh

# clean up on exit, whatever happens
trap 'rm -f "$tmpfile"' EXIT
trap 'echo interrupted; exit 130' INT TERM

๐Ÿ›ก Safe Scripting

#!/usr/bin/env bash
# -e  exit on any failing command
# -u  treat unset variables as an error
# -o pipefail  a pipeline fails if any stage fails
set -euo pipefail

# make word splitting predictable
IFS=$'\n\t'

# always quote expansions
cp "$src" "$dest"

# check the syntax without running anything
bash -n script.sh

# trace every command as it runs
bash -x script.sh
set -x; risky_command; set +x

# a more informative trace prefix
export PS4='+ ${BASH_SOURCE}:${LINENO}: '

# report where a script died
trap 'echo "failed at line $LINENO with status $?" >&2' ERR

# and lint it before it reaches anyone else
shellcheck script.sh

โš ๏ธ set -e has surprising corners: it does not fire inside if, &&, || or command substitutions used in assignments. It is a seatbelt, not autopilot โ€” still check what matters explicitly.

๐ŸŽจ Colours

Escape sequences take the form \033[<style>;<colour>m, and \033[0m resets. \e and \x1B are the same character as \033.

ColourForegroundBrightBackground
Black309040
Red319141
Green329242
Yellow339343
Blue349444
Magenta359545
Cyan369646
White379747
StyleCodeStyleCode
Reset0Underline4
Bold1Blink5
Dim2Reverse7
RED='\033[0;31m'
GREEN='\033[0;32m'
BOLD='\033[1m'
RESET='\033[0m'

echo -e "${GREEN}ok${RESET} โ€” ${RED}${BOLD}failed${RESET}"

# only colourise when stdout is a terminal
if [[ -t 1 ]]; then RED='\033[0;31m'; RESET='\033[0m'; else RED=''; RESET=''; fi

๐Ÿ’ก Tips

# aliases and functions belong in ~/.bashrc
alias ll='ls -lhA'
alias gs='git status -sb'
mkcd() { mkdir -p "$1" && cd "$1"; }

# reload the config after editing it
source ~/.bashrc

# brace expansion saves a lot of typing
cp config.yaml{,.bak}
mkdir -p src/{components,utils,tests}

# repeat the previous command as root
sudo !!

# go back to the previous directory
cd -

# run something regardless of the current directory
(cd /tmp && ./task.sh)

# time a command, and keep a transcript of a session
time ./build.sh
script session.log

๐Ÿ“š Resources

  • GNU Bash manual
  • ShellCheck โ€” lints your scripts
  • Bash Pitfalls
  • Google Shell Style Guide
  • explainshell โ€” break down any command line