[gelöst] dd Problem

Du hast Probleme mit Deinem eMail-Programm, Webbrowser oder Textprogramm? Dein Lieblingsprogramm streikt?
Antworten
wolf49
Beiträge: 233
Registriert: 27.12.2018 15:41:22

[gelöst] dd Problem

Beitrag von wolf49 » 20.06.2023 16:18:07

Code: Alles auswählen

root@k4l:~# dd if=/dev/null of=Null bs=512 count=8
0+0 Datensätze ein
0+0 Datensätze aus
0 Bytes kopiert, 0,000238726 s, 0,0 kB/s
root@k4l:~# 
warum funktioniert das nicht ?
Zuletzt geändert von wolf49 am 20.06.2023 16:53:10, insgesamt 1-mal geändert.

Benutzeravatar
towo
Beiträge: 4409
Registriert: 27.02.2007 19:49:44
Lizenz eigener Beiträge: GNU Free Documentation License

Re: dd Problem

Beitrag von towo » 20.06.2023 16:24:21

Was will denn wohl

Code: Alles auswählen

of=Null
sein?

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

Re: dd Problem

Beitrag von hikaru » 20.06.2023 16:26:47

Das funktioniert genau so wie es soll. ;)
/dev/null ist im Gegensatz zu /dev/zero Null-terminiert. D.h., das erste und einzige Zeichen, das du daraus lesen wirst ist ein Null-Byte. Daher hat auch deine erzeugte Datei die Größe 0, statt der 4kB Nullen die du vermutlich erwartet hättest, und aus /dev/zero bekommen hättest.

wolf49
Beiträge: 233
Registriert: 27.12.2018 15:41:22

Re: dd Problem

Beitrag von wolf49 » 20.06.2023 16:50:33

mit /dev/zero funktioniert es, danke

Benutzeravatar
grubenlicht
Beiträge: 422
Registriert: 10.06.2021 22:35:56

Re: dd Problem

Beitrag von grubenlicht » 20.06.2023 17:17:35

wolf49 hat geschrieben: ↑ zum Beitrag ↑
20.06.2023 16:50:33
mit /dev/zero funktioniert es, danke
aber ganz sicher nicht mit of=0 !

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

Re: dd Problem

Beitrag von Meillo » 20.06.2023 17:25:35

hikaru hat geschrieben: ↑ zum Beitrag ↑
20.06.2023 16:26:47
/dev/null ist im Gegensatz zu /dev/zero Null-terminiert. D.h., das erste und einzige Zeichen, das du daraus lesen wirst ist ein Null-Byte.
Diese Erklaerung stimmt technisch so nicht ganz ... auch wenn das Richtige gemeint war. Ich will das mal genauer und exakter darlegen.

Hier der Ausschnitt aus der Manpage:
Manpage null(4) hat geschrieben: Reads from the null special file always return end of
file (i.e., read(2) returns 0), whereas reads from zero
always return bytes containing zero (\0 characters).
/dev/null ist eine leere Datei. Wenn man daraus liest, dann bekommt man kein Null-Byte, sondern es kann kein einziges Byte gelesen werden; read(2) liefert direkt den Wert 0 zurueck, also dass es 0 Bytes gelesen hat, was end-of-file bedeutet. (Nachtrag: /dev/null verhaelt sich beim Lesen wie jede andere leere Datei. Der Unterschied liegt beim Schreiben, denn alles was man reinschreibt wird einfach verworfen.)

Bei /dev/zero dagegen kann man endlos lange lesen, so viel man will. Jedes Byte, das man liest wird ein Null-Byte sein (d.h. alle Bits sind 0). (Nachtrag: Beim Schreiben verhaelt sich /dev/zero gleich wie /dev/null: Alles was man reinschreibt wird verworfen.)


Den Begriff Null-Terminierung gibt es in diesem Zusammenhang nicht. Dateien sind nie Null-terminiert. Null-Terminierung ist ein Konzept von C, das dort fuer Arrays (Strings sind Char-Arrays) verwendet wird.
Use ed once in a while!

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

Re: [gelöst] dd Problem

Beitrag von Meillo » 20.06.2023 17:29:00

wolf49 hat geschrieben: ↑ zum Beitrag ↑
20.06.2023 16:18:07

Code: Alles auswählen

root@k4l:~# dd if=/dev/null of=Null bs=512 count=8
0+0 Datensätze ein
0+0 Datensätze aus
0 Bytes kopiert, 0,000238726 s, 0,0 kB/s
root@k4l:~# 
warum funktioniert das nicht ?
Der Befehl hat korrekt funktioniert: Du hast aus einer leeren Datei (/dev/null) gelesen und in die Datei `Null' im aktuellen Verzeichnis geschrieben. Das hast du maximal 8 Bloecke a 512 Bytes lange machen wollen. Da die Inputdatei leer ist, sind keine Bytes kopiert worden. Es ist eine leere Datei `Null' angelegt worden. Alles perfekt in Ordnung. :-D


(Schon klar, dass du eigentlich was anderes wolltest. ;-) )
Use ed once in a while!

Benutzeravatar
grubenlicht
Beiträge: 422
Registriert: 10.06.2021 22:35:56

Re: dd Problem

Beitrag von grubenlicht » 20.06.2023 17:35:41

grubenlicht hat geschrieben: ↑ zum Beitrag ↑
20.06.2023 17:17:35
wolf49 hat geschrieben: ↑ zum Beitrag ↑
20.06.2023 16:50:33
mit /dev/zero funktioniert es, danke
aber ganz sicher nicht mit of=Null !

wolf49
Beiträge: 233
Registriert: 27.12.2018 15:41:22

Re: [gelöst] dd Problem

Beitrag von wolf49 » 20.06.2023 17:48:06

aber ganz sicher nicht mit of=Null !
doch, Null ist der Dateiname, 4MB. und leer.

Benutzeravatar
Livingston
Beiträge: 1457
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: dd Problem

Beitrag von Livingston » 20.06.2023 17:48:44

grubenlicht hat geschrieben: ↑ zum Beitrag ↑
20.06.2023 17:35:41
aber ganz sicher nicht mit of=Null !
Das output file (of) heißt Null und wird im aktuellen Verzeichnis angelegt.
Der Hauptunterschied zwischen etwas, was möglicherweise kaputtgehen könnte und etwas, was unmöglich kaputtgehen kann, besteht darin, dass sich bei allem, was unmöglich kaputtgehen kann, falls es doch kaputtgeht, normalerweise herausstellt, dass es unmöglich zerlegt oder repariert werden kann.
Douglas Adams

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

Re: [gelöst] dd Problem

Beitrag von Meillo » 20.06.2023 18:14:41

wolf49 hat geschrieben: ↑ zum Beitrag ↑
20.06.2023 17:48:06
aber ganz sicher nicht mit of=Null !
doch, Null ist der Dateiname, 4MB. und leer.
Kommt darauf an wie du ``leer'' definierst. ;-)

Ich wuerde sagen, dass die Datei mit 4 KILObytes Null-Bytes gefuellt ist. (Eine leere Datei hattest du bei deinem ersten Versuch angelegt.)

Man koennte darueber hinaus noch auf die Idee kommen, dass eine Datei, die nur aus Hole besteht, leer ist. Die belegt naemlich, ausser der Inode keine Bloecke des Dateisystems:

Code: Alles auswählen

:-Q dd if=/dev/zero of=Null bs=512 count=8
8+0 records in
8+0 records out
4096 bytes (4.1 kB) copied, 5.6952e-05 s, 71.9 MB/s

:-Q ls -l Null
-rw-r--r-- 1 meillo meillo 4096 Jun 20 18:09 Null

:-Q du -sh Null
4.0K    Null

:-Q stat Null
  File: `Null'
  Size: 4096            Blocks: 8          IO Block: 4096   regular file
Device: a150b6a1h/2706421409d   Inode: 160407      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  meillo)   Gid: ( 1000/  meillo)
Access: 2023-06-20 18:09:54.430894696 +0200
Modify: 2023-06-20 18:09:54.431894719 +0200
Change: 2023-06-20 18:09:54.431894719 +0200
 Birth: -


:-Q touch Hole

:-Q truncate -s 4K Hole

:-Q ls -l Hole         
-rw-r--r-- 1 meillo meillo 4096 Jun 20 18:10 Hole

:-Q du -sh Hole
0       Hole

:-Q stat Hole
  File: `Hole'
  Size: 4096            Blocks: 0          IO Block: 4096   regular file
Device: a150b6a1h/2706421409d   Inode: 160408      Links: 1
Access: (0644/-rw-r--r--)  Uid: ( 1000/  meillo)   Gid: ( 1000/  meillo)
Access: 2023-06-20 18:10:26.649614523 +0200
Modify: 2023-06-20 18:10:33.438766205 +0200
Change: 2023-06-20 18:10:33.438766205 +0200
 Birth: -
Allerdings kann man aus der Datei `Hole' genau 4k Null-Bytes rauslesen. So ganz leer scheint sie also doch nicht zu sein. Es ist in dem Fall eher virtueller Inhalt. ;-)
Zuletzt geändert von Meillo am 21.06.2023 06:42:13, insgesamt 1-mal geändert.
Grund: stat-Ausgabe ergaenzt
Use ed once in a while!

Antworten