Linux 入门学习笔记汇总
本文是我在 B 站跟随兄弟连沈超、李明两位老师
学习时做的笔记 2022 阿坦
转载请注明出处
如果喜欢,欢迎点赞、打赏
Linux 常用命令
命令格式:命令 [-选项] [参数]
例:ls -la /etc
Ⅰ 文件处理命令
ls
- 命令英文原意:list
- 命令所在路径:/bin/ls
- 执行权限:所有用户
- 功能描述:显示目录文件
- 语法:ls [-ald] [文件或目录]
- -a 显示所有文件,包括隐藏文件
- -l 详细信息显示(long)
- -d 查看目录属性
mkdir
- 命令英文原意:make directories
- 命令所有路径:/bin/mkdir
- 执行权限:所有用户
- 功能描述:创建新目录
- 语法:mkdir -p [目录名]
- -p 递归创建
cd
- 命令英文原意:change directory
- 命令所在路径:shell 内置命令
- 执行权限:所有用户
- 功能描述:切换目录
- 语法:cd [目录]
cp
- 命令英文原意:copy
- 命令所在路径:/bin/cp
- 执行权限:所有用户
- 功能描述:复制文件或目录
- 语法:cp -rp [原文件或目录] [目标目录]
- -r 复制目录
- -p 保留文件属性
mv
- 命令英文原意:move
- 命令所在路径:/bin/mv
- 执行权限:所有用户
- 功能描述:剪切文件、改名
- 语法:mv [原文件或目录] [目标目录]
rm
- 命令英文原意:remove
- 命令所在路径:/bin/rm
- 执行权限:所有用户
- 功能描述:删除文件
- 语法:rm -rf [文件或目录]
- -r 删除目录
- -f 强制执行
touch
- 命令所在路径:/bin/touch
- 执行权限:所有用户
- 功能描述:创建空文件
- 语法:touch [文件名]
cat
- 命令所在路径:/bin/cat
- 执行权限:所有用户
- 功能描述:显示文件内容
- 语法:cat [文件名]
- -n 显示行号
tac
- 功能描述:显示文件内容(反向列示)
more
- 命令所在路径:/bin/more
- 执行权限:所有用户
- 功能描述:分页显示文件内容
- 语法:more [文件名]
Space或f翻页Enter换行q或Q退出
less
- 命令所在路径:/usr/bin/less
- 执行权限:所有用户
- 功能描述:分页显示文件内容(可向上翻页)
- 语法:less [文件名]
- more 命令的
Space,f,Enter,q,Q按键功能都有PgUp向上翻页Up向上翻一行/搜索关键词n查找下一个关键词(next)
head
- 命令所在路径:/usr/bin/head
- 执行权限:所有用户
- 功能描述:显示文件前面几行
- 语法:head [文件名]
- -n 指定行数
tail
- 命令所在路径:/usr/bin/tail
- 执行权限:所有用户
- 功能描述:显示文件后面几行
- 语法:tail [文件名]
- -n 指定行数
- -f 动态显示文件末尾内容
ln
- 命令英文原意:link
- 命令所在路径:/bin/ln
- 执行权限:所有用户
- 功能描述:生成链接文件
- 语法:ln -s [原文件] [目标文件]
- -s 创建软链接(soft)
软连接特征:类似 windows 快捷方式
硬链接特征:
- 拷贝 cp -p + 同步更新
- 通过 id 识别
- 不能跨分区
- 不能针对目录使用
Ⅱ 权限管理命令
chmod
- 命令英文原意:change the permissions mode of a file
- 命令所在路径:/bin/chmod
- 执行权限:所有用户
- 功能描述:改变文件或目录权限
- 语法:chmod [{ugoa}{+-=}{rwx}] [文件或目录]
- [mod=421] [文件或目录]
- -R 递归修改
chown
- 命令英文原意:change file ownership
- 命令所在路径:/bin/chown
- 执行权限:所有用户
- 功能描述:改变文件或目录的所有者
- 语法:chown [user] [files or directories]
chgrp
- 命令英文原意:change file group ownership
- 命令所在路径:/bin/chgrp
- 执行权限:所有用户
- 功能描述:改变文件或目录的所属组
- 语法:chgrp [group] [files or directories]
umask
- 命令英文原意:the user file-creation mask
- 命令所在路径:Shell 内置命令
- 执行权限:所有用户
- 功能描述:显示、设置文件的缺省权限
- 语法:umask [-S]
- -S 以
rwx形式显示新建文件缺省权限
Ⅲ 文件搜索命令
find
- 命令所在路径:/bin/find
- 执行权限:所有用户
- 功能描述:文件搜索
- 语法:find [搜索范围] [匹配条件]
- -name -iname 根据文件名搜索
- -user 根据用户搜索
- -group 根据所属组查找
- -size [+-=n] 根据文件大小查找
- -amin -cmin -mmin 根据时间搜索
- -type f 文件 d 目录 l 软连接文件 根据文件类型查找
- -inum 根据 i 节点查找
- -a -o 用于连接两个条件,分别表示 “与”、“或”
- -exec/-ok {} \; 查找后接着执行额外的操作
$ find /etc -name inittab -exec ls -l {} \;
// 在 /etc 下查找 inittab 文件并显示其详细信息
locate
- 命令所在路径:/usr/bin/locate
- 执行权限:所有用户
- 功能描述:在文件资料库中查找文件
- 语法:locate 文件名
- -i 不分大小写
which
- 命令所在路径:/usr/bin/which
- 执行权限:所有用户
- 功能描述:搜索命令所在目录及别名信息
- 语法:witch 命令
whereis
- 命令所在路径:/usr/bin/whereis
- 执行权限:所有用户
- 功能描述:搜索命令所在目录及帮助文档路径
- 语法:whereis [cmd]
grep
- 命令所在路径:/bin/grep
- 执行权限:所有用户
- 功能描述:在文件中搜寻字符串匹配的行并输出
- 语法:grep -iv [指定字符串] [文件]
- -i 不分大小写
- -v 排除指定字符串
Ⅳ 帮助命令
man
- 命令英文原意:manual
- 命令所在路径:所有用户
- 功能描述:获得帮助信息
- 语法:man [命令或配置文件]
help
- 命令所在路径:Shell 内置命令
- 执行权限:所有用户
- 功能描述:获得 Shell 内置命令的帮助信息
- 语法:help 命令
另外,还可以使用 whatis 和 apropos 命令分别查看命令信息和配置文件信息。
Ⅴ 用户管理命令
useradd
- 命令所在路径:/usr/sbin/useradd
- 执行权限:root
- 功能描述:添加新用户
- 语法:useradd [username]
passwd
- 命令所在路径:/usr/bin/passwd
- 执行权限:所有用户
- 功能描述:设置用户密码
- 语法:passwd [username]
w
- 命令所在路径:/usr/bin/w
- 执行权限:所有用户
- 功能描述:查看登录用户详细信息
- 语法:w
Ⅵ 压缩解压命令
gzip
- 命令英文原意:GNU zip
- 命令所在路径:/bin/gzip
- 执行权限:所有用户
- 功能描述:压缩文件
- 压缩后文件格式:.gz
- 语法:gzip [file]
gunzip
- 命令英文原意:GNU unzip
- 命令所在路径:/bin/gunzip
- 执行权限:所有用户
- 功能描述:解压缩 .gz 的压缩文件
- 语法:gunzip [.gz file]
tar
- 命令所在路径:/bin/tar
- 执行权限:所有用户
- 功能描述:打包目录
- 压缩后文件格式:.tar.gz
- 语法:tar [-zcf] [压缩后文件名] [目录]
- -c 打包
- -x 解包
- -v 显示详细信息
- -f 指定文件名
- -z 压缩或解压缩,视打包还是解包而定
zip
- 命令所在路径:/usr/bin/zip
- 执行权限:所有用户
- 功能描述:压缩文件或目录
- 压缩后文件格式:.zip
- 语法:zip [-r] [压缩后文件名] [文件或目录]
- -r 压缩目录
unzip
- 命令所在目录:/usr/bin/unzip
- 执行权限:所有用户
- 功能描述:解压 .zip 的压缩文件
- 语法:unzip [.zip file]
bzip2
- 命令所在路径:/usr/bin/bzip2
- 执行权限:所有用户
- 功能描述:压缩文件
- 压缩后文件格式:.bz2
- 语法:bzip2 [-k] [file]
- -k 产生压缩文件后保留原文件
- 范例:
- $ bzip2 -k girl
- $ tar -cjf Japan.tar.bz2 Japan
bunzip2
- 命令所在路径:/usr/bin/bunzip2
- 执行权限:所有用户
- 功能描述:解压缩
- 语法:bunzip2 [-k] [.bz2 file]
- -k 解压缩后保留原文件(keep)
- 范例:
- $ bunzip2 -k Japan.bz2
- tar -xjf Japan.tar.bz2
Ⅶ 网络命令
write
- 指令所在路径:/usr/bin/write
- 执行权限:所有用户
- 功能描述:给用户发信息,以 Ctrl+D 保存结束
- 语法:write
- 范例:$ write lazzarone
wall
- 命令英文原意:write all
- 命令所在路径:/usr/bin/wall
- 执行权限:所有用户
- 功能描述:发广播信息
- 语法:wall [message]
- 范例:$ wall Hello, everyone!
ping
- 命令所在路径:/bin/ping
- 执行权限:所有用户
- 功能描述:测试网络连通性
- 语法:ping [-options] IP Address
- -c 指定发送次数
- 范例:$ ping 192.168.31.40
ifconfig
- 命令英文原意:interface configure
- 命令所在路径:/sbin/ifconfig
- 执行权限:root
- 功能描述:查看和设置网卡信息
- 语法:ifconfig 网卡名称 IP地址
- 范例:$ ifconfig eth0 192.168.8.250
- 命令所在路径:/bin/mail
- 执行权限:所有用户
- 功能描述:查看发送电子邮件
- 语法:mail [username]
- 范例:$ mail root
last
- 命令所在路径:/usr/bin/last
- 执行权限:所有用户
- 功能描述:列出目前与过去登入系统的用户信息
- 语法:last
- 范例:$ last
lastlog
- 命令所在路径:/usr/bin/lastlog
- 执行权限:所有用户
- 功能描述:检查某特定用户上次登录的时间
- 语法:lastlog
- 范例:$ lastlog -u 502
traceroute
- 命令所在路径:/bin/traceroute
- 执行权限:所有用户
- 功能描述:显示数据包到主机间的路径
- 语法:traceroute
- 范例:$ traceroute www.google.com
netstat
- 命令所在路径:/bin/netstat
- 执行权限:所有用户
- 功能描述:显示网络相关信息
- 语法:netstat [-options]
- -t TCP 协议
- -u UDP 协议
- -l 监听
- -r 路由
- -n 显示 IP 地址和端口号
- 范例:
- $ netstat -tlun 查看本机监听的端口
- $ netstat -an 查看本机所有的网络连接
- $ netstat -rn 查看本机路由表
setup
- 命令所在路径:/usr/bin/setup
- 执行权限:root
- 功能描述:配置网络(Red hat 才有这个命令)
- 语法:setup
mount
- 命令位置:/bin/mount
- 执行权限:所有用户
- 命令语法:mount [-t 文件系统] 设备文件名 挂载点
- 范例:$ mount -t iso9660 /dev/sr0/mnt/cdrom
Ⅷ 关机重启命令
shutdown
- 命令语法:shutdown [-options] [time]
- -c 取消前一个关机命令
- -h 关机
- -r 重启
其它一些关机命令:
- $ poweroff
- $ halt
- $ init 0
reboot
- 语法:reboot
还可以用:
- $ init 6
init
通过前面的开关机命令的介绍,可以看到,开关机都可以用 init 命令,关机是 init 0, 重启是 init 6. 那么,后面这个数字是什么意思呢?系统运行级别:
- 0 关机
- 1 单用户
- 2 不完全多用户,不含 NFS 服务
- 3 完全多用户
- 4 未分配
- 5 图形界面
- 6 重启
runlevel
- 功能描述:查询系统运行级别
- 语法:runlevel
Linux 软件包管理
简介
1. 软件包分类
源码包
是用字母数字和符号写的。
二进制包
由 0 和 1 构成。(RPM 包、系统默认包)
ACL 权限
ACL 权限简介与开启
- 涉及命令:
setfacl,getfacl- 命令功能:针对一个目录或文件,除了所属者、所属组、其他以外,如果还有新的角色或是新的组,需要独立设置权限,就可以使用
setfacl命令
需要回顾一下:
- 目录的读、写、执行权限如何理解?
- 文件的读、写、执行权限如何理解?
**2022-1-6 Atank**
File System
partprobe
- 命令功能:重读分区表信息
mkfs
- 命令功能:格式化分区
- 命令语法:mkfs [-options] [dev]
- 范例:$ mkfs -t ext4 /dev/sdb1
/etc/fstab 文件
- 文件作用:自动挂载配置
- 字段解释:
- 第一字段:分区设备文件名或 UUID
- 第二字段:挂载点
- 第三字段:文件系统名称
- 第四字段:挂载参数
- 第五字段:指定分区是否被 dump 备份,0 代表不备份,1 代表每天备份,2 代表不定期备份
- 第六字段:指定分区是否被 fsck 检测,0 代表不检测,其他数字代表检测的优先级,那么当然 1 的优先级比 2 高
/etc/fstab 文件修复
如果在 fstab 文件写入时写错了,开机可能就会报错,这时会发现 fstab 文件不能再修改了,于是,可以用重新挂载的方法让 fstab 文件又可以修改:
$ mount -o remount,rw /
Shell 基础
history
- 命令功能:查看之前执行过的命令
- 相关文件:.bash_history
- 语法:history
! 感叹号的妙用
!n执行第 n 条历史命令!!执行上一条命令!字串执行最后一条以该字串开头的命令
tab 键补全命令
输入命令开头几个字母,tab 键就可以补全命令;如果以输入的字母开头的命令有多个,按两下 tab 键就会列出以该字串开头的所有命令。
命令执行顺序
- 第一顺位执行用绝对路径或相对路径执行的命令;
- 第二顺序执行别名;
- 第三顺序执行 Bash 的内部命令;
- 第四顺序执行按照 $PATH 环境变量定义的目录查找顺序找到的第一个命令。
Bash 常用快捷键
| Keys | utility |
|---|---|
| ctrl+c | 强制终止当前的命令 |
| ctrl+l | 清屏,相当于 clear 命令 |
| ctrl+u | 删除或剪切光标之前的命令 |
| ctrl+y | 粘贴 ctrl+u 或 ctrl+k 剪切的内容 |
| ctrl+r | 在历史命令中搜索,按下 ctrl+r 之后,就会出现搜索界面,输入搜索内容,就会从历史命令中搜索 |
| ctrl+d | 退出当前终端 |
输入输出重定向
标准输入输出
| 设备 | 设备文件名 | 文件描述符 | 类型 |
|---|---|---|---|
| 键盘 | /dev/stdin | 0 | 标准输入 |
| 显示器 | /dev/stdout | 1 | 标准输出 |
| 显示器 | /dev/stderr | 2 | 标准错误输出 |
输出重定向
- 作用:以覆盖的方式,把命令的正确输出定向到指定的文件或设备中。
- 符号:
- 命令 > 文件(覆盖)
- 命令 » 文件(追加)
- 命令 2» 文件(输出命令的错误信息)
- 命令 &> 文件(把正确错误输出都保存到指定文件)
- 命令 » 文件1 2» 文件2(把正确的输出与错误分开保存)
输入重定向
- 命令名称:wc
- 命令功能:可以把指定文件的内容作为输入
- 命令语法:wc < file
- 范例:$ wc < ~/profile
多命令顺序执行
| 多命令只执行符 | 格式 | 作用 |
|---|---|---|
| ; | 命令1 : 命令2 | 多个命令顺序执行,命令之间没有任何逻辑联系 |
| && | 命令1 && 命令2 | 逻辑与 当命令1正确执行,则命令2才会执行 当命令1执行不正确,则命令2不会执行 |
| || | 命令1 || 命令2 | 逻辑或 当命令1执行不正确,则命令2才会执行 当 命令1正确执行,则命令2不会执行 |
例子:
$ ls ; date ; cd /user ; pwd
管道符
命令格式:命令 1 命令 2 - 命令功能:命令 1 的正确输出,作为命令 2 的操作对象
- 例子:
$ ll -a /etc/ more
$ netstat -an grep “ESTABLISHED”
grep
- grep
- 命令格式:grep [-options] “keyword” filename
- options:
- -i 忽略大小写
- -n 输出行号
- -v 反向查找
- –color=auto 搜索出的关键字用颜色显示
通配符和其他特殊符号
通配符
| 通配符 | 作用 |
|---|---|
| ? | 匹配一个任意字符 |
| * | 匹配 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显示所有进程- 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 [email protected] |
| 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. 备份策略
完全备份
完全备份就是指把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录。
增量备份
flowchart BT
A[(Day 1)] --> B[(Backup)]
C[(Added on Day 2)] --> B[(Backup)]
D[(Added on Day 3)] --> B[(Backup)]
E[(...)] --> B[(Backup)]
差异备份
flowchart BT
A[(Day 1)] --> B[(Backup)]
C[(Added on Day 2)] --> B[(Backup)]
D[(Added on Day 2 && Day 3)] --> B[(Backup)]
E[(...)] --> B[(Backup)]
dump 和 restore 命令
dump
命令格式:
$ dump [-options] distinationFileName sourceFilenameoptions
- -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