本文介绍: 命令解析器(shell)、替我们运行解析指令功能执行命令特殊符号运行脚本(代码)linux中的每个用户必须属于一个组,不能独立于组外。linux每个文件所有者、所在组、其它组的概念ls -l 中显示内容如下:drwx——. 16 jerry jerry 4096 8月 28 14:19 jerry0-9位说明第0位确定文件类型(d,-,l,c, b)l是链接,相当于windows快捷方式d目录,相当于windows文件夹

一、Linux基础

1.1 Linux(CentOS)和VM的安装

1.1.1 开启windows虚拟化

1.1.2 安装VM和CentOS

1.1.3 安装CentOS注意事项

1.2 vmtools安装

1.2.1 作用

1.3 Xshell 远程连接

1.4 远程连接失败查询(初级)

1.4.1 检查道路是否通畅

ping ip域名

[jerry@jerry ~]$ ping 192.168.254.132
PING 192.168.254.132 (192.168.254.132) 56(84) bytes of data.
64 bytes from 192.168.254.132: icmp_seq=1 ttl=64 time=0.061 ms
64 bytes from 192.168.254.132: icmp_seq=2 ttl=64 time=0.072 ms
64 bytes from 192.168.254.132: icmp_seq=3 ttl=64 time=0.080 ms
64 bytes from 192.168.254.132: icmp_seq=4 ttl=64 time=0.073 ms

1.4.2 检查是否提供服务

telnet ip 端口

telnet 192.168.254.132 22

[jerry@jerry ~]$ telnet 192.168.254.132 22
Trying 192.168.254.132...
Connected to 192.168.254.132.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.4

1.5 Bash特点

1.5.1 Bash概述

1.5.2 Linux命令格式

命令 选项 参数

命令 Linux实现各种功能的指令

选项 option一个命令不同功能

参数 对象处理文件目录

命令 选项 参数

rm -f /test.txt

1.5.3 文件相关命令

#ls  list列表,查看目录下面的内容(只有名字
[jerry@jerry ~]$ ls  /
bin/   dev/   home/  lib64/ mnt/   proc/  run/   srv/   tmp/   var/   
boot/  etc/   lib/   media/ opt/   root/  sbin/  sys/   usr/   
[jerry@jerry ~]$ ls  /etc/
abrt                        dnsmasq.d      issue                     openldap          services
adjtime                     dracut.conf    issue.net                 opt               sestatus.conf
#ls -l  查看详细信息 d代表目录
[jerry@jerry ~]$ ls -l /tmp/
总用量 32
-rw-r--r--. 1 root  root  1148 85 14:11 anaconda.log
drwxr-xr-x. 2 root  root    18 85 13:57 hsperfdata_root
-rw-r--r--. 1 root  root   415 85 14:10 ifcfg.log
#ls -la /fileName/显示 /root/ 目录中所有文件,包含隐藏文件 
#以"."开头的文件或者目录就是隐藏文件
#cd change directory进入目录
cd /tmp
#pwd 显示当前所在位置
#cd ~ 快速回到根目录
#cd .. 上一级目录cd 
#cd - 返回一次所在目录
#tree树形显示目录内容

#centOS安装软件(熟悉)
yum install -y tree #需要虚拟机可以连网

1.6 Linux目录结构

1.7 vivim

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

1.7.1 常用三种模式

1.7.2 各种模式相互切换

在这里插入图片描述

1.7.3 快捷键

1.8 命令

1.8.1 关机重启

1.8.2 用户登录和注销

1.9 用户管理

1.9.1 添加用户

1.9.2 设置密码

1.9.3 删除用户

1.9.4 查询用户信息

  • id 用户名
    • 案例:查询root用户id

1.9.5 切换用户

1.9.6 用户组

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

1.9.7 用户和组相关文件

2.0 运行级别

2.0.1 指定运行级别

2.1 找回root密码

2.2 帮助指令

2.3 文件目录指令

2.4 时间日期指令

2.5 查找指令

2.6 压缩解压

  • gzip/gunzip指令 压缩或解压文件

  • zip/unzip 指令 zip用于压缩文件, unzip 用于解压的,这个在项目打包发布中很有用的

    • 基本语法:

    • zip常用选项:-r :递归压缩,即压缩目录

    • unzip的常用选项: -d<目录> 指定解压后文件的存放目录

    • unzip的常用选项:-d<目录> :指定解压后文件的存放目录

    • 案例1:将/home’下的所有文件/文件夹进行压缩成myhome.zip

      • zip -r myhome.zip /home/ [将home目录及其包含的文件和子文件夹都压缩]
    • 案例2:将myhome.zip解压到/opt/tmp目录下

      • unzip -d /opt/tmp /home/myhome.zip
  • tar指令 是打包指令,最后打包后的文件是.tar.gz的文件。

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

    • 选项说明:

      • 选项 功能
        c 产生.tar打包文件
        -v 显示详细信息
        -f 指定压缩后的文件名
        -z 打包同时压缩
        -x 解包.tar文件
    • 案例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/

二、Linux实操

1.1 Linux组的基本介绍

1.1.1 基本概念

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

1.1.2 文件/目录 所有者

1.1.3 组的创建和修改文件所在组

  • 基本指令groupadd 组名

  • chgrp newgroup 文件名(修改文件所在组)

    • -R 递归将子文件全部修改所在组

1.1.4 改变用户所在组

  • usermod -g 新组名 用户名
  • usermod -d 目录名 用户名 改变该用户登陆的初始目录。

1.2 权限基本介绍

1.2.1 rwx权限详解

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

  • drwx——. 16 jerry jerry 4096 8月 28 14:19 jerry

  • 0-9位说明

    • 第0位确定文件类型(d,-,l,c, b)
    • 第1-3位确定所有者(该文件的所有者)拥有该文件的权限。–User (r->读 w->写 x->执行)
    • 第4-6位确定所属组(同用户组的)拥有该文件的权限, —Group
    • 第7-9位确定其他用户拥有该文件的权限—Other
  • rwx 作用到文件

    • [r]代表可读(read):可以读取查看

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

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

  • rwx 作用到目录

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

    • 16 :文件:硬连接数或目录:子目录数
    • jerry:用户
    • jerry:组
    • 4096:文件大小(字节),如果是文件夹,显示4096字节
    • 8月 28 14:19 :最后修改日期
    • jerry:文件名
  • 修改权限:通过chmod指令,可以修改文件或者目录的权限。

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

      • u:所有者 g:所有组o:其他人a:所有人(u、 g、o的总和)
      • chmod u=rwx,g=rx,o=x 文件/目录名
      • chmod o+w 文件/月录名
      • chmod a-x 文件/目录名
    • 第二种方式:通过数字变更权限

    • 案例:要求:将/home/abc.txt文件的权限修改成rwxr-xr-x, 使用给数字的方式实现:

1.2.2 最佳实例

police,bandit
jack,jerry:警察

xh, xq:土匪
1.创建组
2.创建用户
3.jack创建一个文件 ,自己可以读写,本组人可以读,其它组没人任何权限
4.jack修改该文件,让其它组人可以读,本组人可以读写
5.xh投靠警察,看看是否可以读写.

#创建组
groupdel police
groupadd police
groupadd bandit
useradd -g police jack
useradd -g police jerry
useradd -g bandit xh
useradd -g bandit xq
#2
passwd {username} #设置密码
#3
vim jack.txt
chmod 640 jack.txt
#4
chmod o=r,g+w jack.txt 
#5 切换root用户
usermod -g police xh

1.3 crond任务调度

crontab进行定时任务的设置

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

1.4 at定时任务

at命令是一次性定时计划任务, at的守护进程atd会以后台模式运行,检查作业队列来运行。
默认情况下, atd守护进程每60秒检查作业队列,有作业时,会检查作业运行时间,如果时间与当前时间匹配,则运行此作业。
at命令是一次性定时计划任务,执行完一个任务后不再执行此任务了
在使用at命令的时候,一定要保证atd进程的启动,可以使用相关指令来查看

ps -ef | grep atd 可以检测atd是否正在运行

  • at 命令格式

  • 选项

  • at 时间定义

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

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

      • at 5pm + 2 days
      • /bin/ls /home
    • 案例2 : atq命令来查看系统中没有执行的工作任务

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

      • at 5pm tomorrow
      • date > /root/date100.log

1.5 Linux分区

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

Linux采用了一种叫“载入”的处理方法,它的整个文件系统包含了一整套的文件和目录,且将一个分区和一一个目录联系起来。这时要载入的一个分区将使它的存储空间在一个目录下获得。lsblk查看分区 -f

1.6 磁盘情况查询

1.7 磁盘情况-工作实用指令

1.8 Linux网络配置

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

1.8.2 linux网络环境配置(获取ip或者固定ip)

1.9 设置主机名和hosts映射

1.9.1 设置主机名

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

三、进程

3.1 基本介绍

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

3.2 显示系统执行的进程

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

  • 选项:

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

3.3 终止进程kil和killall

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

  • 语法:

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

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

3.4 查看进程树pstree

  • pstree [选项]可以更加直观的来看进程信息
  • 常用选项:
    • -p :显示进程的PID
    • -u :显示进程的所属用户

3.5 服务管理

3.5.1 介绍

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

3.5.2 服务的运行级别

3.5.3 CentOS7后运行级别说明

3.5.4 chkconfig指令

3.5.5 systemctl 指令

3.5.6 打开指定端口

3.6 动态监控进程

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

  • 基本语法:

  • 选项说明

选项 说明
-d描述 指定top命令每隔几秒更新。默认是3秒
-i 使top不显示任何闲置或者僵死进程
-p 通过指定监控进程ID来仅仅监控某个进程的状态。
  • 按下:

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

  • 案例2 :终止指定的进程。
    top :输入此命令,按回车键,查看执行的进程。
    k:然后输入”k”回车,再输入要结束的进程ID号
    案例3:指定系统状态更新的时间(每隔10秒自动更新)

3.7 监控网络状态

3.8 rpm包的管理

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

3.8 yum

Yum是一个Shell前端软件包管理器基于RPM包管理,能够从指定的服务器自动

下载RPM包并且安装,可以自动处理依赖关系,并且一次安装所有依赖的软件包。

3.9 安装jdk

3.10 安装tomcat

3.11 安装Idea

四、Shell

4.1 Shell编程

  • 脚本格式要求

  • 案例:

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

      • vim hello.sh

      • #!/bin/bash
        echo "hello,world~"
        
      • chmod u+x hello.sh (添加可执行权限)

    • 或者直接sh hello.sh执行,不需要权限

4.2 Shell变量

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

    • 系统变量:

      H

      O

      M

      E

      HOME、

      HOMEPWD、$SHELL、 $USER等等,比如: echo $HOME等等…

    • 显示当前shell中所有变量: set
  • shell变量的定义

    • 基本语法:

    • A=`data`等价于$(data)

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

  • 多行注释

4.2.2 位置参数变量

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

  • 基本语法:

    • $n ( 功能描述: n为数字, $0代表命令本身,$1-

      9

      代表第一到第九个参数

      ,

      十以上的参数

      ,

      十以上的参数需要用大括号包含,如

      9代表第一到第九个参数 ,十以上的参数,十以上的 参数需要用大括号包含,如

      9代表第一到第九个参数,十以上的参数,十以上的参数需要用大括号包含,如{10} )

    • $* (功能描述:这个变量代表命令行中所有的参数, $*把所有的参数看成一 个整体)
    • @

      (

      功能描述

      :

      这个变量也代表命令行中所有的参数,不过

      @ (功能描述:这个变量也代表命令行中所有的参数,不过

      @(功能描述:这个变量也代表命令行中所有的参数,不过@把每个参数区分对待)

    • $# (功能描述:这个变量代表命令行中所有参数的个数)
  • 案例:编写一个shell脚本position.sh ,在脚本中获取到命令行的各个参数信息。

    • #!/bin/bash
      echo "$0 $1 $2"
      echo "$*"
      echo "$@"
      echo "$#"
      

4.2.3 预定义变量

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

  • 基本语法:

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

    • #!/bin/bash
      echo "当前执行进程的id=$$"
      #以后台的方式运行一个脚本,并获取它的进程号
      /root/shell-codes/myshell.sh &amp;
      echo "最后一个后台方式运行的进程id=$!"
      echo "执行的结果是=$?"
      

五、运算符

5.1 运算

5.2 条件判断

5.3 case语句

  • 基本语法

  • case $变量名 in 
    "值1")
    如果值为1,执行程序1
    ;;
    "值2")
    如果值为2,执行程序2
    ;;
    *)
    其他,执行此程序
    ;;
    esac
    

5.4 for语句

  • 基本语法1

    • for 变量 in 值1 值2 值3...
      do
      程序/代码
      done
      
  • 案例1 : 打印命令行输入的参数[这里可以看出 $* 和 $@ 的区别]

    • #!/bin/bash
      for i in "$*"
      do
      	echo "num is $i"
      done
      
      echo "==================="
      for j in "$@"
      do 
      	echo "num is $j"
      done
      
  • 基本语法2

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

    • for ((i=1; i<=100; i++))
      do
      	SUM=$[$SUM+$i]
      done
      echo "总和SUM= $SUM"
      
      

5.5 while 循环

  • 基本语法:

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

    • SUM=0
      i=0
      while [ $i -le $1 ]
      do
      	SUM=$[$SUM+$i]
      	i=$[$i+1]
      done
      echo "执行结果:SUM=$SUM"
      

5.6 read读取控制台输入

  • 基本语法:read(选项)(参数)

    • 选项:

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

  • 案例:

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

六、函数

6.1 系统函数

6.1.1 basename

6.1.2 dirname

6.2 自定义函数

6.3 Shell编程综合案例

6.3.1 定时备份数据库

需求分析

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

  • vim mysql_db_backup.sh

  • #!/bin/bash
    #备份目录
    BACKUP=/data/backup/db
    #获取当前时间
    DATETIME=$(date +%Y-%m-%d_%H%M%S)
    echo "$DATETIME"
    #数据库的地址
    HOST=localhost
    #数据库用户名
    DB_USER=root
    #数据库密码
    DB_PWD=ROOT
    #备份的数据库
    DATABASE=hspEduDB
    #创建备份目录,如果不存在就创建
    [ ! -d "${BACKUP}/${DATETIME}" ] &amp;&amp; mkdir -p "${BACKUP}/${DATETIME}" 
    
    #备份数据库
    mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --database ${DATABASE} | gzip > 
    ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
    
    #将文件处理成tar.gz
    cd ${BACKUP}
    tar -zcvf $DATATIME.tar.gz $DATATIME
    #删除对应的备份目录
    rm -rf ${BACKUP}/${DATATIME}
    #删除十天前的备份文件
    find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} ;
    echo "备份数据库${DATABASE}成功~"
    
    
  • crontab -e

  • 基本语法:dirname文件绝对路径

    • 功能描述:从给定的包含绝对路径的文件名中去除文件名(非目录的部分),然后返回剩下的路径(目录的部分)
  • 案例:请返回/home/aaa/test.txt的/home/aaa

6.2 自定义函数

6.3 Shell编程综合案例

6.3.1 定时备份数据库

需求分析

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

  • vim mysql_db_backup.sh

  • #!/bin/bash
    #备份目录
    BACKUP=/data/backup/db
    #获取当前时间
    DATETIME=$(date +%Y-%m-%d_%H%M%S)
    echo "$DATETIME"
    #数据库的地址
    HOST=localhost
    #数据库用户名
    DB_USER=root
    #数据库密码
    DB_PWD=ROOT
    #备份的数据库
    DATABASE=hspEduDB
    #创建备份目录,如果不存在就创建
    [ ! -d "${BACKUP}/${DATETIME}" ] &amp;&amp; mkdir -p "${BACKUP}/${DATETIME}" 
    
    #备份数据库
    mysqldump -u${DB_USER} -p${DB_PWD} --host=${HOST} -q -R --database ${DATABASE} | gzip > 
    ${BACKUP}/${DATETIME}/$DATETIME.sql.gz
    
    #将文件处理成tar.gz
    cd ${BACKUP}
    tar -zcvf $DATATIME.tar.gz $DATATIME
    #删除对应的备份目录
    rm -rf ${BACKUP}/${DATATIME}
    #删除十天前的备份文件
    find ${BACKUP} -atime +10 -name "*.tar.gz" -exec rm -rf {} ;
    echo "备份数据库${DATABASE}成功~"
    
    
  • crontab -e

原文地址:https://blog.csdn.net/m0_65778338/article/details/129962586

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_33408.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱:suwngjj01@126.com进行投诉反馈,一经查实,立即删除!

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注