16.3.2019
Holger Trapp
base64 -d <<<aG9sZ2VyLnRyYXBwQGhyei50dS1jaGVtbml0ei5kZQo=
nach Doug McIlroy (in Peter H. Salus, A Quarter Century of Unix):
# https://www.meteor.com/install
curl https://install.meteor.com/ | sh
# Firefox komplett beenden
rm -rf ~/.mozilla
cp -ia ~/BACKUP/YESTERDAY/.mozilla/ ~
# Firefox starten
man ls # Standard: Pager less, Ende mit q info cp # Ende mit q vim -h id --help
firefox # Browser Firefox firefox -h # Hilfetext zum Kommando firefox ausgeben lassen firefox -ProfileManager # Firefox mit dem Profile Manager starten firefox -CreateProfile default # Firefox-Profil erzeugen thunderbird # Mailer Thunderbird eog *.jpg # Bildbetrachter "Eye of GNOME" für .jpg-Dateien mplayer *.mp3 # Movie Player für .mp3-Dateien ooffice *.xls # LibreOffice für .xls-Dateien
vim # Text-Editor Vim nano # Text-Editor nano alpine # Mailer Alpine mc # Midnight Commander - Dateimanager/visuelle Shell less x # Pager less für Datei x # Web-Browser w3m / lynx / links w3m www.tu-chemnitz.de links https://chemnitzer.linux-tage.de/2019/de/programm/vortraege
hostname # den Hostnamen ausgeben date # Datum/Uhrzeit ausgeben cal # Kalender des aktuellen Monats ausgeben cal -s 2015 # Kalender von 2015 mit Sonntag als erstem Tag cal -y # Kalender des aktuellen Jahres # alle .JPG-Dateien des aktuellen Verzeichnisses # auf 256x256 vergrößern/verkleinern mogrify -resize 256x256 *.JPG # Grafik mit Copyright-Vermerk versehen # siehe auch: Bildbearbeitung mit ImageMagick und Exiftool convert -gravity SouthEast -pointsize 70 -fill blue \ -draw "text 60,20 '© Mikis'" mikis.jpg mikis_c.jpg
alias l='ls -l'
# rot13 mit tr
function rot13() { tr A-Za-z N-ZA-Mn-za-m ; }
echo xynegrkg | rot13
# starte xpdf für alle .pdf-Dateien im Hintergrund
for i in **/*.pdf
do
xpdf "$i" &
done
# Nutzersuche in /etc/passwd nutzer=$1 if [[ -z $nutzer ]] then read -e -p 'NKZ: ' nutzer fi # oder: # [[ -z $nutzer ]] && read -e -p 'NKZ: ' nutzer grep "^$nutzer:" /etc/passwd
#!/bin/sh
#
# endlos die Dateien aller Unterverzeichnisse des aktuellen
# Verzeichnisses mit mplayer abspielen, deren Name
# "Oronte", "oronte", "Monti" oder "monti" enthält
shopt -s extglob
while true
do
for i in */*@([Oo]ronte|[Mm]onti)*
do
mplayer "$i"
done
done
# Kalenderprogramm mit diversen Argumenten/Optionen rufen cal 3 2010 cal -3 3 2010 LC_ALL=C cal -y -s # LC_ALL=C bewirkt englische Ausgabe cal -m 3 2010 # Einträge des Wurzelverzeichnisses / im langen Format auflisten ls -ld /
# Umwandlung von Klein- in Großbuchstaben mit tr tr a-z A-Z < /etc/hosts tr a-z A-Z < /etc/hosts > /tmp/result tr a-z A-Z < /etc/hosts >> /tmp/result set -o noclobber tr a-z A-Z < /etc/hosts >| /tmp/result # String-Suche mit fgrep fgrep localhost /etc/hosts /xyz fgrep localhost /etc/hosts /xyz > /dev/null fgrep localhost /etc/hosts /xyz 2> /dev/null fgrep localhost /etc/hosts /xyz 2> /tmp/err > /tmp/out fgrep localhost /etc/hosts /xyz &> /tmp/out_err # SSH Version String lesen: zuerst mit eingebautem # Bash-Kommandos, dann mit externem Kommando read < /dev/tcp/login.tu-chemnitz.de/22 ; echo $REPLY sed 1q < /dev/tcp/login.tu-chemnitz.de/22
# Hier-Dokumente # - streicht Tabs am Zeilenanfang cat <<-! Hier-Dokument mit Substitutionen $PWD $(date) ! cat <<-\! Hier-Dokument ohne Substitutionen $PWD $(date) ! # Hier-Strings cat <<< "Ich bin ein Hier-String: $PWD $(date)"
1. | Alias | alias ..='cd ..' |
2. | reserviertes Wort | if, while, ... |
3. | Shell-Funktion | function ls { /bin/ls --color=tty "$@"; } |
4. | eingebautes Kommando | cd |
5. | externes Kommando | uptime |
Shell-Variable PATH enthält den Suchpfad
Typbestimmung mit type, z.B.
type cd
ls -d ?? /etc/{init.d/[bz]*,rc.d/*.?} /[^t-z]* /usr/bin/*.sh ls -ld /etc/@(pass*|*global)
echo "Heute ist der $(date +%d.%m.%Y)." vi $(fgrep -L password /etc/pam.d/* 2>/dev/null) md5sum $(fgrep -l force $(fgrep -L password /etc/pam.d/*))
echo {1..10} /etc/{passwd,group,shadow} ~root ~otto/PUBLIC
echo $((1 + 3 * (6 % 4))) $(((-1+2*3*3*4)*5/(5*23-2))) # bash rechnet nur mit Ganzzahlen, zsh auch mit Floats echo $((355/113)) # 3 bei bash/zsh echo $((355/113.)) # 3.1415929203539825 bei zsh # Syntaxfehler bei bash wegen des Dezimalpunktes # Kommando bc für komplexere Berechnungen mit beliebiger Genauigkeit echo 'scale=20; 355/113' | bc pi=$(echo 'scale=1000; 4*a(1)' | bc -l) # Pi mit 1000 Nachkommastellen # a() ist Arkustangens
echo $PATH echo $PWD $$ $? $1 # Parameter $1 auf a setzen set a echo $PWD $$ $? $1 # Hier-Dokument ohne Expandierungen wegen Quotierung durch Backslash cat > datei <<\! echo $1 ! # das mit dem Hier-Dokument erstellte File ausführen # $1 wird dabei expandiert sh datei chmod +x datei ./datei arg1
!! echo !$ !cal !22 cal -s 3 2010 ^-s^-m ^-m
diff <(sort datei1) <(sort datei2 | tr A-Z a-z)
# \ ==> quotiert das Folgezeichen # '' ==> starke Quotierung von Zeichenfolgen # "" ==> schwache Quotierung von Zeichenfolgen echo /b\* \$PWD echo '/b* $PWD $(date) `whoami` \$ \a \"' echo "/b* $PWD $(date) `whoami` \$ \a \""
# Syntax: [time [-p]] [ ! ] Kommando [ | Kommando2 ... ] fgrep Otto /etc/passwd | wc -l ! fgrep Otto /etc/passwd | wc -l fgrep Otto /etc/passwd | tee /tmp/datei | wc -l fgrep Otto /etc/passwd | fgrep Normal | wc -l fgrep Otto /etc/passwd | fgrep Normal | cut -d: -f1 fgrep Otto /etc/passwd | fgrep Normal | awk -F: '{print $1}' fgrep Otto /etc/passwd | fgrep Normal | sed 's/:.*//' fgrep localhost /xyz 2>&1 | wc -l # ab Bash 4: |& fgrep localhost /xyz |& wc -l time sleep 1 time md5sum /usr/bin/mplayer /boot/vmlin* | tr a-z A-Z # mit negiertem Exit Code (1 statt 0 bei Erfolg) time ! sha1sum /usr/bin/mplayer | tr a-z A-Z
date ; uptime cd /tmp && touch myfile mv datei1 datei2 && mv datei3 datei1 head datei? fgrep -q abc datei || echo nicht gefunden mv -i datei datei.xx ; ln -s datei.xx datei eog *jpg & eog *jpg Ctrl-Z bg
[[ -r datei && -s datei ]] && sort datei if [[ -z $MAX ]] then echo kein MAX else echo $MAX fi read -p 'Antwort (j/n): ' antwort case "$antwort" in j|J) echo Ja ;; n|N) echo Nein ;; *) echo ungültige Auswahl ;; esac
while true do echo === sleep 1 done zahl=5 until ((! zahl)) do echo $((zahl--)) done
for i in a b c do echo $i done for (( i=1 ; i < 10 ; i++ )) do echo $i done (cd /tmp && touch daten) ; pwd { cd /tmp ; touch daten ; } ; pwd { echo eins ; echo zwei ; } > datei
pwd # print working/current directory cd # change current directory (zu $HOME) cd .. cd - # wechselt zu $OLDPWD cd /etc ls # list directory contents ls -latr # Nutzung des Directory-Stacks pushd /tmp popd
# Anlegen mkdir verzeichnis touch datei vim datei echo text > datei # Löschen rmdir verzeichnis rm datei rm -rf *.bak verzeichnis* # Verschieben und Umbenennen mv datei1 datei2 mv datei verzeichnis
diff datei1 datei2
diff -ru dir1 dir2 | vim -
vimdiff datei1 datei2
vim datei # datei.bak beim Speichern angelegt
diff -u datei.bak datei
# Suche im Datei-Baum nach Namen, Inhalten u.a. Kriterien fgrep abc datei grep '^a.*f$' datei egrep 'max|moritz' datei # rekursive Suche fgrep -rl Getriebe . grep -rl 'aa.*bb' ~/Dokumente egrep -rl 'EDV|IT' $HOME/Dokumente find find /tmp -type f | xargs fgrep -L function find /tmp -type f -print0 | xargs -0 fgrep -L function # Dubletten aufspüren find . -type f -print0 | xargs -0 md5sum | sort | uniq -D -w 32 # Suche in regelmäßig aktualisierter Datenbasis von Dateinamen locate vmlinuz
# Datei bei Bedarf anlegen touch 20130106_log.txt # symbolischen Link erzeugen ln -s 20130106_log.txt aktuell # harten Link (hard link) generieren ln 20130106_log.txt current # Kontrolle durch langes Listing mit Inode-Nummer ls -li aktuell current 20130106_log.txt
# Daten von stdin in datei kopieren cat > datei 1 a 2 b 3 c Ctrl-D # Inhalt von datei nach stdout kopieren cat datei # Inhalt mehrerer Dateien konkatenieren cat datei{1..3} # das erste Leerzeichen jeder Zeile durch | ersetzen sed -i 's/ /|/' datei
# Inhalt von /etc/hosts ab Zeile 4 anzeigen sed 1,3d /etc/hosts awk 'NR > 3' /etc/hosts tail -n +4 /etc/hosts # nach der ersten Spalte numerisch absteigend sortieren sort -t\| -k1,1nr -o datei datei # Spalte 1 summieren und Summe ausgeben awk -F\| '{ sum += $1 } END { print sum }' datei # Spalte 2 gefolgt von // gefolgt von Spalte 1 ausgeben awk -F\| '{ print $2 "//" $1}' datei > datei.new && mv datei datei.old && mv datei.new datei
# ps - process status ps ps auxww | grep bash pstree -p # display a tree of processes top # display Linux processes lsof datei # list open files # PID 100 mit SIGTERM beenden (sofern möglich) kill 100 # alle Prozesse von otto hart mit SIGKILL beenden killall -9 -u otto
# disk free # Anzeige des Füllstandes montierter Dateisystem df # disk usage # Anzeige des benutzten Platzes im Dateisystem du du -s * | sort -k1,1n # Speicherplatzfresser aufspüren # list block devices # Anzeige der Blockgeräte lsblk # Dateisysteme montieren/demontieren mount # Anzeige montierter Dateisysteme umount /mnt # /mnt aushängen
# interaktives Login auf server ssh server # Kommandoausführung auf Server ssh server w zcat datei.gz | ssh server 'cat > /tmp/datei' # Dateien zwischen Systemen kopieren scp rechner:rem_datei lok_datei # wget - non-interactive network downloader wget ftp://ftp.vim.org/pub/WhereToFindWhat.txt wget https://www.tu-chemnitz.de
# Shell-Optionen setzen/zurücksetzen; # kann jederzeit in der aktuellen Shell erfolgen shopt -s cmdhist shopt -s lithist shopt -u cdspell set -o noclobber # Abfrage shopt shopt -o set -o set +o
# typischerweise in ~/.bashrc definiert # Shell- und Umgebungsvariablen setzen HISTSIZE=1000 export EDITOR=vim # Prompt einstellen PS1='\[\e]2;\h:\w\a\e[7m\]\u@\h\[\e[0m\] \! $> ' # Aliase und Shellfunktionen definieren alias ..='cd ..' alias crypt='encfs ~/.crypt ~/crypt' unalias ls 2>/dev/null function ls { #LC_ALL=C \ /bin/ls --color=never "$@" } # Shell-Funktion ls später wieder löschen unset -f ls # -f kann entfallen, wenn es keine Variable ls gibt
/
#