批量配置Linux ~/.bash_profile
前提是服务器已配置好免密登录
scp
(Secure Copy)
scp
(Secure Copy)是 Linux 中基于 SSH 协议的安全文件传输命令,用于在本地主机和远程主机之间(或两个远程主机之间)复制文件或目录。
基本语法
scp [选项] 源文件 目标路径
选项 | 说明 |
---|---|
-P 端口 | 指定 SSH 端口(默认 22) |
-p | 保留文件修改时间、权限等属性 |
-C | 启用压缩传输(节省带宽) |
-q | 静默模式(不显示进度和警告) |
-v | 显示详细传输过程(调试用) |
-l 限速 | 限制带宽(单位:Kbit/s) |
示例
1. 复制文件到远程主机的指定端口(非默认22)
scp -P 2222 file.txt user@example.com:/tmp/
2. 保留文件属性并压缩传输
scp -Cp ~/backup.tar.gz user@example.com:/backup/
3. 限速传输(避免占用过多带宽)
scp -l 800 largefile.iso user@example.com:/downloads/
4. 复制远程主机的隐藏文件
scp user@example.com:"/home/user/.*" ./local_folder/
注意事项
-
路径格式:
-
本地路径:
/path/to/file
-
远程路径:
user@host:/path/to/file
-
-
特殊字符处理:
-
文件名含空格或特殊字符时,用引号包裹路径:
scp "user@example.com:'file with space.txt'" ./
-
-
SSH 密钥认证:
-
若已配置 SSH 免密登录,
scp
无需输入密码。
-
-
安全性:
-
scp
基于 SSH,默认加密传输,但 SCP 协议本身存在已知漏洞,建议优先使用rsync
或sftp
。
-
替代工具
-
rsync
:更高效的文件同步工具(支持增量传输)。 -
sftp
:交互式文件传输工具(类似 FTP)。 -
rsync
示例:rsync -avz -e "ssh -p 2222" /本地/目录 user@example.com:/远程/路径
source
source
是 Linux/Unix 系统中的一个 Shell 内置命令,用于在当前 Shell 环境中执行指定的脚本文件(而不是启动新的子 Shell)。它是 Bash、Zsh 等 Shell 提供的一种加载环境变量或函数的方式。
加载环境变量配置文件
修改profile
后,使其立即生效:
source ~/.bash_profile
编写shell脚本
vim sync_files.sh
echo "=======sync files ========="
target_user=root
for host_name in bigdata113 bigdata114 bigdata112
do
echo "=======sync $host_name========="
#复制本地文件 到远程服务器
scp ~/.bash_profile $target_user@$host_name:/root/.bash_profile
echo "======= 加载 bash_profile========="
#加载环境变量配置文件
ssh $target_user@$host_name " source ~/.bash_profile " #对所有新会话生效
done
总结
场景 | 方法 | 特点 |
---|---|---|
临时执行命令 | ssh user@host "source file && command" | 环境变量仅本次 SSH 会话有效 |
永久修改环境变量 | 写入配置文件后 source | 对所有新会话生效 |
需要 sudo 权限 | sudo -i 配合 source | 保留 root 环境变量 |
批量管理多台主机 | 使用 Ansible | 标准化、可维护性强 |