安装php
1. 安装所需环境
yum -y install libxml2 libxml2-devel openssl openssl-devel curl-devel libjpeg-devel libpng-devel freetype-devel libmcrypt-devel libzip-devel pcre-devel
2. 下载并安装PHP
#下载
wget http://cn2.php.net/distributions/php-7.3.3.tar.gz
#解压
tar -xzf php-7.3.3.tar.gz
#进入目录
cd php7.3.3
#编译php
./configure --prefix=/usr/local/php7 \
--with-config-file-path=/usr/local/php7/etc \
--with-config-file-scan-dir=/usr/local/php7/etc/php.d \--enable-mysqlnd \
--with-mysqli \
--with-pdo-mysql \
--enable-fpm \
--with-fpm-user=nginx \
--with-fpm-group=nginx \
--with-gd \
--with-iconv \
--with-zlib \
--enable-xml \
--enable-shmop \
--enable-sysvsem \
--enable-inline-optimization \
--enable-mbregex \
--enable-mbstring \
--enable-ftp \--with-openssl \
--enable-pcntl \
--enable-sockets \
--with-xmlrpc \
--enable-zip \
--enable-soap \
--without-pear \
--with-gettext \
--enable-session \
--with-curl \
--with-jpeg-dir \
--with-freetype-dir \
--enable-opcache
如果报错system libzip must be upgraded to version >= 0.11
yum -y remove libzip-devel
wget https://libzip.org/download/libzip-1.3.2.tar.gz
tar xvf libzip-1.3.2.tar.gz
cd libzip-1.3.2
./configure
make && make install
编译,安装
# -j: 启用两个任务
make && make install -j2
3. 配置PHP
# 复制ini文件
cp php.ini-production /usr/local/php7/etc/php.ini
# 配置fpm
cd /usr/src/php-7.0.0/sapi/fpm
cp init.d.php-fpm /etc/init.d/php-fpm
chmod +x /etc/init.d/php-fpm
chkconfig --add php-fpm
chkconfig php-fpm on
# 启动服务
/etc/init.d/php-fpm start
# 添加环境变量
vim /etc/profile
# 在最后添加
export PATH=$PATH:/usr/local/php7/bin
# 立即生效
source /etc/profile
# 验证是否可以全局使用php命令
php -v
PHP 7.2.0 (cli) (built: Jan 16 2020 12:17:55) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
删除文件后,不释放空间
因为文件是被打开的(有一个进程正在使用),被直接删除了文件。虽然文件被删除了,但是进程将仍然能够读取该文件,磁盘空间也一直被占用。所以若想清除被占用的文件,可以选择清空日志文件的方式:
echo > /data/server/xxx/log/log.log
通过以下命令查找哪些被删除的文件未释放空间
lsof |grep deleted

将这个服务重启一下即可。
修改jar包内配置文件
# 解压jar包到目录
jar xvf audit-creditscore-jl-1.4.2_20211028.jar
# 用 vi 命令 修改需要改的配置文件
# 把解压修改后的文件重新打成jar包即可
jar -cfM0 audit-creditscore-jl-1.4.2_1028.jar *
监控端口是否运行
监控端口是否允许,如果未运行则执行启动命令
使用方法:
创建定时任务
* * * * * sh /data/shell/monitor_port.sh 4875 "cd /data/www/sinopia && nohup sh start.sh &"
脚本后面后面跟了两个参数,分别是要监控的端口号、启动的命令
脚本内容
#!/bin/bash
# 检查参数数量是否正确
if [ $# -ne 2 ]; then
echo "Usage: $0 <port> <start-command or service-name>"
exit 1
fi
# 获取端口号和启动命令
PORT=$1
START_COMMAND=$2
# 定义日志目录和文件名
LOGDIR="/data/shell/log"
LOGFILE="${LOGDIR}/monitor_port-`date '+%Y%m%d'`.log"
# 检查日志目录是否存在,如果不存在则创建该目录
if [ ! -d "$LOGDIR" ]; then
mkdir -p "$LOGDIR"
fi
# 定义日志函数,加上时间戳并输出到日志文件
log() {
echo "[`date '+%Y-%m-%d %H:%M:%S'`] $1" >> $LOGFILE
}
# 检查端口是否在运行
if netstat -ntlp | grep -q ":$PORT "; then
log "Port $PORT is running"
else
# 端口未运行,启动服务
log "Port $PORT is not running, starting $START_COMMAND"
eval "$START_COMMAND"
fi
# 清理7天前的日志
find "$LOGDIR" -type f -name "monitor_port-*" -mtime +7 -exec rm -f {} \;
磁盘挂载
1. 查看磁盘情况:lsblk
可以看到sdb这个是个未挂载的新磁盘。且没有分区

2. 给磁盘分区
fdisk /dev/sdb
输入m可以获取帮助。通常输入n新建分区,输入p建立分区,其余默认。输入w保存
再次输入 lsblk 查看,可以看到sdb下面已经新建了sdb1分区。

3. 格式化分区:
mkfs.ext4 /dev/sdb1
4. 挂载分区
选择要挂载的目录(我这里用的data)
mount /dev/sdb1 /data (卸载分区umount /data)
5. 设置开机自启动
要设置挂载开机自启动,否则重启后需要手动挂载
vim /etc/fstab

注意:如果 /etc/fstab 配置的磁盘或目录有误,可能会导致系统启动失败
为了避免因磁盘或目录错误导致系统无法启动,可以通过以下方式优化 /etc/fstab 配置:
设备路径(如 /dev/vdb1)可能因硬件顺序变化而改变,推荐使用 UUID(唯一标识符)来指定磁盘。UUID 不受设备名称变化影响。
# 查看 /dev/vdb1 的 UUID:
blkid /dev/vdb1
# 输出如:/dev/vdb1: UUID="123e4567-e89b-12d3-a456-426614174000" TYPE="ext4"
修改 /etc/fstab,将 /dev/vdb1 替换为 UUID:
UUID=123e4567-e89b-12d3-a456-426614174000 /data ext4 defaults 0 0
nofail 选项允许系统在磁盘不可用时继续启动,而不会因挂载失败而中断。
在挂载选项中添加 nofail:
UUID=123e4567-e89b-12d3-a456-426614174000 /data ext4 defaults,nofail 0 0
效果:如果 /dev/vdb1 不存在或无法挂载,系统会忽略此条目,继续启动。
ssh互信
前言
在日常的一些使用中,偶尔有不输入密码,直接通过ssh访问目标机器的需求。比如linux之间的rsync同步。本篇文章中具体阐述了linux服务器之间的ssh信任的配置。
实验目标
A服务器通过ssh访问B服务器,可无需输入密码,直接登陆。
配置步骤
在A服务器生成公钥
# 生成公私钥
ssh-keygen -t rsa
所有需要输入的地方直接按回车。所以公私钥文件都是在默认位置保存,且没有密码。存储公私钥的文件夹位置默认为~/.ssh/,文件名默认是id_rsa和id_rsa.pub
将公钥复制到B服务器
把id_rsa.pub里的内容复制到B机器的~/.ssh/authorized_keys(如果没有这个文件,新建一个)
注意:上面是一行字符,不能为多行。(可以用cat查看复制)
这样就建立了服务器B对服务器A的信任关系,即在服务器A用任何ssh相关的工具不需要输入登录密码就可以访问服务器B了。
案例演示
实现免密从A服务器访问B服务器的rsync用户
# 以下为在B服务器的执行操作
# root用户执行:
useradd -m rsync
# 切换到rsync用户
su - rsync
# 修改权限
mkdir ~/.ssh
chown rsync:rsync ~/.ssh
chmod 700 ~/.ssh
touch ~/.ssh/authorized_keys
chown rsync:rsync ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
# 将A服务器的id_rsa.pub内容写入B服务器rsync用户下的authorized_keys
cat id_rsa.pub >> ~/.ssh/authorized_keys
这样就可以在A服务器ssh或者scp到B服务器了
# 免密ssh连接
ssh rsync@192.168.1.100
# 免密scp
scp /data/file.txt rsync@192.168.1.100:/data/
添加SWAP空间
添加Swap空间可以在内存不足时提供额外的虚拟内存,防止内存不足导致的系统崩溃
# 创建一个4GB的swap文件
sudo fallocate -l 4G /swapfile
# 如果系统不支持,用以下命令
sudo dd if=/dev/zero of=/swapfile bs=1G count=4
# 设置权限
sudo chmod 600 /swapfile
# 格式化为swap
sudo mkswap /swapfile
# 启用
sudo swapon /swapfile
# 要使其在重启后继续生效,编辑 /etc/fstab 并添加以下行
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
firewalld防火墙规则
防火墙基本命令
# 查看规则
sudo iptables -L -n --line-numbers
# 清空规则
sudo iptables -F
# 保存规则 - Debian 的系统
sudo iptables-save > /etc/iptables/rules.v4
# 保存规则 - Red Hat 的系统
sudo service iptables save
# 恢复保存的规则 - Debian 的系统
sudo iptables-restore < /etc/iptables/rules.v4
# 重启服务
systemctl restart firewalld
# 开机自启
sudo systemctl enable iptables
防火墙规则设置
# 允许特定 IP 访问 22 端口
sudo iptables -A INPUT -s 106.75.⬛.⬛ -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -s 42.240.⬛.⬛ -p tcp --dport 22 -j ACCEPT
sudo iptables -A INPUT -s 183.17.⬛.⬛ -p tcp --dport 22 -j ACCEPT
# 允许所有 IP 访问 UDP 的 1194 端口
sudo iptables -A INPUT -p udp --dport 1194 -j ACCEPT
# 允许 10.8.0.0/24 本机所有端口
sudo iptables -A INPUT -s 10.8.0.0/24 -j ACCEPT
# 允许 0.0.0.0/0 访问 80、443、2222 端口
sudo iptables -A INPUT -p tcp -m multiport --dports 80,443,2222 -j ACCEPT
# 拒绝所有其他请求
sudo iptables -A INPUT -j DROP
检测证书到期
先从域名解析里导出二级域名列表,将二级域名写入check-cert.txt文件
修改脚本内com=’xxxx.com’改为自己的顶级域名
执行脚本。
#!/bin/bash
##########################
# 读取check-cert.txt文件中的域名列表
#domains=$(cat check-cert.txt)
com='xxxx.com'
domains=$(for i in `cat check-cert.txt| grep ^[^#]` ;do echo $i.$com;done)
##########################
cat /dev/null > check-cert.log
echo -e "域名名称\t证书状态" >>check-cert.log
# 遍历每个域名
for domain in $domains; do
# 判断域名是否可达,超时则输出红色信息并跳过进行下一个域名
if ! timeout 1 bash -c "echo > /dev/tcp/$domain/443" > /dev/null 2>&1 ; then
echo -e "\033[33m${domain}\t未知\033[0m" >>check-cert.log
continue
fi
# 获取证书有效期截止时间
expiration_date=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -enddate | cut -d= -f 2)
# 将证书过期日期转换为时间戳
expiration_timestamp=$(date -d "$expiration_date" +%s)
# 获取当前时间的时间戳
current_timestamp=$(date +%s)
# 获取证书颁发者和主题信息
issuer=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -issuer -subject -dates)
subject=$(echo | openssl s_client -servername $domain -connect $domain:443 2>/dev/null | openssl x509 -noout -subject -dates)
# 如果返回结果为空,则说明该站点没有SSL证书
if [[ -z "$issuer" || -z "$subject" ]]; then
echo -e "\033[31m${domain}\t站点没有SSL证书\033[0m" >>check-cert.log
elif [[ $current_timestamp -lt $expiration_timestamp ]]; then
days_left=$((($expiration_timestamp - $current_timestamp)/(3600*24)))
if [[ $days_left -le 30 ]]; then
echo -e "\033[36m${domain}\t即将过期\t(剩余${days_left}天)\033[0m" >>check-cert.log
else
echo -e "\033[32m${domain}\t已更新\033[0m" >>check-cert.log
fi
else
# 证书已过期,输出红色
echo -e "\033[31m${domain}\t已过期\t$expiration_date\033[0m" >>check-cert.log
fi
done
别名
创建alias便于常见操作
vim ~/.bash_profile
# 添加常见操作。例如添加
alias redis='redis-cli -h 10.1.74.47'
alias config='/usr/bin/mysql -h10.1.181.45 -uprod -pYasdf1344GT db_config --default_character_set=utf8 -A'
输入redis 就相当于输入了后面的redis-cli -h 10.1.74.47
输入config 就相当于输入了后面的/usr/bin/mysql -h10.1.181.45 -uprod -pYasdf1344GT db_config --default_character_set=utf8 -A

评论(0)