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,一经查实,立即删除!

相关文章

Merry Christmas HTML

简单分享 Merry Christmas HTML 设计的核心代码 HTML: <body class"card"> <div class"dialog"><div class"dialog-in"><div class"dialog-msg"><div class"heading">Youve got a post card!…

【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;当一个源的文档和脚…

SSE 流式场景应用 及 方案总结

文章目录 SSE 流式场景前端流式解码应用JavaScript中的EventSource APISSE 与 Axios应用SSE 与 fetch 应用fetch 自己的流式响应代码解释 SSE 流式场景 股票行情实时推送 背景&#xff1a;在金融领域&#xff0c;股票价格是实时变化的。投资者和交易员需要及时获取最新的股票行…

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

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

【ES6复习笔记】集合Set(13)

ES6 提供了新的数据结构 Set&#xff08;集合&#xff09;。它类似于数组&#xff0c;但成员的值都是唯一的&#xff0c;集合实现了iterator接口&#xff0c;所以可以使用『扩展运算符』和『for…of…』进行遍历。 集合的属性和方法 size&#xff1a;返回集合的元素个数。add…

whisper.cpp: PC端测试 -- 电脑端部署音频大模型

whisper.cpp: PC端测试 1.环境需要2.构建项目3.PC测试 1.环境需要 以下是经实验验证可行的环境参考&#xff0c;也可尝试其他版本。 &#xff08;1&#xff09;PC&#xff1a;Ubuntu 22.04.4 &#xff08;2&#xff09;软件环境&#xff1a;如下表所示 工具版本安装Anacond…

NAT的工作原理

NAT&#xff08;Network Address Translation&#xff0c;网络地址转换&#xff09;的工作原理主要是通过修改网络数据包中的IP地址信息来实现的。它允许内部网络使用私有IP地址&#xff0c;同时通过一个或少数几个公共IP地址来接入外部网络&#xff08;通常是Internet&#xf…

安全筑堤,效率破浪 | 统一运维管理平台下的免密登录应用解析

在信息技术迅猛发展的今天&#xff0c;企业运维管理领域正面临着前所未有的复杂挑战。统一运维管理平台作为集中管理和监控IT基础设施的核心工具&#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…

微调大模型时,如何进行数据预处理? 将<input, output>转换为模型所需的<input_ids, labels, attention_mask>

原始训练数据集格式如下&#xff1a; <input, output> 形式&#xff1a;字符 模型训练所需数据格式如下&#xff1a; # tokenizer处理后 return {"input_ids": example,"labels": labels,"attention_mask": example_mask, } 将字符转…

基于websocket实现本地web语音聊天

基于libwebsockets库实现语音聊天 1、关于libwebsocket库自行编译2、client使用htmljs 代码3、服务端代码 1、关于libwebsocket库自行编译 2、client使用htmljs 代码 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"…

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;分别对应于特征…

达梦数据守护搭建

主备库初始化 ./dminit path/dmdata/data db_nameDM01 instance_nameDMSVR01 port_num5236 page_size16 extent_size32 log_size500 case_sensitive1 SYSDBA_PWDDM01SYSDBA ./dminit path/dmdata/data db_nameDM02 instance_nameDMSVR02 port_num5236 page_size16 extent_size3…

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

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