文章目录

视频链接:

【小白入门 通俗易懂】2021韩顺平 一周学会Linux

第1章:Linux开山篇-内容介绍

1.1 本套Linux课程内容

在这里插入图片描述
三个定制篇:

在这里插入图片描述

课堂特色(面试题):

在这里插入图片描述

1.2 Linux使用的地方

在Linux下开发项目,如开发JavaEE,大数据,Python,PHP,C/C++,Go

Linux运维工程师:服务器规划;调试优化;日常监控;故障处理;数据备份和恢复

Linux嵌入式工程师:熟练掌握Linux下各种驱动的开发,在嵌入式的系统中进行系统开发(多数使用C或者C++语言开发)

1.3 Linux应用的领域

  • 个人桌面领域的应用:传统linux应用薄弱,但随着ubuntu、fedora等优秀桌面环境兴起,在该领域的占有率在提高。
  • 服务器领域:linux在服务器领域的应用是最强的,因为它免费、稳定、高效
  • 嵌入式领域:linux运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点 。主要应用在:机顶盒、数字电视、网络电话、智能家居等领域。以后再物联网中应用会更加广泛。

第2章:Linux基础篇-Linux入门:

2.1 Linux介绍

2.1.1概述

  1. linux怎么读
  2. linux是一个开源、免费的操作系统,其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目(c/c++/php/python/java/go)都会部署到Linux/unix系统上。
  3. 常见的操作系统(windows、IOS、Android、MacOS、linux、Unix)
  4. linux吉祥物:企鹅Tux
  5. Linux之父:linus Torvalds、Git创作者、世界著名黑客、linux0.01版源码(不到1万行)
  6. Linux主要的发行版:Ubuntu、RedHat、CentOS、Debian、Fedora、SuSE、OpenSUSE

注意:linux主要指一个内核,而在内核的基础上, 有不同的人对他进行包装,做成发行版

2.2 Linux和Unix的关系

2.2.1 Unix是怎么来的

在这里插入图片描述

2.2.2 Linux是怎么来的

在这里插入图片描述

2.2.3 Linux和Unix关系

在这里插入图片描述

第3章:Linux基础篇-VM和Linux的安装

3.1 安装VM和Centos

3.1.1 基本说明

学习Linux需要一个环境,我们有3个方案 :
1.直接真机上安装Centos系统
2.先安装虚拟机软件,然后在虚拟机软件上安装Centos系统
3.租/买一个云服务器,在服务器上安装Centos系统

3.1.2 安装虚拟机和Centos

这里采用方案2,为此,需要:
1.先安装虚拟机软件virtual machine。这里提供一个下载地址。
VMware Pro v16.22(免注册): https://423down.lanzouo.com/ihUclz275hg
2.再安装Linux(CentOS7.6/centOS8.1)。这里提供一个下载地址(推荐使用迅雷下载)。
CentOS-7-x86_64-DVD-2009.iso: http://mirrors.aliyun.com/centos/7/isos/x86_64/
CentOS-8.5.2111-x86_64-dvd1.iso(会随着更新而变化): http://mirrors.aliyun.com/centos/8/isos/x86_64/
3.原理示意图(VM和Linux的关系):
在这里插入图片描述
注意:
1.在任务管理器-性能-CPU中,查看CPU是否已经开启“虚拟化支持”。如果CPU未开启虚拟化,要查看自己的电脑型号,看是否支持虚拟化。如果支持,则可以参考文章“启动BIOS的虚拟化设置 | 开启CPU虚拟化支持”在BIOS中开启虚拟化。

CentOS安装步骤:
1.创建虚拟机
2.开始安装CentOS7.6系统[演示]
注意:创建root账户的密码时需要生成复杂密码
3.CentOS安装难点-网络连接方式(一般选择NAT模式)
在这里插入图片描述

3.1.3 网络连接的三种模式

1.桥接模式:虚拟系统可以在同一网段占用一个ip地址,通过该ip地址可以与外部系统通讯,但是同一网段下的多个主机的多台虚拟设备可能占用多个ip,造成ip不够用的情况,容易造成IP冲突。
2.NAT模式:网络地址转换模式,虚拟系统可以与主机形成一个局域网,并借用主机的ip与外部系统通讯(通过主机代理),不造成IP冲突。但是外部系统无法与虚拟机通讯(不能找到)。
3.主机模式:独立系统,一般只与物理主机访问,不能访问外网。

3.2 虚拟机克隆

如果你已经安装了一台linux操作系统,你想要更多的来构建一个集群。则不需要重新安装linux操作系统,只需要进行克隆即可。有两种方法进行克隆。
1.直接拷贝一份安装好的虚拟机文件。然后用vm打开。
2.使用vmware的克隆操作。注意,克隆时,必须先关闭要克隆的linux系统。

3.3 虚拟机快照

如果你在使用虚拟机系统的时候(比如linux),你想回到原先的某一个状态,也就是说你担心可能有些误操作造成系统异常,需要回到原先某个正常运行的状态,vmware也提供了这样的功能,就叫快照管理。

注意:快照会保存当前状态,但是代价是一定的磁盘容量的占据,所以不要频繁快照无意义的状态浪费磁盘空间。

3.4 虚拟机的迁移和删除

虚拟系统安装好了,它的本质就是文件(放在文件夹的)。
虚拟系统的迁移:把安装好的虚拟系统这个文件夹整体拷贝或剪切到另外位置使用。
虚拟系统的删除:在vmware将虚拟系统从库中移除,然后手动删除虚拟系统对应的文件夹;或在vmware中,右键-管理-从磁盘中删除。

3.5 安装vmtools

3.5.1 介绍

1.vmtools安装后,可以让我们在windows下更好地管理vm虚拟机
2.可以设置windows和centos的共享文件夹(下图为示意图)
在这里插入图片描述

3.5.2 安装vmtools的步骤

1.进入centos,将桌面上的centos光驱弹出(没有显示光驱的,重启一下)
2.点击vm菜单的->install vmware tools(如果是灰色的,有两种解决方案:1.退出虚拟机,重新打开虚拟机,在虚拟机没有完全开机前,点击“install vmware tools”。2.先点击暂停符号挂起,再重新运行,在虚拟机完全运行前,点击“install vmware tools”。)
3.centos会出现一个vmtools的安装包:VMware Tools-10.3.10-xxx.tar.gz(tar.gz文件类似于windows的压缩文件)
4.将这个安装包拷贝到/opt目录下
5.使用解压命令tar,得到一个安装文件
首先右键打开终端

cd /opt # 进入到opt目录
ls # 可以看到该目录下的文件
tar -zxvf xx.tar.gz # 这里xx是略写,实际代码里写VM(必须大写),然后按tab键会自动补全
ls # 显示如下图

在这里插入图片描述
解压完之后,在终端中,蓝色显示的就是文件夹。
6.使用命令进入该vm解压目录,/opt目录下

cd vm... # ...用tab键补全
ls # 显示如下图

在这里插入图片描述
绿色的vmware-install.pl是安装文件。
7.安装./vmware-install.pl

./ vm... # ...用tab键补全

一路回车,但注意,最后会询问你是否要卸载VMware Tools来节省磁盘空间,要选no。
在这里插入图片描述

8.全部使用默认设置即可,就可以安装成功
注意:安装vmtools,需要有gcc(c语言的一种编译器)
可以在终端输入查看系统是否安装了gcc。

gcc -v

如果显示了gcc版本,则说明安装了gcc。

3.5.3 设置共享文件夹

  • 基本介绍
    1.为了方便,可以在主机的磁盘上设置一个共享文件夹,比如在d盘创建一个myshare文件夹:d:/myshare
  • 具体步骤
    1.右键虚拟机,点击设置->选项->共享文件夹,设置选项为“总是启用”,然后再点击添加,将d:/myshare的文件夹添加到共享文件夹中
    在这里插入图片描述
    2.windows共享的d:/myshare在虚拟机的/mnt/hgfs/目录下
  • 注意事项和细节说明:
    1.对于虚拟机和主机在一台电脑上的情形,上面的方式就可以实现windows和centos共享文件了。但是在实际开发中,linux系统可能在远端,而不和主机在一台电脑上,此时文件的上传下载是需要使用远程方式(网络)完成的
    2.远程方式登录,后面会具体讲解

第4章:linux基础篇-目录结构

4.1 Linux目录结构

4.1.1 基本介绍

1.linux的文件系统是采用级层式的树状目录机构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其他的目录。
2.深刻理解linux树状文件目录是非常重要的。(框架需要背)
3.记住一句经典的话:在Linux世界里,一切皆文件
注:linux会将硬件映射成文件来进行管理。
4.示意图
在这里插入图片描述

4.2 具体的目录结构(不用背,知道即可)

  • /bin [常用] (/usr/bin、/usr/local/bin):
    是Binary的缩写,这个目录存放着最经常使用的指令,如cd指令。
  • /sbin (/usr/sbin、/usr/local/sbin):
    s是Super User的意思,这里存放的是系统管理员使用的系统管理程序。
  • /home [常用]:
    存放普通用户的根目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名。可以在终端用下面命令创建和删除linux用户:
useradd jack # 创建名为jack的用户,同时在/home目录下会创建jack目录
userdel -r jack # 移除jack用户,同时在/home目录下会移除jack目录
  • /root [常用]:
    该目录为系统管理员,也称作超级权限者的用户主目录
  • /lib:系统开机所需要最基本的动态连接共享库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库。
  • /lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件(lost+found目录一般是隐藏的,通过在终端,在根目录输入ls可以查看到)
  • /etc [常用]:所有的系统管理所需要的配置文件和子目录,比如安装mysql数据库,则数据库的配置文件会默认放在etc下面。当然etc也有系统的一些配置文件。
  • /usr [常用]: 这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于windows下的program files目录(windows下安装的程序默认的目录)。
  • /boot [常用]:存放的是启动Linux时的一些核心文件,包括一些连接文件以及镜像文件。
  • /proc [不能动]:这个目录是一个虚拟的目录,它是系统内存的映射,访问这个目录来获取系统信息。
  • /srv [不能动]: service缩写,该目录存放一些服务启动之后需要提取的数据。
  • /sys [不能动]: 这是linux2.6内核的一个很大的变化。该目录下安装了2.6内核中新出现的一个文件系统sysfs。
  • /tmp: 这个目录是用来存放一些临时文件的。
  • /dev:类似于windows的设备管理器,把所有的硬件用文件的形式存储,如cpu,硬盘等
  • /media [常用]:linux系统会自动识别一些设备,如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下。
  • /mnt [常用]:系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进入该目录就可以查看里面的内容了。如之前的共享文件夹d:/myshare
  • /opt:这是给主机额外安装软件所存放的目录。如安装ORACLE数据库就可以放到该目录下。默认为空。
  • /usr/local [常用]:这是另一个给主机额外安装软件安装的目录。(软件安装好存放的目录)一般是通过编译源码方式安装的程序。
  • /var [常用]:这个目录中存放着不断扩充着的东西,习惯将经常被修改的目录放在该目录下。包括各种日志文件。
  • /selinux [security-enhanced linux]: SELinux是一种安全子系统,它能控制程序只访问呢特定文件,有三种工作模式,可自行设置。

第5章: Linux实操篇-远程登录到Linux服务器

5.1 为什么需要远程登陆Linux

5.1.1 说明:公司开发的时候,具体的应用场景是这样的

1.linux服务器是开发小组共享的2
2.正式上线的项目是运行在公网
3.因此程序员需要远程登陆到Linux进行项目管理或者开发
4.画出简单的网络拓扑示意图(帮助理解)
5.远程登陆客户端有Xshell7,Xftp7,我们学习使用Xshell7和Xftp7,其他的远程工具大同小异
6.示意图
在这里插入图片描述

5.2 远程登陆Linux-Xshell7

5.2.1 介绍

  1. 说明:Xshell是目前最好的远程登录到Linux操作系统的软件,流畅的速度并且完美解决了中文乱码的问题,是目前程序员首选的软件。
  2. Xshell是一个强大的安全终端模拟软件,它支持SSH1,SSH2,以及Microsoft Windows平台的TELNET协议。
  3. Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的。

5.2.2 下载-安装-配置和使用

xshell7的下载地址:https://www.xshell.com/zh/free-for-home-school/

在这里插入图片描述

5.3 远程上传下载文件-Xftp7

5.3.1 介绍

Xftp7是一个基于windows平台的功能强大的SFTP、FTP文件传输软件。使用Xftp以后,windows用户能安全地在UNIX/Linux的和Windows PC之间传输文件。

5.3.2 Xftp7安装配置和使用

xftp7下载地址:同上面的Xshell7下载地址
在这里插入图片描述

5.3.3 细节讨论

如何处理Xftp中文乱码问题?
答:点击属性-选项,在编码方式中选择UTF-8则可以处理乱码问题。
在这里插入图片描述

第6章:Linux实操篇-Vi和Vim编辑器

6.1 vi和vim的基本介绍

Linux系统会内置vi文本编辑器。
Vim具有程序编程的能力,可以看作是Vi的增强版本,可以主动地以字体颜色辨别语法的正确性,方便程序设计。代码补全、编译及错误跳转等方便编程的功能特别丰富,再程序员中被广泛使用。

6.2 vi和vim常用的三种模式

6.2.1 正常模式:

以vim打开一个档案就直接进入一般模式(默认模式)。在这个模式中,你可以使用[上下左右]按键来移动光标,你可以使用[删除字符]或[删除整行]来处理档案内容,也可以使用[复制、粘贴]来处理你的文件数据。

6.2.2 插入模式:

按下i,I,o,O,a,A,r,R等任何一个字母之后才会进入编辑模式,一般来说按i即可。

6.2.3 命令行模式:

先输入esc,再输入冒号":"或“/”,就能切换到命令行模式。在这个模式中,可以提供你相关指令,完成读取、写入(w)、替换、离开vim(q)、显示行号、写入并退出(wq)等动作。

6.3 各种模式的相互切换

在这里插入图片描述

6.4 vi和vim快捷键

6.4.1 快捷键使用练习

  1. 拷贝当前行:在一般模式下输入yy ;拷贝当前行向下的5行:在一般模式下输入5yy ;并粘贴(输入p)
  2. 删除当前行:在一般模式下输入dd ;删除当前行向下的5行:在一般模式下输入5dd
  3. 在文件中查找某个单词:在命令行模式下输入“/单词”,回车就会对单词进行查找,输入n就是查找下一个
  4. 设置文件的行号,取消文件的行号:在命令行模式下,输入“:set nu”和“:set nonu”
  5. 编辑/etc/profile文件,在一般模式下,使用快捷键到该文档的最末行[G]和最首行[gg]
  6. 在一个文件中输入“hello”,然后又撤销这个动作:在一般模式下,输入“u”
  7. 编辑/etc/profile文件,并将光标移动到20行:在一般模式下,输入“20“再输入”shift+g”
  8. 更多的看整理的文档

6.4.2 快捷键图

在这里插入图片描述

第7章:Linux实操篇-开机、重启和用户登录注销

7.1 关机&重启命令

7.1.1 基本介绍

shutdown -h now : 立刻进行关机
shutdown -h 1 “hello, 1分钟后会关机了” :在终端提示“hello,1分钟后会关机了”,并且在1分钟后关机
shutdown -r now : 现在重新启动计算机
halt :关机,作用和上面一样
reboot :现在重新启动计算机
sync :把内存的数据同步到磁盘

7.1.2 注意细节:

1.不管是重启系统还是关闭系统,首先要运行sync命令,把内存中的数据写到磁盘中
2.目前的shutdown/reboot/halt等命令均已经在关机前进行了sync,老韩提示:小心驶得万年船

7.2 用户登录和注销

7.2.1 基本介绍

1.登录时尽量少用root账号登录,因为它是系统管理员,最大的权限,要避免使用它导致误操作。可以利用普通用户登录,然后登陆后再用‘su - 用户名’命令来切换成系统管理员身份。
2.在提示符下输入logout即可注销用户

7.2.2 使用细节

1.logout注销指令在图形运行级别(如终端)无效,在运行级别3(如xshell登录)下有效
2.运行级别这个概念,后面给大家介绍

第8章:Linux实操篇-用户管理

8.1 基本介绍

Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个账号,然后以这个账号的身份进入系统。
在这里插入图片描述

8.2 添加用户

8.2.1 基本语法

useradd 用户名

8.2.2 应用案例

案例1:添加一个用户milan,默认该用户的家目录在/home/milan(登录该用户后会默认切换到其家目录)

8.2.3 细节说明

1.当创建用户成功后,会自动创建和用户同名的家目录
2.也可以通过useradd -d 指定目录 新的用户名,给新创建的用户指定家目录

8.3 指定/修改密码

8.3.1 基本语法

passwd 用户名
注意:如果不写用户名,则只会给当前用户修改密码

8.3.2 应用案例

给milan 指定密码:passwd milan
补充:pwd命令(print working directory):显示当前所在的工作目录

8.4 删除用户

8.4.1 基本语法

userdel 用户名

8.4.2 应用案例

1.删除用户milna,但是要保留家目录:userdel milan
2.删除用户以及用户家目录,比如tom:userdel -r tom

8.4.3 细节说明

是否保留家目录的讨论?
一般情况下,我们建议保留家目录。

8.5 查询用户信息指令

8.5.1 基本语法

id 用户名

8.5.2 应用案例

案例:请查询root信息

8.5.3 细节说明

当用户不存在时,返回无此用户

8.6 切换用户

8.6.1 介绍

在操作LInux中,如果当前用户的权限不够,可以通过su - 指令,切换到高权限用户,比如root

8.6.2 基本语法

su - 切换用户名
或su 切换用户名
注意:su root,只是临时切换到root用户,切换后环境变量不变,取得root的部分权限,不能使用root在path中的独有命令;su - root切换后环境变量改变,几乎可以不受限制做任何事

8.6.3 应用实例

创建一个用户jack,指定密码,然后切换到jack

8.6.4 细节说明

1.从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
2.当需要返回到原来用户时,使用exit/logout指令
3.也可以使用“su 切换用户名"来切换用户,但这样登录不是通过shell登录,不能通过logout注销,只能通过exit退出登录

8.7 查看当前用户/登录用户

8.7.1 基本语法

whoami/ who am i
注意:
1.whoami只显示当前使用的身份(切换后身份会变),显示的信息少,只显示用户名
2.who am i显示的是最初登录的身份,无论后面切换了多少次用户都一样,显示的信息多,还会显示登录时间

8.8 用户组

8.8.1 介绍

类似于角色,系统可以对有共性(权限)的多个用户进行统一的管理

8.8.2 新增组

指令:groupadd 组名

8.8.3 删除组

指令(基本语法):groupdel 组名

8.8.4 增加用户时直接加上组

指令(基本语法):useradd -g 用户组 用户名

  • 案例演示
    增加一个用户 zwj, 直接将他指定到wudang
    (前面我们使用useradd 用户名 新增用户时,没有分配组,系统会默认分配该用户到用户名同名的组中去)
groupadd wudang
useradd -g wudang zwj

8.8.5 修改用户的组

指令(基本语法):usermod -g 用户组 用户名

  • 案例演示
    创建一个组 mojiao
    把zwj放入到mojiao
groupadd mojiao
usermod -g mojiao zwj

8.9 用户和组相关文件

8.9.1 /etc/passwd文件

用户(user)的配置文件,记录用户的各种信息
每行的含义:用户名:口令:用户标识号(uid):组标识号(gid):注释性描述:主目录(家目录):登录Shell
补充:
cd指令,linux内核无法识别,要通过shell翻译解释,而shell的种类很多,有bash,tcsh,csh等等
在这里插入图片描述

8.9.2 /etc/shadow文件

口令的配置文件
每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
注意:
1.每次输入的口令,会在shadow文件中验证
2.最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志都是用一种特殊的标识表示的,你是看不懂的

8.9.3 /etc/group文件

组(group)的配置文件,记录Linux包含的组的信息
每行含义:组名:口令:组标识号:组内用户列表
注意:
组内用户列表看不到,它隐藏了

第9章:Linux实操篇-实用指令

9.1 指定运行级别

9.1.1 基本介绍

基本级别说明:
0:关机
1:单用户【找回丢失密码】
2:多用户状态没有网络服务(用的很少)
3:多用户状态有网络服务(用的最多的,不带图形界面,节省资源;支持多用户且有网络服务-在实际生产环境中使用最多)
4:系统未使用保留给用户(用的比较少)
5:图形界面(启动后默认进入的级别,是多用户的)
6:系统重启
常用运行级别是3和5,也可以指定默认运行级别,后面演示

9.1.2 应用实例

命令:init [0123456]
应用案例:通过init来切换不同的运行级别,比如修改级别为3:则命令为init 3

9.1.3 CentOS7运行级别说明

在centos7以前,我们是在/etc/inittab文件中进行修改,它里面有个数字。
到了centos7,进行了简化,在/etc/inittab文件中有如下:
multi-user.target:analogous to runlevel 3 (多用户,等价于级别3)
graphical.target:analogous to runlevel 5 (图形化,等价于级别5)

# To view current default target, run:(以下指令可以查看当前运行级别)
systemctl get-default

# To set a default target, run:(以下指令可以设置默认运行级别)
systemctl set-default TARGET.target

9.2 找回root密码

注意:不同版本找回密码的方式可能有一些小区别
1.首先,启动系统,进入开机界面,在界面中按”e“进入编辑界面。如图
在这里插入图片描述
2.进入编辑界面,使用键盘的上下键将光标往下移动,找到以”Linux16“开头内容所在的行数,在行的最后面输入:init=/bin/sh。如图
在这里插入图片描述
3.接着,输入完成后,直接按快捷键:Ctrl+x进入单用户模式。
4.接着,在光标闪烁的位置中输入:mount -o remount,rw / (注意:各个单词间有空格),完成后按键盘的回车键,如图。
在这里插入图片描述
5.在新的一行最后面输入:passwd,完成后按键盘的回车键(Enter)。输入密码,然后再次确认密码即可(密码长度最好是8位以上,但不是必须的),密码修改成功后,会显示passwd。。。的样式,说明密码修改成功。
6.接着,在光标闪烁的位置中(最后一行中)输入:touch /.autorelabel(注意:touch与 /之间有一个空格),完成后按键盘的回车键(Enter)。
7.继续在光标闪烁的位置中,输入:exec /sbin/init(注意: exec与 /之间有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码(这个过程时间可能有点长,耐心等待),完成后,系统会自动重启,新的密码生效了。

9.3 帮助指令

9.3.1 man获取帮助信息

基本语法:man[命令或配置文件] (功能描述:获取帮助信息)
案例:查看ls命令的帮助信息:man ls
注意:
1.如果帮助信息太长,没有显示完全,那么按空格键,会继续往下显示。
2.ls中常用的选项
-a:列出所有文件,包括以”.“开头的隐含文件(在linux中,隐含文件是以”.“开头的,a代表all)。
-l:单行输出。
3.按h寻求man指令的帮助,按q退出man指令。
4.选项可以组合使用,如-la(顺序无所谓,也可以是-al),则表示单行输出,且包含所有隐藏文件
5.ls -al默认是查看当前目录的,如果要查看root目录下的文件,则可以用ls -al /root

9.3.2 help指令

基本语法:help命令(功能描述:获得shell内置命令的帮助信息)
注意:
help命令只能显示shell内置命令的帮助信息,而linux系统中绝大多数命令是外部命令。而通过man命令查看其它命令的详细文档。没有内建与外部命令的区分,因为 man 工具是显示系统手册页中的内容,man 得到的内容比 help 更多更详细。

案例:查看shell内置的cd命令的帮助信息: help cd

9.4 文件目录类

9.4.1 pwd指令

基本语法:pwd (功能描述:显示当前工作目录的绝对路径)
应用实例:案例:显示当前工作目录的绝对路径

9.4.2 ls指令

基本语法:ls[选项][目录或是文件]
常用选项
-a:显示当前目录所有的文件和目录,包括隐藏的
-l:以列表的方式显示信息

应用实例
案例:查看当前目录的所有内容信息:ls

9.4.3 cd指令

基本语法:cd[参数] (功能描述:切换到指定目录)
理解:绝对路径和相对路径
在这里插入图片描述

cd ~或cd:回到自己的家目录,比如你是root,cd ~,则到/root,如果是tom,cd ~,则到/home/tom
cd .. 回到当前目录的上一级目录

应用实例
案例1:使用绝对路径切换到root目录:cd /root
案例2:使用相对路径到/root目录:比如在/home/tom,cd …/…/root
案例3:表示回到当前目录的上一级目录:cd …
案例4:回到家目录:cd ~

9.4.4 mkdir指令(make directory)

mkdier指令用于创建目录
基本语法:mkdir [选项] 要创建的目录
常用选项
-p:创建多级目录
应用案例
案例1:创建一个目录/home/dog:mkdir /home/dog
案例2:创建多级目录/home/animal/tiger:mkdir -p /home/animal/tiger

9.4.5 rmdir指令

rmdir指令删除空目录
基本语法
rmdir [选项] 要删除的空目录
应用实例
案例:删除一个空目录 /home/dog:rmdir /home/dog
使用细节
rmdir 删除的是空目录,如果目录下有内容时无法删除的。
提示:如果需要删除非空目录,需要使用 ’rm -rf 要删除的目录‘(-rf表示强制递归)
比如:rm -rf /home/animal
注意:
1.使用rm -rf进行删除时,要非常谨慎。
2.rm指令单独只能删除文件,加上参数-r可以删除包含文件的文件夹。但是在删除前shell会询问。

9.4.6 touch指令

touch指令创建空文件
基本语法
touch文件名称
应用实例
案例:在/home目录下,创建一个空文件 hello.txt:touch hello.txt

9.4.7 cp指令

cp指令拷贝文件到指定目录

基本语法
cp [选项] source dest
常用选项
-r:递归复制整个文件夹

应用实例:
案例1:将/home/hello.txt拷贝到/home/bbb目录下:在/home目录下,cp hello.txt bbb
案例2:递归复制整个文件夹,比如将/home/bbb整个目录,拷贝到/opt:cp -r /home/bbb /opt(这样拷贝是将整个目录,包括目录bbb本身,都拷贝到/opt下的)
使用细节
强制覆盖不提示的方法:\cp:如上面的指令如果要强制覆盖,则为\cp -r /home/bbb /opt

9.4.8 rm指令

说明:rm指令移除文件或目录
基本语法
rm [选项] 要删除的文件或目录
常用选项
-r:递归删除整个文件夹
-f:强制删除不提示

应用实例
案例1:将/home/hello.txt删除:rm /home/hello.txt ,在提示中选择y
案例2:递归删除整个目录 /home/bbb:rm -r /home/bbb(删除整个目录,但每删其中的一个文件都会提示)
使用细节:
强制删除不提示的方法:带上-f参数即可

9.4.9 mv指令

mv移动文件与目录或重命名
基本语法
mv oldNameFile newNameFile (功能描述:重命名)
mv /temp/movefile /targetFolder(功能描述:移动文件)
注意:
1.重命名是在同一个目录下
2.移动是在不同的目录下

应用实例
案例1:将/home/cat.txt文件重新命名为pig.txt:在/home目录下,mv cat.txt pig.txt
案例2:将/home/pig.txt文件移动到/root目录下:在home目录下,mv cat.txt /root
案例3:移动整个目录,比如将/opt/bbb移动到/home下,并重命名为uuu:mv /opt/bbb /home/uuu(/home目录下本来没有/uuu目录)
注意:
对案例3,如果/home目录下本来有/uuu目录,则mv /opt/bbb /home/uuu命令会把/bbb目录移到/home/uuu目录下

9.4.10 cat指令

cat查看文件内容(与vim的区别是,cat只能查看,不能修改,更安全)
基本语法
cat [选项] 要查看的文件
常用选项
-n:显示行号
应用实例:
案例1:/etc/profile 文件内容,并显示行号:cat -n /etc/profile
使用细节
cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令:| more
补充:管道命令有点类似于,将前面的结果,再交给下一个指令进行处理,管道命令就是一个竖杠,再带一个其他命令

9.4.11 more指令

more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键(交互的指令),详见操作说明
基本语法
more要查看的文件
操作说明,如图
在这里插入图片描述

应用实例
案例:采用more查看文件/etc/profile

9.4.12 less指令

less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。
基本语法
less要查看的文件
操作说明
在这里插入图片描述
应用实例
案例:采用less查看一个大文本文件:less /opt/杂文.txt

9.4.13 echo指令

echo输出内容到控制台
基本语法
echo [选项] [输出内容]
应用实例
案例1:使用echo指令输出环境变量,比如输出环境变量$PATH:echo $PATH ;输出主机名$HOSTNAME: echo $HOSTNAME
案例2:使用echo指令输出hello,world!:echo ‘hello,world~“(引号可加可不加)

9.4.14 head指令

head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容
基本语法
head 文件(功能描述:查看文件头10行内容)
head -n 5文件 (功能描述:查看文件头5行内容,5可以是任意行数)
应用实例
案例:查看/etc/profile的前面5行代码:head -n 5 /etc/profile(去掉-n 5,默认看前10行)
注意:空行也算一行

9.4.15 tail指令

tail用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容。
基本语法
1.tail 文件 (功能描述:查看文件尾10行内容)
2.tail -n 5 文件 (功能描述:查看文件尾5行内容,5可以是任意行数)
3.tail -f 文件 (功能描述:实时追踪该文档的所有更新)
应用实例
案例1:查看/etc/profile最后5行的代码:tail -n 5 /etc/profile
案例2:实时监控mydate.txt,看看当该文件有变化时,是否看到,实时追加hello,world

touch mydate.txt
tail -f mydate.txt

此时在另一个终端

echo 'hello' > /home/mydate.txt

注意:
退出监控是ctrl+C

9.4.16 >指令和>>指令

>输出重定向和>>追加
基本语法
1.ls -l >文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))
2.ls -al >>文件 (功能描述:列表的内容追加到文件aa.txt的末尾)
3.cat 文件1>文件2 (功能描述:将文件1的内容覆盖到文件2的内容)
4.echo ’内容‘ >> 文件 (功能描述:将内容追加到文件中)
应用实例
案例1:将/home目录下的文件列表写入/home/info.txt中,覆盖写入:ls -l /home > /home/info.txt(如果没有info.txt,则会创建)
案例2:将当前日历信息追加到/home/mycal文件中:cal >> /home/mycal

9.4.17 ln指令

软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径
基本语法
ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)
应用实例
案例1:在/home目录下创建一个软链接myroot,连接到/root目录:ln -s /root /home/myroot
案例2:删除软连接myroot:rm /home/myroot(会提示是否删除符号链接)
注意:
如果rm /home/myroot/,会提示无法删除/home/myroot/,是一个目录
细节说明
当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录

9.4.18 history指令

查看已经执行过的历史指令,也可以执行历史指令
基本语法
history(功能描述:查看已经执行过的历史命令)
应用实例
案例1:显示所有的历史命令:history
案例2:显示最近使用过的10个指令:history 10
案例3:执行历史编号为5的指令:!5 (可以输入负数,表示倒数的指令)

9.5 时间日期类

9.5.1 date指令-显示当前日期

基本语法
1.date (功能描述:显示当前时间)
2.date +%Y (功能描述:显示当前年份)
3.date +%m (功能描述:显示当前月份)
4.date +%d (功能描述:显示当前是哪一天)
5.date ’+%Y-%m-%d %H:%M:%S‘ (功能描述:显示年月日时分秒)
应用实例
案例1:显示当前时间信息:date (2023年 01月 06日 星期五 09:58:54 CST)
案例2:显示当前时间年月日:date ’+%Y-%m-%d‘
案例3:显示当前时间年月日时分秒:date ‘+%Y-%m-%d %H:%M:%S’

9.5.2 date指令-设置日期

基本语法
date -s 字符串时间
应用实例
案例1:设置系统当前时间,比如设置成2021-11-11 11:22:22:date -s ‘2021-11-11 11:22:22’

9.5.3 cal指令

查看日历指令
基本语法
cal [选项] (功能描述:不加选项,显示本月日历)
应用实例
案例1:显示当前日历:cal
案例2:显示2020年日历:cal 2020

9.6 搜索查找类

9.6.1 find指令

find指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。
基本语法
find [搜索范围] [选项]
选项说明
在这里插入图片描述
应用案例
案例1:按文件名:根据名称查找/home目录下的hello.txt文件:find /home -name hello.txt(没找到就没有信息)
案例2:按拥有者:查找/opt目录下,用户名称为nobody的文件:find /opt -user nobody
案例3:查找整个linux系统下大于200M的文件(+n大于 -n小于 n等于,单位有k,M,G):find / -size +200M
补充:
ls -lh,h表示人可以看清楚的形式展示,此时显示的文件大小会自动转化为人可以看明白的xx M

9.6.2 locate指令

locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。locate指令无需遍历整个文件系统,查询速度较快。为了保证查询结果的准确度,管理员必须定期更新locate时刻。
基本语法
locate 搜索文件
特别说明
由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库
应用实例
案例1:请使用locate指令快速定位hello.txt文件所在目录

updatedb
locate hello.txt

which指令,可以查看某个指令在哪个目录下,比如ls指令在哪个目录:which ls

9.6.3 grep指令和管道符号|

grep过滤查找,管道符,“|”,表示将前一个命令的处理结果传递给后面的命令处理
基本语法
grep [选项] 查找内容 源文件
常用选项
在这里插入图片描述
应用实例
案例1:请在hello.txt文件中,查找’yes‘所在行,并显示行号
方法1:cat /home/hello.txt | grep -n ’yes‘
方法2:grep -n ’yes‘ /home/hello.txt

9.7 压缩和解压类

9.7.1 gzip/gunzip指令

gzip用于压缩文件,gunzip用于解压的
基本语法
gzip文件 (功能描述:压缩文件,只能将文件压缩为*.gz文件)
gunzip文件.gz (功能描述:解压缩文件命令)
应用实例
案例1:gzip压缩,将/home下的hello.txt文件进行压缩:gzip /home/hello.txt
案例2:gunzip压缩,将/home下的hello.txt.gz文件进行解压缩:gunzip /home/hello.txt.gz

9.7.2 zip/unzip指令

zip用于压缩文件(或目录),unzip用于解压的,这个在项目打包发布中很有用的
基本语法
zip [选项] xxx.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)
unzip [选项] xxx.zip (功能描述:解压缩文件)
zip常用选项
-r:递归压缩,即压缩目录
unzip的常用选项
-d<目录>:指定解压后文件的存放目录
应用实例
案例1:将/home下的所有文件进行压缩成myhome.zip:zip -r myhome.zip /home(将home目录及其包含的文件和子文件夹都压缩)
案例2:将myhome.zip解压到/opt/tmp目录下

mkdir /opt/tmp
unzip -d /opt/tmp /home/myhome.zip

9.7.3 tar指令

tar指令是打包指令,最后打包后的文件是.tar.gz的文件
基本语法
tar [选项] xxx.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)
选项说明
在这里插入图片描述
-z表示指定gzip格式压缩或解压

应用实例
案例1:压缩多个文件,将/home/pig.txt和/home/cat.txt压缩成pc.tar.gz:
tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt
(压缩时候在绝对路径下压缩,会把/home目录也压缩进去,在相对路径下压缩则不会这样)
案例2:将/home的文件夹压缩成myhome.tar.gz:
tar -zcvf myhome.tar.gz /home
案例3:将pc.tar.gz解压到当前目录
tar -zxvf pc.tar.gz
案例4:将myhome.tar.gz解压到/opt/tmp2目录下

mkdir /opt/tmp2
tar -zxvf /home/myhome.tar.gz -C /opt/tmp2

注意:
1.-C 目标目录表示指定目标目录
2.任何压缩方法,被压缩文件路径最好使用相对路径,否则会自动压缩绝对路径多创文件夹
补充:打包解包是针对.tar文件而言的,.tar文件就是将多个文件合并成一个单文件,解压和压缩是针对.gz文件而言,-c是打包成.tar文件,-x是把.tar包解开,-z会根据带的x还是c来决定解压还是压缩

第10章:Linux实操篇-组管理和权限管理

10.1 Linux组基本介绍

在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其他组的概念。
1.所有者(谁创建谁就是所有者,但是后续可以修改)
2.所在组(创建者所属用户组,但后续可以修改)
3.其他组
4.改变用户所在的组
在这里插入图片描述

10.2 文件/目录 所有者

一般为文件的创建者,谁创建了该文件,就自然地成为该文件的所有者。

10.2.1 查看文件的所有者

指令:ls -ahl
应用实例
在这里插入图片描述

10.2.2 修改文件所有者(ch-ange own-er)

指令:chown 用户名 文件名
应用案例
要求:使用root创建一个文件apple.txt,然后将其所有者修改成tom:

touch apple.txt
chown tom apple.txt # tom用户必须存在

注意:改变所有者,所在组不会变

10.3 组的创建

10.3.1 基本指令

groupadd 组名

10.3.2 应用实例

创建一个组,monster:groupadd monster
创建一个用户fox,并放入monster组中:-useradd -g monster fox

10.4 文件/目录 所在组

当某个用户创建了一个文件后,这个文件的所在组就是该用户所在的组。(默认)

10.4.1 查看文件/目录所在组

基本指令
ls -ahl
应用实例
使用fox创建一个文件,看看该文件属于哪个组?
-rw-r–r–. 1 fox monster 0 1月 7 12:50 ok.txt

10.4.2 修改文件/目录所在的组

基本指令
chgrp 组名 文件名
应用实例
使用roo他用户创建文件orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到fruit组。

groupadd fruit
touch orange.txt
看看当前这个文件属于哪个组 -> root组
chgrp fruit orange.txt

10.5 其他组

除文件的所有者和所在组的用户外,系统的其他用户都是文件的其他组

10.6 改变用户所在组

在添加用户时,可以指定将该用户添加到哪个组中,同样的,用root的管理权限可以改变某个用户所在的组。

10.6.1 改变用户所在组

1.usermod -g 新组名 用户名
2.usermod -d 目录名 用户名 改变该用户登录的初始目录(特别说明:用户需要有进入到新目录的权限)

10.6.2 应用实例

将zwj这个用户从原来所在组,修改到wudang组:usermod -g wudang zwj

10.7 权限的基本介绍

ls -l中显示的内容如下:
在这里插入图片描述
第一列一共有10位,分别用0-9表示,下面是0-9位的说明:
1.第0位确定文件类型(d,-,l,c,b)
l是链接,相当于windows的快捷方式
d是目录,相当于windows的文件夹
-是普通文件
c是字符设备文件,鼠标,键盘(cd /dev可以看到)
b是块设备,比如硬盘(cd /dev可以看到)
2.第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 —User
3.第4-6位确定所在组(同用户组的)拥有该文件的权限。—Group
4.第7-9位确定其他用户拥有该文件的权限。—Other

10.8 rwx权限详解(难点)

10.8.1 rwx作用到文件

1.[r]代表可读(read):可以读取,查看
2.[w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前提条件是对该文件所在的目录有写权限,才能删除该文件
3.[x]代表可执行(execute):可以被执行

10.8.2 rwx作用到目录

1.[r]代表可读(read):可以读取,ls查看目录内容
2.[w]代表可写(write):可以修改,对目录内创建+删除+重命名目录
3.[x]代表可执行(execute):可以进入该目录

10.9文件及目录权限实际案例

10.9.1 ls -l中显示的内容如下:

-rwxrw-r-- 1 root root 1213 Feb 2 09:39 abc

  • 10个字符确定不同用户能对文件干什么
    第一个字符代表文件类型:-代表该文件是普通文件
    其余字符每3个一组(rwx)读(r)写(w)执行(x)
    第一组rwx:文件拥有者的权限是读、写和执行
    第二组rw-:所在组的用户的权限是读、写但不能执行
    第三组r–: 其他组的用户的权限是读不能写和执行

  • 可用数字表示:r=4,w=2,x=1,因此rwx=4+2+1=7,数字可以进行组合
    其他说明
    1 文件:该数一定为1 目录:该数对应子目录数
    root 所有者
    root 所在组
    1213 大小(字节),如果是文件夹,显示4096字节
    Feb 2 09:39 最后修改日期
    abc 文件名

10.10 修改权限-chmod

10.10.1 基本说明

通过chmod指令,可以修改文件或目录的权限
在这里插入图片描述

10.10.2 第一种方式:+、-、=变更权限

u:所有者 g:所有组 o:其他人 a:所有人(u、g、o的总和)
1.chmod u=rwx,g=rx,o=x 文件/目录名
2.chmod o+w 文件/目录名
3.chmod a-x 文件/目录名
案例演示
1.给abc文件的所有者读写执行的权限,给所在组读执行权限,给其他组读执行权限:chmod u=rwx, g=rx,o=rx abc
2.给abc文件的所有者除去执行的权限,增加组写的权限:chmod u-x g+w abc
3.给abc文件的所有用户添加读的权限:chmod a+r abc
注意:当文件可执行的时候,它的颜色会变成绿色

10.10.3 第二种方式:通过数字变更权限

r=4 w=2 x=1 rwx=4+2+1=7
chmod u=rwx,g=rx,o=x 文件目录名 相当于chmod 751 文件目录名
案例演示
要求:将/home/abc.txt 文件的权限修改成rwxr-xr-x,使用给数字的方式实现:
chmod 755 /home/abc.txt

10.11修改文件所有者-chown

10.11.1 基本介绍

chown newowner 文件/目录 (功能描述:改变所有者)
chown newowner:newgroup 文件/目录 (功能描述:改变所有者和所在组)
-R 如果是目录,则使其下所有子文件或目录递归生效

案例演示
请将/home/abc.txt文件的所有者修改成tom:chown tom /home/abc.txt
请将/home/test目录下所有的文件和目录的所有者都修改成tom:chown -R tom /home/test

10.12 修改文件/目录所在组-chgrp

基本介绍
chgrp newgroup 文件/目录 改变所在组
案例演示
请将/home/abc.txt文件的所在组修改成shaolin(少林):chgrp shaolin /home/abc.txt
请将/home/test目录下所有的文件和目录的所在组都修改成shaolin(少林):chgrp -R shaolin /home/test

10.13 最佳时间-警察和土匪游戏

police,bandit
jack,jerry:警察
xh,xq:土匪
1.创建组
2.创建用户
3.jack创建一个文件,自己可以读写,本组人可以读,其他组没有任何权限

groupadd police
groupadd bandit
useradd -g police jack
useradd -g police jerry
useradd -g bandit xh
useradd -g bandit xq
passwd jack
su - jack
vim jack.txt
chmod 640 jack.txt

4.jack修改该文件,让其他组可以读,本组人可以读写:chmod o=r,g=rw jack.txt
5.xh投靠警察:usermod -g police xh
6.测试,看看xh是否可以读写,xq是否可以?小结论,如果要对目录内的文件进行操作,需要先拥有对该目录的相应权限
在这里插入图片描述
注意:
对目录的rwx的权限的讨论和测试:
1.目录的x权限表示可以进入到该目录,比如cd
2.目录的r权限表示可以ls,将该目录的内容显示
3.目录的w权限表示可以在该目录,删除或创建文件

第11章:Linux实操篇-定时任务调度

11.1 crond任务调度

crontab 进行 定时任务的设置

11.1.1 概述

任务调度:是指系统在某个时间执行的特定的命令程序
任务调度分类:1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等
个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份
示意图:
在这里插入图片描述

11.1.2 基本语法

crontab [选项]

11.1.3 常用选项

在这里插入图片描述

11.1.4 快速入门

设置任务调度文件:/etc/crontab
设置个人任务调度。执行crontab -e命令
接着输入任务到调度文件
如:*/1 * * * * ls -l /etc/ > /tmp/to.txt(注意:*之间有空格)
意思说每小时的每分钟执行ls -l /etc/ > /tmp/to.txt命令

  • 参数细节说明
    5个占位符的说明
    在这里插入图片描述
  • 特殊符号的说明
    在这里插入图片描述
  • 特定时间执行任务案例
    在这里插入图片描述

11.1.5 应用实例

案例1:每隔1分钟,就将当前的日期信息,追加到/tmp/mydate文件中:
* * * * * date >> /tmp/mydate
案例2:每隔1分钟,将当前日期和日历都追加到/home/mycal文件中:

  • 方案1:写两条指令到crontab中
  • 方案2:写一个完成两条指令的脚本,然后让crond定时执行
cd /home
vim my.sh (内容为date >> /home/mycal  cal >> /home/mycal)
chmod u+x my.sh # 赋予所有者root执行权限
crontab -e (增加 * * * * * /home/my.sh)

案例3:每天凌晨2:00将mysql数据库testdb,备份到文件中。提示:指令为mysqldump -u root -p密码 数据库 >> /home/db.bak

crontab -e 
0 2 * * * mysqldump -u root -proot testdb > /home/db.bak # 这里假设密码是root

11.1.6 crond相关指令

crontab -r:终止任务调度(其实就是删除)
crontab -l:列出当前有哪些任务调度
service crond restart [重启任务调度]

11.2 at定时任务

11.2.1 基本介绍

1.at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。
2.默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
3.at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
4.在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
指令ps -ef(检测当前所有正在运行的进程有哪些)
指令ps -ef | grep atd (过滤其中的atd相关指令)//可以检测atd是否在运行
5.示意图
在这里插入图片描述

11.2.2 at命令格式

at [选项] [时间]
Crtl + D 结束at命令的输入(按两次)

11.2.3 at命令选项

在这里插入图片描述

11.2.4 at时间定义

  • at指定时间的方法:
    1.接受在当天的hh:mm(小时:分钟)式的时间指定。假如该时间已过去,那么就放在第二天执行。例如:04:00
    2.使用midnight(深夜),noon(中午),teatime(饮茶时间,一般是下午4点)等比较模糊的词语来指定时间。
    3.采用12小时计时制,即在时间后面加上AM(上午)或PM(下午)来说明是上午还是下午。例如:12pm
    4.指定命令执行的具体日期,指定格式为month day(月 日)或mm/dd/yy(月/日/年)或dd.mm.yy(日.月.年),指定的日期必须跟在指定时间的后面。例如:04:00 2021-03-1
    5.使用相对计时法。指定格式为:now + count time-units,now就是当前时间,time-units是时间单位,这里能够使minutes(分钟)、hours(小时)、days(天)、weeks(星期)。count是时间的数量,几天,几小时。例如:now + 5 minutes
    6.直接使用today(今天)、tomorrow(明天)来指定完成命令的时间。

11.2.5 应用案例

案例1:2天后的下午5点执行/bin/ls /home

at 5pm + 2days
at> /bin/ls /home # 然后按两次ctrl+D

案例2:atq命令来查看系统中没有执行的工作任务:atq
案例3:明天17点钟,输出时间到指定文件内,比如/root/date100.log

at 5pm tomorrow
at> date > /root/date100.log # 然后按两次ctrl+D

案例4:2分钟后,输出时间到指定文件内,比如/root/date200.log

at now + 2 minutes
at> date > /root/date200.log # 然后按两次ctrl+D

案例5:删除已经设置的任务,atrm 编号(也可以使用at -d 任务编号:来删除设置的任务)

注意:当出现at>,要输入指令时,退格会失效,要退格,需要使用ctrl+退格

第12章:Linux实操篇-Linux磁盘分区、挂载

12.1 Linux分区

12.1.1 原理介绍

1.Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。
2.Linux采用了一种叫“载入”的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。
3.示意图
在这里插入图片描述

12.1.2 硬盘说明

1.Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘
2.对于IDE硬盘,驱动器标识符为‘hdx~’,其中’hd‘表明分区所在设备的类型,这里是指IDE硬盘。’x‘为盘号(a为基本盘,b为基本从属盘,c为辅助主盘,d为辅助从属盘),’ ~'代表分区,前四个分区用数字1-4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例如,hda3表示为前一个IDE硬盘上的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。
3.对于SCSI硬盘则标识为’sdx~‘,SCSI硬盘使用’sd‘来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。
在这里插入图片描述
上图中,sda表示第一块SCSI硬盘,sda1表示第一块SCSI硬盘的第一个分区
sr0是光驱,不用管他

12.1.3 查看所有设备挂载情况

命令:lsblk或者lsblk -f (list block的简称)
在这里插入图片描述
lsblk -f可以将分区的情况看的更加清晰
在这里插入图片描述
FSTYPE是文件类型,UUID是当你格式化后,会给你的每一个分区分配一个唯一的不重复的40位的字符串(唯一标识符),MOUNTPOINT是挂载点

12.2 挂载的经典案例

12.2.1 说明:

下面我们以增加一块硬盘为例来熟悉下磁盘的相关指令和深入理解磁盘分区、挂载、卸载的概念。

12.2.2 如何增加一块硬盘

1.虚拟机增加硬盘
2.分区
3.格式化
4.挂载
5.设置可以自动挂载

  • 虚拟机增加硬盘步骤1
    在[虚拟机]菜单中,选择[设置],然后设备列表里添加硬盘,然后一路[下一步],中间只有选择磁盘大小的地方需要修改,直到完成。然后重启系统(才能识别)!

  • 虚拟机增加硬盘步骤2
    分区命令 fdisk /dev/sdb
    开始对/sdb分区
    m 显示命令列表
    p 显示磁盘分区 同 fdisk -l
    n 新增分区
    d 删除分区
    w 写入并退出
    说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q。

  • 虚拟机增加硬盘步骤3
    格式化磁盘
    分区命令:mkfs [选项] [-t 分区格式] 分区路径,例如mkfs -t ext4 /dev/sdb1 (mkfs是make filesystem的简写)(也可以写成mkfs.ext4 /dev/sdb1)
    其中ext4是分区类型

  • 虚拟机增加磁盘步骤4
    挂载:将一个分区与一个目录关联起来
    mount 设备名称 挂载目录
    例如:mount /dev/sdb1 /newdisk(必须先创建/newdisk目录)
    卸载:
    umount 设备名称 或者 挂载目录
    例如:umount /dev/sdb1 或者 umount /newdisk
    注意:用命令行挂载重启后会失效(即这样操作的挂载关系是临时的)

  • 虚拟机增加硬盘步骤5
    永久挂载:通过修改/etc/fstab实现自动挂载(fstab是filesystem table的缩写)
    在这里插入图片描述
    补充:最后的两个数字:第一个是挂载点内备份,0表示不做dump备份,第二个表示磁盘检查,0表示不检查磁盘扇区,1表示其他目录文件检查,2表示根目录文件检查
    添加完成后 执行mount -a即刻生效(或者执行reboot也会自动生效)
    注意:永久挂载前最好保存快照。防止操作失误导致开不了机

12.3 磁盘情况查询

12.3.1 查询系统整体磁盘使用情况

基本语法
df -h
应用实例
查询系统整体磁盘使用情况
在这里插入图片描述
注意:如果磁盘使用率达到80%以上,就需要想办法清理空间了。

12.3.2 查看指定目录的磁盘占用情况

基本语法
du -h /目录
查询指定目录的磁盘占用情况,不指定则默认查询当前目录
-s 指定目录占用大小汇总
-h 带计量单位(人类可读)
-a 含文件
–max-depth=1 子目录深度(当前目录的1层子目录也显示)
-c 列出明细的同时,增加汇总值

应用案例
查询/opt目录的磁盘占用情况,深度为1
在这里插入图片描述

12.4 磁盘情况-工作使用指令

1.统计/opt文件夹下文件(以-开头)的个数
第一步:列出/opt目录下的内容:ls -l /opt
第二步:通过正则表达式‘^-’过滤(因为-开头的是文件类型):ls -l /opt | grep ‘^-’
第三步:利用wc指令和-l选项统计行数

ls -l /opt | grep '^-' | wc -l

补充:
wc指令(wc就是wordcount的简写)选项:
-l:计算行数(line)
-c:计算字节数(character)
-m:计算字符数(char)
-w:计算单词数(word)

2.统计/opt文件夹下目录的个数

ls -l /opt | grep '^d' | wc -l

3.统计/opt文件夹下文件的个数,包括子文件夹里的

ls -lR /opt | grep '^-' | wc -l # 递归查看目录

4.统计/opt文件夹下目录的个数,包括子文件夹里的

ls -lR /opt | grep '^d' | wc -l # 递归查看目录

5.以树状显示目录结构:tree 目录
注意:如果没有tree指令,则使用yum install tree,前提网络是畅通的
在这里插入图片描述

第13章:Linux实操篇-网络配置

13.1 Linux网络配置原理图

13.1.1 画出原理图,帮助理解

在这里插入图片描述

13.2 查看网络IP和网关

13.2.1 查看虚拟机网络编辑器和修改IP地址

在这里插入图片描述

13.2.2 查看网关

在这里插入图片描述
在这里插入图片描述

13.3 查看windows环境中的VMnet8网络配置:ipconfig指令

也可以在网络和internet>高级网络设置>查看其他属性里查看
在这里插入图片描述

13.4 查看linux的网络配置:ifconfig指令

在这里插入图片描述

13.5 ping测试主机之间网络连通性

13.5.1 基本语法

ping 目的主机 (功能描述:测试当前服务器是否可以连接目的主机)

13.5.2 应用实例

测试当前服务器是否可以连接百度
ping www.baidu.com

13.6 linux网络环境配置

13.6.1 第一种方法(自动获取):

说明:登录后,通过界面来设置自动获取ip。
优点:linux启动后会自动获取IP,避免冲突
缺点:每次自动获取的ip地址可能不一样
在这里插入图片描述
在这里插入图片描述

13.6.2 第二种方法(指定ip):

  • 说明
    直接修改配置文件来指定ip,并可以连接到外网(程序员推荐)
  • 编辑: vim /etc/sysconfig/network-scripts/ifcfg-ens33(ens33就是网络设备,更准确地说是网卡)
    要求:将ip地址配置成静态的:比如:ip地址为192.168.200.130
    在这里插入图片描述
  • ifcfg-ens33 文件说明
TYPE=‘Ethernet’                     # 网络类型(通常是Ethenet)
BOOTPROTO=‘dhcp’				    # IP的配置方法[none|static|bootp|dhcp](分别表示引导时不使用协议|静态分配IP|BOOTP协议|DHCP协议)
UUID=926a57ba。。。。。              	# 随机id
DEVICE=‘eth0’						# 接口名(设备,网卡)
HWADDR=‘00:0C:2x:0x:xx’	           	# MAC地址(这里没有)
ONBOOT=‘yes’						# 系统启动时,网络接口是否有效(yes/no)

要将ip地址配置成静态的,需要修改ifcfg-ens33文件,具体地

需要修改BOOTPROTO=‘static’		   # 表示静态分配IP
需要添加IPADDR=192.168.200.130 	   # 表示要固定的IP地址
需要添加GATEWAY=192.168.200.2 	   # 表示网关
需要添加DNS1=192.168.200.2		   # 表示域名解析器

修改后保存,接下来还需要打开虚拟机的虚拟网络编辑器,找到VMnet8,修改其子网IP为192.168.200.0
在这里插入图片描述
接下来打开NAT设置,修改网关IP为192.168.200.2
在这里插入图片描述
点应用和确定

  • 重启网络服务或者重启系统生效
    service network restart # 重启网络服务
    reboot # 重启系统

注意:因为修改了虚拟机的ip,所有要在xshell中登录虚拟机,需要修改对应连接的属性中的ip

13.7 设置主机名和hosts映射

13.7.1 设置主机名

1.为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名
2.指令hostname:查看主机名
3.修改文件在/etc/hostname指定
4.修改后,重启生效

13.7.2 设置hosts映射

思考:如何通过主机名能够找到(比如ping)某个linux系统?

  • windows
    在C:\Windows\System32\drivers\etc\hosts文件指定ip地址和主机名的关系即可
    案例:192.168.200.130 hspedu100
  • linux
    在/etc/hosts 文件指定
    案例:192.168.200.1 ThinkPad-PC(这个名字其实可以随意,但是ping的时候必须也是这个名称)

13.8 主机名解析过程分析(Hosts、DNS)

13.8.1 Hosts是什么

一个文本文件,用来记录IP和Hostname(主机名)的映射关系

13.8.2 DNS

1.DNS,就是Domain Name System的缩写,翻译过来就是域名系统
2.是互联网上作为域名和IP地址相互映射的一个分布式数据库

13.8.3 应用实例:用户在浏览器输入了www.baidu.com

1.浏览器先检查浏览器缓存中有没有该域名和IP地址的对应关系,有就先调用这个IP完成解析;如果没有找到,就检查操作系统DNS解析器缓存,如果有直接返回IP完成解析。这两个缓存,可以理解为本地解析器缓存
2.一般来说,当电脑第一次成功访问某一网站后,在一定时间内,浏览器或操作系统会缓存他的IP地址(DNS解析记录)。如在cmd窗口中输入
ipconfig /displaydns // 可以看到当前操作系统里面的DNS域名解析缓存
ipconfig /flushdns // 手动清理dns缓存
3.如果本地解析器缓存没有找到对应映射,检查系统中的hosts文件中有没有配置对应的域名IP映射,如果有,则完成解析并返回。
4.如果本地DNS解析器缓存和hosts文件中均没有找到对应的IP,则到域名服务DNS(公网的DNS,即分布式数据库)进行解析域
5.如果还没找到,返回域名不存在的信息
注意:
1.如果是ping 一个域名,则没有浏览器缓存
2.公网的DNS服务器不是一个服务器,而是分级的(这是为了优化而做的)
示意图
在这里插入图片描述
补充:
dns域名劫持:黑客攻击,修改hosts文件,会让域名定向到假网站,(不过现在很多浏览器都有防域名劫持的机制)。

13.9 实操中遇到的问题

关于虚拟机(centos7)没有ens33 ip地址的解决方法
虚拟机(centos7)启动后没有ens33 ip地址的解决办法

# 临时办法:
systemctl stop NetworkManager
systemctl restart network.service
service network restart
# 永久办法:
-- 查看托管状态
nmcli n
--开启托管
nmcli n on
--重启
systemctl restart NetworkManager 或 reboot

第14章:Linux实操篇-进程管理(重点)

14.1 基本介绍

1.在Linux中,每个执行的程序都成为一个进程。每一个进程都分配一个ID号(pid,也叫进程号)。
下图是windows下通过任务管理器查看进程。
在这里插入图片描述
补充:程序(静态概念)不运行的时候,就是一段代码。当它加载到内存里时,它才是一个进程(动态概念)。
2.每个进程都可能以两种方式存在。前台后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行,比如mysql服务。
3.一般系统的服务都是以后台进程的方式存在,如mysql,tomcat,而且都会常驻在系统中。直到关机才结束。

14.2 显示系统执行的进程

14.2.1 基本介绍

ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数。
在这里插入图片描述
一般将-a,-u和-x三个参数同时组合使用。
在这里插入图片描述
USER是指”进程执行用户“
PID是指”进程号“
%CPU是指”占用CPU的百分比“
%MEM是指”占用物理内存百分比“
VSZ是指”占用虚拟内存大小“
RSS是指”驻留集合大小,即进程所使用的非交换区物理内存大小“
TTY是指”终端信息“
STAT是指”当前运行状态“,S表示sleep(休眠)、r表示正在运行
START是指”执行的开始时间“
TIME是指”占用CPU时间“
COMMAND是指”进程名,也可以理解为执行该进程的指令“

14.2.2 ps详解

1.指令:ps -aux | grep xxx,比如想看看有没有sshd服务
2.指令说明

  • System V 展示风格
  • USER:用户名称
  • PID:进程号
  • %CPU:进程占用CPU百分比
  • %MEM:进程占用物理内存的百分比
  • VSZ:进程占用的虚拟内存大小(单位 :KB)
  • RSS:进程占用的物理内存大小(单位:KB)
  • TTY:终端名称,缩写
  • STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等
  • STARTED:进程的启动时间
  • TIME:CPU时间,即进程使用CPU的总时间
  • COMMAND:启动进程所用的命令和参数,如果过长会被截断显示

14.2.3 应用实例

要求:以全格式显示当前所有的进程,查看进程的父进程。比如查看sshd的父进程信息:ps -ef | grep sshd
在这里插入图片描述
可以看出,sshd的父进程的PID为1,通过指令ps -aux | more可以看到PID为1的进程为
在这里插入图片描述
补充:
1.一个进程可以创建生成多个子进程,所以会有所谓的多进程的概念。
2.看上上图可以发现,root身份通过xshell登录的2033进程是1318进程的子进程。

ps -ef是以全格式显示当前所有的进程
-e显示所有进程。-f 全格式
ps -ef | grep xxx
是BSD风格
UID:用户ID
PID:进程ID
PPID:父进程ID
C:CPU用于计算执行优先级的因子。数值越大, 表明进程是CPU密集型运算,执行优先级会降低;数值越小,表明进程是I/O密集型运算,执行优先级会提高
STIME:进程启动的时间
TTY:完整的终端名称
TIME:CPU时间
CMD:启动进程所用的命令和参数

14.3 终止进程kill和killall

14.3.1 介绍:

若是某个进程执行一半需要停止时,或是已消了很大的系统资源时,此时可以考虑停止该进程。使用kill命令来完成此项任务。

14.3.2 基本语法

kill [选项] 进程号(功能描述:通过进程号终止进程)
killall 进程名称 (功能描述:通过进程名称终止进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)
补充:
1.通过kill只会终止父进程,其子进程会交给1号进程接管。
2.通过killall终止进程,会将该进程下面的所有子进程也一并终止。

14.3.3 常用选项

-9:表示强迫进程立即停止(因为在有些情况下,系统处于保护机制,它会忽略kill指令,但是带-9会强制终止进程)

14.3.4 最佳实践

案例1:踢掉某个非法登录用户:kill 对应进程号,比如kill 11421
案例2:终止远程登录服务sshd,在适当时候再次启动sshd服务:

kill sshd对应的进程号
/bin/systemctl start sshd.service # 再次重启sshd服务

在这里插入图片描述
案例3:终止多个gedit,演示killall:killall gedit
案例4:强制杀掉一个终端
在这里插入图片描述
kill 5480,没有反应。因为该终端正在工作,认为你可能是误操作。此时要终止必须要强制终止:kill -9 5480

14.4 查看进程树pstree

14.4.1 基本语法

pstree [选项] [进程号],可以更加直观的来看进程信息,不写进程号,默认查看进程为1的进程树

14.4.2 常用选项

-p:显示进程的PID
-u:显示进程的所属用户

14.4.3 应用实例:

案例1:请以树状的形式显示进程pid:pstree -p (进程号)
案例2:请以树状的形式显示进程的用户:pstree -u

14.5 服务(service)管理

14.5.1 介绍:

服务(service)本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其他程序的请求,比如(mysqld,sshd,防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。下图为原理图。
在这里插入图片描述
补充:
1.SSHD,就是远程登陆服务,是通过SSH来登陆的。最后的一个符号D其实是daemon的简写,表示后台程序/守护进程/服务

14.5.2 service管理指令

1.service 服务名 [start | stop | restart | reload | status]
2.在CentOS7.0后,很多服务不再使用service,而是systemctl(后面专门讲)
3.在CentOS7.0后,被service指令管理的服务在/etc/init.d/查看(注意,必须最后带/)在这里插入图片描述

14.5.3 service管理指令案例

请使用service指令,查看,关闭,启动network(注意:在虚拟系统演示,因为网络连接会关闭,进程不再监听端口,xshell就无法连接上sshd)

14.5.4 查看服务名:

方式1:使用setup -> 系统服务 就可以看到全部:setup
下图中打星号的表示会随着linux的启动,自动启动。没有带星号的则需要手动启动。
将光标移动到某一个服务上,按空格,可以将自动启动的服务改为需要手动启动,即可以去掉星号。
按tab可以切换选择框。
在这里插入图片描述
方式2:/etc/init.d 看到service指令管理的服务:ls -l /etc/init.d

14.5.5 服务的运行级别(runlevel):

Linux系统中有7种运行级别(runlevel):常用的是级别3和5
运行级别0:系统停机状态(一旦启动马上关机),系统默认运行级别不能设为0,否则不能正常启动
运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登录
运行级别2:多用户状态(没有NFS),不支持网络
运行级别3:完全的多用户状态(有NFS),无界面,登录后进入控制台命令行模式
运行级别4:系统未使用,保留
运行级别5:X11控制台,登录后进入图形GUI模式
运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动
开机的流程说明:

开机->BIOS->/boot->systemd进程1->运行级别->运行级对应的服务

14.5.6 CentOS7后运行级别说明

在/etc/inittab中进行了简化,如下:
multi-user.target: analogous to runlevel 3
graphical.target: analogous to runlevel 5
# To view current default target, run:
systemctl get-default
# To set a default target, run:
systemctl set-default TARGET.target

14.5.7 chkconfig指令

介绍
1.通过chkconfig命令可以给服务的各个运行级别设置自启动/关闭
2.chkconfig指令管理的服务在/etc/init.d查看
3.注意:Centos7.0后,很多服务使用systemctl管理(后面马上讲)
chkconfig基本语法

  • 查看服务chkconfig --list [|grep xxx] (–list可加可不加)
    在这里插入图片描述
    注意:sysv和systemd都是管理进程启动或关闭的程序,sysv启动服务慢,systemd启动服务快
  • chkconfig 服务名 --list
    在这里插入图片描述
    chkconfig --level 5 服务名 on/off:用这条指令可以设置某一个服务在某一个运行级别是自启动或者关闭自启动
    案例演示:对network 服务 进行各种操作,把network在3这个级别关闭自启动
chkconfig --level 3 network off
chkconfig --level 3 network on

使用细节
chkconfig重新设置服务后自启动或关闭,需要重启机器reboot生效。

14.5.8 systemctl管理指令

1.基本语法:systemctl [start | stop | restart | status] 服务名
2.systemctl指令管理的服务在/usr/lib/systemd/system查看
在这里插入图片描述

14.5.9 systemctl设置服务的自启动状态

1.systemctl list-unit-files [| grep 服务名] (查看服务开机启动状态,grep可以进行过滤)
2.systemctl enable 服务名(设置服务开机启动)
3.systemctl disable 服务名(关闭服务开机启动)
4.systemctl is-enabled 服务名(查询某个服务是否是自启动的)

14.5.10 应用案例:

查看当前防火墙的状况,关闭防火墙和重启防火墙。=> firewalld.service
查看防火墙服务开机启动状态:systemctl list-unit-files | grep firewalld(.service可带可不带)
在这里插入图片描述
查看防火墙的状态:systemctl status firewalld
在这里插入图片描述
关闭防火墙:systemctl stop firewalld
重启防火墙:systemctl start firewalld

注意:
1.防火墙的服务名可以通过过滤查看/usr/lib/systemd/system文件来获得
在这里插入图片描述
2.static状态表示该服务与其他服务相关联,不能单独设置该服务的启动状态
3.与前面的chkconfig --level x 服务名 on/off不同的是,systemctl enable/disable 服务名的指令不需要带level,这是因为centos7.0以后,通过systemctl开启和关闭服务,默认是对级别3和5做操作,都生效。

14.5.11 细节讨论:

1.关闭或者启用防火墙后,立即生效。[telnet测试 某个端口即可]
可以通过netstat -anp | more指令查看网络状态
测试:telnet 192.168.200.130 111
在这里插入图片描述
无法连接,说明防火墙是启动的,并且没有把111端口打开。
当关闭防火墙后,再测试连接端口,则可以通过。

补充:
(1):防火墙基本原理:可以认为系统在监听端口前面加了一个防火墙,当一个请求来的时候,如果相应端口是放开的,则请求可以通过,否则不通过。防火墙可以理解为筛子,通过预先设置的大小,来过滤掉不符合尺寸的服务。
(2):开启telnet命令需要:依次点击‘开始’->“控制面板”->“程序”->“在程序和功能”找到并点击“启用或关闭windows功能”进入windows系统功能设置对话框。找到并勾选“Telnet客户端”和“Telnet服务器”
在这里插入图片描述
2.这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。
3.如果希望设置某个服务自启动或关闭永久生效,要使用systemctl [enable|disable] 服务名。

14.5.12 打开或者关闭指定端口

在真正的生产环境,往往需要将防火墙打开,但问题来了,如果我们把防火墙打开,那么外部请求数据包就不能跟服务器监听端口通讯。这时,需要打开指定的端口。比如80、22、8080等,这个又怎么做呢?[示意图]

14.5.13 firewall指令

打开端口:firewall-cmd --permanent --add-port=端口号/协议
关闭端口:firewall-cmd --permanent --remove-port=端口号/协议
重新载入,才能生效:firewall-cmd --reload
查询端口是否开放:firewall-cmd --query-port=端口/协议

补充:要知道对应端口的协议是什么,可以使用netstat -anp指令查看

14.5.14 应用案例:

1.启用防火墙,测试111端口是否能telnet,答案是不行:通过firewall-cmd --query-port=111/tcp可以发现111端口是未开放的
在这里插入图片描述
2.开放111端口:

firewall-cmd --permanent --add-port=111/tcp
firewall-cmd --reload
firewall-cmd --query-port=111/tcp

3.再次关闭111端口:

firewall-cmd --permanent --remove-port=111/tcp
firewall-cmd --reload
firewall-cmd --query-port=111/tcp

14.6 动态监控进程

14.6.1 介绍:

top与ps命令很相似。它们都用来显示正在执行的进程。top与ps最大的不同之处,在于top指令可以每隔一段时间就更新正在运行的进程。

14.6.2 基本语法

top[选项]

14.6.3 选项说明:

在这里插入图片描述
执行top指令:
在这里插入图片描述
说明:

10:30:50 	# 当前时间
4:47      	# 系统执行时间
2users     	# 目前在线的用户数
load average:0.00, 0.01, 0.05	#负载均衡:这三个值加起来除以3,如果在0.7以上,则负载较大,在0.7以下,则负载还行。
Tasks: 232 total,   1 running, 231 sleeping,   0 stopped,   0 zombie # 任务数,1个正在运行,231个休眠,0个终止,0个僵死
%Cpu(s):  0.0 us,  0.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st # us用户占用cpu;sy系统占用cpu;id空闲cpu比例
KiB Mem :  2027892 total,   998752 free,   567012 used,   462128 buff/cache # 共2G内存,大约1G空闲,用了0.5G,缓存占用0.5G
KiB Swap:  2097148 total,  2097148 free,        0 used.  1282572 avail Mem # swap分区,共2G,大约2G空闲,使用0个,可获取的内存1G多

注意:这些单位可以按E或e切换,切换为KB/MB/GB/EB/PB。

14.6.4 交互操作说明:

在这里插入图片描述

14.6.5 应用实例

案例1.监控特定用户,比如我们监控tom用户
top:输入此命令,按回车键,查看执行的进程。
u:然后输入“u”回车,再输入用户名tom,按回车键,即可

案例2:终止指定的进程,比如我们要结束tom登录
top:输入此命令,按回车键,查看执行的进程。
k:然后输入“k”回车,再输入要结束的进程ID号,按回车。此时一般会提示要输入信号量,输入9表示强制删除。

案例3:指定系统状态更新的时间(每隔10秒自动更新),默认是3秒:top -d 10

14.7 监控网络状态

14.7.1 查看系统网络情况netstat

基本语法
netstat [选项]
选项说明
-an 按一定顺序排列输出
-p 显示哪个进程在调用
在这里插入图片描述
说明:
proto:网络协议
Local Address:本地地址(是指linux地址),如0.0.0.0:22:指有一个程序在本地监听22号端口
Foreign Address:外部地址
State:LISTEN表示监听,ESTABLISHED表示连接建立,TIME_WAIT表示超时等待

补充:
(1)0.0.0.0表示本地地址,27.0.0.1也是本地,:::三个冒号是ipv6的形式显示的本地地址

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN

这两条说明22号端口既可以接受ipv4的地址连接,也可以接受ipv6的地址连接
(2)

tcp        0     36 192.168.200.130:22      192.168.200.1:55605     ESTABLISHED

这条ESTABLISHED表示连接成功(建立连接)了,其中192.168.200.130是linux的本地地址,与外部地址192.168.200.1的14498端口发生连接
(3)只要要建立通信,必须要有端口,发送端端口是随机产生的,接收端端口相对是固定的。
(4)当tcp协议的一方断开连接时,另一方会认为可能是网络临时有问题,所以会等待,直到超时(一般是一分钟或者更久),此时状态是TIME_WAIT。

应用案例
请查看服务名为sshd的服务的信息:netstat -anp | grep sshd

14.7.2 检测主机连接命令ping:

是一种网络检测工具,它主要是用来检测远程主机是否正常,或是两部主机间的网线或网卡故障。
如:ping 对方ip地址

第15章:Linux实操篇-RPM与YUM

15.1 rpm包的管理

15.1.1 介绍

rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。
Linux的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准了。

15.1.2 rpm包的简单查询指令

查询已安装的rpm列表 rpm -qa | grep xx

举例:看看当前系统,是否安装了firefox:rpm -qa | grep firefox
在这里插入图片描述

15.1.3 rpm包名基本格式

一个rpm包名:firefox-60.10.0-1.el7.centos.x86_64
名称:firefox
版本号:60.10.0-1
适用操作系统:el7.centos.x86_64表示centos7.x的64位系统,如果是i686、i386表示32位系统,noarch表示通用

15.1.4 rpm包的其他查询指令:

rpm - qa:查询所安装的所有rpm软件包(query all)

rpm -q 软件包名:查询指定软件包是否安装
案例:rpm -q firefox

rpm -qi 软件包名:查询软件包信息
案例:rpm -qi firefox
在这里插入图片描述
rpm -ql 软件包名:查询软件包中的文件
比如:rpm -ql firefox

rpm -qf 文件全路径名 查询文件所属的软件包
rpm -qf /etc/passwd

15.1.5 卸载rpm包:

基本语法
rpm -e RPM包的名称(e表示单词erase)
应用案例
删除firefox 软件包:rpm -e firefox

细节讨论
1.如果其他软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。
如:$ rpm -e foo
removing these packages would break dependencies: foo is needed by bar-1.0-1
2.如果我们就是要删除foo这个rpm包,可以增加参数–nodeps,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行
如:$ rpm -e --nodeps foo

15.1.6 安装rpm包

基本语法
rpm -ivh RPM包全路径名称

参数说明
i=install 安装
v=verbose提示
h=hash进度条

应用实例
演示卸载和安装firefox浏览器

rpm -e firefox # 卸载firefox浏览器
rpm -ivh /opt/firefox-68.10.0-1.el7.centos.x86_64.rpm # 先将安装包放在/opt目录下

补充:怎么找firefox安装包?在centos7光驱中找。可以将包移动到/opt下,方便安装。

15.2 yum

15.2.1 介绍

Yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。
示意图
在这里插入图片描述

15.2.2 yum的基本指令

查询yum服务器是否有需要安装的软件
yum list | grep xx软件列表

15.2.3 安装指定的yum包

yum install xxx 下载安装

15.2.4 yum应用实例:

案例:请使用yum的方式来安装firefox

rpm -e firefox # 先卸载firefox
yum list | grep firefox # 如果有多个版本,都会显示出来
yum install firefox

第16章:Linux之JavaEE定制篇-搭建JavaEE环境

16.1 概述

如果需要在Linux下进行JavaEE的开发,我们需要安装如下软件
在这里插入图片描述

16.2 安装JDK

16.2.1 安装步骤

1.mkdir /opt/jdk
2.通过xftp6上传到/opt/jdk下
jdk安装包下载地址:https://www.oracle.com/java/technologies/javase/javase8u211-later-archive-downloads.html(下载需要登陆,可以在网上找可用账号登录)
3.cd /opt/jdk
4.解压tar -zxvf jdk-8u261-linux-x64.tar.gz
5.mkdir /usr/local/java
6.mv /opt/jdk/jdk1.8.0_261 /usr/local/java
7.配置环境变量的配置文件vim /ect/profile
8.export JAVA_HOME=/usr/local/java/jdk1.8.0_261
9.export PATH=$JAVA_HOME/bin:$PATH
10.source /etc/profile [让文件生效]

16.2.2 测试是否安装成功

编写一个简单的Hello.java输出“hello,java!”

注意:为了在任何一个目录都能找到java相关命令,所以需要设置和配置环境变量。

16.3 tomcat的安装

16.3.1 步骤:

1.mkdir /opt/tomcat
2.上传安装文件,并解压缩到/opt/tomcat
tomcat安装包下载地址:http://archive.apache.org/dist/tomcat/tomcat-8/v8.5.59/bin/
2.进入解压目录/bin,启动tomcat ./startup.sh
3.开放端8080,回顾firewall-cmd指令

16.3.2 测试是否安装成功:

在windows、Linux下访问http://linux的ip地址:8080,如果能看到下面的界面,说明tomcat可以正常访问:
在这里插入图片描述

16.4 idea2020的安装

16.4.1 步骤

1.下载地址: https://www.jetbrains.com/idea/download/#section=linux
2.解压缩到/opt/idea
3.启动idea bin目录下.idea.sh,配置jdk(要在有界面的环境下运行)
4.编写Hello world程序并测试成功!

16.5 mysql5.7的安装(!!)

安装的步骤
1.新建文件夹/opt/mysql,并cd进去
2.运行wget http://dev.mysql.com/get/mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar,下载mysql安装包
3.运行tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar(因为没有.gz,所以不需要选项z,即不是-zxvf)
4.运行rpm -qa|grep mari,查询mariadb相关安装包
在这里插入图片描述
5.运行rpm -e --nodeps mariadb-libs,卸载mariadb(因为centos7.6自带的类mysql数据库是mariadb,会跟mysql冲突,要先删除)
6.然后开始真正安装mysql,依次运行以下几条:

rpm -ivh mysql-community-common-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.26-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.26-1.el7.x86_64.rpm

7.运行systemctl start mysqld.service,启动mysql
8.然后开始设置root用户密码
Mysql自动给root用户设置随机密码,运行grep “password” /var/log/mysqld.log可以看到当前密码
在这里插入图片描述
9.运行mysql -u root -p,用root用户登录,提示输入密码可用上述得到的密码,可以成功登录进入mysql命令行
10.设置root密码,对于个人开发环境,如果要设比较简单的密码(生产环境服务器要设复杂密码),可以运行set global validate_password_policy=0;提示密码设置策略(validate_password_policy默认值1,)

//mysql密码复杂度要求分三种
//低:0 or LOW | Length只要求长度(默认8位)
//中:1 or MEDIUM | Length;numeric,lowercase/uppercase,and special characters
//要求长度 数字 大小写 特殊字符
//高:2 or STRONG | Length;numeric,lowercase/uppercase, and special charaters; dictionary file
//要求长度 数字 大小写 特殊符号 字典文件

11.将root用户的密码修改为hspedu100

set password for 'root'@‘localhost’=password('hspedu100');

12.运行flush privileges;,使密码设置生效

第17章:Linux之大数据定制篇-Shell编程

17.1 为什么要学习Shell编程

1.Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。
2.对于JavaEE和Python程序员来说,工作的需要,你的老大会要求你编写一些Shell脚本进行程序或者是服务器的维护,比如编写一个定时备份数据库的脚本。
3.对于大数据程序员来说,需要编写Shell程序来管理集群。

17.2 Shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序。
在这里插入图片描述
示意图
在这里插入图片描述

17.3 Shell脚本的执行方式

17.3.1 脚本格式要求

1.脚本以#!bin/bash开头(表明以bashell执行)
2.脚本需要有可执行权限
3.shell脚本一般以.sh结尾。虽然也可以以别的结尾,但是一般约定俗成以.sh结尾。

17.3.2 编写第一个Shell脚本

需求说明:创建一个Shell脚本,输出hello,world~

17.3.3 脚本的常用执行方式

方式1(输入脚本的绝对路径或相对路径)
说明:首先要赋予helloworld.sh脚本的+x权限,再执行脚本

mkdir /root/shcode # 创建shcode目录,用于存放后续的shell脚本
cd /root/shcode/
vim hello.sh	   # 第一行输入:#!/bin/bash 第二行输入:echo "hello,world~"
chmod u+x hello.sh # 给所有者增加执行权限
./hello.sh		   # 或使用绝对路径执行脚本:/root/shcode/hello.sh

方法2(sh+脚本)
说明:不用赋予脚本+x权限,直接执行即可。

chmod u-x hello.sh # 去掉执行权限
sh hello.sh		   # 将hello.sh当脚本执行,此时不需要执行权限

17.4 Shell的变量

17.4.1 Shell变量介绍

1.Linux Shell中的变量分为:系统变量和用户自定义变量
2.系统变量:$HOME, $PWD, $SHELL, $USER等等,比如:echo $HOME等等。。
3.显示当前shell中所有变量:set

17.4.2 shell变量的定义

基本语法
1.定义变量:变量名=值(不要打空格)
2.撤销变量:unset 变量
3.声明静态变量:readonly 变量,注意:不能unset

快速入门
案例1:定义变量A
案例2:撤销变量A
案例3:声明静态的变量B=2,不能unset(静态变量不会被反复定义和初始化,只会被定义一次)
案例4:可把变量提升为全局环境变量,可供其他shell程序使用[该案例后面讲]

#!/bin/bash
# 案例1:定义变量A
A=100
# 定义变量不需要$,输出变量需要$
echo A=$A
echo "A=$A"
# 案例2:撤销变量A
unset A
echo "A=$A" # 此时只会输出A= ,因为变量A已经被销毁了
# 案例3:声明静态的变量B=2,不能unset
readonly B=2
echo "B=$B"
unset B     

17.4.3 shell变量的命名和赋值规则

定义变量的规则
1.变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(不可以)
2.等号两侧不能由空格。
3.变量名称一般习惯为大写(这是一个规范,我们遵守即可)

将命令的返回值赋给变量
1.A=`date`反引号,运行里面的命令,并把结果返回给变量A(没有反引号,会认为是单词赋给A)
2.A=$(date)等价于反引号

17.5 设置环境变量

17.5.1 基本语法

1.export 变量名=变量值(功能描述:将shell变量输出为环境变量/全局变量)
2.source配置文件 (功能描述:让修改后的配置信息立即生效)
3.echo $变量名 (功能描述:查询环境变量的值)
4.示意图
在这里插入图片描述

17.5.2 快速入门

1.在/etc/profile文件中定义TOMCAT_HOME环境变量
2.查看环境变量TOMCAT_HOME的值
3.在另外一个shell程序中使用TOMCAT_HOME

vim /etc/profile
# 在/etc/profile文件最后添加
export TOMCAT_HOME=/opt/tomcat
# wq保存退出
source /etc/profile # 刷一下profile文件,让配置信息生效
echo $TOMCAT_HOME   # 返回/opt/tomcat

注意:在输出TOMCAT_HOME环境变量前,需要让其生效source/etc/profile
补充:shell脚本的多行注释

:<<! 
内容
! 

17.6 位置参数变量

17.6.1 介绍

当我们执行一个shell脚本时,如果希望获取到命令行的参数信息,就可以使用到位置参数变量
比如:./myshell.sh 100 200,这个就是一个执行shell的命令行,可以在myshell脚本中获取到参数信息

17.6.2 基本语法

$n (功能描述:n为数字,$0代表命令本身,$1-$9代表第一到第九个参数,十以上的参数需要用大括号包含,如${10}
$* (功能描述:这个变量代表命令行中所有的参数,$*把所有的参数看成一个整体)
$@(功能描述:这个变量也代表命令行中所有的参数,不过$@把每个参数区分对待)
$# (功能描述:这个变量代表命令行中所有参数的个数)

17.6.3 案例

案例:编写一个shell脚本myshell.sh,在脚本中获取到命令行的各个参数信息。

#!/bin/bash
echo "0=$0, 1=$1, 2=$2"
echo "所有的参数=$*"
echo "$@"
echo "参数的个数=$#"

在这里插入图片描述

17.7 预定义变量(了解即可)

17.7.1 基本介绍

就是shell设计者事先已经定义好的变量,可以直接在shell脚本中使用

17.7.2 基本语法

$$ (功能描述:当前进程的进程号(PID))
$! (功能描述:后台运行的最后一个进程的进程号(PID))
$? (功能描述:最后一次执行的命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。)

17.7.3 应用实例:

在一个shell脚本中简单使用一下预定义变量preVar.sh

#!/bin/bash
echo "当前执行的进程id=$$"
# 以后台的方式运行一个脚本(后面带个&),并获取他的进程号
/root/shcode/myshell.sh &
echo "最后一个后台方式运行的进程id=$!"
echo "执行的结果=$?"

在这里插入图片描述
补充:卡住的原因是在一个脚本里执行另外一个脚本,按ctrl+C退出。

17.8 运算符

17.8.1 基本介绍

学习如何在shell中进行各种运算操作。

17.8.2 基本语法

1.“$((运算式))”或“$[运算式]”或者expr m + n //expression表示表达式
2.注意expr运算符间要有空格,如果希望将expr的结果赋给某个变量,使用``括起来
3.expr m - n
4.expr \*, /, % 分别表示 乘,除,取余

17.8.3 应用实例oper.sh

案例1:计算(2+3)*4的值
案例2:请求出命令行两个参数[整数]的和,比如20和50

#!/bin/bash
# 案例1:计算(2+3)X4的值
RES1=$(((2+3)*4))
echo "res1=$RES1"
# 使用第二种方式,推荐使用
RES2=$[(2+3)*4]
echo "res2=$RES2"
# 使用第三种方式 expr
TEMP=`expr 2 + 3`
RES3=`expr $TEMP \* 4`
echo "temp=$TEMP"
echo "res3=$RES3"
# 案例2:请求出命令行的两个参数[整数]的和 20 50
SUM=$[$1+$2]
echo "sum=$SUM"

17.9 条件判断

17.9.1 判断语句

基本语法

if [ condition ] # 注意condition前后要有空格
then
	...
fi

#非空返回true,可使用$?验证(0为true,>1为false)

应用实例
[ hspEdu ] # 非空,返回true
[ ] # 返回false,中间一定要有空格
[ condition ] && echo OK || echo notok 条件满足,执行后面的语句

常用判断条件
1)=字符串比较
2)两个整数的比较
-lt 小于
-le 小于等于
-eq 等于
-gt 大于
-ge 大于等于
-ne 不等于
3)按照文件权限进行判断
-r 有读的权限
-w 有写的权限
-x 有执行的权限
4)按照文件类型进行判断
-f 文件存在并且是一个常规的文件
-e 文件存在
-d 文件存在并是一个目录

应用实例
案例1:“ok”是否等于“ok”
判断语句:使用 =
案例2:23是否大于等于22
判断语句:使用 -ge
案例3:/root/shcode/aaa.txt目录中的文件是否存在
判断语句:使用 -f

#!/bin/bash
# 案例1:“ok”是否等于“ok”
# 判断语句:使用 =
if [ "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

17.10 流程控制

17.10.1 单分支-if判断

if [ 条件判断式 ]
then
	代码
fi

多分支-if判断

if [ 条件判断式 ]
then
	代码
elif [ 条件判断式 ]
then
	代码
fi

注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格
应用实例ifCase.sh
案例:请编写要给shell程序,如果输入的参数,大于等于60,则输出“及格了”,如果小于60,则输出”不及格“

#!/bin/bash
# 案例:请编写要给shell程序,如果输入的参数,大于等于60,则输出“及格了”,如果小于60,则输出”不及格“
if [ $1 -ge 60 ]
then
        echo "及格了"
elif [ $1 -lt 60 ]
then
        echo "不及格"
fi

17.10.2 case语句

基本语法

case $变量名 in
”值1“)
如果变量的值等于值1,则执行程序1
;;
“值2”)
如果变量的值等于值2,则执行程序2
;;
...省略其他分支...
*)
如果变量的值都不是以上的值,则执行此程序
;;
esac # case单词反写

应用实例 testCase.sh
案例1:当命令行参数是1时,输出“周一”,是2时,就输出“周二”,其他情况输出“other”

#!/bin/bash
# 案例1:当命令行参数是1时,输出“周一”,是2时,就输出“周二”,其他情况输出“other”
case $1 in
"1")
echo "周一"
;;
"2")
echo "周二"
;;
*)
echo "other"
esac

17.10.3 for循环

基本语法1

for 变量 in 值1 值2 值3... # 值外面可以加双引号
do
	程序/代码
done

应用实例testFor1.sh
案例1:打印命令行输入的参数[这里可以看出$*和$@的区别]

#!/bin/bash
# 案例1:打印命令行输入的参数[这里可以看出$* 和$@ 的区别]
# 注意:$* 是把输入的参数,当作一个整体,所以,只会输出一句话
for i in "$*"
do
        echo "num is $i"
done
# 使用$@ 来获取输入的参数,注意,这时是分别对待,所以有几个参数,就输出几句
echo "==========================="
for i in $@
do
        echo "num is $i"
done

基本语法2

for((初始值;循环控制条件;变量变化))
do
	程序/代码
done

应用实例testFor2.sh
案例1:从1加到100的值输出显示

#!/bin/bash
# 案例1:从1加到100的值输出显示,如何把100做成一个变量
# 定义一个变量
SUM=0
for (( i=1; i<=$1; i++ ))
do
# 写上你的业务代码
        SUM=$[$SUM+$i]
done
echo "总和SUM=$SUM"

17.10.4 while循环

基本语法1

while [ 条件判断式 ]
do
程序
done

注意:while和[有空格,条件判断式和[也有空格
应用实例testWhile.sh
案例1:从命令行输入一个数n,统计从1+…+n的值是多少?

#!/bin/bash
# 案例1:从命令行输入一个数n,统计从1+...+n的值是多少?
SUM=0
i=0
while [ $i -le $1 ]
do
        SUM=$[$SUM+$i]
        # i自增
        i=$[$i+1]
done
echo "执行结果=$SUM"

17.11 read读取控制台输入

17.11.1 基本语法

read(选项)(参数)
选项:
-p:指定读取值的提示符
-t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。
参数
变量:指定读取值的变量名

17.11.2 应用实例testRead.sh

案例1:读取控制台输入一个NUM1值
案例2:读取控制台输入一个NUM2值,在10秒内输入

#!/bin/bash
# 案例1:读取控制台输入一个NUM1值
read -p "请输入一个数NUM1=" NUM1
echo "你输入的NUM1=$NUM1"
# 案例2:读取控制台输入一个NUM2值,在10秒内输入
read -t 10 -p "请输入一个数NUM2=" NUM2
echo "你输入的NUM2=$NUM2"                        

17.12 函数

17.12.1 函数介绍

shell编程和其他编程语言一样,有系统函数,也可以自定义函数。系统函数中,我们这里就介绍两个。

17.12.2 系统函数

basename基本语法
功能:返回完整路径最后/的部分,常用于获取文件名
basename [pathname] [suffix]
basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个(‘/’)字符,然后将字符串显示出来。
选项:
suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

应用实例
案例1:请返回/home/aaa/test.txt的”test.txt“部分

[root@hspEdu100 shcode]# basename /home/aaa/test.txt
test.txt
[root@hspEdu100 shcode]# basename /home/aaa/test.txt .txt
test

dirname基本语法
功能:返回完整路径最后/的前面的部分,常用于返回路径部分

dirname文件绝对路径(功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)

应用实例
案例1:请返回/home/aaa/test.txt的/home/aaa

[root@hspEdu100 shcode]# dirname /home/aaa/test.txt
/home/aaa

17.12.3 自定义函数

基本语法

# 函数定义
function funname[()]
{
	Action;
	[return int;]
}
# 调用函数时,直接写函数名
funname []

应用实例
案例1:计算输入两个参数的和(动态获取),getSum

#!/bin/bash
# 案例1:计算输入两个参数的和(动态获取),getSum
# 定义函数 getSum
function getSum(){

        SUM=$[$n1+$n2]
        echo "和是=$SUM"

}

# 输入两个值
read -p "请输入一个数n1=" n1
read -p "请输入一个数n2=" n2

# 调用自定义函数
getSum $n1 $n2

17.13 Shell编程综合案例

17.13.1 需求分析

1.每天凌晨2:30备份数据库hspedu到/data/backup/db
2.备份开始和备份结束能够给出相应的提示信息
3.备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式,比如:2021-03-12_230201.tar.gz
4.在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。
在这里插入图片描述
/usr/sbin是root用户执行的权限,所以放在这个目录下面。

17.13.2 代码

cd /user/sbin
vim mysql_db_backup.sh

//.sh文件内容
#!/bin/bash
# 备份目录
BACKUP=/data/backup/db
# 当前时间
DATETIME=$(date +%Y-%m-%d_%H%M%S)
echo $DATETIME
# 数据库的地址
HOST=localhost
# 数据库的用户名
DB_USER=root
# 数据库密码
DB_PW=hspedu100
# 备份的数据库
DATABASE=hspedu

# 创建备份目录,如果不存在,就创建
[ ! -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}

# 删除十天前的备份文件(atime是访问时间)
find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} \;
echo "备份数据库${DATEBASE} 成功~"
//.sh文件内容结束

crontab -e
# 填入内容
30 2 * * * /usr/sbin/mysql_db_backup.sh

第18章:Linux之Python定制篇-Python开发平台Ubuntu

18.1 Ubuntu介绍

在这里插入图片描述
Ubuntu下载地址:https://cn.ubuntu.com/download

18.2 安装Ubuntu

略(建议看视频)

18.3 设置Ubuntu支持中文

默认安装的ubuntu中只有英文语言,因此是不能显示汉字的。要正确显示汉字,需要安装中文语言包。
安装中文支持步骤:
1.单击左侧图标栏打开Language Support菜单,点击打开Language Support(语言支持)选项卡。
2.点击Install/Remove Languages,在弹出的选项卡中下拉找到Chinese(simplified),即中文简体,在后面的选项框中打勾。然后点击Apply Changes提交,系统会自动联网下载中文语言包。(保证ubuntu是联网的)
3.这时“汉语(中国)”在最后一位是因为当前第一位是“English”,所以默认显示都是英文。我们如果希望默认显示用中文,则应该将“汉语(中国)”设置为第一位。设置方法是拖动,鼠标单击“汉语(中国)”,当底色变化(表示选中了)后,按住鼠标左键不松手,向上拖动放置到第一位。
4.设置后不会即刻生效,需要下一次登录时才会生效。

18.4 Ubuntu的root用户

18.4.1 介绍

安装ubuntu成功后,都是普通用户权限,并没有最高root权限,如果需要使用root权限的时候,通常都会在命令前面加上sudo。有的时候感觉很麻烦。(演示)
我们一般使用su命令来直接切换到root用户,但是如果没有给root设置初始密码,就会抛出su:Authentication failure这样的问题。所以,我们只要给root用户设置一个初始密码就好了。

18.4.2 给root用户设置密码并使用

1.输入sudo passwd命令,设置root用户密码。
2.设定root密码成功后,输入su命令,并输入刚才设定的root密码,就可以切换成root了。提示符$代表一般用户,提示符#代表root用户。
3.以后就可以使用root用户了。
4.输入exit命令,退出root并返回一般用户。

18.5 Ubuntu下开发Python

18.5.1 说明

安装好Ubuntu后,默认就已经安装好Python的开发环境。

18.5.2 在Ubuntu下开发一个Python程序

1)vim hello.py [编写hello.py] (默认没有vim命令,要先使用sudo apt install vim下载vim)
2)python3 hello.py [运行hello.py]

第19章:Linux之Python定制篇-APT软件管理和远程登录

19.1 apt介绍

apt是Advanced Packaging Tool的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt命令进行软件包的安装、删除、清理等,类似于Windows中的软件管理工具。
ubuntu软件管理的原理示意图:
在这里插入图片描述

19.2 Ubuntu软件操作的相关命令(标红的必须拿下!)

sudo apt-get update 更新源
sudo apt-get install package 安装包
sudo apt-get remove package 删除包
sudo apt-cache search package 搜索软件包
sudo apt-cache show package 获取包的相关信息,如说明、大小、版本等
sudo apt-get install package --reinstall 重新安装包
sudo apt-get -f install 修复安装
sudo apt-get remove package --purge 删除包,包括配置文件等
sudo apt-get build-dep package 安装相关的编译环境
sudo apt-get upgrade 更新已安装的包
sudo apt-get dist-upgrade 升级系统
sudo apt-cache depends package 了解使用该包依赖哪些包
sudo apt-cache rdepends package 查看该包被哪些包依赖
sudo apt-get source package 下载该包的源代码

19.3 更新Ubuntu软件下载地址

19.3.1 寻找国内镜像源

https://mirrors.tuna.tsinghua.edu.cn/
所谓镜像源:可以理解为提供下载软件的地方,比如Android手机上可以下载软件的安卓市场;ios手机上可以下载软件的appstore
在这里插入图片描述

19.3.2 备份Ubuntu默认的源地址

sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

注意:如果在操作系统做任何文件修改,建议先备份一份文件,然后再进行修改。

19.3.3 更新源服务器列表

先清空sources.list文件,复制镜像网站地址

su
echo '' > sources.list

复制镜像网站的地址,拷贝到sources.list文件
在这里插入图片描述

19.3.4 更新源

更新源地址:sudo apt-get update

19.4 Ubuntu软件安装,卸载的最佳实践

案例说明:使用apt完成安装和卸载vim软件,并查询vim软件的信息:(因为使用了镜像网站,速度很快)
sudo apt-get remove vim
sudo apt-get install vim
sudo apt-cache show vim

19.5 远程登录Ubuntu

19.5.1 ssh介绍

SSH为Secure Shell的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为建立在应用层和传输层基础上的安全协议。
SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性的协议。常用于远程登录。几乎所有UNIX/Linux平台都可运行SSH。
使用SSH服务,需要安装相应的服务器和客户端。客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。
和CentOS不一样,Ubuntu默认没有安装SSHD服务(使用netstat指令查看,注意,使用netstat指令前需要使用apt install net-tools),因此,我们不能进行远程登录。

19.5.2 原理示意图

在这里插入图片描述

19.5.3 安装SSH和启用

sudo apt-get install openssh-server

执行上面指令后,在当前这台Linux上就安装了SSH服务端和客户端。

service sshd start

执行上面的指令,就启动了sshd服务。会监听端口22。

19.5.4 在Windows使用Xshell7/XFTP7登录Ubuntu

前面我们已经安装了Xshell7,直接使用即可。
注意:使用hspEdu用户登录,需要的时候再su - 切换成root用户

19.5.5 从一台Linux系统远程登录到另外一台Linux系统

在创建服务器集群时,会使用到该技术
基本语法:
ssh 用户名@IP
例如:ssh hspedu@192.168.200.222
使用ssh访问,如访问出现错误。可查看是否有该文件 ~/.ssh/known_ssh尝试删除该文件解决,一般不会有问题

登出
登出命令:exit或者logout

第20章:CentOS8.1的使用

安装步骤:略
CentOS8.0 VS CentOS7.0的比较(了解)
在这里插入图片描述

第21章:Linux高级篇-日志管理

21.1 基本介绍

1.日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件的相关信息、各种服务相关信息等。
2.日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志来检查错误发生的原因,或者受到攻击时攻击者留下的痕迹。
3.可以这样理解,日志是用来记录重大事件的工具。

21.2 系统常用的日志

/var/log/目录就是系统日志文件的保存位置,看张图
在这里插入图片描述
(下表标红为必须要知道的)
在这里插入图片描述
注意:这里lastlog拼错了

应用案例
使用root用户通过xshell7登录,第一次,第二次使用错误的密码,第三次使用正确的密码登录成功。看看在日志文件/var/log/secure里有没有记录相关信息
在这里插入图片描述

21.3 日志管理服务rsyslogd

CentOS7.6日志服务是rsyslogd,CentOS6.x日志服务是syslogd。rsyslogd功能更强大。
rsyslogd的使用、日志文件的格式,和syslogd服务兼容的。
原理示意图(日志管理服务和日志的关系):
在这里插入图片描述
查看Linux中的rsyslogd服务是否启动

ps aux | grep “rsyslog” | grep -v “grep”
# grep -v “grep”中的-v表示反向进行匹配,这样可以过滤掉查询的本身这条grep指令

查询rsyslogd服务的自启动状态

systemctl list-unit-files | grep "rsyslog"

配置文件:/etc/rsyslog.conf [重点]
编辑文件时的格式为:*.* 存放日志文件
其中第一个*代表日志类型,第二个*代表日志级别
1.日志类型分为:

auth		## pam产生的日志
authpriv	## ssh、ftp等登录信息的验证信息
corn		## 时间任务相关
kern		## 内核
lpr			## 打印
mail		## 邮件
mark(syslog)-rsyslog	## 服务内部的信息,时间标识
news		## 新闻组
user		## 用户程序产生的相关信息
uucp		## unix to unix copy主机之间相关的通信
local 1-7	## 自定义的日志设备

2.日志级别分为:

debug		## 有调用信息的,日志通信最多
info		## 一般信息日志,最常用
notice		## 最具有重要性的普通条件的信息
warning		## 警告级别
err			## 错误级别,阻止某个功能或者模块不能正常工作的信息
crit		## 严重级别,阻止整个系统或者整个软件不能正常工作的信息
alert		## 需要立刻修改的信息
emerg		## 内核崩溃等重要信息
none		## 什么都不记录

注意:从上到下,级别从低到高,记录信息越来越少

由日志服务rsyslogd记录的日志文件,日志文件的格式包含以下4列:
1.事件产生的时间
2.产生事件的服务器的主机名
3.产生事件的服务名或程序名
4.事件的具体信息

日志如何查看实例
查看一下/var/log/secure日志,这个日志中记录的是用户验证和授权方面的信息,来分析如何查看
在这里插入图片描述
日志管理服务应用实例
在/etc/rsyslog.conf中添加一个日志文件/var/log/hsp.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存,演示重启,登录的情况,看看是否有日志保存
在这里插入图片描述

21.4 日志轮替

21.4.1 基本介绍

日志轮替就是把旧的日志文件移动并改名,同时建立新的空日志文件,当旧日志文件超出保存的范围之后,就会进行删除

21.4.2 日志轮替文件命名

1.centos7使用logrotate进行日志轮替管理,要想改变日志轮替文件名字,通过/etc/logrotate.conf配置文件中"dateext"参数;
2.如果配置文件中有“dateext”参数,那么日志会用日期来作为日志文件的后缀,例如“secure-20201010”。这样日志文件名不会重叠,也就不需要日志文件的改名,只需要指定保存日志个数,删除多余的日志文件即可。
3.如果配置文件中没有“dateext”参数,日志文件就需要进行改名了。当第一次进行日志轮替时,当前的“secure”日志会自动改名为“secure.1”,然后新建”secure“日志,用来保存新的日志。当第二次进行日志轮替时,”secure.1“会自动改名为”secure.2“,当前的”secure“日志会自动改名为”secure.1“,然后也会新建”secure“日志,用来保存新的日志,以此类推。

注意:
1./etc/logrotate.conf里既可以配置全局的日志轮替策略/规则,也可以单独给某个日志文件指定策略。
2.也可以把某个日志文件的轮替规则,写到/etc/logrotate.d目录,

21.4.3 logrotate配置文件

/etc/logrotate.conf为logrotate的全局配置文件
在这里插入图片描述
参数说明

参数					参数说明
daily				日志的轮替周期是每天
weekly				日志的轮替周期是每周
monthly				日志的轮替周期是每月
rotate 数字			保留的日志备份文件的个数。0指没有备份。
compress			日志轮替时,旧的日志进行压缩
create mode owner group 建立新日志,同时指定新日志的权限与所有者和所属组
mail address		当日志轮替时,输出内容通过邮件发送到指定的邮件地址
missingok			如果日志不存在,则忽略该日志的警告信息
notifempty			如果日志为空文件,则不进行日志轮替
minsize大小			日志轮替的最小值。也就是日志一定要达到这个最小值才会轮替,否则就算时间达到也不轮替
size大小				日志只有大于指定大小才进行日志轮替,而不是按照时间轮替
dateext				使用日期作为日志轮替文件的后缀
sharedscripts		在此关键字后的脚本只执行一次
prerotate/endscript	在日志轮替之前执行脚本命令
postrotate/endscript在日志轮替之后执行脚本命令

21.4.4 把自己的日志加入日志轮替

第一种方法是直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略
第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被”include“到主配置文件中,所以也可以把日志加入轮替。
推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入/etc/logrotate.conf配置文件,那么这个文件的可管理性就会非常差,不利于此文件的维护。
在/etc/logrotate.d/配置轮替文件一览
在这里插入图片描述

21.4.5 应用实例

在/etc/logrotate.conf进行配置,或者直接在/etc/logrotate.d/下创建hsplog编写如下内容,具体轮替的效果可以参考/var/log下的boot.log情况

/var/log/hsp.log
{
	missingok
	daily
	copytruncate # 拷贝截断:用于还在打开中的日志文件,将当前日志备份重命名并将原文件清空
	rotate 7
	notifempty
}

21.5 日志轮替机制原理

日志轮替之所以可以在指定的时间备份日志,是依赖于系统定时任务。在/etc/cron.daily/目录,就会发现这个目录中是由logrotate文件(可执行),logrotate通过这个文件依赖定时任务执行的。
在这里插入图片描述

21.6 查看内存日志

有一部分日志先写到内存里面,还没有写到文件里。
journalctl 可以查看内存日志,这里我们看看常用的指令

journalctl ## 查看全部
journalctl -n 3 ## 查看最新3条
journalctl --since 19:00 --until 19:10:10 # 查看起始时间到结束时间的日志可加日期
journalctl -p err ## 报错日志
journalctl -o verbose ## 日志详细内容
journalctl _PID=1245 _COMM=sshd	##查看包含这些参数的日志(在详细日志查看)
或者journalctl | grep sshd

注意:journalctl 查看得是内存日志,重启会清空
演示案例:
使用journalctl | grep sshd来看看用户登录清空,重启系统,再次查询,看看日志有什么变化没有。

第22章:Linux高级篇-定制自己的Linux系统

22.1 基本介绍

通过裁剪现有Linux系统(CentOS7.6),创建属于自己的min Linux小系统,可以加深我们对linux的理解。
老韩利用centos7.6,搭建一个小小linux系统,很有趣。

22.2 基本原理

启动流程介绍:
制作Linux小系统前,再了解一下Linux的启动流程:
1.首先Linux要通过自检,检查硬件设备有没有故障
2.如果有多块启动盘的话,需要在BIOS中选择启动磁盘
3.启动MBR中的bootloader引导程序
4.加载内核文件
5.执行所有进程的父进程、老祖宗systemd
6.欢迎界面
在Linux的启动流程中,加载内核文件时关键文件:
1)kernel文件:vmlinuz-3.10.0-957.el7.x86_64
2)initrd文件:initramfs-3.10.0-957.el7.x86_64.img

22.3 制作min linux思路分析

1.在现有的Linux系统(centos7.6)上加一块硬盘/dev/sdb,在硬盘上分两个分区,一个是/boot,一个是/,并将其格式化。需要明确的是,现在加的这个硬盘在现有的Linux系统中是/dev/sdb,但是,当我们把东西全部设置好时,要把这个硬盘拔除,放在新的系统上,此时,就是/dev/sda。
2.在/dev/sdb硬盘上,将其打造成独立的Linux系统,里面的所有文件是需要拷贝进去的
3.作为能独立运行的Linux系统,内核是一定不能少,要把内核文件和initramfs文件也一起拷到/dev/sdb上
4.以上步骤完成,我们的自制Linux就完成,创建一个新的linux虚拟机,将其硬盘指向我们创建的硬盘,启动即可
5.示意图
在这里插入图片描述

22.4 操作步骤

1.首先,我们在现有的linux添加一块大小为20G的硬盘(注意添加过程中,一定要将虚拟磁盘存储为单个文件)
在这里插入图片描述
注意:由于之前在学习挂载的时候,添加了一块硬盘,所以移除后如果不在配置文件/etc/fstab将永久挂载点删除,则开机会进入紧急模式。解决的办法是:进入紧急模式后,输入root密码,编辑/etc/fstab,将之前的sdb硬盘挂载指示内容删除,再重启。
如果开机进入了紧急模式,可能是因为刚刚移除硬盘后
2.接下来进行分区和格式化
1)先用lsblk查看目前有哪些硬盘。
在这里插入图片描述
2)对硬盘进行分区

fdisk /dev/sdb

在这里插入图片描述
3)对硬盘进行格式化

mkfs.ext4 /dev/sdb1
mkfs.ext4 /dev/sdb2

4)创建目录,并挂载新的磁盘

mkdir -p /mnt/boot /mnt/sysroot # 创建目录
mount /dev/sdb1 /mnt/boot/
mount /dev/sdb2 /mnt/sysroot/

5)安装grub2,内核文件拷贝至目标磁盘

grub2-install --root-directory=/mnt /dev/sdb # 安装grub2
hexdump -C -n 512 /dev/sdb # 验证是否安装成功
rm -rf /mnt/boot/* # 清楚/mnt/boot/下原有的内容
cp -rf /boot/* /mnt/boot/ # 将sda的boot/中的所有内容拷贝到/mnt的boot/下(相当于到sdb1)

6)修改grub2/grub.cfg文件中的UUID(指定那些盘是启动盘,哪些盘是根目录盘),标红的部分是需要使用指令来查看的
在这里插入图片描述
在这里插入图片描述
(用sed -i全部替换更方便)
在UTF-8后面要加一句话selinux=0 init=/bin/bash,代表不要走系统那条线,要走我自己定制的shell
在这里插入图片描述
在linux16最后也要加上selinux=0 init=/bin/bash
在这里插入图片描述
保存退出
7)创建目标主机根文件系统(将所有重要目录建起来,虽然是空的)(注意/mnt/sysroot和{}之间没有空格)

mkdir -pv /mnt/sysroot/{etc/rc.d,usr,var,proc,sys,dev,lib,lib4,bin,sbin,boot,srv,mnt,media,home,root}

8)拷贝需要的bash(也可以拷贝你需要的指令)和库文件给新的系统使用

cp /lib64/*.* /mnt/sysroot/lib64/
cp /bin/bash /mnt/sysroot/bin/

9.原虚拟机先关机,然后新创建一个虚拟机,然后将默认分配的硬盘移除掉,指向我们刚刚创建的磁盘即可。
在这里插入图片描述
10)这时,很多指令都不能使用,比如ls,reboot等,可以将需要的指令拷贝到对应的目录即可
11)如果要拷贝指令,重新进入到原来的linux系统拷贝相应的指令即可,如将/bin/ls拷贝到/mnt/sysroot/bin,将/sbin/reboot拷贝到/mnt/sysroot/sbin

mount /dev/sdb2 /mnt/sysroot/ # 重新挂载
cp /bin/ls /mnt/sysroot/bin/
cp /bin/systemctl /mnt/sysroot/bin/
cp /sbin/reboot /mnt/sysroot/sbin/

12)再重启新的min linux系统,就可以使用ls,reboot指令了

额外阅读:Linux内核源码-介绍&内核升级

为什么要阅读linux内核?

  • 爱好,就是喜欢linux(黑客精神)
  • 想深入理解linux底层运行机制,对操作系统有深入理解
  • 阅读linux内核,你会对整个计算机体系有一个更深刻的认识。作为开发者,不管你从事的是驱动开发,应用开发还是后台开发,你都需要了解操作系统内核的运行机制,这样才能写出更好的代码。
  • 作为开发人员不应该只局限在自己的领域,你设计的模块看起来小,但是你不了解进程的调用机制,你不知道进程为什么会阻塞、就绪、执行几个状态。那么很难写出优质的代码。
  • 找工作面试的需要
    老韩忠告,作为有追求的程序员,还是应该深入了解一个操作系统的底层机制,比如linux/unix,最好是源码级别的,这样你写多线程高并发程序,包括架构,优化,算法等,高度不一样的,当然也不要求把一个非常庞大的Linux内核的每一行都读懂。但至少应该能看懂几个核心模块。

linux0.01内核源码
基本介绍
Linux的内核源代码可以从网上下载,解压缩后文件文件一般也都位于linux目录下。内核源代码有很多版本,可以从linux0.01内核入手,总共的代码1w行左右,版本5.9.8总共代码超过700w行,非常庞大。
内核地址:https://www.kernel.org/

linux0.01内核源码目录&阅读
阅读内核源码技巧
1.linux0.01的阅读需要懂c语言
2.阅读源码前,应知道Linux内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux内核源码的各个目录大致与此相对应。
3.在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行(比如从主方法开始阅读);所谓横向,就是按模块进行,它们常结合在一起进行(比如先看内存管理mm模块)。
4.对于Linux启动的代码可顺着Linux的启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出来进行阅读分析。实际上这是一个反复的过程,不可能读一遍就理解

linux内核源码阅读&目录介绍&main.c说明
在这里插入图片描述
main.c中
在这里插入图片描述
linux内核最新版和内核升级

linux内核升级应用实例
将Centos系统从7.6内核升级到7.8版本内核(兼容性问题)

具体步骤

uname -a //查看当前的内核版本
yum info kernel -q //检测内核版本,显示可以升级的内核
yum update kernel //升级内核
yum list kernel -q //查看已经安装的内核

注意:装了新的内核后,使用uname -a,仍显示原内核。重启之后,在重启界面可以选择新内核。新内核是兼容原先的系统的。

第23章:linux系统-备份与恢复

23.1 基本介绍

实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失。所以我们可以使用备份和恢复技术
linux的备份和恢复很简单,有两种方式:
1.把需要的文件(或者分区)用TAR打包就行,下次需要恢复的时候,再解压开覆盖即可
2.使用dump和restore命令

23.2 安装dump和restore

如果linux上没有dump和restore指令,需要先安装

yum -y install dump (可能会同时安装上restore)
yum -y install restore

23.3 使用dump完成备份

23.3.1 基本介绍

dump支持分卷和增量备份(所谓增量备份是指备份上次备份后 修改/增加过的文件,也称差异备份)。

示意图:
第一次备份层级为0,表示完整备份。后面的层级表示增量备份/差异备份/层级备份。
在这里插入图片描述

23.3.2 dump语法说明

dump [-cu] [-123456789] [-f <备份后文件名>] [-T <日期>] [目录或文件系统]
dump []-wW
-c(c是一个数字,可以是0-9中的一个数字):创建新的归档文件,并将由一个或多个文件参数所指定的内容写入归档文件的开头。
-0123456789:备份的层级。0为最完整备份,会备份所有文件。若指定0以上的层级,则备份自上一次备份以来修改或新增的文件,到9后,可以再次轮替。
-f <备份后文件名>:指定备份后文件名
-j:调用bzlib库压缩备份文件,也就是将备份后的文件压缩成bz2格式,让文件更小
-T <日期>:指定开始备份的时间与日期
-u:备份完成后,在/etc/dumpdares中记录备份的文件系统,层级,日期与时间等。(不带u则不知道备份到第几次了)
-t:指定文件名,若该文件已存在备份文件中,则列出名称
-W:显示需要备份的文件及其最后一次备份的层级,时间,日期。
-w:与-W类似,但仅显示需要备份的文件。

23.3.3 dump应用案例1

将/boot分区所有内容备份到/opt/boot.bak.bz2文件中,备份层级为’0’

dump -0uj -f /opt/boot.bak0.bz2 /boot

23.3.4 dump应用案例2

在/boot目录下增加新文件,备份层级为"1"(只备份上次使用层级”0“备份后发生过改变的数据),注意比较看看这次生成的boot1.bak有多大

dump -1uj -f /opt/boot.bak1.bz2 /boot

在这里插入图片描述
注意:通过dump命令在配合cronbtab可以实现无人值守备份

23.3.5 dump -W

显示需要备份的文件及其最后一次备份的层级,时间,日期
在这里插入图片描述

23.3.6 查看备份时间文件

cat /etc/dumpdates

在这里插入图片描述

23.3.7 dump备份文件或者目录

前面我们在备份分区时,是可以支持增量备份的,如果备份文件或者目录,不再支持增量备份,即只能只用0级别备份

案例:使用dump备份/etc整个目录
dump -0j -f /opt/etc0.bak.bz2 /etc/

# 下面这条语句会报错,提示DUMP:Only level0 dumps are allowed on a subdirectory
dump -1j -f /opt/etc.bak.bz2 /etc/

注意:重要的备份文件,比如数据区,建议将文件上传到其他服务器保存,不要将鸡蛋放在同一个篮子。

23.4 使用restore完成恢复

23.4.1 基本介绍

restore命令用来恢复已备份的文件,可以从dump生成的备份文件中恢复原文件

23.4.2 restore基本语法

restore [模式选项] [选项]
说明下面四个模式,不能混用,在一次命令中,只能指定一种。
-C:使用对比模式,将备份的文件与已存在的文件相互对比。
-i:使用交互模式,在进行还原操作时,restores指令将依序询问用户
-r:进行还原模式(用的最多的模式)
-t:查看模式,看备份文件有哪些文件

选项
-f <备份设备>:从指定的文件中读取备份数据,进行还原操作

23.4.3 应用案例1

restore命令比较模式,比较备份文件和原文件的区别
测试
mv /boot/hello.java /boot/hello100.java
restore -C -f boot.bak1.bz2 //注意和最新的文件比较
在这里插入图片描述
mv /boot/hello100.java /boot/hello.java
restore -C -f boot.bak1.bz2
在这里插入图片描述

23.4.4 应用案例2

restore命令查看模式,看备份文件中有哪些数据/文件
测试

restore -t -f boot.bak0.bz2

在这里插入图片描述

23.4.5 应用案例3

restore命令还原模式,注意细节:如果你有增量备份,需要把增量备份文件也进行恢复,有几个增量备份文件,就要恢复几个,按顺序来恢复即可。
测试

mkdir /opt/boottmp
cd /opt/boottmp
restore -r -f /opt/boot.bak0.bz2 //恢复到第一次完全备份状态
restore -r -f /opt/boot.bak1.bz2 //恢复到第二次增量备份状态

23.4.6 应用案例4

restore命令恢复备份的文件,或者整个目录的文件
基本语法:restore -r -f 备份好的文件
测试

mkdir etctmp
cd etctmp/
restore -r -f /opt/etc.bak0.bz2

第25章:Linux可视化管理-webmin和bt运维工具

本章与运维相关,略。

第26章:Linux面试题(腾讯,百度,美团,滴滴)

第一题:
分析日志t.log(访问量),将各个ip地址截取,并统计出现次数,并按从大到小排列(腾讯)

# 先将下面内容保存到t.log(或者t.txt)文件中
http://192.168.200.10/index1.html
http://192.168.200.10/index2.html
http://192.168.200.20/index1.html
http://192.168.200.30/index1.html
http://192.168.200.40/index1.html
http://192.168.200.30/order.html
http://192.168.200.10/order.html

步骤1:利用管道|和cut得到ip地址

cat t.txt | cut -d '/' -f 3

步骤2:利用管道|和sort排序

cat t.txt | cut -d '/' -f 3 | sort

步骤3:利用管道|和uniq统计

cat t.txt | cut -d '/' -f 3 | sort | uniq -c

在这里插入图片描述
步骤4:利用sort -nr从大到小排序

cat t.txt | cut -d '/' -f 3 | sort | uniq -c | sort -nr

在这里插入图片描述
第二题:
统计连接到服务器的各个ip情况,并按连接数从大到小排序(腾讯)

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐