cp (del inglés copy) es el comando estándar de Linux para copiar archivos y carpetas. Viene en cualquier distribución, así que no hace falta instalar nada.
A continuación repasamos los trucos principales que te serán útiles al trabajar con un servidor, desde copiar un solo archivo hasta trasladar una web conservando los permisos. Hemos probado los ejemplos en Debian 12, y en Ubuntu y otras distribuciones con GNU coreutils funcionan igual.
Sintaxis
cp [opciones] origen destinoSi el destino es una carpeta que ya existe, el archivo se copiará en ella con el mismo nombre. Si esa carpeta no existe, cp creará una copia con el nombre indicado.
Ejemplos básicos
# Copiamos un archivo a una carpeta
cp config.yml /root/backup/
# Hacemos una copia del archivo al lado con otro nombre, por ejemplo antes de cambiar la configuración
cp /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bak
# Copiamos varios archivos a una misma carpeta
cp file1.txt file2.txt /root/backup/
# Copiamos una carpeta con todo su contenido
cp -r /var/www/site /root/backup/Opciones útiles
| Opción | Qué hace |
|---|---|
-r | Copia carpetas enteras, con todo su contenido |
-a | Modo archivo. Copia carpetas y conserva los permisos, el propietario, las fechas y los enlaces |
-p | Conserva en la copia los permisos, el propietario y las fechas de modificación |
-i | Pide confirmación antes de sobrescribir un archivo existente |
-n | Nunca sobrescribe archivos existentes |
-u | Copia solo si el origen es más reciente o si el archivo aún no existe en el destino |
-b | Antes de sobrescribir, guarda el archivo antiguo con una virgulilla al final del nombre |
-v | Muestra cada archivo copiado |
Copiar una web conservando los permisos
Para trasladar webs y configuraciones, usa -a. Así la copia conservará el propietario, los permisos de acceso y las fechas, y el servidor web podrá trabajar con los archivos sin ajustes adicionales.
# Copiamos el contenido de la carpeta de la web junto con los archivos ocultos
cp -a /var/www/site/. /var/www/site-copy/Cómo copiar los archivos ocultos
El punto al final de la ruta /var/www/site/. significa «todo el contenido de la carpeta», incluidos los archivos ocultos como .htaccess y .env. No uses para esto el patrón .*. En las versiones antiguas de bash también incluye .., es decir, la carpeta superior, y cp copiará mucho más de lo necesario.
No sobrescribir los archivos que necesitas
# Preguntar antes de sobrescribir cada archivo
cp -i new.conf /etc/app/app.conf
# No tocar los archivos que ya existen y copiar solo los que faltan
cp -rn /root/backup/site/. /var/www/site/
# Sobrescribir, pero guardar la versión antigua como app.conf~
cp -b new.conf /etc/app/app.confCopiar solo los archivos modificados
# Actualizamos la copia, solo se transfieren los archivos nuevos y modificados
cp -au /var/www/site/. /root/backup/site/Para copias periódicas y carpetas grandes es más cómodo rsync, que hace lo mismo y además muestra el progreso.
Cómo ver el progreso de la copia
cp no tiene indicador de progreso, y la opción -v solo muestra los nombres de los archivos. Para archivos y carpetas grandes, usa rsync.
# Instalamos rsync si aún no está instalado
apt install -y rsync
# Copiamos la carpeta con un indicador de progreso general
rsync -a --info=progress2 /var/www/site/ /root/backup/site/Para copiar archivos entre servidores es cómodo usar scp o rsync, y tienes ejemplos en el artículo sobre las copias de seguridad.
Preguntas frecuentes
Error «-r not specified; omitting directory»
Estás intentando copiar una carpeta sin la opción -r. Añade -r o -a, por ejemplo cp -a /var/www/site /root/backup/.
Error «No space left on device»
Se ha acabado el espacio en el disco. Mira cuánto queda libre con el comando df -h, borra lo que sobre o pásate a un plan con un disco más grande. Es mejor borrar el archivo copiado a medias en el destino.
Error «Permission denied»
Tu usuario no tiene permisos para leer el origen o para escribir en la carpeta de destino. Ejecuta el comando con sudo o revisa los permisos con el comando ls -l.
¿Se puede interrumpir la copia?
Sí, pulsa Ctrl + C. Los archivos ya copiados se quedarán en su sitio, pero el último puede haberse copiado solo en parte. Para copiar después el resto, vuelve a ejecutar el comando con la opción -u o usa rsync.
Después de copiarla, la web ha dejado de funcionar
Lo más probable es que la copia haya cambiado de propietario porque copiaste sin la opción -a. Devuelve el propietario con el comando chown -R www-data:www-data /var/www/site-copy en Ubuntu y Debian o vuelve a copiar la carpeta con -a.
Nuestros recursos
Canal de Telegram: https://t.me/f3cloud_news
Web del hosting: https://f3cloud.com