Skip to content

Instantly share code, notes, and snippets.

@jaydg
Last active May 20, 2026 11:31
Show Gist options
  • Select an option

  • Save jaydg/d05b20f2eca9f35e9c5b96db16fb12bf to your computer and use it in GitHub Desktop.

Select an option

Save jaydg/d05b20f2eca9f35e9c5b96db16fb12bf to your computer and use it in GitHub Desktop.
Notizen aus Linux-Grundlagenkurs
Bootvorgang
Statt init bash starten: Kerneloptionen im grub um
init=/bin/bash rw
ergänzen. So lässt sich das root-Passwort wiederherstellen.
Jobkontrolle
^c Prozess abbrechen
^z Prozess anhalten
jobs Jobs auflisten
bg [%n] Job [Nr. n] in den Hintergrund
fg [%n] Job [Nr. n] in den Vordergrund
kill %n Job Nr. n killen
History
history Historie anzeigen
~/.bash_history
^r History rückwärts durchsuchen
!n Kommando Nr. n aus History ausführen
Aliase
erstellen alias x='y'
anzeigen alias x
löschen unalias x
alle löschen unalias -a
Aliase können andere Aliase verwenden.
^k Löscht alles rechts vom Cursor
^u löscht alles links vom Cursor
^l löscht Bildschirm
Variablen
x=y lokal definieren
x=y Befehl nur für ausführung dieses Befehls Variable setzen
export Umgebungsvariable daraus erzeugen
unset Variable loswerden
env Umgebungsvariablen anzeigen,
run a program in a modified environment
y="Neue Datei"; touch $y
=> zwei Dateien, daher: touch "$y"
Initialisierung
login-Shell interaktive Shell
/etc/profile /etc/bash.bashrc
/etc/profile.local /etc/bash.bashrc.local
~/.bash_profile ~/.bashrc
~/.bash_login
~/.profile
Hier werden Umgebungs- Aliase werden nicht ver-
variablen definiert und erbt.
an alle Subshells ver-
erbt. Lokale Konfigdateien
werden in der angegebenen
Reihenfolge abgearbeitet.
Wenn eine gefunden wurde,
werden die folgenden
ignoriert.
Escaping
echo $HOME/* /home/user1/Desktop ....
echo "$HOME/*" /home/user1/*
echo '$HOME/*' $HOME/*
{eins,zwo,drei}
{1..20}
{eins,zwo,drei,{1..3}}
Alias oder Shell-Builtin?
type alias alias is a shell builtin
type ls ls is aliased to `/bin/ls $LS_OPTIONS'
type passwd passwd is /usr/bin/passwd
which
whereis
Hilfsysteme
help Hilfe zu bash builtins
man Dokumentation von Programmen
mandb baut die Datenbank für whatis und apropos auf
whatis Kurzbeschreibung
apropos Stichwortsuche
info "Hypertext"
konqueror kann info und man anzeigen: info:/ man:
http://www.tldp.org/
http://www.linwiki.org/ -> Linuxfibel
http://www.selflinux.org
less N <- / -> n Suche vorwärts, Ergebnisse vorwärts
N <- ? -> n Suche rückwärts, Ergebnisse rückwärts
Dateisystem
fuser identify processes using files or sockets
fdisk -l Partitionstabelle aller eingehängten Platten anzeigen
Dateitypen
- reguläre Datei
l Link
d Verzeichnis
c character Device
b block Device
p Pipe
s Socket
Dateirechte
Besitzer Gruppe Others
u g o
4 2 1 4 2 1 4 2 1
r w - r - - r - -
6 4 4
Shellskripte müssen sowohl lesbar als auch ausführbar sein, um
gestartet werden zu können. Binärprogramme dagegen müssen nicht
lesbar sein. Ausführen für Verzeichnisse regelt, ob in das
Verzeichnis gewechselt werden kann.
chmod 644 die oben gezeigten Berechtigungen vergeben
chmod u=r genau dieses Recht für Benutzer
Für den Besitzer eines Verzeichnisses geben die Verzeichnisberecht-
igungen die Rechte für Dateioperationen an, auch für Dateien, die
einen anderen Besitzer haben.
Zusätzliche Rechte sind
SETGID
set user ID on execution. Nicht für Shellskripte.
wird angezeigt als 's' beim Eigentümer, wenn 'x' gesetzt
ist, sonst als 'S'.
Oktal: 4 (u+s / u-s)
SETUID
set group ID on execution
wird bei der Gruppe angezeigt als 's', wenn 'x' gesetzt
ist, sonst als 'S'
Oktal: 2 (g+s / g-s)
sticky bit
The 'sticky' bit on a directory means that a file in that
directory can be renamed or deleted only by the owner of the
file, by the owner of the directory, and by a privileged
process. Wird für Verzeichnisse genutzt, in denen mehrere
Benutzer arbeiten. Unerläßlich für /tmp
Oktal: 1 (+t / -t)
umask
beim Erstellen von Dateien und Verzeichnissen werden die Rechte
666 bzw. 777 verwendet, von denen der als umask gesetzter Wert
abgezogen wird. Bsp.: 666 - 022 = 644. Tricky: 033 -> 644,
da 6 rw und 3 wx entspricht wird nur w abgezogen.
Wird meistens definiert in /etc/profile
Symbolische anzeige mit 'umask -S', dann werden allerdings die
Rechte angezeigt, die übrig bleiben: u=rwx,g=rx,o=rx
EXT2/EXT3 Attribute
lsattr Attribute anzeigen lassen
chattr Attribute ändern
Verfügbare Attribute siehe man-Page zu chattr
Dateikommandos
mkdir -p kompletten Verzeichnisbaum erstellen
cp -b Backup - falls Zieldatei existiert, wird diese umbenannt
ls -F Dateitypen identifizieren (mit @,/,|)
Symbolische Links orientieren sich nur am Namen der verlinkten Datei.
Wird eine Datei umbenannt oder verschoben, ist der Link gebrochen.
Harte Links beziehen sich auf Inode-Nummer, sind dementsprechend unab-
hängig von Dateiname und -position. Wird eine Datei gelöscht, wird
diese erst vom Dateisystem entfernt, wenn der letzte harte Link ent-
fernt wird. Harte Links funktionieren nur auf dem selben Dateisystem
und nicht für Verzeichnisse. 2. Spalte bei "ls -l" ist der Referenzzähler.
Duplikate dieser Datei findet find mit '-samefile'. Allerdings kann find
falsche Ergebnisse liefern, wenn auf unterschiedlichen Dateisystemen
zufällig die gleiche Inode-Nummer vergeben ist.
find
-size 2M Dateien größer 2MB
-size +2M -size -4M Dateien größer 2MB, kleiner 4MB
-type [p|s] Alle Pipes / Sockets
\( -type p -o -type s \) Alle Pipes und Sockets
-nouser Ohne gültigen Benutzer
-iname case-insensitive
-exec für einfache Fälle siehe xargs
-printf Ausgabe formatieren
Dateiarchivierung
cpio
-o < DATEINAMEN > Archivdatei Archiv erstellen
-i < Archivdatei Archiv entpacken
tar
Wird ein Verzeichnis übergeben, wird dieses rekursiv archiviert.
-P führendes / nicht abschneiden
r Dateien an Archiv anhängen (nicht komprimiert!)
A zwei Archive verbinden (nicht komprimiert!)
u nur geänderte Dateien in Archiv erneuern (nicht komprimiert!)
--delete einzelne Dateien aus Archiv entfernen
Standardkanäle
0 Standardeingabe (stdin)
1 Standardausgabe (stdout)
2 Standardfehler (stderr)
> xy Ausgabe in Datei umlenken (wird vorher neu angelegt)
>> xy Ausgabe in Datei umlenken (wird angehängt, sonst angelegt)
2> xy stderr umleiten
> xy 2>&1 stdio nach xy umleiten, stderr nach stdio (und damit xy)
Wertvolle Textwerkzeuge für Pipes
nl Zeilen nummerieren
pr [-2] Dateien für Druckerausgabe vorbereiten [zweispaltig]
tee von stdin in Datei und nach stdout schreiben
sort -n -t : -k 3 numerisch nach 3. Feld sortieren, getrennt mit :
sort -u nur eindeutige Zeilen zurückgeben
cut einzelne Werte ausschneiden
tr Zeichen tauschen
uniq
expand Tabs zu Leerzeichen umwandeln
unexpand Leerzeichen zu Tabs umwandeln
paste Zusammenführen zweier Dateien
Zeitgesteuerte Ausführung
wall Rundspruch an alle angemeldete Benutzer
at Verwendung mit Zeitangabe
at 15:15 Job um 15:15 ausführen, Inhalt wird interaktiv
abgefragt oder ein Skript kann mit -f übergeben werden
atq Liste aller Jobs anzeigen
atrm n Job Nr. n löschen
at -c n Job Nr. n anzeigen
Unter /var/spool/atjobs liegen die erzeugten Skripte.
/etc/at.deny - Liste aller Benutzer, die at nicht benutzen dürfen
/etc/at.allow - Liste aller Benutzer, die at benutzen dürfen.
Wenn diese Datei vorhanden ist, darf niemand außer den dort
eingetragenen Benutzern at benutzen.
batch wie at, job wird ausgeführt, wenn load unter 0.8 sinkt
cron
crontab -e crontab bearbeiten
crontab -l crontab anzeigen
crontab -u nn crontab eines anderen Benutzeres verwaten
nach letzter Zeile in crontab muß ein Zeilenumbruch stehen,
sonst wird der job nicht ausgeführt
Dateien liegen in /var/spool/cron/tabs
Prozesse
ps -ef
ps xau
kill -l Liste aller Signale
signal(7) Beschreibung aller Signale
killall unter UNIX: alle Prozesse killen!
Zustände
D Uninterruptible sleep (usually IO)
R Running or runnable (on run queue)
S Interruptible sleep (waiting for an event to complete)
T Stopped, either by a job control signal or because it is being traced.
X dead (should never be seen)
Z Defunct ("zombie") process, terminated but not reaped by its parent.
For BSD formats and when the stat keyword is used, additional characters
may be displayed:
< high-priority (not nice to other users)
N low-priority (nice to other users)
L has pages locked into memory (for real-time and custom IO)
s is a session leader
l is multi-threaded (using CLONE_THREAD, like NPTL pthreads do)
+ is in the foreground process group
vi
vi -o horizontal Teilen
vi -O vertikal Teilen
Kommandomodus -> Kommandozeilenmodus
i,I,a,A,o,A,s,S ^
| |
v ESC
Eingabemodus
im Kommandomodus:
ZZ speichern und beenden
^g Statusleiste anzeigen
gg Angfang der Datei
G Ende der Datei
y$ Alles bis zum Zeilenende kopieren
v visueller Modus
r einzelnes Zeichen ändern
u undo
. letzte Aktion im Eingabemodus wiederholen
^ww springen zwischen zwei geöffneten Fenstern
^r Änderungen rückgängig machen
? rückwärts suchen
% korrespondierende Klammer finden
"g Zwischenspeicher g ansprechen, danach y und p
im Kommandozeilenmodus:
:w name Speichern unten 'name'
:x speichen und beenden
:r! Ergebnis in den Puffer einfügen
:next nächste Datei
:previous vorherige Datei
:split horizontale Teilung
:vsplit vertikale Teilung
:close aktuellen Puffer schließen
:wa _alle_ Fenster schreiben
:%s/alt/neu/gc alle Vorkommen mit Rückfrage ersetzen
:help Hilfe aufrufen
:number Zeilennummern einschalten
vimdiff
do Änderung aus anderem Puffer übernehmen
dp Änderung in anderen Puffer übernehmen
Shellskripte
#!/bin/bash als erste Zeile
mit chmod +x Datei ausführbar machen
Werden Skripte mit einer Subshell ausgeführt (bash datei oder ./datei),
so sind in diesem Skript exportierte Variablen verloren. Möchte man das
Gegenteil erreichen, muß man die Datei mit source (d.h. .) ausführen.
bash -x alle Befehle und deren Parameter ausgeben
bash -v zeigt die Eingabezeilen beim einlesen an
bash -n Befehle einlesen aber nicht ausführen
bash -u Zugriffe auf nicht gesetzte Variablen erzeugen Fehler
$(( )) Berechnungen durchzuführen
$# Anzahl der übergebenen Parameter
$0 Name des Programms
$1 erster Parameter, für 11. Parameter: ${11}
$@ alle Parameter in einem String
$* alle Parameter einzeln, zum Übergeben an andere Skripte
$$ PID des Prozesse
$? Rückgabewert des zuletzt ausgeführten Programms
${x:2:4} Teil einer Variablen zurückgeben: 4 Zeichen ab der 2. Stelle
while COMMANDS; do COMMANDS; done
i=1
while [ $i -le 5 ]
do
echo $i
i=$(($i+1))
done
until COMMANDS; do COMMANDS; done
i=0
until [ $i -eq 5 ]
do
i=$(($i+1))
echo $i
done
if COMMANDS; then COMMANDS; [ elif COMMANDS; then COMMANDS; ]...
[ else COMMANDS; ] fi
for NAME [in WORDS ... ;] do COMMANDS; done
case WORD in [PATTERN [| PATTERN]...) COMMANDS ;;]... esac
&& UND
test -e .profile && . .profile
|| ODER
[ -d /etc/bladir ] || mkdir -p /etc/bladir
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment