Tool.Yun
Nyttige verktøy for utviklere
Beskjær bilde
Bilde til SVG (potrace)
Bildefargeinverter
Bildeformatkonverter
Bildesammenligning
Bildestørrelsesendrer
EXIF/metadata/GPS/JPEG-bildekvalitetsleser
Fjern EXIF
Fjern bildebakgrunn
GIF til MP4
HEIC-konverter
ICO/PNG-konverter
Kameraopptak
OCR-redigering av bilder og PDF-filer
SVG-forhåndsvisning
Vannmerke
BMI-kalkulator
Forklar Shell-kommandoen
IBAN validering og analysering
IES-belysningsretningslinjer
ISBN-validator og parser
ISO 3166-landskodesøker
ISO 639-søker
Kalenderkonverterer
Kompatibilitet med programvarelisenser
Kredittkortkontrollør
Luhn-validator
Løpetempokalkulator
MVA-nummervalidator
Online ordbok
RMB store bokstaver konverter
SLA-kalkulator
Telefon format og parserer
Unicode-søk
Valutakonverterer
Cron/Ukedagsalarm
Dager Kalkulator
Dato-tid konverter
ETA kalkulator
Hvilken dag?
ICAL-filparser
ICAL-generator
Kalkulator for dato+varighet
Kronometer
Nedtelling
TTL-kalkulator
Tidsalarm
Tidssonekonverter
Uketallskonverter
Varighetskalkulator
iCal-fusjon
Docker Compose Format Converter
Docker Compose til .env-fil
Docker Compose til Docker-kjørekonverter
Docker Compose til Quadlets
Docker Compose-validator
Docker Pangolin-etiketter
Docker run til Docker compose konverter
Docker-bildenedlaster
Docker-inspeksjon for å kjøre Docker
Docker-kjøring til Kubernetes
Docker-kjøring til Quadlets
Docker-skriving til kubernetes
Dockerfile-etikettgenerator
Kubernetes RBAC-generator
Traefik Docker Compose Maker
Amortiseringskalkulator
Akselerasjonsomformer
Arealenheter Konverter
Energienheter konverter
Frekvensomformer
Hastighetsomformer
Kraftenheter konverter
Lengdeenheter Konverter
Lysstyrkekonverter
Masseenheter konverter
Matenergiomformer
SI-prefikskonverterer
Strømomformer
Temperatur konverter
Treningsdatamaskin
Trykkenhetskonverter
Vinkelenheter Konverter
Volumenheter Konverter
Volumstrømningshastighetskonverter
BIP39 nøkkelords generator
Diceware passordgenerator
NanoID-generator
Numeronymgenerator
OTP kode generator
Passordgenerator
Postkodegenerator
Tilfeldige tallgenerator
Tokengenerator
UUID-generator
UUID-konverter
CSV til JSON
JS til JSON-konverter
JSON Linter
JSON forskjønning og formatering
JSON minifiser
JSON til .env
JSON til C#
JSON til CSV
JSON til JS-konverter
JSON til Java-enhet
JSON til MessagePack
JSON til TOML
JSON til TS
JSON til XML
JSON til YAML konverterer
JSON til data
JSON til objekt
JSON to Go
JSON-forskjell
JSON-fusjon
JSON-redigeringsprogram
JSON-sorteringsmaster
JSON-utflatning/oppheving av utflatning
Jq/JSONPath-tester
Json Escaper/Unscaper
Json til PHP-array
Json til PHP-kode
Json til Python
Json til SQL DDL
Json til skjema
Json-spørring
Json-strengkonverterer
Json-størrelsesanalysator
Meldingspakke til JSON
ObjGen til JSON
PHP-array til JSON
tools.json-patch.name
Bash-jukseark
CSS-velgere jukseark
Docker Compose-jukseark
Docker SWARM-jukseark
Docker-jukseark
Dockerfile-jukseark
Git Semantic Commit-jukseark
Git jukselapp
JSONPath-syntaks-jukseark
Jq-jukseark
Jukseark for nedbetaling
K8s jukseark
Nano-jukseark
Nginx-jukseark
Powershell-jukseark
Regex-jukseark
Sed jukselapp
Skjermkommando-jukseark
Tmux-kommando-jukseark
VIM-jukseark
Vanlig Regex-jukseark
XPath-syntaks-jukseark
Zellij-kommandoen jukseark
chmod-kommandoen Cheatsheet
Base64 Hex array-koder/dekoder
Base64 fil konverter
Base64 string kode/dekoder
Csv til data
E-postnormalisering
Egenskapskonverter
Energiforbruks- og utgiftsdatamaskin
Excel til data
Geografiske koordinatkonverterer
Heltalls konverter
Konverter for datalagringsenheter
Konverter for konvoluttvariabler
Konverter fra Unicode-tegn til Java-enheter
Mange enheter konverter
Romertall konverter
Tekst til ASCII binært
Tekst til Unicode
Torrent til magnet
ULID-generator
dBm mW-omformer
AGE-kryptografi
Ansible Vault Crypt Dekryptering
Argon2 Hasher
Bcrypt
Bech32-koder/dekoder
CRC-kalkulator
CSR-generator
ECDSA-nøkkelpargenerator
Ed25519 nøkkelpargenerator
Filhasher
Hash tekst
Hmac-generator
JWT-generator
JWT-parser
Jasypt-strengkryptering
Krypter / decrypter tekst
Niceware Bytes til passordfrase
PGP-filkryptering
PGP-kryptering
PGP-nøkkelgenerator
Paseto/PASERK Local
Paseto/PASERK Offentlig/Privat
RSA nøkkelpar generator
RSA-kryptering
RSA/DSA/ECDSA-signatør og verifikator
SAML-parser
SSL-sertifikatkonverter
Sertifikat-/nøkkelparser
Shamirs hemmelige deling
X509 sertifikatgenerator
Binær kalkulator
Konverter for matematiske formater
Matematikk OCR
Matematikkevaluator
Tipskalkulator
Visualisator for trigonometrisk/ligningskurve
Cron-uttrykksbygger
Bygg en referansemåler
Geografisk avstandskalkulator
Kalkulator for sideforhold
Prosent kalkulator
Epub til Markdown
Forbedring av prisnedsettelsestabell
Forhåndsvisning av Markdown
Generator for avmerkingstabeller
HTML til prisnedsettelse
Lim inn som Markdown
Markdown Lorem Ipsum
Markdown-innholdsfortegnelsesgenerator
Markdown-redigeringsprogram
Nedgradering til DOCX
Nedgradering til data
Nedmerking til HTML
Nedmerking til tekst
Nedskrivningsforskjell
tools.markdown-format-converter.name
Bilde til CSS
CSS XPath-konverter
CSS-enhetskonverterer
CSS-forskjønner
CSS-gradientgenerator
Enhets informasjon
Farge konverter
Fargehjul
Fargekontrastkontroll
HTML WYSIWYG-editor
HTML streng rensing
HTML til XHTML
HTML til data
HTML-minifikator
HTTP status koder
Html-forskjønner
Html-renser
Kode/dekode URL-formaterte strenger
MIME typer
REM-pikselkonverter
SVG plassholder generator
Slugify streng
Søkefragmentskaper for URL-tekst
URL-renser
UTM URL-generator
Url Fanger
User-agent analysering
ARPA-dekoder
Analyseverktøy for passordstyrke
Apache LogRotate Generator
BIMI DNS-generator
Chmod kalkulator
Cloudflare DNS/RDAP-spørringer
Crontab-generator
DKIM DNS-generator
DMARC DNS-generator
DNS-spørringer
DNSBL-sjekker
FStab-generator
Formatering av skallkommandoer
Generator for avstengningskommandoer
Grunnleggende autentiseringsgenerator
HAR Sanitizer
HDD-kalkulator
HTAccess-generator
Heltall til IPv4/IPv6
Htpasswd/htaccess-generator
IP-geografisk plassering
IPv4 adresse konverter
IPv4 range utvider
IPv4 subnet kalkulator
IPv4-6/IPRange/CIDR i IPRange/CIDR/IPMaske
IPv4-delnettliste
IPv6 ULA-generator
IPv6-adressekonverter
Iptables-generator
Ipv6-subnettkalkulator
Kalkulator for IPv4/6 CIDR til IP-område
Kalkulator for IPv4/6-område til CIDR(er)
Kalkulator for dataoverføringshastighet
Kalkulator for ekskludering av IP-subnett
Krøllekommandogenerator
Linearisering av skallkommandoer
MAC address oppslagsverk
MAC adresse generator
MAC-adressekonverterer
Mikrofontester
Min IP-adresse
Nedlaster med flere lenker
Nginx-formatering
Option43-generator
PTR DNS-generator
Ping
Portnumre
Punycode-konverterer
RAID-kalkulator
RAID-pålitelighetskalkulator
Rsync-generator
SIP-autorisasjon
SPF DNS-generator
TCP/UDP-porttester
Tilfeldig port generator
UFW-kommandogenerator
Visuell subnettkalkulator
WPA PSK-generator
Websocket tester
Whois-sjekker
Wireguard-konfigurasjonsgenerator
X-VR-SpamCause-dekoder
ZPOOL RAID-kalkulator
ZPool-jukseark
Zxcvbn Passordstyrke
firewalld kommandolinjegenerator
tools.restic-command-generator.name
tools.url-redirection-checker.name
HTML til PDF
PDF signatur sjekker
PDF-kompressor
PDF-tekstuttrekker
Pdf Linearize/FastWeb
Pdf-dekryptering og opplåsing
Pdf-kryptering
Pdf-sammenkobling
Pdf-sideuttrekker
ActiveDirectory LDAP-egenskapssøker
DMARC-rapportanalysator
DNS-forplantningstester
DNS-tester
Død pikseltester
E-postparser
EMV TLV-dekoder
ETH-transaksjonsdekoder
Filtypedetektor
Flytallskonverter
GZip/Deflate-konverter
HTTPS-tester
Heksadesimal enkoder/dekoder
Informasjonskapsler-parser
Jukseark for RJ45 Cat6-ledninger
MIME-kodingskonverter
Maskering av sensitive data
Middle-Endian-konverter
MongoDB ObjectId-konverterer
Motstandskalkulator
Nmap-kommandobygger
Outlook MSG-parser
Outlook Safelink-dekoder
Parkettfiler Leser
Parser for avvist e-post
SMART Raw-konverter
Seriell portkonsoll
SharePoint-delings-URL-dekoder
Snøfnugg-ID-uttrekker
TCPDump-generator
Tastekode info
Teksttegnsettdetektor/dekoder
URL analyse
URL-bygger
Utvider for korte URL-er
键盘测试器
Kortvelger
Lykkehjul
Myntflipper
Terningkaster
GTIN-validator
QR Kode generator
QR-kodedekoder
QR-kontaktinformasjonsgenerator
Strekkodegenerator
Strekkodeleser
WiFi QR Kode generator
tools.epc-qrcode-generator.name
TOML til JSON
TOML til YAML
TOML-linter
AI-ledetekstdeler
ASCII kunsttekstgenerator
Bilde til ASCII-kunst
Bokstavkonvertering
Distinkte ord
Emoji velger
GPT-tokenestimator
GPT-tokenkoder/dekoder
Hallo, generator.
Havfrueeksportør
I og L Checker
JSON til TOON
Levenshtein-kalkulator
Liste konverterer
Lister Sammenlign
Mappestrukturdiagram
Morsekodekonverterer
Pakk filer for AI
RSVP-leser
Regex-tester
Runekonverter
Sammenligning av skrifttyper
Sed-kommandogenerator
Sitasjonsgenerator
Smart teksterstatning og linjebryter
Sosial lenkedeler
Streng obfuskator
Søker etter duplikatlinjer
TOON til JSON
Tabulator til mellomrom
Tastaturoppsettkonverterer
Tekst diff
Tekst statistikk
Tekst til NATO alfabetet
Tekst til Unicode-navn
Tekstoversetter
Tilfeldig linjevelger
Trekk ut tekst fra HTML
Unicode til GSM-7
Unicode-formatering
Zalgo-generator/banner
ANSI-rømningstester
API Tester
CLI kommando editor
CSS/JS Forskjønn og Minimer
Databaseopprettingsbygger
Databasetabelgenerator
Dataforfalsker
Django Secret Generator
Favicon-generator
Fildeler
GitIgnore-generator
Gitattributes Generator
HEX-filkonverterer
Javascript Prettifier
Javascript Unobfuscator/Unpacker
Javascript-forvirring
Json til Protobuf
Json til SQL INSERT
Json til Typescript
K6 Skriptgenerator for lasttesting
Kode-/skriptmarkering
Krøllekonverter
Mailto-generator
Picomatch-tester
Pomodoro-timer
SQL forskjønning and format
SQL-minifikator
SQL-parametergenerator
Sitatkonverterer
Stacktrace penere
Strengbygger for databasetilkobling
Strengeutløser
Swagger UI-tester
Åpne grafmetagenerator
ObjGen til HTML
XML formaterer
XML til JSON
XML-linter
XPath-tester
XSLT-tester
YAML forskjønning og formatering
YAML til JSON konverter
YAML til TOML
YAML-fusjon
YAML-utflating/oppreving

Bash-jukseark

Vanlige Bash-kommandoer

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