初步探索Linux(3)
一、Linux文件与目录
1.普通权限
文件与目录主要有r 、w、x权限.以下是文件与目录属性的对比
r 读取 文件 (内容) 目录 (对象)
w 写入 文件 (改写 ,删除) 目录 (创建对象,删除)
x 运行 文件 (运行) 目录 (切换)
2.特殊权限
特殊权限主要有suid、sgid、sticky表示.
suid只能针对可执行文件,以可执行文件的所有者的身份来运行.当赋予该文件以s权限后,该文件就的x权限就变成了s(小写),当去除掉后就变成了S(大写).
sgid 文件 目录(一般针对目录,表示在该目录下创建的对象的所属组就是该目录的所属组)
sticky 可以保证在该目录下,所有人创建的文件,只有自己能够删除,别人不可以
3.权限表示方法
主要有字符表示法和数字表示法,其中数字表示法是r(4)、w(2)、x(1)、suid(4)、sgid(2)、sticky(1)
4.修改权限
对于普通权限,可以使用chmod命令来改变文件的属性.例如 chmod u+x f1表示给与f1的拥有者执行权限,另外也可以使用数值表示方法.
5.权限的访问控制列表acl
首先编辑 /etc/fstab,在LABEL=/ / ext3 default 0 0,其中将default变为default,acl之后,重新挂载,getfacl f1,setfacl f1 ,setfacl -m u:user16:rw- f1
这时候文件出现了加号,表示有额外的权限
6.umask权限掩码
用户可以使用umask查看自己的umask值,可以粗略的理解为,实际权限=最高权限--umask。但是这种说法,并不准确,应该是使用最高权限去除掉umask所屏蔽掉的权限。比如umask 是0022则实际权限就应该是屏蔽掉针对组的w和针对其它人的w权限。
二、根文件系统目录
根文件系统呈倒挂树状层次结构,一般包括如下几个目录:/etc、 /dev、/usr、/bin、 /var等.其中各个目录功能如下:
三、脚本例子
1.添加普通用户,但是不能使用useradd命令.(主要考察创建用户的过程)
#!/bin/bash
#At First,get the username and password!
read -p"Please iput which username you want to create:"NAMEUSER
read -p"Please input the password you want to give to the user:"PASSWDUSER
#step1:change /etc/passwd
IDUSER=`cut /etc/passwd -d: -f3|sort -n|tail -2|head -1`
let IDUSER=$IDUSER+1
echo "$NAMEUSER:x:$IDUSER:$IDUSER::/home/$NAMEUSER:/bin/bash">>/etc/passwd
#step2:change /etc/shadow /etc/group
echo "$NAMEUSER::::::::">>/etc/shadow
echo "$NAMEUSER:x:$IDUSER: ">>/etc/group
#step3:change /home/NAMEUSER
mkdir /home/$NAMEUSER &>~/rubbish
chown $NAMEUSER.$NAMEUSER /home/$NAMEUSER
chmod 700 /home/$NAMEUSER &>~/rubbish
cp /etc/skel/.* /home/$NAMEUSER &>~/rubbish
chown $NAMEUSER.$NAMEUSER /home/$NAMEUSER/.* &>~/rubbish
#step4:chane /var/NAMEUSER
touch /var/mail/$NAMEUSER
chmod 660 /var/mail/$NAMEUSER
chown $NAMEUSER.mail /var/mail/$NAMEUSER
#step5:change passwd
echo $PASSWDUSER |passwd --stdin $NAMEUSER &>~/rubbish
#step6:authentication
if[ `echo $?` -eq 0 ];then
echo "OK!$NAMEUSER has been created and you can use it now!"
else
echo "Sorry!$NAMEUSER has not been created successfully!"
fi
2.给定一个网段192.168.10.1-254,编写脚本,看是否能够ping通,将ping通的ip地址显示出来.(主要考察ping命令以及echo $?命令)
#!/bin/bash
for I in {1..254};do
ping -c 1 -w 1 192.168.10.$I &>~/abcd/f1
if[ `echo $?` -eq 0 ];then
echo "Ok!The 192.168.10.$I can be reached!"
else
echo "Sorrry!The 192.168.10.$I can not be reached!" &>~/abcd/f3
fi
done
(但是,这个脚本仍有问题,就是会一直ping,除非ping完,或者使用ctrl+z,之后kill掉进程)
3.将普通帐号挑选出来,并在其前端显示号码.(主要考察循环的使用和cut工具)
#!/bin/bash
cut -d : -f 3 /etc/passwd &>~/abc/f1
I=1
while read LINE;do
if [$LINE -ge 500 ];then
######此处进一步筛选,过滤掉uid号码过大的用户
if[$LINE -le 1000 ];then
echo -e "$I\t" `grep $LINE /etc/passwd|cut -d: -f1,3 `
let I=$I+1
fi
fi
done <~/abc/f1