IN KÜRZE
Schwierigkeit
Einfach
Benötigt
HPC Nutzeraccount
Struktur
Allgemein
Auf dem OMNI-Cluster ist, wie auf praktisch allen Hochleistungsrechnern, das Betriebssystem Linux installiert (in diesem Falle Rocky Linux). Hier sind ein paar allgemeine Konzepte, sowie gängige Befehle, insbesondere solche, die die Arbeit auf dem Cluster betreffen.
Die Informationen auf dieser Seite entsprechen größtenteils denen in unserem semesterweise stattfindendem Linux-Einführungskurs sowie dem von uns miterstellten interaktiven Linux-Video-Tutorial. Ein weiteres sehr gutes Tutorial über Linux-Grundlagen findet sich zum Beispiel hier.
Linux enthält außerdem einen eingebauten Hilfemechanismus, der von der Konsole aus erreichbar ist. Der Befehl man
zeigt für ein bestimmtes Programm die sogenannte Man-Page (“Man” für “Manual” d.h. Handbuch) an, das heißt einen in das Programm eingebauten Hilfetext (wenn das Programm einen solchen besitzt). Zum Beispiel zeigt der Befehl:
$ man sbatch
die von den SLURM-Entwicklern geschriebene Man-Page für den Befehl sbatch
. Eine Man-Page kann mit den Pfeiltasten nach oben und unten bewegt und mittels der Taste q
verlassen werden.
Viele Befehle bieten auch eine interne Hilfefunktion, die meist mit <Befehlsname> -h
oder <Befehlsname> --help
erreichbar ist. Diese ist oft mit der Man-Page identisch.
Verzeichnisstruktur
Die Verzeichnisstruktur in Linux ist eine Baumstruktur, es gibt ein Verzeichnis auf der höchsten Ebene, das sogenannte Root-Verzeichnis, bezeichnet mit /
. Alle anderen Verzeichnisse (auch als Ordner bezeichnet) sind Unterordner von Root oder Unterordner von Unterordnern.
Die Dateistruktur bei Linux ist etwas anders als die von Windows. Während bei Windows die einzelnen Festplatten Buchstaben zugewiesen bekommen und die Unterteilung eindeutig sind, benutzt Linux sogenannte Mounting Points: Die Verzeichnisstruktur ist bei jedem Linux-System (weitestgehend) identisch und die verschiedenen Festplatten sind an einer bestimmten Stelle in dieser Verzeichnisstruktur, ihrem Mounting Point, eingehängt. Der Vorteil ist, dass Sie als Nutzer sich in der Regel keine Gedanken über die physikalischen Festplatten machen müssen.
Insbesondere im Fall des OMNI-Clusters gibt es zwei Verzeichnisse, in denen Sie sich in der Regel bewegen: Ihr Home-Verzeichnis (/home/<IhrUsername>
) und Ihre Workspaces (/work/ws-tmp/
). Wenn Sie selbst Software entwickeln, müssen Sie unter Umständen Bibliotheken einbinden. In diesem Fall werden die Installationsverzeichnisse für Sie wichtig. Die meiste Software ist auf dem Cluster unter /cm/shared/apps
installiert.
Achtung: Diese Verzeichnisse können sich jederzeit ändern! Es ist immer sinnvoller, wenn möglich Umgebungsvariablen zu verwenden anstatt hart festgeschriebener Dateipfade. Wie Sie Umgebungsvariablen verwenden, wird weiter unten erklärt.
Berechtigungen
Was Sie unter Linux tun dürfen, hängt davon ab, als welcher User (Nutzer) Sie angemeldet sind. Üblicherweise haben Sie genau einen Usernamen, der mit Ihrer ZIMT-ID (g-Nummer) identisch ist. Der User mit den höchsten Administratorrechten wird unter Linux als Superuser oder Root-User (root
) bezeichnet. Auf dem Cluster werden Sie niemals Root-Rechte bekommen, diese sind nur für Administratoren des ZIMT.
User werden zu Gruppen zusammengefasst. Jeder User hat eine primäre Gruppe und kann beliebig vielen weiteren Gruppen angehören. Sie können Ihre Gruppen mit dem Befehl id <IhrUsername>
anzeigen.
Jede Datei und jedes Verzeichnis in Linux gehört einem User und nur dieser User (oder der root
-User) entscheidet, wer mit dieser Datei was tun darf. Wenn Sie eine Datei neu anlegen, sind Sie der Besitzer. Außerdem wird jede Datei automatisch einer Gruppe zugewiesen. Standardmäßig ist dies die primäre Gruppe des anlegenden Users.
Es gibt drei Arten von Zugriffsrechten für Dateien und Verzeichnisse: lesen (read), schreiben (write) und ausführen (execute). Die Rechte können für drei Typen von Nutzern getrennt gesetzt werden, nämlich für den Besitzer (Owner), die Gruppe (Group) oder alle anderen (Other). So können Sie beispielsweise festlegen, dass andere Nutzer eine Ihnen gehörende Datei lesen, aber nicht ändern dürfen.
Berechtigungen ändern
Der Befehl chmod
ändert die Berechtigungen eines Verzeichnisses oder einer Datei (natürlich nur wenn Sie diese auch ändern dürfen). Es gibt mehrere Eingabemethoden, die einfachste ist:
$ chmod u+x ex1.dat
In diesem Beispiel fügt ein User (u
) für sich selbst die Berechtigung hinzu (+
), die Datei ex1.dat
auszuführen (x
). Alternativen für u
sind g
(Group), o
(Other) und a
(All). Berechtigung sind r
für Read, w
für Write, x
für Execute. Um eine Berechtigung zu entfernen, wird ein Minus -
anstelle des Pluszeichens gesetzt.
Auto-Vervollständigung
Eine wichtige Funktionalität, die die Arbeit mit Linux stark erleichtert, ist die Auto-Vervollständigen-Funktion. Wenn Sie einen Teil eines Befehls eingeben und dann Tab (die Tabulatortaste) drücken, wird der Befehl automatisch vervollständigt, allerdings nur wenn er eindeutig ist. Beispielsweise reicht es nicht, sb
einzugeben und die Tab-Taste zu drücken, um sbatch
zu erhalten, weil es auf dem Cluster drei Befehle gibt, die mit sb
anfangen. In diesem Fall können Sie ein zweites Mal auf die Tab-Taste drücken, um eine Liste aller Befehle zu erhalten, die mit sb
anfangen:
$ sb
sb sbatch sbcast
Man erkennt, dass z.B. sba
eindeutig wäre. Wenn es sehr viele Optionen gibt, werden Sie zunächst gefragt, ob Sie wirklich die komplette Liste sehen wollen (dies können Sie ausprobieren, indem Sie nur ein s
eingeben und zwei Mal die Tab-Taste drücken).
Die Auto-Vervollständigen-Funktion funktioniert nicht nur mit Befehlen, sondern auch mit Dateipfadangaben.
Prozesse
Wie bei Windows laufen unter Linux zu jeder Zeit eine große Anzahl an Prozessen, inklusive derer, die Sie ausdrücklich (mit einem bestimmten Befehl) gestartet haben. Manchmal ist es notwendig, den Status eines Prozesses zu überwachen oder ihn zwangsweise zu beenden. Dazu dient der Befehl top
. top
ist etwa vergleichbar mit dem Task-Manager unter Windows.
Die Oberfläche von top
sieht ungefähr wie folgt aus:
top - 10:08:18 up 53 days, 23:05, 14 users, load average: 0,12, 0,21, 0,48
Tasks: 334 total, 1 running, 333 sleeping, 0 stopped, 0 zombie
%Cpu(s): 1,6 us, 0,3 sy, 0,0 ni, 98,0 id, 0,0 wa, 0,0 hi, 0,0 si, 0,0 st
KiB Mem : 14854156+total, 749016 free, 1722716 used, 14606982+buff/cache
KiB Swap: 12582908 total, 12360456 free, 222452 used. 14465592+avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2610 otheruser 20 0 180156 3936 1240 S 4,3 0,0 43:08.94 sshd
2619 otheruser 20 0 180188 3968 1240 S 4,0 0,0 43:01.12 sshd
2291 otheruser 20 0 67804 2576 1800 S 1,0 0,0 9:34.55 sftp-server
13770 demo_user 20 0 168156 2564 1636 R 0,7 0,0 0:00.07 top
39 root 20 0 0 0 0 S 0,3 0,0 1:25.02 ksoftirqd/6
6133 root 20 0 0 0 0 S 0,3 0,0 0:00.84 kworker/u48:1
1 root 20 0 191612 3340 1672 S 0,0 0,0 14:56.12 systemd
2 root 20 0 0 0 0 S 0,0 0,0 0:02.23 kthreadd
3 root 20 0 0 0 0 S 0,0 0,0 0:22.88 ksoftirqd/0
8 root rt 0 0 0 0 S 0,0 0,0 0:01.71 migration/0
9 root 20 0 0 0 0 S 0,0 0,0 0:00.00 rcu_bh
10 root 20 0 0 0 0 S 0,0 0,0 81:45.44 rcu_sched
11 root rt 0 0 0 0 S 0,0 0,0 0:11.99 watchdog/0
In dieser (verkürzten und anonymisierten) Darstellung sind die laufenden Prozesse aufgelistet. Die Oberfläche von top
kann mit Befehlen aus Einzelbuchstaben bedient werden, q
beendet beispielsweise top
. Ganz links sehen Sie die Prozess-ID des entsprechenden Prozesses. Dies ist eine eindeutige Nummer, die Linux einem Prozess zuweist. Wenn Sie einen Prozess beenden müssen, können Sie k
(für “kill”) eingeben und anschließend die Prozess-ID, und Linux wird ihn abbrechen (vorausgesetzt, Sie haben die Berechtigung, ihn abzubrechen). Daneben steht der User, dem der Prozess gehört. Wie Sie sehen können, gibt es viele Systemprozesse, die root
als Besitzer haben, diese betreffen Sie in der Regel nicht. Sie können nur die Prozesse eines bestimmten Users anzeigen lassen, indem Sie u
und dann den Namen des Users eingeben. Die folgenden Spalten geben Auskunft darüber, wieviel Speicher und CPU-Ressourcen der Prozess belegt. Ganz rechts steht der Name des Prozesses.
Tipp: Die Prozentzahl in der %CPU
-Spalte bezieht sich auf eine einzelne CPU, nicht auf den gesamten Computer. Wenn Sie ein paralleles Programm (eins mit mehreren Threads) ausführen, ist die Zahl in dieser Spalte unter Umständen größer als 100%.
Elementare Konsolenbefehle
Linux wird, insbesondere auf entfernten Systemen, hauptsächlich über ein Textinterface, die sogenannte Konsole (auch Shell oder Terminal), bedient. Beachten Sie, dass es sich um die Bash-Konsole handelt, die auf dem Cluster standardmäßig aufgerufen wird. Wie die meisten Linux-Systeme hat der Cluster mehrere Konsolen installiert, die sich in der Handhabung leicht unterscheiden. Sie können zum Beispiel alternativ die C-Shell (mit dem Befehl csh
) benutzen, wenn Sie damit mehr Erfahrung haben.
Alle hier angegebenen Befehle können sowohl von Hand in der Konsole eingegeben als auch in einer Textdatei (einem sogenannten Skript) nacheinander aufgelistet werden. Die Shell kann dann dieses Skript ausführen und die Wirkung ist dieselbe, als ob die Befehle von Hand eingegeben wurden. Man spricht deshalb auch von Shell-Skripten. Dies ist einer der Gründe für die Popularität von Linux – repetitive Vorgänge lassen sich sehr leicht automatisieren.
Spezielle Zeichen
- Das Raute-Zeichen
#
beginnt einen Kommentar. - Das Asterisk-Zeichen
*
ist eine sogenannte Wildcard und kann als Platzhalter verwendet werden, wenn beliebige Zeichen gewünscht sind. Wenn man beispielsweise beliebige PDF-Dateien sucht (die Suchfunktion wird weiter unten erläutert), kann man nach*.pdf
suchen. Es gibt noch eine Reihe von weiteren Wildcards. - Das Pipe-Zeichen
|
dient dazu, den Output eines Befehls als Input an einen anderen Befehl weiterzuleiten. So lassen sich mehrere Befehle verketten. - Das Semikolon
;
dient dazu, mehrere unabhängige Befehle zu trennen. Mehrere Befehle mit Semikolons dazwischen einzugeben ist so, als ob diese Befehle nacheinander eingegeben würden. - Das Und-Zeichen
&
am Ende eines Befehls führt diesen Befehl im Hintergrund aus. Sie können dann weiter mit der Konsole arbeiten, während dieser läuft, indem Sie anschließend erneut die Eingabetaste drücken. Dies ist nützlich, wenn Sie eine Anwendung ausführen, die ein Fenster öffnet – andernfalls wäre die Konsole blockiert, solange das Fenster offen ist.
Bewegen in Verzeichnissen
Die häufigsten Operationen in der Konsole von Linux sind die Bewegung von Verzeichnis zu Verzeichnis und die Manipulation von Dateien im aktuellen Verzeichnis. Hier sind die wichtigsten Befehle, die Sie kennen sollten. Unabhängig vom Befehl gibt es noch zwei weitere Sonderzeichen, die bei Dateipfaden verwendet werden: Der Punkt .
bezeichnet das aktuelle Verzeichnis, zwei Punkte ..
bezeichnen das übergeordnete Verzeichnis.
Hinweis: Linux unterscheidet Groß- und Kleinschreibung, ein Befehl test
und ein Befehl Test
können verschiedene Funktionen haben. Dasselbe gilt für Dateien und Verzeichnisse.
In ein anderes Verzeichnis wechseln
Sie können mit dem Befehl cd
(für “Change directory”) in ein anderes Verzeichnis wechseln. Dazu können Sie entweder den relativen Dateipfad (relativ zu Ihrer aktuellen Position) oder den absoluten Dateipfad angeben. Sie erkennen den Unterschied daran, dass ein absoluter Pfad mit einem Schrägstrich /
beginnt (Hinweis: im Gegensatz zu Windows verwendet Linux Vorwärts-Schrägstriche für Pfadangaben). Wenn im aktuellen Verzeichnis ein Unterordner Beispiel
existiert, erreichen Sie diesen mit
$ cd Beispiel
Mit Hilfe von ..
können Sie einen relativen Pfad auch in einer höheren Baumebene erreichen. Wenn Sie sich zum Beispiel in einem Verzeichnis mydir/sub1
befinden, und mydir
noch einen weiteren Unterordner namens mydir/sub2
enthält, erreichen Sie das übergeordnete (Eltern-)Verzeichnis mydir
mit
$ cd ..
oder das Schwesterverzeichnis mit
$ cd ../dir2
Sie können auch den absoluten Pfad angeben, so ist der vorherige Befehl identisch mit
$ cd /home/demo_user/mydir/dir2
wenn sich, wie in diesem Beispiel, mydir
im Home-Verzeichnis des Users demo_user
befindet.
Verzeichnis anzeigen
Sie können mit dem Befehl pwd
(für “Print Working Directory”) anzeigen lassen, wo Sie sind:
$ pwd
/home/demo_user
Verzeichnisinhalt anzeigen
Der Befehl ls
(für “List”) zeigt die Dateien und Unterordner im aktuellen Verzeichnis an:
$ ls
ex1.txt ex2 ex3.dat
In diesem Beispiel enthält der Ordner einen Unterordner namens ex2
und zwei Dateien. Sie können auch den Inhalt eines anderen Ordners anzeigen lassen
$ ls ex2
ex4.txt
Hier wird der Inhalt des Unterordners ex2
angezeigt, der eine weitere Textdatei enthält (es muss aber nicht zwangsläufig ein Unterordner sein, beliebige Pfade sind möglich).
Sie können auch zusätzliche Details anzeigen lassen. So zeigt die Option -l
eine Tabellenform:
$ ls -l
insgesamt 4
-rw-r--r-- 1 demo_user hpc-gpr-hiwis 2 23. Jul 10:17 ex1.txt
drwxr-xr-x 2 demo_user hpc-gpr-hiwis 4096 23. Jul 10:24 ex2
-rw-r--r-- 1 demo_user hpc-gpr-hiwis 2 23. Jul 10:19 ex3.dat
Hier sehen Sie die folgenden zusätzlichen Informationen: Ganz links sind die Zugriffsrechte, die bereits erklärt wurden. Beachten Sie, dass Verzeichnisse mit d
gekennzeichnet sind. Anschließend sehen Sie den Besitzer dieses Ordners, in diesem Fall der Nutzer demo_user
, sowie die Besitzergruppe, in diesem Fall hpc-gpr-hiwis
. Anschließend sehen Sie die Dateigröße in Byte. Die beiden Textdateien enthalten nur je einen Buchstaben und sind deshalb nur 2 Byte groß. Die bei Unterordnern angezeigte Größe ist nur die Menge an Metadaten über den Ordner, die Größe der im Unterordner enthaltenen Dateien wird nicht in diesen Zahlenwert mit einberechnet. Schließlich sehen Sie das Datum der letzten Änderung und den Datei- bzw. Ordnernamen.
Versteckte Ordner (und Dateien) anzeigen
Eine versteckte Datei in Linux ist eine Datei, deren Name mit .
beginnt. Diese Dateien können auch mit ls
angezeigt werden, wenn die Option -a
verwendet wird.
$ ls -la
insgesamt 24
drwxr-xr-x 4 demo_user hpc-gpr-hiwis 4096 23. Jul 17:06 .
drwxr-xr-x 56 demo_user hpc-gpr-hiwis 12288 23. Jul 17:06 ..
-rw-r--r-- 1 demo_user hpc-gpr-hiwis 2 23. Jul 10:17 ex1.txt
drwxr-xr-x 2 demo_user hpc-gpr-hiwis 4096 23. Jul 10:24 ex2
-rw-r--r-- 1 demo_user hpc-gpr-hiwis 2 23. Jul 10:19 ex3.dat
-rw-r--r-- 1 demo_user hpc-gpr-hiwis 2 23. Jul 17:06 .hidden_ex.txt
drwxr-xr-x 2 demo_user hpc-gpr-hiwis 4096 23. Jul 10:43 test1
Wie Sie in diesem Beispiel sehen können, ist es auch möglich, Optionen zu kombinieren. In diesem Fall ist ls -la
äquivalent zu ls -l -a
. Dies funktioniert mit vielen Linux-Programmen, ist aber nicht garantiert.
Verzeichnis erstellen
Der Befehl mkdir
(“Make Directory”) erzeugt ein Verzeichnis mit dem angegeben Namen:
$ mkdir test1
$ ls
ex1.txt ex2 ex3.dat test1
Verzeichnis umbenennen oder kopieren
Der Befehl mv
(“Move”) bewegt ein Verzeichnis oder eine Datei. Er ist auch die übliche Methode, um etwas umzubenennen.
$ ls # Urspruenglicher Inhalt
ex1.txt ex2 ex3.dat test1
$
$ mv ex1.txt renamed.txt
$
$ ls # Geaenderter Inhalt.
ex2 ex3.dat renamed.txt test1
Der Befehl cp
(“Copy”) kopiert ein Verzeichnis oder eine Datei. Im Gegensatz zu mv
muss die Option -r
(“recursive”) verwendet werden, wenn ein Verzeichnis samt Inhalt kopiert werden soll.
Dateien und Verzeichnisse suchen
Der Befehl find
durchsucht einen Ordner und alle Unterordner nach Dateien und Ordnern mit einem bestimmten Namen. Auch Teile des Namens können angegeben werden.
$ find . -type f -name "ex*"
./ex2/ex4.txt
./ex3.dat
In diesem Beispiel wird mit -type f
nur nach Dateien, nicht nach Ordnern gesucht. Alle Dateien, deren Name mit ex
anfängt, werden aufgelistet. Der find
-Befehl verfügt über eine Vielzahl an Optionen, um Suchergebnisse einzugrenzen. Er kann auch zum Beispiel, mit der Option -exec <Befehlsname> ;
, für jede der gefundenen Dateien bestimmte Befehle ausführen.
Text in Dateien suchen
Der Befehl grep
dient zum Durchsuchen von Textdateien. Wenn Sie einen bestimmten Text innerhalb von bestimmten Textdateien suchen wollen, geben Sie
$ grep [Optionen] "Text" Dateiname
ein. Der Text muss strenggenommen nur in Anführungszeichen stehen, wenn er Leerzeichen enthält. Statt eines einzelnen Dateinamens können auch Wildcards verwendet werden (z.B. *.txt
). Wichtige Optionen sind beispielsweise -r
(sucht rekursiv, das heißt auch in Unterordnern) und -i
(ignoriert Groß- und Kleinschreibung). Eine vollständigere Liste von Optionen kann mit grep --help
angezeigt werden.
Skripte: erstellen und ausführen
Ein Skript im Linux-Kontext ist eine Datei, in der eine Reihe von Befehlen stehen. Wie bereits erwähnt, können praktisch alle Befehle, die in der Konsole eingegeben werden, auch einfach in ein Skript geschrieben werden. Die Ausführung des Skripts ist dann identisch mit der Ausführung aller gelisteten Befehle nacheinander.
Ein (Shell-)Skript beginnt immer mit der Zeile #!<Interpreter-Name>
, z.B. #!/bin/bash
. Dies ist der vollständige Pfad zum Bash-Programm. An dieser Stelle muss nicht unbedingt eine Linux-Shell stehen. Beispielsweise könnte ein Skript auch #!/usr/bin/python
in der ersten Zeile haben und würde dann als Python-Skript ausgeführt.
Damit ein Skript ausgeführt werden kann, muss es ausführbar sein (siehe oben im Abschnitt über Berechtigungen und chmod
). Dann kann es, unter der Angabe des absoluten oder relativen Pfades, wie jeder andere Befehl ausgeführt werden.
$ ./example.sh
(Umgebungs-)Variablen
Zusätzlich zu ausdrücklich geschriebenen Argumenten können auch Variablen verwendet werden. Variablen in Bash dienen demselben Zweck wie in anderen Programmiersprachen und funktionieren ähnlich. Der Hauptunterschied zu den meisten Programmiersprachen ist der, dass Werte von Variablen ausgegeben werden, indem ein $
davor gesetzt wird. Definiert werden sie allerdings mit einem Gleichheitszeichen var=Wert
. Zu beachten ist hier, dass weder links noch rechts from Gleichheitszeichen ein Leerzeichen sein darf. Prinzipiell sind Variablen in der Linux-Konsole immer Textvariablen (Strings).
Im folgenden Beispiel werden mehrere Operationen mit derselben Datei durchgeführt:
#!/bin/bash
# Variablendefinition
file1="/home/demo_user/exampledir/ex1.txt"
# Gibt den Dateiinhalt in der Konsole aus.
cat $file1
# Kopiert die Datei.
cp $file1 copy_example.txt
Diese Beispiel demonstriert die Nützlichkeit von Variablen: Wenn Sie dieselben Operationen mit einer anderen Datei durchführen möchten, muss der Dateiname nur an einer Stelle im Skript geändert werden anstatt überall.
Umgebungsvariablen
Eine Variable ist immer nur in der Konsole oder dem Skript erreichbar, in dem sie definiert wurde. Es gibt allerdings auch sogenannte Umgebungsvariablen. Diese sind auch in allen Unterprozessen erreichbar (d.h. in Prozessen, die vom aktuellen Prozess gestartet wurden). Auf diese Weise kann zum Beispiel vor dem Aufruf eines Skripts oder Programms eine bestimmte Einstellung gesetzt werden. Umgebungsvariablen werden mittels export var=Wert
gesetzt. Welche Umgebungsvariablen gesetzt sind, kann mit dem Befehl printenv
angezeigt werden.
In jedem Linux-System sind standardmäßig eine große Anzahl von Umgebungsvariablen gesetzt, entweder vom System oder von installierter Software. Beispielsweise gibt es in Linux immer eine Variable USER
, die den Usernamen der gerade eingeloggten Person anzeigt.
Kommandozeilenparameter
Im Spezialfall von Shell-Skripten stehen außerdem noch weitere Variablen automatisch zur Verfügung. So können zum Beispiel mit $0
, $1
, $2
und so weiter die Argumente abgerufen werden, mit denen das Skript gestartet wurde (Kommandozeilenparameter). Wird ein Skript gestartet mit:
$ Skript.sh -f 5.0
dann wäre $0=Skript.sh
, $1=-f
, $2=5.0
. Somit können an ein Skript gezielt Einstellungen übergeben werden.
Die PATH-Variable
Die Umgebungsvariable PATH
hat eine besondere Funktion: Wird ein Befehl in der Konsole eingegeben, werden die in PATH
aufgelisteten Verzeichnisse nach diesem Befehl durchsucht. Umgekehrt bedeutet das, dass ein Befehl nicht gefunden wird, wenn sein Verzeichnispfad nicht zu PATH
hinzugefügt wird. Um ein Verzeichnis zu PATH
hinzuzufügen, können Sie das neue Verzeichnis, getrennt mit einem Doppelpunkt, vorne oder hinten anhängen:
$ export PATH=$PATH:/home/demo_user/exampledir
Die Reihenfolge der einzelnen Pfade ist wichtig, weil ein gleichlautender Befehl in mehreren Verzeichnissen im PATH
stehen könnte. Es wird immer der erste gefundene Befehl mit dem gesuchten Namen verwendet.
Achtung: Beachten Sie, dass Fehler bei der Manipulation von PATH
teilweise gravierende Auswirkungen haben können, weil wichtige Befehle unter Umständen nicht erreichbar sind.
Eigene Einstellungen
Einstellungen wie das Exportieren von Umgebungsvariablen oder das Laden von Modulen haben nur solange Bestand, wie die aktuelle Shell offen ist. Wenn Sie sich beispielsweise vom Cluster abmelden, oder das Skript mit den entsprechenden Einstellungen beendet ist, gehen diese verloren. Es gibt allerdings Möglichkeiten, Einstellungen permanent zu machen. Die wichtigste ist die Datei .bashrc
. Diese befindet sich in Ihrem Home-Verzeichnis und wird bei jedem Start von Bash aufgerufen (also auch beim Einloggen). Befehle, die Sie dort einfügen, werden dann ausgeführt. Die .bashrc
-Datei ist gut geeignet, Umgebungsvariablen und sonstige Einstellungen, die Sie oft benötigen, abzuspeichern.
Sie können auch Einstellungen in einem eigenen Shell-Skript zusammenfassen und diese Einstellungen mit dem Befehl source <Skriptname>
verfügbar machen. Natürlich können Sie diesen source
-Befehl auch in die .bashrc
-Datei schreiben.
Achtung: da die .bashrc
-Datei bei jedem Einloggen ausgeführt wird, kann eine fehlerhafte .bashrc
dazu führen, dass Sie sich nicht mehr einloggen können! Gehen Sie unbedingt sicher, dass Einstellungen in .bashrc
keine Tippfehler etc. enthalten. Sie können Einstellungen testen, indem Sie sie zunächst von Hand in der Konsole eingeben. Bei einem Tippfehler können Sie dann durch Logout und Login die vorherigen Einstellungen wiederherstellen.
Verschiedene Tipps
- Die Linux-Konsole hat keine “Rückgängig”-Funktion. Sie sollten beim Eingeben von Befehlen immer auf Tippfehler achten und oft Backups machen, insbesondere wenn Sie auf einem Linux-System arbeiten, auf dem Sie Root-Rechte besitzen. Es ist durchaus möglich, eine komplette Linux-Installation durch Unachtsamkeit zu zerstören.
- Dateiendungen sind nicht so wichtig in Linux wie in Windows, insbesondere werden sie nicht verwendet, um den Dateityp festzulegen. Es empfiehlt sich aber, konsistente Endungen zu verwenden (üblich ist beispielsweise die Endung
.sh
für Shell-Skripte), damit ein Mensch durch Draufsehen erkennen kann, was der Dateityp ist. - Praktisch jeder Befehl ist in Wirklichkeit ein Programm (oder Skript), selbst die in Linux eingebauten Befehle. Sie können den Speicherort des Programms mit
which <Programmname>
ersehen. Dies ist insbesondere nützlich, wenn mehrere Versionen derselben Software installiert sind und Sie sicherstellen möchten, dass Sie die richtige Variante ausführen. - Sie können Befehle in Form eines sogenannten Alias definieren, das heißt als Kürzel für einen anderen Befehl. Zum Beispiel erzeugt
alias myjobs="squeue -u demo_user"
einen Befehl namensmyjobs
, der SLURM anweist, nur die Jobs des Usersdemo_user
anzuzeigen. Wie Umgebungsvariablen müssen Aliasse in.bashrc
geschrieben werden, um permanent erreichbar zu sein. - Außer Wildcards gibt es noch eine Möglichkeit, Muster von Zeichen zu bestimmen, sogenannte reguläre Ausdrücke (Regular Expression oder regex). Diese erlauben sehr komplexe Muster, sind allerdings auch sehr schwer zu erlernen. Aus Platzgründen wird hier nicht weiter darauf eingegangen.
- Sie können die Größe von Dateien und Verzeichnissen mit dem Befehl
du
(für “Disk Usage”) berechnen. Wichtige Optionen sind insbesondere-h
für “human-readable”, hier werden die Größen mit einem Zusatz (beispielsweiseGB
für Gigabyte) angezeigt, außerdem-s
wenn nur das aktuelle Verzeichnis aufgelistet werden soll (andernfalls würde jede Datei in jedem Unterverzeichnis einzeln gelistet, was bei vielen Dateien unübersichtlich werden kann). Beispiel:
$ du -sh *
5,4M abaqus
8,0K abaqus_plugins
4,0K abaqus.rpy
32K all_users_2018-02-07.txt
4,0K bin
4,0K bsp.f90
- Linux erlaubt, wie auch Windows, symbolische Links (Verknüpfungen). Sie können mit
ls -l
erkennen, was ein Link auf eine andere Datei oder Verzeichnis ist.
$ ls -l
-rw-r--r-- 1 demo_user hpc-gpr-hiwis 56 30. Jul 09:24 ex3.dat
lrwxrwxrwx 1 demo_user hpc-gpr-hiwis 7 1. Aug 09:47 ex3_link.dat -> ex3.dat
- Einen Link selbst erstellen können Sie mit dem Befehl
ln -s <Zieldatei> <Linkname>
. - Der Befehl
ls
wird so oft mit der Option-l
verwendet, dass viele Linux-Systeme, inklusive dem auf dem OMNI-Cluster, einen Befehlll
bereitstellen, der ein Alias fürls -l
ist. - Der Befehl
cd
ohne irgendein Argument wechselt in Ihr Home-Verzeichnis,cd -
wechselt in das vorherige Verzeichnis (vor dem letzten Aufruf voncd
). - Mit der Pfeil-Nach-Oben- und Pfeil-nach-Unten-Tasten können Sie in der Konsole die zuletzt eingegebenen Befehle anzeigen. Mit dem Befehl
history
können Sie alle zuletzt eingegebenen Befehle ausgeben. Die ist insbesondere nützlich, wenn Sie sich nicht mehr an die Syntax eines vor kurzem eingegebenen Befehls erinnern. Sie können dannhistory | grep <Befehlsname>
verwenden, um ihn wiederzufinden. Dieser Verlauf wird im Falle von Bash in der Datei~/.bash_history
gespeichert.