p28
文件系统访问列表
FACL:Filesystem Access Control List
利用文件扩增属性保存额外的访问控制权限,可以专门定义某个用户或者某个组对文件的控制权限。
setfacl :设置facl
-m:设定访问控制列表
u:user: perm 为文件设置的
g:group:perm 为文件设置的
d:u:user: perm 为目录设置的,该目录中创建的文件会继承这个属性
d:g:group:perm 为目录设置的,该目录中创建的文件会继承这个属性
-g:取消设定
u:user
g:group
getfacl :查看facl
设定facl后进程访问的顺序
有+号代表文件具有特殊属性,采用一般方法copy文件是不会复制特殊属性的
终端类型:
console:控制台
pty:物理终端(VGA)
tty:虚拟终端(VGA)【后面带数字表示第几个】
ttys:串行终端
pts/#:伪终端(远程通过shell登陆服务器)
whoami:查看目前登陆服务器的用户是谁
who :查看目前登陆服务器的用户有哪些【su 切换登陆无法用该命令查看】
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:会从熵池中取随机数,当随机数取完时,会自行模拟。这个更方便
#生成十个随机数
#!/bin/bash
for I in {1..10};do
if [ $I -le 9 ];then
echo -n "$RANDOM,"
else
echo "$RANDOM"
fi
done
#生成十个随机数并取最大值
#思路:将第一次生成的数值和0比较,并将大的数值赋值给一个变量,在通过循环将后面的变量与之比较并重新赋值
#!/bin/bash
declare -i MAX=0
for I in {1..10};do
MYRAND=$RANDOM
if [ $I -le 9 ];then
echo -n "$RANDOM,"
else
echo "$RANDOM"
fi
[ $MYRAND -gt $MAX ] && MAX=$MYRAND
done
#生成十个随机数并取最小值
#思路:将每次生成的值赋值给变量A,将第一次生成的值赋值给变量MIN;将A和MIN比较,并将最小值赋值给MIN,如此循环即可。
#!/bin/bash
declare -i MAX=0
declare -i MIN=0
for I in {1..10};do
MYRAND=$RANDOM
[ $I -eq 1 ] && MIN=$MYRAND
if [ $I -le 9 ];then
echo -n "$RANDOM,"
else
echo "$RANDOM"
fi
[ $MYRAND -gt $MAX ] && MAX=$MYRAND
[ $MYRAND -lt $MIN ] && MIN=$MYRAND
done
p29
面向过程
控制结构
顺序结构
选择结构 :if、case
循环结构
case语句:选择结构
case SWITCH in
valuel1)
statement
......;;
valuel2)
statement
......;;
esac
#要以双冒号结尾
#!/bin/bash
case $1 in
[0-9])
echo "numeric";;
[A-Z])
echo "daxiezimu";;
[a-z])
echo "xiaoxiezimu";;
esac
#给定选项返回特定的值
#思路:将case语句和条件判断结合,通过改变DEBUG的值调控输出结果
#!/bin/bash
DEBUG=0
case $1 in
-v|-verbase)
DEBUG=1;;
*)
echo "UNKNOW";;
esac
[ $DEBUG -eq 1 ] && echo "hello"
两种不同的case风格。第一种一次只能接受一个参数;第二种一个可以接受多个参数,执行多个命令。
#!/bin/bash
DEBUG=0
for option in
case $1 in
-v|-verbase)
DEBUG=1
shift;;
--add)
for user in $(echo $2 | sed "s/,/ /" );do
useradd -m $user
done
shift 2;;
--del)
for user in $(echo $2 | sed "s/,/ /" );do
userdel -r $user
groupdel $user #删除用户要同时删除用户这个组,不然在创建同一个用户就显示组已存在无法创建
done
shift 2;;
esac
[ $DEBUG -eq 1 ] && echo "hello"
p30
磁盘管理:
机械式硬盘:
U盘、光盘、软盘、硬件、磁带
硬盘出厂后会进行一次低级格式化
Partition(分区)
文件系统
MBR:主引导记录(512byte)
Master Boot Record
Main Boot Record
44bytes:BootLoader,程序,
64bytes:
16bytes:标识一个分区 【最多四个分区】
2bytes:Magic Number
标记MBR是否有效
主分区最多4个;但是可以设置3个主分区1个扩展分区;扩展分区又可以存储多个分区。
硬链接:
1 只能对文件创建,不能应用于目录
2 不能跨文件系统
3 创建硬链接会增加文件被链接的次数
符号链接(软链接):
1 可应用目录
2 可以夸文件系统
3 不会增加被链接文件的链接次数
4 其大小为指定的路径所包含的字符个数
P31
设备文件:【没有大小】
b:按块为单位,随机访问的设备;
c:按字符为单位,线性设备。
b:硬盘
c:键盘
设备文件存储在/dev中
主设备号(major number):标识设备类型
次设备号(minor number):标识同一种类型中不同设备
mknod :创建设备文件
mknod -m 640 mydev2 c 66 1 【创建mydev2设备文件,权限为644,类型为c,主设备号为66,次设备号为1】
tty :显示当前设备终端名称
硬盘设备的设备文件名:【依据接口不同划分】
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
文件系统
vfs【虚拟文件系统】:可以统一众多文件系统。
文件系统
管理磁盘分区:
fdisk /dev/sda
p:显示当前硬件的分区,包括没保存的改动
n:创建新分区
e:扩展分区
p:主分区
d:删除分区
d:删除一个分区
w:保存退出
q:不保存退出【修改分区后,又不想修改退出即可】
t:修改分区类型
L:
l:显示所支持的所有类型
新建分区后,内核不会立马识别,需要使用partprobe命令后内核才会识别