Python测开28期-Pomelo-学习笔记-Linux 与 Bash 编程

Linux 与 Bash 编程

Linux 常用命令之文件处理

查看帮助

  • --help
  • man

文件管理

  • 查看文件信息: ls
  • 切换工作目录: cd
  • 显示当前目录路径: pwd
  • 创建新目录:mkdir
  • 创建空文件:touch
  • 删除文件或目录:rm
  • 拷贝:cp
  • 移动/重命名:mv
  • 建立文件链接:ln
  • 查找文件:find
  • 查看文件内容:catlessmoreheadtail
  • 打包压缩:tar

文本处理

  • 文本编辑:vi/vim
  • 屏幕输出:echo
  • 输出重定向:>

文件属性

318ad7247c7e8b0784e0c8460a7e3bd

修改文件权限

  • r:读权限 read — 4
  • w:写权限 write — 2
  • x:执行权限 execute — 1
  • -: 无权限 — 0
  • chmod 777 文件名

查看网卡信息

  • ifconfig
  • ip addr

测试远程主机的连通性

ping

  • -c:ping 的次数
  • -i:每次 ping 的时间间隔

打印Linux网络系统的状态信息

  • netstat
  • -t:列出所有 tcp
  • -n:以数字形式显示地址和端口
  • -p:显示进程的 pid 和名字

退出Linux系统

  • exit

Linux 常用命令之性能统计

常用性能指标

  • cpu 代表算法的高效性
  • mem 代表数据结构的使用合理性
  • net io 等更多指标

统计方法

  • 临时性分析–命令交互
  • 系统性分析–prometheus grafana

查看cpu信息

  • cat /proc/cpuinfo

查看系统负载与进程cpu占用

  • top

cpu的关键指标

  • cpu 利用率:进程的 cpu 利用情况
  • load average:系统负载情况

注意: ps 命令的 cpu 是平均 cpu 利用率,不适合做性能分析

内存(mem)占用统计

  • free
  • ps
  • top

网络连接(net)统计

  • netstat -tnp | head 10

Linux 常用统计命令

统计命令分类

  • 排序
  • 去重
  • 统计

排序 sort

sort 常用参数

  • -b:忽略开头的空白字符
  • -f:将小写字母看做大写字母
  • -h:根据存储容量排序(KB、MB、GB)
  • -n:按数字排序
  • -o:把结果写入文件
  • -r:以相反的顺序来排序
  • -t:指定分隔符,默认为空格
  • -V:按照数字版本排序
  • -k:指定排序的关键字,与-t 参数配合使用

去重uniq

uniq常用参数

  • -c:统计重复出现的次数
  • -d:所有邻近的重复行只被打印一次。重复次数要大于等于 2
  • -D:所有邻近的重复行将全部打印
  • -f:跳过对前 n 个列的比较
  • -s:跳过对前 n 个字符的比较
  • -w:只对每行前 n 个字符进行比较

统计熟练wc

wc常用参数

  • -c:统计字节数:chars
  • -l:统计行数
  • -w:统计但单词数
  • -L:打印最长行的长度

Linux 进程与线程

进程

  • 可执行程序的运行态
  • 操作系统调度的基本单位
  • 线程容器
  • 进程本身包含指令、数据等资源

线程

  • 进程中被执行的最小单元
  • cpu 调度的基本单位
  • 线程带有指令、数据等资源

进程的生命周期

  • created sleep 100 ./demo.py
  • ready
  • running
  • waiting
  • terminated kill/kill all

1

常用进程管理命令

  • ps 进程列表快照
  • top 交互式进程观测
  • kill killall 结束进程
  • fg 进程切换到前台
  • bg 进程切换到后台
  • ctrl z 挂起进程

ps命令

  • unix 风格参数 ps -ef

3

  • bsd 风格参数 ps aux

4

  • gnu 风格参数 ps --pid pidlist

2

多进程与多线程的实例代码

Linux 三剑客之grep

内容检索

  • 获取行 grep pattern file
  • 获取内容 grep -o pattern file
  • 获取上下文 grep -A -B -C pattern file

文件检索

  • 递归搜索 grep pattern -r dir/
  • 展示匹配文件名 grep -H 111 /tmp/1
  • 只展示匹配文件名 grep -l 111 /tmp/1

范围约束

  • 忽略大小写 grep -i pattern file
  • 不显示匹配的行 grep -v pattern file
  • 使用扩展正则表达式 grep -E pattern file
  • 文件范围和目录范围约束 grep 111 -r /tmp/demo/ --include "11*"

进程检索

  • 进程过滤场景比较特殊,需要注意
  • grep 本身会开启新进程,所以需要单独过滤掉 grep 进程
    5

Linux 三剑客之awk

awk基本语法

  • awk 是 linux 下的一个命令,同时也是一种语言解析引擎
  • awk 具备完整的编程特性。比如执行命令,网络请求等
  • 精通 awk,是一个 linux 工作者的必备技能
  • 语法 awk 'pattern{action}'

awk上下文变量

  • 开始 BEGIN 结束 END
  • 行数 NR
  • 字段与字段数 $1 $2 … $NF NF
  • 整行 $0
  • 字段分隔符 FS
  • 输出数据的字段分隔符 OFS
  • 记录分隔符 RS
  • 输出字段的行分隔符 ORS

字段变量用法

  • -F 参数指定字段分隔符,可以用|指定多个- 多分隔符 -F ‘<|>’
  • BEGIN{FS=“_”} 也可以表示分隔符
  • $0 代表当前的记录
  • $1 代表第一个字段
  • $N 代表第 N 个字段
  • $NF 代表最后一个字段
  • $(NF-1) 代表倒数第二个字段

pattern表达式

  • 正则匹配 $1~/pattern/ /pattern/
  • 比较表达式 $2>2 $1=="b"

awk pattern匹配表达式案例

  • 开始和结束 awk 'BEGIN{}END{}'
  • 正则匹配
    • 整行匹配 awk '/Running/'
    • 字段匹配 awk '$2~/xxx/'
  • 行数表达式
    • 取第二行 awk 'NR==2'
    • 去掉第一行 awk 'NR>1'
  • 区间选择
    • awk '/aa/,/bb/'
    • awk '/1/,NR==2'

action 行为表达式 {action}

  • 打印 {print $0} {print $2}
  • 赋值 {$1="abc"}
  • 处理函数
  • 原始内容 $0
  • 更新后内容 {$1=$1;print $0}

单行转多行

  • echo 1:2:3 | awk 'BEGIN {RS=":"} {print $0}'

awk 的词典结构 array

  • array 是稀疏矩阵,类似 python 的词典类型
  • 统计多家机构的营业额
  • 统计多家机构的营业额平均值

Linux 三剑客之 sed

sed 基本语法与常用参数

  • 语法结构 sed [addr]X[options]
  • -e 表达式
  • sed -n ‘2p’ 打印第二行
  • sed ‘s#hello#world#’ 修改
  • -i 直接修改源文件
  • -E 扩展表达式
  • –debug 调试

sed pattern 表达式

  • 行数与行数范围 20 30,35
  • 正则匹配 /pattern/
  • 区间匹配 //,//

sed action 表达式

  • p 打印,通常结合-n 参数:sed -n ‘2p’
  • s 查找替换:s/REGEXP/REPLACEMENT/[FLAGS]
  • d 删除,删除前两行 sed ‘1,2d’
  • a 追加
  • c 改变
  • i 插入内容到匹配行之前
  • e 执行命令
  • 分组匹配与字段提取:sed ‘s#([0-9]*)|([a-z]*)#\1 \2#’

行数操作

  • 打印特定行 sed -n 2p
  • 删除最后一行 sed $d

s 表达式

  • s 表示替换
  • s 后面的追加字符可以为任意字符
  • g 表示全局匹配
  • & 表示匹配内容
    6

反向引用

  • 使用()对数据进行分组
  • 使用\1 \2 反向引用分组
    7

Linux 三剑客与管道使用

程序运行环境输入与输出

  • 标准输入 0
    • read a;echo $a
  • 标准输出 1
    • echo ceshiren.com
  • 错误输出
    • ls not_exist_dir

管道重定向

  • 管道与管道之间可以重定向
  • 管道与文件之间可以重定向

Bash 编程语法

Bash 编程基础

  • 变量
  • 引号
  • 数组
  • 控制语句
  • 函数

Bash 变量

语法: Variable_name=value

Bash 变量定义的规则

  • 变量名区分大小写,a和A为两个不同的变量。
  • 变量名可以使用大小写字母混编的形式进行编写。
  • 变量名与值之间的=两侧都不能有空格。
  • 在读取或打印变量时,需使用$+变量名。
  • 变量可以写在Bash脚本中的任何地方,在运行时,Bash会自动将其替换为变量值。

Bash 数据类型

在 Bash 中声明变量后赋值,它会自动判断数据类型,不必在声明的同时去定义变量的数据类型。

Bash 变量的类型

  • 系统定义的变量
    • 通常是以大写字母形式存在
    • 如 BASH、SHELL等
  • 用户定义的变量
    • 多数以小写字母参与命名
    • 但不具有大小写强制性规定

Bash 变量的定义与使用

letter_name="abc"
echo $letter_name

只读变量

a="123"
readonly a

删除变量

unset Variable_name

字符串的拼接

基本语法 str3="${str1}${str2}"

Bash 引号

  • 输入的内容为简单的字符串或文本时,单引号和双引号的作用没有任何区别
  • 输出一个已定义的变量,则需要使用双引号

数组

数组可以定义为相似类型元素的集合,在bash中数组不必是相似类型元素的集合

索引数组的声明和赋值

declare -a Array_Name #索引数组
Array_Name[index_1]=value_1
Array_Name[index_2]=value_2