linux学习笔记——韩顺平老师

1.虚拟机快照

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

应用实例

  1. 安装好系统以后,先做一个快照A
  2. 进入到系统,创建一个文件夹,在保存一个快照B
  3. 回到系统刚刚安装好的状态,即 快照A
  4. 试试看,还能否能再次回到 快照B

2.虚拟机迁移和删除

虚拟机在安装完毕后,本质还是一个文件(放文件夹的)。

因此虚拟系统的迁移很方便,可以把安装好的虚拟系统的文件夹整体拷贝或者剪切到另外位置使用。

删除:可以使用vmware进行移除,在点击菜单->从磁盘删除即可,或者直接手动删除虚拟系统对应的文件夹即可。

3.Linux目录结构

基本介绍

  1. Linux的文件系统是采用级层式的树状目录结构,在此结构中的最上层是根目录“/”,然后在此目录下再创建其它的目录
  2. 记住一句经典的话:在Linux世界里,一切皆为文件

具体的目录结构

  • /bin (/user/bin 、/usr/local/bin) [常用]

是binary的缩写,这个目录存放这最经常使用的命令

  • /sbin (/user/sbin 、/usr/local/sbin)

s就是super user 的意思,这里存放的是系统管理员使用的系统管理程序

  • /home [常用]

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

  • /root [常用]

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

  • /lib

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

  • /lost+found

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

  • /etc [常用]

所有的系统管理所需要的配置文件和子目录,比如:安装mysql数据库my.cnf

  • /usr [常用]

这是一个非常重要的目录,用户的很多应用程序和文件都放在这个目录下,类似于Windows下的program files目录

  • /boot [常用]

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

  • /proc 这个目录是一个虚拟的目录,他是系统内存的映射,访问这个目录来获取系统信息

     

    • /srv service的缩写,该目录存放一些服务启动之后需要提取的数据

       

      • /sys 这是Linux2.6内核的一个最大的变化,该目录下安装了2.6内核中新出现的一个文件系统sysfs

         

        • /tmp

        这个目录是用来存放一些临时文件的

        • /dev

        类似于Windows的设备管理器,把所有的硬件用文件的形式储存

        • /media [常用]

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

        • /mnt [常用]

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

        • /opt

        这是给主机额外安装软件所摆放的目录。如安装Oracle数据库就可以放到该目录下,默认为空

        • /user/local [常用]

        这是另一个给主机安装软件所安装的目录,一般通过编译源码方式安装的程序

        • /var [常用]

        这个目录中存放者不断扩充着的东西,习惯将经常被修改的目录放在这个目录下,包括各种日志文件

        • /selinux [security-enhanced linux]

        SELinux是一种安全子系统,他能控制只能访问特定文件,有三种工作模式,可以自行设置

        4.Linux实操

        远程登录Linux

        为什么需要远程登录linux

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

        1. linux服务器是开发小组共享
        2. 正式上线的项自是运行在公网
        3. 因此程序员需要远程登录到Linux进行项目管理或者开发
        4. 画出简单的

          Xshell6

          介绍

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

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

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

          Xftp6

          介绍

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

          5.vi和vim文本编辑器

          基本介绍

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

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

          vi和vim常用的三种模式

          • 正常模式

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

          • 插入模式

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

          • 命令行模式

          插入模式完毕后按esc退出再输入 : 可进入命令行模式。在这个模式当中,可以提供你相关指令,完成读取、存盘、替换、离开vim、显示行号等的动作则是在此模式中达成的!

          常用快捷键使用

          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文件,并将光标移动到第n行,先输入n 再输入 shift+g
          8. 更多的看整理的文档

          6.关机、重启和用户登录注销

          关机&重启命令

          • 基本介绍

          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下有效.
          2. 运行级别这个概念,后面给大家介绍

           

          7.用户管理

          基本介绍

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

          添加用户

          • 基本语法

          useradd 用户名

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

          指定/修改密码

          • 基本语法

          passwd 用户名

          补充:显示当前用户所在目录 pwd

          删除用户

          • 基本语法

          userdel 用户名

          • 可能情况
          1. 删除用户,保留家目录 userdel 用户名
          2. 删除用户以及该用户目录 userdel -r 用户名 [谨慎操作]

          查询用户信息

          • 基本语法

          id 用户名

          • 细节说明

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

          切换用户

          • 介绍

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

          • 基本语法

          su - 切换用户名

          • 细节说明
          1. 从权限高的用户切换到权限低的用户,不需要输入密码,反之需要。
          2. 当需要返回到原来用户时,使用exit/logout指令

          查看当前用户/登录用户

          基本语法

          whoami/ who am I

          用户组

          • 介绍

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

          • 新增组

          指令:groupadd 组名

          • 删除组

          指令:groupdel 组名

          • 增加用户时直接加上组

          指令:useradd -g 用户组 用户名

          补充:在添加用户没指定组,系统默认创建同名组并把该用户加入该组

          • 修改用户的组

          usermod -g 用户组 用户名

          用户和组相关文件

          • /etc/password 文件

          用户的配置文件,记录用户的各种信息

          每行的含义:

        5. /etc/shadow 文件

      口令配置文件

      每行的含义:

    • /etc/group 文件

    组配置文件,记录Linux包含的组的信息

    每行的含义:8.实用指令

    指定运行级别

    • 基本介绍

    0:关机

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

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

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

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

    5:图形界面

    6:系统重启

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

    命令:init[0123456] 来切换不同的运行级别

    • CenOs7后运行级别说明

    在centos7之前,/etc/inittab文件中指定

    简化为

    multi-user.target:analogous to runlevel 3

    graphical.target:analagous to runlevel 5

    当前运行级别: systemctl get-default

    systemctl set-default TARGET.target

    找回root密码

    root 作为系统最高权限管理者,它的密码自然是至关重要的,那么 root 账户的密码应该怎么找回呢?
    步骤如下:

    1. 启动 Linux 系统,待进入开机界面后按 “e” 进入编辑界面,注意此处要快,在系统进入登录页面之前进行操作;
    2. 进入编辑界面后,找到以“Linux 16 ”开头的内容所在行,并在行最后输入 init=/bin/sh;
    3. 输入完成后,按下 Ctrl+X 进入单用户模式,如下界面即为单用户模式;
    4. 在光标闪烁的位置输入 mount -o remount,rw /,输入完成后回车;
    5. 在新的行末输入 passwd 并回车,接下来输入密码、确认密码即可,修改密码成功后显示 passwd... 字样;
    6. 接下来在新的行末输入 touch /.autorelabel,输入完成回车;
    7. 新的行末继续输入 exec /sbin/init,完成后回车等待系统修改密码;
    8. 耐心等待,系统自动重启后新的 root 密码即可生效。

    帮助指令

    • man 获得帮助信息

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

    Linux下,隐藏文件以.开头 选项可以组合使用

    • help 指令

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

    文件目录类

    • pwd 指令

    显示当前工作目录绝对路径

    • ls 指令

    ls [选项] [目录或文件]

    常用选项

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

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

    • cd指令

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

    cd ~ 或者cd :回到自己的家目录

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

    • mkdir指令

    创建目录 mkdir 要创建的目录

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

    常用选项

    -p :创建多级目录

    • rmdir指令

    删除空目录

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

    细节注意:删除的是空目录,有内容则无法删除

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

    • touch 指令

    创建空文件

    基本语法:touch 文件名称

    • cp指令

    拷贝文件到指定目录

    基本语法:cp [选项] source dest

    常用选项

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

    演示:

    拷贝:cp hello.txt /home/bbb

    递归复制:cp -r /home/bbb /opt/

    \cp 表示强制覆盖不提示

    • rm指令

    移除文件或目录

    基本语法:rm [选项] 要删除的文件或目录

    常用选项:

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

    -f:强制删除不提示

    使用细节:强制删除不提示的方法:带上 -f参数即可

    • mv指令

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

    基本语法

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

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

    • cat指令

    cat 查看文件内容

    基本用法

    cat [选项] 要查看的文件

    常用选项

    -n:显示行号

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

    管道指的是 将前面得到的结果交给后面的指令来完成

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

    • more 指令

    基于vi编辑器的文本过滤器,全屏幕按页显示文本文件内容。more指令中内置了若干快捷键

    基本语法:

    more 要查看的文件

    • less指令

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

    基本语法

    less 要查看的文件

    • echo 输出内容到控制台

       

      基本语法

      echo [选项] [输出内容]

      应用实例

      案例: 使用echo 指令输出环境变量,

      比如输出 $PATH $HOSTNAME, echo $HOSTNAME

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

         

        基本语法

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

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

        应用实例

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

        head -n 5 /etc/profile

        • 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

          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

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

               

              基本语法

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

              细节说明:当我们使用pwd指令查看目录时,仍然看到的是软连接所在的目录

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

                 

                基本语法

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

                应用实例

                案例: 显示最近使用过的10 个指令。

                history 10

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

                !5

                时间日期类

                •  

                  基本语法

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

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

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

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

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

                  应用实例

                  案例: 显示当前时间年月日

                  date “+%Y-%m-%d”

                  案例: 显示当前时间年月日时分秒

                  date “+%Y-%m-%d %H:%M:%S”

                   

                  • 基本语法

                     

                    date -s 字符串时间

                    应用实例

                    案例1: 设置系统当前时间, 比如设置成2020-11-03 20:02:10

                    date -s “2020-11-03 20:02:10”

                     

                    • 查看日历指令cal

                       

                      基本语法

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

                      应用实例

                      案例1: 显示当前日历 cal

                      案例2: 显示2020 年日历: cal 2020

                      搜索查找类

                      • find 指令将从指定目录向下递归地遍历其各个子目录,将满足条件的文件或者目录显示在终端。

                         

                        基本语法
                        find [搜索范围] [选项]

                        选项说明

                        应用实例

                        1. 案例1: 按文件名:根据名称查找/home 目录下的hello.txt 文件

                        find /home -name hello.txt (*.txt等于查找所有txt文件)

                        1. 案例2:按拥有者:查找/opt 目录下,用户名称为nobody 的文件

                        find /opt -user nobody

                        1. 案例3:查找整个linux 系统下大于200M 的文件(+n 大于-n 小于n 等于, 单位有k,M,G)

                        find / -size +200M (ls -lh h表示大小用k,m之类表示)

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

                           

                          基本语法

                          locate 搜索文件

                          特别说明

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

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

                          which ls

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

                             

                            基本语法

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

                            常用选项

                            应用实例

                            案例1: 请在hello.txt 文件中,查找"yes" 所在行,并且显示行号
                            写法1: cat /home/hello.txt | grep “yes”
                            写法2: grep -n “yes” /home/hello.txt

                            压缩和解压类

                            • 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 [选项] XXX.zip 将要压缩的内容(功能描述:压缩文件和目录的命令)

                                unzip [选项] XXX.zip (功能描述:解压缩文件)

                                zip 常用选项

                                -r:递归压缩,即压缩目录

                                unzip 的常用选项

                                -d<目录> :指定解压后文件的存放目录

                                • 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 解压到当前目录

                                  tar -zxvf pc.tar.gz

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

                                  9.Linux组管理和权限管理

                                  Linux组的基本介绍

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

                                  1. 所有者
                                  2. 所在组
                                  3. 其它组
                                  4. 改变用户所在的组

                                   

                                  文件/目录所有者

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

                                  查看文件的所有者

                                  • 指令:ls –ahl

                                  应用实例

                                  修改文件所有者

                                  (change owner)

                                  • 指令:chown 用户名 文件名

                                  应用案例

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

                                  chown tom apple.txt

                                  组的创建

                                  • 基本指令

                                  groupadd 组名

                                  应用实例

                                  创建一个组, ,monster
                                  groupadd monster

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

                                  所在组

                                  文件/目录 所在组

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

                                  • 查看文件/目录所在组

                                  基本指令

                                  ls –ahl

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

                                  -rw-r–r--. 1 fox monster 0 12月 30 15:08 ok.txt

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

                                  基本指令

                                  chgrp 组名文件名

                                  应用实例

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

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

                                  其它组

                                   

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

                                  改变用户所在组

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

                                  • 改变用户所在组
                                  1. usermod –g 新组名用户名
                                  2. usermod –d 目录名用户名改变该用户登陆的初始目录。特别说明:用户需要有进入到新目录的权限。

                                  应用实例

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

                                  usermod -g wudang zwj

                                  权限的基本介绍

                                   

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

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

                                   

                                  0-9 位说明

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

                                  -代表是一个普通文件

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

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

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

                                  b 是块设备,比如硬盘

                                  1. 第1-3 位确定所有者(该文件的所有者)拥有该文件的权限。—User
                                  2. 第4-6 位确定所属组(同用户组的)拥有该文件的权限,—Group
                                  3. 第7-9 位确定其他用户拥有该文件的权限—Other

                                  rwx 权限详解,难点

                                  • 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) 读® 写(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

                                    1. 给abc 文件的所有者除去执行的权限,增加组写的权限

                                  chmod u-x,g+w abc

                                    1. 给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 /home/abc.txt

                                     

                                    修改所在组和所有者

                                    • 基本介绍

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

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

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

                                    • 案例演示

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

                                    chown tom /home/abc.txt

                                    请将/home/test 目录下所有的文件和目录的所有者都修改成tom

                                    chown -R tom /home/test

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

                                    • 基本介绍

                                    chgrp newgroup 文件/目录【改变所在组】

                                    • 案例演示

                                    请将/home/abc .txt 文件的所在组修改成shaolin (少林)

                                    groupadd shaolin

                                    chgrp shaolin /home/abc.txt

                                    请将/home/test 目录下所有的文件和目录的所在组都修改成shaolin(少林)

                                    chgrp -R shaolin /home/test

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

                                    police , bandit

                                    jack, jerry: 警察

                                    xh, xq: 土匪

                                    1. 创建组groupadd police ; groupadd bandit
                                    2. 创建用户

                                    useradd -g police jack ; useradd -g police jerry

                                    useradd -g bandit xh; useradd -g bandit xq

                                    1. jack 创建一个文件,自己可以读r 写w,本组人可以读,其它组没人任何权限
                                    2. 首先jack 登录; vim jack.txt ; chmod 640 jack.txt
                                    3. jack 修改该文件,让其它组人可以读, 本组人可以读写

                                    chmod o=r,g=r jack.txt

                                    1. xh 投靠警察,看看是否可以读写.

                                    usermod -g police xh

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

                                    课堂练习2

                                    1. 建立两个组(神仙(sx),妖怪(yg))
                                    2. 建立四个用户(唐僧,悟空,八戒,沙僧)
                                    3. 设置密码
                                    4. 把悟空,八戒放入妖怪唐僧沙僧在神仙
                                    5. 用悟空建立一个文件(monkey.java 该文件要输出i am monkey)
                                    6. 给八戒一个可以r w 的权限
                                    7. 八戒修改monkey.java 加入一句话( i am pig)
                                    8. 唐僧沙僧对该文件没有权限
                                    9. 把沙僧放入妖怪组
                                    10. 让沙僧修改该文件monkey, 加入一句话(“我是沙僧,我是妖怪!”);
                                    11. 对文件夹rwx 的细节讨论和测试!!!
                                      • x: 表示可以进入到该目录, 比如cd
                                      • r: 表示可以ls , 将目录的内容显示
                                      • w: 表示可以在该目录,删除或者创建文件
                                    1. 示意图

                                    课堂练习3

                                    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 或关机

                                    10.定时任务调度

                                    crond 任务调度

                                    crontab 进行 定时任务的设置

                                    概述

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

                                    任务调度分类:1.系统工作:有些重要的工作必须周而复始地执行。如病毒扫描等

                                    个别用户工作:个别用户可能希望执行某些程序,比如对mysql 数据库的备份。

                                    示意图

                                    crontab

                                    • 基本语法

                                    crontab [选项]

                                    • 常用选项

                                    • 快速入门

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

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

                                    接着输入任务到调度文件

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

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

                                    • 参数细节说明

                                    cron表达式

                                    5 个占位符的说明

                                    crond 时间规则

                                    • 特殊时间执行案例

                                    每天的凌晨4点,每10分钟的时间段为 4-5点之内

                                    • 应用案例

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

                                    */1 * * * * date >> /tmp/mydate

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

                                    步骤:

                                      1. vim /home/my.sh 写入内容date >> /home/mycal 和cal >> /home/mycal
                                      2. 给my.sh 增加执行权限,chmod u+x /home/my.sh
                                      3. crontab -e 增加*/1 * * * * /home/my.sh
                                    • crond 相关指令
                                        1. conrtab –r:终止任务调度。其实就是删除crondtab -e 中的任务
                                        2. crontab –l:列出当前有那些任务调度
                                        3. service crond restart [重启任务调度]

                                    at定时任务

                                    • at 命令是ps -ef | grep atd //可以检测atd 是否在运行

                                       

                                      ps -ef 检测现在有哪些进程在运行 | grep 过滤

                                      1. 画一个示意图

                                      at 命令格式

                                      at [选项] [时间]
                                      Ctrl + D 结束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(明天)来指定完成命令的时间。

                                      at任务调度实例

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

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

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

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

                                      atrm 4 //表示将job 队列,编号为4 的job 删除.

                                      磁盘分区机制

                                      Linux 分区

                                      原理介绍

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

                                      硬盘说明

                                      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 硬盘的表示方法一样

                                      查看所有设备挂载情况

                                      命令:lsblk 或者lsblk -f

                                      挂载的经典案例

                                      说明:

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

                                      • 如何增加一块硬盘
                                      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 ext4 /dev/sdb1
                                      其中ext4 是分区类型

                                      • 虚拟机增加硬盘步骤4

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

                                      mount 设备名称挂载目录

                                      例如: mount /dev/sdb1 /newdisk

                                      umount 设备名称或者挂载目录

                                      例如: umount /dev/sdb1 或者umount /newdisk

                                      老师注意: 用命令行挂载,重启后会失效

                                      不能,只能挂载一个

                                      如果切换挂载 已经写入的文件位置仍然不变

                                      • 虚拟机增加硬盘步骤5

                                      永久挂载: 通过修改/etc/fstab 实现挂载
                                      添加完成后执行mount –a 即刻生效

                                      磁盘情况查询

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

                                      • 基本语法

                                      df -h

                                      • 应用实例

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

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

                                      • 基本语法

                                      du -h

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

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

                                      -h 带计量单位

                                      -a 含文件

                                      –max-depth=1 子目录深度

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

                                      • 应用实例

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

                                      磁盘情况-工作实用指令

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

                                      ls -l /opt | grep “^-” | wc -l

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

                                      ls -l /opt | grep “^d” | wc -l

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

                                      ls -lR /opt | grep “^-” | wc -l

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

                                      ls -lR /opt | grep “^d” | wc -l

                                      1. 以树状显示目录结构tree 目录, 注意,如果没有tree ,则使用yum install tree 安装

                                      11.网络配置

                                      NAT网络原理图

                                      网络配置指令

                                      查看网络IP 和网关

                                      • ip自动分配与指定ip

                                      • 查看网关

                                      • 查看windows 环境的中VMnet8 网络配置(ipconfig 指令)

                                      • 查看linux 的网络配置ifconfig

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

                                      • 基本语法

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

                                      • 应用实例

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

                                      网络配置实例

                                      linux 网络环境配置

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

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

                                       

                                      • 第二种方法(指定ip)

                                      说明:直接修改配置文件来指定IP,并可以连接到外网(程序员推荐)

                                      编辑vi /etc/sysconfig/network-scripts/ifcfg-ens33

                                      要求:将ip 地址配置的静态的,比如: ip 地址为192.168.200.130

                                      • ifcfg-ens33 文件说明

                                      DEVICE=eth0 #接口名(设备,网卡)

                                      HWADDR=00:0C:2x:6x:0x:xx #MAC 地址

                                      TYPE=Ethernet #网络类型(通常是Ethemet)

                                      UUID=926a57ba-92c6-4231-bacb-f27e5e6a9f44 #随机id

                                      #系统启动的时候网络接口是否有效(yes/no)

                                      ONBOOT=yes

                                      #IP 的配置方法[none|static|bootp|dhcp](引导时不使用协议|静态分配IP|BOOTP 协议|DHCP 协议)

                                      BOOTPROTO=static

                                      #IP 地址

                                      IPADDR=192.168.200.130

                                      #网关

                                      GATEWAY=192.168.200.2

                                      #域名解析器

                                      DNS1=192.168.200.2

                                      重启网络服务或者重启系统生效

                                      service network restart 、reboot

                                      主机名和hosts映射

                                      设置主机名

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

                                      指令hostname : 查看主机名

                                      修改文件在/etc/hostname 指定

                                      修改后,重启生效

                                       

                                      设置hosts 映射

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

                                      windows在C:\Windows\System32\drivers\etc\hosts 文件指定即可

                                      • win10无法修改host文件参考

                                      案例: 192.168.200.130 hspedu100

                                      1. 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 缓存

                                      1. 如果本地解析器缓存没有找到对应映射,检查系统中hosts 文件中有没有配置对应的域名IP 映射,如果有,则完成 解析并返回。
                                      2. 如果本地DNS 解析器缓存和hosts 文件中均没有找到对应的IP,则到域名服务DNS 进行解析域
                                      3. 示意图

                                      12.进程管理 *

                                      基本介绍

                                      1. 在LINUX 中,每个执行的程序都称为一个进程。每一个进程都分配一个ID 号(pid,进程号)。=>windows => linux
                                      2. 每个进程都可能以两种方式存在的。前台后台,所谓前台进程就是用户目前的屏幕上可以进行操作的。后台进程则是实际在操作,但由于屏幕上无法看到的进程,通常使用后台方式执行。
                                      3. 一般系统的服务都是以后台进程的方式存在,而且都会常驻在系统中。直到关机才才结束。
                                      4. 示意图

                                      显示系统执行的进程

                                      基本介绍

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

                                      ps显示的信息选项

                                      字段

                                      说明

                                      PID

                                      进程识别号

                                      TTY

                                      终端机号

                                      TIME

                                      此进程占用CPU时间

                                      CMD

                                      正在执行的命令或进程名

                                      ps -a:显示当前终端的所有进程信息

                                      ps -u:以用户的格式显示进程信息

                                      ps -x:显示后台进程运行的参数

                                      ps 详解

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

                                      父子进程

                                      应用实例

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

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

                                      终止进程kill 和killall

                                      介绍:

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

                                      基本语法

                                      kill [选项] 进程号(功能描述:通过进程号杀死/终止进程)

                                      killall 进程名称(功能描述:通过进程名称杀死进程,也支持通配符,这在系统因负载过大而变得很慢时很有用)

                                      常用选项

                                      -9 :表示强迫进程立即停止

                                      最佳实践

                                      案例1:踢掉某个非法登录用户

                                      kill 进程号, 比如kill 11421

                                      案例2: 终止远程登录服务sshd, 在适当时候再次重启sshd 服务

                                      0. kill sshd 对应的进程号; /bin/systemctl start sshd.service

                                      案例3: 终止多个gedit ,

                                      演示killall gedit

                                      案例4:强制杀掉一个终端,

                                      指令kill -9 bash 对应的进程号

                                      查看进程树

                                      • 基本语法

                                      pstree [选项] ,可以更加直观的来看进程信息

                                      • 常用选项

                                      -p :显示进程的PID

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

                                      • 应用实例:

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

                                      pstree -p

                                      案例2:请你树状的形式进程的用户

                                      pstree -u

                                      服务管理

                                      介绍:

                                       

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

                                      • service 管理指令

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

                                      在CentOS7.0 后很多服务不再使用 service ,而是 systemctl (后面专门讲)

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

                                      • service 管理指令案例

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

                                      指令:

                                      service network status

                                      service network stop

                                      service network start

                                      • 查看服务名:

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

                                      setup

                                      按tab会进入图形化界面的下面的菜单 ,利于退出

                                      方式2: /etc/init.d 看到service 指令管理的服务

                                      ls -l /etc/init.d

                                      服务的运行级别(runlevel):

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

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

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

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

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

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

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

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

                                      • 开机的流程说明:

                                      chkconfig 指令

                                      • 介绍
                                      1. 通过chkconfig 命令可以给服务的各个运行级别设置自启动/关闭
                                      2. chkconfig 指令管理的服务在/etc/init.d 查看
                                      3. 注意: Centos7.0 后,很多服务使用systemctl 管理(后面马上讲)
                                      • chkconfig 基本语法
                                        • 查看服务chkconfig --list [| grep xxx]
                                        • chkconfig 服务名–list
                                        • chkconfig --level 5 服务名on/off
                                      • 案例演示: 对network 服务进行各种操作, 把network 在3 运行级别,关闭自启动

                                      chkconfig --level 3 network off

                                      chkconfig --level 3 network on

                                      • 使用细节

                                      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 服务名(查询某个服务是否是自启动的)
                                      • 应用案例:

                                      查看当前防火墙的状况,关闭防火墙和重启防火墙。=> firewalld.service

                                      systemctl status firewalld; systemctl stop firewalld; systemctl start 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 , 不行
                                      2. 开放111 端口

                                      firewall-cmd --permanent --add-port=111/tcp ; 需要firewall-cmd --reload

                                      1. 再次关闭111 端口

                                      firewall-cmd --permanent --remove-port=111/tcp ; 需要firewall-cmd --reload

                                      动态监控

                                      介绍:

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

                                      • 基本语法

                                      top [选项]

                                      • 选项说明:

                                      交互操作说明

                                      应用实例

                                      案例1.监视特定用户, 比如我们监控tom 用户

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

                                      u:然后输入“u”回车,再输入用户名,即可,

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

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

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

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

                                      top -d 10

                                      监控网络情况

                                      查看系统网络情况netstat

                                      • 基本语法

                                      netstat [选项]

                                      • 选项说明

                                      -an 按一定顺序排列输出
                                      -p 显示哪个进程在调用

                                      • 应用案例

                                      请查看服务名为sshd 的服务的信息。
                                      netstat -anp | grep sshd

                                      检测主机连接命令ping:

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

                                      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 -qa | grep firefox

                                      rpm 包名基本格式

                                      一个rpm 包名:firefox-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

                                      细节讨论

                                      如果其它软件包依赖于您要卸载的软件包,卸载时则会产生错误信息。

                                      如: $ rpm -e foo

                                      removing these packages would break dependencies:foo is needed by bar-1.0-1

                                      如果我们就是要删除foo 这个rpm 包,可以增加参数–nodeps ,就可以强制删除,但是一般不推荐这样做,因为依赖于该软件包的程序可能无法运行

                                      如:$ rpm -e --nodeps foo

                                      安装rpm 包

                                      基本语法

                                      rpm -ivh RPM 包全路径名称

                                      参数说明

                                      i=install 安装
                                      v=verbose 提示
                                      h=hash 进度条

                                      应用实例

                                      演示卸载和安装firefox 浏览器
                                      rpm -e firefox
                                      rpm -ivh 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

                                      Java篇

                                      安装配置JDK1.8

                                      概述

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

                                      安装JDK

                                      安装步骤

                                      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=$JAVAHOME/bin:$PATH
                                      10. source /etc/profile [让新的环境变量生效]

                                       

                                      刷新系统环境变量

                                      测试是否安装成功

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

                                      tomcat 的安装

                                      步骤:

                                       

                                      1. 上传安装文件,并解压缩到/opt/tomcat
                                      2. 进入解压目录/bin , 启动tomcat ./startup.sh
                                      3. 开放端口8080 , 回顾firewall-cmd

                                      16.3.2 测试是否安装成功:

                                      在windows、Linux 下访问http://linuxip:8080

                                      idea2020 的安装

                                      步骤

                                      1. 下载地址: https://www.jetbrains.com/idea/download/#section=windows
                                      2. 解压缩到/opt/idea
                                      3. 启动idea bin 目录下./idea.sh,配置jdk
                                      4. 编写Hello world 程序并测试成功!

                                      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安装包

                                      PS:centos7.6自带的类mysql数据库是mariadb,会跟mysql冲突,要先删除。

                                      1. 运行tar -xvf mysql-5.7.26-1.el7.x86_64.rpm-bundle.tar
                                      2. 运行rpm -qa|grep mari,查询mariadb相关安装包

                                      1. 运行rpm -e --nodeps mariadb-libs,卸载
                                      2. 然后开始真正安装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

                                       

                                      1. 运行systemctl start mysqld.service,启动mysql
                                      2. 然后开始设置root用户密码

                                      Mysql自动给root用户设置随机密码,运行grep “password” /var/log/mysqld.log可看到当前密码

                                      1. 运行mysql -u root -p,用root用户登录,提示输入密码可用上述的,可以成功登陆进入mysql命令行
                                      2. 设置root密码,对于个人开发环境,如果要设比较简单的密码(生产环境服务器要设复杂密码),可以运行set global validate_password_policy=0; 提示密码设置策略(validate_password_policy默认值1,)

                                      1. set password for ‘root’@‘localhost’ =password(‘xxxxxx’);
                                      2. 运行flush privileges;使密码设置生效

                                      shell编程篇

                                      shell编程快速入门

                                      为什么要学习Shell 编程

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

                                      Shell 是什么

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

                                      Shell 脚本的执行方式

                                      脚本格式要求

                                      1. 脚本以#!/bin/bash 开头
                                      2. 脚本需要有可执行权限

                                      编写第一个Shell 脚本

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

                                      vim hello.sh

                                      #!/bin/bash

                                      echo “hello,world~”

                                      可以使用绝对也可以使用相对路径来执行这个脚本,前提是有可执行权限

                                      ./hello.sh 相对路径

                                      /root/shcode/hello.sh 绝对路径

                                      脚本的常用执行方式

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

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

                                      比如./hello.sh 或者使用绝对路径/root/shcode/hello.sh

                                      方式2(sh+脚本)

                                      说明:不用赋予脚本+x 权限,直接执行即可。

                                      比如sh hello.sh , 也可以使用绝对路径

                                      Shell 的变量

                                      Shell 变量介绍

                                       

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

                                      shell 变量的定义

                                      基本语法

                                      1. 定义变量:变量名=值

                                      中间不要空格

                                      1. 撤销变量:unset 变量
                                      2. 声明静态变量:readonly 变量,注意:不能unset
                                        快速入门
                                      3. 案例1:定义变量A
                                      4. 案例2:撤销变量A
                                      5. 案例3:声明静态的变量B=2,不能unset

                                      定义变量的规则

                                      1. 变量名称可以由字母、数字和下划线组成,但是不能以数字开头。5A=200(×)
                                      2. 等号两侧不能有空格
                                      3. 变量名称一般习惯为大写, 这是一个规范,我们遵守即可将命令的返回值赋给变量
                                      4. A=date反引号,运行里面的命令,并把结果返回给变量A
                                      5. A=$(date) 等价于反引号

                                      设置环境变量

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

                                      快速入门
                                      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 脚本中使用

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

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

                                      运算符

                                      基本介绍

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

                                      基本语法

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

                                      应用实例oper.sh

                                      案例1:计算(2+3)X4 的值

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

                                      条件判断

                                      判断语句

                                      基本语法 😢

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

                                      应用实例 🔕

                                       

                                      [ hspEdu ] 返回true

                                      [ ] 返回false

                                      [ condition ] && echo OK || echo notok 条件满足,执行后面的语句

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

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

                                      流程控制

                                      if 判断

                                      if [ 条件判断式]

                                      then 代码

                                      fi

                                      或者, 多分支

                                      if [ 条件判断式]

                                      then 代码

                                      elif [条件判断式]

                                      then 代码

                                      fi

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

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

                                      case语句

                                      基本语法

                                      case $变量名in
                                      “值1”)
                                      如果变量的值等于值1,则执行程序1
                                      ;;
                                      “值2”)
                                      如果变量的值等于值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" 部分

                                      basename /home/aaa/test.txt

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

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

                                      • 应用实例

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

                                      dirname /home/aaa/test.txt

                                      自定义函数

                                      • 基本语法
                                        [ function ] funname[()]
                                        {
                                        Action;
                                        [return int;]
                                        }
                                        调用直接写函数名:funname [值]
                                      • 应用实例
                                        案例1:计算输入两个参数的和(动态的获取), getSum

                                      Shell 编程综合案例

                                      需求分析

                                      1. 每天凌晨2:30 备份数据库hspedu 到/data/backup/db
                                      2. 备份开始和备份结束能够给出相应的提示信息
                                      3. 备份后的文件要求以备份时间为文件名,并打包成.tar.gz 的形式,比如:2021-03-12_230201.tar.gz
                                      4. 在备份的同时,检查是否有10 天前备份的数据库文件,如果有就将其删除。
                                      5. 画一个思路分析图

                                      Python篇

                                      Ubuntu

                                      介绍

                                      Ubuntu(友帮拓、优船图、乌班图)是一个以桌面应用为主的开源GNU/Linux操作系统,Ubuntu是基GNU/Linux,支持x86、amd64(即x64)和ppc架构,由全球化的专业纤发团队(Canonical Ltd)打造的。

                                      专业的Python开发者一般会选择Ubuntu这款Linux系统作为生产平台.

                                      温馨提示:

                                      Ubuntu 和 Centos 都是基于GNU/Linux内核的,因此基本使用和Centos是几乎一样的:它们的各种指令可以通用,同学们在学习和使用Ubuntu的过程中,会发现各种操作指令在前面学习CentOs都使用过。只是界面和预安装的软件有所差别。

                                       

                                      安装ubuntu 成功后,都是普通用户权限,并没有最高root 权限,如果需要使用root 权限的时候,通常都会在命令

                                      前面加上sudo 。有的时候感觉很麻烦。(演示)

                                      我们一般使用su 命令来直接切换到root 用户的,但是如果没有给root 设置初始密码,就会抛出su : Authentication

                                      failure 这样的问题。所以,我们只要给root 用户设置一个初始密码就好了。

                                      CentOS8.1/8.2的使用

                                      定制自己的linux系统

                                      Linux 内核源码介绍&内核升级

                                      为什么要阅读linux 内核?

                                       

                                      1. 爱好,就是喜欢linux(黑客精神)
                                      2. 想深入理解linux 底层运行机制,对操作系统有深入理解
                                      3. 阅读Linux 内核,你会对整个计算机体系有一个更深刻的认识。作为开发者,不管你从事的是驱动开发,应用开发还是后台开发,你都需要了解操作系统内核的运行机制,这样才能写出更好的代码。
                                      4. 作为开发人员不应该只局限在自己的领域,你设计的模块看起来小,但是你不了解进程的调用机制,你不知道进程为什么会阻塞、就绪、执行几个状态。那么很难写出优质的代码。
                                      5. 找工作面试的需要

                                      😏 老韩忠告,作为有追求的程序员,还是应该深入的了解一个操作系统的底层机制,(比如linux/unix) 最好是源码级别的,这样你写多线程高并发程序,包括架构,优化,算法等,高度不一样的,当然老韩也不是要求小伙伴儿把一个非常庞大的Linux 内核每一行都读懂。我觉得。你至少能看几个核心的模块。

                                      linux0.01 内核源码

                                      基本介绍

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

                                      内核地址:https://www.kernel.org/

                                      很多人害怕读Linux 内核,Linux 内核这样大而复杂的系统代码,阅读起来确实有很多困难,但是也不象想象的那么高不可攀。老韩建议可以从linux0.01 入手。

                                      linux0.01 内核源码目录&阅读

                                      老韩提示阅读内核源码技巧

                                      1. linux0.01 的阅读需要懂c 语言
                                      2. 阅读源码前,应知道Linux 内核源码的整体分布情况。现代的操作系统一般由进程管理、内存管理、文件系统、驱动程序和网络等组成。Linux 内核源码的各个目录大致与此相对应.
                                      3. 在阅读方法或顺序上,有纵向与横向之分。所谓纵向就是顺着程序的执行顺序逐步进行;所谓横向,就是按模块进行。它们经常结合在一起进行。
                                      4. 对于Linux 启动的代码可顺着Linux 的启动顺序一步步来阅读;对于像内存管理部分,可以单独拿出来进行阅读分析。实际上这是一个反复的过程,不可能读一遍就理解
                                      5. linux 内核源码阅读&目录介绍&main.c 说明
posted @ 2023-02-13 17:19  wuliOVO  阅读(488)  评论(0编辑  收藏  举报