linux学习笔记008

来源:互联网 发布:美国护理学硕士知乎 编辑:程序博客网 时间:2024/05/28 01:34

FACL:

setfacl

        -b Remove all

        -m

        -x

FilesystemAccessControl List 文件系统访问控制列表

利用文件扩展保存额外的访问控制权限

jerry: rw-

setfacl

        -m:设定

                  u:UID:perm设定用户为某某权限

                  g:GID:perm设定组为某某权限

                  setfacl-m u:hadoop:rw inittab

        -x:取消

                  u:UID

                  g:GID

getfacl

几个命令:

w 谁登陆了,用户还在干什么

who 登陆的用户

每隔5秒钟,就来查看hadoop是否已经登录,如登录,显示其已经登录,并退出;

sleep

whoami 当前有效的用户

last,显示/var/log/wtmp文件,显示用户登录历史及系统重启历史

        -n#: 显示最近#次的相关信息

lastb,/var/log/btmp文件,显示用户错误的登录尝试

        -n#:

lastlog: 显示每一个用户最近一次的成功登录信息;

        -uUSERNAME: 显示特定用户最近的登录信息

 

basename

        $0:执行脚本时的脚本路径及名称

        

mail

 练习

hostname: 显示主机名

如果当前主机的主机名不是www.magedu.com,就将其改为www.magedu.com

 

如果当前主机的主机名是localhost,就将其改为www.magedu.com

如果当前主机的主机名为空,或者为(none),或者为localhost,就将其改为www.magedu.com

[ -z `hostname` ]|| [ `hostname` =='(none)' -o `hostname` == 'localhost' ] && hostnamewww.magedu.com

 

生成随机数

RANDOM: 0-32768

 

随机数生成器:熵池

/dev/random:

/dev/urandom:

 

写一个脚本,利用RANDOM生成10个随机数,并找出其中的最大值,和最小值;

#!/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"$MYRAND,"

else

echo"$MYRAND"

fi

[ $MYRAND -gt $MAX] && MAX=$MYRAND

[ $MYRAND -lt $MIN] && MIN=$MYRAND

done

 

echo $MAX, $MIN

 

面向过程

        控制结构

                  顺序结构

                  选择结构

                  循环结构

 

选择结构:

if: 单分支、双分支、多分支

if CONDITION; then

statement

  ...

fi

 

if CONDITION; then

statement

  ...

else

statement

  ...

fi

 

if CONDITION1;then

statement

  ...

elif CONDITION2;then

statement

  ...

esle

statement

  ...

fi

 

 

case语句:选择结构

 

case SWITCH in

value1)

statement

  ...

  ;;

value2)

statement

  ...

  ;;

*)

statement

  ...

  ;;

esac

 

#!/bin/bash

#

case $1 in

[0-9]

echo "Adigit.";;

[a-z]

echo"Lower";;

[A-Z]

echo"Upper";;

*)

echo"other"

esac

 

a-z

A-Z

0-9

[abc]

 

 

只接受参数start,stop,restart,status其中之一

#!/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"

                  exit0

                  ;;

          --add)

                  ADD=1

                  ADDUSERS=$2

                  shift2

                  ;;

          --del)

                  DEL=1

                  DELUSERS=$2

                  shift2

                  ;;

          *)

                  echo"Usage: `basename $0` --add USER_LIST --del USER_LIST-v|--verbose-h|--help"

                  exit7

                  ;;

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 "Adduser $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,其用法格式为:

showlogged.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)

root    pts/5       Mar  8 07:56 (172.16.100.177)

hadoop  pts/6       Mar  8 09:16 (172.16.100.177)

 

#!/bin/bash

#

declare -iSHOWNUM=0

declare -iSHOWUSERS=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 -eq1 ]; then

echo "Loggedusers: `who | wc-l`."

if [ $SHOWUSERS-eq 1 ]; then

echo "They are:"

who

fi

fi

 磁盘

MBR Main BOOTRECORD 主引导记录 512字节0磁道0扇区 MBR是整个硬盘的

BootLoader 446BYTE程序引导

64byte 16bytes标识一个分区分区表

2byte MAGIC NUMBER标记MBR是否有效

 

 

 

终端类型:

        console:控制台直接连到主机的设备()终端是软硬件的结合

        pty:物理终端 (VGA) 已经被识别,但没登陆

        tty#:虚拟终端 (VGA) 已经登陆了,在本地附加在控制台上面

        ttyS#:串行终端

        pts/#:伪终端远程登陆,图形界面窗口,伪文件系统

        

链接

ln [-s -v] SRCDEST

硬链接:ln

        1、只能对文件创建,不能应用于目录;

        2、不能跨文件系统;

        3、创建硬链接会增加文件被链接的次数;

        

符号链接:ln -s

        1、可应用于目录;

        2、可以跨文件系统;

        3、不会增加被链接文件的链接次数;

        4、其大小为指定的路径所包含的字符个数;

 

du

        -s整个目录大小

        -h单位换算

        

df:

显示整个磁盘分区使用情况

设备文件:

        b:按块为单位,随机访问的设备;

        c:按字符为单位,线性设备;

        b:硬盘

        c:键盘

        

/dev

        主设备号(majornumber)

                  标识设备类型

        次设备号(minornumber)

                  标识同一种类型中不同设备

 

mknod 创建设备

mknod [OPTION]...NAME TYPE [MAJOR MINOR]

        -mMODE 制定文件权限644

        mknod mydv 66 c 0    c是字符设备

        

硬盘设备的设备文件名:

IDE, ATA:hd

SATA:sd

SCSI: sd

USB: sd

        a,b,c,...来区别同一种类型下的不同设备

        

IDE:

        第一个IDE口:主、从

                  /dev/hda,/dev/hdb

        第二个IDE口:主、从

                  /dev/hdc,/dev/hdd

 

sda, sdb, sdc, ...

 

hda:

        hda1:第一个主分区

        hda2:

        hda3:

        hda4:

        hda5:第一个逻辑分区

磁盘管理命令     

查看当前系统识别了几块硬盘:

fdisk -l[/dev/to/some_device_file]

管理磁盘分区:

fdisk /dev/sda

        p:显示当前硬件的分区,包括没保存的改动

        n:创建新分区

                  e:扩展分区

                  p:主分区

        d:删除一个分区

        w:保存退出

        q:不保存退出

        t:修改分区类型

                  L:

        l:显示所支持的所有类型

cat/proc/partition

partprobe        重读分区表

 

练习:

写一个脚本通过命令行传递一个文件路径参数给脚本:如果参数多了或少了,报错;

如果参数指定的路径对应的是目录而不是文件,报错;而后,检查路径指定的文件是否为空或不存在,如果是,则新建此文件,并在文件中生成如下内容

#!/bin/bash

#

而后,使用vim编辑器打开此文件,并让光标处于这个文件的最后一行;

写个脚本,按如下方式执行:

mkscript.sh-v|--version VERSION-a|--author AUTHOR -t|--time DATETIME -d|--descriptionDESCRIPTION -f|--file/PATH/TO/FILE -h|--help

 

1、此脚本能创建或打开-f选项指向的文件/PATH/TO/FILE;如果其为空文件,能自动为其生成第一行;如果文件不空,且第一行不是#!/bin/bash,则中止此脚本,并报错“The file is not a bash script.";否则,则直接使用vim 打开此文件;

提示:/PATH/TO/FILE,要判断其目录是否存在;如果不存在,则报错;

 

2、如果为空文件,自动生成的第一行内容为:

#!/bin/bash

3、如果为空文件,且使用了-a选项,则在文件中添加“#Author: -a选项的参数”,比如:

# Author: Jerry

4、如果为空文件,且使用了-t选项,则在文件中添加“#Date: 脚本执行-t选项后指定的时间”,比如:

# Date: 2013-03-0818:05

5、如果为空文件,且使用了-d选项,则在文件中添加“#Description: -d选项的内容”,比如:

# Description:Create a bash script filehead.

6、如果为空文件,且使用了-v选项,则在文件添加“#Version: -v后跟的参数”,比如:

# Version: 0.1

6、-h选项只能单独使用,用于显示使用帮助;

7、其它选项,显示帮助信息;

 

说明:

这是一个用于创建脚本的脚本,它可以自动帮助创建一个bash脚本的文件头,这样,以后使用此脚本来创建其它脚本将变得比较高效。比如:

#!/bin/bash

# Author:Jerry(jerry@magedu.com)

# Date: 2013-03-0818:05

# Description:Create a bash script filehead.

# Version: 0.1

#


0 0