案例一:删除某一个文件
# rm <file>
案例二:删除某一个目录以及目录里的所有文件
# rm -r <directory>
案例三:非交互式删除某一个目录以及目录里的所有文件
# rm -rf <directory>
案例四:非交互式删除当前目录下的所有隐藏文件
# rm -rf .#*
案例五:非交互式删除所有特定后缀名称的文件
# rm -rf *txt
(补充:这里以非交互式删除所有以 txt 作为后缀名称的文件为例)
# rm <file>
# rm -r <directory>
# rm -rf <directory>
# rm -rf .#*
# rm -rf *txt
(补充:这里以非交互式删除所有以 txt 作为后缀名称的文件为例)
作者:朱明宇
名称:自动化部署 GRUB2 Bootloader 密码(openSUSE & SLE 版)
作用:自动化部署 GRUB2 Bootloader 密码(openSUSE & SLE 版)
1. 给此脚本添加执行权限
2. 执行此脚本
3. 当启动系统时,左下角出现以下内容时按下 “E”:
C: Command Line E: Edit Entry
1. 登录的账号是 root
2. 登录的密码是 eternalcenter
#!/bin/bash
echo "#!/bin/sh
exec tail -n +3 \$0
# This file provides an easy way to add custom menu entries. Simply type the
# menu entries you want to add after this comment. Be careful not to change
# the 'exec tail' line above.
set superusers=\"root\"
password_pbkdf2 root grub.pbkdf2.sha512.10000.B857B79D02FF55CA3A69B8485C1A4A427424630C804CC8A89134520A34E056D7882A778F6BC8AD856CB95DF8B99BE25F9FEAD899D826BB3915FB20BAD682D10A.4A1CF49B7F815A0578031CCA2CE98C66BDFBEAB0AE2721531BB54AFC6CFFA990FBD9062F41C006376C283B717FEC1BD9BB1AFB882AF91B5F4A812459D7974D1F
export superusers
set unrestricted_menu=\"y\"
export unrestricted_menu" > /etc/grub.d/40_custom
grep "rd.shell=0" /etc/default/grub
if [ $? -ne 0 ];then
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT="/s/"$/ rd.shell=0"/' /etc/default/grub
fi
grep "showopts" /etc/default/grub
if [ $? -ne 0 ];then
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT="/s/"$/ showopts"/' /etc/default/grub
fi
grep "LANG=C" /etc/default/grub
if [ $? -ne 0 ];then
sed -i '/GRUB_CMDLINE_LINUX_DEFAULT="/s/"$/ LANG=C"/' /etc/default/grub
fi
grub2-mkconfig -o /boot/grub2/grub.cfg
纪念:站主于 2021 年 2 月完成了此开源实验,并将过程中的所有命令经过整理和注释以后,形成以下教程
client enp1s0: 172.16.1.99
proxy1 enp1s0: 172.16.0.101
enp7s0: 172.16.1.101
virtual IP: 172.16.1.100
proxy2 enp1s0: 172.16.0.102
enp7s0: 172.16.1.102
web1 enp1s0: 172.16.0.11
web2 enp1s0: 172.16.0.12
proxy1 web1
enp7s0:172.16.1.101 enp1s0:172.16.0.101 enp1s0:172.16.0.11
virtual IP:172.16.1.100
client
enp1s0:172.16.1.99
proxy2 web2
enp7s0:172.16.1.102 enp1s0:172.16.0.102 enp1s0:172.16.0.12
1) web1 安装 Nginx,web2 安装 Apache 实现网站服务
2) proxy1 和 proxy2 安装 Nginx 实现网站代理,轮询代理 web1、web2 上的网站服务实现负载均衡
3) 虚拟 IP 172.16.1.90 通过 Keepalived 默认放在 proxy1 的 enp7s0 网卡上,如果 proxy1 宕机或者检测到自己 Nginx 代理进程死掉,则虚拟 IP 172.16.1.90 则挂在 proxy2 的 enp7s0 网卡上实现高可用
4) 如果 web1 和 web2 中有一台服务器宕机,则 proxy1 和 proxy2 会自动不再向这台服务器请求网站服务,直到它恢复正常
5) 最终达到的效果是 client 向虚拟 IP 请求网站服务,此时如果 proxy1 正常就代表虚拟 IP 轮询调度 web1 和 web2 上的网站服务,再返回给 client。如果 proxy1 宕机则由 proxy2 代表虚拟 IP 完成次操作
1) 所有服务器的系统都需要是 CentOS 8 版本
2) 所有服务器都要关闭防火墙
3) 所有服务器都要关闭 SELinux
4) 所有服务器系统都要配置好可用的软件源
5) 需要按照拓扑图给对应的服务器配置好 IP 地址和主机名
6) client 的 enp1s0 网卡、proxy1 的 enp7s0 网卡和 proxy2 的 enp7s0 网卡要可以相互 ping 通自己和对方的 IP
7) proxy1 的 enp1s0 网卡、proxy2 的 enp1s0 网卡、web1 的 enp1s0 网卡和 web2 的 enp1s0 网卡要可以相互 ping 通自己和对方的 IP 地址
(只在 web1 上执行以下步骤)
# yum -y install nginx
(只在 web1 上执行以下步骤)
# echo web1 > /usr/share/nginx/html/index.html
(只在 web1 上执行以下步骤)
# systemctl enable --now nginx
(只在 web2 上执行以下步骤)
# yum -y install httpd
(只在 web2 上执行以下步骤)
# echo web2 > /var/www/html/index.html
(只在 web2 上执行以下步骤)
# systemctl enable --now httpd
(分别在 proxy1 和 proxy2 上执行以下步骤)
# yum -y install nginx
(分别在 proxy1 和 proxy2 上执行以下步骤)
# vi /etc/nginx/nginx.conf
将部分内容修改如下:
......
http {
upstream webserver {
server 172.16.0.11:80;
server 172.16.0.12:80;
}
......
server {
listen 80;
location / {
proxy_pass http://webserver;
}
}
......
}
(分别在 proxy1 和 proxy2 上执行以下步骤)
# systemctl enable --now nginx
(分别在 proxy1 和 proxy2 上执行以下步骤)
# yum -y install keepalived
(分别在 proxy1 和 proxy2 上执行以下步骤)
# vi /etc/keepalived/nginx_check.sh
创建以下内容:
#!/bin/bash
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
systemctl stop nginx
sleep 5
if [ `ps -C nginx --no-header | wc -l` -eq 0 ];then
systemctl stop keepalived
fi
fi
(补充:这里以检测 Nginx 没启动就启动 Nginx,5 秒后 Nginx 要是还没有启动就关闭 keepalived 为例)
(只在 proxy1 上执行以下步骤)
# vim /etc/keepalived/keepalived.conf
将全部内容修改如下:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id proxy1
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight 20
}
vrrp_instance VI_1 {
state MASTER
interface enp7s0
virtual_router_id 90
priority 101
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
172.16.1.100
}
}
(
补充:
1) script “/etc/keepalived/nginx_check.sh” 代表使用的检测脚本是 /etc/keepalived/nginx_check.sh
2) interface enp7s0 代表虚拟 IP 将挂载在 enp7s0 网卡上
3) priority 代表修建级是 101,数字越大优先级越高
4) 172.16.1.100 代表虚拟 IP 是 172.16.1.100
)
(只在 proxy2 上执行以下步骤)
# vim /etc/keepalived/keepalived.conf
将全部内容修改如下:
! Configuration File for keepalived
global_defs {
notification_email {
acassen@firewall.loc
failover@firewall.loc
sysadmin@firewall.loc
}
notification_email_from Alexandre.Cassen@firewall.loc
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id proxy1
vrrp_skip_check_adv_addr
vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_script chk_nginx {
script "/etc/keepalived/nginx_check.sh"
interval 2
weight 20
}
vrrp_instance VI_1 {
state MASTER
interface enp7s0
virtual_router_id 90
priority 99
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
track_script {
chk_nginx
}
virtual_ipaddress {
172.16.1.100
}
}
(
补充:
1) script “/etc/keepalived/nginx_check.sh” 代表使用的检测脚本是 /etc/keepalived/nginx_check.sh
2) interface enp7s0 代表虚拟 IP 将挂载在 enp7s0 网卡上
3) priority 代表修建级是 99,数字越大优先级越高
4) 172.16.1.100 代表虚拟 IP 是 172.16.1.100
)
(分别在 proxy1 和 proxy2 上执行以下步骤)
# systemctl enable --now keepalived.service
(只在 client 上执行以下步骤)
# curl 172.16.1.100
(补充:重复以上命令会发现重复显示 web1 和 web2)
(只在 proxy1、proxy2、web1、web2 中的任意一台服务器上执行以下步骤)
# poweroff
(只在 client 上执行以下步骤)
# curl 172.16.1.100
(补充:重复以上命令会发现重复显示 web1 和 web2)
人类曾因为各种原因,表现出了对同类的忠诚和自我牺牲。而在人类所有的忠诚和自我牺牲中,最为坚固的,莫过于,对此人人格魅力、优秀品质或出众能力的认可和崇敬,同时与此人拥有共同的人生目标和美好的理想,并愿意共同为这些目标和理想而努力。这一现象,会让爱情、友情、亲情以及普世的博爱变得无比牢固,任凭海枯石烂也屹立不倒。
所以,祝大家对他(她)人的忠诚,以及他(她)人对你的忠诚不仅仅是出于共同的经历和责任,还包括我以上所述的内容。既是指爱情,也是指友情,也是指亲情,也是指博爱……
银色的细雨敲打着充满叹息的大地
起起伏伏的声线,努力表达着自己心中那份苦涩的温柔
唯美的风景被交替的四季驱使, 无法坚持住自己最美丽的样子
守望着那些看不见的星辰,那些消失了的宇宙。该以什么之名,幻想出一种怎样的梦境?
不管是清晰还是模糊,不管是胸有成竹还是力不从心。诞生于这个世界的意义,应从当下开始去创造
心中的启明星,会在静谧中,开始自己璀璨亦朦胧的闪耀