L o a d i n g . . .
SHIWIVI-文章

//sunny forever
while(life<end){
love++;
beAwesome :)}

    <
  • 主题:
  • + -
  • 清除背景
  • 禁用背景
目 录
  1. 1. 进程管理
    1. 1.1. ps查看进程
    2. 1.2. pstree查看进程树
    3. 1.3. lsof查看进程调用的文件
    4. 1.4. top监控系统资源占用状态
    5. 1.5. vmstat按指定次数监控系统资源
    6. 1.6. free查看内存信息
    7. 1.7. 中止进程
      1. 1.7.1. 系统信号
      2. 1.7.2. kill向进程发送信号
      3. 1.7.3. killall命令
      4. 1.7.4. pkill命令
  2. 2. 工作管理
    1. 2.1. 将程序转入后台运行/暂停
    2. 2.2. jobs查看后台的工作
    3. 2.3. fg将后台暂停的工作恢复到前台执行
    4. 2.4. bg将后台暂停的工作恢复到后台执行
    5. 2.5. chroot指定新根目录并运行命令
    6. 2.6. env在修改后的环境中运行命令
    7. 2.7. nohub退出终端时继续执行命令
    8. 2.8. timeout限制命令执行时间
    9. 2.9. 调整谦让度
      1. 2.9.1. nice指定调度优先级
      2. 2.9.2. renice修改调度优先级
    10. 2.10. stdbuf调整命令的I/O缓冲
  • 软件安装
    1. 0.1. 源码包安装
    2. 0.2. RPM包安装
      1. 0.2.1. RPM包
      2. 0.2.2. 安装升级与卸载
      3. 0.2.3. 查询包信息
      4. 0.2.4. 包校验
      5. 0.2.5. 包文件提取
  • 1. yum操作
    1. 1.1. 配置网络yum源
    2. 1.2. yum安装软件
      1. 1.2.1. 查询包
      2. 1.2.2. 安装与升级
      3. 1.2.3. 升级、卸载
    3. 1.3. yum安装软件包组
  • 2. 服务管理
    1. 2.1. 服务查询
      1. 2.1.1. 1. RPM包安装的应用服务
      2. 2.1.2. 2. 源码包安装的服务
    2. 2.2. RPM服务管理
      1. 2.2.1. 独立服务管理
      2. 2.2.2. 独立服务命令
      3. 2.2.3. 独立服务自启动
      4. 2.2.4. 基于xinetd(超级守护进程)服务
    3. 2.3. 源码包安装的服务管理
      1. 2.3.1. 服务启动
      2. 2.3.2. 自启动
    4. 2.4. 查看开机时服务启动顺序
  • 3. alternatives工具
    1. 3.1. alternatives简介
    2. 3.2. alternatives命令
      1. 3.2.1. 注册组
      2. 3.2.2. 其他命令
    3. 3.3. 示例
      1. 3.3.1. 1. 注册组
  • 4. 定时任务
    1. 4.1. at命令
      1. 4.1.1. 查询at定时任务
      2. 4.1.2. 删除at定时任务
    2. 4.2. crond服务
      1. 4.2.1. 查看crond服务运行情况
      2. 4.2.2. 查看crond服务是否开机自启动
    3. 4.3. 设置crond定时任务
      1. 4.3.1. cron语法
  • 5. 日志服务
    1. 5.1. rsyslog服务
      1. 5.1.1. 查询rsyslog服务是否在运行
      2. 5.1.2. 查看rsyslog服务是否开机自启动
    2. 5.2. 日志文件
    3. 5.3. rsyslog日志格式
    4. 5.4. rsyslog日志配置文件
      1. 5.4.1. 服务名
      2. 5.4.2. 连接符
      3. 5.4.3. 日志等级
      4. 5.4.4. 日志记录位置
      5. 5.4.5. 示例
    5. 5.5. 日志轮替
      1. 5.5.1. 配置文件内容
      2. 5.5.2. 手动进行日志轮替
  • 6. 备份与恢复
    1. 6.1. 备份
      1. 6.1.1. 一般需备份的数据
    2. 6.2. dump文件备份系统
      1. 6.2.1. 1. 安装dump
      2. 6.2.2. 2. dump命令
      3. 6.2.3. 3.备份操作
    3. 6.3. restore还原dump备份的文件
  • Linux服务与系统资源管理

    字数:25614 写于:2021-12-29
    最新更新:2022-01-20 阅读本文预计花费您74分钟

    进程管理

    ps查看进程

    该命令来自procps-ng

    1. ps aux 使用BSD(unix)标准格式显示进程
    • a  显示所有前台进程
    • x  显示所有后台进程
    • u  显示进程由哪个用户产生
    BSD格式的进程信息: USER:该进程由哪个用户产生 PID:进程的ID号 %CPU:进程占用的CPU百分比 %MEM:进程占用的物理内存百分比 VSZ:进程占用的虚拟内存,单位为KB RSS:进程占用的物理内存大小,单位为KB TTY:进程在哪个终端运行,?为由Linux系统运行,tty1-tty6为本地字符界面终端,tty7为图形终端,pts/0-255为远程登录虚拟终端 STAT:进程状态,常见的状态字符有:R运行(runnable),S睡眠(sleeping),s包含子进程,+位于后台的进程组,T停止,<优先级高的进程,N优先级低的进程,l多线程,Z僵尸进程,D无法中断的休眠进程(通常为IO进程) START:进程启动时间 TIME:进程占用CPU时间 COMMAND:产生进程的命令名
    2. ps -le 使用Linux标准格式显示进程
    • -l  显示详细信息
    • -e  显示所有进程
    • -C命令 显示指定命令的状态
    Linux格式的进程信息: UID:产生进程的用户ID PID:进程的ID号 PPID:父进程ID C:进程占用CPU百分比 STIME:进程启动时间 TTY:进程在哪个终端运行,参数同上 CMD:产生进程的命令名

    pstree查看进程树

    pstree [选项]

    • -p  显示进程PID
    • -u  显示进程所属用户

    lsof查看进程调用的文件

    lsof [参数]

    • -c 字符串  只列出以字符串开头的进程打开的文件
    • -u 用户名  只列出某个用户所启动进程打开的文件
    • -p pid  只列出某个PID进程打开的文件

    top监控系统资源占用状态

    top [参数]

    • -d 秒数  指定每几秒更新系统状态,默认是3秒

    显示当前系统的内存、CPU占用情况,显示状态下通过下列按键进行交互

    • ?或h  显示交互帮助
    • P   根据CPU占用率显示进程顺序,默认
    • M   根据内存占用率显示进程顺序
    • N   根据PID显示进程顺序
    • q   退出top监控
    系统资源显示信息: top - 15:40:11 up 41 days, 15:45, 2 users, load average: 0.04, 0.05, 0.01 Tasks: 78 total, 1 running, 45 sleeping, 0 stopped, 0 zombie %Cpu(s): 0.2 us, 0.2 sy, 0.0 ni, 99.6 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem : 492280 total, 15964 free, 74408 used, 401908 buff/cache KiB Swap: 0 total, 0 free, 0 used. 375944 avail Mem

    PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
    1 root 20 0 51704 4948 3660 S 0.0 1.0 10:45.34 systemd

    内容 说明
    15:40:11 系统当前时间
    up 41 days,15:45 系统运行时间,已运行41天15小时45分
    2 users 当前登录用户数量
    load average: 0.04, 0.05, 0.01 系统在1分钟、5分钟、15分钟前的平均负载,根据主机内核数量判断负荷情况,如 8核,超过8表明已超负荷运行
    Tasks Tasks后分别为 系统中的总进程数、正在运行的进程、睡眠进程、停止的进程、僵尸进程
    %Cpu(s) us为CPU被用户占用的比率,sy为系统占用比例,ni为修改过优先级的用户进程CPU占用比率,id为CPU空闲的比率,wa为等待输入、输出的进程占用CPU的比率,hi为硬中断请求服务占用CPU比率,si为软中断请求服务占用CPU比率,st为有虚拟机时,虚拟CPU等待实际CPU的时间百分比
    Mem 物理内存总大小、空闲内存大小、使用内存大小、正在缓冲的内存大小
    Swap 交换分区总大小、空闲部分、使用部分、有效大小

    vmstat按指定次数监控系统资源

    vmstat 刷新延迟 监听次数

    输出进程数、内存状态、交换分区状况、硬盘输入输出状况、CPU状态

    # vmstat 3 4 每3秒监听一次系统资源,输出4次

    free查看内存信息

    free [参数]

    • -b  以字节单位显示内存大小
    • -k  以KB单位显示内存大小(默认)
    • -m  以MB单位显示内存大小
    • -g  以GB单位显示内存大小

    中止进程

    系统信号

    kill -l查询可用的进程信号(选项为L的小写字母非I)

    Linux定义了64种信号,这些信号可由用户发起,也可由操作系统发起,信号在使用时可以使用其编号,也可以使用其名称,也可以是去除了SIG前缀的信号名,以下为部分信号的作用:

    代号 名称 说明
    0 不发送有效信号,仅用来测试进程是否存在,以及用户是否有权限向该进程发送信号
    1 SIGHUP 挂起进程,常用于通知进程重新加载配置文件或重启
    2 SIGINT 中断进程(可通过ctrl+C发起),常用于进程执行到一半中途停止,该信号可以被捕获
    3 SIGQUIT 退出进程(可通过Ctrl+\发起),并保存进程当前的内存映像生成core文件,用于调试
    4 SIGILL 非法指令,表示进程可能在试图执行一个不符合操作系统或CPU架构规范的指令
    5 SIGTRAP 跟踪/断点陷阱,通常用于在设置断点进行调试时,将进程设为跟踪模式
    6 SIGABRT 异常终止,表示进程发生了致命错误导致进程终止
    7 SIGBUS 总线错误,表示进程尝试执行无效的内存访问(如:尝试写入只读内存)
    8 SIGFPE 浮点异常,表示进程执行了错误的浮点运算,如除以零或结果超出浮点数表示范围等
    9 SIGKILL 强制终止进程,进程将被立即终止而不给予进程保存文件、写入日志等操作时间,该信号无法被捕获
    10 SIGUSR1 用户自定义信号1
    11 SIGSEGV 段错误
    12 SIGUSR2 用户自定义信号2
    13 SIGPIPE 写到已关闭的管道
    14 SIGALRM 闹钟
    15 SIGTERM 正常终止进程,kill命令的默认信号,进程将被允许进行保存文件等操作后正常退出,该信号可以被捕获
    16 SIGSTKFLT 栈溢出
    17 SIGCHLD 子进程结束
    18 SIGCONT 继续停止的进程执行,即恢复通过信号19和20所暂停的进程执行
    19 SIGSTOP 强制暂停进程,由系统层面发出,该信号无法被捕获
    20 SIGTSTP 暂停进程(可通过Ctrl+Z发起)并放到后台,可以通过fg命令将其恢复到前台继续执行,或通过bg命令在后台继续执行,该信号可以被捕获
    kill向进程发送信号

    kill [-信号] [进程PID1,PID2…]

    • 默认情况下,如果不指定信号,命令将发送SIGTERM(15)信号
    • 信号可以使用代号形式,也可以使用信号名形式,也可以是去除了SIG前缀的信号名形式
    • -s 信号:指定信号,该选项可以直接缩写为-信号形式,该选项完整形式为-‌-signal 信号
    • -l [信号]:默认查看所有信号,如果指定了信号则只输出该信号的信号名或信号代号
    • 不同的PID值,kill命令有不同作用:
      • 如果PID为正值,则将信号发送给该PID对应的进程
      • PID为0,则信号会被发送给所有与当前shell或进程同属一个进程组的所有进程,这通常用于终止与当前进程或脚本有关的所有进程,而不仅仅是一个单一的进程
      • PID为-1,则信号会被发送给所有当前用户有权限发送的进程。对于普通用户,信号会被发送给该用户有权控制的所有进程,对于root用户,这可能会影响系统的所有进程!,一次性关闭所有进程,应当谨慎使用
      • PID为-1以外的负值,信号会被发送给所有进程组ID(PGID)=|PID|(绝对值)的进程组中的所有进程
    1. 发送信号时,以下几个语句等价,都表示发送SIGTERM信号给PID为1234的进程 kill -SIGTERM 1234 #完整的信号表示 kill -TERM 1234 #省略SIG前缀 kill -15 1234 #使用信号编号形式 kill -s SIGTERM 1234 #使用-s选项 kill -s 15 1234 kill 15 1234 #使用信号编号时也可以省略- 2. 测试PID为1234的进程是否存在,以及当前用户是否有权访问它 kill -0 1234 返回0,表示进程存在且用户有权访问 返回ESRCH,表示进程不存在 返回EPERM,表示进程存在,但用户无权访问 3. 终止当前进程组中的所有进程 kill -TERM 0 4. 终止进程组ID为456的进程组中的所有进程 kill -KILL -456
    killall命令

    killall [参数][信号代号] [进程名] 根据进程名中止进程

    • -i  询问是否杀死某进程
    • -I  忽略进程名大小写
    pkill命令

    pkill [参数][信号代号] [进程名]

    • -t 终端号  按终端号关闭用户的连接(踢出用户)
    # pkill -9 -t tty1 关闭终端号为 tty1 用户的连接

    工作管理

    将程序转入后台运行/暂停

    在命令后添加 & ,可使该命令在后台执行,后台执行的任务如果有输出语句依旧会显示于屏幕上(STDOUT和STDERR的消息)

    如: # tar -zxf test.tar.gz & 会在方括号中返回该任务在后台进程的作业号,并返回进程的PID [1] 3231 然后将会在后台解压缩 test.tar.gz文件,执行完会提示Done并显示任务号 [1] Done

    在命令运行时执行 Ctrl + Z 是将当前工作暂停后转入后台

    如: # top 执行Ctrl + Z会将监视系统资源的top程序设为stopped(暂停)状态后转入后台

    jobs查看后台的工作

    jobs [-l]

    • -l  显示进程的PID和作业号
    • -p  只显示进程PID
    • -r  只显示运行中的进程
    • -s  只显示停止的进程
    [1] Stopped top [2]- Stopped top [3]+ Stopped top

    [3]代表工作序号,“+”号代表最后一个放入后台的工作,“-”号代表倒数第二个放入后台的工作,恢复时默认使用出栈方式从最后一个放入后台的工作开始恢复

    fg将后台暂停的工作恢复到前台执行

    fg [%工作序号]

    • %可省略,如果不添加工作序号,则默认从后放入的工作开始恢复

    bg将后台暂停的工作恢复到后台执行

    bg [%工作序号]

    • %可省略,如果不添加工作序号,则默认从后放入的工作开始恢复
    top,vi等服务于前台的命令,不能恢复到后台执行。

    chroot指定新根目录并运行命令

    chroot命令的作用是指定一个目录将其设置为虚拟的根目录,使后续命令在该虚拟根目录下执行。该命令通常用于创建一个受限的文件系统环境,使某些进程无法访问真实的系统文件。这个“根目录变更”行为类似于为进程设置一个“虚拟根目录”,这样进程就只能看到新根目录下的文件结构,从而增强系统的隔离和安全性,该命令可用于以下场景:

    • 构建隔离环境:构建受限环境 (jail),限制用户或进程只能够访问特定目录下的资源,防止其对主系统产生影响
    • 测试与开发:受限环境中测试软件或脚本,而不影响真实系统
    • 运行旧版或兼容软件:创建一个虚拟环境来运行旧版软件或与当前操作系统不兼容的软件
    • 系统修复:当系统因配置错误或损坏而无法启动时,可以使用 chroot 命令进入系统的根文件系统并进行修复操作

    chroot [选项] 新的根目录 [命令]该命令需要root权限

    • 如果未指定命令,则将启动一个新的shell(具体哪一个shell取决于SHELL环境变量或/bin/sh)
    • 新目录中需要有shell或所执行命令的二进制文件,否则将报错command not found
    • -‌-userspec=用户名或ID[:组名或组ID]:以指定的用户身份,用户组身份执行命令
    • -‌-groups=组名或组ID:将该组作为命令进程的附加组
    由于chroot命令会将执行环境限制到新的根目录中,因此所有需要使用的资源(包括命令的二进制文件、依赖等)都需要复制一份到新根目录中。如果不为chroot命令指定所要执行的命令,chroot会在该受限环境中启动一个新的shell,同样需要将shell的二进制文件、依赖提前复制到该新目录中,否则,所有命令都将因为找不到命令的二进制文件而提示command not found e.g.1要将/mnt/my_chroot设置为新的虚拟根目录,且在该目录下执行ls命令 1.查看ls命令的依赖 ldd /bin/ls 输出: linux-vdso.so.1 (0x00007ffc0865f000) libselinux.so.1 => /lib/x86_64-linux-gnu/libselinux.so.1 (0x000075e890fcf000) libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x000075e890c00000) libpcre2-8.so.0 => /lib/x86_64-linux-gnu/libpcre2-8.so.0 (0x000075e890f35000) /lib64/ld-linux-x86-64.so.2 (0x000075e89102a000) 2.将这些依赖和/bin/ls复制到/mnt/my_chroot中,并且文件结构要相同 3.随后才能执行chroot命令 sudo chroot /mnt/my_chroot ls e.g.2.如果不为chroot指定具体要执行的命令,chroot命令将在/mnt/my_chroot中启动一个子bash,同样需要使用上述步骤将bash的程序和依赖复制到/mnt/my_chroot目录下,才能启动bash,对于该bash以及在bash中执行的命令来讲,/mnt/my_chroot将是它们的根目录/,它们将无法访问/mnt/my_chroot及其子目录以外的资源

    env在修改后的环境中运行命令

    env [选项] [环境变量=值] [命令]

    • 默认输出当前用户的所有环境变量,如果指定了环境变量赋值语句和命令,则该命令会在新的环境变量中执行
    • -i 清除所有继承的环境变量,在一个干净环境中执行命令
    • -u 变量名:删除指定的变量,再执行命令
    • -C 文件名:在指定目录下运行命令,而不改变当前的工作目录
    1.在添加了新环境变量后,在新环境中执行命令 env MY_VAR=hello bash -c 'echo $MY_VAR' 2. 在删除了某个变量的环境中执行命令 env -u MY_VAR bash -c 'echo $MY_VAR' 3.在在/tmp目录下执行ls命令,但不改变当前Shell的工作目录 env -C /tmp ls 4.从file.env文件中批量加载环境变量并通过env命令输出验证 source file.env && env 5.在脚本首行指定解释器路径 #!/usr/bin/env python3 如果直接使用 #!/usr/bin/python3,在某些系统中,python3可能并不位于/usr/bin目录下,可能导致系统无法找到解释器,而使用#!/usr/bin/env python3,系统会尝试前往环境变量的PATH中查看python3的位置,提高脚本的通用性

    nohub退出终端时继续执行命令

    当命令或脚本正在运行时,如果此时退出了当前用户或shell终端,那么这些从该终端启动的进程也会随之退出(shell终端会向它们发送SIGHUP信号)。如果希望这些进程在退出用户或shell后仍能继续运行,则需要用一个特殊的命令nohup来阻断所有发送给该进程的SIGHUP信号,这样命令或脚本在shell退出时会继续运行,其语法为:

    nohub 命令或脚本
    e.g.该命令也可以和&一起用,使脚本在后台执行并在终端退出时继续执行 nohub ./test.sh &

    我们使用的脚本和命令都是都和终端会话(pts/0)联系在一起的(可以通过ps命令查看该命令由哪个终端发起),退出终端时,如果存在被停止的进程或后台未执行完的进程,大部分终端会提醒还有后台任务正在进行。在使用nohub命令后,该命令会解除终端与进程的关联,进程也就不再同STDOUT和STDERR联系在一起。为了保存脚本或命令产生的输出,nohup命令会在当前路径下创建一个名为nohup.out的文件,并将STDOUT和STDERR的消息重定向到该文件中。如果当前路径下无法创建或写入nohup.out,则会尝试创建$HOME/nohup.out,如果这两个文件都无法创建,命令将不执行。也可以将其输出重定向到nohup.out以外的文件

    nohup ls > make.log

    timeout限制命令执行时间

    如果命令在到达指定时间后仍在运行,则将其终止,防止命令或脚本长时间挂起或无限循环的进程持续占用系统资源

    timeout [选项] 时间 命令

    • 时间后缀可以为s(秒)、m(分钟)、h(小时)、d(天)
    • -s 信号名或信号编号:超时后发送指定的信号,默认为SIGTERM
    • -‌-preserve-status 超时后返回被终止命令的退出状态码,而不是timeout命令的退出状态码
    • -‌-foreground 让目标命令在前台运行,即使timeout在后台调用
    • -k 时间time:默认情况下,timeout命令会在到达指定时间后向命令发出SIGTERM信号或-s选项指定的信号,但这些信号可能会被捕获,或者由于需要保存数据进程会保留一段时间。-k选项可以给与一个额外的时间time,如果进程在收到第一个信号后的time时间,仍然没有关闭,则timeout命令会发送SSIGKILL信号(不可捕获)来强制关闭进程,time也可以使用s、m、h、d为后缀
    1.指定命令的最长执行时间 timeout 10s ping google.com 2. 让vim在前台运行,并且只能运行30s timeout --foreground 30s vim 3. 限制tail -f命令运行10秒,在10s后发送SIGTERM信号 如果tail命令在收到SIGTERM信号后2秒内仍未退出,则 timeout 会发送SIGKILL信号,强制杀掉该进程 timeout -k 2s 10s tail -f /var/log/syslog

    调整谦让度

    Linux是多任务操作系统,进程在调用系统资源和占用CPU时间有不同的优先级,称之为调度优先级(scheduling priority),调度优先级由系统内核负责分配,nice命令可以通过调整niceness的值,影响调度程序计算程序的调度优先级。但注意,niceness只是给调度器的建议,调度器可以自由选择是否忽略它,即nice命令只能一定程度影响调度器的优先级计算方式,不直接作用调度优先级。

    默认情况下,普通进程的niceness值为0,为正常优先级,niceness的取值范围为-20(最高优先级)到+19(最低优先级),注意!值越小优先级越高

    nice指定调度优先级

    通过nice命令可以查看当前进程的优先级,如果要指定命令或脚本的调度优先级,可以使用下述语法:

    nice [选项] [命令]

    • 默认给与的niceness值为10
    • -n 值:给与指定的值,而不是默认的10
    • 只有root用户才能将进程的优先级值设置为负值,即只有root用户能提高进程的优先级,但允许所有用户降低进程的优先级
    nice命令中,-n选项可以直接替换为-值的形式 nice -n 10 ./test4.sh nice -10 ./test4.sh 调整优先级后,可以通过ps命令在NI一列查询到进程优先级 #ps -o pid,ppid ni,cmd PID PPID NI CMD 4993 4721 10 /bin/bash ./test4.sh
    renice修改调度优先级

    如果要调整已运行命令的优先级,可以使用renice命令(需要通过进程PID修改):

    renice -n 值 -p 进程PID

    • 只能对属于该用户的进程执行renice
    • 普通用户只能通过renice降低进程的优先级
    • root用户可以通过renice来任意调整进程的优先级

    stdbuf调整命令的I/O缓冲

    stdbuf命令用于临时更改命令的标准输入(stdin)、标准输出(stdout)和标准错误(stderr)的缓冲模式,缓冲模式有三种:

    • 行缓冲(line buffered):每一行数据写入或读取时刷新缓冲区(遇到换行符时刷新),适合用于交互式命令行工具
    • 完全缓冲(fully buffered):缓冲区填满后再输出或输入,通常用于非交互式操作,提高性能
    • 无缓冲(unbuffered):数据立即写入或读取,不经过缓冲

    stdbuf适用于那些使用C标准库(glibc) I/O函数(如fread()和 fwrite())来处理标准输入、标准输出或标准错误的程序,如:cat、grep、sed、awk、cut、sort、head、tail、echo、printf、ls、read(作为 shell内置命令时,可能不生效,但作为外部命令时有效)、tee、tr、find、xargs、cut、wc,stdbuf无法处理那些直接使用系统调用(read()和write())作为I/O处理的函数,如:dd命令

    stdbuf 选项 命令

    • -i 模式:调整标准输入流的缓冲
    • -o 模式:调整标准输出流的缓冲
    • -e 模式:调整标准错误流的缓冲
    • 模式可以取以下值:
      • 0:无任何缓冲,此模式下数据会被立刻输出
      • L:使用行缓冲模式,此模式下,输出数据会被合并,直到输出换行符,该选项对标准输入无效
      • 值size:使用完全缓冲模式并指定缓冲区大小,size的值可以使用K、KB等单位
    e.g.假设 echo 命令通常是按行缓冲的,当重定向到文件或管道中时,它可能会变成全缓冲。为了使 echo 在管道中也能立即输出,可以使用 stdbuf -o0 echo "Hello, World!" | cat -o0 表示标准输出为无缓冲

    软件安装

    Linux中的软件安装包一般分为两种:源码包和二进制包

    源码包:一般是使用C语言编写但未经过编译的包,安装时需要编译,所以时间长且安装步骤多,容易报错,但方便程序员阅读和修改源码

    二进制包:源码包经过编译后形成二进制包,安装简单,安装速度快,但依赖性强,需要安装其他环境。二进制包通常有两大主流的管理系统:

    • RPM 包管理系统:即Red-Hat Package Manager(红帽软件包管理器),大多数 Linux 发行版默认的包管理方式,如 Fedora、CentOS、SuSE 操作系统。
    • DPKG 包管理系统:为 “Debian” 专门开发的套件管理系统,主要应用在 Debian 和 Ubuntu 上

    RPM包安装的默认路径为:

    路径 文件
    /etc/配置文件
    /usr/bin/可执行命令安装目录
    /usr/lib/程序使用的函数库保存位置
    /usr/share/doc/基本的软件使用手册保存位置
    /usr/share/man帮助文件保存位置
    因此通过RPM包安装的软件,服务启动时会自动去默认路径下寻找可执行命令,红帽系列的操作系统可通过系统服务管理命令service、systemctl命令管理

    源码包安装路径自定义,一般安装在 /usr/local/软件名/路径下

    源码包安装

    由于未经过编译,源码包安装一般需要先安装gcc编译器。源码包的安装一般要经过

    1. 通过tar命令解压
    2. 进入解压缩的目录下
    3. 阅读INSTALL文件,INSTALL一般为安装说明
    4. 执行 ./configure设置安装在默认路径下,也可以使用 ./configure –prefix=/usr/local/路径自定义安装路径,执行完会根据配置项生成 Makefile 文件
    5. 执行make 命令进行编译。如果报错,除错后执行make clean删除编译产生的临时文件即可。
    6. 执行make install 命令进行安装
    7. 源码包的卸载只需删除安装目录即可,不会遗留任何垃圾文件。

    RPM包安装

    RPM包安装需要提前安装好软件的依赖环境

    RPM包

    RPM包全名类似于 httpd-2.2.3-29.el5.i386.rpm ,其命名规则为

    1. 包名
    2. 版本号,格式通常为“主版本号.次版本号.修正号”
    3. 发布次数,表示RPM包是第几次编译后发布的
    4. 适合的Liunx平台,如el5表示支持RHEL 5.x/CentOS 5.x下安装
    5. 适合的硬件平台,目前RPM支持的平台有:i386、i586、i686、sparc和alpha,noarch为支持所有硬件平台。
    6. 后缀名,.rpm是编译好的二进制包,可用rpm命令直接安装;.src.rpm表示是源码包,需要编译以后才能安装
      在安装软件时,有些命令后使用的是包的全名,有些命令使用的是包名,二者混用会导致软件无法安装
      rpm模块依赖查询网站: www.rpmfind.net
    安装升级与卸载
    1. rpm -[i或U]vh 包全名 安装或升级软件
    • -i  安装(install)
    • -U  升级(upgrade)
    • -v  显示详细信息(verbose)
    • -h  显示进度(hash)
    • - -nodeps  不检测依赖性(通常仅用于实验测试)
    1. rpm -e 包名 卸载软件
    • - -nodeps  不检测依赖性
    查询包信息
    1. 查询是否安装了某个包

    rpm -q 包名

    • -q  查询(query)
    2. 列出所有已经安装的rpm包

    rpm -qa 

    • -a  所有(all)
    3. 查询rpm包详细信息

    rpm -qi 包名

    • -i  查询信息(information)
    • -p  添加-p查询未安装包的信息(package),对于未安装的包,包名应为完整包名
    4. 查询包文件安装位置

    rpm -ql 包名

    • -l  列表(list)
    • -p  未安装包的信息(package),包名应为完整包名
    5. 查询某个系统文件属于哪个rpm包

    rpm -qf 文件名

    • -f  系统文件(file)
    6. 查询rpm包的依赖环境

    rpm -qR 包名

    • -R  查询包的依赖(requires)
    • -p  未安装包的依赖(package),包名应为完整包名
    包校验

    rpm -V 已经安装的包名

    校验包中的文件是否正确,会返回包的验证信息

    包文件提取

    rpm2cpio 包全名 | cpio -idv 文件绝对路径

    cpio:标准工具,用于创建档案文件和从档案文件中提取文件

    rpm2cpio命令用于将rpm包转换为cpio格式

    示例: rpm2cpio coreutils-8.4-19.el6.i686.rpm | cpio -idv ./bin/ls 该命令可用于 /bin 目录下的 ls 目录被误删除,因而无法使用 ls 命令时,从 coreutils-8.4-19.el6.i686.rpm 包中提取 ls 目录到 bin 目录下,修复 ls 命令

    yum操作

    yum是一个由RedHat社区开发,基于RPM包管理的Shell前端软件包管理器,被广泛用于Fedora、RedHat以及CentOS中。yum能自动从指定的服务器下载RPM包并且安装,并自动处理依赖性关系

    配置网络yum源

    网络yum源的配置文件路径为 /etc/yum.repos.d/CentOS-Base.repo ,配置信息类似于:

    [base] name=CentOS-$releasever - Base - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/os/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/os/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/os/$basearch/ gpgcheck=1 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7 #additional packages that extend functionality of existing packages [centosplus] name=CentOS-$releasever - Plus - mirrors.aliyun.com failovermethod=priority baseurl=http://mirrors.aliyun.com/centos/$releasever/centosplus/$basearch/ http://mirrors.aliyuncs.com/centos/$releasever/centosplus/$basearch/ http://mirrors.cloud.aliyuncs.com/centos/$releasever/centosplus/$basearch/ gpgcheck=1 enabled=0 gpgkey=http://mirrors.aliyun.com/centos/RPM-GPG-KEY-CentOS-7

    配置信息中各项配置解析:

    • [base]  容器名称,放在[]中
    • name  容器说明,自由写
    • mirrorlist  镜像站点
    • baseurl  yum源服务器地址,默认为CentOS官方地址,国内可使用阿里云镜像地址
    • enabled  该容器是否失效,enable=0为不生效,enable=1为生效但会略写。
    • gpgcheck  为1则RPM的数字证书失效,0为不生效
    • gpgkey  数字证书公钥文件保存位置

    yum安装软件

    yum命令中的包名不需要包的全名

    查询包

    yum list  列出所有可用的软件包

    yum search 关键字 搜索服务器上所有和关键字相关的包

    安装与升级

    yum -y install 包名

    • -y  对询问自动回答yes
    升级、卸载
    • yum -y update 包名
    • yum -y remove 包名
    升级时必须写包名,否则会升级所有包,包括Linux内核,会直接导致服务器崩溃。而卸载时会卸载包和包的所有依赖,但依赖可能还是其他包的依赖,因此可能导致其他软件功能失效,因此这两条命令慎用

    yum安装软件包组

    • yum grouplist  列出所有可用软件组
    • yum groupinstall 软件组名 安装软件组
    • yum groupremove 软件组名 卸载软件组

    服务管理

    通过源码包安装的程序,所有文件会统一放置于如 /usr/local/ 目录下,而通过RPM包安装的程序,不同文件会放在不同目录下,如:可执行命令文件放在 /usr/bin 目录下,配置文件放在 /etc目录下。通过RPM包安装的软件服务,可以通过脚本文件启动,也可以通过service或systemctl命令直接启动,当执行该命令时,Linux会默认前往/usr/bin 目录下寻找相关文件。而通过源码包安装的服务由于安装路径不同,就无法通过该命令直接启动,但也可以将启动命令文件生成链接放置在/usr/bin目录下,这样源码包安装的服务也可以通过该命令启动了。

    卸载软件时,通过源码包安装的程序直接删除对应文件即可,而通过RPM包安装的软件,由于文件散列分布,因此需要rpm -e 命令来卸载。

    服务查询

    查询服务开机自启动状态

    1. RPM包安装的应用服务

    chkconfig -‌-list

    查询所有RPM包安装的应用服务启动状态,会标出int0-6哪个级别系统启动状态下,服务会自启动。通过管道符可以查询指定服务的启动状态,如: chkconfig | grep nginx查看nginx服务的启动状态,在Centos7以后,该命令只能查看应用服务自启动情况,不包括系统本地服务,查看本地服务可以使用systemctl list-unit-files命令,使用管道符可以只查看指定服务的启动状况。

    2. 源码包安装的服务

    查看安装位置下对应服务的配置文件,一般位于 /usr/local/路径下。

    RPM服务管理

    独立服务管理

    常用文件路径

    路径 说明
    /etc/init.d 启动脚本位置
    /etc/xinetd.d 基于xinetd 服务的启动脚本
    /etc/sysconfig 初始化环境配置文件
    /etc 配置文件位置
    /etc/xinetd.conf xinetd 配置文件
    /var/lib 放置服务产生的数据
    /var/log 日志
    独立服务命令
    • /etc/init.d/服务名 start/stop/status/restart

    • service/systemctl 服务名 start/stop/status/restart  红帽系列系统专属

    独立服务自启动
    • 将启动程序的命令写入 /etc/rc.d/rc.local文件中,系统启动后会自动执行该文件中的所有命令
    • chkconfig 服务名 on/off  开启、关闭自启动,默认在2345运行级别下自启动
    基于xinetd(超级守护进程)服务

    xinetd负责管理系统中不频繁使用的服务,这些服务程序在有请求时才由xinetd服务负责启动运行,一旦完成服务请求服务程序结束运行,以减少对系统资源的占用。

    基于 xinetd 的服务没有自己独立的启动脚本程序,需要依赖 xinetd 的启动脚本来启动。xinetd 本身是独立的服务,启动xinetd 服务的方法和启动独立服务的方法一致。

    基于 xinetd 的服务只需修改 /etc/xinetd.d/服务名 文件下的 /disable no,然后重启xinetd 服务即可

    xinetd常用于红帽系列的操作系统,需要用户自行安装

    源码包安装的服务管理

    服务启动

    源码包安装的服务一般通过绝对路径下的脚本启动,具体路径需查看安装说明INSTALL文件。

    自启动

    将启动程序的命令写入 /etc/rc.d/rc.local文件中,系统启动后会自动执行该文件中的所有命令

    查看开机时服务启动顺序

    Linux开机或关机时的服务启动/关闭顺序写于文件 /etc/rc.d/路径下的对应文件中, rc0-rc6 文件中分别书写有系统不同启动级别下服务启动顺序。如 rc3 中,S85nginx表示系统启动时,nginx将是第85个启动的服务,K15nginx表示系统关机时,nginx将是第15个关闭的服务。

    alternatives工具

    alternatives简介

    alternatives工具常用于指定默认软件、默认配置,或者某一软件的默认版本。

    如:在Linux中,yum等工具一般使用python2作为命令解释器,而一些较新的软件依赖较新版的python3。因此有时我们不得不同时安装python2和python3。如果使用 python3 作为默认的python版本,使用yum会抛出错误,这是因为使用了python3解析yum中python2的语法,同理,一些较新的软件也无法使用python2解析。此时,我们就需要使用alternatives来控制软件的默认版本。

    alternatives的使用方法是:给定两个软件或多个软件的路径,然后将它们注册为一个组,为这个组建立一个软链接,之后调用软件将直接从这一软链接调用

    alternatives命令

    注册组

    alternatives -‌-install <link> <name> <path> <priority>

    • -‌-install 注册(新增)需要管理的命令/软件
    • link:注册路径,会在该路径下生成一个软链,此后由该软链启动命令
    • name:组名
    • path:软件/命令的路径,将该路径下的命令加入alternatives管理组
    • priority:权值,在自动模式下,权值越高,软件优先级越高
    其他命令
    • alternatives -‌-config <name> 修改默认配置(将进入交互模式,并切换为手动模式)
    • alternatives -‌-set <name> <path> 修改默认配置(将切换为手动模式)
    • alternatives -‌-auto <name> 切换为自动模式
    • alternatives -‌-display <name> 显示对应组的配置信息(包括自动/手动模式,路径,权值)
    • alternatives -‌-remove <name> <path> 删除组中对应路径的软件
    • alternatives -‌-list 列出所有组的信息(组名、自动/手动模式、当前默认软件路径)

    示例

    1. 注册组

    /usr/bin目录下有python2.7与python3.7的启动命令,我们可以新建python组,将python2和python3的启动路径加入到该组中,并指定python3为默认版本,此后直接执行python命令将唤醒python3,而不用再指定明确的版本号,且将默认唤醒python3,该默认值是可以随时更改的

    # alternatives --install /usr/bin/python python /usr/bin/python2.7 10 # alternatives --install /usr/bin/python python /usr/bin/python3.6 20

    上述命令

    • 将在 /usr/bin 目录下新建名为 python 的软链接,该软链接指向/etc/alternatives/python,该链接又指向/usr/bin/python3.6
    即 /usr/bin/python --> /etc/alternatives/python --> /usr/bin/python3.6
    • 修改默认值,修改的是/etc/alternatives/python的指向,即默认值为python2.7时,/etc/alternatives/python链接指向将修改为/usr/bin/python2.7
    • python3.6的权值为20,python2.7的权值为10,自动模式下,alternatives将优先调用python3.6
    • 生成链接名可以任意自定义,并且调用命令也将相应修改,如:
      alternatives --install /usr/bin/py ppyy /usr/bin/python3 10
      调用命令将变为py:
      py --version #同python3 --version命令
    2. 修改默认值
    alternatives --config python
    将进入交互模式,让你输入序号选择版本
    There are 2 programs which provide 'python'. Selection Command ----------------------------------------------- 1 /usr/bin/python2.7 *+ 2 /usr/bin/python3.6

    Enter to keep the current selection[+], or type selection number:

    +号为当前生效的版本,*为新增版本

    3. 查看python组信息
    alternatives --display python
    python - status is manual. #python处于手动模式 link currently points to /usr/bin/python3.6 #当前默认使用python3.6版本 /usr/bin/python2.7 - priority 10 #可选版本信息 /usr/bin/python3.6 - priority 20 Current `best' version is /usr/bin/python3.6.
    4. 从组中删除python3.6版本
    alternatives --remove python /usr/bin/python3.6
    从python组中移除3.6版本,将只剩2.7版本可选

    定时任务

    at命令

    at命令用于预设脚本或命令的运行时间,at命令的守护进程atd会以后台模式运行,检查作业队列来运行作业。大多数Linux发行版会在启动时运行此守护进程,atd守护进程会检查系统上的一个特殊目录(通常位于/var/spool/at)来获取用at命令提交的作业。默认情况下,atd守护进程会每60秒检查一下这个目录,并获取作业预定的运行时间。at命令的语法为:

    at [选项] 时间

    • 默认情况下,输入at+时间后,at命令会进入交互模式开始接收需要执行的命令,输入完毕后通过Ctrl+D完成输入
    • 如果已经错过指定时间,则命令会在第二天的同一时间再执行
    • -f 文件名:到指定时间执行该脚本
    • -q 字母:指定队列字母
    • -M 屏蔽脚本或命令的输出信息

    at命令支持的时间格式很多,包括:

    • 具体的精确时间,如:at 10:30、at 2pm、at 2024-06-21 15:00
    • 相对时间,如:at now + 1 hour、at now + 2 days、at 3pm tomorrow、at 10:30am + 1 week
    • 特定命名时间,如:at now(立即执行)、at noon(中午12:00)、at midnight(午夜12:00)、at teatime(下午茶时间4:00)、
    • AM/PM指示符,如:at 10:15PM
    • 标准日期格式(MMDDYY、MM/DD/YY或DD.MM.YY)
    • 文本日期,比如Jul 4或Dec 25,加不加年份均可
    e.g.在一分钟后执行ls命令 at now + 1 minute at> ls #进入交互模式接收命令 (Ctrl+D结束输入) 或 echo "ls" | at now + 1 minute e.g. 执行脚本 at -f ./test.sh

    在使用at命令时,该作业会被提交到作业队列(job queue)。作业队列会保存通过at命令提交的待处理的作业。针对不同优先级,存在26种不同的作业队列。作业队列通常用小写字母a-z和大写字母A-Z来指代,作业队列的字母排序越高,作业运行的优先级就越低(更高的nice值)。默认情况下,at的作业会被提交到a作业队列。如果想以更高优先级运行作业,可以用-q参数指定不同的队列字母。

    当作业在Linux系统上运行时,作业中的输出将不显示到屏幕上。取而代之的是,Linux系统会将提交该作业的用户的电子邮件地址作为STDOUT和STDERR。任何发到STDOUT或STDERR的输出都会通过邮件系统发送给该用户,这需要Linux安装了sendmail应用程序。如果未安装该程序,或者不需要脚本输出信息,应当做好重定向工作,或使用-M选项屏蔽作业产生的输出信息。

    查询at定时任务

    atq 查询at命令设置的作业

    该命令会返回了作业号、系统运行该作业的日期和时间及其所在的作业队列(字母)

    e.g.返回信息类似于 20 2015-07-14 13:03 = Christine 18 2015-07-15 13:03 a Christine 17 2015-07-14 16:00 a Christine 19 2015-07-14 13:30 a Christine
    删除at定时任务

    atrm 作业号 删除指定的作业

    普通用户只能删除自己提交的作业,无法删除其他用户的作业

    crond服务

    cron即计划任务,而crond则是一个常驻服务,在Linux中用于周期性执行某个任务,该服务的配置文件位于/etc/crontab

    查看crond服务运行情况

    ps aux | grep crond查看crond进程是否在运行,红帽系列的操作系统可使用service status crondsystemctl status crond(centos7+)

    查看crond服务是否开机自启动

    chkconfig -‌-list | grep crondsystemctl list-unit-files | grep crond(centos7+)

    设置crond定时任务

    可通过修改/etc/crontab文件来设置定时任务,同路径下还有 cron.daily,cron.weekly等对应时间记录crond任务的文件。也可以通过命令来修改crontab文件,语法为:

    crontab [参数]

    • -e  编辑crontab定时任务
    • -l  查询crontab定时任务
    • -r  删除当前用户所有crontab任务
    cron语法

    编辑定时任务时会打开vi编辑器,编辑语法格式需遵循cron语法,基本格式为:***** 命令

    • 第一个*表示一小时当中的第几分钟,范围为0-59
    • 第二个*表示一天当中的第几个小时,范围为0-23
    • 第三个*表示一个月当中的第几天,范围为1-31
    • 第四个*表示一年当中的第几个月,范围为1-12
    • 第五个*表示一周当中的星期几,范围为0-7(0和7都代表星期日)
    特殊符号 含义
    * 代表任何时间
    , 代表不连续的时间
    - 代表连续的时间范围
    */n 代表隔多久执行一次
    示例: 30 23 * * * 命令 //每天的23:30执行对应命令 0 1 1,15 * * 命令 //每个月1号和15号凌晨1:00执行命令 30 2 * * 1-3 命令 // 每周一到周三凌晨2点30执行命令 */10 4 * * * 命令 //每天凌晨4点,每隔10分钟执行一次命令,执行6次(即小时数超过4时就停止) 0 0 1,15 * 1 命令 //每个月1号,15号和每周一凌晨00:00执行一次命令 0 2 1 * * /sbin/shutdown -r now 每个月1号凌晨2:00重启Linux

    日志服务

    rsyslog服务

    Syslog(系统日志协议)是在一个IP网络中转发系统日志信息的标准,syslogd服务被广泛用于老版Unix/Linux系统中负责记录系统日志,RSyslog是syslog的多线程增强版,CentOS6以后系统默认使用Rsyslogd服务记录系统日志。

    查询rsyslog服务是否在运行

    可使用命令ps aux | grep rsyslogd查看rsyslog进程是否在运行,红帽系列可使用命令systemctl status rsyslog查看

    查看rsyslog服务是否开机自启动
    • chkconfig –list |grep rsyslog
    • systemctl list-unit-files | grep rsyslog(centos7)

    日志文件

    系统日志默认保存在 /var/log 路径下,对应文件的作用:

    文件 说明
    /var/log/cron 定时任务相关日志
    /var/log/cups 打印系统的日志
    /var/log/dmesg 开机内核自检的信息,使用dmesg命令就是读取了该文件
    /var/log/btmp 错误登录日志,二进制文件,需通过lastb命令查看
    /var/log/lastlog 记录所有用户最后一次登录系统的日志,二进制文件,需通过lastlog命令查看
    /var/log/mailog 邮件日志
    /var/log/message 记录系统所有重要事件信息
    /var/log/secure 记录所有涉及用户账户和密码的信息,如:用户登录,添加用户,切换用户,sudo授权,修改密码等
    /var/log/wtmp 永久记录所有用户的登录、注销、系统启动、重启等信息,二进制文件,需使用last命令查看
    /var/log/utmp 记录当前登录的用户信息,并且随着用户注销、切换不断变化,使用w,who,users等命令查看

    使用RPM包安装的服务也会默认把日志文件放在/vat/log/服务名 路径下,但其日志由自身服务管理,而不归rsyslogd服务管理

    使用源码包安装服务的日志文件位于用户指定的安装路径下,一般位于 /usr/local路径下

    rsyslog日志格式

    日志文件通常由以下内容按顺序书写:

    • 事件产生时间
    • 服务器主机名
    • 产生事件的服务名
    • 事件的具体信息

    rsyslog日志配置文件

    该配置文件位于/etc/rsyslog.conf,配置文件决定了日志系统记录哪些级别的日志信息,文件的格式为 服务名[连接符]日志等级  日志记录位置

    服务名
    服务名称 说明
    auth 安全和认证相关信息
    authpriv 安全和认证相关信息(私有信息)
    cron 系统定时任务cront和At产生的日志
    daemon 守护进程相关的日志
    ftp ftp守护进程相关日志
    kern 内核产生的日志
    local0-local7 为本地预留的服务项
    lpr 打印系统产生的日志
    mail 邮件日志
    news 新闻服务器相关日志
    syslog rsyslog服务产生的日志
    user 用户等级类别产生的日志
    uucp uucp(数据传输协议)子系统的日志
    连接符
    连接符 说明
    . 表示比后面所写等级高(包含该等级)的日志都记录下来
    .= 只记录指定等级的日志
    .! 除了该等级,其余等级都记录
    日志等级
    等级 说明
    * 所有等级
    none 与*相反,不记录任何日志
    debug 调试信息
    info 通知信息,反馈系统状态
    notice 提醒信息,程序可能存在潜在错误,但不影响运行
    warning 警告信息,程序发现错误,暂且不影响运行
    err 错误信息,服务出错停止运行,需要修复
    crit 临界状态信息,服务宕机,且可能无法修复
    alert 警报信息,服务宕机,影响系统运行
    emerg 紧急信息,系统疼痛等级,系统濒临崩溃甚至已经崩溃
    日志记录位置

    日志记录位置可以是以下值:

    • 路径,写于本机指定位置,如:/var/log/lastlog
    • 系统设备,写于U盘或者通过打印机打印日志,如:/dev/lp0
    • 转发到远程主机或日志服务器,如:@192.168.0.100:514
    • 用户名,发送给指定用户,如:root
    • 忽略或丢弃日志,如:~ ,直接丢弃
    示例

    以下示例来源于centos7系统默认配置

    cron.* /var/log/cron 所有等级的cron日志写于/var/log/cron文件中 *.emerg :omusrmsg:* 出现疼痛等级的日志时,发送给所有用户 *.info;mail.none;authpriv.none;cron.none /var/log/messages 不记录任何私人身份验证消息 uucp,news.crit /var/log/spooler 将uucp,news服务crit和更高级别的日志信息保存在指定文件中

    日志轮替

    日志轮替用于用新日志覆盖旧日志,其配置文件位于/etc/logrotate.conf,需要相关功能只需在配置文件中添加对应参数就即可。

    参数 说明
    daily/weekly/monthly 日志轮替周期
    rotate 数字 保留日志文件的个数,0为不备份
    compress 日志轮替时,对旧日志进行压缩
    create 权限值 所有者 所属组 建立新日志,并指定日志文件的权限、所有者、所属组
    mail address 日志轮替时,日志内容发送到指定邮箱,如:mail 11@gmail.com
    missingok 日志不存在时,忽略该日志的警告信息
    notifempty 如果日志文件为空,则不进行轮替
    maxsize 大小 当日志文件到达指定大小,无论是否到轮替时间,都进行一次轮替,未到达指定大小但到达轮替周期,也进行轮替
    minsize 大小 到达轮替时间时,如果日志文件达到该最小值时就进行轮替,否则不进行轮替
    size 大小 时间周期设置无效,只有当日志文件大于指定大小才进行轮替
    dateext 使用日期作为日志轮替文件名
    dateext参数用于指定当前日期作为日志文件后缀名,如:secure-20210211。如果配置文件中没有该参数,则日志文件将以.1,.2作为文件名名后缀。如:当前日志文件为secure,进行轮替后该文件改名为secure.1,secure.1改为secure.2,而将新的日志文件命名为secure。
    配置文件内容

    通过RPM包安装的服务其日志会被自动识别配置轮替,通过源码包安装的服务需要自行添加配置,配置格式同本地配置的基本格式。

    # see "man logrotate" for details # rotate log files weekly weekly

    # keep 4 weeks worth of backlogs
    rotate 4

    # create new (empty) log files after rotating old ones
    create

    # use date as a suffix of the rotated file
    dateext

    # uncomment this if you want your log files compressed
    #compress

    # RPM packages drop log rotation information into this directory
    include /etc/logrotate.d

    # no packages own wtmp and btmp – we’ll rotate them here
    /var/log/wtmp {
    monthly
    create 0664 root utmp
    minsize 1M
    rotate 1
    }
    /var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
    }
    本地配置格式(若某参数同时设置了本地配置和全局配置,则本地配置生效)
    日志路径 {
    配置参数
    }
    如:
    /usr/local/apache/logs/access_log {
    daily //每天进行日志轮替
    create //日志轮替时新建日志,文件权限、所有者等信息默认
    rotate 30 //保留30份日志文件(即保留30天)
    }

    手动进行日志轮替

    logrotate [参数] 配置文件名

    不添加任何参数时,将按配置文件进行轮替

    • -v 显示日志轮替的过程
    • -f 无论是否达到轮替配置要求,强制进行日志轮替

    备份与恢复

    备份

    完全备份:即把所有需要备份的数据全部备份, 在Linux 中,完全备份指将根目录下的所有文件进行备份。

    增量备份:指第一次进行完全备份,服务器运行一段时间后,比较当前数据和第一次备份数据之间的差异,只备份有差异的数据,之后的每次备份都只备份与上一次备份有差异的数据。

    一般需备份的数据
    • /root/ 管理员账户根目录
    • /home/ 普通用户家目录
    • /var/spool/mail 邮件
    • /etc/ 重要服务的配置文件
    • /var/log 常用服务的日志
    • 数据库数据、账户资料….

    dump文件备份系统

    1. 安装dump
    • yum -y install dump (redhalt系列)
    • apt-get install dump (debian系列)
    2. dump命令

    dump [参数] 备份后文件名 原文件或目录

    • -[0-9级别] 可选0-9备份级别
    • -f 文件名 指定备份后的文件名
    • -u 备份成功后,把备份时间、备份级别等信息记录在 /etc/dumpdates 文件中
    • -v 显示备份过程中更多的输出信息
    • -j 调用 bzlib 库压缩备份文件,其实就是把备份文件压缩为 .bz2 格式,默认压缩等级为2
    • -W 显示允许被 dump 的分区的备份等级及备份时间
    3.备份操作

    对于某个文件或不是分区的目录,dump只能使用 0 级别进行完全备份。而备份分区或整块硬盘时,dump 通过“备份级别”实现增量备份,其中,0 级别是完全备份,1-9为增量备份。

    当我们备份数据时,第一次备份应该使用 0 级别,dump会把所有数据完全备份一次;第二次备份就可以使用 1 级别了,它会和 0 级别进行比较,把 0 级别备份之后变化的数据进行备份;第三次备份使用 2 级别,2 级别会和 1 级别进行比较,把 1 级别备份之后变化的数据进行备份,以此类推。

    备份目录
    # dump -0uj -f /new/home.bak.bz2 /home/ 完全备份home目录到/new/home.bak.bz2路径下
    备份分区
    #df -h 查看分区信息 # dump -0uj -f /root/boot.bak.bz2 /boot/ 第一次备份进行完全备份,记录备份信息 # dump -1uj -f /root/boot.bak1.bz2 /boot/ 第二次开始使用增量备份 # dump -W 查询分区的备份时间及备份级别(需要备份的时候添加u参数)

    restore还原dump备份的文件

    restore [模式选项] [-f 文件名]

    -f用于指定备份文件文件名,模式选项有四个,只能选一个模式

    • -C 比较模式,比较备份数据和现有数据的不同并返回(只能检测出数据修改或减少的部分,如果新增了数据不会被检测到)
    • -i 交互模式,手动选择需要恢复的文件
    • -t 查看模式,用于查看备份文件中拥有哪些文件和目录
    • -r 还原模式,用于数据还原(如果是增量备份,则需先还原首次完全备份的数据)
    # restore -r -f /root/boot.bak.bz2 先还原增量备份中首次备份的数据 # restore -r -f /root/boot.bak.bz2 再还原第二次开始增量备份的数据
    一般使用bak作为系统备份文件名后缀
    上一篇:Linux命令补充
    下一篇:Linux用户与权限管理
    z z z z z