Shell CheatSheet

Seitdem ich regelmäßig mit headless Linux Systemen zu tun habe, pflege ich eine Liste mit Einträgen, die ich entweder a) häufig brauche und nicht jedes mal googeln will oder b) eher komplex sind und die Suche danach etwas länger gedauert hat. 

Es folgt eine Aufschlüsselung der (wichtigsten) Zeilen. Die original Liste pflege ich immer direkt auf GitHub.com

Wenn ich etwas aus der Liste brauche, suche ich mit grep einfach die entsprechende Zeile raus. Alternativ gehts auch mit vim ziemlich schnell.

cat cheatsheet | grep -C 2 PATH
vim cheatsheet

/PATH

Installation/Wartung

# Software update inkl. upgrade & clean
sudo apt-get update && sudo apt-get upgrade -y && sudo apt-get autoclean && sudo apt-get autoremove
sudo apt-get -u upgrade # displays only changes/dry-run

# Verzeichnis zu PATH Hinzufügen
PATH=$PATH:./sampledir

# Programm in apt Verzeichnis suchen
apt-cache search programname

# Festplattenbelegung anzeigen
df -h

# Anwendung/Script zum Autostart hinzufügen
vim /etc/rc.local

# List recently installed packages
grep " install " /var/log/dpkg.log

# Monitor logfile
tail -fn0 myfile.log

# Lese/Schreibe IOs für Laufwerke anzeigen
sudo iotop


# Prozess mit kill und pid abschießen
sudo kill #pid

# Alle laufenden Prozesse mit pid ausgeben
ps -aux | grep Prozessname

# Add job to a crontab
sudo crontab -e (for user root)
crontab -e (for user pi)
crontab -l (list entries for user, location: /var/spool/cron/crontabs, root only)

Netzwerk

# ARP Netzwerk Scan
arp-scan --interface=eth0 192.168.178.0/24

# IP Adresse/Range suchen
nmap -sP 192.168.178.0/24

# Change to static IP in /etc/network/interfaces (Alte Methode!)
# Ethernet
auto eth0
allow-hotplug eth0
iface eth0 inet static
address 192.168.1.2
netmask 255.255.255.0
gateway 192.168.1.1
dns-nameservers 192.168.1.1

# Change to static IP via dhcpcd deamon (neue Methode!, ab Jessie)
sudo vim /etc/dhcpcd.conf
interface eth0
static ip_address=192.168.178.37/24
static routers=192.168.178.1
static domain_name_servers=192.168.178.1
sudo service networking restart (extra ausführen)

# Fetch external ip address (ipv6 also avilable)
curl -4 icanhazip.com

# Setup dhcp server
sudo apt-get install isc-dhcp-server
sudo vim /etc/default/isc-dhcp-server (enter interface(s))
sudo vim /etc/dhcp.dhcpd.conf (add subnets)
wiki https://wiki.ubuntuusers.de/ISC-DHCPD/

Fail2Ban

# Fail2Ban usage
sudo fail2ban-client set nginx-http-auth unbanip 111.111.111.111
sudo fail2ban-client status
sudo fail2ban-client status nginx-http-auth
sudo iptables -S

tar, gz, rsync, dd

# Mirror two directories with rsync
sudo rsync -rtvu --delete /etc/nagios3/ /home/pi/.backup/nagios3/

# Full backup with tar
tar -cvpf /backups/fullbackup.tar --directory=/ --exclude=proc --exclude=sys --exclude=dev/pts
--exclude=backups --exclude=mnt

# Copy file via rsync over the network
rsync -r -v --progress -e shh user@remote-system:/address/to/file /home/user/

# Unzip tar Archiv
tar -xvf file.tar

# Unzip rar Archiv
unzip file.zip -d folder

# Create zip Archive from subfolders
# compression leve from -1 to -9, verbose -v
zip -r /tmp/ar.zip ./folder

## Backup a drive into an image
# Full backup with dd and bzip2 (high compression level 9)
sudo dd if=/dev/mmcblk0 | bzip2 -9f ~bkup.img.bz2i
# Basic dd and gzip with defaults (compression should be -6)
sudo bash -c "dd if=/dev/mmcblk0 | gzip > /mnt/pidrive/backup/pi31-backup-2016-11-03_xx-xx.img.gz" &i
# Basic dd with multicore compression (need to install pigz, shall be faster, huge cpu load, default compression = 6)
sudo bash -c "dd if=/dev/mmcblk0 | pigz > /mnt/pidrive/backup/pi31-backup-2016-11-03_xx-xx.img.gz" &
# dd with quick multicore compression (good enought and quite fast)
sudo bash -c "dd if=/dev/mmcblk0 | pigz -1 > /mnt/pidrive/backup/pi31-backup-2016-11-03_xx-xx.img.gz" &
# dd backup over ssh with fast multicore compression
sudo dd if=/dev/mmcblk0 | pigz -1 - | ssh pi@pi31 "cat > /mnt/pidrive/backup/ssh-pigz-image-pi21_2016-11-03_xx-xx.img.gz"

Raspberry

# Raspberry Linux Dist Upgrade
sudo rpi-update
sudo apt-get dist-upgrade

# CPU-Temperatur auslesen
/opt/vc/bin/vcgencmd measure_temp

# Stetup wifi for Raspi 3
sudo iwlist wlan0 scan
sudo nano /etc/wpa_supplicant/wpa_supplicant.conf
network={
ssid="The_ESSID_from_earlier"
psk="Your_wifi_password"
}

Benchmark

## Benchmark/Stress Test für Raspi (sysbench)
# CPU Test
sysbench --test=cpu --cpu-max-prime=20000 --num-threads=4 run

# HDD Benchmark/Test
sudo hdparm -tT /dev/sda

## HDD bzw. I/O Benchamrk mit dd
# Schreiben
dd if=/dev/zero of=tempfile bs=1M count=1024 conv=fdatasync,notrunc 
# Cache löschen
echo 3 | sudo tee /proc/sys/vm/drop_caches 
# Lesen
dd if=tempfile of=/dev/null bs=1M count=1024

Shell

# Shell farbig machen
Folgende Zeile in ~/.bashrc entkommentieren: force_color_prompt=yes

#For-Schleife
for i in hans peter alexander; do echo "hallo $i"; done //Eigene Menge
for i in {1..5}; do echo "hallo nummer $i"; done //Intervall
for i in *; do echo "hallo datei $i"; done //Alle Dateien im Verzeichnis
for i in param1 param2 param3; do for j in *; do echo "hallo $j mit $i"; done; done //geschachtelt

# Script/Programm im Hintergrund ausüfhren ohne Ausgabe
nohup sh myscript.sh &
nohup sh myscript > out.log &

Passwörter

# Generate a random password (multiple ways)
< /dev/urandom tr -dc '12345!@#$%qwertQWERTasdfgASDFGzxcvbZXCVB' | head -c8; echo ""
< /dev/urandom tr -dc _A-Z-a-z-0-9 | head -c6
openssl rand -base64 32
date +%s | sha256sum | base64 | head -c 32 ; echo

# Generate password for htpasswd
echo -e "your-username:`perl -le 'print crypt("your-password","salt")'`" > /etc/nginx/htpasswd

Sonstiges

# PDFs zusammenführen
pdfunite input1.pdf input2.pdf merge.pdf

# Change Hostname
sudo hostname -b NEUER_HOSTNAME

# Verzeichnisgröße anzeigen (show directory size)
du -sh ./directory
du -h --max-depth=1 ./someDirectory

# Test nginx Configuration
sudo nginx -t -c /etc/nginx/nginx.conf

# ShellInABox Config
sudo apt-get install shellinabox
sudo vim /etc/default/shellinabox
SHELLINABOX_PORT=31420

# Zeichenketten ersetzten - String Replacement
sed -i -- s/old-pi/new-pi/g fritz-box.cfg

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.