mboost-dp1
Linux question: Brug af dd?
- Forside
- ⟨
- Forum
- ⟨
- Software
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?
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?
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.
Der er mange som anbefaler dd, selv i situationer hvor et simplere værktøj ville være mere velegnet.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
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.
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:
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....
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....
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."
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...
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.
Det er fuldstændigt overflødigt at bruge dd i den kommando.myplacedk (5) skrev:echo -n "streng der skal skrives" | dd of=/dev/mtd/mtd2
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.
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:Måske bør du angive en block-size.
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.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.
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.
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.