Probablemente ya estés familiarizado con el comando cp en Linux, que utilizar para copiar archivos en Linux. El comando cp solo puedes utilizarlo en tu máquina local.
¿Pero qué pasa con la copia de archivos desde un sistema Linux remoto? Para copiar archivos desde un servidor remoto o a un servidor remoto, puedes utilizar un comando llamado scp.
Sintaxis del comando scp
La sintaxis y el uso del comando scp es similar al comando cp y lo verás en breve en los siguientes ejemplos:
Pero primero veamos la sintaxis del comando scp:
scp <opciones> ruta_de_origen ruta_de_destino
Todo depende del origen del archivo a copiar, ya que este puede ser el cliente o el servidor. Si el origen es el cliente, el destino es el servidor y viceversa.
Pero eso suena demasiado simple, ¿no es así? El enfoque principal del comando scp es usar el formato correcto para el formato de la ruta de origen o destino.
Una ruta típica a un archivo o un directorio en el servidor se representa en este formato:
<nombre_de_usuario>@<dirección_ip_del_sistema>:<ruta_al_archivo/directorio>
En realidad, también puedes utilizar user@hostname en el comando scp, pero es más probable que acabe con un error «Could not resolve hostname».
Esto se debe a que la correlación del nombre de host con la dirección IP depende de la configuración de la red del servidor. Usar la dirección IP real te ahorra el problema.
Cosas para tener en cuenta antes de usar el comando scp
Aquí hay un par de cosas que necesitas antes de poder usar el comando scp en tu sistema Linux:
- Asegúrate de que ssh está instalado y en funcionamiento tanto en el cliente como en el servidor, ya que el comando scp utiliza internamente ssh. Si ssh no está instalado, instálalo utilizando el comando «sudo apt install ssh» en máquinas basadas en Debian o utilizando los respectivos gestores de paquetes de su distribución.
- Necesitas conocer el nombre de usuario y la contraseña del sistema remoto. Se te pedirá que introduzca la contraseña del host remoto. La transferencia de archivos sólo comenzará cuando introduzcas la contraseña correcta del host remoto.
Uso del comando scp en Linux: 10 ejemplos prácticos
Ahora que hemos visto la sintaxis del comando scp y el formato para especificar la ruta al servidor, veamos cómo utilizar el comando scp.
1. Copiar un archivo al sistema remoto utilizando el comando scp
Para copiar un solo archivo de la máquina local al host remoto, especifique la ruta del archivo como ruta de origen y la ruta en el host remoto donde el archivo tiene que ser copiado.
scp abc.txt xyz@<dirección_ip_de_xyz>:/home/xyz/Desktop
2. Copiar un archivo desde el sistema remoto usando el comando scp
Copiar un archivo del sistema remoto al sistema local es prácticamente lo mismo. Sólo tiene que especificar la ruta completa del archivo en el sistema remoto y la ruta en el sistema local.
Así que, para copiar un archivo del sistema remoto al directorio actual, simplemente utilice el comando de la siguiente manera:
scp xyz@<dirección_ip_de_xyz>:/remote/usuario/home/abc.txt .
3. Copiar varios archivos con el comando scp
Para copiar varios archivos de la máquina local al host, basta con especificar el nombre de los archivos como ruta de origen.
scp abc.txt def.txt xyz@<dirección_ip_de_xyz>:/home/xyz/Desktop
4. Copiar un directorio completo con el comando scp
Copiar un directorio usando scp es también lo mismo que el comando cp. Puedes utilizar la opción -r y especificar el nombre de la carpeta como ruta de origen. Esto se llama el modo recursivo.
scp -r ~/Desktop/test xyz@<dirección_ip_de_xyz>:/home/xyz/Desktop
También puede especificar más de un directorio y copiarlos todos en un solo comando.
5. Vea los detalles de la transferencia de archivos en la salida
Si tienes curiosidad por saber qué ocurre entre bastidores mientras se copia, puedes utilizar la opción -v para ver todos los procesos que se ejecutan, incluyendo la depuración, el estado de salida, la encriptación, la desencriptación, etc. Es el llamado modo verboso.
scp -v abc.txt xyz@<dirección_ip_de_xyz>:/home/xyz/Desktop
6. Copiar archivos entre dos hosts remotos
Hasta ahora, has visto cómo copiar de un equipo local a un equipo remoto. Para copiar archivos de un equipo remoto a otro equipo remoto, especifique las rutas del origen y del destino en el formato del equipo remoto, tal y como se ha comentado anteriormente.
scp abc@<dirección_ip_de_abc>:<ruta_de_archivo_o_carpeta> xyz@<dirección_ip_de_xyz>:<ruta_de_archivo_o_carpeta
No hace falta decir que aquí hay que conocer la contraseña de ambos sistemas.
7. Copiar archivos con compresión [reduce el tiempo de transferencia]
Si intentas copiar un montón de archivos juntos, tardará más tiempo que la transferencia de un solo archivo del tamaño equivalente a la suma de todos los archivos individuales.
Si crees que necesitas aumentar la velocidad de transferencia de los archivos, puedes comprimirlos utilizando la opción -C y transferirlos.
Lo mejor es que la compresión se produce sólo durante la transferencia. Una vez completada la transferencia, los archivos se almacenarán en su forma original. No verás un único archivo sino todos los archivos individuales tal y como estaban en el servidor remoto.
scp -C abc.txt xyz@<dirección_ip_de_xyz>:/home/xyz/Desktop
8. Limitar el ancho de banda de la transferencia de archivos
Si cree que la transferencia de archivos está utilizando la mayor parte del ancho de banda, puedes reducir el ancho de banda de la transferencia de archivos utilizando la opción -l seguida de la nueva tasa de ancho de banda.
scp -l 800 abc.txt xyz@<dirección_ip_de_xyz>:/home/xyz/Desktop
Ten en cuenta que el ancho de banda que especifica en el comando está en kilobits por segundo, pero mientras se transfieren los archivos, la salida del comando scp mostrará la tasa de transferencia en kilobytes por segundo.
Como 1 byte=8 bits, los 8300 kilobits por segundo en el parámetro del comando se convierten en 100 kilobytes por segundo en la salida del comando.
9. Preservar los atributos originales de los archivos copiados
Si necesitas conservar los atributos originales de los archivos, como los permisos y la propiedad de los archivos, las marcas de tiempo de los archivos, etc., utilice la opción -p.
scp -p abc.txt xyz@<dirección_ip_de_xyz>:/home/xyz/Desktop
10. Ocultación de la salida del comando scp
Si no te siente cómodo con la larga salida del comando scp, puedes evitar la salida del comando utilizando la opción -q. Esto se llama el modo silencioso.
Incluso oculta el progreso de la copia de archivos.
scp -q abc.txt xyz@:/home/xyz/Desktop
En los ejemplos anteriores, has visto cómo copiar los archivos al host remoto desde la máquina local. Si necesita copiar archivos del host remoto a la máquina local, escriba la ruta del archivo/carpeta a copiar desde el host remoto como ruta de origen y la ruta donde el archivo/carpeta tiene que ser pegado en la máquina local como ruta de destino.
Para más detalles sobre el comando scp, consulta su página principal.
Espero que ahora hayas entendido cómo hacer el mejor uso del comando scp para copiar archivos de forma segura entre ordenadores. Personalmente, prefiero usar el comando rsync sobre scp porque rsync tiene más características.
Si te encuentras con algún problema no dudes en preguntar en la sección de comentarios de abajo. Y si conoces cualquier otra forma impresionante de utilizar el comando scp, no dude en compartirlo con el resto de nosotros.