3.2.RHCSA

1.系统了解

1.1 系统了解

1.系统运行级别

 runlevel #查看当前运行级别
 init 3  #切换当前运行级别
 systemctl get-default #查看默认运行级别
 systemctl set-default multi- user.target/graphical.target #修改默认运行级别
 cat /etc/inittab #查看运行级别文件
 运行级别 0:所有进程被终止,机器将有序的停止(关机)
 运行级别 1:单用户模式,系统里运行的所有服务都将关闭(root用户可 以从本机登录,并不能从远程登录)
 运行级别 2:多用户模式(NFS网络文件系统没有被启动)
 运行级别 3:完全多用户模式,(启动NFS网络文件系统)标准的运行级别,命令行模式
 运行级别 4:系统未使用(暂留功能)
 运行级别 5:登录后进入带GUI的图形化界面,标准的运行级别
 运行级别 6:系统正常关闭并重启
 常用运行级别:
  0:关机  3:命令行标准运行级别  5:图形化标准运行级别  6:重启  
View Code

2.识别文件类型

 根据颜色:文件(白),目录(蓝),软链(浅蓝),
         压缩(红),设备(黄),可执行(绿),
         失效链接(红色闪动)
 根据详细属性:
         文件(-),目录(d),软链(l),
         设备(b)
View Code

3.目录了解

 记住:/dev,/etc,/home,/var,/mnt、/media,/usr/local
 /:系统所有数据都存放在根目录下
 /root:超级管理员的家目录
 /home:普通用户的家目录

 /bin:所有用户都可以执行的命令
 /sbin: 特权用户才可以执行的命令
 /etc:服务的配置文件,用户的信息文件(静态目录)
 /lib:系统中的程序运行所需要的,共享库及内核模块 
 /tmp:存放临时文件

 /dev:硬件设备的目录(虚拟目录,不占据磁盘空间,在操作系统启动过程中,自动生成。)
 /run :程序或服务启动后,存放PID的目录(虚拟目录存放操作系统中进程运行的状态信息。)
 /proc:Linux伪文件系统,存放内存中的数据,不占用磁盘空间
 /sys:存放被建立在内存中的虚拟文件系统

 /boot:系统内核及系统引导程序
 /srv:服务启动之后需要访问的数据目录?
 /opt:额外安装的软件存放目录 
 /mnt、/media :光盘和镜像等预设的挂载点

 /var:存放系统的可变数据,如数据库、缓存目录、日志文件(动态目录)
 /usr:操作系统软件资源所放置的目录(静态目录)
  /usr/bin:存放应用软件的命令程序
  /usr/sbin:存放网络管理的命令程序
  /usr/etc:存放安装软件时使用的配置文件
  /usr/lib:系统中的程序运行所需要的,共享库及内核模块 
  /usr/tmp:存放临时文件
  
  /usr/include:c/c++等程序语言的头文件
  /usr/libexec:存放不经常被使用的执行程序或脚本
  /usr/local: 额外安装的软件存放目录 
  /usr/share: 放置只读架构的杂项数据文件 
  /usr/src:一般软件源代码建议存放该目录下
View Code

4./dev/目录下文件详解

[root@localhost ~]# ls /dev
hd[a-t]:IDE设备
sd[a-z]:SCSI设备
fd[0-7]:软盘驱动设备
md[0-32]:软RAID设备
loop[0-7]:本地回环设设备
lp[0-3]:打印机设备
mem:内存设备
null:空设备,也称为黑洞,任何写入的数据都将被丢弃
zero:零资源设备,任何写入的数据都将被丢弃
full:满设备,任何写入的数据都将失败
tty[0-63]:虚拟终端设备
random:随机数设备
urandom:随机数设备
port:存取I/O端口
View Code

5.计算机硬件组成部分

 #a.主机设备
  主板、中央处理器(CPU)、主存储器(内存)、网卡、声卡、显卡
 #b.输入设备
  键盘、鼠标、触控屏等
 #c.输出设备
  屏幕、耳机、打印机、投影仪等
 #d.外部存储设备
  硬盘、软盘、光盘、U盘等、蓝光光驱
View Code

1.2 基础命令

1.初级命令

 a.查看文件或目录
  ls -(haRdl),l. 查看所有隐藏文件
    h    以kB、MB、GB单位显示文件内容大小
    a    显示目录下所有内容,包含隐藏的内容
    R    递归查看目录下所有内容(从头到尾)
    d    仅显示目录本身而不显示目录下的内容
    l     显示目录下的内容及详细属性
 b.创建/删除文件或目录
  touch创建或更新
  mkdir -p(多个用空格)(-p递归创建)
  rmdir 只能删除空目录
 c.剪切/复制文件或目录
  mv (剪切,覆盖,重命名)
    mv hello /mnt             #移动文件到目录下
    mv hello.txt /media/hello #移动文件并改名(原来就有hello就会覆盖)
    mv student1 /mnt          #移动目录
    mv test /media/testxx     #移动目录并改名
  cp -r,-p(复制,覆盖,重命名)(修改时间、归属关系、权限)
    cp t1 /opt/               #复制文件到目录
    cp t1 /opt/hello.txt      #复制文件到目录并改名
 d.查看文件内容 
  cat -n(行号显示)(shift+pg up翻页)
  tail/headtail -f(实时)
    tail -n 5(只显示后5行)
    tail -n +5(除了前5行都显示)
    head -n -5(除了后5行都显示)
  less/man -N (jkduf,gG,/字符串+n/N,23,q )
    j/k:向后/前一行
    d/u:向后/前半页
    f:向后一页
    g/G:文件首//字符串:查找字符串(n/N:向下/向上查找)
    23:跳转到23行【不是跳转到23行,好像是向下23行】
    q:退出
 e.统计文件大小,文件内容   
  du -h /etc,du -hs /etc #统计磁盘下目录或文件大小
                       #-h人性化显示,-s只统计最外层目录大小
  wc /etc/passwd #统计行数,单词,字节,文件名(-l行,-c字节) 
 f.连接命令
  管道符 `|` 将前面命令的输出结果作为后面命令的参数继续处理
View Code

2.中级命令

 #a.软/硬链接
  软:浅蓝,删除原文件链接不可用,可跨分区,可对目录链接
      ln -s 源文件 目标文件
  硬:白色,删除原文件链接仍可用,不能跨分区,不可对目录链接
      ln 源文件 目标文件  
  硬链接类似于cp -p文件,但又多了同步功能。
  创建软链接时必须写绝对路径
 #b.重定向
  2>     #只收集错误的输出结果(覆盖)
  2>>    #只收集错误的输出结果(追加)
  &>     #正确错误都收集(覆盖)
  &>>    #正确错误都收集(追加)
  cat > xxxx.txt <<EOF #(>>追加)
  ……
  EOF
 #c.上传下载
  yum -y install lrzsz
  rz #上传
  sz a.txt #下载
View Code

3.了解命令

 cal #查看这个月的日历
 cal 2021 #查看21年日历
 sleep 3 #smhd,将目前动作延迟一段时间
 stat hello.txt #查看文件的元数据信息
 type cd #查看cd命令是内部命令还是外部命令
 hash #快捷调取系统命令程序文件,只有外部命令才会记录到hash表
 hash -r #清空
 host www.baidu.com #解析域名对应IP地址
 nslookup www.baidu.com #用来诊断网络,看DNS是否正常,域名解析是否正常。
 mailx #查看邮件(要安装mailx)(ls /var/spool/mail/ 查看用户)
View Code

4.压缩与解压缩

 #Linux独有压缩格式及命令工具:
  gzip---> .gz 
  bzip2---> .bz2
  xz---> .xz 
  注意:
    这三种压缩格式都不支持对目录压缩
    
 #压缩命令格式
  压缩:   gzip 文件名
  解压缩 :gzip -d 文件名
  不解压查看压缩文件内容: 
    zcat [选项...] 文件名    #查看gzip格式压缩文件
    bzcat [选项...] 文件名   #查看bzip2格式压缩文件
    xzcat [选项...] 文件名   #查看xz格式压缩文件

 #案例
  gzip services       #使用gzip格式对文件进行压缩
  zcat services.gz    #不解压查看压缩文件内容
  gzip -d services.gz #解压文件 
View Code

5.tar打包工具

 tar把文件和目录打包到一起,形成一个文件。
 f选项必须放到最右侧

 #命令格式
  tar 选项 打包后名字 被打包文件
 #常用选项:
  c 创建tar包
  z调用gzip压缩工具 -j调用bzip2压缩工具 -J调用xz压缩工具 
  v 显示详细信息
  x 解压打包文件
  t 不解压列出打包文档内容
  f 指定打包后的文件名称
  C 指定解压路径
  常用搭配:
    tar -czvf
    tar -xvf -C
    tar -tf
 #案例
  tar -czvf xxx.tar.gz /etc/passwd /etc/fstab /home
                 #同时打包多个文件/目录并使用gzip格式压缩
  tar -xvf xxx.tar.gz -C /media/
                 #将压缩包数据解压到/media目录
  tar -tf xx.tar.xz 
                 #不解压查看压缩包数据
View Code

1.3 常用操作

1.修改ip

 #a.临时修改
  ifconfig ens32 192.168.0.2
 #b.编辑文本永久修改
  vim /etc/sysconfig/network-scripts/ifcfg-ens32 
  systemctl restart network #或ifdown ens32;ifup ens32
 #c.使用命令修改网卡IP地址 
  yum -y install  bash-completion #安装命令补全工具
  nmcli connection modify 网卡名 ipv4.method manual ipv4.addresses Ip地址/掩码 connection.autoconnect yes
  # nmcli connection modify(修改)网卡名
  # ipv4.method(配置ipv4地址方法)manual(手动配置)
  # ipv4.addresses(ipv4地址)Ip地址/掩码
  #connection.autoconnect yes(开机自动连接)
  
  # 激活网卡:nmcli connection up 网卡名
  # 关闭网卡:nmcli connection down 网卡名
  # 重启网卡:nmcli connection reload 网卡名
View Code

2.修改主机名

/etc/hostname #文件用于存放主机名
 hostname test #设置主机名为test(重启失效)
 hostnamectl set-hostname test #重启不失效
 echo test > /etc/hostname     #重启不失效
 hostnamectl set-hostname  TEST --static #支持大写
View Code

3.设置别名

 文件:.bashrc文件存放命令别名,永久生效
 #a.定义别名
  alias myls='ls -ldh' #临时生效
  vim .bashrc          #永久生效
 #b.查看别名
  alias    #查看当前系统可用命令别名
  which ls #查看特定命令别名,及文件所在的路径
 #c.取消别名
  unalias myls #彻底取消
  \myls        #取消本次,(显示未找到命令)
unalias myls #取消别名
View Code

4.历史命令有关文件

 #a.文件
 .bash_history #记录历史命令文件(文件删除后系统会再次自动创建)
 /etc/profile #存放历史命令默认存储值 HISTSIZE=1000
 #b.命令
 history -a #将历史命令同步至配置文件
 history -d 655 #删除历史命令中655条命令历史
 history -c #清除缓存,不清除文件内容
 #c.快捷键
  !66         #调用命令历史中第66条命令
  !cat       #调用历史命令中以cat开头的命令
  !!         #重复执行上一条命令
View Code

5.时间设置

 #a.查看
 date +%Y #YBd,HMS,FX #查看
  date "+%F %H:%M:%S" #2022-08-05 23:14:54
  date +%F%X          #2021-03-2817时12分39秒
  date +%F:%X         #2021-03-28:17时13分55秒
  date +%F %X         #报错(需要加引号)
 #b.设置
 date -s 2020-03-28 #修改系统年月日
 date -s 17:16:00   #修改系统时分秒
 date -s '2021-03-28 17:17:00' #修改年月日时分秒  
View Code

6.设置密码

 echo '密码' | passwd --stdin 用户名 
View Code

1.4 查看系统信息

1.查看内核信息

 uname -rs #-s显示内核名称,-r显示内核版本
  Linux 3.10.0-957.el7.x86_64
  Linux     #内核名称
  3            #主版本
  10        #次版本
  0            #修改版本
  957        #补丁次数
  el7        #Enterprise Linux(企业版Linux)
  x86_64    #CPU架构
View Code

2.查看当前系统版本信息 

/etc/centos-release 
View Code

3.查看CPU信息

 文件:cat /proc/cpuinfo
 命令:lscpu
  [root@localhost ~]# lscpu
   Architecture:  #架构 
  CPU(s):        #逻辑cpu核数
View Code

4.查看系统内存信息

 文件:/proc/meminfo
 命令:free -h
  total      #所有可用的内存大小
  free       #系统尚未使用的内存
  available  #系统真正可用内存(free+cache/buffer等)
  used       #已使用的内存总量
View Code

5.查看网卡信息

 文件:/etc/sysconfig/network-scripts/ifcfg-ens32
 命令:ifconfig(提前安装net-tools软件包)
      ip a s
      
 cat /etc/sysconfig/network-scripts/ifcfg-ens32
   TYPE=“Ethernet“        #网卡类型=以太 
   BOOTPROTO=“none“        #获取IP地址的方式=固定IP    
   NAME=“ens32“            #物理网卡设备名字 
   UUID="3ef0d258-f9a4-49e5-a9da-7b47bc98daa0"#网卡UUID
   DEVICE=“ens32“        #网卡名字 
   ONBOOT=“yes“                #开机或重启时是否启动网卡  
   IPADDR=“192.168.0.210“    #IP地址  
   PREFIX=“24“                #子网掩码 
   GATEWAY=“192.168.0.254“    #网关    
   DNS1=“8.8.8.8“            #dns服务器IP地址 
   DNS2=8.8.4.4                #备用dns服务器IP地址 
View Code

 

 

 up  #网卡处于活跃状态
 mtu #最大传输单元(字节),表示此网卡一次能传输的最大数据包 
 netmask            #子网掩码
 broadcast          #广播地址
 ether              #网卡MAC地址
 RX packets 3948    #接收正确的数据包
 RX errors 0  dropped 0  overruns 0  frame 0
                    #接收到的错误包
                    #丢弃的数据包数
                    #由于速度过快而丢失的数据包
                    #发生frame错误而丢失的数据包数
 TX packets 100     #发送的正确的数据包数 
 TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  
                    #发送时产生错误的数据包数、
                    #丢弃的数据包数
                    #由于速度过快而丢失的数据包数
                    #发生carrier错误而丢失的数据包数
                    #冲突信息包的数目
View Code

6.常用文件

 /etc/resolv.conf  #DNS客户机配置文件
 /etc/fstab        #开机自动挂载配置文件
 /etc/inittab      #存放系统运行级别文件
 /etc/shells       #存放解释器程序信息的文件
View Code

1.5 快捷键

1.vim

 #a.命令模式(ALL):
  aio切换,rxC替换和删除,u和ctrl+r,Ggg,ddyyp,/nN,ZZ退出
 #b.编辑模式(INSERT):
 #c.可视模式(VISUAL):v,shift+v,ctrl+v和yp
  ctrl+v 批量删除多行注释
 #d.末行模式(:):
  :set nu
  :set nonu
  :10 光标跳转到10行
  :%s/aa/bb/ 只替换每一行匹配到的第一个关键字
  :%s/aa/bb/g  g表示替换全文
  :3s/hello/abcd/  只替换第三行
  :nohl 取消高亮显示
View Code

 

 

 2.系统快捷键

 ctrl+←,ctrl+→   #跳到命令行中前一字的开头/下一字的末尾
 ctrl+u,ctrl+k  #清除光标处到开头/末尾内容
 Ctrl+w 删除一个单词
View Code

1.6 用户管理

1.用户管理

 #命令
  useradd和usermod和userdel(-r)创建/修改/删除用户
  id xiaozhang  #查看用户的uid,gid和所属组
 #文件
  /etc/passwd用户信息文件
  /etc/default/useradd用户默认值信息
  /etc/skel/用户模板目录
 #useradd选项
  u 指定用户UID            3
  g 指定用户基本组(了解)   4
  G 指定用户附加组
  c 用户描述信息           5
  d 指定用户家目录(了解)   6
  s 指定用户的解释器程序    7
 useradd -s /sbin/nologin user8 #禁止用户登录
 #usermod选项
  ugGcds,aG
  usermod -aG user11 user10
  usermod -G user1,user2,user3 user4#修改user4的附加组
 #/etc/passwd有7个字段
  用户名:密码占位符:UID:基本组GID:用户描述:家目录:解释器
  UID:0 超级用户
  UID:1-999 系统伪用户,不能登录系统
  UID:1000-65535 普通用户,管理员创建的用户
  root: x:0:0:root:/root:/bin/bash 
 #/etc/default/useradd 
  GROUP=100   #用户默认组(老版本会用) 
  HOME=/home  #用户家目录 
  INACTIVE=-1 #密码过期宽限天数(/etc/shadow文件第7个字段)
  EXPIRE=     #密码失效时间(/etc/shadow文件第8个字段)
  SHELL=/bin/bash        #默认使用的解释器
  SKEL=/etc/skel         #模板目录 
  CREATE_MAIL_SPOOL=yes  #是否建立邮箱
View Code

2.密码管理

 #密码要求
  长度>=8,包含数字,大小字母和特殊字符
 #passwd常用选项:
  S,l,u,d(查,锁,解,删)
  passwd -S user8 #查看用户密码信息
  user8 LK 2022-06-19 0 99999 7 -1 (密码已被锁定。)
  对应/etc/passwd下的三四五六八字段
  passwd -l user2 #锁定用户密码
  passwd -u user2 #解锁用户密码
  passwd -d user2 #删除用户密码
 #chage
  chage命令用于修改/etc/shadow文件信息
  chage -d 0 user2 #修改第三个字段(密码最后一次修改时间)
 #/etc/shadow
  存放用户的密码信息,该文件默认任何人都没有任何权限(除了root)
  /etc/shadow有九个字段
 user1:$6$WW0ZdznDZvxL9gS2$MYHodMqcNK84VtgGN7Wr/rGMkmF17iOG/7ZlcWyLcvEwHDwpZRm.L5ZJw6VHYFUPQbIjXxz4rdrzlzsmLyw3p/::0:99999:7:::
  1.用户名
  2.密码加密字符串("*"表示密码已过期,"!!"表示没有密码)
  3.上次改密码的日期(从1970.1.1每过一天时间戳加1,若0下次登录必须改密码)
  4.不能密码修改的期限(0随时可以改密码,3表示3天内不能改密码)
  5.密码有效期
  6.密码到期前警告时间
  7.密码过期后的宽限天数
  8.密码失效具体时间(1970.1.1每过一天时间戳加1,-1代表永不失效)
  9.保留
View Code

3.组管理

 #命令
  groupadd(-g),groupmod(-n,-g),groupdel
  gpasswd(-a,-d)将用户添加到组或从组中删除还可以给组设置密码
 #文件
  /etc/group 
   #组信息文件 组名:组密码占位符:GID:组中附加用户
  /etc/gshadow
   #组密码文件 组名:组密码:组内管理员:组中附加用户
 #案例 
   groupadd -g 1555 student   #指定组的GID
   groupmod -n stugrp student #修改新组名为stugrp
   groupdel stugrp            #删除组
   gpasswd -a hary stugrp     #将用户加入到组
   gpasswd -d tom stugrp      #将用户从组中删除
View Code

1.7 权限管理

1.普通权限管理

 #chmod(-R):设置用户对文件的权限
  chmod [-选项] 归属关系+-=权限类别 文件...
  chmod g+x,o+x hello
  chmod ugo=rwx hello
  chmod -R 777 /test #此时test目录下所有文件和目录权限都是777
  
 #chown(-R)设置文件的所有者和所属组关系
  chown [-选项] 所有者:所属组 文档 #同时修改所有者和所属组身份
  groupadd yunwei
  gpasswd -a user1 yunwei
  chmod g=rwx hello.txt
  chown :yunwei hello.txt

 #umask预设权限
  用于显示或设置创建目录的权限掩码
  #以数字形式显示目录默认权限掩码
  umask -p  #umask 0022,第一个0表示特殊权限
  #以字母形式显示目录默认权限掩码
  umask -S #u=rwx,g=rx,o=rx
  #设置目录默认权限掩码(临时生效)
  umask g+w 
  umask g-w
  注意:facl中的mask是所有者的权限掩码。
View Code

2.SetUID特殊权限(红色背景色)

  #理解
  普通用户在执行带有SUID权限的可执行文件时临时拥有文件所有者的权限,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有身份(附加在u的x权限为,x权限会变成s权限)
  #应用
  若给vim设置suid,则普通用户可用vim以root身份将自己的uid设置为0,变成root。
  #案例
  普通用户使用cat命令是默认无法查看/etc/shadow
  cat /etc/shadow        #提示权限不够
  which cat              #/usr/bin/cat
  ll /usr/bin/cat        #-rwxr-xr-x.
  chmod u+s /usr/bin/cat #设置权限
  ll /usr/bin/cat        #-rwsr-xr-x.
  cat /etc/shadow        #可以查看
View Code

3.SetGID特殊权限(黄色背景色)

 #理解
  普通用户在执行带有SGID权限的可执行文件时临时拥有文件所属组的权限,该权限只在程序执行过程中有效,程序执行完毕后用户恢复原有组身份(附加在所属组的x权限为,x权限会变成s权限)
  当对一个目录作设置了SGID权限后,普通用户在该目录下创建的文件的所属组,均与该目录的所属组相同
  
 #案例(对目录)
 ll -d /test6
  #drwxrwxrwx. 2 root root 6 4月  11 15:59 /test6
 chmod g+s /test6
 touch /test6/1.txt
 ll /test6/1.txt 
  #-rw-r--r--. 1 root root 0 4月  11 16:00 /test6/1.txt
 chown :lisi /test6
 ll -d /test6
  #drwxrwsrwx. 2 root lisi 19 4月  11 16:00 /test6
 touch /test6/2.txt
 ll /test6/2.txt 
  #-rw-r--r--. 1 root lisi 0 4月  11 16:01 /test6/2.txt

 #案例(对可执行文件)  
  locate命令查询文件时,都是从/var/lib/mlocate/mlocate.db查的,普通用户对/var/lib/mlocate和mlocate.db的权限都是---,并且它们的所属组都是slocate,该组用户都具有r权限。/usr/bin/locate有SGID权限,在查找文件时会以slocate组用户的的身份在mlocate.db查找
View Code

 

 4.SBIT特殊权限(绿色背景色)

 #理解
  目录设置SBIT权限后,除了root可以删除所有文件以外,普通用户就算对该目录拥有rwx权限,也只能删除自己建立的文件,不能删除其他用户建立的文件
 #案例
  [root@localhost ~]# chmod o+t /test
  [root@localhost ~]# ll -d /test
      #drwxrwxrwt. 2 root root 6 4月  11 16:07 /test
  [lisi@localhost test]$ ls
   kenji.txt  laowang.txt  lisi.txt
  [lisi@localhost test]$ rm -rf *
   rm: 无法删除"kenji.txt": 不允许的操作
   rm: 无法删除"laowang.txt": 不允许的操作
View Code

5.FACL文件系统访问控制列表

 #理解
  单独为每一个用户定制一个权限
  +表示文件有acl权限,facl中的mask是所有者的权限掩码。
  
 #命令格式
  setfacl 选项 归属关系:用户名:权限 文档
  常用选项:
    m 设置权限
    x 删除指定用户权限
    b 删除所有用户权限
 #案例
 setfacl -m u:natasha:rx /yunwei/ #为natasha设置ACL权限
 ll -d /yunwei/   #drwxrwx---+ 2 root yunwei  
 getfacl /yunwei  #查看目录ACL权限
   getfacl:Removing leading '/' from absolute path names
   # file: yunwei
   # owner: root
   # group: yunwei
   user::rwx
   user:natasha:r-x
   group::rwx
   mask::rwx
   other::---
 setfacl -x u:tom /yunwei #删除指定用户ACL权限
 setfacl -b /yunwei       #删除所有用户ACL权限
View Code

2.shell脚本

2.1 shell脚本了解

1.语言分类  

View Code

2.shell了解

  Shell是一门编程语言,如:C  C++  java 等类似。
  Shell语言支持大部分编程语言都具备的功能:if判断,for循环,变量,数组,函数,加减乘除,逻辑运算。
 shell四剑客:
   grep:文件内容过滤(行过滤)
   awk:跟grep类似,文件内容过滤(awk支持列过滤)
   sed:文本编辑器(跟vim类似,sed是非交互)
   find:文件或目录查找(和locate功能一样,但locate比较轻量一些,是在数据库中查找。find查找比较细致,但比较消耗cpu资源)
    which命令只能用于查找程序文件,find不能查找程序文件
  
注意:达内视频课 https://ke.qq.com/course/237233/1548129552015025#term_id=100279783   
View Code

3.Shell脚本组成

View Code

4.编写并执行脚本

View Code

5.脚本注意事项

 bash脚本中不能使用别名,ll不能使用

2.2 特殊符号,变量,文件状态

1. 系统常用特殊符号的使用

 * #代表任意多个任意字符 
 ? #代表任意单个任意字符
 {a,b,cd,abcd} #代表间断内容(可以查找10以上的内容)
 {a..g} #代表连续内容
 [1,3,5,8] #代表间断内容(中括号查不到10以及以上的内容)
 [0-9][a-z] #代表连续内容
 " "      #双引号,引用整体
 ' '       #单引号,引用整体并取消所有特殊字符含义
 $[]     #四则运算(+ - * / % 取余数) 
 $()     #将命令的输出结果作为参数
 ``      #将命令的输出结果作为参数
 echo "$PATH"  #输出/usr/local/sbin:/usr/local/bin……
 echo '$PATH'  #输出$PATH
 echo $[10%3]  #输出1
 touch $(date +%F)-ab.txt#结果为2021-05-09-ab.txt(注意空格)
 touch "`date`"-file.txt #不加""会形成多个文件
View Code

2. 变量

View Code

3.判断文件状态

View Code

2.3  字符串对比和判断,整数比较和计算

1.字符串对比

  #相等 ==  
  #不相等 !=    
 [ $USER == root ]
 [ $root != he ]
 [ abc != bcd ]

2.字符串判断 

View Code

3.字符串截取

View Code

4.字符串替换

View Code

5.字符串掐头去尾

View Code

6.整数比较

View Code

7.常用数值运算方式

View Code

2.4 Shell条件判断与循环

1.条件判断结构

View Code

2.if条件判断结构 

View Code

3.case语法结构

View Code

4.for循环结构

View Code

5.while循环结构

View Code

6.脚本中断及退出

View Code

2.5 函数和数组

1.函数

View Code

2.数组

View Code

2.6 正则表达式

1.概述

View Code

2.基本正则符号 

View Code

3.扩展正则

View Code

4.案例

View Code

2.7 grep

1.命令格式

grep [-选项] "查找条件" 目标文件
View Code

2.常用选项

   n    #以行号形式输出
   i    #忽略字符串大小写
   v    #排除匹配的内容
View Code

3.案例

  #过滤包含root关键字的行
   grep root /etc/passwd
  #排除以#号开头的行
   grep -n -v '^#' /etc/fstab
  #匹配以root结尾的行(并显示行号)
   grep -n 'root$' /etc/passwd
  #显示该文件内有效配置的行
   grep -v '^#' /etc/login.defs | grep -v ^$ -n | wc -l
      #注意:-n要放到|后面,否则文件就没空行了
  多个选项要加|排除
  -n选项要在最后(否则去不掉空行)
View Code

2.8 awk编程语言

1.概述

  awk和grep一样用来做数据过滤。并且在过滤数据时支持仅打印某一列。
View Code

2.命令格式

  命令格式1:awk [选项] '条件1{指令} 条件2{指令}' 文件名
  命令格式2:前置命令 | awk  [选项]  '条件{指令}'
           只能用单引号
  常用选项:
         -F   #指定分隔符,
              #若不指定,默认以空格或tab键为默认分隔符
              #可通过[]集合匹配多种单个字符
  常用指令:
          print 是最常用的打印指令
  awk内置变量:            
         $1第一列
         $2第二列
         $3第三列,
         NR:文件当前行号
         NF:文件当前列数
View Code

3.过滤

 awk '{print $1,$3}' 1.txtt #打印第一列和第三列(空格tab分隔)
 awk -F: '{print $1}' /etc/passwd #以分号为分隔符
 awk -F[:/] '{print $1,$10}' /etc/passwd#以分号和/为分隔符
 awk -F: '{print $1,"用户的解释器为:",$7}' 1.txt #加入常量
   root 用户的解释器为: /bin/bash 
 awk -F: '{print NR,NF,$NF}' 1.txt #打印每一行行号和对应列数以及最后一列的值 
 awk -F: '/^root/{print}' 1.txt #正则表达式过滤root开头的行
 awk -F: '$1~/root/' /etc/passwd #模糊匹配第一列包含root的行
 awk -F: '$7!~/nologin/{print $1,$7}' /etc/passwd
             #排除第7列noloogin的行,打印第1列与第7列
 awk -F: '/^(root|adm)/{print $1,$7}' /etc/passwd
             #以root或者adm开头的行,打印第1列与第7列
View Code

4.awk使用数值/字符串比较设置条件

 ==,!=,>=,<=,>,<
 awk 'NR==3{print}' /etc/passwd #打印行号为3的行
 awk -F: 'NR==3{print $1,$3}' /etc/passwd #打印行号为3的第一列和第三列(sed -n '3p' /etc/passwd只能打印第三行)
 awk -F: '$1!="root"{print}' /etc/passwd #第一列不等于root的行 
 awk -F: '$3>=1000{print NR,$1,$3}' /etc/passwd #打印第3列大于等于1000
 awk -F: '$3>500 && $3<1000 {print $1,$3,$7}' /etc/passwd
                                  #第3列大于500并且小于1000
View Code

5.awk过滤时机

  awk ‘BEGIN{指令} {指令} END{指令}’  文件名
  BEGIN{指令}    #读取文件内容之前执行一次指令
  {指令}         #读取文件过程中,读一行,执行一次
  END{指令}      #读取文件内容之后执行一次指令
awk 'BEGIN{print "正在处理中"}' #输出提示
awk "BEGIN{x=10;print x+5}"   #定义变量,四则运算,输出15
awk 'BEGIN{x=0}/bash$/{x++}END{print x}' /etc/passwd #统计bash解释器的用户多少个
View Code

6.awk分支结构

 #1.if单分支格式:if(条件){指令}
 awk  -F: '{if($3>=1000){x++}} END{print x}' /etc/passwd
 #2.if双分支格式:if(条件){指令}else{指令}
 awk -F: '{if($3>=1000){i++} else{x++}} END{print i,x}' /etc/passwd
View Code

7.awk数组

#awk定义数组方式
 方式一:数组名[下标]=值
 方式二:数组名=awk 'BEGIN{x[0]=10;x[1]=20;print x[0],x[1]}' #不能用x[@]
View Code

8.awk循环结构

 命令格式:for(变量名 in 数组名){print 数组名[变量]} 
[root@localhost ~]# awk 'BEGIN{a[0]=00;a[1]=11;a[2]=22;for(i in a){print i,a[i]}}'
View Code

9.案例

#1.通过awk打印剩余内存
 free -h | awk '/Mem/{print $4}' 

#2.使用awk过滤系统根分区使用情况
 #方式一:
 df -h | grep '/$' | awk '{print "根分区可用空间",$4}' 
 #方式二:
 df -h / | awk 'NR==2{print "根分区可用空间",$4}'
 #取出值
 x=`df -h | grep '/$' | awk '{print $4}' | awk -FG '{print $1}'`

#3.统计开机后有哪些用户登录过,登录过多少次
who | awk '{ip[$1]++}END{for(i in ip)print i,ip[i]}'   
                                 #结果是root 1  user 1

#4.过滤ip地址访问了服务的次数,可以统计一个访问日志里面那个ip地址访问公司网站的次数
[root@localhost script]#cat /var/log/httpd/access_log | awk '{ip[$1]++}END{for(i in ip)print i,ip[i]}'
  #结果是192.168.0.1 63,表示.0.1这个地址访问了服务63次
View Code

2.9 sed流式编辑器

1.概述

View Code

2.命令格式

View Code

3.查看

View Code

4.删除

View Code

5.替换

View Code

2.10 find

1.命令格式

 find 查找路径 条件1 条件2 [-exec 处理命令 {} \; ] 
  #–exec 可接额外的命令来处理查找到结果
  #{} 代表find查找到的内容被放置{}中
  #\; 代表额外处理命令结束
View Code

2.常用查找条件

  -name “文件名” 
  -iname 按文件名查找忽略大小写
  -user 用户名
  -type 类型(f文件 d目录  l链接文件)
  -size 文件大小(k,M,G,+大于,-小于)(尽量用k不用M,M容易出错)
  -a (and并且)两个条件同时满足
  -o (or或者)两个条件满足任意一个即可
  -mtime 按日期查找(+代表多少天之前,- 代表多少天之内,0代表24小时之内)
View Code

3.案例

find /etc/ -name '*tab' #按名字查找
 find /home -user lisi   #查找属于lisi用户的文件
 find /var/log -type d   #查找类型为目录的条件
 find /var/log -size -10k -type f #查找小于10k的文件
            #du -h /var/log/boot.log-20210417
 find /var/log -size +10k -a -size -20k -type f
            #找大小在10k~20k之间的文件
 find /var/log -name "*.log" -o -size -10k -type f                 #多个条件满足一个就行
 find /var/log -mtime +30 -type f #30天前修改过的文件
 find /var/log -mtime -30 -type f -exec cp {} /opt \;              #30天前修改过的文件,拷贝到/opt目录下
  find /var/log -name *.log -type f -a -mtime +10 -exec cp /dev/null {} \; #查找以.log结尾的文件,清空文件内容
 
 对比:
 ls /etc/*.conf #只能在/etc这一层目录去查找
 find /etc/ -name '*.conf' -type f #所有的子目录都会查找

 注意:
 find一般不能搭配|,若| wc 则可以
View Code

2.11 常用脚本

1.创建用户

View Code

2.编写猜数字脚本

View Code

3.搭建本地yum仓库

View Code

4.安装软件包

View Code

5.测试企业的服务器联通性

View Code

6.监控网卡进出口流量

View Code

 7.fork炸弹

View Code

8.截取一个随机的8位密码

View Code

9.批量修改文件扩展名

View Code

3.磁盘分区

3.1 磁盘了解

1.磁盘存储数据经历的过程

添加新硬盘--分区--格式化文件系统--挂载使用
View Code

2.磁盘类型

  IDE接口类型:价格便宜,传输速度慢,比较古老
  SCSI接口类型:早期主要用于服务器理领域
  SAS接口类型:目前在服务器领域比较流行,数据传出速度快,支持在线更换硬盘
  SATA接口类型:跟SAS类似
  SSD接口类型:固态硬盘接口,价格昂贵,数据传输速度快,利用内存的机制读写数据,主要应用在个人电脑
  NVMe接口类型:固态硬盘接口,价格昂贵,数据传输速度快,利用内存的机制读写数据
View Code

3.了解

扇区是磁盘存储数据的最小单元,默认一个扇区可以存储512字节的数据
1EB=1024PB,1PB=1024TB,1TB=1024GB
View Code

3.2 查看磁盘和分区

1.查看磁盘

#a.列出系统磁盘,分区,逻辑卷信息
  #sda1:sd代表SCSI磁盘,a代表第一块磁盘,1代表第一个分区
[root@localhost ~]# 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.3G  0 rom  /mnt/centos
       
#b.列出系统磁盘,分区,逻辑卷信息,文件系统类型和UUID 
[root@localhost ~]# lsblk -f 

#c.只显示磁盘
[root@ansible-server ~]# lsblk -d
NAME MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda    8:0    0   20G  0 disk
sdb    8:16   0  100G  0 disk
sdc    8:32   0  100G  0 disk
sr0   11:0    1  4.3G  0 rom  /mnt/centos
#d.只显示具体某个分区
[root@ansible-server ~]# lsblk -df /dev/sda1
NAME FSTYPE LABEL UUID                     MOUNTPOINT
sda1 xfs          219-41de-4520-9935-0ec1d /boot
View Code

2.查看分区使用情况(查看挂载情况)

 #-h易读方式显示,-T显示文件系统类型
[root@ansible-server ~]# df -hT
文件系统                类型      容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs        17G  7.5G  9.6G   44% /
devtmpfs                devtmpfs  894M     0  894M    0% /dev
tmpfs                   tmpfs     910M     0  910M    0% /dev/shm
tmpfs                   tmpfs     910M   11M  900M    2% /run
tmpfs                   tmpfs     910M     0  910M    0% /sys/fs/cgroup
/dev/sdb1               xfs        10G   33M   10G    1% /db_bak
/dev/sr0                iso9660   4.3G  4.3G     0  100% /mnt/centos
/dev/sda1               xfs      1014M  179M  836M   18% /boot
/dev/sdc1               xfs        20G   33M   20G    1% /web_bak
tmpfs                   tmpfs     182M   12K  182M    1% /run/user/42
tmpfs                   tmpfs     182M     0  182M    0% /run/user/0
 #查看指定分区
[root@ansible-server ~]# df -hT /
文件系统                类型  容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root xfs    17G  7.5G  9.6G   44% /
View Code

3.查看分区类型

 fdisk -l /dev/sdb(vgs lvs):查看磁盘分区信息
View Code

4.查看分区文件系统类型和UUID

blkid /dev/sda1(lsblk -f /dev/sda1)
View Code

3.3.分区

1.MBR分区格式

 #原理
   一块硬盘只能划分4个主分区,后来增加扩展分区功能,在扩展分区内可划分逻辑分区,最大支持2.2T磁盘容量(SCSI接口硬盘逻辑分区最多可以划分11个)
 #命令
 fdisk /dev/sdb(m,p,n,d,q,w,),三次回车(主,号,起始),+10G
  m      #获取命令帮助        
  p      #显示磁盘分区表(dos就是MBR分区格式)  
  n   #新增加一个分区(p/e) 
  d      #删除一个分区   
  q      #不保存分区退出     
  w      #保存分区退出     
View Code

2.GPT分区格式

 #原理
  可划分128个主分区,最大支持18EB磁盘容量
 #命令
 gdisk /dev/sdc(?,p,n,d,q,w,),两次回车,+10G,回车(分区类型)
  ?      #获取命令帮助        
  p      #显示磁盘分区表(dos就是MBR分区格式)  
  n   #新增加一个分区(p/e) 
  d      #删除一个分区   
  q      #不保存分区退出     
  w      #保存分区退出   
View Code

3.4 格式化文件系统

1.文件系统类型

 #ext4
 单个文件系统最大支持1EB的分区容量,单个文件最大可以存储16TB数据(CentOS6默认)
 #xfs
单个文件系统最大支持8EB分区容量,单个文件最大可以存储500TB的数据
(CentOS6默认)
 #swap文件系统
 交换分区,拿硬盘空间去充当(虚拟)内存去使用,降低服务器的性能
 临时关闭swap分区:swapoff -a
 永久关闭swap分区:vim /etc/fstab,注释掉swap行,然后重启 
            (mount -a也不行,不过swapoff -a马上就生效了)
View Code

2.命令 

 mkfs.xfs /dev/sdb1
 mkfs.ext4 /dev/sdb1
View Code

3.5 挂载

1.原理

 在Linux系统中用户无法直接使用硬件设备的,硬件设备在系统中都是以只读的方式存在的,必须挂载后才可写入文件。挂载就是给我们用户提供一个可以使用设备的一个接口
View Code

2.临时挂载

mount /dev/sdb1 /mybak
View Code

3.开机自动挂载

 vim /etc/fstab   mount -a
  /dev/sdb5 /test xfs defaults 0 0
  第四个字段:挂载参数
  第五个字段:是否对文件系统进行备份,0不备份,1为备份
  第六个字段:是否检查文件系统挂载顺序,0不检测
卸载文件系统:umount /mybak
View Code

4.LVM逻辑卷管理

4.1 LVM概述

1.原理

 将底层的物理分区整合成一个大的虚拟硬盘,这个虚拟硬盘可以实现无限扩容
 逻辑卷技术是通过Linux系统内核dm(device mapper)设备映射模块
View Code

4.2 创建逻辑卷

1.创建

 #创建卷组
 vgcreate db_vg /dev/sdd1 /dev/sdd2 /dev/sdd3
 #显示卷组信息
 vgs(vgs db_vg、vgdisplay db_vg)
 #创建逻辑卷
 lvcreate -L 10G -n db_lv db_vg
 #查看逻辑卷信息
 lvs
View Code

2.格式化

 #格式化文件系统
  mkfs.xfs /dev/db_vg/db_lv 
 #查看文件系统类型
  blkid (lsblk -f) /dev/db_vg/db_lv
View Code

3.挂载 

 #临时挂载
  mount /dev/db_vg/db_lv /dbbak
 #永久挂载
  vim /etc/fstab
  /dev/db_vg/db_lv  /dbbak xfs defaults 0 0
 #查看挂载情况
  df -hT
 #查看卷组的剩余空间
  vgs 
View Code

4.3 扩容

1.扩容逻辑卷

 #扩容逻辑卷前先查看卷组剩余空间
  vgs
 #扩容逻辑卷
  lvextend -L +19.9G /dev/db_vg/db_lv
 #查看逻辑卷信息
  lvs #看到逻辑卷容量已经变大了
      #df -h查看发现正在使用中的容量还是原来的 
 #扩展文件系统
  xfs_growfs (resize2fs) /dbbak
 #查看
  df -hT  
View Code

2.扩展卷组

 #扩容卷组先看有没有未分区磁盘,或未挂载的分区
  lsblk
 #扩容
  vgextend db_vg /dev/sdd{4..6}
 #查看
  vgs
View Code

4.4 删除逻辑卷

1.方法

  要先卸载才能删除逻辑卷。删除时首先删除LV逻辑卷,再删除VG卷组,最后删除PV物理卷。
View Code

2.步骤  

 #a.卸载
  删除开机自动挂载:vim /etc/fstab 
  删除临时挂载:umount /dblod/
  查看:df -h
 #b.删除逻辑卷
  lvremove /dev/db_vg/db_lv 
  注意:删除swap逻辑卷(注意要先临时关闭swap分区,然后永久关闭swap分区)
  lvremove /dev/centos/swap
 #c.删除卷组
  vgremove db_vg
 #d.删除物理卷,恢复至普通分区
  此时使用pvs命令看到之前的分区还是lvm2的格式
  方式一:强制覆盖
   mkfs.xfs -f /dev/sdd1 
  方式二:直接删除物理卷
   pvremove /dev/sdd2
View Code

4.5 移除硬盘

1.移除硬盘 

 若要直接移除硬盘要先把分区删掉,删除分区要先卸载正在使用的分区
 #查看挂载点
  lsblk
 #卸载
  umount
  vim /etc/fstab
 #删除分区
  fdisk /dev/sdb
 #移除硬盘
View Code

2.逻辑卷的缩减

 缩容比较危险,几乎不会用到。
 若要缩减,先缩减文件系统的空间,在缩减逻辑卷的空间
 不允许联机缩减,命令lvreduce
View Code

5.RAID磁盘阵列

5.1 RAID了解

1.概念

  RAID磁盘阵列用来保障保障企业数据的可靠性。可以提高数据读写速度,并提供冗余数据的功能。(逻辑卷主要是扩容,RAID主要是数据冗余)
View Code

5.2 RAID级别

1.RAID0

  至少由2块磁盘组成,在整个RAID级别中读写效率最高。
  将文件等量存放在不同的磁盘并行写入数据来提高效率,没有冗余功能
View Code

2.RAID1

  至少由2块磁盘组成,是完整备份。
  将同一个文件复制多份存放到不同磁盘提高可靠性,没有提高读写速度。
View Code

3.RAID5

  至少由3块磁盘组成,同时具备RAID0的读写效率和RAID1的数据冗余功能
  同一份文档分散写入不同磁盘,每个磁盘都有校验数据,其中校验数据会占用磁盘三分之一的空间,三分之二的空间存放原始数据。允许同时坏一块磁盘(硬盘大小要保持一致,如果硬盘空间不一致,最终可用空间以最小的盘为准)
View Code

4.RAID6

  至少由4块磁盘组成
  同一份文档分散写入不同磁盘,每个磁盘都有校验数据,由于采用双校验算法,所以校验数据量是RAID5的两倍,需要占用2块磁盘空间存放校验数据,两块盘存放原始数据。允许同时坏2块磁盘。
  由于数据校验的算法计算量偏大,所以在速写速度上没有RAID5快
View Code

5.RAID10

 至少需要4快磁盘组成,先将4快磁盘组成两组RAID1,再将两组RAID1组成一个RAID0,既能够提高数据读写速度,还有冗余功能,可用容量是总容量一半(可以左边坏一个,右边坏一个)
View Code

6.进程管理

6.1 进程了解

 1.程序

 程序是一组命令指令的集合,用来实现特定的问题。
 程序是静态的,占用磁盘空间。
View Code

2.进程

 进程是正在运行中的程序。
 进程是动态的,占用内存空间。
 每启动一个进程,系统就会为它分配内存空间并分配一个PID号。每个进程都有两种方式存在,前台与后台。
View Code

3.线程

 线程是操作系统能进行调度的最小单元,一个进程中可以并发多个线程。
View Code

6.2 查看进程

1.查看进程树

 pstree        #查看所有进程
 pstree user1  #查看user1用户的进程
 pstree -pau   #p显示进程ID,a显示完整命令行,u显示进程账号
View Code

2.unix格式静态查看系统进程

ps aux:
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
u1   934 0.0  0.1        pts/1  R+  09:45  0:00 ps au
    a   #显示当前终端所有进程
    u   #以用户格式输出
    x   #当前用户在所有终端下的进程
View Code

3.Linux格式静态查看系统所有进程(父进程)

ps -ef  
UID         PID   PPID  C STIME TTY          TIME CMD
root         22      2  0 08:57 ?        00:00:00 [md]
    -e     #显示系统所有进程
    -l     #以长格式输出信息
    -f     #显示最完整的进程信息
    
 #TTY :进程在哪个终端运行,如果内核直接调用则显示“?”,tty1-tty6表示本机终端登录的用户进程,pts/0-255则表示远程终端登录用户的进程
 #STAT:进程状态:R(Running)运行,S(Sleep)休眠,s包含子进程,T(stop)停止,Z(Zombie)僵尸,+后台进程
View Code

4.查看mysql进程启动没,或是否正常启动

 ps -ef | grep mysql
View Code

5.查找僵尸进程与其父进程

 ps -e -o ppid,stat | grep Z
 kill -9 PPID
命令解释:
 -o 自定义输出字段,我们设定显示字段为 stat(状态), ppid(父进程id), z或者Z的进程为僵尸进程,所以我们使用grep抓取stat状态为zZ进程
View Code

6.3 动态查看系统性能和状态

 1.top命令

前五行:时间用户和负载,进程状态信息,cpu信息,内存信息,swap信息
 uptime  查看cpu负载(显示top命令第一行)
 free -h 查看内存信息(显示top命令第4,5行)
 #常用选项
   -d   #指定刷新秒数,默认为3秒刷新一次 
 #交互界面显示指令
  - h          #获取交互模式帮助
  - P(大写)     #按照CPU使用资源排序
  - M          #按照内存使用资源排序
  - q          #退出
View Code

 

 2.top命令每行含义

 第一行:CPU1分钟,5分钟,15分钟之前平均负载量,
   1核CPU若高于1代表负载过高,2核CPU若高于2代表负载过高
 第二行Tasks:
   正在运行的进程数,运行,睡眠,停止,僵尸进程数。
   僵尸进程是当子进程比父进程先结束,而父进程又没有回收子进程,释放子进程占用的资源,此时子进程将成为一个僵尸进程。
 第三行%CPU:
   id是空闲CPU百分比
 第四行KiB Mem:
   总内存,空闲内存,已使用内存。
 第五行KiB Swap。
 第六行:
  PR:进程优先级执行顺序,越小越优先被执行
  NI:负值表示高优先级,正值表示低优先级,越小越优先被执行
View Code

6.4 检索进程

#过滤sshd进程,只显示PID
 pgrep sshd #显示7060和16531
#模糊过滤sshd进程,显示进程名和PID(a列出完整命令行)
 pgrep -l sshd
#精确匹配进程名
 pgrep -xl crond
#过滤指定用户的进程(pstree -pua lisi)
 pgrep -lU lisi
#过滤用户在指定终端开启的进程信息
 pgrep -lU lisi -t pts/1
View Code

6.5 进程卡后台调度

#创建后台程序
sleep 5m &
#查看后台进程(l显示进程号)
jobs -l
#将后台进程放入前台运行
fg 1
#挂起前台进程放入后台
ctrl+z
#激活后台的进程
bg 2 
View Code

6.6 杀死进程

进程信号:-9强杀 -1重启 -15正常杀死(默认)
#按进程号杀死进程 
 kill -9 进程号
#按进程名杀死进程 (结合ps)
 killall -9 进程名
#杀死指定用户的所有进程(结合who)(将用户踢出系统)
killall -9 -u 用户名
#杀死指定终端的所有进程(结合who)(踢出指定终端的用户)
pkill -9 -t pts/3 
View Code

6.7 用户登录分析

users 只显示用户名
who (用户名,终端,登录时间,远程登录ip)
w (用户名,终端,登录时间,远程登录ip,当前正在执行的任务)
last   #显示登录成功的用户信息(最近两次用-2lastb #显示登录失败的用户信息
View Code

7.服务和端口管理

7.1 systemd管理服务

1.概述

  systemd是内核加载的第一个进程(PID=1),负责整个系统的运行与服务控制,使用systemctl命令来(管理RPM包的服务)
  服务起来后使用netstat|ss命令看端口,任何服务都是通过端口来接收请求的。
View Code

2.systemctl命令

 systemctl start 程序名        #启动服务
 systemctl restart 程序名      #重启服务
 systemctl stop 程序名         #停止服务
 systemctl enable 程序名       #设置服务随机自启
 systemctl disable 程序名      #设置服务不随机自启
 systemctl status 程序名       #查看服务状态
 systemctl is-enabled 程序名   #查看服务是否被设置随机自启
View Code

7.2 查看端口

1.查看端口

netstat|ss 命令用于查看系统中启动的端口信息
 -a    显示所有端口信息
 -n    以数字格式显示端口号
 -t    显示TCP连接的端口
 -u    显示UDP连接的端口
 -l    显示服务正在监听的端口信息
 -p    显示监听端口的服务名称是什么(也就是程序名) 
View Code

2.查看vsftpd服务的端口

 ss -anptul | grep vsftpd 
View Code

8.软件包

8.1 概述

1.开源软件包类型

  源码包
  二进制包(RPM包)
  容器镜像文件
View Code

2.源码包和RPM包的特点

 #a.源码包
  可以查看软件源码,并自定义安装路径和安装功能
  缺点是需要用户手动编译,手动解决软件包的依赖关系
 #b.RPM包:
  被提前编译过,安装简单快速。无法自定义安装路径和功能
View Code

8.2 源码包

1.源码包安装nginx步骤

#1.从官网下载源码包
 http://nginx.org/
 进去后选择下载,找到对应版本源码包,右键复制链接地址,然后wget链接
 或直接wget https://nginx.org/download/nginx-1.18.0.tar.gz
 
 若要下载rmp包:
  输入网址nginx.org,右侧选documentation,选第一个Installing nginx,选第一个packages,下面选RHEL/CentOS版本,复制baseurl中的地址http://nginx.org/packages/centos/,选7版本,x86_64/,RPMS/,点击1.18.0和1.20.0-1版本下载。
 
#2.安装源码包依赖包
(百度搜索centos安装xx源码包所需依赖,如果是C语言的包,必须要安装gcc)
打开官网,点击'文档''管理员指南''安装NGINX和NGINX Plus'
,'安装NGINX开源','从源代码编译和安装',我们可以按照教程安装也可以直接用yum安装,依赖包一般后面都带有devel
yum -y install gcc pcre-devel openssl-devel zlib-devel

#3.解压源码包并进入源码包路径
tar -xf nginx-1.20.0.tar.gz 
cd nginx-1.20.0/
ls看到里面有个configure脚本(可能在auto目录下),用于检测系统环境,看有没有相关的依赖

#4.configure检查系统环境并指定路径与功能
./configure #若是出现error表示缺少源码包
            #error: C compiler cc is not found要安装gcc
./configure --prefix=/usr/local/nginx
           #--prefix指定软件包安装路径(不指定默认也是这个路径)
           
#5.make编译,将源代码转换成二进制
make

#6.make install 安装软件包
 make install  
View Code

2.源码包管理方式

#1.了解
  源码包在管理时有自己的相关管理命令。它的相关管理命令都是通过自己的程序文件。一般源码包会自带一个程序,都在一个目录下边。如nginx包的程序文件在/usr/local/nginx/sbin,里面有个可执行文件nginx,比如要启动服务,把软件运行起来都要通过运行这个文件。
#2.启动nginx服务
/usr/local/nginx/sbin/nginx
#3.查看状态
 对于源码包,服务启动后,只能通过过滤进程和端口来看他的状态。
 如果有进程有端口,就证明服务已经起来了。
 ss -antulp | grep nginx  
View Code

8.3 二进制包

8.3.1 rpm命令

 1.RPM包命名规则

  名称,版本,补丁次数,适合的系统,适合的cpu架构,rpm包扩展名。
View Code

2.rpm常用选项

  -q   #软件是否安装(不能查源码包)
  -qa  #列出所有已安装软件(搭配grep和*模糊查询)
 
  -ql  #接包名,列出文件目录
  -qf  #接文件名,查询文件由哪个软件包产生
  -qi  #列出软件包详细信息(何时安装,网址多少,有无密钥ID)

  -ivh      #i安装,v显示详细信息,h显示软件安装进度
  -Uvh  #升级安装软件包(可提前下载也可以直接在线升级,做好备份 
  -e         #卸载软件包
  --nodesps #卸载软件包时忽略依赖关系
  
  --import   #导入红帽签名文件
View Code

3.示例

  rpm -q nginx #查询软件包是否安装
  rpm -qa | grep ngi* #记不住全名时
  ls /mnt/Packages | grep vsftpd #查看是否有这个包

rpm -ivh nginx-1.18.0-1.el7.ngx.x86_64.rpm #包在当前目录
rpm -Uvh nginx-1.20.0-1.el7.ngx.x86_64.rpm # 包在当前目录
rpm -e --nodesps nginx  #卸载
rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/Packages/vsftpd-3.0.2-28.el7.x86_64.rpm #网络链接下载
View Code

4.rpm命令解决依赖

rpm -ivh httpd-2.4.6-95.el7.centos.x86_64.rpm #依赖关系
警告:httpd-2.4.6-95.el7.centos.x86_64.rpm: 头V3 RSA/SHA256 Signature, 密钥 ID f4a80eb5: NOKEY
错误:依赖检测失败:
    /etc/mime.types 被 httpd-2.4.6-95.el7.centos.x86_64 需要
    httpd-tools = 2.4.6-95.el7.centos 被 httpd-2.4.6-95.el7.centos.x86_64 需要
    libapr-1.so.0()(64bit) 被 httpd-2.4.6-95.el7.centos.x86_64 需要
    libaprutil-1.so.0()(64bit) 被 httpd-2.4.6-95.el7.centos.x86_64 需要
 #文件依赖:百度搜索/etc/mime.types,发现缺少一个包,若没yum在清华仓库搜索该包并rpm安装
 #软件依赖:清华仓库搜索该包并安装
 #模块依赖:www.rpmfind.net找对应版本包安装
View Code

8.3.2 yum软件包管理

1.yum概述

yum可以自动解决软件包之间的依赖关系,需要软件仓库的支持
View Code

2.yum命令

#1.检测仓库可用性
yum repolist #看到Couldn't open说明挂载掉了,设置永久挂载
#2.查看yum仓库是否有这个包,这个包是否已安装
yum list httpd    #有@符号的是已安装的
yum list | grep bash-* #bash-completion.noarch超级补齐  
#3.安装软件包
yum -y install gcc #不用全名(d是只下载不安装)
  #若只下载不安装ansible,下到哪里了呢:find / -name 'ansible'
  #本地下载:yum localinstall nginx-1.18.0-1.el7.ngx.x86_64.rpm
#4.更新
yum update nginx-1.20.0-1.el7.ngx.x86_64.rpm
#5.卸载(不会卸载依赖包)
yum remove nginx
#6.清除仓库缓存
yum clean all          
  #yum repolist会检测仓库里的软件包,检测完后会生产缓存
  #缓存会记录仓库中软件包的数量,也会记录软件包的存放位置
  #有了缓存后,再通过yum安装软件包,会先从缓存去读仓库的配置
  #如果我们现在卸载了挂载点/mnt,此时/mnt里面就没有东西了,
  #但此时仓库文件指向软件包的位置还是/mnt
  #此时yum install 会出现错误,我们使用yum clean all清空仓库缓存,然后yum repolist看到repolist为0。
  #clean后再查看发现真的有包,但下载不成功说明仓库没有要下载的包
#7.生成缓存
yum makecache       #生成yum仓库缓存提高软件包下载速度
yum  provides  命令  #搜索该命令由哪个软件包产生
    yum provides wget(搜不出来用yum search ifconfig)
yum list 软件包名 --showduplicates                         #列出仓库该软件所有版本
yum -y install --setopt=obsoletes=0  软件包全名    
  #指定安装具体版本,否则安装仓库内最新版 
View Code

8.4 搭建yum仓库

8.4.1 搭建本地yum仓库

1.临时挂载iso镜像文件

  mount /dev/sr0 /mnt/centos7 
     #/dev/sr0是光驱设备文件,里面存放系统镜像文件。
     #/dev/cdrom是/dev/sr0的链接文件。
View Code

2.永久挂载

  vim /etc/fstab
    /dev/cdrom /mnt/centos7 iso9660 defaults 0 0
View Code

3.重新加载

mount -a
View Code

4.搭建仓库

  rm -rf /etc/yum.repos.d/* #不加*连目录也删了
  vim /etc/yum.repos.d/local.repo
  [local]                      #仓库名称,具有唯一性
  name=local_base_centos       #仓库描述,不具有唯一性
  baseurl=file:///mnt/centos7  #指定仓库地址
  enable=1                     #1表示启动软件仓库
  gpgcheck=0        #是否检测软件包签名(密钥),0不检测,1检测
  priority=1#1-99,越小越优先(install yum-priorities才有)
View Code

5.检测

  yum repolist
View Code

8.4.2 配置网络yum仓库

1.下载阿里Base源(基本软件仓库,解决rpm软件的依赖关系)

  wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
    #wget将阿里base仓库复制到系统当中。-O指定下载路径
View Code

2.下载阿里epel源(额外软件仓库)

  wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
View Code

3.3.配置清华大学yum源(内容和阿里base源一样)

baseurl=https://mirrors.tuna.tsinghua.edu.cn/centos/7/os/x86_64/ 
View Code

4.生成yum仓库缓存提高软件包下载速度  

yum makecache

 阿里软件仓库:
   https://developer.aliyun.com/special/mirrors/notice 
View Code

8.4.3 本地和网络一起创建

  vim centos7.repo
  [development]
  name=CentOS7
  baseurl=file:///mnt/centos7
  enabled=1
  gpgcheck=0

  [epel]
  name=ailiyun
  baseurl=http://mirrors.aliyun.com/epel/7/x86_64/
  enabled=1
  gpgcheck=0
  
  [centos]
  name=cobbler
  baseurl=http://mirrors.aliyun.com/centos/7/os/x86_64/
  enabled=1
  gpgcheck=0
View Code

9. 常用操作

9.1 重置centOS7的root密码

如果忘记了root密码可以通过以下方式进行重置:
1.重启系统,在系统引导界面按"e"键进入编辑界面
2.光标移动到倒数第二行,在系统语言后边添加rw single   init=/bin/bash (rw表示读写权限,single表示单用户模式, /bin/bash解释器)修改单用户模式权限,可以理解为具备修改密码权限
3.输入Ctrl+x启动单用户模式
4.通过passwd命令修改root密码:passwd root
5.如果开启了SELinux,执行命令“touch /.autorelabel”,必须执行这个命令,不然重启会报错。(关闭状态也可以执行这个命令也没问题,所以避免出错,不管开启还是关闭最好都执行以下这条命令)
6.通过exec /sbin/init切换到命令行模式(上一步改完密码还没有生效,重启后才能生效。单用户模式不支持reboot命令,命令行模式支持
View Code

 

posted @ 2022-08-04 16:52  8300110  阅读(121)  评论(0)    收藏  举报
levels of contents