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 时运行

功能:

        创建自动备份

        清除临时文件

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C语言程序设计——选择结构程序设计】预测你的身高(头歌实践教学平台习题)【合集】

目录&#x1f60b; 任务描述 相关知识 1、输入数值 2、选择结构语句 3、计算结果并输出 编程要求 测试说明 通关代码 测试结果 任务描述 本关任务&#xff1a;编写一个程序&#xff0c;该程序需输入个人数据&#xff0c;进而预测其成年后的身高。 相关知识 为了完成本…

【自动化测试】windows下安装Selenium浏览器界面测试工具

Date: 2024.12.23 10:15:53 author: lijianzhan 简述&#xff1a;这篇教程详细介绍了如何在Windows环境下安装selenium&#xff0c;并设置Chrome浏览器驱动。什么是Selenium&#xff1f;Selenium是一个基于浏览器的自动化测试工具&#xff0c;它提供了一种跨平台、跨浏览器的端…

前端网络之【浏览器跨域问题分析与解决方案】

文章目录 同源策略同源与异源跨域的限制场景解决方案 CORS 请求分类 简单请求预检请求 注意点一 【关于Cookie】注意点二 【关于跨域获取响应头】 JSONP 基本流程 代理服务器 如何选择对应方案 同源策略 **同源策略是一套浏览器的安全策略机制&#xff0c;当一个源的文档和脚…

老旧小区用电安全保护装置#限流式防火保护器参数介绍#

摘要 随着居民住宅区用电负荷的增加&#xff0c;用电安全问题日益突出&#xff0c;火灾隐患频繁发生。防火限流式保护器作为一种新型电气安全设备&#xff0c;能够有效预防因电气故障引发的火灾事故。本文介绍了防火限流式保护器的工作原理、技术特点及其在居民住宅区用电系统…

论文复刻:ESG表现对企业价值的影响机制研究——A股上市公司证据(2009-2023年)

参照王波&#xff08;2022&#xff09;的做法&#xff0c;对来自软科学《ESG表现对企业价值的影响机制研究——来自我国A股上市公司的经验证据》一文中的基准回归部分进行复刻 以中国2009-2023年A股上市公司为研究样本考察企业的环境、社会和治理&#xff08;ESG&#xff09;表…

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

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

[2003].第2-01节:关系型数据库表及SQL简介

所有博客大纲 后端学习大纲 MySQL学习大纲 1.数据库表介绍&#xff1a; 1.1.表、记录、字段 1.E-R&#xff08;entity-relationship&#xff0c;实体-联系&#xff09;模型中有三个主要概念是&#xff1a; 实体集 、 属性 、 联系集2.一个实体集&#xff08;class&#xff09…

git推送本地仓库到远程(Gitee)

目录 一、注册创建库 二、创建仓库 三、推送本地仓库到远程 1.修改本地仓库用户名和邮箱 2.本地库关联远程仓库 3.拉取远程仓库的文件 4.推送本地库的文件 5.查看远程仓库 四、远程分支查看 1.查看远程分支 2.修改test.txt文件 一、注册创建库 Gitee官网&#xff1…

GoZero框架接入数据库引擎Gorm 并实战:构建简单的 CRUD 业务API

GoZero 是一个高性能的微服务框架&#xff0c;它基于 Go 语言开发&#xff0c;提供了丰富的工具支持&#xff0c;能够帮助开发者快速构建可扩展、易维护的应用。Gorm 是 Go 语言中常用的 ORM 库&#xff0c;它帮助我们简化数据库操作&#xff0c;使用面向对象的方式进行增删改查…

KNN分类算法 HNUST【数据分析技术】(2025)

1.理论知识 KNN&#xff08;K-Nearest Neighbor&#xff09;算法是机器学习算法中最基础、最简单的算法之一。它既能用于分类&#xff0c;也能用于回归。KNN通过测量不同特征值之间的距离来进行分类。 KNN算法的思想&#xff1a; 对于任意n维输入向量&#xff0c;分别对应于特征…

探索Flink动态CEP:杭州银行的实战案例

摘要&#xff1a;本文撰写自杭州银行大数据工程师唐占峰、欧阳武林老师。将介绍 Flink 动态 CEP的定义与核心概念、应用场景、并深入探讨其技术实现并介绍使用方式。主要分为以下几个内容&#xff1a; Flink动态CEP简介 Flink动态CEP的应用场景 Flink动态CEP的技术实现 Flin…

打造高效租赁小程序让交易更便捷

内容概要 在如今节奏飞快的商业世界里&#xff0c;租赁小程序如同一只聪明的小狐狸&#xff0c;迅速突围而出&#xff0c;成为商家与消费者之间的桥梁。它不仅简化了交易流程&#xff0c;还在某种程度上将传统租赁模式带入了互联网时代。越来越多的企业意识到&#xff0c;这种…

【MinIO系列】MinIO Client (mc) 完全指南

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Jmeter录制https请求

jmeter 5.5版本&#xff0c;chrome浏览器 1、首先添加Test Plan-Thread Group-HTTP(S) Test Script Recorder 2、设置HTTP(S) Test Script Recorder界面的Port&#xff08;监听端口&#xff0c;设置浏览器代理时需要与这里保持一致&#xff09;、HTPS Domains&#xff08;录制…

前端最新Vue2+Vue3基础入门到实战项目全套教程,自学前端vue就选黑马程序员,一套全通关!

Vue 快速上手 Vue概念 Vue 是一个用于构建用户界面的渐进式框架 构建用户界面&#xff1a;基于数据渲染出用户看到的页面 渐进式&#xff1a;循序渐进 框架&#xff1a;一套完整的项目解决方案 Vue 的两种使用方式: ① Vue 核心包开发 场景:局部 模块改造 ② Vue 核心包 &am…

基于Spring Boot的高校请假管理系统

一、系统背景与意义 随着高校规模的扩大和学生数量的增加&#xff0c;传统的请假管理方式已经难以满足高校管理的需求。人工请假流程繁琐、耗时长&#xff0c;且容易出现信息错误或遗漏。因此&#xff0c;开发一套基于Spring Boot的高校请假管理系统具有重要意义&#xff0c;它…

Gate.io 平台通证 GT:持续赋能与销毁、财富效应显著

在瞬息万变的加密市场中&#xff0c;每一轮牛熊转换都在加速 CEX 市场的一轮又一轮洗牌&#xff0c;这也使得该赛道的格局始终处于动态的变化。而在本轮牛市中&#xff0c;CEX 赛道也正在从最初的三大领衔变成了多强角逐&#xff0c;而 Gate.io 作为创立 11 余年的老牌交易平台…

WebRTC音视频同步原理与实现详解(下)

WebRTC音视频同步原理与实现详解&#xff08;上&#xff09; 第四章、音视频同步实现详解 4.1 音视频同步标准 音视频做到什么程度才算是同步呢&#xff1f; 关于音画同步, 业界有3个标准&#xff1a; 1&#xff09;ITU-R BT.1359&#xff08;1998&#xff09;&#xff1a…

1.系统学习-线性回归

系统学习-线性回归 前言线性回归介绍误差函数梯度下降梯度下降示例 回归问题常见的评价函数1. MAE, mean absolutely error2. MSE, mean squared error3. R square &#xff08;决定系数或R方&#xff09; 机器学习建模流程模型正则化拓展阅读作业 链接: 2.系统学习-逻辑回归 …

Oracle 日常巡检

1. 检查服务器状态 1.1. CPU使用情况 1.1.1. top top 命令是 Linux 和 Unix 系统中用于显示实时系统状态的工具&#xff0c;特别是对于监控 CPU 和内存的使用非常有用。 在命令行中输入 top&#xff0c;top 会显示一个实时更新的界面&#xff0c;其中包含系统的关键指标&am…