Linux运维基础知识大全

一. Linux组成

1. 内核

  • 内核:系统空间的代码和数据的集合称为内核(Kernel);kernel是操作系统内部最核心的软件,和硬件打交道的

    1.对cpu进行管理,进程调度到cpu里进行管理
    2.对内存进行空间的分配,哪些内存空间已经使用了,哪些还没有使用,分配给了哪些进程等
    3.对进程进行管理(创建,调度,销毁)
    4.对磁盘里的文件系统进行管理,文件的读取和写入,查找等进行管理
    5.对网络以及其他的硬件进行管理,例如网卡,声卡,显卡等

    • 查看内核和centos的版本

      [root@localhost ~]# cat /etc/redhat-release
      CentOS Linux release 7.9.2009 (Core)
      [root@localhost ~]# uname -r
      3.10.0-1160.el7.x86_64
      
    • lsmod 查看内核里加载了哪些模板

    • modprobe 添加和删除内核的模块

      添加
      [root@localhost cron.d]# /sbin/modprobe  ip_nat_ftp
      删除
      [root@localhost cron.d]# /sbin/modprobe -r ip_nat_ft
      

2. 系统调用

  • 系统调用: 是内核给外面的应用程序的接口–》库,方法–》系统调用也是程序,是内核给外面的应用程序提供的实现某个功能的程序

    例如: fork(),kill(),write(),read()等函数--》系统调用 system call
    

3. 应用程序

  • 应用程序: 实现具体的某个功能的程序,例如:mkdir,vim,rm等

4. shell解释器

  • shell解释器: 也是一个程序,给命令行操作使用的–》不是所有的程序都会使用

5. 库函数

  • 库函数: 也是实现某个功能的程序,相当于一个轮子,可以被其他的程序调用,这些库都是公开的,大家都可以去调用

    是A程序共享出来的,B程序或者C程序可以去调用
    

二. Linux语法

1. 语法和变量

1.1 语法

  • 格式:命令 +选项 +参数(目录,文件夹)

    • 常用选项

      • -a 显示所有的文件,包括隐藏文件

      • -A 显示所有的文件,不包括隐藏文件的.和… ,其他隐藏文件都显示

      • -l 显示文件的详细信息 --》以长格式显示

        -l     use a long listing format
        with -l, print sizes in human readable format (e.g., 1K 234M 2G)
        
      • -h, --human-readable

      • -r, --reverse 和字母顺序相反的排列顺序

        reverse order while sorting
        
      • -d 查看文件夹本身的信息 directory

    • 选项的使用: 可供选择的项目,可接可不接,但是接了有特殊的作用

      1. 选项可以组合
      ls  -l  -a  ==   ls -la
      ls  -a -l -d   ==  ls -lad
      
      1. 选项的顺序

      可以不讲究,谁在前面或者后面都可以

      1. 选项之间有依赖关系
      ls  -l  -d  /boot
      ls  -lh /boot
      
      • 长选项: 长格式

        --all
        
      • 短选项: 短格式

        -a
        
      • 如果不接参数,默认以当前文件夹作为参数

1.2 变量

  • 定义变量

    • 自定义变量 自己定义 小写

      [root@sc-server src]# sg="feirx"
      [root@sc-server src]# echo  $sg
      feirx
      
    • 预定义变量 操作系统预先定义好的,可以直接使用,大写

  • env 查看Linux中的当前环境变量(全局变量)

  • set 查看Linux中的所有变量,包括环境变量和自定义变量

  • $的用法

    • 获取变量与环境变量的值

      path=2,则echo p a t h 或者 e c h o path 或者echo path或者echo{path}显示的就是path的值

    • 变量替换->显示脚本参数

      命令替换 varname=$(命令) 把命令中某个子命令替换为其执行结果的过程

      bls=$(ls -l /)
      IFS='\n'  IFS是内部字段分隔符
      echo $bls
      
      • $?->是上一指令的返回值(返回结果范围0~255)

        0 说明上一条命令执行成功

        非0 说明上一条命令执行失败

      • $$ ->Shell本身的PID,即当前进程的PID

  • ? 代表一个任意字符 * 代表任意个任意字符

1.3 别名

  • alias 定义别名: 命令的另外一个名字

    alias ll='ls -l --color=auto'  前面的ll是别名,后面的引号是细节
    alias ls='ls --color=auto'
    alias mv='mv -i'
    alias rm='rm -i'alias pp="ping www.baidu.com"
    
  • unalias 取消别名

    • 定义的别名不要和系统里的命令名字冲突,如果冲突后果就是导致原来的命令不能使用

2. 路径

2.1 绝对路径

  • 不考虑你当前的位置,从“/”到达目标文件需要经过的文件系统目录树的所有分支

    /home/hello/docs/share
    
  • 跟你当前所在的路径没有关系,从/开始一层一层往下走,绝对不会搞错的路径,单向,从上而下

2.2 相对路径

  • 参照你当前的位置,到达目标文件需要经过的文件系统目录树的所有分支

  • 不以“/”开头

  • 以当前文件夹作为参照物,可进可退

3. 复制删除剪切

3.1 删除rm

  • rm 删除文件和文件夹 remove

    -r 递归删除 recursive

    -f 强制删除,不给与提醒 force

    rm  -rf  feng      rm  -rf  /feng
    

3.2 复制cp

  • cp 复制文件和文件夹 copy

    1 复制文件

    [root@localhost china_voice]# cp sc.txt hunantv
    [root@localhost china_voice]# cp  /etc/hosts   .
    

    2 复制文件夹 -r (递归复制)

    [root@localhost china_voice]# cp jiangsutv/  hunantv -r
    

3.3 剪切mv

  • mv 移动(剪切)或者重命名

    1.移动,后面接的文件夹存在就是移动

    [root@localhost china_voice]# mv hunantv  hunan
    

    2.重命名,后面接的文件夹不存在就是重命名

4. 文件目录

  • 文件目录

    /root root用户的家目录
    /home 普通用户的家目录
    /bin 存放可执行二进制程序 binary

    /sbin -->super user binary --》有特权的用户(root)使用的命令 -->御用
    useradd

    /usr 存放linux系统资源:各种程序默认会安装到这个文件夹里 unix system resource
    /etc 存放各种配置文件: /etc/passwd /etc/shadow /etc/group /etc/profile /etc/login.defs
    /tmp 是存放临时文件的,任何的用户创建进程都可以在此处新建文件和文件夹 temporary

    /var/log/secure 记录下被授权者执行的所有命令

    /var 存放可变化的文件的 variable 可变的
    log 日志文件 是不停的记录程序发生的事情
    secure 是与linux安全相关的日志
    登陆进入linux,新建用户,设置密码
    messages 平时可以记录的日志,默认都记录到messages --》rsyslogd进程会记录能记录的各种消息都会记录一份到messages文件里

    ​ boot.log 开机启动的过程中的日志

  • 文件类型

    d 表示是文件夹 directory

    — 表示普通文件

5.日志文件

  • 记录到哪里去了?
    /var/log/messages

  • 谁会帮我们记录日志

    linux系统里的专门记录日志的服务 : rsyslog

    service rsyslogd 帮助我们记录日志
    kernel netfilter kernel会把日志告诉rsyslogd 让它记录日志

    [root@localhost conf]# vim /etc/rsyslog.conf *.info;mail.none;authpriv.none;cron.none
    

    ​ cron.info 记录cron类型的日志的info以上级别的信息,包括info

  • 日志的设备类型

    1.kernel kern.info 内核产生的info以上级别的日志 kern.* 表示所有的kern类型的日志级别
    2.authpriv --》ssh远程登录,需要输入用户名和密码
    3.cron --》计划任务
    4.mail
    5.local1~local7 都是自定义的类型
    6.news

  • 日志级别

    8 none 不记录日志
    7 debug 调试信息,系统进行调试时产生的日志,不属于错误日志,不需要过多关注
    6 info 一般的通知信息,用来反馈系统的当前状态给当前用户
    5 notice 提醒信息,需要检查一下程序了,不理会可能会出现错误
    4 warning 警告信息,当出现警告时,你的程序可能已经出现了问题,但不影响程序正常运行,尽快进行处理,以免导致服务宕掉
    3 error 错误信息,出现这一项时,已经挑明服务出现了问题,服务都无法确认是否能正常运行
    2 critical 比较严重的错误信息,服务已经宕了,可能已经无法修复
    1 alert 警报信息,需要立即采取行动,不仅是服务宕了,还会影响系统的正常后动
    0 emergency 紧急信息,系统可能已经不能使用了,如果不能解决,就重新装机吧

    级别值越小则优先级越高:none<debug< info<notice<warning<error<critical<alert<emerg

6. 提示符

6.1 用户提示符

$ 符号是普通用户的提示符
# 符号是超级用户的提示符

6.2 PS1第一提示符

[root@liaobo ~]# echo $PS1
[\u@\h \W]\$\u  代表是用户  user
@ 分割符号
\h 代表主机名 hostname
\W 代表当前的工作目录(当前的路径) working
\$  如果你是root用户就是# ,如果你是非root用户就是$

6.3 PS2第二提示符

[root@liaobo ~]# echo $PS2  表示命令没有输完

三. Linux基础

1. 常见命令

1.1 基础命令

  • ctrl+l 清除屏幕

  • ctrl+alt 从虚拟机里返回到真实机器

  • ls 查看文件夹里的内容 list

  • mkdir 新建文件夹 make directory(目录=文件夹)

  • rm -rf 删除文件夹

  • pwd 查看当前所在的路径

  • ip add 查看linux系统的ip地址

  • tree 以树状格式列出目录的内容

  • touch 新建空文件

  • exit 退出登录系统

  • du -sh 文件名 查看文件的大小

    [root@master passwd]# du -sh sc_00 
    4.0K	sc_00
    
  • cat 查看文本文件里的内容

     [root@sanchuang vim]# cat  zhangyp.txt
    
  • nl number lines of files 输出内容并进行编号,和cat -n具有相同的功能

  • bash 执行文件或者脚本

    [root@localhost backup]# bash backup_log.sh
    

1.2 安装软件

  • mount挂载

    • 安装获得挂载功能

      [root@web-server2 ~]# yum install nfs-utils -y  
      
    • 挂载文件(相当于挂载一个镜像)

      [root@zabbix-agent nginx-1.23.2]# mount  /dev/cdrom  /mnt
      [root@web-server2 ~]# mount 192.168.0.139:/web /usr/local/nginx/html/  将nfs服务器上的/web目录挂载到客户机的/usr/local/nginx/html/目录上
      
    • umount卸载掉挂载

      [root@zabbix-agent ~]# umount  /mnt
      [root@web-server2 ~]# umount  /usr/local/nginx/html/ 
      
    • showmount查看共享文件

      [root@web-server2 ~]# showmount -e 192.168.227.135 #在客户机上查看192.168.227.138机器共享了哪些目录
      
  • rpm 安装

    rpm 是linux里的软件安装的命令,不能自动解决依赖关系,需要手工完成

    rpm包: 是redhat/centos系统里的软件安装包,以.rpm结尾 ,理解为windows里的.exe结尾的安装包

    rpm -ivh mysql80-community-release-el7-6.noarch.rpm 
    
  • yum安装

    yum 也是linux里的软件安装的命令(底层其实就是调用rpm包去安装),但是yum可以帮助我们自动解决依赖关系

    依赖关系的作用:一个软件有很多模块,有些功能某些软件已经有了,而且还非常好用,我们就可以直接调用,不需要再自己写一个了

    yum  install  nginx  底层是需要知道nginx的已经做好的rpm包存在的哪个位置,不然也不能去安装
    yum  remove nginx 卸载
    
  • 编译安装:下载源代码包,安装固定的流程去安装->可以定制功能

    1.下载源码
    2.编译前的配置 --》选款式,颜色,面料,量尺寸等操作的确定–》形成一个方案
    3.编译 --》开始制作衣服
    4.编译安装 --》交付给用户

  • 查看软件安装

    • yum provides 联网到yum源查询命令是通过哪个软件安装的

    • rpm -qf 本地查询文件是通过哪个软件安装的

      rpm redhat package managment 红帽公司出品的软件包管理软件

      -q 查询 query
      a all

1.3 用户命令

  • su - 切换用户 substitute替换

  • useradd 新建用户

    useradd liuxiaoxiao 新建liuxiaoxiao用户
    sudo  passwd  liuzizheng   修改liuzizheng密码
    
  • hostnamectl set-hostname 更改主机名

    [root@localhost ~]# hostnamectl set-hostname liaobo
    

1.4 man命令

  • man 查看命令的使用手册 manuals 手册,指南

    man 1 passwd 查看passwd命令的使用
    man 5 passwd 查看/etc/passwd文件里的配置的使用说明

    没有加默认man 1 按q退出 quit

1.5 tr命令

  • tr 实现字符的转换和删除功能 translate or delete characters

    • 转换

      [root@lamp-test lianxi]# echo 112233445566112233 |tr 123 abc
      aabbcc445566aabbcc
      
    • 删除 -d

      [root@lamp-test lianxi]# echo 11122334455  |tr -d 345
      11122
      
    • -s 压缩连续的字符串为一个字符串

      [root@sanchuang feng1]# echo  1111111111222222222222223333333333333123123|tr -s 123
      123123123
      

1.6 date命令

  • date 获得当前的时间

    %Y 年,%m 月(01…12),%d 日

    %H 时(00…23),%M 分(00…59),%S秒(00…60)

    [root@localhost bak]# date +%Y%m%d%H%M%S   20230326160111
    

1.7 cd命令

  • cd+参数

    / 根目录

    . 当前目录

    …上一级目录
    家目录(root用户的家目录/root;其他用户的家目录/home/用户名)

    -上一次所在的工作目录(遥控器上的返回键)

  • 进入文件夹 cd 文件夹名

1.8 wc命令

  • wc (word count 词数统计)统计文件的行数,单词,字节

    • -l 只显示行数
    • -w 只显示字数
    • -c 只显示字节数
    [root@lamp-test lianxi]# wc filename  显示行数、字数和字节数
    [root@localhost lianxi]# wc -l new_passwd   显示行数
    19 new_passwd
    [root@lamp-test lianxi]# wc -w filename 只显示字数
    [root@lamp-test lianxi]# wc -c filename 只显示字节数
    

1.9 head和tail

  • head :默认显示文件的头10行

    [root@sanchuang lianxi]# head -3 passwd    显示前三行
    
  • tail: 默认显示文件的尾10行

    [root@sanchuang lianxi]# tail -6 passwd  显示后六行
    [root@sanchuang lianxi]# tail -n +2  从第二行到最后一行
    

1.10 echo命令

  • echo 输出文本内容

    -n 不换行

    [root@lamp-test lianxi]# echo -n "sanchuang"
    sanchuang[root@lamp-test lianxi]# 
    

    -e 让转义字符后面接的字符有特殊作用->启用反斜杠转义功能

    \n  回车、换行
    \t  tab键
    
    [root@lamp-test lianxi]# echo -e  "name\tsex\tage\nsanchuang"
    name    sex    age
    sanchuang
    

1.11 seq命令

  • seq 产生序列 sequence

    -w 等宽输出 width

    -s 指定分隔符 separater

    [root@lamp-test lianxi]# seq 5
    1
    2
    3
    4
    5
    [root@lamp-test lianxi]# seq -w -s " " 5 10
    05 06 07 08 09 10
    #-s使用空格作为分隔符
    [root@lamp-test lianxi]# seq 5 8
    5
    6
    7
    8
    [root@lamp-test lianxi]# seq 1 +2 10
    1
    3
    5
    7
    9
    

1.12 history命令

  • history 查看历史命令记录(上下方向键也可以查看)

  • history -c 清除历史命令

  • !number 执行历史命令

    !811 执行第811条命令
    
  • !string 执行最近以string字符串开头的历史命令

2.连接符号

2.1 命令连接符号 ;

命令1 ; 命令2 ; 命令3

先执行前面的命令,然后执行后面的命令,不管前面的命令执行成功还是失败都会执行后面的命令

3.2 续行符号 \

  • 继续到下一行

2.3 管道符号 |

  • 管道: 实现的是进程和进程之间通信的一种方式
  • 作用:将前面一个命令的输出送给后面一个命令作为输入 --》 中间人,只传不负责接收参数
2.3.1 xargs
  • xargs 将前面命令的输出送给后面的命令作为参数使用,可以接收参数 arguments参数

    #由于ls接收不了,管道符号的传参,故用xargs代替接收
    [root@lamp-test lianxi]# echo  feng.txt |xargs  ls -l
    -rw-r--r-- 1 root root 26 118 16:40 feng.txt
    #相当于 mkdir  1 2 3 4 5
    [root@sanchuang feng1]# seq 5|xargs mkdir 
    

2.4 或符号 ||

  • 命令1 || 命令2

    如果命令1执行失败,就执行命令2,如果命令1执行成功,就不执行命令2

2.5 与符号 &&

  • 命令1 && 命令2

    如果命令1执行成功,就执行命令2,如果命令1执行不成功,就不执行命令2

四. shell编程

1. shell基础

1.1 脚本执行方式

  • 当前bash里运行(父进程)

    父进程:  . a.sh    或者source  a.sh
    
  • 子bash进程(子进程)

    子进程:  bash  a.sh   或者./a.sh
    

1.2 引号用法

  • 单引号:无作用

    所见即所得,不会应用变量里面的内容—>任何的字符都只是字符,没有特殊作用

  • 双引号:引用变量

    引用变量的内容,某些特殊字符(元字符)有特殊作用

    • 元字符: 有特殊作用的字符

      $ ! * ? ~
      
  • 反引号:命令替换,执行命令得到的结果

    优先执行linux命令,然后将命令的结果赋值给变量 --》改变了命令执行的优先级,相当于 $(命令)->支持嵌套,反引号不支持

  • !间接引用

    [root@master passwd]# a=b
    [root@master passwd]# b=10
    [root@master passwd]# echo ${!a}
    10
    
  • eval 间接引用

    [root@master passwd]# cat sc.txt 
    sanchaung
    [root@master passwd]# a="cat sc.txt"
    [root@master passwd]# eval $a
    sanchaung
    

1.3 括号的使用

  • 单圆括号()

    • 命令替换

       $ test=$(date)$ echo $test
      2023年 08月 15日 星期二 15:34:34 CST
      
    • 命令分组

      (var=1;echo $var) 
      
    • 初始化数组

      a=(1 2 3)  数组
      
  • 双圆括号(())

    对整数进行数字运算(bc进行小数运算)和逻辑运算

    [root@sanchuang init.d]# echo $((7 + 9 ))
    16
    [root@sanchuang init.d]#echo $((3<8)) 
    1[root@master ~]# echo 5.3+4|bc
    9.3
    [root@sanchuang shell]# echo "170.00 > 90" |bc
    1  输出为1表示为真
    [root@sanchuang shell]# echo "17.00 > 90" |bc
    0  输出为0表示为假
    
  • 中括号[]:

    • 字符串和数值比

    • 数字运算

    • -d 判断文件夹

      [ -d /backup ] 判断/backup目录是否存在  directory
      
    • -f 判断目录

      [ -f /backup/a.txt ]   判断/backup/a.txt文件是否存在 
      
    • -n 判断字符串的长度不为空

      [ -n  $sg ]  判断字符串的长度不为空 --》字符串有内容
      
    • -z 判断字符串的长度是否为0

      [ -z $sg  ]  判断字符串的长度是否为0    zero
      
  • 双中括号[[]]:字符串的比较

    老式的   [   "${sg}" =  'shenmengjie']
    新式的   [[  "${sg}" ==  'shenmengjie' ]]   -->推荐使用,支持字符串里有空格
    
  • 花括号{}

    • 变量范围限定

       $ a=123456$ echo $abc$ echo ${a}bc
      123456bc
      
    • 命令分组

      $ { ls ; ls ;echo  $BASH_SUBSHELL; }
      
    • 对大括号中的文件名做扩展

      • 对大括号中的以逗号分割的文件列表进行拓展。

        touch {a,b}.txt 结果为a.txt b.txt
        
      • 对大括号中以点点(…)分割的顺序文件列表起拓展作用

        touch {1…4}.txt 结果为1.txt 2.txt 3.txt 4.txt
        

1.4 位置变量

就是往脚本里面传递参数

[root@sc-server 3-31]# bash for.sh  5  7  8
1.4.1 常见位置变量
  • $0 代表脚本文件名
  • $$当前进程的pid号 $! 后台运行的最后一个进程的pid
  • $? 上一条命令程序的返回值
  • $# 代表位置变量的个数
  • ∗ 或者 *或者 或者@ 代表所有的位置变量的内容
  • $1 第1个位置变量;$2 第2个位置变量;$3 第3个位置变量
1.4.2 shift用法
  • 删除最左边的位置变量,所有的位置变量左移一个

1.5 read

  • 输入内容给指定变量

read是接受用户的输入,然后将输入的内容赋值给变量

-p 提示信息 prompt

[root@sc-server 3-31]# read  -p  "请输入你的名字:"  name
请输入你的名字:liaobo  #手动输入
[root@localhost ~]# echo $name
liaobo
  • 插入断点 —>什么都不接

1.6 RANDOM

  • RANDOM可以产生随机数,RANDOM%10表示10以内的随机数,RANDOM%100表示100以内的随机数

    [root@master ~]# echo $RANDOM 
    7533
    [root@master ~]# echo $((RANDOM%100))
    36
    [root@master ~]# echo $((RANDOM%10))
    8
    

1.7 切片功能

bash自带的处理字符串

echo ${#a} $a中字符串的个数
echo ${a:3} $a中从第三个开始取直到结束,下标从0开始
echo ${a:3:6} $a中从第三个开始取6个字符
echo ${a: -3} 取最后3个字符
echo ${a#*,}从左边开始删除直到遇到,为止,其他的字符串保留
echo ${a##*,}从左边开始删除直到遇到最后一个,为止
echo ${a%,*}从右面开始删除直到遇到.为止,其他的字符串保留
echo ${a%%,*}从右面开始删除直到遇到最后一个.为止
echo ${a/abc/111} 将变量a中的第一个abc替换成111
echo ${a//abc/xyz}将变量a中的所有的abc替换成xyz
[root@master passwd]# a="tiankai,gaoshuo"
[root@master passwd]# echo ${#a}
15
[root@master passwd]# echo ${a:3}
nkai,gaoshuo
[root@master passwd]# echo ${a:3:6}
nkai,g
[root@master passwd]# echo ${a: -3}
huo
[root@master passwd]# a="tiankai,,,gaoshuo"
[root@master passwd]# echo ${a##*,}
gaoshuo
[root@master passwd]# echo ${a#*,}
,,gaoshuo
[root@master passwd]# echo ${a%,*}
tiankai,,
[root@master passwd]# echo ${a%%,*}
tiankai

2. if条件语句

  • if条件

    • 单分支

      #命令1执行成功,就执行命令2,如果命令1执行不成功,不执行命令2
      if  条件(命令1) ;then命令2
      fi
      
    • 双分支

      #命令1执行成功,就执行命令2,如果命令1执行不成功,执行命令3
      if  条件(命令1) ;then命令2
      else命令3
      fi
      
    • 多分支

      #条件1满足,就执行命令2,如果条件1不满足,看条件2是否满足,以此类推,如果都不满足,执行else里的命令4
      if  条件1(命令1) ;then命令2
      elif 条件2;then命令3
      else命令4
      fi
      
  • return

    • 函数里的给一个返回值
    • 范围是0~255

3. 循环语句

3.1 for循环

  • 格式

    for   变量  in  集合
    do命令
    done
    
    #i是一个变量,{1..10} 表示1 2 3 4 5 6 7 8 9 10 的集合
    for  i  in  {1..10}
    doecho  "sanchuang $i"
    done
    
  • for循环结合seq和位置变量 控制循环次数

    read  -p "请输入你需要循环的次数: "  num
    #执行seq 产生数字的序列
    for  i  in  $(seq $num)
    doif (( $i == 6 ));thenecho  "nongda 666"elseecho  "sanchuang $i"fi
    

3.2 while循环

  • 格式

    while 条件
    do命令
    done
    
    i=1
    while (( i<=10 ))
    doecho "sanchuang $i"
    done
    
  • 和read结合使用进行传参

    #uname表示第一个参数,chinese表示第二个参数,math表示第二个参数,english表示第四个参数
    while read  uname  chinese math english 
    do#对chinese成绩进行判断,大于等于90的就输出if [[ $uname == "name" ]];thenfiif (( $chinese >= 90 ));thenecho "$uname  $chinese"fi
    done < grade.txt
    
  • 跳出循环

    • break:直接跳出循环,不再执行后面的语句

    • continue:跳出当前循环,进入下一次语句

  • exit

    • 结束程序

4. 函数

  • 函数
    • 定义

    • 调用

    • 返回值和输出结果

      • 返回值是命令执行完成后给bash的
      • 输出结果是名执行的过程中输出到屏幕上的,给人看的

5 计划任务

计划任务: 规定某个时间去做某件事情
crond进程: 到点帮助我们去执行脚本

  • crontab -e 新增计划任务

    格式:分 时 日 月 星期

    时间设置的一些特殊表示方法:

    (1)*表示任意时间

    (2),表示间隔的多个不连续的时间点

    (3)/n表示指定间隔的时间频率

    (4)~表示连续的时间范围

    例如:

    (1)0 7 * * *–每日的七点

    (2)0 12 */3 * * --每隔三天的12点

    (3)30 22 * * 1,3,5–每周1、3、5的22点30分

    (4)0 8~18 * * *–每天8到18点

  • crontab -l 查看当前用户有哪些计划任务

    [root@sanchuang 10-31]# crontab -l
    30 2 * * * bash /shell/10-31/backup_log.sh
    
  • 删除计划任务

    • 删除/var/spool/cron文件里的行,或者加#注释
    • crontab -r删除 或者 rm -rf 文件
  • 计划任务的存放路径:cd /var/spool/cron/

五. 文本处理

1.正则表达式

正则表达式: 按照某种正确规则,将字母,数字,特殊符号组合成一个公式,用来表达某个意思

  • ^ 表示以什么开头;$ 表示以什么结尾;. 表示任意单个字符;.* 表示所有的字符
  • \w 表示字母、数字、下划线;\W 表示特殊符号
  • \s 匹配空白字符(空格和tab)
  • \b 单词的边界线;\1 表示标签1

2. 文本过滤grep

2.1 grep

用途:在文件中查找并显示包含指定字符串的

格式:grep [选项]… 模式 目标文件

  • -i:查找时忽略大小写 --ignore-case

    [root@master passwd]# cat mobile_phone.txt |grep -i "xiaomi"
    xiaomi XIAOMI
    
  • -e 支持正则表达式 相当于egrep

  • -n:显示符合模式要求的行号 --line-number

    [root@master passwd]# egrep -n -i "xiaomi|oppo" mobile_phone.txt 
    1:xiaomi XIAOMI redmi
    5:oppo OPPO 
    
  • -o:只显示匹配的内容 --only-matching

    [root@master passwd]# egrep -n -o "xiaomi|oppo" mobile_phone.txt 
    1:xiaomi
    5:oppo
    
  • -v:取反查找,与条件相反的行

    #输出没有数字的行,一行一行去比较
    [root@master passwd]# cat mobile_phone.txt |grep -v "[0-9]"
    xiaomi XIAOMI redmi
    SAMSUNG
    MEIZU
    HUAWEI huawei HONOR
    

    -v是一行一行查找,而取反是单个字符查找如:【0-9】

  • -r:递归查找,不知道文件具体位置时搜索所有文件

    [root@master ~]# grep -r xiaomi
    passwd/mobile_phone.txt:xiaomi XIAOMI redmi
    

2.2 egrep

对扩展正则的支持 等价于grep -e

  • 基本正则->单个字符

    • ^ 表示以什么开头或者取反(只要是^这个字符是在中括号[]的字符集中被使用的话就是表示字符类的否定)

      [root@lamp-test lianxi]# df -Th|grep "^t" 以t开头
      #以数字开头
      [root@master passwd]# echo 98 sh al | grep -o "^[0-9]"
      #取反,显示不是数字的
      [root@master passwd]# echo 98 sh al | grep -o "[^0-9]"
      
    • $ 表示以什么结尾

      [root@lamp-test lianxi]# df -Th|grep "m$" 以m结尾
      #以/结尾的行
      [root@master passwd]# cat web.txt|grep "/$"
      sdsdh/
      sdfadf//
      
    • . 表示任意单个字符->相当于红中

    • ^$ 空行

      [root@master passwd]# cat web.txt|grep "^$"
    • .* 表示所有的字符

  • 拓展正则

    | 表示或,[0-9]表示0-9的一个数字,[89]表示8和9

    • ?表示0个或1个前面的字符
    • +表示1个或者多个前面的字符
    • *表示0个或者多个前面的字符
    • {n}表示n个前面的字符
    • {n,m}表示n个到m个前面的字符
    [root@sanchuang 10-17]# echo "abc abbc ac"|egrep "ab?c"
    abc  ac
    [root@sanchuang 10-17]# echo "abc abbc abbbbc ac"|egrep "ab+c"
    abc abbc abbbbc
    [root@sanchuang 10-17]# echo "abc abbc abbbbc ac"|egrep "ab*c"
    abc abbc abbbbc ac
    [root@sanchuang 10-17]# echo "abc abbc abbbbc ac"|egrep "ab{4}c"
    abbbbc
    [root@sanchuang 10-17]# echo "abc abbbbbbc abbbbc ac"|egrep "ab{4,8}c"
    abbbbbbc abbbbc 
    
  • 单词的边界的界定

    \<  表示词首部 ---》\b  
    \>  表示词尾部 --->\b
    [root@sanchuang 10-17]# echo "chenjinhuai  chenjinjin chenjingui"|egrep "\<chen"
    chenjinhuai  chenjinjin chenjingui
    [root@sanchuang 10-17]# echo "chenjinhuai  chenjinjin chenjingui"|egrep "jin\>"
    chenjinjin
    
  • 案例:ip、网址、邮箱正则表达式、时间

3. 文本截取

3.1 awk截取

3.2.1 语法
  • 完整语法:awk’BEGIN{commands}pattern{commands}END{commands}’ file1
    处理前执行的命令 每行执行的命令 处理后执行的

    [root@sanchuang 10-13]# awk 'BEGIN{print "阿里股东集资"} $2 >=2{sum += $2;print $0}END{print "阿里股东集资总金额:" sum}' alijiujiu.txt 
    阿里股东集资
    zhangtt	10
    tianyang 100
    阿里股东集资总金额:110
    
  • 基础语法:awk -F 分隔符 ‘/模式/{动作1;动作2}’ 输出文件

    [root@localhost ~]# awk -F: '/bin/{print $NF}' /etc/passwd
    /bin/bash
    
3.2.2 内置的变量
  • NR 行号,记录的编号 number of record

  • NF 列数,字段数,一行有多少列 number of field

    [root@localhost ~]# df|awk '{print NR,$(NF-1)}'
    1 已用%
    2 0%
    3 0%
    4 1%
    5 0%
    6 8%
    7 15%
    8 0%
    
  • FS 当前的输入分隔符,默认是空白字符(空格和tab) field separator

  • OFS 当前的输出分隔符,默认是空格字符(空格) output field separator

3.2.3 基本使用
  • $0是整行,第1列就是$1 第2列就是$2,以此类推

    ‘{print $2}’ 截取第二行并输出

  • 条件的匹配

    • 模糊匹配 ~ !~
    • 精确匹配 >,<,==
  • -F 指定分隔符(默认使用空白作为分隔符)

    #以:或者/为分隔符
    [root@localhost ~]# awk -F[:/] '{print $1,$10}' /etc/passwd
    root bash
    
  • 引用shell变量

    • -V

      [root@sanchuang ~]# name="tianyang"
      [root@sanchuang ~]# echo | awk -v abc=$name '{print abc}'
      tianyang
      
    • 使用双引号, $符号需要接\转义

      [root@master ~]# name="sshd"
      [root@master ~]# awk -F: "\$1 ~ /$name/{print \$1,\$3}" /etc/passwd
      sshd 74
      
3.2.4 if和for
  • if分支

    • if (condition) statement1
    • if (condition) statement1;else statement2
    • if (condition) statement1;else if statement2;else statement3
    awk -F: ' {if (length($2) == 2) print $1,"没有设置密码";else if (length($2) ==0 ) print $1,"密码为空" }' /etc/shadow  >>$log_file
    
  • for循环

    [root@master passwd]# echo 1 2 3 4 5 6|awk '{for(i=1;i<=NF;i++)sum+=$i;print sum}'
    21
    
3.2.5 数组
[root@master passwd]# awk 'NR > 1 {sum[$1] += $2} END{for(i in sum)print i,sum[i]}' bill.txt 
rose 100000
li 1329
feng 650
zhang 450

3.2 cut截取

作用:文件截取命令,截取字符串和列

  • 格式:cut -选项 提取范围 文本文件

    n 第n项
    n- 第n项到行尾
    -m 行首到第m项
    n,m 第n项和第m项;,表示单个的截取
    n-m 第n项到第m项;-表示连续的截取

  • 截取字符串

    • -c 从指定范围中提取字符

      [root@master ~]# echo "shemengjie"|cut -c 1
      s
      [root@master ~]# echo "shemengjie"|cut -c 1-5
      sheme
      
  • 截取列

    • -d 指定分割符 如:-d ‘:’ 指定分隔符为:
    • -f 从指定范围中提取字段
    #首先使用-s将空格压缩,再使用-d指定分隔符
    [root@master ~]# df |tr -s " "|cut -d ' ' -f 1,2
    文件系统 1K-块
    devtmpfs 1918672
    tmpfs 1930540
    tmpfs 1930540
    tmpfs 1930540
    /dev/mapper/centos-root 17811456
    /dev/sda1 1038336
    tmpfs 386108
    

3.3 sort排序

排序命令:默认根据ascii码的大小升序排列,按字母单个单个排序,如果是数字也是默认单个单个排序

  • -k:指定哪一列为排序键

    #指定第二行进行排列
    [root@master ~]# cat sort.txt|sort -k 2
    68	bobo	68
    79	feng	79
    9	liao	9
    83	wang	83
    123	yong	123
    
  • -n:按整数进行排序–>默认是升序 number

    [root@master ~]# cat sort.txt|sort -n
    9	liao	9
    68	bobo	68
    79	feng	79
    83	wang	83
    123	yong	123
    
  • -r:递减排序 reverse 颠倒,相反的

    [root@master ~]# cat sort.txt|sort -nr
    123	yong	123
    83	wang	83
    79	feng	79
    68	bobo	68
    9	liao	9
    
  • -t:指定字段分割符(默认是空白)空白=空格+tab

    sort -t “:” 以冒号作为分隔符
    

3.4 uniq去重

作用:去除连续重复的行

  • -c 统计重复的次数

    [root@master ~]# cat test.txt |sort|uniq -c5 gaoshuo5 liaobo5 tianyang1 weiyi5 wudi5 zhangwenzhou
    
  • -d 只是显示重复的行

    [root@master ~]# cat test.txt |sort|uniq -d
    gaoshuo
    liaobo
    tianyang
    wudi
    zhangwenzhou
    
  • -u 只是显示不重复的行

    [root@master ~]# cat test.txt |sort|uniq -u
    weiyi
    

4.文本替换sed

文本替换和处理的命令,可以显示不连续的行

脚本中修改文本和文本替换的最佳工具

  • 模式空间和保留空间

    • x 交换保持空间和模式空间的内容

    • h 将模式空间替换成保留空间

      H 追加模式空间来保留空间

    • g 将保留空间替换成模式空间

      G 追加保留空间到模式空间

    • n 读取下一行到模式空间中

      N 追加下一行到模式空间中

4.1 基本选项

  • -i 直接对源文件进行修改

    #对源文件进行修改
    [root@sanchuang shell]#sed -i 's/xu/zhang/g' user_pwd.txt 
    #不对源文件修改直接输出
    [root@sanchuang shell]# cat user_pwd.txt |sed  's/xu/zhang/g'
    
    • \1 标签1;\2 标签2

      #将一行分成两个部分,标签1表示第一个部分,标签2表示第二个部分
      [root@master passwd]# cat password
      root:x:0:0:root:/root:/bin/bash
      [root@master passwd]# sed -ri 's/(^[0-Z]+)(.*)/\1/' password   #相当于只留下第一个部分
      [root@master passwd]# cat password
      root
      
  • -r 支持扩展正则

    [root@master passwd]# sed -n '/bash/p' /etc/passwd
    root:x:0:0:root:/root:/bin/bash
    liaobo:x:1000:1000::/home/liaobo:/bin/bash
    # !p表示不显示
    [root@master passwd]# sed -rn '/^#|^$/!p' /etc/grub2.cfg
    
  • -n 只显示符合条件的行;1p 显示第1行;$p 最后一行(p print)

    [root@master passwd]# cat grade.txt |sed -n '1p;3p'
    name	chinese	math	english
    tom	90	80	99
    [root@master passwd]# cat grade.txt |sed -n '1,3p'
    name	chinese	math	english
    cali	80	91	82
    tom	90	80	99
    #步长为3,就是显示第1行,第4行,第7行……
    [root@master passwd]# cat grade.txt |sed -n '1~3p'
    name	chinese	math	english
    lucy	99	70	75
    

4.2 参数的引用

  • 引用参数,使用双引号

    [root@master passwd]# num=1
    [root@master passwd]# cat grade.txt |sed -n "$num,2p"
    name	chinese	math	english
    cali	80	91	82
    
  • sed 查找的时候

    1.根据行号匹配
    2.根据模式匹配–》字符串查找

4.3 sed的命令

  • a 追加操作 在某行后面插入

    #在第二行后面插入
    [root@master passwd]# sed -i '2a lioabo' grade.txt
    #在所有含有name行的后面插入
    [root@master passwd]# sed -i '/name/a lioabo' grade.txt
    
  • i 插入操作 在某行前面插入

    #在最后一行前面插入
    [root@master passwd]# sed -i '$i lioabo' grade.txt
    #在所有含有jack行的前面插入
    [root@master passwd]# sed -i '/jack/i lioabo' grade.txt
    
  • c 整行替换

    [root@master passwd]# sed '2c liaobo' grade.txt 
    name	chinese	math	english
    liaobo
    
  • s 替换操作

    • 格式:sed -n s/查找内容/替换内容/替换标记 文件

    • 替换标记: 数字表示替换第几个,g全局替换

      #替换改行中第二个cali
      [root@master passwd]# sed -i 's/cali/fengdeyong/2' feng.txt
      #替换改行中所有的cali
      [root@master passwd]# sed -i 's/cali/fengdeyong/g' feng.txt
      
  • d 删除操作

    sed '3,5d' /etc/fstab   #删除3到5行
    
  • & 表示前面找到的内容

    [root@master passwd]# sed -i 's/.at/"&"/' cat.txt
    i have a "fat" cat
    

5.拆分和连接

5.1 split分割

将大文件分割成较小的文件

网络传输的时候,网速比较慢,但是文件比较大,例如:100G的文件,传输需要1天

  • -d, 指定分割文件的后缀为数字

    [root@master passwd]# split -5 password -d sc_
    [root@master passwd]# ls
    password  sc_00  sc_01  sc_02  sc_03  sc_04  sc_05
    
  • -a 指定分割文件数字后缀的长度,如果是1,后缀为0,1,2…;如果是2,则为00,01,02…默认是2

    #长度为3
    [root@master passwd]# split -5 password -d -a 3 sc_
    [root@master passwd]# ls
    password  sc_000  sc_001  sc_002  sc_003  sc_004  sc_005
    
  • -b 指定大小切割

    [root@master passwd]# split -b 100k password -d sc_
    
  • -C 指定每行最大的字节数(保持每行的完整性)

    [root@master passwd]# split -C 100k password -d sc_ 
    

合并: cat sc_* >sc_passwd

5.2 paste粘贴

指令会把每个文件以列对列的方式,一列列地加以合并

[root@master passwd]# cat grade.txt grade2.txt
name	chinese	math	english
cali	80		91		82
tom		90		80		99
lucy	99		70		75
jack	60		89		99
rose	9		89		99
name	chinese	math	english
cali	80		91		82
tom		90		80		99
lucy	99		70		75
jack	60		89		99
rose	9		89		99
[root@master passwd]# paste grade.txt grade2.txt 
name	chinese	math	english	name	chinese	math	english
cali	80		91		82		cali	80		91		82
tom		90		80		99		tom		90		80		99
lucy	99		70		75		lucy	99		70		75
jack	60		89		99		jack	60		89		99
rose	9		89		99		rose	9		89		99

5.3 join合并

用于将两个文件中,指定相同的内容栏目连接起来(只合并一个相同的栏目,默认合并第一个相同的栏目)

[root@master passwd]# join grade.txt grade2.txt
name chinese math english chinese math english
cali 80 	 91 	82 		80 		91 	82
tom  90 	 80 	99 		90 		80 	99
lucy 99 	 70 	75 		99 		70 	75
jack 60 	 89 	99 		60 		89 	99
rose 9 		 89 	99 		9 		89 	99
  • -j 是指定2个文件里相同的字段 后面接第几个字段

    [root@master passwd]# join -j 2 grade.txt grade2.txt
    chinese name math english name math english
    80 		cali 91 	82 	  cali 91 	82
    90 		tom  80 	99    tom  80 	99
    99 		lucy 70 	75    lucy 70 	75
    60 		jack 89 	99    jack 89 	99
    9 		rose 89 	99    rose 89 	99
    

6. 打补丁命令

6.1 patch 修补文件

  • patch [选项] 原始文件 < 补丁文件

  • -pN N表示忽略N层路径

  • -R 还原到老版本

6.2 diff 比较不同

比较两个文件之间的差异,输出不同->就是判断文件是否发生变化

  • -u 将不同的地方放在一起,紧凑易读

    生成补丁:
    [root@lamp-test lianxi]# diff -u  monitor_passwd.sh monitor_passwd_v2.sh   >tov2.patch打补丁: patch 是打补丁的命令
    [root@lamp-test lianxi]# patch monitor_passwd.sh < tov2.patch   通过补丁包tov2.patch给monitor_passwd.sh脚本打补丁[root@lamp-test lianxi]# patch -R  monitor_passwd.sh <tov2.patch   撤销打补丁
    
  • -r 接文件夹的,递归比较文件夹下的的所有文件

  • md5sum 用法和diff一样

六. vim编辑器

1.vim基础

  • 进入vim

    [root@lamp-test lianxi]# vim  zhangyp.txt 
    
  • 交换文件

    交换文件一定会和原文件在同一个目录下,删除就可以

2. 5种模式

2.1.命令模式

  • 删除和剪切

    x 删除光标处的单个字符
    dd 删除当前光标所在行
    #dd 删除从光标处开始的#行内容—>4dd 删除4行
    d^ 删除当前光标之前到行首的所有字符
    d$ 删除当前光标处到行尾的所有字符
    dw 删除一个单词(word),以空格、冒号等符号

  • 复制

    yy 复制整行内容
    #yy 复制从光标处开始的#行内容—>4yy 复制4行

  • 粘贴

    p 粘贴到光标位置后
    P 粘贴到光标位置前

  • 撤销

    u 撤销 undo

  • 查找

    /word 从上而下在文件中查找字符串“word” 如:/bobo 查找bobo
    ?word 从下而上在文件中查找字符串“word”
    n 定位下一个匹配的被查找字符串
    N 定位上一个匹配的被查找字符串

  • 跳转

    1G 第1行
    G 跳到文件的末尾最后一行
    30G 跳到第30行

2.2.从命令模式进入插入模式

i 光标在当前位置进入插入模式
a 光标后退一格并进入插入模式
o 在光标所在行下新起一行并进入插入模式

2.3.末行模式

  • 退出

    • 退出不保存

      :q 如果未对文件做改动则退出 quit
      :q! 强制退出不保存

    • 退出并保存

      :wq 保存当前文件并退出
      :wq! 强制保存当前文件并退出

    • 另存为

      :w 只是保存,不退出 write

      :w/lianxi/sc.txt 另存为/lianxi/sc.txt

    • 保存当前文件

      :x 保存当前文件并退出
      :x! 强制保存当前文件并退出
      ZZ 保存当前文件并退出 —》在命令模式使用

  • 相关设置

    • 行号设置

      :set nu 显示行号 number
      :set nonu 不显示行号

    • 粘贴设置

      :set paste 按照原来的格式进行粘贴

    • tab键设置

      :set ts=4 设置一个tab键占4个空格,默认一个tab占8个

  • 内容替换

    😒/xiaomi/dami/ 替换光标所在行的第1个xiaomi为dami
    😒/xiaomi/dami/g 替换光标所在行里的所有的xiaomi为dami global 全局,全部
    :5,7s/xiaomi/dami/g 将5到7行所有的xiaomi替换为dami
    :%s/xiaomi/dami/g 将所有的行里的xiaomi替换为dami
    :1, s / x i a o m i / d a m i / g 将所有的行里的 x i a o m i 替换为 d a m i : 1 , s/xiaomi/dami/g 将所有的行里的xiaomi替换为dami :1, s/xiaomi/dami/g将所有的行里的xiaomi替换为dami:1,s/apple//g 删除所有行里的apple —》思路:使用空的内容去替换,达到删除的效果
    :1,$s/huawei/harmony/gc 替换的时候要求确认 comfirm 确认

  • 导入其他文件的内容

    :r /etc/filesystems 在当前文件中读入其他文件内容

    :e ~/install.log 打开新的文件进行编辑

  • 跳转

    :1 第1行
    :40 第40行
    😒 最后一行

2.4.替换模式

按R键进入 replace 替换
直接移动光标到某个位置,直接输入内容,就会替换
撤销: 退格键

2.5.可视模式

功能:主要用来选择复制区块文本
在命令模式下,使用v或V键可以进入可视模块
可视或者可视块模式可以复制或者删除一部分单词,选中一部分单词,然后进行操作。

小v 进入 可视模式 visual —》选择一部分 --》可以选择一行或者多行的一部分
大V 进入 可视行模式 VISUAL line --》选择行

ctrl+v 进入 可视块模式 VISUAL block
按y复制 x删除
按p粘贴
另起一行,按o,再按esc,再p

3.多窗口编辑文本

  • tmux +vim 多窗口编辑文本

    Ctrl+b+" 分割出来一个窗口 上下两个窗口

    Ctrl+b+% 分割出来一个窗口 左右窗口

    Ctrl+b+x 关闭当前光标处的小窗口

    Ctrl+b+! 关闭所有小窗口

    显示已有tmux列表 Ctrl+b +s

    Ctrl+b+(方向键)上 上一个窗口

    Ctrl+b+(方向键)下 下一个窗口

    Ctrl+b+(方向键)左 左一个窗口

    Ctrl+b+(方向键)右 右一个窗口

4.展开内容

4.1 tac

  • tac 从最后一行倒着显示出文件的全部内容

4.2 more

  • more 分页显示,适合看有很多行的文件,慢慢看

    • 回车: 下一行

    • 空格: 下一页

    • q 退出 quit

    • b 上一页 back

    • 显示完所有的行,自动退出

4.3 less

  • less 分页显示,适合看有很多行的文件,慢慢看

    • 回车: 下一行

    • 空格: 下一页

    • q 退出 quit

    • b 上一页 back

    • pageup --》pgup 上一页 pagedown --》pgdn 下一页

    • 不退出

七. find查找命令

1. PATH变量

Linux PATH环境变量是决定Shell将到哪些目录中寻找命令或程序的一个参数,它的内容是由一堆目录组成的,各目录之间用冒号 “:” 隔开。

  • 查看PATH环境变量 echo $PATH

    [root@nginx conf]# echo $PATH
    /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/nginx/sbin
    
  • 设置PATH环境变量

    • 临时修改->只对当前的shell 起作用

      PATH=$PATH:/usr/local/nginx/sbin
      
    • 针对当前特定的用户起作用的环境变量->最安全最常用

      PATH=$PATH:/usr/local/nginx/sbin
      echo "PATH=$PATH" >>/root/.bashrc
      

      .bashrc 这个文件主要保存个人的一些个性化设置,如命令别名、路径等, 是bash的个人配置文件,在用户目录下,是个隐藏文件.

    • 对所有的用户的都起作用的环境变量

      PATH=$PATH:/usr/local/nginx/sbin
      echo "PATH=$PATH" >>/etc/profile
      

2. which

  • which 根据名字查找我们执行的命令存放的路径

    • [root@sc-server liuxiaoxiao]# which ip /usr/sbin/ip

    • /usr 存放unix系统里的资源文件(程序) unix system resource

    • bin 存放二进制文件的目录 binary linux里的命令很多都是使用c语言编写的

    • sbin 存放有权限的用户的二进制文件的目录 super user binary —》root

3. whereis

  • whereis 可以根据名字查询命令存放的路径,同时还会告诉我们man手册的路径

    which 和whereis 只能到PATH指定的路径下查找命令

4. locate

  • locate 根据名字模糊查找文件路径

    [root@localhost ~]# updatedb   更新数据库 locate查找新建的文件时,必须更新数据库,因为locate不是从根目录查找,而是从数据库文件里面查找
    

5. find

  • find 根据条件命令查找文件或文件夹

    语法 find  [查找范围]   [查找命令]    [具体的动作]find     /    -name "hello"    -exec cp {} /backup \;
    
    • -name 根据名字来查找

    • -iname 根据不区分大小写的名字查找

      [root@sc zengqilei]# find  /  -iname  "*xiaolei*"  不区分大小写
      
    • -size 根据大小来查找

      [root@sc zengqilei]# find  /boot  -size  +1M
      
      • +10M 大于10M的文件

      • -10M 少于10M

    • -mtime 根据文件的修改时间查找—>24小时(按天)之前

      • +7 7天前的文件

        [root@sc lianxi]# find  . -mtime +7
        
      • -7 7天内的文件

    • -mmin 根据文件的修改时间—>分钟查找

      [root@sc lianxi]# find  . -mmin +20   20分钟之前
      
    • -type 根据文件类型查找

      • f 普通的文件 file

      • d 文件夹 directory

        [root@sc zengqilei]# find   .   -type  d
        
      • l 链接文件 link

      • c 字符设备文件 character

      • b 块设备文件 block

      • s socket文件

      • p pipe管道文件

        [root@sc dev]# find  /  -type p
        
    • -user 按文件属主查找

      [root@localhost lianxi]# find  /lianxi  -user  root
      /lianxi    /lianxi/xiajingwei    /lianxi/zhaoyujia    /lianxi/liuzz.txt   /lianxi/feiruixi.tx
      
    • -perm 按文件权限查找

    • -newer 按比某个文件更新的查找

    • -maxdepth 查找文件的时候目录的深度

      • 1 代表当前文件

      • 2 代表下一级文件

      • 3 下一级的下一级的目录,以此类推

        [root@localhost china]# find  . -maxdepth 3 -name "nongda.txt"
        ./hunan/changsha/nongda.txt  ./hunan/nongda.txt
        
    • 条件的组合问题(默认情况下-a的优先级高,先执行逻辑与,再执行逻辑或)

      • -o :逻辑或,只要所给的条件中有一个满足,寻找条件就算满足 or

      • -not :逻辑非,在命令中可用“!”表示。该运算符表示查找不满足所给条件的文件

      • -a:逻辑与,系统默认是与,可不加,表示只有当所给的条件都满足时,寻找条件才算满足。 and

    • [root@localhost lianxi]# find /lianxi -name hello -exec rm -rf {} ;

      • -exec 执行 execute
    • rm -rf 删除的命令

      • {} 代表前面find命令查找到的内容 容器
    • ; find 执行命令的结束符号

八. tar压缩命令

1.压缩包下载

  • curl
[root@localhost china]# curl  -O  https://nginx.org/download/
[root@localhost china]#wget https://nginx.org/download/
  • curl 是linux里的字符界面的浏览器

  • -O 下载

  • wget

    [root@localhost china]# wget  https://nginx.org/download/
    

2.zip与unzip

  • zip压缩

    [root@hunan-wangzhe-5 lianxi]# zip  chenyamin.zip  chenyamin.txt压缩文件              源文件
    
  • unzip解压

    [root@hunan-wangzhe-5 backup]# unzip  passwd.zip   解压passwd.zip文件 
    会产生一个passwd的文件
    

3.gzip和gunzip

  • gzip 是直接在源文件上打压缩包的

    [root@hunan-wangzhe-5 backup]# gzip  passwd
    
  • gunzip 解压

    [root@hunan-wangzhe-5 backup]# gunzip  passwd.gz
    
  • xz和unxz

    • xz 压缩文件(压缩时间长,效果好)

      [root@hunan-wangzhe-5 backup]# xz  passwd
      
    • unxz 解压缩

      [root@hunan-wangzhe-5 backup]# unxz  passwd.xz
      

4.bzip2和bunzip2

  • bzip2 压缩

    [root@hunan-wangzhe-5 backup]# bzip2  passwd
    
  • bunzip2 解压

    [root@hunan-wangzhe-5 backup]# bunzip2  passwd.bz2
    
  • zcat 查看压缩文件内容

    [root@hunan-wangzhe-5 backup]# zcat passwd.gz  查看.gz压缩文件里的内容的
    

5. tar

  • 归档文件 理解为是一个打包文件,这个文件里可以包含多个文件 -->没有压缩的

  • tar 制作归档文件,解压归档文件,可以对文件和文件夹进行压缩

    • 常用命令选项

      -c 创建 .tar格式的包文件 creat 创建

      -x 解开 .tar格式的包文件 Extract 提取

      -v 输出详细信息,显示打包过程

      -f 表示使用归档文件 file

      -t 列表查看包内的文件 list

      -p 保持原文件的原来属性

      -P 保持原文件的绝对路径

      -z 背后tar命令调用gzip对归档文件进行压缩

      -j 背后tar命令调用bzip2对归档文件进行压缩

      -J 背后tar命令调用xz对归档文件进行压缩

    • 创建 -cf

      语法:tar [选项] 归档文件名 源文件或目录

      cf,czf,cjf,cJf

      -z —>背后tar命令调用gzip对归档文件进行压缩 -czf .tar.gz

      [root@localhost tar]# tar  -czf   passwd.tar.gz   passwd
      boot  hosts  passwd  passwd.tar.gz
      

      -j —>背后tar命令调用bzip2对归档文件进行压缩

      -J —>背后tar命令调用xz对归档文件进行压缩 -cJf .tar.xz

      [root@localhost tar]# tar  cJf  passwd.tar.xz    passwd
      boot  hosts  passwd  passwd.tar.gz
      
    • 查看 -tf

      [root@localhost tar]# tar tf hosts.tar.xz
      
    • 解压 -xf 先进入文件夹再解压

      [root@localhost lihaihui]# tar xf passwd.tar.xz -C /wangbaiwen/
      

      解压包的时候,默认是解压到当前目录,如果需要指定路径,需要使用-C选项指定路径就可以了

    • –exclude 排除

      题目:将/boot目录下的除grub目录以外的所有文件都备份到/bak目录下叫no-grub.tar.gz答案:[root@fengdeyong lianxi]# tar --exclude=/boot/grub -czf  /bak/no-grub2.tar.gz  /boot其他实列
      [root@fengdeyong lianxi]# tar --exclude=/boot/{grub2,loader} -czf  /bak/no-grub2.tar.gz  /boot
      

九. 重定向

重定向: 将本来应该在屏幕上的输出,重定向到文件里

1.正确的输出重定向

  • 正确的输出重定向

    > 正确的输出重定向

    将成功执行的命令在屏幕上的输出重定向到文件里,如果文件不存在就新建,如果文件存在就覆盖原来的内容

    • [root@localhost bak]# echo 123456  >1.txt
      

    >> 追加正确输出重定向

    将成功执行的命令在屏幕上的输出重定向到文件里,如果文件不存在就新建,如果文件存在就不覆盖原来的内容,只是在文件的末尾追加内容

    • [root@localhost bak]# echo  123456  >>1.txt 
      

2.错误的输出重定向

  • 错误的输出重定向

    2> 将错误执行的命令在屏幕上的输出重定向到文件里,如果文件不存在就新建,如果文件存在就覆盖原来的内容

    2>> 追加错误输出重定向

    将错误执行的命令在屏幕上的输出重定向到文件里,如果文件不存在就新建,如果文件存在就不覆盖原来的内容,只是在文件的末尾追加内容

3.输出重定向

  • 不管正确的还是错误的都重定向到同一个文件

    &> 不管正确的还是错误的都重定向

    将执行的命令在屏幕上的输出重定向到文件里,如果文件不存在就新建,如果文件存在就覆盖原来的内容

    &>> 追加正确的还是错误的都重定向

    将命令的执行结果输出到指定的文件中,而不是直接显示在屏幕上,不会覆盖原来文件里的内容,只是在文末末尾追加,如果文件不存在会新建

    id rootroot 1>zeng.txt 2>&1 --》正确和错误的都往同一个文件里输入,会替换;&1表示跟着上一步输入类似于指针
    id rootroot 1>>zeng.txt 2>&1 --》正确和错误的都往同一个文件里输入,不会替换,只会追加

5.重定向标准输入

  • 重定向标准输入 <

    • < 将命令中接收输入的途径由默认的键盘更改为指定的文件

      [root@lamp-test lianxi]# wc -l huangjuan.txt 
      16 huangjuan.txt
      [root@lamp-test lianxi]# wc -l < huangjuan.txt 
      16
      
    • << 追加输入重定向

6.输入和输出重定向组合

  • 输入和输出重定向组合

    [root@lamp-test lianxi]# cat >feng.txt  <<EOF
    #<<EOF可以持续输入直到输入EOF停止,将这些输入给feng.txt,再cat出来
    [root@lamp-test lianxi]# cat >>feng.txt  <<end
    #<<end可以持续输入直到输入end停止,将这些输入追加给feng.txt,再cat出来
    
  • /dev/null 是一个特殊的文件,任何的内容重定向到这个文件都不保存,会消失

7. tee

  • tee 在屏幕上输出,同时也重定向到一个文件里

    • -a 实现追加输出重定向的功能

      [root@lamp-test lianxi]# echo "xiaoleizige123" |tee leige.txt
      xiaoleizige123
      [root@lamp-test lianxi]# echo "xiaoleizige123" |tee -a leige.txt
      xiaoleizige123
      [root@lamp-test lianxi]# cat leige.txt 
      xiaoleizige123
      xiaoleizige123
      

十. 用户管理

1.用户相关的命令

  • useradd 新建用户

  • userdel 删除用户

    [root@localhost lianxi]# userdel -r liu1
    -r  删除用户的时候,随便删除用户的家目录和邮箱
    
  • passwd 设置密码

  • mkpasswd 产生密码

    -l    the length of the password  长度
    -d   the minimum number of digits  数字
    -c  the minimum number of lowercase alphabetic characters   小写
    -C  flag  defines the minimum number of uppercase alphabetic characters  大写[root@localhost lianxi]# mkpasswd -l 15 -d 2 -C 3
    )ej52pkIqHXoxxz
    
  • chpasswd 批量更新密码

     [root@localhost lianxi]# echo  "peng3:123456" |chpasswd   将peng3的密码设置为123456
    
  • id 判断是否有这个用户

    [root@localhost ~]# id  quanyan
    uid=8903(quanyan) gid=8904(quanyan)=8904(quanyan)
    
  • su 切换用户登录

  • exit 退出

2. 用户文件

  • /etc/passwd 存放用户信息的文件

  • /etc/shadow 存放用户密码的文件

    !! 和* 表示没有设置密码,默认没有设置密码的用户不允许远程登录

  • /etc/group

  • /proc目录:存放是linux内核里的内容 process

  • /dev 存放设备文件的 device 键盘,鼠标,显示器,磁盘等设备 一个设备会有相关文件和它对应

  • c开头的文件是字符设备文件: 与输入和输出字符相关的文件 character 字符

3.输入和清空文件

  • –stdin 标准输入 standard input

    • 选项的作用: 从管道符号传递过来的密码,当做从键盘输入

      [root@localhost lianxi]# echo  123456 |passwd  peng1  --stdin
      
  • 清空文件内容 >

    [root@localhost lianxi]# >user_passwd.txt  清空文件内容,不删除文件
    

4.组管理

  • groupadd
  • groupdel

5.登录日志

  • w 查看当前linux系统用户登录的信息

    • user 登录的用户名

    • TTY 表示是终端的类型 terminate type

      ty1 ~ tty6 -->真正的终端

      pts/0 ~ n -->伪终端(模拟出来的终端如xshell)

    • from 从哪里登录的linux系统

    • WHAT 正在终端运行的命令

  • lastlog 哪些人登录过,哪些人从来没有登录过

  • last 查看最近有哪些用户登录了linux系统

十一. 权限

1. 权限介绍

  • 访问权限

    可读(read):允许查看文件内容、显示目录列表 -> 字符表示:r 数字表示:4
    可写(write):允许修改文件内容,允许在目录中新建、移动、删除文件或子目录 -> 字符表示:w 数字表示:2
    可执行(execute):允许运行程序、切换目录 -> 字符表示:x 数字表示:1

  • 归属(所有权)

    文件拥有者(owner):拥有该文件或目录的用户帐号 user --》u
    属组(group):拥有该文件或目录的组帐号 --》g
    其它人(others):除了属主和属组的其他人 --》o
    all 所有的人 --》a

  • 三个时间

    最近访问时间 access time --》atime

     cat  只要我们读取里面的内容   例如:cat
    

    最近更改时间 modify time --》mtime

     更改文件里的内容  vim
    

    最近改动时间 change time --》ctime

    改动文件的属性:拥有者,组,权限,大小,时间,名字
    

2.chmod修改权限

  • chmod change mode->修改模式

    • 使用字符串 rwx

      u 用户  g 组  o其他
      [root@sc-server feng]# chmod u+w,g=r-x,o=r-- echo.sh
      [root@sc-server feng]# chmod -x echo.sh   全部删除执行的权力
      [root@sc-server feng]# chmod +x echo.sh   全部增加执行的权力
      
    • 使用数字 4 2 1分别代表w r x

      [root@sc-server feng]# chmod 755 echo.sh
      

3. 更改组

  • chown ->change owner and group更改文件所有者和组

    • 必须root使用

    • 用户和组必须存在

    • 格式

      chown 属主 文件 chown :属组 文件

      chown 属主:属组 文件

    [root@sc-server feng]# chown  zhangzhen  /outman  修改用户[root@sc-server feng]# chown zhaoyujia:mingjiao /outman/  修改用户和组
    
  • chgrp 修改组

    格式 chgrp 属组 文件

  • umask 默认权限掩码->用默认的umask命令控制默认权限,临时有效

  • 常用命令选项
    -R:递归修改指定目录下所有文件、子目录的权限

4.隐藏属性

  • chattr 设置文件的隐藏属性

    ​ -r 递归修改

    ​ -a 只能往文件或文件夹里追加内容,不能删除和修改内容 --》只增不减 append 附加追加

    ​ -i 锁定保护文件->不能动文件或者文件夹里的内容 ,不能能增加和删除,不能修改 immutable (i) 不变的

  • lsattr 查看文件隐藏属性

    ​ -r 递归修改

    ​ -d 查看目录

    [root@lamp-test lianxi]# chattr +a changde  
    #给changde文件夹增加a隐藏属性,该文件夹只能增不能减
    [root@lamp-test lianxi]# lsattr -d changde
    -----a---------- changde[root@lamp-test lianxi]# chattr +i songzhiqiang/
    #给songzhiqiang文件夹增加i隐藏属性,该文件夹被保护
    [root@lamp-test lianxi]# lsattr -d songzhiqiang/
    ----i----------- songzhiqiang/
    [root@lamp-test songzhiqiang]# mkdir feng
    mkdir: 无法创建目录"feng": 权限不够
    

5.SET位权限

  • 主要用途

    ​ 为可执行(有x权限的)文件设置,权限字符为"s"

    ​ 其他用户执行该文件时,将拥有主或属组用户的权限

  • SET位权限类型

    • suid

      表示对属主用户增加SET位权限->普通用户在执行命令的时候,会以命令的拥有者(root)的身份去执行

      如果不管控会导致系统权限泛滥,出现安全问题

      [root@lamp-test bin]# chmod u+s mkdir
      [root@lamp-test bin]# ll mkdir
      -rwsr-xr-x. 1 root root 79864 1031 2018 mkdir
      
    • sgid

      表示对属组内的用户增加set位权限

    • sticky 粘滞位权限->为公共目录(如权限为777)设置,权限字符为"t"

      作用:用户不能删除该目录中的其他用户的文件

6. ACL

一个文件/目录的访问控制列表,可以针对任意的用户/组使用权限字符分配rwx权限

  • 格式:setfacl 选项 规则 文件
  • -m 新增或修改acl中的规则 modify
  • -b 删除所有acl规则
  • -x 删除指定的acl规则
  • 查看ACL->getfacl 指令
[root@lamp-test 11-26]# setfacl -m u:song:rwx test/ 单独给用户设置权限
[root@lamp-test 11-26]# setfacl -m g:xiyouji:rwx test  单独给组设置权限
[root@lamp-test 11-26]# setfacl -b test/  删除所有的额外的权限

7.继承与授权

  • 继承

    一个用户属于某个组会继承这个组的权限。

    1.主要组
    2.次要组
    

    用户的主要组(有效组)属于某个组,会继承这个组的权限,如果是附属组属于某个组,也会继承

    • 拒绝权限高于一切 —》针对用户
    • 一个组允许,一个组拒绝 —》允许
  • sudo 授权 ->给root用户分忧

    Linux里root用户权限最大
    关机、重启系统、配置IP地址、格式化磁盘、mount等
    普通用户权限非常小

    Ubuntu中使用安全性命令时使用sudo授权

    CentOS中修改/etc/sudoers 文件来授权

    定义命令的别名
    Cmnd_Alias USERMANAGER = /usr/sbin/useradd, /usr/sbin/userdel, /usr/sbin/groupadd, /usr/bin/passwd

    授权使用别名
    huang ALL=USERMANAGER
    %fumaye ALL=USERMANAGER

十二. 系统性能监控

1. 系统的性能指标

1.cpu top
2.memory 内存 free -m
3.磁盘 (容量、IO速度)
4.网络(流量带宽) --》100Mb/s、1000Mb/s
5.服务(进程 ps aux、端口netstat -anplut )

全能命令:dstat -am glances

2. 进程与线程

命令执行的背后

1.进行shell解析,在磁盘中根据PATH变量找到IP命令存放的位置
2.shell会将创建进程的信息传递给内核,可以理解为进行系统调用fork()、exec()等
3.内核会去检查内存是否有足够的空间剩余,如果有,就申请某段内存空间给IP进程,如果没有,就等或者告诉shell创建进程失败 OOM
4.申请内存给ip进程后,内核先会创建pcb的数据结构,然后复制磁盘里的代码到内存里分配的空间,并启动ip进程
5.在内存中运算后将得到的结果返回给shell解释器,shell在返回结果给用户

2.1 进程

进程:正在内存里运行(进行)的程序简称进程

组成:pcb+code+data

  • PCB 进程控制块 process control block

    • 进程标识符号pid->进程号
    • 文件描述符fd(文件句柄) ->文件编号 一个进程打开了很多文件,对每个文件进行编号,这个编号就是文件描述符
      • id
      • 文件指针:里面存放的是一个文件的地址
    • 进程标识信息(uid,gid)
    • 进程状态(state)
    • 定时器(time),位置,user等
  • code 程序代码

  • data 进程产生的数据

    os.geteuid()  effective user id  有效的用户id 
    os.getpid()   进程号
    os.getuid()   获取进程的user id 是哪个用户启动的进程
    
  • 进程类型

    • 僵尸进程:子进程退出,父进程没有使用wait()系统调用去回收子进程的pcb,导致子进程的信息任然在内核空间里,消耗了内存空间,死而不化像僵尸一样存在。

      杀死僵尸进程->杀死它的父进程

    • 孤儿进程:杀死父进程,子进程认systemd为父进程,叫做孤儿进程

程序和进程:1个程序可以对应多个进程,但1个进程只能对应1个程序。进程和程序的关系犹如演出和剧本的关系。

2.2 进程三个状态

并发: 在一段时间内同时发生的事情 --》例如1分钟内 --》一段时间内同时发生
并行: 在某个时间点同时发生的事情 --》15:03:01 —》同时发生

2.3 进程的通信方式

  • 进程和进程之间通信的方式

    • socket 槽

      • 1.文件socket

        socket=/data/mysql/mysql.sock->实现mysql和mysqld的通信

      • 2.网络socket

        格式ip:port 192.168.0.163:3309->网络中通过ip地址找到对方,是实现不同的电脑之间的不同的进程之间的通信的

    • 信号:处理异步事件的方式

      hup信号:告诉内核去杀死session相关的子进程

      nohup信号:告诉bash子进程屏蔽hup信号(只能屏蔽hup信号)

      trap: 可以捕捉除了9号信号之外的其他信号。

      9号信号无法屏蔽
      trap  "echo i am busy"  1  2 9 15
      
    • 信号量:进程间通信处理同步互斥机制->相当于锁

    • pipe 管道

    • 共享内存

    • 消息队列

  • 会话(session): 一组程序在背后运行,完成很多事情

    一个session可能会有一个session首进程,而一个session首进程可能会有一个控制终端。
    一个进程组可能会有一个进程组首进程。进程组首进程的进程ID与该进程组ID相等。

    SIGHUP会在以下3种情况下被发送给相应的进程:
    1、终端关闭时,该信号被发送到session首进程以及作为job提交的进程(即用 & 符号提交的进程)
    2、session首进程退出时,该信号被发送到该session中的前台进程组和后台进程组中的每一个进程
    3、若进程的退出,导致一个进程组变成了孤儿进程组,且新出现的孤儿进程组中有进程处于停止状态,则SIGHUP和SIGCONT信号会按顺序先后发送到新孤儿进程组中的每一个进程。
    系统对SIGHUP信号的默认处理是终止收到该信号的进程。所以若程序中没有捕捉该信号,当收到该信号时,进程就会退出。

    & 作用就是让这个进程在后台运行,不在前台运行
    设陷阱(或夹子、捕捉器)捕捉 trap

2.4 线程

组成:tcb+code+data

  • 线程(thread)是操作系统能够进行运算调度的最小单位

  • 它被包含在进程之中,是进程中的实际运作单位

  • 一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

2.5 kill killall pkill

  • kill 根据进程名来杀死

    信号编号信号名含义
    1HUP表示让进程重启,挂掉电话线或终端连接的挂起信号,这个信号也会造成某些进程在没有终止的情况下重新初始化,调度sighup信号
    2INT表示结束进程,但并不是强制性的,常用的 “Ctrl+C” 组合键发出就是一个 kill -2 的信号,调度sigint信号(interrupt)
    3QUIT退出。
    9KILL强制杀死进程,调度sigkill信号对应的处理程序
    15TERM正常结束进程,是默认信号,调度sigterm信号(terminate)
  • killall 根据名字来杀死进程

    [root@fengdeyong ~]# killall -9 vim
    
  • pkill 根据终端号来杀死进程

    pkill -9 -t pts/0
    

3. cpu

#查看cpu的信息
[root@sanchuang proc]# cat /proc/cpuinfo   
[root@sanchuang proc]# lscpu

3.1 CPU组成

  • 构成cpu的主要部件:运算器控制器寄存器

  • CPU使用率:用户态CPU使用率和系统态CPU使用率

    用户态CPU使用率是指执行应用程序代码的时间占总CPU时间的百分比;系统态CPU使用率是指应用执行操作系统调用的时间占总CPU时间的百分比。系统态CPU使用率高意味着共享资源有竞争或者I/O设备之间有大量的交互。提高应用性能和扩展性的一个目标是尽可能降低系统态CPU使用率。

3.2 上下文切换

  • 上下文切换:一个进程进入CPU,另外一个进程出去

    如果可运行的线程数大于CPU的数量,那么OS最终会强行换出正在执行的线程,从而使其他线程能够使用CPU,引起上下文切换,它会保存当前运行线程的执行上下文,并重建新调入线程的执行上下文。
    上下文切换又分为2种:让步式上下文切换和抢占式上下文切换。前者是指执行线程主动释放CPU,与锁竞争严重程度成正比,可通过减少锁竞争来避免;后者是指线程因分配的时间片用尽而被迫放弃CPU或者被其他优先级更高的线程所抢占,一般由于线程数大于CPU可用核心数引起,可通过调整线程数,适当减少线程数来避免。

3.3 调度算法

  • 调度算法:根据系统的资源分配策略所规定的资源分配算法
    • cfs 完全公平调度算法

3.4 top命令

  • 操作选项

    • 按q退出 quit
    • 按数字 1 查看cpu每个核的使用率
    • M:根据驻留内存大小进行排序; memory
    • P:根据CPU使用百分比大小进行排序; processer
    • shift+< > 根据其他的列来排序
    • h 查看帮助,可以使用哪些命令
    -n  1  刷新1次就退出
    [root@lb-1 nginx]# top -n 1 
    设置刷新时间3秒
    [root@sc-mysql-master ~]# top -d 3 
    
  • Load Average 平均负载

    top - 17:31:56 up 1 day,  4:49,  2 users,  load average: 0.00, 0.02, 0.05
    

    平均负载(load average)是指系统的运行队列的平均利用率,也可以认为是可运行进程的平均数。top命令中load average显示的是最近1分钟、5分钟和15分钟的系统平均负载->系统平均负载是指过去的1分钟,5分钟,15分钟,处于可运行或不可中断状态的进程的平均数量。

    • 经验值: 安全的平均负载数一般是cpu的个数(4个cpu核心,平均负载为4说明系统很多不忙)

      如果每个CPU内核的当前活动进程数不大于3的话,那么系统的性能还算可以支持。如果每个CPU内核的任务数大于5,那么这台机器的性能有严重问题。

      load average数据是每隔5秒钟检查一次活跃的进程数,然后按特定算法计算出的数值。如果这个数除以逻辑CPU的数量,结果高于5的时候就表明系统在超负荷运转了。

  • 进程状态

    Tasks: 111 total,   1 running, 110 sleeping,   0 stopped,   0 zombie
    

    running --》在cpu里运行
    sleeping --》就绪和阻塞
    stoped --》暂停/挂起
    zombie --》僵死状态 --》僵尸进程

  • cpu状态

    %Cpu(s):  27.0 us,  73.0 sy,  0.0 ni,100.0 id,  0.0 wa,  0.0 hi,  0.0 si,  0.0 st
    

    27.0 us 用户空间占用CPU的百分比。
    73.0 sy 内核空间占用CPU的百分比。
    0.0 ni 改变过优先级的进程占用CPU的百分比
    100.0 id 空闲CPU百分比
    0.0 wa IO等待占用CPU的百分比
    0.0 hi 硬中断(Hardware IRQ)占用CPU的百分比
    0.0 si 软中断(Software Interrupts)占用CPU的百分比

  • 物理内存

    KiB Mem :  3861080 total,   237000 free,   503872 used,  3120208 buff/cache
    

    total 物理内存总量
    used 使用中的内存总量
    free 空闲内存总量
    buffers 缓存的内存量

  • swap交换分区

    KiB Swap:  2097148 total,  2068724 free,    28424 used.  3082880 avail Mem 
    

    total 交换区总量
    used 使用的交换区总量
    free 空闲交换区总量
    cached 缓冲的交换区总量

  • 各进程状态监控

       PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND   1406 mysql     20   0 1774000 225668    636 S   0.3  5.8   2:51.29 mysqld 
    

    PID 进程id
    USER 进程所有者
    PR 进程优先级
    NI nice值。负值表示高优先级,正值表示低优先级
    VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
    RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
    SHR 共享内存大小,单位kb
    S 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程
    %CPU 上次更新到现在的CPU时间占用百分比
    %MEM 进程使用的物理内存百分比
    TIME+ 进程使用的CPU时间总计,单位1/100秒
    COMMAND 进程名称(命令名/命令行)

4. 内存(memory)

[root@sanchuang proc]# cat /proc/meminfo   内存的信息

4.1 内存空间分类

  • 内核空间(系统空间)就是操作系统占据的内存区域
  • 用户空间就是用户进程所在的内存区域

4.2 内存溢出(OOM)

  • OOM,全称“Out Of Memory”,内存溢出,通俗理解就是内存不够啦。

  • **内存泄漏:**申请使用完的内存没有释放,导致虚拟机不能再次使用该内存,此时这段内存就泄露了,因为申请者不用了,而又不能被虚拟机分配给别人用。一次内存泄漏似乎不会有大的影响,但内存泄漏堆积后的后果就是内存溢出。

    **内存溢出:**指程序申请内存时,没有足够的内存供申请者使用。

4.3 free

  • free (-h以人类易识别的单位显示;-m 显示单位为M)

    [root@master ~]# free -htotal        used        free      shared  buff/cache   available
    Mem:           3.7G        491M        231M        4.9M        3.0G        2.9G
    Swap:          2.0G         27M        2.0G
    [root@master ~]# free -mtotal        used        free      shared  buff/cache   available
    Mem:           3770         491         231           4        3047        3011
    Swap:          2047          27        2020total 总的大小         used 使用了的大小
    free  真正没有使用的空间  --》剩余的空间
    shared 共享的内存空间: 大家都可以使用的空间
    buff/cache  缓存的空间:  大家都可以去使用的空间  --》临时用来存放数据
    

    Mem 行(第二行)是内存的使用情况。
    Swap 行(第三行)是交换空间的使用情况。
    total 列显示系统总的可用物理内存和交换空间大小。
    used 列显示已经被使用的物理内存和交换空间。
    free 列显示还有多少物理内存和交换空间可用使用。
    shared 列显示被共享使用的物理内存大小。
    buff/cache 列显示被 buffer 和 cache 使用的物理内存大小。
    available 列显示还可以被应用程序使用的物理内存大小。

    buffer : 在内存里的临时存放数据的地方 data 从内存到磁盘 --》写操作
    cache : 在内存里的临时存放数据的地方 data 从磁盘到内存 --》读操作
    available : 能够给下一个进程提供的可用空间 free+buff/cache里的可用空间

    swap 称呼为交换分区:从磁盘里拿出一块空间来充当内存使用

4.4 sync

  • sync 将文件系统缓存中的内容,强制写入磁盘中(系统崩溃或断电、安全重启或关机、数据库备份)

    • 选项:

      • -f:立即刷新所有更新到文件系统中
      • -l:刷新所有已修改的块设备缓冲区
      • -p:当遇到IO错误时,不输出错误信息到控制台
      • -q:禁止内核调用fsync函数,只刷新磁盘缓存
      sync //将所有更新立即写入文件系统中
      sync -f //立即刷新所有更新到文件系统中
      sync -l //刷新所有已修改的块设备缓冲区
      

5. 磁盘

5.1 容量

5.1.1 df
  • df -Th 查看磁盘分区容量(接-T显示类型,-h以人类易识别的单位显示)

    [root@master ~]# df -Th
    文件系统                类型      容量  已用  可用 已用% 挂载点
    devtmpfs                devtmpfs  1.9G     0  1.9G    0% /dev
    tmpfs                   tmpfs     1.9G     0  1.9G    0% /dev/shm
    tmpfs                   tmpfs     1.9G   12M  1.9G    1% /run
    tmpfs                   tmpfs     1.9G     0  1.9G    0% /sys/fs/cgroup
    /dev/mapper/centos-root xfs        17G   16G  1.9G   90% /
    /dev/sda1               xfs      1014M  195M  820M   20% /boot
    tmpfs                   tmpfs     378M     0  378M    0% /run/user/0
    
5.1.2 lsblk
  • lsblk 检查和管理磁盘空间

    [root@master ~]# lsblk
    NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
    sda               8:0    0   20G  0 disk 
    ├─sda1            8:1    0    1G  0 part /boot
    └─sda2            8:2    0   19G  0 part ├─centos-root 253:0    0   17G  0 lvm  /└─centos-swap 253:1    0    2G  0 lvm  [SWAP]
    sr0              11:0    1  4.4G  0 rom 
    

5.2 IO读写速度

IO是指input和output
tps:每秒传输读写的次数
IOPS 每秒处理的读写次数

5.2.1 查看磁盘读写的速度

await表示平均每次设备I/O操作的等待时间(以毫秒为单位)。
svctm表示平均每次设备I/O操作的服务时间(以毫秒为单位)。
%util表示一秒中有百分之几的时间用于I/O操作即繁忙度->磁盘使用率

(1) iostat
  • iostat -x 2 50

    [root@master ~]#yum  install sysstat -y  安装
    [root@master ~]# iostat -x  2 50
    Linux 3.10.0-1160.92.1.el7.x86_64 (master) 	2023年08月21日 	_x86_64_	(2 CPU)avg-cpu:  %user   %nice %system %iowait  %steal   %idle0.02    0.00    0.07    0.00    0.00   99.90Device:         rrqm/s   wrqm/s     r/s     w/s    rkB/s    wkB/s avgrq-sz avgqu-sz   await r_await w_await  svctm  %util
    scd0              0.00     0.00    0.00    0.00     0.01     0.00   114.22     0.00    1.61    1.61    0.00   1.22   0.00
    sda               0.01     0.08    0.12    0.24    11.50    73.36   476.90     0.00    9.80    0.82   14.40   0.52   0.02
    dm-0              0.00     0.00    0.10    0.24    11.15    73.05   494.87     0.00   10.22    0.89   14.02   0.50   0.02
    dm-1              0.00     0.00    0.02    0.07     0.09     0.29     8.33     0.00   16.50    1.82   20.31   0.27   0.00avg-cpu:  %user   %nice %system %iowait  %steal   %idle0.00    0.00    0.00    0.00    0.00  100.00
    
(2) sar
  • sar -d 1 50

    [root@master ~]#yum  install sysstat -y  安装
    [root@master ~]# sar -d  1 50
    Linux 3.10.0-1160.92.1.el7.x86_64 (master) 	2023年08月21日 	_x86_64_	(2 CPU)22时22分07秒       DEV       tps  rd_sec/s  wr_sec/s  avgrq-sz  avgqu-sz     await     svctm     %util
    22时22分08秒   dev11-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    22时22分08秒    dev8-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    22时22分08秒  dev253-0      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    22时22分08秒  dev253-1      0.00      0.00      0.00      0.00      0.00      0.00      0.00      0.00
    
5.2.3 测试磁盘性能的命令
(1) dd
模拟大量的数据产生,往磁盘里写
[root@master ~]# dd  if=/dev/zero  of=/test.dd  bs=1M  count=1000 

6. 网络

  • 网络(流量带宽:流量传输速度) --》100Mb/s、1000Mb/s

6.1 查看进程

  • ps aux

    -a 显示所有用户的进程
    -u 显示用户
    -x 显示无控制终端的进程

    -o 用户定义的

    ps aux  列出当前系统中正在运行的进程的详细信息
    echo $$   查看当前进程
    kill 是杀死进程的命令 -9 强制杀死这个进程
    
  • top 查看进程实时动态信息工具(看内存)

    查看进程状态、进程使用内存状况、进程使用CPU状况、进程PID等

    PID    USER    PR  NI  VIRT    RES   SHR   S  %CPU  %MEM     TIME+  COMMAND            
    21829  root    20   0  0       0     0     S   0.7  0.6   129:53.91  java
    22559  root    20   0  158920  5628  4268  S   0.3  9.2   139:42.81  java
    22598  root    20   0  162112  2208  1540  S   0.3  0.1   0:04.68    fluentd
    

6.2 查看端口

6.2.1 查看本机端口
(1)netstat
  • netstat 可以查看本机开放了哪些端口

    [root@localhost ~]# netstat -anplut

    -a:显示所有链接和监听端口 --all

    -n: 显示数字地址

    -p: 显示程序的PID和名称 --programs

    -l: 列出状态是 LISTEN 的统计信息 --listening

    -u: 显示 UDP 连接

    -t: 显示 TCP 连接

    [root@localhost ~]# netstat -anplut
    Active Internet connections (servers and established)
    Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
    tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1073/sshd           
    tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1316/master         
    tcp        0     36 192.168.98.131:22       192.168.98.1:52216      ESTABLISHED 1759/sshd: root@pts 
    tcp        0      0 192.168.98.131:53576    202.202.1.140:443       TIME_WAIT   -                   
    tcp        0      0 192.168.98.131:53574    202.202.1.140:443       TIME_WAIT   -                   
    tcp        0      0 192.168.98.131:53780    62.212.239.34:443       TIME_WAIT   -                   
    tcp        0      0 192.168.98.131:45818    202.141.160.110:80      TIME_WAIT   -                   
    tcp        0      0 192.168.98.131:39728    118.174.8.44:80         TIME_WAIT   -                   
    tcp6       0      0 :::22                   :::*                    LISTEN      1073/sshd           
    tcp6       0      0 ::1:25                  :::*                    LISTEN      1316/master         
    udp        0      0 0.0.0.0:68              0.0.0.0:*                           1858/dhclient       
    udp        0      0 127.0.0.1:323           0.0.0.0:*                           693/chronyd         
    udp6       0      0 ::1:323                 :::*                                693/chronyd  Recv-Q 接收队列  三次握手中服务器的半连接队列
    Send-Q 发送队列
    
(2)ss
  • ss 可以用来获取本机的socket统计信息

    [root@localhost ~]# ss -tlp | grep ssh
    LISTEN     0      128        *:ssh                      *:*                     users:(("sshd",pid=1064,fd=3))
    LISTEN     0      128     [::]:ssh                   [::]:*                     users:(("sshd",pid=1064,fd=4))
    
  • losf 列出本机已经打开了哪些端口

    [root@master ~]# lsof -i:80
    [root@master ~]# lsof /root
    [root@master ~]# lsof -p 1
    
    [root@web1 conf]# lsof -i:80  查看那个进程占用了80端口
    COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
    nginx   1124    root    7u  IPv4  19798      0t0  TCP *:http (LISTEN)
    nginx   1125 tiankai    7u  IPv4  19798      0t0  TCP *:http (LISTEN)
    
6.2.2 查看别的机器
(1)nc和nmap
  • nc和nmap 探索一个机器或者整个局域网里机器开放了哪些端口

    会对某个ip地址进行常用端口号的扫描,一个一个端口去试是否开放

    -z zero 表示只扫描,不发送数据

    [root@web1 conf]#nc -z 192.168.0.1 8080  
    
(1)telnet
  • telnet

6.3 流量监控

6.3.1 glances
[root@master ~]# glances
6.3.2 dstat
[root@master ~]# dstat
[root@master ~]# dstat -N ens33
6.3.3 iftop

监测网络接口ens33 上的流量

[root@master ~]# yum install iftop -y
[root@master ~]# iftop -i ens33 
6.3.4 iptraf

监测网络接口ens33 上的流量

[root@master ~]# yum install iptraf -y
[root@master ~]# iptraf-ng -i ens33
6.3.5 nethogs

nethogs 可以看某个进程消耗多少网络带宽的

[root@master ~]# yum install nethogs -y
[root@master ~]# nethogs

全能命令:glances、dstat、zabbix、nmon、netdata、sar

7. 有客户反馈网页打开慢,怎么排查?

(1)网络:服务器出口带宽不够用。这是一个很常见的瓶颈。一方面,可能是本身购买的服务器出口带宽就很小(企业购买带宽相当昂贵),一旦用户访问量上来了,并发量大了,自然均分给用户的出口带宽就更小了,所以某些用户的访问速度就会下降了很多。另一个,就是跨运营商网络导致带宽缩减,例如很多公司的网站(服务器)是放在电信的网络上的,而如果用户这边对接的是长城或者说联通的宽带,运营商之间网络传输在对接时是会有限制的,这就可能导致带宽的缩减。

(2)CPU、内存和磁盘:服务器负载过大忙不过来,比如说CPU和内存消耗完了,top命令查看CPU是否负载过大,负载过大就看是哪个程序占用CPU资源过多,kill掉程序,不能kill就看看是不是程序本省的问题。如果CPU负载正常就查看内存的负载情况,如果负载过大,就查看是不是进程开启的太多了,将不必要的进程kill掉。如果内存负载正常就用iostat查看磁盘的I/O情况,如果磁盘I/O高居不下,就查看是哪个进程在大量的I/O,将其kill掉。

(3)数据库:数据库的瓶颈,也是很常见的一个瓶颈,这点跟上面第三个原因可以一起来说。当我们的数据库变得愈发庞大,比如好多G好多T这么大,那对于数据库的读写就会变得相当缓慢了,索引优化固然能提升一些效率,但数据库已经如此庞大的话,如果每次查询都对这么大的数据库进行全局查询,自然会很慢。这个学过数据库的话也是挺容易理解的。

(4)代码不够优化:网站的开发代码没写好,例如mysql语句没有进行优化,导致数据库的读写相当耗费时间。

十三. 开机启动流程

1. 意义

  • 掌握让某个软件开机自动运行
  • 开机不能正常启动,是什么原因,或者那个环节出现了问题
  • 防止黑客植入木马,去查询黑客会把木马放到哪些地方?

2. 流程

2.1 开机自检 POST

  • 开机自检由主板上的BIOS程序去完成
  • 对CPU、系统主板、基本内存、扩展内存、系统ROM BIOS等器件的测试。如发现错误,给操作者提示或警告。简化或加快该过程,可使系统能够快速启动。

2.2 boot启动顺序

  • 第1引导顺序:hard drive 硬盘
  • 第2引导顺序:cdrom 光驱 ----》安装系统
  • 第3引导顺序:removable device 可移动设备–》u盘,移动硬盘 --》安装系统
  • 第4引导顺序:Network --》从网络启动–》网络中安装服务器启动 --》安装

2.3 进入磁盘

  • 不同盘片上的相同磁道组成一个柱面
  • MBR 主引导记录
    • 在硬盘里0磁盘0柱面1扇区的位置
    • MBR 就是一个扇区,占用512个字节 --》安装一个启动程序
  • grub
    • grub是linux系统的启动程序
    • grub2是grub的第2个版本

2.4 gurb2引导程序通过驱动执行内核文件

  • 内核文件
    • initramfs-4.18.0-147.el8.x86_64.img --》给内核程序提供一个初始化的内存文件系统的镜像文件 --》临时的根文件系统的镜像文件–>提供程序和配置文件 --》政府各个职能部门
    • vmlinuz-4.18.0-147.el8.x86_64 --》内核程序文件 --》皇上

2.5 启动systemd进程

  • systemd是initramfs里的一个程序去启动的程序,需求去启动
  • systemd下面有很多服务快捷方式

2.6 启动对应运行级别的服务

  • centos6里运行级别: runlevel

    0 关机
    1 单用户模式
    2 多用户模式,不能使用nfs
    3 完全多用户模式 --》字符界面模式 --》非常正常的模式 默认最小化安装linux系统就是这个模式
    multi-user
    4 保留,没有使用
    5 图形界面 graphical
    6 重启

    [root@localhost boot]# runlevel  查看当前的运行级别
    N 3
    N 代表最开始进入的模式 如果是N表示没有进行模式切换  no3 5  代表开机先进入运行级别3 ,后来切换到运行级别5[root@localhost boot]# systemctl get-default  查看默认的运行级别
    multi-user.target
    [root@localhost boot]systemctl set-default graphical.target 设置开机进入图形界面
    

2.7 进入multi-user级别下(开机启动文件)

  • /etc/rc.local

    /etc/rc.local文件会在所有的服务都运行完成后,执行这个文件里的命令,这个脚本是最后执行的,必须给这个文件可执行权限

  • /etc/fstab

    /etc/fstab 是linux系统开机会自动根据这个文件里的内容挂载磁盘分区

  • file system 文件系统

    file system 文件系统–》磁盘里的分区–》一个分区对应一个文件系统

  • 启动的区别

    systemctl  disable  firewalld  设置firewalld服务开机不启动 --》下一次开机的问题
    systemctl  enable  firewalld  设置firewalld服务开机启动
    systemctl  start  firewalld  立马启动firewalld的服务   --》本次
    systemctl  stop  firewalld   立马关闭firewalld的服务
    

2.8 login登录

十四. SSH服务

1. SSH介绍

  • 什么是SSH

    • SSH secure shell 安全的shell

    • 是一个网络加密协议,用来远程控制服务器的(telnet使用的明文传输的)

    • 使用在linux/unix系统里,远程控制服务器,对传输的数据进行加密

  • 如何搭建ssh服务

    • 通过openssh搭载

      OpenSSH是使用SSH协议进行远程登录的首要连接工具。它对所有通信进行加密,以消除窃听、连接劫持和其他攻击。此外,OpenSSH提供了大量的安全隧道功能、几种身份验证方法和复杂的配置选项。

    • centos7/8/6安装好系统,默认安装openssh

      openssh 提供某些ssh的工具–》客户端

      openssh-clients 客户端程序
      openssh-server 服务器端

2.配置+排错

2.1 配置文件

  • 配置文件/etc/ssh/sshd_config

    • sshd_config --》sshd 服务器端的进程

      参数默认值参数说明
      Port22sshd服务默认的端口22,为了安全考虑建议修改成其它端口
      ListenAddress0.0.0.0默认监听网卡所有的IP地址
      PermitRootLoginyes是否允许root登陆,默认是允许的,建议设置成no
      PubkeyAuthenticationyes是否允许公钥登录,默认是允许的
      AuthorizedKeysFile.ssh/authorized_keys存放公钥的地方
      PasswordAuthenticationyes是否需要密码验证,默认是yes
      PermitEmptyPasswordsno是否允许以空的密码登入
      DenyUsers拒绝用户从哪里登录,不能和AllowUsers同时使用
      AllowUsers允许用户从哪里登录,不能和DenyUsers同时使用
    • ssh_config --》ssh 客户端命令的配置文件

  • 守护进程 daemon

    • 一直在内存里运行的进程

    • sshd,firewalld中的d都是daemon,表示是守护进程

2.2 日志文件

  • 日志文件/var/log/secure

    Failed password

2.2 故障排错

  • 关闭selinux

    selinux 是linux系统里的一套安全机制,用来保护linux系统的安全,会限制进程去做某些对安全有威胁的事情。

    永久修改selinux的策略为disabled
    [root@localhost ssh]# vim /etc/selinux/config
    SELINUX=disabled
    [root@localhost ssh]# getenforce  查看selinux的状态
    Enforcing
    [root@localhost ssh]# setenforce 0  临时调整selinux的策略为宽容模式
    [root@localhost ssh]# getenforce
    Permissive
    [root@localhost ssh]# service sshd restart
    Redirecting to /bin/systemctl restart sshd.service
    
  • 关闭防火墙

    [root@localhost ssh]# service firewalld stop  关闭防火墙
    Redirecting to /bin/systemctl stop firewalld.service
    

3.加密与安全加固

3.1 安全加固

  • 修改端口并禁用root

    • 修改配置文件/etc/ssh/sshd_config

      Port 2255 指定ssh服务的端口号为2255,默认是22,但是可以修改
      PermitRootLogin yes 允许root用户远程登录
      PermitRootLogin no 不允许root用户远程登录 —》这个更加好,提高安全性

3.2 加密

对称

非对称

  • 如何知道sshd服务是否启动?

​ 1.看进程
​ 2.看端口
​ 3.直接访问
​ 4.看日志

3.3 安全验证等级

SSH对主机的public_key的检查等级是根据StrictHostKeyChecking变量来配置的,它的三种配置值如下:

  • StrictHostKeyChecking=no

    最不安全的级别,当然也没有那么多烦人的提示了,相对安全的内网时建议使用。如果连接server的key在本地不存在,那么就自动添加到文件中(默认是known_hosts),并且给出一个警告。

  • StrictHostKeyChecking=ask

    默认的级别,就是出现刚才的提示了。如果连接和key不匹配,给出提示,并拒绝登录。

  • StrictHostKeyChecking=yes

    最安全的级别,如果连接与key不匹配,就拒绝连接,不会提示详细信息。

4.拷贝与传输

4.1 scp 远程拷贝

  • 底层通过ssh协议远程连接到其他的机器上,copy文件

    [root@localhost ssh]# scp  root@47.115.222.91:/etc/passwd   /etc/ssh
    

4.2 sftp文件传输

  • 事列

    [root@localhost ssh]# sftp root@47.115.222.91
    
  • 命令

    ls
    sftp> !ls
    pwd
    sftp> lpwd
    cd
    sftp> lcd
    sftp> get   下载
    sftp> put  上传
    sftp> put -r  上传文件夹
    sftp> put -r grub2
    sftp> exit
    

4.3 sz和rz

  • 安装文件传输工具

    [root@nginx ~]# yum install lrzsz -y
    
  • Linux->windows sz +文件名

    [root@nginx ~]# sz hello.sh
    
  • windows->Linux rz

    [root@nginx ~]# rz
    

5.免密通道

  • 步骤

    1.准备两台服务器,一台做客户端,一台做服务端

    2.生成密钥对,在客户端上使用root用户生成密钥对,密钥对会在用户的家目录下,id_rsa 私钥,id_rsa.pub 公钥

    [root@localhost ssh]# ssh-keygen -t rsa
    

    3.上传公钥到的服务端的~/.ssh/authorized_keys中

    #使用 ssh-copy-id命令
    [root@localhost .ssh]# ssh-copy-id -i id_rsa.pub root@47.115.222.91
    -i 指定密钥文件
    
    #使用scp命令
    [root@localhost ~]# scp ~/.ssh/id_rsa.pub  root@47.115.222.91:/root/.ssh/authorized_keys#如果拒绝登录,可以修改ssh验证的安全级别[root@bogon hadoop-2.9.2]# scp -o StrictHostKeyChecking=no ~/.ssh/id_rsa.pub  root@47.115.222.91:/root/.ssh/authorized_keys
    
    #前面两种方法需要传输,需要密码,使用sshpass可以免密传输
    [root@localhost ~]# yum install sshpass
    [root@bogon hadoop-2.9.2]# sshpass -p '密码' scp ~/.ssh/id_rsa.pub  root@47.115.222.91:/root/.ssh/authorized_keys#如果拒绝登录,可以修改ssh验证的安全级别[root@bogon hadoop-2.9.2]# sshpass -p '密码' scp -o StrictHostKeyChecking=no ~/.ssh/id_rsa.pub  root@47.115.222.91:/root/.ssh/authorized_keys
    

    4.登录验证

    [root@localhost .ssh]# ssh root@47.115.222.91
    
  • nohup 屏蔽hup信号,不会被杀死

    [root@sanchuang ~]# nohup  bash while.sh &  &符号表示放在后台运行
    [1] 4080
    

    nohup会忽略输入并把输出追加到"nohup.out"

6.tcpwrappers机制

  • 介绍

    TCP Wrappers可以将其他的TCP服务程序“包裹”起来,增加了一个额外的安全检测机制(定制的存取控制规则来判断对方是否有使用这个服务的权限),外来的连接请求首先要通过这层安全检测,获得许可后才能被服务程序所接受。同时它还可以记录所有企图访问包装服务的行为,为管理员提供丰富的安全分析资料。

    TCP Wrappers是一种可靠的工具,可以帮助您屏蔽和预警未经授权的访问。它有许多高级功能,适用于各种入侵场景。在使用它之前,必须仔细地制定一些规则,以确保它在您的计算机上起到了最有效的作用。

  • 两个配置文件(配置后不需重启,立即生效)

    • hosts.allow

      # 允许本地IP地址范围内的所有主机访问sshd服务
      sshd: 192.168.0.# 只允许特定地址访问ftp服务
      ftp: 203.0.113.1# 将所有未在hosts.allow中定义的连接都拒绝
      ALL: ALL
      
    • hosts.deny

      # 允许来自192.168.1.#网段机器访问ssh
      sshd: 192.168.1.# 允许来自10.0.0.0/8网段机器http连接,但不允许来自10.0.0.2的http连接
      httpd: 10.0.0.0/8 EXCEPT 10.0.0.2# 拒绝来自主机mail.example.com的所有服务连接
      ALL: mail.example.com
      

十五. ansible

Ansible是一个部署一群远程主机的工具;Ansible通过SSH协议实现远程节点和管理节点之间的通信。

  • 建立免密通道

  • 安装epel源和ansible

    [root@ansible ~]# yum install epel-release -y
    [root@ansible ~]# yum install ansible -y
    

1. 配置介绍

  • 两个重要的配置文件

    • ansible的主配置文件 /etc/ansible/ansible.cfg
      这个文件主要定义了roles_path路径,主机清单路径,连接清单中的主机方式等配置,这些大部的默认配置已经足够我们平时使用,如需要特别配置可以自行去修改;

    • /etc/ansible/hosts
      这个配置文件就是默认主机清单配置文件,可通过ansible.cfg重新定义的;

  • 三个重要的可执行文件

    • ansible 主执行程序,一般用于命令行下执行
    • ansible-playbook 执行playbook中的任务
    • ansible-doc 获取各模块的帮助信息

2.ansible常用模块

2.1 copy模块

从本地copy文件分发到目录主机路径
参数说明:

src= 源文件路径 dest= 目标路径
content= 自行填充的文件内容
owner 属主
group 属组
mode权限

示例:

ansible all  -m copy -a "src=/etc/fstab dest=/tmp/fstab.ansible mode=600"
ansible all -m copy -a "content='hi there\n' dest=/tmp/hi.txt"

2.2 fetch模块

从远程主机拉取文件到本地
示例:

[root@ansible ~]# ansible all  -m fetch -a "src=/tmp/hi.txt dest=/tmp"

说明:fetch使用很简单,src和dest,dest只要指定一个接收目录,默认会在后面加上远程主机及src的路径

2.3 shell模块

[root@ansible ~]# ansible all -m shell -a "ifconfig|grep lo"

2.4 file模块

设置文件属性(创建文件)
常用参数:
path目标路径 state directory为目录,link为软件链接
group 目录属组
owner 属主
示例1:创建目录

[root@ansible ~]# ansible all -m file -a "path=/var/tmp/hello.dir state=directory"

示例2:创建软件链接

[root@ansible ~]# ansible all -m file -a "src=/tmp/hi.txt path=/var/tmp/hi.link state=link"

2.5 cron模块

通过cron模块对目标主机生成计划任务
常用参数:
除了分(minute)时(hour)日(day)月(month)周(week)外
name: 本次计划任务的名称
state: present 生成(默认) |absent 删除 (基于name)

示例:对各主机添加每隔3分钟从time.windows.com同步时间

[root@ansible ~]# ansible all -m cron -a "minute=*/3 job='/usr/sbin/update time.windows.com &>/dev/null'  #到node1上查看
[root@node1 tmp]# crontab -l
#Ansible: update_time
*/3 * * * * /usr/sbin/update time.windows.com &>/dev/null

示例2:删除计划任务

[root@ansible ~]# ansible all -m cron -a "name=update_time state=absent"#node1上查看
[root@node1 tmp]# crontab -l
会发现已经被删除了

2.6 yum模块

故名思义就是yum安装软件包的模块;
常用参数说明:
enablerepo,disablerepo表示启用与禁用某repo库
name 安装包名
state (present' orinstalled’, latest')表示安装, (absent’ or `removed’) 表示删除
示例:通过安装epel扩展源并安装nginx

[root@ansible ~]# ansible all -m yum -a "name=epel-release state=installed"
[root@ansible ~]# ansible all -m yum -a "name=nginx state=installed"

2.7 service模块

服务管理模块
常用参数:
name:服务名
state:服务状态
enabled: 是否开机启动 true|false
runlevel: 启动级别 (systemed方式忽略)

示例:

[root@ansible ~]# ansible all -m service -a "name=nginx state=started enabled=true"
到node1上查看
[root@node1 tmp]# systemctl status nginx

2.8 script模块

把本地的脚本传到远端执行;前提是到远端可以执行,不要把Linux下的脚本同步到windows下执行;
直接上示例:
本地ansible上的脚本:

[root@ansible ~]# cat test.sh 
#!/bin/bash
echo "ansible script test!" > /tmp/ansible.txt[root@ansible ~]# ansible all -m script -a "/root/test.sh"到node1上查看
[root@node1 tmp]# ls
ansible.txt  fstab.ansible  hi.txt 
[root@node1 tmp]# cat ansible.txt
ansible script test!

3.Playbook实战

3.1 playbook的核心元素

  • hosts : playbook配置文件作用的主机

  • tasks: 任务列表

  • variables: 变量

  • templates:包含模板语法的文本文件

  • handlers :由特定条件触发的任务

    • notify 触发通知

    • tags 给一个任务打一个标签

      可以直接从这个任务开始执行
      ansible-playbook  -t configfile  redis_second.yaml
      
      • roles :用于层次性、结构化地组织playbook。roles 能够根据层次型结构自动装载变量文件、tasks以及handlers等

3.2 实列

stop_fw_selinux.sh 脚本

[root@ansible playbook2]# cat stop_fw_selinux.sh 
#!/bin/bash#停止防火墙服务和清除iptables规则
service firewalld stop
iptables -F
iptables -t nat -F
#设置firewalld 开机不启动
systemctl disable firewalld#临时禁用selinux
setenforce 0
#永久禁用selinux
sed -i '/^SELINUX=/   s/enforcing/disabled/'  /etc/selinux/config 

redis3.yaml

[root@ansible playbook2]# vim redis3.yaml 
- hosts: scwebremote_user: roottasks: 
#  - name: "stop firewalld"
#    service: name=firewalld state=stopped enabled=false
#  - name: "disable selinux"
#    shell: 
#      cmd: |
#        setenforce 0
#        sed -i '/^SELINUX=/   s/enforcing/disabled/'  /etc/selinux/config - name: "stop firewalld and selinux"script: /playbook2/stop_fw_selinux.sh- name: "install redis"yum: name=redis  state=installed- name: "copy config file to node servers"copy: src=/playbook2/redis.conf  dest=/etc/redis.conf owner=redisnotify: "restart redis"tags: configfile- name: "start redis"service: name=redis  state=startedhandlers:- name: "restart redis"service: name=redis state=restarted
[root@localhost ~]# ansible-playbook redis3.yaml

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/79205.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

递归学习——记忆化搜索

目录 ​编辑 一&#xff0c;概念和效果 二&#xff0c;题目 1.斐波那契数 1.题目 2.题目接口 3.解题思路 2.不同的路径 1.题目 2.题目接口 3.解题思路 3.最长增长子序列 1.题目 2.题目接口 3.解题思路 4.猜数字游戏II 1.题目 2.题目接口 3.解题思路 总结&a…

使用 Sealos 一键部署高可用 MinIO,开启对象存储之旅

大家好&#xff01;今天这篇文章主要向大家介绍如何通过 Sealos 一键部署高可用 MinIO 集群。 MinIO 对象存储是什么&#xff1f; 对象是二进制数据&#xff0c;例如图像、音频文件、电子表格甚至二进制可执行代码。对象的大小可以从几 B 到几 TB 不等。像 MinIO 这样的对象存储…

解决 Axios 跨域问题,轻松实现接口调用

跨域是指访问另外一个域的资源&#xff0c;由于浏览器的同源策略&#xff0c;默认情况下使用 XMLHttpRequest 和 Fetch 请求时是不允许跨域的。跨域的根本原因是浏览器的同源策略&#xff0c;这是由浏览器对 JavaScript 施加的安全限制。 Axios 跨域常见报错 跨域请求被阻止 (…

vue中 字体图标引入 - iconfont阿里字体图标库

官网&#xff1a;iconfont-阿里巴巴矢量图标库 代码应用中&#xff0c;有许多方法&#xff0c;如何使用该图标库。如&#xff0c;icon单个使用、unicode引用、或 font-class引用&#xff08;推&#xff09;、symbol&#xff08;svg合集&#xff09;。本文主讲 font-class 方法…

Git(9)——Git多人协同开发之创建初始项目

目录 一、简介 二、创建新项目 三、本地Git接入 四、创建远端仓库——Gitee 五、推送代码至远端仓库 一、简介 前面8章都是我们一个人独自开发&#xff0c;如果现在项目新增两名同事&#xff0c;我们就需要使用Git来实现多人协同开发&#xff0c;从第九章开始将介绍从零到…

Jenkins教程—构建多分支流水线项目

本教程向你展示如何使用Jenkins协调一个用 Node Package Manager (npm) 管理的简单 Node.js 和 React 项目&#xff0c; 并同时 为开发和产品环境交付不同的结果。 在开始本教程之前&#xff0c;建议你前往 教程概览 页面&#xff0c;并至少完成一个 介绍教程&#xff0c; 从而…

利用红黑树封装map和set

目录 一、正向迭代器1.1 operator1.2 operator--1.3 参考代码 二、反向迭代器三、封装set四、封装map五、底层红黑树的实现 一、正向迭代器 我们之前vector&#xff0c;list这些都是容器的迭代器都是简单的指针或者_node_node->next这样的&#xff0c;那是因为它们要么是连…

背包问题---怎么选取物品,可以使得背包装的物品价值最大?

原文&#xff1a; https://zhuanlan.zhihu.com/p/567560364 1&#xff09;0-1背包问题的描述 现在有四种物品&#xff0c;每种物品只有1件&#xff0c;它们的重量与价值如下表。 现在有一个背包&#xff0c;总容量为8。问怎么选取物品&#xff0c;可以使得背包装的物品价值…

yolov5添加ECA注意力机制

ECA注意力机制简介 论文题目&#xff1a;ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks 论文地址&#xff1a;here 基本原理 &#x1f438; ECANet的核心思想是提出了一种不降维的局部跨通道交互策略&#xff0c;有效避免了降维对于通道注意…

【力扣每日一题】2023.9.12 课程表Ⅳ

目录 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 代码&#xff1a; 题目&#xff1a; 示例&#xff1a; 分析&#xff1a; 今天是课程表系列题目的最后一题&#xff0c;因为我在题库里找不到课程表5了&#xff0c;所以今天的每日一题就是最后一个课程表了。 题…

关于Arcgis这62个常用技巧,你知道几个?

小编推荐&#xff1a;ArcGIS类全领域教程推荐https://mp.weixin.qq.com/s?__bizMzU0MDQ3MDk3NA&mid2247560279&idx5&sn8ac52cabeb8c7e3b2c083e07ef6056da&chksmfb3b1786cc4c9e909bab16dd99e88e5f5f9816eb2349d6d73a68a137a5264aa606b2035d7b3e&token16747…

c++ 中的函数指针

以下图片演示了c中函数指针的用法。如下图可见&#xff0c;把函数地址赋值给函数指针&#xff0c;用函数名或者函数名的地址&#xff0c;都可以&#xff0c;c编译器不报错。即 ptr f 和 ptr &f 都对。但准确的话&#xff0c;函数名就是地址&#xff0c;在编译时候&#x…

2023-9-14 最长公共子序列

题目链接&#xff1a;最长公共子序列 #include <iostream> #include <algorithm>using namespace std;const int N 1010;int n, m; char a[N], b[N]; int f[N][N];int main() {cin >> n >> m;cin >> a 1 >> b 1;for(int i 1; i < n…

代理HTTP使用不当会出现哪些问题?如何正确使用代理服务?

代理HTTP是一种常见的网络代理方式&#xff0c;它为客户端和服务器之间提供中间层&#xff0c;转发上下游的请求和响应。正确使用代理HTTP可以提高采集效率、增加网络安全性、加速网络速度、保护用户隐私。但是&#xff0c;使用不当就难以达到预期的效果&#xff0c;在使用代理…

langchain+GPT+neo4j 图数据库

neo4j版本是5.11.0,langchain的版本 0.0.288下载apoc插件 https://neo4j.com/docs/apoc/current/installation/ neo4j.conf文件把apoc.*添加到dbms.security.procedures.unrestricted配置项 使用return apoc.version()来查看是否安装成功 pip install neo4j图 参考官网&…

vue中预览xml并高亮显示

项目中有需要将接口返回的数据流显示出来&#xff0c;并高亮显示&#xff1b; 1.后端接口返回blob,类型为xml,如图 2.页面中使用pre code标签&#xff1a; <pre v-if"showXML"><code class"language-xml">{{xml}}</code></pre> …

Spring源码分析(三) bean的生命周期 getBean()和doGetBean()

b、在中篇会正式经历一套生命周期流程 getBean() -> doGetBean() -> createBean() -> doCreateBean() -> createBeanInstance() -> populateBean() -> initializeBean() 流程 1、AbstractBeanFactory#getBean() 此处开始进行对象的获取也就是核心步骤 Overr…

shell脚本学习笔记02(小滴课堂)

可以在home目录下创建一个shell.sh文件。 按w进入命令行模式。按i进入插入模式。如果想返回命令行模式&#xff0c;按esc即可。然后可以使用x和dd进行删除内容。 在插入模式下我们点击esc键&#xff0c;再去按:键&#xff0c;我们就可以进入到底行模式了&#xff1a; 可以设…

PHP实现微信小程序状态检测(违规、暂停服务、维护中、正在修复)

实现原理 进入那些状态不正常的小程序会被重定向至一个Url&#xff0c;使用抓包软件抓取这个Url&#xff0c;剔除不必要参数&#xff0c;使用cURl函数请求网页获得HTML内容&#xff0c;根据内容解析出当前APPID的小程序的状态。 代码 <?php// 编码header(Content-type:ap…

数据库被攻击需要注意什么

没想到自己用了一个简单的腾讯虚拟机&#xff0c;里面自己安装了一个 MySQL 数据库也会被黑客攻击。 一、问题现象 小程序访问不了&#xff0c;后台程序报数据库相关的错误。 查看数据库&#xff0c;发现数据库被篡改。 二、问题原因 1、为了可以远程能够访问数据库&#xf…