shell 编程(五)

shell 环境的配置文件

df 命令

        df 命令时unix 和类unix系统中用于显示文件系统磁盘空间使用情况的命令,df 是disk free的缩写,它可以显示磁盘上每个挂载点的使用情况,包括总容量,已用空间,可用空间以及挂载点信息。

基本语法

        df [选项]    [文件或目录]

常用选项

        -h:        以可读性更高的方式显示( 例如KB、MB、GB等)

        -T:        显示文件系统类型

        -i:         显示inode 使用情况,而不是磁盘空间

        -a:        显示所有文件系统,包括虚拟文件系统

        -l:         仅显示本地文件系统

        -t  <type>: 仅显示特定类型的文件系统

查找df 命令下以/dev 开头的磁盘的使用率

df  | grep "^/dev/" | tr -s " " % | cut -d % -f5

root@qgy-VMware-Virtual-Platform:~# df
Filesystem     1K-blocks     Used Available Use% Mounted on
tmpfs             808364     2288    806076   1% /run
/dev/sda2      102623160 22773396  74590656  24% /
tmpfs            4041816        0   4041816   0% /dev/shm
tmpfs               5120        8      5112   1% /run/lock
tmpfs             808360      128    808232   1% /run/user/1000
/dev/sr0         6057964  6057964         0 100% /media/qgy/Ubuntu 24.04.1 LTS amd64
tmpfs             808360       80    808280   1% /run/user/0
root@qgy-VMware-Virtual-Platform:~# df | grep '^/dev' | tr -s " " %  | cut -d % -f5
24
100
 

编写一个脚本,当内存的利用率超过80%发送警告邮件

#!/bin/bash

# 获取当前根文件系统的使用率
USAGE=$(df / | grep / | awk '{ print $5 }' | sed 's/%//g')

# 设置警告阈值
WARNING=80

if [ $USAGE -gt $WARNING ]; then
  echo "Disk usage is above $WARNING%. Current usage is ${USAGE}%." | mail -s "Disk Usage Warning" admin@example.com
fi

USAGE=`df  /| grep /| awk '{ print $5 }' | sed 's/%//g'` 

/dev/zero 是一个特殊的设备文件,在unix和类unix系统中,它提供一个无限流的零字节(0x00),也就是说任何读取/dev/zero 的操作都会返回连续的零字节

主要用途 

        1、生成零填充数据: 通过读取/dev/zero 可以轻松地生成一段零字节的数据,通常用于测试、文件初始化或清除数据

        2、测试磁盘性能: 常用于创建零填充的文件或设备来测试磁盘的写入性能

        3、创建空白文件: 可以使用它来快速创建具有特定大小的空白文件(文件内容是零)

示例:

        cat  /dev/zero

创建一个大小为100MB的文件,其中的内容全部为零

        dd if=/dev/zero of = zero_file.bin  bs=1M count=100

创建一个空的交换文件

在 Linux 系统中,可以使用 /dev/zero 创建一个交换文件(swap file),然后格式化为交换空间:

dd if=/dev/zero of=/swapfile bs=1M count=1024 mkswap /swapfile swapon /swapfile

  • 这将创建一个 1GB 的交换文件(/swapfile),并将其启用为交换空间。

填充磁盘或分区

你也可以使用 /dev/zero 来清空文件系统或分区,确保其中的数据被零填充。例如,清空一个硬盘分区:

dd if=/dev/zero of=/dev/sda bs=1M

  • 这会将整个硬盘 /dev/sda 用零填充,通常用于彻底擦除磁盘数据。但要小心,这样的操作会导致磁盘上的所有数据丢失。

 测试磁盘写入性能

你可以用 /dev/zero 来测试磁盘的写入性能,例如创建一个大的文件:

dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct

  • 这条命令会向 testfile 写入 1GB 的零字节数据,并且使用 oflag=direct 选项避免使用缓存,从而更准确地测试磁盘性能。

dd 命令 

dd 是 Unix 和 Linux 系统中用于低级别复制和转换数据的命令。它通常用于备份、创建磁盘镜像、复制数据、生成随机数据以及转换文件格式等。

基本语法:

dd if=<输入文件> of=<输出文件> [选项]

  • if=<输入文件>:指定输入文件(input file),即你要复制的数据源。如果没有指定,则默认是标准输入(stdin)。
  • of=<输出文件>:指定输出文件(output file),即你要复制到的位置。如果没有指定,则默认是标准输出(stdout)。

常见选项:

  • bs=<块大小>:指定读写的块大小,通常以字节为单位。可以设置为 512、1024、2048、4096 字节等。使用较大的块大小可以提高效率。
  • count=<块数>:指定复制的块数。count 代表从输入文件读取的块数,限制了复制的总量。
  • skip=<块数>:指定在输入文件开始复制之前跳过的块数。常用于从某个位置开始复制数据。
  • seek=<块数>:指定在输出文件中开始写入的位置(跳过指定数量的块)。
  • conv=<选项>:转换文件内容。常用的选项包括:
    • noerror:即使读取错误也继续。
    • sync:将输入块填充到指定块大小,确保每个块都完整。
    • notrunc:不截断输出文件。
    • ebcdic:转换输入文件为 EBCDIC 编码。

示例:

1. 创建一个文件的镜像

将整个磁盘(如 /dev/sda)复制到一个文件中(如 backup.img):

dd if=/dev/sda of=backup.img bs=64K

  • if=/dev/sda:指定输入文件为 /dev/sda(磁盘设备)。
  • of=backup.img:输出文件为 backup.img
  • bs=64K:设置块大小为 64KB,通常较大的块大小能够提高复制效率。

2. 创建一个文件的备份

将一个普通文件(如 data.txt)复制到一个新文件(如 data_backup.txt):

dd if=data.txt of=data_backup.txt bs=4K

  • if=data.txt:指定输入文件为 data.txt
  • of=data_backup.txt:指定输出文件为 data_backup.txt
  • bs=4K:每次读写 4KB 数据。

3. 创建磁盘的镜像备份并压缩

可以将磁盘内容通过 dd 命令创建镜像,并直接通过管道将其压缩:

dd if=/dev/sda | gzip > backup.img.gz

  • 这条命令将磁盘 /dev/sda 的数据通过 dd 命令复制并压缩成 backup.img.gz 文件。

4. 备份整个硬盘的第一个分区(如 /dev/sda1)到文件

dd if=/dev/sda1 of=/backup/sda1.img bs=4M

  • 这将会从 /dev/sda1 读取数据,并将其保存为 sda1.img

5. 复制硬盘并调整分区

你可以使用 dd 复制一个硬盘的整个内容(包括分区表),例如将 /dev/sda 的内容复制到 /dev/sdb

dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync

  • conv=noerror,sync:即使遇到读错误也继续复制,并将输入块填充到指定大小。

6. 从ISO文件中创建启动盘

将一个 ISO 文件写入 USB 设备或 SD 卡(如 /dev/sdb):

dd if=ubuntu.iso of=/dev/sdb bs=4M status=progress

  • if=ubuntu.iso:输入文件为 Ubuntu 镜像文件。
  • of=/dev/sdb:将镜像写入到 USB 设备 /dev/sdb
  • status=progress:显示命令的执行进度。

7. 检查磁盘的读取速度

使用 dd 测试磁盘的读取性能:

dd if=/dev/zero of=testfile bs=1M count=1024 oflag=direct

  • 这条命令会从 /dev/zero(一个虚拟的零设备)读取数据,写入到 testfile 文件中,测试磁盘的写入速度。
  • bs=1M:每次写入 1MB 数据。
  • count=1024:写入 1024 个块(即 1GB)。
  • oflag=direct:直接使用磁盘 I/O,避免缓存。

注意事项:

  1. dd 命令的危险性:因为 dd 是低级别的文件复制工具,它没有检查文件类型的功能。所以在操作磁盘或设备时要非常小心,错误的 ifof 参数可能会导致数据丢失。使用前务必确认目标文件或设备。
  2. 进度显示:如果你在执行 dd 时需要查看进度,可以使用 status=progress 来显示命令执行的进度信息。例如:

    dd if=/dev/sda of=backup.img bs=64K status=progress

  3. 备份和恢复dd 是非常强大的工具,适用于磁盘、分区级别的备份和恢复。

总结:

  • dd 是一个强大的工具,适用于处理低级数据复制、备份、磁盘镜像等任务。
  • 需要小心使用,因为它会直接读取和写入设备数据,没有文件系统层面的保护,错误操作可能导致数据丢失。
grep 命令 

grep 是一个在 Unix 和类 Unix 系统中广泛使用的命令行工具,用于从输入中查找与指定模式(通常是正则表达式)匹配的行。它的名字来自 "Global Regular Expression Print",即全局正则表达式打印。

基本语法:

grep [选项] '模式' [文件...]

  • '模式':要匹配的正则表达式或字符串。

  • [文件...]:要搜索的一个或多个文件。如果不指定文件,grep 会从标准输入(通常是终端或管道)中读取数据。

常见选项:

  1. -i:忽略大小写匹配。

    • grep -i 'pattern' file:匹配不区分大小写的模式。

  2. -v:反向匹配(invert match),显示不包含指定模式的行。

    • grep -v 'pattern' file:显示不包含模式 pattern 的行。

  3. -r-R:递归地搜索目录中的文件。

    • grep -r 'pattern' /path/to/dir:递归地在 /path/to/dir 目录下的所有文件中查找匹配的内容。

  4. -l:仅显示包含匹配模式的文件名。

    • grep -l 'pattern' file1 file2:列出包含匹配模式的文件名。

  5. -L:仅显示不包含匹配模式的文件名。

    • grep -L 'pattern' file1 file2:列出不包含匹配模式的文件名。

  6. -n:显示匹配行的行号。

    • grep -n 'pattern' file:显示匹配的行以及行号。

  7. -H:显示匹配行的文件名。

    • grep -H 'pattern' file:显示匹配的行及文件名。

  8. -c:只显示匹配模式的行数。

    • grep -c 'pattern' file:显示文件中匹配的行数。

  9. -w:匹配整个单词,避免部分匹配。

    • grep -w 'pattern' file:只匹配包含 pattern 的单独单词。

  10. -x:匹配整行。

    • grep -x 'pattern' file:仅匹配完全与模式 pattern 相等的行。

  11. -A <num>:显示匹配行及其后面的 <num> 行。

    • grep -A 3 'pattern' file:显示匹配行以及接下来的 3 行。

  12. -B <num>:显示匹配行及其前面的 <num> 行。

    • grep -B 3 'pattern' file:显示匹配行以及前面的 3 行。

  13. -C <num>:显示匹配行及其前后 <num> 行。

    • grep -C 3 'pattern' file:显示匹配行以及前后各 3 行。

使用示例:

1. 搜索一个文件中的字符串

查找文件 file.txt 中是否包含字符串 hello

grep 'hello' file.txt

2. 忽略大小写的搜索

查找文件 file.txt 中的 hello,不区分大小写:

grep -i 'hello' file.txt

3. 反向匹配

查找文件 file.txt 中不包含 hello 的行:

grep -v 'hello' file.txt

4. 递归搜索目录中的文件

递归地在目录 /home/user/ 下查找包含 pattern 的文件:

grep -r 'pattern' /home/user/

5. 显示行号

查找文件 file.txt 中包含 hello 的行并显示行号:

grep -n 'hello' file.txt

6. 显示匹配的文件名

查找多个文件中包含 pattern 的文件名:

grep -l 'pattern' file1.txt file2.txt

7. 匹配整个单词

查找文件 file.txt 中完全匹配 hello 的行,而不是包含 hello 的部分匹配:

grep -w 'hello' file.txt

8. 显示匹配行及其前后 2 行

查找 pattern 并显示匹配行及其前后各 2 行:

grep -C 2 'pattern' file.txt

9. 查找多行匹配模式并显示行数

查找文件 file.txt 中包含 pattern 的行数:

grep -c 'pattern' file.txt

10. 显示所有包含匹配模式的行和文件名

查找当前目录及子目录下的所有 .txt 文件中包含 pattern 的行,并显示文件名:

grep -H 'pattern' *.txt

正则表达式支持:

grep 支持强大的正则表达式功能,使得它可以匹配复杂的模式。基本正则表达式(BRE)和扩展正则表达式(ERE)都可以在 grep 中使用:

  • 基本正则表达式(BRE)grep 默认使用基本正则表达式。

  • 扩展正则表达式(ERE):使用 grep -E 来启用扩展正则表达式(如 +?| 等特殊字符)。

例如,使用扩展正则表达式(ERE)查找包含 catdog 的行:

grep -E 'cat|dog' file.txt

总结:

  • grep 是一个功能强大的文本搜索工具,广泛应用于日志文件分析、文本处理、系统管理等场景。

  • 它通过模式匹配(通常是正则表达式)帮助用户快速查找文件中的相关信息。

  • 常见选项包括 -i(忽略大小写)、-v(反向匹配)、-r(递归搜索)等,能满足不同的搜索需求。

使用read 命令来接受输入

        使用read来把输入值分配给一个或多个shell变量,read 从标准输入中读取值,给每个单词分配一个变量,把所有剩余单词都分配给最后一个变量

格式:

        read [option]  [name ...]

常见选项:

        -p        指定要显示的提示

        -s        静默输入,一般用于密码

        -n        N 指定输入的字符长度N

        -d        ‘字符’ 输入结束符

        -t       N TIMEOUT 为N 秒

范例:

        read  -p "Enter a filename:  "  FILE

        read   # 如果没有提供变量 系统默认将输入赋值给$REPLY

        echo $REPLY

|   管道会导致重新开启一个子shell ,左右两边的命令将在子shell 中运行

echo  nick     | read NAME       // 在子shell 中运行 将nick 赋值给NAME  子shell 运行完即结束

echo $NAME          // 输出的是父shell 中的NAME变量的值

更改密码:

echo pass | passwd --stdin wang 这个命令在 Linux 系统中用于通过标准输入(stdin)为用户 wang 设置密码。

如果不支持 --stdin

echo "wang:pass" | chpasswd
 

bash 的配置文件

bash shell 的配置文件很多,可以分成下面类别

按生成范围划分为两类

全局配置:

        /etc/profile

        /etc/profile.d/*.sh

        /etc/bashrc

个人配置:

        ~/.bash_profile

        ~/.bashrc

shell 用户登录的两种分类方式

交互式登录:

(1)直接通过终端输入账号密码登录

(2)使用"su -  UserName” 切换用户

配置文件的执行顺序:

   /etc/profile ---->   /etc/profile.d/*.sh   ----->  ~/.bash_profile   -----> ~/.bashrc  --->/etc/bashrc 

非交互式登录:

(1) su UserName

(2) 图形界面下打开的终端

(3) 执行脚本

(4) 任何其他的bash 实例

执行顺序

        /etc/profile.d/*.sh ---> /etc/bashrc  ---->~/.bashrc

按功能划分分类

profile类和bashrc类

profile 类

profile 类为交互式登录的shell提供配置

全局: /etc/profile, /etc/profile.d/*.sh

个人: ~/.bash_profile

 功能:

  (1) 用于定义环境变量

  (2) 运行命令或脚本

bashrc 类  run commmand

        bashrc 类: 为非交互式和交互式登录的shell提供配置

        全局: /etc/bashrc

        个人: ~/.bashrc

        功能:

        (1) 定义命令别名和函数

        (2) 定义本地变量

编辑配置文件生效

修改profile和bashrc文件后需要生效的两种方法

1、重新启动shell 进程

2、source  |. 配置文件

范例:

        ~/.bashrc

Bash 退出任务

保存在~//bash_logout 文件中(用户),在退出登录shell 时运行

功能:

        创建自动备份

        清除临时文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/942751.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux高级--2.4.5 靠协议头保证传输的 MAC/IP/TCP/UDP---协议帧格式

任何网络协议&#xff0c;都必须要用包头里面设置写特殊字段来标识自己&#xff0c;传输越复杂&#xff0c;越稳定&#xff0c;越高性能的协议&#xff0c;包头越复杂。我们理解这些包头中每个字段的作用要站在它们解决什么问题的角度来理解。因为没人愿意让包头那么复杂。 本…

网络下载ts流媒体

网络下载ts流媒体 查看下载排序合并 很多视频网站&#xff0c;尤其是微信小程序中的长视频无法获取到准确视频地址&#xff0c;只能抓取到.ts片段地址&#xff0c;下载后发现基本都是5~8秒时长。 例如&#xff1a; 我们需要将以上地址片段全部下载后排序后再合成新的长视频。 …

小程序租赁系统开发指南与实现策略

内容概要 在如今这个快节奏的时代&#xff0c;小程序租赁系统的开发正逐渐成为许多商家提升服务质量与效率的重要选择。在设计这样一个系统时&#xff0c;首先要明白它的核心目标&#xff1a;便捷、安全。用户希望在最短的时间内找到需要的物品&#xff0c;而商家则希望通过这…

机器人C++开源库The Robotics Library (RL)使用手册(一)

强大的、完整的C机器人开源库 1、是否可以免费商用&#xff1f;2、支持什么平台&#xff1f;3、下载地址4、开始&#xff01; 1、是否可以免费商用&#xff1f; Robotics Library&#xff08;RL&#xff09;是一个独立的C库&#xff0c;用于机器人运动学、运动规划和控制。它涵…

Android unitTest 单元测试用例编写(初始)

文章目录 了解测试相关库导入依赖库新建测试文件示例执行查看结果网页结果其他 本片讲解的重点是unitTest&#xff0c;而不是androidTest哦 了解测试相关库 androidx.compose.ui:ui-test-junit4: 用于Compose UI的JUnit 4测试库。 它提供了测试Compose UI组件的工具和API。 and…

Ngnix介绍、安装、实战及用法!!!

一、Nginx简介 1、Nginx概述 Nginx (“engine x”) 是一个高性能的 HTTP 和 反向代理服务器&#xff0c;特点是占有内存少&#xff0c;并发能力强&#xff0c;能经受高负载的考验,有报告表明能支持高达 50,000 个并发连接数 。 2、正向代理 正向代理&#xff1a;如果把局…

国内智能编程助手简易对比:文心一言、通义千问、智谱AI、讯飞星火、Kimi

最近想给IDE选择一个智能编程助手插件&#xff0c;但鉴于国内百花齐放的现状&#xff0c;一时也不好选择用哪个。挑了几个主流的的平台&#xff0c;分别输入“用python实现雪花纷飞的场景”的简单需求&#xff0c;看看效果对比。备注&#xff1a;因国外插件使用成本远高于国内的…

vscode python pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。()

问题&#xff1a; PS C:\Users\EDY\Desktop\vscodeTest> pip pip : 无法将“pip”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检查名称的拼写&#xff0c;如果包括路径&#xff0c;请确保 路径正确&#xff0c;然后再试一次。 所在位置 行:1 字符: 1 pip …

vue3封装而成的APP ,在版本更新后,页面显示空白

一、问题展示 更新之后页面空白&#xff0c;打不开 &#xff0c;主要是由于缓存造成的 二、解决办法 1、随机数代码实现 使用随机数来动态的生成静态资源目录名可以避免浏览器缓存&#xff0c;但同时每次也会导致浏览器每次都下载最新的资源。如果静态资源过大&#xff0c;可…

HarmonyOS NEXT 实战之元服务:静态多案例效果(一)

背景&#xff1a; 前几篇学习了元服务&#xff0c;后面几期就让我们开发简单的元服务吧&#xff0c;里面丰富的内容大家自己加&#xff0c;本期案例 仅供参考 先上本期效果图 &#xff0c;里面图片自行替换 效果图1代码案例如下&#xff1a; import { authentication } from…

SpringAI人工智能开发框架006---SpringAI多模态接口_编程测试springai多模态接口支持

可以看到springai对多模态的支持. 同样去创建一个项目 也是跟之前的项目一样,修改版本1.0.0 这里 然后修改仓库地址,为springai的地址 然后开始写代码

基础运维学习计划-base版

目录 需要学习的内容&#xff1f; liunx基础 sql/mysql基础 tcp/ip协议基础 http基础 dns基础 网络基础&#xff1a;交换&路由概念&原理 常见网络协议 月学习计划 12.26 日 &#xff08;bilibili自己找视频看看&#xff0c;资源很多&#xff09; 12.27日 1…

2、C#基于.net framework的应用开发实战编程 - 设计(二、三) - 编程手把手系列文章...

二、设计&#xff1b; 二&#xff0e;三、构建数据库&#xff1b; 此例子使用的是SQLite数据库&#xff0c;所以数据库工具用的SQLiteStudio x64&#xff0c;这个是SQLite专用的数据库设计管理工具&#xff0c;其它的数据库管理工具比如DBeaver的使用请见实战工具系列文章。 1、…

shardingsphere分库分表项目实践1-让shardingsphere运行起来

学习新技术最快的方式就是&#xff1a; 1. 先找一个比较完善的demo跑起来 2. 弄清楚用法&#xff1a;配置、原理、使用场景 3. 移植到自己项目上&#xff0c;按照自己需求进行修改优化。 找demo项目的方法&#xff1a;优先去官方git库找&#xff0c;如果没有或者过于简单那么…

【运维笔记】windows 11 中提示:无法成功完成操作,因为文件包含病毒或潜在的垃圾软件。

项目场景&#xff1a; 提示&#xff1a;向日葵远程给客户安装数据库管理软件Navicat 15&#xff0c;提示文件被清理&#xff1a; 原因分析&#xff1a; 提示&#xff1a;可能是文件含有病毒&#xff0c;或者是Windows认为我们下载的软件有病毒&#xff0c;还有就是开发过程做…

使用开源在线聊天工具Fiora轻松搭建个性化聊天平台在线交流

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家&#xff1a;人工智能教程 文章目录 前言1.关于Fiora2.安装Docker3.本地部署Fiora4.使用Fiora5.cpolar内网穿透工具安装6.创建远程连接公网地址7.固定Uptime …

【C#联合halcon实现绘制ROI功能】

前言 C#联合halcon实现绘制ROI功能&#xff1a; C#联合Halcon&#xff0c;使用HDrawingObject、HDrawingObjectXld&#xff0c;绘制矩形、方向矩形、圆形、椭圆、自定义ROI。支持拖动、重设大小、选中。 运行结果 代码 代码结构 MainForm 视图 MainViewModel 视图模型 ROI R…

Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码 【AI辅助开发系列】

&#x1f380;&#x1f380;&#x1f380;【AI辅助编程系列】&#x1f380;&#x1f380;&#x1f380; Visual Studio 使用 GitHub Copilot 与 IntelliCode 辅助编码Visual Studio 安装和管理 GitHub CopilotVisual Studio 使用 GitHub Copilot 扩展Visual Studio 使用 GitHu…

4.FPGA如何实现设计

在前面分别引入了&#xff0c;LUT的知识&#xff0c;全局时钟网络&#xff0c;以及FPGA内部的资源。 LUT的知识&#xff1a; 在FPGA设计中实现的逻辑运算在不借用其他的硬核的基础上都是在LUT中通过查表的方式进行完成的&#xff0c;比如实现的c a & b;就是将a&b的所…

centos权限大集合,覆盖多种权限类型,解惑权限后有“. + t s”问题!

在 CentOS 系统中&#xff0c;权限管理是操作系统的核心功能之一&#xff0c;确保不同用户和进程对文件、目录以及设备的访问被合理控制。 权限系统主要包括传统的 Unix 权限模型、特殊权限&#xff08;SetUID、SetGID、Sticky 位&#xff09;和更精细的访问控制列表&#xff…