Linux - Grundlagen
Inhaltsverzeichnis
Folgeanpassung nach Linux-Installation
Zu den Hinweisen für die nachfolgenden Arbeiten
Erste Orientierung
pwd | "Wo bin ich?" > Es wird das aktuelle Verzeichnis angezeigt. |
whoami | "Mit wessen Benutzerprofil arbeite ich?" > Es wird der aktuelle Benutzer angezeigt. |
ls | Zeigt Dateien im Verzeichnis an. ls -la zeigt auch die versteckten, also (-a)lle Dateien in der (-l)ang-Form mit Rechteprofil an.
|
cd | In ein anderes Verzeichnis wechseln. cd ~ wechselt in das Heimatverzeichnis des Benutzers, cd / wechselt in das Hauptverzeichnis.
|
cp | Kopieren: cp datei1 datei2; oder: cp datei1 verzeichnis1/datei1
|
mv | Verschieben: mv datei1 verzeichnis1; Umbenennen: mv datei1 datei2
|
mkdir | Verzeichnis erstellen |
rmdir | leeres Verzeichnis löschen |
rm -r | Verzeichnis mit Dateien löschen (rekursiv) |
Linux-Befehle
find
find /home -name "*.mp3" |
Sucht im Verzeichnis /home nach dem regulären Ausdruck "*.mp3". |
find . -mmin -120 |
Sucht im aktuellen Verzeichnis nach Dateien, die vor weniger als 120 Minuten verändert wurden. |
find /home -size +100M -exec /bin/rm -i {} \; |
Sucht im Verzeichnis /home Dateien mit mehr als 100 MB und löscht sie (mit Rückfrage). |
grep
grep sucht in einer Textdatei oder in der Ausgabe eines Kommandos nach einem definierten Suchmuster:
grep suchstring datei |
Sucht in der "datei" nach dem String "suchstring" |
ls | grep string |
Sucht in der Ausgabe von ls nach dem String "string" (und findet Dateinamen wie "string1" oder "nstring") |
grep [DM] datei |
Sucht reguläre Ausdrücke mit D oder M in "datei". |
grep ^tty[1-9]$ datei |
Sucht in der "datei" nur die Einträge "tty1-9". |
grep -r -i 'the string' /home/ |
Sucht rekursiv 'the string' in /home/ (bzw. /home/* ) |
egrep , grep -E |
Erweiterte Version von grep zur verbessertenSuche mit regulären Ausdrücken.
|
Benutzer- und Gruppenverwaltung
Konfigurationsdateien
/etc/passwd:
Hier befinden sich die Benutzerinformationen: jupp:x:1000:1000:Josef Frings,,,:/home/jupp:/bin/bash
jupp |
x | 1000 | 1000 | Josef Frings,,, | /home/jupp | /bin/bash |
Anmeldename | Passwort-Verweis | User-ID | Group-ID | GECOS-Feld | Heimatverzeichnis | Login-Shell |
/etc/shadow:
/etc/shadow enthält in verschlüsselter Form die Passwörter der Benutzer: jupp:$6$31X0pInW$c7QD50WAv6s2ygO2dvyG9ymTSJcVgPghNaEa0G14u5Q0:17011:0:99999:7:::
jupp |
$6$31X0pInW$c7QD50WAv6s2ySJcVgPghNaEa0G14u5Q0 | 17011 | 0 | 99999 | 7 |
Anmeldename des Benutzers |
verschlüsseltes Passwort ($6 = Verschlüsselung über SHA-512) |
Änderungsdatum (UNIX-Zeit) | Mindestanz. Tage zwischen PW-Änd. | max. Anz. Tage zwischen PW-Änd. | Tage vor Ablauf-Warnung |
/etc/group: Beispiel: gemeinsam:x:1003:jupp,schäng,köbes,nies
gemeinsam |
x | 1003 | schäng,köbes,nies |
Name der Gruppe | Verweis auf Passwort | Gruppen-ID | Liste der Gruppenmitglieder |
/etc/gshadow: Beispiel: gemeinsam:$6mIkaB6YAv6s2ygO2dvyG9ymTSJcVgPghNaEa0G14u5Q0:jupp:schäng,köbes,nies
gemeinsam |
$6mIkaB6YAv6s2ygO2dvyG9ymTSJcVgPghNaEa0G14u5Q0 | jupp | schäng,köbes,nies |
Name der Gruppe | Gruppenpasswort | Gruppenverwalter | Liste der Gruppenmitglieder |
Benutzer anlegen
Standardbefehl in Linux: useradd -m -c "Josef Frings" -s /bin/bash jupp
useradd |
-m | -c "Josef Frings" | -s /bin/bash | jupp |
Erzeugt Benutzer | erstellt Heimatverzeichnis | voller Name | zugeordnete Shell | Benutzername |
Als Grundlage für die Voreinstellung dient die Datei /etc/default/useradd. Hier steht, dass das Heimatverzeichnis aus der Vorlage /etc/skel/ erzeugt wird. Hier können alternative Optionen für useradd eingetragen werden.
passwd:
root erteilt dem Benutzer ein Passwort folgendermaßen:
passwd jupp
. Dann erfolgt die zweimalige Aufforderung, das Passwort einzugeben.
chage:
chage -m 2 jupp
: jupp kann frühestens nach 2 Tagen wieder das Passwort ändern.
chage -M 200 jupp
: jupp muss das Passwort nach maximal 200 Tagen ändern.
usermod:
Der Befehl usermod dient dazu, ein existierendes Benutzerkonto zu modifizieren. Der Befehl
usermod -aG vboxsf jupp
fügt den Benutzer jupp' der Gruppe vboxsf hinzu.
Hintergrund: Ein User unter Linux hat eine Primärgruppe und mehrere ergänzende Gruppen, denen der User angehört. Um diesem User nun eine weitere Gruppe (hier: vboxsf) zuzuweisen gibt es den Befehl usermod.
Gruppe anlegen
Standardbefehl in Linux: groupadd gemeinsam
groupadd |
gemeinsam |
Erzeugt Gruppe | Gruppenname |
bash
Die bash ist unter den meisten Linux-Distributionen die Standard-Shell. Es handelt sich um einen Kommandointerpreter, der eine Menge Zusatzfunktionen sowie eine eigene Programmiersprache bietet.
Ein- und Ausgabeumleitung
Dateideskriptoren ("Standarddateien"):
- Standardeingabe (stdin). Eingabequelle ist in der Regel die Tastatur. Kanalnummer 0.
- Standardausgabe (stdout). In der Regel das Terminalfenster. Kanalnummer 1.
- Standardfehler (stderr). Anzeige ebenfalls im Terminalfenster. Kanalnummer 2.
Wikipedia: Standard-Datenströme
Umleitungen:
kommando > datei |
Standardausgabe wird in die Datei geschrieben, Dateiinhalt ggf. überschrieben. >> : Ausgabe an Dateiinhalt angehängt.
|
kommando < datei |
Eingaben werden aus der Datei gelesen. |
kommando 2> datei |
Fehlermeldungen in die Datei geschrieben, Dateiinhalt ggf. überschrieben. 2>> : Fehlerausgabe an Dateiinhalt angehängt.
|
kommando1 | kommando2 |
Die Ausgabe von Kommando 1 wird an Kommando 2 weitergeleitet. |
kommando | tee datei |
Die Ausgabe erfolgt an den Bildschirm und wird zugleich in eine Datei geschrieben. |
Kommandos ausführen
kommando1; kommando2 | Die Kommandos werden nacheinander ausgeführt. |
kommando1 && kommando2 | Wenn Kommando 1 erfolgreich ist, wird Kommando 2 ausgeführt. |
kommando1 || kommando2 | Nur wenn Kommando 1 einen Fehler liefert, wird Kommando 2 ausgeführt. |
kommando & | Das Kommando wird im Hintergrund gestartet. |
kommando1 & kommando2 | Kommando 1 wird im Hintergrund gestartet, Kommando 2 im Vordergrund |
Metazeichen
Als Metazeichen definiert sind:
!
"
%
&
/
(
)
=
?
{
[
]
}
\
+
*
~
<
>
|
,
;
.
:
-
^
'
Substitutionsmechanismen
Beispiele :
ls datei* datei datei1 datei2 datei3 datei4 datei65 # * steht für beliebig viele oder kein Zeichen ls datei? datei1 datei2 datei3 datei4 datei5 datei6 # ? steht für genau ein Zeichen ls datei[1-3] datei1 datei2 datei3 # [1-3] steht für ein Zeichen aus dem Bereich 1 bis 3 ls datei[135] datei1 datei3 datei5 # [135] steht für eines der Zeichen 1 3 5 ls datei[!135] oder datei[^135] # [!135] oder [^135] heißt: ein Zeichen, nicht aber 1 3 5 touch test{1..5} ls test* test1 test2 test3 test4 test5 test.txt # {1..5} definiert den Wertebereich für Klammernexpansion cd ~ # Die Tilde ~ steht für das Heimatverzeichnis
Shell-Befehle
Die bash enthält zahlreiche, eingebaute Befehle und reservierte Wörter. Zu den eingebauten Befehlen zählen beispielsweise alias, cd, exit, help, kill, logout oder pwd und zu den reservierten Wörtern zählen die für die bash-Programmierung nötigen Schlüsselwörter wie case, for, function oder while.
alias
Mit dem Kommando alias
werden Abkürzungen definiert. Beispiele:
alias cdd='cd /home/user/Downloads' alias rm='rm -i' alias mp='find /home -name *.mp3'
Sollte der alias dauerhaft und nicht nur für die aktuelle Sitzung gelten, kann man ihn z. B. am Ende der Datei /etc/bash.bashrc (Debian, Ubuntu, SuSe) eintragen.
tr (translate)
Beispiel: Zeilenumbruch durch Semikolon ersetzen
cat datei1.txt | tr '\n' ';' > datei2.txt
Shell-Variablen
var=abc |
Durch das Gleichheitszeichen (ohne Leerstelle!) wird eine Variable (hier mit dem Namen var) definiert. |
echo $var |
Mit echo kann man den Inhalt einer Variablen anzeigen. Dem Variablennamen wird ein $ vorangestellt. |
abc | Die Shell gibt auf den echo-Befehl hin den Inhalt der Variable aus. |
unset var |
Die Variablenzuweisung wird hiermit aufgehoben. |
Die so definierte Variable ist eine lokale Variable. Um aus ihr eine globale Variable (environment variable) zu machen, verwendet man u. a. den Shell-Befehl export:
export var
Jetzt wird die Variable beim Start eines Kommandos oder eines Shell-Programms weitergegeben. Oft benötigte Variablen-Zuweisungen kann man in der Datei /etc/bash.bashrc (in der Form var=abc
) festlegen, damit die Variable schon automatisch beim Start der bash gilt.
Links und Quellen zur bash
Beispiele für die Verwendung von Wildcards
Aufgaben zur Shell-Programmierung
Runlevel wechseln - System anhalten - neu starten
Beim Systemstart übergibt der Kernel die Kontrolle an den init-Prozess. Dieser Prozess erhält die PID 1, und es ist auch der letzte Prozess, der beim Herunterfahren beendet wird. Für die folgenden Runlevel ist traditionell der init-Daemon verantwortlich. Allerdings haben einige Distributionen init durch das schneller startende, aber umstrittene systemd ersetzt (Debian, Ubuntu, Mint).
Das aktuelle Runlevel kann man sich mit dem Befehl who -r
anzeigen lassen.
init (SysVinit)
In Linux-Systemen, die noch das init-System oder zumindest über Softlinks dessen Befehle verwenden, lauten die Runlevels traditionell folgendermaßen:
0 - Halt 1 - Single User Mode 2 - Multiuser, without NFS (The same as 3, if you do not have networking) 3 - Full Multiuser Mode 4 - unused, can be setup for networking in a different location, etc. 5 - Full Multiuser Mode with XWindows (foundation of GUI) 6 - Reboot (your machine switches to this one when you use ctrl-alt-delete)
init s
oder init S
ist ein Reparaturmodus, meistens identisch mit init 1
.
Mit init
und der entsprechenden Zahl wechselt man zwischen den Runlevels hin und her. Beispiele:
init 0 | fährt das System herunter. |
init 6 | startet das System neu. |
init 3 | schaltet auf netzwerkfähigen Mehrbenutzermodus, ohne grafische Oberfläche. |
init 5 | startet von einem tty aus wieder den Modus mit grafischer Oberfläche. |
systemd
Bei Distributionen mit systemd sollten auch die traditionellen init-Befehle trotzdem noch funktionieren.
Die Befehle aus systemd arbeiten mit Targets. Beispiel:
systemctl isolate runlevel3.target
wechselt in den Runlevel 3. Die runlevel-Targets sind in Wirklichkeit nur Softlinks auf andere, "sprechende" Dateinamen. Hier die Links aus Ubuntu:
ls -l /lib/systemd/system/runlevel0.target lrwxrwxrwx 1 root root 15 Sep 7 11:33 /lib/systemd/system/runlevel0.target -> poweroff.target ls -l /lib/systemd/system/runlevel1.target lrwxrwxrwx 1 root root 13 Sep 7 11:33 /lib/systemd/system/runlevel1.target -> rescue.target -l /lib/systemd/system/runlevel2.target lrwxrwxrwx 1 root root 17 Sep 7 11:33 /lib/systemd/system/runlevel2.target -> multi-user.target ls -l /lib/systemd/system/runlevel3.target lrwxrwxrwx 1 root root 17 Sep 7 11:33 /lib/systemd/system/runlevel3.target -> multi-user.target ls -l /lib/systemd/system/runlevel4.target lrwxrwxrwx 1 root root 17 Sep 7 11:33 /lib/systemd/system/runlevel4.target -> multi-user.target ls -l /lib/systemd/system/runlevel5.target lrwxrwxrwx 1 root root 16 Sep 7 11:33 /lib/systemd/system/runlevel5.target -> graphical.target ls -l /lib/systemd/system/runlevel6.target lrwxrwxrwx 1 root root 13 Sep 7 11:33 /lib/systemd/system/runlevel6.target -> reboot.target
Das System herunterfahren
Neben der Möglichkeit, über Runlevel das System anzuhalten init 0
oder systemctl isolate runlevel0.target
, gibt noch weitere Befehle. Die differenziertesten Möglichkeiten bietet shutdown. Mit diesem Befehl werden beim Herunterfahren die Prozesse sauber geschlossen und der aktuelle Cache-Inhalt auf das Speichermedium geschrieben.
shutdown -h now | fährt den Rechner sofort herunter. |
shutdown -h +10 | fährt den Rechner in 10 Minuten herunter. |
shutdown -h 23:00 | fährt den Rechner um 23:00 Uhr herunter. |
shutdown -c | storniert einen eingegebenen shutdown-Befehl. |
Alternativ gibt es noch den Befehl poweroff. Der Befehl halt ist zu vermeiden.
Neustart
Analog zu den oben beschriebenen shutdown-Befehlen gibt es die Variante mit shutdown -r für den Neustart.
Eine weitere Möglichkeit ist der Befehl reboot, außerdem die Runlevel-Befehle init 6
oder systemctl isolate runlevel6.target
Dienste managen
Sowohl über systemctl als auch über service können mit den Optionen status, stop, start, restart Dienste verwaltet werden. Als Beispiel dient hier der Dienst rsyslog. In der Reihenfolge der Eingabe unterscheiden sich systemctl und service:
systemctl stop rsyslog
oder aber
service rsyslog stop
Zum Beenden eines Daemons kann auch killall (z. B. killall rsyslogd
) verwendet werden bzw.
nach Ermittlung der PID über ps aux
der entsprechende Prozess mit kill (z. B. kill 1491
) beendet werden.
Auch die Programme top und htop bieten die Möglichkeit, Prozesse zu beenden.
Die Optionen systemctl enable rsyslog
oder systemctl disable rsyslog
sorgen dafür dass beim Systemstart der Dienst automatisch geladen wird oder dieses verhindert wird.
Archivierung
tar
Das am häufigsten verwendete Archivierungsprogramm unter Linux ist tar. Es kann in Kombination mit verschiedenen Kompressionsprogrammen eingesetzt werden, unter anderem mit
- gzip (Dekompression mit (gunzip)
- gzip -k Die Originaldatei wird beibehalten und nicht gelöscht.
- bzip2: wie gzip, aber höhere Kompression (Dekompression mit (bunzip2)
- xz: wie bzip2, aber noch höhere Kompression (Dekompression mit (unxz)
tar-Befehle:
tar czf meinarchiv.tgz meinarchiv/ |
erzeugt einen mit gzip komprimierten "Tarball" "meinarchiv.tgz" mit dem Inhalt des Verzeichnisses "meinarchiv". Alternativ kann auch der Dateiname "meinarchiv.tar.gz" gewählt werden. |
tar tvf meinarchiv.tgz |
zeigt das Inhaltsverzeichnis von "meinarchiv.tgz" an. |
tar xzf meinarchiv.tgz |
packt das Archiv aus und extrahiert alle enthaltenen Dateien. |
tar xzf meinarchiv.tgz -C /tmp |
packt das Archiv aus und extrahiert alle enthaltenen Dateien nach /tmp. |
Bei Verwendung von bzip2 setzt man statt der Option z
die Option j
, für xz entsprechend J
. Die Optionen können hier mit oder ohne den Optionsstrich -
gesetzt werden.
gzip
gzip mit Beibehaltung der Originaldatei
gzip -k
zip
- zip -r ziparchivname.zip verzeichnis
Auspacken mit unzip
Editoren
nano:
- Aufruf mit
nano
[dateiname] - Speichern mit
Strg
+o
->Enter
- Beenden mit
Strg
+x
Atom:
Installation (getestet in Mint 18.2):
add-apt-repository ppa:webupd8team/atom
dann
apt update apt install atom
Visual Studio Code
Dowload von https://code.visualstudio.com/Download
Beispiel Ubuntu:[1]
- deb-Paket herunterladen
- sudo dpkg -i code_1.28.2-1539735992_amd64.deb
- sudo apt-get install -f # Abhängigkeiten installieren
https://code.visualstudio.com/docs?start=true Getting started
Notepadqq
sudo add-apt-repository ppa:notepadqq-team/notepadqq sudo apt-get update sudo apt-get install notepadqq
Diverse Infos
Leerstellen verwalten mit Hilfe von Backslash:
touch neuer\ text erzeugt die Datei neuer text
Sprache der Konsole umstellen:
setxkbmap us (de, fr etc.)
Versteckte Dateien anzeigen:
ls -a
Versteckte Dateien kopieren:
cp .[!.]*
Dateigröße und Dateiformat ändern:
convert -resize 16x16 hfl.ico favicon.png
konvertiert die ico-Datei zu einer png-Datei und verkleinert sie auf 16 x 16 Pixel.
SHA-1-Hash generieren
echo -n password | sha1sum | awk '{print $1}'
Quellen und Links
Linux Kommandoreferenz. Shell-Befehle von A bis Z
http://www.selflinux.org/selflinux/
http://de.linwiki.org/wiki/Hauptseite
http://de.linwiki.org/wiki/Linuxfibel
https://www.debian.org/index.de.html
| |