Liunx

基础篇

1、Linux的应用领域

  1. 服务器领域

    1. Linux在服务器领域的应用是最强的

    2. Linux免费、稳定、高效等特点在这里得到了很好的体现,尤其在一些高端领域尤为广泛(c/c++/php/java/python/go)。

  2. 嵌入式领域

    1. Linux运行稳定、对网络的良好支持性、低成本,且可以根据需要进行软件裁剪,内核最小可以达到几百KB等特点,使其近些年在嵌入式领域的应用得到非常大的提高

    2. 主要应用有:机顶盒、数字电视、网络电话、程控交换机、手机、PDA、智能家居、智能硬件等都是其应用领域,以后在物联网中应用会更加广泛。

 

2、Linux的介绍

概述

  1. Linux是一个开源、免费的操作系统。其稳定性、安全性、处理多并发已经得到业界的认可,目前很多企业级的项目(c/c++/php/java/python/go)都会部署到Linux/unix系统上。

  2. 常见的操作系统(windows、IOS、Android、MacOS、Linux、Unix)

  3. Linux Torvalds(Liunx之父、Git创作者、世界著名黑客)

  4. Linux主要的发行版

    1. Ubuntu

    2. RedHat

    3. CentOS

    4. Debain

  5. 下载途径

    1. https://www.kernel.org/pub/

3、网络的三种模式

1.桥接模式,虚拟系统可以和外部系统通讯,但是容易造成IP冲突

2.NAT模式,网络地址转换模式,虚拟系统可以和外部系统通讯,不造成IP冲突

3.主机模式,独立的系统不和外部发生联系

4、Linux目录结构

  • 基本介绍(在Linux世界里,一切皆文件!)

    1. linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录"/",然后在此目录下再创建其他的目录

    2. /bin这个目录存放着最经常使用的命令

    3. /sbin这里存放的是系统管理员使用的系统管理程序

    4. /home存放普通用户的主目录,在Linux中每个用户都有一个自己的目录,一般该目录名是以用户的账号命名

    5. /root该目录为系统管理员,也称作超级权限者的用户主目录

    6. /lib系统开机所需要最基本的动态连接共识库,其作用类似于Windows里的DLL文件。几乎所有的应用程序都需要用到这些共享库

    7. /lost+found这个目录一般情况下是空的,当系统非法关机后,这里就存放了一些文件

    8. /etc所有的系统管理所需要的配置文件和子目录

    9. /usr这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似与windows下的program files目录

    10. /boot存放的是启动Linux时使用的一些核心文件,包括一些连接文件以及镜像文件

    11. /dev类似于windows的设备管理器,把所有的硬件用文件的形式存储

    12. /media Linux系统会自动识别一些设备,例如U盘、光驱等等,当识别后,linux会把识别的设备挂载到这个目录下

    13. /mnt 系统提供该目录是为了让用户临时挂载别的文件系统的,我们可以将外部的存储挂载在/mnt/上,然后进行该目录就可以查看里的内容了。d:/myshare

    14. /pot这是给主机额外安装软件所存的目录。如安装ORACLE数据库就可放到该目录下。默认为空
    15. /user/local、 常用这是另一个给主机额外安装软件所安装的目录。一般是通过编译源码方式安装的程序
    16. /var常用这个目录中存放着在不断扩充的东西,习惯将经常被修改的目录放在这个目录下。包括各种日志文件
    17. /selinux[escurity-enhanced linux]SeLinux是一种安全子系统,它能控制程序只能访问特定文件,有三种工作模式,可以自行设置

 

 

Linux实操篇

1、远程登录Linux-Xshell6

  • 介绍

说明:Xshell是目前最好的远程登录到Linux操作的软件,流畅的速度并且完美解决了中文乱码的问题,是目前程序员首选的软件。

  1. Xshell是一个强大的安全终端模拟软件,它支持SHH1,SSH2,以及Microsoft Windows平台TELNET协议

  2. Xshell可以在Windows界面下用来访问远端不同系统下的服务器,从而比较好的达到远程控制终端的目的

2、vi和vim的基本介绍

Linux系统会内置vi文本编辑器

Vim具有程序编辑的能力,可以看做是VI的增强版本,可以主动的以字体颜色辨别语法的正确性方便程序设计。代码补完、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。

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

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

  • 命令行模式 在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等的动作则是在此模式中达成的!

  • 快捷键使用练习

    • 拷贝当前行 yy,拷贝当前行向下的5行 5yy,并粘贴()

    • 删除当前行 dd,删除当前行向下的5行 5dd

    • 在文件中查找某个单词【命令行下/关键字,回车查找,输入n就是查找下一个】

    • 设置文件的行号,取消文件的行号.【命令行下 : set nu和:set nonu】

    • 编辑/etc/profile文件,使用快捷键到该文档的最末行[G]和最首行[gg]

    • 在一个文件中输入"hello",然后又撤销这个动作u

    • 编辑/etc/profile文件,并将光标移到到 20行shift + g

3、Linux开机、重启和用户登录注销

  • 开机基本介绍 shutdown -h now 立刻进行关机 shutdown -h -1 "hello,1分钟后会关机了" shutdown -r now 现在重新启动计算机 halt 关机,作用和上面一样 reboot 现在重新启动计算机 sync 把内存的数据同步到磁盘

  • 注意细节

  1. 不管是重启系统还是关闭系统,首先要进行sync命令,把内存中的数据写到磁盘中

  2. 目前的shutdown/reboot/halt等命令均已经在关机前进行了sync。

  • 用户登录和注销基本介绍

  1. 登录时尽量少用root帐号登录,因为它是系统管理员,最大的权限,避免操作失误。可以利用普通用户登录,登录后再用"su -用户名"命令来切换成系统管理身份.

  2. 在提示符下输入logout 即可注销用户

  • 使用细节

  1. logout注销指令在图形运行级别无效,在运行级别3下有效.

  • 添加用户基本介绍 Linux系统是一个多用户多任务的操作系统,任何一个要使用系统资源的用户,都必须首先向系统管理员申请一个帐号,然后以这个账号的身份进行系统

  • 添加用户

    • 基本语法 useradd 用户我

    • 应用案例 案例1:添加一个用户 tom 密码tom,默认该用户的家目录在/home/tom

    • 细节说明

      1. 当创建用户成功后,会自动的创建和用户同名的家目录

      2. 也可以通过useradd -d 指定目录新的用户名,给新创建的用户指定家目录

  • 指定/修改密码

    • 基本语法 passwd 用户名

    • 应用案例 给mei 用户设置密码

    • pwd是显示当前在那个目录下面

  • 删除用户

    • 基本语法

      • userdel 用户名

    • 应用案例

      • 删除用户tom,但是要保留家目录

      • 删除用户以及用户主目录,比如tom,userdel -r tom

    • 细节说明

      • 是否保留家目录的讨论?

      • 一般情况下,建议保留

  • 查询用户信息指令

    • 基本语法

      • id 用户名

    • 应用实例

      • 案例:请查询root 信息

    • 细节说明

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

  • 切换用户

    • 介绍

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

    • 基本语法

      • su - 切换用户名

    • 应用实例

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

    • 细节说明

      • 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要

      • 当需要返回到原来用户时,使用exit/logout指令

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

    • 基本语法

      • whoami/who am I

  • 用户组

    • 介绍

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

    • 新增组

      • 指令:groupadd组名

    • 案例演示

    • 删除组

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

    • 案例演示

    • 增加用户时直接加上组

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

      • 增加一个用户zwj,直接将他指定到wudang

 

  • 用户和组相关文件

    • /etc/passwd文件

      • 用户(user)的配置文件,记录用户的各种信息

      • 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell

    • /etc/shadow文件

      • 口令的配置文件

      • 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志

    • /etc/group文件

      • 组(group)的配置文件,记录Linux包含的组的信息

      • 每行的含义:组名:口令:组标识号:组内用户列表

 

4、实用指令

  • 基本介绍

    • 运行级别说明

      • 0:关机

      • 1:单用户【找回丢失密码】

      • 2:多用户状态没有网络服务

      • 3:多用户状态有网络服务

      • 4:系统未使用保留给用户

      • 5:图形界面

      • 6:系统重启

      常用运行级别是3和5,也可以指定默认运行级别。

  • 应用实例

    • 命令:initp[0123456]应用案例:通过init来切换不同的运行级别,比如动 5-3,然后关机

  • CentOS7后运行级别说明

    • 在centos7以前,/etc/inittab文件中.进行了简化如下:

      • multi-user.target:analogus to runlevenl 3

      • graphical.target:analogus to runlevel 5

    • #To view current default target,run: systemctl get-default

    • #To set a default target,run: systemctl set-default TARGET.target

  • 找回root密码

    • 面试题

      • 如何找回root密码

    • 课堂练习

      • 假设root密码忘记了,请问如何找回密码

      • 设置运行级别,linux运行后,直接进行到命令行终端(3)

    1. 首先,启动系统,进入开机界面,在界面中按"e" 进入编辑界面。如图

    2. 进入编辑界面,使用键盘上的上下键把光标往下移动,找到以""Linux16"开关内容所在的行数",在行的最后面输入:init=/bin/sh.

    3. 接着,输入完成后,直接按快捷键:ctrl+x进入单用户模式。

    4. 接着,在光标闪烁的位置中输入:mount -o remount,rw / (注意:各个单词间有空格),完成后键盘的回车键(Enter).如图 

    5. 在新的一行最后面输入:passwd,完成后按键盘的回车键(Enter)。输入密码,然后再次确认密码即可,密码修改成功后,会显示pass..的样式,说明密码修改成功 

    6. 接着,在鼠标闪烁的位置中(最后一行中)输入:touch /.autorelabel (注意:touch与 /后面有一个空格),完成后按键盘的回车键(Enter)

    7. 继续在光标闪烁的位置中,输入:exec /sbin/init (注意: exec与 /后面有一个空格),完成后按键盘的回车键(Enter),等待系统自动修改密码(过程时间可能有点长,耐心等待),完成后,系统会自动重启,新的密码生效了 

       

       

       

  • 帮助指令

    • man获得帮助信息

      • 基本语法:man[命令或配置文件] (功能描述:获得帮助信息)

      • 案例:查看ls命令的帮助信息 man ls

      • 在linux下,隐藏文件是以.开头,选项可以组合使用 比如 ls-al,比如ls -al

    • help指令

      • 基本语法:help命令(功能描述:获得shell内置命令的帮助信息)

    • 应用实例

      • 案例:查看cd命令的帮助信息

    • 百度帮助更直接

  • 文件目录类

    • pwd指令

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

      • 应用实例:案例:显示当前工作目录的绝对路径

    • ls指令

      • 基本语法:ls [选项] [目录或是文件]

      • 常用选项

        • -a : 显示当前目录所有的文件和目录,包括隐藏的

        • -l :以列表的方式显示信息

    • 应用实例

      • 案例:查看当前目录的所有内容信息

    • cd指令

      • 基本语法:cd [参数] (功能描述:切换到指定目录)

      • 理解:绝对路径和相对路径

      • cd ~ 或者cd : 回到自己的家目录,比如 你是root, cd~ 到 /root

      • cd .. 回到当前目录的上一级目录

    • 应用实例

      • 案例1: 使用绝对路径切换到root目录,cd /root

      • 案例2:使用相对路径到/root 目录,比如在/home/tom,cd ../../root

      • 案例3:表示回到当前目录的上一级目录 cd..

      • 案例4:回到家目录 cd~

    • mkdir指令

      • mkdir指令用于创建目录

      • 基本语法:mkdir [选项] 要创建的目录

      • 常用选项

      • -p : 创建多级目录

    • 应用实例

      • 案例1:创建一个目录 /home/dog

      • 案例2:创建多级目录 /home/animal/tiger

    • rmdir指令

      • remdir指令删除空目录

      • 基本语法

        • rmdir [选项] 要删除的空目录

      • 应用实例

        • 删除一个目录 /home/dog

      • 使用细节

        • rmdir 删除的是空目录,如果目录下有内容时无法删除的

        • 提示:如果需要删除非空目录,需要使用 rm -rf 要删除的目录

    • touch 指令

      • touch指令创建空文件

      • 基本语法

        • touch 文件名称

      • 应用实例

        • 案例:创建一个空文件 hello.txt

    • cp指令

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

      • 基本语法

        • cp [选项] source dest

      • 常用选项

        • -r : 递归复制整个文件夹

      • 应用实例

        • 案例1:将/home/hello.txt 拷贝到 /home/bbb目录下

          • cp hello.txt /home/bbb

        • 案例2:递归复制整个文件夹,举例

          • cp -r /home/bbb /opt

      • 使用细节

        • 强制覆盖不提示的方法:\cp

        • \cp -r /home/bbb /opt

    • rm指令

      • 说明:rm指令移除文件或目录

      • 基本语法

        • rm [选项] 指令移除文件或目录

      • 常用选项

        • -r : 递归删除整个文件夹

        • -f : 强制删除不提示

      • 应用实例

        • 案例1: 将 /home/hello.txt删除

        • 案例2:递归删除整个文件夹 /home/bbb

      • 使用细节

        • 强制删除不提示的方法:带上 -f 参数即可

    • mv指令

      • mv移动文件与目录或重命名

      • 基本语法

        • mv oldNameFile newNameFile (功能描述:重命名)

        • mv /temp/movefile /targetFolder (功能描述:移动文件)

      • 应用实例

        • 案例1:将/home/cat.txt文件 重新命名为 pig.txt

        • 案例2:将/home/pig.txt 文件 移动到/root目录下

        • 案例3:移动整个目录

    • cat指令

      • cat查看文件内容

      • 基本语法

        • cat [选项] 要查看的文件

      • 常用选项

        • -n : 显示行号

      • 应用实例

        • 案例1:/etc/profile 文件内容,并显示秸

      • 使用细节

        • cat只能浏览文件,而不能修改文件,为了浏览方便,一般会带上 管道命令 | moresws

        • cat -n /etc/profile | more [进行交互]

    • more指令

      • more指令是一个基于VI编辑器的文本过滤器,它以全屏幕的方式按页显示文本文件的内容。more指令中内置了若干快捷键,详见操作说明

      • 基本语法

        • more要查看的文件

      • 操作说明,如图 

         

         

         

      • 应用实例

        • 案例:采用more查看文件/ect/profile

    • less指令

      • less指令用来分屏查看文件内容,它的功能与more指令类似,但是比more指令更加强大,支持各种显示终端。less指令在显示文件内容时,并不是一次将整个文件加载之后才显示,而是根据显示需要加载内容,对于显示大型文件具有较高的效率。

      • 基本语法

      • less要查看的文件

      • 操作说明

      • 应用实例

        • 案例:采用eless查看一个大文件文件 /opt/杂文.txt

    • echo指令

      • echo输出内容到控制台

      • 基本语法

        • echo [选项] [输出内容]

      • 应用实例

        • 案例:使用echo指令输出环境变量,比如输出 $PATH $HOSTNAME,echo $PATH

        • 案例:使用echo指令输出 hello,world~ echo "hello,world~"

    • head指令

      • head用于显示文件的开头部分内容,默认情况下head指令显示文件的前10行内容

      • 基本语法

        • head文件 (功能描述:查看文件头10行内容)

        • head -n 5 文件 (功能描述:查看文件头5行内容,5可以是任意行数,默认看前10行)

      • 应用实例

        • 案例:查看/etc/profile 的前面5行代码

    • tail指令

      • tail指令用于输出文件中尾部的内容,默认情况下tail指令显示文件的前10行内容

      • 基本语法

        • tail 文件 (功能描述:查看文件尾10行内容)

        • tail -n 5 文件 (功能描述:查看文件尾5行内容,5可以是任意行数)

        • tail -f 文件 (功能描述:实时追踪该文档的所有更新)

      • 应用实例

        • 案例1:查看/etc/profile 最后5行的代码

        • 案例2:实时监控 mydate.txt, 看看到文件有变化时,是否看到,实时的追加hello,world tail -f /home/mydate.txt [注意要用绝对路径]

    • ">" 指令和"> >"指令

      • ">"输出重定向和 ">>"追加

      • 基本语法

        • ls -l >文件 (功能描述:列表的内容写入文件a.txt中(覆盖写))

        • ls -al >> 文件 (功能描述:列表的内容追加到文件aa.txt的末尾)

        • cat 文件1 > 文件2 (功能描述:将文件1的内容覆盖到文件2)

        • echo "内容" >> 文件(追加)

      • 应用实例

        • 案例1:将 /home 目录下的文件列表 写入到 /home/info.txt中 ls -l /home > /home/info.txt [如果info.txt没有,则会创建]

        • 案例2:将当前日历信息 追加到 /home/mycal 文件中 cal >> /home/mycal

    • ln指令

      • 软链接也称为符号链接,类似于windows里的快捷方式,主要存放了链接其他文件的路径

      • 基本语法

        • ln -s [原文件或目录] [软链接名] (功能描述:给原文件创建一个软链接)

      • 应用实例

        • 案例1:在/home 目录下创建一个软连接 myroot ,连接到/root目录 ln -s /root/ /home/myroot

        • 案例2:删除软连接 myroot rm -rf /home/myroot

      • 细节说明

        • 当我们使用pwd指令查看目录时,仍然看到的是软链接所在目录

    • history指令

      • 查看已经执行过历史命令,也可以执行历史指令

      • 基本语法

        • history(功能描述:查看已经执行过历史命令)

      • 应用实例

        • 案例1:显示所有的历史命令 history

        • 案例2:显示最近使用过的10个指令 history 10

        • 案例3:执行历史编号为5的指令 !5

  • 时间日期类

    • date指令-显示当前日期

      • 基本语法

        • date (功能描述:显示当前时间)

        • date + %Y (功能描述:显示当前年份)

        • date + %m (功能描述:显示当前月份)

        • date + %d (功能描述:显示当前是哪一天)

        • date "+%Y-%m-%d%H:%M:%S" (功能描述:显示年月日时分秒)

      • 应用实例

        • 案例1:显示当前时间信息 date

        • 案例2:显示当前时间年月日 date "+%Y-%m-%d"

        • 案例3:显示当前时间年月日时分秒 date "+%Y-%m-%d%H:%M:%S"

    • date指令-设置日期

      • 基本语法

        • date -s 字符串时间

      • 应用实例

        • 案例1:设置系统当前时间,比如设置成 2021-11-11 11:22:22 date -s "2023-2-1 19:32:54"

    • cal指令

      • 查看日历指令

      • 基本语法

        • cal [选项] (功能描述:不加选项,显示本月日历)

      • 应用实例

        • 案例1:显示当前日历 cal

        • 案例2:显示2020日历 cal "2020"

    • 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等于)

          find / -size +200M

    • locate指令

      • locate指令可以快速定位文件路径。locate指令利用事先建立的系统中所有文件名称及路径的locate数据库实现快速定位给定的文件。Locate指令无需遍历整个文件系统,查询速度较快,为了保证查询结果的准确度,管理员必须定期更新locate时刻

      • 基本语法

        • locate 搜索文件

      • 特别说明

        • 由于locate指令基于数据库进行查询,所以第一次运行前,必须使用updatedb指令创建locate数据库

      • 应用实例

        • 案例1:请使用locate指令快速定位hello.txt文件所在目录

          locate hello.txt

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

    • grep指令和管道符号

      • grep过滤查找 , 管道符,"|" ,表示将前一个命令的处理结果输出传递给后面的命令处理

      • 基本语法

        • grep [选项] 查找内容 源文件

      • 常用选项

        •  

           

      • 应用实例

        • 案例1:请在info.txt文件中,查找"yes" 所在行,并且显示行号 写法1:grep -n "yes" /home/info.txt

          写法2:cat /home/info.txt | grep -n "yes"

  • 压缩和解压类

    • 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

    • 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目录下 unzip -d /opt/tmp /home/myhome.zip [将home/myhome.zip 解压到/opt/tmp 文件夹里去]

    • tar指令

      • tar指令是打包指令,最后打包后的文件是.tar.gz的文件.

      • 基本语法

        • tar [选项] XXX.tar.gz 打包的内容 (功能描述:打包目录,压缩后的文件格式.tar.gz)

      • 选项说明 

         

         

         

      • 应用实例

        • 案例1:压缩多个文件,将/home/pig.txt和/home/cat.txt压缩成 pc.tar.gz tar -zcvf pc.tar.gz /home/pig.txt /home/cat.txt

        • 案例2:将/home的文件夹压缩成myhome.tar.gz tar -zcvf myhome.tar.gz /home

        • 案例3:将pc.tar.gz解压到当前目录,切换到/opt/ tar -zxvf pc.tar.gz

        • 案例4:将myhome.tar.gz 解压到/opt/tmp2目录下 mkdir /opt/tmp2 tar -zxvf /home/myhome.tar.gz -C /opt/tmp2

 

5、组管理和权限管理

  • Linux组的基本介绍

    • 在linux中的每个用户必须属于一个组,不能独立于组外。在linux中每个文件有所有者、所在组、其它组的概念

      1. 所有者

      2. 所在组

      3. 其它组

      4. 改变用户所在的组 

         

         

         

    • 文件/目录 所有者

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

      • 查看文件的所有者

        • 指令: ls-ahl

      • 应用实例

      • 修改文件的所有者

        • 指令:chown 用户名 文件名

      • 应用案例

        • 要求:使用root创建一个文件apple.txt,然后将其所有者修改成tom chown tom apple.txt

    • 组的创建

      • 基本指令

        • groupadd 组名

      • 应用实例

        • 创建一个组 ,monster

        • groupadd monster

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

    • 文件/目录 所在组

      • 当某个用户创建了一个文件后,这个文件的所有组就是该用户所在的组。

      • 查看文件/目录所在组

      • 基本指令

        • ls-ahl

      • 应用实例

        • 使用fox来创建一个文件,看看该文件属于哪个组?

      • 修改文件所在的组

        • 基本指令

        • chgrp 组名 文件名

      • 应用实例

        • 使用root用户创建文件 orange.txt,看看当前这个文件属于哪个组,然后将这个文件所在组,修改到fruit组

          1. groupadd fruit

          2. touch orange.txt

          3. ls -ahl orange.txt

          4. chgrp fruit orange.txt

          5. ls -ahl orange.txt

    • 其它组

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

    • 改变用户所在组

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

      • 改变用户所在组

        • usermod -g 组名 用户名

        • usermod -d 目录名 用户名 改变该用户登陆的初始目录。特别说明:用户需要有进入到新目录的权限。

      • 应用实例

        • 将zwj这个用户从原来所在组,修改到wudang组。

          1. useradd zwj

          2. groupadd wudang

          3. usermod -g wudang zwj

          4. id zwj

  • 权限的基本介绍

    • ls -l 中显示的内容如下: -rwxrw-r== 1 root root 1213 Feb 2 09:39 abc

    • 0-9位说明

      1. 第0位确定文件类型(d,-,l,c,b)

        1. l是链接,相当于windows的快捷方式

        2. d是目录,相当于windows的文件夹

        3. c是字符设备文件,鼠标,键盘

        4. b是块设备,比如硬盘

      2. 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。 ---User

      3. 第4-6位确定所属组(同用户组的)拥有该文件的权限,---Group

      4. 第7-9位确定其他用户拥有该文件的权限 ---Other

    • rwx作用到文件

      1. [r]代表可读(read):可以读取,查看

      2. [w]代表可写(write):可以修改,但是不代表可以删除该文件,删除一个文件的前担条件是对该文件所在的目录有写权限,才能删除该文件

      3. [x]代表可执行(execute):可以被执行

    • rwx作用到目录

      1. [r]代表可读(read):可以读取,ls查看目录内容

      2. [w]代表可写(write):可以修改,对目录内创建+删除+重命名目录

      3. [x]代表可执行(execute):可以进行该目录

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

    • ls -l 中显示的内容如下: -rwxrw-r== 1 root root 1213 Feb 2 09:39 abc

    • 10个字符确定不同用户能对文件干什么

      • 第一个字符代表文件类型:- l d c b

      • 其余字符每3个一组(rwx)读(r)写(w)执行(x)

      • 第一组rwx:文件拥有者的权限是读、写和执行

      • 第二组rw-:与文件拥有者同一组的用户的权限是读、写但不能执行

      • 第三组r--:不与文件拥有者同组的其他用户的权限只读不能写和执行

    • 可用数字表示为: r=4,w=2,x=1 因此rwx=4+2+1=7

    • 其它说明

      • 1文件:硬连接数或目录:子目录数
        root 用户
        root
        1213 文件大小(字节),如果是文件夹,显示4096字节
        feb 2 09:39 最后修改日期
        abc 文件名
  • 修改权限-chmod

    • 基本说明:

      • 通过chmod指令,可以修改文件或者目录的权限

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

      • 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

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

      • 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 abc.txt

  • 修改文件所有者-chown

    • 基本介绍

      • chown newowner 文件/目录 改变所有者

      • chown newowner:newgroup 文件/目录 改变所有者和所在组

      • -R 如果是目录 则使其下所有子文件或目录递归生效

    • 案例演示

      • 请将/home/abc.txt文件的所有者修改成tom chown tom /home/abc.txt

      • 请将/home/kkk目录下所有的文件和目录的所有者都修改成tom chown -R tom /home/kkk

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

    • 基本介绍

      • chgrp newgroup 文件/目录 改变所有组

    • 案例演示

      • 请将/home/abc.txt文件的所在组修改成shaolin chgrp shaolin /home/abc.txt

      • 请将/home/kkk目录下所有的文件和目录的所有组都修改成 shaolin chgrp -R shaolin /home/kkk

  • 最佳实践-警察和土匪游戏

    • police,bandit

    • jack,jerry:警察

    • xh,xq:土匪

      1. 创建组 gropuadd police gropuadd bandit

      2. 创建用户 useradd -g police jack useradd -g police jerry useradd -g bandit xh useradd -g bandit xq passwd jack passwd jerry passwd xh passwd xq

      3. jack创建一个abc.txt文件,自己可以读写,本级人可以读,其它组没人任何权限 su - jack touch abc.txt chmod 640 abc.txt

      4. jack修改该文件,让其它组人可以读,本组人可以读写 chmod 664 abc.txt

      5. xh 投警察,看看是否可以读写 su - root usermod -g police xh su - xh

      6. 测试,看看xh是否可以读写,xq是否可以,小结论,就是如果要对目录内的文件进行操作,需要有对该目录的相应权限

  • 课后练习

    • 练习文件权限管理[课堂练习],完成如下操作

      1. 建立两个组(神仙(sx),妖怪(yg))

      2. 建立四个用户(唐僧,悟空,八戒,沙僧)

      3. 设置密码

      4. 把悟空,八戒放入妖怪 唐僧 沙僧 在神仙

      5. 用悟空建立一个文件(monkey.c 该文件要输出 i am monkey)

      6. 给八戒一个可以r w的权限

      7. 八戒修改monkey.java加入一句(i am pig)

      8. 唐僧 沙僧 对该文件没有权限

      9. 把沙僧放入妖怪组

      10. 让沙僧 修改该文件monkey,加入一句话("我是沙僧,我是妖怪!");

      11. 对文件夹的rwx细节讨论和测试!!!

        1. x:表示可以进入到该目录,比如cd

        2. r:表示可以ls,将目录的内容显示

        3. w:表示可以在该目录,删除或者创建文件

    • 课堂练习2,完成如下操作

      1. 用root 登录,建立用户mycentos,自己设定密码

      2. 用mycentos登录,在主目录下建立目录test/t11/t1

      3. 在t1中建立一个文本文件aa,用vi加就加其内容为ls -al

      4. 改变aa的权限为可执行文件[可以将当前日期追加到一个文件],运行该文件./aa

      5. 删除新建立的目录test/t11/t1

      6. 删除用户mycentos及其主目录中的内容

      7. 将linux设置成进行到图形界面的

      8. 重新启动linux或关机

 

 

6、定时任务高度

  • crond任务调度

    • crontab进行定时任务的设置

    • 概述

      • 任务高度:是指系统在某个时间执行的特定的命令或程序。

      • 任务高度分类:1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫毒等个别用户工作:个别用户可能希望执行某些程序,比如对mysql数据库的备份

    • 基本语法 crontab [选项]

    • 常用选项

      -e编辑crontab定时任务
      -l 查询crontab任务
      -r 删除当前用户所有的crontab任务
    • 快速入门

      • 设置任务调度文件:/etc/crontab

      • 设置个人任务调度。执行crontab -e 命令

      • 接着输入任务到高度文件

      • 如:*/1 ls-l /etc/ > /tmp/to.txt

      • 意思说每小时的第分钟执行ls -l /etc/ > /tmp/to.txt命令

    • 参数细节说明 5个占位符的说明   

       

       

       

    • 应用实例

      • 案例1:每隔1分钟,就将当前的日期信息,追加到/tmp/mydate文件中

      • 案例2:每隔1分钟,将当前日期和日历都追加到/home/mycal文件中 

         

         

         

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

    • crond相关指令

      • crontab -r :终止任务调度

      • crontab -l:列出当前有那些任务调度

      • service crond restart [重启任务高度]

  • at定时任务

    • 基本介绍

      1. at命令是一次性定时计划任务,at的守护进程atd会以后台模式运行,检查作业队列来运行。

      2. 默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行些作业

      3. at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了

      4. 在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令查看 ps -ef检查当前正在运行的指令有哪些 ps -ef | grep atd //可以检测atd是否运行

      5. 工作原理图 

         

         

         

    • at命令格式 at [选项] [时间] ctrl + D 结束at命令的输入

    • atq查寻at命令

    • at命令选项 

       

       

       

    • 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来指定完成命令的时间。

    • 应用实例

      • 案例1:2天后的下午5点执行 /bin/ls /home at 5qm + 2 days /bin/ls /home

      • 案例2: atq命令查看系统中没有执行的工作任务

      • 案例3:明天17点钟,输出时间到指定文件内 比如/root/date100.log at 5qm tomorrow date > /root/date100.log

      • 案例4:2分钟后,输出时间到指定文件内 比如/root/date200.log at now + 2 minutes date > /root/date200.log

      • 案例5:删除已经设置的任务,atrm编号

 

7、linux磁盘分区、挂载

  • Linux分区

    • 原理介绍

      1. Linux来说无论有几个分区,分给哪一目录使用,它归根结底就只有一个根目录,一个独立且唯一的文件结构,Linux中每个分区都是用来组成整个文件系统的一部分。

      2. Linux采用了一种叫"载入"的处理方法,它的整个文件系统中包含了一整套的文件和目录,且将一个分区和一个目录联系起来。这里要载入的一个分区将使它的存储空间在一个目录下获得。

      3. 示意图 

         

    • 查看所有设备挂载情况

      • 命令:lsblk 或者 lsblk -f 

         

    • 硬盘说明

      1. Linux硬盘分IDE硬盘和SCSI硬盘,目前基本上是SCSI硬盘

      2. 对于IDE硬盘,驱动器标识 符为"hdx~",其中"hd"表明分区所在设备的类型,这是是指IDE硬盘了,"x"为盘号(a为基本盘,b为基本从属盘,c为辅助主盘),"~"代表分区,前四个分区用数字1到4表示,它们是主分区或扩展分区,从5开始就是逻辑分区。例,hda3表示为第一个IDE硬盘的第三个主分区或扩展分区,hdb2表示为第二个IDE硬盘上的第二个主分区或扩展分区。

      3. 对于SCSI硬盘则标识为"sdx~",SCSI硬盘是用"sd"来表示分区所在设备的类型的,其余则和IDE硬盘的表示方法一样。 

         

  • 挂载的经典案例

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

    • 如何增加一块硬盘

      1. 虚拟机添加硬盘

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

          1. 虚拟机增加硬盘步骤1 分区命令 fdisk /dev/sdb

          2. 开始对/sdb分区

          3. m显示命令列表
            p 显示磁盘分区 同 fdisk -l
            n 新增分区
            d 删除分区
            w 写入并退出
          4. 说明:开始分区后输入n,新增分区,然后选择p,分区类型为主分区。两次回车默认剩余全部空间。最后输入w写入分区并退出,若不保存退出输入q

        2. 虚拟机增加硬盘步骤2

          1. 格式化磁盘

          2. 分区命令:mkfs -t ext4 /dev/sdb1

          3. 其中ext4是分区类型

        3. 虚拟机增加硬盘步骤3

          1. 挂载:将一个分区与一个目录联系起来,

          2. mount 设备名称 挂载目录

          3. 例如: mount /dev/sdb1 /newdisk

          4. umount 设备名称 或者 挂载目录

          5. 例如:umount /devsdb1 或者 umount /newdisk

        4. 注意:用命令行挂载重启后会失效

        5. 虚拟机增加硬盘步骤5

          1. 永久挂载:通过修改/etc/fstab实现挂载

          2. 添加完成后 执行mount -a即刻生效

      2. 分区

      3. 格式化 mkfs -t ext4 /dev/sdb1

      4. 挂载(命令行挂载) mount /dev/sdb1 /newdisk/

      5. 卸载 umont /dev/sdb1 /newdisk/

      6. 设置可以自动挂载

  • 磁盘情况查询

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

    • 基本语法

      • df -h

    • 应用实例

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

         

    • 查询指定目录的磁盘占用情况

      • 基本语法

      • du -h /目录

      • 查询指定目录的磁盘占用情况,默认为当前目录

      • -s 指定目录占用大小汇总

      • -h 带计量单位

      • -a 含文件

      • -m -max-depth=1 子目录尝试

      • -c 列出明细的同时,增加汇总值

    • 应用实例

      • 查询 /pot 目录的磁盘占用情况,深度为1

         

         

    • 磁盘情况-工作实用指令(wc -l 统计数量)

      1. 统计/opt文件夹下文件的个数

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

      3. 统计/opt文件夹下文件的个数,包括子文件夹里的
      ls -lR /opt |grep "^-" | wc -l
      4. 统计/opt文件夹下目录的个数,包括子文件夹里的
      ls -ld /opt |grep "^d" | wc -l
      5. 以树状显示目录结构tree目录,注意,如果没有tree,则使用yum install tree安装

8、网络配置

  • linux网络配置原理图

  • linux网络环境配置

    • 第一种方法(自动获取): 说明:登陆后,通过界面的来设置自动获取ip,特点:linux启动后会自动获取IP,缺点是每次自己动获取 的ip地址可能不一样

       

       

       

    • 第二种方法(指定ip)

      • 说明 直接修改配置文件来指定IP,并可以连接到外网 编辑 vim /etc/sysconfig/network-scripts/ifcfg-ens33 要求:将ip地址配置的静态的,比如:ip地址为192.168.200.130

      • ifcfg-ens33 文件说明 

         

         

         

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

  • 设置主机名和hosts映射

    • 设置主机名

      1. 为了方便记忆,可以给linux系统设置主机名,也可以根据需要修改主机名

      2. 指令hostname:查看主机名

      3. 修改文件在/etc/hostname指定

      4. 修改后,重启生效

    • 设置hosts映射

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

      • windows 在 C:\Windows\System32\drivers\etc\hosts文件指定即可 案例:102.168.200.130 stxusritx

      • linux 在/etc/hosts 文件 指定 案例:192.168.200.1 ThinkPad-PC

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

    • Hosts是什么

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

    • DNS

        1. DNS,就是Domain Name System的缩写,翻译过来就是域名系统

        2. 是互联网上作为域名和IP地址相互映射的一个分布式数据库

    • 应用实例:用户在浏览器输入了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进行解析域 

         

         

         

 

9、进程管理(重点)

  • 基本介绍

    1. 在Linux中,每个执行的程序都称为一个进程。每一个进行都分配一个ID号(pid,进行号)。

    2. 每个进程都可能以两种方式存在的。前台和后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看的进程,通常使用后台方式执行。

    3. 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才结束。 

       

       

       

  • 显示系统执行的进程

    • 基本介绍 ps命令是用来查看目前系统中,有哪些正在执行,以及它们执行的状况。可以不加任何参数 

       

       

       

    • ps详解

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

      2. 指令说明

        1. System V展示风格

        2. USER:用户名称

        3. PID:进程号

        4. %CPU:进程占用CPU的百分比

        5. %MEM:进程占用物理内存的百分比

        6. VSZ:进程占用的虚拟内存大小(单位:KB)

        7. RSS:进程占用的物理内存大小(单位:KB)

        8. TT:终端名称,缩写.

        9. STAT:进程状态,其中S-睡眠,s-表示该进程是会话的先导进程,N-表示进程拥有比普通优先级更低的优先级,R-正在运行,D-短期等待,Z-僵死进程,T-被跟踪或者被停止等等

        10. STARTED:进程的启动时间

        11. TIME:CPU时间,即进程使用CPU的总时间

        12. COMMAND:启动进程所用的命令和参数,如果过长会被截断显示

    • 应用实例

      • 要求:以全格式显示当前所有的进程,查看进程的父进程,查看sshd的父进程信息

        1. ps -ef是以全格式显示当前所有的进程

        2. -e显示所有进程。-f全格式

        3. ps -ef | grep xxx

        4. 是BSD风格

        5. UID:用户ID

        6. PID:进程ID

        7. PPID:父进程ID

        8. C:CPU用于计算执行优先级的因子。数值越大,表明进程是CPU密集型运算,执行优先级会除低;

        9. STIME:进程启动的时间

        10. TTY:完整的终端名称

        11. TIME:CPU时间

        12. CMD:启动进程所用的命令和参数

  • 终止进程kill和killall

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

    • 基本语法 kill [选项] 进程号 (功能描述:通过进程号杀死进程/终止进程) killall 进程名称 (功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

    • 附加

      • bash 是本机进程

      • sshd 是外部进程

    • 常用选项 -9:表示强迫进程立即停止

    • 最佳实践

      • 案例1:踢掉某个非法登录用户 kill 进程号,比如 kill 10016 

         

         

         

      • 案例2:终止远程全服sshd,在适当时候再次重启sshd服务 kill sshd对应的进程号;/bin/systemctl start sshd.service

         

         

      • 案例3:终止多个gedits killall gedit

      • 案例4:强制杀掉一个终端 kill -9 bash对应的进程号

  • 查看进程树pstree

    • 基本语法 pstree[选项], 可以更加直观的来看进程信息

    • 常用选项 -p:显示进程的PID -u:显示进程的所属用户

    • 应用实例

      • 案例1:请你树状的形式显示进程的pid pstree -p

      • 案例2:请你树状的形式进程的用户id pstree -u

  • 服务(service)管理(守护进程)

    • 介绍 service 本质就是进程,但是是运行在后台的,通常都会监听某个端口,等待其它程序的请求,比如(mysql,sshd 防火墙等),因此我们又称为守护进程,是Linux中非常重要的知识点。【原理图】 

    • service管理指令

      1. service 服务名 [start | stop | restart | reload | status]

      2. 在CentOS7.0后 很多服务不再使用service,而是systemctl

      3. service 指令管理的服务在/etc/init.d 查看 

         

         

         

    • service管理指令案例

      • 请使用service 指令,查看,关闭,启动network [注意:在虚拟系统演示,因为网络连接会关闭]

    • 查看服务名

      • 方式1 :使用setup( -> 系统服务就可以看到全部)

      • 方式2:/etc/init.d 看到service指令管理的服务 有[*]号的会随着linux系统的启动自动启动,反之要手动启动 

         

         

         

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

      • Linux系统有7种运行级别(runlevel):常用的是级别3和5

        • 运行级别0:系统停机状态,系统默认运行级别不能设为0,否则不能正常启动

        • 运行级别1:单用户工作状态,root权限,用于系统维护,禁止远程登陆

        • 运行级别2:多用户状态(没有NFS),不支持网络

        • 运行级别3:完全的多用户状态(有NFS),无界面,登陆后进入控制台命令行模式

        • 运行级别4:系统未使用,保留

        • 运行级别5:X11控制台,登陆后进入图形GUI模式

        • 运行级别6:系统正常关闭并重启,默认运行级别不能设为6,否则不能正常启动

      • 开机的流程说明 开机----BIOS----/boot----systemd进程1----运行级别-----运行级对应的服务

    • CentOS7后运行级别说明

      • 在/etc/initab

      • 进行了简化,如下 : multi-user.taget graphical.target

    • chkconfig指令

      • 介绍

        1. 通过chkconfig 命令可以给服务的各个运行级别设置自启动/关闭

        2. chkconfig指令管理的服务在/etc/init.d查看

        3. 注意:Centos7.0后,很多服务使用systemctl管理

      • chkconfig基本语法

        1. 查看服务chkconfig --list [| grep xxx]

        2. chkconfig 服务名 --list

        3. chkconfig --level 5 服务名 on/off

      • 案例演示:对network服务 进行各种操作,把network在3运行级别,关闭自启动 chkconfig --level 3 network off

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

    • systemctl管理指令

      1. 基本语法:systemctl [start | stop |restart | status] 服务名

      2. systemctl指令管理的服务在/usr/lib/systemd/system查看

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

      1. systemctl list-unit-files [| grep 服务名] (查看服务开机启动状态,grep可以进行过滤)"

      2. systemctl enable 服务名(设置服务开机启动)

      3. systemctl disable 服务名(关闭服务开机启动)

      4. systemctl is-enabled 服务名(查询某个服务是否是自启动的)

    • 应用案例: 查看当前防火墙的状况,关闭防火墙和重启防火墙。 systemctl status firewalld systemctl stop firewalld systemctl restart firewalld

    • 细节讨论:

      1. 关闭自启用防火墙后,立即生效。[telnet 测试 某个商品即可] 

         

         

         

      2. 这种方式只是临时生效,当重启系统后,还是回归以前对服务的设置。

      3. 如果希望设置某个服务自启动或关闭永久生效,要使用systemctl [enable|disable] 服务名.

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

    • firewall指令

      1. 打开端口:firewall-cmd --permanent --add-port=端口号/协议

      2. 关闭端口:firewall-cmd --permanent --remove-port=端口号/协议

      3. 重新载入,才能生效:firewall-cmd --reload

      4. 查询端口是否开放:firewall-cmd --query-port=端口/协议

    • 应用案例:

      1. 启用防火墙,测试111端口是否能telnet systemctl start firewalld 无法telnet连通

      2. 开放111端口 firewall-cmd --permanent --add-prot=111/tcp 需要firewall-cmd --reload

      3. 再次关闭111端口 firewall-cmd --permanent --remove-port=111/tcp

  • 动态监控进程

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

       

       


      zombie 代表将死进程(进程已经死掉了,但是系统还没释放进程占用的内存空间)

    • 基本语法 top [选项]

    • 选项说明 

       

       

       

  • 动态监控进程

    • 交互操作说明(前三个大写后一个小写) 

       

       

       

    • 应用实例

      • 案例1.监视特定用户.比如监控tom用户

        • top:输入此命令,按回车键,查看执行的进程。

        • u:然后输入"u"回车,再输入用户名,即可

      • 案例2:终止指定的进程,比如我们要结束tom登录

        • top:输入此命令,按回车键,查看执行的进程。

        • k:然后输入"k"回车,再输入要结束的进程ID号

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

  • 监控网络状态

    • 查看系统网络情况netstat 

       

       

       

    • 基本语法

      • netstat [选项]

    • 选项说明

      • -an 按一定顺序排列输出

      • -p 显示哪个进程在调用

    • 应用案例

      • 请查看服务名为sshd的服务的信息 

         

         

         

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

 

10、RPM与YUM

  • rpm包的管理

    • 介绍 rpm用于互联网下载包的打包及安装工具,它包含在某些Linux分发版中。它生成具有.RPM扩展名的文件。RPM是RedHat Package Manager(RedHat软件包管理工具)的缩写,类似windows的setup.exe,这一文件格式名称虽然打上了RedHat的标志,但理念是通用的。

    • Linux的分发版本都有采用(suse,redhat,centos等等),可以算是公认的行业标准了

    • rpm包的简单查询指令 查询已安装的rpm列表 rpm -qa"grep xx 举例:看看当前系统,是否安装了firefox

    • rpm包名基本格式

      • 一个rpm包名:firefos-60.2.2-1.el7.centos.x86_64

      • 名称:firefox

      • 版本号:60.2.2-1

      • 适用操作系统:el7.centos.x86_64

      • 表示centos7.x的64位系统

      • 如果是i686、i386表示32位系统,noarch表示通用。

    • rpm包的其它查询指令

      • rpm -qa : 查询所安装的所有rpm软件包

      • rpm -qa | more

      • rpm -qa | grep X [rpm -qa | grep firefox]

      • rpm -q 软件包名:查询软件包是否安装

      • 案例:rpm -q firefox

      • rpm -qi 软件包名 :查询软件包信息

      • 案例:rpm -qi firefox

      • rpm -ql 软件包名:查询软件包中的文件

      • 比如:rpm -ql firefox

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

      • rpm -qf /etc/passwd

      • rpm -qf /root/install.log

    • 卸载rpm包:

      • 基本语法 rpm -e RPM包的名称 //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

    • 安装rpm包

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

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

      • 应用实例 演示卸载和安装firefox浏览器 rpm -e firefox 找到firefox的安装包,放在指定的文件下目录下去 rpm -ivh /opt/firefox...

  • yum

    • 介绍 yum是一个Shell前端软件包管理器。基于RPM包管理,能够从指定的服务器自动下载RPM包并且安装,可以自动处理依赖性关系,并且一次安装所有依赖的软件包。 示意图 

       

       

       

    • yum的基本指令

      • 查询yum服务器是否有需要安装的软件

      • yum list | grep xx软件列表

      • 安装指定的yum包 yum install xxx 下载安装

    • yum应用实例: 案例:请使用yum的方式来安装firefox rpm -e firefox yum list | grep firefox yum install firefox.x86_64

     

10、Linux之javaEE定制篇

  • 搭建javaEE环境

    • 概述

      • 如果需要在linux下进行JavaEE的开发,我们需要安装如下软件 

         

         

         

    • 安装步骤

      1. mkdir /opt/jdk

      2. 通过xftp6 上传到 /opt/jdk下

      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 /etc/profile

      8. export JAVA_HOME=/usr/local/java/jdk1.8.0_261

      9. export PATH=$JAVA_HOME/bin:$PATH

      10. source /etc/profile [让文件生效

    • 测试是否安装成功

      • 编写一个简单的Hello.java 输出 "hello,world!"

 

 

 

11、Linux之大数据定制篇

  • 大数据定制篇-Shell编程

    • 为什么要学习Shell编程

      1. Linux运维工程师在进行服务器集群管理时,需要编写Shell程序来进行服务器管理。

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

      3. 对于大数据程序员来说,需要编写Shell程序来管理集群

  • Shell是什么 Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动、挂起、停止甚至是编写一些程序 

     

     

     

  • Shell脚本的执行方式

    • 脚本格式要求

      1. 脚本以#!/bim/bash开头

      2. 脚本需要有可执行权限

    • 编写第一个Shell脚本

      • 需求说明:创建一个Shell脚本,输出hello world! vim hello.sh #!/bin/bash echo "hello,world~"

    • 脚本的常用执行方式

      • 方式1(输入脚本的绝对路径或相对路径)

      • 说明:首先要赋予helloworld.sh 脚本的+x权限,再执行脚本

      • 方式2(sh+脚本)

      • 说明:不用赋予脚本+x权限,直接执行即可。 sh hello.sh 也可以使用绝对路径

  • Shell的变量

    • Shell变量介绍

      1. Linux Shell中的变量分为,系统变量和用户自定义变量。

      2. 系统变量:$HOME、$PWD、$SHELL、$USER等等,比如:echo $HOME 等等..

      3. 显示当前shell中所有变量:set

    • shell变量的定义 基本语法

      1. 定义变量:变量=值

      2. 撤销变量:unset 变量

      3. 声明静态变量:readonly变量,注意:不能unset

    • 快速入门

      1. 案例1:定义变量A

      2. 案例2:撤销变量A

      3. 案例3:声明静态的变量B=2,不能unset

      4. 案例4:可把变量提升为全局环境变量,可供其它shell程序使用

    • shell变量的定义

      • 定义变量的规则

        1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(x)

        2. 等号两侧不能有空格

        3. 变量名称一般习惯为大写

      • 将命令的返回值赋给变量

        1. A=`date 反引号,运行里面的命令,并把结果返回给变量A

        2. A=$(date)等价于反引号

  • 设置环境变量

    • 基本语法

      1. export 变量名=变量值 (功能描述:将shell变量输出为环境变量)

      2. source 配置文件 (功能描述:让修改后的配置信息立即生效)

      3. echo $变量名 (功能描述:查询环境变量的值) 

         

         

         

    • 快速入门

      1. 在/etc/profile文件中定义TOMCAT_HOME环境变量

      2. 查看环境变量TOMCAT_HOME的值

      3. 在另外一个shell程序中使用TOMCAT_HOME

    • 注意:在输出TOMCAT_HOME环境变量前,需要让其生效source/etc/profile

      shell脚本的多选注释 :<<! 内容 !(都要单独一行)

  • 位置参数变量

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

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

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

  • 预定义变量(了解)

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

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

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

  • 运算符

    • 基本介绍 学习如何在shell中进行各种运算操作。

    • 基本语法

      1. "$((运算式))"或"$[运算式]" 或者 expr m+n (推荐使用$[运算式])

      2. 注意expr运算符要有空格,如果希望将expr的结果赋给某个变量,使用反引号``括起来

      3. expr m - n

      4. expr \*,/,% 乘,除,取余

    • 应用实例

      • 案例1:计算(2+3)*4的值

      • 案例2:请求出命令行的两个参数[整数]的和 

  • 条件判断

    • 判断语句

      • 基本语法 [ condition ] (注意condition前后要有空格) #非空返回true,可使用$?验证(0为true,>1为false)

      • 应用实例 [hspEdu] 返回true [] 返回true [condition] && echo OK || echo notok 条件满足,执行后面的语句

      • 常用判断条件

        • = 字符串比较

        • 两个整数的比较

          1. -lt 小于

          2. -le 小于等于

          3. -eq 等于

          4. -gt 大于

          5. -ge 大于等于

          6. -ne 不等于

        • 按照文件权限进行判断

          1. -r 有读的权限

          2. -w 有写的权限

          3. -x 有执行的权限

        • 按照文件类型进行判断

          1. -f 文件存在并且是一个常规的文件

          2. -e 文件存在

          3. -d 文件存在并是一个目录

      • 应用实例

        • 案例1:"ok"是否等于"ok"

        • 判断语句:使用 =

        • 案例2:23是否大于等于22

        • 判断语句:使用 -ge

        • 案例3:/root/shcode/aaa.txt 目录中的文件是否存在

        • 判断语句:使用 -f 

           

           

           

  • 流程控制

    • if 判断

      • 基本语法

        • if[ 条件判断式 ]

        • then

        • 代码

        • fi

        • 或者,多分支

        • if [ 条件判断式 ]

        • then

        • 代码

        • elif [ 条件判断式 ]

        • 代码

        • fi

        • 注意事项:[ 条件判断式 ],中括号和条件判断式之间必须有空格

      • 应用实例 ifCase.sh

        • 案例:请编写一个shell程序,如果输入的参数,大于等于60,则输出"及格了",如果小于60,则输出"不及格"。 

           

           

           

  • case语句

    • 基本语法

      • case $变量名 in

      • “值1”)

      • 如果变量的值等于值1,则执行程序1

      • ;;

      • "值2")

      • 如果变量的值等于值,则执行程序2

      • ;;

      • ...省略其他分支...

      • *)

      • 如果变量的值都不是以上的值,则执行此程序

      • ;;

      • esac

    • 应用实例 testCase.sh

      • 案例1:当命令行参数是1时,输出"周一",是2时,就输出"周二",基它情况输出 "other" 

         

         

         

  • for循环

    • 基本语法1

      • for 变量 in 值1 值2 值3...

      • do

      • 程序/代码

      • done

    • 应用实例 testFor1.sh

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

         

         

         

    • 基本语法2

      • for((初始值;循环控制条件;变量变化))

      • do

      • 程序/代码

      • done

    • 应用实例 testFor2.sh

      • 案例1:从1加到100的值输出显示 

         

         

         

  • while循环

    • 基本语法1

      • while [ 条件判断式 ]

      • do

      • 程序/代码

      • done

      • 注意:while 和 [有空格,条件判断式和 [也有空格

    • 应用实例 testWhile.sh

      • 案例1:从命令行输入一个数n,统计从 1+..+ n值 是多少?

         

         

         

  • read读取控制台输入

    • 基本语法

      • read(选项)(参数)

      • 选项

        • -p:指定读取时的提示符;

        • -t:指定读取值时等待的时间(秒),如果没有在指定的时间内输入,就不再等待了。。

        • 参数

        • 变量:指定读取值的变量名

    • 应用实例testRead.sh

      • 案例1:读取控制台输入一个NUM1值

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

         

         

         

  • 函数

    • 函数介绍

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

    • 系统函数

      • basename基本语法

      • 功能:返回完整路径最后 / 的部分,常用于获取文件名

      • basename [pathname] [suffix]

      • basename [string] [suffix] (功能描述:basename命令会删掉所有的前缀包括最后一个('/‘)字符,然后将字符串显示出来。) 选项: suffix为后缀,如果suffix被指定了,basename会将pathname或string中的suffix去掉。

    • 应用实例

      • 案例1:请返回/home/aaa/test.txt的"test.txt"部分 

         

         

         

    • dirname基本语法

      • 功能:返回完整路径最后/的前面的部分,常用于返回路径部分

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

    • 应用实例

      • 案例1:请返回 /home/aaa/test.txt的/home/aaa 

         

         

         

  • 自定义函数

    • 基本语法

      • [ function ] funname[()]

      • {

        • Action; [return int;] (有返回值就写没有就不用写)

      • }

      • 调用直接写函数名:funname [值]

    • 应用实例

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

         

         

         

  • Shell编程综合案例(P106)

    • 需要分析

      • 每天凌晨2:30备份 数据库 hspedu 到 /data/backup/db

      • 备份开始和备份结束能够给出相应的提示信息

      • 备份后的文件要求以备份时间为文件名,并打包成.tar.gz 的形式,比如:2021-03-12_230201.tar.gz

      • 在备份的同时,检查是否有10天前备份的数据库文件,如果有就将其删除。 

         

         

 

12、Python定制片开发平台Ubuntu

  • Ubuntu介绍 Ubuntu是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu是基于GNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业开发团队(Canonical Ltd)打造的

  • 专业的Python开发者一般会选择 Ubuntu 这款Linux系统作为生产平台 提示:Ubuntu和Centos 都是基于GNU/Linux 内核的,因此基本使用和Centos是几乎一样的,它们的各种指令可以通用,在学习和使用Ubuntu的过程中,会发现各种操作指令在前面学习CentOS都使用过。只是界面和预安装的软件有所差别。 Ubuntu下载地址:http://cn.ubuntu.com/download/

  • 安装Ubuntu

    • 设置Ubuntu支持中文

      • 默认安装Ubuntu中只有英文语言,因此是不能显示汉字的。要正确显示汉字,需要安装中文语言包

      • 安装中文支持步骤

        1. 单击左侧图标栏打开Language Support 菜单,点击打开Language Support(语言支持)选项卡。

        2. 点击 Install / Remove Languages,在弹出的选项卡中下拉找到Chines(Simplified),即中文简体,在后面的选项框中打勾。然后点击Apply Changes 提交,系统会自动联网下载中文语言包(保证Ubuntu是联网的)

        3. 这时"汉语(中国)"在最后一位因为当前第一位是"English",所以默认显示都是英文,我们如果希望默认显示用中文,则应该将"汉语(中国)"设置为第一位。设置方法是拖动,鼠标单击"汉语(中国)",当底色变化(表示选中了)后,按住鼠标左键不松手,向上拖动放置到第一位。

        4. 设置后不会即该生效,需要下一次登录时都会生效

    • Ubuntu的root用户

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

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

        1. 输入sudo passwd 命令,输入一般用户密码并设定root用户密码

        2. 设定root密码成功后,输入su命令,并输入刚才设定的root用户密码,就可以切换成root了,提示符$代表一般用户,提示符#代表root用户。

        3. 以后就可以使用root用户了

        4. 输入exit命令,退出root并返回一般用户

    • Ubuntu下开发Python

      • 说明

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

         

         

         

      • 在Ubuntu下开发一个Python程序

        1. vi hello.py [编写hello.py]

        2. python3 hello.py [运行hello.py]

 

13、Linux之Python定制篇APT软件管理和远程登录

  • apt介绍

    • apt是Advanced Packaging Toll的简称,是一款安装包管理工具。在Ubuntu下,我们可以使用apt命令进行软件包的安装、删除、清理等,类似于Windows中的软件管理工具。

    • unbuntu软件管理的原理示意图: 

       

       

       

  • 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 reinstall 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 下载该包的源代码

  • 更新Ubantu软件下载地址

    • 原理介绍(画出示意图)

    • 寻找国内镜像源 https://mirrors.tuna.tsinghua.edu.cn/所谓的镜像源:可以理解为提供下载软件的地方,比如Android手机上可以下载软件的安卓市场;iOS手机上可以下载软件的AppStore

    • 备份Ubuntu默认的源地址

    • sudo cp /etc/apt/sources.list /etc/apt/source.list.backup backup(备份文件) 清空原文件 sudo echo ' '> /ect/apt/sources.list 将网站中的内容复制到sources.list文件中去 

       

       

    • 然后退出 ,更新此文件夹 sudo apt-get update

  • Ubuntu软件安装、卸载的最佳实践

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

       

       

       

    • sudo apt-get remove vim //删除

    • sudo apt-get install vim //安装

    • sudo apt-cache show vim //获取软件信息

  • SS介绍
    • SSH介绍 SSH为Secure Shell 的缩写,由IETF的网络工作小组(Network Working Group)所制定;SSH为建立在应用层和传输层基础上的安全协议

    • SSH是目前较可靠,专为远程登录会话和其他网络服务提供安全性协议,常用于远程登录。几乎所有UNIX/Linux平台都可运行SSH

    • 使用SSH服务,需要安装相应的服务器和客户端,客户端和服务器的关系:如果,A机器想被B机器远程控制,那么,A机器需要安装SSH服务器,B机器需要安装SSH客户端。

    • 和CentOS不一样,Ubuntu默认没有安装SSHD服务(使用netstat -anp 指令查看:apt install net-tools),因此,我们不能进行远程登录

    • 原理示意图 

       

       

       

    • 安装SSH和启用

      • sudo apt-get install openssh-server

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

      • serivce sshd restart

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

    • 在Windows使用XShell6/XFTP6登录Ubuntu

      • 前面我们已经安装了XShell6,直接使用即可

      • 注意:使用stx用户登录,需要的时候再 su - 切换成root用户

    • 从一台linux系统远程登陆另外一台linux系统

      • 在创建服务器集群时,会使用到该技术

      • 基本语法

        • ssh 用户@IP

        • 例如 ssh stx@192.168.200.222

        • 使用ssh访问,如访问出现错误。可查看是否有该文件~/.ssh/known_ssh 尝试删除该文件解决,一般不会有问题

      • 登出

        • 登出命令:exit或者logout

 

14、CentOS8.1的使用

 

Linux高级篇

1、日志管理

  • 基本介绍

    1. 日志文件是重要的系统信息文件,其中记录了许多重要的系统事件,包括用户的登录信息、系统的启动信息、系统的安全信息、邮件相关信息、各种服务相关信息等。

    2. 日志对于安全来说也很重要,它记录了系统每天发生的各种事情,通过日志检查错误发生的原因,或者受到攻击者留下的痕迹。

    3. 可以这样理解日志是用来记录重大事件的工具

  • 系统常用日志

    • /var/log/ 目录就是系统日志文件的保存位置,看张图 

       

       

       

    • 应用案例 使用root用户通过xshell6登陆,第一次使用错误的密码,第二次使用正确的密码登录成功看看在日志文件/var/log/secure 里有没有记录相关信息

  • 日志管理服务 rsyslogd

    • CentOS7.6日志服务是rsyslogd , CentOS6.x日志服务是syslogd。rsyslogd 功能更强大。rsyslogd 的使用、日志文件的格式,和syslogd 服务兼容的

    • 查询 Linux 中的 rsyslogd 服务是否启动

    • ps aux | grep "rsyslog" | grep -v "grep" (反向匹配选择不匹配的行)

    • 查询rsyslogd 服务的自启动状态

    • systemctl list-unit-files | grep rsyslog

    • 配置文件:/etc/rsyslog.conf

      • 编辑文件时的格式为: * . * 存放日志文件

      • 其中第一个* 代表日志类型,第二*代表日志级别

        1. 日志类型分为 

           

           

           

        2. 日志级别分为:

           

           

           

    • 由日志服务rsyslogd 记录的日志,日志文件的格式包含以下4列:

      • 事件产生的时间

      • 产生事件的服务器的主机名

      • 产生事件的服务名或程序名

      • 事件的具体信息

    • 日志如何查看实例

      • 查看一下 /var/log/secure 日志,这个日志中记录的是用户验证和授权方面的信息来分析如何查看 

         

         S

         

  • 日志管理服务应用实例

    • 在/etc/rsyslog.conf 中添加一个日志文件/var/log/hsp.log,当有事件发送时(比如sshd服务相关事件),该文件会接收到信息并保存.演示重启、登录的情况,看看是否有日志保存 image-20230206205922655

       

       

       

       

  • 日志轮替

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

       

       

       

    • 日志轮替文件命名

      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"日志,用来保存新的日志,以此类推。

    • logrotate配置文件 

    • 参数说明 

       

       

       

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

    • 第一种方法是直接在/etc/logrotate.conf配置文件中写入该日志的轮替策略

    • 第二种方法是在/etc/logrotate.d/目录中新建立该日志的轮替文件,在该轮替文件中写入正确的轮替策略,因为该目录中的文件都会被"include"到主配置文件中,所有也可以把日志加入轮替

    • 推荐使用第二种方法,因为系统中需要轮替的日志非常多,如果全都直接写入/etc/logrotate.conf配置文件,

    • 在/etc/logrotate.d/配置轮替文件一览 

       

       

       

    • 应用实例

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

         

         

         /var/log/hsp.log
        {
        missingok
        daily
        copytruncate
        rotate 7
        notifempty
        }
  • 日志轮替

    • 日志轮替机制原理 日志轮替之所以可以在指定的时间备份日志,是依赖系统定时任务。在/etc/cron/.daily/目录,就会发现这个目录中是有logrotate 文件(可执行),logrotate 通过这个文件依赖定时任务执行的

       

       


      查看内存日志

    • 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 来看看用户登录清空,重启系统,再次查询,看看日志有什么变化没有。

 

2、定制自己的Linux系统

基本介绍

通过裁剪现有Linux系统(CentOS7.6),创建属于自己的min linux小系统,可以加深我们对linux的理解。

  • 基本原理

    • 启动流程介绍: 制作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

       

       

       

    • 示意图 

       

       

       

    • 操作步骤 具体看文档+演示(127)

 

Linux内核源码

1、介绍&内核升级

  • 为什么要阅读linux内核? 

     

     

     

  • Linux0.01内核源码

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

       

       

       

  • Linux内核最新版和内核升级

     

Linux系统备份与恢复

  • 基本介绍 实体机无法做快照,如果系统出现异常或者数据损坏,后果严重,要重做系统,还会造成数据丢失。所以我们可以使用备份和恢复技术

    1. 把需要的文件(或者分区)用TAR打包就行,下次需要恢复的时候,再解压开覆盖即可

    2. 使用dump和restore命令

  • 安装dump和restore

    • 如果linux上没有dump和restore指令,需要先安装 yum -y install dump yum -y install restore

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

    • dump语法说明 


       

       

       

 

Linux可视化管理

1、webmin

  • 基本介绍 webmin是功能强大的基于Web的Unix/Linux系统管理工具。管理员通过浏览器访问Webmin的各种管理功能并完成相应的管理操作。除了各版本的linux以外还可用于:AIX、HPUX、Solaris、Unixware、Irix和FreeBSD等系统

  • 安装webmin&配置 

     

     

     

    • 下载地址:http://download.webmin.com/download/yum/,用下载工具下载即可 也可以使用 wget http://download.webmin.com/download/yum/webmin-1.700-1.noarch.rpm

    • 安装 :rpm -ivh webmin-1.700-1.noarch.rpm

    • 重置密码 /usr/libexec/webmin/changepass.pl /etc/webmin root test root是webmin的用户名,不是OS的,这里就是把webmin的root用户密码改成了test

      • 修改webmin服务的端口号(默认是10000出于 安全目的) vim /etc/webmin/miniserv.conf #修改端口 将port=10000修改为其它端口号,如port=6666

    • 重启webmin /etc/webmin/restart # 重启 /etc/webmin/ start # 启动 /etc/webmin/stop # 停止

    • 防火墙放开6666端口 firewall-cmd --zone=public --add-port=6666/tcp --permanent # 配置防火墙开放6666端口 firewall-cmd --reload # 更新防火墙配置 firewall-cmd --zone=public --list-ports # 查看已经开放的端口号

    • 登录webmin http://ip:6666 可以访问了 用root账号和重置的新密码test 

       

       

       

2、bt运维工具

Linux面试题(腾讯、百度、美团、滴滴)

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

  • 统计连接到服务器的各个ip情况,并按连接数从大到小排序(腾讯)

     awk -F " " ‘{printf $5}’ | awk -F ":" '{printf $1}' //按行进行分割以" "(空格)为分割符,并输出第5段内容,把第5段内容再进行分割,以":"为分割符,输出第一段内容

  • 问题:如忘记了mysql5.7数据库的ROOT用户的密码,如何找回?(滴滴)(143)

  • 写出指令:统计ip访问情况,要求分析nyginx访问日志(access.log),找出访问页面数量在前两位的ip(美团)

  • 192.168.130.21 aaa.html
    192.168.130.20 aaa.html
    192.168.130.20 aaa.html 192.168.130.20 aaa.html 192.168.130.23 aaa.html 192.168.130.20 aaa.html 192.168.130.25 aaa.html 192.168.130.20 aaa.html 192.168.130.20 aaa.html 192.168.130.25 aaa.html 192.168.130.20 aaa.html

     

     

     

  • 使用tcpdump监听本机,将来自ip 192.168.200.1,tcp端口为22的数据,保存输出到tcpdump.log,用做将来数据分析(美团) 

     

     

     

  • 常用的Nginx模块,用来做什么(头条) 

     

     

     

  • 如果是你系统管理员,在进行Linux系统权限划分时,应考虑哪些因素?(腾讯)

    1. 首先阐述Linux权限的主要对象 

    2. 根据自己实际经验谈考虑因素 

       

       

       

  • 权限操作思考题

    1. 用户tom对目录 /home/test有执行和读写权限,/home/test/hello.java 是只读文件,问tom对hello.java文件能读吗?(ok)能修改吗?(on)能删除吗?(ok)

    2. 用户tom对目录 /home/test 只有读写权限,/home/test/hello.java 是只读文件,问tom对hello.java文件能读吗?(on)能修改吗?(on)能删除吗?(on)

    3. 用户tom对目录 /home/test 只有执行权限,/home/test/hello.java 是只读文件,问tom对hello.java文件能读吗?(ok)能修改吗?(on)能删除吗?(on)

    4. 用户tom对目录 /home/test 只有执行和写权限,/home/test/hello.java 是只读文件,问tom对hello.java文件能读吗?(ok)能修改吗?(on)能删除吗?(ok)

  • 说明Centos7启动流程,并说明和CentOS6相同和不同的地方(腾讯)(148)

  • 问题:列举Linux高级命令,至少6个(百度)

    1. netsta //网络状态监控

    2. top //系统运行状态

    3. lsblk //查看硬盘分区 find

    4. ps -aux //查看运行进程

    5. chkconfig //查看服务启动状态

    6. systemctl //管理系统服务器

  • 问题:Linux查看内存、io读写、磁盘存储、端口占用、进程查看命令是什么?(瓜子)

    1. top //查看内存

    2. iotop(默认没安装 ) //查看io读写

    3. df -l // 磁盘存储

    4. netstat -tunlp //端口占用

    5. ps -aux //进程查看命令

  • 使用Linux命令计算t2.txt 第二列的和并输出(美团)

    张三 40 李四 50 王五 60 

     

     

     

    cat t2.txt | awk -F " " '{sum+=$2} END {print sum}' //sum+=$2 把第二列进行求和,最后输出sum的值

  • Shell脚本里如何检查一个文件是否存在?并给出提示(百度) if [ -f 文件名 ] then echo "存在" else echo "不存在" fi

  • 用shell写一个脚本,对文本t3.txt中无序的一列数字排序,并将总和输出(百度) 9 8 7 6 5 4 3 2 10

     

     


     awk '{sum+=$0;print $0} END {print "sum="sum}' //意思是把每一行的$0输出 ,并求对他们求和

  • 请用指令写出查找当前文件夹(/home)下所有的文本文件内容中包含有字符 "cat"的文件名称(金山) 

     

     

     

  • 请写出统计/home目录下所有文件个数和所有文件总行数的指令(在金山面试题扩展) image-20230207204159760 find /home -name "." | xargs wc -l

  • 列出你了解的web服务器负载架构(滴滴) Nginx Haproxy Keepalived LVS

  • 每天晚上10点30分,打包站点目录/var/spool/mail备份到/home目录下(每次备份按时间生成不同的备份包 比如按照 年月日时分秒)(滴滴) 

     

     

  • 如何优化Linux系统,说出你的方法(瓜子)

 

 

 

 

posted @ 2023-02-15 12:21  小什  阅读(1)  评论(0)    收藏  举报
Title