p28

文件系统访问列表

FACL:Filesystem Access Control List
利用文件扩增属性保存额外的访问控制权限,可以专门定义某个用户或者某个组对文件的控制权限。

setfacl :设置facl
-m:设定访问控制列表
u:user: perm 为文件设置的
g:group:perm 为文件设置的
d:u:user: perm 为目录设置的,该目录中创建的文件会继承这个属性
d:g:group:perm 为目录设置的,该目录中创建的文件会继承这个属性
QQ截图20220208221606.png
-g:取消设定
u:user
g:group

getfacl :查看facl
QQ截图20220208221449.png

设定facl后进程访问的顺序
QQ截图20220208221956.png

有+号代表文件具有特殊属性,采用一般方法copy文件是不会复制特殊属性的
QQ截图20220208222355.png

终端类型:
console:控制台
pty:物理终端(VGA)
tty:虚拟终端(VGA)【后面带数字表示第几个】
ttys:串行终端
pts/#:伪终端(远程通过shell登陆服务器)

whoami:查看目前登陆服务器的用户是谁
who :查看目前登陆服务器的用户有哪些【su 切换登陆无法用该命令查看】
QQ截图20220208224221.png

last:显示登陆日志,【显示/var/log/wtmp 下的信息】
-n 5:显示最近5次的登陆信息
lastb :显示用户错误的登陆尝试,【显示/var/log/btmp 下的信息】
-n 5:显示最近5次的登陆信息
lastlog:显示每一个用户最近一次的成功登陆信息
-u USERNAME 显示特定用户最近的登陆信息
basename:取得文本的基名
$0:文件本身
mail:查看邮件和发送邮件
hostname:显示主机名
RANDOM:可以生成0-32768之间的随机数

随机数生成器:服务器中有个熵池,记录了随机数字
/dev/random: 会从熵池中取随机数,当随机数取完时,会等待人为输入。这个更安全
/dev/urandom:会从熵池中取随机数,当随机数取完时,会自行模拟。这个更方便

  1. #生成十个随机数
  2. #!/bin/bash
  3. for I in {1..10};do
  4. if [ $I -le 9 ];then
  5. echo -n "$RANDOM,"
  6. else
  7. echo "$RANDOM"
  8. fi
  9. done
  10. #生成十个随机数并取最大值
  11. #思路:将第一次生成的数值和0比较,并将大的数值赋值给一个变量,在通过循环将后面的变量与之比较并重新赋值
  12. #!/bin/bash
  13. declare -i MAX=0
  14. for I in {1..10};do
  15. MYRAND=$RANDOM
  16. if [ $I -le 9 ];then
  17. echo -n "$RANDOM,"
  18. else
  19. echo "$RANDOM"
  20. fi
  21. [ $MYRAND -gt $MAX ] && MAX=$MYRAND
  22. done
  23. #生成十个随机数并取最小值
  24. #思路:将每次生成的值赋值给变量A,将第一次生成的值赋值给变量MIN;将A和MIN比较,并将最小值赋值给MIN,如此循环即可。
  25. #!/bin/bash
  26. declare -i MAX=0
  27. declare -i MIN=0
  28. for I in {1..10};do
  29. MYRAND=$RANDOM
  30. [ $I -eq 1 ] && MIN=$MYRAND
  31. if [ $I -le 9 ];then
  32. echo -n "$RANDOM,"
  33. else
  34. echo "$RANDOM"
  35. fi
  36. [ $MYRAND -gt $MAX ] && MAX=$MYRAND
  37. [ $MYRAND -lt $MIN ] && MIN=$MYRAND
  38. done

p29

面向过程
控制结构
顺序结构
选择结构 :if、case
循环结构

case语句:选择结构

  1. case SWITCH in
  2. valuel1
  3. statement
  4. ......;;
  5. valuel2
  6. statement
  7. ......;;
  8. esac
  9. #要以双冒号结尾
  10. #!/bin/bash
  11. case $1 in
  12. [0-9])
  13. echo "numeric";;
  14. [A-Z])
  15. echo "daxiezimu";;
  16. [a-z])
  17. echo "xiaoxiezimu";;
  18. esac
  1. #给定选项返回特定的值
  2. #思路:将case语句和条件判断结合,通过改变DEBUG的值调控输出结果
  3. #!/bin/bash
  4. DEBUG=0
  5. case $1 in
  6. -v|-verbase)
  7. DEBUG=1;;
  8. *)
  9. echo "UNKNOW";;
  10. esac
  11. [ $DEBUG -eq 1 ] && echo "hello"

两种不同的case风格。第一种一次只能接受一个参数;第二种一个可以接受多个参数,执行多个命令。

  1. #!/bin/bash
  2. DEBUG=0
  3. for option in
  4. case $1 in
  5. -v|-verbase)
  6. DEBUG=1
  7. shift;;
  8. --add)
  9. for user in $(echo $2 | sed "s/,/ /" );do
  10. useradd -m $user
  11. done
  12. shift 2;;
  13. --del)
  14. for user in $(echo $2 | sed "s/,/ /" );do
  15. userdel -r $user
  16. groupdel $user #删除用户要同时删除用户这个组,不然在创建同一个用户就显示组已存在无法创建
  17. done
  18. shift 2;;
  19. esac
  20. [ $DEBUG -eq 1 ] && echo "hello"

QQ截图20220209145226.png

QQ截图20220209144749.png

p30

QQ截图20220212214127.png

磁盘管理:

机械式硬盘:
U盘、光盘、软盘、硬件、磁带

硬盘出厂后会进行一次低级格式化

Partition(分区)
文件系统
MBR:主引导记录(512byte)
Master Boot Record
Main Boot Record
44bytes:BootLoader,程序,
64bytes:
16bytes:标识一个分区 【最多四个分区】
2bytes:Magic Number
标记MBR是否有效

QQ截图20220212220217.png
主分区最多4个;但是可以设置3个主分区1个扩展分区;扩展分区又可以存储多个分区。

硬链接:
1 只能对文件创建,不能应用于目录
2 不能跨文件系统
3 创建硬链接会增加文件被链接的次数

符号链接(软链接):
1 可应用目录
2 可以夸文件系统
3 不会增加被链接文件的链接次数
4 其大小为指定的路径所包含的字符个数

P31

fdisk链接

设备文件:【没有大小】

b:按块为单位,随机访问的设备;
c:按字符为单位,线性设备。

b:硬盘
c:键盘

设备文件存储在/dev中
主设备号(major number):标识设备类型
次设备号(minor number):标识同一种类型中不同设备

QQ截图20220219181539.png

mknod :创建设备文件
mknod -m 640 mydev2 c 66 1 【创建mydev2设备文件,权限为644,类型为c,主设备号为66,次设备号为1】

tty :显示当前设备终端名称
QQ截图20220219195425.png

硬盘设备的设备文件名:【依据接口不同划分】
IDE、ATA :以hd开头
SATA:sd开头
SCSI:sd开头
USB:sd开头
a,b,c。。。。来区别同一种类型下的不同设备

IDE:【有两个接口,可以接两个设备】
第一个IDE口:主、从
/dev/hda,、dev/hdb
第二个IDE口:主、从
/dev/hdc,、dev/hdd

如果是同时存在USB和SATA的硬盘,都是用sd标记,最先识别的标记sda,其次是sdb以此类推。

hda:
hda1:第一个主分区
hda2:第二个主分区
hda3:
hda4:
hda5:第一个逻辑分区
【主分区最多四个,扩展分区只有一个,逻辑分区从第五个开始】

查看当前系统识别了几块硬盘
fdisk -l
QQ截图20220219201205.png

文件系统

vfs【虚拟文件系统】:可以统一众多文件系统。

QQ截图20220219203241.png

文件系统
QQ截图20220219203107.png

管理磁盘分区:
fdisk /dev/sda
p:显示当前硬件的分区,包括没保存的改动
n:创建新分区
e:扩展分区
p:主分区
d:删除分区
d:删除一个分区
w:保存退出
q:不保存退出【修改分区后,又不想修改退出即可】
t:修改分区类型
L:
l:显示所支持的所有类型

新建分区后,内核不会立马识别,需要使用partprobe命令后内核才会识别

QQ截图20220219204907.png