Linux Perfekt – Einstieg in Linux – Teil 1

Noch in Arbeit, aktuell nur die Notizen und interaktive Beispiele.

Die Videos sind eigentlich keine Videos sondern Text, hier könnt ihr jederzeit Text rauskopieren und in Putty einfügen.

  • space – play / pause
  • f – toggle fullscreen mode
  •  /  – rewind 5 seconds / fast-forward 5 seconds
  • 0, 1, 2 ... 9 – jump to 0%, 10%, 20% … 90%
  • < / > - decrease / increase playback speed

Einleitung

Was ist Linux?

Linux Kernel (kernel.org) + GNU Tools (gnu.org/software/coreutils/)

Freie Software, »OpenSource« und die GPL

GPL (Generic Public License)

Haftungsausschluss
Quelltext verfügbar
"Jeder darf alles"
GPL bleibt GPL

BSD, Apache, MIT, Mozilla

Linux-Distributionen

  • Slackware
  • Redhat(rpm)
    • Fedora(Redhat mit Desktop)
    • RHEL $$
    • CentOS
  • SUSE (rpm, yast)
    • OpenSuse
    • SLES $$ (Enterprise Server)
  • Debian(deb)
    • Ubuntu ->LTS 5 Jahre
    • Rasberian
  • Arch
  • Knoppix
  • Mint
  • Kalilinux
  • Fedora

Einrichtung einer Debian VM mit Virutalbox

Software sollte immer von der Hersteller Seite geladen werden, es kommt doch immer mal wieder vor das mit Viren/Adware verseuchte Software geladen wird.

Wir brauch folgendes:

Es kann natürlich auch eine andere virutalisierungs Lösung genommen werden. Das Windows Subsystem for Linux (WSL) sollte für diese Schulung nicht verwendet werden da hier einige Teile fehlen (z.B. der Bootloder und große Teile von eigentlichen Linux Kernel)

Die installtion ist recht offentlichlich, hier trotztdem nochmal als Video

 

(HTML5 Video)

Die Bedienung des Linux-System

Die Ubuntu User Wiki (in deutsch) ist sehr zu emfpehlen, wenn die man page zu unverständlich ist, bessere Beispiele oder andere Hinweiße fehlen einfach dort mal nachsehen. Da Ubuntu eine Debian-basieren Distro ist treffen die meißten Puntek dort zu.

Anmelden und Abmelden

Linux-Systeme kommen standardmäßig mit sechs virtuellen Konsolen. Hier handelt es sich nicht um ein Fenster innerhalb der  grafischen Benutzeroberfläche, sondern um eine komplette nicht-graphische Alternative auf reiner Textbasis. Diese virtuellen Konsolen erreicht man über Strg + Alt + F1 bis F6 (ggf. auch Strg + Alt + F3 bis F6) . Virtuelle Konsolen sind hilfreich, falls der Xserver einmal abstürzen oder etwas anderes dafür sorgen sollte, dass die grafische Oberfläche nicht mehr erreichbar ist. Dann kann man hier nach dem Fehler suchen.

 

Dabei ist F2 meißt die Grafische Oberfläche und F3-F6 Text-Konsolen (tty)

Verbindungen mit Putty

Nach der Anmeldung auf der Konsole kann  man sich mit dem Befehl ip a die IP der VM ausgeben lassen und sich via Putty verbinden zukönnen

Im falle von VirtualBox wird jedoch ein privates Netz (10.0.2.0) erstellt, welches von außen (bzw. eurem Rechner) nicht erreichbar ist. Ist hat den Vorteil das die VM immer noch Internet Zugriff hat, aber z.B. selbst wenn ein DHCP Server installiert wird, ihr euer Netzwerk nicht zerschießt.

Ihr könntet den Virtualbox Netzwerk Adapter auf Bridged stellen, dann würde die VM eine IP von eurdem Router bekommen und wäre für alle im Netzwerk erreichbar. Ich emfehle dies für den Anfang noch nicht, anstelle richten wir eine Portweiterleitung ein um trotzdem auf die VM zukommen:

Die IP bei Hostnamen eingeben, der Session einen Namen geben und ggf. unter Session -> Data -> Auto-login username noch der Usernamen angeben. Dann unter Session -> Save drücken und mit einem Doppelklick auf den Session Namen die Sitzung öffnen[

Der Systemadministrator

Der normale Nutzer hat keine Administratorrechte, diese hat aktuell nur der Benutzer Root. Um nun z.B. Software installieren zukönnen können wir mit dem Befehl su zum Root Benutzer werden.

Nun empfehle ich das Programm sudo zuinstallieren. Es ist besser immer als normale Nutzer zuarbeiten und nur den Befehl sudo zuverwenden wenn die erhöten Rechte auch benötigt werden - oft können damit auch Fehler vermieden werden .

  • su - um das mit zum Root Nutzer zuwerden
  • apt-get install sudo - zum das Programm sudo zuinstallieren
  • visudo - um die Konfigraution des Sudo Programms zuöffnen
  • unter der Zeile root ALL=(ALL:ALL) ALL fügt ihr nun euren Nuter ein, z.B. fish ALL=(ALL:ALL) ALL
  • Speichern mit STRG+X und Enter
  • Verlassen der Root Sitzung mit exit
  • Nun können Programme z.B. mit sudo apt-get install sudo installieren werden

Nun sollte in Snapshot der VM erzeugt werden. Sollte etwas kaputt gespielt werden, kann einfach auf diesen weider zurück geweselt werden.

VM Snapshot

Die TABULATOR-Taste

In Linux lassen sich alle Pfade und Kommendos mit der TAB-Taste vervollständigen.
z.B. sudo shut{TAB} oder cd /e{TAB}/sp{TAB}.
Gibt man nur cd /etc/s{TAB} passiert nicht (ggf. hört man ein Ping von Putty), da es mehrere Möglichkeiten gibt, hier nochmal TAB drücken um eine Liste möglichen Pfaden zubekommen.

Die Hilfe - man

Fast jeden Programm hat einen Manuel Eintrag, welcher mit man PROGRAMM Aufgerufen werden kann. Hier kann mit / SUCHWORT gesucht werden und mit n zum nächsten N zum vorherigen gesprungen werden. Mit ? kann Rückwärtz gesucht werden
z und w sind "Bild-Auf" und "Bild-Ab"

Manual-Pages
1 * Kommandos
2 * systemaufrufe
5 * Konfigurationsdateien
* ....

An- und Ausschalten

  • exit Beendet die Quelle Shell
  • logout Beendet die Sitzung (Abmelden)
  • code>shutdown -r now startet das System sofort neu, alternativ init 6 (dazu später mehr) oder reboot
  • shutdown -h 5 fährt das System in 5 Minuten runter

Sind das System zeitgesteuert runtergefahren bekommen alle Angemeldeten User eine Miteilung: The system is going down for reboot at Fri 2018-11-30 21:56:39 CET!
Broadcast message from root@linux1 on pts/0 (Fri 2018-11-30 21:51:51 CET):

Der PATH

Wie unter Windows gibt es auch unter Linux eine Pfad Variable, wenn z.B. der Befehl shutdown eingeben wird geprüft ob der Befehl in der PATH Varible steht. Diese kann man sich mit echo $PATH ausgeben lassen. Pfade sind mit einem Doppelpunkt getrennt - zu den Verzeichnissen später mehr.

fish@linux1:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
fish@linux1:~$ sudo su
[sudo] Passwort für fish:
fish@linux1:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
fish@linux1:~$ sudo echo $PATH
[sudo] Passwort für fish:
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
root@linux1:~$

#todo

-----------------------------------------

vi (vim)
                    Einfügemodus
                        |       ^
                        | 
vi       -->     Kommandomodus
                    :w -> write
                    :q  -> quit
                    :wq
                    :q!

u --> undo
/,n,N
"copy" --> 5yy
"cut" --> 5dd
"paste" --> p,P
"visuelles markieren" --> v --> "Zeichenweise"
V --> Zeilenweise

Suchen und ersetzen:
:%s/ALT/NEU/g
:%s;ALT;NEU;g

Übung:

Hängen Sie an die /etc/profile folgende Zeile an:

umask 077
Verzeichnisse
pwd, mkdir, rmdir
touch,
rm -r
rm -i
cp []... ...

mv

Erzeugen Sie ein Backup von /etc unterhalb von /tmp

ls

Links
- kopieren Sie die /etc/passwd in Ihr Home-Verzeichnis
- Erzeugen Sie je einen Hard- und einen Softlink auf diese Kopie
- Unterschiede?

find [Pfad] [Option]... [Aktion]

-name ""
-size +/-c|b|k|M|G
-mtime +/-ZAHL --> Bezug: ZAHL*24h
-atime
-ctime
-mmin / -amin / -cmin
Übung
Finden Sie Hardlinks im Dateisystem, die auf dateien zeigen.
--> Linkzähler > 1
-links +1
-type f

Suchen in Dateien / in Datenströmen

grep ...
~~~~~~~~~~ --> regulärer Ausdruck
.... | grep

--color
-c  ... count 
-i  ... ignore case
-n  ... Zeilennummern
-v  ... Suche negieren

standard regular expressions
(man 7 regex) vs. (man 7 glob)
^ ... Zeilenanfang $ ... Zeilenende
. ... ein beliebiges Zeichen
[abc] ... genau ein Zeichen aus Liste
[^abc] ... genau ein Zeichen nicht aus Liste
.* ... beliebig viele beliebige Zeichen

extended regular expressions
n+ ... n mindestens einmal
n{a} ... a mal der Ausdruck n
n{a,b} ... Ausdruck n mind. a-mal, maximal b-mal
(abs|bcd) .... Alternative

Ein-/Ausgabe-Umleitung

cmd > datei cmd < datei cmd >> datei
cmd 2> datei 2>&1
cmd 2>> datei

cmd | cmd --> stdout weiter zu stdin

Filterkommandos
cat, tac, head, tail
less ( /,n,N > < F q) hexdump, od sort, uniq tr, (sed) cut (awk) Quoten / Maskieren \x -> genau ein Zeichen maskieren
"string" -> komplette Zeichenkette maskieren
"soft-quoting" -> $ wird interpretiert
'string' -> komplette Zeichenkette maskieren
"hard-quoting"

interaktive Shell Login-Shell Skript
/etc/bash.bashrc /etc/profile nix
~/.bashrc ~/.profile

:%s/^# (.._)/\1/

--> locale-gen

$VAR --> ${VAR}
$(cmd) --> cmd
$((rechnen)) --> $[ rechnen ]

cmd ; cmd
cmd | cmd
cmd & cmd
cmd && cmd
cmd || cmd

Das Dateisystem
- reguläre Datei
d Verzeichnis
l Symbolischer Link
b Block-Gerätedatei
c Zeichen-Gerätedatei
p FiFo (named pipe)
s Socket

/bin -> Kommandos für user
/sbin -> Kommandos für sysadmin
/lib -> Libraries
/usr/{lib,bin,sbin} -> nahezu gesamte Software
/usr/local/{bin,sbin,lib} -> händisch installierte SW

/opt

/etc -> Konfiguration

Benutzerverwaltung

Benutzer Gruppen
UID -> 0 -> root GID -> 0 -> root
UID < 1000? Systemaccount GID < 500 primäre Gruppe keine Gruppen in Gruppen public-group-system: jeder kommt per default in die selbe gruppe ("users") private-group-system: jeder hate seine eigene Gruppe Benutzer Gruppen /etc/passwd: name:x:UID:GID primär:GECOS:Homedir:Shell /etc/shadow: name:PW-Hash:
/etc/group:
name:x:GID:,

Benutzer Gruppen
useradd groupadd
usermod groupmod
userdel groupdel
passwd (gpasswd)

Richten Sie einen Benutzer ein, der bei der ersten Anmeldung sein Passwort ändern muss. Test!

sudo

/etc/sudoers < -> visudo

Wer Wo = Was

max ALL = /usr/sbin/useradd
robert ALL = /usr/bin/less /var/log/user.log
%admin ALL = NOPASSWD: ALL

www-data ALL = NOPASSWD: /usr/sbin/reboot

Übung:
Geben Sie einem Benutzer das Recht, per "sudo" neue Benutzer einzurichten. Test!

Dateiberechtigungen
Eigentümer(u) Gruppe(g) Andere(o)
r w x r w x r w x
4 2 1 4 2 1 4 2 1

chmod UGO
chmod +/-

chmod g+w
chmod o-rwx

chmod g+w,o-rwx

chmod u=rw,g=r,o=

chgrp
chown

r... lesen
w... write
x... execute

Standard-Rechte:
umask: Welche Rechte sollen nicht gesetzt sein?
022
Dateien: 666 (-) umask -> 644
Verzeichnis: 777 (-) umask -> 755

Zusatzrechte:
SUID-Flag 4 -> Prozeß läuft immer als
chmod u+s ... Eigentümer der ausführbaren
Datei
SGID-Flag 2 -> Dateien "erben" die Gruppe des
chmod g+s Verzeichnisses mit SGID-Flag

Sticky-Bit 1 -> Dateien können nur von deren
chmod o+t Eigentümer gelöscht werden.

chmod NXYZ

Übung:
Erzeugen Sie eine Projektgruppe.
Nehmen Sie zwei Benutzer in diese Gruppe auf
Erzeugen Sie ein Projekt-Verzeichnis mit passenden Rechten.

- useradd / usermod
- groupadd / groupmod
- mkdir / chgrp / chmod

Suchen Sie alle Kommandos, die das SUID-Flag gesetzt haben!

find .... (man find)
ls + grep 

Posix-ACL

gleich? rxw
neu? Rechte können an beliebig viele Benutzer/gruppen gehängt werden.

ACL-Eintrag:
user::rwx
group:
:rwx

getfacl / setfacl
Prozeßverwaltung
PID
ps x, ps ax, ps aux (ps -ef)

kill -Signal killall -Signal

kill -2 1234
kill -SIGINT 1234
kill -INT 1234

Nice-Level
-20 ...... 0 ...... +19
< -- root -| nice -n

renice

Neue Platte nutzen
- Partitionieren
- Dateisystem anlegen
- Dateisystem mounten
- /etc/fstab

mount [-t ]

mkfs -t /dev/sdb1

--> mkfs. /dev/sdb1

Linux-Dateisysteme:
- ext2 +stabil -starr -kein Journal
- ext3 ext2+Journal
- ext4
(- reiserfs +Journal, +flexibel, B-Tree, -"veraltet")
- xfs +Journal, +flexibel, +für sehr große Dateien/Dateisysteme
- btrfs +COW, +flexibel, +VolumeManagement, +RAID, Snapshots

Booten (grub1,grub2,lilo,pxelinux,isolinux,...)
Bios
|
MBR (512 Bytes) stage1 "grub-install"
|
Grub stage2
|------------ initrd/initramfs ----- Treiber laden
Kernel ----------------< <<<<-------------| | mount / | init (1. Prozess) Dienste Verwalten System-V Init <===> systemd

Runlevel: Targets:
0 ... Halt
1 ... SingleUserMode basic.target
2 ... MultiUser
3 ... MultiUser+Netz multi-user.target
4 ... 3 + Grafik (RedHat) graphical.target
5 ... 3 + Grafik (SuSE)
6 ... Reboot systemctl isolate

service start|stop|restart|status
chkconfig --del/--add rsyslog
insserv [-] rsyslog
update-rc.d

systemctl list-units --type=service
systemctl start|stop|restart|status|..
systemctl enable|disable

systemctl mask|unmask

Zeitgesteuerte Vorgänge at / cron
Dienst: atd
#> at 14:00

cp -pr /etc /tmp ..

+D

atq / at -c / atrm

cron
System-Cronjobs:
/etc/crontab:
/etc/cron.d/*

/etc/cron.{hourly|daily|monthly|weekly}/