Das Wichtigste in unixartigen Systemen ist: alles ist eine Datei!
Wie ist das Dateisystem aufgebaut und wie komme ich von A nach B?
absolut | relativ |
---|---|
vom Wurzelverzeichnis (root /) aus | vom aktuellen Verzeichnis aus |
Wo bin ich eigentlich?
$ pwd
Hilfe?
$ <Befehl> -h
oder <Befehl> --help
gibt meistens eine Übersicht über die Verwendung und Optionen anman <Befehl>
Ich weiß jetzt, wo ich bin, aber was gibt es hier?
$ ls [Optionen] [Datei]
-l
: ausführliche Ausgabe-a
: zeigt auch versteckte Dateien an-h
: "human readable" - Zeigt Dateigrößen gerundet mit Suffix anund wie komme ich jetzt in die Verzeichnisse, die ich so sehe?
$ cd <Verzeichnis>
$ cd ..
wechselt ins OberverzeichnisWas kann ich denn hier so machen?
Dann mach ich mal neues Zeug, wie geht das?
$ mkdir [Optionen] <Verzeichnisname>
-p
: "parent" - erzeugt ganze Vereichnisstruktur$ touch [Optionen] [Datei]
Kann ich eine Datei kopieren?
$ cp [Optionen] <Quelldatei> <Zieldatei>
-r
: "recursive" - kopiert ein ganzes VerzeichnisIch hab' mich beim Dateinamen verschrieben, wie kann ich das umbenennen?
$ mv [Optionen] <Quelldatei> <Zieldatei>
Ich bin grade auf einem Zerstörungstrip, wie kann ich Dinge löschen?
$ rm [Optionen] <Dateiname>
-r
: "recursive" - löscht ein Verzeichnis-f
: "force" - löscht das Ziel ohne Nachzufragen
-f
ist gefährlich! Wir sind hier nicht im Microsoft-Kindergarten wo 174516x nachgefragt wird, ob ihr die Datei wirklich löschen wollt. Sobald ihr <Enter>
drückt, ist die Datei weg. Bemerkt ihr dann, dass es ein Fehler war, ist das Pech. So lässt sich super schnell das System unbrauchbar zerstören
Was steht denn in den Dateien drin?
schlecht, aber meist genutzt:
$ cat [Optionen] <Datei>
besser:
$ less [Optionen] <Datei>
Mich interessieren nur die ersten/letzten n Zeilen, gibt es da was?
head/tail [Optionen] <Dateiname>
-n <Zahl>
oder kurz -<Zahl>
: gibt die ersten/letzten \tail
: -f
"follow" - folgt der Datei und gibt neue letzte Zeilen aus, wenn etwas dazu kommtbei ls -l
wird so ein -rwxrwxrwx angezeigt
ich will, dass die Datei mir gehört!
$ chown [Optionen] [neuer Besitzer] <Dateiname>
-R
: "recursive" - für Ordnerich will, dass niemand außer mir meine super geheime Datei lesen kann, wie schaffe ich das?
$chmod [Optionen] <Berechtigung> <Dateiname>
-R
: "recursive" - für Ordner und deren Inhaltchmod +x foo.txt
Alternativ kann man auch eine kryptisch anmutende Zahl angeben, z.B. chmod 744 foo.txt
Das ist ein Oktalcode, wir können mit 3 Bit von 0 bis 7 zählen
4 2 1
r w x
Kann ich in Verzeichnissen, die nicht mir gehören was machen?
$ sudo [Optionen] <Rest vom Befehl>
sudo
verwenden dürfenIch will gern was sichern, wie kann ich das platzsparend machen?
$zip [Optionen] <Archiv> <Datei> [Datei]...
-r
: "recursive" - für Ordnerentpacken mit
$unzip [Optionen] <Archiv> [-d Zielverzeichnis]
aber wir sind ja auf einem unix-artigen System, da machen wir es normalerweise anders. Kleine Geschichtsstunde...
$tar [Optionen] <Archiv>.tar <Datei1> [Datei2]...
zum packen$tar [Optionen] <Ziel> <Datei>
zum entpacken-c
: "create" - erstellt ein Archiv-x
: "extract" - entpackt ein Archiv-f
: "file" - liest von oder schreibt in die angegebene Datei-v
: "verbose" - erzeugt eine Ausgabe, was gerade gemacht wird. An den Anfang der Optionen setzen-z
: "(un)zip" - (de)komprimiert das Archiv mit gzip
wget https://sandbox.fsi.uni-tuebingen.de/\~huegel/bash/ordner1.tar.gz
speichern Metainformationen von Dateien
eine dieser Metainformationen ist der Linkcount.
Was ist ein Link? Kommt auf die Art des Links an.
Es gibt Hardlinks und Softlinks bzw symbolische Links oder Symlinks.
Hardlinks | Softlinks |
---|---|
erhöhen Inode-counter | erhöhen Inode-counter nicht |
ist eine Referenz auf eine Inode | ist eine Referenz auf einen Pfad |
löschen der Basisdatei ist egal, solange der Inode-counter > 1 ist | löschen der Basisdatei führt dazu, dass der Link ins Leere zeigt |
und was mach ich jetzt damit?
meistens Pfade abkürzen
ln [Optionen] <Ziel> <Linkname>
-s
: "symbolic" - macht einen Softlink anstatt eines Hardlinks*
sucht nach beliebigen Zeichen beliebig oft. Es gibt mehrere Möglichkeiten, *
zu verwenden.
ls -l s*
gibt alle Dateien aus, die im aktuellen Verzeichnis mit s beginnenls -l *.png
gibt alle png-Bilder im aktuellen Verzeichnis ausls -l *img*
gibt alle Dateien aus, bei denen irgendwo im Dateinamen der String "img" vorkommt.?
sucht nach beliebigen Zeichen, und zwar genau einmal pro ?
. Auch hier wieder die Möglichkeiten, ?
zu verwenden.
ls ??pic.jpg
gibt alle jpg-Bilder aus, bei denen 2 beliebige Zeichen kommen und dann der String "pic.jpg"ls mypic.???
zeigt mir alle Dateien an, die "mypic" heißen und eine Endung mit 3 Zeichen haben - "[xyz]" matcht auf alles, was mit x, y, oder z anfängt
- "[c-n]" matcht auf alles, was in der Reichweite c bis n anfängt
- "[B-Pk-y]" matcht auf alles, was in der Reichweite B is P und k bis y anfängt
- "[a-z0-9]" matcht einen beliebigen Kleinbuchstaben oder eine Ziffer
- "[^b-d]" matcht auf alles, was **nicht** mit b, c oder d anfängt
{} kann für Parameter expansion verwendet werden, wenn Mensch faul ist
mkdir -p workshop/test/test{1,2}
geht schnellermkdir -p workshop/test/test1 mkdir -p workshop/test/test2
erweitertrm Vortrag.{aux,log,out,toc}
wird von der Shell auf rm Vortrag.aux Vortrag.log Vortrag.out Vortrag.toc
erweitertIn Unixartigen OS gibt es 3 Datenströme, die auch durchnummeriert sind:
stdin
(normalerweise Tastatur)stdout
(normalerweise der Bildschirm)stderr
(normalerweise auch Bildschirm)>
umgeleitet weden, z.B. in eine Datei ( echo foo > bar
oder echo foo 1> bar
leitet stdout in bar um) cat foo 2>&1
leitet stderr dahin um wo stdout jetzt grade hinzeigt). <
umgeleitet werden, z.B. der Inhalt einer Datei in ein Programm (cat < bar
).>>
kann an eine Datei angehängt werden, anstatt sie wie bei >
zu überschreiben.|
erhält eine Ausgabe eines Programms und leitet diese als Eingabe für ein anderes Programm weiter.ps ax | grep neomutt
Programm1 | Programm2 | Programm3 (...)
.Ich suche Datei xy, wie finde ich die?
$ find [Optionen] <Startpfad> <Ausdruck>
Ich suche einen bestimmten Text, aber weiß nicht, in welcher Datei oder an welcher Stelle er steht. Muss ich jetzt jede Datei öffnen?
$ grep [Optionen] <Muster> <Dateinamen>
ich brauche nur einen Teil einer Datei, muss ich das von Hand abtippen?
$ cut <Optionen> [Dateinamen]
-
ist, wird von stdin
gelesen-d, --delimiter=DELIM
nimmt DELIMITER anstatt TAB zur Feldbegrenzungdie Daten sind ja völlig durcheinander, kann ich die sortieren lassen?
$ sort[Optionen] <Dateinamen>
stdout
aus-
ist, wird von stdin
gelesen-u
: "unique" - gibt mehrfach vorkommende Zeilen nur einmal ausIch muss mindestens x Wörter für eine Übung schreiben, muss ich das von Hand zählen?
$ wc [Optionen] <Dateiname>
-c
: zählt Bytes-m
: zählt nur Zeichen-l
: "lines" - zählt nur Zeilen-w
: "words" - zählt nur WörterSucht in der Datei index2 nach allen Zeilen, die den Teilstring "ch" enthalten.
Gebt aus der /etc/passwd nur den jeweils zweiten und dritten Buchstaben der Home-Verzeichnisse aus, sortiert sie alphabetisch und speichert die ersten 5 Zeilen des Ergebnisses in eine Datei "top5"
Ich hab da einen Befehl, den ich oft benutze, aber der ist lang. Kann ich den nicht irgendwie abkürzen?
$ alias <neuer Befehl>="<was ausgeführt werden soll>"
.bashrc
geschrieben werdenalias ll="ls -l"
alias ..="cd .."