2 万字系统总结,带你实现 Linux 命令自由
篇幅太长,获取上部分请点击浏览:👉红帽认证👉技术资料
通配符和其他特殊符号
通配符
通配符 | 作用 |
---|---|
? | 匹配一个任意字符 |
* | 匹配 0 个或任意多个任意字符,也就是可以匹配任何内容 |
[] | 匹配中括号中任意一个字符。例如:[abc] 代表一定匹配一个字符,或者是 a, 或者是 b, 或者是 c. |
[-] | 匹配中括号中任意一个字符,- 代表一个范围。例如:[a-z] 代表匹配一个小写字母。 |
[^] | 逻辑非,表示匹配不是中括号内的一个字符。例如:0-9 代表匹配一个不是数字的字符。 |
通配符是用来匹配文件名的。
Bash 中其他特殊符号
符号 | 作用 |
---|---|
” | 单引号。在单引号中所有的特殊符号,如 “$” 和 “`” (反引号)都没有特殊含义。 |
“” | 双引号。在双引号中特殊符号都没有特殊含义,但是 “$”, “`” 和 “\” 是例外,拥有“调用变量的值”、“引用命令” 和 “转义符” 的特殊含义。 |
“ | 反引号。反引号括起来的内容是系统命令,在 Bash 中会先执行它。和 $() 作用一样,不过推荐使用 $(), 因为反引号非常容易看错。 |
$() | 和反引号作用一样,用来引用系统命令。 |
# | 在 Shell 脚本中,# 开头的代表注释。 |
| 用于调用变量的值,如需要调用变量 name 的值时,需要用name 的方式得到变量的值。 | |
\ | 转义符,跟在 \ 之后的特殊符号将失去特殊含义,转为普通字符。如 \$ 将输出 “$” 符号,而不当作是变量引用。 |
Bash 变量
用户自定义变量
1. 什么是变量?
2. 变量设置规则
- 变量名称可以由字母、数字、下划线组成,但是不能以数字开头。如果变量名是 “2name” 则是错误的。
- 在 Bash 中,变量的默认类型都是字符串型,如果要进行数字运算,则必须指定变量类型为数值型。
3. 变量分类
- 用户自定义变量
- 环境变量:这种变量中主要保存的是和系统操作环境相关的数据。
- 位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的。
- 预定义变量:是 Bash 中已经定义好的变量,变量名不能自定义,变量作用也是固定的。
3.1 本地变量
- 变量定义
$ name="Attachee Woo"
- 变量叠加
$ aa=123
$ aa="$aa"456
$ aa="$aa"789
- 变量调用
$ echo $name
- 变量查看
$ set
- 变量删除
$ unset name
3.2 环境变量
作用范围:用户自定义变量值在当前的 Shell 中生效,而环境变量会在当前 Shell 和这个 Shell 的所有子 Shell 当中生效。如果把环境变量写入相应的配置文件,那么这个环境变量就会在所有的 Shell 中生效。
设置环境变量
- 申明变量:$ export 变量名=变量值
- 查询变量:$ env
- 删除变量:$ unset 变量名
系统常见环境变量
- PATH: 系统查找命令的路径
$ echo $PATH
-
$ PATH="$PATH":/root/sh # PATH 变量叠加
- PS1: 定义系统提示符的变量
- \d: 显示日期,格式为“星期 月 日”
- \h: 显示简写主机名。如默认主机名 “localhost”
- \t: 显示 24 小时制时间,格式为“HH:MM:SS”
- \T: 显示 12 小时制时间,格式为“HH:MM:SS”
- \A: 显示 24 小时制时间,格式为“HH:MM”
- \u: 显示当前用户名
- \w: 显示当前所在目录的完整名称
- \W: 显示当前所在目录的最后一个目录
- \#: 执行的第几个命令
- $: 提示符。如果是 root 用户会显示提示符为 “#”, 如果是普通用户会显示提示符为 “$”
3.3 位置参数变量
位置参数变量 | 作用 |
---|---|
$n | n 为数字,$0 代表命令本身,$1-$9 代表第一到第九个参数,十以上的参数需要用大括号包含,如 ${10}. |
$* | 这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体 |
$@ | 这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待 |
$# | 这个变量代表命令行中所有参数的个数 |
3.4 预定义变量
预定义变量 | 作用 |
---|---|
$? | 最后一次执行的命令的返回状态。如果这个变量的值为 0,证明上一个命令正确执行;如果这个变量的值为非 0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。 |
$$ | 当前进程的进程号(PID) |
$! | 后台运行的最后一个进程的进程号(PID) |
接收键盘输入
$ read [-options] [variable]
- 选项:
- -p “提示信息” 在等待 read 输入时,输出提示信息
- -t 时间 read 命令会一直等待用户输入,使用此选项可以指定等待时间
- -n 字符数 read 命令只接受指定的字符数,就会执行
- -s 隐藏输入的数据,适用于机密信息的输入
数值运算符与运算符
方法一
- $ declare [+/-] [-options] 变量名
- 选项
-
给变量设定类型属性+
取消变量的类型属性-i
将变量声明为整数型(integer)-x
将变量声明为环境变量-p
显示指定变量的被声明的类型
方法二
expr
或let
数值运算工具
$ aa=11
$ bb=22
$ dd=$( expr $aa + $bb )
# "+" 两侧的空格不能省略
方法三 ★
$((运算式))
或$[运算式]
$ aa=11
$ bb=22
$ ff=$(( $aa + $bb ))
$ gg=$[ $aa + $bb ]
运算符
优先级 | 运算符 | 说明 |
---|---|---|
13 | -, + | 单目负、单目正 |
12 | !, ~ | 逻辑非、按位取反或补码 |
11 | *, /, % | 乘、除、取模 |
10 | +, – | 加、减 |
9 | <<, >> | 按位左移、按位右移 |
8 | <=, >=, <, > | 小于等于、大于等于、小于、大于 |
7 | ==, != | 等于、不等于 |
6 | & | 按位与 |
5 | ^ | 按位异或 |
4 | | | 按位或 |
3 | && | 逻辑与 |
2 | || | 逻辑或 |
1 | =, +=, -=, *=, /=, %=, &=, ^=, |=, <<=, >>= | 赋值、运算且赋值 |
环境变量配置文件简介
1. source
命令
- 命令格式:source 配置文件 或 . 配置文件//
. source
中的.
就是source
,它俩一个作用,注意,.
后面有 1 空格。
2. 环境变量配置文件简介
- /etc/profile
- /etc/profile.d/*.sh
- ~/.bash_profile
- ~/.bashrc
- /etc/bashrc
其他配置文件和登录信息
1. 注销时生效的环境变量配置文件
- ~/.bash_logout
2. 其他配置文件
- ~/bash_history// 前面见过的历史命令记录文件
3. Shell 登录信息
- 本地终端的欢迎信息:/etc/issue
转义符 | 作用 |
---|---|
\d | 显示当前系统日期 |
\s | 显示操作系统名称 |
\l | 显示登录的终端号,这个比较常用。 |
\m | 显示硬件体系结构,如 i386, i686 等 |
\n | 显示主机名 |
\o | 显示域名 |
\r | 显示内核版本 |
\t | 显示当前系统时间 |
\u | 显示当前登录用户的序列号 |
登录后欢迎信息:/etc/motd
不管是本地登录,还是远程登录,都可以显示此欢迎信息。
Shell 编程
基础正则表达式
- 正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。
grep
,awk
,sed
等命令可以支持正则表达式。 - 通配符用来匹配符合条件的文件名,通配符是完全匹配。
ls
,find
,cp
这些命令不支持正则表达式,所以只能使用 Shell 自己的通配符来进行匹配了。(*
,?
,[]
)
元字符 | 作用 |
---|---|
* | 前一个字符匹配 0 次或任意多次。 |
. | 匹配除了换行符外任意一个字符。 |
^ | 匹配行首。例如:^hello 会匹配以 hello 开头的行。 |
$ | 匹配行尾。例如:hello& 会匹配以 hello 结尾的行。 |
[] | 匹配中括号中指定的任意一个字符,只匹配一个字符。例如:[aoeiu] 匹配任意一个元音字母,[0-9] 匹配任意一位数字,[a-z] [0-9] 匹配小写字母和一位数字构成的两位字符。 |
[^] | 匹配除中括号的字符以外的任意一个字符。例如:[^0-9] 匹配任意一位非数字字符,[^a-z] 匹配任意一位非小写字母。 |
\ | 转义符。用于取消特殊符号的含义。 |
\{n\} | 表示其前面的字符恰好出现 n 次。例如:[0-9]\{4\} 匹配 4 位数字,[1] [3-8] [0-9]\{9\} 匹配手机号码。 |
\{n, \} | 表示其前面的字符出现不小于 n 次。例如:[0-9]\{2, \} 表示两位以上的数字。 |
\{n, m\} | 表示其前面的字符至少出现 n 次,最多出现 m 次。例如:[a-z]\{6, 8\} 匹配 6 到 8 位的小写字母。 |
字符截取命令
cut
, printf
, awk
, sed
cut 命令
- 命令格式:cut [-options] filename
- options:
- -f 列号: 提取第几列
- -d 分隔符: 按照指定分隔符分割列
- 示范:$ cut -d “:” -f 1,3 /etc/passwd
printf 命令
- 命令格式:printf ‘输出类型输出格式’ 输出内容
- 输出类型:
- %ns: 输出字符串。n 是数字,指代输出几个字符
- %ni: 输出整数。n 是数字,指代输出几个数字
- %m.nf: 输出浮点数。m 和 n 是数字,指代输出的整数位数和小数位数。如 %8.2f 代表输出 8 位整数,其中 2 是小数,6 位是整数。
awk 命令
- 命令格式:awk ‘pattern1{action1} pattern2{action2}…’ filename
- Pattern:
- x > 10 判断变量 x 是否大于 10
- x >= 10 大于等于
- x <= 10 小于等于
- action:
- 格式化输出
- 流程控制语句
- 范例:
$ awk '{printf $2 "\t" $6"\n"}' student.txt $ df -h | awk '{print $1 "\t" $5 "\t" $6}' $ awk 'BEGIN{printf "This is a transcript\n"}{printf $2 "\t" $6"\n"}' student.txt $ awk 'BEGIN{FS=":"} {print $1 "\t" $3}' /etc/passwd $ awk 'END{printf "The End\n"} {printf $2 "\t" $6"\n"}' student.txt
FS 内置变量指定分隔符;
BEGIN 在开始之前搞点 action;
END 在结束之后搞点 action.
- 关系运算符
$ cat student.txt | grep -v Name | awk '$6 >= 87 {printf $2}'
sed 命令
sed 是一种几乎包括在所有 UNIX 平台(包括 Linux)的轻量级流编辑器。sed 主要是用来将数据进行选取、替换、删除、新增的命令。
- 命令格式:sed [-options] ‘[action]’ filename
- options
- -n 一般 sed 命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过 sed 命令处理的行输出到屏幕。
- -e 允许对输入数据应用多条 sed 命令编辑
- -i 用 sed 的修改结果直接修改读取数据的文件,而不是屏幕输出
- action
- a \ 追加,在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用 “\” 代表数据未完结。
- c \ 行替换,用 c 后面的字符串替换原数据行,替换多行时,除最后一行外,每行末尾需用 “\” 代表数据未完结。
- i \ 插入,在当前行的前面插入一行或多行。插入多行时,除最后一行外,每行末尾需要用 “\” 代表数据未完结。
- d 删除,删除指定的行。
- p 打印,输出指定的行。
- s 字符替换,用一个字符串替换另一个字符串。格式为“行范围s/旧字串/新字串/g”(和 vim 中的替换格式类似)。
字符处理命令
排序命令 sort
- 命令格式:sort [-options] filename
- option
- -f 忽略大小写
- -n 以数值型进行排序,默认使用字符串型排序
- -r 反向排序
- -t 指定分隔符,默认的分隔符是制表符
- -k n[,m] 按照指定的字段范围排序。从第 n 字段开始,m 字段结束(默认到行尾)
- 示范:
$ sort /etc/passwd $ sort -r /etc/passwd $ sort -n -t ":" -k 3,3 /etc/passwd
统计命令 wc
- 命令格式:wc [-options] filename
- options
- -l 只统计行数
- -w 只统计单词数
- -m 只统计字符数
条件判断
按照文件类型进行判断
测试选项 | 作用 |
---|---|
-b file | 判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) |
-c file | 判断该文件是否存在,并且是否为字符设备文件(是字符设备文件为真) |
-d file | 判断该文件是否存在,并且是否为目录文件(是目录为真) |
-e file | 判断该文件是否存在(存在为真) |
-f file | 判断该文件是否存在,并且是否为普通文件(是普通文件为真) |
-L file | 判断该文件是否存在,并且是否为符号连接文件(是符号链接文件为真) |
-p file | 判断该文件是否存在,并且是否为管道文件(是管道文件为真) |
-s file | 判断该文件是否存在,并且是否非空(非空为真) |
-S file | 判断该文件是否存在,并且是否为套接字文件(是套接字文件为真) |
- 示范:
$ test -e /root/install.log $ [-e /root/install.log]
按照文件权限进行判断
测试选项 | 作用 |
---|---|
-r file | 判断该文件是否存在,并且是否该文件拥有读权限(有读权限为真) |
-w file | 判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真) |
-x file | 判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真) |
-u file | 判断该文件是否存在,并且是否该文件拥有 SUID 权限(有 SUID 权限为真) |
-g file | 判断该文件是否存在,并且是否该文件拥有 SGID 权限(有 SGID 权限为真) |
-k file | 判断该文件是否存在,并且是否该文件拥有 SBit 权限(有 SBit 权限为真) |
- 示范:
$ [ -w student.txt ] && echo yes || echo no
两个文件之间进行比较
测试选项 | 作用 |
---|---|
file1 -nt file2 | 判断 file1 的修改时间是否比 file2 的新(如果新则为真) |
file1 -ot file2 | 判断 file1 的修改时间是否比 file2 的旧(如果旧则为真) |
file1 -ef file2 | 判断 file1 是否和 file2 的 Inode 号一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法 |
两个整数之间比较
测试选项 | 作用 |
---|---|
整数1 -eq 整数2 |
判断 整数1 是否和 整数2 相等(相等为真) |
整数1 -ne 整数2 |
判判断 整数1 是否和 整数2 不相等(不相等为真) |
整数1 -gt 整数2 |
判断 整数1 是否大于 整数2 (大于为真) |
整数1 -lt 整数2 |
判断 整数1 是否小于 整数2 (小于为真) |
整数1 -ge 整数2 |
判断 整数1 是否大于等于 整数2 (大于等于为真) |
整数1 -le 整数2 |
判断 整数1 是否小于等于 整数2 (小于等于为真) |
字符串的判断
测试选项 | 作用 |
---|---|
-z 字符串 | 判断字符串是否为空(为空返回真) |
-n 字符串 | 判断字符串是否为非空(非空返回真) |
字串1 == 字串2 | 判断字符串 1 是否和字符串 2 相等(相等返回真) |
字串1 != 字串2 | 判断字符串 1 是否和 字符串 2 不相等(不相等返回真) |
- 范例:
$ name=sc $ [ -z "$name" ] && echo yes || echo no
多重条件判断
测试选项 | 作用 |
---|---|
判断1 -a 判断2 | 逻辑“与”,判断 1 和判断 2 都成立,最终的结果才为真 |
判断1 -o 判断2 | 逻辑“或”,判断 1 和 判断 2 有一个成立,最终的结果就为真 |
! 判断 | 逻辑“非”,是原始的判断式取反 |
流程控制
if 语句
if [ conditional expression ];then
// some codes
fi
// or
if [ conditional expression ]
then
// some codes
fi
多分支 if 条件语句
if [ conditional expresstion ];then
// some codes
elif [ conditional expression ];then
// some codes
... more elif...
else
// some codes
fi
case 语句
case
语句与 if...elif...else
语句一样都是多分支条件语句,不过和 if 多分支条件语句不同的是,case
语句只能判断一种条件关系,而 if
语句可以判断多种条件关系。
- 语法:
case $variable in "value1") // some codes ;; "value2") // some codes ;; ...more value... *) // some codes ;; esac
- 范例:
#!/bin/bash read -p "Please choose yes/no: " -t 30 cho case $cho in "yes") echo "Your choose is yes!" ;; "no") echo "Your choose is no!" ;; *) echo "Your choose is error!" ;; esac
for
语法一
for variable in value1 value2 value3...
do
// some codes
done
语法二
for (( i=1;i<=100;i=i+1))
do
// some codes
done
while
while
循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,直到条件判断式不成立,循环才会停止。这就和 for
的固定循环不太一样了。
while [ conditional expression ]
do
// some codes
done
until
until
循环,和 while
循环相反,until
循环时只要条件判断式不成立,则进行循环,并执行循环程序。一旦循环条件成立,则终止循环。
until [ conditional expression ]
do
// some codes
done
graph LR id1[Linux 服务] –> id2[RPM 包默认安装的服务] & id3[源码包安装的服务] id2 –> id4[独立的服务] & id5[基于 xinetd 服务]
LInux 系统进程
进程管理
查看进程
1. 进程简介
进程是正在执行的一个程序或命令,每一个进程都是一个运行的实体,都有自己的地址空间,并占用一定的系统资源。
2. 进程管理的作用
- 判断服务器健康状态
- 查看系统中所有进程
- 杀死进程
3. 查看系统中所有进程
- 进程查看命令:
- ps aux
a
代表所有前台进程、u
显示用户信息、x
显示所有后台信息 - ps -le
l
代表显示详细信息、e
显示所有进程
- ps aux
- USER: 该进程是由哪个用户产生的;
- PID: 进程的 ID 号;
- %CPU: 该进程占用 CPU 资源的百分比,占用越高,进程越耗费资源;
- %MEM: 该进程占用物理内存的百分比,占用越高,进程越耗费资源;
- VSZ: 该进程占用虚拟内存的大小,单位 KB;
- RSS: 该进程占用实际物理内存的大小,单位 KB;
- TTY: 该进程是在哪个终端中运行的。其中 tty1-tty7 代表本地控制台终端,tty1-tty6 是本地的字符界面终端,tty7 是图形终端。pts/0-256 代表虚拟终端。
- STAT: 进程的状态
- START: 该进程启动的时间
- TIME: 该进程占用 CPU 的运算时间,注意不是系统时间。
- COMMAND: 产生此进程的命令名
4. 查看系统健康状态
- 命令格式:top [-options]
- options
- -d 秒数 指定 top 命令每个几秒更新。默认是 3 秒
- 在 top 命令的交互模式当中可以执行的命令:
- ? 或 h 显示交互模式的帮助
- P 以 CPU 使用率排序,默认就是此项
- M 以内存的使用率排序
- N 以 PID 排序
- q 推出 top
5. 查看进程树
- 命令格式:pstree [-options]
- options
- -p 显示进程的 PID
- -u 显示进程的所属用户
终止进程
1. kill 命令
- 命令格式:kill -l
信号代号 | 信号名称 | 说明 |
---|---|---|
1 | SIGHUP | 该信号让进程立即关闭,然后重新读取配置文件之后重启。 |
2 | SIGINT | 程序终止信号,用于终止前台进程。相当于输出 ctrl+c 快捷键。 |
8 | SIGFPE | 在发生致命的算术运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为 0 等其它所有的算术的错误。 |
9 | SIGKILL | 用来立即结束程序的运行,本信号不能被阻塞、处理和忽略。一般用于强制终止进程。 |
14 | SIGALRM | 时钟定时信号,计算的是实际的时间或时钟时间。alarm 函数使用该信号 |
15 | SIGTERM | 正常结束进程的信号,kill 命令的默认信号。有时如果进程已经发生问题,这个信号是无法正常终止进程的,我们才会尝试 SIGKILL 信号,也就是信号 9. |
18 | SIGCONT | 该信号可以让暂停的进程恢复执行,本信号不能被阻断。 |
19 | SIGSTOP | 该信号可以暂停前台进程,相当于输出 ctrl+z 快捷键。本信号不能被阻断。 |
- 重启进程
$ kill -1 [pid]
- 强制杀死进程
$ kill -9 [pid]
2. killall 命令
- 命令格式:killall [-options] [signal] name
- options
- -i 交互式,询问是否要杀死某个进程
- -I 忽略进程名的大小写
3. pkill 命令
- 命令格式:pkill [-options] [signal] name
- options
- -t TerminalNumber 按照终端号踢出用户
工作管理
1. 把进程放入后台执行
# Method 1 后台运行
$ tar -zcf etc.tar.gz /etc &
# Method 2 后台暂停
$ top
# 在 top 命令执行的过程中,按下 ctrl+z 快捷键
2. 查看后台的工作
- 命令格式:jobs [-l]
- -l 显示工作的 PID
- 注:“+” 号代表最近一个放入后台的工作,也是工作恢复时,默认恢复的工作。“-” 号代表倒数第二个放入后台的工作
3. 将后台暂停的工作恢复到前台执行
- 命令格式:fg [%No.]
- [%No.] %号可以省略,但是注意工作号和 PID 的区别
4. 把后台暂停的工作恢复到后台执行
- 命令格式:bg [%No.]
- 注:后台恢复执行的命令,是不能和前台有交互的,否则不能恢复到后台执行
系统资源查看
1. vmstat 命令监控系统资源
- 命令格式:vmstat [delay] [times]
- 范例:$ vmstat 1 3
2. dmesg 开机时内核检测信息
- 命令格式:dmesg
- 范例:$ dmesg | grep CPU
3. free 命令查看内存使用状态
- 命令格式:free [-options]
- options
- -b 以字节为单位显示
- -k 以 KB 为单位显示,默认就是以 KB 为单位显示
- -m 以 MB 为单位显示
- -g 以 GB 为单位显示
缓冲和缓存的区别
简单来说缓存(cache)是用来加速数据从硬盘中“读取”的,而缓冲(buffer)是用来加速数据“写入”硬盘的。
4. 查看 cpu 信息
- 命令格式:cat /proc/cpuinfo
5. uptime 命令
- 命令格式:uptime
- 命令功能:显示系统的启动时间和平均负载,也就是 top 命令的第一行。
w
命令也可以看到这个数据。
6. 查看系统与内核相关信息
- 命令格式:uname [-options]
- options
- -a 查看系统所有相关信息;
- -r 查看内核版本;
- -s 查看内核名称。
判断当前系统的位数
$ file /bin/ls
查询当前 Linux 系统的发行版本
$ lsb_release -a
7. 列出进程打开或使用的文件信息
- 命令格式:lsof [-options]
- options
- -c someWords 只列出以字符串开头的进程打开的文件
- -u username 只列出某个用户的进程打开的文件
- -p pid 列出某个 PID 进程打开的文件
系统定时任务
1. crond 服务管理与访问控制
- $ service crond restart
- $ chkconfig crond on
2. 用户的 crontab 设置
- crontab [-options]
- options
- -e 编辑 crontab 定时任务
- -l 查询 crontab 任务
- -r 删除当前用户所有的 crontab 任务
- 范例
$ crontab -e # 进入 crontab 编辑界面。会打开 vim 编辑你的工作。 # 在 vim 中写入:* * * * * 执行的任务
项目 | 含义 | 范围 |
---|---|---|
第一个 * |
一小时当中的第几分钟 | 0-59 |
第二个 * |
一天当中的第几小时 | 0-23 |
第三个 * |
一个月当中的第几天 | 1-31 |
第四个 * |
一年当中的第几月 | 1-12 |
第五个 * |
一周当中的星期几 | 0-7(0 和 7 都代表星期日) |
特殊符号 | 含义 |
---|---|
* | 代表任何时间。比如第一个 * 就代表一小时中每分钟都执行一次的意思。 |
, | 代表不连续的时间。比如“0 8,12,16 * * * command”, 就代表在每天8点0分,12点0分,16点0分都执行一次命令 |
– | 代表连续的时间范围。比如“0 5 * * 1-6 command”, 代表在周一到周六的凌晨5点0分执行命令。 |
*/n | 代表每隔多久执行一次。比如“*/10 * * * * command”, 代表每个 10 分钟就执行一遍命令 |
Linux 日志管理
日志管理简介
1. 日志服务
在 CentOS 6.x 中日志服务已经由 rsyslogd 取代了原先的 syslogd 服务。rsyslogd 日志服务更加先进,功能更多。但是不论该服务的使用,还是日志文件的格式其实都是和 syslogd 服务相兼容的,所以学习起来基本和 syslogd 服务一致。
rsyslogd 的新特点
- 基于 TCP 网络协议传输日志信息;
- 更安全的网络传输方式;
- 有日志消息的及时分析框架;
- 后台数据库;
- 配置文件中可以写简单的逻辑判断;
- 与 syslog 配置文件相兼容。
确定服务启动
$ ps aux | grep rsyslogd
# 查看服务是否启动
$ chkconfig --list | grep rsyslog
查看服务是否自启动
2. 常见日志的作用
日志文件 | 说明 |
---|---|
/var/log/cron | 记录了系统定时任务相关的日志 |
/var/log/cups/ | 记录打印信息的日志 |
/var/log/dmesg | 记录了系统在开机时内核自检的信息。也可以使用 dmesg 命令直接查看内核自检信息。 |
/var/log/btmp | 记录错误登录的日志。这个文件是二进制文件,不能直接 vi 查看,而要使用 lastb 命令查看,命令如下 |
/var/log/lastlog | 记录系统中所有用户最后一次的登录时间的日志。这个文件也是二进制文件,不能直接 vi , 而要使用 lastlog 命令查看。 |
/var/log/mail.log | 记录邮件信息 |
/var/log/message | 记录系统重要信息的日志。这个日志文件中会记录 Linux 系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件。 |
/va/log/secure | 记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录。比如说系统的登录,ssh 的登录,su 切换用户,sudo 授权,甚至添加用户和修改用户密码都会记录在这个日志文件中。 |
/var/log/wtmp | 永久记录所有用户的登录、注销信息,同时记录系统的启动、重启、关机事件。同样这个文件也是一个二进制文件,不能直接 vi, 而需要使用 last 命令来查看。 |
/var/run/utmp | 记录当前已经登录的用户的信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样这个文件不能直接 vi, 而要使用 w, who, users 等命令来查询。 |
rsyslogd 日志服务
1. 日志文件格式
基本日志格式包含以下四列:
- 事件产生的时间;
- 发生事件的服务器的主机名;
- 产生事件的服务名或程序名;
- 事件的具体信息。
2. /etc/rsyslog.conf 配置文件
authpriv.*/var/log/secure
# 服务名称【连接符号】日志等级日志记录位置
# 认证相关服务.所有日志等级记录在 /var/log/secure 日志中
服务名称 | 说明 |
---|---|
auth | 安全和认证相关消息(不推荐使用 authpriv 替代) |
authpriv | 安全和认证相关消息(私有的) |
cron | 系统定时任务 cront 和 at 产生的日志 |
daemon | 和各个守护进程相关的日志 |
ftp | ftp 守护进程产生的日志 |
kern | 内核产生的日志(不是用户进程产生的) |
local0-local7 | 为本地使用预留的服务 |
lpr | 打印产生的日志 |
邮件收发信息 | |
news | 与新闻服务器相关的日志 |
syslog | 有 syslogd 服务产生的日志信息(虽然服务名称已经改为 rsyslogd, 但是很多配置都还是沿用了 syslogd 的,这里并没有修改服务名)。 |
user | 用户等级类别的日志信息 |
uucp | uucp 子系统的日志信息,uucp 是早期 linux 系统进行数据传递的协议,后来也常用在新闻组服务中。 |
连接符号
连接符号可以识别为:
*
代表所有日志等级,比如:authpriv.*
代表authpriv
认证信息服务产生的日志,所有的日志等级都记录.
代表只要比后面的等级高的(包含该等级)日志都记录下来。比如:cron.info
代表cron
服务产生的日志,只要日志等级大于等于 info 级别,就记录.=
代表只记录所需等级的日志,其他等级的都不记录。比如:*.=emerg
代表人和日志服务产生的日志,只要等级是emerg
等级就记录。这种用法极少见,了解就好.!
代表不等于,也就是除了该等级的日志外,其他等级的日志都记录。
日志等级
等级名称 | 说明 |
---|---|
debug | 一般的调试信息说明 |
info | 基本的通知信息 |
notice | 普通信息,但是有一定的重要性 |
warning | 警告信息,但是还不会影响服务或系统的运行 |
err | 错误信息,一般达到 err 等级的信息已经可以影响到服务或系统的运行了 |
crit | 临界状态信息,比 err 等级还要严重 |
alert | 警告状态信息,比 crit 还要严重。必须立即采取行动 |
emerg | 疼痛等级信息,系统已经无法使用了 |
日志记录位置
- 日志文件的绝对路径,如 “/var/log/secure”
- 系统设备文件,如 “/dev/lp0”
- 转发给远程主机,如 “@192.168.0.210:514”
- 用户名,如 “root”
- 忽略或丢弃日志,如 “~”
日志轮替
1. 日志文件的命名规则
轮替规则一
如果配置文件中拥有 “dateext” 参数,那么日志会用日期来作为日志文件的后缀,例如 “secure-20130605” 。这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可。
轮替规则二
如果配置文件中没有 “dateext” 参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的 “secure” 日志会自动改名为 “secure.1″,然后新建 “secure” 日志,用来保存新的日志。当第二次进行日志轮替时,”secure.1″ 日志会自动改名为 “secure.2”, 当前的 “secure” 日志会自动改名为 “secure.1”, 然后也会新建 “secure” 日志,用来保存新的日志,以此类推。
2. logrotate 配置文件
参数 | 参数说明 |
---|---|
daily | 日志的轮替周期是每天 |
weekly | 日志的轮替周期是每周 |
monthly | 日志的轮替周期是每月 |
rotate [No.] | 保留的日志文件的个数。0 指没有备份 |
compress | 日志轮替时,对旧的日志进行压缩 |
create mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组。如 create 0600 root utmp |
mail address | 当日志轮替时,输出内容通过邮件发送到指定的邮件地址。如 mail 3063630@qq.com |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
notifempty | 如果日志为空文件,则不进行日志轮替 |
minsize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。如 size 100k |
dateext | 使用日期作为日志轮替文件的后缀。如 secure-20130605 |
Linux 启动管理
CentOS 6.x 启动管理
系统运行级别
1. 运行级别
运行级别 | 含义 |
---|---|
0 | 关机 |
1 | 单用户模式,可以想象为 windows 的安全模式,主要用于系统修复 |
2 | 不完全的命令行模式,不含 NFS 服务 |
3 | 完全的命令行模式,就是标准字符界面 |
4 | 系统保留 |
5 | 图形模式 |
6 | 重启动 |
2. 运行级别命令
- 查看运行级别命令
$ runlevel
- 改变运行级别命令
$ init [No.]
3. 系统默认运行级别
- 系统开机后直接进入哪一个运行级别
$ vim /etc/inittab id:3:initdefault:
启动引导程序 grub
1. grup 中分区表示
硬盘 | 分区 | Linux 中设备文件名 | Grup 中设备文件名 |
---|---|---|---|
第一块 SCSI 硬盘 | 第一个主分区 | /dev/sda1 | hd(0,0) |
第二个主分区 | /dev/sda2 | hd(0,1) | |
扩展分区 | /dev/sda3 | hd(0,2) | |
第一个逻辑分区 | /dev/sda5 | hd(0,4) | |
第二块 SCSI 硬盘 | 第一个主分区 | /dev/sda1 | hd(1,0) |
第二个主分区 | /dev/sda2 | hd(1,1) | |
扩展分区 | /dev/sda3 | hd(1,2) | |
第一个逻辑分区 | /dev/sda5 | hd(1,4) |
2. grub 配置文件
$ vim /boot/grub/grub.conf
- default=0 默认启动第一个系统
- timeout=5 等待时间,默认是 5 s
- splashimage=(hd0,0)/grub/splash.xpm.gz 这里是指定 grub 启动时的背景图像文件的保存位置的
- hiddenmenu 隐藏菜单
Linux 备份与恢复
概述
1. Linux 系统需要备份的数据
- /root
- /home
- /var/spool/mail
- /etc
- others
安装服务的数据
- apache 需要备份的数据
- 配置文件
- 网页主目录
- 日志文件
- mysql 需要备份的数据
- 源码包安装的 mysql: /usr/local/mysql/data
- RPM 包安装的 mysql: /var/lib/mysql
2. 备份策略
完全备份
完全备份就是指把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录。
增量备份
Day 1
Backup
Added on Day 2
Added on Day 3
…
差异备份
Day 1
Backup
Added on Day 2
Added on Day 2 && Day 3
…
dump 和 restore 命令
dump
- 命令格式:
$ dump [-options] distinationFileName sourceFilename
- options
- -level 就是我们说的 0-9 是个备份级别
- -f filename 指定备份后的文件名
- -u 备份成功之后,把备份时间记录在 /etc/dumpdates 文件
- -v 显示备份过程中更多的输出信息
- -j 调用 bzlib 库压缩备份文件,其实就是把备份文件压缩为 .bz2 格式
- -w 显示允许被 dump 的分区的备份等级及备份时间
备份分区
备份命令。先执行一次完全备份,并压缩和更新备份时间
$ dump -0uj -f /root/boot.bak.bz2 /boot
查看备份时间文件
$ cat /etc/dumpdates
复制日志文件到 /boot 分区
$ cp install.log /boot
增量备份 /boot 分区,并压缩
$ dump -1uj -f /root/boot_inc1.bak.bz2 /boot
查询分区的备份时间及备份级别
$ dump -W
备份文件或目录
$ dump -0j -f /root/etc.dump.bz2 /etc
# 完全备份 /etc 目录,只能使用 0 级别进行完全备份,而不再支持增量备份
restore
- 命令格式:
$ restore [mode] [-options]
- mode
restore
命令常用的模式有以下四种,这四种模式不能混用。- -C 比较备份数据和实际数据的变化
- -i 进入交互模式,手工选择需要恢复的文件
- -t 查看模式,用于查看备份文件中拥有哪些数据
- -r 还原模式,用于数据还原
- options
- -f 指定备份文件的文件名
还原模式
还原 boot.bak.bz2 分区备份,先还原完全备份的数据
$ mkdir boot.test
$ cd boot.test
$ restore -r -f /root/boot.bak.bz2
恢复增量备份数据
$ restore -r -f /root/boot_inc1.bak.bz2
—END—
篇幅太长,获取上部分请点击浏览:👉红帽认证👉技术资料
想了解更多干货,可通过下方扫码关注
可扫码添加上智启元官方客服微信👇
I love how your posts always leave me inspired and excited.