文本处理工具总结:
查看文本文件内容:
cat:
-A|--show-all #显示所有控制符
-n|--number #对显示出的每一行进行编号
-b|--number-nonblank #非空行编号
-s|--squeeze-blank #压缩连续的空行成一行
nl:
显示行号,相当于cat -b
tac:
逆向显示文本内容,行倒序显示
rev:
将同一行的内容逆向显示,同一行倒序
查看非文本文件内容:
hexdump:
[root@ubuntu22]# hexdump /usr/bin/ls|head -n 2
0000000 457f 464c 0102 0001 0000 0000 0000 0000
0000010 0003 003e 0001 0000 6ab0 0000 0000 0000
分页查看文件内容:
more:
more [OPTIONS...] FILE...
可以实现分页查看文件,可以配合管道实现输出信息的分页
常用选项:
-d #在底部显示提示
-s #压缩连续空行
命令选项:
空格键 #翻页
回车键 #下一行
!cmd #执行命令
= #显示行号
less:
less [OPTIONS...] FILE...
less 也可以实现分页查看文件或STDIN输出,less 命令是man命令使用的分页器
常用选项:
-N #显示行号
-s #压缩连续空行
命令选项:
/string #搜索
显示文本前面或后面的行内容:
head:
head [OPTION]... [FILE]...
可以显示文件或标准输入的前面行
常用选项:
-n|--lines=N #指定获取前N行,N如果为负数,表示从文件头取到倒数第N前
tail:
tail [OPTION]... [FILE]...
tail 和head 相反,查看文件或标准输入的倒数行
常用选项:
-f|--follow=descriptor #跟踪显示文件fd新追加的内容,常用日志监控,当删除再新建同名文件,将无法继续跟踪
-n|--lines=N #指定获取后N行,如果写成+N,表示从第N行开始到文件结束
按列抽取文本:
cut 命令可以提取文本文件或STDIN数据的指定列
cut OPTION... [FILE]...
常用选项:
-d|--delimiter=DELIM #指定分割符,默认是tab
-f|--fields=LIST #要显示的列,-f1, -f1,2,3, -f 1-3,4
收集文本统计数据:
wc [OPTION]... [FILE]...
#常用选项
-l|--lines #只计数行数
-w|--words #只计数单词总数
-c|--bytes #只计数字节总数
-m|--chars #只计数字符总数
-L|--max-line-length #显示文件中最长行的长度
文本排序:
sort [OPTION]... [FILE]...
#常用选项
-n|--numeric-sort #以数字大小排序
-t|--field-separator=SEP #指定列分割符
-r|-reverse #倒序
-k|--key=KEYDEF #指定排序列
-u|--unique #去重
去重:
uniq [OPTION]... [INPUT [OUTPUT]]
#常见选项
-c|--count #显示每行出现次数
-d|--repeated #仅显示有重复行
-D #显示所有重复行具体内容
-u|--unique #仅显示不重复的行
grep总结:
作用:文本搜索工具,根据用户指定的 “模式” 对目标文本逐行进行匹配检查;打印匹配到的行
模式:由正则表达式字符及文本字符所编写的过滤条件
格式:
grep [OPTIONS...] PATTERN [FILE...]
#常用选项
-E|--extended-regexp #使用ERE,相当于egrep
-v|--invert-match #显示没有被匹配上的行,即取反
脱水
[root@ubuntu ~]# grep -Ev '^$|#' /etc/fstab
/dev/disk/by-id/dm-uuid-LVM-HKF80PEEHngcPAwMCGVHYNNtk6PsJg2YfKfb6hrRNHH93HGvLGLwnGXQCLTlm4Le / ext4 defaults 0 1
/dev/disk/by-uuid/04e1098b-d88f-4d9b-9888-61eeec1c3945 /boot ext4 defaults 0 1
/swap.img none swap sw 0 0
-i|--ignore-case #忽略字符大小写
忽略字符大小写
[root@ubuntu ~]# grep -i ROOt /etc/passwd
root:x:0:0:root:/root:/bin/bash
-n|--line-number #显示匹配的行号
显示匹配的行号
[root@ubuntu ~]# grep -n bash /etc/passwd
1:root:x:0:0:root:/root:/bin/bash
34:mmy:x:1000:1000:mmy:/home/mmy:/bin/bash
-o|--only-matching #仅显示匹配到的字符串
仅显示匹配到的字符串
[root@ubuntu ~]# grep -o root /etc/passwd
root
root
root
正则表达式相关:
字符匹配
. #任意单个字符
[wang] #指定范围的字符
[^wang] #不在指定范围的字符
[:alnum:] #字母和数字
[:alpha:] #代表任何英文大小写字符,亦即 A-Z, a-z
[:lower:] #小写字母,示例:[[:lower:]],相当于[a-z]
[:upper:] #大写字母
[:blank:] #空白字符(空格和制表符)
[:space:] #水平和垂直的空白字符(比[:blank:]包含的范围广)
[:cntrl:] #不可打印的控制字符(退格、删除、警铃...)
[:digit:] #十进制数字
[:xdigit:] #十六进制数字
[:graph:] #可打印的非空白字符
[:print:] #可打印字符
[:punct:] #标点符号
匹配次数
* #匹配前面字符任意次
? #0或1次
+ #1次或多次
{n} #匹配n次
{m,n} #至少m,至多n次
位置锚定
^ #行首
$ #行尾
\<, \b #词首
\>, \b #词尾
分组其它
() 分组 #后向引用:\1, \2, ... 注意: \0 表示正则表达式匹配的所有字符
| #或者
a|b #a或b
C|cat #C或cat
(C|c)at #Cat或cat
变量总结:
变量赋值是临时生效,当退出终端后,变量会自动删除,无法持久保存,脚本中的变量会随着脚本结束,也会自动删除
Shell中变量命名法则:
区分大小写
不能使程序中的保留字和内置变量:如:if, for
只能使用数字、字母及下划线,且不能以数字开头,注意:不支持短横线 “ - ”,和主机名相反
命名习惯
见名知义,用英文单词命名,并体现出实际作用,不要用简写,如:ATM
变量名大写
局部变量小写
函数名小写
大驼峰StudentFirstName,由多个单词组成,且每个单词的首字母是大写,其它小写
小驼峰studentFirstName ,由多个单词组成,第一个单词的首字母小写,后续每个单词的首字母是大写,其它小写
下划线: student_first_name
变量的生效范围等标准划分变量类型
普通变量:生效范围为当前shell进程;对当前shell之外的其它shell进程,包括当前shell的子shell 进程均无效
环境变量:生效范围为当前shell进程及其子进程
本地变量:生效范围为当前shell进程中某代码片断,通常指函数
环境变量:
可以使子进程(包括孙子进程)继承父进程的变量,但是无法让父进程使用子进程的变量
一旦子进程修改从父进程继承的变量,将会新的值传递给孙子进程
一般只在系统配置文件中使用,在脚本中较少使用
声明并赋值
export name=VALUE
declare -x name=VALUE
只读变量:
只读变量:只能声明定义,但后续不能修改和删除,即常量
声明只读变量:
readonly name
declare -r name
位置变量:
位置变量:在bash shell中内置的变量, 在脚本代码中调用通过命令行传递给脚本的参数
$1,$2,... #对应第1个、第2个等参数,shift [n]换位置
$0 #命令本身,包括路径
$* #传递给脚本的所有参数,全部参数合为一个字符串
$@ #传递给脚本的所有参数,每个参数为独立字符串
$# #传递给脚本的参数的个数
#注意:$@ $* 只在被双引号包起来的时候才会有差异
sehll总结:
[] 中的表达式,前后要有空格
当使用正则表达式或通配符使用[[ ]],其它情况一般使用 [ ]
-e和-a 表示判断文件的存在性,建议使用-e
脚本中一旦遇到exit命令,脚本会立即终止;终止退出状态取决于exit命令后面的数字
如果exit后面无数字,终止退出状态取决于exit命令前面命令执行结果
如果没有exit命令,即未给脚本指定退出状态码,整个脚本的退出状态码取决于脚本中执行的最后一 条命令的状态码
鸡兔同笼
#!/bin/bash
while true;do
read -p "输入鸡和兔有多少个头?" HEAD
if [[ "$HEAD" =~ [^0-9]+ ]] || [[ $HEAD < 2 ]];then
echo "输入有误,请输入数字,并且至少要有2个头"
else
echo "鸡和兔共有$HEAD个头"
break
fi
done
while true;do
read -p "输入鸡和兔有多少条退?" FEET
if [[ "$FEET" =~ [^0-9]+ ]] || [[ $FEET < 6 ]];then
echo "输入有误,请输入数字,并且至少要有6条退"
else
echo "鸡和兔共有$FEET条退"
break
fi
done
echo "计算中..."
rabbit=$[ (FEET-HEAD-HEAD)/2 ]
cock=$[ HEAD-rabbit ]
sleep 1
echo "兔子有$rabbit只"
echo "鸡有$cock只"
[root@ubuntu22 1217]# ./jitu.sh
输入鸡和兔有多少个头?30
鸡和兔共有30个头
输入鸡和兔有多少条退?80
鸡和兔共有80条退
计算中...
兔子有10只
鸡有20只
批量创建用户
#!/bin/bash
2 for i in {1..10};do
3 #echo $i
4 id user$i &> /dev/null
5 if [ $? == 1 ];then
6 echo "user$i不存在,创建用户user$i"
7 echo -e "12345\n12345"|useradd -m user$i
8 echo "user$i,创建完成!"
9 else
10 echo "user$i,已存在!"
11 fi
12 done
磁盘管理总结:
硬盘存储术语 CHS
磁头 | head | 一个盘面对应一个磁头 |
磁道 | track | 盘面上的每一圈就是一个磁道 |
扇区 | sector | 把每个磁道按512bytes大小再进行划分,这就是扇区,每个磁道上的扇区数量是不一样的 |
柱面 | cylinder | 磁头移动的时候,是一起移动,如果是6个盘面,则6个磁头对应的磁道是一致的,这就是柱面 |
MBR分区:
MBR分区中一块硬盘最多有4个主分区,也可以3主分区+1扩展(N个逻辑分区)
MBR分区:主和扩展分区对应的1--4,/dev/sda3,逻辑分区从5开始,/dev/sda5
分区管理命令:fdisk
fdisk [options]
fdisk [options] -l [disk]
显示所有设备 fdisk -l
显示指定设备 fdisk -l /dev/sda
#常用子命令
p #输出分区列表
t #更改分区类型
n #创建新分区
d #删除分区
v #校验分区
u #转换单位
w #保存并退出
q #不保存并退出
x #高级功能(专家模式)
GPT分区:
支持128个分区,使用64位,支持 8Z( 512Byte/block )64Z ( 4096Byte/block)
使用128位UUID(Universally Unique Identifier) 表示磁盘和分区,GPT分区表自动备份在头和尾两份, 并有CRC校验位
UEFI (Unified Extensible Firmware Interface 统一可扩展固件接口)硬件支持GPT,使得操作系统可以启动
分区管理命令:gdisk
gdisk [ -l ] device常用子命令
b #备份分区表到指定文件
c #修改分区名
d #删除分区
i #显示分区详细信息
l #列出所有分区类型
n #新建分区
o #创建新的分区表
p #查看分区
q #退出
r #恢复和转换选项,非专业人士勿用
s #排序
t #修改分区类型,默认 8300,表示普通分区
v #检测硬盘是否有问题
w #保存退出
x #额外功能,专家模式
同步分区表:partprobe
文件系统总结:
文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构;即在存储设备上组织文件的方法。
操作系统中负责管理和存储文件信息的软件结构称为文件管理系统,简称文件系统
从系统角度来看,文件系统是对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护和检索的系统。具体地说,它负责为用户建立文件,存入、读出、修改、转储文件,控制文件的存取,安全控制,日志,压缩,加密等。
常用的文件系统特性:
FAT32
最多只能支持16TB的文件系统和4GB的文件
NTFS
最多只能支持16EB的文件系统和16EB的文件
EXT3
最多只能支持32TB的文件系统和2TB的文件,实际只能容纳2TB的文件系统和16GB的文件
Ext3目前只支持32000个子目录
Ext3文件系统使用32位空间记录块数量和 inode数量
当数据写入到Ext3文件系统中时,Ext3的数据块分配器每次只能分配一个4KB的块
EXT4
EXT4是Linux系统下的日志文件系统,是EXT3文件系统的后继版本
Ext4的文件系统容量达到1EB,而支持单个文件则达到16TB
理论上支持无限数量的子目录
Ext4文件系统使用64位空间记录块数量和 inode数量
Ext4的多块分配器支持一次调用分配多个数据块
修复速度更快
XFS
根据所记录的日志在很短的时间内迅速恢复磁盘文件内容
用优化算法,日志记录对整体文件操作影响非常小
是一个全64-bit的文件系统,最大可以支持8EB的文件系统,而支持单个文件则达到8EB
能以接近裸设备I/O的性能存储数据
文件系统管理:
创建文件系统:
mkfs
mkfs [options] [-t
点击查看代码
创建ext4 文件系统
#mkfs.ext4 /dev/sdc1 等同于 mkfs -t ext4 /dev/sdc1
[root@ubuntu2204 ~]# mkfs.ext4 /dev/sdc1
创建xfs文件系统
[root@ubuntu2204 ~]# mkfs.xfs /dev/sdc2
mke2fs
ext系列文件系统专用管理工具
mke2fs [OPTION]... DEVICE
-t #指定文件系统类型 {ext2|ext3|ext4|xfs}
点击查看代码
[root@ubuntu ~]# mke2fs -t ext4 /dev/sdb1
mke2fs 1.47.0 (5-Feb-2023)
Creating filesystem with 2621440 4k blocks and 655360 inodes
Filesystem UUID: 717e5aaa-0d9b-4f84-a46b-cbb18efc0639
Superblock backups stored on blocks:
32768, 98304, 163840, 229376, 294912, 819200, 884736, 1605632
Allocating group tables: done
Writing inode tables: done
Creating journal (16384 blocks): done
Writing superblocks and filesystem accounting information: done
列出块设备:
lsblk
lsblk [options] [device ...]
常用选项
-f|--fs #显示文件系统
点击查看代码
[root@ubuntu ~]# lsblk -f /dev/sdb1
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb1 ext4 1.0 717e5aaa-0d9b-4f84-a46b-cbb18efc0639
查看和管理分区信息:
blkid
查看块设备属性信息
blkid [OPTION]... [DEVICE]
点击查看代码
[root@ubuntu ~]# blkid |grep sdb
/dev/sdb1: UUID="717e5aaa-0d9b-4f84-a46b-cbb18efc0639" BLOCK_SIZE="409UUID="983eb902-a632-4229-aafb-ecc09b1df2f9"
挂载和卸载:
挂载:将额外文件系统与根文件系统某现存的目录建立起关联关系,进而使得此目录做为其它文件访问入口的行为
卸载:为解除此关联关系的过程
把设备关联挂载点:mount Point
挂载点下原有文件在挂载完成后会被临时隐藏,因此,挂载点目录一般为空 进程正在使用中的设备无法被卸载
挂载:mount
mount device mountpoint
device:指明要挂载的设备
设备文件:例如:/dev/sda5
卷标:-L 'LABEL', 例如 -L 'MYDATA'
UUID: -U 'UUID':例如 -U '0c50523c-43f1-45e7-85c0-a126711d406e'
伪文件系统名称:proc, sysfs, devtmpfs, configfs
mountpoint:挂载点目录必须事先存在,建议使用空目录
点击查看代码
[root@ubuntu /]# mount /dev/sdb1 /1216
[root@ubuntu /]# lsblk -f /dev/sdb1
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb1 ext4 1.0 717e5aaa-0d9b-4f84-a46b-cbb18efc0639 9.2G 0% /1216
卸载:umount
设备卸载
umount /dev/sdb1
挂载点卸载
umount /1216
持久挂载
将挂载保存到 /etc/fstab 中可以下次开机时,自动启用挂载
点击查看代码
查看UUID:
[root@ubuntu ~]# blkid /dev/sdb1
/dev/sdb1: UUID="717e5aaa-0d9b-4f84-a46b-cbb18efc0639" BLOCK_SIZE="4096" TYPE="ext4" PARTLABEL="Linux filesystem" PARTUUID="983eb902-a632-4229-aafb-ecc09b1df2f9"
[root@ubuntu ~]# vim /etc/fstab
添加下列信息
/dev/disk/by-uuid/717e5aaa-0d9b-4f84-a46b-cbb18efc0639 /1216 ext4 defaults 0 0
添加新的挂载项,需要执行下面命令生效
此命令只针对文件新增行或删除行有效,如果在中间修改了挂载选项,则此命令无效
mount -a
[root@ubuntu ~]# lsblk -f /dev/sdb
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
sdb
└─sdb1 ext4 1.0 717e5aaa-0d9b-4f84-a46b-cbb18efc0639 9.2G 0% /1216
新添加硬盘流程:
①:添加硬盘不重启识别
grep mptspi /sys/class/scsi_host/host*/proc_name
echo '- - -' > /sys/class/scsi_host/host32/scan
②:硬盘分区
gidk /dev/sdb
③:格式化创建文件系统
mkfs.ext4 /dev/sdb
④:挂载
mount /dev/sdb /1216
标签:...,运维,--,分区,文件系统,dev,第二周,菜鸡,root From: https://www.cnblogs.com/giantmoon/p/17887160.html