Mac OS 使用命令(scp/sftp)将本地文件上传到远程 Linux 服务器主机或者从远程主机下载文件到本地主机

时间:2025-01-13 18:19:28

文章目录

  • 一、使用 scp 命令
    • (一)将本地的文件上传(上载/复制)到远程主机的指定目录下
    • (二)将本地主机的目录内容(含目录本身)上传到远程主机指定的目录下
      • 1.将本地主机桌面上的目录 www 及其内容上传至远程主机的目录 /root/test 下
      • 2.将本地主机桌面上的目录 www 下的内容上传至远程主机的目录 /root/test 下
    • (三)将远程主机的文件下载(下传/复制)到本地
    • (四)将远程主机指定目录下的内容全部下载到本地主机指定的目录下
      • 1.将远程主机目录 test 整个下载到本地主机的目录 www 下
      • 2.将远程主机目录 test 下的内容下载到本地主机的目录 www 下
  • 二、使用 sftp 命令
    • (一)通过 sftp 连接远程主机
      • 方法1:打开命令终端,直接输入 sftp 命令语句
      • 方法2:打开命令终端后,通过配置窗口执行 sftp 命令
    • (二)将本地文件上传到远程主机的指定目录下
    • (三)将本地指定目录下的内容上传到远程主机指定目录下
    • (四)将远程主机的文件下载到本地主机指定的目录下
    • (五)将远程主机指定目录下的内容全部下载到本地主机指定的目录下
      • 1.将远程主机的目录 test 整个下载到本地主机的目录 www 下
      • 2.将远程主机指定目录下的内容(不含目录本身)下载到本地主机指定的目录下
    • (六)退出 sftp 命令行
    • (七)切记,必须记住,勿忘,深坑!!!
    • (八)覆盖问题
  • 三、使用 FTP 客户端软件

一、使用 scp 命令

(一)将本地的文件上传(上载/复制)到远程主机的指定目录下

苹果电脑经常需要上传文件到远程的 Linux 主机上,如下:

liaowenxiong@liaowenxiongdeMacBook-Air ~ % scp /Users/liaowenxiong/Desktop/ root@47.108.37.204:/root;
root@47.108.37.204's password: 
                                                                        100%  784    21.5KB/s   00:00    
liaowenxiong@liaowenxiongdeMacBook-Air ~ % 

本地 Linux 电脑将数据库备份文件上传到局域网内的 Linux 主机上,如下:

[root@htlwk0001host ~]# scp /home/website/backups/ root@192.168.1.50:/home/website/backups

如果你希望上传文件到远程主机指定目录下的同时还要修改文件的名称,那么就需要指定远程主机具体的文件路径。
例如,你本地文件的路径是 /Users/liaowenxiong/.ssh/id_rsa.pub,这是个公钥文件,你希望将该文件上传到远程主机 /root/.ssh 目录下,同时文件名改成为 authorized_keys,那么就需要指定这个目标文件具体的路径。

liaowenxiong@liaowenxiongdeMacBook-Air ~ % scp /Users/liaowenxiong/.ssh/id_rsa.pub root@192.168.1.50:/root/.ssh/authorized_keys

说明:

  1. /Users/liaowenxiong/Desktop//home/website/backups/ 这是本地文件路径
  2. root@47.108.37.204root@192.168.1.50 这是登录远程主机的用户名与远程主机的IP地址
  3. /root/home/website/backups 这是远程主机的目录路径

(二)将本地主机的目录内容(含目录本身)上传到远程主机指定的目录下

1.将本地主机桌面上的目录 www 及其内容上传至远程主机的目录 /root/test 下

liaowenxiongdeMacBook-Air:~ liaowenxiong$ scp -r /Users/liaowenxiong/Desktop/www root@48.104.95.667:/root/test
root@48.104.95.667's password: 
.DS_Store                                                                                                                                                        100% 6148   162.6KB/s   00:00    
tf_user_20210523.sql                                                                                                                                             100%   86KB 758.6KB/s   00:00    
td_dictionary_20210523.sql                                                                                                                                       100%   15KB 432.6KB/s   00:00    

2.将本地主机桌面上的目录 www 下的内容上传至远程主机的目录 /root/test 下

liaowenxiongdeMacBook-Air:~ liaowenxiong$ scp -r /Users/liaowenxiong/Desktop/www/* root@48.104.95.667:/root/test
root@48.104.95.667's password: 
td_dictionary_20210523.sql                                                                                                                                       100%   15KB 173.1KB/s   00:00    
tf_user_20210523.sql                                                                                                                                             100%   86KB 388.4KB/s   00:00    

说明:
将本地目录下的内容上传至远程主机指定目录下,这里只能使用 .../www/*,不能使用 .../www/.,但是 sftp 则可以使用 .../www/.

(三)将远程主机的文件下载(下传/复制)到本地

[root@htlwk0001host ~]# scp www@210.14.146.123:/home/website/backups/ /home/website/backups 

说明:

  1. www 登录远程主机的用户名
  2. 210.14.146.123 远程主机的 IP 地址
  3. /home/website/backups/ 这是远程主机的文件路径
  4. /home/website/backups 这是本地主机的目录路径
  5. 远程主机上的文件 会被 copy(也可以理解为 download) 一份到本地电脑的目录 /home/website/backups

(四)将远程主机指定目录下的内容全部下载到本地主机指定的目录下

1.将远程主机目录 test 整个下载到本地主机的目录 www 下

liaowenxiongdeMacBook-Air:www liaowenxiong$ scp -r root@48.104.95.667:/root/test /Users/liaowenxiong/Desktop/www
root@48.104.95.667's password: 
td_dictionary_20210523.sql                                                                                                                                       100%   15KB 284.5KB/s   00:00    
tf_user_20210523.sql                                                                                                                                             100%   86KB 534.7KB/s   00:00    

说明:本例是将远程主机目录 test 及其内容一起 下载到本地主机目录 www 下

2.将远程主机目录 test 下的内容下载到本地主机的目录 www 下

liaowenxiongdeMacBook-Air:www liaowenxiong$ scp -r root@48.104.95.667:/root/test/* /Users/liaowenxiong/Desktop/www
root@48.104.95.667's password: 
td_dictionary_20210523.sql                                                                                                                                       100%   15KB 240.6KB/s   00:00    
tf_user_20210523.sql                                                                                                                                             100%   86KB 411.4KB/s   00:00    
liaowenxiongdeMacBook-Air:www liaowenxiong$ pwd
/Users/liaowenxiong/desktop/www
liaowenxiongdeMacBook-Air:www liaowenxiong$ ls
td_dictionary_20210523.sql	tf_user_20210523.sql

二、使用 sftp 命令

(一)通过 sftp 连接远程主机

方法1:打开命令终端,直接输入 sftp 命令语句

liaowenxiongdeMacBook-Air:~ liaowenxiong$ sftp root@48.104.95.667
root@48.104.95.667's password: 
Connected to 48.104.95.667.
sftp> 

方法2:打开命令终端后,通过配置窗口执行 sftp 命令

请点击查看如何使用配置窗口连接远程服务器主机

(二)将本地文件上传到远程主机的指定目录下

sftp 远程连接成功之后,接着使用 sftp 的 put 命令来上传本地文件

sftp> put /Users/liaowenxiong/Desktop/ /root/ 
Uploading /Users/liaowenxiong/Desktop/ to /root/
/Users/liaowenxiong/Desktop/                                                                           100%  784    25.0KB/s   00:00    

有关说明:

  1. /Users/liaowenxiong/Desktop/ 这是要上传的本地文件的绝对路径,/root/ 是文件要上传的远程主机中的目标目录,也是绝对路径
  2. 本地文件路径与远程主机的目标路径之间需要有空格
  3. sftp 命令语句不要以 ; 结尾,否则有问题
  4. 远程主机的目标路径必须以正斜杠 / 结束,/root 这样的写法是错误的,特别要注意了!!!

(三)将本地指定目录下的内容上传到远程主机指定目录下

将本地电脑目录 /users/liaowenxiong/desktop/www/ 下的内容全部上传到远程主机的目录 /root/test

sftp> put -r /users/liaowenxiong/desktop/www/* /root/test/
Uploading /users/liaowenxiong/desktop/www/td_dictionary_20210523.sql to /root/test/td_dictionary_20210523.sql
/users/liaowenxiong/desktop/www/td_dictionary_20210523.sql                                                                                                       100%   15KB 390.9KB/s   00:00    
Uploading /users/liaowenxiong/desktop/www/tf_user_20210523.sql to /root/test/tf_user_20210523.sql
/users/liaowenxiong/desktop/www/tf_user_20210523.sql                                                                                                             100%   86KB 412.6KB/s   00:00    

说明:

  1. 上传本地主机目录下的内容,需要使用选项 -r
  2. 上传本主机目录下的内容,必须在目录后面跟上 /. 或者 /*,如果你写成这样 /users/liaowenxiong/desktop/www 会报错!
  3. 特别注意!使用命令 sftp 无法将本地主机的指定目录上传至远程主机上,只能上传本地主机指定目录中的内容

(四)将远程主机的文件下载到本地主机指定的目录下

使用命令 get 将远程主机上的文件 /root/ 下载到本地主机的目录 /users/liaowenxiong/desktop

sftp> get /root/ /users/liaowenxiong/desktop
Fetching /root/ to /users/liaowenxiong/desktop/
/root/                                                                                                                                                  100%  698KB 638.6KB/s   00:01    
sftp> 

(五)将远程主机指定目录下的内容全部下载到本地主机指定的目录下

1.将远程主机的目录 test 整个下载到本地主机的目录 www 下

sftp> get -r /root/test /users/liaowenxiong/desktop/www
Fetching /root/test/ to /users/liaowenxiong/desktop/www/test
Retrieving /root/test
/root/test/tf_user_20210523.sql                                                                                                                                  100%   86KB 464.0KB/s   00:00    
/root/test/td_dictionary_20210523.sql 

说明:这样是将整个目录及其包含的内容下载到本地指定的目录下,上述例子中,打开本地目录 www,会看到下载下来的目录 test

2.将远程主机指定目录下的内容(不含目录本身)下载到本地主机指定的目录下

sftp> get -r /root/test/* /users/liaowenxiong/desktop/www
Fetching /root/test/td_dictionary_20210523.sql to /users/liaowenxiong/desktop/www/td_dictionary_20210523.sql
/root/test/td_dictionary_20210523.sql                                                                                                                            100%   15KB 147.6KB/s   00:00    
Fetching /root/test/tf_user_20210523.sql to /users/liaowenxiong/desktop/www/tf_user_20210523.sql
/root/test/tf_user_20210523.sql                                                                                                                                  100%   86KB 402.4KB/s   00:00    

说明:上述例子中,是把远程主机目录 test 下的内容全部下载到本地主机目录 www 下,并不包含目录 test 本身,下载下来的是目录 test 下的内容,也可以使用 . 代表目录 test 下的内容,例如,/root/test/.

(六)退出 sftp 命令行

exit 或者 quit,

(七)切记,必须记住,勿忘,深坑!!!

sftp 命令切记不要以 ; 结尾,我经常习惯以 ; 结尾,导致命令执行失败,总是没有反应过来,我擦!!!

(八)覆盖问题

如果被下载文件所在目录与本地目录如果是同个目录,执行下载指令后,被下载的文件的内容会被清空,如下所示,文件 的内容会被删除掉:

sftp> get /root/test/ /root/test
Fetching /root/test/ to 
/root/test/                                                                0%    0     0.0KB/s   --:-- ETA     

本地目录存在相同的文件 ,sftp 就会删除该文件的内容,但是会保留文件名以及相关属性信息,而被下载的文件也是这个文件,说明被下载的文件的内容被删除了,也就是说文件名()所引用的内容其实是空的,所以执行完之后的结果就是被下载的文件的内容被删除了,然后文件名保留,刷新下文件的 atime,mtime。

扩展:所以这个结果就可以得知,Linux 中的 sftp 是怎么覆盖同名文件的了,覆盖的时候其实本地的文件名及属性信息没有被一并删除,只是内容部分(block)被删除了,然后把远程主机的同名文件的内容存放进去,所以覆盖的是文件的内容。

三、使用 FTP 客户端软件

推荐使用 VanDyke Software, Inc.(中文译为:范戴克软件公司)研发生产的支持普通FTP标准和安全数据传输标准(SFTP 或者 在SSH2 上的FTP)的FTP客户端软件:SecureFX

点击查看 SecureFX 介绍

SecureFX 官方下载地址

点击查看 SecureFX 使用教程