Linux下载服务器文件夹,其实就三条路:用scp -r直接复制、用rsync增量同步、用sftp交互拉取,而“在哪里设置”这件事,既指服务器端的SSH权限和目录权限,也指本地终端的当前工作目录。
很多朋友第一次接触Linux,想着把服务器上的某个文件夹拿回本地,结果输入一堆命令要么报错,要么文件不知道跑哪去了,别急,今天咱就把“下载服务器文件夹”这件事掰开揉碎讲清楚,从命令到权限,从路径到加速,一次性理明白。
Linux从服务器下载文件夹命令,其实就这三板斧
scp -r:最直接的下载方式
scp是OpenSSH自带的远程复制命令,最简单的用法是加个-r参数表示递归复制整个目录。
scp -r user@服务器IP:/远程路径/文件夹名称 /本地目标目录/
如果你要指定端口,记得加-P(注意是大写的P):
scp -r -P 2222 user@服务器IP:/home/user/www /home/local_backups/
这个命令执行后会要求输入密码,或者自动匹配你的SSH密钥,它会把远程文件夹整个复制到本地,适合一次性完整备份的场景。
rsync -av:增量同步才是效率
scp每次都是全量复制,目录一大了就慢得让人抓狂。rsync则聪明得多,它只传输差异部分,还能断点续传。
rsync -av user@服务器IP:/远程路径/文件夹/ /本地路径/文件夹/
这里的-a是归档模式,保留权限、时间戳、软链接等属性,-v显示过程,注意结尾的斜杠很关键,带不带斜杠语义略有区别:源路径带斜杠表示复制文件夹里的内容,不带斜杠则连文件夹本身一起复制。
sftp:交互式下载,看得见摸得着
如果你不想背命令,sftp提供类似FTP的交互界面,登录之后用get或mget下载文件,用get -r下载文件夹。
sftp user@服务器IP sftp> get -r 远程文件夹名 sftp> bye
这里的get -r会递归下载整个目录,如果你的sftp版本不支持-r,可以用lcd切换本地目录,再用mget .log等通配符批量下载文件。
三种命令的选择差异
| 命令 | 适用场景 | 特点 |
|---|---|---|
| scp | 一次性全量下载 | 简单直接,但不支持断点续传 |
| rsync | 大目录、定期同步 | 增量传输,支持压缩和限速 |
| sftp | 临时查看和手动下载 | 交互友好,可逐级目录操作 |
如果你问我推荐哪个,日常用得最多的其实是rsync,因为效率高,但追求省事就用scp,两者底层都走SSH通道,安全方面没有大差别。
linux下载服务器文件夹到哪里去了?本地路径别搞混
终端工作目录决定了“落在哪”
scp和rsync下载后放到哪,完全取决于你终端当前的路径,如果你执行下面这段:
cd /home/username/downloads scp -r user@服务器IP:/data/logs .
那文件夹就跑到了/home/username/downloads下面,但如果你的终端当前在根目录,又没有指定本地目标路径,文件夹就会被扔在文件系统根部,如果不确定当前在哪,先敲pwd看一眼。
图形化工具与终端的位置差异
用FileZilla或者WinSCP这类图形化工具连接服务器后,软件里有个“本地路径”栏,默认一般是安装目录或用户目录,很多人下载完发现文件不见了,就是在图形界面里设置了隐藏路径,建议在软件设置里把默认下载目录改成/Downloads或者自己熟悉的目录,这样找起来方便。
下载后文件夹找不到怎么办
如果你真的忘了下载到哪个路径,用find命令全盘找:
find / -name "文件夹名称" -type d 2>/dev/null
加上2>/dev/null是为了忽略权限不足的报错,如果文件夹很大,也可以先用du -sh估算大小,再判断从哪散发出来的大文件。
linux服务器文件夹下载权限怎么设置,避免连不上或拒绝访问
sshd_config里三个关键参数
服务端的设置主要在/etc/ssh/sshd_config里,改完要重启SSH服务让配置生效。
sudo systemctl restart sshd
有三个参数直接影响你能否下载:
PermitRootLogin:控制是否允许root登录,默认很多系统禁止,导致你用root无法直接拉文件。PasswordAuthentication:控制是否允许密码登录,如果设成no,就要求本地必须有匹配的密钥。Port:非22端口时,scp和sftp后面都要手动加-P,不然默认走22端口直接连接失败。
目录权限的调整
服务器端的文件夹本身也得可读,否则命令报了Permission denied,查看目录权限用ls -l,修改用chmod和chown。
sudo chown -R username:username /远程目录 sudo chmod 755 /远程目录
755表示所有者可读写执行,组和其他用户可读执行,这通常足够用于通过SSH下载,如果你想更严格,用700也行,但要注意执行下载的用户必须是文件所有者。
防火墙和安全组的配合
本地和服务器之间的网络也得通,服务器上如果开了ufw防火墙,需要放行SSH端口:
sudo ufw allow 22/tcp
酷番云、简米云这类云服务器,还要在控制台的安全组规则里放行入方向的22端口,这里容易踩坑的是:某些地区的新机器默认安全组只放行了80和443端口,SSH连接能通但sftp和scp数据传输会卡住,因为数据通道也走22端口,把安全组也检查一下,才能真正确保权限畅通。
酷番云linux服务器下载文件夹的常见折腾
密钥登录还是密码登录
酷番云linux服务器创建时一般会让你绑定密钥或设置密码,如果你选的是密钥登录,本地才在命令行直接用scp会提示没有权限,因为找不到私钥,解决办法是下载私钥到本地并赋予600权限:
chmod 600 酷番云密钥.pem scp -i 酷番云密钥.pem ubuntu@服务器IP:/data/folder /本地路径/
如果你不介意安全性,也可以在控制台重置密码,改用密码登录。
下载网站备份的完整流程
很多站长把网站放在酷番云上,定期要把整个站点拉回本地,建议先在服务器上压缩再下载,这个习惯能大幅减少传输时间。
服务器端:
cd /www tar czf site_backup.tar.gz wwwroot
本地端:
scp ubuntu@服务器IP:/www/site_backup.tar.gz /本地/backups/
压缩后再传,比直接scp一个个文件快得多,如果你的服务器上还有数据库,建议也dump一份再一起打包。
利用内网IP提速
酷番云同一地域的服务器和本地网络不通内网,但如果你是从另一台酷番云机器上下载,可以用内网IP替换公网IP,速度翻几倍,本地下载只能用公网,无法走内网。
linux下载服务器文件夹速度慢,多半是这几处没调好
先压缩后传输
上面提到的打包再下载是提速最简单的一招,如果不想在服务器留下压缩包,可以一行命令管道打过去:
ssh user@服务器IP "tar czf - /远程目录" > /本地目录/文件夹.tar.gz
这等于在传输过程中动态压缩,不占服务器磁盘空间。
rsync优化参数
用rsync时加上-z启用压缩,加上--partial保留部分传输的文件,防止中断后重来。
rsync -avz --partial user@服务器IP:/远程/文件夹/ /本地/
如果你不想占满带宽,可以加--bwlimit=2000限制带宽为2MB/s,这个是局域网传输比较常用的做法。
换协议处理慢速问题
scp走的是sftp子系统,数据通道的加密开销比rsync稍高,如果你只是下载一个几百兆的文件,两者区别感受不明显,但到了几十GB级别,rsync在算法和I/O优化上更占优。
如果速度还是很拉胯,另一个思路是把服务器的SSH服务配置里加一行:
Ciphers aes128-ctr
然后把加密算法切换到性能更好的方案,很多云服务器默认的加密算法偏保守,切换后传输速度会有比较明显的提升。
关于linux下载服务器文件夹的常见问题
Linux下载服务器文件夹提示Permission denied怎么办
先排查服务器端目录的权限,用ls -ld看目录属主和权限位,执行chmod 755或chown调整属主,再看SSH服务是否允许当前用户登录,具体看sshd_config里的AllowUsers和PermitRootLogin,最后检查本地目标目录是否可写,mkdir -p创建目录来兜底。
wget能从服务器下载文件夹吗
不能直接下载文件夹。wget针对的是单个URL文件,虽然加-r -np可以递归抓取开启目录浏览的HTTP站点,但绝大多数SSH服务器不提供HTTP目录接口,所以下载Linux服务器文件夹仍然推荐scp或rsync。
从服务器下载文件夹到Windows本地用什么工具
Windows建议用WinSCP或MobaXterm,图形化界面直接拖拽文件夹即可,默认协议是sftp,如果是Windows 10及更新版本自带的OpenSSH环境,也可以直接在PowerShell里执行:
scp -r user@服务器IP:/远程/文件夹 C:本地
路径写法和Linux略有区别,但命令逻辑一致,MobaXterm还支持多标签,同时操作国内多个地域的服务器时效率更高。
首发原创文章,作者:王坚,如若转载,请注明出处:https://idctop.com/article/723712.html





