侧边栏壁纸
Linux入门自学网博主等级

每日学一条Linux命令,终成Linux大神

  • 累计撰写 725 篇文章
  • 累计创建 143 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Linux scp命令详解:安全高效地在服务器及Windows之间传文件和目录

Linux scp命令介绍

scp是secure copy的缩写,scp是linux系统下基于ssh登录进行安全的远程文件拷贝命令。scp可以在linux服务器之间复制文件和目录,也可以在本地和远程之间进行文件传输。scp是加密的,使用ssh协议进行数据传输,可以保证传输的安全性和可靠性。

适用的Linux版本

scp命令是openssh软件包的一部分,大多数Linux发行版都已经预装了openssh软件包,因此可以直接使用scp命令。如果没有安装openssh软件包,可以使用以下命令进行安装:

  • 对于基于Debian的系统(如Ubuntu),可以使用apt-get命令:
# 更新软件源
[linux@bashcommandnotfound.cn ~]$ sudo apt-get update
# 安装openssh客户端和服务器
[linux@bashcommandnotfound.cn ~]$ sudo apt-get install openssh-client openssh-server
  • 对于基于Red Hat的系统(如CentOS),可以使用yum或dnf命令:
# 安装openssh客户端和服务器
[linux@bashcommandnotfound.cn ~]$ sudo yum install openssh-clients openssh-server
# 或者
[linux@bashcommandnotfound.cn ~]$ sudo dnf install openssh-clients openssh-server

Linux scp命令的基本用法

scp命令的语法格式如下:

scp [选项] [源文件] [目标文件]

其中,源文件和目标文件可以是本地路径或者远程路径,远程路径的格式为:

[user@]host:file

其中,user是远程主机的用户名,中括号代表是可选的,host是远程主机的IP地址或域名,file是远程主机上的文件路径。如果省略user,则默认使用当前用户。

Linux scp命令使用的是什么端口

scp命令使用的是22号端口进行传输,这是ssh协议的默认端口。如果需要使用其他端口进行传输,可以使用-P选项指定端口号。如:

scp -P 8888 remote@bashcommandnotfound.cn:/usr/local/study.sh /home/linux

Linux scp命令的常用选项说明

选项说明
-1强制scp命令使用协议ssh1
-2强制scp命令使用协议ssh2
-4强制scp命令只使用IPv4寻址
-6强制scp命令只使用IPv6寻址
-B使用批处理模式(传输过程中不询问传输口令或短语)
-C允许压缩(将-C标志传递给ssh,从而打开压缩功能)
-F指定一个替代的ssh配置文件(此参数直接传递给ssh)
-i从指定文件中读取传输时使用的密钥文件(此参数直接传递给ssh)
-l限定用户所能使用的带宽,以Kbit/s为单位
-o如果习惯于使用ssh_config中的参数传递方式,可以使用此选项(此参数直接传递给ssh)
-P指定远程主机的端口号(注意是大写的P)
-p保留原文件的修改时间,访问时间和访问权限
-q不显示传输进度条
-r递归复制整个目录
-S指定加密传输时所使用的程序(此程序必须能够理解ssh的选项)
-v详细方式显示输出(scp和ssh会显示出整个过程的调试信息,这些信息用于调试连接,验证和配置问题)

Linux scp命令的实例

从本地复制文件到远程主机(Linux scp命令传文件到远程主机)

# 复制本地文件/home/linux/test.tar.gz到远程主机bashcommandnotfound.cn的/home/root/others/linux目录下,保留原文件名
[linux@bashcommandnotfound.cn ~]$ scp /home/linux/test.tar.gz root@bashcommandnotfound.cn:/home/root/others/linux

# 复制本地文件/home/linux/test.tar.gz到远程主机bashcommandnotfound.cn的/home/root/others/linux目录下,并重命名为test1.tar.gz
[linux@bashcommandnotfound.cn ~]$ scp /home/linux/test.tar.gz root@bashcommandnotfound.cn:/home/root/others/linux/test1.tar.gz

从本地复制目录到远程主机(Linux scp命令拷贝文件夹到远程主机)

# 复制本地目录/home/linux到远程主机bashcommandnotfound.cn的/home/root/others目录下,保留原目录名
[linux@bashcommandnotfound.cn ~]$ scp -r /home/linux root@bashcommandnotfound.cn:/home/root/others

# 复制本地目录/home/linux到远程主机bashcommandnotfound.cn的/home/root/others目录下,并重命名为linux1
[linux@bashcommandnotfound.cn ~]$ scp -r /home/linux root@bashcommandnotfound.cn:/home/root/others/linux1

从远程主机复制文件到本地(Linux scp命令传文件到本地)

# 复制远程主机bashcommandnotfound.cn的/home/root/others/linux/test.tar.gz文件到本地的/home/linux目录下,保留原文件名
[linux@bashcommandnotfound.cn ~]$ scp root@bashcommandnotfound.cn:/home/root/others/linux/test.tar.gz /home/linux

# 复制远程主机bashcommandnotfound.cn的/home/root/others/linux/test.tar.gz文件到本地的/home/linux目录下,并重命名为test.tar.gz
[linux@bashcommandnotfound.cn ~]$ scp root@bashcommandnotfound.cn:/home/root/others/linux/test.tar.gz /home/linux/test.tar.gz

从远程主机复制目录到本地(Linux scp命令拷贝文件夹到本地)

# 复制远程主机bashcommandnotfound.cn的/home/root/others目录到本地的/home/space目录下,保留原目录名
[linux@bashcommandnotfound.cn ~]$ scp -r root@bashcommandnotfound.cn:/home/root/others /home/linux

# 复制远程主机bashcommandnotfound.cn的/home/root/others目录到本地的/home/linux目录下,并重命名为backup
[linux@bashcommandnotfound.cn ~]$ scp -r root@bashcommandnotfound.cn:/home/root/others /home/linux/backup

在两台远程主机之间复制文件(Linux scp命令两台远程主机传文件)

# 复制远程主机bashcommandnotfound.cn的/home/linux/file1文件到远程主机host2的/home/linux/file2,需要在host1和host2上都有ssh访问权限
[linux@bashcommandnotfound.cn ~]$ scp user@bashcommandnotfound.cn:/home/linux/file1 user@host2:/home/linux/file2

scp命令传文件到windows

scp(secure copy)是一种基于SSH协议的安全的远程文件拷贝命令,可以在不同的系统之间复制文件或文件夹。要使用scp命令,您需要满足以下条件:

  • 您的Windows系统和Linux系统都能够访问互联网,并且知道对方的IP地址。
  • 您的Windows系统支持SSH协议,或者安装了SSH客户端软件,如winsshd或openssh。
  • 您知道您在Windows系统和Linux系统上的用户名和密码。

如果已经满足了以上条件,可以按照以下步骤进行文件传输:

  • 打开Windows系统上的命令行窗口(cmd)或者PowerShell窗口。

  • 输入scp命令,按照以下格式指定源文件和目标文件的路径:

    • 从Windows系统向Linux系统传输文件:

      scp -P <port> -r <source_file> <username>@<linux_ip>:<destination_file>

      其中,<port>是Linux系统上SSH服务的端口号,默认为22;
      -r是可选参数,表示递归复制整个文件夹;
      <source_file>是Windows系统上要传输的文件或文件夹的绝对路径;
      <username>是Linux系统上的用户名;
      <linux_ip>是Linux系统的IP地址;
      <destination_file>是Linux系统上要接收的文件或文件夹的绝对路径。

      例如,如果您想把Windows系统上的D:\workpace\xxx文件夹复制到Linux系统上的/home/linux/xxxx目录下,您可以输入以下命令:

      scp -P 22 -r D:\workpace\xxx linux@13.25.26.225:/home/linux/xxxx

    • 从Linux系统向Windows系统传输文件:

      scp -P <port> -r <username>@<linux_ip>:<source_file> <destination_file>

      其中,<port>是Linux系统上SSH服务的端口号,默认为22;
      -r是可选参数,表示递归复制整个文件夹;
      <username>是Linux系统上的用户名;
      <linux_ip>是Linux系统的IP地址;
      <source_file>是Linux系统上要传输的文件或文件夹的绝对路径;
      <destination_file>是Windows系统上要接收的文件或文件夹的绝对路径。

      例如,如果您想把Linux系统上的/home/zhao/data/test.txt文件复制到Windows系统上的C:\Users\zw\Desktop\summary目录下,您可以输入以下命令:

      scp -P 22 -r linux@bashcommandnotfound.cn:/home/linux/test.txt C:\Users\king\Desktop\test

  • 输入scp命令后,按回车键执行。如果提示输入密码,输入对应系统上的密码即可。

  • 等待文件传输完成。

Linux scp命令的注意事项

  • 使用scp命令时,需要确保使用的用户具有可读取和写入远程服务器相应文件和目录的权限,否则scp命令是无法起作用的。
  • 使用scp命令时,如果源文件或目标文件中包含特殊字符(如空格、括号等),需要用引号或反斜杠进行转义,否则可能会出现错误。
  • 使用scp命令时,如果需要指定端口号,必须使用-P选项,而不是-p选项,因为-p选项是用于保留文件属性的。
  • 使用scp命令时,如果需要在后台运行,可以使用&符号将命令放入后台,或者使用nohup命令使其在退出终端后仍然运行。
0

评论区