EMZETT.
Login

Kurz: Die Beispiele laufen in einem frischen temporären Ordner:

Teil des Kurses Bash

Kapitel 9 von 13 im Kurs Bash. Mit Fortschritt, Quiz und Zertifikat auf der Lernseite.

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
BefehlZweck
pwdaktueller Ordner
cd pfad / cd .. / cd - / cd ~wechseln
ls -l -a -h -tauflisten (lang, versteckte, lesbare Größen, nach Zeit)
mkdir -pOrdner (auch verschachtelt)
cp -r / mv / rm -rkopieren / verschieben bzw. umbenennen / löschen
touchleere Datei anlegen oder Zeit aktualisieren
ln -s ziel linksymbolischer Link
du -sh, df -hPlatzverbrauch

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"
ls

Ausgabe:

original.txt
umbenannt.txt
Inhalt
l... link.txt -> archiv/original.txt
leeren Ordner gelöscht
Ordner samt Inhalt gelöscht
link.txt

Achtung

rm fragt nicht nach und kennt keinen Papierkorb. rm -rf mit falscher Variable (rm -rf "$ordner/" bei leerem $ordner!) hat schon ganze Systeme gelöscht. Schütze dich mit set -u (Fehler bei leeren Variablen) und Prüfungen.

Dateirechte

ls -l zeigt z. B. -rwxr-xr--:

TeilBedeutung
1. ZeichenTyp (- 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 xlesen (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' ordner

Ausgabe:

-rw-r--r--
-rwxr-xr-x
-rwxr-x---
754 -rwxr-xr--
600
drwxr-xr-x

Gä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-12

Ausgabe:

1
2
3
19
20
10
11
12
20 zahlen.txt
 ASCII text
Größe: 51 Bytes
3a4
> 4
0bee89b0
b76ae83c50d6

less 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 -l

Ausgabe:

daten/
daten/zahlen.txt
1000 daten/zahlen.txt
zahlen.txt
zahlen.txt.gz
1000

Merke

  • Navigation: pwd, cd, ls, mkdir -p; absolute und relative Pfade
  • cp -r, mv, rm -r (gefährlich!), ln -s, touch
  • Rechte rwx für Besitzer/Gruppe/andere; chmod 755, chmod u+x, chown
  • head, tail, less, stat, file, diff zum Ansehen
  • tar -czf / -xzf für Archive

Übungsaufgabe

Lege einen Ordner mit drei Dateien an, setze deren Rechte unterschiedlich und prüfe sie mit stat.

Quiz zur Selbstkontrolle

Weiter im Kurs

Zurück: grep, sed, awk und Co.

Weiter: Robuste Skripte und Fehlerbehandlung

Alle Kapitel: Bash im Überblick