云网牛站
所在位置:首页 > Linux编程 > 使用Bash脚本备份Linux远程系统上的配置文件

使用Bash脚本备份Linux远程系统上的配置文件

2020-02-05 21:38:36作者:刘主稿源:云网牛站

本文包括使用Bash脚本来备份多个Linux远程系统上的配置文件。在Linux系统上执行任何活动之前,最好备份配置文件。如果几天后要重新启动服务器,则可以使用此脚本。如果您真的很担心配置文件的备份,建议每月至少使用一次此脚本。如果出现问题,可以根据错误消息比较配置文件,以使系统恢复正常。本文包含三个bash脚本,每个shell脚本均用于特定目的,您可以根据自己的要求选择一种。Linux中的所有内容都是文件,如果在配置文件中进行了一些错误的更改,将导致关联的服务崩溃。因此,最好备份配置文件,并且您不必担心磁盘使用情况,因为这不会占用太多空间。提醒:脚本当中的路径和名称请注意更改为自己的。

使用Bash脚本备份Linux远程系统上的配置文件

 

这个脚本做什么?

该脚本备份特定的配置文件,将它们移动到另一台服务器,最后删除远程计算机上的备份。

该脚本分为六个部分,详细信息如下:

第1部分:备份常规配置文件。

第2部分:如果服务器是物理的,则备份一个wwn/wwpn号码。

第3部分:如果系统具有oracle用户帐户,则备份与oracle相关的文件。

第4部分:创建备份配置文件的tar存档。

第5部分:将tar归档文件复制到其他服务器。

第6部分:删除远程系统上的配置文件备份。

系统详细信息如下:

服务器A:本地系统/JUMP系统(local.2daygeek.com)

服务器B:远程系统1(CentOS6.2daygeek.com)

服务器C:远程系统2(CentOS7.2daygeek.com)

 

1、Bash脚本一:备份远程服务器上的配置文件

此示例中包括两个脚本,它们使您可以将重要的配置文件从一台服务器备份到另一台服务器(即从远程服务器到本地服务器)。

例如,如果要将重要的配置文件从“服务器B”备份到“服务器A”,使用以下脚本。

这是一个真正的bash脚本,用于备份远程服务器上的配置文件:

# vi /home/daygeek/shell-script/config-file.sh

#!/bin/bash

mkdir /tmp/conf-bk-$(date +%Y%m%d)

cd /tmp/conf-bk-$(date +%Y%m%d)

For General Configuration Files

hostname > hostname.out

uname -a > uname.out

uptime > uptime.out

cat /etc/hosts > hosts.out

/bin/df -h>df-h.out

pvs > pvs.out

vgs > vgs.out

lvs > lvs.out

/bin/ls -ltr /dev/mapper>mapper.out

fdisk -l > fdisk.out

cat /etc/fstab > fstab.out

cat /etc/exports > exports.out

cat /etc/crontab > crontab.out

cat /etc/passwd > passwd.out

ip link show > ip.out

/bin/netstat -in>netstat-in.out

/bin/netstat -rn>netstat-rn.out

/sbin/ifconfig -a>ifconfig-a.out

cat /etc/sysctl.conf > sysctl.out

sleep 10s

#For Physical Server

vserver=$(lscpu | grep vendor | wc -l)

if [ $vserver -gt 0 ]

then

echo "$(hostname) is a VM"

else

systool -c fc_host -v | egrep "(Class Device path | port_name |port_state)" > systool.out

fi

sleep 10s

#For Oracle DB Servers

if id oracle >/dev/null 2>&1; then

/usr/sbin/oracleasm listdisks>asm.out

/sbin/multipath -ll > mpath.out

/bin/ps -ef|grep pmon > pmon.out

else

echo "oracle user does not exist on server"

fi

sleep 10s

#Create a tar archive

tar -cvf /tmp/$(hostname)-date +%Y%m%d.tar /tmp/conf-bk-$(date +%Y%m%d)

sleep 10s

#Copy a tar archive to other server

sshpass -p 'password' scp /tmp/$(hostname)-`date +%Y%m%d`.tar Server-A:/home/daygeek/backup/

#Remove the backup config folder

cd ..

rm -Rf conf-bk-$(date +%Y%m%d)

rm $(hostname)-`date +%Y%m%d`.tar

rm config-file.sh

exit

这是将上述脚本推送到目标服务器的子脚本:

# vi /home/daygeek/shell-script/conf-remote.sh

#!/bin/bash

echo -e "Enter the Remote Server Name: \c"

read server

scp /home/daygeek/shell-script/config-file.sh $server:/tmp/

ssh root@${server} sh /home/daygeek/shell-script/config-file.sh

sleep 10s

exit

最后运行bash脚本以实现此目的:

# sh /home/daygeek/shell-script/conf-remote.sh

使用Bash脚本备份Linux远程系统上的配置文件

运行上述脚本后,使用ls命令检查复制的tar存档文件:

# ls -ltrh /home/daygeek/backup/*.tar

-rw-r--r-- 1 daygeek daygeek 30K Feb 04 11:01 /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar

技术扩展:不使用ls命令列出目录内容,转而使用替代命令的方法

如果成功移动了它,则可以使用以下tar命令找到它的内容,而无需提取它:

# tar -tvf /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar

使用Bash脚本备份Linux远程系统上的配置文件

 

2、Bash脚本二:备份远程服务器上的配置文件

在此示例中添加了两个脚本,它们与上述脚本相同,但是如果您的环境中有JUMP服务器,这将非常有用。

该脚本允许您将重要的配置文件从客户端系统复制到JUMP box中。

例如,由于我们已经设置了无密码登录名,因此您可以从JUMP服务器访问十个客户端,如果是这样,请使用此脚本。

这是一个真正的bash脚本,用于备份远程服务器上的配置文件:

# vi /home/daygeek/shell-script/config-file-1.sh

#!/bin/bash

mkdir /tmp/conf-bk-$(date +%Y%m%d)

cd /tmp/conf-bk-$(date +%Y%m%d)

For General Configuration Files

hostname > hostname.out

uname -a > uname.out

uptime > uptime.out

cat /etc/hosts > hosts.out

/bin/df -h>df-h.out

pvs > pvs.out

vgs > vgs.out

lvs > lvs.out

/bin/ls -ltr /dev/mapper>mapper.out

fdisk -l > fdisk.out

cat /etc/fstab > fstab.out

cat /etc/exports > exports.out

cat /etc/crontab > crontab.out

cat /etc/passwd > passwd.out

ip link show > ip.out

/bin/netstat -in>netstat-in.out

/bin/netstat -rn>netstat-rn.out

/sbin/ifconfig -a>ifconfig-a.out

cat /etc/sysctl.conf > sysctl.out

sleep 10s

#For Physical Server

vserver=$(lscpu | grep vendor | wc -l)

if [ $vserver -gt 0 ]

then

echo "$(hostname) is a VM"

else

systool -c fc_host -v | egrep "(Class Device path | port_name |port_state)" > systool.out

fi

sleep 10s

#For Oracle DB Servers

if id oracle >/dev/null 2>&1; then

/usr/sbin/oracleasm listdisks>asm.out

/sbin/multipath -ll > mpath.out

/bin/ps -ef|grep pmon > pmon.out

else

echo "oracle user does not exist on server"

fi

sleep 10s

#Create a tar archieve

tar -cvf /tmp/$(hostname)-`date +%Y%m%d`.tar /tmp/conf-bk-$(date +%Y%m%d)

sleep 10s

#Remove the backup config folder

cd ..

rm -Rf conf-bk-$(date +%Y%m%d)

rm config-file.sh

exit

这是将上述脚本推送到目标服务器的子脚本:

# vi /home/daygeek/shell-script/conf-remote-1.sh

#!/bin/bash

echo -e "Enter the Remote Server Name: \c"

read server

scp /home/daygeek/shell-script/config-file-1.sh $server:/tmp/

ssh root@${server} sh /home/daygeek/shell-script/config-file-1.sh

sleep 10s

echo -e "Re-Enter the Remote Server Name: \c"

read server

scp $server:/tmp/$server-`date +%Y%m%d`.tar /home/daygeek/backup/

exit

最后运行bash脚本以实现此目的:

# sh /home/daygeek/shell-script/conf-remote-1.sh

使用Bash脚本备份Linux远程系统上的配置文件

运行上述脚本后,使用ls命令检查复制的tar存档文件:

# ls -ltrh /home/daygeek/backup/*.tar

-rw-r--r-- 1 daygeek daygeek 30K Feb 04 11:44 /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar

如果成功移动了它,则可以使用以下tar命令找到它的内容,而无需提取它:

# tar -tvf /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar

使用Bash脚本备份Linux远程系统上的配置文件

 

3、Bash脚本三:在多个Linux远程系统上备份配置文件

该脚本允许您将重要的配置文件从多个远程Linux系统同时复制到JUMP box中。

这是一个真正的bash脚本,用于备份远程服务器上的配置文件:

# vi /home/daygeek/shell-script/config-file-2.sh

#!/bin/bash

mkdir /tmp/conf-bk-$(date +%Y%m%d)

cd /tmp/conf-bk-$(date +%Y%m%d)

For General Configuration Files

hostname > hostname.out

uname -a > uname.out

uptime > uptime.out

cat /etc/hosts > hosts.out

/bin/df -h>df-h.out

pvs > pvs.out

vgs > vgs.out

lvs > lvs.out

/bin/ls -ltr /dev/mapper>mapper.out

fdisk -l > fdisk.out

cat /etc/fstab > fstab.out

cat /etc/exports > exports.out

cat /etc/crontab > crontab.out

cat /etc/passwd > passwd.out

ip link show > ip.out

/bin/netstat -in>netstat-in.out

/bin/netstat -rn>netstat-rn.out

/sbin/ifconfig -a>ifconfig-a.out

cat /etc/sysctl.conf > sysctl.out

sleep 10s

#For Physical Server

vserver=$(lscpu | grep vendor | wc -l)

if [ $vserver -gt 0 ]

then

echo "$(hostname) is a VM"

else

systool -c fc_host -v | egrep "(Class Device path | port_name |port_state)" > systool.out

fi

sleep 10s

#For Oracle DB Servers

if id oracle >/dev/null 2>&1; then

/usr/sbin/oracleasm listdisks>asm.out

/sbin/multipath -ll > mpath.out

/bin/ps -ef|grep pmon > pmon.out

else

echo "oracle user does not exist on server"

fi

sleep 10s

#Create a tar archieve

tar -cvf /tmp/$(hostname)-`date +%Y%m%d`.tar /tmp/conf-bk-$(date +%Y%m%d)

sleep 10s

#Remove the backup config folder

cd ..

rm -Rf conf-bk-$(date +%Y%m%d)

rm config-file.sh

exit

这是将上述脚本推送到目标服务器的子脚本:

# vi /home/daygeek/shell-script/conf-remote-2.sh

#!/bin/bash

for server in CentOS6.2daygeek.com CentOS7.2daygeek.com

do

scp /home/daygeek/shell-script/config-file-2.sh $server:/tmp/

ssh root@${server} sh /tmp/config-file-2.sh

sleep 10s

scp $server:/tmp/$server-`date +%Y%m%d`.tar /home/daygeek/backup/

done

exit

最后运行bash脚本以实现此目的:

# sh /home/daygeek/shell-script/conf-remote-2.sh

使用Bash脚本备份Linux远程系统上的配置文件

运行上述脚本后,使用ls命令检查复制的tar存档文件:

# ls -ltrh /home/daygeek/backup/*.tar

-rw-r--r-- 1 daygeek daygeek 30K Feb 04 12:37 /home/daygeek/backup/CentOS6.2daygeek.com-20200204.tar

-rw-r--r-- 1 daygeek daygeek 30K Feb 04 12:38 /home/daygeek/backup/CentOS7.2daygeek.com-20200204.tar

如果成功移动了它,则可以使用以下tar命令找到它的内容,而无需提取它:

# tar -tvf /home/daygeek/backup/CentOS7.2daygeek.com-20200204.tar

使用Bash脚本备份Linux远程系统上的配置文件

 

相关主题

将Linux配置文件和设置备份到USB闪存驱动器的方法

精选文章
热门文章