Linux Modul in der schule fragen

Warum Debian und/oder eine seiner Spielarten? Was muss ich vorher wissen? Wo geht es nach der Installation weiter?
Antworten
Benutzeravatar
sommernacht
Beiträge: 13
Registriert: 16.09.2021 09:11:47

Linux Modul in der schule fragen

Beitrag von sommernacht » 16.09.2021 10:11:45

Hallo zusammen
Wir haben in der Schule das Linux Modul manche dinge verstehe ich ganz gut bei manchen Befehlen bin ich Wochen hinterher.
Könnte mir jemand ev helfen bei der Losung suche. Es sind Terminal Grundlagen. mir ist bewusst das man Googlen kann und es auch man oder -- help gibt.

es scheitert zur zeit an der Zusammensetzung der Befehle ein Beispiel, einem User ein neues Verzeichnis geben usermode -d kommt nun der name oder das Verzeichnis ...... no plan :(


für mich nicht lösbare aufgaben

Code: Alles auswählen

Quellcode Analysieren 

Im Verzeichnis apollo-11/Luminary099 findest du den Quellcode des „Lunar Modules“ (Kapsel, welche auf dem Mond gelandet ist) der Apollo 11. Der Quellcode ist in AGC geschrieben. Beantworte die folgenden Fragen mit Hilfe der dir bekannten Shell Befehle. 

Wie viele AGC Dateien beinhaltet dieses Verzeichnis?.....................  
.....................................................................................................  

  

Mit welchem Befehl kannst du alle AGC Dateien zusammenfügen und in der Datei loesungen/apollo-all.agc ablegen?.......................................................................................  
.....................................................................................................  

  

Wie oft kommt die Zeichenfolge „TURN OFF“ in den AGC Dateien (bzw. der zusammengefügten Datei) vor?     
.....................................................................................................  

  

Wie viele Mal in Zeilen, welche nicht mit einem # beginnen? (optional)  
.....................................................................................................  

Weiter Probleme sind

Ich muss dem User Fritz
eine neue Gruppe zuweisen
eine neue Primäre Gruppe
ein neues Home Verzeichnis
eine neue Shell
(/bin/bash)


debianforum user --help pls :)
my cat has escaped

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Linux Modul in der schule fragen

Beitrag von hikaru » 16.09.2021 10:52:11

Zunächst mal Hochachtung für die Chuzpe, sich in einem Forum anzumelden um zu fragen: "Kann jemand meine Hausaufgaben machen?" ;)
sommernacht hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 10:11:45
einem User ein neues Verzeichnis geben usermode -d kommt nun der name oder das Verzeichnis ...... no plan :(
Das Kommando heißt usermod (ohne 'e' am Ende). Manpages können gern mal etwas verwirrend sein, aber an diesem Punkt ist sie recht verständlich, finde ich:

Code: Alles auswählen

SYNOPSIS
       usermod [options] LOGIN
[..]
OPTIONS
       The options which apply to the usermod command are:
[..]
       -d, --home HOME_DIR
           The user's new login directory.

           If the -m option is given, the contents of the current home directory will be moved to the new home directory, which is created if it does not already exist.
Falls da noch etwas unklar ist, frag gern nochmal nach!

Der Rest deiner Aufgaben ist im Grunde auch einfach zu lösen, wenn man die passenden Werkzeuge kennt und ihre Arbeitsweise versteht. Überhaupt zu wissen, welche Werkzeuge man für eine Aufgabe braucht, setzt etwas Erfahrung voraus. Daher als Hilfestellung eine Liste der Werkzeuge, die ich für die dir gestellten Aufgaben nutzen würde (oft gibt es mehrere Lösungswege):

Code: Alles auswählen

cat
grep
ls
usermod
wc
Der Rest sollte sich anhand der Manpages selbst erarbeiten lassen. Die Lektüre von man usermod lohnt sich in diesem Fall übrigens besonders.
Für eine deiner Aufgaben wirst du mehrere Kommandos kombinieren müssen. Die Einzelschritte sind aber für sich genommen sehr einfach.

Auch hier gilt:
Falls du konkrete Fragen hast, frag nach!

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux Modul in der schule fragen

Beitrag von Meillo » 16.09.2021 11:09:41

Wenn diese Forenanmeldung bezwecken soll, dass du weniger lernen musst, dann ist es der falsche Weg. Wenn du aber hier bist, um mehr zu lernen und die Dinge besser zu verstehen, dann bist du sehr willkommen.
Use ed once in a while!

Benutzeravatar
sommernacht
Beiträge: 13
Registriert: 16.09.2021 09:11:47

Re: Linux Modul in der schule fragen

Beitrag von sommernacht » 16.09.2021 12:28:45

Danke für die Antworten ja ich bin da zum lernen . Vermutlich werde ich auch bei Debian bleiben.

Die Befehl kenne ich

cat
grep
ls
usermod
wc

aber ich kann sie nicht verknüpfen ich brauche Beispiele für die Analyse (ich denke ein wenig anders als andere Menschen !!!)
Ich brauche Lösungen um die Struktur zu sehen.

Ich verstehe zum Beispiel das ich mit Cat text1.txt >> text2.txt Dokumente zusammenfügen kann oder den Inhalt. Aber wie bitte soll ich 50 oder mehr zusammen fügen alle aufschreiben ist sicher der falsche weg.

Ich würde auch gerne gefühlt 100 Jahre mit dem usermod herum spielen damit ich es mir besser merken kann nur die zeit habe ich nicht.

Ich habe mir erhofft das man mir hier die richtige Reihenfolge oder Struktur aufzeigen kann.
Es geht nicht darum das einfach alles erledigt ist.

ich kann nicht verstehen wie so mir niemand (nicht nur hier im Forum ) einfach aufzeigen kann wie die Befehle im ganzen gehen.

zum Beispiel usermod -d Fritz /home/ordner/ordner usermod -d /home/ordner/ordner fritz .............???!!!
my cat has escaped

DeletedUserReAsG

Re: Linux Modul in der schule fragen

Beitrag von DeletedUserReAsG » 16.09.2021 12:35:21

sommernacht hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 12:28:45
ich kann nicht verstehen wie so mir niemand (nicht nur hier im Forum ) einfach aufzeigen kann wie die Befehle im ganzen gehen.
Ich erklär’s dir: es ist deine Hausaufgabe. Der Hintergrund ist, dass du es dir erarbeiten sollst – denn dadurch lernt man nunmal am besten. Auch du. Wir hingegen brauchen es nicht zu lernen, deswegen bringt es überhaupt nichts, wenn wir dir den fertigen Aufruf geben.

Aber ich verrate dir den konkreten Befehl, der dich hier weiterbringt: man usermod
sommernacht hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 12:28:45
aber ich kann sie nicht verknüpfen ich brauche Beispiele für die Analyse (ich denke ein wenig anders als andere Menschen !!!)
Ich brauche Lösungen um die Struktur zu sehen.
Auch da kann dir geholfen werden: https://tldp.org/LDP/Bash-Beginners-Gui ... Guide.html – exzellente Doku, mit vielen Beispielen zum Analysieren.

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Linux Modul in der schule fragen

Beitrag von hikaru » 16.09.2021 13:22:29

sommernacht hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 12:28:45
Ich verstehe zum Beispiel das ich mit Cat text1.txt >> text2.txt Dokumente zusammenfügen kann oder den Inhalt. Aber wie bitte soll ich 50 oder mehr zusammen fügen alle aufschreiben ist sicher der falsche weg.
Da hast du vermutlich recht. Aber wir wissen zu wenig über deine Aufgabe, um dir hier konkret helfen zu können.
Gerade bei einer Schulaufgabe (mit künstlich vereinfachter Struktur) wäre anzunehmen, dass du alle Dateien mit einem Muster erfassen kannst. Ich vermute, dass z.B. dies funktionieren könnte:

Code: Alles auswählen

cat *.agc > loesungen/apollo-all.agc
Aber ich weiß es nicht, da ich nicht weiß wie deine Dateien genau heißen und ob die Reihenfolge stimmen würde. Es wäre daher durchaus möglich, dass du alle Dateien einzeln angeben musst. Zumindest wäre das die Grundannahme in der realen Welt, außerhalb "schöner" Schulaufgaben.
sommernacht hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 12:28:45
Ich würde auch gerne gefühlt 100 Jahre mit dem usermod herum spielen damit ich es mir besser merken kann nur die zeit habe ich nicht.
Ausgehend von deinem geschätzten Alter hast du noch mindestens 20 Jahre mehr als ich um das zu lernen. Die ganzen alten Säcke hier und woanders haben ihr Wissen auch nicht an einem Nachmittag aus dem Internet gezogen.
Du hast sicher schon mal diesen ollen Spruch gehört: "Nicht für die Schule, sondern für das Leben lernen wir." So abgedroschen der auch ist, da ist was Wahres dran. Konkret auf deine aktuelle Situation umgemünzt bedeutet er, dass deine Aufgabe in Wahrheit nicht ist, die Lösungen zu den gestellten Aufgaben abzuliefern (das ist Pillepalle), sondern zu zeigen, dass du den Lösungsweg beherrschst*: Manpages verstehen und das Verstandene in die Praxis umsetzen.
Dieses Verständnis zu erlangen helfen wir dir gern. Aber wir werden dir keine fertige Lösung auf dem Silbertablett servieren, denn damit würdest du die eigentliche Aufgabe nicht lösen.
sommernacht hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 12:28:45
zum Beispiel usermod -d Fritz /home/ordner/ordner usermod -d /home/ordner/ordner fritz .............???!!!
Nochmal zurück zur Manpage:
Da steht zunächst:

Code: Alles auswählen

SYNOPSIS
       usermod [options] LOGIN
1. Du gibst also zuerst den Programmnamen an: usermod
2. Dann kommen die Optionen.
3. Dann kommt ein Bezeichner der sich LOGIN nennt.

Die Options werden weiter unten erklärt. In diesem Fall:

Code: Alles auswählen

       -d, --home HOME_DIR
           The user's new login directory.
Das bedeutet, dass du entweder den Schalter -d oder dessen Langform --home angibst und dann den Bezeichner HOME_DIR

Setzt man das in dieser Reihenfolge zusammen, dann kommt dieses generische Kommando heraus:

Code: Alles auswählen

usermod -d HOME_DIR LOGIN
Jetzt musst du nur noch die beiden Bezeichner passend ersetzen. Und aus deren Namen geht hoffentlich hervor, was jeweils eingesetzt werden muss.


*) Deswegen reiten z.B. Mathelehrer immer darauf herum, dass der Lösungsweg klar darzulegen ist, selbst wenn er dir offensichtlich erscheint. Denn in Wahrheit geht es nur am Rande darum, die korrekte Lösung abzuliefern, sondern darum, zu zeigen, dass du den Algorithmus verstanden hast.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux Modul in der schule fragen

Beitrag von Meillo » 16.09.2021 14:25:37

Ich verstehe das so, dass es gut waere, wenn wir erklaeren koennten wie man ueberhaupt Befehle in Unix aufruft und was fuer Moeglichkeiten es zum Kombinieren gibt.

Aus meiner Sicht fehlt es hieran noch:

- Globbing
- Ein-/Ausgabeumleitungen
- Pipelines und generell das Filter-Konzept

Und dann so ein paar Beispiele wie so Befehle und Pipelines typischerweise aussehen.


Eigentlich loesen sich all diese Hausaufgaben in der gleichen Weise:

1) Welche Befehle koennten passen: Liste von hikraru durchgehen und in den Manpages schauen ob sie passen
2) Welche Optionen der Befehle brauche ich vielleicht: Ebenfalls in der Manpage lesen
3) Schrittweise die Befehlszeile aufbauen, zuerst mal die Daten generieren/rausholen, dann wenn noetig Umformen/Filtern/Zaehlen/etc. bis das Ergebnis passt.


Beispiel:

Die Aufgabe lautet: Liste die drei groessen mp4-Dateien im aktuellen Verzeichnis absteigend auf.

1) Mit welchem Befehl kann die die Groesse von Dateien ermitteln? -- `du'
2) Brauche ich Optionen? (In der Manpage geschaut) Nein
3) Ausprobieren:

Code: Alles auswählen

$ du *.mp4
10912   Abdullah Ibrahim - Mannenberg-hiQ0uyqySBg.mp4
8736    Anna Ternheim - Black Sunday Afternoon-A-V-L5tTXjU.mp4
12224   Beth Hart and Joe Bonamassa- I'd Rather Go Blind-AnXgZZkPP14.mp4
6528    Bob Dylan - Blind Willie McTell (Original Release)-_uf5gi3E_rQ.mp4
21152   Bob Dylan - Sad-Eyed Lady of the Lowlands (Audio)-0c1NJPCN6nA.mp4
...
-- Okay, sieht schon mal gut aus, bloss dass sie nicht sortiert sind.
4) Wie kann ich sortieren? `sort'
5) Brauche ich Optionen? (In der Manpage geschaut) Ja, `-n' um numerisch zu sortieren.
6) Ausprobieren:

Code: Alles auswählen

$ du *.mp4 | sort -n
2336    The Beatles - I Am The Walrus-UKIs1J_nB4A.mp4
4192    Takida - What About Me-25MsL9apPOA.mp4
4384    Raidek - Magma-fYC2PSD5xqM.mp4
4928    The Small Glories - 'Sing' from Assiniboine & The Red-qfG_mRGJe-8.mp4
5952    The Kinks - The Village Green Preservation Society (Official Audio)-lc7dmu4G8oc.mp4
...
-- Ups, verkehrt herum, das sind die kleinsten.
7) Wie sortiere ich absteigend? (Manpage von sort) Ah, mit `-r'
8) Ausprobieren:

Code: Alles auswählen

$ du *.mp4 | sort -nr
76416   Pink Floyd - The Division Bell Full Album 1994-sUMJUWB1RJc.mp4
66144   The Rocky Horror Picture Show (full album)-Unl1MxubYN8.mp4
65440   Texted Version - Bob Dylan 2016 Nobel Lecture in Literature-3Zf04vnVPfM.mp4
40864   Runrig - Maymorning (Party on the Moor DVD)-mOr-8zyTD-g.mp4
31296   Lustre - Green Worlds-zUMutdbzLj4.mp4
...
-- Sieht gut aus, jetzt muss ich die Liste nur noch auf die ersten drei Zeilen begrenzen.
9) Welches Programm kann nur die ersten x Zeilen ausgeben? `head'
10) Welche Optionen brauche ich? (Manpage von head) Ah, `-n 3'
11) Ausprobieren:

Code: Alles auswählen

$ du *.mp4 | sort -nr | head -n 3
76416   Pink Floyd - The Division Bell Full Album 1994-sUMJUWB1RJc.mp4
66144   The Rocky Horror Picture Show (full album)-Unl1MxubYN8.mp4
65440   Texted Version - Bob Dylan 2016 Nobel Lecture in Literature-3Zf04vnVPfM.mp4
(Falls ich die Groesse noch weg haben wollen wuerde, wuerde ich es am Ende noch durch `cut -f2-' pipen, usw.)

Ich hoffe, das vermittelt dir ein bisschen wie man bei so Aufgaben vorgeht.

Wenn du das Pipes-and-Filters-Konzept verstanden hast, dann ist anfangs die Hauptschwierigkeit, zu wissen, welche Befehle es gibt und was diese tun. Aber dafuer hat hikaru dir ja schon eine Liste von Kandidaten geliefert. Damit solltest du das umsetzen koennen.
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Linux Modul in der schule fragen

Beitrag von hikaru » 16.09.2021 14:34:16

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 14:25:37
Die Aufgabe lautet: Liste die drei groessen mp4-Dateien im aktuellen Verzeichnis absteigend auf.

1) Mit welchem Befehl kann die die Groesse von Dateien ermitteln? -- `du'
Womit wir beim Thema "Viele Wege führen nach Rom." wären. ;)
Größen einzelner Dateien mit du zu ermitteln und das Ergebnis durch sort zu pipen, wäre mir nicht im Traum eingefallen. Ich hätte das mit ls und head gelöst.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux Modul in der schule fragen

Beitrag von Meillo » 16.09.2021 14:41:39

hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 14:34:16
Womit wir beim Thema "Viele Wege führen nach Rom." wären. ;)
Mir ist es nur darum gegangen, zu zeigen, wie ich vorgehe, wenn ich so ein Problem loesen soll.

Du zeigst mit deiner Aussage schoen, dass es viele Wege gibt ... Deinen Weg wuerdest du dann aber sicherlich auch mit der gleichen Vorgehensweise umsetzen wie ich sie dargelegt habe, oder?
hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 14:34:16
Größen einzelner Dateien mit du zu ermitteln und das Ergebnis durch sort zu pipen, wäre mir nicht im Traum eingefallen. Ich hätte das mit ls und head gelöst.
Lustig, `ls -S' habe ich noch nie verwendet und auch gar nicht gekannt. ;-)

Code: Alles auswählen

$ ls -S *.mp4 | head -n 3 
Pink Floyd - The Division Bell Full Album 1994-sUMJUWB1RJc.mp4
The Rocky Horror Picture Show (full album)-Unl1MxubYN8.mp4
Texted Version - Bob Dylan 2016 Nobel Lecture in Literature-3Zf04vnVPfM.mp4
... und das ist sogar noch POSIX. https://pubs.opengroup.org/onlinepubs/9 ... es/ls.html ... wieder was gelernt! :THX:
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Linux Modul in der schule fragen

Beitrag von hikaru » 16.09.2021 15:02:56

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 14:41:39
Deinen Weg wuerdest du dann aber sicherlich auch mit der gleichen Vorgehensweise umsetzen wie ich sie dargelegt habe, oder?
Ja. Ich konnte das mangels didaktischen Hintergrunds nur nicht spontan so formulieren.

Mir fällt außerdem gerade auf, dass mich diese Aussage an andere Fächer in der Schule erinnert ...
Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 14:25:37
Wenn du das Pipes-and-Filters-Konzept verstanden hast, dann ist anfangs die Hauptschwierigkeit, zu wissen, welche Befehle es gibt und was diese tun.
... nämlich an Fremdsprachenunterrricht.
Der geistig herausfordernde Teil ist für gewöhnlich das Erlernen der Grammatik. Das sind hier die Pipes and Filters. Hinzu kommt die Syntax der Optionsschalter. Zum Glück haben wir hier keine irregulären Beugungen. ;)
Dann gibt es noch die Fleißarbeit des Vokabelbüffelns. Das sind die Befehle. Im Gegensatz zu natürlichen Sprachen brauchen wir aber nicht Tausende oder gar Zehntausende, sondern vielleicht hundert. Und für die meisten Fälle reicht etwa ein Dutzend.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux Modul in der schule fragen

Beitrag von Meillo » 16.09.2021 15:30:52

hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 15:02:56
Zum Glück haben wir hier keine irregulären Beugungen. ;)
Nee, wir haben regulaere Ausdruecke. :-D

(... in einem Dutzend verschiedener Arten. :facepalm: )

hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 15:02:56
Dann gibt es noch die Fleißarbeit des Vokabelbüffelns. Das sind die Befehle. Im Gegensatz zu natürlichen Sprachen brauchen wir aber nicht Tausende oder gar Zehntausende, sondern vielleicht hundert. Und für die meisten Fälle reicht etwa ein Dutzend.
... und das Ueben im Anwenden, ebenfalls wie bei der Fremdsprache.

Mir gefaellt dieser Vergleich sehr gut. Ich glaube, es ist wertvoll, sich die Aehnlichkeit bewusst zu machen. Es ist nicht umsonst die ``Shell Command Language'', also eine Sprache, die man hier lernt. Andererseits erfordert so eine Betrachtung, wie du sie hier anstellst, wohl schon ein gewisses Niveau, um das ueberhaupt so betrachten und begreifen zu koennen.
Use ed once in a while!

Benutzeravatar
wico
Beiträge: 73
Registriert: 28.07.2015 21:07:02

Re: Linux Modul in der schule fragen

Beitrag von wico » 16.09.2021 17:59:46

verschoben
Zuletzt geändert von wico am 18.09.2021 11:27:47, insgesamt 1-mal geändert.
Ein Leben ohne Linux ist möglich, aber sinnlos...... :wink:

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Linux Modul in der schule fragen

Beitrag von hikaru » 16.09.2021 21:58:16

Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 15:30:52
Nee, wir haben regulaere Ausdruecke. :-D

(... in einem Dutzend verschiedener Arten. :facepalm: )
Das wären dann Dialekte. Man mag sie zwar nicht beherrschen, aber wenn man sie sieht/hört versteht man sie wenigstens meistens.

Viel mehr wurmt mich bei Regex immer noch die Inkonsistenz, dass das Zirkumflex kontextsensitiv ist:
Der Punkt in '.abc' und '[.abc]' macht das Gleiche. Der einzige Unterschied im Verhalten ergibt sich aus der Klammer.
Aber '^abc' bedeutet etwas ganz anderes als '[^abc]'. Dafür hätte man ruhig verschiedene Zeichen nehmen können. Aber ich glaube, das hatte ich an anderer Stelle schon mal erwähnt.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux Modul in der schule fragen

Beitrag von Meillo » 17.09.2021 08:36:15

(Es waere schoen, wenn wir von sommernacht wieder etwas hoeren wuerden. ich hoffe, dass tatsaechliches Interesse an der Sache vorhanden ist. Wir kehren gerne zum eigentlichen Thema zurueck und lassen die Exkurse sein, wenn es dort weitergeht.)



hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 21:58:16
Meillo hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 15:30:52
Nee, wir haben regulaere Ausdruecke. :-D

(... in einem Dutzend verschiedener Arten. :facepalm: )
Das wären dann Dialekte.
Du antwortest so ernst -- das war eigentlich nur ein lustiges Wortspiel. ;-)

Aber in deinem Vergleich hast du Recht.
hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 21:58:16
Man mag sie zwar nicht beherrschen, aber wenn man sie sieht/hört versteht man sie wenigstens meistens.
Genau.
hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 21:58:16
Viel mehr wurmt mich bei Regex immer noch die Inkonsistenz, dass das Zirkumflex kontextsensitiv ist:
Der Punkt in '.abc' und '[.abc]' macht das Gleiche. Der einzige Unterschied im Verhalten ergibt sich aus der Klammer.
Aber '^abc' bedeutet etwas ganz anderes als '[^abc]'. Dafür hätte man ruhig verschiedene Zeichen nehmen können. Aber ich glaube, das hatte ich an anderer Stelle schon mal erwähnt.
Ich verstehe, dass diese Kontextabhaengigkeit die Sache schwerer macht. Auch, dass die Negation nicht mit dem Ausrufezeichen gemacht wird, wie ueblich in den Programmiersprachen von Unix, ist ungewohnt. Ich weiss nicht, welche vorigen Regexp-Implementierungen es gab, bevor Ken Thompsen sie in ed eingebaut hat. Vielleicht hat er ja nur Notationen aufgegriffen, die damals ueblich waren.

Wenn es weniger Sonderzeichen gibt, die mehrfach belegt sind, hat das zumindest den Vorteil, dass man weniger Zeichen escapen muss. Es ist zwar zum Lesen der RE einfacher wenn jede Sonderfunktion ein eigenes Zeichen hat, aber zum Schreiben ist es schwieriger wenn es mehr Zeichen gibt, die Sonderbedeutungen haben. Darum, finde ich, ist es nicht so einfach gesagt, was besser waere.

Die Extended Regular Expressions (ERE, also die aus egrep, im Gegensatz zu den Basic Regular Expressions, BRE, in grep) sind insgesamt deutlich besser designt. So ist es halt immer: Wenn man mit der existenten Form nicht einverstanden ist, dann kann man die zwar besser machen, hat dann aber zwei Formen mit denen man sich rumschlagen muss. Jedenfalls ist der grosse Vorteil an EREs, dass in ihnen jedes Zeichen, wenn es escapt wird, fuer sich selbst steht, waehrend Sonderbedeutungen nur in unescapter Form greifen. Da muss man sich also weniger merken und kann, wenn man unsicher ist, einfach escapen.

Aber nochmal hierzu:
hikaru hat geschrieben: ↑ zum Beitrag ↑
16.09.2021 21:58:16
Der Punkt in '.abc' und '[.abc]' macht das Gleiche. Der einzige Unterschied im Verhalten ergibt sich aus der Klammer.
Aber '^abc' bedeutet etwas ganz anderes als '[^abc]'.
Ich weiss nicht, ob ich dich richtig verstehe. Der Punkt macht doch auch nicht das Gleiche. In `.abc' matcht er auf ein beliebiges Zeichen, in `[.abc]' matcht er auf einen Punkt.

Nun gut, der Circumflex ist schon noch etwas kompilizierter. Dich stoert wohl, dass er zwei *verschiedene* Sonderbedeutungen hat: In `^abc' verankert er die RE am Zeilenanfang (ohne etwas zu matchen), in `[^abc]' negiert er die Zeichenklasse, und in `a^bc' oder `[a^bc]' matcht er auf sich selbst literal.

Fuer dich ist das wohl nicht die gleiche Art von Kontextabhaengigkeit, die besagt: Je nach Kontext bedeutet das Zeichen etwas anderes. Denn aus dieser Sicht ist die Situation fuer Punkt und Circumflex gleich: Verschiedene Kontexte, verschiedene Bedeutungen. Fuer dich scheint die Schwierigkeit darin zu liegen, dass es nicht nur das einfache Schema gibt -- literale Verwendung oder Sonderbedeutung -- sondern je nach Kontext verschiedene Sonderbedeutungen. Beides ist einfach nur eine Kontextabhaengigkeit, im einen Fall gibt es halt nur genau zwei Faelle, im anderen mehrere. ;-) (Aber ja, fuer das Negieren von Zeichenklassen waere das Ausrufezeichen die bessere Wahl gewesen. Ich weiss nicht, warum es dafuer nicht verwendet worden ist. Allerdings muss man bedenken, dass REs schon 1969 in ed eingebaut worden sind, C aber erst von 1972 oder 1973 stammt. Insgesamt scheint Ken Thompson auch eine Vorliebe fuer den Circumflex gehabt zu haben, weil die Pipes in Shellpipelines anfangs auch so ausgesehen haben: `ls ^ wc -l' bis sie spaeter dann zu `ls | wc -l' geworden sind.)

(Die Entscheidung fuer die Sonderzeichen erschliesst sich einem wohl am besten dadurch, dass man ueberlegt, wie man am wenigsten escapen muss, wenn man in ed (oder vi) in assembler/roff/C-Code sucht. Im Code steht der Circumflex quasi nie am Zeilenanfang und das Dollarzeichen quasi nie ma Zeilenende, ueberall sonst in der Zeile kann man sie literal suchen. Mit so einem Denken erscheinen die getroffenen Entscheidungen sinnvoller als wenn man heutige Nutzungsszenarien im Kopf hat.)


Um zu verstehen, warum REs so designt sind wie sie es sind, muss mehr deutlich mehr vom Schreiben von REs aus denken als vom Lesen. Viele von euch werden sie wohl eher Lesen oder damit so eure Schwierigkeiten haben, darum erscheint das im Mittelpunkt zu stehen. Aber REs wurden eingefuehrt um in ed (also im Editor) zu Suchen, da schreibt man sie jeweils nur einmal und liest sie nie wieder. Auch in `grep' und `sed' was Tools zur oftmals interaktiven Verwendung auf der Kommandozeile waren, schreibt man sie viel eher als sie zu lesen.

Wenn man zudem eine gewisse Uebung mit REs hat, dann liest man sie fluessig, egal wie die Regeln von Sonderbedeutungen sind. Jedenfalls muss ich bei einfacheren REs gar nicht nachdenken und nur selten, wenn jemand wirklich komplizierte Dinge macht, muss ich sie aktiv dekodieren. Aus dieser Perspektive des Profi-Users (fuer den Unix immer in erster Linie war: ein System von Profis fuer sie selbst) und aus der Perspektive des Schreibens (die Mitarbeiter der Patentabteilung der Bell Labs, die ed nutzen und darin suchen koennen muessen) sind REs ziemlich gut designt, wuerde ich sagen. Deine Perspektive, die heute bestimmt fuer den Grossteil der User gilt, ist eine andere; ich kann nachvollziehen, dass dafuer manches nicht so passend erscheint.
Zuletzt geändert von Meillo am 17.09.2021 09:41:06, insgesamt 2-mal geändert.
Grund: Ergaenzungen
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Linux Modul in der schule fragen

Beitrag von hikaru » 17.09.2021 10:05:30

Meillo hat geschrieben: ↑ zum Beitrag ↑
17.09.2021 08:36:15
Du antwortest so ernst -- das war eigentlich nur ein lustiges Wortspiel. ;-)
Ich weiß. Aber auch lustige Wortspiele haben oft einen ernsten Kern, über den es sich nachzudenken lohnt.
Meillo hat geschrieben: ↑ zum Beitrag ↑
17.09.2021 08:36:15
Wenn es weniger Sonderzeichen gibt, die mehrfach belegt sind, hat das zumindest den Vorteil, dass man weniger Zeichen escapen muss.
Wenn man den Gedanken zuende führt, kommt man zu dem Schluss, dass man alles direkt binär notieren sollte. Dann muss man nur zwei Zeichen unterscheiden. Der Rest ergibt sich aus dem Kontext.
Meillo hat geschrieben: ↑ zum Beitrag ↑
17.09.2021 08:36:15
Ich weiss nicht, ob ich dich richtig verstehe. Der Punkt macht doch auch nicht das Gleiche. In `.abc' matcht er auf ein beliebiges Zeichen, in `[.abc]' matcht er auf einen Punkt.
Erwischt. :oops:
Ok, schlechtes Beispiel. Mir ging es aber tatsächlich darum:
Meillo hat geschrieben: ↑ zum Beitrag ↑
17.09.2021 08:36:15
Nun gut, der Circumflex ist schon noch etwas kompilizierter. Dich stoert wohl, dass er zwei *verschiedene* Sonderbedeutungen hat: In `^abc' verankert er die RE am Zeilenanfang (ohne etwas zu matchen), in `[^abc]' negiert er die Zeichenklasse, und in `a^bc' oder `[a^bc]' matcht er auf sich selbst literal.
Dass Regex-Sonderzeichen zwei Bedeutungen haben können müssen, nämlich in ihrer Rolle als Sonderzeichen und in ihrer Rolle als literal ist einleuchtend. Aber dass ein Sonderzeichen zwei verschiedene Sonderzeichenrollen annehmen kann, und dass diese Rolle abhängig vom Kontext ist, empfinde ich als einen konzeptuell hässlichen Designfehler, denn diese Doppelrolle ist unnötig.
Ich habe keine Probleme damit diese Kontexte auseinanderzuhalten. Ich finde einfach nur den Fakt hässlich, dass ich den Kontext berücksichtigen muss um die Bedeutung zu erfassen.

Ein hoffentlich besseres hypothetisches Beispiel, das so nicht implementiert ist:
'^abc' matcht auf Zeilen, die mit "abc" beginnen. 'abc$' matcht auf Zeilen die mit "abc" enden. Wenn man so ein Fan des Zirkumflex' ist und nichts gegen Kontextsensitivität hat, dann hätte man auch im zweiten Beispiel das Zirkumflex statt des Dollarzeichens wählen können. Dass 'abc^' das Ende der Zeile meint ergäbe sich aus dem Kontext der Position des Zirkumflex' im Pattern.
Es hätte dann nicht die Bedeutung den Anfang eines Patterns zu markieren, sondern allgemein eine der beiden Grenzen. Und wenn man es so erklärt finde ich die Kontextsensitivität deutlich logischer als die von Negation vs. Anfang, denn in dieser Erklärung gäbe es gar keine Doppelbedeutung.

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux Modul in der schule fragen

Beitrag von Meillo » 17.09.2021 10:30:43

hikaru hat geschrieben: ↑ zum Beitrag ↑
17.09.2021 10:05:30
Aber dass ein Sonderzeichen zwei verschiedene Sonderzeichenrollen annehmen kann, und dass diese Rolle abhängig vom Kontext ist, empfinde ich als einen konzeptuell hässlichen Designfehler, denn diese Doppelrolle ist unnötig.
Das kann ich verstehen. Mir faellt auch kein anderes Zeichen ein, das in REs zwei verschiedene Sonderbedeutungen haette.
hikaru hat geschrieben: ↑ zum Beitrag ↑
17.09.2021 10:05:30
Ein hoffentlich besseres hypothetisches Beispiel, das so nicht implementiert ist:
'^abc' matcht auf Zeilen, die mit "abc" beginnen. 'abc$' matcht auf Zeilen die mit "abc" enden. Wenn man so ein Fan des Zirkumflex' ist und nichts gegen Kontextsensitivität hat, dann hätte man auch im zweiten Beispiel das Zirkumflex statt des Dollarzeichens wählen können. Dass 'abc^' das Ende der Zeile meint ergäbe sich aus dem Kontext der Position des Zirkumflex' im Pattern.
Es hätte dann nicht die Bedeutung den Anfang eines Patterns zu markieren, sondern allgemein eine der beiden Grenzen. Und wenn man es so erklärt finde ich die Kontextsensitivität deutlich logischer als die von Negation vs. Anfang, denn in dieser Erklärung gäbe es gar keine Doppelbedeutung.
Das ist ein gutes Beispiel und eine gute Idee. Ich sehe momentan keinen Grund warum man da nicht so haette machen koennen, da die beiden Zeilenanker nur jeweils ganz am Anfang bzw. ganz am Ende der Zeile special sind. Auch eine leere Zeile (`^^') und eine Zeile die nur einen Circumflex enthaelt (`^\^^') koennte man matchen. Allerdings weiss ich nicht ob es evtl. die Implementierung der Regexp-Engine komplizierter macht wenn man hier das gleiche Zeichen verwendet. Wobei ich bislang keinen Fall gefunden habe, der darauf hindeutet.
Use ed once in a while!

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux Modul in der schule fragen

Beitrag von Meillo » 17.09.2021 12:14:00

Ich hab mal auf der TUHS-Mailingliste nachgefragt, warum diese Metazeichen fuer REs verwendet worden sind. Diese Antwort steht noch aus, aber der Grund warum man nicht ^ fuer den Zeilenanfang und das Zeilenende verwendet wurde mir sehr schnell gezeigt:

Code: Alles auswählen

s/^/x/
:facepalm:


Siehe: https://minnie.tuhs.org/pipermail/tuhs/ ... 24437.html
... bin mal gespannt was sonst noch fuer Antworten kommen.
Use ed once in a while!

Benutzeravatar
hikaru
Moderator
Beiträge: 13585
Registriert: 09.04.2008 12:48:59

Re: Linux Modul in der schule fragen

Beitrag von hikaru » 17.09.2021 12:32:46

Meillo hat geschrieben: ↑ zum Beitrag ↑
17.09.2021 12:14:00
Siehe: https://minnie.tuhs.org/pipermail/tuhs/ ... 24437.html
Danke!
If you
make ^ mean both beginning and end of line, what does this ed command do:

s/^/x/

Which end gets the x?
Das Vordere natürlich! Da steht ja kein "g" am Ende.
Falls man hingegen das hintere Ende ersetzen will (analog zu: 's/$/x/'), wäre das auch "ganz einfach":

Code: Alles auswählen

's/\(.*\)/\1x/'
Immer diese faulen Ausreden! :mrgreen:

Benutzeravatar
Meillo
Moderator
Beiträge: 8813
Registriert: 21.06.2005 14:55:06
Wohnort: Balmora
Kontaktdaten:

Re: Linux Modul in der schule fragen

Beitrag von Meillo » 17.09.2021 12:36:03

hikaru hat geschrieben: ↑ zum Beitrag ↑
17.09.2021 12:32:46
Falls man hingegen das hintere Ende ersetzen will (analog zu: 's/$/x/'), wäre das auch "ganz einfach":

Code: Alles auswählen

's/\(.*\)/\1x/'
Immer diese faule Ausreden! :mrgreen:
Dann arbeite mal einen Tag mit ed, und du wirst deine Meinung von ``ganz einfach'' ganz schnell aendern! ;-)
Use ed once in a while!

Antworten