文章目录
概述
linux是一个开源、兔费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目(c/c++/php/python/java/go) 都会部署到Linux/unix系统上。
常见的操作系统(windows、IOS、Android、MacOS、Linux、Unix)
linux之父:Linus Torvalds,他开发了linux0.01版源码,也是Git创作者。
Linux主要发行版本
Ubuntu(乌班图),RedHat(红帽子),CentOS,Debain,Fedora,SuSE,OpenSUSE
应用领域
-
linux在服务器领域的应用是最好的,有免费,稳定,高效的特点。
-
在嵌入式领域,linux运行稳定,对网络有良好支持,且低成本,能根据需求进行软件裁剪,内核最小可到几百kb。
如:机顶盒、数字电视、网络电话、远程交换机、手机、PDA、智能家居等 物联网应用。
Linux和Unix的关系
Unix只针对大型主机或服务器,后来在GNU计划(自由软件 集体协作计划)倡导下,Linus Torvalds基于Unix的轻量版Minix上开发出了Linux内核。
linux网络连接的三种模式
- 桥接模式,虚拟系统可以和外部系统通讯,但是容易造成IP冲突;
- NAT模式,网络地址转换模式虚拟系统可以和外部系统通讯,不造成IP冲突;
- 主机模式:独立的系统;
虚拟机快照
VMware提供了快照管理,它能使虚拟机系统回到原先某个正常运行的状态。
在选项“虚拟机”下的“快照”处使用快照。
调分辨率:xrandr -s 1
共享文件夹
在vmWare的“虚拟机”选项中设置共享的文件夹在主机中的路径,设置好后,可以在centos的主文件夹——其他位置——计算机——mnt——hgfs下找到共享的文件。
远程登录
因为linux服务器是开发小组共享,正式上线的项目是运行在公网的。因此程序员需要远程登录到Liux进行项目管理或者开发。
远程登录客户端:可以用Xshell
远程传输文件:可以用Xftp
其他工具大同小异。
Linux目录结构
linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录 “ / ”,然后在此目录下再创建其他的目录。
在linux中,一切皆文件。
具体目录结构:
-
/bin【常用】 (/usr/bin /usr/local/bin)
是Binary [ˈbaɪnəri] (二进制) 的缩写,这个目录存放着最经常使用的命令。 -
/sbin (/usr/sbin /usr/local/sbin)
s就是Super User的意思,这里存放的是系统管理员使用的系统管理程序。 -
/home【常用】
存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名。 -
/root【常用】
该目录为系统管理员,也称作超级权限者的用户主目录。 -
/Iib
系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
-
/Iost+found
这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件。
-
/etc【常用】
所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库 my.conf。 -
/usr【常用】
这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录。 -
/boot【常用】
存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件。
-
/proc【不能动】 这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
-
/srv【不能动】service缩写,该目录存放一些服务启动之后需要提取的数据。
-
/sys【不能动】这是liux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs【别动】
-
/tmp 这个目录是用来存放一些临时文件的。
-
/dev
类似于windows的设备管理器,把所有的硬件用文件的形式存储。 -
/media【常用】
linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
-
/mnt 【常用】系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里的内容了。 如:和主机的共享文件夹。
-
/opt
这是给主机额外安装软件所存放的目录。如安装 oracle 数据库就可放到该目录下。默认为空。 -
/usr/local【常用】
这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序。 -
/var 【常用】
这个目录中存放着在不断扩充着的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件。 -
selinux [security-enhanced linux]
SELinux 是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置。
vim编辑器
linux内置 vim文本编辑器,具有程序编辑能力。
三种模式:
- 一般模式:用vim打开文档时直接进入的是一般模式,可以使用 [上下左右]键来移动光标,用 [删除字符]或 [删除整行] 来处理文档,也可以使用复制粘贴。
- 编辑模式:按下 i,o,a,r任意字母之后可以进入编辑模式。一般都是按 i 键。
- 命令行模式:在一般模式下输入 :或 / 后可进入,在此模式下,可以使用相关指令:读取、存盘、替换、离开vim、显示行号等。
模式间的切换:
命令行下: # vim xxx 进入一般模式
一般模式下: i 进入编辑模式, : 或 / 进入命令行模式
编辑模式和命令行模式下: 按esc退出到一般模式
命令行模式下: wq 保存退出,q 退出 ,q!强制退出,不保存
vim快捷键
在一般模式下:
拷贝当前行:yy, 如果要拷贝当前向下的5行,则 5yy,然后粘贴(输入p);
删除当前行:dd,如果要删除当前向下的5行,则 5dd;
撤销: u
定位到文档的末行和首行: G 到末行, gg 到首行;
定位到文档的某一行:先输入 行号,再按 shift + g
在命令行模式下:
查找: /关键字 ,然后按回车查找,按n查找下一个
设置文件的行号: :set nu
取消文件的行号: :set nonu
Linux指令
在命令末尾或sql语句末尾加上 /G,表示将显示结果按行打印,提高显示效果。
运行文件时,末尾加“&”,表示后台运行,如:./hello.java &
符号
通配符
-
* —— 匹配任意长度的任意字符
# 例:匹配/etc的所有.conf文件 ls /etc/*.conf
-
? —— 匹配任意的一个字符
# 例:匹配只有三个字母的.conf文件 ls /etc/???.conf
-
[a-c] [!d-z] —— 匹配一定取值范围的符号,或匹配不在此范围的符号
# 例:匹配以a到c开头的.conf文件 ls /etc/[a-c]*.conf
特殊符号
-
; —— 连续执行多条命令
-
& —— 后台执行命令
-
\ —— 转义符号,用于表示通配符和特殊符号本身
-
>,>> —— 输出重定向 以及 附加输出重定向
-
<,<< —— 输入重定向 以及 附加输入重定向
-
| —— 管道功能
关机&重启
立即关机: shutdown -h now 或 halt
立即重启:shutdown -r now 或 reboot
一分钟后关机: shutdown -h 1
将内存的数据同步到磁盘:sync
关机和重启的命令执行前,默认会执行一次同步命令sync。
用户登录
切换用户(可以切换到管理员身份): su - 用户名
注销用户/退出登录/返回原来用户:logout
由于系统管理员有最大权限,为避免误操作,平时登录时尽量少用root账号登录。可以先登录普通用户,再用“su - 用户名”切换管理员身份;
logout 只能在提示符下使用,在图形运行终端处 和 运行级别3以下 使用无效。
用户管理
添加用户: useradd 用户名
当创建用户成功后,会自动在home目录下创建和用户同名的家目录,也可以通过 “ useradd -d 指定目录 新用户名” 在创建新用户时指定 家目录。
修改密码:passwd 用户名
注意:如果用户名中有大写字母的话,在输入命令,要换成小写。
删除用户: userdel 用户名
” userdel 用户名“会保留家目录,如果要删除用户及其用户主目录,用 ”userdel -r 用户名“
查询用户信息: id 用户名
查看当前用户:whoami
查看登录用户:who am i
用户组:系统可以将 拥有共性/权限的多个用户进行分组,以方便进行管理。
新增组:groupadd 组名
删除组:groupdel 组名
新增用户时直接加入组:useradd -g 用户组 用户名
修改用户的组别:usermod -g 用户组 用户名
用户 和 组 的相关文件:
/etc/passwd —— 用户user的配置文件,记录用户的各种信息;
每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
如:valcanozz : x:1000:1000:ValcanoZz:/home/valcanozz:/bin/bash
/etc/shadow —— 口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
/etc/group —— 组group的配置文件,记录Linux包含的组的信息;
每行的含义:组名:口令:组标识号:组内用户列表
运行级别
切换运行级别: init [0123456]
显示默认运行级别:systemctl get-default
运行级别:
0: 关机
1: 单用户【找回丢失密码】,root权限,用于系统维护,禁止远程登录
2: 多用户状态,没有网络服务
3: 完全的多用户状态,有网络服务,无界面
4: 系统未使用,保留给用户
5: 图形界面
6: 系统重启
常用运行级别是3和5,也可以指定默认运行级别。设置默认运行级别:systemctl set-default 运行级别; 如:systemctl set-default multi-user.target 切换默认级别为3;
init级别 systemctl target 0 shutdown.target 1 emergency.target 2 rescure.target 3 multi-user.target 4 无 5 graphical.target 6 无
开机流程:
开机 —— BIOS —— /boot —— systemd进程1 —— 运行级别 —— 运行级对应的服务
帮助指令
获取帮助信息: man 命令或配置文件,如:man ls 查看ls命令的帮助信息;
man可以获取 命令的使用说明,是中文文档,在man下,按空格显示下一页,按q退出
获取shell内置命令的帮助信息:help 命令
显示出的是英文文档。
文件目录
显示当前工作目录的绝对路径:pwd
显示当前目录下的文件: ls
显示指定目录下的文件: ls 目录路径
- ls的常用选项: -a 显示所有文件包括隐藏文件,-l 以列表形式显示信息
切换目录: cd 路径
- cd 的常用法:
- cd~ 或cd: —— 回到自己的家目录,比如你是root, 则cd~ 就是到 /root
- cd… —— 回到上一级目录
在linux下,隐藏文件是以 . 开头;
命令的选项可以组合使用,比如 ls -a 和 ls -l 可以组合:ls -al 或 ls -la
创建目录: mkdir 新目录名
- mkdir常用选项: -p 创建多级目录(没加-p就只能创建一级目录)
- 如:mkdir /home/dog
mkdir -p /home/animal/tiger
- 如:mkdir /home/dog
删除空目录:rmdir 空目录
删除非空目录: rmdir -rf 目录
创建空文件:touch 文件名
拷贝文件: cp 源文件 目标文件(夹)
拷贝整个文件夹: cp -r 源文件夹 目标文件夹
如果想强制覆盖不提示,可以在cp命令前加”\“ ,如:\cp -r /home/hello.txt /opt
删除文件或目录:rm 文件或目录名
- 常用选项: -r 递归删除整个文件夹 ; -f 强制删除不提示
文件重命名:mv 旧文件名 新文件名
文件移动:mv 旧文件路径 新文件路径
查看文件:cat 文件名
- 常用选项: -n 显示行号
cat 命令只能浏览文件,不能修改文件;
一般为了浏览方便,会带上管道命令: | ,管道命令就是将上一个命令的结果交给下一个命令处理,如: car -n /etc/profile | more,就是将查看文件的内容 用more命令查看
more指令:是一个基于VI编辑器的文本过滤器,它以按页方式显示文本内容;
-
语法:more 文件名
-
more模式下的按键:
操作 说明 空格 向下翻一页 回车 向下翻一行 q 离开more Ctrl + F 向下滚动一个屏幕 Ctrl + B 返回上一屏幕 = 输出当前行的行号 :f 输出文件名和当前行号
less指令:采用分屏方式查看文件内容,功能与more类似,但比more更强大,支持各种终端。
-
语法:less 文件名
-
less模式下的按键:
操作 说明 空格 或 [pagedown] 向下翻一页 [pageup] 向上翻一页 /字串 向下搜索 字串,n:向下找,N:向上找 ?字串 向上搜索 字串,n:向下找,N:向上找 q 离开less
输出内容到控制台: echo 内容 (内容可以是环境变量,如 P A T H , PATH, PATH,HOSTNAME)
显示文件开头内容: head 文件名
- 默认显示头10行,使用 head -n 5 文件名 ,可以显示头5行。
显示文件末尾内容:tail 文件
- 默认显示末10行,使用 tail -n 5 文件名,可以显示末5行,
- tail -f 文件名,可以实时监控文件。
. >指令 和 >> 指令
-
前者是覆盖,后者是追加
如:
ls -l > 文件 (将列表的内容写入文件a.txt中(覆盖写))
ls -al >> 文件 (将列表的内容追加到文件aa.txt的末尾)
cat 文件1 > 文件2 (将文件1的内容覆盖到文件2)
echo “内容” >> 文件(追加)
软链接: ln -s 原文件或目录 软链接名 ,如: ln -s /root /home/myroot 在/home下创建一个软链接,指向/root;
查看历史命令: history
- 查看最近的10条命令:history 10; 执行历史编号为5的命令: !5
时间日期
显示日期:
date 显示当前时间
date +%Y 显示当前年份
date +%m 显示当前月份
date +%d 显示当前是哪一大
date “+%Y-%m-%d%H:%M:%S” 显示年月日时分秒
设置日期: date -s 字符串时间 ,如:date -s “2022-04-09 18:54:10”
查看当月日历:cal 查看2020年日历:cal 2020
搜索查找
查看ip : ifconfig
查找指定文件: find 目录范围 选项 [ -option ] [ -exec 命令 {} \ ]
-exec 命令 {} \ 表示要对找到的文件进行的操作
选项 | 说明 |
---|---|
-name … | 查找指定文件名 |
-user … | 查找属于某用户的所有文件 |
-size … | 按照指定文件大小查找 |
-atime … | 填 +n 表示超过 n 天被读取过的文件, -n 表示 n天内被读取过的文件 (-ctime 文件创建时间 -mtime 文件修改时间) |
如:
按文件名:根据名称查找/home目录下的hello.txt文件 —— find /home -name hello.txt
按拥有者:查找/opt目录下,用户名称为nobody的文件 —— find /opt -user nobody
查找整个liux系统下大于200M的文件(+n大于n小于n等于,单位有k,M,G) —— find /-size +200M
基于数据库查询文件: locate 文件
由于locate指令基于数据库进行查询,所以第一次运行前,需 使用 updatedb 指令创建 locate数据库。
locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。
Locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻
查看指令在哪个目录下: which 指令
过滤查找:grep [选项] 查找内容 源文件
- -n 显示匹配行及行号
- -i 忽略字母大小写
如:在hello.txt文件中,查找"yes"所在行,并且显示行号
写法1: cat /home/hello.txt | grep -n “yes”
写法2: grep -n “yes” home/hello.txt
注:grep后的查找内容 支持正则表达式,如 ls -l /opt | grep “^d” 表示查看/opt文件夹下 的目录,”^d"表示以d开头。
压缩解压
将文件压缩为 .gz文件: gzip 文件
解压缩 .gz文件: gunzip 文件.gz
压缩文件或目录: zip [选项] xxx.zip 文件或目录
- -r 递归压缩,即压缩目录
解压缩文件: unzip [选项] 压缩文件
- -d 目录 —— 指定解压后文件的存放目录
打包文件: tar [选项] xxx.tar.gz 打包的内容
- -c 产生.tar打包文件
- -v 显示详细信息
- -f 指定压缩后的文件名
- -z 打包同时压缩
- -x 解包 .tar文件
如:
压缩多个文件,将/home/pig.txt和/home/cat.txt压缩成pc.tar.gz
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt将home的文件夹压缩成myhome.tar.gz
tar -zcvf myhome.tar.gz /home/将pc.tar.gz 解压到当前目录
tar -zxvf pc.tar.gz将myhome.tar.gz解压到/opt/tmp2目录下
tar -zxvf /home/myhome.tar.gz-C /opt/tmp2
组管理 和 权限管理
在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有 所有者、所在组、其它组的概念。
-
所有者
一般是指 文件的创建者,谁创建了该文件,就自然的成为该文件的所有者。
-
查看所有文件的所有者: ls -ahl
-
修改文件所有者: chown 用户名[:所在组] 文件名 (-r 如果是目录,则使其下的子文件和目录递归生效)
-
-
所在组
当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组(默认)。
-
修改文件/目录 所在的组: chgrp 组名 文件名
-
新增组:groupadd 组名
-
删除组:groupdel 组名
-
新增用户时直接加入组:useradd -g 用户组 用户名
-
修改用户的组别:usermod -g 用户组 用户名
-
-
其他组
除文件的所有者和所在组的用户外,系统的其它用户都是文件的其它组。
在root用户下,可以改变用户的组别:
usermod -g 新组名 用户名
usermod -d 目录名 用户名 —— 改变该用户登陆的初始目录。说明:用户需要有进入到新目录的权限。
权限:
使用 ls -l 显示出的信息首部,有 -rwxrw-r–. 类似的列表,它代表不同不同用户对该文件的 权限。
-
- r 代表可读(read),
- w 代表可写 (修改文件,或该目录内创建删除重命名目录),
- x 代表可执行 (执行文件,或进入目录);
- 权限列表 0~9位:
- 第0位:确定文件类型—— l 是链接,d 是目录 , c 是 字符设备文件, 如鼠标,键盘,b 是块设备, 如硬盘,- 是普通文件,
- 第1~3位: 所有者的权限
- 第4~6位:所属组的权限(和所有者同一组的其他用户)
- 第7~9位:其他组的用户的权限
-rw-r–r–. 1 root root 143 4月 8 21:22 hello.java
分别代表的含义: 权限 (文件)硬链接数/(目录)子目录数 用户名 组名 文件/目录大小 最后修改日期 文件名
-
修改权限: chmod
-
通过 + - = 变更权限:
chmod u=rwx,g=rw,o=x 文件目录名
chmod o+w 文件目录名
chmod a-x 文件目录名
u: 所有者 g:所有组 o:其他人 a:所有人(u,g,o的总和)
-
通过 数字变更权限:
chmod 751 文件目录名
相当于 chmod u=rwx,g=rw,o=x 文件目录名
r = 4,w = 2, x = 1, 所以rwx = 4+2+1 = 7,rx = 4 + 1 = 5
-
定时任务调度
任务调度:是指系统在某个时间执行的特定的命令或程序。
任务调度分类:
- 系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等;
- 个别用户工作:个别用户可能希望执行某些程序,比如对 mysql数据库的备份;
指令:crontab [选项]
- -e 编辑定时任务
- -l 查询crontab任务
- -r 删除当前用户所有的crontab任务(终止任务调度)
- service crond restart 重启任务调度
执行 crontab -e ,进入任务编辑界面;
输入任务,如: */2 * * * * ls -l /etc/ /tmp/to.txt
意思是:每2分钟执行一次 ls -l /etc/ /tmp/to.txt
定时用的 五个 * 占位符:
含义 | 范围 | |
---|---|---|
第一个 * | 一小时中的第几分钟 | 0~59 |
第二个 * | 一天中的第几小时 | 0~23 |
第三个 * | 一月中的第几天 | 1~31 |
第四个 * | 一年中的第几月 | 1~12 |
第五个 * | 一周中的星期几 | 0~7 (0和7都是周日) |
符号 | 含义 |
---|---|
* | 代表每个单位时间,如第一个*指一小时的每分钟都执行一次 |
, | 代表不连续时间,如“0 8,12,16 * * * 命令” 指每天的8点,12点,16点都执行一次命令 |
- | 代表连续时间,如“0 5 * * 1-6 命令” 指周一到周六的5点0分执行都执行一次命令 |
*/n | 代表间隔多久执行一次 |
指令:at [选项] [时间] 一次性定时计划任务
at的守护进程std会在后台运行,检查作业队列来运行;
默认情况下,atd守护进程每60秒检查作业队列。
在使用at命令时,一定要保证atd进程的启动,使用 ps -ef | grep atd 检测atd是否在运行。
按下Crel + D 结束at命令的输入
atrm 4 将编号为4的任务删除
atq 查看at任务
选项:
选项 | 含义 |
---|---|
-m | 当指定任务完成,将给用户发送邮件 |
-I (是大写i ) | atq的别名 |
-d | atrm的别名 |
-v | 显示任务将被执行的时间 |
-c | 打印任务的内容到标准输出 |
-V | 显示版本信息 |
-q 队列 | 使用指定的队列 |
-f 文件 | 从指定文件读入任务,而不是从标准输入读入 |
-t 时间参数 | 以时间参数的形式提交要运行的任务 |
at 的时间定义:
- 当天的时间: hh:mm,如果时间过去了,就放到第二天执行;
- 12小时计时,后加am或pm,如11pm;
- 具体日期: yy-mm-dd 或 mm/dd/yy 或 dd.mm,yy,如:04:00 2022-03-1;
- 相对计时法,格式为: now + 时间单位;
- 直接用 today ,tomorrow 来指定时间;
例:
2天后的下午5点执行/bin/1 s /home
#at 5pm + 2 days
at> /bin/ls /home明天17点钟,输出时间到指定文件内 比如root/datel100.log
#at 5pm tomorrow
at> data > /root/date100.log2分钟后,输出时间到指定文件内比如root/date200.log
#at now + 2 minutes
at> data > /root/date200.log
磁盘分区、挂载
linux中,硬盘的分区需要挂载到 目录才能使用,这种处理方式叫“载入”,使一个分区和一个目录联系起来。
Linux硬盘分为 IDE 和 SCSI 两种,目前基本都用SCSI硬盘;
-
IDE硬盘:
驱动器标识符为“hdx~”
- “hd” 表示分区所在的设备为IDE硬盘;
- “x”为盘号:a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘;
- “~” 代表分区,用数字表示,前4个分区为主分区或拓展分区,从5开始是逻辑分区;
-
SCSI硬盘:
驱动器标识符为“sdx~”
- “sd” 表示分区所在的设备为IDE硬盘;
- “x”为盘号:a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘;
- “~” 代表分区,用数字表示,前4个分区为主分区或拓展分区,从5开始是逻辑分区;
相关指令:
// 查看设备挂载情况
lsblk
lsblk -f
// 查看系统整体磁盘使用情况
df -h
//查看指定目录的磁盘使用情况
du -h 目录
选项:
-s 指定目录占用大小汇总
-h 带计量单位
-a 含文件
-max-depth=l 子目录深度
-c 列出明细的同时,增加汇总值
如: du -hac --max-depth=1 /opt
网络配置
windows中查看网络配置:ipconfig
linux中查看网络配置:ifconfig
测试主机间网络连通性: ping 目的主机
将主机的ip修改为静态ip:
-
进入配置文件:vi /etc/sysconfig/network-scripts/ifcfg-ens33
-
修改文件:
BOOTPROTO=static #[none|static |bootp|dhcp] (引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
IPADDR=192.168.205.129 #指定ip地址
GATEWAY=192.168.205.2 #网关
DNS1=192.168.205.2 #域名解析器 -
修改VMware的虚拟网络编辑器
-
重启网络服务:service network restart
查看主机名:hostname
修改主机名文件: vim /etc/hostname 修改后重启生效
设置hosts映射(可以通过别名代替ip地址):
- windows:在 C:\Windows\System32\drivers\etc\hosts 指定即可;
- linux:在 /etc/hosts 文件指定
主机名解析机制:
- 浏览器先检查浏览器缓存中有没有该域名解析P地址,有就先调用这个IP完成解析;如果没有,就检查DNS解析器缓存,如果有直接返回P完成解析。这两个缓存,可以理解为本地解析器缓存。
- 一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记
录)。如在cmd窗口中输入
ipconfig /displaydns //DNS域名解析缓存
ipconfig /flushdns //手动清理dns缓存- 如果本地解析器缓存没有找到对应映射,检查系统中hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
- 如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,则到域名服务DNS进行解析域
进程管理
在LINUX中,每个执行的程序都称为一个进程。每一个进程都分配一个ID号 (pid,进程号)。
程序是可运行的代码,是静态的,进程是已经运行在内存中,是动态的;
每个进程都可能以两种方式存在的。前台与后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
查看进程: ps [选项]
- ps -a 显示当前终端的所有进程信息
- ps -u 以用户的格式显示进程信息
- ps -x 显示后台进程运行的参数
- 如:ps -aux | grep xxx
ps显示字段说明:
- System V 展示风格
- USER:用户名称
- PID:进程号
- %CPU:进程占用CPU的百分比
- %MEM:进程占用物理内存的百分比
- VSZ:进程占用的虚拟内存大小(单位:KB)
- RSS:进程占用的物理内存大小(单位:KB)
- TT:终端名称,缩写
- STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
- START:进程的启动时间
- TIME:CPU时间,即进程使用CPU的总时间
- COMMAND:启动进程所用的命令和参数,如果过长会被截断显示
终止进程:
- kill [选项] 进程号 通过进程号杀死/终止进程
- -9 表示强迫进程立即停止
- killall 进程名称 通过进程名称杀死进程,也支持通配符(这在系统因负载过大而变得很慢时很有用)
如:
终止远程登录服务sshd: kill sshd对应的进程号;
再次启动sshd服务:/bin/systemctl start sshd.service
查看进程树:pstree [选项] (-p:显示pid, -u:显示所属用户)
服务管理
服务(service)本质就是进程,但是服务是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysqld,sshd,防火墙等),因此又被称为守护进程。
service管理指令: servicce 服务名 [start|stop|restart|reload|status]
在CentOS7.0之后,很多服务不再使用service,而是改为systemctl;
现在还在使用service指令的服务,可以在 /etc/init.d 查看,有:functions,netconsole,network,README,vmware-tools
例: service network status 查看网络服务状态
查看服务名: 输入 setup ,然后选择“系统服务” 即可查看全部服务。
服务的运行级别
给不同运行级别设置自启动的服务: chkconfig
- 查看服务:chkconfig --list
- 修改自启动/关闭:chkconfig --level 5 服务名 on/off
chkconfig重新设置后,要重启才生效。
在CentOS7.0之后,很多服务改为systemctl进行管理,chkconfig管理的范围和service一样[?];
systemctl 管理指令:
语法: systemctl [start|stop|restart|status] 服务名
查看ysytemctl管理的范围:在 /usr/lib/systemd/system中查看
- 查看服务的自启动状态: systemctl list-unit-files
- 设置服务开机启动/关闭:systemctl enable/disable 服务名
- 查看服务是否是自启动:systemctl is-enabled 服务名
systemctl start/stop 服务名 只是当前生效,重启后仍按设置来;
想要自启动 永久生效,要更改设置,即systemctl enable/disable 服务名
设置防火墙:firewall指令
- 打开端口:firewall-cmd --permanent --add-port=端口号/协议
- 关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
- 重新载入防火墙,使设置生效:firewall-cmd --reload
- 查询端口是否生效:firewall-cmd -query-port=端口/协议
- 查看所有打开的端口: firewall-cmd --zone=public --list-ports
启动防火墙: systemctl start firewalld
禁用防火墙: systemctl stop firewalld**
**动态监控进程: top [选项] **
- -d 秒数 指定top命令每隔几秒更新,默认是3秒;
- -i 使top不显示闲置和僵死的进程;
- -p 通过指定ID来监控某个进程的状态;
top界面交互:
- P 以CPU使用率排序,默认;
- M 以内存使用率排序;
- N 以PID排序;
- u 再输入用户名,监控指定用户的进程;
- k 再输入进程ID号,结束进程;
- q 退出top
监控网络状态: netstat [选项]
- -an 按一定顺序排列输出;
- -p 显示哪个进程在调用;
检测主机连接命令: ping 对方ip
RPM与YUM
RPM
rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有 .RPM扩展名的文件。RPM是RedHat Package Manager (RedHat软件包管理工具) 的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
Linux的分发版本都有采用(suse,redhat,.centos等等),可以算是公认的行业标准。
rpm包名格式:
firefox-60.2.2-1.el7.centos.x86 64
- 名称:firefox
- 版本号:60.2.2-1
- 使用操作系统:el7.centos.x86 64
指令:
- 查询已安装的rpm列表: rpm -qa | grep xxx
- 查询软件包是否安装:rpm -q 软件名
- 查询软件包信息: rpm -qi 软件名
- 查询软件包中的文件:rpm -ql 软件名
- 查询文件所属的软件包:rpm -qf 目录/文件
- 卸载软件包:rpm -e 软件名
- 如果其他软件依赖于将要删除的软件包,则卸载时会产生错误信息,可以加上参数 --nodeps 来强制删除,一般不推荐这么做。
- 安装rpm包: rpm -ivh rpm包全路径名
- i install 安装
- v verbose 提示
- h hash 进度条
yum
Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动
下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
指令:
-
查询yum服务器是否有需要安装的软件:yum list | grep 软件名
-
安装yum包: yum install xxxx
shell编程
需求:
Linuxi运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
对于JavaEE和Python程序员来说,工作的需要,可能需要编写一些Shell脚本进行程序或者服务器的维护,比如编写一个定时备份数据库的脚本。
对于大数据程序员来说,需要编写Shell程序来管理集群。
Shel是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Sheel来启动、挂起、停止甚至是编写一些程序。
脚本格式要求:
- 脚本以 #!/bin/bash 开头
执行:
方式1 不用权限,直接用sh命令执行文件: sh xxx.sh
方式2 需要权限,使用绝对或相对路径执行: ./xxx.sh
权限不够,可用 chmod u+x xxx.sh 赋予执行权限;
Shell变量
显示shell中所有变量:set
-
系统变量
-
用户自定义变量:
-
定义方式:变量名=值 如:A=100
-
撤销变量: unset 变量
-
声明静态变量:readonly 变量 ——注:静态变量不能unset
注:
#!/bin/bash A=100 echo A=$A #输出变量时,前面要带$,以作区分 echo "A=$A" unset A readonly B=2 echo B=$B #将指令返回的结果赋值给变量,使用 `` 或 $() C=`date` D=`$(date)`
-
变量定义的规范:
- 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。如:5A=200 是错的;
- 等号两侧不能有空格;
- 变量名称一般习惯为大写;
输出变量时,前面要带==$==,不然会被识别为字符;
将指令返回的结果赋值给变量,使用 `` 或 $() ;
设置环境变量:
- 在环境变量的配置文件中,用 “export 变量名=变量值” 设置环境变量/全局变量
- 刷新配置文件 :source 配置文件
- 查询环境变量的值: echo $ 变量名
环境变量的配置文件在:/etc/profile
shell脚本的多行注释:
:<<!
内容
!
位置参数变量:
当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。
语法:
- $n —— n为数字,$0代表脚本的名称,$1 ~ $9代表第1到第9个参数,10以上的参数,10以上的参数需要用大括号包含,如 ${10}
- ∗ ——这个变量代表命令行中所有的参数, * —— 这个变量代表命令行中所有的参数, ∗——这个变量代表命令行中所有的参数,* 把所有的参数看成一个整体
- $@ —— 这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待
- $# —— 这个变量代表命令行中所有参数的个数
如:在 hello.sh文件中,写入
#!/bin/bash
echo "执行命令为$0 第一个参数为$1 第一个参数为$2"
echo "所有的参数为 $*"
echo "$@"
echo "参数个数为 $#"
# 如执行指令: ./hello.sh 100 200, 会输出:
执行命令为./hello.sh 第一个参数为100 第一个参数为200
所有的参数为 100 200
100 200
参数个数为 2
预定义变量:
$$ —— 当前进程的进程号(PID)
$! —— 后台运行的最后一个进程的进程号(PID)
$?—— 最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0 (具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。
#!/bin/bash
echo "当前执行的进程id=$$"
#以后台的方式运行一个脚本,并获取他的进程号
root/shcode/myshell.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果是=$?"
运算符
三种使用格式:
-
$((运算式))
-
$[ 运算式 ]
- 注意运算式与方括号之间有空格
-
expr m + n //expression表达式
- 注意expr运算符间要有空格,如果希望将expr的结果赋给某个变量,要加反引号 ``
对于字符串还有的一些运算:
-
expr length 字符串 —— 字符串的长度
-
expr substr 字符串 起始位置 截取大小—— 截取字符串
-
expr index 字符串 字符 —— 字符的定位,没有则返回0
-
expr match 字符串1 字符串2 —— 字符串匹配,需要串2是1的子串,返回串2的长度,否则返回0
运算符:和其他的一样,但乘号要加 “ \ ",如 \ *
#!/bin/bash
#案例1:计算(2+3)X4的值
#使用第一种方式
RES1=$(((2+3)*4))
echo "res1=SRES1"
#使用第二种方式,推荐使用
RES2=$[ (2+3)*4 ]
echo "res2=SRES2"
#使用第三种方式expr
TEMP=`expr 2 + 3`
RES4=`expr $STEMP \* 4`
echo "res4=SRES4"
#案例2:请求出命令行的两个参数[整数]的和 20 50
SUM=$S[$1+$2]
echo "sum=$SUM"
条件判断
判断符号:
- 字符串比较: =
- 两个整数比较:
- -lt 小于
- -le 小于等于 little equal
- -eq 等于 equal
- -gt 大于
- -ge 大于等于 greater equal
- -ne 不等于
- 按照文件权限进行判断:
- -r 有读的权限
- -w 有写的权限
- -x 有执行的权限
- 按照文件类型进行判断:
- -f 文件存在,且是一个常规文件
- -e 文件存在
- -d 文件存在并是一个目录
#!/bin/bash
#案例1:"ok"是否等于"ok"
#判断语句:使用 =
1f [ "ok"="ok" ]
then
echo "equal"
fi
#案例2:23是否大于等于22
#判断语句:使用~ge
if [ 23 -ge 22 ]
then
echo "大于"
fi
#案例3:/root/shcode/aaa.txt目录中的文件是否存在
#判断语句:使用-f
if [ -f /root/shcode/aaa.txt ]
then
echo"存在"
fi
#看案例
if hspedu
then
echo "hello,hspedu"
fi
流程控制:
if 判断
if [ 条件判断 ]
then
...
fi
if…else if…else 判断
if [ 条件判断 ]
then
...
elif [ 条件判断 ]
then
...
else
...
fi
for循环
for((初始值;循环控制条件;变量变化))
do
...
done
#
for 变量名 int 参数列表
do
...
done
# 例:反复输出 命令行输入的参数
# 这里 $@ 会分多次输出, $* 会一次性输出
for loop int $@
do
echo "the value is: $loop"
done
# 例:sum 从1累加到100
SUM=0
for(( i=1; i<=100; i++))
do
SUM=$[$SUM+$i]
done
while语句
while [ 条件判断 ]
do
...
done
#
while ((条件判断))
do
...
done
无限循环:
while :
do
...
done
#
while true
do
...
done
#
for (( ; ; ))
until循环
until 会一直循环到 条件为ture 为止,与while正好相反;
until [ 条件判断 ]
do
...
done
case…esac 多选择语句
case 变量 in
值1)
...
;;
值2)
...
;;
esac
跳出循环: break 和 continue
read输入
read 选项 参数
- 选项: -p 输出读取时的提示符 -t 指定读取时等待的时间(秒),超时则继续往下执行代码。
read -t 10 -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
函数
系统函数:
-
basename 文件路径名 [文件后缀]
取出前缀路径,获取文件名;
如果指定了文件后缀,也可以同时去掉文件后缀;
-
dirname 文件路径名
去掉文件名,获取路径部分
自定义函数:
[function] 函数名(){
....
}
#!/bin/
function getSum(){
SUM=$[$n1+$n2]
echo "和是$SUM"
}
read -p "请输入n1=" n1
read -p "请输入n2=" n2
getSum $n1 $n2
调试shell脚本
sh命令选项:
- -n :检查shell脚本的语法错误,没有错则无输出信息。
- -x :显示脚本的实际执行过程。
sh -x 脚本文件
案例: 定时备份
定时备份数据库:
- 每天2: 30 备份数据库zzc 到 /data/backup/bd;
- 备份开始和备份结束能够给出相应的提示信息;
- 备份后的文件以备份时间为文件名,打包为 .tar.gz 的形式;
- 如果存在10天前备份的数据库文件,将其删除。
首先创建脚本,在 /usr/sbin 下创建名为mysql_db_backup.sh 的脚本:
#!/bin/bash # 备份目录 BACKUP=/data/backup/db #当前时间 DATETIME=$(date +%Y-%m-%d_%H%M%S) echo $DATETIME #数据库的地址 HOST=localhost #数据库用户名 DB_USER=root #数据库密码 DB_PW=zzc #备份的数据库名 DATABASE=zzc #创建备份目录,如果不存在,就创建 [ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}" #备份数据库 mysqldump -u${DB_USER} -p${DB_PW} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}/$DATETIME.sql.gz # 将文件处理为 tar.gz cd ${BACKUP} tar -zcvf $DATETIME.tar.gz ${DATETIME} # 删除对应的备份目录 rm -rf ${BACKUP}/${DATETIME} # 删除10天前备份的文件 find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \; echo "备份数据 ${DATABASE} 成功"
然后使用命令 crontab -e 设置定时任务:
30 2 * * * /usr/sbin/mysql_db_backup.sh
日志管理
概述
日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。
日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
可以这样理解 日志是用来记录重大事件的工具。
-
系统日志文件的保存位置: /var/log/
-
系统常用的日志:
日志文件 说明 /var/log/boot.log 系统启动日志 /var/log/cron 系统定时任务的相关日志 /var/log/cups 打印信息的日志 /var/log/dmesg 系统开机内核自检的信息,可以直接用dmesg命令直接查看信息。 /var/log/btmp 记录错误登录的日志;是二进制文件,要使用lastb命令查看 /var/log/lasllog 记录所有用户最后一次登录时间的日志;是二进制文件,要使用lastlog命令查看 /var/log/mailog 记录邮件信息的日志 /var/log/message 记录系统大部分重要信息的日志,如系统出问题,首先要检查的应该就是这个文件 /var/log/secure 记录验证和授权方面的信息,涉及账户和密码的程序都会记录 /var/log/wtmp 永久记录所有用户的登录、注销信息,系统的后动、重启、关机事件;是二进制文件,要使用last命令查看 /var/log/ulmp 记录当前已经登录的用户的信息。使用w、who、users等命令查看
日志管理服务 rsyslogd
CentOS7.6 日志服务是 rsyslogd,而centos6.x的日志服务是syslogd;rsyslogd兼容syslogd。
- 查看 rsyslogd服务是否启动: ps aux | grep “rsyslog” | grep -v “grep”
- 查看 rsyslogd服务是否自启动:systemctl list-unit-files | grep rsyslog
配置文件: /etc/rsyslog.conf
-
编辑文件时的格式为 *** . * 日志文件名**
其中第一 * 代表日志类型,第二个代表 日志级别
-
日志类型:
- auth —— pam产生的日志
- authpriv —— ssh、ftp 等登录信息的验证信息
- corn —— 时间任务相关
- kern —— 内核
- lpr —— 打印
- mail —— 邮件
- mark(syslog)-rsyslog —— 服务内部的信息,时间标识
- news —— 新闻组
- user —— 用户程序产生的相关信息
- uucp —— unix to unxi copy,即主机之间相关的通信
- local 1~7 —— 自定义的日志设备
-
日志级别:(从上到下,级别从低到高,记录信息越少)
- debug —— 有调试信息,日志通信最多
- info —— 一般信息日志,最常用
- notice —— 最具有重要性的普通条件的信息
- warning —— 警告级别
- err —— 错误级别,阻止某个功能或者模块不能正常工作的信息
- crit —— 严重级别,阻止整个系统或者整个软件不能正常工作的信息
- alert —— 需要立刻修改的信息
- emerg —— 内核崩溃等重要信息
- none —— 什么都不记录
日志文件格式主要包含以下4列:
事件产生的时间
产生事件的服务器的主机名
产生事件的服务名或程序名
事件的具体信息
日志轮替
日志轮替,就是把旧的日志文件移动并改名,同时建立新的空日志文件,而旧日志文件在超过保存的范围就会被删除。
旧的日志文件 依靠 /etc/logrotate.conf 配置文件中的“dateext”参数 来改名,日志会用日期来作为日志文件的后缀,如 “secure-20220416” ,这样日志文件名不会重叠,就不需要再改名了,只需要指定最多保存的日志个数,删除多余的日志文件即可。
如果配置文件没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替时,当前的 “secure” 日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志;当第二次进行日志轮替时, “secure.1” 会自动改名为 “secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建 “secure”日志,用来保存新的日志;以此类推。
logrotate.conf 配置文件的参数:
参数 | 说明 |
---|---|
daily | 日志的轮替周期是毎天 |
weekly | 日志的轮替周期是每周 |
monthly | 日志的轮控周期是每月 |
rotate 数宇 | 保留的日志文件的个数。0指没有备份 |
compress | 当进行日志轮替时,对旧的日志进行压缩 |
create mode owner group | 建立新日志,同时指定新日志的权限与所有者和所属组. 如create 0600 root utmp |
mail address | 当进行日志轮替时.输出内存通过邮件发送到指定的邮件地址 |
missingok | 如果日志不存在,则忽略该日志的警告信息 |
nolifempty | 如果曰志为空文件,則不进行日志轮替 |
minsize 大小 | 日志轮替的最小值。也就是日志一定要达到这个最小值才会进行轮持,否则就算时间达到也不进行轮替 |
size 大小 | 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替,如size 100k |
dateext | 使用日期作为日志轮替文件的后缀,如secure-20130605 |
sharedscripts | 在此关键宇之后的脚本只执行一次 |
prerotate/cndscript | 在曰志轮替之前执行脚本命令。endscript标识prerotate脚本结束 |
postrolaie/endscripl | 在日志轮替之后执行脚本命令。endscripi 标识 postrotate脚本结束 |
logrotate.conf 配置文件内容:
# see "man logrotate" for details
# rotate log files weekly 每周轮替一次
weekly
# keep 4 weeks worth of backlogs 保存4个文件
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 # 建立的新日志,权限是0664,所有者是root,所属组是utmp组
minsize 1M #轮替大小最小是1M
rotate 1 # 仅保留一个日志备份
}
/var/log/btmp {
missingok # 如果日志不存在,则忽略该日志的警告信息
monthly
create 0600 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
将自己的日志加入日志轮替:
- 方法一:直接在 /etc/logtotate.conf 配置文件中写入该日志的轮替策略;
- 方法二:在 /etc/logrotate.d/ 目录中新建立该日志的轮替文件;
推荐使用第二种方法,因为系统的需要轮替的文件很多,如果将轮替策略全写入 /etc/logtotate.conf 文件中,会使这个文件变的难以管理,不利于维护。
日志轮替的机制原理:
日志轮替依赖于 系统定时任务,在 /etc/cron.daily/ 目录,其中有可执行的 logrotate文件,这个文件会读取日志轮替的配置文件,日志轮替 就是通过这个文件依赖定时任务执行的。
查看内存日志
一些日志是时时变化的,如与内核相关的,所以会先写到内存日志中;内存日志在重启后会清空。
journalctl 指令可以查看内存日志,如:
-
journalctl —— 查看全部
-
journalctl -n 3 —— 查看最新3条
-
journalctl --since ”起始时间“ --until ”截止时间” ——查看起始时间到结束时间的日志,可加日期
-
journalctl -p err —— 报错日志
-
journalctl -o verbose —— 日志详细内容
-
journalctl_PID=1245 _COMM=sshd —— 查看包含这些参数的日志(在详细日志查看)
或者 journalctl | grep sshd
备份与恢复
使用dump 和restore 命令
使用 yum -y install dump 安装备份工具
dump支持 分卷 和 增量备份。(增量备份是指上次备份后,修改/增加过的文件,也称差异备份)
格式:
dump [-cu] [ -f <备份后文件名>] [ -T <日期>] [目录或文件系统]
dump [-w或W]
- -c —— c位置填一个0到9的数字,作用是创建新的归档文件,并将一个或多个文件参数所指定的内容写入归档文件的开头;
- 0123456789 —— 备份的层级。0为最完整备份,会备份所有文件。若指定0以上的层级,则备份至上一次备份以来修改或新增的文件,到9后,可以再次轮替。
- -f <备份后文件名> —— 指定备份后的文件名
- -j —— 调用bzlib库压缩备份文件,也就是将备份后的文件压缩成bz2格式,让文件更小
- -T <日期> —— 指定开始备份的时间与日期
- -u —— 备份完毕后,在/etc/dumpdares 中记录备份的文件系统,层级,日期与时间等。
-t —— 指定文件名,若该文件已存在备份文件中,则列出名称
-W —— 显示需要备份的文件及其最后一次备份的层级,时间,日期。
-w —— 与-W类似,但仅显示需要备份的文件。
# 例如: 将 /boot 分区备份到 /opt/boot.bak0.bz2 文件中,备份层级为0
dump -0uj -f /opt/boot.bak0.bz2 /boot
# 在/boot 目录下拷贝一个文件,备份层级为1,
dump -1uj -f /opt/boot.bak1.bz2 /boot
使用dump和crontab 实现定时备份;
/etc/dumpdates 是备份时间文件
注:备份分区是支持增量备份的,但备份文件或目录 是不支持增量备份的,即只能使用0级备份。
格式: restore [模式选项] [选项]
- 模式:
- -C —— 使用对比模式,将备份的文件与已存在的文件相互对比;
- -i —— 使用交互模式,在进行还原操作时,restors指令将依序询问用户;
- -r —— 进行还原模式;
- -t —— 查看模式,看备份文件有哪些文件;
- 选项:
-f <备份设备> —— 从指定的文件中读取备份数据,进行还原操作;
如果有增量备份,需要按顺序恢复,即从0层级开始恢复。
tips
找回root密码:
- 首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面。
- 进入编辑界面,使用键盘上的上下键把光标往下移动,找到以“fi" “Linux16”开头内容所在的行数”,在行的最后面输入:init=/bin/sh。
- 输入完成后,直接按快捷键:Ctrl+x 进入 单用户模式。
- 进入后,在光标闪烁的位置中输入:mount -o remount,rw /
- 在新的一行最后面输入:passwd 按回车键。之后就可以输入新密码,以及确认密码。
- 密码修改后,会显示passwd…的样式,即修改成功;
- 接着输入:touch /.autorelabel 回车,再输入:exec /sbin/init 回车,然后等待系统修改密码(过程时间可能有点长),并自动重启即可。