El contenido del artículo
- 1 Todo lo que necesitas saber sobre el comando ‘cp’ en Linux
- 2 Sintaxis y opciones cp en Linux
- 3 Ejemplos de casos de uso de cp
- 3.1 1. Copiar un archivo a un archivo
- 3.2 2. Copiar un archivo a una carpeta
- 3.3 3. Copiar carpeta a carpeta
- 3.4 4. Copiar el contenido de la carpeta a la carpeta
- 3.5 5. Procesamiento de archivos existentes
- 3.6 6. Copiar enlaces
- 3.7 7. Guardar atributos al copiar
- 3.8 8. Copiar y copiar en escritura
- 3.9 9. Manejo de archivos dispersos
- 4 Resultados
Todo lo que necesitas saber sobre el comando ‘cp’ en Linux
Cuando se trabaja en el terminal, a menudo hay que copiar archivos. La forma más común de hacer esto es usar el comando cp de Linux. Viene de forma predeterminada en todas las distribuciones y puede copiar archivos y carpetas, así como guardar sus atributos en los sistemas de archivos de Linux.
En este artículo, veremos qué es esta utilidad, su sintaxis, opciones básicas, así como varios ejemplos de uso.
El contenido del artículo
Sintaxis y opciones cp en Linux
La utilidad tiene dos opciones de sintaxis posibles para copiar archivos: copiar el archivo a otro archivo con el nombre especificado:
$ Cp Opciones /ruta/a/archivo/fuente /ruta/a/archivo/destino
Y copie el archivo con su nombre en la carpeta especificada:
$ Cp Opciones /ruta/a/archivo/fuente /ruta/a/directorios/destinos
En el primer caso, después de ejecutar el comando, el archivo de origen se transferirá completamente al archivo de destino. Si se selecciona un directorio como archivo de destino, el archivo o directorio se escribirá en este directorio con el nombre original.
La utilidad tiene algunas opciones interesantes que pueden ayudar mucho con tareas de copia no estándar, así que vamos a echarles un vistazo:
- –atributos-solo – No copie el contenido del archivo, sino solo los indicadores de acceso y propietario;
- -b, –copia de seguridad – Haga una copia de seguridad del archivo de destino, si existe.
- –copia-contenido – copiar el contenido de archivos especiales (sockets, archivos de dispositivo);
- -f, –fuerza – Elimine el archivo de destino antes de intentar escribir en él, si existe.
- -i, –interactivo – Pregunte si es necesario sobrescribir los archivos existentes.
- -n, –no-clobber – No sobrescriba los archivos existentes;
- -P, –no-de-referencia – Copia los enlaces simbólicos en sí, no lo que apuntan.
- -L, –desreferenciar – copiar no enlaces simbólicos, sino aquello a lo que apuntan;
- -l, –enlace – crear enlaces duros en lugar de copiarlos;
- –preservar – Transfiera los atributos especificados del archivo de origen al archivo de destino, los valores posibles son: modo, propiedad, marcas de tiempo, contexto, enlaces, xattr, todos;
- –no-conserva – no transfiera estos atributos;
- –padres – Guarde la ruta especificada en el archivo de origen en la carpeta de destino;
- -r, –recursivo – copiar la carpeta de Linux de forma recursiva;
- –reflink – Utilice Copiar en escritura si el sistema de archivos lo admite.
- -s, –enlace-simbólico – No copie archivos a Linux, sino cree enlaces simbólicos;
- -S, –sufijo – especificar un sufijo para las copias de seguridad de los archivos;
- –escaso – configurar el trabajo con archivos dispersos;
- -t, –directorio-destino – Considere el archivo de destino como un directorio y copie el archivo de origen o el directorio de origen en este directorio con el nombre original.
- -T, –no-directorio-de-destino – Considere el directorio de destino como un archivo o directorio para escribir datos. Si se selecciona un archivo como fuente, se copiará con el nuevo nombre. Si se trata de un directorio, su contenido se copiará en el directorio de destino;
- -u, –Actualizar – copiar el archivo solo si ha sido modificado;
- -x, –sistema-de-un-fichero – La copia recursiva no debe ir más allá de este sistema de archivos;
- -v, –verboso – La conclusión más detallada.
Además de las opciones enumeradas anteriormente, hay opciones que combinan varias otras con valores específicos. Los principales son:
- -p – Mantenga el propietario, las marcas de tiempo y los indicadores de acceso al copiar, de manera similar:preserve=modo,propiedad,marcas de tiempo;
- -d – copiar enlaces simbólicos y duros exactamente como enlaces, de manera similar –no-de-referencia –preserva=enlaces;
- -un – Modo de copia de seguridad, en el que se realiza una copia de seguridad de todos los atributos, enlaces y carpetas, de manera similar –recursivo –preserve=todo, –no-de-referencia;
Ahora que conoces las opciones básicas, puedes pasar a la práctica. Veamos los principales ejemplos de uso de la utilidad cp.
Ejemplos de casos de uso de cp
Para los ejemplos de este artículo, crearé algunos archivos archivo1, archivo2, archivo3, un vínculo simbólico enlace1 por archivo Archivo1 y un enlace físico al archivo Archivo3. A continuación, el fuente y en ella Archivo4, Archivo5, Archivo6 y carpeta destino. A continuación, te explicamos cómo puedes crear enlaces:
ln -s $(realpath file1) link1
ln file3 hlink1
Como resultado, se obtendrá la siguiente estructura:
1. Copiar un archivo a un archivo
El ejemplo más simple de copia de archivos es cuando un archivo se copia a otra ubicación con un nombre determinado. Para hacer esto, debe especificar el nombre del archivo en la carpeta de destino. Por ejemplo, para copiar un archivo Archivo1 a la carpeta destino con un nombre archivo10 Debe ejecutar el siguiente comando:
cp file1 destination/file10
De la misma manera, puede crear una copia de un archivo en la misma carpeta.
2. Copiar un archivo a una carpeta
Si no necesita cambiar el nombre del archivo o necesita copiar varios archivos, simplemente puede especificar una carpeta donde copiarlos sin especificar el nombre del archivo. Por ejemplo, para copiar file1 en la carpeta de destino con el mismo nombre, ejecute:
cp file1 destination/
Además, no es necesario poner una barra diagonal al final del comando. La utilidad ya entenderá que se trata de una carpeta.
3. Copiar carpeta a carpeta
Para copiar carpetas, debe usar el comando -r (–recursivo). Copiar una carpeta a otra es bastante fácil si la carpeta de destino existe. Para copiar una carpeta fuente a la carpeta destino Ejecute el comando:
cp -r source destination
O bien, puede especificar explícitamente que desea copiar el origen en el destino mediante el comando -t:
cp -t file1 destination
Luego, si la carpeta de destino no existe, obtendrá un error en lugar del comportamiento no obvio.
4. Copiar el contenido de la carpeta a la carpeta
Para copiar el contenido de un directorio a otro, puede utilizar la primera versión de la sintaxis. El comando tiene un aspecto similar al ejemplo anterior, pero solo funcionará si la carpeta de destino no existe. Por ejemplo, para copiar el contenido de la carpeta de origen en la carpeta destino1 Debe utilizar el siguiente comando:
cp -r source destination1/
Si la carpeta de destino existe, la carpeta de origen se creará en ella. Para evitar este tipo de comportamiento, puede utilizar la función -T:
cp -rT source destination/
Como alternativa, puede indicar explícitamente que está interesado en copiar el contenido de la carpeta mediante el símbolo *. Por ejemplo:
cp source/* destination
Sin embargo, en este caso, los archivos ocultos que se encuentran en esta carpeta no se copiarán. La copia de archivos y carpetas adjuntos funciona de manera similar.
5. Procesamiento de archivos existentes
De forma predeterminada, si ya existe un archivo en la carpeta de destino, se sobrescribirá. Si desea que la utilidad le pregunte si debe sobrescribir todos los archivos existentes, use el comando -Yo. Por ejemplo:
cp -i file1 destination
El uso de la función -n Nunca se pueden sobrescribir los archivos existentes:
cp -n file1 destination
Alternativamente, se puede hacer una copia de seguridad de los archivos existentes utilizando el comando -b o –copia de seguridad. Por ejemplo, si utiliza el método -b, el símbolo de tilde ~ se agregará al final del nombre del archivo de copia de seguridad:
Al utilizar el método –copia de seguridad Puede personalizar el nombre de la copia de seguridad, estas son las opciones disponibles:
- ninguno – no se realiza una copia de seguridad;
- numerado – Se agregará un número al nombre del archivo.
- sencillo – Se agregará un signo ~ al final del archivo;
- existente – Si ya hay copias de seguridad en el directorio de destino, se utilizará el mismo tipo de nomenclatura que para ellas.
Por ejemplo, para utilizar un número en el nombre de la copia de seguridad, utilice el siguiente comando:
cp --backup=numbered file1 destination
Otra opción para administrar archivos existentes, que puede ser útil para archivos grandes, es reemplazar solo si el archivo de origen es más reciente o si el archivo de la carpeta de destino no existe. Para hacer esto, debe usar el método -u o –Actualizar:
cp -u source/* destination
6. Copiar enlaces
En los sistemas de archivos de Linux, existe tal cosa concepto como vínculos simbólicos y duros. El comando cp puede copiarlos de diferentes maneras. De forma predeterminada, tanto los enlaces físicos como los simbólicos crean una copia del archivo que ya no está asociada con el original. Si desea que los enlaces simbólicos se copien como enlaces, debe utilizar el método -P:
cp -P link1 destination
Para los enlaces físicos, hay un enfoque diferente. Si desea que un enlace físico permanezca como un enlace después de copiarlo, debe usar el comando –preservar con el significado de Enlaces:
7. Guardar atributos al copiar
De forma predeterminada, cp actualiza las marcas de tiempo y los atributos de permisos de los archivos al copiarlos. Sin embargo, a veces puede ser necesario conservar los valores de atributo originales. Para ello, puede utilizar la opción –preserve. Estos son sus posibles parámetros:
- modo – derechos de acceso, esto incluye lectura, escritura, ejecución y banderas adicionales;
- propiedad – propietario y grupo;
- Marcas de tiempo – Marcas de tiempo, como la fecha de actualización, la fecha de creación y la fecha del último acceso
- contexto – Contexto de SELinux;
- Enlaces – preservación de los enlaces físicos;
- xattr – Atributos adicionales que se pueden configurar mediante el comando chattr.
- todo – Todas las anteriores.
Si desea conservar el propietario original y los derechos de acceso, utilice el archivo –preservar con el significado de modo, propiedad o una opción -p:
cp -p source/* destination
Si desea conservar toda la estructura del sistema de archivos, incluidos los enlaces simbólicos y duros y las marcas de tiempo, puede utilizar el comando -un:
8. Copiar y copiar en escritura
Algunos sistemas de archivos más nuevos, como Btrfs y ZFS, admiten la tecnología Copy-on-Write. Al usarlo, la copia real de los datos del archivo se producirá solo cuando se cambie. Esta función funciona dentro de un solo sistema de archivos y acelera en gran medida la copia de archivos. Pero, por otro lado, su cambio puede ralentizarse ligeramente. De forma predeterminada, cp solo usa Copy-on-Write a partir de la etiqueta CoreUtils 9.0. Pero puede habilitarlo o deshabilitarlo manualmente usando el comando –reflink. Estos son los valores disponibles:
- siempre – Úselo siempre, si no es compatible, se mostrará un error;
- Automático – Úselo solo si es compatible;
- nunca – Nunca lo uses.
Por ejemplo, para habilitar el uso obligatorio de CoW, agregue –reflink=siempre al comando copiar:
9. Manejo de archivos dispersos
Los archivos dispersos son archivos que contienen secuencias de cero bytes y reemplazan estas secuencias con su descripción. Esto es cierto para las imágenes de disco Qemu o VirtualBox, que pueden contener una gran cantidad de espacio vacío que no necesariamente necesita escribirse en el disco. De forma predeterminada, cp crea archivos dispersos solo si el archivo fuente es disperso. Sin embargo, puede configurarlo para que todos los archivos que contengan secuencias de ceros sean escasos. Puede configurar este comportamiento mediante el comando –escaso. Estos son los valores posibles:
- Automático – se utiliza de forma predeterminada;
- nunca – Haz que los archivos dispersos no sean dispersos.
- siempre – Hacer que los archivos sean dispersos si contienen un número suficiente de bytes cero.
A modo de ejemplo, puede crear una imagen basada en /dev/cero 20 MB de tamaño:
dd if=/dev/zero of=image1 count=20 bs=1M
Si copia este archivo con la opción –escaso=siempre, se volverá escaso y ocupará significativamente menos espacio en disco:
cp --sparse=always ./image1 /destination
Resultados
En este artículo, hemos visto el comando cp Linux. Este comando ha existido durante bastante tiempo y no es muy útil para copiar archivos grandes, ya que no hay salida del progreso de la copia. Pero es compatible con muchas otras funciones útiles. Casi todas las tareas de copia de archivos en Linux se pueden realizar utilizando esta utilidad.