Wiss. Rechnen » Linux-Grundlagen
 

Auf dem HoRUS-Cluster ist, wie auf praktisch allen Großrechnern, das Betriebssystem Linux installiert (in diesem Falle CentOS 7.4.1708). Hier sind ein paar allgemeine Konzepte sowie gängige Befehle, insbesondere solche die die Arbeit auf dem Cluster betreffen. Ein ausführlicheres und sehr gutes Tutorial über Linux-Grundlagen findet sich zum Beispiel hier.

Auf dieser Website stehen Kurzanleitungen zu den folgenden Themen: der Verzeichnisstruktur von Linux, einige grundlegende Konsolenbefehle, Tipps zum Erstellen von ausführbaren Skripten und allgemeine Tipps zu Linux.

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 sind Unterordner von Root oder Unterordner von Unterordnern. Die Dateistruktur bei Linux ist etwas anders als die bei Windows. Während bei Windows die einzelnen Festplatten Buchstaben zugewiesen bekommen und die Unterteilung eindeutig ist, 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 HoRUS-Clusters gibt es zwei Verzeichnisse, in denen Sie sich in der Regel bewegen: Ihr Home-Verzeichnis (/home/<IhrUsername>) und Ihre Workspaces (/work/). Wenn Sie selbst Software entwickeln, müssen Sie unter Umständen Bibliotheken einbinden. In diesem Fall sind unter Umständen 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 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 Befehle zum Anzeigen und Ändern der Rechte werden weiter unten erklärt. 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.

Auto-Vervollständigung

Eine wichtige Funktionalität, die Ihnen die Arbeit stark erleichtert, ist die Auto-Vervollständigen-Funktion von Linux. 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 ist. 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 toptop 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  rcubh 
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. Schließlich 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. Im Folgenden sind die wichtigsten Befehle beschrieben, 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

In Linux wird das aktuelle Verzeichnis immer als ., das übergeordnete Verzeichnis mit .. bezeichnet. Sie können also 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 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 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. Wenn ein Verzeichnis samt Inhalt kopiert werden soll, muss die Option -r (“recursive”) verwendet werden.

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.

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 (für File) 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 steht. 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 #!<Konsolennname>, 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). 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 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:

# 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

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. 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 (Pfad) 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, um 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! Stellen 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 in Linux nicht so wichtig 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 Nutzer schnell erkennen kann, was der Dateityp ist.
  • 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 namens myjobs, der SLURM anweist, nur die Jobs des Users demo_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 (beispielsweise GB 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 HoRUS-Cluster, einen Befehl ll bereitstellen, der ein Alias für ls -l ist.
  • Der Befehl cd ohne irgendein Argument wechselt in Ihr Home-Verzeichnis, cd - wechselt in das vorherige Verzeichnis (vor dem letzten Aufruf von cd).
  • Mit den 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 dann history | grep <Befehlsname> verwenden, um ihn wiederzufinden. Dieser Verlauf wird im Falle von Bash in der Datei ~/.bash_history gespeichert.

Aktualisiert um 12:36 am 7. Mai 2018 von Jan Philipp Stephan