Unix-Grobstruktur:
Wo finden wir die Shell?





im Terminal-Emulator unter der GUI (X11-Applikation)
SSH-Applet im Web-Browser
Shell im Terminal-Emulator kann das Bedienzentrum auf dem grafischen Desktop sein
bietet interaktive Nutzung + Skripting
siehe auch:
interaktive Nutzung:
firefox # Browser Firefox thunderbird # Mailer Thunderbird eog *.jpg # Bildbetrachter "Eye of Gnome" für alle .jpg-Dateien des akt. Verzeichnisses mplayer *.mp3 # Movie Player für alle .mp3-Dateien des akt. Verzeichnisses
Start von nichtgrafischen Full-Screen-Programmen:
vim # Text-Editor Vim alpine # Mailer Alpine mc # Midnight Commander - Dateimanager/visuelle Shell
Nutzung der Kommandozeilentools des Werkzeugkastens:
date # Datum/Uhrzeit ausgeben cal # Kalender des aktuellen Monats ausgeben hostname # den Hostnamen ausgeben # alle .JPG-Dateien des akt. Verzeichnisses auf 256x256 vergrößern/verkleinern mogrify -resize 256x256 *.JPG
Skripting:
# endlos die Dateien aller Unterverzeichnisse des akt. Verzeichnisses
# mit dem mplayer abspielen, deren Name die Zeichenfolgen
# "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
Shell-Ende: Ctrl-D, exit
Hilfe:
man Kommando
info
help
Optionen -h und --help
einfache Kommandos:
# Kalenderprogramm mit diversen Argumenten/Optionen rufen cal 3 2010 cal -3 3 2010 cal -y cal -m 3 2010 # die Einträge des Wurzelverzeichnisses / im langen Format auflisten ls -ld /
Worttrenner: mind. 1 Leerzeichen oder Tabulator sowie einige Sonderzeichen
# Nutzung von tr zur Umwandlung von Klein- in Großbuchstaben # Standard-Eingabe nach /etc/hosts umlenken tr a-z A-Z < /etc/hosts # Standard-Ausgabe in /tmp/result umlenken tr a-z A-Z < /etc/hosts > /tmp/result # Standard-Ausgabe an /tmp/result anhängen tr a-z A-Z < /etc/hosts >> /tmp/result # Ausgabeumlenkung darf kein File überschreiben set -o noclobber # Überschreiben erzwingen durch >| tr a-z A-Z < /etc/hosts >| /tmp/result # Suche nach "localhost" in /etc/hosts fgrep localhost /etc/hosts /xyz # Standard-Ausgabe nach /dev/null umlenken (wegwerfen) fgrep localhost /etc/hosts /xyz > /dev/null # Standard-Fehlerstrom nach /dev/null umlenken (wegwerfen) fgrep localhost /etc/hosts /xyz 2> /dev/null # Standard-Ausgabe und -Fehlerstrom getrennt umlenken fgrep localhost /etc/hosts /xyz 2> /tmp/err > /tmp/out # Standard-Ausgabe und -Fehlerstrom gemeinsam umlenken fgrep localhost /etc/hosts /xyz &> /tmp/out_err # spezielle Eingabe-Umlenkung liest vom TCP-Port 22 des Servers # login.tu-chemnitz.de (SSH-Versions-String); # zuerst rein über die Bash read < /dev/tcp/login.tu-chemnitz.de/22 ; echo $REPLY # dann mit externem Kommando "sed" sed 1q < /dev/tcp/login.tu-chemnitz.de/22
date # LANG nur für das unmittelbar folgende Kommando setzen LANG=C date date # LANG generell für nachfolgende Kommandos setzen export LANG=C date date
Zeichen mit Sonderbedeutung werden von der Shell ausgewertet, der Rest wird 1:1 an das jeweilige Kommando durchgereicht
Kommandotypen und Ausführungs-Reihenfolge:
| 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 $PATH echo $PWD $$ $? $1 # Parameter $1 auf a setzen set a echo $PWD $$ $? $1 # Hier-Dokument cat > file <<\! echo $1 ! # das mit dem Hier-Dokument erstellte File ausführen sh file chmod +x file ./file
echo "Heute ist der $(date +%d.%m.%Y)." vi $(fgrep -l action $(fgrep -L exit /etc/rc.d/init.d/*))
echo $((1 + 3 * (6 % 4)))
echo {1..10}
echo ~root ~otto/PUBLIC
!! echo !$ !cal !22 cal -s 3 2010 ^-s^-m ^-m
Quotierung zur Aufhebung der Sonderbedeutung von Zeichen:
\ # 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 \""
fgrep Otto /etc/passwd | 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/:.*//'
time sleep 1
time md5sum /usr/bin/mplayer /boot/vmlin*
Listen und Hintergrundkommandos:
date ; uptime
cd /tmp && touch myfile
mv file1 file2 && mv file3 file1
head file?
fgrep -q abc file || echo nicht gefunden
mv -i file file.xx ; ln -s file.xx file
eog *jpg &
eog *jpg
Ctrl-Z
bg
Bedienkomfort:
Cursortasten links/rechts, Backspace
Ctrl-A: Cursor an Zeilenanfang
Ctrl-E: Cursor an Zeilenende
Ctrl-K: ab Cursor Zeilenrest löschen
Ctrl-U: Zeile löschen
Ctrl-C: Abbruch
Ctrl-X Ctrl-E: externer Editor
Wortvervollständigungen durch Tab (programmierbar)
Kommando history
Cursor auf/ab
Ctrl-R/Ctrl-S: inkrementelle Suche rückwärts/vorwärts
Kommando fc
Navigation im Datei-Baum:
pwd cd cd .. cd - ls ls -latr pushd /tmp popd
Anlegen und Löschen von Verzeichnissen und Dateien:
mkdir rmdir rm rm -rf touch vim file echo text > file
Verschieben, Umbenennen:
mv
Vergleichen von Dateien:
diff file1 file2
diff -ru dir1 dir2
vim file # file.bak beim Speichern angelegt
diff -u file.bak file
Suche im Datei-Baum nach Namen, Inhalten u.a. Kriterien:
fgrep abc file grep '^a.*f$' file egrep 'max|moritz' file # rekursive Suche fgrep -rl Getriebe . grep -rl 'aa.*bb' ~/Dokumente egrep -rl 'EDV|IT' $HOME find find /etc/init.d/ -type f | xargs fgrep -L function find /etc/init.d/ -type f -print0 | xargs -0 fgrep -L function # Dubletten aufspüren find . -type f -print0 | xargs -0 md5sum | sort | uniq -D -w 32
# 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
Anzeige und Modifikation:
cat > file
1 a
2 b
3 c
Ctrl-D
cat file
sed -i 's/ /|/' file
sort -t\| -k1,1nr -o file file
awk -F\| '{ sum += $1 } END { print sum }' file
awk -F\| '{ print $2 "//" $1}' file > file.new &&
mv file file.old &&
mv file.new file
Prozess-Management:
ps ps auxww | grep bash pstree -p top lsof file kill pid
Dateisysteme:
df du du -sk mount
entfernte Rechnernutzung:
ssh rechner ssh rechner finger scp rechner:rem_file lok_file
zusammengesetzte Kommandos:
(fgrep localhost /etc/hosts /xyz 2>&1) | less
# ab Bash 4:
(fgrep localhost /etc/hosts /xyz) |& less
while true
do
echo ===
sleep 1
done
for i in a b c
do
echo $i
done
if [[ -z $MAX ]]
then
echo kein MAX
else
echo $MAX
fi
Shell-Optionen setzen/zurücksetzen; kann jederzeit in der aktuellen Shell passieren
shopt -s cmdhist
shopt -s lithist
shopt -s cdspell
set -o noclobber
# Abfrage:
shopt
shopt -o
set -o
set +o
HISTSIZE=1000 export EDITOR=vim
PS1='\[\e]2;\h:\w\a\e[7m\]\u@\h\[\e[0m\] \! $> '
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