内容纲要
1、定时任务
cron--周期性计划任务,最小执行时间为1分钟
范例:
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin #设置PATH变量后,以下所有命令可直接调用,不用再写命令位置
0 3 * * 3 date #每周三的凌晨3点执行date命令
*/6 8 1 * * ntpdate ntp1.aliyun.com #每个月的1号从8点开始每隔六分钟执行一次同步服务器时间
41,51 11 * * 1-5 date #每周一到周五的11点41开始,隔十分钟执行一次date
0 9 1 6-9 3 date #6月到9月的1号或者周三的早上9点执行date命令
31 10-23/2 * * * date #在每天的10点31开始,每隔两小时执行一次date
2、Linux进程和内存
进程:进程是运行中程序的一个副本,是被载入内存的一个指令集,是资源分配的单位
1)进程ID(PID):标记各个进程的号码
2)系统中第一个进程:init(centos6)、systemd(centos7/centos8/ubuntu)
3)存在生命周期
4)通常由执行进程的用户来继承
进程运行的状态:
- 创建
- 就绪:
- 执行
- 终止
- 阻塞
内存:
内存通常指服务器物理内存,但使用命令查看内存时会发现几部分内容。
第一行:
total:总物理内存
used:已使用的物理内存
free:空闲的物理内存
shared:共享内存
buff/cache:缓冲区/缓存
available:可使用的内存
第二行:
Swap:虚拟内存
进程使用内存会出现三种问题:
内存泄露:指程序中申请了一块内存,但是没有将内存释放,导致这块内存一直处于占用状态
内存溢出:指程序申请了100M内存,但是在这个空间内写入了100M以上的数据
内存不足:OOM,内存用完了
3、linux启动流程
4、自定义一个systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。
第一步:编写service文件:
[Unit]
Description=Week4
[Service]
Type=forking
TimeoutStartSec=0
ExecStart=/bin/sh -c "/data/sh/week4.sh"
[Install]
WantedBy=multi-user.target
第二步:编写脚本:
#/bin/bash
`rm -rf ~/.ssh/known_hosts`
`rm -rf ~/.ssh/id_rsa*`
DATE=$(date +%Y-%b-%d-%H:%M)
USER=root
IP=192.168.234.143
PORT=33322
OS=`cat /etc/redhat-release | awk -F ' ' '{print $1}'`
NUM=`ssh -p $PORT $USER@$IP 'ls /tmp | wc -l'`
FILE=`ssh -p $PORT $USER@$IP 'ls /tmp'`
if [ $OS = CentOS -o $OS = Rocky ];then
rpm -q sshpass || yum -y install sshpass
else
dpkg -i sshpass &> /dev/null || apt -y install sshpass
fi
if [ $OS = Centos -o $OS = Rocky ];then
rpm -q expect || yum -y install expect
else
dpkg -i expect &> /dev/null || apt -y install expect
fi
ssh-keygen -t rsa -N '' -f ~/.ssh/id_rsa
expect <<EOF
spawn scp -P $PORT /root/.ssh/id_rsa.pub $USER@$IP:~/.ssh/authorized_keys
expect "yes/no" {send "yes\r"}
expect "password" {send "xx..1027\r"}
expect "#" {send "exit\r"}
EOF
if [ $NUM -ne 5 ];then
echo -e "$IP下的/tmp文件数量已改变,当前数量是$NUM,时间:$DATE" >> /data/record.log
fi
第三步:写完脚本后执行:
systemctl daemon-reload #重新加载service文件
systemctl start week4.service #启动服务
第四步:因为这是个脚本,虽然加到了服务中,但是只执行一次,完成后即退出。要想一直监控需要将其添加到定时任务中
1 9 * * * systemctl start week4.service #每天早上9点01分执行一次
5、awk常用命令
1、netstat -anlp|grep 80|grep tcp|awk '{print $5}'|awk -F: '{print $1}'|sort|uniq -c|sort -nr|head -n20 #查找80端口请求数最高的前20个IP
2、ps -e -o stat,ppid,pid,cmd | grep -e ‘^[Zz]’ | awk ‘{print $2}’ | xargs kill -9
#批量删除僵尸进程
3、cat access.log |awk '{print $1}'|sort|uniq -c |sort -nr |head -10
#统计 Nginx 访问日志 访问量排在前10的ip地址
4、df | awk '{print $1,$5}' #取出分区和对应的利用率
5、ifconfig eth0 | awk '/netmask/{print $2}' #取出IP地址
hostname -I | awk -F' ' '{print $1}' #取出IP地址
6、编译安装Linux内核
#下载linux内核 https://www.kernel.org/
#将下载的内核包上传到linux
yum -y install gcc make ncurses-devel flex bison openssl-devel
elfutils-libelf-devel bc perl
tar xf linux-5.18.9.tar.xz -C /usr/local/src
cd /usr/local/src/linux-5.18.9
cp /boot/config-$(uname -r) .config
vim .config
#修改下面三行
# CONFIG_MODULE_SIG=y #注释此行
CONFIG_SYSTEM_TRUSTED_KEYS="" #修改此行
# CONFIG_DEBUG_INFO_BTF=y #更改内核版本名称make menuconfigGeneral setup Local version - append to kernel release -m68 save make -j 8
make modules_install
make install
reboot