系列文章目录
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位址 |
loadavg | top和uptime显示的在此 |
meminfo | free列出的 |
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