mboost-dp1

Linux question: Brug af dd?


Gå til bund
Gravatar #1 - Qw_freak
29. maj 2012 07:58
Hay, så er næste dumme linux spørgsmål her:

Jeg skal skrive nogen strenge direkte i en flash partition, og har fået at vide at dd er et rigtig godt værktøj til dette, men jeg kan desværre ikke rigtig finde hoved og hale i hvordan det skal se ud når jeg bruger kommandoen...

Min partition er på /dev/mtd/mtd2
og strengen er egentlig vilkårlig fra gang til gang..

any ideas?
Gravatar #2 - myplacedk
29. maj 2012 09:57
Qw_freak (1) skrev:
any ideas?

Masser. Her er tre:

1) Kig i manualen
2) Kig på nogle eksempler (der er nogle i manualen)
3) Stil mere konkrete spørgsmål

Ikke for at være uhøflig, men jeg har jo ingen anelse om hvad det er du ikke forstår. Eller for den sags skyld hvad du egentlig vil, teknisk set.
Gravatar #3 - kasperd
29. maj 2012 10:26
Qw_freak (1) skrev:
Jeg skal skrive nogen strenge direkte i en flash partition, og har fået at vide at dd er et rigtig godt værktøj til dette
Der er mange som anbefaler dd, selv i situationer hvor et simplere værktøj ville være mere velegnet.

Hvis nogen har anbefalet dd baseret på den mangelfulde beskrivelse du har givet af opgaven, så vil jeg sige at de personer hverken har forstået hvad opgaven går ud på, eller det værktøj de anbefaler.

Et block device kan tilgås på samme måde som en regulær fil. Du kan bruge alle de samme værktøjer, inklusiv dd. Men du er nødt til at beskrive opgaven mere præcist. Hvis man bare skriver strenge til blockdevices uden at vide præcist hvad man gør, så ender man med et korrupt filsystem.
Gravatar #4 - Qw_freak
29. maj 2012 11:20
Jeg har en separat partition som er forbeholdt enhedsspecifik data, det kunne være MAC adressen (det er det ikke).

Denne data skal ved produktion af enheden skrives over i partitionen vha. et script der modtager datastrengen som parameter.

noget a' la:
dd "streng der skal skrives" of=/dev/mtd/mtd2



myplacedk (2) skrev:

1) Kig i manualen
2) Kig på nogle eksempler (der er nogle i manualen)
3) Stil mere konkrete spørgsmål


1) Jeg har kigget,men kan ganske simplet ikke finde runt i hvad jeg har behov for.
2) Jeg har kigget i de exempler der er, og de er ikke beskrivende nog for mig i mit problem(synes jeg :-s )
3) troede det var konkret nok, mere info ovenfor....

Gravatar #5 - myplacedk
29. maj 2012 12:31
Qw_freak (4) skrev:
dd "streng der skal skrives" of=/dev/mtd/mtd2


echo -n "streng der skal skrives" | dd of=/dev/mtd/mtd2

Med lidt held er det alt hvad du skal bruge.

Måske bør du angive en block-size. Her bør man generelt bruge den blocksize som deviced bruger. Jeg aner ikke hvad der sker mere de resterende bytes i en blok hvis din streng ikke passer med et helt antal blokke.

Hvis block-size på dit device er 4096 bytes bliver det så til:

echo -n "streng der skal skrives" | dd of=/dev/mtd/mtd2 bs=4096

Qw_freak (4) skrev:
Jeg har kigget,men kan ganske simplet ikke finde runt i hvad jeg har behov for.

man-sider er noget man skal lære at læse. :)
Men første sætning i første afsnit beskriver hvordan du får din streng ind i dd: "The dd utility copies the standard input to the standard output."
Gravatar #6 - Qw_freak
29. maj 2012 12:50
myplacedk (5) skrev:
echo -n "streng der skal skrives" | dd of=/dev/mtd/mtd2


Yuop, det virker.... :D

myplacedk (5) skrev:
Men første sætning i første afsnit beskriver hvordan du får din streng ind i dd: "The dd utility copies the standard input to the standard output."


Problemet er så at jeg først nu har fårstet hvordan man bruger stin sammen med et program... troede det bare var e som en parameter man sendte emd programmet...
Gravatar #7 - Qw_freak
29. maj 2012 13:00
Hvordan får jeg så dd til at læse ud til stdout hvis jeg kun definerer en if...
Gravatar #8 - myplacedk
29. maj 2012 13:09
Qw_freak (7) skrev:
Hvordan får jeg så dd til at læse ud til stdout hvis jeg kun definerer en if...

Det skal du ikke gøre noget for.

$ date > fil.txt
$ dd if=fil.txt
29. maj 2012 15:07:31
0+1 blokke ind
0+1 blokke ud
22 byte (22 B) kopieret, 7,4376e-05 s, 296 kB/s

Hvis du vil undgå al snavset kan du omdirrigere det:

$ dd if=fil.txt 2>/dev/null
29. maj 2012 15:07:31

Der er to outputs. Standard output (1) og error output (2). Her omdirrigerer jeg error output til ingenting.

Also: Wow, det er allerede mit på eftermiddagen.
Gravatar #9 - kasperd
29. maj 2012 19:52
myplacedk (5) skrev:
echo -n "streng der skal skrives" | dd of=/dev/mtd/mtd2
Det er fuldstændigt overflødigt at bruge dd i den kommando.

echo -n "streng der skal skrives" >/dev/mtd/mtd2
eller
printf "streng der skal skrives" >/dev/mtd/mtd2

vil begge opnå samme resultat helt uden brug af dd.

myplacedk (5) skrev:
Måske bør du angive en block-size.
Det er ret ligegyldigt i det konkrete eksempel. Hvis strengen er kortere end 512 bytes vil det faktisk overhovedet ingen forskel gøre.

myplacedk (5) skrev:
Her bør man generelt bruge den blocksize som deviced bruger. Jeg aner ikke hvad der sker mere de resterende bytes i en blok hvis din streng ikke passer med et helt antal blokke.
Hvis dd læser færre bytes end den blokstørrelse du har angivet, så vil det blot skrive færre bytes. Og så er ethvert formål med at bruge en blokstørrelse i første omgang helt gået tabt.

dd er praktisk til f.eks. bånd, hvor det faktisk betyder noget hvor mange bytes man skriver ad gangen. Den kan også være smart hvis man gerne vil omgå caching når man tilgår en disk.

Når man vil læse data igen, så kan man f.eks. bruge head kommandoen. Hvis man f.eks. tager eksemplet hvor strengen er 23 bytes, så kan man skrive:

head -c23 </dev/mtd/mtd2

Hvis man ikke selv har lyst til at holde styr på længden af det man skriver, så skal man ikke skrive direkte på partitionen. Der findes et værktøj beregnet til at skrive strenge af forskellige længder til en partition og holde styr på hvor lang hver streng er. Det værktøj hedder et filsystem.
Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login