这篇文章主要介绍的是本人使用过的一些Linux脚本和命令,顺序比较混乱,不定期更新,根据目录小节标题查找
0.ssh免密登录
在使用ssh命令登录其他服务器时,如果对该服务器的登录的频繁的,那么输入密码就是一件令人头疼的事情,即使密码很简单,这时候就需要免密登录来减少令人头疼的密码输入次数。
# .ssh文件夹是隐藏的,查看.ssh文件夹需要的命令如下
ls -al ~
# 生成rsa密钥对,分为公钥和私钥,如果没有.ssh文件夹,那么这一步可以自动生成.ssh文件夹
ssh-keygen -t rsa
# 该密钥对保存在用户目录 ~/.ssh文件夹中
# 进入.ssh文件夹中
cd ~/.ssh
# 向需要免密登录的主机发送公钥,这里的ip地址填发送主机的ip地址
# 需要免密登录的机器都需要发送一遍
ssh-copy-id 192.168.47.103
# 查看免密登录是否成功
ssh 192.168.47.103
ps:如果发现上述配置完了后,免密登录还是不行,最好的解决方法时将自己的机器和需要免密登录的机器中的~/.ssh
文件夹删除,重复上述步骤
#删除.ssh文件夹
rm -rf ~/.ssh
1. scp和rsync
- scp 可以实现服务器与服务器之间的数据拷贝。
- rsync 主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync 和 scp 区别:用 rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp 是把所有文件都复制过去。
scp -r $pdir/$fname $user@$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
rsync -av $pdir/$fname $user@$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
-a: 归档模式,保留所有文件属性,递归同步目录
-v: 显示详细输出,方便调试
-z: 压缩传输,减小网络带宽占用
--delete: 删除目标上没有源中对应文件的文件
集群分发文件脚本
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in host1 host2 host3
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
注意:在编写完脚本后需要赋予其执行去权限
chmod +x $file
2. 集群共同执行某个控制台命令的脚本
如果需要让集群中的机器执行某个相同的命令,例如yum install
命令
#!/bin/bash
# 从控制台读取要执行的指令
echo "请输入要在集群中执行的指令:"
read command_to_execute
# 遍历集群中的所有主机,并在每台主机上执行指令
for host in host1 host2 host3
do
echo "在主机 $host 上执行指令:$command_to_execute"
ssh $host "$command_to_execute"
done
3.chown
使用情景:有些时候,某些文件的持有者如果为root用户,那么使用本地用户对这些文件进行修改,不可避免地需要用到sudo
命令,如果需要频繁的对该文件夹进行操作,那么最好使用chown
修改所有文件的,所有者和所有者组。
将目录及其下所有文件和子目录的所有者和所属组都更改为user用户和user组,可以使用以下命令:
sudo chown user:user -R $dir
4.hadoop集群启停脚本
这个脚本启动的前提是已经配置好hadoop中的 HDFS,Yarn和Historyserver
#!/bin/bash
if [ $# -lt 1 ]
then
echo "No Args Input..."
exit ;
fi
case $1 in
"start")
echo " =================== 启动 hadoop 集群 ==================="
echo " --------------- 启动 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;;
esac
5 查看集群java进程脚本(jps命令)
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo =============== $host ===============
ssh $host jps
done