十五、文件类型、查找、打包压缩
0. 文件系统
1)文件系统
- 目录项:文件名指向inode
- inode表:inode指向数据块
- 数据块block
查看文件系统
查看inode:df -i
查看block:df -h
创建虚拟文件系统
dd if=/dev/sda of=/dev/sdb bs=612 count=10240
来源 生成文件系统 block大小 快个数
2)格式化原理
- 创建文件系统后:划分inode、block
- inode(存储block数据的信息)除文件名
- inode编号
- 属主
- 属组
- 类型
- 权限
- 时间
- 大小
- 文件真正内容的指针
- …
- block(存储数据)
- inode(存储block数据的信息)除文件名
inode:用来记录文件属性和指针
inode位图:用来记录哪个空
block位图:用来记录哪个空
3)命令的底层原理
-
硬链接:多个文件名对应一个inode
- 特点:无法跨文件系统,不可以引用目录、不存在文件,删除硬链接文件不影响其他相同inode号的文件
-
软链接:本身是一个文件,存储了目标文件的完整路径
- 特点:可以跨文件系统、引用目录、引用不存在的文件
-
cp:分配一个空闲的inode号,在inode表中生成新条目,在目录中创建一个目录项,将名称与inode编号关联,拷贝数据生成新的文件。
-
rm:数据链接数递减,从而释放inode号,并且inode号可以被重用,把数据块放在空闲列表中,删除目录项,数据实际上不会马上被删除,但当另一个文件使用数据块时将被会被覆盖
-
mv:
- 同一分区:用新的文件名创建对应新的目录项,删除旧目录条目对应的旧的文件名,并不影响inode表(除时间戳)或磁盘上的数据位置,也就是说没有数据被移动。
- 不同分区: mv就相当于cp和rm。
1. 文件的基础信息
ls -lih /etc
# 总用量 1.1M
# 51132238 drwxr-xr-x. 3 root root 101 2月 09:54 abrt
# 16918723 -rw-r--r--. 1 root root 16 2月 09:31 adjtime
# 16815120 -rw-r--r--. 1 root root 12K 2月 09:55 aliases.db
# 50354139 drwxr-xr-x. 2 root root 261 2月 09:56 alternatives
inode 类型和权限 硬链接 属主 属组 大小 月 时间 名称
- inode(索引节点):文件的唯一标识
- 类型和权限:11个字符,第一个字符为文件类型,9个字符为文件对应权限
- "."为和selinux有关的标识
- 硬链接数
- 属主:文件的拥有者
- 属组:文件的拥有组
- 大小
- 月
- 时间
- 文件名
2. 文件类型
- Linux系统重,一切皆文件
文件类型符号 | 代表意义 |
---|---|
- | 普通文件(纯文本、二进制文件、数据文件等) |
d | directory 目录 |
l | link 符号链接、软连接 |
c | character 字符设备文件(串口、设备) |
b | block 块设备文件(硬盘、光驱) |
s | socket 套接字文件(网络通信中的数据连接) |
p | pipe 管道文件 |
1)- 普通文件
创建:touch、vim、echo 、cat
拷贝、移动:cp、mv
删除:rm
2)d 目录
创建: mkdir -p
复制:cp -a/-r
删除: rm -fr
3. 文件及目录的查找
1)find 查找目录下的文件
选项 | 作用 |
---|---|
! | 取反(需要进行转义) |
-a | 并且 |
-o | 或 |
-name | 按照文件名查找文件 |
-inam | 按照文件名查找文件(忽略大小写) |
-type | 根据文件类型进行搜索(f:文件、d:目录) |
-perm | 按照文件权限来查找文件 |
-user | 按照文件属主来查找文件。 |
-group | 按照文件所属的组来查找文件。 |
-fprint | 文件名:将匹配的文件输出到文件。 |
-exec | 对查找后的进行处理 {} ;({}为查找出的内容,对分号转义) |
-mtime | 按修改时间查找 |
-size | 按文件大小查找 |
-atime | 一定时间内被访问的文件 |
#案例1. 根据名字查找 -name 家目录的oldboy.txt文件
find ~ -name "oldboy.txt"
路径 名字参数 具体文件
#案例2. 模糊查找 *表示所有
find / -name "*y*"
#案例3. 按文件类型查找 -type (默认为 -a)
find / -type f -name "oldbot*"
#案例4. 按文件类型查找 -type -o或者
find / -type d -o -name "oldbot*"
#案例5. -exec 对查找后的进行处理
find /data -type f -exec ls -l {} \;
#案例6. -mtime 按修改时间进行查找
find /data -type d -mtime +5 -nmae '*.log'
#案例7. 按文件属性、属组找
find /home -user jack //属主是jack的文件
find /home -group hr //属组是hr组的文件
#案例8. 按文件大小
find /etc -size +5M //大于5M
find /etc -size 5M //等于5M
find /etc -size -5M //小于5M
4. 文件打包压缩
选项 | 作用 |
---|---|
-z | 通过gzip压缩或解压 |
-c | 创建新的tar包 |
-v | 输出tar命令执行过程 |
-f | 指定压缩文件名字 |
-t | 不解压查看tar包内容 |
-C | 指定解压路径 |
-x | 解压tar包 |
-h | 跟随软链接 |
#案例1. 指定压缩文件名字
tar zcvf /opt/data.tar.gz ./data
#案例2. 不解压查看内容
tar tf /opt/data.tar.gz
#案例3. 对文件进行解压
tar zxvf /opt/data.tar.gz
#案例4. 指定解压路径
tar zxvf /opt/data.tar.gz -C /tmp/
十六、用户管理
1. UID用户号
uid号 | 用户 |
---|---|
0 | 特权用户 |
1~499 | 系统用户 |
1000+ | 普通用户 |
2. 用户分类
- 超级管理员(UID=0):root
- UID为0
- 虚拟用户(UID=1-1000):实际存在的用户,但不允许其登录
- 满足文件或进程运行的属主要求
- 普通用户(UID=1001~):实际存在,允许其登录。管理员创建的,帮助管理员管理系统
- 权限仅仅限制在家目录,在系统级目录可以读不可写,不可进入/root目录
3. 用户管理
1) 用户管理命令
管理操作 | 命令 |
---|---|
创建用户 | useradd user01 |
切换用户 | su - user01 |
查询用户信息 | id user01 |
指定UID | useradd user02 -u(指定UID)1503 -d(指定家目录名称)/home/user02 -s(指定shell类型)/bin/sh -g(指定组)boss -M(不创建家目录) |
删除用户 | usrdel -f(强制删除)-r(同时删除文件) user01 |
修改密码 | root修改其他用户密码:passwd user02,用户user02修改自己的密码:passwd |
修改登录的shell | usermod -u(修改用户号)-d(修改登录目录) /home/user 1020 -s /sbin/nologin user02 -M(不创建家目录) |
2) 用户相关文件
用户相关文件 | 作用 |
---|---|
/etc/passwd | 用户所在文件 |
/etc/shadow | 用户密码所在 |
3)/etc/passwd的内容介绍
不给解释器,即无法登陆(/sbin/nologin)
4)/etc/shadow的内容介绍
4. 组分类
- 基本组:随用户创建、自动创建的同名组
- 显示在/etc/passwd
- 附加组:用户加入的其他组
# 案例1. 修改基本组
usermod BBB -g CCC
# 案例2. 修改附加组
usermod BBB -G CCC
5. 组管理
1)组管理操作命令
管理操作 | 命令 |
---|---|
创建组 | groupadd -g(指定组号)2002 hr |
指定GID | groupadd net01 -g 2000 |
删除组 | groupdel net01 |
修改组信息 | groupmod -g 152 DDD |
查看组net01信息:grep ‘net01’ /etc/group |
2)组相关文件
组相关文件 | 作用 |
---|---|
/etc/group | 用户组所在文件 |
/etc/gshadow | 用户组密码所在 |
3)/etc/gruop文件介绍
4)/etc/gshadow文件介绍
6. 文件权限
1)文件属性含义
# (共11位,中间9位为文件权限,3位一组)
d rwx r-x r-x . 2 root root
类型 属主权 属组权 其他人权 属主 属组
2)符号含义
-
权限对象:(所有:a)
- 属主:u
- 属组:g
- 其他人:o
-
权限类型:
- 读:r=4
- 写:w=2
- 执行:x=1
若要rwx属性则4+2+1=7
若要rw-属性则4+2=6
若要r-x属性则4+1=5
类别 | 默认权限 | (umask默认022) |
---|---|---|
文件 | 644 | (文件所有者默认具备可读可写权限,用户组和其他用户只有可读权限) |
目录 | 755 | (目录文件所有者拥有读、写、执行所有权限,所在用户组和其他用户只有读和执行权限) |
3)特殊符号含义
特殊符号 | 作用 | 对应数字 |
---|---|---|
suid | 让普通用户临时拥有该文件的属主的执行权限,suid权限只能应用在二进制可执行文件(命令)上 | 4 |
sgid | sgid权限一般应用在目录上,当一个目录拥有sgid权限时,任何用户在该目录下创建的文件的属组都会继承该目录的属组。 | 2 |
sticky | sticky权限一般针对目录来设置,作用是只允该目录下的文件的创建者删除自己的创建的文件,不允许其他人删除文件。 | 1 |
4)更改文件权限
- chmod 对象(u/g/o/a) 赋值符(+/-/=) 权限类型(r:4/w:2/x:1) 文件/目录
#案例1. 增加属主执行权
chmod u+x file1
#执行文件
./file1
#案例2. 去除属主执行权
chmod u-x file1
#案例3. 使用数字赋权(为其u、g、o赋予rwx权)
chmod 777 file1
chmod a=rwx file1
5)更改文件拥有者
- chown -R(递归) 属主.属组 文件/目录
#案例1. 更改属主、属组
chown alice.hr file1
#案例2. 只更改属主
chown alice file1
#案例3. 只更改属组
chown .hr file1
- chgrp -R(递归) 组名 文件/目录
十七、Linux正则表达式
0. 变量的引用
引号 | 名称 | 作用 |
---|---|---|
‘’ | 单引号 | 直接输出,所见即所得 |
“” | 双引号 | 引用字符串、解析变量 强调是一个整体 |
`` | 反引号 | 引用命令,解析命令(等价$()) |
无引号 | 无引号 | 同双引号 |
一些特殊符号
- $:调用变量时使用 <br >
- \:转义字符,将特殊的字符还原
- {}:用于生成序列,引用变量,让变量变为整体
环境变量的优先级:(递减)
-
- /etc/bashrc
-
- ~/.bashrc
-
- ~/.bash_profile
-
- /etc/profile
设置环境变量:
- export JAVAHOME=/aplication/jdk
取消环境变量:
- unset JAVAHOME
a = "oldboy"
案例1.单引号
echo '$a'
# $a
案例2.双引号
echo "$a"
# oldboy
案例3.直接引用
echo $a
# oldboy
案例4.反引号
echo date
# date
echo `date`
# Sun Oct 423:54:38CST2024
echo $(date)
# Sun Oct 423:54:38CST2024
1、基本正则(BRE)
字符 | 名称 | 作用 |
---|---|---|
^ | 尖角号 | ^oldboy:表示匹配以oldboy单词开头的行 |
$ | 美元符 | oldboy$:表示匹配以oldboy单词结尾的行 |
^$ | 组合符 | 表示空行 |
. | 点号 | 表示任意匹配一个且只有一个字符 |
\ | 转义字符 | 让有特殊含义的字符脱掉马甲 |
* | 匹配一个字符连续出现0次或1次以上 | |
.* | 组合符 | 匹配所有内容 |
^.* | 组合符 | 匹配任意多个字符开头的内容 |
.*$ | 组合符 | 以任意多个字符结尾的内容 |
[abc] | 匹配[]集合内部的任意一个字符。[a-c] | |
[^abc] | 匹配不包含^后的任意字符a或b或c |
元字符基础集
- grep 选项 匹配字符 文件
- -c:统计行数
- -i:不区分大小写
- -l:查询多文件时,只输出包含匹配字符的文件名
- -n:显示行号
- -s:不显示不存在或无匹配文本的错误信息
- -v:去反,显示不匹配的所有行
- -o:只显示符合的字符串
- -r:递归查找
#案例1.搜索非空行
grep -vn "^$" a.txt
#案例2.只输出匹配行号
grep -c "root" /etc/passwd
#案例3.不区分大小写
grep -i "root" /etc/passwd
#案例4.只显示符合匹配的文件名
grep -l "root" /etc/passwd /etc/passwd.ori
#案例5.输出匹配行以及行号
grep -n "root" /etc/passwd
#案例6.匹配以"root"开头的行
grep "^root" /etc/passwd
#案例7.匹配以"root"结尾的行
grep "root$" /etc/passwd
#案例8.匹配以s开头k结尾的行
grep "s.*k" /etc/passwd
#案例9.匹配(0次或多次)0的行
grep "0*" /etc/passwd
2、拓展正则(ERE)
字符 | 作用 |
---|---|
+ | 匹配前一个字符1次或1次以上 |
[😕]+ | 匹配括号内的:或/字符1次或1次以上 |
? | 匹配前一个字符0次或1次 |
| | 表示或者,同时过滤多个字符 |
( ) | 分组过滤被括起来的东西表示一个整体,( )中的内容可以被后面的\n引用,n位数字,表示引用第几个括号内的内容。 |
\n | 引用前面()里的内容,eg:(aaa)\1,匹配aaa |
a{n,m} | 匹配前一个字符最少n次,最多m次 |
a{n,} | 匹配前一个字符最少n次 |
a{n} | 匹配一个字符正好n次 |
a{,m} | 匹配一个字符最多m次 |
元字符扩展集
- grep -E 选项 匹配字符 文件 == egrep 选项 匹配字符 文件
3、特殊中括号表达式
正则表达式 | 描述 | 示例 |
---|---|---|
[:alnum:] | 匹配任意一个字母或字符,相当于[a-zA-Z0-9] | [[:alnum:]] |
[:alpha:] | 匹配任意一个大小写字母字符,相当于[a-zA-Z] | [[:alpha:]] |
[:blank:] | 匹配空格和制表符,横向纵向 | [[:apha:]] |
[:digit:] | 匹配任意一个大数字字符,相当于[0-9] | [[:digit:]] |
[:lower:] | 匹配任意一个小写字母字符,相当于[a-z] | [[:lower:]] |
[:upper:] | 匹配任意一个大写字母字符,相当于[A-Z] | [[:upper:]] |
[:print:] | 打印任意一个可打印的字符 | [[:print:]] |
[:space:] | 匹配任意一个换行符、回车等在内的所有空白符 | [[:space:]] |
4、元字符表达式
grep -P
表达式 | 描述 |
---|---|
\b | 匹配单诃边界,例如: \boldboy\b 只匹配oldboy单词不匹配oldboy字符串 |
\B | 匹配非单词的边界例如: oldboy\B 匹配oldboy123中的oldboy,不匹配单独的oldboy单词 |
\w | 匹配字母、数字与下划线,等价[_[:alnum:]] |
\W | 匹配字母、数字与下划线以外的字符,等价[^_[:alhun:]] |
\d | 匹配单个数字字符 |
\D | 匹配单个非数字字符 |
\s | 匹配1位空白字符 |
\S | 匹配1位非空白字符 |