[gelöst] Nachhilfe in Patch

Alles rund um die verschiedenen Konsolen und shells sowie die Programmierung unter Linux

Moderator: Moderatoren

Antworten
Benutzeravatar
Heinz-Peter
Guru
Guru
Beiträge: 1926
Registriert: 24. Okt 2005, 14:04

[gelöst] Nachhilfe in Patch

Beitrag von Heinz-Peter » 9. Mär 2017, 12:18

Hallo,

bei der Bitdefender Installation bin ich mal wieder auf den Patch gestoßen

Code: Alles auswählen

cat /opt/BitDefender-scanner/var/lib/scan/versions.dat.* | \
awk '/bdcore.so.linux/ {print $3}' | \
while read bdcore_so; do
  sudo touch /opt/BitDefender-scanner/var/lib/scan/$bdcore_so;
  sudo bdscan --update;
  sudo mv /opt/BitDefender-scanner/var/lib/scan/bdcore.so /opt/BitDefender-scanner/var/lib/scan/bdcore.so.old;
  sudo ln -s /opt/BitDefender-scanner/var/lib/scan/$bdcore_so /opt/BitDefender-scanner/var/lib/scan/bdcore.so;
  sudo chown bitdefender:bitdefender /opt/BitDefender-scanner/var/lib/scan/$bdcore_so;
done
Kann mir jemand sagen was passiert hier und wo kann ich eventuell Hilfe zu dem Thema finden? Ich möchte nicht einfach wie eine exe Datei unter Windows ausführen, ohne zu wissen was man eigentlich tut.

Die ersten zwei Zeilen

Code: Alles auswählen

cat /opt/BitDefender-scanner/var/lib/scan/versions.dat.* | \
awk '/bdcore.so.linux/ {print $3}' | \
hier wird mit Shell-Befehl cat eine Datei mit dem Namen versions.dat.* (das kann versions.dat.111 oder aber versions.dat.222 u.s.w. sein) geöffnet und in eine Pipe (eine Art Ablage) | geschrieben.
Was aber passiert dann?
Die Zeile unten sagt mir nichts

Code: Alles auswählen

 \
awk '/bdciore.so.linux/ {print $3}'
genau wie die Zeile

Code: Alles auswählen

while read bdcore_so; do
In der vierten Zeile

Code: Alles auswählen

  sudo touch /opt/BitDefender-scanner/var/lib/scan/$bdcore_so;
wird mit Shell-Befehl sudo touch eine neue leere Text Datei mit dem Namen $bdcore_so erzeugt. Was bewirkt aber das Dollarzeichen $ vor bdcore_so und das Semikolon ; am Ende der Zeile?
In der fünften Zeile

Code: Alles auswählen

sudo bdscan --update;
wird mit sudo also root-Rechten ein Befehl bdscan --update ausgeführt
und am Ende wieder das Semikolon ; Zeichen :???:
In der sechsten Zeile

Code: Alles auswählen

sudo mv /opt/BitDefender-scanner/var/lib/scan/bdcore.so /opt/BitDefender-scanner/var/lib/scan/bdcore.so.old;
wird mit root-Rechten die Datei bdcore.so in bdcore.so.old umbenant
und am Ende wieder das Semikolon ; Zeichen :???:
In der siebten Zeile

Code: Alles auswählen

 sudo ln -s /opt/BitDefender-scanner/var/lib/scan/$bdcore_so /opt/BitDefender-scanner/var/lib/scan/bdcore.so;
wird mit Shell-Befehl sudo ln -s, als root ein symbolischer Link zu der Datei bdcore.so erzeugt und schon wieder das mir unbekannte Semikolon ; Zeichen.
Zuletzt geändert von Heinz-Peter am 10. Mär 2017, 20:17, insgesamt 3-mal geändert.
Mein Betriebssystem: Suse 13.2/13.1, Prozessor: Pentium 4 550 (3,40 GHz, FSB800, Hyper-Threading), Grafikkarte: Nvidia Geforce 6610XL (PCIe)/128MByte.
Wir müssen lernen, entweder als Brüder miteinander zu leben oder als Narren unterzugehen.

Werbung:
marce
Advanced Hacker
Advanced Hacker
Beiträge: 903
Registriert: 19. Jun 2008, 13:16
Wohnort: Dettenhausen
Kontaktdaten:

Re: Nachhlfe in Patch

Beitrag von marce » 9. Mär 2017, 12:46

Doofe Frage - Du bist seit > 12 Jahren hier angemeldet und verstehst nicht die grundlegendesten Bash-Befehle?

Aber gut:
Die awk-Zeile sucht nach einem Pattern und gibt ein spez. Element davon aus
(http://www.thegeekstuff.com/2010/01/awk ... t-examples)

Das ganze wird in eine Schleife übergeben und in eine Variable gepackt. $ kennzeichnet eine Variable.
Diese Datei wird getoucht - sofern vorhanden wird der Zeitstempel aktualisiert, wenn nicht, wird sie angelegt.

; ist ein Befehlstrenner.

Benutzeravatar
Heinz-Peter
Guru
Guru
Beiträge: 1926
Registriert: 24. Okt 2005, 14:04

Re: Nachhlfe in Patch

Beitrag von Heinz-Peter » 9. Mär 2017, 12:58

marce hat geschrieben:
9. Mär 2017, 12:46
Doofe Frage - Du bist seit > 12 Jahren hier angemeldet und verstehst nicht die grundlegendesten Bash-Befehle?
Es gibt nicht doofe Fragen. Ich kenne nur doofe Antworten. Trotzdem danke für Deine Hilfe.

Grüße Heinz-Peter
Mein Betriebssystem: Suse 13.2/13.1, Prozessor: Pentium 4 550 (3,40 GHz, FSB800, Hyper-Threading), Grafikkarte: Nvidia Geforce 6610XL (PCIe)/128MByte.
Wir müssen lernen, entweder als Brüder miteinander zu leben oder als Narren unterzugehen.

josef-wien
Guru
Guru
Beiträge: 4874
Registriert: 23. Sep 2008, 17:09

Re: Nachhlfe in Patch

Beitrag von josef-wien » 9. Mär 2017, 17:01

Der Rückwärts-Schrägstrich ist ein Signal, daß der Befehl noch nicht zu Ende ist, sondern in der nächsten Zeile weitergeht. Der Strichpunkt ist ein Signal, daß der Befehl zu Ende ist und ein neuer Befehl beginnt, aber wenn nach dem Strichpunkt ohnehin eine neue Zeile beginnt, ist er unnötig (was im übrigen auch auf die Verwendung von cat zutrifft). awk sucht in jeder Zeile einen regulären Ausdruck (das ist der Begriff zwischen den beiden Schrägstrichen, und ohne die Dateien zu kennen, frage ich mich, warum nach einem regulären Ausdruck gesucht wird, bei dem der Punkt ein beliebiges Zeichen darstellt) und gibt die dritte Spalte dieser Zeile aus. Statt read bdcore_so hätte man auch read blablabla schreiben können, dann müßte halt in den nächsten Zeilen $blablabla statt $bdcore_so stehen, gemeint ist damit die von awk übergebene dritte Spalte. Offensichtlich rechnet das Skript damit, daß der gesuchte reguläre Ausdruck nur ein einziges Mal vorkommt, denn sonst wären die Zeilen mit dem Umbenennen der Datei und dem Anlegen der Verknüpfung etwas fragwürdig. Über die Qualität dieses Skripts müssen Berufenere ein Urteil abgeben, aber solange es funktioniert ...

Benutzeravatar
robi
Moderator
Moderator
Beiträge: 3141
Registriert: 25. Aug 2004, 02:13

Re: Nachhlfe in Patch

Beitrag von robi » 9. Mär 2017, 21:38

josef-wien hat geschrieben:
9. Mär 2017, 17:01
Der Rückwärts-Schrägstrich ist ein Signal, daß der Befehl noch nicht zu Ende ist, sondern in der nächsten Zeile weitergeht.
Sinngemäß richtig, aber bisschen ungenau erklärt, ein Signal ist was ganz anderes.
Am Ende der Zeile steht ein Zeilensprung-Zeichen, eines ( und das häufigste) von vielen Sonderzeichen. Das Zeichen hat den offiziellen Namen "Line Feed" hat den Wert 10 oder Hexadezimal 0x0a . Das ist auch das Zeichen das beim Betätigen der Entertaste an den Rechner weitergegeben wird. Die Shell wird dieses Zeichen dann auch als Zeilenende erkennen.
Ein \ direkt vor einem Sonderzeichen, bewirkt das das Sonderzeichen für die Shell hier maskiert ist, bedeutet das Sonderzeichen wird dann von der Bash nicht verarbeitet und die Sonderfunktion ist an dieser Stelle außer Kraft gesetzt. Das Sonderzeichen wird damit an dieser Stelle ignoriert als wenn es gar nicht da wäre, das \ hat seine Aufgabe erfüllt und wird auch während der Bearbeitung der Zeile entfernt.
Ein \ vor einem normalem Zeichen, da wird dann nicht etwa das normale Zeichen ignoriert, sondern da wird nur das \ ignoriert.
Wenn man eine einzige Zeile der Übersichtlichkeit halber in mehrere Zeilen schreiben will, kann man dieses ausnutzen, in dem man an den Zeilenenden die man haben will aber die nicht von der Shell erkennt werden sollen jeweils am ende der Zeile ein \ setzt, (Vorsicht dahinter darf kein Leerzeichen mehr sein, sonst würde das \ vor dem Leerzeichen ignoriert und nicht etwa das Line feed)
wenn man also zB. in der Kommandozeile folgendes eingibt

Code: Alles auswählen

fire\
fox
wird dieses von der Shell genauso erkannt und interpretiert, als wenn man

Code: Alles auswählen

firefox
in einer Zeile eingeben würde.
josef-wien hat geschrieben:
9. Mär 2017, 17:01
Über die Qualität dieses Skripts müssen Berufenere ein Urteil abgeben, aber solange es funktioniert ...
Das ist Niveau in etwa nach 10 Stunden Bash-Programmiererfahrung, "useless use of cat" , nicht abgesicherte Variabelverwendung, Dateien anlegen/verschieben/..... ohne zu prüfen ob sie eventuell schon existieren, ungenau bis fehlerhafte reguläre Ausdrücke, nicht durchdachte Scheifensteuerung mit ungeprüften Werten (was passiert hier im Script zB wenn es 2 Dateien versions.dat.irgendwas gibt, zB eine Old-Version, oder was passiert wenn es eine solche Datei gar nicht gibt?), keine Absicherung vor Änderungen am System wenn vorher Befehle auf Fehler laufen, und vor allem die Annahme das auf jedem Rechner jeder User mittels sudo Alles machen darf ....

Aber das steht hier nicht zur Debatte, das scheint ein Userscript zu sein und hoffentlich nichts offizielles was sich irgendwo in einem richtigem Paket befindet.

robi

Benutzeravatar
Heinz-Peter
Guru
Guru
Beiträge: 1926
Registriert: 24. Okt 2005, 14:04

Re: Nachhlfe in Patch

Beitrag von Heinz-Peter » 10. Mär 2017, 20:16

Danke an @josef-wien und an @robi für die Nachhilfe in Patch :thumbs:
Ich markiere den Thread als gelöst.

Grüße Heinz-Peter
Mein Betriebssystem: Suse 13.2/13.1, Prozessor: Pentium 4 550 (3,40 GHz, FSB800, Hyper-Threading), Grafikkarte: Nvidia Geforce 6610XL (PCIe)/128MByte.
Wir müssen lernen, entweder als Brüder miteinander zu leben oder als Narren unterzugehen.

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast