特殊权限
passwd:s
SUID : 运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者
chmod u+s FILE
chmod u-s FILE
如果FILE本身原有执行权限,则SUID显示为s;否则显示S
SGID : 运行某程序时,相应进程的属组是程序文件自身的属主,而不是启动者所属的基本组
chmod g+s FILE
chmod g-s FILE
Sticky: 在一个公共目录,每个人都可以创建文件,删除自己的文件, 但不能删除别人的文件
chmod o+t DIR
chmod o-t DIR 通常是对目录而言
分别代表: SUID SGID Sticky
000 0 0 0
001 0 0 1
010 0 1 0
011
100
101
110
111
chmod 1755 /backup/test 代表 有sticky位
chmod 2755 /backup/test 代表 SUID & Sticky
练习:
创建一个目录/tmp/project,保证 三个用户 hadoop, hive, richie 能同是编辑该目录上的所有文档,但是只能删除自己的文档
1. 创建公共组developteam
2. 创建用户,将用户的附加组加入developteam
3. 把/tmp/project目录的属组改成公共组developteam : chown -R /tmp/project /tmp/project
4. 把/tmp/project目录赋予sticky权限: chmod o+t /tmp/project
文件访问控制列表(facl)
FACL: Filesystem Access Control List
利用文件扩展属性保存额外的访问控制权限
setfacl
-m 设定 # -u: -g 则是为某目录创建默认的特殊文件访问控制列表
u:UID:perm
eg: setfacl -m:mygroup:rw FILENAME(GROUPNAME)
g:GID:perm
-x 取消
getfacl
练习:
每个五秒钟,就来查看hadoop用户是否已经登陆,如登陆,显示其已经登陆,并推出
sleep
几个命令:
w 比who的信息更详细
who
last: 显示/var/log/wtmp文件, 显示用户登陆历史及系统重启信息
-n # 显示最近#n的相关信息
lastb: 显示用户错误的登陆尝试,是 /var/log/btmp文件的信息
-n # 显示最近#n的相关信息
lastlog: 显示每一个用户最近一次的成功登陆信息
-u USERNAME 显示特定用户的最近一次成功登陆信息
basename
$0: 执行脚本时的脚本路径及名称
mail 收发邮件
eg: mail -s "how are you " root < etc/fstab
hostname 显示主机名
如果当前主机的主机名不是www.richie.com,就该其为www.richie.com
如果当前主机的主机名是localhost,就将其改为www.richie.com
如果当前主机的主机名为空, 或者为(none),或者为localhost,就将其改为www.richie.com
答案: [ -z `hostname` ]|| [ `hostname` == ‘(none)‘ -o `hostname` == ‘localhost‘ ] && hostname www.richie.com
生成随机数
RANDOM: 0-32768
随机数生成器: 熵池取值
/dev/random 熵池空后,会用户阻塞进程,等待用户输入更多随机数
/dev/urandom 熵池空后,会模拟生成随机数填满熵池
写一个脚本: 利用RANDOM生成10个随机数,并找出其中的最大值和最小值
#!/bin/bash
#
declare -i max=0
declare -i min=0
declare -i current=0
for I in {1..10};do
current=$RANDOM
if [ $I -lt 10 ];then
echo -n "$current,"
else
echo -n $current
fi
[ $I = 1 ] && min=$current
if [ $max -lt $current ];then
max=$current
fi
if [ $min -gt $current ];then
min=$current
fi
done
echo -e " \nMAX: $max"
echo "MIN: $min"
面向过程
控制结构
顺序结构
选择结构
循环结构
选择结构:
if: 单分支、双分支、多分支
if CONDITION;then
statement
fi
if CONDITION;then
statment
...
else
statement
...
fi
if CONDITION1;then
statment
...
elif CONDITION2
statement
...
else
case语句: 选择结构
case SWITCH(要引用变量的值) in
value1)
statement
...
;;
value2)
statement
...
;;
*)
statement
...
;;
esac
只接受参数start,stop,restart,status其中之一
写一个脚本, 可以接受选项及参数,而后能获取每一个选项,及选项的参数: 并能根据选项及参数做出特定的操作,比如:
adminusers.sh --add tom,jerry --del tom,biair -v|--verbose
#!/bin/bash
#
DEBUG=0
ADD=0
DEL=0
for I in `seq 0 $#`; do
if [ $# -gt 0 ]; then
case $1 in
-v|--verbose)
DEBUG=1
shift ;;
-h|--help)
echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
exit 0
;;
--add)
ADD=1
ADDUSERS=$2
shift 2
;;
--del)
DEL=1
DELUSERS=$2
shift 2
;;
*)
echo "Usage: `basename $0` --add USER_LIST --del USER_LIST -v|--verbose -h|--help"
exit 7
;;
esac
fi
done
if [ $ADD -eq 1 ]; then
for USER in `echo $ADDUSERS | sed ‘s@,@ @g‘`; do
if id $USER &> /dev/null; then
[ $DEBUG -eq 1 ] && echo "$USER exists."
else
useradd $USER
[ $DEBUG -eq 1 ] && echo "Add user $USER finished."
fi
done
fi
if [ $DEL -eq 1 ]; then
for USER in `echo $DELUSERS | sed ‘s@,@ @g‘`; do
if id $USER &> /dev/null; then
userdel -r $USER
[ $DEBUG -eq 1 ] && echo "Delete $USER finished."
else
[ $DEBUG -eq 1 ] && echo "$USER not exist."
fi
done
fi
练习:
写一个脚本showlogged.sh,其用法格式为:
show
logged.sh -v -c -h |--help
其中,-h选项只能单独使用,用于显示帮助信息:-c选项时,显示当前系统上登陆的所有用户:如果同时使用了-v选项,则即显示同时登陆额用户数,又显示登陆的用户的相关信息:如
Logged users:4
They are:
root tty2 Feb 18.02:41
root pts/1 Mar 8 08:36 (172.16.100.177)
#!/bin/bash
#
declare -i SHOWNUM=0
declare -i SHOWUSERS=0
for I in `seq 1 $#`; do
if [ $# -gt 0 ]; then
case $1 in
-h|--help)
echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"
exit 0 ;;
-v|--verbose)
let SHOWUSERS=1
shift ;;
-c|--count)
let SHOWNUM=1
shift ;;
*)
echo "Usage: `basename $0` -h|--help -c|--count -v|--verbose"
exit 8 ;;
esac
fi
done
if [ $SHOWNUM -eq 1 ]; then
echo "Logged users: `who | wc -l`."
if [ $SHOWUSERS -eq 1 ]; then
echo "They are:"
who
fi
fi
Linux终端
终端类型:
console: 控制台
pty: 物理终端(VGA)
tty: 虚拟终端(VGA)
ttyS: 串行终端
pts/#: 伪终端
本文出自 “Richier” 博客,请务必保留此出处http://richier.blog.51cto.com/1447532/1636024
原文:http://richier.blog.51cto.com/1447532/1636024