centos上传文件怎么传
用 scp 传文件到 CentOS,上传是文件最省事的办法。命令就一行,上传格式是文件 scp 本地文件路径 用户名@服务器IP:目标路径。比如要把当前目录下的上传 backup.tar.gz 传到服务器 /home/admin 下,敲 scp backup.tar.gz admin@192.168.1.100:/home/admin/,文件回车输密码,上传进度条走完就完事。文件这法子适合传单个文件或者少量文件,上传简单直接,文件不用额外装什么软件,上传只要服务器开了 SSH 就能用。文件
不过 scp 有个毛病,上传传大文件的文件时候如果网络断了,得从头再来。上传我传过一个 8G 的数据库备份,传到 90% 断线,心态直接崩了。后来改用 rsync,支持断点续传,命令跟 scp 差不多:rsync -avzP backup.tar.gz admin@192.168.1.100:/home/admin/。那个 -P 参数就是显示进度并支持续传,-z 是压缩传输,传文本类文件能省不少带宽。rsync 还有个好处,传目录的时候可以增量同步,第二次传只传改动部分,速度飞快。
要是文件特别大,或者需要传整个目录树,我一般用 rsync -avzP --progress /local/dir/ admin@server:/remote/dir/。注意源路径结尾带不带斜杠区别很大,带斜杠是传目录里的内容,不带斜杠是连目录本身一起传。这个坑我踩过好几次,传完发现多了一层文件夹,又得删了重来。
还有一种情况,服务器在防火墙后面,只开了 80 或 443 端口,SSH 的 22 端口被封了。这时候 scp 和 rsync 都歇菜。可以用 ssh -p 443 指定端口,前提是服务器 SSH 确实监听在 443 上。如果 SSH 完全不能用,那就走 HTTP。在服务器上装个 nginx,配个上传接口,或者直接用 Python 起个临时服务:python3 -m http.server 8000,然后在本地用 curl 传:curl -T file.tar.gz http://server:8000/。这招应急很好使,但注意 python 自带的 http.server 默认不支持上传,得用 uploadserver 模块或者自己写几行。
图形界面的话,FileZilla 和 WinSCP 都行。FileZilla 跨平台,WinSCP 只有 Windows。连上去之后左边本地右边远程,拖拽就传。我观察到一个现象,很多人用 FileZilla 传文件,传完发现权限不对,文件属主变成了 nobody。这是因为 SFTP 协议下,文件权限继承的是登录用户的 umask,不是本地文件的权限。解决办法是在 FileZilla 设置里把“上传后文件权限”改成 644,目录改成 755,或者传完手动 chmod 一下。
说到权限,传文件到 CentOS 的 web 目录,比如 /var/www/html,传完记得改属主:chown -R nginx:nginx /var/www/html/,不然 nginx 读不了。SELinux 开着的话更麻烦,还得 chcon -R -t httpd_sys_content_t /var/www/html/。我有次传完网站文件,浏览器一直 403,查了半天是 SELinux 的锅。临时关 SELinux 用 setenforce 0,但生产环境别这么干,老老实实改上下文。
传文件之前,习惯性先 df -h 看一眼目标分区剩余空间。我见过有人传了 50G 日志上去,把 / 分区撑爆,系统直接起不来。还有,用 scp 传目录要加 -r,传符号链接要加 -L 或者 -p,不然链接变成实体文件,体积翻倍。这些细节平时不在意,出问题的时候能折腾半天。
最后说个偏门但实用的:用 tar 加管道直接传目录,不落盘。命令是 tar czf - /local/dir | ssh admin@server "tar xzf - -C /remote/dir"。这招传大量小文件特别快,因为省去了每个文件单独建立连接的开销。我传过一个包含三万个小图片的目录,scp 传了二十分钟,tar 管道三分钟搞定。缺点是中断了没法续传,适合网络稳定的内网环境。
(责任编辑:娱乐)














