Linux基础总结
1. systemd
systemd 是一个系统和服务管理器,广泛用于现代 Linux 发行版中。它不仅负责启动和管理系统服务,还提供了一系列其他功能,如设备管理、日志记录、用户会话管理等。
1.1 主要特性
- 快速启动:
systemd使用并行启动技术,可以同时启动多个服务,从而显著缩短系统启动时间。
- 按需激活:
- 服务可以在需要时自动启动,而不是在系统启动时全部启动,这样可以节省资源。
- 依赖管理:
systemd提供了强大的依赖关系管理功能,确保服务按照正确的顺序启动和停止。
- 动态设备管理:
systemd集成了udev,可以动态地管理设备节点和设备事件。
- 日志记录:
systemd包含journald,一个高效的日志记录系统,可以收集和存储系统日志信息。
- 用户会话管理:
systemd可以管理用户会话,支持多用户环境下的会话管理和资源分配。
1.2 主要组件
- systemd systemd.service:
- 这是
systemd的核心服务,负责系统的初始化和管理。
- 这是
- systemctl:
- 用于控制
systemd系统和服务管理器的命令行工具。可以用来启动、停止、重启服务,查看服务状态等。
- 用于控制
- systemd-analyze:
- 用于分析系统启动时间和服务启动时间的命令行工具,有助于优化系统性能。
- journalctl:
- 用于查询和显示
journald收集的日志信息的命令行工具。
- 用于查询和显示
- udev:
- 动态设备管理器,负责管理设备节点和设备事件。
- tmpfiles.d:
- 用于管理临时文件和目录的配置文件系统。
- systemd-networkd 和 systemd-resolved:
- 分别用于网络管理和 DNS 解析。
- systemd-timesyncd:
- 时间同步服务,用于保持系统时钟的准确性。
1.3 systemd 日志
systemd 日志(通过 journald 收集)主要收集的信息包括但不限于:
- 系统启动信息:记录系统启动过程中的详细信息,包括内核初始化、驱动加载、服务启动等。
- 服务状态:记录各个系统服务的运行状态,如启动、停止、失败等事件。
- 应用程序日志:可以接收并记录应用程序的标准输出和标准错误输出,以及应用程序通过系统调用发送的日志消息。
- 安全相关事件:如用户登录、权限更改、安全策略应用等。
- 硬件和驱动程序信息:记录与硬件设备和驱动程序相关的事件,比如设备的添加或移除。
- 内核日志:捕捉内核产生的所有消息,这些信息对于诊断硬件故障和内核错误非常重要。
- 审计日志:如果启用了审计功能,
journald还可以记录详细的审计信息,帮助管理员追踪系统活动。
journald 的一个特点是它能够将日志数据以二进制格式存储在文件中,这使得日志信息更加紧凑且高效。同时,journald 支持元数据,比如时间戳、进程ID、用户ID等,这为日志分析提供了更多有用的信息。
要查看 systemd 日志,可以使用 journalctl 命令,这是一个强大的工具,允许用户过滤和显示日志条目。例如,可以通过指定时间范围、特定的服务或进程来过滤日志。
1.4 systemd 定时器
systemd 定时器有两种主要类型:实时时钟定时器(Real-Time Clock Timers) 和 单调时钟定时器(Monotonic Clock Timers)。
1.4.1 实时时钟定时器(Real-Time Clock Timers)
实时时钟定时器 使用系统时钟(即墙钟时间)来确定何时触发定时器。它们基于日历时间,因此可以设置具体的日期和时间。
主要特点:
- 基于日历时间:使用具体的日期和时间来设置定时任务。
- 使用 OnCalendar 指令:通过
OnCalendar指令来指定定时器触发的具体时间。 - 受系统时钟影响:如果系统时钟被修改,定时器的触发时间也会受到影响。
1.4.2 单调时钟定时器(Monotonic Clock Timers)
单调时钟定时器 使用系统启动以来的时间(即从系统启动到现在的持续时间)来确定何时触发定时器。它们不受系统时钟更改的影响,因为它们基于一个固定的起点(系统启动时间)。
主要特点:
- 基于系统启动时间:使用系统启动以来的时间来设置定时任务。
- 使用
OnActiveSec、OnBootSec、OnUnitActiveSec和OnUnitInactiveSec指令:OnActiveSec:从定时器激活后开始计时。OnBootSec:从系统启动后开始计时。OnUnitActiveSec:从服务上次激活后开始计时。OnUnitInactiveSec:从服务上次停用后开始计时。
- 不受系统时钟影响:即使系统时钟被修改,定时器的触发时间也不会改变。
1.4.3 主要区别
- 时间基准:
- 实时时钟定时器:基于日历时间,使用具体的日期和时间。
- 单调时钟定时器:基于系统启动以来的时间,使用相对时间。
- 受影响因素:
- 实时时钟定时器:受系统时钟更改的影响。
- 单调时钟定时器:不受系统时钟更改的影响。
- 适用场景:
- 实时时钟定时器:适用于需要在特定日期和时间执行的任务,例如每天午夜备份数据库。
- 单调时钟定时器:适用于需要在系统启动后的固定时间间隔执行的任务,例如每15分钟检查一次系统状态。
2. GRUB
GRUB(Grand Unified Bootloader)是一个广泛使用的引导加载程序(bootloader),主要用于启动操作系统。它最初是为了 GNU 操作系统开发的,但现在被大多数 Linux 发行版以及其他类 Unix 系统所采用。GRUB 的主要作用是在计算机启动时加载操作系统的内核,并将其传递给操作系统,使其能够继续启动过程。
2.1 GRUB 的主要功能和特点
- 多操作系统支持:
- GRUB 可以支持多种操作系统,允许用户在一个系统上安装多个操作系统,并在启动时选择要启动的操作系统。这对于多操作系统环境非常有用。
- 菜单驱动界面:
- GRUB 提供了一个图形化的菜单界面,用户可以在启动时通过键盘选择不同的启动项。这个界面友好且易于使用。
- 动态配置:
- GRUB 支持动态配置,可以在启动时修改启动选项,而无需重新写入引导扇区。这使得用户可以轻松地测试不同的启动参数。
- 高级功能:
- GRUB 提供了许多高级功能,如网络启动、加密支持、脚本编写等。这些功能使得 GRUB 成为一个非常灵活和强大的引导加载程序。
- 模块化设计:
- GRUB 是模块化的,可以根据需要加载不同的模块来实现特定的功能。这种设计使得 GRUB 更加轻量级且易于扩展。
- 安全性:
- GRUB 支持密码保护启动项,可以防止未经授权的用户启动特定的操作系统。
2.2 GRUB 的工作流程
- BIOS/UEFI 启动:
- 计算机启动时,BIOS 或 UEFI 会查找并加载第一个可启动设备上的引导加载程序。
- 加载 GRUB 引导扇区:
- BIOS/UEFI 将控制权交给 GRUB 的引导扇区代码,通常位于磁盘的第一个扇区(MBR)或 EFI 系统分区。
- 加载 GRUB 配置文件:
- GRUB 引导扇区代码加载 GRUB 的主程序和配置文件(通常是
/boot/grub/grub.cfg)。
- GRUB 引导扇区代码加载 GRUB 的主程序和配置文件(通常是
- 显示启动菜单:
- GRUB 加载完成后,会显示一个启动菜单,列出可用的操作系统启动项。
- 选择启动项:
- 用户可以选择一个启动项,GRUB 会加载相应的内核和初始化参数。
- 启动操作系统:
- GRUB 将控制权传递给选定的内核,内核继续启动过程,最终加载操作系统。
2.3 常用的 GRUB 命令
更新 GRUB 配置文件:
bashsudo update-grub重新安装 GRUB:
bashsudo grub-install /dev/sda手动编辑 GRUB 配置文件:
bashsudo nano /etc/default/grub生成新的 GRUB 配置文件:
bashsudo grub-mkconfig -o /boot/grub/grub.cfg
2.4 总结
GRUB 是一个功能强大且灵活的引导加载程序,它不仅能够启动单个操作系统,还可以支持多操作系统环境。通过其图形化菜单和动态配置功能,GRUB 为用户提供了方便的启动选项管理工具。
3. Cron
cron 是一个用于在指定时间自动执行任务的守护进程(daemon)。它广泛应用于 Unix 和类 Unix 系统中,包括 Linux。通过 cron,用户可以定期执行脚本、命令或任务,而无需人工干预。
3.1 基本概念
- crontab 文件:
crontab文件是用于存储定时任务的文件。每个用户都有自己的crontab文件,通常位于/var/spool/cron/目录下。
- crontab 命令:
crontab命令用于编辑、查看和管理用户的定时任务。
- cron 表达式:
cron表达式用于定义任务的执行时间。它由六个字段组成,每个字段之间用空格分隔。
3.2 cron 表达式的格式
* * * * * command_to_execute
- - - - -
| | | | |
| | | | +--- 星期几 (0 - 7) (0或7代表星期天)
| | | +----- 月份 (1 - 12)
| | +------- 日期 (1 - 31)
| +--------- 小时 (0 - 23)
+----------- 分钟 (0 - 59)3.3 常用的 crontab 命令
编辑当前用户的 crontab 文件:
Bashcrontab -e查看当前用户的 crontab 文件:
Bashcrontab -l删除当前用户的 crontab 文件:
Bashcrontab -r查看其他用户的 crontab 文件(需要 root 权限):
Bashcrontab -l -u username
3.4 特殊字符
- *****:表示任意值。
- ,:表示列表中的值,例如
1,3,5。 - -:表示一个范围,例如
1-5。 - /:表示步长,例如
*/10表示每隔 10 分钟。
3.5 日志记录
cron 任务的输出默认会被发送到用户的邮件中。如果你想将输出重定向到文件,可以在 crontab 文件中指定输出文件:
* * * * * /path/to/script.sh >> /path/to/logfile.log 2>&13.6 注意事项
- 环境变量:
cron任务在执行时使用的环境变量可能与用户登录时的环境变量不同。建议在脚本中显式设置所需的环境变量。
- 路径问题:
- 确保脚本和命令的路径是绝对路径,避免使用相对路径。
- 权限问题:
- 确保脚本和命令具有适当的执行权限。
- 日志检查:
- 定期检查日志文件,确保任务按预期执行。
3.7 示例
每周一至周五凌晨三点执行某任务
# 编辑当前用户的 crontab 文件
crontab -e
# 添加定时任务
0 3 * * 1-5 task4. 常见命令
查看当前shell进程
ps查看所用用户进程
ps aux查看所有进程的详细信息
ps -ef修改用户命令,将用户添加进用户组
usermod -aG <group-name> <user-name>查看当前所有用户
cat /etc/passwd查看当前所有用户组
cat /etc/group查看所有环境变量
env查看 PATH 环境变量的值
echo $PATH查看当前用户
id查找并显示可执行文件的完整路径
which [选项] <命令名>常用选项
-a:显示所有匹配的路径(而不仅仅是第一个)。-s:静默模式,不输出任何内容,仅返回退出状态码。-V:显示版本信息。
5. 数据流重定向
数据流重定向就是将某个命令执行后应该要出现在屏幕上的数据传输到其他地方
标准输入(stdin):代码为0,使用 < 或 <<;
标准输出(stdout):代码为1,使用 > 或 >>;
标准错误输出(stderr):代码为2,使用 2> 或 2>>
> 覆盖写
>> 追加写
