Inhaltsverzeichnis

Shell-Programmierung

1. Virtuelle Terminal, An- und Abmelden

Bei den meisten Distributionen sind 6 virtuelle Terminal vorkonfiguriert. Aufruf aus grafischer Benutzerumgebung: <Strg><Alt><F1>…<F6>. Umschalten zwischen den virtuellen Terminals: <Alt><F1>…<F6>.

Anmelden: Erfolgt mit der Eingabe von Benutzername und Passwort.

Abmelden: Man kann das System verlassen mit

exit

oder

logout

System herunterfahren:

poweroff

System neu starten:

reboot

Hinweis: Zum Herunterfahren oder neu starten des Systems müssen (normale) Benutzer Mitglied der Gruppe root sein.

Ein GNU/Linux-System ist ein Multitasking–Multiuser–Multisession–Betriebssystem.
Multitasking: Mehrere Prozesse können quasi gleichzeitig abgearbeitet werden.
Multiuser: Es können sich mehrere Benutzer gleichzeitig am System anmelden.
Multisession: Jeder Benutzer kann sich mehrfach unter dem gleichem Benutzernamen am System anmelden.

Übrigends: Bei intensiven Arbeiten auf der Kommandozeile ist es üblich sich mehrfach am System anzumelden. Z. B. ein Arbeits–Terminal, ein Terminal zum editieren/programmieren, ein Terminal für die Suche nach Dateinamen, ein Terminal für Hilfe–Seiten, …

Nützliche Programme:

Auf welchem virtuellen Terminal befinde ich mich?
tty (Ausgabe als Gerätedatei: /dev/tty1 … /dev/tty6)

Welche Shell benutze ich?
echo $0 (Ausgabe z. B.: -bash)

Wo finde ich den Shell-Interpreter im Dateisystem?
which bash (Ausgabe z. B.: /bin/bash)

Wer bin ich (Benutzername)?
whoami (Ausgabe z. B.: rudi)

Welche Benutzer-ID habe ich?
echo $UID (Ausgabe z. B.: 1000)

In welchen Benutzergruppen bin ich Mitglied?
groups (Ausgabe z. B.: rudi cdrom floppy audio dip video plugdev netdev)


Wo ist mein Home-Verzeichnis?
echo $HOME (Ausgabe z. B.: /home/rudi)


Wer ist alles angemeldet?
who -u oder who –users

Wie kann Root andere unerwünschte Benutzer abmelden?
pkill -KILL -u <Benutzername>

Wie wird man zu einem anderen Benutzer?
su - (als Benutzer zu root werden, Passwort von root wird abgefragt)
su <Benutzername> (Root darf ohne Passwort zu beliebigem Benutzer werden)
Beispiel: Root möchte als Systembenutzer psql (PostgreSQL-Datenbank-Server) die Datei test.spl anlegen
su psql -c “touch /tmp/test.sql“

Systemweite Meldung nach erfolgreichem Login (MOTD = Message of the day)

Anwendung: Begrüßungsnachricht / Info über neue System–Features o. ä. nach erfolgreicher Benutzeranmeldung.

Trage als Root die Systemweite Meldung nach erfolgreichem Login in /etc/motd ein.

Anpassen des Konsolen–Login

Gebe aus der folgenden Auflistung die gewünschten Escape–Sequenzen in /etc/issue ein:

Issue–Escapes:
\b Baudrate
\d aktuelles Datum
\s Systemname
\l Name der aktuellen tty Zeile
\m Architektur
\n Hostname
\o NIS Domainname
\O DNS Domainname
\r System Release–Nummer
\s Systemname
\t aktuelle Zeit
\u Anzahl angemeldeter User
\U String „<n> users“
\v System Version
Beispiel: \l an Rudis \s \m \r (\n.\o) \t
Diese Sequenzen sind in den Hilfeseiten man agetty beschrieben.

2. Hilfe finden

apropos <Suchwort> findet Hilfethemen zu einem Suchwort
man <Hilfethema> gibt die Hilfeseiten aus

3. Benutzer und Gruppen

Was sind Benutzer?

Ein Benutzer ist (nichts weiter als) ein Datensatz (eine Textzeile) in der System-weit gültigen Datei /etc/passwd. Jeder Benutzer hat eine eindeutige User-ID. Der vordefinierte Benutzer root mit der User-ID 0 hat per Definition alle Administrator-Berechtigungen. Es können beliebig viele Benutzer angelegt werden.

Was sind Benutzergruppen?

Eine Gruppe ist ein Datensatz (eine Textzeile) in der System-weit gültigen Datei /etc/group. Jede Gruppe hat eine eindeutige Group-ID. Es können beliebig viele Gruppen angelegt werden. Jede Gruppe kann beliebig viele Benutzer als Mitglieder haben.

Prozesse und Zugriffsrechte:

Dateien können beschrieben, gelesen, als Prozess ausgeführt werden (rwx = read write execute). Zugriffsrechte können unabhängig voneinander für den Eigentümer (u = user), für Mitglieder einer Gruppe (g = group), für alle anderen (o = other), oder für Alle (a = all) vergeben werden. Das Ausführen einer ausführbaren Datei (Programm) führt zu einem gestarteten Prozess. Jeder Prozess läuft mit Eigentums- und Gruppenrechte. Der Prozess, der mit der Standardeingabe (Tastatur) und Standardausgabe (Display) verbunden ist nennt man Vordergrundprozess, alle anderen Prozesse sind Hintergrundprozesse. Jeder Prozess hat eine eindeutige Prozess-ID.

System-Benutzer und System-Gruppen:

Es wird immer wieder gerne übersehen: Unter unixoide Betriebssysteme gibt es nicht nur 2beinige User vor den Displays. Jeder einzelne (gute) Serverdienst läuft unter eigenem Benutzernamen in seiner eigenen Benutzergruppe und es gelten die gleichen Regeln für Eigentums- und Gruppenzugriffsrechte.

Hinweise zur Unterscheidung:

root ist der Benutzer- oder Gruppenname des Administrators mit der User-ID 0
root:root bezeichnet bei Zugriffsrechte zuerst den Eigentümer dann die Gruppe
Root bezeichnet den gesamten Personenkreis, der das Passwort von Benutzer root kennt
/root ist das Home-Verzeichnis von root

Benutzer anlegen, löschen

adduser <Benutzername> legt neuen Benutzer interaktiv an
useradd legt neuen Benutzer an
Beispiel: useradd -U -m <Benutzername>

passwd eigenes Passwort ändern
passwd <Benutzername> Root darf auch Passwörter von anderen Benutzern ändern

userdel löscht einen existierenden Benutzer
Beispiel: userdel -r <Benutzername>

Benutzergruppe anlegen, löschen

groupadd legt eine neue Benutzergruppe an
Beispiel: groupadd <Gruppenname>

groupdel löscht eine existierende Benutzergruppe
Beispiel: groupdel <Benutzergruppe>

Benutzerkonto ändern

usermod ändert Eigenschaften zum Benutzernamen.
groupmod ändert Eigenschaften zur Benutzergruppe.
adduser <Benutzername> <Gruppenname> fügt existierenden Benutzer einer existierenden Benutzergruppe hinzu.
deluser <Benutzername> <Gruppenname> entfernt Benutzer aus einer Gruppe.
chfn ändert Details zum Benutzer (voller Name, …)
chsh ändert die vorgegebene Shell
newgrp als neue Gruppe anmelden

Beispiel: System-Benutzer in der Debian-Distribution

Username User–ID Init–Group–ID Name Home–Verzeichnis Shell
root00root/root/bin/bash
daemon11daemon/usr/sbin/usr/sbin/nologin
bin22bin/bin/usr/sbin/nologin
sys33sys/dev/usr/sbin/nologin
sync465534sync/bin/bin/sync
games560games/usr/games/usr/sbin/nologin
man612man/var/cache/man/usr/sbin/nologin
lp77lp/var/spool/lpd/usr/sbin/nologin
mail88mail/var/mail/usr/sbin/nologin
news99news/var/spool/news/usr/sbin/nologin
uucp1010uucp/var/spool/uucp/usr/sbin/nologin
proxy1313proxy/bin/usr/sbin/nologin
www-data3333www-data/var/www/usr/sbin/nologin
backup3434backup/var/backups/usr/sbin/nologin
list3838Mailing List Manager/var/list/usr/sbin/nologin
irc3939ircd/var/run/ircd/usr/sbin/nologin
gnats4141Gnats Bug–Reporting System (admin)/var/lib/gnats/usr/sbin/nologin
systemd-timesync100102systemd Time Synchronization/run/systemd/bin/false
systemd-network101103systemd Network Management/run/systemd/netif/bin/false
systemd-resolve102104systemd Resolver/run/systemd/resolve/bin/false
systemd-bus-proxy103105systemd Bus Proxy/run/systemd/bin/false
_apt10465534 /nonexistent/bin/false
messagebus105109 /var/run/dbus/bin/false
nobody6553465534nobody/nonexistent/usr/sbin/nologin

Beispiel: System-Gruppen in der Debian-Distribution

Group–Name Group–ID
root0
daemon1
bin2
sys3
adm4
tty5
disk6
lp7
mail8
news9
uucp10
man12
proxy13
kmem15
dialout20
fax21
voice22
cdrom24
floppy25
tape26
sudo27
audio29
dip30
www-data33
backup34
operator37
list38
irc39
src40
gnats41
shadow42
utmp43
video44
sasl45
plugdev46
staff50
games60
users100
systemd-journal101
systemd-timesync102
systemd-network103
systemd-resolve104
systemd-bus-proxy105
input106
crontab107
netdev108
messagebus109
ssh110
nogroup65534

4. Dateien

Es gilt das Unix-Prinzip: „Alles ist eine Datei.“

Der Rechner hat angeschlossene, oder über das Netzwerk verbundene Datenträger.

Jeder Datenträger hat ein oder mehrere Dateisysteme (Partitionen).

Jedes Dateisystem beinhaltet Dateien. Dabei hat jede Datei hat einen eindeutigen Pfad und Dateinamen, einen Eigentümer, und gehört einer Gruppe an.

Neben normalen/gewöhnlichen Dateien gibt es auch spezielle Dateien wie Verzeichnisse, Links, Gerätedateien, virtuelle Dateien.

Ein Verzeichnis ist eine spezielle Datei, die andere Dateien (darunter auch weitere Verzeichnisse) enthält. Es gibt einen eindeutigen Ort für das Wurzelverzeichnis /. Unterhalb des Wurzelverzeichnisses können an beliebiger Stelle beliebig viele Dateisysteme eingebunden werden, und überlagern (nicht löschen) den vorherigen Inhalt des Verzeichnisses. Bekannte Dateisysteme sind in der System-weit gültigen Datei /etc/fstab eingetragen.

Ein Link ist eine spezielle Datei, die auf eine andere Datei verweist. So kann auf eine Datei von mehreren Orten im Verzeichnisbaum aus zugegriffen werden.

Eine Gerätedatei ist eine spezielle Datei, die eine Verbindung zu einem angeschlossenen Gerät darstellt. Daten von einem Eingabegerät werden aus der Gerätedatei gelesen. Daten zu einem Ausgabegerät werden in die Gerätedatei geschrieben. Gerätedateien befinden sich in /dev.

Virtuelle Dateien unter /proc (Prozessdaten) und /sys (System) stellen eine Schnittstelle zum Kernel dar. Kernel-interne Laufzeitvariablen werden in Form eines Dateisystems bereitgestellt.

4.1 Laufwerksbezeichnungen

Ältere magnetische Festplatten, sowie USB-Laufwerke, heißen meistens SD (SCSI Device). Danach folgen ein Buchstabe als laufende Nummer für das Laufwerk und eine Zahl als laufende Nummer für die Partition.
/dev/sda 1. Festplatte
/dev/sda2 2. Partition auf 1. Festplatte

Modernere SSD-Laufwerke enthalten in ihrer Bezeichnung zusätzlich die Nummer des NVME-Ports.
/dev/nvme0n1 1. SSD-Festplatte an NVME-Port 0
/dev/nvme0n1p7 7. Partition auf 1. SSD-Festplatte an NVME-Port 0

Bei Wechseldatenträger wird empfohlen das Verzeichnis /dev im Dateimanager zu beobachten während das Laufwerk ein- und ausgesteckt wird.
/dev/mmcblk0 Bezeichnung für eine SD–Card (Multimedia-Card Block-Device 0).

4.2 Partitionierung

fdisk menügesteuertes Programm für die Erzeugung und Manipulation von Partitionstabellen. Es kann DOS–Partitionstabellen in den Formaten GPT, MBR, Sun, SGI und BSD verarbeiten.
cfdisk interaktives Programm zum Partitionieren eines beliebigen block orientierten Gerätes.
gdisk menügesteuertes Programm für die Erzeugung und Manipulation von Globally Unique Identifier (GUID) Partition Table (GPT) Format.

4.3 Partition mit LUKS verschlüsseln (optional)

Die optionale Verschlüsselung ist im allgemeinen der nächste Schritt nach der Partitionierung.

Crypt–Laufwerk erzeugen (hier: Daten-Partition /dev/sda4)
cryptsetup -s 256 -y luksFormat /dev/sda4

Crypt–Laufwerk öffnen (hier mit Namen „luksdevice“)
cryptsetup luksOpen /dev/sda4 luksdevice

Crypt–Laufwerk schließen (hier mit Namen „luksdevice“)
cryptsetup luksClose luksdevice

4.4 Arbeiten mit dem LVM (Logical Volume Manager, optional)

Der LVM2 kann mehrere (bis zu 128) Laufwerke/Partitionen zu einer Volume Group zusammenfassen, und diese Volume Group dann in einzelne logische Volumes (bis zu 511) unterteilen. Es können bis zu 1023 Volume Groups gleichzeitig aktiv sein. Die Einrichtung des LVM ist im allgemeinen der nächste Schritt nach der Partitionierung oder nach der Verschlüsselung.

Erstelle Physical Volume (hier: „luksdevice“)
pvcreate /dev/mapper/luksdevice

Erstelle Volume Group (hier: Volume Group „vg“ auf Physical Volume „luksdevice“)
vgcreate vg /dev/mapper/luksdevice

Erstelle Logical Volume (hier: 32GB mit Name „root“ in Volume Group vg)
lvcreate -L 32G -n root vg

Erzeuge Device–Nodes
vgscan –mknodes

Aktiviere alle LVs
vgchange -ay

Jedes Volume mit ext4–Dateisystem lässt sich während des Betriebs vergrößern.
Vorsicht, Reihenfolge: Zuerst logisches Volume dann das Dateisystem vergrößern!
Volume vergrößern (hier: „home“)
lvextend -L 50G /dev/mapper/vg-home
resize2fs -p /dev/mapper/vg-home

Zum Verkleinern muss das Volume ausgehängt sein. So lässt sich beispielsweise die Wurzel-Partition nur von einem externen (Live–)System aus verkleinern.
Vorsicht, Reihenfolge: Zuerst das Dateisystem auf die minimal mögliche Größe verkleinern, dann das logische Volume verkleinern, dann das Dateisystem an die neue Größe anpassen/vergrößern
Volume verkleinern (hier: „var“)
resize2fs -M /dev/mapper/vg-var
lvreduce -L 5G /dev/mapper/vg-var
resize2fs -p /dev/mapper/vg-var

4.5 Dateisystem erzeugen (formattieren)

mkfs.bfs /dev/<Laufwerk>
mkfs.ext2 /dev/<Laufwerk> Linux-Dateisystem ext2 (ohne Journaling)
mkfs.ext3 /dev/<Laufwerk> Linux-Dateisystem ext3 (mit Journaling)
mkfs.ext4 /dev/<Laufwerk> Linux-Dateisystem ext4 (Standard)
mkfs.jfs /dev/<Laufwerk> Dateisystem JFS
mkfs.msdos /dev/<Laufwerk> Dateisystem für Dateinamen bis 8.3 Zeichen
mkfs.ntfs /dev/<Laufwerk> Dateisystem Microsoft NTFS
mkfs.reiserfs /dev/<Laufwerk> Dateisystem ReiserFS
mkfs.vfat /dev/<Laufwerk> Dateisystem FAT32 (Windows 95 und NT)
mkfs.xfs /dev/<Laufwerk> Dateisystem XFS
mkswap /dev/<Laufwerk> Dateisystem für Swap

Für eine Übersicht über unterstützte Dateisysteme siehe Hilfeseite man filesystems.

4.6 Dateisystem vollständig löschen

Möglichkeit 1: Eine Partition (hier: 3) mit Zufallszahlen überschreiben
dd if=/dev/urandom of=/dev/sda3

Möglichkeit 2: Eine Partition (hier: 3) „schreddern“
shred -vn 1 /dev/sda3

4.7 Dateisystem einhängen, aushängen, auswerfen

mount hängt Dateisystem ein
umount hängt Dateisystem aus
sync wartet bis Datenpuffer geschrieben sind
eject wirft Dateisystem aus

4.8 Arbeiten mit Dateien

touch erzeugt eine neue Datei
pathchk überprüft, ob Dateinamen gültig oder portabel sind.
echo gibt eine Zeichenkette aus, auch mit Umlenkung in eine Datei
echo „Zeichenkette“ > Datei.txt
cat gibt den Inhalt einer Datei aus
more Pager, zeigt Inhalt einer Datei, scrollt nur vorwärts
less Pager, zeigt Inhalt einer Datei, scrollt vor und zurück
ed ist ein einfacher zeilenorientierter Texteditor
cp kopiert Dateien
mv kann Dateien verschieben / umbenennen
find nach Dateien suchen
chown ändert Eigentümer / Gruppe von Dateien.
chgrp ändert die Gruppe von Dateien.
chmod ändert die Zugriffsrechte von Dateien
cmp vergleicht zwei Dateien Byte für Byte
cksum gibt Prüfsumme und Anzahl der Bytes einer Datei aus
md5sum MD5-Prüfsummen berechnen und überprüfen
split eine große Datei auf mehrere kleinere aufteilen, wieder zusammenfügen mit cat
csplit eine Datei anhand von Kontextzeilen in mehrere Teile teilen
gzip Dateien komprimieren / expandieren
gunzip
zcat
cpio kopiert Dateien und Verzeichnisse in und aus Archive
pax kopiert Dateien und Verzeichnisse in und aus Archive
ar Archivierungswerkzeug
tar Archivierungswerkzeug
ln erzeugt einen Link auf eine Datei oder ein Verzeichnis
rm löscht Dateien
mkdir erzeugt ein neues Verzeichnis
cd wechselt das aktuelle Verzeichnis
pwd zeigt das aktuelle Verzeichnis an
ls listet den Inhalt des aktuellen Verzeichnisses auf
rmdir löscht ein leeres Verzeichnis
basename gibt nur Dateinamen ohne Verzeichnispfad, ohne Suffix aus
dirname gibt übergeordnetes Verzeichnis aus
mknod erzeugt eine Gerätedatei
file bestimmt den Dateityp
dd Umwandeln und Kopieren einer Datei
df Anzeige der Festplattenbelegung
du gibt den Platzverbrauch von Dateien an

4.9 Wo finde ich was? - Der FHS (Filesystem Hierarchy Standard)

/Wurzel des Dateisystems. Dort beginnt der gesamte Verzeichnisbaum.
/bin ⇒ /usr/binAusführbare Programme, die im Single-User-Modus und für den Start des Systems oder dessen Reparatur benötigt werden.
/bootEnthält statische Dateien für den Boot-Lader. Dieses Verzeichnis enthält nur die Dateien, die während des Bootvorgangs benötigt werden. Der »map installer« und Konfigurationsdateien sollten in /sbin und /etc installiert werden. Der Betriebssystemkernel (zum Beispiel initrd) muss sich entweder in / oder in /boot befinden.
/devSpezialdateien oder Gerätedateien, die eine Schnittstelle zu physikalischen Geräten darstellen.
/etcEnthält lokale Konfigurationsdateien für den Rechner. Einige größere Softwarepakete wie X11 können unter /etc ihre eigenen Unterverzeichnisse haben. Für den ganzen Betrieb (site) gültige Konfigurationsdateien können hier oder in /usr/etc platziert werden. Dennoch sollten Programme nach diesen Dateien immer in /etc suchen. Sie können Links zu den Dateien in /usr/etc sein.
/etc/optrechnerspezifische Konfigurationsdateien für in /opt installierte Add-On–Anwendungen
/etc/sgmlEnthält die Konfigurationsdateien für SGML
/etc/skelWenn ein neues Benutzerkonto eingerichtet wird, werden die in diesem Verzeich-nis gespeicherten Dateien in das Home-Verzeichnis des Benutzers kopiert.
/etc/X11Konfigurationsdateien für das X11 Window System
/etc/xmlEnthält die Konfigurationsdateien für XML.
/homeBei Maschinen mit Home-Verzeichnissen für Benutzer werden diese in der Regel (direkt oder indirekt) unterhalb dieses Verzeichnis angelegt. Die Struktur dieses Verzeichnisses hängt von den örtlichen Organisationsgrundsätzen ab.
/lib ⇒ /usr/libEnthält die Bibliotheken, die für den Systemstart und die Ausführung von Programmen im Wurzel–Dateisystem (/) erforderlich sind.
/lib32 ⇒ /usr/lib32,
lib/64 ⇒ /usr/lib64
Varianten von /lib auf Systemen, die mehr als ein Binärformat unterstützen, die separate Bibliotheken benötigen.
/lib/modulesEnthält ladbare Kernelmodule
/lost+foundEnthält im Dateisystem verlorene Dinge. Diese Dinge sind typischerweise Teile von Dateien, die als Konsequenz einer defekten Platte oder einem Systemabsturz durcheinander gewürfelt wurden.
/mediaEnthält Mount-Punkte für Wechseldatenträger wie CD und DVD oder USB–Sticks. Auf Systemen mit mehr als ein Gerät pro Typ kann eine Ziffer beginnend mit '0' angehängt sein.
/media/floppy[1-9]Diskettenlaufwerk
/media/cdrom[1-9]CD-ROM-Laufwerk
/media/cdrecorder[1-9]CD-Schreiber
/media/zip[1-9]ZIP-Laufwerk
/media/usb[1-9]USB-Laufwerk
/mntDies ist ein Einhängepunkt für ein vorübergehend eingehängtes Dateisystem.
/optInstallationsort für Add-On-Pakete, deren Dateien sich nicht ändern.
/procEinhängepunkt für das proc-Dateisystem, welches Informationen über laufende Prozesse und den Kernel zur Verfügung stellt.
/rootHome-Verzeichnis für den Benutzer root.
/sbin ⇒ /usr/sbinEnthält wie /bin für den Systemstart notwendige Befehle, die aber in der Regel nicht von normalen Benutzern ausgeführt werden.
/srvEnthält betriebsspezifische Daten, die von diesem System bereitgestellt werden.
/sysEinhängepunkt für das Sysfs-Dateisystem, welches Informationen über den Kernel wie /proc zur Verfügung stellt.
/tmpEnthält temporäre Dateien, die ohne Nachricht gelöscht werden können. Das Löschen kann z. B. ein regelmäßig beim Systemstart laufender Job erledigen.
/usrEnthält gemeinsame, nur lesbare Daten.
/usr/X11R6für das X Window System, Version 11 Release 6
/usr/X11R6/binBinärdateien, die zum X Window System gehören.
/usr/X11R6/libmit dem X Window System verbundene Datendateien
/usr/X11R6/lib/X11diverse Dateien, die zum Ausführen von X nötig sind.
/usr/X11R6/include/X11Enthält Include–Dateien für die Kompilierung von Programmen für das X11 Window System.
/usr/binHauptverzeichnis für ausführbare Programme.
/usr/bin/mhKonfigurationsdateien für das X11 Window System
/usr/bin/X11traditioneller Ort für X11-Programme. A ⇒ /usr/X11R6/bin.
/usr/dictersetzt durch /usr/share/dict
/usr/docersetzt durch /usr/share/doc
/usr/etcIn diesem Verzeichnis können gemeinsame, betriebsspezifische Konfigurationsdateien für mehrere Rechner gespeichert werden. Die zugehörigen Programme sollten diese Dateien in /etc annehmen. Von /etc sollten Links zu den entsprechenden Dateien in /usr/etc weisen.
/usr/gamesausführbare Dateien von Spielen und Lernprogrammen
/usr/includeInclude–Dateien für den C–Compiler
/usr/include/bsdBSD–Kompatibilitäts–Include–Dateien
/usr/include/X11Include–Dateien für den C–Compiler und das X Window System ⇒ /usr/X11R6/include/X11.
/usr/include/asmInclude–Dateien, die einige Assemblerfunktionen deklarieren.
/usr/include/linuxInformationen, die von Release zu Release unterschiedlich sein können.
/usr/include/g++Include–Dateien für die Verwendung mit dem GNU C++–Compiler
/usr/libEnthält (auch dynamische) Objekt–Bibliotheken sowie einige gewöhnlich nicht direkt aufgerufene ausführbare Programme. Komplexere Programme können hier ein eigenes Unterverzeichnis haben.
/usr/lib32, /usr/lib64Varianten von /usr/lib auf Systemen, die mehr als ein Binärformat unterstützen, das separate Bibliotheken benötigt.
/usr/lib/X11Konfigurationsdateien für das X Window System und Datendateien für X-Programme.
/usr/lib/gcc-libEnthält ausführbare und Include–Dateien für den GNU C-Compiler gcc
/usr/lib/groffDateien für das Dokumentensatzsystem GNU Troff (Groff)
/usr/lib/uucpDateien für uucp
/usr/localProgramme, die nur lokal auf dieser Maschine installiert werden.
/usr/local/binBinärprogramme für lokal installierte Software
/usr/local/doclokale Dokumentation
/usr/local/etcKonfigurationsdateien für lokal installierte Programme.
/usr/local/gamesBinärprogramme für lokal installierte Spiele
/usr/local/libDateien für lokal installierte Programme

/usr/local/lib32

/usr/local/lib64

Varianten von /usr/local/lib auf Systemen, die mehr als ein Binärformat unterstützen und separate Bibliotheken benötigen
/usr/local/includeInclude–Dateien für den lokalen C-Compiler
/usr/local/infoInfo–Dateien für lokal installierte Programme
/usr/local/manHandbuchseiten für die lokalen Programme
/usr/local/sbinlokal installierte Programme für die Systemverwaltung
/usr/local/sharelokale Anwendungsdaten, die verschiedene Rechnerarchitekturen mit dem gleichen Betriebssystem gemeinsam nutzen können
/usr/local/srcQuelltexte von lokal installierter Software
/usr/manersetzt durch /usr/share/man
/usr/sbinBinärprogramme für die Systemverwaltung.
/usr/shareEnthält Unterverzeichnisse mit spezifischen Anwendungsdaten, welche gemeinsam von den verschiedenen Architekturen des gleichen Betriebssystems genutzt werden können.
/usr/share/dictEnthält die Wortlisten für Rechtschreibprüfungen
/usr/share/dict/wordsListe mit englischen Wörtern
/usr/share/docDokumentation über installierte Programme
/usr/share/gamesstatische Datendateien für Spiele in /usr/games
/usr/share/infoInfo-Seiten
/usr/share/xmlDateien für XML
/usr/share/xml/docbookDocBook DTD
/usr/share/xml/xhtmlXHTML DTD
/usr/share/xml/mathmlMathML DTD
/usr/share/zoneinfoDateien mit Zeitzonen-Informationen
/usr/srcQuelltextdateien für verschiedene Teile des Systems, die von ein paar Paketen hier zu Referenzzwecken abgelegt wurden.
/usr/src/linuxDies war der traditionelle Ort für die Kernel-Quellen.
/usr/tmpObsolet; sollte aus Kompatibilitätsgründen ein Link zu /var/tmp sein.
/varEnthält Dateien, deren Größe sich ändern kann. Dazu zählen Spool- und Logdateien.
/var/accountProcess accounting logs.
/var/admwurde durch /var/log ersetzt und sollte ein symbolischer Link zu /var/log sein.
/var/libvariable Zustandsinformationen von Programmen
/var/lib/miscverschiedene Zustandsdaten
/var/lib/xdmVariable Daten für den X Display Manager
/var/lib/<Editor>Sicherungs- und Zustandsdaten von Editoren
/var/lib/<Name>Diese Verzeichnisse müssen für sämtliche Paketierungsunterstützungsdateien der Distribution verwandt werden.
/var/lib/<Paket>Zustandsdaten für Pakete und Subsysteme
/var/lib/<pkgtool>Paketierungsunterstützungsdateien
/var/localvariable Daten für /usr/local
/var/lockLock-Dateien
/var/logverschiedene Protokolldateien
/var/optvariable Daten für /opt
/var/mailBenutzer-Postfächer; ersetzt /var/spool/mail
/var/msgsaus historischen Gründen reserviert
/var/preserveaus historischen Gründen reserviert
/var/runVariable Laufzeitdateien, wie Dateien, die IDs (PIDs) und Informationen über angemeldete Benutzer (utmp) aufnehmen; Dateien in diesem Verzeichnis werden in der Regel gelöscht, wenn das System hochfährt.
/var/spoolzwischengespeicherte Dateien (oder Dateien in Warteschlangen) für verschiedene Programme
/var/spool/atWarteschlangen für at–Jobs
/var/spool/cronWarteschlangen für cron
/var/spool/lpdwartende Druckdateien
/var/spool/lpd/printerDruckdateien für einen bestimmten Drucker.
/var/spool/mailersetzt durch /var/mail
/var/spool/mqueueWarteschlange für ausgehende E-Mail
/var/spool/newsVerzeichnis für die Zwischenspeicherung von News
/var/spool/rwhowartende Dateien für rwhod
/var/spool/uucpwartende Dateien für uucp
/var/tmpEnthält auf unbestimmte Zeit gespeicherte, temporäre Dateien.
/var/ypDatenbankdateien für NIS, früher als Sun Yellow Pages (YP) bekannt

4.10 Arbeiten mit Prozesse

time startet Programme und fasst genutzte System-Ressourcen zusammen
at kann ein Kommando zu einer bestimmten Zeit auszuführen
batch kann ein Kommando auszuführen, wenn es die Systemauslastung ermöglicht.
crontab führt spezielle Programme zu bestimmten Zeiten unter einem bestimmten Benutzernamen aus.
nice ein Programm mit einer veränderten Zeitplanungspriorität ausführen
renice die Priorität laufender Prozesse ändern
nohup ein Programm immun gegen Aufhängen laufen lassen
ps zeigt aktive Prozesse an.
fuser identifiziert Prozesse anhand Dateien oder Sockets.
pidof findet die Prozess-ID eines laufenden Programms
kill sendet Signale an Prozesse.
killall beendet Prozesse anhand seines Namens.
sleep wartet mit der weiteren Abarbeitung angegebene Anzahl Sekunden
wait wartet mit der weiteren Abarbeitung bis ein gegebener Prozess seinen Status ändert
true beendet sich immer mit Exit-Status für erfolgreich
false beendet sich immer mit Exit-Status für nicht erfolgreich
test überprüft Dateitypen und vergleicht Werte
[
expr wertet Ausdrücke aus

5. Beispiele zu Benutzer, Gruppen, Dateien, Prozesse

Hinweis: Mit ‚#‘ beginnende Zeilen sind Kommentarzeilen.

5.1 Benutzer anlegen

Es sind Root-Rechte erforderlich:
su -
und Root-Passwort eingeben, oder
sudo su -
und Benutzer-Passwort eingeben.

Es soll ein einfacher nicht-privilegierter Benutzer np angelegt werden.
# Benutzergruppe anlegen
groupadd -f np

# Benutzer anlegen
useradd -s /bin/bash -g np -m -N np

# Passwort vergeben
passwd np

# weitere Gruppen hinzufügen
usermod -aG cdrom,floppy,audio,dip,video,plugdev,netdev,scanner np

5.2 Home-Verzeichnis schützen

In Unix–artigen Betriebssystemen gibt es nicht nur 2beinige Benutzer vor den Bildschirmen. Jeder (gute) Server-Dienst läuft unter seinem eigenen Benutzernamen in seiner eigenen Benutzergruppe und hat (meist unter /var/) sein eigenes Home-Verzeichnis, und gerade hier tauchen nicht selten Sicherheitslücken auf.

Hier genügen einfache Benutzer-Rechte.

# Neue Dateien werden standardmäßig so angelegt, das Mitglieder der
# Gruppe np nur lesen, alle anderen weder lesen noch schreiben können
umask 027

# Ändere (rekursiv) die Dateirechte vorhandener Dateien
chmod -R o-rwx $HOME

# Lege ein Verzeichnis für öffentlichen Zugriff an
mkdir -p $HOME/Öffentlich

# Gewähre globalen Zugriff auf die Dateien
chmod o+x $HOME
chmod -R a+rwx $HOME/Öffentlich

5.3 Home-Verzeichnis nachträglich auf andere Partition auslagern

Es sind Root-Rechte erforderlich:
su -
und Root-Passwort eingeben, oder
sudo su -
und Benutzer-Passwort eingeben.

Das Home-Verzeichnis soll auf ein Logical Volume ausgelagert werden.

# Erstelle Logical Volume (LV), Name: home, Größe: 32GB
lvcreate -L 32G -n home vg

# Erzeuge Device–Nodes
vgscan –mknodes

# Aktiviere alle LVs
vgchange -ay

# Erzeuge Dateisystem auf LV
mkfs.ext4 /dev/mapper/home

# Erstelle Mount–Punkt (Verzeichnis)
mkdir /mnt/home

# Logical Volume einhängen
mount -t ext4 /dev/mapper/vg-home /mnt/home

# Den Inhalt von /home/ nach /mnt/home/ verschieben
mv /home/* /mnt/home

# Logical Volume aushängen und nach /home neu einhängen
umount /dev/mapper/vg-home
mount -t ext4 /dev/mapper/vg-home /home

# Mount–Punkt wieder entfernen
rmdir /mnt/home

Home–Verzeichnis in System–Datei /etc/fstab eintragen

nano /etc/fstab
/dev/mapper/vg-home /home ext4 defaults 0 1

5.4 Ein einfacher Daten–Tresor für Passwörter

Es sind Root-Rechte erforderlich:
su -
und Root-Passwort eingeben, oder
sudo su -
und Benutzer-Passwort eingeben.

# Container–Datei z.B. für Textdateien anlegen, Größe: 10MB
dd if=/dev/zero bs=10M count=1 of=/tresor/container.crypt

# Container–Datei verschlüsseln
cryptsetup luksFormat -c aes-xts-plain64 -s 512 /tresor/container.crypt

# Container–Datei öffnen
cryptsetup luksOpen /tresor/container.crypt crypt

# In Container–Datei Dateisystem erzeugen
mkfs.ext4 /dev/mapper/crypt

# Mount–Punkt für den Container anlegen
mkdir /media/crypt

# Datei–Zugriffsrechte anpassen
chown np:np /media/crypt

# Container einhängen
mount /dev/mapper/crypt /media/crypt

Der Container sollte jetzt auch z.B. im grafischen Dateimanager sichtbar sein. Nach getaner Arbeit

# Container aushängen
umount /media/crypt

# Container schließen
cryptsetup luksClose crypt

Seiten