CLI-Teil1-Einführung ins Command Line Interface: Unterschied zwischen den Versionen

Aus revampedia
 
(24 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 
== Vorwort ==
 
== Vorwort ==
!!! Noch in Arbeit und nicht fertig !!!
 
  
Ich habe nach Ostern 2016 bei Revamp-it angefangen und hatte vorher nur ein wenig Kontakt in der Arbeitswelt mit Linux/Unix. Ich werde in mehreren Teilen probieren zuerst auf Anfängerstufe erste Schritte zu machen bis dann hin zum Systemadministrator (sofern ich selber diese Stufe selber auch erreiche).
+
Ich habe nach Ostern 2016 bei Revamp-it angefangen und hatte vorher nur ein wenig Kontakt in der Arbeitswelt mit Linux/Unix. Ich werde in mehreren Teilen probieren zuerst auf Anfängerstufe erste Schritte zu machen bis dann hin zum Systemadministrator (sofern ich selber diese Stufe selber auch erreiche). Ich hatte ursprünglich die Idee alles auf eine Seite zu packen, doch ich durfte feststellen, dass es viel zu lange wird und habe deswegen noch weitere Seiten erstellt.
 
<pre>
 
<pre>
 
Falls noch Fragen offen sind nach dieser Anleitung bitte oben bei "Ansichten" auf "Diskussion" gehen und Feedback hinterlassen, dass ich noch weitere Details hinzufügen kann. jr
 
Falls noch Fragen offen sind nach dieser Anleitung bitte oben bei "Ansichten" auf "Diskussion" gehen und Feedback hinterlassen, dass ich noch weitere Details hinzufügen kann. jr
Zeile 20: Zeile 19:
 
<br />
 
<br />
 
<br />
 
<br />
 +
 
== Verzeichnisstruktur ==
 
== Verzeichnisstruktur ==
 
Wenn wir mit der Befehlszeile anfangen wollen ist es auch notwendig ein wenig über die Verzeichnisstruktur zu erfahren.<br />
 
Wenn wir mit der Befehlszeile anfangen wollen ist es auch notwendig ein wenig über die Verzeichnisstruktur zu erfahren.<br />
Zeile 46: Zeile 46:
 
/lib -> enthält Bibliotheken von Programmen<br />
 
/lib -> enthält Bibliotheken von Programmen<br />
 
/lib/modules -> hier befinden sich die Kernel-Module<br />
 
/lib/modules -> hier befinden sich die Kernel-Module<br />
/opt -> hier kann ein Administrator Software installieren, die nicht im Packetformat der Distribution vorliegt<br />
+
/opt -> hier kann ein Administrator Software installieren, die nicht im Paketformat der Distribution vorliegt<br />
 
/mnt -> Mountpunkt für statische Dateisysteme, zum Beispiel Partitionen von anderen Betriebssystemen oder Network-Shares<br />
 
/mnt -> Mountpunkt für statische Dateisysteme, zum Beispiel Partitionen von anderen Betriebssystemen oder Network-Shares<br />
 
/tmp -> Verzeichnis für temporäre Dateien oder Programme. Wird beim Systemstart aufgeräumt<br />
 
/tmp -> Verzeichnis für temporäre Dateien oder Programme. Wird beim Systemstart aufgeräumt<br />
Zeile 111: Zeile 111:
 
Gruppe3 = Rechte für die anderen<br />
 
Gruppe3 = Rechte für die anderen<br />
 
<br />
 
<br />
Es kommt immer nur eine dieser rwx 3er Gruppen zum Einsatz. Ist man der Inhaber der Datei, so gilt Gruppe1. Ist man Teil der Gruppe, so gilt Gruppe2. Ist man weder der Inhaber, doch Teil der Gruppe, so sagt Gruppe3 aus was man mit der Datei machen darf.<br />
+
Es kommt immer nur eine dieser rwx 3er Gruppen zum Einsatz. Ist man der Inhaber der Datei, so gilt Gruppe1. Ist man Teil der Gruppe, so gilt Gruppe2. Ist man weder der Inhaber, noch Teil der Gruppe, so sagt Gruppe3 aus was man mit der Datei machen darf.<br />
 
<br />
 
<br />
 
Statt einem x wird an einigen Orten auch ein s oder ein t gesetzt.<br />
 
Statt einem x wird an einigen Orten auch ein s oder ein t gesetzt.<br />
 
s steht für setuid/setgid. Eingesetzt wird es bei Programmen wie su, sudo, mount und passwd.<br />
 
s steht für setuid/setgid. Eingesetzt wird es bei Programmen wie su, sudo, mount und passwd.<br />
 
t steht für Sticky-bit und wird auf Verzeichnisse wie /tmp gesetzt. Sofern man nicht der Inhaber des Ordners ist kann man nur Dateien löschen die einem auch selber gehören, da mehrere Benutzer Zugriff auf /tmp haben.<br />
 
t steht für Sticky-bit und wird auf Verzeichnisse wie /tmp gesetzt. Sofern man nicht der Inhaber des Ordners ist kann man nur Dateien löschen die einem auch selber gehören, da mehrere Benutzer Zugriff auf /tmp haben.<br />
 
+
<br />
 +
<br />
 +
<br />
 
===== Rechte ändern über CHMOD =====
 
===== Rechte ändern über CHMOD =====
 
Dieser Befehl dient dazu die Rechte von Dateien oder Verzeichnissen zu ändern.<br />
 
Dieser Befehl dient dazu die Rechte von Dateien oder Verzeichnissen zu ändern.<br />
Zeile 139: Zeile 141:
  
 
[http://www.linuxnix.com/file-types-in-linux/ Hier gibt es mehr dazu zum Nachlesen auf Englisch]
 
[http://www.linuxnix.com/file-types-in-linux/ Hier gibt es mehr dazu zum Nachlesen auf Englisch]
 +
<br />
 +
<br />
 +
<br />
  
 
== Erste Befehle ==
 
== Erste Befehle ==
Zeile 145: Zeile 150:
 
<br />
 
<br />
  
Mit dem folgenden Befehl kriegt man alle interen Befehle:
+
Mit der folgenden Befehlszeile kriegt man alle interen Befehle:
 
  enable -a | cut -d " " -f 2,3
 
  enable -a | cut -d " " -f 2,3
  
Zeile 216: Zeile 221:
 
  help cd
 
  help cd
  
Alle anderen Befehle welche man in Linux nutzt sind externe Befehle. Die externen Befehle befinden sich im Normalfall in den Ordnern /bin, /sbin, /usr/bin/, /usr/sbin/, /usr/local/bin und /usr/local/sbin. ''Falls ich noch weitere Stellen vergessen habe, bitte melden, dass ich diese auch auflisten kann''. Um mehr Informationen zu diesen Befehlen zu erhalten nutzt man den Befehl "man" davor. Man kann zum Beispiel auch den folgenden Befehl eingeben um zusätzliche Informationen zu den Handbüchern (Manuals) zu kriegen:
+
Alle anderen Befehle welche man in Linux nutzt sind externe Befehle. Die externen Befehle befinden sich im Normalfall in den Ordnern /bin, /sbin, /usr/bin/, /usr/sbin/, /usr/local/bin und /usr/local/sbin. Um mehr Informationen zu diesen Befehlen zu erhalten nutzt man den Befehl "man" davor. Man kann zum Beispiel auch den folgenden Befehl eingeben um zusätzliche Informationen zu den Handbüchern (Manuals) zu kriegen:
 
  man man
 
  man man
  
Um eine "man-Page" zu verlassen muss man "q" drücken. Man kann auch mit den Pfeilen darin hoch und runter scrollen sofern mehr Text ist als direkt angezeigt werden kann. Für mehr allgemeine Informationen zu Manpages kann man [https://de.wikipedia.org/wiki/Manpage diesem Link] folgen. Ich hoffe diese Details reichen aus um jetzt in die Befehle einsteigen zu können.
+
Um eine "man-Page" zu verlassen muss man "q" drücken. Mit "h" kann man die Hilfe von less aufrufen innerhalb einer "man-Page", da less genutzt wird um die "man-Pages" anzuzeigen. Man kann auch mit den Pfeilen darin hoch und runter scrollen sofern mehr Text ist als direkt angezeigt werden kann. Für mehr allgemeine Informationen zu Manpages kann man [https://de.wikipedia.org/wiki/Manpage diesem Link] folgen. Ich hoffe diese Details reichen aus um jetzt in die Befehle einsteigen zu können.
 
+
<br />
 +
<br />
 +
<br />
 
=== pwd - Print Working Directory ===
 
=== pwd - Print Working Directory ===
  
Zeile 230: Zeile 237:
 
  pwd -P
 
  pwd -P
 
Mit dem Parameter -P kann man den physichen Pfad anzeigen. Bei vielen Verzeichnissen wird der logische Pfad und der physiche Pfad der gleiche sein. Falls man sich einen symbolischen Link zwischen zwei Verzeichnissen macht, kann sich der logische und der physiche Pfad unterscheiden. Ich habe [http://www.tecmint.com/pwd-command-examples/ hier] ein gutes Beispiel dazu gefunden.
 
Mit dem Parameter -P kann man den physichen Pfad anzeigen. Bei vielen Verzeichnissen wird der logische Pfad und der physiche Pfad der gleiche sein. Falls man sich einen symbolischen Link zwischen zwei Verzeichnissen macht, kann sich der logische und der physiche Pfad unterscheiden. Ich habe [http://www.tecmint.com/pwd-command-examples/ hier] ein gutes Beispiel dazu gefunden.
 
+
<br />
 +
<br />
 +
<br />
 
=== ls - Verzeichnisinhalt auflisten  ===
 
=== ls - Verzeichnisinhalt auflisten  ===
  
Zeile 258: Zeile 267:
 
Es ist nicht zwingend erforderlich, dass ich mich in dem Ordner befinde, den ich anschauen möchte. ich kann nach dem Befehl ls mit den gewünschten Parametern auch noch einen Pfad angeben. Im Fall der Bilder von oben ist der Pfad /home/jruettimann/beispiel/ oder ~/beispiel/. Beide Varianten zeigen den selben Ort an.<br />
 
Es ist nicht zwingend erforderlich, dass ich mich in dem Ordner befinde, den ich anschauen möchte. ich kann nach dem Befehl ls mit den gewünschten Parametern auch noch einen Pfad angeben. Im Fall der Bilder von oben ist der Pfad /home/jruettimann/beispiel/ oder ~/beispiel/. Beide Varianten zeigen den selben Ort an.<br />
 
Gross- und Kleinschreiben ist in Linux relevant wichtig. Wie man in den Bildern sehen kann habe ich einen Ordner musik und einen Ordner Musik. Dabei handelt es sich um zwei verschiedene Ordner. Sie unterscheiden sich wohl nur dadurch, dass das "m" im einen Fall gross geschrieben ist und im anderen Fall klein geschrieben, doch das reicht aus, dass es in Linux zwei verschiedene Ordner sind.
 
Gross- und Kleinschreiben ist in Linux relevant wichtig. Wie man in den Bildern sehen kann habe ich einen Ordner musik und einen Ordner Musik. Dabei handelt es sich um zwei verschiedene Ordner. Sie unterscheiden sich wohl nur dadurch, dass das "m" im einen Fall gross geschrieben ist und im anderen Fall klein geschrieben, doch das reicht aus, dass es in Linux zwei verschiedene Ordner sind.
 
+
<br />
 +
<br />
 +
<br />
 
=== cd - Change Directory ===
 
=== cd - Change Directory ===
  
Zeile 275: Zeile 286:
 
Wie bereits erwähnt kann man einen Ordner zurückgehen, wenn man das folgende eingibt:
 
Wie bereits erwähnt kann man einen Ordner zurückgehen, wenn man das folgende eingibt:
 
  cd ..
 
  cd ..
Falls man sich bei ls alles anzeigen lässt sieht man auch noch den Eintrag ".". Damit ist der aktuelle Ordner gemeint. Es macht also nicht sehr viel Sinn in den aktuellen Ordner zu wechseln.
+
Falls man sich bei ls alles anzeigen lässt sieht man auch noch den Eintrag ".". Damit ist der aktuelle Ordner gemeint. Es macht also nicht sehr viel Sinn in den aktuellen Ordner zu wechseln.<br />
 +
<br />
 +
Wenn man nur "cd" eingibt landet man ebenfalls im home-Verzeichnis vom aktuellen Benutzer. Es ist also das gleiche wie wenn man "cd ~" eingibt.<br />
 +
<br />
 +
<br />
 +
<br />
  
 
=== type  ===
 
=== type  ===
Zeile 288: Zeile 304:
 
<br>
 
<br>
 
Das Resultat ist die bereits bekannte Zeile und die zweite Zeile gibt an wo sich das Programm befindet im System.
 
Das Resultat ist die bereits bekannte Zeile und die zweite Zeile gibt an wo sich das Programm befindet im System.
 
+
<br />
 +
<br />
 +
<br />
 
=== which  ===
 
=== which  ===
  
 
Unter Linux gibt es oft nicht nur einen Weg um etwas zu machen. Interessiert mich also nur wo sich ein Befehl auf dem System befindet, so kann man dies über den Befehl "which". Übersetzen wir das Wort in die deutsche Sprache, so heisst es "welcher", "welche" oder "welches".<br />
 
Unter Linux gibt es oft nicht nur einen Weg um etwas zu machen. Interessiert mich also nur wo sich ein Befehl auf dem System befindet, so kann man dies über den Befehl "which". Übersetzen wir das Wort in die deutsche Sprache, so heisst es "welcher", "welche" oder "welches".<br />
 
Dieser Befehl funktioniert nur für externe Befehle. Das Programm ist nicht in der Lage Informationen zu interenen Befehlen zu liefern.
 
Dieser Befehl funktioniert nur für externe Befehle. Das Programm ist nicht in der Lage Informationen zu interenen Befehlen zu liefern.
 
+
<br />
 +
<br />
 +
<br />
 
=== apropos  ===
 
=== apropos  ===
  
Zeile 307: Zeile 327:
 
<br>
 
<br>
 
Das andere im zweiten Bild ist was es für Möglichkeiten gibt zu Partitionen. Wenn man manuell die Partitionen einer Festplatte definiert ist eines oder mehrere dieser Programme notwendig dies zu machen. Doch mehr dazu zu einem anderen Zeitpunkt.
 
Das andere im zweiten Bild ist was es für Möglichkeiten gibt zu Partitionen. Wenn man manuell die Partitionen einer Festplatte definiert ist eines oder mehrere dieser Programme notwendig dies zu machen. Doch mehr dazu zu einem anderen Zeitpunkt.
 
+
<br />
=== whatis ===
+
<br />
 +
<br />
 +
=== whatis - Kurzbeschreibung zu einem Befehl ===
  
 
Mit "whatis" erhält man eine kurze Beschreibung zu einem Befehl. Wieder ist dies nur für die externen Befehle und nicht für die interen. Alternativ kann man auch "man -f" eingeben. Es produziert das selbe Resultat.<br />
 
Mit "whatis" erhält man eine kurze Beschreibung zu einem Befehl. Wieder ist dies nur für die externen Befehle und nicht für die interen. Alternativ kann man auch "man -f" eingeben. Es produziert das selbe Resultat.<br />
Zeile 320: Zeile 342:
 
[[Datei:Whatis2.png]]
 
[[Datei:Whatis2.png]]
 
<br>
 
<br>
 
+
<br />
 +
<br />
 +
<br />
 
=== cp - Kopieren ===
 
=== cp - Kopieren ===
  
Zeile 339: Zeile 363:
 
[[Datei:Cp-nachher.png]]
 
[[Datei:Cp-nachher.png]]
 
<br>
 
<br>
 
+
<br />
 +
<br />
 +
<br />
 
=== mv - verschieben  ===
 
=== mv - verschieben  ===
  
Zeile 347: Zeile 373:
 
<br>
 
<br>
 
[[Datei:Mv.png]]
 
[[Datei:Mv.png]]
 
+
<br />
 +
<br />
 +
<br />
 
=== ln - Link erzeugen ===
 
=== ln - Link erzeugen ===
  
Zeile 363: Zeile 391:
 
<br>
 
<br>
 
Es gibt unter Linux jedoch auch noch [http://askubuntu.com/questions/226063/what-are-some-typical-uses-of-hard-links "hard links"]. Ein "hard link" ist jedoch nicht wie eine Verknüpfung sondern ist mehr dazu da um eine Datei an zwei Orten zu haben. So kann man die Datei am einen Ort löschen und hat sie trotzdem noch immer am anderen Ort. Dies ist möglich, weil es auf die gleiche [https://de.wikipedia.org/wiki/Inode Inode] verweist.<br />
 
Es gibt unter Linux jedoch auch noch [http://askubuntu.com/questions/226063/what-are-some-typical-uses-of-hard-links "hard links"]. Ein "hard link" ist jedoch nicht wie eine Verknüpfung sondern ist mehr dazu da um eine Datei an zwei Orten zu haben. So kann man die Datei am einen Ort löschen und hat sie trotzdem noch immer am anderen Ort. Dies ist möglich, weil es auf die gleiche [https://de.wikipedia.org/wiki/Inode Inode] verweist.<br />
<br>
+
[http://askubuntu.com/questions/210741/why-are-hard-links-not-allowed-for-directories Hier] [http://unix.stackexchange.com/questions/22394/why-are-hard-links-to-directories-not-allowed-in-unix-linux , hier] [https://bbs.archlinux.org/viewtopic.php?id=176127 oder hier] findet man noch eine Antwort warum Ordner über einen Hardlink zu verknüpfen nicht erlaubt ist. <br>
 
Als Beispiel dazu habe ich die Datei "beispiel.txt" wieder umbenannt und den symbolischen Link gelöscht. Anschliessend habe ich einen "hard link" erzeugt und die Quelle gelöscht. Der "hard link" kann immer noch verwendet werden nachdem ich die Quelle gelöscht habe.<br />
 
Als Beispiel dazu habe ich die Datei "beispiel.txt" wieder umbenannt und den symbolischen Link gelöscht. Anschliessend habe ich einen "hard link" erzeugt und die Quelle gelöscht. Der "hard link" kann immer noch verwendet werden nachdem ich die Quelle gelöscht habe.<br />
 
<br>
 
<br>
 
[[Datei:Hardlink.png]]
 
[[Datei:Hardlink.png]]
 
+
<br />
 +
<br />
 +
<br />
 
=== mkdir - Verzeichnis erstellen ===
 
=== mkdir - Verzeichnis erstellen ===
  
Zeile 375: Zeile 405:
 
<br>
 
<br>
 
[[Datei:Mkdir.png]]
 
[[Datei:Mkdir.png]]
 
+
<br />
 +
<br />
 +
<br />
 
=== rmdir - Verzeichnis entfernen ===
 
=== rmdir - Verzeichnis entfernen ===
  
Zeile 389: Zeile 421:
 
<br>
 
<br>
 
Die eine Möglichkeit wäre jetzt in den Ordner zu gehen und die Dateien darin zu löschen oder ein anderer Weg ist mit dem nächsten Befehl.
 
Die eine Möglichkeit wäre jetzt in den Ordner zu gehen und die Dateien darin zu löschen oder ein anderer Weg ist mit dem nächsten Befehl.
 +
<br />
 +
<br />
 +
<br />
 +
=== rm - remove oder entfernen ===
  
=== rm ===
+
Wie der Titel sagt ist dieser Befehl zum entfernen von "Dateien". Ich habe die "" gesetzt, weil in Linux [https://de.wikipedia.org/wiki/Everything_is_a_file alles eine Datei ist]. Im ersten Beispiel werde ich eine Datei löschen. Es gibt die manpage die man über "man rm" aufruft oder den Parameter für mehr Details mit "rm --help".<br />
 
+
<br>
 
+
[[Datei:Rm-datei.png]]
 +
<br>
 +
<br>
 +
Wie bereits bei "rmdir" angedeutet kann man mit dem Befehl "rm" auch Ordner löschen. Im folgenden Beispiel zeige ich dies auf. Es funktioniert jedoch nicht ohne den richtigen Parameter dazu zu setzen.<br />
 +
<pre>
 +
  -r, -R, --recursive    Inhalte von Verzeichnissen rekursiv entfernen
 +
</pre>
 +
<br>
 +
[[Datei:Rm-ordner.png]]
 +
<br>
 +
<br>
 +
Es ist ratsam nicht wahllos im System Ordner zu löschen, wenn man als root eingeloggt ist. Als root hat man alle Rechte und falls man dann den falschen Ordner auf diese weise löscht kann man das ganze System kaputt machen.
 +
<br />
 +
<br />
 +
<br />
 
=== touch  ===
 
=== touch  ===
  
=== ps ===
+
Mit dem Befehl "touch" aktualisiert man die die Zeit wann zuletst auf die Datei zugegriffen und geändert wurde. Es gibt eine man-Page zum Befehl und man kann "touch --help" nutzen.<br />
 +
Im ersten Beispeil sieht man wie ich die Zeit bei der Datei "faa" aktualisiere.<br />
 +
<br>
 +
[[Datei:Touch1.png]]
 +
<br>
 +
<br>
 +
Zudem kann man eine leere Datei erstellen, wenn diese noch nicht existiert.<br />
 +
<br>
 +
[[Datei:Touch2.png]]
 +
<br>
 +
<br>
 +
Da es die Datei "fee" noch nicht gibt, wurde sie durch den Befehl "touch" erstellt. Da die Grösse von all diesen Dateien im Ordner 0 ist, heisst das, dass die Dateien leer sind und alle mal über touch erstellt wurden von mir.
 +
<br />
 +
<br />
 +
<br />
 +
=== Prozesse, CPU Auslastung, Arbeitsspeicherauslastung ===
 +
==== ps ====
  
=== top  ===
+
Mit dem Befehl "ps" kann man sehen was aktuell für Prozesse am laufen sind. Da es sich um einen externen Befehl handelt, kann man mit "man ps" die Man-Page dazu anschauen. Meistens wird man diesen Befehl mit zusätzlichen Parametern ausführen, dass man alle Prozesse sieht. Dann gibt man "ps -aux" ein. Jedoch wird man dann eine lange oder sehr lange Liste bekommen. Um diese Liste einzugrenzen nach was man genau sucht, kann man zum Beispiel den Befehl "grep" nutzen. Mehr Details zu grep werden in [http://wiki.revamp-it.ch/index.php?title=CLI-Teil2-Dateien_betrachten_und_editieren#Dateien_betrachten_und_editieren einem anderen Teil kommen].<br />
 +
<br>
 +
[[Datei:Ps_postfix.png]]
 +
<br>
 +
<br>
 +
Mein gewähltes Beispiel macht vermutlich noch nicht zuviel Sinn. Bei Postfix handelt es sich um eine Komponente von einem Mailserver. Ich wollte ein Beispiel wählen, das nicht mehr als eine Seite liefert, selbst mit Einschränkung durch grep.
 +
<br />
 +
<br />
 +
<br />
  
=== htop  ===
+
==== top ====
  
 +
Mit dem Programm "top" kann man die Prozesse anzeigen und zudem noch sehen wie stark der Prozessor und Arbeitsspeicher ausgelastet sind. <br />
 +
<br>
 +
[[Datei:Top.png|500px]]
 +
<br />
 +
<br />
 +
<br />
 +
==== htop  ====
  
 +
Falls man die top-Anzeige noch mit Farben und "graphischen" Anzeigen mag, kann man auch das Programm htop verwenden. Es ist standardmässig noch nicht installiert, dass man es selber noch installieren muss. Wie man ein neues Programm installiert lernen wir später auf dieser Seite.<br />
 +
<br>
 +
[[Datei:Htop.png|500px]]
 +
<br />
 +
<br />
 +
<br />
 +
=== sudo - Als anderer Benutzer einen Befehl ausführen  ===
  
=== apt ===
+
Um den Befehl "sudo" zu erklären muss ich wohl erst noch den Befehl "su" ein wenig erklären. In der man-Page von "su" steht als Titel das folgende:
 +
  su - change user ID or become superuser
  
== Dateien betrachten und editieren ==
+
Zum einen kann man also den Benutzer welchseln (Substitute User) oder "superuser" werden. Der Benutzer "root" ist dieser "superuser" unter Linux, da "root" alle Rechte hat.<br />
 +
<br />
 +
Somit wenn man der englischen Sprache mächtig ist kann man es sich so merken was "sudo" macht: SuperUserDo. Es ist nicht korrekt, wenn man den Benutzer wechselt, doch für die Anfänge im CLI wird diese kleine Brücke helfen. Man sagt somit einfach, dass man diesen Befehl als "superuser" ausführen will.<br />
 +
Das Beispiel ist gleich auch sinnvoll für den nächsten Punkt wo wir den Paketmanager von Debian kennenlernen.<br />
  
=== cat  ===
+
[[Datei:Sudo.png]]
  
=== less ===
+
<br />
 +
<br />
 +
<br />
 +
=== apt - Paketmanager ===
  
=== more  ===
+
Um ein neues Programm unter Linux in der Befehlszeile zu installieren braucht man einen Paketmanager. Im Fall von Debian heisst dieser [https://en.wikipedia.org/wiki/Advanced_Packaging_Tool "apt"] oder auf älteren Systemen "apt-get". Auf dem [https://wiki.archlinux.org/index.php/Pacman/Rosetta ArchWiki - Paketmanager Befehle im Vergleich] findet man eine Liste wie die Befehle in den unterschiedlichen Paketmanagern ausgeführt werden.<br />
 +
Im Hintergrund von apt wird das Programm [https://en.wikipedia.org/wiki/Dpkg "dpkg"] ausgeführt. Jedoch ist apt in der Lage Abhängigkeiten von verschiedenen Packeten aufzulösen, dass ein gewünschtes Programm anschliessend auch gleich funktioniert und nicht Fehler erzeugt, wenn man es probiert zu starten. Dadurch kann es vorkommen, dass man "nur" ein Programm installieren will und da dieses diverse andere Programme braucht um zu funktionieren hat man dann eine grosse Liste von Paketen die installiert werden.
  
=== nano ===
+
  sudo apt update              -> Aktualisiert die Liste der verfügbaren Pakete und meldet am Schluss noch für wieviele bereits installierte Pakete
 
+
                                  eine neuere Version verfügbar ist
=== vim ===
+
  sudo apt upgrade              -> Installiert die neusten Versionen der bereits installierten Pakete
 
+
sudo apt dist-upgrade        -> Wenn eine neuere Version von Debian verfügbar ist kann man mit diesem Befehl die neuere Version installieren
== Hardwaredetails ==
+
  apt search "Paketname"        -> Sucht nach Paketen, welche den Suchbegriff enthalten
 
+
  sudo apt install "Paketname" -> Installiert das eingegebe Paket
http://www.binarytides.com/linux-commands-hardware-info/
+
  sudo apt remove "Paketname"  -> Entfernt ein Paket. Konfigurationsdateien bleiben jedoch erhalten
 
+
  sudo apt purge "Paketname"    -> Entfernt ein Paket und auch die Konfigurationsdateien
=== lsblk ===
 
 
 
=== lscpu ===
 
 
 
=== lspci ===
 
 
 
=== lsusb ===
 
 
 
=== df ===
 
 
 
=== mount  ===
 
 
 
=== free  ===
 
 
 
=== hwinfo  ===
 
 
 
=== dmidecode  ===
 
 
 
=== /proc/  ===
 
  
 +
[[Datei:Aptinstall.png]]
 +
<br />
 +
<br />
 +
<br />
 
[[Kategorie:Schulungen_/_Workshops]]
 
[[Kategorie:Schulungen_/_Workshops]]

Aktuelle Version vom 13. Februar 2017, 11:04 Uhr

Vorwort

Ich habe nach Ostern 2016 bei Revamp-it angefangen und hatte vorher nur ein wenig Kontakt in der Arbeitswelt mit Linux/Unix. Ich werde in mehreren Teilen probieren zuerst auf Anfängerstufe erste Schritte zu machen bis dann hin zum Systemadministrator (sofern ich selber diese Stufe selber auch erreiche). Ich hatte ursprünglich die Idee alles auf eine Seite zu packen, doch ich durfte feststellen, dass es viel zu lange wird und habe deswegen noch weitere Seiten erstellt.

Falls noch Fragen offen sind nach dieser Anleitung bitte oben bei "Ansichten" auf "Diskussion" gehen und Feedback hinterlassen, dass ich noch weitere Details hinzufügen kann. jr

Ich probiere mich hier auf das wichtigste zu Beschränken. Falls einen also die Geschichte von Linux interessiert folgt man am besten den eingebauten Links. Wir wollen nicht die grafische Oberfläche nutzen sondern das CLI besser kennenlernen. Für gewisse Dinge ist diese zwingend erforderlich oder einfach ein weiterer Weg Dinge zu machen.
In meiner Jugend habe ich noch ein wenig Erfahrungen mit MS-DOS gemacht und aus meiner Sicht es es sehr hilfreich, wenn man Englischkenntnisse besitzt. Bei vielem (oder vielleicht sogar alles) ist die englische Sprache die Grundlage für Abkürzungen der Befehle.

Was ich wohl kurz ansprechen sollte ist, dass es verschiedene "Familien" gibt in Linux. Die Hautgruppen sind Debian, Slackware und Red Hat. Das folgende Bild ist veraltet, doch zeigt dies ein wenig auf. Das Bild hatte ich hier gefunden.

Die Hauptfamilien in Linux
In unseren internen Schulungen arbeiten wir mit Debian. Von Debian gibt es viele Kinder. Das nächste Bild ist auch veraltet und soll lediglich zeigen, dass verschiedene Menschen verschiedene Meinungen haben und darum die Programme die standardmässig dabei sind sich unterscheiden. Quelle vom Bild ist hier

Die Kinder von Debian


Verzeichnisstruktur

Wenn wir mit der Befehlszeile anfangen wollen ist es auch notwendig ein wenig über die Verzeichnisstruktur zu erfahren.
Im Netz habe ich ein passendes Bild hier gefunden. Es ist nicht die gesammte Verzeichnisstruktur sondern nur ein Ausschnitt davon. Zu Beginn wird es noch nicht zuviel Sinn machen. Ich bin selber auch noch nicht soweit, dass was unter dem Bild folgt viel mehr ist als Notizen die ich mir zu einem Buch oder Video gemacht habe. Auf Englisch kann man unter dieser Seite noch viel mehr über die "Filesystem Hierarchy" erfahren. Die deutschsprachige Seite verweist auch dahin.

Ausschnitt eines Systems

Hier die wichtigsten Verzeichnisse auf Anfängerstufe. Wenn man den Text ausklappt gibt es noch weitere Erklärungen zu Verzeichnissen.
/ -> enthält das Wurzelverzeichnis (root directory)
/boot -> hier ist was zum aufstarten der Maschine benötigt wird. Der Kernel, die Initial Ramdisk (initrd.....) und der Bootloader GRUB
/home -> enthält die persönlichen Daten vom User. Hier findet man auch die Konfiguration von einigen Anwendungen, doch meist in versteckten Dateien (Datei fängt mit . an)
/root -> das "home" Verzeichnis vom Benutzer root
/media -> Mountpunkte für Wechseldatenträger wie Floppy, CD/DVD oder USB

Hier noch die restlichen Notizen zu Verzeichnissen:
/bin und /sbin -> hier liegen ausführbare Programme (binaries)
/usr -> enthält Systemprogramme, Dokumentationen usw.
/usr/bin -> Benutzerkommandos
/usr/lib -> Bibliotheken
/usr/share/doc -> Dokumentationen
/usr/local -> sollten Daten und Programme abgelegt werden die nicht von der Distribution direkt installiert wurden
/etc -> enthält systemweite Konfigurationsdateien
/dev -> hier sind die Gerätedateien (devices) also HD, CD/DVD USB usw.
/lib -> enthält Bibliotheken von Programmen
/lib/modules -> hier befinden sich die Kernel-Module
/opt -> hier kann ein Administrator Software installieren, die nicht im Paketformat der Distribution vorliegt
/mnt -> Mountpunkt für statische Dateisysteme, zum Beispiel Partitionen von anderen Betriebssystemen oder Network-Shares
/tmp -> Verzeichnis für temporäre Dateien oder Programme. Wird beim Systemstart aufgeräumt
/var -> bietet eine "Zwischenablage" unter anderem für Druckaufträge, Logdateien und Mails.
/proc -> Ein virtuelles Dateisystem, das eine Schnittstelle zum Kernel darstellt. Liefert unter anderem Informationen über laufende Prozesse (jeder Prozess hat ein Unterverzeichnis und Prozess-ID)
/sys -> ein virtuelles Dateisystem, das eine generische Schnittstelle zu einzelnen Treibern anbietet

Wir sehen hier also dass / auch bereits ein Verzeichnis ist und alle weiteren Verzeichnisse darauf aufbauen. Ich habe mir an meinem Arbeitsplatz ein paar Ordner erstellt um dies ein wenig besser aufzuzeigen. Hier lernen wir noch ein paar weitere Zeichen kennen, die in Linux etwas bedeuten.

Ordnerbeispiel1.png

Wie man bei der letzten Zeile sieht befinde ich mich aktuell im Ordner /home/jruettimann/beispiel/. Mein "Home"-Verzeichnis ist also /home/jruettimann/. Dies kann ebenfalls mit ~ dargestellt werden wie man in hellblauer Schrift (~/beispiel) auf den Zeilen sehen kann. Über den Befehl "ls" kann ich den Inhalt eines Verzeichnis ansehen. Mit " -la" sage ich zum einen, dass ich eine lange Auflistung wünsche (also mit mehr Details) und zum anderen, dass ich alles angezeigt haben möchte (Also auch versteckte Dateien).
Die beiden ersten Zeilen der Auflistung sind mit . beziehungsweise .. beschriftet. Die Bedeutung von . ist das aktuelle Verzeichnis und .. steht für das Verzeichnis darüber.

Hier folgen noch weitere Informationen zur langen Auflistung vom Verzeichnisinhalt:

Ordnerbeispiel2.png

Hier habe ich ein gutes Beispiel für die Erklärung gefunden, welches ich übersetzt habe:

 +-Berechtigungen für den Inhaber
      |
      |     +-Berechtigungen für andere
      |     |
      |     |   +-Anzahl der harten Links
      |     |   |
      |     |   |                          +-Grösse    +-Letzte Änderung mit Datum und Zeit
     _|_   _|_  |            _             |__ ________|_______
    drwxr-xr-x  2 jruettimann jruettimann 4096 Dez  6 11:32 videos
        ___      _____ ____                       _____
         |            |           |                           |
         |            |           |                           +-Name der Datei oder des Verzeichnis
         |            |           |
         |            |           +-Gruppe auf welche die Gruppenberechtigungen angewendet werden
         |            |
         |            +-Inhaber der Datei
         |
         +-Berechtigungen für Mitglieder der Gruppe

Mehr Infos zu den Rechten

Dies sind die Möglichen Optionen bei dem ersten Zeichen dieser Reihe
d = Directory = Verzeichnis
l = (klein L) symbolic Link
b = block file
c = character device file
p = pile file oder named pipe file
s = socket file

Dies sind die Möglichkeiten bei den drei Gruppen welche ich rot , blau , gelb (gelb) umrahmt habe
r = Read = Leserecht
w = Write = Schreibrecht
x = Execute = Ausführen

Da in meinem Bild aktuell nur Verzeichnisse angezeigt werden ist es immer das Format
d|Gruppe1|Gruppe2|Gruppe3

Zur Wiederholung vom Erklärungstext von oben:
Gruppe1 = Rechte für den Datei-Inhaber
Gruppe2 = Rechte für die Gruppe
Gruppe3 = Rechte für die anderen

Es kommt immer nur eine dieser rwx 3er Gruppen zum Einsatz. Ist man der Inhaber der Datei, so gilt Gruppe1. Ist man Teil der Gruppe, so gilt Gruppe2. Ist man weder der Inhaber, noch Teil der Gruppe, so sagt Gruppe3 aus was man mit der Datei machen darf.

Statt einem x wird an einigen Orten auch ein s oder ein t gesetzt.
s steht für setuid/setgid. Eingesetzt wird es bei Programmen wie su, sudo, mount und passwd.
t steht für Sticky-bit und wird auf Verzeichnisse wie /tmp gesetzt. Sofern man nicht der Inhaber des Ordners ist kann man nur Dateien löschen die einem auch selber gehören, da mehrere Benutzer Zugriff auf /tmp haben.



Rechte ändern über CHMOD

Dieser Befehl dient dazu die Rechte von Dateien oder Verzeichnissen zu ändern.
Zum einen kann man sagen welche der drei Gruppen man ändern möchte über u(user), g (group) und o (other) und über + oder - Rechte hinzufügen oder entfernen. Also wie man im ls -l gesehen hat gibt es hier r (read), w (write) und x (execute).

Alternativ kann man dies auch über eine dreistellige Zahl darstellen. Für jede Gruppe muss man sich zusammenzählen welche Rechte man geben will.
4 = Read
2 = Write
1 = Execute
Setzt man zum Beispiel 777 so haben alle drei Gruppen die Rechte zum Lesen, Schreiben sowie ausführen. Dies sollte man nur in wenigen Fällen setzen, weil sonst jeder Person die Zugriff auf die Maschine hat diese ändern oder ausführen darf.
Sinnvoller wäre stattdessen für eine ausführbare Datei 751 zu setzen und für etwas das man nicht ausführen kann 640.

Es gibt auch noch eine Variante wo man bei chmod eine 4-stellige Zahl eingibt. Doch dazu weiss ich selber nur was ich mir als Notiz aufgeschrieben habe und ist wohl auf Anfängerstufe nicht notwendig

Hat man bei chmod eine 4-stellige Zahl, so ist dies um die Spezial-Flags zu setzen
4 = s-bit für Inhaber
2 = s-bit für Gruppe
1 = t-bit = Sticky-bit

Hier gibt es mehr dazu zum Nachlesen auf Englisch


Erste Befehle

Zu Anfang müssen wir noch lernen, dass es interne Befehle gibt und externe Befehle. Die internen Befehle sind Teil des Kernels und werden automatisch geladen, wenn man den Computer startet. Externe Befehle haben ihren eigenen Prozess, wenn sie ausgeführt werden und sind meistens in /bin untergebracht. Über $PATH kann man sehen welche Ordner für Programme vorgemerkt sind und welche der Computer dann direkt ausführen kann. Ist der Pfad zum Programm nicht bekannt muss man den ganzen Pfad angeben um das Programm auszuführen oder die $PATH Variable anpassen. Quelle

Mit der folgenden Befehlszeile kriegt man alle interen Befehle:

enable -a | cut -d " " -f 2,3

Wenn man den Befehl ausführt listet es direkt die folgenden Befehle auf:

.
:
[
alias
bg
bind
break
builtin
caller
cd
command
compgen
complete
compopt
continue
declare
dirs
disown
echo
enable
eval
exec
exit
export
false
fc
fg
getopts
hash
help
history
jobs
kill
let
local
logout
mapfile
popd
printf
pushd
pwd
read
readarray
readonly
return
set
shift
shopt
source
suspend
test
times
trap
true
type
typeset
ulimit
umask
unalias
unset
wait

Um mehr Informationen zu all diesen internen Befehlen zu kriegen gibt man davor "help" ein. Um also zum Beispiel mehr Infos zu dem Befehl "cd" zu erhalten gibt man auf der Befehlszeile das folgende ein:

help cd

Alle anderen Befehle welche man in Linux nutzt sind externe Befehle. Die externen Befehle befinden sich im Normalfall in den Ordnern /bin, /sbin, /usr/bin/, /usr/sbin/, /usr/local/bin und /usr/local/sbin. Um mehr Informationen zu diesen Befehlen zu erhalten nutzt man den Befehl "man" davor. Man kann zum Beispiel auch den folgenden Befehl eingeben um zusätzliche Informationen zu den Handbüchern (Manuals) zu kriegen:

man man

Um eine "man-Page" zu verlassen muss man "q" drücken. Mit "h" kann man die Hilfe von less aufrufen innerhalb einer "man-Page", da less genutzt wird um die "man-Pages" anzuzeigen. Man kann auch mit den Pfeilen darin hoch und runter scrollen sofern mehr Text ist als direkt angezeigt werden kann. Für mehr allgemeine Informationen zu Manpages kann man diesem Link folgen. Ich hoffe diese Details reichen aus um jetzt in die Befehle einsteigen zu können.


pwd - Print Working Directory

Für Leute die der englischen Sprache nicht mächtig sind, ist die Übersetzung sinngemäss "aktuelles Verzeichnis". Es kann hilfreich sein sich zu orientieren wo man gerade befindet. Es reicht also völlig aus auf der Befehlszeile einfach pwd einzugeben.

pwd -L

Mit dem zusätzlichen Parameter -L kann man sich den logischen Pfad anzeigen lassen. Dies ist was auch bei pwd angezeigt wird.

pwd -P

Mit dem Parameter -P kann man den physichen Pfad anzeigen. Bei vielen Verzeichnissen wird der logische Pfad und der physiche Pfad der gleiche sein. Falls man sich einen symbolischen Link zwischen zwei Verzeichnissen macht, kann sich der logische und der physiche Pfad unterscheiden. Ich habe hier ein gutes Beispiel dazu gefunden.


ls - Verzeichnisinhalt auflisten

Der Befehl dient dazu den Inhalt von einem Ordner anzuzeigen. Ich habe einen Ordner beispiel erstellt und darin einige Ordner erstellt. Ohne weitere Parameter sieht das dann so aus:
Ls.png

Möchte man mehr Details zu den einzelnen Dateien sehen, so macht man dies mit "ls -l" in der Befehlszeile
Lsl.png

Falls man auch versteckte Dateien sehen möchte (versteckte Dateien beginnen mit einem Punkt)
Lsa.png

Will man eine ausführliche Anzeige mit den versteckten Dateien, so kann man die Parameter -a und -l kombinieren zu -la oder -al
Lsla.png

Weitere mögliche Parameter kann man über die manpage kriegen. Also auf der Befehlszeile folgendes eingeben:

man ls


Es ist nicht zwingend erforderlich, dass ich mich in dem Ordner befinde, den ich anschauen möchte. ich kann nach dem Befehl ls mit den gewünschten Parametern auch noch einen Pfad angeben. Im Fall der Bilder von oben ist der Pfad /home/jruettimann/beispiel/ oder ~/beispiel/. Beide Varianten zeigen den selben Ort an.
Gross- und Kleinschreiben ist in Linux relevant wichtig. Wie man in den Bildern sehen kann habe ich einen Ordner musik und einen Ordner Musik. Dabei handelt es sich um zwei verschiedene Ordner. Sie unterscheiden sich wohl nur dadurch, dass das "m" im einen Fall gross geschrieben ist und im anderen Fall klein geschrieben, doch das reicht aus, dass es in Linux zwei verschiedene Ordner sind.


cd - Change Directory

Falls man früher mal DOS genutzt hat oder in neueren Versionen von Windows cmd ist man vermutlich schon mit dem Befehl cd vertraut und dass man damit in einen anderen Ordner wechseln kann. In Linux ist der Befehl jedoch leicht anders zu nutzen. So hatte ich in Erinnerung, dass ich in den darübergeordneten Ordner mit "cd.." komme. Um dies in Linux zu machen muss ich jedoch "cd .." eingeben.
Da es sich um einen internen Befehl handelt bei cd kriegt man über "help cd" noch ein paar zusätzliche Informationen.
Um den Ordner aufzurufen welchen ich beim ls-Befehl genutzt habe kann ich dies über mehrere Wege machen.

Wenn ich eine Konsole öffne starte ich immer in meinem Home-Verzeichnis. Ich darf also direkt von meinem Ordner in den Unterordner gehen über

cd beispiel

Falls ich irgendwo sonst im System bin kann ich über den vollständigen Pfad auch dahin wechseln

cd /home/jruettimann/beispiel/

oder

cd ~/beispiel/

Die Tabulator Taste ist dabei ein guter Freund, da es eine automatische Vervollständigung macht, wenn es auf eine einzige Möglichkeit reduziert ist von was man bereits geschrieben hat.

Wie bereits erwähnt kann man einen Ordner zurückgehen, wenn man das folgende eingibt:

cd ..

Falls man sich bei ls alles anzeigen lässt sieht man auch noch den Eintrag ".". Damit ist der aktuelle Ordner gemeint. Es macht also nicht sehr viel Sinn in den aktuellen Ordner zu wechseln.

Wenn man nur "cd" eingibt landet man ebenfalls im home-Verzeichnis vom aktuellen Benutzer. Es ist also das gleiche wie wenn man "cd ~" eingibt.



type

Mit diesem Befehl lassen sich Informationen zu einem Befehl anzeigen. Ich habe einen Screenshot zu den Befehlen gemacht welche wir mittlerweile gelernt haben. Es sind erst wenige, doch es zeigt ein wenig was an.

Type.png

Bei den externen Befehlen sieht man meistens noch wo sich das Programm befindet auf dem Computer. Da es sich bei "type" um einen internen Befehl handelt können wir zusätzliche Infos über "help type" kriegen. In meinem Bild sehen wir den Pfad zu dem Befehl ls nicht, da er mehrere Antworten dazu hat. Um also alle Informationen zu "ls" zu sehen mit type geben wir das folgende ein:

type -a ls


Das Resultat ist die bereits bekannte Zeile und die zweite Zeile gibt an wo sich das Programm befindet im System.


which

Unter Linux gibt es oft nicht nur einen Weg um etwas zu machen. Interessiert mich also nur wo sich ein Befehl auf dem System befindet, so kann man dies über den Befehl "which". Übersetzen wir das Wort in die deutsche Sprache, so heisst es "welcher", "welche" oder "welches".
Dieser Befehl funktioniert nur für externe Befehle. Das Programm ist nicht in der Lage Informationen zu interenen Befehlen zu liefern.


apropos

Mit dem Befehl "apropos" lässt sich eine kurze Beschreibung zu etwas aufrufen. Alternativ kann man "man -k" eingeben statt "apropos". Das Resultat ist das gleiche wie man im folgenden Bild sehen kann:
Aproposmank.png

Man kann also nach einem allgemeinen Begriff suchen und kriegt die möglichen Optionen angezeigt. Die Begriffe müssen in der englischen Sprache sein. Ich habe im nächsten Bild am Schluss extra noch den Befehl mit der deutschen Schreibweise gemacht.
Apropos-partition.png

Das andere im zweiten Bild ist was es für Möglichkeiten gibt zu Partitionen. Wenn man manuell die Partitionen einer Festplatte definiert ist eines oder mehrere dieser Programme notwendig dies zu machen. Doch mehr dazu zu einem anderen Zeitpunkt.


whatis - Kurzbeschreibung zu einem Befehl

Mit "whatis" erhält man eine kurze Beschreibung zu einem Befehl. Wieder ist dies nur für die externen Befehle und nicht für die interen. Alternativ kann man auch "man -f" eingeben. Es produziert das selbe Resultat.

Wenn wir unser Beispiel bei apropos nehmen wo ich mehrere Möglichkeiten zu Partitionen erhalten habe und ich zu einem dieser Einträge eine Kurzbeschreibung erhalten möchte, so kann ich das mit diesem Befehl machen.

Whatis4.png

Hier noch etwas allgemein gültiges. Bei vielen Befehlen kann man über den Parameter "--help" erfahren wie man den Befehl nutzen muss. Hier wie es im Falle des Befehls "whatis" aussieht. Wie man im Bild sehen kann habe ich es über den Parameter "-?" aufgerufen. Ich weiss leider nicht ob dieser Parameter überall eingebaut ist. Der "--help" habe ich schon mehr gesehen.

Whatis2.png



cp - Kopieren

Vielleicht erinnert man sich daran, dass dieser Befehl unter DOS copy heisst. Hier im Linux ist der Befehl ein wenig kürzer und ist einfach nur "cp". Der Parameter "--help" funktioniert hier und man kann auch über "man cp" mehr Infos erhalten.

Hier ein einfaches Beispiel von einer Kopie machen. Dazu zuerst wie der Ordner vorher aussieht:

Cp-vorher.png

Dann folgt der Befehl. Ich gebe also "cp" zuerst ein, dann folgt die Quelle, welche ich kopieren möchte und am Schluss ist der neue Name der Datei oder des Ordners.

Cp-command.png

Um zu sehen was das Resultat ist haben wir hier nochmals den neuen Inhalt des Ordners:

Cp-nachher.png



mv - verschieben

Der Befehl "mv" ist dazu da eine Datei oder einen Ordner zu verschieben. Über "man mv" oder "mv --help" kann man mehr Informationen in der Befehlszeile zum Befehl kriegen. Die Synthax ist, dass man nach dem Befehl die Quelle angibt und am Schluss noch das Ziel.
Hier noch ein Bild mit vorher, dem Befehl und nachher. Ich habe in der Datei "beispiel.txt" extra noch ein wenig zusätzlichen Text geschrieben um eine andere Grösse davon zu haben.
Wenn man sich von einer Konfigurationsdatei ein Backup erstellt hat und wieder zurück auf die alten Einstellungen will, so kann man dies über "mv" machen. In meinem Beispiel ist es lediglich eine ältere Version mit weniger Text darin.

Mv.png


ln - Link erzeugen

Ich werde zuerst ein Beispiel zu einem symbolischen Link (soft link) machen. Für Leute die aus der Windows-Welt kommen ist es vergleichbar mit einer Verknüpfung erstellen. Löscht man die Quelle für einen symbolischen Link, so kann man den symbolischen Link nicht mehr nutzen.
In meinem Beispiel hier habe ich einen symbolischen Link zwischen meiner "beispiel.txt" und dem Begriff "Beispiel" gemacht.

Ln.png

Um die Abhängigkeit vom symbolischen Link mit der Quelle aufzuzeigen, habe ich die Datei umbenannt. Das System hat dann auch bereits festgestellt, dass es keine Quelle mehr für den Link hat und wenn ich probiere die Datei anzuschauen erhalte ich einen Fehler.


Ln2.png

Es gibt unter Linux jedoch auch noch "hard links". Ein "hard link" ist jedoch nicht wie eine Verknüpfung sondern ist mehr dazu da um eine Datei an zwei Orten zu haben. So kann man die Datei am einen Ort löschen und hat sie trotzdem noch immer am anderen Ort. Dies ist möglich, weil es auf die gleiche Inode verweist.
Hier , hier oder hier findet man noch eine Antwort warum Ordner über einen Hardlink zu verknüpfen nicht erlaubt ist.
Als Beispiel dazu habe ich die Datei "beispiel.txt" wieder umbenannt und den symbolischen Link gelöscht. Anschliessend habe ich einen "hard link" erzeugt und die Quelle gelöscht. Der "hard link" kann immer noch verwendet werden nachdem ich die Quelle gelöscht habe.

Hardlink.png


mkdir - Verzeichnis erstellen

Mit diesem Befehl kann man einen neuen Ordner erstellen. Es gibt eine manpage dazu die man über "man mkdir" aufrufen kann und man kann auch mehr Details über "mkdir --help" kriegen.

In meinem Bild das folgt habe ich zwei neue Ordner erschaffen. Den ersten über die kurze Schreibweise, da ich in dem Verzeichnis bin wo ich den neuen Ordner erstellen möchte. Für den zweiten Ordner habe ich den vollständigen Pfad angegeben. Wie man anschliessend über "ls -la" sieht, habe ich beide Ordner im gleichen Verzeichnis erstellt.

Mkdir.png


rmdir - Verzeichnis entfernen

Mit diesem Befehl kann man leere Verzeichnisse löschen.

Rmdir.png

Um zu zeigen, dass es notwendig ist, dass das Verzeichnis leer ist habe ich eine Datei im Ordner "beispiel3" erstellt. Wenn ich jetzt probiere den Ordner zu löschen, kann ich das nicht.

Rmdir2.png

Die eine Möglichkeit wäre jetzt in den Ordner zu gehen und die Dateien darin zu löschen oder ein anderer Weg ist mit dem nächsten Befehl.


rm - remove oder entfernen

Wie der Titel sagt ist dieser Befehl zum entfernen von "Dateien". Ich habe die "" gesetzt, weil in Linux alles eine Datei ist. Im ersten Beispiel werde ich eine Datei löschen. Es gibt die manpage die man über "man rm" aufruft oder den Parameter für mehr Details mit "rm --help".

Rm-datei.png

Wie bereits bei "rmdir" angedeutet kann man mit dem Befehl "rm" auch Ordner löschen. Im folgenden Beispiel zeige ich dies auf. Es funktioniert jedoch nicht ohne den richtigen Parameter dazu zu setzen.

  -r, -R, --recursive     Inhalte von Verzeichnissen rekursiv entfernen


Rm-ordner.png

Es ist ratsam nicht wahllos im System Ordner zu löschen, wenn man als root eingeloggt ist. Als root hat man alle Rechte und falls man dann den falschen Ordner auf diese weise löscht kann man das ganze System kaputt machen.


touch

Mit dem Befehl "touch" aktualisiert man die die Zeit wann zuletst auf die Datei zugegriffen und geändert wurde. Es gibt eine man-Page zum Befehl und man kann "touch --help" nutzen.
Im ersten Beispeil sieht man wie ich die Zeit bei der Datei "faa" aktualisiere.

Touch1.png

Zudem kann man eine leere Datei erstellen, wenn diese noch nicht existiert.

Touch2.png

Da es die Datei "fee" noch nicht gibt, wurde sie durch den Befehl "touch" erstellt. Da die Grösse von all diesen Dateien im Ordner 0 ist, heisst das, dass die Dateien leer sind und alle mal über touch erstellt wurden von mir.


Prozesse, CPU Auslastung, Arbeitsspeicherauslastung

ps

Mit dem Befehl "ps" kann man sehen was aktuell für Prozesse am laufen sind. Da es sich um einen externen Befehl handelt, kann man mit "man ps" die Man-Page dazu anschauen. Meistens wird man diesen Befehl mit zusätzlichen Parametern ausführen, dass man alle Prozesse sieht. Dann gibt man "ps -aux" ein. Jedoch wird man dann eine lange oder sehr lange Liste bekommen. Um diese Liste einzugrenzen nach was man genau sucht, kann man zum Beispiel den Befehl "grep" nutzen. Mehr Details zu grep werden in einem anderen Teil kommen.

Ps postfix.png

Mein gewähltes Beispiel macht vermutlich noch nicht zuviel Sinn. Bei Postfix handelt es sich um eine Komponente von einem Mailserver. Ich wollte ein Beispiel wählen, das nicht mehr als eine Seite liefert, selbst mit Einschränkung durch grep.


top

Mit dem Programm "top" kann man die Prozesse anzeigen und zudem noch sehen wie stark der Prozessor und Arbeitsspeicher ausgelastet sind.

Top.png


htop

Falls man die top-Anzeige noch mit Farben und "graphischen" Anzeigen mag, kann man auch das Programm htop verwenden. Es ist standardmässig noch nicht installiert, dass man es selber noch installieren muss. Wie man ein neues Programm installiert lernen wir später auf dieser Seite.

Htop.png


sudo - Als anderer Benutzer einen Befehl ausführen

Um den Befehl "sudo" zu erklären muss ich wohl erst noch den Befehl "su" ein wenig erklären. In der man-Page von "su" steht als Titel das folgende:

su - change user ID or become superuser

Zum einen kann man also den Benutzer welchseln (Substitute User) oder "superuser" werden. Der Benutzer "root" ist dieser "superuser" unter Linux, da "root" alle Rechte hat.

Somit wenn man der englischen Sprache mächtig ist kann man es sich so merken was "sudo" macht: SuperUserDo. Es ist nicht korrekt, wenn man den Benutzer wechselt, doch für die Anfänge im CLI wird diese kleine Brücke helfen. Man sagt somit einfach, dass man diesen Befehl als "superuser" ausführen will.
Das Beispiel ist gleich auch sinnvoll für den nächsten Punkt wo wir den Paketmanager von Debian kennenlernen.

Sudo.png




apt - Paketmanager

Um ein neues Programm unter Linux in der Befehlszeile zu installieren braucht man einen Paketmanager. Im Fall von Debian heisst dieser "apt" oder auf älteren Systemen "apt-get". Auf dem ArchWiki - Paketmanager Befehle im Vergleich findet man eine Liste wie die Befehle in den unterschiedlichen Paketmanagern ausgeführt werden.
Im Hintergrund von apt wird das Programm "dpkg" ausgeführt. Jedoch ist apt in der Lage Abhängigkeiten von verschiedenen Packeten aufzulösen, dass ein gewünschtes Programm anschliessend auch gleich funktioniert und nicht Fehler erzeugt, wenn man es probiert zu starten. Dadurch kann es vorkommen, dass man "nur" ein Programm installieren will und da dieses diverse andere Programme braucht um zu funktionieren hat man dann eine grosse Liste von Paketen die installiert werden.

sudo apt update               -> Aktualisiert die Liste der verfügbaren Pakete und meldet am Schluss noch für wieviele bereits installierte Pakete
                                 eine neuere Version verfügbar ist
sudo apt upgrade              -> Installiert die neusten Versionen der bereits installierten Pakete
sudo apt dist-upgrade         -> Wenn eine neuere Version von Debian verfügbar ist kann man mit diesem Befehl die neuere Version installieren
apt search "Paketname"        -> Sucht nach Paketen, welche den Suchbegriff enthalten
sudo apt install "Paketname"  -> Installiert das eingegebe Paket
sudo apt remove "Paketname"   -> Entfernt ein Paket. Konfigurationsdateien bleiben jedoch erhalten
sudo apt purge "Paketname"    -> Entfernt ein Paket und auch die Konfigurationsdateien

Aptinstall.png