Gibt es jetzt Größer-als/Kleiner-als-Zeichen bei Linux?

4 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Das kommt darauf an, wie die Zeichen interpretiert werden.

Das > bzw. < Zeichen hat in der Shell eine bestimmte Aufgabe, und zwar Daten umzuleiten.

Beispiel:

cat README.txt > neuedatei.txt

Das > leitet eine Ausgabe eines Befehls/Programms in eine Datei um. So kann man dann das was eigentlich auf dem Bildschirm erscheinen soll in eine Datei umleiten. So kann man zum Beispiel Fehlermeldungen in eine Datei packen und die dann per Email an Jemanden schicken der die sich angucken will.

Umgekehrt leitet das < eine Datei als Eingabe um, statt irgendwas in den laufenden Befehl einzutippen kann man den Inhalt einer Datei einspeisen.

Hat man jetzt einen Befehl oder ein Programm und möchte dem GrößerAls oder Kleinerals als Parameter mit geben, so geht das nicht wenn man nur < oder > schreibt, denn die Shell/Bash interpretiert das als Umleitung, also man möchte Ein- oder Ausgaben in/aus eine(r) Datei umleiten. Also benutzen viele Befehle/Programme dann den Parameter -gt bzw. -le um das Problem zu verhindern.

Meint man aber wirklich das <> oder andere Zeichen, dann kann man die maskieren mit dem Backslash (\). Der \ bedeutet für die Shell, dass das nächste Zeichen unverändert übertragen wird und nicht interpretiert werden darf. So kann man auch Space oder andere Sonderzeichen im Dateinamen maskieren, z.B.

cd Eigene\ Dateien

Ohne das \ würde der das als "cd Eigene" und danach "Dateien" interpretieren und damit findet der das "Eigene Dateien" nicht. Natürlich kann man auch sozusagen ein Zitat verwenden:

cd "Eigene Dateien"

Und das interpretieren von \ führt natürlich zum nächsten Problem, wie schreibt man denn ein \ wenn man genau das \ meint? Ganz einfach, man maskiert das \, also schreibt man \\.

Deswegen sehen Windows Freigabeadressen unter Linux auch so aus:

\\\\MeineWindowsFreigabe\\MeineMusik\\LieblingsMusik

Also 4x \ wo man bei Windows \\ schreiben würde.

Denn es könnte ja sein, dass man Leerzeichen Maskieren muss!

\\\\Meine\ Windows\ Freigabe\\Meine\ Musik\\LieblingsMusik

Da man in einem Shell Script eine Textdatei verwendet die sich so verhält als wenn man das live in den Eingabepromt tippt, kann man natürlich kein < > \ (usw) verwenden da das interpretiert werden würde.

Die BASH, also die "Born Again SHell" ist da schlauer. Die erkennt Funktionen wie "for" und weiß, dass die da in die Parameter zur Funktion nichts hinein interpretieren darf. Deswegen darf man dann auch so was schreiben:

for (( c=1; c<=5; c++ ))
do
echo "Welcome $c times"
done

Keine Angst, wenn man heute Shell sagt, meint man in Wirklichkeit Bash. DIe Ur-Shell wird schon seit vielen Jahrzehnten nicht mehr verwendet.

Woher ich das weiß:Berufserfahrung
Commodore64  11.06.2023, 12:01

Probier das einfach mal aus, tipp das hier mal direkt in eine Shell:

for (( c=1; c<=5; c++ ))
do
echo "Welcome $c times"
done

Nach der ersten Zeile kommt nicht der normale Promt wenn Du Enter drückst. Dtattdessen kommt nur ein ">_". Das bedeutet "Ey, Du bist noch nicht fertig, da fehlt was, tipp weiter!"

Erst wenn das "done" eingegeben wurde wird das dann ausgeführt. Also wenn der FOR Befehl komplett ist.

0
Commodore64  11.06.2023, 18:32
@Bushmills145

Genau, deswegen doppelte Klammern. Aber bestimmte Funktionen werden auch erkannt und gesondert behandelt. Vor allem das "do" "done" packt alle Zeilen dazwischen zu einer Einheit zusammen die dann entweder ausgeführt wird (auch mehrmals) oder übersprungen wird.

0
Bushmills145  11.06.2023, 19:10
@Commodore64

Vielleicht hilft dem Fragesteller - falls er durch die Kommentare liest - das Verständnis dafür, warum Shells andere Zeichen als < oder > bevorzugen: Aufgrund Ein- und Ausgabeumleitung. Diese Zeichen werden schon für andere Zwecke verwendet, darum muss es der Shell zweifelsfrei deutlich sein, wann < oder > im vegleichenden anstatt im umleitenden Kontext verwendet werden sollen.

Aber auch bei for Konstrukten sind es die runden Klammern. Vergleiche mit

for x in a b c; do echo $x; done

da ein < oder > lässt dies nicht als arithmetische Operation ausführen.

1
Commodore64  11.06.2023, 21:22
@Bushmills145

Das hatte ich ja oben im meinem Beitrag bereits geschrieben, dass die Spitzen Klammern zur Umleitung dienen.

1
Commodore64  11.06.2023, 21:36
@Bushmills145

Man verliert sehr schnell die Übersicht wenn man sich die anderen Antworten erst mal durch gelesen hat.

0
Tichuspieler 
Fragesteller
 12.06.2023, 16:59

Hallo,

danke für Deine lange und ausführliche Antwort und gleichzeitig eine dicke Entschuldigung, weil ich mich erst jetzt wieder melde.

Das > leitet eine Ausgabe eines Befehls/Programms in eine Datei um. So kann man dann das was eigentlich auf dem Bildschirm erscheinen soll in eine Datei umleiten.

Stimmt, da war etwas. Das hatte ich tatsächlich schon vor einiger Zeit gelesen bzw. gelernt, aber bei meiner Frage nicht dran gedacht.

Hat man jetzt einen Befehl oder ein Programm und möchte dem GrößerAls oder Kleinerals als Parameter mit geben, so geht das nicht wenn man nur < oder > schreibt, denn die Shell/Bash interpretiert das als Umleitung, also man möchte Ein- oder Ausgaben in/aus eine(r) Datei umleiten. Also benutzen viele Befehle/Programme dann den Parameter -gt bzw. -le um das Problem zu verhindern.

Ah, okay. Da war mein Denkfehler.
Das sind die Erklärungen, die mir weiterhelfen. Darum Danke dafür :-)

Meint man aber wirklich das <> oder andere Zeichen, dann kann man die maskieren mit dem Backslash (\). Der \ bedeutet für die Shell, dass das nächste Zeichen unverändert übertragen wird und nicht interpretiert werden darf. So kann man auch Space oder andere Sonderzeichen im Dateinamen maskieren,

Ja, das stimmt und hatte ich auch so gelernt :-) (hei, dann ist ja doch was bei mir hängengeblieben :-) )


0
Commodore64  12.06.2023, 17:09
@Tichuspieler

Die TAB Taste in der BASH kennst Du?

Wenn man ein paar Buchstaben eines Befehls oder einer Datei eingegeben hat, kann man TAB drücken und der Befehl/Dateiname wird ausgeschrieben und ein Leerzeichen angefügt.

Ist es nicht eindeutig, wird bis dahin vervollständigt wo es Eindeutig ist. Drückt man dann 2x TAB schnell hintereinander bekommt man eine Liste mit allen Möglichkeiten.

So kann man dann z.B. beim cd sehr schnell tief in die Untreordner ohne immer nach jedem Schritt ls auszulösen und sich Gedanken machen ob man alles richtig geschrieben hat.

Bei manchen Befehlen kann man auch TAB drücken und der schreibt die -- für einen Parameter. Auch hier kann man dann den Parameter Autoverfollständigen wenn man die ersten Zeichen eingegeben hat.

Sehr Praktisch und jeder, der das nicht kennt wundert sich wie Du da "Millionen Zeichen" in wenigen Sekunden tippst!

1
Tichuspieler 
Fragesteller
 12.06.2023, 17:32
@Commodore64

Hallo noch einmal,

ja, dass mit der TAB-Taste kenne ich. Auch habe ich gelernt, dass man mittels der Pfeil nach oben/Unten-Taste die Befehlshistorie wieder hervorholen kann :-).

0
Commodore64  13.06.2023, 16:57
@Tichuspieler

Schau Dir mal "bpytop" an. Das kann man z.B. über den Snap-Store installieren falls das Paketsystem deiner Distri das nicht direkt anbietet.

Für die Konsole und extrem informativ. Das läuft als Text in der Konsole und sieht dafür unglaublich schön aus! Ein absolutes Muss für jeden Linux Admin!

0

Wer dir das erzählt hat, hat dir Unfug erzählt. Es gibt sowohl diese Zeichen, als auch Script- und Programmiersprachen, die diese verwenden.

-gt und -le kannst du in Unix Shells (also auch Linux) finden, aber selbst bash, eine der shells, kennt ebenfalls > und <= für arithmetische Vergleiche.

Woher ich das weiß:Berufserfahrung – LPI zertifiziert
Tichuspieler 
Fragesteller
 12.06.2023, 17:32

Heiho,

danke für Deine Antwort und gleichzeitig eine dicke Entschuldigung dafür, dass ich mich erst jetzt wieder melde.

Wer dir das erzählt hat, hat dir Unfug erzählt.

Dieser Unfug steht so in meinem Buch. Und das Buch ist von jemanden geschrieben, der mehrere Computerbücher geschrieben hat. Sowohl für Linux als auch für Programmiersprachen (ich glaube, er hatte auch ein Buch für C oder C#). In meiner unendlichen Naivität bin ich davon ausgegangen, dass ein Autor, dessen Bücher auch bei einem seriösen Verlag untergekommen sind, auch Ahnung von der Materie sein Eigen nennt.

0
Bushmills145  12.06.2023, 17:36
@Tichuspieler

Dann tippe doch einfach selbst ein:

(( 2 < 3 )) && echo "kleiner"

Wenn das Buch keinen Unfug erzählt, dürfte das dann ja nicht funktionieren. Ich unterstelle bash als shell, mit anderen shells würde der Befehl etwas anders aussehen, aber < dürften die alle verstehen.

Sich selbst davon überzeugen ist besser als beliebigen Leuten im Internet zu glauben.

0
Tichuspieler 
Fragesteller
 12.06.2023, 17:48
@Bushmills145

Ich habe es eben mal ausprobiert. Die doppelten runden Klammern sind ja ein Zeichen für Linux, dass es zu einer Rechenoperation kommt (wenn ich es richtig verstanden habe) und das doppelte Kaufmannsund steht dafür, dass zwei Befehle hintereinander ausgeführt werden.
Also, er zeigt mir das Wort "kleiner" an.
Warum hat ein Buch, dass von einem erfahrenen Computeruser geschrieben wurde und durch ein Lektorat gegangen ist, so viele Fehler?

0
Bushmills145  12.06.2023, 17:55
@Tichuspieler

Das kann ich dir auch nicht sagen - aber du kannst dich davon überzeugen, dass es sich tatsächlich um eine "kleiner" Operation handelt, indem du mit den Zahlen bissl spielst.

Und C ist C, egal auf welchem Computern - da sehen Vergleiche nicht plötzlich anders aus, bloß weil es unter Linux kompiliert.

(( )) lässt die *shell* wissen, dass Arithmetik folgt, nicht Linux. Linux ist das vollkommen schnuppe. Es kümmert sich nicht um < Zeichen oder nicht, hat damit nix zu tun.

0
Bushmills145  12.06.2023, 18:01
@Tichuspieler

Das && ist noch bissl was zusätzlich: der nächste Befehl wird nur konditional ausgeführt. Die Zeile entspricht:

if (( 2 < 3 )); then echo "kleiner"; fi

bloß bissel einfacher.

0
Tichuspieler 
Fragesteller
 12.06.2023, 18:25
@Bushmills145

Okay. Ich hoffe, ich lerne das noch (und ich hoffe, dass die GF-User von meinem "dummen" Fragen nicht genervt sind).

0

Also zunächst mal gibt es nicht "das Linux". Ob und was unterstützt wird, hängt ja auch davon ab, welche Shell verwendet wird.

Bei bash funktioniert das von Dir gezeigte Beispiel wunderbar und natürlich wird das Zeichen unterstützt.

Es kann sein, dass die Bourne Shell (/bin/sh) es nicht unterstützt.

Tichuspieler 
Fragesteller
 11.06.2023, 10:41

Heiho,

danke erst einmal für Deine Antwort.

Also zunächst mal gibt es nicht "das Linux"

Gut, da hast Du recht: Es gibt so einige Linuxdistributationen mehr, da habe ich mich leider sehr unglücklich ausgedrückt. Das war mein Fehler, der mir dank Deines Hinweises in Zukunft nicht mehr unterlaufen wird (hoffe ich zumindest).

Das es hingegen unterschiedliche Shellarten gibt, war mir nicht bewusst, zumal ich im Buch gelesen habe, das bash nur ein anderer Name für Shell ist. Von der Bourne Shell habe ich ehrlich gesagt noch nie etwas gehört (:-( )

Leider empfinde ich das Lehrbuch, aus dem ich versuche, mir die Linuxserver-Administration für Debian-/Ubuntuserver anzueignen als teilweise "Du musst schon viel Ahnung von der Materie haben"-Stil, auch wenn der Titelzusatz "für Einsteiger" zumindest mir das Denken hervorruft, dass damit Lernende abgeholt werden, die bei 0 anfangen.

0
KuarThePirat  11.06.2023, 11:15
@Tichuspieler

Wie gehst Du denn sonst beim Lernen vor? Hast Du schon ein System laufen bei dem Du Dinge ausprobierst?

0
Tichuspieler 
Fragesteller
 12.06.2023, 16:33
@KuarThePirat

Wie gehst Du denn sonst beim Lernen vor? Hast Du schon ein System laufen bei dem Du Dinge ausprobierst?

Ja, genau ...

Ehrlich gesagt kann ich Dir die Frage nicht so ganz genau beantworten, weil das Ganze für mich ein wenig vom Thema her abhängig ist.
Grundsätzlich ist es erstmal so, dass ich einen Text durchlese und mir dabei Notizen mache und gleichzeitig auch schon mal Fragen für meine Lernkartei zurechtbastele (ich kann mit besagter Lernkartei am Besten lernen).
Dann lese ich mir die mit der Hand fein säuberlich in ein Heft aufgeschriebenen Texte immer wieder durch und frage mich mit der Lernkartei ab, wobei ich die Fragen, die ich nicht beantwortet habe (oder falsch beantwortet habe) dann nochmal mit der Hand auf einen Zettel schreibe.

Jetzt kommt der Punkt mit dem Thema: Manche Fakten nehme ich hin. Wenn Du mir sagst: "4 + 3 = 7" dann frage ich nicht nach dem "Warum ergibt 4 + 3 =7?"
Dann kann es aber sein, dass ich etwas lese und mich (bzw. auch andere) dann tatsächlich frage: "Warum ist das so?"
Würde ich jetzt den Code in den Büchern ins Linuxterminal eintippen, dann wird es mit Sicherheit funktionieren. Aber ich würde dann nur wissen, DAS es funktioniert, aber nicht WARUM es funktioniert. Und wenn ich das "Warum?" nicht verstehe, wird es bei mir darauf hinauslaufen, dass ich dann bald überhaupt nichts mehr verstehe.

0
KuarThePirat  12.06.2023, 20:24
@Tichuspieler

Ja, das verstehe ich. Ich betreibe Linux Server seit vielen Jahrzehnten und habe es nicht mit Büchern gelernt sondern immer indem ich ein Problem, eine Fragestellung, was auch immer hatte und dafür eine Lösung gesucht und erarbeitet habe. Das war dann immer sehr gezieltes Lesen von manpages, Manuals um das zu finden, was ich brauchte. Aber das war für mich leichter als irgendwie nach Buch Code zu lernen

Ich habe auch vieles davon vergessen. Ich war mal ein richtig gut in awk... wenn ich das heute brauche, dann weiß ich, was es kann und muss aber alles nochmal nachlesen.

0

Äh, ja, was denn nun?

Laut dem Code wird doch eines eingesetzt und jetzt heißt es: Nö, ein "<" bzw. ein ">" gibt es nicht, weil es -gt bzw. -le heißt.

Die Frage hast du dir somit selbst Beantwortet.

Im Terminal Bedeutet > Eintragen oder Ausgabe dort reinschreiben/übertragen.

Mit >> Bedeutet wenn vorhanden dann Anhängen (append)

Beispiel :

touch datei

dmesg | grep -i error > datei

dmesg | grep -i error >> datei

mit

cat datei

kannst du es dir Anzeigen lassen oder rufe die Datei einfach mit einem Editor deiner Wahl auf.

Scripten Bedeutet das mitunter sich die Zeichen im reinen Terminal mit denen im Script selbst Überschneiden. Daher -gt und -le um sie zu UNTERSCHEIDEN. Ebenso wird > oder < in einem String dies als Zeichen ohne Funktion verstanden. Alles was du in einem String definierst sind Daten ,Daten die erst bei der Ausgabe und Definition WORRÜBER Sie ausgegeben werden eine Funktion dann haben. Nicht umsonst setzt man auch die Definition am Anfang eines Scriptes mit z.B. !/bin/bash

In vielen Dateien gibt es Platzhalter.

ABER !

Nicht jedes Zeichen ist der gleiche Platzhalter.

In einigen Dateien ist * ein Platzhalter in anderen / oder \

Wobei wir es kennen das * eine art Wildcard ist . Bei Dateisuche *.* wird alles aufgelistet was man findet.

Um da Durchzusteigen wie was und wo ,sollte man sich Beispiele Ansehen die funktionieren. Dafür gibts auch im großen www genug Beispiele die man Nachvollziehen kann und Beispiel Quelltexte.

Wenn du irgendwann bei rm -rf / angekommen bist gib Bescheid :-)

Woher ich das weiß:Berufserfahrung – Linux Administrator
Tichuspieler 
Fragesteller
 12.06.2023, 17:27

Hallo,

danke für Deine lange und ausführliche Antwort und gleichzeitig eine dicke Entschuldigung, weil ich mich erst jetzt wieder melde.

Im Terminal Bedeutet > Eintragen oder Ausgabe dort reinschreiben/übertragen.
Mit >> Bedeutet wenn vorhanden dann Anhängen (append)

Das hatte ich tatsächlich schon in meinem Lehrbuch gelesen und auch gelernt, allerdings beim Schreiben meiner Frage nicht auf dem Schirm. :-( :-/

Alles was du in einem String definierst sind Daten ,Daten die erst bei der Ausgabe und Definition WORRÜBER Sie ausgegeben werden eine Funktion dann haben. Nicht umsonst setzt man auch die Definition am Anfang eines Scriptes mit z.B. !/bin/bash

Okay. Das ist eine Info, die ich noch nicht hatte. Gut sie schon zu wissen. Danke dafür :-)

In vielen Dateien gibt es Platzhalter.
ABER !
Nicht jedes Zeichen ist der gleiche Platzhalter.
In einigen Dateien ist * ein Platzhalter in anderen / oder \

Oh ...
Also, dass der Asteriks ein Platzhalter ist, wusste ich. Dass "/" oder "\" auch welche sind, entzog sich wieder meiner Kenntnis.
Wieder etwas Neues gelernt.
Auch da Danke für die Info :-)

Um da Durchzusteigen wie was und wo ,sollte man sich Beispiele Ansehen die funktionieren.

Das funktioniert für mich tatsächlich nicht.
Wenn ich solche Beispiele eintippe und sie laufen lasse, sehe ich zwar, DAS sie funktionieren, aber mir fehlt dann die Erklärung, WARUM sie funktionieren. Und wenn ich das nicht weiß, wenn mir da das Hintergrundwissen fehlt, dann wird es früher oder später (eher früher) darauf hinauslaufen, dass ich die weiße Fahne schwenke und aufgebe.
Ich weiß, in dieser Beziehung bin ich komisch.

Wenn du irgendwann bei rm -rf / angekommen bist gib Bescheid :-)

Wenn ich es nicht vergesse, kann ich das machen.

0