Respostas:
Mais uma questão vem à minha mente onde catvs. cpfaz uma diferença significativa:
Por definição, o gato expandirá arquivos esparsos, preenchendo as lacunas com zero bytes "reais", enquanto pelo menos cp pode ser dito para preservar os buracos.
Arquivos esparsos são arquivos em que seqüências de zero bytes foram substituídas por metadados para preservar espaço. Você pode testar criando um com dd e duplicá-lo com as ferramentas de sua escolha.
Crie um arquivo esparso (alterando para / tmp antecipadamente para evitar problemas - veja a nota final):
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/sdimensione - não deve ocupar espaço.
17> du -sh sparsetest
0 sparsetestcopie-o com cp e verifique o tamanho
18> cp sparsetest sparsecp
19> du -sh sparsecp
0 sparsecpagora copie-o com gato e verifique o tamanho
20> cat sparsetest > sparsecat
21> du -sh sparsecat
1.3M sparsecattente suas ferramentas preferidas para verificar o comportamento delas
não esqueça de limpar.
Nota final de cautela: Experiências como essas têm a chance inerente de aumentar sua fama com o administrador de sistemas local, se você as estiver executando em um sistema de arquivos que faça parte do plano de backup dele ou seja crítico para o bem-estar do sistema. Dependendo da sua escolha de ferramenta para backup, ele pode acabar precisando de mais mídia de fita do que jamais considerou possível fazer backup desse arquivo de 0 byte que é expandido para terabytes de zeros.
Outros arquivos que não podem ser copiados nem com o cat nem com o cp incluem arquivos especiais do dispositivo, etc. Depende da implementação da ferramenta de cópia, se é capaz de duplicar o nó do dispositivo ou se, em vez disso, ele copiava seu conteúdo.
cptem uma opção para controlar seu comportamento em arquivos esparsos; como, com --sparse=neverespecificado na linha de comando, cpé tão lento quanto cat.
De acordo com o comentário de Keith , cppreserva algumas permissões e catcria o novo arquivo conforme umaskindicado. A $2permissão de So não é preservada, o que $4/vmlinuzé bastante limpo, enquanto se alguma permissão estranha estiver ativada $3, $4/System.mapa manterá.
cata jovialidade?
catmais rápido?
Ambos têm funcionalidade equivalente nesses dois casos, mas o cp é puramente uma operação de arquivo. "Pegue este arquivo e faça uma cópia dele por lá".
cat, por outro lado, pretende despejar o conteúdo de um arquivo no console. "Pegue este arquivo e exiba-o na tela" e faça com que um ninja ataque a tela e redirecione a saída para outro lugar.
cp geralmente seria mais eficiente, já que não há redirecionamento, apenas uma cópia direta de bytes do local A para o local B.
gato seria read bytes -> output to console -> intercept output -> redirect to new file.
catNa verdade output to console -> intercept output -> redirect to new file, o arquivo de saída para cat pode ser stdout ou um arquivo normal; ele será enviado apenas para o arquivo, desde que a entrada não seja a mesma que a saída.
catnão tem nada a ver com o console. Ambos cate cpler a partir do arquivo de entrada e gravação para o arquivo de saída. Com cat, o arquivo de saída é aberto pelo shell, enquanto que com cp, o arquivo de saída é aberto por cp; isso não faz diferença no desempenho. cppode ser mais rápido, mas por um motivo completamente diferente: algumas implementações cptentam adivinhar o tamanho correto do pedaço para o desempenho, dependendo da origem e dos dispositivos de destino; uma implementação de catnão incomodaria.
É realmente uma questão de preferência, IMHO.
Tecnicamente, não há diferença real, a menos que você use o comando cp com a opção -p para preservar a propriedade / grupo do arquivo. Caso contrário, é a mesma coisa funcionalmente. A resposta de Marc é muito mais clara e precisa.
cpsem -ppreserva algumas permissões. Por exemplo, se o arquivo de origem for executável, cpo arquivo de destino catserá executável, mas não será.
cp,catcria um arquivo como o original, enquanto cria um novo arquivo com o mesmo conteúdo.