mit bash eine ascii datei zerlegen
mit bash eine ascii datei zerlegen
hi!
geht das und wenn ja einen anhaltspunkt wie ich so was machen könnte?
ich hab eine txt datei mit einem pool von ip addressen die schoen untereinander stehen. ich moechte nun mit einem prozess drauf zugreifen, eine ip schnappen, in eine variable einlesen und dann aus der datei löschen. und ich möchte prüfen ob die datei schon von einem anderen prozess genützt wird.
thx4help
geht das und wenn ja einen anhaltspunkt wie ich so was machen könnte?
ich hab eine txt datei mit einem pool von ip addressen die schoen untereinander stehen. ich moechte nun mit einem prozess drauf zugreifen, eine ip schnappen, in eine variable einlesen und dann aus der datei löschen. und ich möchte prüfen ob die datei schon von einem anderen prozess genützt wird.
thx4help
- peschmae
- Beiträge: 4844
- Registriert: 07.01.2003 12:50:33
- Lizenz eigener Beiträge: MIT Lizenz
- Wohnort: nirgendwo im irgendwo
Der einzige Haken ist eigentlich das Prüfen ob die Datei schon von einem anderen Prozess genutzt wird.
Code-Stückchen:
Vor allem das letzte bedingt aber exklusiven Zugriff auf die Datei damits kein Chaos gibt
MfG Peschmä
Code-Stückchen:
Code: Alles auswählen
#erste IP lesen
IP=$(head -1 datei.txt)
#n-te IP lesen
n=7
IP=$(sed -n "$np" datei.txt)
#IP aus Datei entfernen
grep -v $IP datei.txt > datei.txt.old
mv datei.txt.old datei.txt
MfG Peschmä
"er hätte nicht in die usa ziehen dürfen - die versauen alles" -- Snoopy
Es gibt verschienden Methoden, eine Datei vor Zugriff durch einen anderen Prozess zu schützen, aber keinen auf Betriebsystemebene.und ich möchte prüfen ob die datei schon von einem anderen prozess genützt wird.
a) Es gibt da lsof, aber da hast du ein Zeit Problem: Was wenn ein anderer Prozess auf das File zugreift, nachdem du geprüft hast, ob es von einem anderen Prozess geöffnet wurde, aber bevor/wärend dein Prozess liest/schreibt ?
b) Verschieden Methoden von file lock: Problem ist hier, dass alle Prozesse, welche auf das File zugreifen, dieselbe Methoden benutzen müssen Es gibt meines Wissens in Linux keinen file lock auf Betriebsystem resp. Kernelebene. Schreibst du selber alle diese Prozesse, dann geht ein file lock.
Andere Idee: Kopiere das File in ein anderes und arbeite mit der Kopie.
Du musst schon genauer sagen, was genau du tun willst, damit eine Lösung gefunden werden kann....
Have fun...
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
danke für eure antworten
ok also was ich vorhabe ist ein skript welches ich zb 3 oder 4 mal starte. aus der datei eine ip zieht. mit smbmount c$ und d$ der ip mountet und mit verschiedenen viren scannern drübergeht.
möchte also mein skript die ganze zeit in unserem lan kreisen lassen (trend micro hat sich als sehr ineffizient erwiesen ...)
bis dato füttere ich über meine firewall das skript automatisch nach auffälligen ip addressen, möcht nun aber einen permanenten scan laufen lassen auf diese art und weise.
ok also was ich vorhabe ist ein skript welches ich zb 3 oder 4 mal starte. aus der datei eine ip zieht. mit smbmount c$ und d$ der ip mountet und mit verschiedenen viren scannern drübergeht.
möchte also mein skript die ganze zeit in unserem lan kreisen lassen (trend micro hat sich als sehr ineffizient erwiesen ...)
bis dato füttere ich über meine firewall das skript automatisch nach auffälligen ip addressen, möcht nun aber einen permanenten scan laufen lassen auf diese art und weise.
Ich hoffe, du hast hier falsch kopiert hast, denn sonst wird dein script nicht richtig laufen:
einmal schreibst du: pool.txt.lock
und zweimal: pool.txt.loock
Ausserdem gibt es ein kleines Zeitproblem: Zwischen dem Test, ob das File exisitert und dem touch-Befehl liegt eine kleine Zeitspanne. Hier könnte ein anderer Prozess schneller sein. Ob das jedoch relevant ist weiss ich nicht.
einmal schreibst du: pool.txt.lock
und zweimal: pool.txt.loock
Ausserdem gibt es ein kleines Zeitproblem: Zwischen dem Test, ob das File exisitert und dem touch-Befehl liegt eine kleine Zeitspanne. Hier könnte ein anderer Prozess schneller sein. Ob das jedoch relevant ist weiss ich nicht.
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
Und hier noch eine Lösung aus dem "Advanced Bash-Scripting Guide" auf http://www.linuxvoodoo.com/resources/gu ... hells.html
Natürlich müsstest die Logik anpassen. (while statt if)
Vorteil: Es wird in einem Befehl getestet und das lockfile erstellt. Es gibt also keine Möglichkeit mehr für einen anderern Prozess, dazwischenzufunken.
Code: Alles auswählen
if (set -C; : > lock_file) 2> /dev/null
then
echo "Another user is already running that script."
exit 65
fi
Vorteil: Es wird in einem Befehl getestet und das lockfile erstellt. Es gibt also keine Möglichkeit mehr für einen anderern Prozess, dazwischenzufunken.
Freedom is the freedom to say that two plus two make four. If that is granted, all else follows.
-
- Beiträge: 152
- Registriert: 01.04.2004 10:09:25
-
Kontaktdaten:
Hi,
ne andere Lösung wäre noch, die IP's in eine FIFO (named pipe) zu schreiben. Dann mußt du die gerade gelesene IP nicht manuell löschen.
Grüße
stargaizer
ne andere Lösung wäre noch, die IP's in eine FIFO (named pipe) zu schreiben. Dann mußt du die gerade gelesene IP nicht manuell löschen.
Code: Alles auswählen
man mkfifo
stargaizer