- 自定义写出10个定时任务的示例:
比如每周三凌晨三点执行data命令
要求尽量的覆盖各种场景
[root@oracle11g ~]# crontab -l
# 每周三凌晨三点执行date命令
00 03 * * 3 date
# 每月3号凌晨3点,定时清理超过两周的日志文件
00 03 3 * * find /var/log/nginx/ -name "*.log" -type f -mtime +14 -exec rm -rf {} \;
# 每年的1月2号凌晨1点,定时重启nginx服务
00 02 2 1 * systemctl restart nginx
# 每隔一小时在每周2、3、4执行命令
00 */1 * * * ls
# 每分钟执行一次命令
*/1 * * * * echo "hello" >>/tmp/test.log
# 每天 5:00和17:00执行任务
00 5,17 * * * df -TH >> /tmp/df.log 2>&1
# 每四个小时执行一个任务
0 */4 * * * echo "hello" >>/tmp/test2.log
# 每隔5分钟执行一个命令
*/5 * * * * your_command
# 在每天的工作时间(上午9点到下午5点)每隔30分钟执行一个命令
*/30 9-17 * * * your_command
# 在每周一上午10点执行一个命令
0 10 * * 1 your_command
- 图文并茂说明Linux进程和内存概念
进程可以简单理解为一个二进制程序进入内核,而后变成了执行程序:进程。因此,进程是一定占据部分内存的,但是进程对内存的管理方式不一,但大致分为静态和动态的分配和统一回收。
简单理解:进程=线程+(代码+数据)= 协程+(寄存器+栈),进程具体组成部分如下图所示:
线程组成部分,如下图所示:
内存分配
简单概括,进程中包含内存,而进程中的内存分配可拆分如下所示:
栈:存放程序临时创建的局部变量
堆:存放进程运行中被动态分配的内存段
BSS:BSS段包含了程序中未初始化的全局变量,在内存中 bss段全部置零
数据段:存放可执行文件中已初始化全局变量
代码段:存放可执行文件的操作指令
-
图文并茂说明Linux启动流程
CentOS7以后启动流程
(1) UEFi或BIOS初始化,运行POST开机自检
(2) 选择启动设备
(3) 引导装载程序, centos7是grub2,加载装载程序的配置文件:
/etc/grub.d/
/etc/default/grub
/boot/grub2/grub.cfg
(4) 加载initramfs驱动模块
(5) 加载内核选项
(6)内核初始化,centos7使用systemd代替init
(7) 执行initrd.target所有单元,包括挂载/etc/fstab
(8) 从initramfs根文件系统切换到磁盘根目录
(9) systemd执行默认target配置,配置文件/etc/systemd/system/default.target
(10)systemd执行sysinit.target初始化系统及basic.target准备操作系统
(11) systemd启动multi-user.target下的本机与服务器服务
(12) systemd执行multi-user.target下的/etc/rc.d/rc.local
(13) Systemd执行multi-user.target下的getty.target及登录服务
(14)systemd执行graphical需要的服务
- 自定义一个systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。
检查脚本
#!/bin/bash
remote_ip="192.168.244.14"
log_file="/opt/log/tmp_file.log"
date_time=$(date +%Y-%m-%d %H:%M)
while true; do
# 登录服务器并执行脚本获取文件数量
file_count=$(ssh root@${remote_ip} "ls /tmp/ | wc -l")
echo -eE "$date_time file_count: $file_count">>$log_file
sleep 300
以下为service的内容
[Unit]
Description= check /tmp file
[Service]
Type=simple
ExecStart=/bin/bash -c "bash /opt/check_tmp_file.sh"
[Install]
WantedBy=multi-user.target
- 写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 ➡️ -m67-magedu ➡️ savemake -j 8 #多少核就写多少,此处很慢
make modules_install
make installreboot
- 总结5个自我觉得比较有用的awk的使用场景,比如在什么情况下用awk处理文本效率最高,发散题,至少写1个。
获取内存信息、IP地址信息、磁盘分区信息
# 内存
[root@oracle11g ~]# free -h|awk '/^Mem/{printf"已使用内存:%s\n当前空闲内存:%s\n内存使用率:%.2f%\n",$4,$3,$3/$2*100}'
已使用内存:867M
当前空闲内存:108M
内存使用率:6000.00%
# IP
[root@oracle11g ~]# ip address show ens33 |awk -F" +|/" '/inet/{printf"IP地址:%s\n",$3}'
IP地址:192.168.244.141
IP地址:fe80::55ba:6e37:ea8d:c1e7
# 磁盘分区
[root@oracle11g ~]# df -h|awk -v i=0 -F" +|/" '/\/dev\/(nvm|sda)/{i++ ;printf"%s.分区名称:%s\t大小:%s\t已使用:%s\t使用率:%s\n",i,$3,$4,$5,$7}'
1.分区名称:sda1 大小:1014M 已使用:146M 使用率:15%