Anhang A: Befehle zum selbst Ausprobieren

Hier listen wir einige Befehle auf, die ihr ohne weiteres ausprobieren könnt (ohne dabei was am System zu verändern). Bei manchen Befehlen kann es sein, dass sie erst nachinstalliert werden müssen.

Infos zur Hardware

Infos über die CPU:

$ less /proc/cpuinfo

$ lscpu

Infos über den RAM:

$ free -h

$ sudo dmidecode --type memory

Weitere Infos zur Hardware

$ lshw

Eine GUI-Alternative hierzu:

$ hardinfo

Infos über vorhandene Block-Speichermedien (Festplatten, USB-Sticks, etc.) und deren Partitionierung erhalten wir mit lsblk:

$ lsblk

Informationen über den Zustand von Festplatten erhalten wir mit smartctl (unter Ubuntu in dem Paket smartmontools enthalten):

$ sudo smartctl -a /dev/sda

Eine grafische Alternative dazu:

$ sudo gsmartcontrol

Spezifisch zum Dateisystem und zu Partitionierungen

Zeigt den den bereits verwendeten und verfügbaren Speicherplatz auf allen Blockspeichermedien an. df steht für disk free. Die Option -h stehllt die Werte nur schöner dar, anstatt 1073741824 steht dann 1G da, usw.

$ df -h

du steht wiederum für disk usage und zeigt den verbrauchten Speicherplatz von einzelnen Dateien im aktuellen und allen Unterverzeichnissen Verzeichnissen an. Das ist für große Verzeichnisse nicht so brauchbar, aber mit der Zusatzoption -s wird eine Summary angegeben und nur der Gesamtwert ausgegeben.

$ du -h

$ du -s -h

Mit einem * können so z.B. die Summaries für alle Verzeichnisse (und Dateien) im aktuellen (bzw. als Parameter angegebenen) Verzeichnis angezeigt werden. Das kann z.B. praktisch sein um zu sehen in welchen Unterverzeichnissen eigentlich so viel Speicherplatz verbraucht wird, wenn mal die Platte volläuft.

$ du -s -h *

$ du -s -h /var/log/*

Mit tree kann ein Verzeichnisbaum ausgegeben werden. Also alle Dateien und Unterverzeichnisse in einer Baumstruktur aufgelistet werden.

$ tree

$ tree /usr/local

$ tree /etc

Mit lsof können alle zur Zeit im System geöffneten Dateien angezeigt werden (list open files). Das sind in der Regel meistens ziemlich viele, daher muss entweder viel gescrolled werden oder mensch piped den Output in ein less (oder einen anderen pager) hinein.

$ lsof

$ lsof | less

Zur Partitionierung können folgende Befehle verwendet werden:

$ fdisk

$ parted

fdisk erwartet als Argument dazu ein Blockdevice, also z.B. /dev/sda. Während fdisk von der Bedienung her technischer ist und üblicherweise auf Systemen schon vorintalliert ist, muss parted meistens erst installiert werden, bietet dafür aber eine gewöhnlichere Benutzer_innenoberfläche an. Für parted gibts auch eine eigene GUI-Version:

$ gparted

Bei diesen Befehlen werden root privileges benötigt, da hier direkt die jeweiligen Block Devices und deren Partitionierungen bearbeitet werden. Entsprechend viel kann mensch bei falscher Bedienung auch kaputt machen. Es empfiehlt sich hier das Ausprobieren in einer virtuellen Maschine oder auf einem Testrechner.

Informationen zu und Manipulation von Prozessen und Systemen-Diensten

Der Befehl ps zeigt alle eigenen Prozesse an, die als Unterprozesse der eigenen Shell laufen:

$ ps

Das ist meistens nicht sehr aussagefähig, weil ich ja schon weiß, dass ich in meiner shell bin und den Befehl ps ausgeführt habe. Nur wenn ich in dieser Shell bereits vorab mehr Hintergrundprozesse gestartet hätte, würde hier auch mehr angezeigt werden. Interessanter ist dann schon die Option -a, die alle Prozesse anzeigt, die mir gehören und mit einem tty assoziiert sind.

$ ps -a

Oder noch spannender (weil ps zwei unterschiedliche Syntaxen und Konventionen bedient (POSIX bzw. UNIX style und BSD style)):

$ ps a

Mit der Option -A oder auch -e (beide werden synonym verwendet) sehe ich dann wirklich alle Systemprozesse:

$ ps -e

Dieser Befehl ist wesentlich informativer, wenn wir auch noch die BSD style Option a verwenden, weil dann z.B. auch die verwendeten Argumente und Optionen der Prozesse angezeigt werden:

$ ps -e a

Zusätzlich kann die Option -f verwendet werden, die ein full-format listing generiert und mir z.B. auch die usernames anzeigt unter denen Prozesse laufen:

$ ps -e a -f

Oder quasi in Kurzform (allerdings nicht 100% äquivalent) geht auch:

$ ps -eaf

Einen ganzen Prozessbaum, in dem auch abgebildet ist, welche Prozesse welche Unterprozesse besitzen, können wir uns mit pstree anzeigen lassen:

$ pstree

Wenn ich einen Prozess anhand der Prozessnummer beenden will kann der Befehl kill verwendet werden. Die Prozessnummer suche ich mir üblicherweise vorher über ps bzw. ps -eaf heraus:

$ kill 12345

Sollte sich ein Prozess so nicht mehr beenden lassen, kann dem kill Befehl auch noch als Option -9 mitgegeben werden, dann nimmt das System keine Rücksicht mehr auf die Beendigungsroutinen des Prozesses selbst und beendet ihn ohne weitere Vorwarnung:

$ kill -9 12345

Grafische Prozesse können auch durch anklicken beendet werden, so muss ich dann nicht vorab die Prozess-ID heraussuchen:

$ xkill

Und danach einfach das Fenster das beendet werden soll anklicken.

Die Auslastung eines Systems kann mit top angesehen werden:

$ top

Der Prozessviewer kann mit "q" wieder beendet werden.

Westenlich umfangreicher (aber meist nicht von Haus aus installiert) ist htop:

$ htop

htop ist sozusagen ein besseres Top und nicht nur ein Prozess Viewer sondern ein kompletter Task Manager. Dort können auch interaktiv Prozesse beendet werden. Umfangreiche Sortier- und Filtermöglichkeiten sind auch vorhanden. Entsprechend umfangreich ista auch die man page dazu.

Auf Linux laufen im Hintergrund immer alle möglichen Services (wie auf anderen Betriebssystemen auch), die wir uns auf unterschiedliche Arten ansehen können. Ursprünglich wurde bei den meisten Linux Distros SysV Init als init system verwendet, aber spätestens seit 2015 sind alle größeren Distributionen auf systemd umgestiegen. Während erstere über Start-up-Skripte in /etc/init.d/ gestartet und gestoppt wurden, werden zweitere übere systemctl gesteuert. Ein allgemeines FrontEnd ist aber der Befehl service, der im Hintergrund die relevanten System-Calls ausführt. service wurde zwar ursprünglich auch für das SysV Init system geschrieben, kann aber auch zur Steuerung von systemd benutzt werden. Mehr Infos zu systemd gibts wieder mal auf der Wikipedia: https://en.wikipedia.org/wiki/Systemd

Um einen Zustands-Status aller Systemdienste anzuzeigen können wir folgendes verwenden:

$ service --status-all

Den detaillierteren Status eines bestimmten Services können wir uns dann mit folgendem Befehl anschauen:

$ service NAME status

(wobei hier NAME durch den jeweiligen service name ersetzt wird, den wir z.B. oben per service --status-all herausgefunden haben)

Die generelle Syntax zum starten, stoppen oder reloaden von Services ist:

$ service NAME status

$ service NAME status

$ service NAME reload

$ service NAME restart

Dazu werden in der Regel root privileges benötigt, da es sich ja um Systemdienste und nicht um User Programme handelt. "Korrekter", bzw. angepasst an das neue systemd Umfeld währen aber folgende Befehle:

$ systemctl status NAME.service

$ systemctl start NAME.service

$ systemctl stop NAME.service

$ systemctl reload NAME.service

$ systemctl restart NAME.service

Da systemctl sowas ähnliches wie command/tab completion umsetzt, kann das .service in der Regel auch weggelassen werden. So oder so ist aber zum Tippen der Befehle die Tab-Taste immer hilfreich und vervollständigt dann die jeweiligen Argumente nach Bedarf.

Und dann gibts noch manchmal das Problem, dass ich den Rechner herunterfahren oder neu starten will, und gar keine grafische Möglichkeit dazu mehr hab. Oder aber ich bin einfach zu faul meine Finger von der Tastatur zu nehmen um dann mit der Maus nach dem Ausschalt-Button zu suchen. Dann kann das Kommando shutdown verwendet werden. Am besten sieht mensch sich aber mal die zur Verfügung stehenden Optionen an:

$ shutdown --help
Shut down the system.
--help         Show this help
-H --halt      Halt the machine
-P --poweroff  Power-off the machine
-r --reboot    Reboot the machine
-h             Equivalent to --poweroff, overridden by --halt
-k             Don't halt/power-off/reboot, just send warnings
--no-wall      Don't send wall message before halt/power-off/reboot
-c             Cancel a pending shutdown

Ich kann heir also sowohl ausschaulten (Option -h), als auch rebooten (Option -r). Ich kann auch eine Zeit angeben, wann das passieren soll. Standardmäßig wird 1 min verwendet. "now" steht für jetzt gerade. Ich kann sogar eine "wall message" ausgeben - das ist eine Nachricht die bei allen eingeloggeden user*innen angezeigt wird, damit die auch bescheid bekommen, dass das System in einer Minute (oder wann auch immer wir das vorgeben) neu gestartet wird. In der einfachsten Variante aber, wenn ich direkt jetzt ohne weiteres warten neu starten möchte, dann verwende ich (mit root privileges, wenn nicht anders eingestellt):

$ shutdown -r now

Wenn das System in einer Minute runterfahren soll und nicht neu starten dann einfach:

$ shutdown

Wenn das System in 5 Minuten runterfahren soll und eine Nachricht an alle user*innen ausgegeben werden soll, dann:

$ shutdown +5 "Wir gehen dann mal schlafen"

Wenn wir das System um 23:42 neu starten wollen, dann:

$ shutdown -r 23:42 "Und täglich grüßt das Murmeltier"

Die wall message wird dann erst einige Minuten vor dem tatsächlichen shutdown angezeigt. Die man page verrät nichts darüber wann, dafür verrät sie, dass 5 minuten vor dem shutdown auch neue logins disabled werden. Mehr dazu mit "man shutdown"

Ist ein shutdown in Auftrag gegeben, kann er bevor es wirklich so weit ist, auch wieder gecancelled werden:

$ shutdown -c

Ein paar weitere hilfreiche und/oder lustige Sachen zum ausprobieren

Wenn mal schon zu viel Zeug im Terminal steht und eine etwas unfokussiert ist, hilft manchmal ein clear. Damit wird einfach die aktuelle Terminalseite gelöscht und es schaut alles so aus als wär ein frisches Terminal da:

$ clear

Genau genommen wird hier (je nach verwendetem Terminal nichts gelöscht) sondern nur so weit hinuntergescrollt, dass ein leeres Terminal zu sehen ist. Mit den Pg-Up und Pg-Down tasten oder dem Mausrad (je nach Terminal) kann dann trotzdem noch raufgescrollt werden.

Und weil mensch auch im Terminal manchmal eine Pause braucht, kann eins sich bei vorhandener Internetverbindung auch Star Wars im ASCII Modus anschauen. Und zwar wird das einfach per normalem telnet Protokoll übertragen:

$ telnet towel.blinkenlights.nl

Weil mensch ja für die vielen verschiedenen Services im Web und anderswo nicht überall die gleichen Passwörter verwenden sollte und sich ständig Passwörter ausdenken auch nicht lustig ist, gibts dafür auch ein kleines feines Programm (das meist aber erst über "apt install pwgen" nachinstalliert werden muss):

$ pwgen
oo1AhLah phee3Poh shotah6A Yie9xee2 teeNeiB3 aNg6ueth aeNgee4a opha8aeK
aeZ3no8z fah6AePe Chahn3mi ieGh0oox ei9Aizie dem7Eede Iuc1yoh1 zoh0ni8U
vu8Tioh5 ranah9aG Aek8Ies2 iXairuj0 Shiepai9 OoLiep2t uraeN4Ah einahZ3X
eiTha2oh AeQui3ch ehu3Quai en0OngeZ chid4vaX zai7PieG aNg7yohS mii7Sei8
iXi4Uwee Goaj2aey tohph5Ah sie9Ahyo niezoi3H eixaiZ7Z vatai2uW oSei0ifu
hei8NaeY owahJo4o zeeNg4ae ahX5aid2 eohail5U ahreeN9x EiNga3hu owo2Iedu
oashae2O phee9oKo Quu7igh2 aiCheth0 airieN4a aiy1Eiho kee5Ahqu vooXe7Ho
vah5Anee Raeza7Ph aiZo3oiX ui3boNgo eiZu8ush doo6reT8 AhGahki5 aeph3OhH
eilah2Oh Aemah9ve Eerie7nu aiXei9Ni ic1Quah1 Oaheew5u Ap8echee aich6Lai
Shie7wie shahWee5 tudie4Ai FiPieKu6 Ahkei4ai Shahw9ei Ooleeng0 Yeig7ohp
lee0iiTo eeb0Ahch bi8Ahyei Ook2jood Mah3Voh4 ohQuae7u veaBooC9 Ju9ohm6f
Ohghae3e uMiac9ye aeP4iiTu caeYe8qu tooCh5cu wasahw8I thaiSh5i kuNg9he7
xa5gie9L aiQu6Cho mah1UC1O ueKi1qua ohFahx6p eiW3SohJ ieCh2Jae eeGh2ieW
miuyiHi5 ow3TiePh egohKoo5 uQu8fool won7Red2 eesh7Igh chah3Ohz oeC2jome
uoya1WuS faeCio3v aeR7Eiga GooH5ood Poog8eTu nuu4UoK5 Aelahx4Z pa9AiChe
Oos6Reen eur3ua9U eexee8eM Iex1pei9 ooYi3hie Hohtie2i Thaema1W iW6voo6l
iWoze0ho ahwooQu6 ii0Mai9p gao3Peew am4ko7Po Laethee2 pu1yae6P bae3Ecev
Aochee6b gaeh4eGe pheeP5gi eev5hohL kaeZai0v Aipah7Ie Quaoc0Ou ooqu2Loo
Pahy2shu iuYa3eef Zohgh1Sh ooBoor8a aePaig3i iohi6ahB Mo4ai6Ae eeV2caiK
Gie2vie9 Uubah0Ah phei6eeV goh4aeBe eetha6aZ ahlis0Eu Eis4oofa hequ1OhX

Huch, das sind aber viele. Wir wollen aber lieber nur eines haben, dafür mit 16 Zeichen Länge. Das geht auch:

$ pwgen 16 1
cooyiaPahn8Ieviy

Und wenn das jetzt auch noch sicherer gemacht werden soll:

$ pwgen -s 16 1
1a2LnZd1HAqXzjzK

Es geht auch noch sicherer durch die zusätzliche Verwendung von nicht-alphanumerischen Zeichen, und jetzt gleich mit 20 Zeichen Länge, aber wir wollen auch gleich 4 verschiedene Passwörter bekommen. Und dabei soll gleich eines pro Zeile ausgegeben werden:

$ pwgen -s -y 20 4
QpHmyY-02"CGBGip$>zl
amrm0hhS7^>j,&+ae<31
v@PP2:*'gh-B:Q8*6gU^
*Sd=3>9LI94(&\Dh]jtI

Für den Alltagsgebrauch sollte das meiste jetzt ausgeschöpft sein. Viele weitere Optionen zu pwgen finden sich in der man page:

$ man pwgen

Und weil so viele komplizierte Passwörter aber auch irgendwie verwaltet werden wollen - wer merkt sich denn sowas schon? - gibts auch schlaue Passwortmanager. Grafisch ist da z.B. KeePassX gut und verbreitet: https://en.wikipedia.org/wiki/KeePassX

Für die command line gibts aber auch was, nämlich den standard unix password store "pass". Einfach mit "apt install pass" installieren. Eine Anleitung zur Verwendung findet sich hier: https://www.passwordstore.org/

Superpraktisch: PDFs zusammenfügen und Bilder konvertieren

Zum Abschluss wollen wir noch pdfjam und imagemagick vorstellen. Das sind zwei Pakete, die mehrere kleinere Programme mit sich bringen um PDFs bzw. Bilder zu bearbeiten. Auf den meisten Systemen müssen wir diese erst einmal installieren:

$ sudo apt install pdfjam imagemagick

Die darin enthaltenen Programme bieten sehr umfangreiche Möglichkeiten, wir wollen hier nur zwei einfachere und doch sehr praktische Einsatzszenarien vorstellen:

  1. Mehrere PDFs zu einem einzelnen zusammenfügen.
  2. Ein PDF auf ein 2x2 Raster verkleinern
  3. Einzelne Bilder größer oder kleiner skalieren
  4. Einen Ordner voll Bildern auf eine bestimmte Größe skalieren

Um die folgenden Befehle auszuführen brauchen wir auch das Rohmaterial - Katzenbilder und PDFs von langweiligen Ziffern. Diese haben wir unter https://www.diebin.at/workshops/docs/linux-intro-workshop/files hinterlegt. Weil das alles händisch herunterzuladen aber auch mühsam wär, verwenden wir gleich ein anderes Tool, das uns das automagisch erledigt: wget. Unter Umständen musst du das erst per apt installieren, es zahlt sich aber aus das am System zu haben.

wget kann verwendet werden um einzelne Webseiten oder auch ganze Websites herunterzuladen. Ohne Optionen lädt uns wget nur eine einzelne Seite herunter:

wget https://www.diebin.at/workshops/docs/linux-intro-workshop/files

Das bringt uns in dem Fall relativ wenig, weil wir so nun nur im aktuellen Verzeichnis eine Datei files finden, die den HTML-Output, in dem Fall das Directory Listing enthält. Wenn wir aber eine Option -r für rekursives Abrufen verwenden und das Level mit -l 1 beschränken (damit nicht die gesamte diebin.at site heruntergeladen wird) können wir folgendes machen:

wget -r -l 1 https://www.diebin.at/workshops/docs/linux-intro-workshop/files

Nun sollten wir ein Verzeichnis www.diebin.at in unserem aktuellen Verzeichnis vorfinden, indem sich die Folder-Hierarchie der Site widerspiegelt und unsere .jpg und .pdf Dateien im entsprechenden Unterfolder sind:

$ ll www.diebin.at/workshops/docs/linux-intro-workshop/files/
total 1,2M
-rw-rw-r-- 1 jackie jackie  70K Jul  7 17:15 cat01.jpg
-rw-rw-r-- 1 jackie jackie 225K Jul  7 17:15 cat02.jpg
-rw-rw-r-- 1 jackie jackie  97K Jul  7 17:15 cat03.jpg
-rw-rw-r-- 1 jackie jackie 134K Jul  7 17:15 cat04.jpg
-rw-rw-r-- 1 jackie jackie  45K Jul  7 17:15 cat05.jpg
-rw-rw-r-- 1 jackie jackie  95K Jul  7 17:15 cat06.jpg
-rw-rw-r-- 1 jackie jackie 3,6K Jul  7 17:20 index.html?C=D;O=A
-rw-rw-r-- 1 jackie jackie 3,6K Jul  7 17:20 index.html?C=M;O=A
-rw-rw-r-- 1 jackie jackie 3,6K Jul  7 17:20 index.html?C=N;O=D
-rw-rw-r-- 1 jackie jackie 3,6K Jul  7 17:20 index.html?C=S;O=A
-rw-rw-r-- 1 jackie jackie  43K Jul  7 17:15 pdf1.pdf
-rw-rw-r-- 1 jackie jackie  43K Jul  7 17:15 pdf2.pdf
-rw-rw-r-- 1 jackie jackie  43K Jul  7 17:15 pdf3.pdf
-rw-rw-r-- 1 jackie jackie  43K Jul  7 17:15 pdf4.pdf
-rw-rw-r-- 1 jackie jackie  43K Jul  7 17:15 pdf5.pdf
-rw-rw-r-- 1 jackie jackie  43K Jul  7 17:15 pdf6.pdf
-rw-rw-r-- 1 jackie jackie  43K Jul  7 17:15 pdf7.pdf
-rw-rw-r-- 1 jackie jackie  43K Jul  7 17:15 pdf8.pdf

Wechseln wir also mal dort hin:

cd www.diebin.at/workshops/docs/linux-intro-workshop/files

Mit evince können wir einzelne PDFs anschauen:

$ evince pdf1.pdf
$ evince pdf5.pdf

Wenn wir nun alle PDFs zu einem einzigen zusammenfügen wollen brauchen wir nur noch einen simplen pdfjoin-Aufruf zu machen:

$ pdfjoin pdf?.pdf

Wir finden nun eine Datei pdf8-joined.pdf im Folder:

$ ll pdf8-joined.pdf
-rw-rw-r-- 1 jackie jackie 326K Jul  7 17:32 pdf8-joined.pdf
$ evince pdf8-joined.pdf

results matching ""

    No results matching ""