linux 基础篇 通篇学习

Linux

最小化安装

1,开启网络 ifconfig 配置静态ip

2,yum vim

3,yum wget

4,yum net-tools

5,配置yum源

6,iptables

linux下开发项目

  • javaEE
  • 大数据
  • Python
  • PHP
  • C/C++
  • 免费开源,应用于服务器领域

一, Linux基础篇

  • liunx是免费的,开源的操作系统
  • Linux之父 Linus Torvalds
    • 同时也是Git的创始人
  • Liunx的主要发行版
    • Ubuntu(乌班图)
    • RedHat(红帽)
    • Debain(蝶变)
    • CentOS
    • Fedora
    • SuSE
    • OpenSUSE

Linux 和Unix的关系

  • unix 从贝尔实验室出来

  • 黑客发起GNU计划

  • 出现linux

  • 二次开发linux

  • 发展起来了

安装vm和CentOS

安装vmtools 安装open-vm-tools

  • vmtools安装后,可以更好的在windows下管理vm虚拟机
  • 可以设置windows和centos的共享文件夹
  • 虚拟机开机时就点击重新安装vmtools
  • 安装的步骤
    • 进入centos
    • 单击vm菜单-->install vmware tools
    • centos会出现一个vm的安装包 xx.tar.gz
    • 拷贝 /opt
    • 使用解压命令 得到一个安装文件
      • cd /opt
        • tar -zxvf VM tab键
      • cd vmware-tools-distrib/
    • 进入该vm解压的目录,/opt目录下
    • 安装 ./vmware-install.pl
    • 全部使用默认设置即可,安装成功
    • 注意: 安装时vmtools 需要有gcc
  • 共享文件位置
    • 在主文件
    • 其他位置
    • 计算机
    • mnt
    • hgfs

网络连接的三种方式 NAT

  • 第一种方式
    • 桥接模式
    • 虚拟系统可以和外界的系统相互通信,但是会造成ip冲突
  • 第二种方式 (使用这种方式)
    • NAT模式
    • 网络地址转换模式
    • 虚拟系统可以和外界通讯,并且不会造成ip冲突
    • 虚拟系统通过代理与外界通信
  • 第三种模式
    • 主机模式
    • 独立的系统

虚拟机克隆

  • 第一种方式

    • 直接拷贝一份安装好的虚拟机文件

      image-20220706105922148
  • 使用vmware克隆操作

    • 注意: 克隆时,需要先关闭linux系统
    • 直接点击 虚拟机的管理--->克隆

虚拟机快照

  • 使用虚拟机的时候,想回到原先的某个状态
  • vmware提供了功能
  • 快照管理

虚拟机迁移和删除

  • 虚拟系统安装好了,本质上就是文件(放在文件夹中)
  • 迁移
    • 将安装好的虚拟系统的这个文件夹拷贝或剪切到其他的位置
  • 删除
    • 用vmware移除
    • 点击菜单--->从磁盘中删除
    • 或者手动删除虚拟系统的文件

linux目录结构

  • 在linux世界里,一切皆为文件
  • 层级式的树状结构
    • 根目录
      • /

根目录 具体的目录结构

  • /bin

    • Binary的缩写 存放着常用的命令
    • /user/bin
    • /usr/local/bin
  • /sbin

    • Super User 的意思 系统管理员的系统管理程序
    • /usr/sbin
    • /usr/local/sbin
  • /home

    • 普通用户的主目录
  • /root

    • 系统管理员的主目录
  • /lib

    • 系统开机时需要最基本的动态连接共享库
  • /lost + found

    • 系统非法关机的时候存放的目录
  • /etc

    • 系统管理所需要配置文件和子目录
  • /usr

    • 用户的文件都存放在这个目录之中 类似与windows 的 program files
  • /boot

    • 存放的是linux启动相关的文件
  • /proc

    • 虚拟的目录 系统内存的映射 不用动
  • /srv

    • service的缩写 提供启动的数据
  • /sys

    • 系统文件 不用动
  • /dev

    • 类似与windows的设备管理
  • /media

    • liunx自动识别一些设备,当识别后,linux将识别的设备挂在某个目录下
  • /mnt

    • 让用户临时挂在其他系统的文件
  • /opt

    • 主机额外安装软件的所存在的目录
  • /user/local

    • 给另外一个主机额外安装软件的目录,一般是通过源码方式安装的程序
  • /var

    • 存放经常修改的目录
    • 包括各种日志文件
  • /selinux

    • 安全子系统,能控制程序只能访问特定文件
    • 有三种方式
    • 自己设置

远程登录

安装xshell

vi和vim

  • linux系统内置vi文本编辑器
  • vim是vi的增强版

三种模式

  • 正常模式
    • 默认模式
  • 插入模式
    • i I o O r R
    • 都可以
    • 可以进入
  • 命令行模式
    • 进入命令行模式
      • 按下esc按键
      • shift + :
    • 提供相关指令
      • wq
        • 保存
      • q!
        • 不保存

vi 和 vim的各种快捷键

  • 正常模式下

    • 拷贝当前行

      • yy
      • 拷贝当前行向下的5行并粘贴
        • 5yy(输入p)
    • 删除当前行

      • dd
      • 删除当前向下5行
      • 5dd
    • 定位到首行和尾行

      • 首行: gg
      • 尾行: G
    • 撤销动作

      • u
    • 快速定位到行数

      • 行号 shift + g
    • 搜索

      • /变量名
  • 命令模式下

    • 在文件中查找某个单词
      • : 或者 /
      • 关键字
      • 回车
      • 查找下一个 n
    • 设置文件的行号
      • set nu 显示行号
      • set nonu 隐藏行号

关机 重启 reboot

  • 指令

    • shutdown -h now 立刻关机

    • shutdown -h 1 一分钟后关机

    • shutdown -r now 立刻重启计算机

    • halt 关机

    • reboot

      • 现在重启计算机
    • sync 把内存的数据同步到硬盘上

    • 注意: 不管是关机还是重启 都要运行sync命令 把内存的数据写到磁盘中

      • 目前的重启,关机命令都是在关机前进行sync命令

二, Linux实操篇

用户管理

用户登录和注销 logout

  • 登录的时候,尽量不要用root账户

  • 普通用户切换到系统用户

    • su -用户名
  • 注销账户

    • logout
  • 细节

    • logout在图形界面没有效果
    • 在运行级别3下才有效

增删用户 useradd

  • 添加用户

    • useradd 用户名

      • 会自动创建同名的目录
      • 在/home中
      • useradd -d 指定目录 新的用户名 (自定义用户目录)
    • 添加密码

      • passwd 用户名
    • 显示密码

      • pwd
  • 删除用户

    • userdel zgw
      • 删除用户zgw 保留家目录
      • 推荐使用这个命令
    • userdel -r tom
      • 完全删除tom

查询用户 id

  • id 用户名

切换用户 su

  • su - 用户名 (用户名前面有空格)
  • 从高权限到低权限不用密码
  • who am i
    • 我是谁

用户组 group

  • 系统对有共性的多个用户进行统一的管理
  • 新增组
    • groupadd 组名
  • 删除组
    • groupdel 组名
  • 新增用户直接加组
    • useradd -g 用户组 用户名
  • 修改用户的组
    • usermod -g 用户组 用户名
  • 用户和组相关的文件
    • /etc/passwd 文件
      • 查看 vim /etc/passwd
      • 用户(user)的配置文件,记录用户的各种信息
      • 每行的含义:用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录shell
    • /etc/shadow 文件
      • 口令的配置文件
      • 每行的含义:登录名:加密口令:最后一次修改时间:最小时间间隔:最大时间间隔:警告时间:不活动时间:失效时间:标志
    • /etc/group 文件
      • 组(group)配置文件 记录linux组的文件
      • 每行的含义:组名:口令:组标识号:组内用户列表

运行级别 3 5

  • 介绍
    • 0 : 关机
    • 1 : 单用户[找回丢失密码]
    • 2 : 多用户状态没有网络服务
    • 3 : 多用户状态有网络服务 常用
    • 4 : 系统未使用保留给用户
    • 5 : 图形界面 常用
    • 6 : 系统重启
      • 可以指定运行级别
  • 切换
    • init 级别
  • 指令
    • 查看当前级别
      • systectl get-default
    • 设置运行级别
      • systectl set-default
    • 指定运行级别 3
    • analogous to runlevel 3
      • multi-user.target
    • 指定运行级别 5
    • analogous to runlevel 3
      • graphical.taget
    • 演示
      • 设置运行级别为5
        • systectl set-default graphical.taget

找回root密码

  • 开机界面输入 e

  • 找到Linux16开头的行数,在行最后输入:

    • init=/bin/sh
  • ctrl + x

    • 进入单用户模式
  • 输入命令

    • mount -o remount,rw /
  • 输入密码

    • passwd
  • 输入命令

    • touch /.autorelabel
  • 输入命令

    • exec /sbin/init
    • 等待以下
  • 系统自动重启

帮助命令 man

  • man

    • 获取帮助信息

    • 查看

      • man ls

      在linux下,隐藏文件以 . 开头

      ​ ls -a

  • help

    • 获取shell内置的命令信息
    • help 命令

其他指令

  • cal
    • 显示日历
  • wc
    • 统计数据
  • telnet
    • 测试端口
  • &&
    • 命令满足条件,执行后续的命令

快捷键

  • ctrl + d
    • 退出当前用户
  • tab
    • 字符补全
  • 上下键
    • 命令行快速调用之前的命令

文件目录类指令

一部分 touch

  • pwd 指令

    • 显示当前目录
  • ls 指令

    • 列举选项
      • ll 相当于 ls -l
      • 用来查询当前目录下文件及目录的详情
    • 常用选项
      • -a
        • 显示当前目录所有的文件和目录 包含隐藏的
      • -l
        • 以列表的形式显示
      • -h
        • 以容易理解的格式列出文件大小 (例如 1K 234M 2G)
  • cd 指令

    • 切换到指定目录
    • cd ~ 或 cd :
      • 回到家目录
    • cd ..
      • 回到当前目录的上级目录
    • cd ../../root
      • 使用相对路径回到/root目录
  • mkdir 指令

    • 创建目录
    • 语法
      • mkdir 要创建的目录
      • mkdir -p 多级目录
  • rmdir 指令

    • 删除空目录
    • 语法
      • rmdir 目录
    • 删除非空目录
      • rm -rf 删除的目录
  • touch 指令

    • 创建空文件
    • 语法
      • touch 文件名称
  • cp 指令

    • 拷贝文件到指定目录

    • 语法

      • cp 选项 source 目标目录
    • 常用选项

      • -r

        • cp -r 要拷贝的目录 目标目录
        • 递归复制整个文件夹
      • \cp

        • 强制不覆盖的方法

二部分 more

  • rm 指令
    • 移除文件或目录
    • 语法
      • rm 选项 要删除的文件或目录
    • 常用选项
      • -r :递归删除整个文件夹
      • -f : 强制删除不提示
      • -rf: 删除非空目录
  • mv 指令
    • 移动文件与目录或重命名
    • 语法
      • mv oldNameFile newNameFile 重命名 同级目录下
      • mv /temp/movefile /targetFolder 移动文件
      • mv oldNameFile /targetFolder/newNameFile 移动文件并重命名
  • cat 指令
    • 查看文件内容
    • 语法
      • cat 选项 要查看的文件
      • 常用选项
        • -n 显示行号
    • 注意:cat只能浏览文件
  • more 指令
    • 基于VI编辑器的文本过滤器
    • 以全屏的方式按页显示文本文件的内容
    • 语法
      • more 要查看的文件
    • 快捷键
      • 空格键
        • 向下翻一页
      • enter
        • 向下翻一行
      • q
        • 立刻离开more 不再显示文本内容
      • ctrl + f
        • 向下滚动一屏
      • ctrl + B
        • 返回上一屏
      • =
        • 输出当前行号 控制台
      • :f
        • 输出文件名和当前行号

三部分 echo

  • less 指令

    • 分屏查看文件内容
    • 和more 类似
    • 比more功能强大
    • 语法
      • less 要查看的文件
    • 快捷键
      • 空格
        • 向下翻动一页
      • pagedown
        • 向下翻动一页
      • pageup
        • 向上翻动一页
      • /字串
        • 向下搜寻[字串]的功能
          • n: 向下查找
          • N:向上查找
      • ?字串
        • 向上搜寻[字串]的功能
          • n: 向上查找
          • N:向下查找
      • q
        • 立刻离开less不再显示文本内容
  • echo 指令

    • 输出内容到控制台
    • 语法
      • echo 选项 输出的内容
    • 演示
      • echo $PATH
      • /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
  • head 指令

    • 显示文件的开头部分内容
    • 默认前10行内容
    • 语法
      • head 文件
      • head -n 5 文件
        • 查看文件头5行内容 5是任意行数
  • tail 指令

    • 显示文件的尾部部分内容
    • 默认前10行内容
    • 语法
      • tail 文件
      • tail -n 5 文件
        • 查看文件头5行内容 5是任意行数
      • tail -f 文件
        • 实时追踪该文档的所有更新
  • '> 指令 和 '>> 指令 不带''typora不允许直接箭头

    • '> 输出重定向
    • '>> 追加
      • 语法
        • ls -l > 文件
          • 列表的内容写入文件中(覆盖写)
        • ls -al >> 文件
          • 列表的内容追加到文件的末尾
        • cat 文件1 > 文件2
          • 将文件1的内容覆盖文件2
        • echo "内容" >> 文件1
          • 将输出的内容 追加到文件1中
  • ln 指令

    • 软链接也称为符号连接
    • 存放其他链接文件的路径
    • 类似于windows 的 快捷方式
    • 语法
      • ln -s [原文件或目录] [软链接名]
        • 给原文件创建一个软链接
      • 注意:当我们使用pwd查看目录时,仍然看到的是软链接所在的目录
  • history 指令

    • 查看已经执行过的历史指令
    • 语法
      • history
        • 查看全部
      • history 条数

事件日期类指令 date

  • date 指令
    • 显示当前日期
    • 语法
      • date
        • 显示当前日期
      • date +%Y
        • 显示当前年份
      • date +%m
        • 显示当前月份
      • date +%d
        • 显示当前是哪一天
      • date "+%Y-%m-%d %H:%M:%S"
        • 显示时分秒
          • 2022-07-06 19:29:53
  • date-设置日期 指令
    • 语法
      • date -s 字符串时间
      • date -s "2022-07-06 19:29:53"
  • cal 指令
    • 查看日历指令
    • 语法
      • cal 选项
      • cal 2020
        • 显示2020的日历

搜索查找类指令 grep

  • find 指令
    • 从指定目录向下递归遍历其各个子目录,将满足条件的文件或者目录显示在终端
    • 语法
      • find 搜索的范围 选项
      • 选项
        • -name<查询方式>
        • -user<用户名>
        • -size<文件大小>
        • -atime n : 在过去 n 天内被读取过的文件
      • 实例
        • find /home -name hello.txt
  • locate 指令
    • 快速定位文件路径
    • 会自己创建数据库
    • 语法
      • locate 搜索文件
    • 说明
      • locate指令基于数据库进行查询时,第一次运行前,必须使用updatedb指令创建locate数据库
      • updatedb
      • locate Hello.txt
  • which 指令
    • 查看某个指令在某个目录
    • which ls
  • grep 指令 和管道符号 |
    • grep 过滤查找
    • 管道符号 |
    • 表示将前一个命令的处理结果输出传递到后面的命令处理
    • 语法
      • grep 选项 查找内容 源文件
      • 常用选项
        • -n 显示匹配行和行号
        • -i 忽略大小写
      • 实例
        • cat a.txt | grep -i "hello"
    • grep -v grep
      • 反向匹配,过滤掉grep这个进程

压缩解压类指令 tar

  • gzip/gunzip 指令
    • gzip 压缩文件
    • gunzip 解压文件
    • 语法
      • gzip 文件
        • 只能将文件压缩成*.gz文件
      • gunzip 文件.gz
        • 解压缩文件
  • zip/unzip 指令
    • 解压和压缩
    • 语法
      • zip 选项 xxx.zip
      • unzip 选项 xxx.zip
    • 选项
      • zip选项
        • -r
          • 递归压缩,压缩目录
          • 实例
            • zip -r myhome.zip /home/ 将home目录及其子文件都压缩
      • unzip选项
        • -d<目录>
          • 指定解压后文件的存放目录
          • 实例
            • unzip -d /home myhome.zip 解压文件
  • tar 指令
    • 打包指令
    • 最后打包的文件是 .tar.gz 文件
  • 语法
    • tar 选项 xx.tar.gz 打包的内容
  • 选项
    • -c 产生.tar的打包文件
    • -v 显示详细信息
    • -f 指定压缩后的文件名
    • -z 打包同时压缩
    • -x 解包.tar文件
    • -zxvf 组合使用解压
    • -zcvf 组合使用打包
  • 实例
    • tar -zxvf pc.tar.gz /home/pig.txt

组管理

  • 在linux中,每个用户都属于一个组
    • 没有设置的用户默认生成同名的组
  • 组的创建
    • groupadd 组名
  • 实例
    • 创建一个组,monster
      • groupadd monster
    • 创建一个用户fox ,放到组中
      • useradd -g monster fox

文件/目录

  • 颜色含义

    • 绿色文件-可执行文件

    • 红色文件-压缩文件或者包文件

    • 蓝色文件-目录

    • 白色文件-普通,如文本文件,配置文件,源码文件等

    • 浅蓝色文件-链接文件,主要是使用ln命令建立的文件

    • 红色闪烁-表示链接的文件有问题

    • 黄色文件-表示设备文件

    • 灰色文件-表示其它文件

所有者

  • 查看文件的所有者
    • ls -ahl
  • 修改文件的所有者
    • chown 用户名 文件名 (change own 的缩写)
    • 实例
      • chown tom cat.txt 修改cat.txt文件的所有者为tom

所在组

  • 查看文件/目录所在的组
    • ls -ahl
  • 修改文件所在的组
    • chgrp 组名 文件名
  • 实例
    • 使用fox创建一个文件,看看该文件属于哪个组
    • -rw-r--r--. 1 fox monster 0 7月 7 10:03 ok.txt

其他组

  • 改变用户的所在组
    • usermod -g 组名 用户名
    • usermod -d 目录 用户名 改变该用户登录的初始目录
      • 注意:用户有进入到新建目录的权限

权限管理

  • 举例

    • dr-xr-x---. 15 root root 4096 7月 7 10:08 root

      • 前面10个,为0-9位

        • 第0位 确定文件的类型(d - l c b)

          • " - : 普通文件

          • l : 链接 相当于windows的快捷方式

          • d : 目录 相当于windows的文件夹

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

          • b : 块设备 比如永攀

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

        • 第4-6位 确定所属组拥有该文件的权限 ---Group

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

      • 15

        • 文件 : 硬连接数
        • 目录 : 子目录数
      • root

        • 用户
      • root

      • 4096

        • 文件大小(字节)
        • 如果是文件夹 显示 4096
      • 7月 7 10:08

        • 最后修改的日期
      • root

        • 文件名

rwx作用到文件

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

rwx作用到目录

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

权限入门 chmod

  • chmod 修改权限
    • 修改文件或者目录的权限
    • 第一种方式 + - = 变更权限
      • u : 所有者
      • g : 所有组
      • o : 其他组
      • a : 所有人(u g o 的总和)
      • 举例
        • chmod u=rwx,g=rx,o=x 文件/目录
        • 赋予权限
        • chmod o+w 文件或者目录
        • 增加权限
        • chmod a-x 文件或者目录
          • 减少权限
    • 第二种方式 数字变更权限
      • r=4
      • w=2
      • x=1
      • rwx=4+2+1=7
      • chmod u=rwx,g=rx,o=x 文件目录名
        • 相当于chmod 751 文件目录名

修改文件所有者-chowm

  • 改变所有者

    • chown newowmer 文件/目录
  • 改变所有者和所在组

    • chown newowner:newgroup 文件/目录
  • 选项

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

修改文件/目录所在组 chgrp

  • 改变所在组
    • chgrp newgroup 文件/目录
  • 选项
    • -R
      • 如果是目录,则是旗下所有子文件或目录递归生效

警察和土匪

  • police

    • jack jerry
  • bandit

    • xh xq
  • 实现步骤

    • 1,创建组
    • 2,创建用户
    • 3,jack 创建一个文件 ,自己可以读写 本组人可以读 其他组没人有权限
    • 4,jack 修改文件,让其他人可以读 本组人可以读写
    • 5,xh 投靠警察,看看是否可以读写
  • 代码

    [root@java01 /]# groupadd police;groupadd bandit
    [root@java01 /]# useradd -g police jack;useradd -g police jerry
    [root@java01 /]# useradd -g bandit xh;useradd -g bandit xq;
    [root@java01 ~]# passwd jack
    
    [jack@java01 ~]$ vim jack.txt
    [jack@java01 ~]$ cat jack.txt
    [jack@java01 ~]$ chmod 640 jack.txt
    [jack@java01 ~]$ chmod 644 jack.txt
    [jack@java01 home]$ chmod 770 jack       //让xh有进入jack的权限
    [jack@java01 ~]$ chmod g+w jack.txt      //让xh有写jack.txt的权限
    
    [root@java01 ~]# usermod -g police xh
    
    

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

r : 表示可以ls,将目录显示出来

w : 表示可以在该目录,删除或者增加文件

定时调度

  • croud 任务调度
    • 第一种 : 执行shell脚本
    • 第二种: 直接写代码
      • 相关指令
        • sevice crond restart 重启任务调度

定时任务 crontab

  • 进行定时任务的设置

  • 概述

    • 任务调度: 系统在某个时间执行的特定的命令或者程序
    • 任务调度分类:
      • 1,系统工作: 有些重要的工作必须周而复始的执行 如:病毒扫描
      • 2,个别用户工作: 个别用户可能希望执行某些程序,比如对mysql数据库的备份
  • 语法

    • crontab 选项
  • 选项

    • -e 编辑crontab定时任务
    • -l 查询crontab任务
    • -r 删除当前用户所有的crontab任务
  • 特殊符号

​ / ***** 代表任何时间

​ */1 * * * * 每分钟执行一次

​ / , 代表不连续的时间

​ 0 8,12,16 * * * 每天的8点0分,12点0分,16点0分 执行一次命令

​ / - 代表连续的时间范围

​ 0 5 * *1-6 周一到周六的凌晨5点0分执行命令

​ / */n 代表每隔多久执行一次

​ */10 * * * * 代表每隔10分钟执行一次命令

快速入门

  • 设置任务调度的文件位置

    • /etc/crontab
  • 设置个人任务调度

    • crontab -e 命令 直接执行这个命令
  • 输入任务到调度文件

    • 如: */1 * * * * ls -l /etc/ > /tmp/to/txt
    • 每小时的每分钟执行ls -l /etc/ > /tmp/to.txt命令
  • 参数说明

    • 第一个 * : 一个小时的第几分钟 0-59

    • 第二个 * : 一天当中的第几小时 0-23

    • 第三个 * : 一个月中的第几天 1-31

    • 第四个 * : 一年中的第几个月 1-12

    • 第五个 * : 一周的第几个星期 0-7(0和7 都代表着星期日)

一次性定时任务 at

  • 介绍

    • 1,at命令是一次性的定时计划,at的守护进程atd会进入后台模式运行,检查作业队列来运行
    • 2,默认情况下,atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果事件与当前时间匹配,则运行此作业
    • 3,at命令是一次性定时计划任务,执行完一个任务后不再执行任务了
    • 4,在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看
      • ps -ef 所有的进程
        • ps -ef | grep atd 搜索atd进程
    • atq
      • 查看系统中没有执行的工作任务
    • atrm 编号
      • 删除已经设置的任务
      • atrm 4 表示将工作队列为4的编号定时任务删除
  • at 命令格式

    • at 选项 时间
    • Ctrl + D 结束at的输入 两次
  • 选项

    • -m 当指定的任务完成之后,将给用户发送邮件,即使没有标准输出

    • -I atq的别名

    • -d atrm 的别名

    • -v 显示任务将被执行的时间

    • -c 打印任务的内容到标准输出

    • -V 显示版本信息

    • -q<队列> 使用指定的队列

    • -f<文件> 从指定的文件读入任务而不是从标准输入读入

    • -t<时间参数> 以时间参数的形式提交要运行的任务

  • at 时间的定义

    • 1,接受当天的hh:mm式的时间指定
    • 2,使用midnight(深夜),noon(中午),teatime(下午4点)
    • 3,采用12小时计时制,在时间的后面加入AM(上午),PM(下午)
    • 4,指定命令执行的具体时间,
      • dd.mm.yy
      • mm/dd/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,两天后下午5点

      • at 5pm + 2 days
      2,明天17点钟,输出时间到指定文件内  /root/date100.log
      at 5pm tomorrow
      at> date > /root/date100.log
      atq
      
      3,删除已经设置的任务
      atrm 编号
      atrm 5
      

磁盘管理

  • ext4
    • EXT4是第四代扩展文件系统(英语:Fourth extended filesystem,缩写为 ext4)是Linux系统下的日志文件系统,是ext3文件系统的后继版本
  • swap
    • Swap分区在系统的物理内存不够用的时候,把硬盘内存中的一部分空间释放出来,以供当前运行的程序使用。那些被释放的空间可能来自一些很长时间没有什么操作的程序,这些被释放的空间被临时保存到Swap分区中,等到那些程序要运行时,再从Swap分区中恢复保存的数据到内存中
  • mount
    • mount是Linux下的一个命令,它可以将分区挂接到Linux的一个文件夹下,从而将分区和该目录联系起来,因此我们只要访问这个文件夹,就相当于访问该分区了。 mount已经不仅仅局限于Linux了。在Windows系统下的应用也越来越广了,多用在虚拟光驱类软件上,比如[Clone CD](https://baike.baidu.com/item/Clone CD/3169425),Daemon tool,WinMount等。
    • 命令
      • mount 设备名称 挂载目录 挂载
        • 演示
          • mount /dev/sdb1 /newdisk
      • unmount 设备名称 或者 挂载目录 卸载
        • unmount /dev/sdb1 或者 unmount /newdisk

linux分区 SCSI

  • linux只有一个根目录

    • 一个独立且唯一的文件结构
  • linux采用[载入]的处理方法

    • 整个文件系统包含一整套的文件和目录,且将一个分区和一个目录联系起来

      这时要载入的一个分区将使它的存储空间在一个目录获得

  • 硬盘说明

    • linux硬盘分IDE硬盘和SCSI硬盘 死噶死

      • 目前基本上是SCSI硬盘
    • 对于IDE硬盘,驱动器标识符为"hdx~"

      • "hd"表明分区所在的设备类型

      • "x"为盘号

        • a为基本盘
        • b为基本从属盘
        • c为辅助主盘
        • d为辅助从属盘
      • "~"代表分区

        • 前四个分区用数字1到4表示 是主分区或扩展分区
        • 从5开始是逻辑分区
      • 演示

        • hda3
          • 第一个IDE硬盘上的第三个主分区或者扩展分区
        • hdb2
          • 第二个IDE硬盘上的第二个主分区或者扩展分区
    • 对于SCSI硬盘标识为"sdx~"

      • sd是SCSI硬盘

      • 其他和以上一样

  • 查看所有设备的挂载情况

    • 命令
      • lsblk
        • image-20220707160934414
      • lsblk -f
      • image-20220707161124517

linux挂载 mount

  • 演示
    • 1,在虚拟机上新增一个SCSI硬盘 ,重启系统
    • 2,分区命令
      • fdisk /dev/硬盘名称(sdb)
      • m 显示命令列表
      • p 显示磁盘分区 同fdisk -f
      • n 新增分区
        • 扩展内容: d 删除分区
      • 1 一个分区
      • w 写入
    • 3,格式化磁盘 UUID
      • mkfs -t ext4 /dev/硬盘名称(sdb1)
    • 4,新建目录并挂载
      • mkdir newdisk
      • mount /dev/sdb1 /newdisk
      • 用命令挂载,只是临时生效
    • 5,永久挂载
      • 修改etc/fstab实现挂载
        • /dev/sdb1 /newdisk 00 简化
      • mount -a 立刻生效

磁盘情况查询 df

  • 查询磁盘整体使用情况

    • 语法
      • df -h
      • image-20220707164222813
  • 查询指定目录占用的磁盘情况

    • 语法
      • du -h /目录
    • 选项
      • -s 指定目录占用大小汇总
      • -h 带计量单位
      • -a 含有文件
      • -c 列出明细的同时,增加汇总值
      • --max-depth=1 子目录深度
      • image-20220707164719333

磁盘情况-工作实用指令

  • 1,统计/opt文件夹的个数

    • ls -l /opt |grep "^-" |wc -l

      • "^-" 正则表达式 只要以 - 开头的
      • wc 统计数据
      image-20220707165229736
  • 2,统计opt文件夹下的目录的个数

    • ls -l /opt |grep "^d" |wc -l

    • d 只要以 d 开头的

      image-20220707165510059
  • 3,统计opt文件夹下文件的个数,包含子文件夹里的

    • ls -lR /opt |grep "^-" |wc -l

    • R 如果是目录,则递归

      image-20220707165810430
  • 4,统计opt文件夹下目录的个数,包含子文件夹里的

    • ls -lR /opt |grep "^d" |wc -l

      image-20220707165906906
  • 5,以树状显示目录结构

    • 如果没有tree ,则使用yum install tree 安装

      image-20220707170731033

网络管理

  • 配置网络

ifconfig

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

    • ipconfig
      • 查看windows环境下的vmnet8的网络设置
    • ifconfig
      • 查看windows环境下的vmnet8的网络设置
  • ping 指令

    • ping 目的主机
      • ping 192.168.169.129
      • 测试当前服务器是否可以连接目的主机
      • ctrl + c
        • 终止
  • ip设置

    • 第一种方式:

      • 自动获取
      • 登录时自动获取ip
      • 每次自动获取的ip可能不一样
    • 第二种方式:

      • 指定ip
        • 直接修改配置文件指定ip ,并可以连接到外网
        • vi /etc/sysconfig/network-scripts/ifcfg-ens33
          • 将ip地址配置为静态的
            • ONBOOT=yes
              BOOTPROTO=static

              ip地址

              IPADDR=192.168.200.130

              网关

              GATEWAY=192.200.169.2

              域名解析器

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

主机和hosts映射 hostname

  • 设置主机名

    • 方便记忆

      • 查看主机名
        • hostname
    • 修改主机名

      • 修改文件在etc/hostname 指定
      • 修改后,重启立即成效
        • [root@java01 ~]# vim etc/hostname
          [root@java01 ~]# vim /etc/hostname
          [root@java01 ~]# hostname
  • 设置hosts映射

    • windows中

      • C:\Windows\System32\drivers\etc\hosts 文件指定即可
      • 主机名 gangwan-zhang
    • linux中

      • 在/etc/hosts 文件指定

        • [root@java ~]# vim /etc/hosts
          [root@java ~]# ping gangwan-zhang

          image-20220707184618553
  • hosts

    • 文本文件,记录ip和hostname的映射关系
  • DNS

    • DNS Domain Name System的缩写 域名系统

    • 互联网上作为域名和ip地址相互映射的一个分布式数据库

    • ipcofig/displaydns //显示dns域名解析缓存

    • ipconfig/flushdns //手动清理dns缓存

进程管理 (重要)

  • 在linux中,每一个执行的程序都称为一个进程,每一个进程都分配一个id号(pid,进程号)
  • 每一个进程都可能以两种方式存在,前台和后台
    • 前台
      • 用户目前的屏幕上可以进行操作的
    • 后台
      • 后台在操作
  • 一般系统的服务都是以后台进程的方式存在的,而且都会常驻在系统中,直到关机才结束

显示系统执行的进程 ps

  • ps 命令用来查看目前系统中的进程

  • 选项

    • -a 显示当前终端的所有进程信息
    • -u 以用户的格式显示进程信息
    • -x 显示后台进程运行的参数
  • ps 显示的信息选项

    • PID 进程识别号
    • TTY 终端机号
    • TIME 此进程所消耗的CPU时间
    • CMD 正在执行的命令或进程名
  • 演示

    • ps -aux | more
  • 演示

    • 以全格式显示当前所有的进程 ,查看sshd 的父进程 PPID 父进程的id

      • -e 显示所有的进程

      • -f 全格式

      • ps -ef | grep sshd

        image-20220707191846936

终止进程 kill 和 killall

  • 终止进程
    • kill 选项 进程号
    • killall 进程名称 所有的子进程同时被杀死 ( 支持通配符)
  • 选项
    • -9 强制进程立即停止
  • 重启服务
    • /bin/systemctl start 服务
      • /bin/systemctl start sshd.service

查看进程树 pstree

  • pstree 选项
  • 选项
    • -p 显示进程的PID
    • -u 显示进程的所属用户
  • 演示
    • pstree -pu

动态监控进程 top

  • top 指令

    • 与ps相似,显示正在执行的进程
    • top在执行一段时间可以更新正在运行的进程
  • 语法

    • top 选项
  • 选项

    • -d 秒数 每个秒数更新进程 默认3秒

    • -i 使top不显示任何闲置或者僵死的进程

    • -p 通过指定监控进程ID来仅仅监控某个进程的状态

      image-20220708074403856
  • 交互操作说明

    • p 以cpu使用率排名 默认是此项
    • M 以内存的使用率排名
    • N 以pid排序
    • q 退出top
  • 演示

    • 监控用户的进程
      • top 回车
      • u 用户名
    • 终止指定的进程
      • top
      • k 进程id号

监控网络状态 netstat

  • 查看系统网络请情况netstat

  • 语法

    • netstat 选项
  • 选项

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

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

  • 演示

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

      • netstat -anp |grep sshd

        image-20220708081428583

服务管理

  • 服务本质上就是进程

    • 运行在后台
    • 监听某个端口
    • 又称为守护进程
  • 指令

    • service 服务名称 |stop |restart | reload |status
  • 查看服务位置

    • /etc/init.d
  • 查看所有的系统服务

    • setup
    • 系统服务
      • ' * ' 随着linux自动启动

服务的运行级别 systectl

  • 常用的3和5
    • 3 : 多用户状态有网络服务 常用
    • 5 : 图形界面 常用
  • 开机的流程
    • 开机
    • BIOS
    • /boot
    • system进程1
    • 运行级别
    • 运行级别对应的服务

chkconfig

  • 给服务的各个运行级别设置自启动/关闭
  • 语法
    • 查看服务
      • chkconfig --list
        • 过滤某个服务
        • chkconfig --list [|grep xxx]
    • chkconfig 服务名 --list 也可以
    • chkconfig --level 5 服务名 on/off
  • 注意:
    • chkconfig重新设置服务自启动或关闭,需要重启reboot才生效

systemctl (重要)

  • 语法

    • systemctl [start | stop |restart | status] 服务名
  • 位置

    • /usr/lib/systemd/system
  • 查看当前服务的名称

    • ls -l /usr/lib/systemd/system |grep fire

      • -rw-r--r--. 1 root root 657 10月 1 2020 firewalld.service
  • systemctl设置服务的自启动状态

    • 查看服务的启动状态
      • systemctl list-unit-files
        • 查看防火墙
          • systemctl list-unit-files | grep firewalld
          • firewalld.service enabled
    • 设置服务开机启动
      • systemctl enable 服务名
    • 关闭服务开机启动
      • systemctl disable 服务名
    • 查询某个服务是否是自启动的
      • systemctl is-enabled 服务名
        • 查看sshd是否自启动
          • [root@java ~]# systemctl is-enabled sshd
            enabled
  • 注意

    • 1,关闭或者启动防火墙,立即生效
    • 2,systemctl [start | stop |restart | status] 服务名
      • 这种方式只是临时生效,重启系统后,还是回归到之前的设置
    • 3,如果希望设置某个服务永久生效,使用systemctl [enable | disable] 服务名

打开或关闭指定端口 firewall

  • firewall 指令

    • 打开端口
      • firewall-cmd --permanent --add-port=端口号/协议
        • 如: 8080/tcp
    • 关闭端口
      • firewall-cmd --permanent --remove-port=端口号/协议
    • 重新加载才能生效
      • firewall-cmd --reload
    • 查询端口是否开放
      • firewall-cmd --query-port=端口/协议
        • 查询111端口
          • [root@java ~]# firewall-cmd --query-port=111/tcp
            no
  • #更新防火墙
    [root@java webmin]# firewall-cmd --reload
    success
    #查看端口号
    [root@java webmin]# firewall-cmd --zone=public --list-ports
    8080/tcp  10001/tcp
    

软件包管理

  • rpm 和 yum

rpm包的管理 rpm

  • 简介
    • rpm用于互联网下载包的打包和安装工具,它包含在某些linux分发版中
    • 生成具有.RPM扩展名的文件
    • 是RedHat Package Manager(RedHat软件包的管理工具)的缩写

rpm包名格式

  • firefox-68.10.0-1.el7.centos.x86_64

    • 名称 firefox
    • 版本号 68.10.0-1
    • 操作系统 el7.centos.x86_64
  • rpm包的简单查询指令

    • 查询已安装的rpm列表
      • rpm -qa | grep xx
        • 查看firefox
        • [root@java ~]# rpm -qa | grep firefox
          firefox-68.10.0-1.el7.centos.x86_64
  • 其他查询指令

    • rpm -qa

      • 查询所安装的所有rpm包
    • rpm -q 软件包名

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

      • 查询软件信息
    • rpm -qf 文件全路径名

      • 查询文件所属的软件包

        • rpm -qf /etc/passwd

          image-20220708093520509
  • 安装rpm包

    • 语法
      • rpm -ivh rpm包的全路径名称
      • i 安装 install
      • v 提示 verbose
      • h 进度条 hash
    • 演示
      • 演示安装firefox
        • rpm -ivh /opt/firefox-68.10.0-1.el7.centos.x86_64
  • 卸载rpm包

    • 语法

      • rpm -e rpm包的名称
    • 注意

      • 如果其他软件包依赖与要删除的软件包,则提示错误信息
      • 添加 --nodeps
        • rpm -e --nodeps firefox
    • 演示

      • 演示卸载firefox
        • rpm -e firefox

yum包的管理 yum

  • 简介

    • yum是一个shell前端软件包的管理器 基于rpm包管理

    • 能够从指定的服务器自动下载rpm包并且安装

    • 可以自动处理rpm包的依赖性关系,并且一次性安装所有依赖的软件包

  • yum简单的查询指令

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

      • yum list | grep xx软件列表

        image-20220708095854845
  • 安装指定的yum包

    • 下载安装
      • yum install xx
  • 扩展

    • 检测内核版本

      • yum info kernel -q
    • 查看当前内核的版本

      • uname -a
    • 升级内核

      • yum update kernel
    • 查看已经安装的内核

      • yum list kernel -q

三, javaEE定制篇

如果需要进行javaEE开发,需要安装如下的软件

安装JDK

  • 安装步骤

    • 1 , mkdir /opt/jdk

    • 2 , 通过xftp6 上传到/opt/jdk下

    • 3 , cd /opt/jdk

    • 4 , 解压 tar -zxvf jdk1.8.0_33

    • 5 , mkdir /usr/local/java

    • 6 , mv /opt/jdk/jdk1.8.0_333 /usr/local/java

    • 7 , 配置环境变量的配置文件

      • vim /etc/profile
    • 8 , export JAVA_HOME=/usr/local/java/jdk1.8.0_33

    • 9 , export PATH=$JAVA_HOME/bin:$PATH

      • $PATH 表示追加原来的path
    • 10 , 让文件生效

      • source /etc/profile
    • 测试

      • 编写hello.java

        • 输出hello.world
        image-20220708104328523

安装tomcat

  • 步骤

    • 1 , mkdir /opt/tomcat
    • 2 , 通过xftp6 上传到/opt/tomcat下
    • 3 , cd /opt/tomcat
    • 4 , 解压 tar -zxvf tomcat9.0.64
    • 5 , mkdir /usr/local/tomcat
    • 6 , mv /opt/jdk/tomcat9.0.64 /usr/local/tomcat
    • 2,进入解压目录/bin,启动tomcat ./startup.sh
    • 3,开放端口8080
      • firewall-cmd --permanent --add-port=8080/tcp

    测试

    • 在linux下访问http://linuxip:8080

安装idea

  • 下载idea

  • 步骤

    • 1 , mkdir /opt/idea
    • 2 , 通过xftp6 上传到/opt/idea下
    • 3 , cd /opt/idea
    • 4 , 解压 tar -zxvf idea
    • 2,进入解压目录/bin,启动idea-IU-221.5921.22 ./idea.sh

    测试

    • hello.java

安装mysql

注意:centos7会自带的类,mysql数据库是mariadb ,会和mysql冲突,要先删除

  • 步骤

    • 1 , mkdir /opt/mysql

    • 2 , 通过xftp6 上传到/opt/mysql下

      • mysql-8.0.29-1.el7.x86_64.rpm-bundle.tar
    • 3 , cd /opt/mysql

    • 4 , 解压tar -xvf mysql-8.0.29-1.el7.x86_64.rpm-bundle.tar

    • 5 , 运行rpm -qa | grep mariadb 查询mariadb相关包

      image-20220708125342756

      • 卸载
        • rpm -e --nodeps mariadb-libs
        • rpm -e --nodeps marisa
    • 6 , 正式安装

      • rpm -ivh mysql-community-common-8.0.29-1.el7.x86_64.rpm

      • rpm -ivh mysql-community-client-plugins-8.0.29-1.el7.x86_64.rpm

      • rpm -ivh mysql-community-libs-8.0.29-1.el7.x86_64.rpm

      • rpm -ivh mysql-community-client-8.0.29-1.el7.x86_64.rpm

      • rpm -ivh mysql-community-icu-data-files-8.0.29-1.el7.x86_64.rpm

      • rpm -ivh mysql-community-server-8.0.29-1.el7.x86_64.rpm

    • 7 , 运行systemctl start mysqld.service 启动musql

    • 8 , 设置root用户密码

      • mysql会自动设置随机密码
        • 查看随机密码
          • grep 'password' /var/log/mysqld.log
            • PnAphslVy9.W 这是密码
    • 9 , 运行mysql -u root -p

      • 用root登录
    • 10 , 设置root密码

      • 查看密码策略

        • SHOW VARIABLES LIKE 'validate_password%';

          image-20220708133633065
      • 生产环境设置复杂的密码

        • alter user user() identified by 'Zzhang123@'
        • set global validate_password.policy=0; 提示密码策略 强度系统默认是1
        • set global validate_password.lenth=4; 长度
    • 11 , alter user 'root'@'localhost' identified by 'proot';

    • 12 , 运行flush privileges; 使密码立即生效

      image-20220708134508533

    测试

    • show datebases;

      image-20220708134606965

数据库备份 mysqldump

一、mysqldump 简介

mysqldumpMySQL 自带的逻辑备份工具。

它的备份原理是通过协议连接到 MySQL 数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert 语句,当我们需要还原这些数据时,只要执行这些 insert 语句,即可将对应的数据还原。

二、备份命令

2.1 命令格式

mysqldump [选项] 数据库名 [表名] > 脚本名

mysqldump [选项] --数据库名 [选项 表名] > 脚本名

mysqldump [选项] --all-databases [选项]  > 脚本名

2.2 选项说明

参数名 缩写 含义
--host -h 服务器IP地址
--port -P 服务器端口号
--user -u MySQL 用户名
--pasword -p MySQL 密码
--databases 指定要备份的数据库
--all-databases 备份mysql服务器上的所有数据库
--compact 压缩模式,产生更少的输出
--comments 添加注释信息
--complete-insert 输出完成的插入语句
--lock-tables 备份前,锁定所有数据库表
--no-create-db/--no-create-info 禁止生成创建数据库语句
--force 当出现错误时仍然继续备份操作
--default-character-set 指定默认字符集
--add-locks 备份数据库表时锁定数据库表

2.3 实例

备份所有数据库:

mysqldump -uroot -p --all-databases > /backup/mysqldump/all.db

备份指定数据库:

mysqldump -uroot -p test > /backup/mysqldump/test.db

备份指定数据库指定表(多个表以空格间隔)

mysqldump -uroot -p  mysql db event > /backup/mysqldump/2table.db

备份指定数据库排除某些表

mysqldump -uroot -p test --ignore-table=test.t1 --ignore-table=test.t2 > /backup/mysqldump/test2.db

三、还原命令

3.1 系统行命令

mysqladmin -uroot -p create db_name 
mysql -uroot -p  db_name < /backup/mysqldump/db_name.db

注:在导入备份数据库前,db_name如果没有,是需要创建的; 而且与db_name.db中数据库名是一样的才可以导入。

3.2 soure 方法

mysql > use db_name
mysql > source /backup/mysqldump/db_name.db

四, 大数据定制篇

  • 学习shell编程

    • 1,进行服务器集群管理的时候,需要shell程序
    • 2,编写shell程序,维护服务器
  • shell

    • shell是一个命令解释器
    • 为用户提供了向linux内核发送请求以便运行程序的界面系统级程序
    • 用户可以用shell来启动,挂起,停止甚至是编写一些程序
  • shell脚本的执行方式

    • 脚本格式要求

      • 脚本以#!/bin/bash开头
      • 脚本有执行权限
    • 编写第一个shell脚本

      • 需求
        • 创建一个shell脚本,输出hello world
      • 演示

    • 脚本的执行方式

      • 方式1

        • 输入脚本的绝对路径或相对路径
          • 注意; 首先要赋予hello.sh 脚本+权限 再执行脚本
          • ./hello.sh
      • 方式2

        • sh + 脚本

        • 注意: 不用赋予权限, 直接执行即可

          sh hello.sh

          image-20220708181848964

shell变量 set

  • linux Shell 中的变量

    • 系统变量

      • $HOME $PWD $SHELL 等等
        • 比如: echo
    • 用户自定义变量

      • 语法

        • 定义变量

          • 变量名=变量值

            注意:变量值可以是路径 BACKUP=/data/backup/db

        • 撤销变量

          • unset 变量
        • 声明静态变量

          • readonly便令

            注意: 不能unset

  • 显示当前shell中所有变量

    • set
  • 演示

    • 定义变量

    • 撤销变量

    • 声明静态的变量B=2,不能unset

      image-20220708183925499
    • 将变量提升为全局环境变量,可供其他shell程序使用

  • shell变量的定义规则

    • 字母 数字 下划线 组成

      • 不能以数字开头
    • 变量等号两边不能有空格

    • 变量名称一般为大写

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

    • A='date' 反引号

      • 运行里面的命令,并把结果返回给变量C
    • A=$(date)

      • 等价于反引号

        image-20220708184626167

设置环境变量 export

  • 语法
    • 将shell变量输出为环境变量
      • export 变量名=变量值
    • 让修改后的配置信息立即生效
      • source 配置文件
        • 如 ; source /etc/profile
    • 查询环境变量的值
      • echo $变量名

注意: 在输出TOMCAT_HOME 环境变量前,需要让其生效

​ source /etc/profile

  • shell脚本的注释

    • 单行注释

    • 多行注释

      • :<<!

        内容

        !

位置参数变量 $n

  • 当执行脚本时,如果希望获取命令行的参数信息,可以使用位置参数变量

  • 语法

    • $n
      • n 为数字
      • $0 代表命令本身
      • $1-$9 代表的是第一个到第九个参数
      • $
    • $*
      • 代表的是命令行所有的参数
    • $@
      • 代表的是命令行所有的参数
      • 把每个参数区分对待
    • $#
      • 代表的是所有变量的个数
  • 演示

    image-20220708190941775

预定义变量 $?

  • shell设计者事先定义好的变量,可以直接在shell脚本使用

  • 语法

    • 当前进程的进程号(PID)

      • $$ -
    • 后台运行的最后一个进程的进程号(PID)

      • $!
    • 最后一次执行的命令返回状态

      • $?

        注意:如果值为0 ,表示命令正常执行

        非0,命令执行不正确

  • 演示

    echo =========
    
    echo 当前执行的进程PID=$$
    #以后台的方式运行脚本,并获取进程号
    /root/shcode/var.sh $
    echo 最后一个后台方式进行的pid=$!
    echo 执行的结果?=$?
    
    
    结果
    =========
    当前执行的进程PID=11026
    A=100
    A=100
    A=
    B=200
    C=2022年 07月 08日 星期五 19:22:16 CST
    最后一个后台方式进行的pid=
    执行的结果?=0
    
    

运算符 $[]

  • 语法
    • $(运算式) 或者$[运算式] 或者expr m + n expression的简写
      • 注意: expr 运算符要有空格
        • 如: expr m - n
          • 如果希望将exprssion的结果赋予变量 ,需要 '' 单引号
    • expr \ * / %
      • 乘 除 取余

条件判断 if

  • 语法

    • [ condition ] 注意: condition 前后都有空格 condition里面的是判断语句
      • 非空返回true
      • 空值返回flase
      • 可用$?验证
  • 演示

    • [ condition ] && echo ok || echo notok

      • && 条件满足,执行后面的语句
      #  if判断语句
      if [ 23 -ge 22 ]
      then
              echo 大于
      fi
      #then 是if正确后的执行语句
      #fi 是判断语句的结束
      
  • 判断语句

    • 字符串比较
      • =
    • 整数的比较 l=less e=equal t=than g=greater
      • -lt 小于
      • -le 小于等于
      • -eq 等于
      • -gt 大于
      • -ge 大于等于
      • -ne 不等于
    • 按照文本权限进行判断
      • -r 读的权限
      • -w 写的权限
      • -x 执行的权限
    • 按照文本类型进行判断
      • -f 文件存在并且是一个常规文件
      • -e 文件存在
      • -d 文件存在并且是一个目录
  • 案例

    • 1,ok 是否等于ok

      [ condition ] ok=ok

    • 2,23是否大于等于22

      -ge

    • /home/shcode/condition.txt目录中的文件是否存在

      -f

      #!/bin/bash
      if [ "ok" = "ok" ]
      then
              echo equal
      fi
      
      if [ 23 -ge 22 ]
      then
              echo 大于
      fi
      
      if [ -f /home/shcode/aaa.txt ]
      then
              echo 文件存在
      fi
      
      
      

流程控制 if cash

  • if判断

    • 语法

      if [ 条件判断式 ]
      
      then
      
      代码
      
      fi
      
    • 或者 多分支

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

    注意 [ ] 里面必须有空格

  • cash语句

    • 语法

      • case $变量名 in 值1)

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

        ;;

        值2)

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

        *)

        如果都不是以上的值,执行次程序

        ;;

        esac

      #!/bin/bash
      case $1 in
      "1")
      echo "周一"
      ;;
      "2")
      echo "周二"
      ;;
      *)
      echo "other"
      ;;
      esac
      
      

流程控制 for 循环

  • for循环

    • 语法1

      • for 变量 in 值1 值2 值3

        do

        程序

        done

      • 演示

        • 打印命令行输入的参数

          #!/bin/bash 第一种方式
          for i in "$*"
          do
                  echo "num is $i"
          done
          
          echo ==================
          for a in "$@"
          do
                  echo "num is $i"
          done
          
          $* 将参数当做整体对待
          $@ 将参数分开对待
          
    • 语法2

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

        do

        程序

        done

      • 演示

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

          #!/bin/bash
          #定义一个变量
          SUM=0
          for((i=1;i<=100;i++))
          do
          #写上业务处理
          	SUM=$[$SUM+i]
          done
          echo 综合SUM=$SUM
          
          

流程控制 while 循环

  • while循环

    • 语法

      • while [ 条件判断式]

        do

        程勋

        done

    • 演示

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

读取控制台的输入 read

  • 语法

    • read 选项 参数
  • 选项

    • -p 指定读取值的提示符
    • -t 指定读取值时等待的时间(秒),如果没有再指定的时间内输入,则不再等待
  • 参数

    • 变量 指定读取值的变量名
  • 演示

    • 读取控制台输入的NUM1

    • 读取控制台输入的一个NUM2的值,在10秒内等待

      #!/bin/bash
      read -p "请输入一个数NUM1=" NUM1
      echo "你输入的NUM1=$NUM1"
      
      
      #!/bin/bash
      read -t 10 -p "请输入NUM2=" NUM2
      echo "你输入的NUM2=#NUM2"
      

函数 basename 和 dirname

  • shell编程同样有

    • 系统函数
    • 自定义函数
  • 系统函数

    • 第一个 basename

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

      • 语法

        • basename [pathname] [suffix]
        • basename [string] [suffix]
          • basename命令会删掉所有的前缀报货最后的一个"/" 然后将字符串显示出来
      • 演示

        请返回/home/shcode/read.sh 的 文件部分

        [root@java shcode]# basename /home/shcode/read.sh
        read.sh
        [root@java shcode]# basename /home/shcode/read.sh .sh
        read
        
        
    • 第二个 dirname

      • 返回完整路径最后/的前面的部分 常用语返回路径部分

      • 语法

        • dirname 文件绝对路径
      • 演示

        请返回/home/shcode/read.sh 的 路径部分

        [root@java shcode]# dirname /home/shcode/read.sh
        /home/shcode
        

自定义函数

  • 语法

    • function function名(0){

      ​ Action;

      ​ return int;

      }

  • 调用直接写函数名

    funname [值]

  • 演示

    计算输入两个参数的和 getSun

    #!/bin/bash
    #定义函数 getSum
    function getSum(){
            SUM=$[$n1+$n2]
            echo "和是=$SUM"
    }
    
    #输入两个参数
    read -p "请输入一个数n1=" n1
    read -p "请输入一个数n2=" n2
    
    #调用
    getSum $n1 $n2
    

Shell 编程的综合案例

  • 需求分析

    • 1,每天凌晨2:30 备份数据库 zgwDB 到/databack/db
    • 2,备份开始和备份结束能够给出相应的提示信息
    • 3,备份后的文件要求以备份时间为文件名,并打包成.tar.gz的形式
    • 4,备份的同时,检查是否有10天前的备份数据库文件,如果有就删除
  • 演示

    放到/usr/bin 目录下 vim mysql_db_backup.sh

    #!/bin/bash
    #备份目录定下来
    BACKUP=/data/backup/db
    #获取当前的时间
    DATETIME=$(date +%Y-%M-%d_%H%M%S)
    #数据库的地址
    HOST=localhost
    #数据库的用户名
    DB_USER=root
    #数据库的密码
    DB_PASSWORD=proot
    #备份的数据库
    DATABASE=hspedu
    
    #给出提示信息
    echo "开始备份数据库${DATABASE}"
    
    #创建备份目录,如果不存在则创建
    [ ! -d "${BACKUP}/${DATETIME}" ] && mkdir -p "${BACKUP}/${DATETIME}"
    
    #备份数据库使用自带的mysaldump
    mysqldump -u${DB_USER} -P${DB_PASSWORD} --host=${HOST} -q -R --databases ${DATABASE} | gzip > ${BACKUP}/${DATETIME}.sql.gz
    
    #将文件处理为tar.gz
    cd ${BACKUP}
    tar -zcvf ${DATETIME}.tar.gz
    #删除对应的备份目录
    rm -rf ${BACKUP}/${DATETIME}
    
    
    #删除10天前的备份文件
    find ${BACKUP} -atime 10 -name "*.tar.gz" -exec rm -rf {} \;
    echo "备份数据库${DATABASE}成功"
    

    将脚本当到crond中

    [root@java shcode]# crontab -e   
    
    #进入到vim编辑器了
    30 2 * * * /usr/sbin/mysql_db_backup.sh
    
    
posted @ 2022-11-24 11:34  zhanggw1  阅读(92)  评论(0)    收藏  举报