1,定时计划任务
在 Linux 中,您可以使用 crontab 工具来实现计划任务。Crontab 允许您按照指定的时间表自动运行脚本、命令或者程序。
使用croutab -e 来编辑定时计划任务,查看一下程序包看看有哪些文件
/etc/cron.d 这个是它的配置文件,但是每个用户都有自己独立的计划任务放在/var/spool/cron下面
执行前先去看下程序是不是正常运行,systemctl status crond,这里是正常的
然后我们就可以编辑创建自己想创建的计划任务了crontab -e,例子如下:默认这个编辑使用的是none。创建完:wq保存就可以了
后面跟上脚本跟上命令都是可以的。可以执行的都行
- 第一个星号(分钟字段):匹配任意分钟。
- 第二个星号(小时字段):匹配任意小时。
- 第三个星号(日期字段):匹配任意日期。
- 第四个星号(月份字段):匹配任意月份。
- 第五个星号(星期字段):匹配任意星期
- 如果在*/加上数字 ,就是对应每多少 (分钟,小时,日 ,月,和星期)。
2.linux进程,内存介绍
1、进程相关概念
进程:正在运行中的程序
内核功用:进程管理、文件系统、网络功能、内存管理、驱动程序、安全功能等
Process:运行中的程序的一个副本,是被载入内存的一个指令集合
进程 ID(Process ID,PID)号码被用来标记各个进程
通常从执行进程的用户来继承,存在生命周期
task struct 任务结构表:Linux 内核存储进程信息的数据结构格式
task list 任务列表:多个任务的 task struct 组成的链表
进程创建:
都由其父进程创建,父好关系,CoW(写时复制,不发生改变时父子都指向同一文件;发生改变时,则复制)
init:第一个进程(centos6:init,centos7:systemd)
守护进程:随着计算机的开启、关闭而随之开启、关闭。
2、进程,线程和协程:
注:一个进程里至少有一个线程;线程之间由操作系统进行调度,包括进程中使用的资源也由操作系统进行调度;协程相当于线程中的语句块,由线程控制。
3、Page Frame:页框,用存储页面数据,存储 Page,每个进程要使用的分配空间
虚拟内存(线性内存):进程运行的时候以为自己拥有了全部的内存空间
物理地址空间和线性地址空间:
MMU:负责转换线性和物理地址(虚拟内存和物理内存)
TLB:翻译后备缓冲器,用于保存虚拟地址和物理地址映射关系的缓存
LRU:近期最少使用算法,释放内存
4、用户空间和内核空间:
5、进程之间基本状态和转换:
创建状态:进程在创建时需要申请一个空白 PCB(进程控制块),向其中填写控制和管理进程的信息,完成资源分配。如果创建工作无法完成,比如资源无法满足,就无法被调度运行,把此时进程所处状态称为创建状态。
就绪状态:进程已准备好,已分配到所需资源,只要分配到 CPU 就能够立即运行。
执行状态:进程处于就绪状态被调度后,进程进入执行状态。
阻塞状态:正在执行的进程由于某些事件(I/O 请求,申请缓存区失败)而暂时无法运行,进程受到阻塞,在满足请求时进入就绪状态等待系统调用。
终止状态:进程结束,或出现错误,或被系统终止,进入终止状态,无法再执行。
状态之间转换六种情况:
运行 → 就绪:1,主要是进程占用 CPU 的时间过长,而系统分配给该进程占用 CPU 的时间是有限的;2,在采用抢先式优先级调度算法的系统中,当有更高优先级的进程要运行时,该进程就被迫让出 CPU,该进程便由执行状态转变为就绪状态。
就绪 → 运行:运行的进程的时间片用完,调度就转到就绪队列中选择合适的进程分配 CPU。
运行 → 阻塞:正在执行的进程因发生某等待事件而无法执行,则进程由执行状态变为阻塞状态如发生了 I/O 请求。
阻塞 → 就绪:进程所等待的事件已经发生,就进入就绪队列。
以下两种状态是不可能发生的:
阻塞 → 运行:即使给阻塞进程分配 CPU,也无法执行,操作系统在进行调度时,不会从阻塞队列进行挑选,而是从就绪队列中选取。
就绪 → 阻塞:就绪态根本就没有执行,谈不上进入阻塞态。
6、IPC 进程间通信:
同一主机:
pipe 管道,一个写入管道文件,一个读(单向)
socket 套接字文件,进程间交换数据(双工工作方式)
signal 信号
shm shared memory,共享内存
semaphore 信号量,一种计数器,分配资源
不同主机:
socket ip 和端口号
RPC 远程过程调用
MQ 消息队列,如:Kafka , RabbitMQ,ActiveMQ
7、进程优先级
实时进程(realtime),基于 FIFO 先进先出或 RR 轮询
非实时进程:nice 按时间片分配进程
取 139 个队列,将相同优先级的放在一个队列中,运行一个时间片后从运行队列转至过期队列。轮回运行队列和过期队列互调,再运行。
进程优先级:
系统优先级:数字越小,优先级越高
0-139:各有 140 个运行队列和过期队列
实时优先级:99-0 值最大优先级最高
nice 值:-20 到 19,对应系统优先级 100-139
Big 0:时间复杂度,用时和规模的关系
0(1),O(logn),O(n)线性,O(n^2)抛物线,O(2^n)
8、进程状态:
Linux 内核:抢占式多任务,按时间片分配任务
进程类型:
守护进程:daemon,在系统引|导过程中启动的进程,和终端无关进程
前台进程:跟终端相关,通过终端启动的进程,用户执行命令等
注意:两者可相互转化
进程状态:
运行态:running
就绪态:ready
睡眠态:
可中断:interruptable
不可中断:uninterruptable
停止态:stopped,暂停于内存,但不会被调度,除非手动启动
僵死态:zombie,结束进程,父进程结束前,子进程不关闭
9、进程工具
9.1 系统管理工具:
进程的分类:
CPU-Bound:CPU 密集型,非交互
编译安装、大量计算等
IO-Bound:IO 密集型,交互
拷贝大文件等 DMA:直接内存访问
Linux 系统状态的查看及管理工具:
pstree,ps,pidof,pgrep,top,htop,glance,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohup
Linux 系统各进程的相关信息均保存在 /proc/PID 目录下的各文件中
top 详解
top:有许多内置命令 排序: P:以占据的 CPU 百分比,%CPU M:占据内存百分比,%MEM T:累积占据 CPU 时长,TIME+ 首部信息显示: uptime 信息: |命令 tasks 及 cpu 信息: t 命令 cpu 分别显示: 1 (数字) memory 信息: m 命令 退出命令: q 修改刷新时间间隔: s 终止指定进程: k 保存文件: W 栏位信息简介 us:用户空间 sy:内核空间 ni:调整 nice 时间 id:空闲 wa:等待 IO 时间 hi:硬中断 si:软中断(模式切换) st:虚拟机偷走的时间 选项: -d # 指定刷新时间间隔,默认为 3 秒 -b 全部显示所有进程 -n # 刷新多少次后退出 -H 线程模式,示例:top -H -p `pidof mysqld
3,linux启动流程
-
加电和引导加载程序(Bootloader):
- 当计算机加电时,引导加载程序(如GRUB、LILO等)会加载到计算机的内存中。
- 引导加载程序会在预定义的位置(通常是硬盘的主引导记录)查找操作系统的启动程序。
-
内核初始化:
- 引导加载程序将控制权转交给内核,启动内核初始化阶段。
- 内核加载并初始化必要的驱动程序、文件系统和其他核心模块。
- 内核进行硬件检测和初始化,设置系统参数,并加载用户空间的初始进程。
-
用户空间初始化:
- 内核启动了一个叫做init的用户空间进程,它是系统初始化的第一个进程。
- init进程读取系统的初始化配置文件(如/etc/inittab)并启动其他系统初始化任务。
- 在现代Linux发行版中,init进程通常是systemd,它负责用户空间的初始化和管理系统服务。
-
系统服务启动:
- init或systemd根据配置文件启动各种系统服务,如网络服务、日志服务、时间同步服务等。
- 系统服务的启动顺序可能在配置文件中定义,以满足服务之间的依赖关系。
- 用户可以自定义启动脚本和服务,并将其添加到启动过程中。
-
登录和图形界面:
- 一旦系统服务启动完成,系统进入就绪状态,等待用户登录。
- 用户可以通过命令行登录(通过终端或远程登录)或者图形界面登录(通过图形显示管理器,如GNOME、KDE等)。
- 登录后,用户可以开始在Linux系统上执行各种操作和任务。
需要注意的是,不同的Linux发行版可能在启动流程上有细微的差异,特别是在引导加载程序和初始化进程方面。上述描述是一个通用的概述,可以作为理解Linux启动流程的基础。实际的启动流程可能因具体的发行版和配置而有所不同。
4,自定义systemd服务定时去其他服务器检查/tmp/下的文件
创建一个sh文件
编辑文件,自定义systemd服务定时去其他服务器上检查/tmp/下文件的个数,如果发现数量有变化就记录变化情况到文件中
然后将变化的文件保存到/data/log/file.log的文件中,如果文件不存在就先创建;
临时文件也需要创建
然后需要对check_tmp_files.sh加执行权限,
然后创建一个.server的服务单元文件,然后写下以下文件
ExecStart的文件路径是写自己创建的脚本的实际里路径来写
将服务单元文件复制到/etc/systemd/system/
目录中,可以看到第二个文件就是复制过来的,
重新加载systemd配置:
然后启动并启动服务
这样就可以了
5,linux内核安装
- 从Linux内核官方网站(https://www.kernel.org/)下载所需的内核源代码。
- 另外,许多Linux发行版也提供了打包的内核源代码包,也可以使用包管理器获取,由于编译安装内容比较多,单出一个来详细讲解。
6.awk的使用
- awk对文本的处理运算效率同比其他工具效率高很多(比shell的for循环高10倍以上,运算比bc计时器也高很多)
- awk默认可对多个空格进行列切分,需要再借助其他工具。
- awk可以对任意多个字符进行列分隔。
- 如果文本列很多,可通过NF定位到最后一列获取列数据。
- awk工具处理文本的命令非常丰富,几乎可以看成一套完整的编程语言。
- 缺点
- awk无法修改文本
案例场景:/etc/passwd 第一列、第三列、最后一列
案例场景:获取内存信息、IP地址信息、磁盘分区信息