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 编码。示例:
- 创建一个文件的镜像
将整个磁盘(如
/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,通常较大的块大小能够提高复制效率。
- 创建一个文件的备份
将一个普通文件(如
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 数据。
- 创建磁盘的镜像备份并压缩
可以将磁盘内容通过
dd
命令创建镜像,并直接通过管道将其压缩:
dd if=/dev/sda | gzip > backup.img.gz
- 这条命令将磁盘
/dev/sda
的数据通过dd
命令复制并压缩成backup.img.gz
文件。
- 备份整个硬盘的第一个分区(如
/dev/sda1
)到文件
dd if=/dev/sda1 of=/backup/sda1.img bs=4M
- 这将会从
/dev/sda1
读取数据,并将其保存为sda1.img
。
- 复制硬盘并调整分区
你可以使用
dd
复制一个硬盘的整个内容(包括分区表),例如将/dev/sda
的内容复制到/dev/sdb
:
dd if=/dev/sda of=/dev/sdb bs=64K conv=noerror,sync
conv=noerror,sync
:即使遇到读错误也继续复制,并将输入块填充到指定大小。
- 从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
:显示命令的执行进度。
- 检查磁盘的读取速度
使用
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 行。使用示例:
- 搜索一个文件中的字符串
查找文件
file.txt
中是否包含字符串hello
:
grep 'hello' file.txt
- 忽略大小写的搜索
查找文件
file.txt
中的hello
,不区分大小写:
grep -i 'hello' file.txt
- 反向匹配
查找文件
file.txt
中不包含hello
的行:
grep -v 'hello' file.txt
- 递归搜索目录中的文件
递归地在目录
/home/user/
下查找包含pattern
的文件:
grep -r 'pattern' /home/user/
- 显示行号
查找文件
file.txt
中包含hello
的行并显示行号:
grep -n 'hello' file.txt
- 显示匹配的文件名
查找多个文件中包含
pattern
的文件名:
grep -l 'pattern' file1.txt file2.txt
- 匹配整个单词
查找文件
file.txt
中完全匹配hello
的行,而不是包含hello
的部分匹配:
grep -w 'hello' file.txt
- 显示匹配行及其前后 2 行
查找
pattern
并显示匹配行及其前后各 2 行:
grep -C 2 'pattern' file.txt
- 查找多行匹配模式并显示行数
查找文件
file.txt
中包含pattern
的行数:
grep -c 'pattern' file.txt
- 显示所有包含匹配模式的行和文件名
查找当前目录及子目录下的所有
.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 时运行
功能:
创建自动备份
清除临时文件