yoobak

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

Linux计划,定制化服务,awk使用

Linux计划任务

要执行计划任务要确定crond.service有没开启。PS:一般情况下都要安装有crond。

[root@rocky ~]# systemctl status crond.servicecrond.service - Command Scheduler
   Loaded: loaded (/usr/lib/systemd/system/crond.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2023-07-10 17:14:22 CST; 1s ago
 Main PID: 21608 (crond)
    Tasks: 1 (limit: 11045)
   Memory: 1.0M
   CGroup: /system.slice/crond.service
           └─21608 /usr/sbin/crond -n

Jul 10 17:14:22 rocky.localdomain systemd[1]: Started Command Scheduler.
Jul 10 17:14:22 rocky.localdomain crond[21608]: (CRON) STARTUP (1.5.2)
Jul 10 17:14:22 rocky.localdomain crond[21608]: (CRON) INFO (RANDOM_DELAY will be scaled with factor 9% if used.)
Jul 10 17:14:22 rocky.localdomain crond[21608]: (CRON) INFO (running with inotify support)
Jul 10 17:14:22 rocky.localdomain crond[21608]: (CRON) INFO (@reboot jobs will be run at computer's startup.)

周三3点的每分钟执行date

11月每天8,10,12点 执行脚本/app/bin/test.sh

周一至周五的1点30分备份/etc,到/backup/etcbak-yyyy-mm-dd-HH.tar.xz,其中日期是前一天的

每2小时把/proc/meminfo 的S和M开头的内容截取下来并存到/tmp/meminfo.txt文件中

每10分钟执行脚本

每天的每一小时查看本机的IP

每分钟查看内存使用状态

每天的23点把主机的IP的连接个数存放到/data/yyyy-mm-dd

每2个月的周一执行命令

周五每2小时执行top

[root@rocky ~]# crontab -l                                                                                 
* 3 * * 3  date 
0 8-12/2 * 11 *   bash /app/bin/test.sh
30 1 * * 1-5 cp -r /etc /backup/etcbak-`date -d '-1day' +%F-%H`.tar.xz
0 */2 * * *  awk -F':' '/^S|^M/{print $1,$2}'    /proc/meminfo > /tmp/meminfo.txt
*/10 * * * * bash  /data/scripts2/check.sh  
0 */1 * * *  ip a 
* * * * *  free -h 
0 23 */1 * *  awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}' /var/log/httpd/access_log-20230715 >> /data/`date +%F`
* * * */2 1 yum repolist
* */2 * * 5   top

进程

进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。简单来说,当程序被执行时就是进程。

可以通过pstree -p来查看(XXX)为进程。

[root@rocky ~]# pstree -p
systemd(1)─┬─ModemManager(1181)─┬─{ModemManager}(1208)
           │                    └─{ModemManager}(1226)
           ├─NetworkManager(1102)─┬─{NetworkManager}(1112)
           │                      └─{NetworkManager}(1122)
           ├─VGAuthService(1108)
           ├─accounts-daemon(1385)─┬─{accounts-daemon}(1396)
           │                       └─{accounts-daemon}(1402)
           ├─alsactl(1092)
           ├─atd(1416)
           ├─auditd(1068)─┬─sedispatch(1070)
           │              ├─{auditd}(1069)
           │              └─{auditd}(1071)
           ├─automount(1393)─┬─{automount}(1417)
           │                 ├─{automount}(1418)
           │                 ├─{automount}(1519)
           │                 └─{automount}(1538)
           ├─avahi-daemon(1098)───avahi-daemon(1134)
           ├─chronyd(1117)
           ├─colord(2412)─┬─{colord}(2427)
           │              └─{colord}(2434)
           ├─crond(21608)
           ├─cupsd(1383)
           ├─dbus-daemon(1101)
           ├─dmeventd(948)─┬─{dmeventd}(968)
           │               └─{dmeventd}(969)

进程的状态

](D:\google下载\进程.png)

睡眠态:分为两种,可中断:interruptalble,不可中断:uninterruptable

停止态:stopped,暂停于内存,但不会被调度,除非手动启动

僵尸态:zombie,结束进程,父进程结束前,子进程不关闭,杀死父进程可以关闭死态的子进程,或者恢复父进程。

内存

内存(Memory)是计算机的重要部件,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,以及与硬盘等外部存储器交换的数据。它是外存CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。只要计算机开始运行,操作系统就会把需要运算的数据从内存调到CPU中进行运算,当运算完成,CPU将结果传送出来。

通过free 可以查看内存的使用状态。

[root@rocky /]# free -h
              total        used        free      shared  buff/cache   available
Mem:          1.7Gi       1.0Gi       153Mi        11Mi       613Mi       588Mi
Swap:         2.0Gi        25Mi       2.0Gi

linux启动流程

POST:加电自检,是BIOS主要功能之一。对主板,CPU,内存,串并行接口,键盘等硬件情况的检测。

GRUB:引导加载器。

启动阶段:

  • 1.0---MBR的前446个字节。
  • 1.5---MBR之后的扇区让阶段1.0识别阶段2所在的分区上的文件系统
  • 2.0---分区文件/boot/grub2

加载内核:加载硬件驱动程序,以只读方式挂载文件系统,运行用户空间的第一应用程序/sbin/init。

运行级别:7个级别(0-6),一般情况使用3或者5作为默认级别

0:关机
1:单用户模式
2:多用户模式
3:多用户模式,命令行界面。
4:预留级别
5:多用户模式,图形界面
6:重启

在Linux中,选择启动级别对应的执行脚本通常存储在/etc/rc.d/目录或/etc/init.d/目录中。在/etc/rc.d/或/etc/init.d/目录中,你可以找到以特定命名约定命名的脚本文件,如Sxxname或Kxxname,其中xx代表脚本的优先级。这些脚本用于启动(S)或停止(K)特定服务或功能。

[root@centos7 rc0.d]# cd /etc/rc.d/
[root@centos7 rc.d]# ls
init.d  rc0.d  rc1.d  rc2.d  rc3.d  rc4.d  rc5.d  rc6.d  rc.local
[root@centos7 rc.d]# cd rc5.d/
[root@centos7 rc5.d]# ls
K50netconsole  S10network

定制化systemd服务

功能:定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中。

首先可以参考sshd服务的格式

[root@rocky scripts2]# systemctl cat sshd
# /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.target
Wants=sshd-keygen.target

[Service]
Type=notify
EnvironmentFile=-/etc/crypto-policies/back-ends/opensshserver.config
EnvironmentFile=-/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS $CRYPTO_POLICY
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

按照格式写入基本的信息

[root@rocky scripts2]# cat  /lib/systemd/system/rsync.service 
[Unit]
Description=check txt
[Service]
TimeoutStartSec=0
ExecStart=/data/scripts2/sysnc.sh
ExecStop=/bin/kill /data/scripts2/sysnc.sh
[Install]
WantedBy=multi-user.target

编写脚本:当tmp的文件个数发生变化时,就保存在/home/tmo.bak目录下。

[root@rocky scripts2]# cat sysnc.sh 
#!/bin/bash
#mkdir /home/tmp.bak
now=$(cd /tmp;ls | wc -l)
count=$(cp -rf  /tmp/* /home/tmp.bak && cd /home/tmp.bak && ls| wc -l)  
echo count=$count
if  [ $now -ne $count ];then
       echo "this is tmp may be have change at `date +%F-%T`"	
	cp /tmp /var/log/`date +%F-%T`.tmp
fi
tail -f /etc/hosts

配置完成后,重新加载服务,设置开机自启,现在启用。

[root@rocky scripts2]# systemctl daemon-reload 
[root@rocky scripts2]# systemctl enable --now rsync
[root@rocky scripts2]# systemctl status  rsync
● rsync.service - check txt
   Loaded: loaded (/usr/lib/systemd/system/rsync.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2023-07-17 13:10:01 CST; 1h 18min ago
 Main PID: 36441 (sysnc.sh)
    Tasks: 2 (limit: 11045)
   Memory: 596.0K
   CGroup: /system.slice/rsync.service
           ├─36441 /bin/bash /data/scripts2/sysnc.sh
           └─36449 tail -f /etc/hosts

Jul 17 13:10:01 rocky.localdomain systemd[1]: Started check txt.
Jul 17 13:10:01 rocky.localdomain sysnc.sh[36441]: count=18
Jul 17 13:10:01 rocky.localdomain sysnc.sh[36449]: 127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
Jul 17 13:10:01 rocky.localdomain sysnc.sh[36449]: ::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

Linux内核的编译安装

首先在主机可以正常连外网情况下

进行wget下载,tar解压。

[root@rocky ~]# wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.4.3.tar.gz  
[root@rocky ~]# tar xf linux-6.4.3.tar.gz

编译前,要安装

[root@rocky ~]# yum install gcc gcc-c++ make ncurses-devel openssl-devel flex bison  elfutils-libelf-devel bc  -y

进入目录执行 make menuconfig 进行编译,这里显然已经出现问题了(忘记装gcc-c++)😤

出现这个界面一般是先排查gcc的版本需要6及以上。然后在排查工具有没有装全。

进入界面,选择文件系统。

Overlayfs选项是跟docker相关


选好功能后选中Save

会在目录下生成 .config,此文件为隐藏文件需要用ls -a 才能看到该文件。接下来make编译,发现找不到此文件。

用yum provides查一下所需要的包

安装openssl-devel

装完在编译一次,发现又有包找不到

相同的办法用yum provides

再次输入make,发现这次报错没有显示缺少了什么文件。

打开.config把CONFIG_SYSTEM_TRUSTED_KEYS="certs/rocky.pem"里面的内容去掉

继续编译完成。

make modules_install

如果出现报错:将CONFIG_DEBUG_BTF=y修改成n

继续

最后执行 make install 就可以了,然后重启就能选择了。

awk使用场景

  • 查看磁盘的使用情况
[root@rocky ~]# df
Filesystem                  1K-blocks     Used Available Use% Mounted on
devtmpfs                       883720        0    883720   0% /dev
tmpfs                          914088        0    914088   0% /dev/shm
tmpfs                          914088    42560    871528   5% /run
tmpfs                          914088        0    914088   0% /sys/fs/cgroup
/dev/mapper/rl_rocky-root    83850240 42655012  41195228  51% /
/dev/sda1                     1038336   265436    772900  26% /boot
/dev/sdb3                   260966916  1852552 259114364   1% /mnt/bb
/dev/sdb4                   104806400   763756 104042644   1% /mnt/cc
/dev/sdb2                    52403200   398400  52004800   1% /mnt/aa
/dev/mapper/testvg0-lvmysql   8154552       36   7735484   1% /mnt/mysql
/dev/mapper/group-qa           782817       49    745069   1% /mnt/qa
/dev/mapper/rl_rocky-home   133071376   972300 132099076   1% /home
tmpfs                          182816       36    182780   1% /run/user/0
/dev/sr0                     11844638 11844638         0 100% /run/media/root/Rocky-8-7-x86_64-dvd

[root@rocky ~]# df | awk -F' +|%' '/^\/dev\/sd/{print $1,$5}'
/dev/sda1 26
/dev/sdb3 1
/dev/sdb4 1
/dev/sdb2 1
  • 提取IP地址
[root@rocky scripts2]# ifconfig eth0 | awk '/netmask/{print $2}'
192.168.3.130
  • 显示主机连接次数
[root@rocky httpd]# awk '{ip[$1]++}END{for(i in ip){print i,ip[i]}}'  /var/log/httpd/access_log-20230701  
192.168.3.130 8
192.168.3.140 146
192.168.3.1 23
192.168.3.136 29
  • 统计文件系统挂载类型个数
[root@rocky httpd]# awk -F' +' '/^UUID/{fs[$3]++}END{for(i in fs){print i,fs[i]}}' /etc/fstab 
ext3 1
ext4 1
xfs 4
  • 提取内存关键信息
[root@rocky httpd]# free -h|awk '/^Mem/{printf"已使用内存:%s\n当前空闲内存:%s\n内存使用率:%.2f%\n",$4,$3,$3/$2*100}'
已使用内存:103Mi
当前空闲内存:734Mi
内存使用率:43176.47%

posted on   TUOP  阅读(44)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示