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 |
root | 0 | 0 | root | /root | /bin/bash |
daemon | 1 | 1 | daemon | /usr/sbin | /usr/sbin/nologin |
bin | 2 | 2 | bin | /bin | /usr/sbin/nologin |
sys | 3 | 3 | sys | /dev | /usr/sbin/nologin |
sync | 4 | 65534 | sync | /bin | /bin/sync |
games | 5 | 60 | games | /usr/games | /usr/sbin/nologin |
man | 6 | 12 | man | /var/cache/man | /usr/sbin/nologin |
lp | 7 | 7 | lp | /var/spool/lpd | /usr/sbin/nologin |
8 | 8 | /var/mail | /usr/sbin/nologin | ||
news | 9 | 9 | news | /var/spool/news | /usr/sbin/nologin |
uucp | 10 | 10 | uucp | /var/spool/uucp | /usr/sbin/nologin |
proxy | 13 | 13 | proxy | /bin | /usr/sbin/nologin |
www-data | 33 | 33 | www-data | /var/www | /usr/sbin/nologin |
backup | 34 | 34 | backup | /var/backups | /usr/sbin/nologin |
list | 38 | 38 | Mailing List Manager | /var/list | /usr/sbin/nologin |
irc | 39 | 39 | ircd | /var/run/ircd | /usr/sbin/nologin |
gnats | 41 | 41 | Gnats Bug–Reporting System (admin) | /var/lib/gnats | /usr/sbin/nologin |
systemd-timesync | 100 | 102 | systemd Time Synchronization | /run/systemd | /bin/false |
systemd-network | 101 | 103 | systemd Network Management | /run/systemd/netif | /bin/false |
systemd-resolve | 102 | 104 | systemd Resolver | /run/systemd/resolve | /bin/false |
systemd-bus-proxy | 103 | 105 | systemd Bus Proxy | /run/systemd | /bin/false |
_apt | 104 | 65534 | /nonexistent | /bin/false | |
messagebus | 105 | 109 | /var/run/dbus | /bin/false | |
nobody | 65534 | 65534 | nobody | /nonexistent | /usr/sbin/nologin |
Beispiel: System-Gruppen in der Debian-Distribution
Group–Name | Group–ID |
root | 0 |
daemon | 1 |
bin | 2 |
sys | 3 |
adm | 4 |
tty | 5 |
disk | 6 |
lp | 7 |
8 | |
news | 9 |
uucp | 10 |
man | 12 |
proxy | 13 |
kmem | 15 |
dialout | 20 |
fax | 21 |
voice | 22 |
cdrom | 24 |
floppy | 25 |
tape | 26 |
sudo | 27 |
audio | 29 |
dip | 30 |
www-data | 33 |
backup | 34 |
operator | 37 |
list | 38 |
irc | 39 |
src | 40 |
gnats | 41 |
shadow | 42 |
utmp | 43 |
video | 44 |
sasl | 45 |
plugdev | 46 |
staff | 50 |
games | 60 |
users | 100 |
systemd-journal | 101 |
systemd-timesync | 102 |
systemd-network | 103 |
systemd-resolve | 104 |
systemd-bus-proxy | 105 |
input | 106 |
crontab | 107 |
netdev | 108 |
messagebus | 109 |
ssh | 110 |
nogroup | 65534 |
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/bin | Ausführbare Programme, die im Single-User-Modus und für den Start des Systems oder dessen Reparatur benötigt werden. |
/boot | Enthä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. |
/dev | Spezialdateien oder Gerätedateien, die eine Schnittstelle zu physikalischen Geräten darstellen. |
/etc | Enthä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/opt | rechnerspezifische Konfigurationsdateien für in /opt installierte Add-On–Anwendungen |
/etc/sgml | Enthält die Konfigurationsdateien für SGML |
/etc/skel | Wenn ein neues Benutzerkonto eingerichtet wird, werden die in diesem Verzeich-nis gespeicherten Dateien in das Home-Verzeichnis des Benutzers kopiert. |
/etc/X11 | Konfigurationsdateien für das X11 Window System |
/etc/xml | Enthält die Konfigurationsdateien für XML. |
/home | Bei 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/lib | Enthä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/modules | Enthält ladbare Kernelmodule |
/lost+found | Enthä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. |
/media | Enthä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 |
/mnt | Dies ist ein Einhängepunkt für ein vorübergehend eingehängtes Dateisystem. |
/opt | Installationsort für Add-On-Pakete, deren Dateien sich nicht ändern. |
/proc | Einhängepunkt für das proc-Dateisystem, welches Informationen über laufende Prozesse und den Kernel zur Verfügung stellt. |
/root | Home-Verzeichnis für den Benutzer root. |
/sbin ⇒ /usr/sbin | Enthält wie /bin für den Systemstart notwendige Befehle, die aber in der Regel nicht von normalen Benutzern ausgeführt werden. |
/srv | Enthält betriebsspezifische Daten, die von diesem System bereitgestellt werden. |
/sys | Einhängepunkt für das Sysfs-Dateisystem, welches Informationen über den Kernel wie /proc zur Verfügung stellt. |
/tmp | Enthä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. |
/usr | Enthält gemeinsame, nur lesbare Daten. |
/usr/X11R6 | für das X Window System, Version 11 Release 6 |
/usr/X11R6/bin | Binärdateien, die zum X Window System gehören. |
/usr/X11R6/lib | mit dem X Window System verbundene Datendateien |
/usr/X11R6/lib/X11 | diverse Dateien, die zum Ausführen von X nötig sind. |
/usr/X11R6/include/X11 | Enthält Include–Dateien für die Kompilierung von Programmen für das X11 Window System. |
/usr/bin | Hauptverzeichnis für ausführbare Programme. |
/usr/bin/mh | Konfigurationsdateien für das X11 Window System |
/usr/bin/X11 | traditioneller Ort für X11-Programme. A ⇒ /usr/X11R6/bin. |
/usr/dict | ersetzt durch /usr/share/dict |
/usr/doc | ersetzt durch /usr/share/doc |
/usr/etc | In 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/games | ausführbare Dateien von Spielen und Lernprogrammen |
/usr/include | Include–Dateien für den C–Compiler |
/usr/include/bsd | BSD–Kompatibilitäts–Include–Dateien |
/usr/include/X11 | Include–Dateien für den C–Compiler und das X Window System ⇒ /usr/X11R6/include/X11. |
/usr/include/asm | Include–Dateien, die einige Assemblerfunktionen deklarieren. |
/usr/include/linux | Informationen, die von Release zu Release unterschiedlich sein können. |
/usr/include/g++ | Include–Dateien für die Verwendung mit dem GNU C++–Compiler |
/usr/lib | Enthä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/lib64 | Varianten von /usr/lib auf Systemen, die mehr als ein Binärformat unterstützen, das separate Bibliotheken benötigt. |
/usr/lib/X11 | Konfigurationsdateien für das X Window System und Datendateien für X-Programme. |
/usr/lib/gcc-lib | Enthält ausführbare und Include–Dateien für den GNU C-Compiler gcc |
/usr/lib/groff | Dateien für das Dokumentensatzsystem GNU Troff (Groff) |
/usr/lib/uucp | Dateien für uucp |
/usr/local | Programme, die nur lokal auf dieser Maschine installiert werden. |
/usr/local/bin | Binärprogramme für lokal installierte Software |
/usr/local/doc | lokale Dokumentation |
/usr/local/etc | Konfigurationsdateien für lokal installierte Programme. |
/usr/local/games | Binärprogramme für lokal installierte Spiele |
/usr/local/lib | Dateien 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/include | Include–Dateien für den lokalen C-Compiler |
/usr/local/info | Info–Dateien für lokal installierte Programme |
/usr/local/man | Handbuchseiten für die lokalen Programme |
/usr/local/sbin | lokal installierte Programme für die Systemverwaltung |
/usr/local/share | lokale Anwendungsdaten, die verschiedene Rechnerarchitekturen mit dem gleichen Betriebssystem gemeinsam nutzen können |
/usr/local/src | Quelltexte von lokal installierter Software |
/usr/man | ersetzt durch /usr/share/man |
/usr/sbin | Binärprogramme für die Systemverwaltung. |
/usr/share | Enthält Unterverzeichnisse mit spezifischen Anwendungsdaten, welche gemeinsam von den verschiedenen Architekturen des gleichen Betriebssystems genutzt werden können. |
/usr/share/dict | Enthält die Wortlisten für Rechtschreibprüfungen |
/usr/share/dict/words | Liste mit englischen Wörtern |
/usr/share/doc | Dokumentation über installierte Programme |
/usr/share/games | statische Datendateien für Spiele in /usr/games |
/usr/share/info | Info-Seiten |
/usr/share/xml | Dateien für XML |
/usr/share/xml/docbook | DocBook DTD |
/usr/share/xml/xhtml | XHTML DTD |
/usr/share/xml/mathml | MathML DTD |
/usr/share/zoneinfo | Dateien mit Zeitzonen-Informationen |
/usr/src | Quelltextdateien für verschiedene Teile des Systems, die von ein paar Paketen hier zu Referenzzwecken abgelegt wurden. |
/usr/src/linux | Dies war der traditionelle Ort für die Kernel-Quellen. |
/usr/tmp | Obsolet; sollte aus Kompatibilitätsgründen ein Link zu /var/tmp sein. |
/var | Enthält Dateien, deren Größe sich ändern kann. Dazu zählen Spool- und Logdateien. |
/var/account | Process accounting logs. |
/var/adm | wurde durch /var/log ersetzt und sollte ein symbolischer Link zu /var/log sein. |
/var/lib | variable Zustandsinformationen von Programmen |
/var/lib/misc | verschiedene Zustandsdaten |
/var/lib/xdm | Variable 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/local | variable Daten für /usr/local |
/var/lock | Lock-Dateien |
/var/log | verschiedene Protokolldateien |
/var/opt | variable Daten für /opt |
/var/mail | Benutzer-Postfächer; ersetzt /var/spool/mail |
/var/msgs | aus historischen Gründen reserviert |
/var/preserve | aus historischen Gründen reserviert |
/var/run | Variable 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/spool | zwischengespeicherte Dateien (oder Dateien in Warteschlangen) für verschiedene Programme |
/var/spool/at | Warteschlangen für at–Jobs |
/var/spool/cron | Warteschlangen für cron |
/var/spool/lpd | wartende Druckdateien |
/var/spool/lpd/printer | Druckdateien für einen bestimmten Drucker. |
/var/spool/mail | ersetzt durch /var/mail |
/var/spool/mqueue | Warteschlange für ausgehende E-Mail |
/var/spool/news | Verzeichnis für die Zwischenspeicherung von News |
/var/spool/rwho | wartende Dateien für rwhod |
/var/spool/uucp | wartende Dateien für uucp |
/var/tmp | Enthält auf unbestimmte Zeit gespeicherte, temporäre Dateien. |
/var/yp | Datenbankdateien 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