Linux运维相关基础知识(二)

系列文章目录

Linux常用命令
linux 账号管理与权限设定
Linux运维相关基础知识


文章目录

  • 系列文章目录
  • 前言
  • 1. 自动任务执行
    • at 与 atd
    • crontab 与 crond
  • 2. SELinux
    • tty多任务管理
    • 与进程管理相关的命令
    • /proc/* 文件的意义
    • SELinux
  • 3. 守护进程
    • 早期SystemV的init管理行为中daemon的主要分类
    • systemd
    • systemctl
      • 设定一个backup服务
      • 设定周期性执行
      • 设定固定日期执行
  • 4. 系统日志
    • rsyslog.service
    • logrotate
    • systemd-journald.service
  • 5. Linux开机流程
    • Linux开机过程
      • 1. BIOS,开机自检
      • 2. Boot Loader 启动kernel
      • 3. load kernel & initramfs
      • 4. 第一个进程systemd & 通过default.target分析开机程序
    • Boot Loader: Grub2
  • 其他
  • 总结


前言


1. 自动任务执行

at 与 atd

在未来只执行一次的任务
at是用户与系统交互的工具,用于定义任务
atd是实际执行任务的后台服务

crontab 与 crond

cron daemon 是实际在后台执行由crontab定义的周期任务。似乎是每分钟执行一次检查是否有任务需要被执行?

2. SELinux

tty多任务管理

向当前任务发送 SIGINT 信号 Ctrl+C

将当前任务暂停并放入后台 Ctrl+Z SIGTSTP

将当前任务放入后台执行 ./taskname &

将任务放入后台并重定向标准输出和标准错误流

./a.out this is cmdline 1>/dev/null 2>/dev/null
./a.out this is cmdline 1>/dev/null 2>&1  &

查看后台由哪些任务 jobs

将后台任务搬到前台继续执行 fg [tasknumber]

让任务在后台继续执行 bg [tasknumber]

让程序离线运行

nohup ./a.out &
nohup ./a.out > log.txt 2>&1 &tail -f log.txt

与进程管理相关的命令

ps aux 观察系统所有的程序top [-d -b -n -p]
-d 更新秒数
-b 以批次的方式执行top,通常搭配文件重定向将批次的结果保存为文件
-n 和-b搭配,需要进行几次输出
-p 指定某些PID来进行观察pstree 查看进程树

程序之间可以通过signal进行相互控制

都可以通过程序名称kill进程
pkill -9 cmdline
killall -9 cmdline

找到PID:pidof systemd rsyslogd
端口号占用: lsof -i:8080

/proc/* 文件的意义

see more https://blog.csdn.net/surfaceyan/article/details/144926745?sharetype=blogdetail&sharerId=144926745&sharerefer=PC&sharesource=surfaceyan&spm=1011.2480.3001.8118

文件desc
cmdline命令行字符串
cpuinfo
devices系统各主要装置的代号与 mknod 有关
filesystems目前系统已经载入的文件系统
interrupts目前系统上的IRQ分配状态
ioports目前系统上各个装置所配置的I/O位址
loadavgtop和uptime显示的在此
meminfofree列出的
modules目前的Linux已经载入的内核模组列表,可以是驱动程序,lsmod的信息
mounts系统已经挂载的文件系统,就是mount的打印
swaps
partitions使用fdisk -l打印的目前所有的分区
uptime
version
bus/*USB装置等

SELinux

Security Enhanced Linux
初衷:避免资源的误用,为了安全
SELinux是一个内核模块

在这里插入图片描述
SELinux通过MAC(Mandatory Access Control 委托式存取控制)的方式来管控程序,它控制的主体是程序,而目标则是该程序能否读取档案资源。

  • 主体
    程序
  • 目标
    主体能否读写文件系统
  • 策略
    由于程序档案数量庞大,因此SELinux会依据某些服务来制定基本的存取安全性策略。这些政策内还有很详细的规则来指定不同的服务开放某些资源的存取
  • 安全性本文(security context)
    主体与目标的安全性本文必须一致才能顺利存取。文件本文有点类似文件系统的rwx,如果设定错误则服务器程序就无法存取文件系统,会出现权限不符的问题

在这里插入图片描述
security context 是存放在文件的inode内的; ls -Z可查看文件的安全本文

3. 守护进程

服务(service),达成周期性启动工作历程服务(service)的程序为crond这个daemon。

早期SystemV的init管理行为中daemon的主要分类

早期的init管理机制:

  • 所有的服务启动脚本都放在/etc/init.d/目录下

  • 服务启动的分类,init服务的分类中依据服务是否独立启动分为两类:

    • 独立启动模式:
    • super daemon:有特殊的xinetd或inetd这俩个程序负责管理(systemd 早期原型?)其它程序的启停
  • 服务启动时的依赖问题有人工手动设置

  • 执行等级分类
    init进程是kernel启动的第一个进程,然后init可根据使用者自定的执行等级runlevel来启动不同的服务。
    Linux提供了7个执行等级0,1(单人模式),2,3(纯文字模式)…5(文字加图形界面),6。各执行等级的启动脚本是通过/etc/rc.d/rc[0-6]/

  • init 0 关机 init --help see more

systemd

  • 任务并行启动
  • systemd + systemctl
  • 自动启动服务的依赖
  • 依据daemon功能分类
    systemd先定义所有的服务为一个服务单位(unit),并将该unit归类到不同的服务类型(type)去,systemd将服务单位分为众多类型 service、socket、target、path等等
  • 将多个daemons集合为一个群组
  • 向下兼容init服务脚本

systemd似乎无法完全取代init

systemd unit类型
.service一般服务类型 (service unit):主要是系统服务,包括伺服器本身所需要的本机服务以及网路服务都是!比较经常被使用到的服务大多是这种类型! 所以,这也是最常见的类型了!
.socket内部程序资料交换的插槽服务 (socket unit):主要是 IPC (Inter-process communication) 的传输讯息插槽档 (socket file) 功能。 这种类型的服务通常在监控讯息传递的插槽档,当有透过此插槽档传递讯息来说要连结服务时,就依据当时的状态将该用户的要求传送到对应的 daemon, 若 daemon 尚未啟动,则啟动该 daemon 后再传送用户的要求。使用 socket 类型的服务一般是比较不会被用到的服务,因此在开机时通常会稍微延迟啟动的时间 (因為比较没有这麼常用嘛!)。一般用於本机服务比较多,例如我们的图形界面很多的软体都是透过 socket 来进行本机程序资料交换的行為。 (这与早期的 xinetd 这个 super daemon 有部份的相似喔!)
.target执行环境类型 (target unit):其实是一群 unit 的集合,例如上面表格中谈到的 multi-user.target 其实就是一堆服务的集合~也就是说, 选择执行 multi-user.target 就是执行一堆其他 .service 或/及 .socket 之类的服务就是了!
.mount
.automount
档案系统掛载相关的服务 (automount unit / mount unit):例如来自网路的自动掛载、NFS 档案系统掛载等与档案系统相关性较高的程序管理。
.path侦测特定档案或目录类型 (path unit):某些服务需要侦测某些特定的目录来提供佇列服务,例如最常见的列印服务,就是透过侦测列印佇列目录来啟动列印功能! 这时就得要 .path 的服务类型支援了!
.timer循环执行的服务 (timer unit):这个东西有点类似 anacrontab 喔!不过是由 systemd 主动提供的,比 anacrontab 更加有弹性!

systemctl

systemctl相当于前端,systemd相当于后端

systemctl [command] [unit]
command 主要有:
start     :立刻啟动后面接的 unit
stop      :立刻关闭后面接的 unit
restart   :立刻关闭后啟动后面接的 unit,亦即执行 stop 再 start 的意思
reload    :不关闭后面接的 unit 的情况下,重新载入设定档,让设定生效
enable    :设定下次开机时,后面接的 unit 会被啟动
disable   :设定下次开机时,后面接的 unit 不会被啟动
status    :目前后面接的这个 unit 的状态,会列出有没有正在执行、开机预设执行否、登录等资讯等!
is-active :目前有没有正在运作中
is-enabled:开机时有没有预设要啟用这个 unit
# 列出系统上面有啟动的 unit
systemctl# 列出所有已经安装的 unit 有哪些?
systemctl list-unit-filessystemctl list-units --type=service --all
systemctl list-units --type=service --all | grep cpu

通过systemctl可管理不同的操作环境(target unit)如是否开启图形界面是否开启多人模式,开关机等
可分析各服务之间的依赖关系

/etc/services查看端口号和对应的服务

查看端口号使用情况
netstat -tlunp

设定一个backup服务

~/backup.sh

#!/bin/bashsource="/etc /var/lib /var/spool/{cron,at,mail}"
target="/home/xxx/backups/backup-system-$(date +%Y-%m-%d).tar.gz"
[ ! -d /home/xxx/backups ] && mkdir /home/xxx/backups
tar -zcvf ${target} ${source} &> /home/xx/backups/backup.log

/etc/systemd/system/backup.service

[Unit]
Description=backup my server
Requires=[Service]
Type=simple
ExecStart=/bin/bash -c /home/xxx/backup.sh[Install]
WantedBy=multi-user.target

设定周期性执行

设定固定日期执行

4. 系统日志

系统中的日志默认在/var/log*

与日志相关的主要服务程序:

  • systemd-journald.service:最主要的訊息收受者,由 systemd 提供的;
  • rsyslog.service:主要登錄系統與網路等服務的訊息;
  • logrotate:主要在進行登錄檔的輪替功能。

rsyslog.service

设定文件 /etc/rsyslog.conf

该服务支持将日志发送到远程

logrotate

滚动写入log

/etc/logrotate.conf
/etc/logrotate.d/

systemd-journald.service

和rsyslog.service很像,不过数据存储在内存中?

5. Linux开机流程

Linux开机过程

1. BIOS,开机自检

BIOS分为传统BIOS和新的UEFI BIOS。硬盘分区表分为MBR和GPT,但是GPT也保留一块与MBR兼容的区域,即硬盘最前面可安装boot loader的区域。

开机首先载入BIOS,并透过 BIOS 程式去载入 CMOS 的资讯,并且藉由 CMOS 内的设定值取得主机的各项硬体设定, 例如 CPU 与周边设备的沟通时脉、开机装置的搜寻顺序、硬碟的大小与类型、 系统时间、各周边汇流排的是否启动 Plug and Play (PnP, 随插即用装置) 、 各周边设备的 I/O 位址、以及与 CPU 沟通的 IRQ 岔断等等的资讯。

在获取硬件信息后BIOS会进行开机自检(Power-on Self Test,POST)。然后开始执行硬件检测初始化、确定开机装置顺序、读取开机装置的资料。

由于不同操作系统的文档格式不同(不同内核的启动方法不一样),必须有一个开机管理程序来处理内核的载入(load)问题,该程序称为Boot Loader。bl就在开机装置的第一个扇区(sector)内,也就是MBR(Master Boot Record,主开机记录区)。

BIOS 是通过硬件的 INT 13 中断功能来读取 MBR 的,也就是说,只要 BIOS 能够侦测的到你的磁碟 (不论该磁碟是 SATA 还是 SAS 介面),那他就有办法透过 INT 13 这条通道来读取该磁碟的第一个磁区内的 MBR 软体。

2. Boot Loader 启动kernel

它会确认操作系统的档案格式并加载kernel。

每个文件系统 (filesystem, 或者是 partition) 都会保留一块开机磁区 (boot sector) 提供操作系统安装 boot loader , 而通常操作系统预设都会安装一份 loader 到他根目录所在的文件系统的 boot sector 上。如果我们在一部主机上面安装 Windows 与 Linux 后,该 boot sector, boot loader 与 MBR 的相关性会有点像下图:
在这里插入图片描述

如上图所示,每个作业系统预设是会安装一套 boot loader 到他自己的档案系统中 (就是每个 filesystem 左下角的方框),而在 Linux 系统安装时,你可以选择将 boot loader 安装到 MBR 去,也可以选择不安装。 如果选择安装到 MBR 的话,那理论上你在 MBR 与 boot sector 都会保有一份 boot loader 程式的。 至于 Windows 安装时,他预设会主动的将 MBR 与 boot sector 都装上一份 boot loader!所以啦, 你会发现安装多重作业系统时,你的 MBR 常常会被不同的作业系统的 boot loader 所覆盖。

boot loader 主要的功能如下:

  • 提供选单:使用者可以选择不同的开机项目,这也是多重开机的重要功能!
  • 载入核心档案:直接指向可开机的程式区段来开始作业系统;
  • 转交其他 loader:将开机管理功能转交给其他 loader 负责。

在这里插入图片描述

3. load kernel & initramfs

内核启动后会接管BIOS,测试与驱动外设。内核文件一般放在/boot下并取名/boot/vmlinuz ,bl会加载这个内核文件并将执行权交给它。内核模块放在/lib/modules/目录内,外设驱动等以内核模块的形式存放在该目录下。

因此在开机过程中必须要(只读模式)挂载根目录。

虚拟档案系统 (Initial RAM Disk 或 Initial RAM Filesystem) 一般使用的档名为 /boot/initrd 或 /boot/initramfs ,这个档案的特色是,他也能够透过 boot loader 来载入到记忆体中,然后这个档案会被解压缩并且在内存当中模拟成一个根目录, 且此模拟在内存当中的档案系统能够提供一支可执行的程式,透过该程式来载入开机过程中所最需要的核心模组, 通常这些模组就是 USB, RAID, LVM, SCSI 等档案系统与磁碟介面的驱动程式!等载入完成后, 会帮助核心重新调用 systemd 来开始后续的正常开机流程。
在这里插入图片描述
如上图所示,boot loader 可以载入 kernel 与 initramfs ,然后在内存中让 initramfs 解压缩成为根目录, kernel 就能够藉此载入适当的驱动程式,最终释放虚拟文件系统,并挂载实际的根文件系统,就能够开始后续的正常开机流程。

man initrd 查看更多内容
initramfs 就是一个小型的根目录

当根目录挂载完成,外设驱动加载完后,开始执行系统的第一个程序systemd。

4. 第一个进程systemd & 通过default.target分析开机程序

在调用systemd时,主机硬件已经准备就绪了。 systemd 最主要的功能就是准备软体执行的环境,包括系统的主机名称、网路设定、语系处理、档案系统格式及其他服务的启动等。 而所有的动作都会透过 systemd 的预设启动服务集合,亦即是 /etc/systemd/system/default.target 来规划。

init [OPTIONS...] COMMANDSend control commands to the init daemon.Commands:0              Power-off the machine6              Reboot the machine2, 3, 4, 5     Start runlevelX.target unit1, s, S        Enter rescue modeq, Q           Reload init daemon configurationu, U           Reexecute init daemon

『 init 3 』转成文字界面,『 init 5 』转成图形界面

要知道系统的服务启用的流程,最简单的方法就是『 systemctl list-dependencies graphical.target 』这个指令

sysinit.target 的初始化流程让系统可以存取之后,加上 basic.target 让系统成为作业系统的基础, 之后就是伺服器要顺利运作时,需要的各种主机服务以及提供伺服器功能的网路服务的启动了。这些服务的启动则大多是附挂在 multi-user.target 这个操作环境底下, 可以到 /etc/systemd/system/multi-user.target.wants/ 查看预设要被启动的服务。

Boot Loader: Grub2

  • stage1:第一阶段为执行 boot loader 的主程式,这个主程式必须要被安装在开机区,亦即是 MBR 或者是 boot sector 。因为 MBR 实在太小了,所以,MBR 或 boot sector 通常仅安装 boot loader 的最小主程式, 并没有安装 loader 的相关设定档;
  • stage2: 第二阶段为透过 boot loader 载入所有设定档与相关的环境参数档案 (包括档案系统定义与主要设定档 grub.cfg), 一般来说,设定档都在 /boot 底下

硬盘及其分区在grub2中的代号

硬盘搜索顺序在grub2中的代号
第一个(MBR)(hd0) (hd0,msdos1) (hd0,msdos2) (hd0,msdos3)…
第二个(GPT)(hd1) (hd1,gpt1) (hd1,gpt2) (hd1,gpt3)…
第三个(hd2) (hd2,1) (hd2,2) (hd2,3)…
  • chroot 目录:代表将你的根目录『暂时』切换到 chroot 之后所接的目录。 /sysroot 将会被暂时作为根目录, 而我们知道那个目录其实就是最原先的系统根目录,所以当然就能够用来处理你的档案系统与相关的帐号管理

其他

localectllocale# 分析系统硬件
dmidecode -t typegdisk: 可以使用 gdisk -l 将分割表列出;
dmesg: 观察核心运作过程当中所显示的各项讯息记录;
vmstat: 可分析系统 (CPU/RAM/IO) 目前的状态;
lspci:列出整个 PC 系统的 PCI 介面装置!很有用的指令;
lsusb:列出目前系统上面各个 USB 埠口的状态,与连接的 USB 装置;
iostat:与 vmstat 类似,可即时列出整个 CPU 与周边设备的 Input/Output 状态。

总结

总结个J

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/502666.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【CSS】第一天 基础选择器与文字控制属性

【CSS】第一天 1. CSS定义2. css引入方式2.1 内部样式2.2 外部样式2.3 行内样式 3. 选择器3.1 标签选择器3.2 类选择器3.3 id选择器3.4 通配符选择器 1. CSS定义 层叠样式表(CSS)是一种样式表语言,用来描述HTML文档的呈现(美化内容)。 书写位置:title标…

QT----------QT Data Visualzation

实现思路: 配置项目:在 .pro 文件中添加 QT datavisualization 以引入 QT Data Visualization 模块。创建主窗口:使用 QMainWindow 作为主窗口,添加 Q3DScatter、Q3DBars 和 Q3DSurface 等三维视图组件。初始化和创建三维图表&a…

连接Milvus

连接到Milvus 验证Milvus服务器正在侦听哪个本地端口。将容器名称替换为您自己的名称。 docker port milvus-standalone 19530/tcp docker port milvus-standalone 2379/tcp docker port milvus-standalone 192.168.1.242:9091/api/v1/health 使用浏览器访问连接地址htt…

AlphaPi相关硬件驱动提取

初涉硬件编程,在咸鱼上搞了几块AlphaPi和microbit的板鼓捣了一下,alphapi生态不完善,网上又无任何文档,搞封闭,可玩性实在有限,但貌似相关扩展板是可以插microbit的,于是想把这些扩展版用microb…

Nginx——静态资源部署(二/五)

目录 1.Nginx 服务器基础配置实例2.Nginx 服务操作的问题及解决方案2.1.Nginx 配置成系统服务2.2.Nginx 命令配置到系统环境 3.Nginx 静态资源部署3.1.Nginx 静态资源概述3.2.Nginx 静态资源的配置指令3.2.1.listen 指令3.2.2.server_name 指令3.2.2.1.配置方式3.2.2.2.匹配执行…

第0章 机器人及自动驾驶SLAM定位方法全解析及入门进阶学习建议

嗨,各位同学大家好!笔者自985硕士毕业后,在机器人算法领域已经深耕 7 年多啦。这段时间里,我积累了不少宝贵经验。本专栏《机器人工程师带你从零入门SLAM》将结合下面的SLAM知识体系思维导图及多年的工作实战总结,将逐…

Vue 全局事件总线:Vue 2 vs Vue 3 实现

🌟 前言 欢迎来到我的技术小宇宙!🌌 这里不仅是我记录技术点滴的后花园,也是我分享学习心得和项目经验的乐园。📚 无论你是技术小白还是资深大牛,这里总有一些内容能触动你的好奇心。🔍 &#x…

xml格式化(1):使用python的xml库实现自闭合标签

前言 最近一段时间一直想要写一个urdf格式化插件。 至于为什么嘛,因为使用sw2urdf插件,导出的urdf,同一标签的内容,是跨行的,这就导致,内容比较乱,而且行数比较多。影响阅读。 因此&#xff…

模型 九屏幕分析法

系列文章 分享 模型,了解更多👉 模型_思维模型目录。九屏幕法:全方位分析问题的系统工具。 1 九屏幕分析法的应用 1.1 新产品研发的市场分析 一家科技公司计划开发一款新型智能手机,为了全面评估市场潜力和风险,他们…

基于开发/发布/缺陷分离模型的 Git 分支管理实践20250103

基于开发/发布/缺陷分离模型的 Git 分支管理实践 引言 在现代软件开发中,合理的分支管理策略是保证项目成功的关键因素之一。本文将详细介绍一种基于开发/发布/缺陷分离的 Git 分支管理模型,这种模型不仅能提升团队协作效率,还能确保代码质…

前端工程化之手搓webpack5 --【elpis全栈项目】

前端工程化之手搓webpack5 --【elpis全栈项目】 导读 基本流程:输入 – 编译 – 输出 #mermaid-svg-V8Gi7RFNikCuEhax {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-V8Gi7RFNikCuEhax .error-icon{fil…

【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置

一、简介 此工具要实现的功能是:将内容框中当前选定的图层移到最顶层或最底层。 主要技术要点包括: 1、Config.daml文件设置(UI设置) 2、按钮的图片和位置设置 3、当前选定图层的获取 4、图层在内容列表中位置的获取和移动 …

2023最新版IDEA创建一个SpringBoot项目 (详细教程)

在IDEA中创建一个SpringBoot项目 springboot是我们java开发中最流行的框架之一,下面我们看看如何在idea中创建一个springboot项目。 文章目录 在IDEA中创建一个SpringBoot项目一、springboot简单介绍二、快速开始1.新建项目2.配置Maven3.测试 总结 一、springboot简…

Spring SpEL表达式由浅入深

标题 前言概述功能使用字面值对象属性和方法变量引用#this 和 #root变量获取类的类型调用对象(类)的方法调用类构造器类型转换运算符赋值运算符条件(关系)表达式三元表达式Elvis 操作符逻辑运算instanceof 和 正则表达式的匹配操作符 安全导航操作员数组集合(Array 、List、Map…

Jetpack Compose 学习笔记(四)—— CompositionLocal 与主题

Compose 中的主题内的代码大量定义了 CompositionLocal,因此在学习主题之前,先学习 CompositionLocal 铺垫好基础。 1、CompositionLocal 1.1 显式传参与隐式传参 显式传参需要依赖函数的调用,层层传递;隐式传参通过创建全局变量…

利用webworker解决性能瓶颈案例

目录 js单线程的问题webworker的基本使用webworker的常见应用可视化优化导出Excel js单线程的问题 众所周知,js不擅长计算,计算是同步的,大规模的计算会让js主线程阻塞,导致界面完成卡死。比如有一个600多亿次的计算,…

【数据结构05】排序

系列文章目录 【数据结构05】排序 . 【算法思想04】二分查找 文章目录 系列文章目录[toc] 1. 基本思想与实现1.1 插入类排序1.1.1 直接插入排序(*)1.1.2 折半插入排序1.1.3 希尔排序(*) 1.2 交换类排序1.2.1 冒泡排序&#xff08…

数据挖掘——概论

数据挖掘——概论 数据、信息和知识的关联和联系数据挖掘数据挖掘定义数据挖掘的步骤数据挖掘的主要内容 数据、信息和知识的关联和联系 数据、信息和知识是知识工作者感知和认识客观事物的3个连贯的阶段。 数据无处不在,聚合/集成后转化为信息,结构化后…

Hello 2025

Hello 2025 A. MEX Table 题意: 给出 0 到 n ∗ m − 1 的数字,排列成 n m 的表格,最大化 ∑ i 1 n mex ⁡ ( { a i , 1 , a i , 2 , … , a i , m } ) ∑ j 1 m mex ⁡ ( { a 1 , j , a 2 , j , … , a n , j } ) 给出0到n*m-1的数字&…

[答疑]用例规约:系统请求3dsMax创建体块

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 第五元素 2024-12-22 12:39 潘老师,请教一个问题:在需求工作流书写系统用例规约时,这个“计算”(改变)可不可以写多个内容&…