Kurz: Die Beispiele laufen in einem frischen temporären Ordner:
Teil des Kurses Bash
Navigation
Die Beispiele laufen in einem frischen temporären Ordner:
cd "$(mktemp -d)"
mkdir projekt
cd projekt
pwd | sed "s|.*/||" # nur der Ordnername
mkdir -p a/b/c # verschachtelt anlegen
touch a/datei1 a/b/datei2
ls
ls -R | head -8
cd a/b
cd ../.. # zwei Ebenen hoch
cd - >/dev/null # zurück zum vorigen Ordner (cd - gibt den Pfad aus)
basename "$PWD"
cd ~ && [[ $PWD == "$HOME" ]] && echo "zu Hause"Ausgabe:
projekt
a
.:
a
./a:
b
datei1
./a/b:
b
zu Hause| Befehl | Zweck |
|---|---|
pwd | aktueller Ordner |
cd pfad / cd .. / cd - / cd ~ | wechseln |
ls -l -a -h -t | auflisten (lang, versteckte, lesbare Größen, nach Zeit) |
mkdir -p | Ordner (auch verschachtelt) |
cp -r / mv / rm -r | kopieren / verschieben bzw. umbenennen / löschen |
touch | leere Datei anlegen oder Zeit aktualisieren |
ln -s ziel link | symbolischer Link |
du -sh, df -h | Platzverbrauch |
Pfade: absolut (/home/mia/x) beginnen mit /, relativ (../x) gelten ab dem aktuellen Ordner. . ist der aktuelle, .. der übergeordnete, ~ der Home-Ordner.
Dateien anlegen, kopieren, verschieben
cd "$(mktemp -d)"
echo "Inhalt" > original.txt
cp original.txt kopie.txt
mv kopie.txt umbenannt.txt
mkdir archiv
cp -r archiv archiv2
mv *.txt archiv/
ls archiv
ln -s archiv/original.txt link.txt
cat link.txt
ls -l link.txt | awk '{ print $1, $(NF-2), $(NF-1), $NF }' | sed 's/^l[rwx-]*/l.../'
rm archiv/umbenannt.txt
rmdir archiv2 && echo "leeren Ordner gelöscht"
rm -r archiv && echo "Ordner samt Inhalt gelöscht"
lsAusgabe:
original.txt
umbenannt.txt
Inhalt
l... link.txt -> archiv/original.txt
leeren Ordner gelöscht
Ordner samt Inhalt gelöscht
link.txtAchtung
rmfragt nicht nach und kennt keinen Papierkorb.rm -rfmit falscher Variable (rm -rf "$ordner/"bei leerem$ordner!) hat schon ganze Systeme gelöscht. Schütze dich mitset -u(Fehler bei leeren Variablen) und Prüfungen.
Dateirechte
ls -l zeigt z. B. -rwxr-xr--:
| Teil | Bedeutung |
|---|---|
| 1. Zeichen | Typ (- Datei, d Ordner, l Link) |
| 2.–4. | Rechte des Besitzers (user) |
| 5.–7. | Rechte der Gruppe (group) |
| 8.–10. | Rechte aller anderen (other) |
r w x | lesen (4), schreiben (2), ausführen bzw. Ordner betreten (1) |
cd "$(mktemp -d)"
touch datei
chmod 644 datei && ls -l datei | cut -c1-10 # rw-r--r--
chmod 755 datei && ls -l datei | cut -c1-10 # rwxr-xr-x
chmod u+x,g-w,o= datei && ls -l datei | cut -c1-10
chmod a+r datei && stat -c '%a %A' datei
chmod 600 datei && stat -c '%a' datei
mkdir ordner && stat -c '%A' ordnerAusgabe:
-rw-r--r--
-rwxr-xr-x
-rwxr-x---
754 -rwxr-xr--
600
drwxr-xr-xGängige Werte: 644 (Datei: Besitzer schreibt, alle lesen), 755 (Programme und Ordner), 600 (privat, z. B. SSH-Schlüssel), 700 (privater Ordner). chown nutzer:gruppe datei ändert den Besitzer (meist mit sudo). sudo befehl führt einen Befehl als Administrator aus.
Dateiinhalte ansehen
cd "$(mktemp -d)"
seq 1 20 > zahlen.txt
head -n 3 zahlen.txt
tail -n 2 zahlen.txt
sed -n '10,12p' zahlen.txt
wc -l zahlen.txt
file zahlen.txt | cut -d: -f2
stat -c 'Größe: %s Bytes' zahlen.txt
diff <(seq 1 3) <(seq 1 4)
md5sum <<< "abc" | cut -c1-8
sha256sum zahlen.txt | cut -c1-12Ausgabe:
1
2
3
19
20
10
11
12
20 zahlen.txt
ASCII text
Größe: 51 Bytes
3a4
> 4
0bee89b0
b76ae83c50d6less datei blättert (q beendet, /text sucht), tail -f logdatei verfolgt eine wachsende Datei.
Archive und Komprimieren
cd "$(mktemp -d)"
mkdir daten
seq 1 1000 > daten/zahlen.txt
tar -czf backup.tar.gz daten # c=create, z=gzip, f=Datei
tar -tzf backup.tar.gz # Inhalt zeigen
rm -r daten
tar -xzf backup.tar.gz # x=extract
wc -l daten/zahlen.txt
gzip -k daten/zahlen.txt && ls daten
gunzip -c daten/zahlen.txt.gz | wc -lAusgabe:
daten/
daten/zahlen.txt
1000 daten/zahlen.txt
zahlen.txt
zahlen.txt.gz
1000Merke
- Navigation:
pwd,cd,ls,mkdir -p; absolute und relative Pfade cp -r,mv,rm -r(gefährlich!),ln -s,touch- Rechte
rwxfür Besitzer/Gruppe/andere;chmod 755,chmod u+x,chown head,tail,less,stat,file,diffzum Ansehentar -czf/-xzffür Archive
Übungsaufgabe
Lege einen Ordner mit drei Dateien an, setze deren Rechte unterschiedlich und prüfe sie mit stat.
Quiz zur Selbstkontrolle
Was bedeutet chmod 644?
- Besitzer lesen+schreiben, Gruppe und andere nur lesen (richtig)
- Alle dürfen alles
- Nur der Besitzer darf lesen
- Datei ist ausführbar
Was bewirkt cd -?
- Wechselt in den vorherigen Ordner (richtig)
- Wechselt in den Home-Ordner
- Wechselt in das Wurzelverzeichnis
- Löscht den Ordner
Welcher Befehl erzeugt ein komprimiertes Archiv?
- tar -czf archiv.tar.gz ordner (richtig)
- tar -xzf archiv.tar.gz
- zip -x ordner
- cp -z ordner
Weiter im Kurs
Zurück: grep, sed, awk und Co.
Weiter: Robuste Skripte und Fehlerbehandlung
Alle Kapitel: Bash im Überblick