周总结---文件管理-高级,权限管理-文件、ACL、用户与用户组、su与sudo
一、文件管理-高级
1.文件处理三剑客
1.1sed
sed 流式编辑器,主要擅长对文件的编辑操作,实现定制好编辑文件的指令,然后让sed自动完成对文件的整体编辑
一次只处理一行,对内存无压力--->>>用于处理大文件
命令: sed
# 参数:
-r 支持扩展正则元字符
-i 输出内容到屏幕中
-i 取消默认输出
# 行定位
1 定位第一行,1,3代表从第一行到第三行
不屑定位代表定位所有行
# 正则表达式定位
/rook/ 包含rock的行 /^rock/ 包含rock开头的行
/rock$/以rock结尾的行
# 数字+正则表达式定位
# 参数:
p 打印 '1,9p'代表打印1-8行
d 删除 '2d' 删除第二行
c 替换 '1c xxx' 第一行
1.2awk
命令: awk
# 参数:
-F 指定分隔符 -F:
NR 行号
$ 指定列
NF 列尾
awk -F: [执行命令] [文件路径]
例如:
awk -F: 'NR>=1 && NR<=3{print $1,$3,$NF}' /etc/passwd
grep 擅长过滤内容
# 参数:
-i 不区分大小写
-n 输出显示带上行号
-l 匹配成功,打印文件名,失败不打印
-r 递归(个人理解不加和grep也一样)
格式: grep [参数] '关键数据' [文件路径]
示例:
grep -i -n 'root' /etc/passwd
grep -i -n '^rock$' /etc/passwd
^ 代表首部包含,$ 代表 尾部包含
二、文件查找
1、查看命令所属文件
# which [命令] 查看命令所属文件夹
which vim
/usr/bin/vim
2、查找文件
命令: find
# 参数:
-a 并且 find /etc -type f -a -name 'rock'
两个条件都必须满足
-o 或者 find /etc -size 3M -o -name 'rock'
两个条件满足一个就可以
2.1、按文件名查找:
格式: find [路径] -name '匹配规则'
命令: find /etc -name 'rock'
# 参数:
-iname 名字不区分大小写
示例:
find /etc -iname '*pass*'
名字包含pass不区分大小写查找
2.2、按文件大小查找:
格式: find [路径] -size [大小]
命令: find /etc -size +3M
# 无参数
示例:
find /etc -size -3M
查找小于3M的文件
find /etc -SIZE 3M
查找刚好等于3M的文件
2.3 、按文件类型查找:
格式: find [路径] -type [文件类型]
命令: find /etc -type f
# 参数:
f 普通文件
d 目录
l 链接文件
b 块设备文件
....
示例:
find /etc -type f
查找普通文件
2.4、按文件属主属组查找:
格式: find [路径] -user [匹配规则]
命令: find /etc -user rock
# 参数:
-user 查找属主为...
-group 查找属组为...
-nouser #用户还存在,在/etc/passwd删除了记录
-nogroup #用户还存在,在/etc/group中删除了记录
2.5、按时间查找
格式: find [路径] -ctime [匹配规则]
命令: find /etc -ctime +3
# 参数:
-ctime 创建时间
-atime 访问时间
-mtime 修改时间
示例:
find /etc -mtime +3
修改时间超过3天
2.6、按目录深度查找
格式: find [路径] -maxdepth [匹配规则]
命令: find /etc -maxdepth 3
# 参数:
3 数字,指定查找深度,自己按需指定
不能单独使用,必须和其他查找规则合并使用
find /etc -type f -maxdepth 3
查找文件类型是普通文件并且查找深度为3层
2.7、按inode号码查找:
find /etc -inum 1811
2.8/按文件权限查找
格式: find [路径] -perm [可执行权限]
命令: find /etc -perm 644
# 无参数:
find /sbin -perm -4000 -ls #包含set UID
find /sbin -perm -2000 -ls #包含set GID
find /sbin -perm -1000 -ls #包含sticky
2.9、找到后处理的动作
命令: -exec
格式:
# 上条筛选 -exec [操作命令] {} \;
find /etc -name 'r*' -exec cp {} /tmp \;
命令:xargs
# 参数:
-I 赋值的意思
格式:
find /etc -name 'r*' | xargs -I {} cp {} /tmp {}
三、文件的上传与下载
1、下载
命令: wget
# 参数:
-O 指定本地路径和名称
格式:
wget -O [名称] [下载地址]
示例:
wget -o 123.png https://www.xxx.com/img/hello.png
ps: 如果wget下载提示无法建立ssl链接,则加上选项 --no-check-certificate
wget --no-check0certificate -o 本地路径 远程包链接地址
命令: curl
# 参数
-o 指定本地路径和名称
格式:
curl -o [名称] [下载路径]
示例:
curl -o 123.png https://www.xxx.com/img/hello.png
ps:如果遇到下载提示无法建立ssl链接,使用-k选项或者--insecure
curl -k -o 123.png https://www.xxx.com/img/hello.png
系统默认没有该命令,需要下载 :yum install lrzdz -y
#将服务器上选定的文件下载/发送到本机
sz bal.tar.gz
2、上传
# 命令: rz
# 参数:
-E 如果目标文件名存在,新名字增加.或者一个数字
四、输出与重定向
0代表标准输入
1代表标准正确输出
2代表标准错误输出
1.1、输出重定向
输出重定向是把内容输出到文件中:
# > 代表覆盖
# >> 代表追加
# 标准输出重定向:
命令 > 文件
# 以覆盖的方式,把命令的正确输出,输出到指定的文件或设备当中
命令 >> 文件
# 以追加的方式,把命令的正确输出,输出到指定的文件或设备当中
错误命令 2>文件
# 以覆盖的方式把命令的错误输出,输出到指定的文件或设备当中
错误命令 2>>文件
# 以追加的方式把命令的错误输出,输出到指定的文件或设备当中
错误输出重定向>和>>后边不要加空格
# 命令 &>>file.log
正确和错误都放在一个文件的格式
1.2、输入重定向
输入重定向是把文件内容输出到命令中执行:
# 命令 < file.txt
grep 'root' < /etc/passwd
ps: 制作固定大小文件
dd if=/dev/zero of=/file1.txt bs=1M count=20
五、字符处理命令
1.1、sort 排序
# 用于将文件内容排序
命令: sort
# 参数:
-n 依照数值大小拍寻
-r 以相反的顺序来排序
-t 指定分隔符,默认是空格
-k 以列进行排序,和-t配合使用
示例:
find /etc/passwd -type f -exec
sort -n -r -t: -k2
示例2:
sort -n -r -t: -k2 < /etc/passwd
1.2、uniq 查重
# 查重 与sort结合使用,不排序只能看到相邻的重复
命令: uniq
# 参数:
-c 旁边显示重复出现的次数
-d 仅显示重复出现的行列
-u 仅显示未重复的行列
示例:
sort file1.txt | uniq -c
1.3、cut 剪切删除
# 用来显示行中的指定部分,删除文件中指定字段
格式:
[文件或内容] | cut [参数] [参数]
# 参数:
-d 指定字段的分隔符,默认的字段分割符未'TAB'
示例:
head -1 /etc/passwd | cut -d ':' -f1,2,3,4
1.4、tr 替换或删除
# 替换或删除命令
格式:
tr 'n' 'N' < a1.txt # 替换
tr 'rock' < a1.txt # 删除
1.5、wc计数
# 统计,计算数字
命令: wc
# 参数:
-c 统计文件的Bytes数
-l 统计文件的行数
-w 统计文件中单词的个数,默认以空白字符作为分割符
格式:
wc -l < a1.txt
[文件或内容] | wc -c
wc -w < [文件或文件内容]
六、打包压缩
1、打包和压缩的解释
# 打包指的是将多个文件和目录合并为一个特殊文件,然后进行压缩,得到一个压缩包
1.减少占用的体积
2.加快网络的传输
windows和Linux互通的,选择zip格式
ps:压缩包后缀不重要,但是一定要加上
2、tar 打包压缩
命令: tar
# 参数:
-c 打包文件
-v 显示打包过程
-f 指定打包的文件名称
-P 取消移除根目录的报错信息
-z 使用gzip压缩算法进行压缩
-j 使用bzip2压缩算法进行压缩
-x 将tar压缩包进行解压
-t 查看压缩包内容
-C 解压至指定文件夹
命令: zip
# 参数:
-r 递归压缩
-q 静默输出
-d 解压到指定的目录
格式:
# 压缩
tar [参数] [目标保存路径和命名] [源文件路径]
zip [参数] [目标保存路径和命名] [源文件路径]
1.tar -czvPf /tmp/test.tar.gz /etc/passwd
2.tar -cjvPf /tmp/test.tar.bzip2 /etc/passwd
3. zip -rq /etc.zip /etc
# 解压
tar -xf /tmp/test.tar.gz -C /etc
unzip -1 /etc.zip -d /opt
七、文件系统
1、系统介绍
# 文件是操作系统提供给用户、应用程序操作硬盘的一种功能
# 文件系统是操作系统内核中负责组织管理硬盘的程序,文件系统提供了文件这种功能
文件系统种类:
1.Linux: ext3,ext4, btrfo,xfs(SentOS 7 默认自带)
2.windows: FAT32 , NTFS
# 文件是由两部分内容组成
1.文件的元信息,例如曲线(rwx)、拥有者、群组、时间参数等
2.文件的实际内容
#以上两部分进行分区存储:
1、文件的元信息放置到 inode 区块中
2、文件的实际内容放置到 data block 区块中
# 每一个inode 与 block 都有自己的编号
#suoerblock会记录整个档案系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量
2、 软连接、硬链接
2.1、硬链接知识提炼:
# ln [源文件] [目标文件] 设置硬链接
# rm -f [文件] 删除硬链接
1.对硬链接文件内容进行修改,会影响到所有文件;
2.硬链接文件与源文件具有相同 inode 号但文件名不同:一个文件只能由一个 inode 号码,但是多个文件的 inode 号码可以相同
3.删除硬链接或者源文件之一,不影响另一个文件名的访问,除非所有的都删除掉,所以硬链接的作用是允许一个文件拥有多个有效路径名,可以建立硬链接到重要文件,放置误删
4.删除所有硬链接,数据会在被磁盘检查或者新数据写入的时候删除回收。
5.目录不可创建硬链接,并且无法跨区
2.2、软连接知识提炼
# ln -s [源文件] [目标文件] 创建软链接
# rm -f [文件] 删除软连接
1.对软连接的源文件或者目标文件进行修改,会影响到所有文件。
2.软链接文件与源文件具有不同的 inode 号码
3.删除软连接文件的源文件,软连接文件将无法使用
4.删除源文件后,软链接文件无效,应该也一起删除掉,方便回收。
5.可以对目录创建软链接,并且软链接可以跨分区
# 软链接作用:
1.软件升级
2.企业代码发布
3.不方便目录移动的文件
3、其他场景
1.大量的小文件问题:
可能会将 inode 耗尽,文件无法创建,磁盘利用率低,对小文件比较多的场景,#将 block 划分小一点
2.大文件问题:
一个文件占用多个 block 文件读取速率慢,# 将 block 划分大一点。
4、面试题
1、从定义:
Linux系统中,链接有两种:
# 软链接:类似快捷方式,存放指向源文件 inode 的信息,与源文件 inode 不同。
# 硬链接:与源文件 inode 相同,指向数据的 block
2、从创建方式:
# 硬链接: ln [源文件] [目标文件]
# 软链接:ln -s [源文件] [目标文件]
3、从创建对象:
# 硬链接:只能文件对文件进行硬链接
# 软链接:文件、目录、跨分区建立软链接
4、删除软链接文件,对硬链接和源文件无影响
5、删除文件硬链接,对源文件及链接文件无影响
6、删除源文件,对硬链接读取数据无影响,软链接则失效,会出现红底白字状
7、同时删除源文件和硬链接,源文件才会被真正删除
8、快照原理,类似与硬链接原理
5、inode
# stat 查看 inode 号码及其他详细信息
#ls -i 列出整个目录文件,文件名和 inode 号码
inode 号码负责存储文件的元信息
1、inode 编号
2、用与识别文件类型,有一集用于 stat c函数的模式信息
3、链接数,即有多少文件名指向这个 inode
4、属主的ID、属组的ID
5、文件的字节数
6、文件所使用的磁盘块的实际数目
7、文件的时间戳:
ctime:创建时间
mtime:上一次变动时间
atime:上一次查看时间
# inode 会消耗硬盘空间,每个 inode 节点为128字节,占硬盘空间为12.8%
有时候文件名特殊,无法删除,使用 inode 号码删
find /etc -inum 1811 -exec rm {} \;
打开文件,系统以 inode 号码来识别,不考虑文件名
八、权限管理---用户组管理
1.用户与用户组命令汇总
命令汇总:
useradd 添加用户
userdel 删除用户
userdel -r 彻底删除
usermod 修改用户信息
passwd [用户名] 设置用户名密码
echo 123 | passwd --stdin [用户名]
groupadd 添加群组
groupdel 删除组
groupmod 修改组信息
gpasswd 设置组密码
newgrp 切换组
id 查看id号码
who 查看苏哦有登录的用户信息
whoami 查看当前登录的用户名
2、命令详解
# useradd命令详解: 创建用户的同时指定选项
-u 指定用户的UID
-g 指定用户所属的主群
-G 指定用户所属的附加群
-d 指定用户的家目录
-c 指定用户的备注信息
-s 指定用户所用的shell
-e 修改过期时间
-M 不创建家目录
-r 创建系统账户
# usermod是修改信息
-u 指定要修改用户的UID
-g 指定要修改用户基本组
-a 将用户添加到附加组,仅与-G选项一起使用
-G 指定要修改用户附加组,使用逗号隔开,覆盖形式
-d 指定要修改用户家目录
-c 指定要修改用户的注释信息
-s 指定要修改用户的bash shell
-m 将用户主目录的内容移动到新位置,如果不存在,会创建新的主目录
-l 指定要修改用户的登录名
-L 指定要锁定的用户
-U 指定要解锁的用户
3、用户与用户组
用户:
1.用户是操作系统提供的一种安全机制
2.用户是权力的化身
3.划分权限,增强安全性
# 进程->用户->权限
用户组:
1.主组:自己本身所在的部门
2.附加组:为用户添加的附加部门
九、权限管理---文件权限
当一个用户要操作某个文件时,系统会一次检索该用户是否是该文件的拥有者,其次是组成员,最后是其他人,如果扫描到是拥有者,则具备拥有者的权限,不必往后扫描,以此类推
1、基本权限介绍
# 基本权限类型:
r = 4 可读
w = 2 可写
x = 1 可执行
# 权限归属:
u 属主
g 属组
o 其他人
2、设置权限
命令: chmod
# 参数:
加减法: + -
赋值: =
数字: r=4 w=2 x=1
格式:
chmod u+x,g-r,o+w a.txt 加减法
chmod ug=rwx,o=r a.txt 赋值
chmod 755 a.txt 数字
chmod -R 755 test/ 递归设置
命令: chown
格式:
chown [属主].[属组] [文件路径]
chown alic.hr file1 更改属主,属组
chown alic file1 更改属主
chown .hr file1 更改属组
3、权限总结
需求1:读取目标文件内容,进行修改,然后执行脚本
1.必须对沿途目录有执行权限,才可以进入到子目录
2.对目标文件有可读权限
3.对目标文件有可写权限
4.对目标文件有可执行权限
ps: vim原理是将源文件删掉,然后覆盖新内容进行保存。so:没有w权限,也可以 wq! 强制退出,进行更改保存!
十、文件管理--特殊权限
1、SUID
# 对命令权限进行全局加持
SUID只对二进制可执行文件有效
# 设置s权限,属主必须有x执行权限,才可生效,显示为小写s,大写S表示没有执行x权限
格式:
chmod u+s usr/bin/cat
chmod 4755 usr/bin/cat
SUID = 4
2、SGID
# 对目录进行加持,目录下所有创建的文件或者目录,同属于该文件的群组
# 设置s权限,属组必须有x执行权限,才可生效,显示为小写s,大写S没有执行x权限。
格式:
chmod u+s test/
chmod 2755 test/
SGID = 2
3、SBIT
# 作用在目录,阻止非文件所有者删除文件
设置s权限必须有x执行权限,显示为小写t,否则为大小写T
格式:
chmod o+t test/
chmod 1755 test/
SBIT = 1
十一、 umask
# umask设置的越小,权限越大,慎用
新建文件、目录的默认权限是由umask决定的
1、uid>199并且属主与属组相等的用户下,umask: 0002
- 文件 664
- 目录 775
2、除1之外的其他用户下,比如root用户,umask: 0022
- 文件 644
- 目录 755
linux中文件默认权限为666、目录权限默认为777,在umask的影响下
临时设置umask
umask 000 //设置umask权限
永久设置umask
vim /etc/profile # 或者/etc/bashrc内容一样
十二、权限管理su与sudo
# su 切换用户
切换用户执行命令三种方式:
su rock 切换用户执行命令
su - rock 切换用户执行命令
su - rock -c '命令' 不切换用户执行命令
ps:root切换普通用户不需要密码,普通用户切换root需要密码
# sudo提权 给予指定用户指定权限,让普通用户自己操作
vim /etc/sudoers #编辑权限
示例:
root ALL=(ALL) ALL
用户 任何计算机=(任何身份) 所有命令
1.可以编辑指定用户
2.可以设置指定计算机IP地址
3.可以指定任何身份
4.可以设置任何命令,及固定命令或除了哪些命令
egon ALL=(ALL) /bin/cp,/bin/touch 只允许egon用户以root身份执行,cp,touch命令
egon01 ALL=(ALL) ALL,!/user/bin/vim/test/a.txt # !代表取反
sudo有bug:
如果设置绝对路径,可以用相对路径绕过限制。
如果设置相对路径,可以用绝对路径绕过限制。
两种编辑方式
# visudo(会提示语法错误,推荐使用)
vim /etc/sudoers 进行编辑,结束后检查
visodu -c 检查配置是否正确
# vim /etc/sudoers
直接编辑完后退出

浙公网安备 33010602011771号