日志轮转

日志轮转

默认日志生成在/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
❤️ 转载文章请注明出处,谢谢!❤️