cp a b
그리고 cat a > b
, 차이점은 무엇입니까?
리눅스 커널 소스 트리 (x)의 x86 설치 스크립트 arch/x86/boot/install.sh
에서 둘 다 사용됩니다 :
cat $2 > $4/vmlinuz
cp $3 $4/System.map
하나가 다른 것보다 낫다면 왜 같은 형식을 유지하지 않습니까?
답변
cat
vs. cp
가 중요한 차이를 만드는 곳에서 또 다른 문제가 있습니다.
정의에 따르면 cat은 희소 파일을 확장하여 간격을 “실제”0 바이트로 채우는 반면 cp는 최소한 구멍을 보존하도록 지시 할 수 있습니다.
스파 스 파일은 공간을 보존하기 위해 0 바이트 시퀀스가 메타 데이터로 대체 된 파일입니다. dd를 사용하여 테스트하고 선택한 도구로 복제하여 테스트 할 수 있습니다.
-
스파 스 파일을 만듭니다 (문제를 피하기 위해 미리 / tmp로 변경-최종 참고 사항 참조).
15> cd /tmp 16> dd if=/dev/null of=sparsetest bs=512b seek=5 0+0 records in 0+0 records out 0 bytes (0 B) copied, 5.9256e-05 s, 0.0 kB/s
-
크기를 정하십시오-공간을 차지하지 않아야합니다.
17> du -sh sparsetest 0 sparsetest
-
cp로 복사하고 크기를 확인하십시오.
18> cp sparsetest sparsecp 19> du -sh sparsecp 0 sparsecp
-
고양이와 함께 복사하고 크기를 확인하십시오.
20> cat sparsetest > sparsecat 21> du -sh sparsecat 1.3M sparsecat
-
선호하는 도구를 사용하여 동작을 확인하십시오.
-
정리하는 것을 잊지 마십시오.
최종주의 사항 : 이와 같은 실험은 백업 계획의 일부이거나 시스템의 건강에 중요한 파일 시스템에서 수행하는 경우 로컬 sysadmin에 대한 명성을 높일 가능성이 있습니다. 백업 도구 선택에 따라 테라 바이트 단위의 0으로 확장되는 하나의 0 바이트 파일을 백업 할 수있는 것보다 더 많은 테이프 미디어가 필요할 수 있습니다.
cat 또는 cp로 복사 할 수없는 다른 파일에는 장치 별 파일 등이 포함됩니다. 장치 노드를 복제 할 수 있는지 또는 내용을 대신 복사하는 경우 복사 도구 구현에 따라 다릅니다.
답변
에 따르면 키스의 코멘트 , cp
일부 권한을 유지하고, cat
같은 새 파일을 만들어 umask
냅니다. 그래서 $2
의 권한은 해당 보존되지 않습니다 $4/vmlinuz
이상한 허가에 설정되어있는 경우 동안, 아주 깨끗 $3
, $4/System.map
그것을 유지합니다.
답변
이 두 경우 모두 동일한 기능을 갖지만 cp는 순전히 파일 작업입니다. “이 파일을 가져 와서 그 위에 복사하십시오”.
반면에 cat은 파일의 내용을 콘솔로 덤프하기위한 것입니다. “이 파일을 가져 와서 화면에 표시”한 다음 닌자가 화면을 공격하고 다른 곳으로 출력을 리디렉션하도록하십시오.
cp는 일반적으로 리디렉션이 없으므로 위치 A에서 위치 B로 바이트를 직접 복사하기 때문에 더 효율적입니다.
고양이가 될 것입니다 read bytes -> output to console -> intercept output -> redirect to new file
.
답변
IMHO, 그것은 실제로 선호의 문제입니다.
파일 소유권 / 그룹을 보존하기 위해 -p 스위치와 함께 cp 명령을 사용하지 않는 한 기술적으로 실질적인 차이는 없습니다. 그렇지 않으면 기능적으로 동일합니다. Marc의 답변은 훨씬 명확하고 정확합니다.