CP по сравнению с кошкой для копирования файла

Если Вы делаете echo $PS1 от Вашей оболочки можно проверить, чтобы видеть, существует ли a \r где угодно в строке. Раз так это - преступник.

Для устранения проблемы, можно добавить a \n к началу Вашей подсказки.

Если Вам просто нужен кошке он к другой команде, можно сделать так без страха перед ним угоняемый. Для просмотра его в командной строке, можно также сделать cat file | less

12
29.01.2012, 04:18
5 ответов

Еще одна проблема прибывает по моему мнению где cat по сравнению с. cp имеет значительное значение:

По определению кошка развернет редкие файлы, заполняя разрывы с "реальными" нулевыми байтами, в то время как CP, по крайней мере, можно сказать сохранить дыры.

Редкие файлы являются файлами, где последовательности нулевых байтов были заменены метаданными для сохранения пространства. Можно протестировать путем создания один с dd и копировать его с инструментами по Вашему выбору.

  1. Создайте редкий файл (изменяющийся на/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
    
  2. измерьте его - это не должно занимать место.

    17> du -sh sparsetest
    0       sparsetest
    
  3. скопируйте его с CP и проверьте размер

    18> cp sparsetest sparsecp
    19> du -sh sparsecp
    0       sparsecp
    
  4. теперь скопируйте его с кошкой и проверьте размер

    20> cat sparsetest > sparsecat
    21> du -sh sparsecat
    1.3M    sparsecat
    
  5. попробуйте свои предпочтительные инструменты для проверения их поведения

  6. не забывайте мыться.

Заключительное предупреждение: Эксперименты как они имеют свойственный шанс повышения Вашей известности с Вашим локальным системным администратором при выполнении их в файловой системе, это - часть его плана резервного копирования, или очень важный для благополучия системы. В зависимости от его выбора инструмента для резервного копирования он мог бы закончить тем, что нуждался в большем ленточном носителе, чем он когда-нибудь считал возможным создать резервную копию того одного 0-байтового файла, который расширен до терабайт, обнуляет.

Другие файлы, которые не могут быть скопированы ни с кошкой, ни с CP, включали бы специальные для устройства файлы и т.д. Это зависит от Вашей реализации копирования инструмента, если бы это может копировать узел устройства, или если это весело скопировало бы свое содержание вместо этого.

14
27.01.2020, 19:54
  • 1
    Так cp делает файл точно так же, как оригинал, в то время как cat создает новый файл с тем же содержанием. –  Qian 30.01.2012, 17:29
  • 2
    Оба инструмента воздействуют на содержание, но CP (по крайней мере, "современные" реализации) знает о некоторых специальностях в наше время, как дыры (старые реализации кошки столкнутся с тем прерыванием). Также существуют файловые системы, которые не знают о понятии редких файлов, например, HFS + (MacOS) или FAT (MS-DOS, Карты с интерфейсом USB, и т.д.), заставляя их быть унесенными до их полного размера. Таким образом, существуют совокупности, где CP или кошка не будут иметь значения на практике. –  Tatjana Heuser 30.01.2012, 17:47

Согласно комментарию Keith, cp сохраняет некоторые полномочия, и cat создает новый файл как umask указывает. Так $2разрешение не сохраняется это $4/vmlinuz является довольно чистым, в то время как, если некоторое странное разрешение установлено на $3, $4/System.map сохранит это.

6
27.01.2020, 19:54

У обоих есть эквивалентная функциональность в тех двух случаях, но CP является просто операцией файла. "Возьмите этот файл и сделайте копию из него там".

кошка, с другой стороны, предназначается для разгрузки содержания файла к консоли. "Возьмите этот файл и отобразите его на экране" и затем сделайте, чтобы ниндзя напал на экран, и перенаправьте вывод в другом месте.

CP обычно было бы более эффективным, поскольку нет никакого перенаправления, идущего только, просто прямое копирование байтов от местоположения к местоположению B.

кошка была бы read bytes -> output to console -> intercept output -> redirect to new file.

4
27.01.2020, 19:54
  • 1
    cat не будет действительно output to console -> intercept output -> redirect to new file, выходной файл для кошки может быть stdout или нормальным файлом, это просто произведет в файл, пока вход не является тем же, как произведено. –   29.01.2012, 05:14
  • 2
    cat не имеет никакого отношения к консоли. Оба cat и cp читайте из входного файла и запишите в выходной файл. С cat, выходной файл открыт оболочкой, тогда как с cp, выходной файл открыт cp; это не делает разницы в производительности. cp может быть быстрее, но по совершенно другой причине: некоторые реализации cp попытайтесь предположить правильный размер блока для производительности в зависимости от входных и выходных устройств; реализация cat не обеспокоился бы. –  Gilles 'SO- stop being evil' 30.01.2012, 01:48

Это - действительно вопрос предпочтения, по моему скромному мнению.

Нет технически никакой реальной разницы, если Вы не используете команду CP с переключателем-p для сохранения принадлежности файла / группа. Иначе это - то же самое функционально. Ответ Marc является намного более явно подробным хотя и точный.

2
27.01.2020, 19:54
  • 1
    cp без -p действительно сохраняет некоторые полномочия. Например, если исходный файл является исполняемым файлом, cp сделает исполняемый файл конечного файла, но cat не будет. положительная сторона –  Keith Thompson 29.01.2012, 04:35
  • 2
    ! Так vmlinuz не будет исполняемый файл ли $2 . –   29.01.2012, 04:38

Найден catздесь и там в некоторых файлах Makefile/скриптах, что заставило меня тратить время, так как catстановится интерактивным, когда входной файл не задан. Можно также тратить реальные деньги на инструменты для сборки, если они застопорились на длительный период.

Для иллюстрации на примере OP:

Предположим, что $2и $3являются пустыми строками оболочки (по какой-то плохой причине :\):

cat $2 > $4/vmlinuz     # waits forever
cp $3 $4/System.map     # returns an error immediately

Теперь я склонен использовать cpили installвместо cat, когда это возможно.

Интересные ответы и комментарии, спасибо!

1
10.08.2020, 13:00

Теги

Похожие вопросы