• linux基础命令


    2基础命令

    基础命令


    命令语法 :

    ​ 命令 [命令选项] [参数]

    • {必选项} [可选项]

    命令的分类 :

    • 内部命令 :linux内核自带命令,执行效率高

    • 外部命令 :需要安装才能使用,系统默认安装了很多外部命令

    • 区分命令类型 : type 命令

      • type 是 shell内嵌 = 内部命令
      • clear 是 /usr/bin/clear = 外部命令
    • 命令存放

      • echo $PATH

        • usr/loacl/sbin : sbin 为特权命令,只有管理员才能用
        • usr/loacl/bin : bin 为普通命令任何人都可以用
    1. 常用命令

      • Tab : 补全命令
      • Ctrl + C : 结束任务
      • Ctrl + L :清屏
      • Ctrl + insert : 复制
    2. 常用命令

      • ls : 查看文件内容 [ -a -l -d ]
      • pwd : 显示当前目录
      • cd : 切换文件目录
      • touch : 打开创建文件、没有则创建
        • -a 只修改文件的access时间。(访问时间)
        • -c 或 --no-create 不创建不存在的文件
        • -d 使用指定的日期时间,而非现在的时间
        • -m 指修改Modify 时间,而不修改 access 访问时间
        • -r file 使用指定的file文件时间戳更新文件的时间戳
        • -t 将时间修改为参数指定的日期。
      • mkdir [选项] 目录 : 创建文件夹
      • rm : 删除指定文件夹
        • -i 删除前逐一询问确认
        • -f 强制删除
        • -r 将目录及一下之档案亦逐一删除
      • clear : 清屏 (ctrl + l)
      • hostname : 显示主机名
      • reboot / shutdown - r / init6 : 重启命令
      • logout :注销命令
      • halt / shutdown -h / init 0 : 关机命令
      • uname : 显示当前操作系统和机器的信息
        • uname -a : 显示完整信息
    3. 其他命令

      • mv : 移动文件、重命名

        • -b : 若需覆盖文件,则覆盖前先行备份
        • -i : 若指定目录已有同名文件,则先询问是否覆盖旧文件
        • -f : 若文件存在,则直接覆盖
        • -u :若目标文件存在,且 source比较新,才会更新(update)
      • cat :查看文件内容

        ​ -b : 列出行号

        ​ -E : 将结尾断行行字节 $ 显示出来

        ​ -n : 列出行号

      • more / less :查看文件

      • head : 查看文件内容 (正向)

      • tail [option] [file]: 查看文件内容(反向)

        ​ -n : 制定行数

        ​ -f : 追踪文档,时时更新

      • cp [options] 源文件或目录 目标目录 : 复制文件或目录

        vim 文件编辑

        • 命令模式 :
          • 插入模式 :aio
          • 末行模式 : 冒号
          • 替换模式 : R
        • 位置命令
          • 光标移动到本行开头 : home
          • 光标移动到本行末尾 : end
          • 光标移动到尾部 : G
          • 光标移动到开头 :gg
          • 光标移动一个单词 : w
          • 上翻页 : pgUp
          • 下翻页 :pgDn
        • 保存命令
          • 保存退出 :wq
          • 存盘 zz 保存退出
        • 退出命令
          • :q 退出(不保存退出、没有编辑的情况下可用)
          • :q! 强制退出不保存(修改后,放弃修改退出)
          • :w 保存,不退出
          • :wq 保存退出
        • 黏贴复制 :
          • 复制一行 yy
          • 复制 n 行 nyy
          • 黏贴 p [P前贴在前面,p黏贴在后面]
        • 删除
          • 删除字符 x [向后删除] X[向前删除]
          • 删除一行 : dd [删除 n行 ndd ]
          • 删除一个单词 : dw
        • 内容替换
          • :s /old/new [替换所在行的第一个old内容]
          • :%s/old/new/ [替换全文的old,默认每行只替换第一个]
          • :%s/old/new/g [替换全文]
        • 替换模式
          • 命令行按 R 建进入替换模式 [替换对应的字符串,类似 编辑模式操作]
        • 内容插入行号
          • set nu : 插入行号
          • set nonu : 取消行号
        • 命令撤销
          • 撤销操作 u 向上一步,重复上一次操作
        • 查找文件内的某以内容
          • 斜杠 / 查找的内容 [查找 string define / string define ]
          • 有特殊字符需要转义 : / \ /bin\ / bash
    4. 组合命令

      • > : 重定向输出
      • >> : 追加输出方式进行重定向输出
      • | :管道符号,两个命令用 and方式连接
      • && : 逻辑控制符,前面的执行成功,后面再执行
      • history : 操作历史记录
    5. 打包、解包命令

      • tar 打包 :tar -vcf 打包名.tar 被打包的文件A 被打包的文件B 被打包的文件C

        ​ c = create : 生成档案文件、创建打包文件

        ​ v = verbosely : 报告进度

        ​ f = file : 指定档案文件名称,f 后面一定是 .tar文件,必须放在左后

      • tar 解包 :tar -xvf 打包名.tar -C 解包路径位置

        ​ x : 解包

        ​ C :更改解压目录,目录必须存在

    6. 解压、压缩

      • ​ tar -zcvf 打包压缩文件名.tar.gz 被压缩的文件/目录
      • ​ tar -jxvf 打包文件.tar.bz2 -C 目录路径

    日期命令

    1. 常用命令

      • date : 显示当前时间

        ​ date (功能描述:显示当前时间)

        ​ date +%Y (功能描述:显示当前年年份)

        ​ date +%m (功能描述:显示当前月份)

        ​ date +%d (功能描述:显示当前是哪一天)

        ​ date +%Y%m%d … (功能描述:显示当前年年月日各种格式 )

        ​ date “+%Y-%m-%d %H:%M:%S” 或者单引号也可以 (功能描述:显示时间格式)

      • 设置系统时间 : date -s 字符串时间

      • 日历查看 : cal

        ​ cal -3 :查看3个月的日历

    文件搜索命令

    • find : 查找文件 find path 【options】

      ​ find / -atime -2 # 查找在系统中最后48小时访问的文件 (Access Time,文件读取访问时间)

      ​ find / -empty # 查找在系统中为空的文件或者文件夹

      ​ find / -group susan # 查找在系统中属于group为susan的文件

      ​ find / -mtime -1 #查找在系统中最后24小时里修改过的文件 (modify time)

      ​ find / -user susan #查找在系统中属于susan这个用户的文件

      ​ find / -size +10000c #查找出大于10000000字节的文件(c:字节,w:双字,k:KB,M:MB,G:GB)

      ​ find / -size -1000k #查找出小于1000KB的文件

      ​ find ./ | grep Spring 筛选

    • locate : 模糊查找

      • 等同于 find -name
      • 直接搜索索引数据库(var/lib/mlocate/locatedb)此库包含所有本地文件的信息,每天索引一次
    • grep 过滤查找、grep 【options】 PATTERN 范围(文件夹或文件)

      ​ -c:只输出匹配行的计数

      ​ -i:不区分大小写

      ​ -n:显示匹配行及行号

      ​ -w : 显示整个单词

      ​ -r : 递归查询(对文件夹中全部文件进行检索)

      ​ -v : 反取

      ​ -l : 只给出匹配的文件名

      ​ -L : 列出不匹配的文件名

      ​ -o : 只列出匹配的内容

      ​ -E : 支持扩展的正则表达式

      ​ -q : 在标准输出中不输出任何内容,及静默模式

    • 文件内容排序

      • sort 文件名
        • -n (name) : 按数字排序 sort -n [文件名]
        • -r :反序排序 sort -n -r [文件名]
        • -o [文件名]:结果输出到文件 sort -n -o [文件名]
        • -t “排序分隔符”:分隔符 sort -n -t : -k3 /etc/
        • -k : 关键字(按照指定列来排序)
    • 数据去重

      • sort char | uniq -i -c
    • 文件颜色含义

    • 绿色文件 :可执行文件,可执行程序

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

    • d / 蓝色文件 :目录

    • 白色文件 :一般性文件、如文本文件、配置文件、源码文件等、

    • 浅蓝色文件 :链接文件、主要式是使用ln 命令建立的文件

    • | / 红色闪烁 :表示链接的文件有问题

    • b / 黄色 :表示设备

    • 灰色 :表示其他文件

    目录结构

    • /boot : 系统启动相关文件 ,如内核
    • /dev : 设备文件
    • /etc : 配置文件
    • /home : 普通用户家目录,每一个用户的家目录通常默认为 /home/username
    • /root : 管理员家目录
    • /lib : 库文件
      静态库 : .a
      动态库 :.dll, .so /lib/modules :内核模块文件
    • /media : 挂载点目录,额外的临时文件系统
    • /mnt : 挂载点目录,额外的临时文件系统
    • /opt : 可选目录,第三方程序的安装目录
    • /sys : 伪文件系统,跟硬件设备先关的属性映射文件
    • /tmp : 临时文件 /var/tmp
    • /var : 可变化的文件(日志存放)
    • /sbin : 管理可执行文件
    • /bin : 可执行文件,用户命令
    • /usr : shared, read-only 全局的只读文件,存放库文件,文档,用户数据等
    • /proc : 内存系统文件
    • /run : 系统运行时文件,不能随意删除,但是重启的时候应该抛弃,下次系统运行时重新生成

    用户及组管理

    • 用户划分

      • 管理员 : root
      • 系统用户 : UID小于1000,系统服务管理用户,一般不允许登录系统
      • 普通用户 : UID大于999 ,权限较小,可以登录,只能使用bin目录下命令
    • 添加用户 : useradd 用户名 (功能描述:添加新用户)

    • 设置用户密码 :passwd 用户名 (功能描述:设置用户密码)

      • -l 锁定
      • -u 解锁
      • -d 删除
      • -S 对密码状态输出一个简述
      • –stdin 作为标准输入
    • 判断用户是否存在 :id 用户名

    • 切换用户 :su 用户名称 (功能描述:切换用户,只能获得用户的执行行权限,不能获得环境变量)

    • 删除用户 :userdel 用户名 (功能描述:删除用户但保存用户主目录)

      • -r 删除用户关联文件
      • -rf 强制删除用户关联文件
      • userdel -r 用户名 (功能描述:用户和用户主目录,都删除)
    • 修改用户信息 : usermod [选项] 用户名

    • 更改用户密码过期信息 : chage [选项] 用户名

      • -m 密码可更改的最小天数。零代表任何时候都可以更改密码
      • -M 密码保持有效的最大天数
      • -W 用户密码到期前,提前收到警告信息的天数
      • -E 账号到期的日期,过了这天,账号将不可用
      • -d 上一次更改的日期
      • -l 停滞时期。如果一个密码已过期这些天,那么此账号将不可用
      • -l 列出当前的设置,有非特权用户来确定他们的密码或账号任何时过期
    • 用户密码

      • /etc/passwd : 密码文件
        • [用户名] :[密码]:[uid] : [GID] : [身份描述] :[主目录] :[登录shell]
      • /etc/shadow :影子文件
        • 用户名 :这是用户登录系统是使用的用户名,它在系统中是唯一的
        • 口令 : 此字段存放加密的口令
        • 最后一次修改的时间 :标识从某一时期起到用户最后一次修改口令的天数
        • 最小时间间隔 : 两次修改口令之间的最小天数
        • 最大时间间隔 : 口令保持有效的最多天数,即多少天后必须修改口令
        • 警告时间 :从系统开始警告到口令正式失效的天数
        • 不活动时间 : 口令过期多少天后,该账号被禁用
        • 失效时间 : 指示口令失效的聚堆天数
        • 标识 : 未使用
    • 查看登陆用户信息

      ​ whoami (功能描述:显示自身用户名称)

      ​ who am i (功能描述:显示登录用户的用户名)

      ​ who (功能描述:看当前有哪些用户登录到了了本台机器器上)

    • sudo 命令、允许临时管理员权限

    • 查看创建用户、cat /etc/passwd

    • groups : 列出当前用户的所有分组

      ​ adm 分组用于系统监控,比如/var/log中的部分日志就是 adm 分组

      ​ sudo 分组用户可以通过 sudo 指令提升权限

    • 新建组 : groupadd 组名

    • 删除组 : groupdel 组名

    • 修改组 :groupmod -n 新组名 老组名

    • 查看全部组 :cat /etc/group

    • 修改用户组 :usermod -g 用户组 用户名

    文件权限

    • 修改文件权限 : chmod 【权限数】 【文件名】
    • 改变文件拥有者 :chown 【用户名】 【文件名】
    • 改变所属组 :chgrp 最终用户组 (功能描述:改变文件或者目录的所属组)

    系统管理及线程管理

    1. 磁盘管理

      • df - h :disk free 显示磁盘剩余空间
      • du -h【目录名称】 :disk usage 显示目录下的目录大小
    2. 进程管理

      • 进程查看 :ps -aux (查看系统全部进程)

        • PID : 进程号

        • %CPU:该进程占用CPU资源的百分比,占用越高,进程越耗费资源

        • %MEM:该进程占用物理理内存的百分比,占用越高,进程越耗费资源

        • VSZ:该进程占用虚拟内存的大小,单位KB

        • RSS:该进程占用实际物理理内存的大小,单位KB

        • STAT:进程状态

          ​ R (TASK_RUNNING),可执行状态

          ​ S (TASK_INTERRUPTIBLE),可中断的睡眠状态

          ​ D (TASK_UNINTERRUPTIBLE),不可中断的睡眠状态

          ​ T (TASK_STOPPED or TASK_TRACED),暂停状态或跟踪状态

          ​ Z (TASK_DEAD - EXIT_ZOMBIE),退出状态,进程成为僵尸进程

        • START:该进程的启动时间

        • TIME:该进程占用CPU的运算时间,注意不是系统时间

        • COMMAND:产生此进程的命令名

    3. 健康状态

      • Htop / top -d 【秒数】 :指定top命令每隔几秒更新。默认3秒

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

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

      • 状态含义

        ​ PID : 进程ID

        ​ PPID : 父进程ID

        ​ RUSER : 真实用户名

        ​ UID : 进程所有者用户ID

        ​ USER : 进程所有者用户名

        ​ GROUP : 进程所有者组名

        ​ TTY : 启动进程的终端名。不是从终端启动的进程则显示为

        ​ PR : 优先级

        ​ NI : nice值。负值表示高优先级,正值表示低优先级

        ​ P : 最后使用CPU,仅在多CPU环境下有意义

        ​ %CPU : 上次更新到现在的CPU时间占用百分比

        ​ TIME : 进程使用CPU时间总计,单位秒

        ​ TIME+ : 进程使用CPU时间总计,单位 1/100秒

        ​ %MEM : 进程使用的物理内存百分比

        ​ VIRT : 进程使用虚拟内存总量. 单位kb VIRT = SWAP + RES

        ​ SWAP : 进程使用的虚拟内存中,被换出的大小,单位 KB

        ​ RES : 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA

        ​ CODE : 可执行代码占用的物理内存大小,单位kb

        ​ DATA : 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb

        ​ SHR : 共享内存大小,单位 kb

        ​ nFLT : 页面错误次数

        ​ nDRT : 最后一次写入到现在,被修改过的页面数

        ​ S : 进程状态。D=不可中断的睡眠状态 R=运行 S=睡眠 T=跟踪/停止 Z=僵尸进程

        ​ COMMAND : 命令名/命令行

        ​ FLags : 任务标志

    4. 杀死线程

      • kill -9 pid进程号

    网络信息

    1. netstat

      ​ 用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况

    2. ​ netstat 命令

      • netstat - a : (all) 显示所有连接和监听端口
      • netstat - e : 显示以太网统计信息。它列出的项目包括传送的数据报的总字节数、错误数、删除数、数据报的数量和广播的数量
      • netstat - n : 以数字形式显示地址和端口号
      • netstat -o : 显示与每个连接相关的所属进程 ID
      • netstat -p proto 显示 proto 指定的协议的连接;proto 可以是下列协议之一: TCP 、UDP 、TCPv6 或 UDPv6
      • netstat -t tcp 查看TCP连接
      • netstat -anp 查看这个系统目前网络状况
    3. 输出结果说明

    • Active Internet connections : 有源的TCP连接
      • ​ Recv-Q : 接收队列(一般均为0,否则标识堆积)
      • ​ Send- Q : 发送队列(一般均为0,否则标识堆积)
    • Active Unix domain Sockets : 有源Unix域套接字
      • ​ Proto : 显示连接使用协议
      • ​ RefCnt :表示连接到本套接口上的进程号
      • ​ Types : 显示套接口的类型
      • ​ State :显示套接口当前的状态
      • ​ Path : 表示连接到套接口的其他进程使用的路径名
    1. 其他网络命令

      • 本地网络命令
        • ifconfig : 查看本机网卡信息(网络接口信息)
        • ip add :查看网卡信息
      • 网络测试
        • ping 测试网络延迟
        • telnet 查看服务是否通
        • host DNS地址查询
        • dig DNS查询
        • curl : 请求网页
    2. 查看网络IP

      • windows : ipconfig
      • linux : ifconfig
      • macos : ifconfig

    远程指令

    • ​ ssh远程登录 ssh user@ip
    • ​ scp 拷贝一个文件到远程

    软件安装

    • rpm -q 【软件名】 :查询
    • rpm -a : (all)列出全部
    • rpm -i : (info) 详细信息
    • rpm -l : (list) 显示全部文件
    • rpm -f : (file) 显示文件对应的rpm包
    • rpm - e 【软件名】 :卸载rpm软件包
    • rpm -e --nodeps 【软件名】: 卸载前 跳过 依赖检查
    • rpm -ivh 【包的全路径】 :软件安装到指定路径

    进程与线程

    • 进程与线程的区别 : 进程分配CPU、内存、硬盘, 线程只分配CPU

    • 进程管理命令

      • ​ 启动 : systemctl start nginx
      • ​ 停止: systemctl stop nginx
      • ​ 重启: systemctl restart nginx
      • ​ 重载: systemctl reload nginx
      • ​ 状态 : systemctl status nginx
      • ​ 开机自启 : systemctl enable nginx
      • ​ 开机禁止: systemctl disable nginx
    • 进程表记录

      • ​ 描述信息 : 进程在内存中存放位置 、 PID 、当前状态、 内存分配多大、属于哪个用户

      • ​ 资源信息 :进程拥有资源、比如进程和虚拟机内存如何映射,拥有那些文件、使用那些I/O设备

      • ​ 内存分布 :约定操作系统如何使用内存

        • ​ 栈(向下增长)
        • ​ 空闲区
        • ​ 堆(向下增长)
        • ​ 数据段(全局变量、常量)
        • ​ 正文段 :程序指令
      • ​ 指令 tasklist / TList

        TASKLIST [/S system [/U username [/P [password]]]]
                 [/M [module] | /SVC | /V] [/FI filter] [/FO format] [/NH]
        
        #参数列表:
        /S    system          指定连接到的远程系统。
        /U    [domain\]user    指定应该在哪个用户上下文执行这个命令。
        /P    [password]      为提供的用户上下文指定密码。如果省略,则提示输入。
        /M    [module]        列出当前使用所给 exe/dll 名称的所有任务,如果没有指定模块名称,显示所有加载的模块。
        /SVC                   显示每个进程中主持的服务。
        /V                     显示详述任务信息。
        /FI    filter          显示一系列符合筛选器指定的标准的任务。
        /FO    format          指定输出格式,有效值: "TABLE"、"LIST"、"CSV"。
        /NH                    指定列标题不应该在输出中显示,只对 "TABLE" 和 "CSV" 格式有效。
        
        • 1
        • 2
        • 3
        • 4
        • 5
        • 6
        • 7
        • 8
        • 9
        • 10
        • 11
        • 12
        • 13
    • 线程记录表

      • 线程也需要 ID, 可以叫作 ThreadID
      • 记录自己的执行状态(阻塞、运行、就绪)、优先级、程序计数器以及所有寄存器的值等等
    • 进程通信

      • 管道
      • 本地内存共享
      • 本地消息队列
      • Kafka
      • RabbitMQ
      • ActiveMQ
      • RocketMQ
      • 远程调用(RPC) - 基于HTTP协议
    • 服务器性能

      • 计算密集型 :大量的计算
      • I/O密集型 : 频繁的文件操作(写日志、读写数据库等)
      • I/O密集型 : 频繁的文件操作(写日志、读写数据库等)
      • 交换(Swap)技术:允许一部分进程使用内存,不使用内存的进程数据先保存在磁盘上
      • GC 内存回收
        • 职责 :
          1、操作系统进行交互、负责申请内存
          2、应用会向GC申请内存
          3、承担垃圾回收能力、标记不用的对象并回收
          4、针对应用特性进行动态的优化

    Nginx管理

    1. 安装启动(yum)

      • 检查是否安装 : rpm -qa | grep nginx
      • 卸载已经安装 :yum -y remove nginx
    2. 安装依赖

      • 安装nginx依赖 :yum -y install zlib zlib-devel pcre pcre-devel
      • 安装nginx :yum -y install nginx
    3. 启动程序

      • 检查语法错误 :nginx -t
      • 服务启动 :systemctl start nginx
      • 启动验证 :systemctl status nginx
    4. 文件结构

      • conf目录 :配置文件
      • html目录 :提供web服务的根目录
      • logs目录 : nginx日志存储目录
      • modules目录 :存放一些模块用到的库
      • sbin目录 :存放 nginx二进制文件、使用的命令
    5. 安装方式说明

      • 编译安装
        • 启动命令 :/nginx安装路径/sbin/nginx
        • 配置文件目录 :/nginx安装路径/conf/
        • 默认的”server块” : 直接配置到了nginx.conf文件中
      • yum源安装
        • 启动命令 :启动的二进制文件已经被拷贝到 /usr/sbin 目录下,命令已经添加到环境变量中
        • 配置文件位置 :/etc/nginx/
        • 默认的”server块”会配置在”/etc/nginx/conf.d/default.conf”文件,主配置文件中会含有 include /etc/nginx/conf.d/*.conf;
    6. 常用命令

      • Nginx : 不加选项,启动nginx服务
      • Nginx -h 或–?选项 : 查看nginx命令帮助
      • Nginx -v选项 :查看nginx版本信息
      • Nginx -V选项 :查看nginx编译信息
      • Nginx -c选项 :启动nginx时指定主配置文件
      • Nginx -t 或 -T选项 :测试nginx.conf文件是否存在语法错误
      • Nginx -s选项:向正在运行的nginx主进程发送信号,信号的可用值有stop, quit, reopen, reload
      • ./nginx -s stop 停止
      • ./nginx -s quit 安全退出
      • ./nginx -s reload 重新加载配置文件
      • ps aux | grep nginx 查询nginx进程
    7. 配置管理

      • 配置文件路径

        • 主配置文件 :/nginx/nginx.conf
          • 引入 :conf.d文件(同级别)
          • 引入 :default.d 文件(同级别)
        • 默认主配置文件 :/nginx/nginx.conf.default
        • 网页根目录 : /html
      • 配置说明

        • 公共配置

          user nginx;   #网站运行的用户
          worker_processes auto;  #设置的进程数
          error_log /var/log/nginx/error.log;   #错误日志
          pid /run/nginx.pid;   #进程的id
          
          • 1
          • 2
          • 3
          • 4
        • 引入配置

          include /usr/share/nginx/modules/*.conf
          
          • 1
        • event : 高效模块

          work_connections 1024   #  一个进程可支持1024个链接
          
          • 1
        • HTTP配置

          server_tokens off  # 隐藏外部服务器信息
          sendfile on   : 开启缓冲
          access_log  /var/log/nginx/access.log  main  # 访问日志
          include /etc/nginx/conf.d/*.conf;   # 相同端口,不同IP,载入不同域名的对应的服务分发
          
          • 1
          • 2
          • 3
          • 4
          • ​ Server服务
            • 监控端口、服务名、跟目录
              • 监听端口 listen 80 default_server;
                监听端口 listen [::]:80 default_server;
                监听域名 server_name www.linux.con;
                网站根目录 root /usr/share/nginx/html;
            • 引入配置文件 : include /etc/nginx/default.d/*.conf
            • 访问路径匹配 :location hello/{返回内容}
        • TLS(SSL)配置

    文本处理工具


    1. grep工具


    grep是行过滤工具;用于根据关键字进行过滤

    # 语法
    # grep [选项] '关键字' 文件名
    
    grep --color=auto 'root' passwd
    
    # 别名设置(临时性)
    alias grep='grep --color=auto'
    
    # 别名设置配置文件
    vim /etc/bashrc
    # 文件最后添加即可
    alias grep='grep --color=auto'
    # 刷新
    source /etc/bashrc
    
    
    # gre -n 添加行号
    grep -n 'root' passwd
    
    # grep -ni 添加行号,忽略大小写
    grep -ni 'root' passwd
    
    # 过滤出以root开头的行
    grep -ni '^root' passwd
    
    # 过滤以root结尾的行
    grep -ni 'root$' passwd
    
    # 过滤不包含的行(取反)
    grep -ni -v '^root' passwd
    
    grep -nB 3 '^ftp' passwd
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    常用选项 :OPTIONS :
    	# -i : 不区分大小写
    	# -v : 查找不包含所指定的内容的行,反向选择
    	# -w : 按单词搜索
    	# -o :打印匹配关键字
    	# -c : 统计匹配到的次数
    	# -n : 显示行号
    	# -r : 逐层遍历目录查找
    	# -A :显示匹配行及后面多少行
    	# -B : 显示匹配行前后多少行
    	# -C : 显示匹配行前后多少行
    	# -l : 只列出匹配的文件名
    	# -L :列出不匹配的文件名
    	# -e :使用正则表达式表示
    	# -E :使用扩展正则匹配
    	# ^key : 以关键字开头
    	# key$ : 以关键字结尾
    	# ^$ :匹配空行
    	# --color=autp : 可以将关键字部分自动加上颜色
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    2. cut工具


    语法 : cut 选项 文件名

    # 列处理工具
    
    # -c : 以字符串为单位进行分割,截取
    # -d :自定义分隔符,默认为制表符 \t
    # -f : 与-d 一起使用,指定截取哪个区域 
    
    • 1
    • 2
    • 3
    • 4
    • 5

    举例说明

    # 按照分隔符进行截取,指定需要的列
    cut -d ':' -f1 passwd
    cut -d: -f1 passwd
    cut -d: -f1,7 passed
    
    # 截取 1-5 个字符
    cut -c1-5 passwd
    
    # 10- 全部截取
    cut -c10- passwd
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    3. sort 工具


    将文件的每一行作为一个单位,从首字符向后,依次按照ASCII值进行比较,最后将他们按照升序输出

    -u : 去除重复值
    -r : 降序排列,默认为升序
    -o : 将排序结果输出到文件中,类似重定向符号 >
    -n : 以数字排序,默认是按字符排序
    -t : 分隔符
    -k : 第 N 列
    -b : 忽略前导空行
    -R :随机排序,每次运行的结果均不同
    
    cut -d -f
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    # 冒号分割的第三列用数字进行排序
    sort -n -t: -k3 1.txt
    sort -nr -t: -k3 1.txt
    sort -nr -t: -k3 1.txt -o > 2.txt
    
    • 1
    • 2
    • 3
    • 4

    4. uniq工具


    去除连续重复的数据

    -i : 忽略大小写
    -c :统计重复的次数
    -d :只显示重复行
    
    • 1
    • 2
    • 3

    5. tee工具


    从标准输入读取并写入到标准输出的文件,即双向覆盖重定向(屏幕输出 | 文本输入)

    echo hello world | tee 11.txt
    
    # 追加
    echo hello world | tee -a 11.txt
    
    • 1
    • 2
    • 3
    • 4

    6. diff工具

    比较两个文件的不同

    语法 :

    diff [选项] 文件1 文件2
    
    • 1
    -b : 不检查空格
    -B : 不检查空白行
    -i : 不检查大小写
    -w :忽略所有空格
    -c :上下文格式显示
    -u :合并格式显示
    --normal :正常格式显示(默认)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    7. paste工具


    用于合并文件行

    -d : 自定义间隔符,默认是tab
    -s :串行处理,非并行 [第一行是第一个文件、第二行是第二个文件]
    
    paste  [file1] [file2]
    
    [root@linux124 test]# cat 11.txt 
    hello world
    hello world
    [root@linux124 test]# cat hello.txt 
    name=hello
    mask=nihao
    
    [root@linux124 test]# paste 11.txt hello.txt
    hello world	name=hello
    hello world	mask=nihao
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    8. tr 工具


    搜索替换 :用于字符转换,替换和删除,主要用于删除文件中控制字符或进行字符转化

    command | tr 'string1' 'string2'
    
    # -d 删除字符串1中所有输入字符 
    # -s 删除所有重复初夏字符串序列,只保留第一个,集将重复出现的字符串压缩成一个字符串
    
    tr 'string1' 'string2' < filename
    
    # a-z 替换A-Z
    tr 'a-z' 'A-Z' < 1.txt
    
    [root@linux124 test]# cat hello.txt 
    name=hello
    mask=nihao
    [root@linux124 test]# tr 'a-z' 'A-Z' < hello.txt 
    NAME=HELLO
    MASK=NIHAO
    [root@linux124 test]# cat hello.txt 
    name=hello
    mask=nihao
    [root@linux124 test]# tr 'a-z' 'A-Z' < hello.txt > 22.txt
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    bash快捷键

    常用通配符

    * : 匹配0或多个任意字符
    ? :  匹配任意单个字符
    
    [list] : 匹配 [list] 中任意单个字符,或者是一组单个字符
    [!list] : 匹配除 [list] 中任意单个字符
    [root@linux121 ~]# ls file[123].jpg
    
    
    {string1,string2,....} 匹配string,string2或更多字符串
    [root@linux121 ~]# ls file{1,2.3,11,13}.jpg
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    bash中的引号

    • 双引号 " " :会把引号的内容当做一个 整体 ,允许通过 $ 符号引用其他变量值
    • 单引号 ’ ‘:会把引号的内容当成整体来看待,禁止引用其他变量值,shell中特殊符号都被视为普通字符
    • 反撇号 ``: 反撇号与 $() 一样,引用或括号中的命令会优先执行,如果存在嵌套,反撇号不能用
    [root@linux121 ~]# date +%F
    2022-08-04
    [root@linux121 ~]# echo $(date +%F)
    2022-08-04
    [root@linux121 ~]# echo "$(date +%F)"
    2022-08-04
    [root@linux121 ~]# echo '$(date +%F)'
    $(date +%F)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    shell部分

    文件处理三剑客 : grep 、sed、awk 工具使用

    变量定义


    [root@linux124 ~]# A=123456
    [root@linux124 ~]# echo $A
    123456
    [root@linux124 ~]# echo ${A}
    123456
    
    # {} 形式可切片,直接复制情况不能
    [root@linux124 ~]# echo ${A:3:3}
    456
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    交互式定义变量

    让用户自己给变量赋值

    语法 : read [选项] 变量名

    选项释义备注
    -p定义提示 用户的信息
    -n定义字符数(限制变量值的长度)
    -s不显示(不显示用户输入的内容)
    -t定义超时间,默认单位为秒(限制用户输入变量值的超时时间)
    
    [root@linux124 ~]# read name
    nihao
    [root@linux124 ~]# echo $name
    nihao
    
    # 用法1 :
    [root@linux124 ~]# read -p '请输入你的名字 : ' name
    ‘请输入你的名字 : ’   jackcat h
    [root@linux124 ~]# echo $name
    jack
    
    [root@linux124 ~]# read -s -p ‘请输入你的名字 : ’ name
    请输入你的名字 : 
    
    [root@linux124 ~]# echo $name
    nihao
    
    
    # 用法2 : 变量来自文件
    [root@linux124 ~]# read -p ‘请输入你的名字’ name mask < 1.txt
    [root@linux124 ~]# echo $name
    nihao
    [root@linux124 ~]# echo $mask
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24

    定义变量类型(declare)

    语法 : declare 选项 变量名=变量值

    选项释义举例
    -i将变量看成整数declare -i A=123
    -r定义只读变量declare -r B=hello
    -a定义普通数组;查看普通数组
    -A定义关联数组,查看关联数组
    -x将变量通过环境导出declare -x AAA=123456 等于 export AAA=123456

    变量的分类

    • 本地变量 :当前用户自定义的变量,当前进程中有效
    • 环境变量 :当前进程有效,并且能够被子进程调用
      • env :查看当前用户的 环境变量
      • set : 查询当前用户的所有环境变量(临时变量与环境变量)
      • export :变量名=变量值 或者 变量名=变量值;export 变量名
    • 全局变量 :所有用户和程序都可以调用,且继承,新建用户默认能够调用
    • ¥¥系统变量 :shell本身已经固定好了它的名字和作用
    内置变量释义
    $?验证上一条命名是否成功,如果是0,则成功,其他则有问题
    $0当前执行的程序或脚本的名称
    $#脚本后接的参数的个数
    $*脚本后所有参数,参数当做一个整体输出,每一个变量参数之间以空格隔开
    $@脚本后面的所有参数,参数是独立的,也是全部输出
    $1-$9脚本后面的位置参数,$1表示第一个位置 参数,以此类推
    10 − {10}- 10{n}扩展位置参数,第10个位置变量必须大于{}大括号起来{2位数字一行括起来}
    $!后台运行的 最后一个 进程号(当前终端)
    !$调用最后一条命令历史中的参数
    $$当前进程的进程号
    echo $(( 1 + 1))
    
    echo $[10-5]
    echo $[85*74]
    
    expr 1 + 1
    expr 10 - 5
    expr 10 \* 5 = 50
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    条件判断语句

    • 格式1 : test 条件表达式
    • 格式2 :[ 条件表达式 ]
    • 格式3 :[[ 条件表达式 ]] 支持正则

    判断文件类型

    • -e : 判断文件是否存在
    • -f : 判断文件是否存在并是一个普通文件
    • -d :判断文件是否存在且是一个文件夹
    • -L :判断文件是否存在并且是衣蛾 软连接文件
    • -b :判断文件是否存在,并且是一个快设备文件
    • -S : 判断文件是否存在,并且是一个套接字文件
    • -C : 判断文件是否存在,并且是一个字符设备文件
    • -p : 判断文件是否存在,并且是一个 命名管道文件
    • -s : 判断文件是否存在,并且是一个非空文件(有内容)
    # 格式1
    test -e ./test1
    
    # 格式2
    [ -d ./dir1 ]; echo $?
    
    # 格式3 
    [[ -d ./dir1 ]]; echo $?
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    判断文件权限

    • -r : 当前用户对其是否可读
    • -w : 当前用户对其是否可写
    • -x : 当前用户是否可执行
    • -u :是否有suid,高级权限冒险位
    • -g :是否sgid,高级权限强制位
    • -k :是否有t 位,高级权限粘滞位

    流程控制语句

    # 形式1
    if  [ condition ] ; then
    		command
    		command
    fi
    
    
    # 形式2
    if  test 条件 ; then
    		command
    		command
    fi
    
    # 形式3
    if  [[ 条件 ]] ; then
    		command
    		command
    fi
    
    
    # 形式4
    if  [ condition ] ; then
    		command
    	else
    		command
    fi
    
    [条件] && command1 || command2
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    # 用户自己输入字符串,如果用户输入hello,则打印world,否则打印请输入 hello
    
    #!/bin/env bash
    
    read -p '请输入一个字符串:' str
    if ["$str" = 'hello']; then
    	echo 'world'
    else 
    	echo '请输入hello'
    fi
    
    
    
    read -p '请输入一个字符串:' str
    if [ $1 = hello ]; then
    	echo 'world'
    else 
    	echo '请输入hello'
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    案例

    需求 : 判断当前主机是否和远程主机是否ping通

    #!/bin/env bash
    # 判断当前主机是否和远程主机是否ping通
    
    read -p '请输入你要ping的主机IP:' ip
    
    ping -c3 $ip &>/dev/null
    
    if [$? -eq 0]; then
    	echo "当前主机和远程主机 $ip 是通的"
    else 
    	echo "当前主机和远程主机 $ip 不同的"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12

    案例

    判断进程是否存在

    #!/bin/env bash
    
    # 判断线程是否存在
    ps -ef | grep httpd | grep -v 'grep' &>/dev/null
    
    if [$? -eq 0]; then
    	echo "线程存在"
    else 
    	echo "线程不存在"
    fi
    
    
    
    #!/bin/env bash
     
    pgrep httpd 'grep' &>/dev/null
    
    if [$? -eq 0]; then
    	echo "线程存在"
    else 
    	echo "线程不存在"
    fi
    
    
    pgrep httpd &>/dev/null
    test $? -eq && echo "当前http进程存在" || echo "当前进程不存在"
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    # pgrep 命令 : 以名称为依据,从运行进程队列中查找进程,并显示查找到的进程id
    
    选项
    -o :仅显示查找到的最小(起始)进程号
    -n :仅显示查找到的最大(结束)进程号
    -l :显示进程名称
    -P : 指定父进程号,
    -g :指定进程组
    -t :指定开启进程的终端
    -u :指定进程的有效用户ID
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    案例

    判断服务是否正常

    1、判断进程是否存在,用 /etc/init.d/http status判断状态等方法

    2、最好的方式是直接去访问一下,通过访问成功或者失败的返回值判断

    
    wget http://www.itheima.com
    
    curl http://www.itheima.com
    
    elinks -dump http://www.itheima.com
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    #!/bin/env bash
    
    web_server = www.itcase.cn
     
    wget -P /Shell/ $web_server &>/dev/null
    
    [ $? -eq 0 ] && echo "当前服务ok" && rm -f /shell/index.* || echo "当前网站不ok"
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    案例

    判断用户是否存在

    输入一个用户,用脚本判断该用户是否存在

    #!/bin/env bash
    
    # for ip in 'cat ip.txt'
    
    read -p '请输入你的用户名:' user_name
    
    id $user_name &>/dev/null
    
    if [ $? -eq 0 ]
    
    then
    	echo "该用户存在"
    else
    	echo "用户不存在"
    fi
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15

    for循环

    # 方式1
    for variable in {list}
    	do
    		command
    		command
    		
    
    for variable in a b c
    	do
    		command
    		command
    	done
    	
    
    
    # 方式2,后面直接自己添加参加,每个参数执行一次
    for variable
    	do
    		command
    		command
    	done
    	
    
    # 方式3
    for ((expr1;expr2;expr3))
    	do
    		command
    		command
    	done
    
    # expr1 : 定义变量的初始值
    # expr2 :决定是否进行循环的条件
    # expr3 :决定训话变量如何改变,决定循环什么时候退出
    	
    for (( i=1;i<=5;i++ ))
    	do
    		echo $i
    	done
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38

    案例

    计算 1-100 基数和

    # 1. 定义一个变量来保存奇数的和 sum=0
    # 2. 找出 1- 100 的奇数,保存到另一个变量中,i = 遍历出来的奇数
    # 3. 从 1-200 中找出奇数后,在相加,然后将和赋值给变量,循环变量 FOR
    # 4. 遍历完毕,sum 的值打印出来
    
    #!/bin/env bash
    
    # for ip in 'cat ip.txt'
    
    sum=0
    
    for i in {1..100..2}
    do
    	let sum = $sum + $i
    done
    
    echo "1-100的奇数和为 :$sum"
    
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    案例

    质数(素数):筛选质数

    #!/bin/env bash
    
    # for ip in 'cat ip.txt'
    
    read -p "请输入一个正整数 :" number
    
    [ $number -eq 1 ] && echo "$number不是质数" && exit
    [ $number -eq 1 ] && echo "$number是质数" && exit
    
    for i in `seq 2 $[$number-1]`
    	do
    		[ $[$number%$i] - eq 0 ] && echo "$number 不是质数" && exit}
    	done
    echo "$number 是质数" && exit
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    案例

    批量添加5个新用户,以 u1 到 u5 命名,并统一加一个新组,组名以 class,统一改密码为 123

    #!/bin/env bash
    # 判断 class 组是否存在
    grep -w ^class /etc/group &>/dev/null
    
    test $? -ne 0 && groupadd class
    
    # for ip in 'cat ip.txt'
    
    # 循环创建用户
    for (( i=1;i<=5;i++ ))
    do
    	useradd -G class u$i
    	echo 123|passwd --studin u$i
    done
    
    
    
    
    # 批量用x新建用户 stu1 - stu5,要求这几个用户的家目录都在/rhome
    #!/bin/env bash
    # 判断 /rhome 是否存在
    [ -f /rhome ] && mv /rhome /rhome.bak
    
    # 文件不在,目录不在,进行创建
    test ! -f /rhome -a ! -d /rhome && mkdir /rhome
    
    # [ -f /rhome ] && mv /rhome /rhome.bak || [ ! -d /rhome ] && mkdir /rhome
    
    # for ip in 'cat ip.txt'
    
    # 循环创建用户
    for (( i=1;i<=5;i++ ))
    do
    	useradd -d /rhome/stu$i stu$i
    	echo 123|passwd --studin u$i
    done
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37

    局域网内检查主机网络通信

    把能ping同的IP 和不能ping通的IP分类,并保存到 两个文本文件中

    #!/bin/env bash
    # 定义变量
    ip=10.1.1
    # 循环去 ping主机的ip
    
    # for ip in 'cat ip.txt'
    
    for ((i=1;i<=10,i++))
    do
    	ping -c1 $ip.$i &>/dev/null
    	if [ $? -eq 0 ];then
    		echo "$ip.$i is ok" >> /tmp/ip_up.txt
    	else
    		echo "$ip.$i is down" >> /tmp/ip_down.txt
    	fi
    done	
    	
    #	[ $? -eq 0 ] && echo "$ip.$i is ok" >> /tmp/ip_up.txt || echo "$ip.$i is down" >> /tmp/ip_down.txt
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    shell脚本并发

    并发执行
    {程序}& 表示程序放在后台进行执行,如果需要等待执行完毕在进行下面的内容,需要家wait
    
    #!/bin/env bash
    # 定义变量
    
    # for ip in 'cat ip.txt'
    
    ip=10.1.1
    # 循环去 ping主机的ip
    for ((i=1;i<=10,i++))
    do
        {
            ping -c1 $ip.$i &>/dev/null
            if [ $? -eq 0 ];then
                echo "$ip.$i is ok" >> /tmp/ip_up.txt
            else
                echo "$ip.$i is down" >> /tmp/ip_down.txt
            fi
        }&	
    
    done
    wait
    echo "ip is ok..."
    
    
    #	[ $? -eq 0 ] && echo "$ip.$i is ok" >> /tmp/ip_up.txt || echo "$ip.$i is down" >> /tmp/ip_down.txt
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28

    while循环语句

    while 表达式
    	do
    		command
    	done
    
    
    
    while [ 1 -eq 1 ] 或者 (( 1 > 2 ))
    	do
    		command
    	done
    	
    
    
    
    #!/bin/env bash
    sum=0
    for (( i=0;i<=50;i+=2))
    do
    	let sum=$sum+$i    (let sum=sum+i)
    done
    echo "1-50的偶数和为 :$sum"报警,
    
    
    
    #!/bin/env bash
    sum=0
    i=2
    while [ $i -le 50 ]
    do
    	let sum=sum+i
    	let i+=2
    done
    echo "1-50的偶数和为 :$sum"	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34

    脚本同步系统时间

    30秒同步一次系统时间,时间同步服务器10.1.1.1

    如果同步失败,则进行邮件同步,每次失败都进行报警

    同步成功,也进行邮件通知,但成功100次通知一次

    #!/bin/env bash
    NTP_SERVER = 10.1.1.1
    count = 0
    
    while true
    do
            ntpdate $NTP_SERVER &>/dev/null
            if [ $? -ne 0 ];then
                echo "system date failed " | mail -s "check system data" root@loaclhost
            else
                let count++
                if [$count -eq 100 ];then
                echo "system date success " | mail -s "check system data" root@loaclhost
        && count = 0
                fi
            fi
        sleep 30
    done
    echo "1-50的偶数和为 :$sum"	
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    sed 文件编辑器

    • sed 将每一行存放在缓存区,对这个副本进行编辑,不会修改源文件
    • 分为命令行模式、和脚本模式

    sed [options] ‘处理动作’ 文件名

    选项说明备注
    -e进行多项(多次)编辑
    -n取消默认输出不自动打印模式空间
    -r使用扩展正则表达式
    -i原地编辑(修改源文件)
    -f指定sed脚本的文件名
    动作说明备注
    ‘p’打印
    ‘i’在指定行之前插入内容类似vim里的大写 O
    ‘a’在执行行之后插入内容类似vim里的小写 o
    ‘c’替换指定行所有内容
    ‘d’删除指定行

    对文件进行增删改查

    # sed  选项  '定位+命令' 需要处理的文件
    
    [root@linux124 ~]# sed '' a.txt     # 不做处理
    
    [root@linux124 ~]# sed -n 'p' a.txt  打印每一行,并取消默认输出
    
    [root@linux124 ~]# sed -n '1p' a.txt  打印第 1 行
    
    [root@linux124 ~]# sed -n '2p' a.txt  打印第 2 行
    
    [root@linux124 ~]# sed -n '1,,5p' a.txt  打印第 1-5 行
    
    [root@linux124 ~]# sed -n '$p' a.txt  打印最后 1 行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    [root@linux124 ~]# sed -n '2ihello world ' a.txt     # 第二行插入
    
    [root@linux124 ~]# sed -n 'ihello world ' a.txt     # 每一行插入
    
    [root@linux124 ~]# sed -n '3ihello\world ' a.txt     # 插入 2 行
    
    [root@linux124 ~]# sed -n 'a9999 ' a.txt     # 每一行后插入 9999
    
    [root@linux124 ~]# sed -n '2,3a9999 ' a.txt     # 第二行和第三行插入 9999
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    [root@linux124 ~]# sed -n '$chello world ' a.txt     # 最后一行替换为 hello world
    
    [root@linux124 ~]# sed -n '/^adm/citcast ' a.txt     # 修改 以adm开头的行
    
    [root@linux124 ~]# sed -n '1,5chello world ' a.txt      # 将1-5行压缩为内容
    
    • 1
    • 2
    • 3
    • 4
    • 5
    [root@linux124 ~]# sed '4d' a.txt     # 删除第四行内容
    
    [root@linux124 ~]# sed   '1,4d ' a.txt     # 删除 1-4行的内容
    
    [root@linux124 ~]# sed ' d ' a.txt      # 都删除
    
    [root@linux124 ~]# sed -n '/[0-9]/d ' a.txt     # 删除包含数字的
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    对文件进行搜索替换操作

    语法 : sed 选项 ‘s/搜索的内容/替换的内容/动作’ 需要处理的文件

    s 表示 search搜索;斜杠 / 表示分隔符,可以自己定义;动作一般是 打印 p 和全局 替换 g

    [root@linux124 ~]# sed -n 's/root/ROOT/p' 1.txt     # 搜索小写 root, 替换为ROOT, 打印
    
    [root@linux124 ~]# sed -n 's/root/ROOT/gp' 1.txt     # 搜索小写 root, 替换为ROOT, 全局整行替换
    
    [root@linux124 ~]# sed -n 's/^#//gp' 1.txt     # 以 # 号开头 ,替换为空,全局替换
    
    [root@linux124 ~]# sed -n 's@/sbin/nologin@itcast@gp' 1.txt     # 将 sbin/nologin 替换成 itcast
    
    [root@linux124 ~]# sed -n 's@/\/sbin\/nologin/itcast/gp' 1.txt     # 
    
    [root@linux124 ~]# sed -n '10s#/sbin\/nologin#itcast#p' a.txt     #  第十行 将 sbin/nologin 替换成 itcast
    
    [root@linux124 ~]# sed -n 's@/sbin/nologin@itcastma@p' 1.txt     # 
    
    [root@linux124 ~]# sed -n '1,5s/^/#/gp' 1.txt     # 1-5行 行首加 #
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    命令解释备注
    r从另外文件中读取内容
    w内容另存为
    &保存查找串以便在替换串中引用和\ ( \ )相同
    =打印行号
    !对所选行以外的所有行应用命令,放到行数之后
    q退出
  • 相关阅读:
    浅谈安科瑞直流表在沙特基站的应用
    HTML5期末大作业 基于HTML+CSS+JavaScript学校官网首页
    外包干了3个多月,技术退步明显。。。。。
    生产管理系统
    嵌入式C语言自我修养基本概念考察(一)
    用友YonSuite“数智飞轮”用场景化告别产品与客户间的“翻译”
    python每日一题【剑指 Offer 13. 机器人的运动范围】
    如何删除gitlab上多余的文件夹
    设计模式之单例模式
    【云原生Docker系列第二篇】Docker容器管理(我在人间贩卖黄昏,只为带着星光照耀你)
  • 原文地址:https://blog.csdn.net/weixin_43056654/article/details/126296340