Dlaczego używamy cp do kopiowania plików, a nie dd? (w pochodnych unixach)

21

W przypadku normalnego kopiowania plików w * nix, widziałem tylko ludzi używających cp (np. cp /mnt/mydevice/myfile ~/myfile), Ale ostatecznie natknąłem się na to dd, co robi dokładnie to samo ( dd if=/mnt/mydevice/myfile of=~/myfile). Widzę, że mają one różne dostępne parametry (dd wydaje się lepsze przy precyzyjnym dostrajaniu), ale wydają się zbędne. Czy te narzędzia naprawdę robią to samo?

użytkownik232105
źródło
Robią to samo tylko dla zwykłych plików. Spróbuj na przykład skopiować katalog za pomocą dd.
Eddy_Em,
... lub urządzenie (jak /dev/sda) z cp.
jpaugh
Czy udzielono odpowiedzi na twoje pytanie?
Kruug
@Eddy_Em, co się z tym dzieje?
Pacerier

Odpowiedzi:

13

Aby odpowiedzieć na twoje główne pytanie, nie, oni nie robią tego samego.

dd działa na podanym pliku, umożliwiając kopiowanie danych między urządzeniami lub z urządzenia do pliku. Jest to powszechnie używane do przenoszenia danych, jeśli konkretnie zaangażowane są urządzenia (utwórz obraz ISO z płyty CD-ROM, na przykład: dd if = / dev / cdrom of = mycdrom.iso) lub do tworzenia kopii zapasowych surowych urządzeń (czasami używanych w bazach danych RAC : dd if = / dev / raw / raw1 of = device_raw1)

cp służy do kopiowania zawartości pliku do nowego pliku lub do nowej lokalizacji. rzeczy, których konkretnie chcesz, to zachowanie własności, sygnatury czasowej i trybu (prawa) oraz możliwość ponownego wykonania operacji (= możliwość kopiowania katalogów).

Źródło

Kruug
źródło
3
Ach! Ok, więc dd kopiuje plik raw, podczas gdy cp kopiuje zawartość (co pozwala mu na przykład kopiować katalogi bez uszkodzenia systemu plików). Dzięki!
user232105
5
@Kruug, muszę coś przeoczyć, ponieważ wciąż nie widzę, co cpmożna zrobić, ddczego nie można. ddjest również w stanie „powielić zawartość pliku do nowego pliku lub do nowej lokalizacji” oraz „zachować własność, znacznik czasu i tryb”, prawda?
Pacerier
3
@Pacerier z tego, co rozumiem, cpjest bardziej ukierunkowanym narzędziem, podczas gdy ddjest bardziej ogólne. ddmoże zrobić wszystko, co cpmożna, ale cptylko niektóre z ddnich.
Kruug
Nie sądzę, że różnica jest wyjaśniona jasno. Czego cp nie może zrobić, a dd może? I odwrotnie?
ur
9

Robią to samo, JEŚLI nie określisz jednej z opcji, do ddktórych limity są kopiowane, np. seekLub skiplub countlub jeśli użyjesz ddopcji do mutacji bajtów, np conv. Jeśli nie korzystasz z jednej z tych opcji do ddi po prostu przy użyciu powszechnie postrzegane opcje jak if, of, bspo czym oba narzędzia zrobić to samo: otworzyć oba pliki, czytać z wejścia, napisz do wyjścia, aż albo wejście jest wyczerpany lub wyjście nie może zaakceptować więcej bajtów.

Istnieje wiele przesądów dotyczących odczytywania i zapisywania plików „urządzeń”, które mówią, że musisz ich używać dd, ale to po prostu przesąd. ddnie robi nic innego, po prostu otwieramy pliki oraz odczytujemy i zapisujemy bajty.

gulasz
źródło
Mniej więcej to ... jeśli użyjesz = przeznaczenie w zależności od urządzenia, mogą wystąpić pewne problemy, np. Dysk flash USB. Odkrywam, że muszę użyć >> destiny i usunąć parametr = xxx, aby działał. Jeśli użyję = przeznaczenie, pojawią się dziwne problemy, ponieważ działam z flagą skip i iflags = skip_bytes ... więc nie ma przesądów. Wymaga opieki i testów z powodu = przeznaczenie może nie działać poprawnie w niektórych warunkach, w których >> przeznaczenie przebiega gładko. Napisałem skrypt, aby zapisać duży plik do pendrive z krokami. Pełna kopia 400 MB używana do zepsucia partycji dysku sdcard.
Sergio Abreu