Linux - Grundlagen

Aus Flinkwiki
Version vom 30. Oktober 2018, 23:01 Uhr von Flinh1 (Diskussion | Beiträge) (Visual Studio Code)
Wechseln zu: Navigation, Suche
Zur Startseite "Fachinformatiker"
Zur Seite "Virtualisierung"

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).

Wikipedia "find"


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.

Wikipedia "grep"


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

Umrechner UNIX-Zeit

/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:

! " % & / ( ) = ? { [ ] } \ + * ~ < > | , ; . : - ^ '

Wikipedia Metazeichen

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

tr (Unix)


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

bash (Wikipedia

Aufgaben zur Shell-Programmierung

Bash Reference Manual

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

Zur Seite vi-Editor


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

Das Linux-Befehle-Buch

http://www.selflinux.org/selflinux/

http://de.linwiki.org/wiki/Hauptseite

http://de.linwiki.org/wiki/Linuxfibel

https://www.debian.org/index.de.html

https://openclassrooms.com/courses/reprenez-le-controle-a-l-aide-de-linux/les-utilisateurs-et-les-droits#ss_part_5


| |