CLI-Teil1-Einführung ins Command Line Interface: Unterschied zwischen den Versionen
(→rm) |
|||
Zeile 403: | Zeile 403: | ||
<br> | <br> | ||
[[Datei:Rm-ordner.png]] | [[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. | ||
=== touch === | === touch === |
Version vom 20. Dezember 2016, 15:34 Uhr
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).
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.
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
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.
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 Packetformat 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.
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:
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, doch 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 dem folgenden Befehl 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. 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:
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 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:
Möchte man mehr Details zu den einzelnen Dateien sehen, so macht man dies mit "ls -l" in der Befehlszeile
Falls man auch versteckte Dateien sehen möchte (versteckte Dateien beginnen mit einem Punkt)
Will man eine ausführliche Anzeige mit den versteckten Dateien, so kann man die Parameter -a und -l kombinieren zu -la oder -al
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.
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.
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:
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.
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
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.
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.
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:
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.
Um zu sehen was das Resultat ist haben wir hier nochmals den neuen Inhalt des Ordners:
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.
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.
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.
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.
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.
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.
rmdir - Verzeichnis entfernen
Mit diesem Befehl kann man leere Verzeichnisse löschen.
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.
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".
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
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
ps
top
htop
apt
Dateien betrachten und editieren
cat
less
more
nano
vim
Hardwaredetails
http://www.binarytides.com/linux-commands-hardware-info/