Große Übung Programmieren - Linux-Tools - Sebastian Ebers Institut für Telematik, Universität zu Lübeck https://www.itm.uni-luebeck.de/people/ebers/ Linux das bessere Windows? Ein ganz klares Jein 2 Linux, das andere Windows? Lizenzkosten Hardware-Unterstützung Software Verwaltung, Unterstützung, etc. Zielgruppe Datei- und Verzeichnissystem Rechtesystem Bedeutung der Konsole 3 1
Verzeichnisbaum Es gibt unter Linux keine Laufwerksbuchstaben Alle Verzeichnisse, Dateien und Geräte befinden sich unterhalb des Wurzelverzeichnisses / / ist vergleichbar mit Laufwerk C: unter Windows Zusätzliche Partitionen werden in ein Verzeichnis unterhalb von / eingehängt 4 Verzeichnisbaum / dev Geräte etc Konfigurations- und Informationsdateien home Enthält Eigene Dateien aller Benutzer meier Eigene Dateien des Benutzers meier media Enthält Einhängepunkte für transportable Medien mnt Weiterer Einhängepunkt opt Speicherort für selbst zusätzliche Programme proc Enthält Schnittstellen zu laufenden Prozessen usr enthält den Großteil der Systemtools, Bibliotheken und installierten Programme 5 (Unix-)Shell / Terminal / Konsole Steht auch ohne (grafische) Desktop-Umgebung zur Verfügung Ermöglicht die kommandozeilenbasierte Benutzung des Betriebssystems Die Standard-Shell unter Linux ist oft die Bash Nützliche Features Autovervollständigung, Historie, Befehlskürzel Etc. 6 2
Konventionen <Programm> bedeutet: Setze an dieser Stelle den Namen des Programms ein (ohne < und >) [<Pfad>] bedeutet: Die Angabe <Pfad> ist optional Setze an dieser Stelle den Namen des Pfads ein (ohne < und >) 7 Arbeiten mit Dateien und Verzeichnissen Inhalt des aktuellen Verzeichnisses anzeigen ls Zeigt Namen nicht-versteckter Dateien und Verzeichnisse an ls a Zeigt Namen aller Dateien und Verzeichnisse an ls la Zeigt Namen und Zusatzinformationen aller Spezielle Verzeichnisse. Referenz auf das aktuelle Verzeichnis.. Referenz auf das übergeordnete Verzeichnis 8 man pages Hilfe zur Funktion, Optionen, Parametern etc. von Konsolenbefehlen Beispiele man ls Hilfe zum Anzeigen von Verzeichnisinhalten man java Infos zum Starten von Java- Programmen man javac Infos zum Übersetzen von Java- Programmen 9 3
Navigation im Verzeichnisbaum Pfadangaben Absolute Pfade: Ausgangspunkt ist das Wurzelverzeichnis Fängt immer mit / an Relative Pfade: Ausgangspunkt ist das aktuelle Verzeichnis Fängt nie mit / an Fängt mit. oder.. oder ganz ohne Punkte an 10 Navigation im Verzeichnisbaum Pfadangaben bei Verzeichniswechsel Aktuelles Verzeichnis: /home/meier (Anzeige mit pwd) Wechsel in Verzeichnis /home/meier/test : Relativ: cd test oder cd./test Absolut: cd /home/meier/test 11 Navigation im Verzeichnisbaum Pfadangaben bei Verzeichniswechsel Aktuelles Verzeichnis: /home/meier (Anzeige mit pwd) Wechsel in Verzeichnis /home/mueller/test Relativ: Absolut: cd../mueller/test cd /home/mueller/test 12 4
Programme in der Shell starten Oft mit Parametern Zur Konfiguration oder zur Übergabe von Informationen Trennung einzelner Parameter durch Leerzeichen Inhalt doppelter Anführungszeichen gilt als ein Parameter Beispiele: ls l /media Gibt den Inhalt des Ordners /media aus touch "hallo welt.txt" Legt die Datei./hallo welt.txt an cat hallo welt.txt Gibt den Inhalt der Dateien./hallo und./welt.txt aus 13 Arbeiten mit Verzeichnissen Verzeichnis anlegen Relative Variante: mkdir test entspricht mkdir./test Absolute Variante: mkdir /home/meier/test Verzeichnis löschen rmdir <Pfad> löscht nur leere Verzeichnisse rm r <Pfad> löscht alle Verzeichnisse (rekursiv) 14 Arbeiten mit Verzeichnissen Verstecktes Verzeichnis anlegen mkdir [<Pfad>].<Verzeichnisname> Verzeichnisinhalt anzeigen ls [<Pfad>] Zeigt Namen nicht-versteckter Dateien und Verzeichnisse an ls a [<Pfad>] Zeigt Namen aller Dateien und Verzeichnisse an ls la [<Pfad>] Zeigt Namen und Zusatzinformationen aller 15 5
Arbeiten mit Dateien Eine leere Datei anlegen: touch [<Pfad>]<Dateiname> Eine leere, versteckte Datei anlegen: touch [<Pfad>].<Dateiname> Dateien löschen: rm [<Pfad>]<Dateiname(n)> Inhalt einer Datei anzeigen cat <Dateiname> Zeigt die Datei komplett an less <Dateiname> bildschirmweise Anzeige 16 Arbeiten mit Dateien und Verzeichnissen Kopieren cp [-r] <Quelle> <Ziel> Kopiert Datei(en) und/oder Verzeichnis(se) Verschieben mv <Quelle> <Ziel> Verschiebt Datei(en) und/oder Verzeichnis(se) Dateien editieren (hier mit Editor vi): vi [<Pfad>]<Dateiname> 17 Dateien auf der Konsole editieren: vi/vim Komplett textbasiert Auf den meisten Unix-Systemen vorinstalliert Funktioniert auch ohne Desktop-Umgebung Nützliche Tipps http://wiki.ubuntuusers.de/vim?highlight=vi Merkblätter (Cheat Sheets) http://www.viemu.com/a_vi_vim_graphical_cheat_sh eet_tutorial.html http://www.lagmonster.org/docs/vi.html 18 6
Grafische Texteditoren Übersicht auf Ubuntuusers.de: http://wiki.ubuntuusers.de/editoren gedit (http://wiki.ubuntuusers.de/gedit) SciTE (http://wiki.ubuntuusers.de/scite) Geany (http://wiki.ubuntuusers.de/geany) Leafpad (http://wiki.ubuntuusers.de/leafpad) Kate (http://wiki.ubuntuusers.de/kate) Mousepad (http://wiki.ubuntuusers.de/mousepad) 19 Suchen und Finden Suchen von Dateien und Verzeichnissen mit find Beispiel: Finde Datei mit dem Namen test.txt im aktuellen Verzeichnis find. type f name test.txt Suchen in Dateien mit grep Bsp. 1: Suche nach Navigation oder navigation in test.txt grep i navigation test.txt Bsp. 2: Suche nach gut gemacht in test.txt grep "gut gemacht" test.txt grep gut\ gemacht test.txt 20 Standard Ein- und Ausgaben Standardeingabe: stdin Tastatur Standardausgabe: stdout Bildschirm Standardfehlerausgabe: stderr Bildschirm Die Standardein- und ausgaben lassen sich auch in Dateien umleiten 21 7
Umleitung von Ein- und Ausgaben Symbol Bedeutung < Lese Eingabe aus einer Datei und nicht von der Tastatur > Schreibe Ausgabe in eine Datei und nicht auf den Bildschirm (der aktuelle Inhalt der Datei wird überschrieben) >> Hänge Ausgabe an eine Datei an, statt sie auf dem Bildschirm auszugeben 2> 2>> > 2>&1 >> 2>&1 Schreibe die Fehlerausgabe nicht auf den Bildschirm sondern in eine Datei bzw. hänge sie an eine Datei an Kombiniere normale und Fehlerausgabe Beispiele: ls l / > dirlist.txt 2>&1 cat < dirlist.txt 22 Verbinden von Programmen mit Pipes <programm1> <programm2> Leitet die Standardausgabe von programm1 in die Standardeingabe von programm2 um Beispiel: Gebe Informationen wie Dateirechte, etc. zu einer Datei, die test im Namen enthält, auf der Konsole aus ls l grep test 23 Verketten von Programmen Unbedingtes Verketten <programm1> ; <programm2> Bedingtes Verketten <programm1> && <programm2> (<programm1> <programm2>)&& <programm3> Exit-Status eines Programms 0 Alles in Ordnung!= 0 Fehler 24 8
Datei- und Verzeichnisrechte Für jedes Objekt geordnet nach Besitzer Gruppe Rest festgelegt werden, ob es gelesen und / oder beschrieben und / oder ausgeführt werden kann. 25 Datei- und Verzeichnisrechte Rechte Besitzer (u) Rechte Gruppe (g) Rechte Rest (o) Besitzer Besitzer Gruppe Datei / Verzeichnis - r w x r w - r - - meier mitarb myfile.txt d r Der w x Besitzer r - x meier - - x darf meier mitarb mydir die Datei myfile.txt lesen (r), beschreiben (w) und ausführen (x). Jedes Mitglied der Gruppe mitarb (außer dem Besitzer) darf die Datei myfile.txt lesen (r), beschreiben (w), aber nicht ausführen (-). Alle anderen dürfen die Datei myfile.txt nur lesen (r). Das führende d bei mydir zeigt an, dass es sich um ein Verzeichnis handelt. 26 Datei- und Verzeichnisrechte Mittels chmod kann man dem Besitzer (u), der Gruppe (g), allen Anderen (o) oder Allen (a) Rechte zugestehen (+), entziehen (-) oder zuweisen (=) Beispiel 1: Gruppe darf myfile.txt zusätzlich ausführen und der Besitzer darf lesen und schreiben. chmod u=rw,g+x myfile.txt 27 9
Arbeiten mit Programmen Programme im Verzeichnisbaum finden which <Programmname> Programme starten, die sich im Suchpfad für Programme ($PATH) befinden: <Programmname> (z.b. cd) nicht im Suchpfad befinden: Pfadname zwingend notwendig : <Pfad>/<Programmname> Programme im aktuellen Verzeichnis werden mittels./<programmname> gestartet 28 Umgebungsvariablen Eine Umgebungsvariable enthält beliebige Zeichenketten, die in den meisten Fällen Pfade zu bestimmten Programmen oder Daten enthalten, sowie bestimmte Daten, die von mehreren Programmen verwendet werden können. Quelle: http://de.wikipedia.org/wiki/umgebungsvariable, 26.10.2011 29 Umgebungsvariablen Alle aktuell gesetzten Umgebungsvariablen anzeigen: env Bestimmte Umgebungsvariable anzeigen: echo $<Variablenname> Wichtige Umgebungsvariablen: PATH HOME JAVA_HOME 30 10
Umgebungsvariablen setzen Temporär, für die aktuelle Konsole und daraus gestartete Programme Kommando in der Konsole: export PATH=$PATH:<absoluter Pfad> Dauerhaft für alle neu gestarteten Konsolen Zeile in die Bash-Konfiguration des Benutzers: export PATH=$PATH:<absoluter Pfad> Pfade werden unter Linux mit : getrennt 31 Die Konfiguration der Bash Unter $HOME/.bashrc liegt die benutzereigene Konfigurationsdatei für die Bash. Sie wird bei jedem Öffnen eines interaktiven Terminals geladen. Unter $HOME/.bash_profile liegt eine weitere Konfigurationsdatei, die nur beim Starten einer Login- Shell geladen wird. 32 Beispiel-Einträge in der Bash-Konfiguration export TEMP=/tmp export JAVA_HOME=/usr/lib/jvm/java-6-sun alias ll='ls -l' alias la='ls -A' alias lal='ls la' alias testdir='cd $HOME/test' alias befehle='vi $HOME/befehle.txt' 33 11
Die Konfiguration der Bash Änderungen in der $HOME/.bashrc gelten erst für nachfolgend gestartete Terminals. Um die Änderungen benutzen zu können, muss man entweder eine neue Konsole öffnen oder die Änderungen der Datei $HOME/.bashrc explizit übernehmen mittels exec bash -$- 34 Bash-History Zu finden unter $HOME/.bash_history Einsehen über history cat $HOME/.bash_history Suchen über Tastenkombination: <Strg> + <R> grep <Suchstring> $HOME/.bash_history 35 Bash-History Wann wird gespeichert? Wenn die Konsole geschlossen wird (Standard) Letze Befehle der aktuellen Konsole bereits über history abrufbar Konfigurationsmöglichkeiten in der $HOME/.bashrc export HISTCONTROL=ignoreboth export HISTSIZE=500 export HISTIGNORE=ls:ll:cd:pwd:exit 36 12
Remote arbeiten mit SSH SSH der sichere Telnet-Ersatz Einloggen an einem entfernten Terminal ssh [<benutzername>@]<server> Befehl auf einem entfernten Rechner ausführen ssh [<benutzername>@]<server> <befehl> Beispiel: ssh meier@sshgate.info.unil.de "chmod u=rwx,g=,o= /home/meier; ls -l /home grep meier" 37 SSH-Voreinstellungen Unter $HOME/.ssh/config können Voreinstellungen für Verbindungen gespeichert werden. Beispiel: Host ssh-gate HostName sshgate.info.unil.de Port 22 User meier 38 Remote arbeiten Dateitransfer mit SCP SCP Kopieren über Systemgrenzen hinweg Lokale Datei auf einen Server kopieren scp test.txt meier@sshgate.info.unil.de:/home/meier/ Datei vom Server auf den lokalen Rechner kopieren scp ssh-gate:/home/meier/test.txt./test2.txt 39 13
SSH/SCP-Links PuTTY PuTTY is a free SSH, Telnet and Rlogin client for 32-bit Windows systems. http://www.chiark.greenend.org.uk/~sgtatham/putty/ WinSCP Grafischer SFTP-Client für Windows auf der Basis von SSH http://winscp.net Authentifizierung über Public-Keys Authentifizierung ohne Passworteingabe http://wiki.ubuntuusers.de/ssh#authentifizierung-ueber-public- Keys 40 Weitere Informationsquellen Suchmaschinen www.google.de Wikis und Foren www.ubuntuusers.de Man pages man <Programmname> 41 Und noch mehr Infos... 42 14
Nützliche Tools Archivierung mittels tar Wichtige Optionen -c Archiv anlegen (create) -x Archiv auspacken (extract) -f zur Angabe der Ziel- oder Quelldatei (file) -z (De)Kompression mit gzip -j (De)Kompression mit bzip2 Beispiele: tar czf doc.tgz./doc/ tar xzf doc.tgz 43 Nützliche Tools (Rekursives) Suchen von Dateien mit find find <Pfad> <Suchausdruck> Wichtige Suchausdrücke Suche nach eine Datei im Allgemeinen -type f Suche nach Datei mit bestimmtem Namen -name <Name der Datei> (Groß- u. Kleinschreibung wichtig) -iname <Name der Datei> Beispiel: Suche im Home-Verzeichnis (auf beliebiger Tiefe) alle Dateien, die mit Test oder test anfangen find $HOME type f iname "test*" 44 Nützliche Tools Verknüpfungen erzeugen mittels ln Symbolische Verknüpfung: Wird das Original gelöscht, ist die Verknüpfung ungültig ln s <Original> <Verknüfung> ln s /home/meier/mydocs./mdocs Harte Verknüpfung: Wird das Original gelöscht, bleibt die Verknüpfung gültig ln <Original> <Verknüfung> ln /home/meier/mydocs/test.txt./mdocs/ 45 15
Nützliche Tools Tool Nutzen du Anzeige der Dateigröße df Anzeige der Speichernutzung je Partition sort Sortierung der Zeilen eines Textes uniq Anzeige oder Unterdrückung doppelter Zeilen grep Suchen in Dateien ps Anzeige der aktuell laufenden Prozesse top Dynamische Übersicht aktueller Prozesse und Systemressourcen pstree Anzeige der aktuell laufenden Prozesse in einer Baumstruktur kill Löschen aktuell laufender Prozesse head Ausgabe des ersten Teils einer Datei tail Ausgabe des letzten Teils einer Datei 46 Ein- und Aushängen von Partitionen Einhängen: mount Befehl zum Einhängen -t ntfs Dateisystem (hier NTFS) /dev/sda1 /media/winxp Einhängepunkt Partition zum Einhängen Aushängen: umount /media/winxp Befehl zum Aushängen Einhängepunkt 47 Bedeutung von Anführungszeichen Doppelte Anführungszeichen " " Variablen werden ausgewertet Beispiel: echo "$PATH" Ausgabe: Wert der Variable PATH Einzelne Anführungszeichen ' ' Alle Zeichen werden in ihrer ursprünglichen Form dargestellt echo '$PATH' Ausgabe: $PATH Schräge einzelne Anführungszeichen ` ` Kommandos werden ausgewertet Beispiel: echo `hostname` Ausgabe: Rückgabe des Programms hostname 48 16
man pages Man pages (Öffnen, Lesen, Durchsuchen) Level (siehe man man ) 1 Ausführbare Programme oder Shell-Befehle 2 Systemaufrufe (Kernelfunktionen) 3 Bibliotheksaufrufe (Funktionen in System-Bibliotheken) 4 Spezielle Dateien (gewöhnlich in /dev) 5 Dateiformate und Konventionen, z. B. /etc/passwd 6 Spiele 7 Makropakete und Konventionen, z. B. man(7), groff(7) 8 Systemadministrationsbefehle (in der Regel nur für root) 9 Kernelroutinen [Nicht Standard] n neu [veraltet] l lokal [veraltet] p öffentlich [veraltet] o alt [veraltet] 49 man pages Beispiel für Level man printf man 1 printf man 2 printf nichts man 3 printf C-Funktion printf Wie findet man die richtige man page? apropos <Programm> 50 17