Unix-Fragen

MarcDK

Banned
Registriert
Mai 2001
Beiträge
3.559
Hi Leute!

vielleicht kennt sich ja jemand etwas mit Unix aus. Denn in der Uni haben wir gerade das Fach "PPE - Programmier-Praktische Einführung" und da tauchen diverse Fragen auf einigen Übungszetteln auf die ich irgendwie nicht zulösen weiß und die anderen aus unserem Mediengestaltungssemester ( was sollen WIR eigentlich in PPE?! ) checken da auch nicht mehr als ich.

Ok, hier mal ne Frage:

Aufgabe 37:

Angenommen, man hat eine Datei mit dem Namen Ñ-fì erzeugt (z.B. mit der Speicherfunktion
von xedit). Wie kann man diese Datei wieder lˆschen?

Aufgabe 38:

Gegeben sei dieses zweiteilige Suchmuster:
.[~.]* ..?*
Geben Sie eine pr‰zise Beschreibung (keine Beispiele) aller Dateinamen an, die dadurch erfaflt werden.
In welchem Sinne ist dieses Muster nicht Ñperfektì? (Hinweis: Ausprobieren mit dem Kommando
echo!) Gibt es ein k¸rzeres Suchmuster, das denselben Zweck erf¸llt?

Aufgabe 39:

Mit welchem Suchmuster kˆnnen alle Dateien erfaflt werden, deren Namen von zwei #
begrenzt werden, wie etwa #TEST#? Was ‰ndert sich, wenn das erste und letzte Zeichen statt #
jeweils ein Fragezeichen ist? Wie sieht das Suchmuster aus, wenn an beiden Stellen wahlweise ein #
oder ein ? eingesetzt werden darf?


Hat jemand ne Idee? Vielleicht auch kurz mit Erkläung?

Bei 37. habe ichg schon so etwas wie

rm "-f"

ausprobiert, aber ging nicht.


Zur 38.: Also ich verstehe zwar was die von mir wollen aber was bedeuten die Klammern bzw. was geben die Klammern bei der Suchanfrage an.


 
zu 37) Wie heißt die Datei die gelöscht werden soll? Bei meinem Konqueror liest sich der Dateiname, den du angegeben hast wie "Großes N mit Tilde darüber, Bindestrich, klein f, klein i mit einem Komma an der Stelle wo der i-Punkt sein sollte". Ñ-fì.

zu 38) Das fällt jetzt in den Bereich "reguläre Ausdrücke": (unsichere Antwort) .[~.]*..?*
Alle Dateien, die mit einem Punkt beginnen, gefolgt von einer Tilde oder einem Punkt. Der Rest des Dateinamens enthällt irgendwo die Kombination ..?.
Wobei ? für ein einzelnes beliebiges Zeichen stehen kann.
Der * steht für beliebig viele Zeichen.

Kürzer würde ich dieses Muster verwenden: .[~.]*..* Es fehlt nur das ? , das das ? im * enthalten ist.

zu 39)
Mit welchem Suchmuster k?nnen alle Dateien erfaflt werden, deren Namen von zwei # begrenzt werden, wie etwa #TEST#?
Suchmuster: #*# (zwischen den # beliebig viele Zeichen)
Was ?ndert sich, wenn das erste und letzte Zeichen statt # jeweils ein Fragezeichen ist?
(Muster sähe dann so aus ?*?) Das ist Blödsinn, da dies dieselbe Bedeutung hat wie * .
Wie sieht das Suchmuster aus, wenn an beiden Stellen wahlweise ein # oder ein ? eingesetzt werden darf?
Suchmuster wäre [#?]*[#?]
Auch das ist Bullshit, denn # ist Teilmenge von ?, somit kann man dies reduzieren auf ?*? .

Tja, reguläre Ausdrücke sind nicht einfach. Ich habe selbst sehr wenig Übung damit.
Lies dir mal dies hier durch http://www.tu-bs.de/rz/doku/unix-pages/regausdr.html . Dies gilt auch für andere Unix-Systeme.
 
zu 37) Oh, irgendwie hat da was beim kopieren und einfügen aus Adobe Acrobat nicht geklappt. Die Datei heißt "-f".

Zu löschen ist sie aber nur mit

rm ./-f

weil

rm -f

ja nicht geht. Das hat auch lange gedauert, bis ich das gecheckt habe!
 
zu 39)
wenn du Dateien suchst die mit einem "?" anfangen und auch mit einem "?" enden, dann musst du bei der Suche die "?" in Hochkoma setzen, weil das "?" als Platzhalter steht. Dann sieht die Abfrage so aus:
Code:
user$ echo '?'*'?'
Wenn du nur ?*? eingibst, dann werden sämtlich Dateien im aktuelen Verzeichnis gelistet.
Ist ja auch logisch, da jede Datei mit einem Zeichen anfängt und auch wieder aufhört, und da das "?" als Platzhalter dafür steht.
 
Alles klar. Stimmt, hbe ichgerade mit CygWin ausprobiert. Danke!
 
.[~.]*..*

. genau ein Zeichen muss vorkommen
[ Anfang der Zeichendefinition
~. es dürfen die Zeichen ~ und . vorkommen
] Ende der Zeichendefinition
* kein oder beliebiges Zeichen
.. 2 Zeichen müssen vorkommen
* kein oder beliebiges Zeichen

das wäre meine Erklärung des regulären Ausdrucks, aber die sind halt nicht so leicht zu lesen :rolleyes:
 
Leute, danke nochmal!

Und hier sind noch ein paar Fragen die mich interessieren:

wo liegt der Unterschied zwischen dem Befehl "which" und "whatis" ?
 
Versuche doch mal unter Linux/Unix die beiden Befehle "man which" und "man whatis".
Dann bekommst du die Handbücher (man = Abk. für manual) zu den Befehlen.

Aber weil's du bist :)

which:
Sucht in den Verzeichnisen in der PATH-Variablen nach der ausführbaren Datei und zeigt dann das entsprechende Verzeichnis an.

Bsp: "which echo" liefert /bin/echo

whatis:
Durchsucht die Indexdatenbank nach Kurzbeschreibungen

Bsp: "whatis echo" liefert "echo (1) - display a line of text"
 
Ok Leute, dann kommt jetzt der Hammer:

Wie kann man mit den bzw. einer Auswahl der bisher eingef¸hrten Unix-Kommandos (z.B. cut,
head, ps, sort, tail, tee, uniq und wc) die Anzahl der verschiedenen Benutzer ermitteln, unter
deren Identit‰t aktuell auf dem Rechner Prozesse laufen?
Wie kann dieses Konstrukt so abgewandelt werden, dafl statt der Anzahl der Nutzer die Liste der Top
5 Prozefleigent¸mer wie in diesem Beispiel
116 root
42 juser
17 bnutzer
12 foobar
3 daemon
angezeigt wird? Dabei gibt die Zahl in der ersten Spalte die Anzahl der Prozesse an, die dem Benutzer
in der zweiten Spalte gehˆren.


Ok, ne Idee? Genial: Ich bin gerade in der Uni eingelogt und meine Kollegen haben Tutorium aber ich habe leider verpennt. Und wenn wir diese Lösung in den nächten Minuten bekommen, können wir echt glänzen :)
 
Moin,
versuch mal who, finger oder last. Die Manpages dazu sollten weitere Parameter erklären.

Das ist das, was mir so spontan einfällt.
 
danke erstmal!

Ne, die anderen Aufgaben sind ja auch kein problem! Aber bei dieser z.B. wird es schwieriger.

Ok, "finger" listet also erstmal die User die auf dem System eingelogt sind. Alles klar. Sieht das dann so aus:

finger | .....

Denn so etwas kenne ich aus der Vorlesung. Man müsste also das, was das Program ausgibt irgendwie "filtern" können.

@ Boron

Also der Studiengang heißt Mediengestaltung. Wir sitzen normalerweise in vor unseren Rechnern und machen Dinge mit Flash und Photoshop. Aber die Leute von der Uni haben uns eben auch in diesen Kurs reingesetzt. Wir müssen den nur irgendwie überstehen. Aber es ist ja auch sehr interessant, was wir da machen. Das sieht im Moment so aus, dass ich hier sitze mit cygwin(.com) und versuche der Sache auf die schliche zu kommen.

Eine andere Aufgabe war z.B. der Unterschied zwischen ls und ls | cat. Es ist doch nur so, dass das Pipe-Zeichen | eine Art Verknüpfung darstellt, oder? Also das was ls ausgibt wird an cat weitergeleitet? Oder ist das so nicht richtig?
Es wäre echt nett, wenn ihr mir etwas helfen könntet. Denn sonst verliere ich bald den Boden unter den Füssen. So richtig nett wäre es natürlich, wenn ihr mir sozusagen nicht die fertigen Lösungen liefert sondern Tipps zur Lösung.

Ich weiß, ihr seid ja nicht meien tutoren aber helfen würde es mir (gerade im Moment) enorm!
 
Bei Pipes wird die Ausgabe des ersten Kommandos als Eingabe für das zweite Kommande verwendet.
Statt Pipes können zur Ein - und Ausgabeumleitung auch sogenannte FIFO (First in first out) Dateien verwendet werden. Diese realisieren die Idee einer Pipe in Form einer Datei. Sie sind zwar viel umständlicher als Pipes, machen aber deutlich was das Zeichen | bewirkt.
Code:
user$ mkfifo fifo
user$ ls -l > fifo &
user$ less < fifo
disclaimer:
erst wird eine fifo Datei eingerichtet, dann ls als Hintergrundprozess (&) gestartet und die Ausgabe in eine Datei umgeleitet (> fifo). Anschliessend wird mit less die Datei wieder auf dem Monitor angezeigt.

Frei nach Kofler, Linux Installation, Konfiguration und Anwendung.

hth
 
Ah! Du solltest Tutor werden. Das heißt also, dass die Ausage von ls bei ls | cat einfach an cat weitergeben wird. Was ich jetzt noch nicht verstanden habe, warum es den Befel "cat" überhaupt gibt.

Und für die Sche mit den Top 5 der User die eingelogt sind:

Ich versuche eine Kette zu machen bei der so vorgegangen wird, oder? :

[Prgramm, dass alle Useranzeigt] | nach Userzahlen filtern | die sortieren | cat

Aber wie bringe ich die Namen der User zusammen?

Aber danke für die sehr gute Erklärung!
 
Also,
ls entspricht in etwa* dem DOS Befehl Dir, er listet alle Dateien im aktuellen Verzeichnis auf.
cat dient dazu, den Inhalt einer Textdatei anzuzeigen. Oft wird cat dazu verwendet aus mehreren Textdateien eine einzige zu machen, sie zu verbinden.
Code:
user$ cat seite*.tex > buch.tex
macht aus den Dateien seite1.tex, seite2.tex, seite3.tex die Datei buch.tex
cat hat also sehrwohl seine Daseinsberechtigung. ;)

zu 2)
[Programm, dass alle Useranzeigt] | nach Userzahlen filtern | die sortieren | > user.txt**


*ls kann natürlich noch viel mehr als der Dir-Befehl unter DOS
** die Endung kannst du eigentlich auch weglassen, das >-Zeichen bedeutet, das die Ausgabe in eine Datei umgeleitet wird.
 
Also bei der Aufgabe mit dem Auflisten der User komme ich nicht weiter. Ich habe keine Ahnung, wie man das machen soll. Ok, mit "finger .local" zeigt er ja alle User an die in dem Moment auf der Maschine eingelogt sind aber was dann?

Und ne neue Aufgabe, die auf dem selben Zettel ist:

Schreiben Sie ein kleines Shellskript, indem Sie die folgenden drei Zeilen als Datei stdueb abspeichern und diese Datei
per chmod ausführbar machen.

#!/vol/local/bin/rc
echo STDERR >[1=2]
echo STDOUT


Zur Pr¸fung kˆnnen beide Kan‰le in unterschiedliche Dateien gelenkt werden:
juser@vino ./stdueb > stdueb.out >[2] stdueb.err
Mit welchen Ausgabeumlenkungen kann man nun die beiden Kan‰le vertauschen, sodafl ÑSTDERRì
in stdueb.out erscheint und ÑSTDOUTì in stdueb.err?

Hinweis: Zur ‹berpr¸fung empelt es sich, den Aufruf von stdueb samt der notwendigen Umlenkungsschritte
mit einem Paar geschweifter Klammern zu umgeben (startet eine Subshell) und das
Ergebnis dann wie oben gezeigt in die beiden Dateien umzulenken.


Heul! Ok, das mit dem Script habe ich gemacht aber kann mir mal jemand das Script erklären? Ich habe keine Ahnung, was das Script überhaupt macht. "rc" scheint ja so eine Art neue shell zu sein, wenn ich das richtig verstanden habe!

Hilfe!
 
Ich glaube jetzt ist der Zeitpunkt günstig dich an ein anderes Forum zu verweisen.
Unter http://www.linuxforen.de/ gibt zum Teil knallharte Shell- und Scriptleute. Die könnten wahrscheinlich auch tote Menschen wieder ins Leben scripten.

Versuche es da mal. Mir sind deine letzten beiden Aufgaben definitiv zu schwer.
 
Zurück
Oben