Linux学习

概述

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中,一切皆文件。

image-20220408172505611


具体目录结构:

  • /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!强制退出,不保存

image-20220408203535866


vim快捷键

在一般模式下:

拷贝当前行:yy, 如果要拷贝当前向下的5行,则 5yy,然后粘贴(输入p);

删除当前行:dd,如果要删除当前向下的5行,则 5dd;

撤销: u

定位到文档的末行和首行: G 到末行, gg 到首行;

定位到文档的某一行:先输入 行号,再按 shift + g


在命令行模式下:

查找: /关键字 ,然后按回车查找,按n查找下一个

设置文件的行号: :set nu

取消文件的行号: :set nonu


image-20220408204927118

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
0shutdown.target
1emergency.target
2rescure.target
3multi-user.target
4
5graphical.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

删除空目录: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, PATHHOSTNAME)

显示文件开头内容: 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的别名
-datrm的别名
-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.log

  • 2分钟后,输出时间到指定文件内比如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进行解析域

image-20220412093654757

进程管理

在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一样[?];

image-20220412111942205


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 回车,然后等待系统修改密码(过程时间可能有点长),并自动重启即可。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值