SRE学习二

文本处理工具

查看文件

cat 命令参数详解

格式:cat [OPTION]… [FILE]…

-n 或 --number:由 1 开始对所有输出的行数编号。

-b 或 --number-nonblank:和 -n 相似,只不过对于空白行不编号。

-s 或 --squeeze-blank:当遇到有连续两行以上的空白行,就代换为一行的空白行。

-v 或 --show-nonprinting:使用 ^ 和 M- 符号,除了 LFD 和 TAB 之外。

-E 或 --show-ends : 在每行结束处显示 $。

-T 或 --show-tabs: 将 TAB 字符显示为 ^I。

-A, --show-all:等价于 -vET。

-e:等价于"-vE"选项;

-t:等价于"-vT"选项;

示例

查找文件工具

find

find 实际搜寻硬盘查询文件名称

格式:find [OPTION]… [查找路径] [查找条件] [处理动作]

查找ming.txt这个文件,从/开始查找,即在Linux所有挂载的分区和目录中查找

[root@ming ~]# find / -name ming.txt

只查找.txt结尾的文件

[root@ming ~]# find / -name '*.txt' 

查找txt和pdf结尾的文件

[root@ming ~]# find . -name "*.txt" -o -name "*.pdf" 

根据文件大小查找

使用格式:

find . -type f -size 文件大小

文件大小单元:

b------块(512字节)

c------字节

w------字(2字节)

k------千字节

M------兆字节

G------吉字节

查找大于10KB的文件

[root@ming ~]# find . -type f -size +10k

三剑客

sed

sed(关键字: 编辑) 以行为单位的文本编辑工具 sed可以直接修改档案, 不过一般不推荐这么做, 可以分析 standard input
基本工作方式: sed [-nef] '[动作]' [输入文本]
          a\ : 在当前行后添加一行或多行。多行时除最后一行外,每行末尾需用“\”续行
      c\ :用此符号后的新文本替换当前行中的文本。多行时除最后一行外,每⾏末尾需用”\"续行
      i\ :在当前行之前插入文本。多行时除最后一行外,每行末尾需用”\"续行删除行
      h : 把模式空间里的内容复制到暂存缓冲区
      H : 把模式空间里的内容追加到暂存缓冲区
     g : 把暂存缓冲区里的内容复制到模式空间,覆盖原有的内容
     G: 把暂存缓冲区的内容追加到模式空间⾥,追加在原有内容的后面
     l : 列出非打印字符
     p : 打印行
     q : 结束或退出sed
     r : 从文件中读取输入行
     ! : 对所选行以外的所有行应用命令
     s : 用一个字符串替换另一个
     g : 在行内进行全局替换
      w : 将所选的行写入文件
     x : 交换暂存缓冲区与模式空间的内容
     y : 将字符替换为另一字符(不能对正则表达式使用y命令)
选项
  -e : 进行多项编辑,即对输入行应用多条sed命令时使用
  -n : 取消默认的输出
  -f :指定sed脚本的文件名

示例

awk

sed以行为单位处理文件,awk比sed强的地方在于不仅能以行为单位还能以列为单位处理文件。 awk缺省的行分隔符是换行,缺省的列分隔符是连续的空格和Tab,

但是行分隔符和列分隔符都可以自定义,比如/etc/passwd文件的每一行有干个字段,字段之间以:分隔,就可以重新定义awk的列分隔符为:并以列为单位处理这个文件。

awk实际上是一门很复杂的脚本语言,还有像C语言一样的分支和循环结构,但是基本语法和sed类似,awk命令行的基本形式为:

  awk option 'script' file1 file2 ...


  awk option -f scriptfile file1 file2 ...
  和sed一样,awk处理的文件既可以由标准输入重定向得到,也可以当命令行参数传入,编辑命令可以直接当命令行参数传入,也可以用-f参数指定一个脚本文件,

编辑命令的格式为:

  /pattern/{actions}

  和sed类似,pattern是正则表达式,actions是一系列操作。 awk程序一行一行读出待处理文件,如果某一行与pattern匹配,或者满足condition条件,

则执行相应的actions,如果一条awk命令只有actions部分,则actions作用于待处理文件的每一行。

示例

注:

$0:表示当前行

$1:表示当前行的第一列

$2:表示当前行的第二列

printf 可以实现格式化输出
格式:printf “FORMAT”, item1, item2, …

如格式化输出,列对齐

awk '{printf "%-5s %-5s\n",$3,$4}' test1.txt

grep

grep(关键字: 截取) 文本搜集工具, 结合正则表达式非常强大
主要参数 []
-c : 只输出匹配的行
-I : 不区分大小写
-h : 查询多文件时不显示文件名
-l : 查询多文件时, 只输出包含匹配字符的文件名
-n : 显示匹配的行号及行
-v : 显示不包含匹配文本的所有行(我经常用除去grep本身)
基本工作方式: grep 要匹配的内容 文件名, 例如:
       grep 'test' d* 显示所有以d开头的文件中包含test的行
       grep 'test' aa bb cc 显示在 aa bb cc 文件中包含test的行
       grep '[a-z]\{5}\' aa 显示所有包含字符串至少有5个连续小写字母的串

grep的基本正则、扩展正则表达式

1.字符匹配:

    .:任意单个字符

    [ ]:匹配指定范围内的任意单个字符

    [0-9]:匹配单个数字

    [a-z]:匹配单个小写字母

[A-Z]:匹配单个大写字母

[[:digit:]]:匹配单个数字

[[:lower:]]:匹配单个小写字母

[[:upper:]]:匹配单个大写字母

[[:space:]]:匹配单个空白字符

[[:punct:]]:匹配单个标点符号

[[:alnum:]]:匹配单个字母或数字

[[:alpha:]]:匹配单个字母(不分大小写)

[^]:匹配范围外的任意单个字符

2.次数匹配:

*:任意次(前面字符出现任意次)

\?:0次或1次(前面字符可有可无)

\{m\}:m次(前面字符出现m次)

\{m,n\}:至少m次,至多n次

\{m,\}:至少m次

\{0,n\}:至多n次

.*:任意长度的任意字符

  3.位置锚定:

^:行首锚定(写在模式最左侧)

$:行尾锚定(写在模式最右侧)

^$:空白行

\<,/b:词首锚定(出现于单词左侧)

\>,/b:词尾锚定(出现于单词右侧)

示例

扩展的正则表达式 'PATTERN':

     egrep 使用扩展正则表达式来构建模式, 相当于grep -E

正则表达式描    述示    例
.匹配任意单个字符hack. 匹配hackl和hackm,但是不能匹配hackll,hack
[]匹配包含在[字符]之中的任意一个字符coo[kl] 匹配cool或cook
[^]匹配除[字符]之外的任意一个字符9[^01] 匹配93,92 但是不能匹配91, 90
[-]匹配[]中指定的范围中的任意一个字符[0-3] 匹配1~3任意一个数字
^锚钉行的开头^diguo 匹配以diguo开头的行
$锚钉行的末尾diguo$ 匹配以diguo结尾的行
\<char锚钉单词的开头\<char 匹配以char开头的单词
char\>锚钉单词的结尾char\> 匹配以char结尾的单词
*匹配之前的项目0次或多次co*l 等于 cl, col, cooooool 等
?匹配之前的项目0次或1次x?y, 等于 xy, x
+匹配之前的项目1次或多次rollno-9+ 匹配rollno-99, rollno-9 等 但是不能匹配rollno-
()创建一个用于匹配的字符串ma(tri)?x 匹配max或者matrix
{m}匹配之前的项目m次[0-9]{3} 匹配任意一个三位数, [0-9][0-9][0-9]也可以
{m,}匹配之前的项目至少m次[0-9]{2,} 匹配一个2位数字或 更多位数字
{m,n}匹配之前的项目至少m次,至多n次[0-9]{2,3} 匹配一个2位数字,或3位数字
(m|n)或者, 匹配|两边的任意一项Oct (1st|2nd) 匹配 Oct 1st 或者 Oct 2nd
/转义字符, 将上面的特殊字符进行转义a\.b匹配的是a.b, 但不能匹配ajb, 通过在.之前加上了\, 从而忽略了.的特殊意义
POSIX字符类meta sequence [:xxxx:]可以匹配到常用的字符范围
正则表达式描    述示    例
[:alnum:]字母与数字字符[[:alnum:]]+ 一个或多个数字或字母
[:alpha:]字母字符(包括大写小写字母)[[:alpha:]]{4} 4个不区分大小写字母
[:blank:]空格与制表符[[:blank:]]* 0个或多个空格或制表符
[:digit:]数字字符[[:digit:]]? 0个或1个数字
[:lower:]小写字母[[:lower:]]{5,} 至少5个小写字母组成的字串
[:upper:]大写字母[[:upper:]]{0,5} 至多5个大写字母组成的字串
[:punct:]标点符号[[:punct:]] 一个标点符号
[:space:]包括换行符,回车符,在内的所有空白字符[[:space:]]* 0或多个任意空白字符

示例

变量命名要求
区分大小写
不能使程序中的保留字和内置变量:如:if, for
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
环境变量:
可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程
一般只在系统配置文件中使用,在脚本中较少使用
声明并赋值
export name=VALUE
declare -x name=VALUE
#或者分两步实现
name=VALUE
export name
变量引用:
$name
n a m e ∗ ∗ 显示所有环境变量: ∗ ∗ e n v p r i n t e n v e x p o r t d e c l a r e − x 查看指定进程的环境变量 c a t / p r o c / {name} **显示所有环境变量:** env printenv export declare -x 查看指定进程的环境变量 cat /proc/name∗∗显示所有环境变量:∗∗envprintenvexportdeclare−x查看指定进程的环境变量cat/proc/PID/environ
删除变量:
unset name
只读变量
只能声明定义,但后续不能修改和删除,即常量
声明只读变量:
readonly name
declare -r name
查看只读变量:
readonly [-p]
declare -r

位置变量
在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数
1, $2, … 对应第1个、第2个等参数,shift [n]换位置
$0 命令本身,包括路径
$* 传递给脚本的所有参数,全部参数合为一个字符串
$@ 传递给脚本的所有参数,每个参数为独立字符串
KaTeX parse error: Expected 'EOF', got '#' at position 1: #̲ 传递给脚本的参数的个数 注意…@ $* 只在被双引号包起来的时候才会有差异
清空所有位置变量
set –

退出状态码变量

进程执行后,将使用变量 ? 保存状态码的相关数字,不同的值反应成功或失败, ? 保存状态码的相关数字,不同的值反应成功或失败,?保存状态码的相关数字,不同的值反应成功或失败,?取值范例 0-255
$?的值为0 #代表成功
$?的值是1到255 #代表失败

 通过shell编程

30鸡和兔的头,80鸡和兔的脚,分别有几只鸡,几只兔?

示例:

shell编程的for循环完成批量创建100个用户
#!/bin/bash

# 循环创建100个用户
for ((i=1; i<=100; i++))
do
    # 生成用户名,例如user1、user2等
    username="user$i"

    # 创建用户
    useradd $username

    # 设置用户密码为默认密码,例如使用用户名作为密码
    echo "$username:$username" | chpasswd

    # 打印创建成功信息
    echo "User $username created"
done

for循环1到100累加

结果

id命令判断用户是否存在

代码:

判断root是否存在

#!/bin/bash
id root >/dev/null 2>&1       #ID=用户名
if [ $? -eq 1 ]; then
    echo "用户不存在"
else
    echo "用户已存在"
    exit 1
fi

示例结果

用户存在则说明存在,用户不存在则添加用户并说明已添加

#!/bin/bash
  
while :
do
echo "please input username"
read name
if [ -e /home/$name]
then
         echo"用户已存在"
else
        useradd -m $name && echo "创建成功" && break
fi
done

示例:

测试Ming和ming1是否存在

磁盘存储术语总结: head, track, sector, Cylinder.

Head(磁头):磁头是用来读取和写入数据的关键部件。它附着在机械臂上,可以移动到磁盘的不同部分。每个磁头都可以独立地读取和写入数据,但在同一时间内,只有一个磁头可以访问给定的轨道。
Track(磁道):磁道是磁盘上的一组同心圆,其中每一个都由一个磁头进行访问。这些磁道被组织成多个扇区,每个扇区包含一定数量的数据位。
Sector(扇区):扇区是磁盘上最小的数据存储单元。每个扇区通常包含一个标识符(ID),用于识别该扇区,以及实际的数据。扇区的大小通常为512字节,但现代磁盘通常使用4KB的扇区大小。
Cylinder(柱面):柱面是由同一磁道上的所有扇区组成的。在早期的硬盘驱动器中,磁头在访问同一柱面中的所有扇区时是不需要移动的。然而,现代硬盘驱动器使用旋转速度更快的磁盘和更先进的磁头技术,使得访问同一柱面中的不同扇区也需要移动磁头

MBR,GPT结构

MBR(Master Boot Record)和GPT(GUID Partition Table)都是磁盘分区表,用于管理和描述磁盘分区。

MBR是一个位于磁盘最开始的扇区,它记录了磁盘分区表的信息,包括分区的数量、大小和类型等。MBR通常只能容纳4个主分区,如果需要更多的分区,需要在扩展分区中创建逻辑分区。MBR的大小是固定的,为512字节。

GPT是一个基于UEFI(Unified Extensible Firmware Interface)的磁盘分区表,它使用GUID(Globally Unique Identifier)作为分区的标识符。GPT可以容纳更多的分区,并且可以支持更大的磁盘容量。GPT的第一个扇区是GPT头,其中包含了磁盘分区表的信息,以及一个签名(GUID)来验证GPT表的完整性。GPT的分区表位于GPT头之后,每个分区都有一个GUID和一个类型(如系统、数据、恢复等)。GPT的大小不是固定的,可以根据磁盘的大小动态调整

文件系统管理,SWAP管理相关的命令及选项,示例 fdisk, parted, mkfs, dumpe2fs, xfs_info, fsck, mount, umount, swapon, swapoff

查看分区

lsblk

创建分区:fdisk

fdisk:用于创建、删除和修改磁盘分区。
常用选项:
-d:显示磁盘分区表信息。
-l:列出磁盘分区信息。
-n:创建一个新的分区。
-delete:删除一个分区。
-help:显示帮助信息。
-w:保存分区表更改

分区,选择需要分区磁盘名

删除分区

演示

最后“w”存盘,"q"退出

创建分区:parted

可以先看帮助命令使用

按演示步骤

创新分区表-磁盘类型-创新分区-分区名字-文件系统类型从ext2排起-分10G-i为确定,C为取消;

最后打印分区查看

创建文件系统:mkfs

mkfs.ext4

演示方法一:

mkfs.xfs /dev/nvme0n2p1 -f

注明:-f 是覆盖原有系统文件,谨慎操作(此操作为演示机)

查看文件系统

ext4:tune2fs -l /dev/nvme0n2p1

xfs  :   xfs_info /dev/nvme0n2p2

查看分区块信息:dumpe2fs

dumpe2fs /dev/nvme0n2p1

查看分区id

blkid

分区检查工具

fsck:

fsck.ext4 /dev/nvme0n2p1

xfs_repair:xfs_repair -n /dev/nvme0n2p2

挂载分区

mount:mount  分区   挂载点

 没挂载前!lsblk -f 查看

mount /dev/nvme0n2p1  /sda1

挂载后如下图

永久挂载

       需要修改配置文件,要知道分区ID进度挂载。

先获取分区ID。blkid看到ID,复制ID

进入Vim修改配置文件

vim /etc/fstab进入文本编辑添加如下,sda2挂载到此ID的分区中

编辑完成保存退出!运行moint -a,df -f(也可以用lsblk -f)查看是否挂载,对比上面图已经挂载上

取消挂载分区

        取消临时挂载:umount

umount   sda1,原本挂载在nnvme0n2p1已经不在

对永久挂载的处理

vim /etc/fstab进入文本编辑把刚刚添加的删除掉后

运行 umount /sda2

运行moint -a,df -f(也可以用lsblk -f)查看 挂载还在么?已经看不到了

swapon

查看swap的使用情况:

swapon -s

开启

swapon -a ,最后“ free -h "查看

swapoff

swapoff -a

禁用所有swap

创建swap分区

最后修改类型,先查看swap需要使用什么类型在进行修改

最后修改:

创建swap文件系统

使用:mkswap /dev/nvme0n2p1

永久挂载swap

和上面永久挂载一样

vim  /etc/fstab

最后 “:wq” 保存退出(注:vi和vim是一样的命令进入编辑文本)

下图

开启:swapon  -a 

查看:free -h


 

  • 17
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值