目录

  • 文件处理
    • ls预览
    • mkdir创建目录
    • rmdir删除空目录
    • pwd显示当前路径
    • cd切换目录
    • cp复制文件或目录
    • mv移动文件或目录
    • rm删除
    • touch创建文件
    • cat查看文件内容
    • more分页查看文件内容
    • less分页查看文件/目录内容
    • head查看文件前几行
    • tail查看文件后几行
  • 权限
    • chmod文件权限
    • chown用户权限
    • chgrp组权限
    • umask
  • 四.文件搜索
    • find文件搜索
    • locate文件资料库查找
    • which
    • whereis
    • grep
  • 帮助
    • man精准获取帮助信息
    • apropos模糊获取帮助信息
    • help额外帮助信息
  • 用户管理
    • useradd增加用户
    • passwd设置用户密码
    • who查看登录用户模糊信息
    • w查看登录详细信息
  • 解压缩
    • gz文件
      • 压缩
      • 解压
    • tar文件/目录
      • 打包压缩
      • 解压
    • zip文件/目录
      • 压缩
      • 解压
    • bzip2文件
      • 压缩
      • 解压
  • 网络
    • write发送消息给单个用户
    • wall广播消息
    • ping网络
    • ifcfg配置网卡
    • mail发送邮件
    • last登录信息
    • lastlog登录日志
    • traceroute路由追踪
    • netstat查询网络接口
    • nmtui(仅仅是ReadHat才有)
  • 关机重启
    • shutdown
    • 其它关机命令
    • 其它重启命令
    • 系统运行级别
    • logout退出登录
  • 启动管理
    • 运行级别
    • 启动过程
    • 启动引导程序-Grub配置文件
      • grub中分区表示
  • Linux服务管理
    • 服务分类
    • 启动与自启动
    • 查询已安装的服务
    • RPM服务的管理
      • 独立服务管理
      • 独立服务的自启动
      • 基于xinted服务管理
        • 安装xinetd与telnet
        • xinted服务的启动
        • xinetd服务的自启动
    • 源码包服务的管理
      • 源码包安装服务的启动
      • 源码包服务的自启动
      • 让源码包服务被服务管理命令识别
    • 进程管理
      • ps查看系统中所有进程
      • top资源管理器
      • 查看进程树
      • 终止进程
        • kill
        • killall
        • pkill
    • 工作管理
      • 把进程放入后台
      • 查看后台的工作
      • 将后台暂停的工作回复的前台执行
      • 把后台暂停的工作恢复到后台执行
    • 系统资源查看
      • free查看Mem占用情况
      • vsmstat查看CPU,Mem,IO占用
      • dmesg开机时内核监测信息
      • 查看CPU信息
      • uptime时间和平均负载
      • 查看系统与内核相关的信息
      • 判断当前系统的位数
      • 查询当前Linux系统的发行版本
      • 列出进程打开或使用的文件信息
    • 系统定时任务
      • crond服务管理与访问控制
      • 用户的crontab设置
  • 文本编辑器Vi
    • Vi常用操作
      • 插入命令
      • 定位命令
      • 删除命令
      • 复制和剪切
      • 保存和退出
    • Vi技巧
      • 导入命令执行结果:r
      • 查看命令路径
      • 定义快捷键:map
      • 连续行注释
      • 替换
      • root和普通用户
  • 日志管理
    • 简介
      • 日志服务
      • 2.常见日志的作用
    • 2.rsyslogd服务
      • 1.日志格式文件
      • 2./etc/rsyslog.conf配置文件
    • 3.日志替换
      • 1.日志文件的命令规则
      • 2.logroate配置文件
      • 3.把apache日志加入轮替
  • 软件包管理
    • 包命名与依赖性
    • 安装升级与卸载
      • RPM安装
      • RPM升级
      • RPM卸载
    • 查询是否安装
    • 校验和文件提取
      • ROM包校验
      • RPM包中文件提取
    • yum在线管理
      • IP地址配置和网络yum源
        • IP地址配置
        • 网络yum源
      • yum命令
        • 常用yum命令
          • 查询
          • 安装
          • 升级
          • 卸载
        • yum软件组管理
      • 光盘yum源搭建
        • 挂载光盘
        • 让网络yum源失效(仅保留CentOS-Media.repo)
        • 修改yum源文件
    • 源码包管理
      • 源码包与RPM包区别
      • 源码包安装过程
    • 脚本安装包与软件安装包选择
      • 脚本安装
  • 用户与用户管理
    • 用户配置文件
      • 用户信息文件/etc/passwd
        • 用户管理简介
        • /etc/passwd
      • 影子文件/etc/shadow
        • 时间戳换算
      • 组信息文件/etc/group和组密码文件/etc/gshadow
    • 用户管理相关文件
      • 用户的家目录
      • 用户的邮箱
      • 用户模板
    • 用户管理
      • useradd
      • passwd
        • 命令格式
      • usermod和chage
        • 修改用户信息usermod
        • 修改用户密码状态change
      • userdel和su
        • 删除用户userdel
        • 用户切换su
    • 用户组管理
      • 添加用户组
      • 修改用户组
      • 删除用户组
      • 把用户添加入组或从组中删除
  • 权限管理
    • ACL权限
      • ACL权限简介与开启
        • 查看分区ACL权限是否开启
        • 临时开启分区ACL权限
        • 永久开启分区ACL权限
      • 查看与设定ACL权限
          • 查看ACL命令
          • 设定ACL权限的命令
        • 给用户设定ACL权限
        • 给用户组设定ACL权限
      • 最大有效权限与删除ACL权限
        • 最大有效权限mask
        • 删除ACL权限
      • 默认ACL权限和递归ACL权限
        • 递归ACL权限
        • 默认ACL权限
    • 文件特殊权限(4SUID,2SGID,1SBIT)
      • SetUID功能
      • 设定与取消 SetUID
      • SetGID
        • SetGID针对目录的作用
        • SetGID针对文件的作用
      • StickyBIT
        • SBIT沾着位作用
        • 设置与取消粘着位
    • 文件系统属性chattr权限
      • chattr命令格式(root受此命令限制)
      • 查看文件系统属性
    • 系统命令sudo权限
      • sudo权限
      • sudo使用
      • 普通用户执行sudo赋予的命令
  • 挂载命令
  • 十五,回顾分区和文件系统
    • 1.回顾分区和文件系统
      • 1.分区类型
      • 2.文件系统
    • 2.文件系统常用命令
      • 1.df查看分区大小
      • 2.统计目录或文件大小
      • 3.du和df命令区别
      • 4.fsck文件系统修复命令
      • 5.dumpe2fs显示磁盘状态命令
      • 6.挂载命令
        • 1.查询与自动挂载
        • 2.挂载命令格式
        • 4.挂载光盘与U盘
          • 1.挂载光盘
          • 2.卸载命令
          • 5.挂载U盘
      • 7.支持NTFS格式文件系统
        • 1.安装NTFS-3G
    • 3.fdisk分区(手动挂载和IP一样,重启就失效)
      • 1.添加新硬盘
      • 2.查看新硬盘
      • 3.使用fdisk命令分区
      • 4.重新读取分区表信息
      • 5.格式化分区
      • 6.创建挂载点
    • 4.自动挂载与fstab文件修复
      • 1./etc/fstab文件
      • 2.分区自动挂载
      • 3./etc/fstab文件修复
  • 十六,Shell基础
    • 1.概述
      • 1.shell是什么
      • 2.shell分类
      • 3.Linux支持的Shell
    • 2.脚本执行方式
      • 1.echo输出命令
      • 3.第一个脚本
      • 4.脚本执行
    • 3.Bash基本功能
      • 1.历史命令与命令补全
      • 2.命令别名与常用快捷键
        • 1.命令别名
        • 2.让别名永久生效
      • 3.输入输出重定向
        • 1.标准输入与输出
        • 2.输出重定向
        • 3.输入重定向
      • 4.多命令顺序执行与管道符
        • 1.dd(磁盘拷贝)
        • 2.管道符
      • 5.通配符和其他特殊符号
        • 1.通配符
        • 2.Bash中其它特殊符号
    • 4.Bash变量
      • 1.用户自定义变量
        • 1.什么是变量
        • 2.变量命名规则
        • 3.变量的分类
        • 4.本地变量
      • 2.环境变量
        • 1.环境变量是什么
        • 2.设置环境变量
        • 3.常见环境变量
      • 3.位置参数变量
        • 1.位置参数变量
      • 4.预定义变量
        • 1.预定义变量种类
        • 2.接受键盘输入
      • 5.数值运算与运算符
        • 1.declare申明变量类型
        • 2.数值运算__方法1
        • 3.expr或let数值运算工具\_方法2
        • 4.\$((运算式))或\$[运算式]\_方法3
        • 5.运算符
      • 6.变量测试与内容替换
        • 1.公式
    • 5.环境变量配置文件
      • 1.环境变量配置文件简介
        • 1.source命令
        • 2.环境变量配置文件简介
      • 2.环境变量配置文件作用
      • 3.其他配置文件和登录信息
        • 1.注销时生效的环境变量配置文件
        • 2.其他配置文件
        • 3.Shell登录信息
    • 6.正则表达式
      • 1.正则表达式与通配符
      • 2.基础正则表达式
    • 7.字符串截取命令
      • 1.cut命令
      • 2.printf命令
      • 3.awk命令
      • 4.sed命令
        • 1.简介
    • 8.字符串处理命令
      • 1.排序命令sort
      • 2.统计命令wc
    • 9.条件判断
      • 1.按照文件类型进行判断
      • 2.按照文件权限进行判断
      • 3.两个文件之间进行比较
      • 4.两个整数之间比较
      • 5.字符串的判断
      • 6.多重条件判断
      • 10.流程控制
        • 1.if语句
          • 1.单分支if条件语句
          • 2.双分支if条件语句
          • 3.多分支if条件语句
        • 2.多分支case条件语句
        • 3.for循环
          • 1.语法一
          • 2.语法二
        • 4.while循环与until循环
          • 1.while循环
          • 2.until循环
  • 二十,备份与恢复
    • 1.概述
      • 1.Linux系统需要备份的数据
      • 2.备份策略
    • 2.备份命令
      • 1.dump备份(yum -y install dump)
      • 2.restore恢复(yum -y install restore)
  • 二.链接

文件处理

ls预览

原意:list
语法:ls [选项] [目录/文件]
功能:文件:列出文件信息;目录:列出目录下的文件
权限:所有用户
选项:

  • -a:显示所有文件,包括隐藏文件(.开头的文件)
  • -l:详细信息显示
  • -d:查看目录属性
  • -h:人性化显示文件大小
  • -k:按字节形式显示文件大小
ls -al /usr/local/etc


11 26 20:24

含义
-rw-r–r– -是文件;所属者权限rw;所属组权限r;其他者权限r
1 引用系数,代表该文件曾经被调用过多少次
cxf 所属者
admin 所属组
13768 文件大写,以字节为单位
11 26 20:24 文件最后一次被修改的时间
redis-sentinel.conf 文件名
  • d开头:目录
  • l开头:软链接文件
  • -开头:二进制文件
  • 所属者:仅有一个
  • 所属组:仅有一个;某用户可以加入这个所有组进而拥有该所有组的权限
  • 其他着:既不是所有者,也不是所有组的用户

mkdir创建目录

原意:make directionries
语法:mkdir [选项] [目录名]
功能:创建新目录
权限:所有用户
选项:

  • -p:递归创建

rmdir删除空目录

remove empty directories
语法:rmdir [目录名]
功能:删除空目录(目录中有文件或者有文件夹则无法删除)
权限:所有用户

pwd显示当前路径

原意:print working directory
语法:mkdir [选项] [目录名]
功能:显示当前目录
权限:所有用户

cd切换目录

原意:change directory
语法:mkdir [选项] [目录名]
功能:显示当前目录
权限:所有用户

语法 含义
cd … 返回上级目录
cd ~ 返回home目录
cd …/… 返回当前目录的上两层

cp复制文件或目录

原意:copy
语法:cp [源文件或目录] [目标目录]
功能:复制文件或目录
权限:所有用户
选项:

  • -r:复制目录
  • -p:保留文件属性
# a复制的新文件名为b
cp /usr/a /usr/b

mv移动文件或目录

原意:move
语法:mv [源文件或目录] [目标目录]
功能:剪切文件,改名
权限:所有用户

rm删除

原意:remove
语法:mv [源文件或目录] [目标目录]
功能:删除文件
权限:所有用户
选项:

  • -r:删除目录
  • -f:强制执行

touch创建文件

语法:touch [文件名]
功能:创建空文件
权限:所有用户

语法 含义
touch a b 会同时创建a和b两个文件
touch “a b” 会创建a b文件(中间有空格)

cat查看文件内容

原意:concatenate
语法:cat [文件名]
功能:显示文件内容
权限:所有用户
选项:

  • -n:显示行号

more分页查看文件内容

语法:more [文件名]
功能:显示文件内容
权限:所有用户
操作:

  • 翻页:空格/f
  • 换行:Enter
  • 退出:q/Q
  • 返回:b

less分页查看文件/目录内容

语法:more [文件名]
功能:分页显示文件(或目录)内容(可向上翻页)
权限:所有用户
操作:

  • 翻页:空格/f
  • 换行:Enter
  • 退出:q/Q
  • 返回:b
  • 下箭头/下一页:PageDowdn
  • 上箭头/上一页:PageUp
  • 全文搜索:输入正斜杠 /,紧接着输入关键词即可全文标记搜索

head查看文件前几行

语法:head [文件名]
功能:显示文件前面几行
权限:所有用户
选项:

  • -n:指定行数
head -n 18 /etc/services

tail查看文件后几行

语法:tail [文件名]
功能:显示文件后面几行
权限:所有用户
选项:

  • -n:指定行数
  • -f:动态显示文末为内容
tail -n 18 /etc/services
tail -f /var/log/messages(退出状态:ctrl+c)

权限

chmod文件权限

原意:change the permissions mode of a file
语法:chmod [选项] [文件或目录]
功能:改变文件或目录权限
权限:所有用户
选项:

  • {ugo} {±=} {rwx}
  • {ugo} = {421}
  • -R:递归修改(必须是大写)
语法 含义
r 4,读权限
w 2,写权限
x 1,可执行权限
7 rwx
6 rw
5 rx
3 wx
0 无任何权限
# a目录下的所有目录全线均会被修改为rwx
chmod -R 777 /tmp/a

chown用户权限

原意:change file ownership
语法:chown [用户] [文件或目录]
功能:改变文件或目录所有者
权限:所有用户

#改变文件abcd的所有者为root
# (必须为root才可以操作,否则会报错),普通用户价上 sudo
chown root abcd

chgrp组权限

原意:change file group ownership
语法:chgrp [用户组] [文件或目录]
功能:改变文件或目录的所属组
权限:所有用户

# 改变fengjie的所属组为lampbrother
chgrp lampbrother fengjie

umask

原意:the user file-creation mask
语法:umask [选项]
功能:显示,设置文件的缺省权限
权限:所有用户
选项:

  • -S以rwx形式显示新建文件缺省权限

说明:缺省创建的文件是没有x权限的(u=rw,g=r,o=r)

四.文件搜索

find文件搜索

语法:find [搜索范围] [匹配条件]
功能:在整个硬盘中进行文件搜索
权限:所有用户
警告:资源开销很大

# 按照关键字查找
# 在目录/etc中查找文件含有init关键字的文件
find /etc -name *init*
# 在目录/etc中查找文件含有三个字符结尾的文件,区分大小写
find /etc -name init???
# 在目录/etc中查找文件含有两个字符串结尾的文件,不区分大小写
find /etc -iname init??# 按照数据块大小查找「数据块按照字节为单位,Linux中一个数据块512字节为0.5KB。100MB=102400KB=204800字节」
# 在根目录下查找大于100MB的文件「+n大于 -n小于 n等于」
find / -size +204800(字节)
# 在/etc目录下查找大于80MB小于100MB的文件「-a两个条件同时满足,-o两个条件任意一个即可」
find /etc -size +163840 -a -size -204800# 按照所有者查找
# 在根目录下查找所有者为zxy的文件
find /home -user zxy# 按照所属组查找
# 在/etc下查找5分钟内被修改过属性的文件和目录「-amin访问时间access,-cmin文件属性change,-mmin文件内容modify」
find /etc -cmin -5# 在/etc下查找inittab文件并显示其详细信息
# -exec/-ok {} \; 对搜索结果执行操作(ok的话会让用户确认去查看)
# {}:承载搜索结果内容。{}与\之间有一个空格
# \转移符号
# ;表示结束
# -type根据文件类型查找:f文件 d目录 l软连接
find /etc -name inittab -exec ls -l {} \;# -inum根据i节点查找
find /etc -inum 929257 -exec rm {} \;

locate文件资料库查找

语法:locate [文件名]
功能:在文件资料库中查找文件
权限:所有用户
说明:无法查找位于/tmp路径下的文件,资源开销很少。需要yum安装

# 安装
yum -y install mlocate
# 进行不区分大小写的查找
locate -i inittab
# 然后更新数据库
updatedb

which

语法:which
功能:搜索所在目录及别名信息
权限:所有用户

# 可看到rm别名为rm -i,试着运行/bin/rm /tmp/Lebanon则不会提示用户是否删除,加上-i仅仅是提醒用户而不是大小写区分。执行的时候搜先搜索的是的别名,而不是本身
which rm

whereis

语法:whereis [名称]
功能:搜索所在目录及帮助文档路径
权限:所有用户

whereis rm

grep

语法:grep [选项] [指定字符串] [文件]
功能:在文件中搜索字符串匹配的行并输出
权限:所有用户
选项:
-i:不区分大小写
-v:排除指定字符串
-n:输出行号
–color=auto搜索出的关键字用颜色标识

# 搜索inittab文件中以#注释开头之外的文件
grep -v ^# /etc/inittab

帮助

man精准获取帮助信息

原意:manual
语法:man [命令或配置文件](不是文件的路径,加上路径显示的是所有的文件)
功能描述:获得帮助信息
执行权限:所有用户

# 获得rm命令的帮助信息
man rm
# 查看配置文件services的帮助信息
man services
# /-l:将-l标记为关键字
# 仅看配置文件的帮助「1.命令帮助  5.配置文件帮助(之前需要mandb)」
man 5 passwd

apropos模糊获取帮助信息

功能描述:模糊查询,与之相比较的是man精准查询

help额外帮助信息

功能描述:获得Shell内置命令的帮助信息(which,whereis找不到)

示例:help umask

用户管理

useradd增加用户

语法:useradd用户名
功能:添加新用户
执行权限:root

useradd zht

passwd设置用户密码

语法:passwd [用户名]
功能描述:设置用户密码
执行权限:所有用户

passwd zht

who查看登录用户模糊信息

语法:who
功能描述:查看登陆用户信息
执行权限:所有用户

who

MacOS

Linux

含义
root 登陆用户名
pts/0 pts远程登录「tty本地登录」
2022-11-27 10:08 (27.18.195.250) 登陆时间(登陆的主机IP地址(未写:本地登录,IP地址为其它电脑IP地址))

w查看登录详细信息

语法:w
功能描述:查看登录用户详细信息

w

含义
10:14:45 up 61 days 系统目前时间,系统持续运行时间
2 users 登陆用户数量
load average: 10.53, 10.09, 10.34 负载均衡:CPU,内存,平均值(CPU + 内存)/2
IDLE 用户登录后空闲了多久时间
JCPU 累计暂用CPU时间
PCPU 执行某项操作占用CPU时间
WAHT 执行的操作名

解压缩

gz文件

压缩

原意:GNU zip
语法:gzip [文件]
功能描述:压缩文件,如果压缩目录则会报错
执行权限:所有用户
压缩后文件格式:gz

gzip test

解压

原意:GNU unzip
语法:gunzip [压缩文件]
功能描述:解压.gz的压缩文件
执行权限:所有用户

gunzip test.gz

tar文件/目录

语法:tar [选项] [目标文件/目录名] [原文件/目录名]
功能描述:打包目录
执行权限:所有用户
压缩后文件格式:.tar.gz
选项:

  • -c:打包「压缩时候用」
  • -x:解包「解压时候用」
  • -v:显示详细信息
  • -f:指定文件名
  • -z:打包同时压缩或者解压「zip压缩」
  • -j:打包同时压缩或者解压「bzip2压缩」

打包压缩

需要用到 c 才可以

# 打包「仅仅是把文件存在一个包中,包并不会变小」
tar -cvf test.txt.tar test.txt
# 压缩
tar -zcvf test.txt.tar.gz test.txt
# tar -jcvf test.txt.tar.gz test.txt

压缩文件比打包文件体积更小

解压

需要用到 x 才可以

# 解包
tar -xvf test.txt.tar
# 解压
tar -zxvf test.txt.tar.gz
# tar -jxvf test.txt.tar.gz

zip文件/目录

压缩

语法:zip [选项] [压缩后生成的压缩文件名] [被压缩的文件或目录]
功能描述:压缩文件或目录
执行权限:所有用户
压缩后文件格式:.zip
选项:

  • -r:压缩目录
zip test.txt.zip test.txt

解压

语法:unzip [压缩文件]
功能描述:解压.zip的压缩文件
执行权限:所有用户

unzip test.txt.zip

bzip2文件

如果题是缺少bzip2,则需要安装 yum -y install bzip2

其中所有压缩中,zip2压缩比最高,节约空间。但响应的也很消耗cpu资源

压缩

语法:bzip2 [选项] [文件]
功能描述:压缩文件
执行权限:所有用户
选项:

  • -k:产生压缩文件后保留原文件
bzip2 -k Lebanon
tar -cjf test.tar.bz2 test.txt

解压

语法:bunzip2 [选项] [压缩文件]
功能描述:解压缩
执行权限:所有用户
选项:

  • -k:解压缩后保留原文件
bunzip2 -k test.bz2
tar -xjf test.tar.bz2

网络

write发送消息给单个用户

语法:write [用户名]
功能描述:给指定在线用户发信息,以Ctrl+D保存结束
执行权限:所有用户

write zxy

wall广播消息

原意:write all
语法:wall [message]
功能描述:给所有在线用户发布广播信息
执行权限:所有用户

wall cxf is a good man

ping网络

语法:ping [选项] IP地址
功能描述:测试网络连通性
执行权限:所有用户
选项:

  • -c:指定发送次数
# ping 192.168.150.1 三次
ping -c 3 192.168.150.1

ifcfg配置网卡

原意:interface configure
语法:ifconfig 网卡名称 IP地址
功能描述:查看和设置网卡信息
执行权限:root

ifconfig ens33 192.168.150.1

mail发送邮件

yum -y install mail
语法:mail [用户名]
功能描述:查看发送电子邮件
执行权限:所有用户

mail root

last登录信息

语法:last
功能描述:列出目前于过去登入系统的用户信息
执行权限:所有用户

lastlog登录日志

语法:lastlog
功能描述:检查特定用户上次登陆的时间
执行权限:所有用户

# 示例:lastlog
lastlog

traceroute路由追踪

yum -y install traceroute
语法:traceroute
功能描述:显示数据包到主机间的路径
执行权限:所有用户

traceroute www.baidu.com

netstat查询网络接口

语法:netstat [选项]
功能描述:显示网络相关信息
执行权限:所有用户
选项:

  • -a:显示所有连线中的Socket
  • -n:显示IP地址和端口号
  • -p:显示正在使用Socket的程序识别码和程序名称
# 查询 8080 端口
netstat -anp | grep 8080

nmtui(仅仅是ReadHat才有)

命令所在路径:未知
语法:root
功能描述:配置网络
示例:nmtui
*:选中,空格:不选
配置完之后重启网络服务:service network restart

关机重启

shutdown

语法:shutdown [选项] 时间
选项:

  • -c:取消前一个关机命令
  • -h:关机
  • -r:重启

其它关机命令

halt
# 相当于直接断电
poweroff
init 0

其它重启命令

reboot
init 6

系统运行级别

级别 含义
0 关机
1 单用户
2 不完全多用户,不含NFS服务
3 完全多用户
4 未分配
5 图形界面
6 重启
cat /etc/inittab
# 修改默认运行级别
init 0~6
#查询系统运行级别
runlevel

logout退出登录

功能描述:退出登录

启动管理

运行级别

数字 含义
0 关机
1 单用户模式,可以想象为Windows的安全模式,主要用于系统修复
2 不完全的命令行模式,不含NFS服务
3 完全的命令行模式,就是标准的字符界面
4 系统保留
5 图形界面
6 重启

启动过程

留个坑,日后再补

启动引导程序-Grub配置文件

留个坑,日后再补

grub中分区表示

硬盘 分区 Linux中设备文件名 Grub中设备文件名
第一块SCSI硬盘 第一个主分区 /dev/sda1 hd(0,0)
第一块SCSI硬盘 第二个主分区 /dev/sda2 hd(0,1)
第一块SCSI硬盘 扩展分区 /dev/sda3 hd(0,2)
第一块SCSI硬盘 第一个逻辑分区 /dev/sda3 hd(0,4)
第二块SCSI硬盘 第一个主分区 /dev/sdb1 hd(1,0)
第二块SCSI硬盘 第二个主分区 /dev/sdb2 hd(1,1)
第二块SCSI硬盘 扩展分区 /dev/sdb3 hd(1,2)
第二块SCSI硬盘 第一个逻辑分区 /dev/sdb3 hd(1,4)

Linux服务管理

服务分类

  1. RPM包默认安装的服务
    独立的服务
    基于xinted服务
  2. 源码包安装的服务

启动与自启动

  1. 服务启动:在当前系统中服务运行,并提供功能
  2. 服务自启动:自启动是指让服务在系统开机或重启动之后,随着系统的启动而自动启动服务

查询已安装的服务

# RPM包安装的服务,查看服务自启动状态,可以看到所有RPM包安装的服务
systemctl list-unit-files

源码包安装的服务查看服务器安装位置,一般是 /usr/local 下

RPM服务的管理

路径 含义
/etc/init.d/ 启动脚本位置
/etc/sysconfig/ 初始化环境配置文件位置
/etc/ 配置文件位置
/etc/xinetd.conf xinted配置文件
/etc/xinetd.d 基于xinetd服务的启动脚本
/var/lib 服务产生的数据放在这里
/var/log 日志

独立服务管理

/etc/init.d/独立服务名 start|stop|status|restart
systemctl 独立服务名 start|stop|status|restart

独立服务的自启动

system list-unit-files
chkconfig [--level 运行级别] [独立服务名] [on/off]# 修改/etc/rc.d/rc.local文件
#!/bin/bash
# THIS FILE IS ADDED FOR COMPATIBILITY PURPOSES
#
# It is highly advisable to create own systemd services or udev rules
# to run scripts during boot instead of using this file.
#
# In contrast to previous versions due to parallel execution during boot
# this script will NOT be run after all other services.
#
# Please note that you must run 'chmod +x /etc/rc.d/rc.local' to ensure
# that this script will be executed during boot.touch /var/lock/subsys/local
# /etc/rc.d/init.d/httpd start写入启动命令即可
# 使用ntsysv命令管理自启动

基于xinted服务管理

安装xinetd与telnet

yum -y install install xinetd
yum -y install telnet-server

xinted服务的启动

vi /etc/xinetd.d/telnet#service telnet                  ⬅服务的名称是telnet
#{#   flags = REUSE                     ⬅标志为REUSE,设定TCP/IP socket可重用
#   socket_type = stream          ⬅使用TCP协议数据包
#   wait = no                      ⬅允许使用多个连接同时连接
#   server = /usr/sbin/in.telnetd  ⬅服务的启动程序
#   log_on_failure += USERID         ⬅登陆失败,记录用户的ID
#   disable = no                  ⬅服务不启动
#}# 重启xinetd服务
service xinetd restart

xinetd服务的自启动

chkconfig telnet on
ntsysv
# 注意:xinetd的启动和自启动和服务是同步的。

源码包服务的管理

源码包安装服务的启动

使用绝对路径,调用启动脚本来启动。不同的源码包的启动脚本不同。可以查看源码包的安装说明,查看启动脚本的方法。

源码包服务的自启动

vi /etc/rc.d/rc.local加入/usr/local/apache2/bin/apachectl start

让源码包服务被服务管理命令识别

# 让源码包的apache服务能被service命令管理
ln -s /usr/local/apache2/bin/apachectl  etc/init.d/apache
# 让源码包的apache服务能被chkconfig与ntsysv命令管理自启动
vi /etc

进程管理

ps查看系统中所有进程

语法:ps [选项]
选项:

  • aux:显示全部进程「可能会截断。BSD各式」
  • ef:显示全部进程「不会截断。SystemV格式」
  • le:显示全部进程「Linux标准命令格式」
ps -aux

ps -ef

ps -le

含义
USER 该进程是由哪个用户产生的
PID 进程ID
%CPU 该进程占用CPU资源的百分比,占用越高,进程越耗费资源
%MEM 该进程占用物理内存的百分比,占用越高,进程越耗费资源
VSZ 该进程占用虚拟内存的大小,单位KB
RSS 该进程占用实际物理存大小,单位KB
TTY 该进程是在哪个终端中运行的。其中tty1-tty7代表本地控台终端,tty1-tty6是本地的字符界面终端,tty7是图形终端。pts/0-256代表虚拟终端
SATA 进程状态。常见的状态有:R:运行,S:睡眠,T:停止状态,s:包含子进程,+:位于后台
START 启动时间
TIME 该进程占用CPU的运算时间,注意不是系统时间
COMMAND 产生此进程的命令名

top资源管理器

语法: top
按键:运行完 top 指令之后,shift+m「大写的M」 快捷键就会按照内存降序;shift+p 「大写的P」快捷键就会按照CPU降序

# 默认按照cpu降序
top

# 内存降序
top -bn1 -o "%MEM"

# CPU降序
top -bn1 -o "%CPU"

含义
消息队伍:top - 10:36:16 up 62 days, 14:05, 2 users, load average: 8.61, 9.81, 10.12 10:36:16:系统当前时间;up 62 days:系统运行时间,本机已运行22小时22分钟;2 users:当前登陆了两个终端用户;oad average: 8.61, 9.81, 10.12:系统在之前的1分钟,5分钟,10分钟的平均负载。一般默认为小于1时,负载较小。如果大于1,系统已经超出负荷
进程信息:Tasks: 85 total, 1 running, 84 sleeping, 0 stopped, 0 zombie 总共85个进程,1个运行,84个休眠,0个停止,0个僵尸进程
CPU信息:%Cpu(s):99.7.0 us, 0.0 sy, 0.0 ni, 0.0 id, 0.0 wa, 0.0 hi, 0.3 si, 0.0 st %Cpu(s): 99.7 us:用户模式占用的CPU百分比;0.0 sy:系统模式占用的CPU百分比;0.0 ni:改变过优先级的用户进程占用的CPU百分比;0.0 id:空闲的CPU百分比;0.0 wa:等待输入/输出的进程占用CPU百分比;0.0 hi:硬中断请求服务占用的CPU百分比;0.3 si:软中断请求服务占用的CPU百分比;0.0 st:st(Steal time)虚拟时间百分比。就是当有虚拟机时,虚拟机CPU等待实际CPU的时间百分比
物理内存信息:KiB Mem : 1881800 total, 108480 free, 807888 used, 965432 buff/cache KiB Mem : 1881800 total:物理内存的总量,单位KB;108480 free:空闲的物理内存数量;807888 used:已使用的物理内存数量;965432 buff/cache:作为缓冲的内存数量
交换分区(swap)信息:KiB Swap: 0 total, 0 free, 0 used. 915808 avail Mem KiB Swap: 0 total:交换分区(虚拟内存)的总大小;0 free:空闲交换分区的大小;0 used:已经使用的交换分区大小;915808 avail Mem:表示可用于进程下一次分配的物理内存数量,这个大小一般比free大一点,因为除了free的空间外,系统还能立即释放出一些空间来

查看进程树

语法:pstree [选项]
选项:

  • -p:显示进程的PID
  • -u:显示进程的所属用户
pstree

终止进程

kill

语法:kill -l查看可用的进程信号1) SIGHUP       2) SIGINT       3) SIGQUIT      4) SIGILL       5) SIGTRAP6) SIGABRT      7) SIGBUS       8) SIGFPE       9) SIGKILL     10) SIGUSR1
11) SIGSEGV     12) SIGUSR2     13) SIGPIPE     14) SIGALRM     15) SIGTERM
16) SIGSTKFLT   17) SIGCHLD     18) SIGCONT     19) SIGSTOP     20) SIGTSTP
21) SIGTTIN     22) SIGTTOU     23) SIGURG      24) SIGXCPU     25) SIGXFSZ
26) SIGVTALRM   27) SIGPROF     28) SIGWINCH    29) SIGIO       30) SIGPWR
31) SIGSYS      34) SIGRTMIN    35) SIGRTMIN+1  36) SIGRTMIN+2  37) SIGRTMIN+3
38) SIGRTMIN+4  39) SIGRTMIN+5  40) SIGRTMIN+6  41) SIGRTMIN+7  42) SIGRTMIN+8
43) SIGRTMIN+9  44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12 47) SIGRTMIN+13
48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14 51) SIGRTMAX-13 52) SIGRTMAX-12
53) SIGRTMAX-11 54) SIGRTMAX-10 55) SIGRTMAX-9  56) SIGRTMAX-8  57) SIGRTMAX-7
58) SIGRTMAX-6  59) SIGRTMAX-5  60) SIGRTMAX-4  61) SIGRTMAX-3  62) SIGRTMAX-2
63) SIGRTMAX-1  64) SIGRTMAX信号代号 信号名称 说明
1               SIGHUP  该信号让进程立即关闭,然后重新读取配置文件之后重启
2               SIGINT  程序终止信号,用于终止前台进程。相当于输出ctrl+c快捷键
8               SIGFPE  在发生致命的算术运算错误时发出,不仅包括浮点运算错误,还包括溢出及除数为0等其它所有的算术错误
9               SIGKILL 用来立即结束程序的运行,本信号不能被阻塞,处理和忽略。一般用于强制终止进程
14          SIGALRM 时钟定时信号,计算的是实际的时间或时钟时间,alarm函数使用该信号
15          SIGTERM 正常结束的信号,kill命令的默认信号。有时如果进程已经发生问题,这个信号无法正常终止进程,我们才会尝试SIGKILL信号,也就是信号9
18          SIGCONT 该信号可以让暂停的进程恢复执行,本信号不能被阻断
19          SIGSTOP 该信号可以暂停前台进程,相当于输入ctrl+z快捷键。本信号不能被阻断举例:
杀死单个进程
kill -l 进程ID 重启进程
kill -9 进程ID 强制杀死进程

killall

杀死全部进程
killall [选项] [信号] 进程名
#按照进程名杀死进程
选项:

  • -i:交互式,询问是否要杀死某个进程
  • -I:忽略进程名的大小写

pkill

pkill [选项] [信号] 进程名
选项:

  • -t 终端号:按照终端号踢出用户

工作管理

把进程放入后台

原意:no hang up(不挂起)
语法:nohup 运行的进程指令 [选项]
功能描述:用于在系统后台不挂断地运行命令,退出终端不会影响程序的运行
权限:所有用户
选项:

  • &:让命令在后台执行,终端退出后命令仍旧执行
# 再部署Spring项目时,部署到后台进程,则当终端程序「Xshell」退出时不影响此java -jar 命令创建的进程继续运行
nohup java -jar springboot.jar &

查看后台的工作

语法:jobs p[选项]
功能:查看后台的工作
权限:所有用户
选项:

  • +:代表最近一个放入后台的工作并优先恢复
  • -:代表倒数第二个放入后台的工作

将后台暂停的工作回复的前台执行

语法:fg %工号
注意:%工号的%号可省略,但是注意工作号和PID区别

把后台暂停的工作恢复到后台执行

语法:bg %工作号
注意:后台恢复执行的命令,是不能和前台有交互的,否则不能回复到后台执行

系统资源查看

free查看Mem占用情况

语法:free [选项]
功能:显示内存状态
选项:

  • -b  以Byte为单位显示内存使用情况
  • -k  以KB为单位显示内存使用情况
  • -m  以MB为单位显示内存使用情况
  • -h:以合适的单位显示内存使用情况「B = bytes,K = kilos,M = megas,G = gigas,T = teras」
free -h

含义
Mem 内存的使用信息
Swap 交换空间的使用信息
shared 被进程共享使用的物理内存大小
buff/cache 被 buffer 和 cache 使用的物理内存大小。buff:缓冲,写;cache:缓存,读
avaliable 还可以被应用程序使用的物理内存大小。available = free + buffer + cache (注:只是大概的计算方法)

缓存和缓冲区别

  1. 缓存(cache)加速数据从硬盘中”读取“
  2. 缓冲(buffer)加速数据”写入“硬盘的

vsmstat查看CPU,Mem,IO占用

语法:vmsast
功能:查看CPU使用率、内存情况、IO读写情况

vmstat


语法:vmstat [刷新延时 刷新次数]

vmstat 1 3

dmesg开机时内核监测信息

语法:dmesg

dmesg | grep CPU

查看CPU信息

cat /proc/cpuinfo

uptime时间和平均负载

# 显示系统的启动时间和平均负载,也就是top命令的第一行。w命令也可以看到这个数据
uptime

查看系统与内核相关的信息

语法:uname [选项]
选项:

  • -a:查看系统所有相关信息
  • -r:查看内核版本
  • -s:查看内核名称
  • -m:查看当前系统位数

判断当前系统的位数

file /bin/ls

查询当前Linux系统的发行版本

lsb _release -a

列出进程打开或使用的文件信息

语法:lsof [选项]
选项:

  • -c 字符串:只列出以字符串开头的进程打开的文件
  • -u 用户名:只列出某个用户的进程打开的文件
  • -p pid:列出某个PID进程打开的文件

系统定时任务

crond服务管理与访问控制

service crond restart
chkconfig crond on

用户的crontab设置

语法:crontab [选项]
选项:

  • -e:编辑crondtab定时任务
  • -l:查询crontab任务
  • -r:删除当前用户的所有crontab任务
举例:
crontab -e
#进入crontab编辑界面。会打开vim编辑你的工作
*****执行的任务
项目     含义                               范围
第一个*  一个小时当中的第几分钟  0-59
第二个*    一天当中第几个小时           0-23
第三个*    一个月当中第几天             0-31
第四个*    一年当中第几月                 1-12
第五个*    一周当中的星期几            0-7(0和7都代表星期日)时间                  含义
45 22 * * *     22点45分执行
0 17 * * 1      每周1的17点0分执行
0 5 1,15 * *    每月1,15号的凌晨5点0分执行
40 4 * * 1-5    每周一到周五凌晨4点40分执行
*/10 4 * * *    每天的凌晨4点,每隔10分钟执行一次
0 0 1,15 * 1    每月1,15号每周一的0点0分都会执行命令【星期几和几号最好不要同时出现,因为他们定义的都是天,非常易让管理员混乱】特殊符号 含义
*                   代表任何时间。比如第一个“*”就代表一小时中每分钟执行一次的意思
,                   代表不连续的时间。比如“0 8,12,16 * * * *”代表在每天的8:00,12:00,16:00都执行一次
-                   代表连续的时间范围。比如“0 5 * * 1-6”,代表在周一到周六的的凌晨5:00执行
*/n             代表每隔多久执行一次。比如:“*/10 * * * *”代表每隔10分钟执行一次举例:
*/5 * * * * /bin/echo "你好啊!" >> /tmp/test

文本编辑器Vi

Vi常用操作

命令模式:vi filename
退出命令模式:输入:wq
插入模式:命令模式中输入iao;按ESC键即可退出
编辑模式:命令模式中就是编辑模式,命令以回车结束运行vi cxf
按a,i,o都会进入插入模式,esc退出插入模式进入命令模式,输入:再加上命令即可执行操作(在命令模式下比如:set number就会显示行号(简写set nu))

插入命令

a    在光标所在字符后插入
A   在光标所在行尾插入
i   在光标所在字符前插入
I   在光标所在行行首插入
o   在光标下插入
O   在光标上插入

定位命令

set nu设置行号
set nonu取消行号
:n到第n行
$移至行尾
0移至行首

删除命令

x删除光标所在处字符串
nx删除光标所在处后n个字符
dd删除光标所在行,ndd删除n行
:n1, n2d删除指定范围的行

复制和剪切

yy复制当前行
nyy复制当前行以下n行
dd截切当前行
ndd剪切当前行以下n行
p, P粘贴在当前光标所在行下或行上

保存和退出

:w       保存修改
:w new_filename 另存为指定文件
:wq     保存修改并推出
:q!     不保存修改退出
:wq!    保存修改并退出(文件所有者及root可使用,即使root没有w写权限)

Vi技巧

导入命令执行结果:r

命令模式
:r /etc/issue导入时候不用查看命令在注释
:r !date

查看命令路径

:!which ls

定义快捷键:map

示例——:map ^P I#<ESC>:map ^B Ox
具体:ctrl+v+pctrl+p即可实现行首插入#号注释的效果删除注释
:map ^B x0
使用:按ctrl+b即可实现行首删除一个字符插入指定字符串
:map ^H ismymail@www.xiaomachen.xyz

连续行注释

:n1, n2s/^/#/g——行首添加#注释
:n1, n2s/^#/ /g——将行首#删除中间的#不受影响
首注释取消
:n1, n2s/\/\//g——\转义

替换

:ab mymail sample@lampbraoher.net
在命令模式或者编辑模式中输入mymail在回车或者空格会变成sample@lampbraoher.net字符串

root和普通用户

vi /root/.vimrc
vi /home/username/.vimrc
编辑好之后即可永久实现快捷键
set nu
map ^p I!<ESC>
ab mymail sample@www.xiapmachen.xyz
ab shenchao fengjiesample@lampbraoher.net

日志管理

简介

日志服务

在CentOS6.x中日志服务已经由rsyslogd取代了原先的syslogd服务。rsyslogd日志服务更加先进,功能更多。但是不论该服务的使用,还是日志文件的格式其实都是和syslogd非要我有相兼容的,所以学习起来基本和syslogd服务一致
rsyslogd新特点:基于TCP网络协议传输日志信息更安全的网络传输方式有日志消息的及时分析框架后台数据库配置文件中可以写简单的逻辑判断与syslogd配置文件相兼容确定服务启动
ps aux | grep rsyslogd查看服务是否启动chkconfig --list | grep rsyslogd

2.常见日志的作用

日志文件             说明
/var/log/cron           记录了系统定时任务相关的日志
/var/log/cups/      记录打印信息的日志
/var/log/dmesg      记录了系统在关机时内核自自检的信息。也可以使用dmesg命令直接查看内核自检信息
/var/log/btmp           记录错误登陆的日志。这个文件是二进制文件,不能直接vi查看,而要使用lastb命令查看你,命令如下:
[root@localhost ~]# lastb
root     tty1                          Thu Aug  6 09:20 - 09:20  (00:00)btmp begins Thu Aug  6 09:20:52 2020
#有人在8月6号 09:20:52在本地终端1登陆错误
/var/log/lastlog    记录系统中所有用户最后一次的登陆时间的日志。这个文件也是二进制文件,不能直接vi,而要使用lastb命令查看
/var/log/mailog     记录邮件信息
/var/log/messages   记录系统重要信息的日志。这个日志文件中会记录Linux系统的绝大多数重要信息,如果系统出现问题时,首先要检查的就应该是这个日志文件
/var/log/secure     记录验证和授权方面的信息,只要涉及账户和密码的程序都会记录。比如说系统的登录,ssh的登陆,su切换用户,sudo授权,甚至添加用户和修改用户密码都会记录在这个日志文件中
/var/log/wtmp           永久记录所有用户的登录,注销信息,同时记录系统的启动,重启,关机事件。同样这个文件也是一个二进制文件,不能直接vi,而要使用last命令来查看
/var/run/utmp           记录当前已经登陆的用户信息。这个文件会随着用户的登录和注销而不断变化,只记录当前登录用户的信息。同样这个文件不能直接vi,而要使用w,whoi,users等命令来查询除了系统默认的日志之外,采用RPM方式安装的系统服务也会默认把日志记录在/var/log/目录中(源码包安装的服务日志是在源码包指定目录中)。不过这些日志不是有rsyslogd服务来记录和管理的,而是各个服务使用自己的日志管理文档来记录自身日志日志文件                   说明
/var/log/httpd      RPM包安装的apache服务的默认日志时目录
/var/log/mail/      RPM包安装的邮件服务的额外日志目录
/var/log/samba/     RPM包安装的samba服务的日志目录
/var/log/sssd/      守护进程安全服务目录

2.rsyslogd服务

1.日志格式文件

基本日志格式包含以下四列:事件产生的时间发生事件的服务器的主机名产生事件的服务名程序或程序名事件的具体信息

2./etc/rsyslog.conf配置文件

authpriv.*                                   /var/log/secure
#服务名称[连接符号] 日志等级     日志记录位置
#认证相关服务.所有日志等级 记录在 /var/log/secure日志中服务名称   说明
auth            安全和认证相关消息(不推荐使用authpriv)
authpriv    安全和认证相关消息(私有的)
cron            系统定时任务cront和at产生的日志
daemon      和各个守护进程相关的日志
ftp             ftp守护进程产生的日志
kern            内核产生的日志(不是用户进程产生的)
local10_local7  本地使用预留的服务
lpr             打印产生的日志
mail            邮件收发消息
news            语新闻服务器相关的日志
syslog      有syslog服务产生的日志信息(虽然服务名称已经改为rsyslogd,但是很多配置都还是沿用了syslog的,这里并没有修改服务名)
user            用户等级类别的日志信息
uucp            uucp子系统的日志信息,uucp是早期linux系统进行数据传递的协议,后来也常用在新闻组服务中

3.日志替换

1.日志文件的命令规则

如果配置文件中拥有“dateext”参数,那么日日志会用日期来作为日志文件的后缀,例如“secure20200806”.这样的话日志文件名不会重叠,所以也就不需要日志文件的改名,只需要保存指定的日志个数,删除多余的日志文件即可
如果配置文件中没有“dateext”参数,那么日志文件就需要进行改名了。当第一次进行日志轮替是,当前的“secure”日志会自动改名为“secure.1”,然后新建“secure”日志,用来保存新的日志。当第二次进行日志轮替时,“secure.1”会自动改名为“secure.2”,当前的“secure”日志会自动改名为“secure.1”,然后也会新建“secure”日志,用来保存新的日志,以此类推

2.logroate配置文件

参数                                           说明
daily                                           日志轮替周期为天
weekly                                      日志轮替周期为周
mountly                                     日志轮替周期为月
roate 数字                                保留的日志文件个数。0指没备份
compress                                    日志轮替时,旧的日志进行压缩
create mode owner group     建立新日志,同时指定新日志的权限与所有者和所属组。如create 0600 root utmp
mail address                            当日志轮替时,输出内容通过邮件发送到指定的邮件地址,如mail zxy@www.net
missingok                                   如果日志不存在,则忽略该日志的警告信息
notifempty                              如果日志文件为空文件,则不进行日志轮替
minsize 大小                          日志轮替的最小值,也就是日志一定要达到这个最小值才会轮替
size 大小                                 日志只有大于指定大小才进行日志轮替,而不是按照时间轮替。如size 100k
dateext                                     使用日期作为日志轮替文件的后缀,如secure-20200806vi /etc/logroate.conf

3.把apache日志加入轮替

vi /etc/logroate.conf/usr/local/apache2/logs/access_log {dailecreateroate 30}

软件包管理

包命名与依赖性

树形依赖:a➡b➡c
环形依赖:a➡b➡c➡a
模块依赖:模块依赖查询网站——www.rpmfind.net包全名:操作的包是没有安装的软件包时使用包全名。而且要注意路径
包名:操作已经安装的软件包时,使用包名。是搜索/var/lib/rpm中的数据库

安装升级与卸载

RPM安装

①挂载:将/dev/sr0挂在在/mnt/cdrom中
②进入包:cd /mnt/cdrom/AppStream/Packages语法:rpm -ivh保全名
选项: -i(install))  安装-v(verbose)  显示详细信息-h(hash)        显示进度--nodeps         不检测依赖性

RPM升级

语法:rpm -Uvh 包全名
选项:-U(upgrade)   升级

RPM卸载

语法:rpm -e
选项:-e(erase) 卸载--nodes     不检查依赖性

查询是否安装

rpm -q 包名
选项: -q   查询(query)rpm -qa
查询所有已经安装的RPM包
选项: -a   所有(all)rpm -qi 包名
查询软件包详细信息
选项:  -i查询软件信息(information)-p查询未安装包信息(package)rpm -ql 包名
选项:-l列表(list)-p查询未安装包信息(package)rpm -qf系统文件名
选项:-f查询系统文件属于哪个软件包(file)rpm -qR 包名
选项:-R查询软件包的依赖性(requires)-p(package)

校验和文件提取

ROM包校验

rpm -V 已安装的包名
选项:-V校验指定的RPM包中的文件(verify)
S文件大小是否改变
M件类型或文件的权限(rwx)是否被改变
5件MD5校验是否改
D设备中,从代码是否改变
T文件的修改时间是否变化
L文件路径是否改变
U所属主(所有者)是否改变
G所属组是否改变c配置文件(config file)
d普通文件(documentation(ghost file)
g“鬼文件,很少见,就是该文件不应该被这个RPM包包含
I授权文件(license file)
r描述文件(read me)

RPM包中文件提取

rpm2cpio 包全名 |\cpio -idv .文件的绝对路径
\:代码换行
|:管道符,前边代码执行结果作为后边代码执行对象rpm2cpio:将rpm包转换成cpio格式的命令
cpio:是一个标准工具,它用于创建软件档案文件和从档案文件中提取文件
cpio 选项 <[文件|设备]
选项:-i:copy-in模式,还原-d:还原时自动新建目录-v:显示还原过程rpm -qf /bin/ls       查询ls命令属于哪个软件包
mv /bin/ls /tmp/    造成ls命令误删除假象
rpm2cpio /mnt/cdrom/AppStream/Packages/coreutils-8.30-6.el8.x86_64 | cpio -idv ./bin/ls 先把这个包通过rpm2cpio转变为cpio格式,再提取RPM包中/bin/ls命令到当前目录
cp /root/bin/ls /bin/   把ls命令复制到/bin/目录,修复文件丢失

yum在线管理

IP地址配置和网络yum源

IP地址配置

①:nmtui                        设置好ipv4的ip地址,DNS服务器,网关
②vi /etc/sysconfig/network-scripts/ifcfg-en33把ONBOOT="no"改为ONBOOT="yes"                    启动网卡
③service network restart      重启网络服务

网络yum源

在yum.repos.d目录下:vi /etc/yum.repos.d/CentOS-Base.repo[base]        容器名称,一定要放在[]中
name        容器说明,可以自己随便写
mirrorlist  镜像站点,可以注释掉
baseurl     yum源服务器的地址,默认是CentOS官方的yum源服务器,是可以使用的,如果速度慢,可以为其它yum源地址
enabled     此容器是否生效,如果不写或写成enable=1都是生效,写成enable=0就是不生效
gpgcheck    如果是1是指RPM的数字证书生效,如果是0则不生效
gpgkey      证书的公钥文件保存位置。不用修改

yum命令

常用yum命令

查询
语法:yum list
功能描述:查询所有软件包列表语法:yum search 关键字
功能描述:搜索服务器上所有关键相关的包
安装

语法:yum [选项] 包名
选项:

  • install:安装
  • -y:自动回答yes
# C语言源代码,需要gcc编辑器查看,后期要使用;依赖包很多,rpm会很复杂
yum -y install gcc
升级

语法:yum -y update 包名

yum -y update gcc
卸载

语法:yum -y remove 包名

yum -y remove gcc

yum软件组管理

语法:yum grouplist
功能描述:列出所有的软件组列表yum groupinstall 软件组名
功能描述:安装指定软件组,组名可以由grouplist查询出来yum groupremove 软件组名
功能描述:卸载指定软件组

光盘yum源搭建

挂载光盘

语法:mount /dev/cdrom /mnt/cdrom

让网络yum源失效(仅保留CentOS-Media.repo)

cd /etc/yum/repos.d/
yum检测的是repo后缀的文件,删除文件也可以;但是白文件名字方法更好
mv CentOS-AppStream.repo CentOS-AppStream.repo.bak
mv CentOS-fasttrack.repo CentOS-fasttrack.repo.bak
mv CentOS-Base.repo CentOS-Base.repo.bak
mv CentOS-HA.repo CentOS-HA.repo.bak
mv CentOS-centosplus.repo CentOS-centosplus.repo.bak
mv CentOS-CR.repo CentOS-CR.repo.bak
mv CentOS-PowerTools.repo CentOS-PowerTools.repo.bak
mv CentOS-Debuginfo.repo CentOS-Debuginfo.repo.bak
mv CentOS-Sources.repo CentOS-Sources.repo.bak
mv CentOS-Extras.repo CentOS-Extras.repo.bak
mv CentOS-Vault.repo CentOS-Vault.repo.bak

修改yum源文件

vi CentOS-Media.repo# CentOS-Media.repo
#  This repo can be used with mounted DVD media, verify the mount point for
#  CentOS-8.  You can use this repo and yum to install items directly off the
#  DVD ISO that we release.
# To use this repo, put in your DVD and use it with the other repos too:
#  yum --enablerepo=c8-media [command]
# or for ONLY the media repo, do this:
#  yum --disablerepo=\* --enablerepo=c8-media [command]
[c8-media-BaseOS]
name=CentOS-BaseOS-$releasever - Media
baseurl=file:///media/CentOS/BaseOSfile:///media/cdrom/BaseOSfile:///media/cdrecorder/BaseOS
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
[c8-media-AppStream]
name=CentOS-AppStream-$releasever - Media
baseurl=file:///mnt/cdrom
#        file:///media/cdrom/AppStream
#        file:///media/cdrecorder/AppStream
gpgcheck=1
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-centosofficial
~
~
"CentOS-Media.repo" 30L, 928C具体修改规则:
enable=0➡enable=1:将容器生效
[c8-media-BaseOS]:是容器的名称,随意修改就好了
name=CentOS-AppStream-$releasever - Media:容器的说明,无所谓
baseurl=file:///media/CentOS/AppStream
#        file:///media/cdrom/AppStream
#        file:///media/cdrecorder/AppStream

源码包管理

源码包与RPM包区别

安装之前的区别:概念上的区别
安装之后的区别:安装位置不同
RPM安装位置/etc/        配置文件安装目录/usr/bin/   可执行的命令安装目录/usr/lib/ 程序所使用的函数库保存位置/usr/share/doc 基本的软件使用手册保存位置/usr/share/man 帮助文件保存位置源码包安装位置/usr/local/软件名/安装位置不同带来的影响
RPM包安装的服务可以使用系统服务管理命令(service)来管理,例如RPM包安装的apache的启动方式是:
/etc/rc.d/init.d/httpd start
service httpd start而源码包安装的服务则不能被服务管理命令管理,因为没有安装到默认路径中。所以只能用绝对路径进行服务的管理
/usr/local/apache2/bin/apachectl start
网页保存路径:/var/www/html

源码包安装过程

./configure软件配置与检查
定义需要的功能选项
检测系统环境是否符合安装要求
把定义好的功能选项和检测系统环境的信息都写入Makefile文件,用于后续的编辑在软件包目录下执行(https://www.cnblogs.com/yuzhaokai0523/p/4382974.html)
[root@localhost httpd-2.4.43]# ./configure --prefix=/usr/local/apache2
make:编译,调用gcc把源码包翻译成机器语(make clean也可以清空临时文件)make install:编译安装停止rpm包的apache服务:service httpd stop在启动源码包apache:/usr/local/apache2/bin/apachectl start(启动不了:/etc/init.d/iptables stop)

脚本安装包与软件安装包选择

脚本安装

脚本安装包并不是独立的软件包类型,常见安装的是源码包
是人为把安装过程写成了自动安装的脚本,只要执行脚本,定义简单的参数,就可以完成安装
非常类似于Windows下软件的安装方式示例:安装Webmim(Webmim是一个基于Web的Linux系统管理界面。通过图形化的方式设置用户账号,Apache,DNS,文件共享等服务)
下载软件:httpd://sourceforge.net/projects/wehttpd://sourceforge.net/projects/webadmin/files/webmim
解压缩,并进入加解压缩目录
在文件的执行安装程序目录执行安装脚本./setup.sh

用户与用户管理

用户配置文件

用户信息文件/etc/passwd

用户管理简介

所以越是对服务器安全性要求越高的服务器,越需要建立合理的用户权限登记制度和服务器操作规范
在Linux中主要是通过用户配置文件来查看和修改用户信息

/etc/passwd

第1字段:用户名称
第2字段:密码标志
第3字段:UID(用户ID)0:            超级用户1-499:       系统用户(伪用户)500-65535:    普通用户
第4字段:GID(用户初始组ID)初始组:就是指用户一登陆就立刻拥有这个用户组的相关权限,每个用户的初始组只能有一个,一般就是和这个用户的用户名相同的组名作为在这个用户的初始组附加组:指用户可以加入多个其他的用户组,并拥有这些组的权限,附加组可以有多个
第5字段:用户说明
第6字段:家目录普通用户:/home/用户名超级用户:/root/
第7字段:登录之后的ShellShell:Linux命令解释器,在/etc/passwd当中,除了标准Shell是/bin/bash之外,还可以写如/sbin/nologin
普通用户必须是:/bin/bash才可以登陆,/sbin/nologin暂时无法登录

影子文件/etc/shadow

第1段:用户名
第2段:加密密码加密算法升级为SHA512散列加密算法如果密码是“!!”或“*”代表没有密码,不能登录
第3字段:密码最后一次修改日期使用1970年1月1日作为标准时间,每过一天时间戳加1:
第4字段:两次密码的修改时间间隔(和第3字段相比)
第5字段:密码有效期(和第3字段相比)
第6字段:密码修改到期前的警告天数(和第5字段相比)
第7字段:密码过期后的宽限天数(和第5字段相比)
第8段:账号失效时间要用时间戳表示
第9字段:保留

时间戳换算

时间戳换算为日期:date -d"1970-01-01 16066 days"
日期换算为时间戳:echo $($date(date --date="2014/01/06" + %s)/86400+1)

组信息文件/etc/group和组密码文件/etc/gshadow

组信息文件
第1字段:组名
第2字段:组密码标志
第3字段:GID
第4字段:组中附加用户

用户管理相关文件

用户的家目录

普通用户:/home/用户名/,所有者和所属组都是此用户,权限是700
超级用户:/rot/,所有者和所属组都是root用户,权限是50(vi /etc/passwd 修改UID为0即可,所属组不用改)

用户的邮箱

/var/spool/mail/用户名/
用户互相发邮件

用户模板

/etc/skel/
创建用户同时生成文件

用户管理

useradd

语法:useradd [选项] 用户名
选项:

  • -u UID:手工指定用户的UID
  • -d 家目录:手工指定用户的家目录
  • -c 用户说明:手工指定用户说明
  • -g 组名:手工指定用户的组名
  • -G 组名:指定用户的附加组
  • -s shell:手工指定用户登陆的shell。默认是/bin/bash/
useradd -u 666 -G root,bin -c "用户说明" -d /liming -s /bin/bash liming

passwd

命令格式

passwd [选项] 用户名
选项:

  • -S:查询用户密码的密码状态
  • -l:暂时锁定用户。仅root用户可用
  • -u:解锁用户。仅root可用
  • - -stdin:可以通过管道符输出的数据作为用户的密码

usermod和chage

修改用户信息usermod

语法:usermod [选项] 用户名
选项:

  • -u UID:修改用户的UID
  • -c 用户说明:修改用户的说明信息
  • -G 组名:修改用户的附加组
  • -L:临时锁定用户(Lock)
  • -U:解锁用户锁定(Unlock)

修改用户密码状态change

语法:chage [选项] 用户名
选项:

  • -l:列出用户的详细密码状态
  • -d 日期:修改密码最后一次更改日期(shadow3字段)
  • -m 天数:两次修改密码间隔(4字段)
  • -M 天数:密码有效期(5字段)
  • -W 天数:密码过期前警告天数(6字段)
  • -I 天数:密码过后宽限天数(7字段)
  • -E 日期:账号失效时间(8字段)
# 这个命令其实是把密码修改日期归0了(shadow3字段),这样用户一登陆就要修改密码
chage -d 0 zht

userdel和su

删除用户userdel

语法:userdel [选项] 用户名
选项:

  • -r:删除用户的同时删除用户home目录

用户切换su

语法:su [选项] 用户名
选项:

  • -: 选项只使用“-”代表连带用户的环境变量一起切换
  • -c:仅执行一次命令,而不切换用户身份
# 切换成root
su -root
# 不切换root,以root身份执行useradd命令添加zht用户
su -root -c "useradd zht"

用户组管理

添加用户组

语法:groupadd [选项] 组名
选项:

  • -g GID:指定组ID

修改用户组

groupmod [选项] 组名
选项:

  • -g GID:修改组ID
  • -n 新组名:修改组名
# 把组名tg1修改为tg2
groupmod -n tg2 tg1

删除用户组

语法:groupdel 组名

把用户添加入组或从组中删除

gpasswd [选项] 组名
选项:

  • -a 用户名:把用户加入组
  • -d用户名:把用户从组中删除
# root把zht用户加入root组
gpasswd -a zht

权限管理

ACL权限

ACL权限简介与开启

查看分区ACL权限是否开启

语法:dumpe2fs -h /dev/sda1
dumpe2fs命令是查询指定分区详细文件系统信息的命令
选项:-h:仅显示超级块中信息,而不是显示磁盘块组的详细信息

临时开启分区ACL权限

语法:mount -o remount,acl /
功能:重新挂载根分区,并挂载加入acl权限

永久开启分区ACL权限

语法:vi /etc/fstab
UUID=0749a78b-b4f3-430c-a8ca-3ef7370ec533 /                       xfs     defaults,acl        0 0
功能:加入acl语法:mount -o remount /
功能:重新挂载文件系统或重启系统,使修改生效

查看与设定ACL权限

查看ACL命令
语法:getfacl 文件名
功能:查看acl权限
设定ACL权限的命令
语法:setfacl 选项 文件名
选项:-m:设定ACL权限-x:删除指定的ACL权限-b:删除所有的ACL权限-d:设定默认的ACL权限-k:删除默认的ACL权限-R:递归设定ACL权限

给用户设定ACL权限

语法:setfacl -m u:st:rx /project/

给用户组设定ACL权限

语法:setfacl -m g:tgroup2:rwx project
为tgroup2分配ACL权限,使用“g:组名:权限”形式

最大有效权限与删除ACL权限

最大有效权限mask

mask是用来指定最大有效权限的,如果我给用户赋予了ACL权限,是需要和mask的权限“相与”才能得到用户的真正权限
语法:setfacl -m m:rx 文件名
功能:设定mask权限为r-x,使用它“m:权限”格式

删除ACL权限

语法:setfacl -x u:用户名 文件名
删除制动用户的ACL权限setfacl -x g:组名 文件名
删除指定用户组的ACL权限setfacl -b 文件名
删除文件的所有ACL权限

默认ACL权限和递归ACL权限

递归ACL权限

递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限语法:setfacl -m u:用户名:权限 -R 文件名

默认ACL权限

默认ACL权限的作用是如果给父目录设定了默认的ACL劝你西安,那么父目录中所有新建的子文件都会继承父目录的ACL权限语法:setfacl -m d:u:用户名:权限 文件名

文件特殊权限(4SUID,2SGID,1SBIT)

SetUID功能

只有可以执行的二进制程序才能设定SUID权限。
命令执行者要对该程序拥有X(执行)权限。
命令执行者在执行该程序时获得该程序文件属主的身份(执行程序的过程中灵魂文件附体为文件的属主)。
SetUID权限只在改程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。passwd命令拥有SetUID权限,所以普通用户可以修改自己的密码
【
ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 34928 5月  11 2019 /usr/bin/passwd
】cat命令没有SetUID权限,所以普通用户不能查看/etc/shadow文件内容
【
ll /bin/cat
-rwxr-xr-x. 1 root root 51856 5月  12 2019 /bin/cat
】

设定与取消 SetUID

4代表SUID
设置SUIDchmod 4755 文件名chmod u+s 文件名
取消SUID
chmod 755 文件名
chmod us 文件名

SetGID

SetGID针对目录的作用

普通用户必须对此目录拥有r和x权限,才能进入到此目录
普通用户在此目录中的有效组会变成此目录中的属组
如普通用户对此目录拥有w权限时,新建文件的默认属组是这个目录的属组

SetGID针对文件的作用

只有可执行的二进制程序才能设置SGID权限
命令执行者要对该程序拥有x(执行)权限
命令执行在执行程序的时候,组身份升级为该程序文件的属组
SetGID权限同样只在改程序执行过程中有效,也就是说组身份改变旨在程序执行过程中有效/usr/bin/locate是可执行二进制文件,可以赋予SGID
执行用户zxy对/usr/bin/locate命令拥有执行权限
执行/usr/bin/locate命令时,组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db数据库拥有r权限,所以普通用户可以使用locate命令查询mlocate.db数据库
命令结束,zxy用户的组身份返回为zxy组

StickyBIT

SBIT沾着位作用

粘着位目前只对目录有效
普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件。一旦赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件

设置与取消粘着位

设置粘着位
chmod 1755 目录名
chmod o+t 目录名
取消粘着位
chmod 777目录名
chmod 0-t 目录名

文件系统属性chattr权限

chattr命令格式(root受此命令限制)

chattr [+-=] [选项] 文件或目录名
+:增加权限
-删除权限
=等于某权限
选项:i:对文件设置i属性——不允许对文件进行删除,改名,也不能添加和修改数据;对目录设置i属性——只能修改目录下文件的数据,但不允许建立和删除文件a:对文件设置a属性——只能在文件中增加数据,但不能删除也不能修改数据;对目录设置a属性——只允许在目录中建立和修改文件,绝不允许删除

查看文件系统属性

lsattr 选项 文件名
选项:-a:显示所有文件和目录-d:若目标是目录,仅列出目录本身的属性,而不是子文件的

系统命令sudo权限

sudo权限

root把本来只能超级用户执行的命令赋予普通用户执行
sudo的操作对象是系统命令

sudo使用

visudo
实际修改的是/etc/sudoers文件
root    ALL=(ALL)       ALL
用户名 被管理的主机地址=(可使用的身份) 授权命令(绝对路径)
%wheel  ALL=(ALL)       ALL
%组名 被管理的主机地址=(可使用的身份)    授权命令
root把本来只能超级用户执行的命令赋予普通用户执行
sudo的操作对象是系统命令
zxy     ALL=/sbin/shutdown -r now
zxy用户添加关机命令

普通用户执行sudo赋予的命令

su - zht
# 查看可用的sudo命令
sudo -l
# 普通用户执行sudo命令
sudo /bin/shutdown -r now

挂载命令

命令语法:mount [-t文件系统] 设备文件名挂载点
执行权限:所有用户

# (一般首先mkdir创建一个/mnt/cdrom文件夹,mount/dev/sr0/mnt/cdrom)
mount -t iso

十五,回顾分区和文件系统

1.回顾分区和文件系统

1.分区类型

主分区:总共最多只能分四个
扩展分区:只能有一个,也算作主分区的一种,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数和格式化,必须在划分成逻辑分区才能使用
逻辑分区:逻辑分区是在扩展分区中划分的,如果是IDE硬盘,Linux最多支持59个逻辑分区,如果是SCSI硬盘,Linux最多支持11个逻辑分区解释说明:
主分区1: /dev/sda1
主分区2: /dev/sda2
主分区3: /dev/sda3
扩展分区:/dev/sda4
逻辑分区1:/dev/sda5
逻辑分区2:/dev/sda6
逻辑分区3:/dev/sda7主分区1:/dev/sda1
扩展分区::/dev/sda4
逻辑分区1:/dev/sda5
逻辑分区2:/dev/sda6
逻辑分区3:/dev/sda7

2.文件系统

ext2:是ext文件系统的升级版本,Red Hat Linux7.2版本以前的系统默认都是ext2文件系统。1993年发布,最大支持16TB的分区和最大2TB的文件ext3:ext3文件系统时ext2文件系统的升级版本,最大区别就是带日志功能,当系统突然停止时提高文件系统的可靠性。支持最大16TB的分区和2TB的文件ext4:它是ext3文件系统的升级版。ext4在性能,伸缩性和可靠性方面进行了大量改进。ext4的变化可以说是天翻地覆的,比如向下兼容ext3,最大1EB文件系统和16TB文件,无限数量子目录,extents连续数据块概念,多块分配,延迟分配,持久分配,快速FSCK,日志校验,无日志模式,在线碎片整理,inode增强,默认启用barrier等。是CentOS6.3的默认文件系统(1EB=1024PB=1024*1024TB)

2.文件系统常用命令

1.df查看分区大小

语法:df [选项] [挂载点]
选项:-a:显示所有文件系统信息,包括特殊文件系统,如/proc,/sysfs-h:使用习惯单位显示容量。如KB,MB,GB等-T:显示文件系统类型-m:以MB为单位显示容量-k:以KB为单位显示容量。默认就是KB为单位

2.统计目录或文件大小

语法:du [选项] [目录或文件名]-a:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量-h:使用习惯单位显示磁盘占用量,如KB,MB,GB等-s:统计总占用量,而不列出子目录和子文件的占用量

3.du和df命令区别

df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除,但是程序并没有释放空间)
du命令是面向文件的,只会计算文件或目录占用的空间

4.fsck文件系统修复命令

fsxk [选项] 分区设备文件名
选项:-a:不用显示用户提示,自动修复文件系统-y:自动修复。和-a作用一直,不过有些文件系统支支持-y

5.dumpe2fs显示磁盘状态命令

语法:dumpe2fs 分区设备文件名

6.挂载命令

1.查询与自动挂载

语法:mount [-l]
查询系统中已经挂载的设备,-l会显示卷标名称语法:mount -a
依据配置文件/etc/fstab的内容,自动挂载

2.挂载命令格式

语法:mount [-t 文件系统] [-L 卷标名] [-o 特殊选项] 设备文件名 挂载点
选项:-t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3,ext4,iso9660等文件系统-L 卷标名:挂载指定卷标的分区,而不是安装设置文件名挂载-o 特殊选项:可以指定挂载的额外选项vi zxy
我曾悲伤的爱过这个世界
执行:./zxy(需在当前目录下./文件名的形式运行即可)
挂在后禁止执行:mount -o remount,noexec /home/
挂载后可以执行:mount -o remount,exec /home/

4.挂载光盘与U盘

1.挂载光盘
建立挂载点:mkdir /mnt/cdrom
挂载光盘:mount -t iso9660 /dev/cdrom /mnt/cdrom
mount /dev/sr0 /mnt/cdrom
2.卸载命令
语法:umount 设备文件名或挂载点
示例:umount /mnt/cdrom
5.挂载U盘
语法:fdisk -l
查看U盘设备文件名
创建挂载点:mkdir usb
挂载U盘:mount -t vfat /dev/sdv1 /mnt/usb/

7.支持NTFS格式文件系统

1.安装NTFS-3G

解压缩:tar -zxvf ntfs-3g_ntfsprogs-2011.4.12.tgz
进入到解压文件目录:./configure
编译:make
编译安装:make install
CentOS-AppStream.repo   CentOS-fasttrack.repo
CentOS-Base.repo.repo    CentOS-HA.repo
CentOS-centosplus.repo  CentOS-Media.repo
CentOS-CR.repo          CentOS-PowerTools.repo
CentOS-Debuginfo.repo   CentOS-Sources.repo
CentOS-Extras.repo      CentOS-Vault.repo
仅保留CentOS-Media.repo,其余全换名字

3.fdisk分区(手动挂载和IP一样,重启就失效)

1.添加新硬盘

2.查看新硬盘

语法:fdisk -l

3.使用fdisk命令分区

语法:fdisk /dev/sdb
注意:第一块硬盘sda,第二块是sdb。。。
a:设置引导标记
b:编辑bsd磁盘标签
c:设置DOS操作系统兼容标记
d:删除一个分区
l:现时已知的文件系统类型。82为Linux swap分区;83为Linux分区
m:显示帮助菜单
n:新建分区
o:建立空白DOS分区表
p:显示分区列表
q:不保存退出
s:新建空白SUN磁盘标签
t:改变一个分区的系统ID
u:改变显示记录单位
v:验证分区表
w:保存退出
x:附加功能(仅专家)

4.重新读取分区表信息

语法:partprobe

5.格式化分区

语法:mkfs -t ext4 /dev/sdb1

6.创建挂载点

语法:mkdir /disk1mount /dev/sdb1 /disk1/

4.自动挂载与fstab文件修复

1./etc/fstab文件

第一字段:分区设备文件名或UUID(硬盘通用唯一识别码)
第二字段:挂载点
第三字段:文件系统名称
第四字段:挂在参数
第五字段:指定分区是否被dump备份,0代表不备份;1代表每天备份,2代表不定期备份
第六字段:指定分区是否被fsck检测,0代表不检测,其他数字代表检测的优先级,1的优先级比2高

2.分区自动挂载

vi /etc/fstab
末尾增加一栏: /dev/sdb1    /disk1  ext4    1 2
注意:/etc/fstab是系统重要的启动资源和文件,如果写错会导致系统崩溃,因此每次配置完之后需要一句配置文件/etc/fstab内容,自动挂载

3./etc/fstab文件修复

针对仅有读取权限的挂载:mount -0 remount,rw /
在vi修改/etc/fstab

十六,Shell基础

1.概述

1.shell是什么

Shell是一个命令行解释器,它为用户提供了一个向Linux内核发送请求以便运行程序的界面系统级程序,用户可以用Shell来启动,挂起,停止甚至是编写一些程序。
Shell还是一个功能相当强大的编程语言,易编写,易调试,灵活性较强。Shell是解释器执行的脚本语言,在Shell中可以直接调用Linux系统命令

2.shell分类

Bourne Shell:从1979年起Unix就开始使用Bourne Shell,Bourne Shell的主文件名为sh
C Shell:C Shell主要在BSD版的Unix系统中使用,其语法和C语言相类似而得名
Shell的两种主要语法类型有Bourne和C,这两种语法彼此不兼容。Bourne家族主要包括sh,ksh,Bash,psh,zsh:C家族主要包括:csh,tcsh
Bash:Bash与sh兼容,现在使用的Linux就是使用Bash作为用户的基本Shell。

3.Linux支持的Shell

/etc/shells

2.脚本执行方式

1.echo输出命令

语法:echo [选项] [输出内容]
选项:-e:支持反斜线控制的字符转换\\:输出\本身\a:输出警告\b:退格键,向左删除键\c:取消输出行末的换行符。和“-n”选项一致。\e:Escape键\f:换页符\n:换行符\t:制表符\v:垂直制表符\0nnn:八进制ASCII码表输出,其中0为数字零,nnn为三位八进制数\xhh:按照十六进制ASCII码表输出字符,其中hh是两位十六进制数echo -e "\[1;31m abcd \e[0m"
30m=黑色,31m=红色,32m=绿色,33m=黄色
34m=蓝色,35m=洋红,36m=青色,37m=白色

3.第一个脚本

vi hello.sh
#!/bin/bash➡必须声名,除此之外全部是注释
#The first program
#Atuthor:zxy (E-mail:1969612859@qq.com)
echo -e "Mr.Chen is the honest man"

4.脚本执行

赋予执行权限,直接执行:chmod 755 hello.sh ./hello.sh
通过bash调用执行脚本:bash hello.sh

3.Bash基本功能

1.历史命令与命令补全

语法:history [选项] [历史命令保存文件]
选项:-c:清空历史命令-w:把缓存中的历史命令写入历史命令保存文件~/.bash_history历史命令默认保存1000条,可以在环境变量配置文件/etc/profile中进行修改历史命令调用
使用上下箭头调用以前的历史命令
使用“!n”重复执行第n条历史命令
使用“!!”重复执行上一条命令
使用“!字符串”重复执行最后一条以该字串开头的命令历史命令补全
在Bash中,命令与文件补全是非常方便与常用的功能,我们只要在输入命令或文件时,按“Tab”键就会自动进行补全

2.命令别名与常用快捷键

1.命令别名

语法:alias 别名='原命令'
设定命令别名查询命令别名:alias命令执行顺序
1第一顺位执行用绝对路径或相对路径执行的命令
2第二顺位执行的命令别名
3第三顺位执行Bash的内部命令
4第四顺位执行按照$SPATH环境变量定义的目录查找顺序找到的第一个命令

2.让别名永久生效

语法:vi /root/.bashrc

3.输入输出重定向

1.标准输入与输出

设备       设备文件名   文件描述        类型
键盘      /dev/stdin      0       标准输入
显示器     /dev/stdout     1      标准输出
显示器     /dev/stderr     2   标准错误输出

2.输出重定向

类型               符号          作用
标准输出重定向   命令 > 文件   以覆盖的方式,把命令的正确输出输出到指定的文件或设备中命令 >> 文件   以追加的方式,把命令的正确输出输出到指定的文件或设备中
标准错误输出重定向   错误命令 2> 文件   以覆盖的方式,把命令的错误输出输出到指定的文件或设备中错误命令 2> 文件   以追加的方式
正确输出和错误输出同时保存   命令 > 文件 2>&1  以覆盖的方式,把正确输出和错误输出都保存到同一个文件命令 >> 文件 2>&1  以追加的方式,把正确输出和错误输出都保存到同一个文件命令 &> 文件        以覆盖的方式,把正确输出和错误输出都保存到同一个文件命令 &>> 文件       以追加的方式,把正确输出和错误输出都保存到同一个文件命令 >> 文件1 2>> 文件2 把正确的输出追加到文件1中,把错误的输出追加到文件2中

3.输入重定向

语法:wc [选项] [文件名]
选项:-c:统计字节数-w:统计单词数-l:统计行数
命令 < 文件 把文件作为命令的输入

4.多命令顺序执行与管道符

多命令执行        格式              作用
;           命令1;命令2;命令3...   多个命令顺序执行,命令之间没有任何逻辑联系
&&          命令1&&命令2          逻辑与:当命令1正确执行,则命令2才会执行;当命令1执行不正确,则命令2不会执行
||          命令1||命令2          逻辑或:当命令1执行不正确,则命令2才会执行;当命令1正确执行,则命令2不会执行

1.dd(磁盘拷贝)

语法:dd if=输入文件 of=输出文件 bs=字节数 count=个数
选项:
if=输入文件    指定源文件或源设备
of=输出文件 指定目标文件或目标设备
bs=字节数  指定一次输入/输出多少字节,即把这些字节看做一个数据块
count=个数  指定输入/输出多少个数据块
例子:
date;dd if=/dev/zero of=/root/testfile bs=1k count=100000;date

2.管道符

语法:命令1 | 命令2
命令1的正确输出作为命令2的操作对象举例:grep [选项] "搜索内容" 文件名
选项:-i:    忽略大小写-n:显示行号-v:反向查找--color=auto:搜索出的关键字用颜色显示

5.通配符和其他特殊符号

1.通配符

通配符          作用
?             匹配一个任意字符
*             匹配0个或任意多个字符,也就是可以匹配任何内容
[]            匹配括号中任意一个字符。例如:[abc]代表一定匹配一个字符,或者是a,或者是b,或者是1c
[-]           匹配括号中人一个字符,代表一个范围。例如:[a-z]代表匹配任意一个小写字母
[^]           逻辑非,表示匹配不是中括号内的一个字符。例如:[^0-9]代表匹配一个不是数字的字符

2.Bash中其它特殊符号

符号   作用
''    单引号中所有的特殊符号,如“$”和“`”都没有特殊意义
""    双引号中特殊符号都没有特殊含义,但是“$”,“`”和“\”例外,拥有“调用变量”,“引用命令”和“转义符”
``    反引号括起来的都是系统命令,在Bash中会先执行它,和$()一样,不过不推荐使用$(),因为反引号非常容易看错
$() 和反引号作用一样,用来引用系统命令
#   在Shell脚本中,#开头的行代表注释
$   用于调用变量的值,需需要调用变量name的值时,需要用$name的方式得到变量的值
\   转义符,跟在\之后的特殊符号将失去特殊含义,变为普通字符。如\$将输出“$”符号,而不当作是引用变量

4.Bash变量

1.用户自定义变量

1.什么是变量

变量是计算机内存的单元,其中存放的值可以改变。当Shell脚本需要保存一些信息时,入一个文件名或是一个数字,就把它存放在一个变量中。每个变量有一个名字,所以很容易引用它。使用变量可以保存有用信息,是系统获知用户相关设置,变量也可以用于保存暂时信息。

2.变量命名规则

变量名称可以由字母,数字和下划线组成,但是不能艺术字开头。如果变量名是“2name”则是错误的
在Bash中,变量的默认类型都是字符串类型,如果要进行数值运算,则必须指定变量类型为数值型
变量用等号连接值,等号左右两侧不能有空格
变量的值如果有空格,需要使用单引号或双引号包括
在变量的值中,可以使用“\”转义符
如果需要增加变量值,那么可以进行变量值的叠加,不过变量需要用双引号包含“$变量名”或用${变量名}包含
如果是把命令的结果作为变量值赋予变量,则需要使用反引号或$()包含命令
环境变量建议大写,便于区分

3.变量的分类

用户定义变量(变量名变量值都可以修改)
环境变量:这种变量中主要保存的是和系统操作环境相关的数据(系统默认的变量名不能修改,变量值可以修改;但可以添加用户新的变量名)
位置参数变量:这种变量主要是用来向脚本当中传递参数或数据的,变量名不能自定义,变量作用是固定的
预定义变量:是Bash中已经定义好的变量,变量名不能自定义,变量作用也是固定的

4.本地变量

变量定义
name="shen chao"
aa=123
aa="$aa"456
aa=${aa}789变量调用
echo $name变量查询
set变量删除
unset name

2.环境变量

1.环境变量是什么

用户自定义变量只在当前的Shell中生效,而环境变量会在当前Shell和这个Shell的所有子Shell当中生效。如果把这个环境变量写入相应的配置文件,那么这个环境变量就会在所有的Shell中生效

2.设置环境变量

export 变量名=变量值
#申明变量env
#查询变量unset 变量名
#删除变量PS1:定义系统提示符的变量
\d:显示日期,格式为“星期 月 日”
\h:显示简写主机名。如默认主机名“localhost”
\t:显示24小时制时间,格式为“HH:MM:SS”
\A:显示12小时制时间,格式为”HH:MM:SS“
\u:显示当前用户名
\w:显示当前用户所在目录的完整名称
\W:显示当前所在目录的最后一个目录
\#:执行的第几个命令
\$:提示符,如果是root用户会显示提示复位”#“;如果是普通用户会显示提示符为”$“

3.常见环境变量

PATH:系统查找命令的路径
echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
PATH="$PATH":/root/sh
#PATH变量叠加举例:
简单的一次添加环境变量
生成一个shell脚本:vi hello.sh
编写shell脚本:#!/bin/bashecho "你好世界"
添加到环境变量:cp hello.sh /bin/常用的添加环境变量
PATH="$PATH":/ROOT修改PS1(命令显示信息):
PS1='[\u@\t \w]\$'

3.位置参数变量

1.位置参数变量

位置参数变量 作用
$n          n位数字,$0代表命令本身,$1-$9代表一道第九个参数,十以上的参数就需要用大括号包含,如$(10)
$*          这个变量代表命令中所有的参数,$*把所有的参数看成一个整体
$@         这个变量也代表命令行中所有的参数,不过$@吧每个参数区分对待
$#          这个变量代表命令行中所有参数的个数$n的作用举例
mkdir shcd sh
vi canshu1.sh:
#!/bin/bash
echo $0
echo $1
echo $2
echo $3加法计算器:
vi canshu2.sh
#!/bin/bash
sum=$(($1+$2))
echo "得到的和是:$sum"$*,$@,$#区别
vi canshu3.sh
#!/bin/bash
for i in "$*"
#$*中所有的参数看成是一个整体,所以这个for循环只会循环一次doecho "THe parameters is:$i"done
x=1
for j in "$@"
#@中每个参数都看成是独立的,所以"$@"中有几个参数,就会循环几次doecho "The parameter is:$j"done

4.预定义变量

1.预定义变量种类

预定义变量 作用
$?      最后一次执行命令的返回状态。如果这个变量的值为0,证明上一个命令正确执行;如果这个变量的值为非0(具体是哪个数,由命令自己来决定),则证明上一个命令执行不正确了。
$$      当前进程的进程号(PID)
$!      后台运行的最后一个进程的进程号(PID)举例:
vi canshu4.sh
#!/bin/bash
#Author chen
echo "The current process is $$"
#输出当前进程的PID,这个PID就是canshu4.sh这个脚本执行时,生成的进程PIDfind /root -name hello.sh &
#使用find命令在root目录下查找hello.sh文件;符号&的意思是把命令放入后台执行
echo "The last one Daemon process is $!"

2.接受键盘输入

语法:read [选项] [变量名]
选项:-p "提示信息":在等待read输入时,输出提示信息-t 秒数:read命令会一直等待用户输入,使用此选项可以指定等待时间-n 字符数:read命令只接受指定的字符数就会执行-s:隐藏输入的数据,适用于机密信息的输入举例:
vi canshu5.sh
#Author chen
read -t 30 -p "请在30秒之内输入姓名:" name
#提示”请输入姓名“并等待30秒,把用户的输入保存入变量name中
echo "姓名是:$name"read -s -t 30 -p "输入您的年龄:" age
#年龄是隐私,所以我们用”-s“选项隐藏输入
echo -e "\n"
echo "年龄是:$age"read -n 1 -t 30 -p "请选择您的性别[男/女]" gender
#使用”-n 1“选项只接收一个输入字符就会执行(不需要按回车)
echo -e "\n"
echo "性别是:$gender"

5.数值运算与运算符

1.declare申明变量类型

语法:declare [+/-][选项] 变量名
选项:-:     给变量设定类型属性+:     取消变量的类型属性-i:     将变量声明为整数型(integer)-x:      将变量声明为环境变量-p:        显示指定的变量的被声明的类型

2.数值运算__方法1

aa=11
bb=22
cc=$aa+$bb
echo cc 》》 11+22
declare -p aa 》》 declare --a="ll"
export aa
declare -p aa 》》 declare -x="ll"declare -i cc=$aa+$bb

3.expr或let数值运算工具_方法2

aa=11
bb=22
dd=$(expr $aa + $bb)
#dd的值是aa和bb的和。注意“+”号左右两侧必须有空格

4.$((运算式))或$[运算式]_方法3

aa=11
bb=22
ff=$(($aa + $bb))
gg=$[$aa + $bb]

5.运算符

优先级   运算符    说明
13      -,+     单目负,单目正
12      !,~      逻辑非,按位取反或补码
11      *,/,%  乘,除,取模
10      +,-     加,减
9       <<,>>    按位左移,按位右移
8       <=,>=,<,>小于或等于,大于或等于,小于,大于
7       ==,!= 等于,不等于
6       &       按位与
5       ^       按位异或
4       |       按位或
3       &&      逻辑与
2       ||      逻辑或
1       =      赋值
+=,-=,*=,/=,%=,&=,=,|=,<<=,>>=    运算赋值aa=$(((11+3)*3/2))
bb=$((14%3))
cc=$((1&&0))

6.变量测试与内容替换

1.公式

变量置换方式   变量y没有设置 变量y为空   变量y设置值
x=${y-新值}      x=新值           x为空         x=$y
x=${y:-新值} x=新值           x新值         x=$y
x=${y+新值}     x为空             x=新值       x=新值
x=${y:+新值}    x为空             x为空         x=新值
x=$(y=新值)     x=新值           x为空         x=$yy=新值              y值不变     y值不变
x=${y:=新值}  x=新值         x=新值       x=$yy=新值           y=新值          y值不变
x=${y?新值}      新值输出到标准错误(就是屏幕)   x为空 x=$y
x=${y:?新值} 新值输出到标准错误   新值输出到标准错误   x=$y

5.环境变量配置文件

1.环境变量配置文件简介

1.source命令

语法:source 配置文件或.配置文件
功能:将配置文件强制生效不需要重启登录操作

2.环境变量配置文件简介

环境变量配置文件中主要是定义对系统的擦欧总环境生效的系统默认环境变量,比如PATH,HISTSIZE,PS1,HOSTNAME等默认环境变量
/etc/profile
/etc/profile.d/*.sh
~/.bash_profile
~/.bashrc
/etc/bashrc

2.环境变量配置文件作用

/etc/profile的作用
USR变量:
LOGNAME变量:
MAIL变量:
PATH变量:
HOSTNAME变量:
HISTSIZE变量:
umask:
调用/etc/profile.d/*.sh文件
/etc/bashrc作用
PS1变量:
umaks
PATH变量
调用/etc/profile.d/*.sh文件

3.其他配置文件和登录信息

1.注销时生效的环境变量配置文件

~/.bash_logout

2.其他配置文件

~/.bash_history

3.Shell登录信息

本地终端欢迎信息:/etc/issue
vi /etc/issue
转义符 作用
\d      显示当前系统日期
\s      显示当前系统名称
\l      显示登陆的终端号(常用)
\m      显示硬件体系结构,如i5-2520m等
\n      显示主机名
\o      显示域名
\r      显示内核版本
\t      显示当前系统时间
\u      显示当前登陆用户的序列号远程终端欢迎信息:/etc/issue.net
转义符在/etc/issue.net文件中不能使用
是否显示此欢迎信息,由ssh的配置文件/etc/ssh/sshd_config决定,加入“Banner/etc/issue.net”行才能显示(记得重启SSH服务)登陆后欢迎信息:/etc/motd(不管是本地登录,还是远程登陆,都可以显示此欢迎信息)

6.正则表达式

1.正则表达式与通配符

正则表达式用来在文件中匹配符合条件的字符串,正则是包含匹配。grep,awk,sed等命令可以支持正则表达式
通配符用来匹配符合条件的文件名,通配符是完全匹配。ls,find,cp这些命令不支持正则表达式,所以只能使用shell自己的通配符来进行匹配

2.基础正则表达式

元字符          作用
*                   前一个字符匹配0次或任意多次
.                   匹配除了换行符外任意一个字符
^                   匹配行首。例如:^hello会匹配以hell开头的行
$                   匹配行尾。例如:hello$会匹配以hello结尾的行
[]              匹配括号中指定的任意一个字符,只匹配一个字符。例如:[aeiou]匹配任意一个元音字母,[0-9]匹配任意一位数字,[a-z][0-9]匹配小写字母和一位数字构成的两位字符
[^]             匹配除中括号以外的任意一个字符。例如:[^0-9]匹配任意一个非数字字符,[^a-z]表示任意一位非小写字母。
\                   转义符。用于取消符号的特殊含义
\{n\}           表示其前面的字符恰好出现n次。例如:[0-9]\{4\}匹配4位数字,[1][3-8][0-9]\{9\}匹配手机号码
\{n, \}     表示其前面的字符出现不小于n次。例如:[0-9]\{2, \}表示两位及以上的数字
\{n, m\}    表示其前面的字符至少出现n次,最多出现m次。例如:[a-z]\{6, 8\}匹配6到8位的小写字母举例:
*前一个字符匹配0次,或任意多次
grep "a*" test_rule.txt匹配所有内容,内容包括空白行
grep "aa*"匹配至少包含有一个a的行
grep "aaa*"匹配最少包含两个连续a的字符串
grep "aaaaa*" test_rule.txt则会匹配最少包含四个连续的a的字符串.匹配除了换行符外任意一个字符
grep "s..d" test_rule.txt“s..d”会匹配在s和d两个字母之间有两个字符的单词
grep "s.*d" test_rule.txt匹配在s和d之间任意字符
grep ".*"匹配所有内容^匹配行首,“$”匹配行尾
grep "^M" test_rule.txt匹配以大写”M“开头的行
grep "n$"匹配以小写”n“结尾的行
grep -n “^$” test_rule.txt会匹配空白行(-n显示行号)[]匹配中括号中指定的一一个字符,只匹配一个字符
grep "s[ae]id" test_rule.txt匹配s和i之间的字母,要么是a要么是o
grep "[0-9]" test_rule.txt匹配任意一个数字
grep "^[a-z]" test_rule.txt匹配用小写字母开头的行[^]匹配中括号中字符以外任意字符
grep "[^a-z]"匹配小写字母以外的字符
grep "^[^a-zA-Z]" test_rule.txt匹配不用字母开头的行\转义符
grep "\.$" test_rule.txt匹配使用“.”结尾的行\{n\}其前面的字符恰好出现n次
grep "a\{3\}" test_rule.txt匹配a字母连续出现三次的字符串
grep "[0-9]\{3\}"匹配包含来连续的三个数字的字符串\{n, \}其前面出现的字符不少于n次
grep "^[0-9]\{3,\}[a-z]" test_rule.txt匹配最少用连续三个数字开头的行\{n,m\}七七阿棉的字符至少出现n次,最多出现m次
grep "sa\{1,3\}i" test_rule.txt匹配在字母s和字母i之间最少一个a,最多三个a

7.字符串截取命令

1.cut命令

语法:语法 [选项] 文件名
选项:-f 列号:提取第几列-d 分隔符:按照指定分隔符分割列举例:
vi student.txt
ID  Name    Gender      Mark
1       Chen    M                   80
2       Zhang   G                   80
3       Zhu     G                   50cut -f 2,4 student.txt(仅显示2,4列两列的内容)
cut -d ":" -f 1,3 /etc/passwdcut命令局限
df -h|cut -d " " -f 1,3

2.printf命令

printf '输出类型输出格式' 输出内容
输出类型:%ns:        输出字符串。n是数字指代输出几个字符%ni:      输出整数。n是数字指代输出几个数字%m.nf: 输出浮点数。m和n是数字,指代输出的整数位数和小数位数。如%8.2f代表共输出8位数,其中2位是小数,6位是整数输出格式:
\d  输出警告声音
\b  输出退格键(Backspace)
\f  清除屏幕
\n  换行
\r  回车
\t  谁输出退格键(Tab)
\v  垂直输出退格键()举例:
[root@localhost ~]# printf %s 1 2 3 4
1234[root@localhost ~]# prinf %s%s%s 1 2 3 4 5
[root@localhost ~]# printf %s%s%s 1 2 3 4 5
12345[root@localhost ~]# printf '%s%s%s' 1 2 3 4 5
12345[root@localhost ~]# printf '%s%s%s\n' 1 2 3 4 5
123
45printf "%s" $(cat student.txt)
IDNameGenderMark1ChenM802ZhangG883zHUG50[root@localhost ~]# 不调整输出格式
在awk命令的输出中支持print和printf命令
print:print在每个输出之后自动加入个换行符(Linux默认没有print命令)
printf:printf是标准输出命令,并不会自动加入换行符,如果需要换行符,需要手工加入换行符

3.awk命令

awk '条件1{动作1}条件1{动作1}...' 文件名
条件(pattern):
一般使用关系表达式作为条件
x > 10   判断变量x是否大于10
x >= 10 大于等于
x <= 10 小于等于
动作(Action):格式化输出流程控制语句举例:
awk '{printf$2 "\t" $6 "\n"}' student.txt【没有条件,只要有数据全部都输出,$1代表输出第一列,$0输出整行】
df -h|awk '{print $1 "\t" $3}'BEGIN
awk 'BEGIN{printf "This is a transcript \n"}{printf$2 "\t" $6 "\n"}' student.txtFS内置变量
cat /etc/passwd|grep "bin/bash"|awk 'BEGIN {FS=":"} {printf$1 "\t" $3 "\n"}'END
awk 'END{printf "The End \n"}{printf $2 "\t" $6 "\n"}' student.txt关系运算符
cat student.txt|grep -v Name|awk '$6 >= 87{printf $2 "\n"}'

4.sed命令

1.简介

sed是一种几乎包括在所有UNIX平台(包括Linux)的轻量级流编辑器。sed主要是用来将数据进行选取,替换,删除,新增的命令
语法:sed [选项] '[动作]' 文件名
选项:-n:一般sed命令会把所有数据都输出到屏幕,如果加入此选择,则只会把经过sed命令处理的行输出到屏幕-e:允许对输入数据应用多条sed命令编辑-i:用sed的修改结果直接读取数据的文件,而不是有屏幕输出动作:\a:追加。在当前行后添加一行或多行。添加多行时,除最后一行外,每行末尾需要用"\"代表数据完结\c:行替换。用c后面的字符串替换原有数据行,替换多行时,除最后一行外,每行需要用"\"代表数据完结\i:插入。在当前行前插入一行或多行。插入多行是,除最后一行外,每行末尾需要使用"\"代表数据完结d:删除。删除指定的行p:打印。输出指定的行s:字符串替换,用一个字符串替换另外一个字符串。格式为“行范围s/旧字符串/新字符串/g”(和vim中的替换格式类似)举例:
产看第2行数据
sed "2p" student.txt
sed -n "2p" student.txt删除2到4行数据(因为没有加i所以不会影响源文件内容)
sed "2,4d" student.txt增加
sed '2a 你好' student.txt 在第2行末尾后追加你好
sed '2i 你好'\word' student.txt 在第2行前插入两行数据数据替换
sed '2c 没有这个人' studetn.txt字符串替换
sed 's/旧字符串/新字符串/g' 文件名
sed '3s/50/99/g' student,txt 在第四行中吧50换成99
sed -i '3s/50/99/g' student.txtsed操作的数据直接写入文件
sed -e 's/Liming//g; s/Gao//g' student.txt同时把“Liming”和“Gao”替换为空

8.字符串处理命令

1.排序命令sort

语法:sort [选项] 文件名
选项:-f:忽略大小写-n:以数值型进行排序,默认使用字符串型排序-r:反向排序-t:指定分隔符,默认是分隔符是制表符-k n[, m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)举例:
sort /etc/passwd
sort -r /etc/passwd
sort -t ":" -k 3,3 /etc/passwd指定分隔符就是“:”,用第三字段开头,第三字段结尾排序,就是只用第三字段排序
sort -n -t ":" -k 3,3 /etc/passwd

2.统计命令wc

语法:wc [选项] 文件名
选项:-l:只统计行数-w:只统计单词数-m:只统计字符数

9.条件判断

1.按照文件类型进行判断

测试选项 作用
-b 文件       判断该文件是否存在,并且是否为块设备文件(是块设备文件为真)
-c 文件       判断该文件是否存在,并且是否为字符设备(是字符设备为真)-d 文件      判断该文件是否存在,并且是否为目录文件(是目录为朕)
-e 文件       判断文件是否存在(存在为真)
-f 文件       判断该文件是否存在,并且是否为普通文件(是普通文件为真)-L 文件      判断文件是否存在,并且是否为符号链接文件(是符号链接文件为真)
-p 文件       判断该文件是否存在,并且是否为管道符文件(是管道符为真)
-s 文件       判断文件是否存在,并且是否为非空(非空为真)
-S 文件       判断文件是否存在,并且是否为套接字文件(是套接字文件为真)两种判断格式
test -e /root/install.log
[ -e /root/install.log ]
[ -d /root ] && echo "Yes" || echo "No"第一个判断命令如果正确执行,则打印“Yes”,否则打印“No”

2.按照文件权限进行判断

测试选项 作用
-r 文件       判断文件是否存在,并且是否该文件拥有读权限(有读为真)
-w 文件       判断文件是否存在,并且是否该文件拥有写权限(有写为真)
-x 文件       判断文件是否存在,并且是否该文件拥有执行权限(有执行为真)-u 文件     判断文件是否存在,并且是否该文件拥有SUID权限(有SUID为真)
-g 文件       判断文件是否存在,并且是否该文件拥有SGID权限(有SGID为真)
-k 文件       判断文件是否存在,并且是否该文件拥有SBit权限(有SBit为真)

3.两个文件之间进行比较

测试选项                 作用
文件1 -nt 文件2     判断文件1的修改时间是否比文件2的新(如果新则为真)
文件1 -ot 文件2     判断文件1的修改时间是否比文件2的旧(如果旧为真)
文件1 -ef 文件2     判断文件1Inode号是否一致,可以理解为两个文件是否为同一个文件。这个判断用于判断硬链接是很好的方法举例:
创建硬链接:ln /root/student.txt /tmp/stu.txt
使用test测试:[ /root/student.txt -ef /tmp/stu.txt ] && echo yes||echo no

4.两个整数之间比较

测试选项                 作用
整数1 -eq 整数2     判断整数1是否和整数2相等(相等为真)
整数1 -ne 整数2     判断整数1是否和整数2不相等(不相等为真)
整数1 -gt 整数2     判断整数1是否大于整数2(大于为真)
整数1 -lt 整数2     判断整数1是否大于整数2(小于为真)
整数1 -ge 整数2     判断整数1是否大于等于整数2(大于等于为真)
帧数1 -le 整数2     判断整数1是否小于等于整数2(小于等于为真)[ 22 -gt 23 ] && echo yes || echo no

5.字符串的判断

测试选项      作用
-z 字符串      判断字符串是否为空(为空返回真)
-n 字符串      判断字符串是否为非空(非空返回真)
字符串1 == 字符串2 判断字符串1是否和字符串2相等(相等返回真)
字符串1 != 字符串2 判断字符串1和字符串2不相等(不相等返回真)

6.多重条件判断

测试选项             作用
判断1 -a 判断2  逻辑与,判断和判断2都成立,最终结果才为真
判断1 -o 判断2  逻辑或,判断1和判断2有一个成立,最终的结果就为真
!判断                     逻辑非,使原始的判断式取反

10.流程控制

1.if语句

1.单分支if条件语句
if [ 条件判断式 ];then程序
if
或者
if [ 条件判断式 ]then程序
fi单分支语句需要注意的几点
if语句使用if结尾,和一般语言使用大括号结尾不同
[ 条件判断式 ]就是用test命令判断,所以中括号和条件判断式之间必须有空格
then后面跟符合条件之后执行的程序,可以放在[]之后,用“:”分割。也可以换行写入,就不需要“:”举例:判断分区使用率
mkdir sh
cd /sh
vi if1.sh
#!/bin/bash
rate=$(df -h|grep /dev/sda3|awk 'print $5')|cut -d "%" -f 1
if [ $rate -ge >10 ]thenecho "您的磁盘暂用大于10%"
fi
2.双分支if条件语句
if [条件判断式]then条件成立时,执行的程序else条件不成立时,执行的另一个程序
fi举例:备份数据库文件
vi if2.sh
#!/bin/bash
date=$(date %y%m%d)
size=$(du -sh /etc)
if [ -d /tmp/dbback ]thenecho "Date is :$date" > /tmp/dbback/db.txtecho "Size is :$size" >> /tmp/dbback/db.txtcd /tmp/dbbacktar -zcf etc_$date.tar.gz /etc db.txt &>/dev/nullrm-rf /tmp/dbback/db.txtelsemkdir /tmp/dbbackecho "Date is :$date" > /tmp/dbback/db.txtecho "Size is :$size" >> /tmp/dbback/db.txtcd /tmp/dbbacktar -zcf etc_$date.tar.gz /etc db.txt &>/dev/nullrm-rf /tmp/dbback/db.txt
fi判断apatch是否启动
vi if3.sh
#!/bin/bash
port=$(nmap -sT 192.168.0.156 | grep tcp | grep http | awk '{printf $2}')
#使用name命令扫描服务器,并截取apache服务的状态,赋予变量port
if [ "$port" == "open"]thenecho "$(date) httpd is ok!" >> /tmp/autostart-acc.logelse/etc/rc.d/init.d/httpd-start $> /dev/nullecho "$(date) restart httpd!!!" >> /tmp/autostart-err.log
fi
3.多分支if条件语句
if [ 条件判断式 ]then条件成立时,执行的程序1
elif条件成立时,执行的程序2
...
else当所有条件都不成立时,最后执行次此序
fi举例:
判断用户输入文件类型是什么
vi if4.sh
if [ -z "$file" ]
#判断file变量的是否为空thenecho "Error,please input a filename"exit 1 #### 2.case语句

2.多分支case条件语句

case语句和if...elif...else语句一样都是多分支条件语句,不过和if多分支条件语句不同的是,case语句只能判断一种条件关系,而if语句可以判断多种条件关系case $变量名 in"值1")若果变量的值等于1,执行程序1;;"值2")如果变量的值等于值2,则执行程序2;;...省略其他分支...*)如果变量的值都不是以上的值,则执行此程序;;
esac举例:
vi if5.sh
#!/bin/bash
echo "前往上海请按'1'"
echo "前往广州请按'2'"
echo "前往成都请按'3'"
read -t 30 -p "请输入你的选择:" cho
case "$cho" in1)echo "上海的机票已发车";;2)echo "广州的机票已发车";;3)echo "成都的机票已发车";;*)echo "请选择其正确的选项 1/2/3";;
esac

3.for循环

1.语法一
for 变量 in 值1 值2 值3...do程序done举例:打印时间
vi if6.sh
#!/bin/bash
for i in 1 2 3 4 5 6doecho $idone批量解压缩统计文件个数
#!/bin/bash
cd /root/sh
ls *.sh > ls.log
y=1
for i in $(cat ls.log)doecho $yy=$(($y +1))done
2.语法二
for ((初始值;循环控制条件;变量变化))do程序done批量添加指定数量的用户
#!/bin/bash
#批量添加指定数量的用户
read -p "请输入用户名:" -t 30 name
read -p "请输入用户数字:" -t 30 num
read -p "请输入用户密码:" -t 30 pass
if [ ! -z "$name" -a ! -z "$num" -a ! -z "$pass" ]theny=$(echo $num|sed 's/^[0-9]*$//g')if [ -z "$y" ]thenfor ((i=1;i<=$num;i++))douseradd $name$i &>/dev/nullecho $pass | passwd --stdin "$name$i" &> /dev/nulldonefi
fi

4.while循环与until循环

1.while循环
while循环是不定循环,也称作条件循环。只要条件判断式成立,循环就会一直继续,知道条件判断式不成立,循环才会停止。这就和for的固定循环不太一样while [ 条件判断式 ]do程序done举例:
#!/bin/bash
#从1加到100
i=1
s=0
while [ $i -le 100 ]dos=$(($s+$i))i=$(($i+1))done
echo "The sum is:$s"
2.until循环
until循环,和while循环相反,until循环时只要条件判断式不成立则进行循环,并执行循环程序。一旦循环条件成立,则终止循环举例:
#!/bin/bash
#从1加到100
i=1
s=0
until [ $i -gt 100 ]dos=$(($s+$i))i=$(($i+1))done
echo "The sum is:$s"

二十,备份与恢复

1.概述

1.Linux系统需要备份的数据

/root/目录:
/home/目录:
/var/spool/mail目录:
/etc/目录:
其他目录:安装服务的数据apache需要备份的数据配置文件网页主目录日志文件mysql需要备份的数据源码包安装的mysql:/usr/local/mysql/data/RPM包安装的mysql:/var/lib/mysql

2.备份策略

完全备份:完全备份就是指把所有需要备份的数据全部备份,当然完全备份可以备份整块硬盘,整个分区或某个具体的目录(备份缓慢,占空间)
增量备份:第一次先完全备份,后续备份仅备份新增的数据(恢复的时候先恢复完全,再恢复第一次增量备份:备份快捷恢复速度慢)
差异备份:第一次完全备份,后续增量备份也是对比完数据之后完全备份(时完全备份与增量备份折中办法,但一般不用)

2.备份命令

1.dump备份(yum -y install dump)

语法:dump [选项] 备份之后的文件名 源文件或目录
选项:-level:就是我们说的0-9是个备份级别-f 文件名:指定备份之后的文件名-u:备份成功之后,把备份时间记录在/etc/dumpdates文件-v:显示备份过程中更多的输出信息-j:调用bzlib库压缩备份文件,其实就是把本份文件压缩为.bz2格式-W:显示允许被dump的分区的备份等级及备份时间备份分区
dump -0uj -f /root/boot.bak.bz2/boot/备份命令。先执行一次完全备份,并压缩和更新备份时间cat /etc/dumdates查看备份时间文件cp install.log /boot/复制日志文件到boot分区dump -1uj -f /root/boot.bak1.bz2 /root/增量备份boot分区,并压缩dump -W查询分区的备份时间及备份级别0:完全备份;1:增量备份备份文件或目录
dump -0j -f /root/etc.dump.bz2 /etc完全备份/etc/目录,只能使用0级别进行完全备份,而不再支持增量备份

2.restore恢复(yum -y install restore)

语法: restore [模式选项] [选项]
模式选项:restore命令常用的模式有以下四种,这四个模式不能混用-C:比较备份数据和实际数据变化-i:进入交互模式,手工选择需要恢复的文件-t:查看模式,用于查看备份文件中拥有哪些数据-r:还原模式,用于数据还原-f:指定备份文件的文件名比较模式:比较备份文件数据和实际数据的变化
mv /boot/ vmlinuz-4.18.0-147.el8.x86_64 /boot/vmlinuz-4.18.0-147.el8.x86_64.bak把boot目录中内核镜像文件改个名字
restore -C -f /root/boot.bak.bz2restore发现内核镜像文件丢失查看模式
restore -t -f boot.bak.bz2还原模式
#还原boot.bak.bz2分区备份,先还原完全备份的数据
mkdir boot.test
cd boot.test/
restore -r -f /root/boot.bak.bz2
#解压缩
restore -r -f /root/boot.bak1.bz2
#恢复增量备份数据

二.链接

原意:link
所在路径:/bin/ln
执行权限:所有用户
语法:ln -s [源文件] [目标文件]-s 创建软连接
功能描述:生成链接文件示例:ln -s /etc/issue /tmp/issue.soft(创建文件/etc/issue的软连接/tmp/issue.soft)ln /etc/issue /tmp/issue.hard(创建/etc/issue的硬链接/tmp/issue.hard)软连接特点:类似windows快捷方式符号链接,因此文件很小,Linux权限全是rwx
硬链接:i节点与原文件一样,属性相同仅仅是名字不同,通过i节点识别;不能跨分区;不能针对目录使用

B站兄弟连Linux视频笔记相关推荐

  1. B站兄弟连Linux学习——Linux系统简介

    目录 一.UNIX 和 Linux发展史 1.1 UNIX 1.2 Linux 二.开源软件简介 三.Linux应用领域 四.Linux学习方法 总结 实习培训期间需要掌握不少技能,Linux虽然在大 ...

  2. 嵌入式Linux视频笔记----驱动开发

    https://www.bilibili.com/video/BV1pf4y1974n/?spm_id_from=333.788.videocard.1 基本看完了,基本只看视频没看详细的pdf,试验 ...

  3. B站小迪安全视频笔记-第一天

    看了十天了,感觉脑子学会了,手没学会,所以特此记录下,完善下笔记,梳理下知识点,并把靶机都过一遍.欢迎有学B站小迪网络安全的朋友一起讨论. 第一天 主要是说了些基础的概念,让我们大概了解,这些名词代表 ...

  4. 嵌入式Linux视频笔记----Linux基础入门

    https://www.bilibili.com/video/BV1JK4y1t7io/?spm_id_from=333.788.videocard.2 运行于ARM-A7的嵌入式Linux系统基础知 ...

  5. lamp兄弟连linux学习笔记-linux常用命令大全(思维导图)

  6. 兄弟连Linux学习笔记之文件处理命令

    1 目录处理命令: ls -a #显示所有文件 -l #长格式显示 -d #只显示目录 -h #人性化显示 -i #查看i节点 mkdir # 创新新目录-p # 递归创建子目录 cd # 切换目录 ...

  7. Linux(b站视频兄弟连)自学笔记第十章——shell基础

    Linux(b站视频兄弟连)自学笔记第十章--shell基础 概述 Shell是什么? Shell的分类 Linux支持的Shell 脚本的执行方式 echo输出命令 第一个脚本 脚本执行 Bash的 ...

  8. Linux(b站视频兄弟连)自学笔记第六章——软件包管理

    Linux(b站视频兄弟连)自学笔记第六章--软件包管理 简介 软件包分类 RPM命令管理 包命令与依赖性 安装升级与卸载 查询 校验和文件提取 yum在线管理 IP地址的配置和网络yum源 yum命 ...

  9. Linux(b站视频兄弟连)自学笔记第十一章——shell编程

    Linux(b站视频兄弟连)自学笔记第十一章--shell基础 正则表达式 字符截取命令 cut命令 printf命令 awk命令 sed命令 字符处理命令 判断条件 流程控制 if语句 case语句 ...

最新文章

  1. 解读 | Arm 机器学习处理器的独特之处
  2. C语言--返回局部变量的地址
  3. 数据绑定控件之DataList
  4. css3让元素自适应高度
  5. wxWidgets:使用自定义对话框和 sizer
  6. Excel Oledb设置
  7. PAT L3-015 ---- 球队“食物链”(DFS)
  8. Qt|C++工作笔记-对虚函数的进一步认识(关键是Qt中如何正确使用,达到想要的效果)
  9. MPLS virtual private network Spoken-Hub网络实验(华为设备)
  10. Java之Ajax技术
  11. 程序员需要了解依赖冲突的原因以及解决方案
  12. 申请 app store 退款
  13. matplotlib 不显示图像或者图像只能在弹出层显示
  14. poj 2456 Aggressive cows 【二分+最大化最小值】
  15. Android N Preview Notification API (通知)
  16. 神经网络尺寸和表达能力
  17. nlp中文本相似度匹配
  18. 圆形头像、图片显示效果
  19. Arduino控制数码管显示,亮度,冒号,字符(四段共阳)
  20. TVS管烧坏把其他电子产品烧毁,到底是谁的责任

热门文章

  1. flash源文件小,导出后变大的问题
  2. 华硕笔记本电脑计算机专业,超详细华硕笔记本电脑重装系统图文教程
  3. 普通人应该怎么赚钱,下班后可在家操作的四个兼职副业分享
  4. ue4变形、FlipFlop
  5. 95 后女孩从月入3000到月入10万
  6. 利用gdal给影像添加金字塔
  7. 解决mac mini m1 连上wifi但是无法上网的问题
  8. xdebug(32) : warning C4229: 使用了记时错误 : 忽略数据上的修饰符
  9. S32DS实时查看变量的值
  10. 2022-2028年中国喷砂设备行业发展动态及投资前景分析报告