概述

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 &

符号

通配符

  • * —— 匹配任意长度的任意字符

    1
    2
    # 例:匹配/etc的所有.conf文件
    ls /etc/*.conf
  • ? —— 匹配任意的一个字符

    1
    2
    # 例:匹配只有三个字母的.conf文件
    ls /etc/???.conf
  • [a-c] [!d-z] —— 匹配一定取值范围的符号,或匹配不在此范围的符号

    1
    2
    # 例:匹配以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

删除空目录: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 内容 (内容可以是环境变量,如 $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.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开始是逻辑分区;

相关指令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
// 查看设备挂载情况
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

    注:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    #!/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脚本的多行注释:

1
2
3
:<<!
内容
!

位置参数变量:

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量。

语法:

  • $n —— n为数字,$0代表脚本的名称,$1 ~ $9代表第1到第9个参数,10以上的参数,10以上的参数需要用大括号包含,如 ${10}
  • $* —— 这个变量代表命令行中所有的参数,$* 把所有的参数看成一个整体
  • $@ —— 这个变量也代表命令行中所有的参数,不过 $@ 把每个参数区分对待
  • $# —— 这个变量代表命令行中所有参数的个数

如:在 hello.sh文件中,写入

1
2
3
4
5
6
7
8
9
10
11
#!/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 (具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确。

1
2
3
4
5
6
#!/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

运算符:和其他的一样,但乘号要加 “ \ “,如 \ *

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#!/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 文件存在并是一个目录
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#!/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 判断

1
2
3
4
if [ 条件判断 ]
then
...
fi

if…else if…else 判断

1
2
3
4
5
6
7
8
9
10
11
if [ 条件判断 ]
then
...

elif [ 条件判断 ]
then
...

else
...
fi

for循环

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
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语句

1
2
3
4
5
6
7
8
9
while [ 条件判断 ]
do
...
done
#
while ((条件判断))
do
...
done

无限循环:

1
2
3
4
5
6
7
8
9
10
11
12
13
while :
do
...
done

#
while true
do
...
done

#
for (( ; ; ))

until循环

until 会一直循环到 条件为ture 为止,与while正好相反;

1
2
3
4
until [ 条件判断 ]
do
...
done

case….esac 多选择语句

1
2
3
4
5
6
7
8
case 变量 in
值1)
...
;;
值2)
...
;;
esac

跳出循环: break 和 continue


read输入

read 选项 参数

  • 选项: -p 输出读取时的提示符 -t 指定读取时等待的时间(秒),超时则继续往下执行代码。
1
2
read -t 10 -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"

函数

系统函数:

  • basename 文件路径名 [文件后缀]

    取出前缀路径,获取文件名;

    如果指定了文件后缀,也可以同时去掉文件后缀;

  • dirname 文件路径名

    去掉文件名,获取路径部分

自定义函数:

1
2
3
[function] 函数名(){
....
}
1
2
3
4
5
6
7
8
9
#!/bin/
function getSum(){
SUM=$[$n1+$n2]
echo "和是$SUM"
}

read -p "请输入n1=" n1
read -p "请输入n2=" n2
getSum $n1 $n2

调试shell脚本

sh命令选项:

  • -n :检查shell脚本的语法错误,没有错则无输出信息。
  • -x :显示脚本的实际执行过程。
1
sh -x 脚本文件

案例: 定时备份

定时备份数据库:

  • 每天2: 30 备份数据库zzc 到 /data/backup/bd;
  • 备份开始和备份结束能够给出相应的提示信息;
  • 备份后的文件以备份时间为文件名,打包为 .tar.gz 的形式;
  • 如果存在10天前备份的数据库文件,将其删除。

首先创建脚本,在 /usr/sbin 下创建名为mysql_db_backup.sh 的脚本:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#!/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 设置定时任务:

1
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 配置文件内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
# 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类似,但仅显示需要备份的文件。
1
2
3
4
5
# 例如: 将 /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层级开始恢复。

可视化管理 webmin 和 bt 运维工具

webmin

  • 重置密码
    /usr/libexec/webmin/changepass.pl /etc/webmin root test
    (root是webmin的用户名,不是OS的,这里就是把webmin的root用户密码改成了test)
  • 修改webmin服务的端口号(默认是l0000出于安全目的)
    vim /etc/webmin/miniserv.conf
    #修改端口
    将port-10000修改为其他端口号,如port=9999
  • 重启webmin
    /etc/webmin/restart#重启
    /etc/webmin/start#启动
    /etc/webmin/stop#停止
  • 防火墙放开对应端口,如9999
    firewall-cmd-zone=public-add-port=9999/tcp-permanent #配置防火墙开放9999端口
    firewall-cmd-reload #更新防火墙配置
    firewall–cmd-zone-public-list-ports #查看已经开放的端口号

宝塔:

安装: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh ed8484bec

外网面板地址: http://219.135.154.95:8888/96a2b652
内网面板地址: http://192.168.205.129:8888/96a2b652
username: tohahwlr
password: f452b723

tips

找回root密码:

  • 首先,启动系统,进入开机界面,在界面中按“e”进入编辑界面。
  • 进入编辑界面,使用键盘上的上下键把光标往下移动,找到以“fi” “Linux16”开头内容所在的行数”,在行的最后面输入:init=/bin/sh。
  • 输入完成后,直接按快捷键:Ctrl+x 进入 单用户模式。
  • 进入后,在光标闪烁的位置中输入:mount -o remount,rw /
  • 在新的一行最后面输入:passwd 按回车键。之后就可以输入新密码,以及确认密码。
  • 密码修改后,会显示passwd…..的样式,即修改成功;
  • 接着输入:touch /.autorelabel 回车,再输入:exec /sbin/init 回车,然后等待系统修改密码(过程时间可能有点长),并自动重启即可。