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=80if [ $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,避免缓存。注意事项:
dd命令的危险性:因为dd是低级别的文件复制工具,它没有检查文件类型的功能。所以在操作磁盘或设备时要非常小心,错误的if或of参数可能会导致数据丢失。使用前务必确认目标文件或设备。- 进度显示:如果你在执行
dd时需要查看进度,可以使用status=progress来显示命令执行的进度信息。例如:
dd if=/dev/sda of=backup.img bs=64K status=progress- 备份和恢复:
dd是非常强大的工具,适用于磁盘、分区级别的备份和恢复。总结:
dd是一个强大的工具,适用于处理低级数据复制、备份、磁盘镜像等任务。- 需要小心使用,因为它会直接读取和写入设备数据,没有文件系统层面的保护,错误操作可能导致数据丢失。
grep 命令
grep是一个在 Unix 和类 Unix 系统中广泛使用的命令行工具,用于从输入中查找与指定模式(通常是正则表达式)匹配的行。它的名字来自 "Global Regular Expression Print",即全局正则表达式打印。基本语法:
grep [选项] '模式' [文件...]
'模式':要匹配的正则表达式或字符串。
[文件...]:要搜索的一个或多个文件。如果不指定文件,grep会从标准输入(通常是终端或管道)中读取数据。常见选项:
-i:忽略大小写匹配。
grep -i 'pattern' file:匹配不区分大小写的模式。
-v:反向匹配(invert match),显示不包含指定模式的行。
grep -v 'pattern' file:显示不包含模式pattern的行。
-r或-R:递归地搜索目录中的文件。
grep -r 'pattern' /path/to/dir:递归地在/path/to/dir目录下的所有文件中查找匹配的内容。
-l:仅显示包含匹配模式的文件名。
grep -l 'pattern' file1 file2:列出包含匹配模式的文件名。
-L:仅显示不包含匹配模式的文件名。
grep -L 'pattern' file1 file2:列出不包含匹配模式的文件名。
-n:显示匹配行的行号。
grep -n 'pattern' file:显示匹配的行以及行号。
-H:显示匹配行的文件名。
grep -H 'pattern' file:显示匹配的行及文件名。
-c:只显示匹配模式的行数。
grep -c 'pattern' file:显示文件中匹配的行数。
-w:匹配整个单词,避免部分匹配。
grep -w 'pattern' file:只匹配包含pattern的单独单词。
-x:匹配整行。
grep -x 'pattern' file:仅匹配完全与模式pattern相等的行。
-A <num>:显示匹配行及其后面的<num>行。
grep -A 3 'pattern' file:显示匹配行以及接下来的 3 行。
-B <num>:显示匹配行及其前面的<num>行。
grep -B 3 'pattern' file:显示匹配行以及前面的 3 行。
-C <num>:显示匹配行及其前后<num>行。
grep -C 3 'pattern' file:显示匹配行以及前后各 3 行。使用示例:
1. 搜索一个文件中的字符串
查找文件
file.txt中是否包含字符串hello:
grep 'hello' file.txt2. 忽略大小写的搜索
查找文件
file.txt中的hello,不区分大小写:
grep -i 'hello' file.txt3. 反向匹配
查找文件
file.txt中不包含hello的行:
grep -v 'hello' file.txt4. 递归搜索目录中的文件
递归地在目录
/home/user/下查找包含pattern的文件:
grep -r 'pattern' /home/user/5. 显示行号
查找文件
file.txt中包含hello的行并显示行号:
grep -n 'hello' file.txt6. 显示匹配的文件名
查找多个文件中包含
pattern的文件名:
grep -l 'pattern' file1.txt file2.txt7. 匹配整个单词
查找文件
file.txt中完全匹配hello的行,而不是包含hello的部分匹配:
grep -w 'hello' file.txt8. 显示匹配行及其前后 2 行
查找
pattern并显示匹配行及其前后各 2 行:
grep -C 2 'pattern' file.txt9. 查找多行匹配模式并显示行数
查找文件
file.txt中包含pattern的行数:
grep -c 'pattern' file.txt10. 显示所有包含匹配模式的行和文件名
查找当前目录及子目录下的所有
.txt文件中包含pattern的行,并显示文件名:
grep -H 'pattern' *.txt正则表达式支持:
grep支持强大的正则表达式功能,使得它可以匹配复杂的模式。基本正则表达式(BRE)和扩展正则表达式(ERE)都可以在grep中使用:
基本正则表达式(BRE):
grep默认使用基本正则表达式。
扩展正则表达式(ERE):使用
grep -E来启用扩展正则表达式(如+、?、|等特殊字符)。例如,使用扩展正则表达式(ERE)查找包含
cat或dog的行:
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 时运行
功能:
创建自动备份
清除临时文件