Grundlegende Kommandos unter UNIX / LINUX

Transcrição

Grundlegende Kommandos unter UNIX / LINUX
Fakultät Informatik, HFU Brückenkurs UNIX‐Einführung Grundlegende Kommandos unter UNIX / LINUX Allgemeine Schreibweise: kommandoname [-opt1 -opt2
…] [objekt1 objekt2 …]
Erste Shell‐Kommandos mkdir directoryname
cd oder cd~
cd ..
cd /etc/init.d/
cd Java/Beispiele
pwd
ls
ll oder ls -l
legt ein Verzeichnis mit dem Namen directoryname an change directory (ohne Angabe oder mit Angabe ~: Wechsel ins Homeverzeichnis gehe eine Ebene nach oben (bzw. zurück) change directory, Verzeichnisziel mit absoluter Pfad‐Angabe mit relativer Pfad‐Angabe print working directory, Anzeige des Verzeichnisses, in dem man sich befindet list short zeigt die Unterverzeichnisse und Dateien in einem Verzeichnis an. list long (ll ist kein Standardbefehl) zeigt ebenfalls die Unterverzeichnisse und Dateien in einem Verzeichnis an. Es werden zusätzliche Infos ausgegeben wie Dateityp, Zugriffsrechte, Eigentümer, Gruppe, Größe und Modifikationsdatum. Optionen zu ls und ll
-a
zeigt versteckte Dateien (.dateien) -ld directoryname zeigt nur Angaben von directoryname, nicht seinen Inhalt -F
kennzeichnet Verzeichnisse mit / und ausführbare Dateien mit *
more filename
zeigt einen Dateiinhalt seitenweise auf dem Bildschirm an. less filename
zeigt einen Dateiinhalt ebenfalls an, man kann in der Datei vor‐ und zurückspringen und nach Begriffen suchen (nicht Standard). echo "irgend ein
gibt irgend ein Text auf die Standardausgabe (Bildschirm) Text"
aus. touch file
berührt die Datei file und ändert das Modifikationsdatum Namenskonventionen für Dateinamen, Verzeichnisnamen: •
•
•
•
•
•
•
•
Alle Buchstaben des ASCII‐Zeichensatzes sind erlaubt (also keine Umlaute oder ß). Zahlen sind erlaubt. Minus‐Zeichen ist NICHT als 1. Zeichen erlaubt (reserviert zur Kennzeichnung von Optionen), innerhalb von Namen ist es erlaubt. Unterstrich _ ist überall im Namen erlaubt. Großbuchstaben und Kleinbuchstaben werden unterschiedlich behandelt (Uebung1 ist NICHT uebung1). Punkt als 1. Zeichen kennzeichnet „versteckte Dateien“. Punkt innerhalb eines Namens ist erlaubt. Leerzeichen sind möglich, müssen aber mit \ (Backslash) maskiert werden. Ansonsten Vorsicht bei Sonderzeichen, denn fast alle haben eine Sonderfunktion in der Shell. 1 2 Brückenkurs UNIX‐Einführung Fakultät Informatik, HFU Sonderzeichen in der Shell und ihre Funktion (Liste ist nicht komplett): |
&
>
>>
<
/
*
?
[Xx]
Space,
Tab
\
`cmd`
$
'text'
"text"
Als 1. Zeichen kennzeichnet es eine Option, ein Dateiname darf NICHT mit diesem Zeichen beginnen. Pipe, leitet die Ausgabe eines Kommandos als Eingabe des Nachfolgekommandos weiter. legt Prozesse in den Hintergrund. leitet die Kommandoausgabe in eine Datei um, alter Datei‐Inhalt wird überschrieben (Standardausgabe in Datei). leitet die Kommandoausgabe in eine Datei um, es wird die bestehende Datei weitergeschrieben (Standardausgabe in Datei, Anhängen an bestehende Datei). versorgt ein Kommando mit dem Inhalt einer Datei (Standardeingabe aus Datei) Trennzeichen im Pfadnamen für die unterschiedlichen Verzeichnis‐Ebenen Wild Card, steht stellvertretend für eine beliebige Zeichenkette oder einen Leerstring. Wild Card, steht stellvertretend für genau ein Zeichen, dass beliebig sein kann. Sowohl X wie auch x kann an dieser Stelle stehen, X und x stehen hier als Beispiel, beliebige andere Zeichen möglich. Feldseparatoren, z.B. zwischen zwei Parametern Maskierungszeichen, dass die Funktion des nachfolgenden Sonderzeichens aufhebt (z.B. bei Leerzeichen im Dateinamen wird als Leerzeichen und nicht als Feldseparator behandelt). cmd steht für ein beliebiges Kommando. Auswertung des Kommandos, wenn es auf der Parameter‐Position eines anderen Kommandos steht (Beispiel:: echo `date`). kennzeichnet eine Variablen. Klammerung von Zeichenketten, Sonderzeichen innerhalb der Quotierung haben keine Wirkung. Klammerung von Zeichenketten, innerhalb der Quotierung werden aber die Zeichen
$ `cmd` \ ! ausgewertet. kennzeichnet die übergeordnete Verzeichnisebene kennzeichnet das aktuelle Verzeichnis führt das Kommando aus ..
.
Enter
Die folgenden Sonderzeichen finden hauptsächlich in Shell‐Skriptes Verwendung {…} […] Klammerungen in Shell‐Skripten #
Kennzeichnung eines Kommentares #!...
sorgt dafür, dass das Skript in einer bestimmten Shell ausgeführt wird Aufgabe 1: a) Legt in eurem Homeverzeichnis folgende Verzeichnisstruktur an: ersteSchritte/Verzeichnis1
ersteSchritte/Verzeichnis2
b) Wechselt in das Verzeichnis1. Mit dem Kommando echo könnt ihr einen Text auf die Standardausgabe schreiben. Über das Umlenkzeichen > wird die Ausgabe von echo in eine Datei umgeleitet: echo blablabla > dateiname. Schreibt den folgenden Text: Ich heisse euerName in die Datei meineDaten
Fakultät Informatik, HFU Brückenkurs UNIX‐Einführung 3 c) Nachdem ihr geprüft habt, ob die Datei auch vorhanden ist und den Inhalt enthält, ergänzt ihr
meineDaten durch die Angabe
und wohne in eureStadt
Kontrolliert, ob meineDaten wirklich beide Zeilen enthält. d) Welche drei Möglichkeiten habt ihr, um in euer Homeverzeichnis zurückzukehren? Selbstdefinierte Kommandos Beim Login werden folgende Dateien durchlaufen (C‐Shell csh oder deren Weiterentwicklung tcsh): •
•
•
/etc/.cshrc
.cshrc
.login
für alle User, kann nur mit root‐Rechten geändert werden im Homeverzeichnis, kann jeder User selbst ändern im Homeverzeichnis, kann auch jeder User selbst ändern Über diese Dateien wird die Systemumgebung festgelegt (wichtige Umgebungsvariablen, Aliase). Durch den Alias kann man einem Kommando in Verbindung mit ganz bestimmten Optionen einen neuen "Kurznamen" zuweisen. Beispiel: alias ll "ls -al"
Löschen von Dateien und Verzeichnissen Ein weiterer "wichtiger" Alias, der bei uns durch die /etc/.cshrc gesetzt wird, ist alias rm "rm -i"
damit interaktiv gelöscht wird Über die Option -i für "interaktives Löschen" wird das Kommando rm entschärft, man muss noch einmal bestätigen, dass man wirklich die Datei löschen will. rm dateiname
rmdir directoryname
löscht Dateien unwiederbringlich, standardmäßig ohne Rückfrage löscht ein Verzeichnis, das leer sein muss Das Kommando rm besitzt zwei weitere, sehr "effektive" Optionen: rm -r löscht rekursiv alle Unterverzeichnisse und deren Dateien, arbeitet aber interaktiv und fragt besonders bei schreibgeschützten Verzeichnisses und Dateien nach. rm -f löscht sofort alle Dateien in einem Verzeichnis, egal ob sie schreibgeschützt sind, ohne nachzufragen (inaktiviert die i‐Option). Die "tödliche" Kombination aus beiden Optionen und dem Wild Card‐Zeichen * rm -rf * kann deshalb sehr schnell im Homeverzeichnis Platz schaffen und sollte deshalb nur mit äußerster Vorsicht verwendet werden 4 Brückenkurs UNIX‐Einführung Fakultät Informatik, HFU Anzeigen von Dateiinhalten more file
less file
cat file1 file2 ...
cat file1 file2 >file3
tail –f logfile
zeigt einen Dateiinhalt von file seitenweise auf dem Bildschirm an. zeigt einen Dateiinhalt ebenfalls seitenweise an, man kann in der Datei vor‐ und zurückspringen und nach Begriffen suchen. kann den Dateiinhalt von mehreren Dateien anzeigen, macht keine seitenweise Anzeigeformatierung file3 wird aus file1 und file2 gebildet Die letzten Zeilen von logfile werden angezeigt, tail
wird nicht beendet (zur Beobachtung von Logfiles). Aufgabe 2: Mit dem Kommando cat und der Ausgabe‐Umlenkung kann von der Konsole direkt in eine Datei geschrieben werden. Die Dateieingabe muss dann über Ctrl d (Setzen des EOF = End of File bzw. EOD = End of Data) abgeschlossen werden. a) Schreibt mit Hilfe von cat einen beliebigen Text in eine Datei, kontrolliert anschließend, ob die Datei vorhanden ist und tatsächlich den gewünschten Inhalt enthält. b) Nun ergänzt über cat diese Datei durch weiteren Text. Was ist zu beachten? Kontrolliert eure Eingabe. Aufgabe 3: Mit dem Kommando touch file "berührt" man eine Datei, das bedeutet, dass das Modifikationsdatum auf die aktuelle Zeit gesetzt wird. Existiert die Datei noch nicht, so wird sie angelegt, enthält aber keinen Inhalt. a) Legt über touch eine Datei an und kontrolliert ihr Vorhandensein und ihre Rechte. b) Zeigt den Inhalt von ersteSchritte an. Welche Datums‐ und Zeitangaben seht ihr bei den Dateieinträgen? Nun "berührt" das Verzeichnis Verzeichnis2. Kontrolliert abermals die Datums‐ und Zeitangaben. c) Löscht alle "leeren" Dateien (Dateien der Länge 0). Beschreibung aller Kommandos in den Manpages (manual pages) Die Manpages ruft man auf über man kommandoname
Kurzbeschreibung der verfügbaren Optionen eines Kommandos über kommandoname --help
(nicht standardisiert)
Fakultät Informatik, HFU Brückenkurs UNIX‐Einführung 5 Aufgabe 4: Ruft die Manpage des Kommandos ls auf und seht euch danach die Kurzbeschreibung der verfügbaren Optionen dazu an. Dateirechte Jede Datei und jedes Verzeichnis hat bestimmte Rechte, über die das System weiß, wer was damit machen darf. Die Rechte bekommen wir über das Kommando ll bzw. ls –l angezeigt: ll ersteSchritte/Verzeichnis2/
total 4
-rw-r--r-1 mai users
-rw-r--r-1 mai users
lrwxrwxrwx
1 mai users
drwxr-xr-x
2 mai users
51
0
9
72
Sep
Sep
Sep
Sep
15
15
15
15
10:09
11:14
11:19
10:12
beispiel1
leereDatei
Name2 -> beispiel1
verz3
Der erste Wert bezeichnet den Dateityp: - d l b / c normale Datei Verzeichnis Link (Verweis auf eine andere Datei / Verzeichnis) für Gerätetreiber / devices Dann kommen die Rechte des Users (u), der Gruppe (g) und aller anderen (o). Die Rechte werden in der Reihenfolge rwx angezeigt, das Minuszeichen zeigt an, dass das entsprechende Recht nicht gesetzt ist: r w x read write execute Die Rechte können auch in oktaler Form benannt werden, ein gesetztes Recht entspricht einer binären Eins, ein nicht gesetztes Recht eine Null. Beispiel: u
g
o
u: Besitzer, g: gruppe, o: other
d rwx r-x r-x
2 mai users
72 Sep 15 10:12 verz3
(default-Rechte für Verzeichnisse))
111 101 101 = 7558
- rw- r-- r-1 mai
110 100 100 = 6448
users
0 Sep 15 11:14 leereDatei
(default-Rechte für Dateien)
Minimale Rechte für Verzeichnisse: r w x Verzeichniseinträge können angezeigt werden, wenn zusätzlich das x‐Flag gesetzt ist. Dateien können angelegt und gelöscht werden. Man kann mit cd in das Verzeichnis wechseln. Verzeichniseinträge können angezeigt werden, wenn zusätzlich das r‐Flag gesetzt ist. 6 Brückenkurs UNIX‐Einführung chmod
chmod
chmod
chmod
700 directory
744 file
u+x file
go-x directory
chmod a+x file
Fakultät Informatik, HFU Rechte‐Vergabe über die Oktal‐Werte für ein Verzeichnis Rechte‐Vergabe über die Oktal‐Werte für eine Datei Execute‐Recht für Dateibesitzer setzen Execute‐Recht des Verzeichnisses für Gruppe und andere entfernen Execute‐Recht der Datei für alle setzen (Besitzer, Gruppe, Other) Default‐Rechte festlegen Die Maximal‐Rechte in oktaler Form für Verzeichnisse sind 777 und für Dateien 666, da die meisten Dateien nicht ausgeführt werden und deshalb keine Execute‐Rechte brauchen. Aber alle ausführbaren Dateien (Shell‐Skripte, Programme) brauchen Execute‐Rechte. In der /etc/profile werden Standardprofil‐Einstellungen hinterlegt. Die Maximal‐Rechte bei der Generierung von Verzeichnissen und Dateien werden hier für alle Benutzer des Systems über den Befehl
umask maskiert. Der Oktal‐Wert der Generierungsmaske wird von den Maximal‐Rechten abgezogen. umask 022
Verzeichnis: 777 – 022 -> 755 Datei: 666 – 022 -> 644 Ist eine andere Rechte‐Maskierung bei der Dateierzeugung gewünscht, so kann man in seiner .cshrc
im Homeverzeichnis ein entsprechendes umask eintragen. Aufgabe 5: Verändert die Rechte eurer Dateien und Verzeichnisse •
•
über die entsprechenden Oktal‐Werte und über eine beliebige Angaben in der Form ugo±rwx Aufgabe 6: Um für die aktuelle Shell die File‐Generierungsmaske neu zu setzen, könnt ihr den umask‐Befehl direkt auf der Konsole absetzen. Definiert eine andere Maske als 022 und testet sie, indem ihr Dateien und Verzeichnisse anlegt und das Ergebnis überprüft. Aufgabe 7: Schreibt ein Mini‐Shell‐Skript folgenden Inhaltes echo "Jetzt ist `date`" (Tipp: cat > heute, Eingabe der Zeile, Eingabe abschließen mit Ctrl d) Führt das Programm aus über die Konsolen‐Eingabe ./heute
Es wird zu einer Fehlermeldung kommen, weil die Rechte nicht stimmen. Ändert diese so ab, dass das Programm läuft. Fakultät Informatik, HFU Brückenkurs UNIX‐Einführung 7 Kopieren / Verschieben von Dateien cp file1 file2
cp file1 [file2 ...]verzeichnis2
mv file1 file2
mv file1 [file2 ...] verzeichnis2
kopiere file1 nach file2 kopiere eine oder mehrere Dateien nach verzeichnis2 benenne file1 in file2 um verschiebe eine oder mehrere Dateien nach verzeichnis2 Nachtrag zu Namenskonventionen Dateiendungen sind unter UNIX kein Muss, sondern ein Kann •
•
•
•
•
file.txt file.sh file.pl file.tar file.tar.gz Textfile Shell‐Skript Perl‐Skript mit tar gepackte Datei mit tar gepackte Datei, die zusätzlich mit zip komprimiert wurde Suchen nach bestimmten Dateien oder Dateien mit bestimmten Inhalten sucht den angegebenen text in allen Dateien des aktuellen Verzeichnisses, zeigt bei Auffinden die gesamte Zeile an, in der text auftritt, bei mehreren Dateien zusätzlich den Dateinamen zeigt zusätzlich die Zeilennummer an, in der text auftritt zeigt nur den / die Dateinamen an, die text enthält / enthalten durchsucht ab dem aktuellen Verzeichnis (.) den Verzeichnisbaum abwärts nach allen Dateien mit der Endung .java grep "text" *
grep –n "text" *
grep –l "text" *
find . –name "*.java"
Der find‐Befehl ist ein sehr mächtiger Befehl (siehe man find), der auch mit weiteren Befehlen über die Option –exec gekoppelt werden kann: find ~ -exec grep -l "suchmuster" {} \;
durchsucht das gesamte Homeverzeichnis nach Dateien, die suchmuster enthalten und zeigt deren Pfad und Namen an. Identifikationen who
whoami
id
zeigt an, welche Benutzer an der Workstation eingeloggt sind. gibt den eigenen Benutzernamen aus zeigt die eigene user id (uid) und group id (gid) an. 8 Brückenkurs UNIX‐Einführung Fakultät Informatik, HFU Prozess‐Identifikationen Wird ein Prozess gestartet, so bekommt er eine Prozess‐ID. Diese Prozess‐ID und mit dem Prozess verbundene Infos kann man über das Kommando ps (process status) anzeigen. ps
ps -e
ps -f
ps auxww
ohne Optionen zeigt es nur die eigenen Prozesse mit PID, TTY, Time und CMD‐Name an. zeigt alle Prozesse mit den oben genannten Parametern an. zeigt die eigenen Prozesse mit UID, PID, PPID, C, STIME, TTY, TIME, CMD an. nur unter LINUX: bringt weiterführende Infos zu allen Prozessen als die Option –f. Angezeigte‐Parameter von ps UID PID PPID C STIME TTY TIME CMD User‐ID bzw. Login‐Name des Prozessbesitzers Prozess‐ID, über diese ID kann der Prozess gekillt werden ID des Parents‐Prozesses, der diesen Prozess gestartet hat Prozessor‐Auslastung für Scheduling Startzeit des Prozesses Terminal, von dem der Prozess gestartet wurde gesamte Ausführungszeit des Prozesses bis zu diesem Zeitpunkt Kommando‐Name des Prozesses Prozesse abbrechen Abbruch über Ctrl c Die meisten eigenen Prozesse laufen im Vordergrund. Will man einen Vordergrund‐Prozess beenden, so gelingt das in den meisten Fällen durch Drücken von Ctrl c. Abbruch über das Kommando kill processID Hintergrundprozesse geben ihre Prozess‐ID nach dem Start zurück. Die Prozess‐ID kann man, wie auf der vorhergehenden Seite beschrieben, auch über das Kommando ps herausfinden. Über kill processID
wird das Standardsignal SIGTERM an den Prozess gesendet, der den Prozess beendet. Manche Prozesse reagieren nicht auf das Standardsignal SIGTERM. Sie lassen sich nur über das Signal SIGKILL mit der Signalnummer 9 beenden: kill -9 processID
Signal SIGKILL beendet den Prozess (Datenverluste möglich) Suchen einer Prozess‐ID zum Abbrechen über das Kommando kill: •
•
•
Eine weitere Konsole öffnen, den Prozess suchen über ps –ef | grep loginname | grep cmd
-> processID, den Prozess beenden über kill -9 processID