// Author: Sebastian Magnus Aufgabe 1 (Unix Basics, 2 Punkte) 1. Der Suchpfad fur Kommandos wird unter Unix durch eine bestimmte Environment-Variable fest- gelegt. Wie geben Sie den Wert dieser Variablen aus? "env" Gibt alle gesetzten Umgebungsvariablen inklusive des Kommandosuchpfades an. "$PATH" Gibt nur den Suchpfad an. Environment- Variablen sind Variablen, die auf Betriebssystemebene gesetzt werden und für alle Programme sichtbar sind. 2. Lesen Sie sich die Man-Page zu ls durch und geben Sie den Befehl an, mit dem der Inhalt des Verzeichnisses /usr/bin aufsteigend der Größe nach sortiert aufgelistet wird (also mit der größten Datei zuletzt). "man ls" Gibt die man-page zu ls aus. in der man-page findet man eine Dokumentation des Syntax und der Funktionsweise eines Programmes oder Befehls. Da die meisten Programmierer ihre Programme mit diesem Nützlichen Eintrag ausstatten, kann man sich so shcnell in neue Befehle reinfinden. auch zu C-Befehlen gibt es man-pages, die z.B. mit "man scanf" betrachtet werden können. Man verläßt die man-page mit "q". "ls /usr/bin -lsr" ls /usr/bin weist an, den Inhalt von /usr/bin aufzulisten. - Gibt den Beginn weiterer Parameter an. dabei streht l für zusätzliche Informationen, um die Größe der Dateien auch sehen zu können, s steht für sortieren nach Größe, und r steht für umgekehrte Reihenfolge (also aufsteigend). 3. Machen Sie mit Hilfe des Kommandos cd das Verzeichnis /usr/include zu Ihrem aktuellen Ar- beitsverzeichnis (auch ?current working directory? oder CWD genannt). Geben Sie nun erneut das Kommando an, mit dem der Inhalt des Verzeichnis /usr/bin aufsteigend der Größe nach sortiert aufgelistet wird, diesmal allerdings unter Verwendung eines relativen Pfadnamens. "cd /usr/include" Wechselt in das Verzeichnis "/usr"include"; Es ist nun die CWD. "ls ../usr/bin -lrs" In Aufgabenteil 3 wurde ein sogenannter absoluter Pfad verwendet. das / gab an, daß das Verzeichnis unabhängig von der CWD im Root beginnt, von da aus nach /usr verzweigt und zuletzt nach /bin verzweigt. Ein relativer Pfadname beginnt hingegen in der CWD und sucht von hier aus seinen Weg. mit ".." weisen wir an, die CWD "/usr/include" um einen Schritt zu verlassen, sind also in einem Zwischenschritt in "/usr". Dannach wird von dort aus in "/bin" gewechselt werden und der Inhalt wird ausgegeben. 4. Mit dem Kommando less Dateiname wird der Inhalt einer Textdatei seitenweise angezeigt. Wie lautet demnach das Kommando, um den Inhalt der Datei /etc/fstab seitenweise ausgeben zu lassen, wiederum unter Verwendung eines relativen Pfadnamens. Befindet man sich weiterhin in /usr/include, so lautet das Kommando "less ../../etc/fstab". Aufgabe 2 (Symbolische Links und Permissions) 1. Erstellen Sie in Ihrem Home-Verzeichnis ein Unterverzeichnis names foobar und machen Sie dieses neue Verzeichnis zu Ihrem CWD. cd ~ mkdir foobar cd foobar Zunächst wird das Home- Verzeichnis mit cd ~ zur CWD gemacht. Hierin wird mit mkdir das neue Verzeichnis angelegt. Mit cd foobar wechseln wir dort hinein. 2. Erstellen Sie einen symbolischen Link, der aus diesem Verzeichnis auf die Datei foo.txt in Ihrem Home-Verzeichnis zeigt. (Hinweis: Achten Sie darauf, dass Sie tatsächlich einen symbolischen Link erzeugen.) ln -s ~/foo.txt ./ Analog zu Blatt 1. ./ steht für die CWD. 3. Fugen Sie mit Ihrem Lieblingseditor ein paar Leerzeilen zu der Datei foo.txt im Verzeichnis foobar hinzu. Hat sich nun die Datei im Home-Verzeichnis geändert? Ja, öffnet man einen Symbolischen Link, ändert ihn und speichert dies ab, so ändert sich auch die originale Datei. Grund dafür ist, daß ein Link keine Kopie der Datei ist, sondern ein Verweis auf dieses. Es existiert aber nur eine Datei. 4. Ändern Sie die File-Permissions von foo.txt im Home-Verzeichnis so, daß der ?owner? nicht schreiben darf und ?others? nicht lesen durfen. chmod u-w,o-r foo.txt chmod weist an, die Permissions zu ändern. Als Parameter erwartet es zuerst die Permissionangaben, dannach die Datei, auf die sich bezogen wird. die Parameter werden zusammengesetzt aus einem Zeichen u,g oder o (user, group, others), ohne Leerzeichen getrennt einem + oder - (geben, entziehen) und ohne Leerzeichen getrennt r, w oder x (lesen, schreiben, ausführen). Sollen mehrere Rechte gesetzt werden, müssen die Parameter durch , getrennt werden. Alternativ kann die Zahlencodierung der Rechte direkt übergeben werden. 5. Kann jetzt die Datei foo.txt im Verzeichnis foobar vom Besitzer noch modi?ziert werden? Nein, da der Besitzer darf die Datei nun nicht mehr modifizieren, da er sich selbst das Recht, sie zu überschreiben, entzogen hat. Das macht z.B. Sinn, um wichtige Dateien vor versehentlichem Überschreiben zu schützen. Er kann die Datei allerdings öffnen, ändern und unter anderem Namen speichern, oder er kann sich das Schreibrecht neu erteilen. Aufgabe 3 (Unix) Machen Sie nun das Verzeichnis /usr/include zu Ihrem CWD. cd /usr/include 1. Finden Sie unterhalb des CWD alle Dateien mit der Endung .h . find *.h 2. Andern Sie jetzt die Anweisung, so daß nur die jenigen Dateien mit der Endung .h angezeigt werden, deren Größe kleiner als 3 kB ist. find *.h -size -3k -ls -size gibt an, daß nach Größe ausgewählt werden soll, -3k setzt die Größe auf 3k, wobei das - anzeigt, daß alle kleineren als 3k ein Ergebnis liefern. -ls zeigt zusätzliche Angaben äquivalent zu ls -l an. 3. Suchen Sie jetzt unterhalb des CWD alle Dateien, die input im Namen enthalten. find ./ -iname '*input*' -ls Der Unterschied zum vorherigen Programm liegt darin, daß hier statt eines Dateinamens ein von -iname gekennzeichneter Platzhalter eingesetzt wurde. Der Name soll input enthalten. Die Wildcards * geben an, daß beliebige Zeichen davor und dannach kommen dürfen. 4. Führen Sie den Befehl, der alle Dateien mit der Endung .h auflistet, noch einmal aus. Leiten Sie dieses mal aber die Ausgabe in eine Datei namens header-files in Ihrem Home-Verzeichnis um. Betrachen Sie anschließend den Inhalt der Datei. find *.h -size -3k -ls << ~/header-files << leitet die Standartausgabe, die normalerweise der Bildschirm ist, in eine Datei um. Dannach folgt der Pfad auf die Datei. Analog kann mittels >> die Standarteingabe von einer Datei gelesen werden statt von der Tastatur.