Linux目录:scp命令

目录

1 scp命令

1.1简介

scp 是 secure copy 的缩写, scp 是一个基于ssh协议实现不同Linux服务器之间的文件和目录拷贝的命令。

scp命令是基于rcp命令的

SCP命令会对所有传输的数据进行加密,以保障数据传输的安全性。

在使用SCP命令进行文件传输时,需要指定源文件的位置,目标服务器的IP地址以及目标路径。如果需要传输整个文件夹,还需要额外添加参数-r进行递归操作。同时,目标服务器会要求进行身份验证,验证通过后,文件传输才会开始。

1.2命令说明

使用:scp [-346ABCOpqRrsTv] [-c cipher] [-D sftp_server_path] [-F ssh_config]

[-i identity_file] [-J destination] [-l limit] [-o ssh_option]

[-P port] [-S program] source ... target

常用参数:

  • -4:scp时只能使用IPv4地址
  • -6:scp时只能使用IPv6地址
  • -B:选择批处理模式(禁止询问密码或密码短语)。
  • -C:允许压缩,将文件在传输过程中进行压缩,以节省传输时间和带宽
  • -s:使用SFTP协议而不是scp协议
  • -D sftp_server_path:在使用-s指定的协议时,连接到本地SFTP服务器地址
  • -F ssh_config: 指定一个替代的ssh配置文件,此参数直接传递给ssh
  • -i identify_file:选择从中读取用于公钥身份验证的身份(私钥)的文件
  • -o ssh_ssh_option:用于向ssh传递选项,如:IdentityFile
  • -P port:用于指定传输端口,如果ssh的端口改变,需要在此处指定
  • -p:保留原文件的修改时间,访问时间
  • -q:不显示传输进度条
  • -r:递归复制整个目录

1.3 实例

1、从本地复制的远程

bash 复制代码
# scp localfile remote_ip:remote_dir
scp a1 192.168.92.100:/root

# scp localfile remote_ip:remote_file
# 在复制的同时还修改了文件名
# 远程服务器有同名文件时会覆盖
scp a1 192.168.92.100:/root/aaa

# scp localfile remote_user@remote_ip:remote_file
scp a1 root@192.168.92.100:/root

# scp localfile remote_hostname:remote_file
scp a1 com01:/root/yyy

# 下面的远程服务器
root@com01:~# ll a1 aaa sss yyy
-rw-r--r-- 1 root root 82 Feb 21 09:27 a1
-rw-r--r-- 1 root root 82 Feb 21 09:25 aaa
-rw-r--r-- 1 root root 82 Feb 21 09:29 sss
-rw-r--r-- 1 root root 82 Feb 21 09:34 yyy

注意:

  • 1.远程复制时有同名文件时会覆盖
  • 2.在向远程服务器复制文件时,如果不指定远程用户名,默认会传输给当前用户名相同的用户
  • 3.向指定目标地址时,既可以是目标服务器的IP也可以主机名

2、从远程复制到本地

从远程服务器复制本地只需要把目标地址和源地址修改一下即可

bash 复制代码
# 复制到本地目录下
scp con01:/root/a1 .
scp con01:/root/a1 ./df

3、-r:复制目录

bash 复制代码
######### 本地服务器
root@con01:~# ls haproxy-2.8.5
addons       CHANGELOG     examples  LICENSE      reg-tests  tests
admin        CONTRIBUTING  haproxy   MAINTAINERS  scripts    VERDATE
BRANCHES     dev           include   Makefile     src        VERSION
BSDmakefile  doc           INSTALL   README       SUBVE

scp -r haproxy-2.8.5 com01:/root/
scp -r haproxy-2.8.5/ com01:/root/
# 以上两种写法都可
# 如果不加 -r 选项会报错:haproxy-2.8.5: not a regular file

#######远程服务器
root@com01:~# ls haproxy-2.8.5/
addons       CHANGELOG     examples  LICENSE      reg-tests  tests
admin        CONTRIBUTING  haproxy   MAINTAINERS  scripts    VERDATE
BRANCHES     dev           include   Makefile     src        VERSION
BSDmakefile  doc           INSTALL   README       SUBVERS
root@com01:~#

4、 -p:保留原文件的修改时间,访问时间

bash 复制代码
####### 本地服务器
root@con01:~# stat b1
  File: b1
  Size: 6               Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 786447      Links: 1
Access: (0600/-rw-------)  Uid: ( 1000/   smile)   Gid: ( 1000/   smile)
Access: 2024-02-21 09:48:28.317809644 +0000
Modify: 2024-02-21 09:46:29.587905113 +0000
Change: 2024-02-21 09:47:42.221070217 +0000
 Birth: 2024-02-21 09:46:29.587905113 +0000

scp b1 com01:/root/
scp -p b1 com01:/root/bb

# 从下面的内容可以看出保留原文件的修改时间,访问时间
####### 远程服务器
root@com01:~# stat b1
  File: b1
  Size: 6               Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 788380      Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-02-21 09:52:37.981073498 +0000
Modify: 2024-02-21 09:52:37.981073498 +0000
Change: 2024-02-21 09:52:37.981073498 +0000
 Birth: 2024-02-21 09:52:37.981073498 +0000
root@com01:~# stat bb
  File: bb
  Size: 6               Blocks: 8          IO Block: 4096   regular file
Device: 803h/2051d      Inode: 788381      Links: 1
Access: (0600/-rw-------)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2024-02-21 09:48:28.000000000 +0000
Modify: 2024-02-21 09:46:29.000000000 +0000
Change: 2024-02-21 09:52:46.465445105 +0000
 Birth: 2024-02-21 09:52:46.449444403 +0000
root@com01:~#

如果不清楚stat命令可以参考我的这篇文章:Linux命令:stat命令

5、-P:指定传输数据的端口

bash 复制代码
scp -P 13222 b1 com01:/root/bb
# 这个主要是ssh的端口,如果ssh端口改变了,此处访问会改变

6、扩展:修改ssh默认端口

bash 复制代码
# 修改ssh的配置文件,并重启即可
vim /etc/ssh/sshd_config
# 修改sftp上传文件端口
Port 13222
相关推荐
wowocpp15 分钟前
ubuntu 22.04 硬件配置 查看 显卡
linux·运维·ubuntu
山河君27 分钟前
ubuntu使用DeepSpeech进行语音识别(包含交叉编译)
linux·ubuntu·语音识别
鹏大师运维31 分钟前
【功能介绍】信创终端系统上各WPS版本的授权差异
linux·wps·授权·麒麟·国产操作系统·1024程序员节·统信uos
筱源源34 分钟前
Elasticsearch-linux环境部署
linux·elasticsearch
萨格拉斯救世主37 分钟前
jenkins使用slave节点进行node打包报错问题处理
运维·jenkins
川石课堂软件测试1 小时前
性能测试|docker容器下搭建JMeter+Grafana+Influxdb监控可视化平台
运维·javascript·深度学习·jmeter·docker·容器·grafana
龙哥说跨境1 小时前
如何利用指纹浏览器爬虫绕过Cloudflare的防护?
服务器·网络·python·网络爬虫
pk_xz1234562 小时前
Shell 脚本中变量和字符串的入门介绍
linux·运维·服务器
小珑也要变强2 小时前
Linux之sed命令详解
linux·运维·服务器
海绵波波1073 小时前
Webserver(4.3)TCP通信实现
服务器·网络·tcp/ip