日志轮转
日志轮转
默认日志生成在/var/log/下 messages:linux系统本身运行时的日志 secure:认证,安全的日志 postfix:邮件相关的日志 cron:crond,at进行相关的日志 dmsg:系统启动相关的日志 yum.log:yum相关的日志 默认配置文件:/etc/logrotate.conf 配置文件存放路径:/etc/logrotate.d/ 使用时在配置文件中引入自定义配置文件
防火墙
防火墙
添加允许通过的服务:firewall-cmd --zone=public --add-service=http 查看当前使用区域配置:firewall-cmd --list-all 删除允许通过的服务或端口:firewall-cmd --zone=public --remove-service=http or --remove-port=1234/tcp 添加允许通过的端口:firewall-cmd --zone=public --add-port=1234/tcp 以上全部只在本次开机生效,要永久性生效,添加 --permanent参数,之后重新启动防火墙或使用 --reload参数重新加载配置
更改命令行颜色
更改命令行颜色
PS1="\[\e[1;35m\][\u@\h \w]\\$\[\e[0m\]"
vim文件分割
vim文件分割
多文件水平分割:vim -o f1 f2 多文件垂直分割:vim -O f1 f2 单文件水平分割:CTRL+w,s 单文件垂直分割:CTRL+w,v 退出相邻一个:CTRL+w,q 退出其他所有:CTRL+w,o 推出所有::wqll
sftp服务
sftp服务
工作目录:/data/sftp
用户默认目录:/data/sftp/%u/home
公共目录:/data/sftp/pub
团队目录:/data/sftp/team
创建sftp组,用户
groupadd sftpusers #创建组
adduser sftpuser01 -G sftpusers #创建用户并添加到组
echo "123" | passwd --stdin sftpuser01 #设置用户登录密码
mkdir -p /data/sftp/sftpuser01/home #创建用户家目录
chown -R sftpuser01:sftpuser01 /data/sftp/sftpuser01 #更改文件所属
chmod -R 770 /data/sftp/sftpuser01 #用户无法进入其他用户的家目录
创建sftp服务器目录
mkdir /data/sftp/pub #公共目录
mkdir /data/sftp/team #团队协作目录
chown root:sftpusers /data/sftp/team
chown root:sftpusers /data/sftp/pub
chmod 1777 /data/sftp/pub #粘滞位t,用户只能删除自己的文件
chmod 2770 /data/sftp/team #目录下所有文件共享同一个组权限,组成员有创建删除文件的权限
更改配置文件
vi /etc/ssh/sshd_config
文件末尾添加:
Subsystem sftp internal-sftp
Match Group sftpusers #限制只有该组用户可以使用sftp
chrootDirectory /data/sftp/%u #sftp会话的根目录,用户被限制在该目录
ForceCommand internal-sftp -d %u/home #指定sftp会话的工作目录
AllowTcpForwarding no #禁用TCP转发
x11Forwarding no #禁用X11转发
如启用防火墙,则开放端口
firewall-cmd --permanent --zone=public --add-port=22/tcp
#开通sftp服务22默认端口
firewall-cmd --reload
#刷新防火墙,重新载入
重启SFTP服务
systemctl restart sshd.service
访问sftp
sftp sftpuser@10.10.10.10
or
sftp -oPort=22 sftpuser@10.10.10.10
扫描新硬盘
扫描新硬盘
vi ~/bashrc
添加以下配置:
alias scandisk="echo '- - -' > /sys/class/scsi_host/host0/scan; \
echo '- - -' > /sys/class/scsi_host/host1/scan; \
echo '- - -' > /sys/class/scsi_host/host2/scan"
MoBaXterm开启x11转发
MoBaXterm开启x11转发
yum -y install xorg-x11-xauth xorg-x11-fonts-* xorg-x11-font-utils xorg-x11-fonts-Typel
本地yum源
本地yum源
有iso镜像文件:
mkdir -p /usr/local/repo
mount -o loop xxx.iso /usr/local/repo
mv /etc/yum.repos.d/xxx.repo //etc/yum.repos.d/xxx.repo
编写新配置
vim /etc/yum.repos.d/local.repo
[local]
name=local repository
baseurl=file:///usr/local/repo
enabled=1
gpgcheck=0
清理旧的缓存
yum clean all
验证新的本地yum源
yum repolist
没有iso镜像文件:
创建repodate
yum -y install createrepo #使用仓库需要有repomd.xml文件,保存了仓库rpm包的索引信息
创建存储rpm包的目录
mkdir -p /usr/local/repo
createrepo /usr/local/repo #生成在/usr/local/repo目录下
准备本地rpm包
vim /etc/yum.repos.d/aliyun.repo #配置阿里云yum源
[Aliyun] name=Aliyun
baseurl=https://mirrors.aliyun.com/centos/7/os/x86_64/
gpgcheck=0
enabled=1
yum repolist #查看各镜像的repo id
reposync -r "$repoid" -p /usr/local/repo #同步阿里云镜像
yum install --downloadonly --downloaddir=/yum mysql-community-server #可以只下载需要的rpm包
配置本地yum源
vim /etc/yum.repos.d/local.repo
[local]
name=local repository
baseurl=file:///usr/local/repo
enabled=1
gpgcheck=0
清理旧的缓存
yum clean all
验证新的本地yum源
yum repolist
更改windows默认共享ip
更改windows默认共享ip
@echo off
set /p q=Please input ShareIP [110.10.10.1]:
if "%q%"=="" set q=110.10.10.1
reg add "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters" /v ScopeAddress /d %q% /f
reg add "HKLM\SYSTEM\CurrentControlSet\Services\SharedAccess\Parameters" /v ScopeAddressBackup /d %q% /f
timeout /t 10 /nobreak
SSh免密登录
SSh免密登录
服务器:A,B,C
ssh-keygen -t rsa #A
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.10.20 #B
ssh-copy-id -i ~/.ssh/id_rsa.pub root@10.10.10.30 #C
重启SSH
systemctl restart sshd
系统检查
系统检查
#!/usr/bin/env bash
##############################################################################
# console color
C_RESET="$(tput sgr0)"
C_BLACK="\033[1;30m"
C_RED="\033[1;31m"
C_GREEN="\033[1;32m"
C_YELLOW="\033[1;33m"
C_BLUE="\033[1;34m"
C_PURPLE="\033[1;35m"
C_CYAN="\033[1;36m"
C_WHITE="\033[1;37m"
##############################################################################
printf "${C_PURPLE}"
cat << EOF
###################################################################################
# 系统信息检查脚本
###################################################################################
EOF
printf "${C_RESET}"
[[ $(id -u) -gt 0 ]] && echo "请用root用户执行此脚本!" && exit 1
sysversion=$(rpm -q centos-release | cut -d- -f3)
double_line="==============================================================="
line="----------------------------------------------"
# 打印头部信息
printHeadInfo() {
cat << EOF
+---------------------------------------------------------------------------------+
| 欢迎使用 【系统信息检查脚本】 |
+---------------------------------------------------------------------------------+
EOF
}
# 打印尾部信息
printFootInfo() {
cat << EOF
+---------------------------------------------------------------------------------+
| 脚本执行结束,感谢使用! |
+---------------------------------------------------------------------------------+
EOF
}
options=( "获取系统信息" "获取服务信息" "获取CPU信息" "获取系统网络信息" "获取系统内存信息" "获取系统磁盘信息" "获取CPU/内存占用TOP10" "获取系统用户信息" "输出所有信息" "退出" )
printMenu() {
printf "${C_BLUE}"
printf "主菜单:\n"
for i in "${!options[@]}"; do
index=$((i + 1))
val=$((index % 2))
printf "\t(%02d) %-30s" "${index}" "${options[$i]}"
if [[ ${val} -eq 0 ]]; then
printf "\n"
fi
done
printf "${C_BLUE}请输入需要执行的指令:\n"
printf "${C_RESET}"
}
# 获取系统信息
get_systatus_info() {
sys_os=$(uname -o)
sys_release=$(cat /etc/redhat-release 2>/dev/null || echo "未知")
sys_kernel=$(uname -r)
sys_hostname=$(hostname)
sys_selinux=$(getenforce)
sys_lang=$(echo $LANG)
sys_lastreboot=$(who -b | awk '{print $3,$4}')
sys_runtime=$(uptime | awk '{print $3,$4}' | cut -d, -f1)
sys_time=$(date)
sys_load=$(uptime | cut -d: -f5)
cat << EOF
【系统信息】
系统: ${sys_os}
发行版本: ${sys_release}
系统内核: ${sys_kernel}
主机名: ${sys_hostname}
selinux状态: ${sys_selinux}
系统语言: ${sys_lang}
系统当前时间: ${sys_time}
系统最后重启时间: ${sys_lastreboot}
系统运行时间: ${sys_runtime}
系统负载: ${sys_load}
EOF
}
# 获取CPU信息
get_cpu_info() {
Physical_CPUs=$(grep "physical id" /proc/cpuinfo | sort | uniq | wc -l)
Virt_CPUs=$(grep "processor" /proc/cpuinfo | wc -l)
CPU_Kernels=$(grep "cores" /proc/cpuinfo | uniq | awk -F ': ' '{print $2}')
CPU_Type=$(grep "model name" /proc/cpuinfo | awk -F ': ' '{print $2}' | sort | uniq)
CPU_Arch=$(uname -m)
cat << EOF
【CPU信息】
物理CPU个数: ${Physical_CPUs}
逻辑CPU个数: ${Virt_CPUs}
每CPU核心数: ${CPU_Kernels}
CPU型号: ${CPU_Type}
CPU架构: ${CPU_Arch}
EOF
}
# 获取服务信息
get_service_info() {
port_listen=$(netstat -lntup | grep -v "Active Internet")
kernel_config=$(sysctl -p 2> /dev/null)
if [[ ${sysversion} -gt 6 ]]; then
service_config=$(systemctl list-unit-files --type=service --state=enabled | grep "enabled")
run_service=$(systemctl list-units --type=service --state=running | grep ".service")
else
service_config=$(/sbin/chkconfig | grep -E ":on|:启用" | column -t)
run_service=$(/sbin/service --status-all | grep -E "running")
fi
cat << EOF
【服务信息】
${service_config}
${line}
运行的服务:
${run_service}
${line}
监听端口:
${port_listen}
${line}
内核参考配置:
${kernel_config}
EOF
}
# 获取系统内存信息
get_mem_info() {
check_mem=$(free -m)
MemTotal=$(grep MemTotal /proc/meminfo | awk '{print $2}') #KB
MemFree=$(grep MemFree /proc/meminfo | awk '{print $2}') #KB
let MemUsed=MemTotal-MemFree
MemPercent=$(awk "BEGIN {if($MemTotal==0){printf 100}else{printf \"%.2f\",$MemUsed*100/$MemTotal}}")
report_MemTotal="$((MemTotal/1024)) MB" #内存总容量(MB)
report_MemFree="$((MemFree/1024)) MB" #内存剩余(MB)
report_MemUsedPercent=$(free | sed -n '2p' | gawk 'x = int(( $3 / $2 ) * 100) {print x}' | sed 's/$/%/')
cat << EOF
【内存信息】
内存总容量(MB): ${report_MemTotal}
内存剩余量(MB): ${report_MemFree}
内存使用率: ${report_MemUsedPercent}
EOF
}
# 获取系统网络信息
get_net_info() {
pri_ipadd=$(ip addr | awk '/^[0-9]+: / {}; /inet.*global/ {print gensub(/(.*)\/(.*)/, "\\1", "g", $2)}')
pub_ipadd=$(curl -s ifconfig.me)
gateway=$(ip route | grep default | awk '{print $3}')
mac_info=$(ip link | egrep -v "lo" | grep link | awk '{print $2}')
dns_config=$(egrep -v "^$|^#" /etc/resolv.conf)
route_info=$(route -n)
cat << EOF
【网络信息】
系统公网地址: ${pub_ipadd}
系统私网地址: ${pri_ipadd}
网关地址: ${gateway}
MAC地址: ${mac_info}
路由信息:
${route_info}
DNS 信息:
${dns_config}
EOF
}
# 获取系统磁盘信息
get_disk_info() {
disk_info=$(fdisk -l | grep "Disk /dev" | cut -d, -f1)
disk_use=$(df -hTP | awk '$2!="tmpfs"{print}')
disk_percent=$(df -hP | awk '{print $1,$5}' | grep -v "Use%")
disk_inode=$(df -hiP | awk '$1!="tmpfs"{print}')
cat << EOF
【磁盘信息】
${disk_info}
磁盘使用: ${disk_use}
磁盘使用百分比: ${disk_percent}
inode信息: ${disk_inode}
EOF
}
# 获取系统用户信息
get_sys_user() {
login_user=$(awk -F: '{if ($NF=="/bin/bash") print $0}' /etc/passwd)
ssh_config=$(egrep -v "^#|^$" /etc/ssh/sshd_config)
sudo_config=$(egrep -v "^#|^$" /etc/sudoers | grep -v "^Defaults")
host_config=$(egrep -v "^#|^$" /etc/hosts)
crond_config=$(for cronuser in /var/spool/cron/*; do
ls ${cronuser} 2> /dev/null | cut -d/ -f5
egrep -v "^$|^#" ${cronuser} 2> /dev/null
echo ""
done)
cat << EOF
【用户信息】
系统登录用户:
${login_user}
${line}
ssh 配置信息:
${ssh_config}
${line}
sudo 配置用户:
${sudo_config}
${line}
定时任务配置:
${crond_config}
${line}
hosts 信息:
${host_config}
EOF
}
# 获取CPU/内存占用TOP10
get_process_top_info() {
top_title=$(top -b n1 | head -7 | tail -1)
cpu_top10=$(top -b n1 | head -17 | tail -11)
mem_top10=$(top -b n1 | head -17 | tail -10 | sort -k10 -r)
cat << EOF
【TOP10】
CPU占用TOP10:
${cpu_top10}
内存占用TOP10:
${top_title}
${mem_top10}
EOF
}
get_all_info() {
get_systatus_info
echo ${double_line}
get_service_info
echo ${double_line}
get_cpu_info
echo ${double_line}
get_net_info
echo ${double_line}
get_mem_info
echo ${double_line}
get_disk_info
echo ${double_line}
get_process_top_info
echo ${double_line}
get_sys_user
}
main() {
while true; do
printMenu
read -r option
if [[ ! ${option} =~ ^[0-9]+$ ]] || [[ ${option} -lt 1 ]] || [[ ${option} -gt ${#options[@]} ]]; then
echo "输入无效,请输入有效的选项编号!"
continue
fi
local index=$((option - 1))
case ${options[${index}]} in
"获取系统信息") get_systatus_info ;;
"获取服务信息") get_service_info ;;
"获取CPU信息") get_cpu_info ;;
"获取系统网络信息") get_net_info ;;
"获取系统内存信息") get_mem_info ;;
"获取系统磁盘信息") get_disk_info ;;
"获取CPU/内存占用TOP10") get_process_top_info ;;
"获取系统用户信息") get_sys_user ;;
"输出所有信息")
get_all_info > sys.log
printf "${C_GREEN}信息已经输出到 sys.log 中。${C_RESET}\n\n"
;;
"退出") exit ;;
*) echo "抱歉,不支持此选项" ;;
esac
done
}
######################################## MAIN ########################################
printHeadInfo
main
printFootInfo
printf "${C_RESET}"
Top
Top
选项参数: M 根据内存使用大小排序 P 根据cpu使用大小排序 T 根据进程使用时间排序 W 保存top内容 路径:~/.toprc l 显示平均负载 t 显示进程和cpu信息 m 显示内存信息 c 显示命令的可执行文件路径 k 杀死某个进程 d 指定刷新频率
centos7忘记密码
centos7忘记密码
开机,出现引导界面,选择内核时,按e进入内核编辑界面 在第16行(linux16开头),行尾加上 rd.break。 按ctrl+x运行修改后的内核进入单用户程序 执行以下操作: mount -o remount,rw /sysroot #将/sysroot目录重新挂载为可读写模式 chroot /sysroot #切换根目录到/sysroot passwd #修改root用户的密码 touch /.autorelabel #创建一个空文件/.autorelabel,用于通知SELinux在下次启动时自动重新标记文件系统的安全上下文 exit reboot 输入新密码进入系统
PXE
PXE
前置条件: pex服务器: systemctl stop firewalld #关闭防火墙 systemctl disable firewalld #关闭开机启动 setenforce 0 #关闭selinux sed -i '7s/enforcing/disabled/' /etc/sysconfig/selinux #永久关闭selinux
安装需要的软件
yum -y install dhcp xinetd tftp tftp-server
覆盖dhcp模板
cp /usr/share/doc/dhcp-4.2.5/dhcpd.conf.example /etc/dhcp/dhcpd.conf
修改dhcp配置文件
vi /etc/dhcp/dhcp.conf
第47-54行:
subnet 10.10.10.0 netmask 255.255.255.0 { #子网网段 掩码
range 10.10.10.40 10.10.10.40; #可分配地址范围(地址池)
option domain-name-servers 8.8.8.8; #DNS服务器
option domain-name "internal.example.org"; #DNS服务器的域名
option routers 10.10.10.1; #网关
option broadcast-address 10.10.10.254; #广播地址
default-lease-time 600;
max-lease-time 7200;
}
第5行添加全局配置:
next-server 10.10.10.20; #pxe服务器ip
filename "pxelinux.0"; #找这个文件
重启dhcp服务
systemctl restart dhcpd
systemctl enable dhcpd
修改tftp配置文件
vi /etc/xinetd.d/tftp disable = no
重启xinet服务
systemctl restart xinetd
systemctl enable xinetd
获取pxelinux.0文件并拷贝到tftp根目录
yum -y install syslinux
cp /usr/share/syslinux/pxelinux.0 /var/lib/tftpboot/
挂载光盘并拷贝文件
mkdir /var/lib/tftpboot/pxelinux.cfg
mount 替换.iso /media
cp /media/isolinux/isolinux.cfg /var/lib/tftpboot/pxelinux.cfg/default
cp /media/isolinux/* /var/lib/tftpboot/
搭建网络安装源
yum -y install httpd
systemctl start httpd
systemctl enable httpd
重新挂载镜像
mkdir /var/www/html/pub
umount 替换.iso
mount 替换.iso /var/www/html/pub/
制作yum源
vi /etc/yum.repo.d/pxe.repo
[development]
name=pxe
baseurl=http://10.10.10.20/pub
enabled=1
gpgcheck=0
制作安装脚本
yum -y install system-config-kickstart
system-config-kickstart #启动
存放脚本
kdir /var/www/html/ks
[root@localhost ~]# cp ks123.cfg /var/www/html/ks/
swap空间扩容
swap空间扩容
创建一个256M大小的文件
dd if=/dev/zero of=/swapfile bs=1024 count=262144
转换成swap文件
mkswap /swapfile
启用swap
swapon /swapfile
/etc/fstab文件中挂载swap
/swapfile swap swap default 0 0
取消扩容swap
swapoff /swapfile rm -rf /swapfile
mdadm磁盘阵列
mdadm磁盘阵列
创建JBOD设备
mdadm --create /dev/md0 --assume-clean --level=0 --raid-devices=4 /dev/sdb /dev/sdc /dev/sdd /dev/sde
--create 创建JBOD设备 --assume-clean 表示空磁盘,跳过数据清除过程 --level 冗余级别 --raid-devices 磁盘数量
格式化
mkfs.xfs /dev/md0
扩容
mdadm -G /dev/md0 -a /dev/sdf
保存配置信息
echo DEVICE /dev/sd{b,c,d,e} >> /etc/mdadm/mdadm.conf
mdadm -Ds >>/etc/mdadm/mdadm.conf
ZFS
ZFS
前言: 服务器raid卡中配置数据盘为jbod模式 建池时添加磁盘by-id ,在/dev/disk/by-id/下,纯软件项目可以by-path 物理扇区4k,设置zpool属性ashift=12。物理扇区512bit设置9 zfs会自动挂载,无需手动挂载
创建raidz2存储池
冗余级别为raid0时,不能指定冗余级别
例:zpool create -f -o ashift=9 -m /infokist infokist \
zpool create -f -o ashift=9 -m /infokist infokist raidz2\
md-uuid-985df642:f5a3d148:c387b742:2278784c
md-uuid-986df642:f5a3d148:c387b742:2278785c
扩容
zpool add -f infokist raidz2 \
md-uuid-987df642:f5a3d148:c387b742:2278786c
添加热备盘
zpool add infokist spare md-uuid-988df642:f5a3d148:c387b742:2278787c
zpool set autoreplace=on infokist #自动替换故障盘
池管理命令
查看zfs状态:zpool status -x ,zpool status infokist 查看zfs存储池:zpool list 删除存储池:zpool destroy infokist 查看zpool使用明细:zfs list
zfs性能分析
arcstat -f time,hit%,dh%,ph%,mh%,mhit,read,mmis,arcsz 1命令 -f 指定要显示的统计信息及显示顺序 time 显示报告的时间戳 hit% ARC缓存命中的百分比 dh% 来自脏块数据中ARC的命中百分比 ph% 来自预取块的数据中ARC命中百分比 mh% 来自元数据块的ARC命中百分比 read ARC执行的读取次数 mmis 元数据未命中的数量,必须从磁盘获取元数据的频率 arcsz ARC的大小 1 更新时间间隔(秒)
zpool iostat -v -q 1
❤️ 转载文章请注明出处,谢谢!❤️