linux基础命令

基础命令


命令语法 :

​ 命令(空格) [选项](空格)[参数]

  • {必选项} [可选项]

命令的分类 :

  • 内部命令 :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 : 系统运行时文件,不能随意删除,但是重启的时候应该抛弃,下次系统运行时重新生成

用户及组管理

linux用户在操作系统中可以进行日常管理和维护,涉及的相关配置文件如下:

/etc/passwd:保存用户信息
/etc/shadow:保存用户密码(以加密形式保存)
/etc/group:保存组信息
/etc/login.defs:用户属性,密码过期时间,密码最大长度等限制
/etc/default/useradd:显示或更改默认的useradd配置文件
  • 用户划分

    • 管理员 : 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 查看这个系统目前网络状况
[root@cmspmysql3 ~]# netstat -antp |grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN   1635/haproxy                                       
tcp        0      0 10.224.16.18:3306       192.168.104.91:35468    TIME_WAIT     -                                             
tcp        0      0 10.224.16.18:3306       192.168.104.96:43870    FIN_WAIT2    1663/haproxy                                   
tcp        0      0 10.224.16.94:21456      10.168.119.80:3306      ESTABLISHED     1667/haproxy                                 
tcp        0      0 10.224.16.94:21554      10.168.119.80:3306      TIME_WAIT   
tcp        0      0 10.224.16.94:7478       10.168.119.80:3306      ESTABLISHED     1672/haproxy 

# 本地地址 10.224.18:3306  / 10.224.18.94:3306
# 对端连接地址 :192.168.104.91:35468 / 192.168.104.96:43870 / 10.168.119.80:3306
  1. 输出结果说明
  • 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" 格式有效。
      
  • 线程记录表

    • 线程也需要 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
        
      • 引入配置

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

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

        server_tokens off  # 隐藏外部服务器信息
        sendfile on   : 开启缓冲
        access_log  /var/log/nginx/access.log  main  # 访问日志
        include /etc/nginx/conf.d/*.conf;   # 相同端口,不同IP,载入不同域名的对应的服务分发
        
        • ​ 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

# 多个筛选条件
[root@cmspnginx1 log]# ll | egrep '20180101|20190101'
-rw-------  1 root     root        4014 Oct 20  2017 yum.log-20180101
-rw-------  1 root     root        1027 Dec 21  2018 yum.log-20190101

# 打开压缩版本 多个文件,按照两个条件进行筛选
[root@cmspnginx1 log]# zcat tmpro_443_error.log-202208*gz tmpro_443_error.log-202208*gz |grep '	uestionnaireServiceInlet' | grep -E '15873623|234355|3453478'

常用选项 :OPTIONS :
	# -i : 不区分大小写
	# -v : 查找不包含所指定的内容的行,反向选择
	# -w : 按单词搜索
	# -o :打印匹配关键字
	# -c : 统计匹配到的次数
	# -n : 显示行号
	# -r : 逐层遍历目录查找
	# -A :显示匹配行及后面多少行
	# -B : 显示匹配行前后多少行
	# -C : 显示匹配行前后多少行
	# -l : 只列出匹配的文件名
	# -L :列出不匹配的文件名
	# -e :使用正则表达式表示
	# -E :使用扩展正则匹配
	# ^key : 以关键字开头
	# key$ : 以关键字结尾
	# ^$ :匹配空行
	# --color=autp : 可以将关键字部分自动加上颜色

2. cut工具


语法 : cut 选项 文件名

# 列处理工具

# -c : 以字符串为单位进行分割,截取
# -d :自定义分隔符,默认为制表符 \t
# -f : 与-d 一起使用,指定截取哪个区域 

举例说明

# 按照分隔符进行截取,指定需要的列
cut -d ':' -f1 passwd
cut -d: -f1 passwd
cut -d: -f1,7 passed

# 截取 1-5 个字符
cut -c1-5 passwd

# 10- 全部截取
cut -c10- passwd

3. sort 工具


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

-u : 去除重复值
-r : 降序排列,默认为升序
-o : 将排序结果输出到文件中,类似重定向符号 >
-n : 以数字排序,默认是按字符排序
-t : 分隔符
-k : 第 N 列
-b : 忽略前导空行
-R :随机排序,每次运行的结果均不同

cut -d -f
# 冒号分割的第三列用数字进行排序
sort -n -t: -k3 1.txt
sort -nr -t: -k3 1.txt
sort -nr -t: -k3 1.txt -o > 2.txt

4. uniq工具


去除连续重复的数据

常与sort搭配使用

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

sort  char | uniq  -i  -c

5. tee工具


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

echo hello world | tee 11.txt

# 追加
echo hello world | tee -a 11.txt

6. diff工具

比较两个文件的不同

语法 :

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

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

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


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

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)

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
交互式定义变量

让用户自己给变量赋值

语法 : 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
定义变量类型(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 : test 条件表达式
  • 格式2 :[ 条件表达式 ]
  • 格式3 :[[ 条件表达式 ]] 支持正则

判断文件类型

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

# 格式2
[ -d ./dir1 ]; echo $?

# 格式3 
[[ -d ./dir1 ]]; echo $?

判断文件权限

  • -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
# 用户自己输入字符串,如果用户输入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

案例

需求 : 判断当前主机是否和远程主机是否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

案例

判断进程是否存在

#!/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 "当前进程不存在"
# pgrep 命令 : 以名称为依据,从运行进程队列中查找进程,并显示查找到的进程id

选项
-o :仅显示查找到的最小(起始)进程号
-n :仅显示查找到的最大(结束)进程号
-l :显示进程名称
-P : 指定父进程号,
-g :指定进程组
-t :指定开启进程的终端
-u :指定进程的有效用户ID

案例

判断服务是否正常

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

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


wget http://www.itheima.com

curl http://www.itheima.com

elinks -dump http://www.itheima.com
#!/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"

案例

判断用户是否存在

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

#!/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

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-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"


案例

质数(素数):筛选质数

#!/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

案例

批量添加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

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

把能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

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

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"	

脚本同步系统时间

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"	

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 行
[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

[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行压缩为内容
[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     # 删除包含数字的

对文件进行搜索替换操作

语法 : 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行 行首加 #
命令解释备注
r从另外文件中读取内容
w内容另存为
&保存查找串以便在替换串中引用和\ ( \ )相同
=打印行号
!对所选行以外的所有行应用命令,放到行数之后
q退出

awk 用法

文本处理工具,对列进行处理。
awk 自带一些变量,可以在书写脚本时调用
基本用法 : awk [option] 代码块 文件名

常用参数

选项含义使用演示
-F指定文件分隔符awk -F “\n”
-f使用文件中的内容作为命令的输入awk -f script.txt
-v给变量赋值,支持多个 v 赋值awk -v Num=num−vNum1=num1
# awktest.txt 文件以逗号为分隔符,打印第二行,第一列
awk -F "," NR==2'{print $1}' awktest.txt

# awktest.txt 文件以逗号为分隔符,打印第 10 行 各列
awk -F "," NR==10'{print "这是第"NR"行","第1列是:"$1,"第2列是:"$2}' awktest.txt

awk的内置变量

变量名称说明使用示例示例说明
$number记录被分割后的第number列的字段,$表示整行文本。{print 1,3}打印第1列和第3列字段
FS字段分割符(可使用FlieSplit记忆)BEGIN{FS=“\n”}使用换行分割文本
NF当前行中的字段数量{print “当前行共有"NF"列”}打印当前行的列数
NR当前的行号(NnumberRow,从1开始)NR%2{print “这是偶数行”}判断是否是偶数行
RS表示记录分隔符,多行文本的情况下,RS字符将文本分割成几个大块(RowSplit)BEGIN{ FS=“\N” RS=" " }对一个使用空行分割多个行的文本,RS表示的字符将文本分成多个段落,FS表示的字符将这些段落中的行分割成多个列。
OFS表示输出字段之间分隔符,将输出的多个字段使用OFS拼接,缺省为" "。(OutFileSpilt)BEGIN{OFS=“;”} {print “字段1”,“字段2”,“字段3”}输出的字段1、字段2、字段3变成"字段1;字段2;字段3"
ORS表示输出行之间记录分隔符,在两个单独行插入定义的字符串,缺省为"\n"BEGIN{ ORS=“\n\n” }输出的文本行之间有两个空行

awk 脚本

#awk的脚本文件
#开始部分,一般用于脚本执行前的初始化,比如设置每一列的标题、设置分割符等等。
BEGIN{
FS=","
print "第一列","第二列"
}
 
#这里是主要执行的代码块
{print "这是第"NR"行"}
NR%2 {print NR,"这是偶数行"}
 
#END代码块。
END{
print "总计共有"NR"行"
print "脚本执行结束"
}


# 执行指令
awk -f awkScript.txt awktest.txt

正则表达式

字符描述
.可代替除一行之外的任何单个字符
*可代替零个或多个在它前面出现的字符
[chars]可代替chars中的任何一个字符,chars是一串字符序列。你可以用-符号来定义一个字符范围。如果^是chars中的第一个字符,那么将匹配没有在chars中指定的字符
^匹配一行的开头
$匹配一行的结尾
\把\后面的字符照常输出,通常用来转义(不使用特殊含义)一个元字符
!~匹配到的内容取反,表示不匹配
awk -F "," '{if($0 ~ "2020/07/01"){print $0}else{print "none"}}' awktest.txt
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值