一.设备
  1.在我们的linux所有的设备文件都在/dev目录下存放
  2.USB,SCSI,SATA,isccsi,这些设备被识别成sd
    IDE被识别成hd
  3.设备文件被识别成了/dev/sd[a-z]N的形式
     这些设备文件没有大小,但有主设备号和次设备号之分

     主设备号:是用来定义设备属于哪个总线,即那类设备
     次设备号:定义同一个总线设备上的不同设备
  4.有两个命令让我们去创建设备文件
    mknod,MAKEDEV

    eg:mkond /dev/mydevice   [c|b]   Major_num Minor_num
                  设备文件名 设备类型 主设备号 次设备号

     设备类型中,c代表字符设备,b代表块设备

     这种创建的设备文件在重启后会丢失的,linux的设备文件都是udev创建的

  5.管理存储设备
    # fdisk -l
    磁盘管理命令:fdisk , sfdisk
    备份磁盘分区表
   # sfdisk -d /dev/sdb > /root/part_back/sdb.partitions     --->对磁盘/dev/sbb表进行备份成sdb.partitions
    恢复设备信息
   # sfdisk /dev/sdb < /root/part_back/sdb.partitions

  6.格式化与卷标
    mkfs -L label     --->用-L创建卷标

   卷标的作用:卷标就是让我们的系统识别磁盘设备的;因为当我们当我们新加了一块磁盘的时候,系统会识别成sdb,但是,当我们把它插到另一块电脑的时候,而且这台电脑只有这一块硬盘的时候,就会把这块硬盘识别成sda,这是就容易造成混淆,所以需要创建卷标。

   我们创建卷标也有可能出现重复,因此,我们的系统在用mkfs创建卷标的时候,还会为我们的磁盘分区,创建一个不可能重复的UUID,

   我们可以用blkid可以查看某个分区的UUID
     eg:# blkid /dev/sda1

二.创建卷标的步骤
  1.# fdisk /dev/sda,在按正常的正常的步骤划分好一个分区的时候,然后格式化时候可以创建卷标
    # partprobe
    # mkfs -t ext3 -L MYDEV /dev/sda5    --->用-L创建卷标
  2查看卷标的两种方法:
   # blkid /dev/sda5
   # e2label /dev/sda5
  3.修改卷标
   # e2label /dev/sda5 DEV

  4.以后我们就可以使用卷标挂载分区了
   # mount LABEL=DEV /mnt/test   ---->意思:就是我们挂载卷标为DEV的磁盘分区
   注意:卸载的时候不能用卷标,因为umount不太支持卷标

  5.# vim /etc/fstab   在编写这个文件的时候,也可以使用卷标,里面有例子。

三.格式化的命令用法
   1.mke2fs         --->格式化成ext2的文件系统
       -L  label     指定卷标的
       -j         表示格式成ext3,如果不带-j时,就会格式化ext2的文件系统
       -b         指定磁盘块大小的
         eg:# mke2fs -b 1024 /dev/sda5
       -c         检查磁盘上的坏块的
       -i bytes/inode         指定字节和inode好的比率的
         每个个inode号占用128个字节
       -N  数字   指定我们这块磁盘上有多少个inode号
         eg:# mk2fs -N 100 /dev/sda5
       -m         为管理员指定预留磁盘空间管理比率
             
     tune2fs   调整mke2fs创建的信息的(169页)
       -L      改卷标
       -j      将ext2改成ext3格式的文件系统,这个过程是不可逆的
       -c      指定最大挂载次数,挂载达到这个次数时候,系统就会对这个分区自检
         eg:# tune2fs -c0 /dev/sda5     ---->指定可以无限挂载,不让其自检
       -C      指定已经挂载的次数
       -i      指定每个多长时间自检一次
       -m      指定预留空间大小
       -u USER 指定预留空间给谁用,默认是管理员
       -o         调整mount的默认挂在选项

   2.dumpe2fs    --->用于显示ext2磁盘的详细信息的
     eg:# dumpe2fs /dev/sda5

三.与mount有关的相关信息
   1.mount -o的默认选项,对ext3
       rw        读写
       ro        只读
       suid      允许值定suid的文件正常工作
       dev       启用设备上的设备文件
       exec      允许执行二进制文件
       auto      可以被自动挂载
       nouser    禁止普通用户挂载
       async     异步写入
     下面不是默认功能的选项
       acl       让分区可以实现访问控制列表的功能
         eg:# mount -o defaults,acl /dev/sda5 /mnt/test      --->有多个选项的时候用逗号隔开
       loop      挂载本地回环设备的
         如:我们想让本地/root/boot.iso的文件挂载到本地目录中使用
          eg:# mount -o loop /root/boot.iso /mnt/test
       owner
       remount     重新挂载
      
   2.启用acl的功能有三种方法,
     第一种就是上面的:
          eg:# mount -o defaults,acl /dev/sda5 /mnt/test      --->有多个选项的时候用逗号隔开
     第二种是写入/etc/fstab内,让它在自动挂载的时候,启用acl的功能
         eg:# vim /etc/fstab
           添加内容:
             LABEL=DEV               /mnt/test               ext3    defaults,acl    0 0
     第三种是用tune2fs修改mount的默认选项的:
        eg:tune2fs -o acl /dev/sda5

   2.根据卷标查找设备:findfs LABEL
     # findfs LABEL=DEV

   3.查看某个挂载点正在使用的用户:fuser
    eg:# fuser -v /mnt/test        ---->查看正在使用/mnt/test挂载点的用户
       # fuser -km /mnt/test       ---->强行踢出正在使用的用户
     然后就可以卸载了
 
   4./etc/mtab   --->这个文件是追踪挂载的所有分区

  
四.交换分区
   1.当我们内存小于2G的时候,我们的交换内存是真实内存的两倍。
     但是,我们发现我们的交换内存不够用了,我们这时候就需要划分一个新分区,让它格式化成一个交换分区。
 
   2.划分swap分区的步骤:
    1)/etc/mtab
         n
         l        ---->这是为了查看交换分区的类型的,交换分区的类型为82
         t        ---->该文件系统分区的类型
             6       ---->这是指定那个分区的
             82      ---->将该分区的类型改为swap类型
         w        ---->保存退出
    2)# partprobe

    3)对于swap类型的分区,不能用mkfs去创建,而是用mkswap去创建
      # mkswap /dev/sda6

    4)创建好了交换分区,但是,不能用,需要启用一下才能用
     eg:# swapon /dev/sda6
    5)关掉交换分区:
     eg:# swapoff /dev/sda6

    6)swapon -a     --->启用/etc/fstab内定义的所有交换分区
     要想让系统自动启用交换分区,需要写入/etc/fstab文件中

   3.如果我们发现我们的交换分区满了,而且磁盘也用完了,没有可用磁盘来交换分区了,但是我们又迫切需要一个交换分区,来扩大交换空间,这时候,我们可以在本地文件系统里有剩余空间的磁盘里创建一个本地回环设备,然后再让它格式化成交换分区,也可以启用。(170页)

   4.创建回环设备:dd命令
     1)dd  (data dump)   用于从一个文件系统读取数据到另一个文件系统的工具,早期是一个数据备份或者copy工具,但是,它拷贝的是二进制信息。
     2)dd的使用格式:dd if= of= bs= count=
         if=:后面是指定那个输入设备,表示从哪里来读的数据来源。
         of=:表示把数据输出到那里去,输出的位置可以是一个文件
         bs=:表示一次读多少,指定一次读的数据块是多大。
         count=:表示读多少这样的数据块,
      eg:# dd if=/dev/zero of=/tmp/swapfile bs=1M count=512     --->会自动创建swapfile文件
       
   5.创建回环设备的步骤:
      # dd if=/dev/zero of=/tmp/swapfile bs=1M count=512     --->可以去看一下创建的文件是否成功
      这时候我们就可以将这个文件当一个交换空间来使用。
      # mkswap /tmp/swapfile               ---->我们来创建一下交换空间。
      # swapon /tmp/swapfile             --->开启一下交换文件

  6.# swapon -s        --->对每一个交换分区进行检查,包括回环设备。

五.有关用户信息的基本信息
  1./etc/passwd的格式:
   username:x:uid:gid:comment:home_dir:shell
   用户名 密码占位符 UID GID 信息描述 家目录 shell

  2./etc/shadow的格式
    username:passwd:

   我们查看shadow文件的格式的方法:
    1)当我们直接man shadow看到的不是文件信息,而是 Library Calls (系统调用),不是文件帮助信息,所以我们需要用到whatis去帮助我们查找文本帮助信息在那一段;
    2)# whatis shadow        ---->可以查看到文件帮助信息在第5段
    3)然后,我们可以直接去访问那一段:
      # man 5 shadow       --->可以看到我们想要看的shadow的文件中的9段的格式的解释,如下:
       下面是上面的显示内容的一部分:
DESCRIPTION
       shadow contains the encrypted password information for user's accounts and optional the
       password aging information. Included is:

       ?  login name

       ?  encrypted password

       ?  days since Jan 1, 1970 that password was last changed

       ?  days before password may be changed

       ?  days after which password must be changed

       ?  days before password is to expire that user is warned

       ?  days after password expires that account is disabled

       ?  days since Jan 1, 1970 that account is disabled

       ?  a reserved field
  3.管理用户信息的命令:
    useradd, userdel, usermod, id, finger,chfn(改变用户的finger信息), chsh(改变用户的shell信息)
  4.管理用户组的信息的命令:
    groupadd, groupdel,groupmod
   
   passwd 改变密码

  5.useradd:
      -u   指定用户的UID
      -g   指定用户的基本组
      -G   指定用户的附加组
      -s   指定用户的shell
      -d   指定用户的家目录
      -c   指定用户的注释信息
      -e   指定账号的过期时间
      -M   不用创建家目录的
      -r    指定ID号小于500,即:创建系统用户
    userdel
       -r   连用户的家目录一起删除掉

    当我们删除了某个用户后,用户ID为1001,要删除用户为1001的文件的方法:
     find / -uid 1001 -exec rm -rf {} \;

    usermod
       -u    改用户的UID
       -g    改用户的基本组
       -aG   给用户添加新的附加组
       -a    添加一个用户到附加组,与-G连用
       -dm   改变用户家目录,并且连同用户家目录中的文件一同移过去
       -s    改变用户的shell
       -c    改变用户的注释信息

   groupadd
       -g   指定组ID
       -r   添加为系统组的
 
   groupadd
      -g   修改GID
      -n   修改组名字

   passwd --stdin
    
   gpasswd
  
   newgrp    切换组

**************************************************************************************************************
   newusers    批量添加用户
     用这个命令时,我们要创建一个文件,写入用户信息;
     eg:# vim /tmp/myuser
       写入用户的相关信息:
        use1:123456:1000:1000::home/user1:/bin/bash
      我们创建这个文件完成之后,用newusers去读取这个文件,它会将这里的用户都添加进去,但是,它有一个致命缺陷,就是它不会像useradd那样,在创建好用户之后会自动创建好初始化文件,我们需要手动去拷贝/etc/skel/目录中的隐藏文件到用户的家目录,

     eg:# newusers /tmp/myuser
**************************************************************************************************************

   chage
      -m days      minimum days between password changes
      -M days      maximum days between password changes
      -I days      number of days inactive since password expired befor locking account
                   密码过期之后,等待用户修改密码的时间
      -E days      expire the account on this date (YYY-MM-DD fromat)
                   指定过期天数
      -W days      number of days before a required change to start warmings
      -l days      list the setting

      eg:chage -m 2 student    --->改最小使用时间
      eg:chage studnet    --->这是交互式改变用户的信息的

   6.vipw后面不更任何选项,相当于vim /etc/passwd,但是,它的好处是,当用它打开是,它会锁定这个文件,不让其他人修改这个文件,

     同理,编辑组的命令是vigr

六.磁盘配额:quota(189页)
   1.磁盘配额是在内核中实现的,即文件系统中实现的,只能针对于分区来做的。
   
     有两种配额标准:
     空间配额:定义一个用户最多使用多少个磁盘块,1k-blocks
     文件配额:限定用户最多能建立多少个文件

     有两种配额类型:
      软限制:就是用户可以超过这个限定,但是有一定的时间限制,不能超过这个时间期限,可以使用
      硬限制:绝对不能超过着个限制,

     磁盘配额对管理员是无效的,

   2.要想启用磁盘配额的条件:
     1)确定用户的家目录在什么地方。
     2)当家目录没有单独分区的情况下,就对根进行限额。
     3)指定特殊的挂载选项:usrquote,grpquota
 
   3.当我们启用了磁盘配额的信息保存在磁盘分区的根目录上会创建两个文件,aquote.user  ,  aquota.group

   4.下面我们对根进行磁盘配额的步骤:
      1)# vim /etc/fstab
         添加内容:
          /dev/vol0/root          /                       ext3    defaults,usrquota,grpquota        1 1

      2)修改完成了fstab文件之后,我们需要重新挂载,才能生效。
       # mount -o remount /

      3)重新完成之后,我们发现任然没有aquote.user  ,  aquota.group这两个文件,我们需要使用quotacheck才会出现
        # quotacheck -cugm /          ------>这只是建立数据库
        解释:quotacheck的选项:
                -c     检查那两个数据文件无论有没有我们都创建
                -u     检查用户的磁盘配额
                -g     检查组的磁盘配额
                -m     表示无论如何都不要将此文件系统挂载成只读文件系统,因为当挂载出现问题的时候就会挂载成只读的

      4)打开磁盘配额的功能
        # quotaon /

      5)下面我们读用户student进行配额
        # edquota student      ---->我们可以这时就是用vi编辑器打开了一个文件,我们进行配置

      6)切换到普通用户,并查看磁盘配额。
        # su - student     
        $ quota             --->普通用户可以查看磁盘配额
  
      7)我们在普通用户模式下创建一个大文件,进行测试
         $ dd if=/dev/zero of=./myfile bs=1M count=9

    5.下面我们对以专门的分区进行磁盘配额的步骤:
      1)我们现在先划分一个分区,步骤略
 
      2)下面我们手动临时挂载/dev/sda5分区
        # mount -o defaults,usrquota,grpquota /dev/sda5 /mnt/test
        想让永久有效可以写如fstab文件中,这里省略。

      3)# quotacheck -cugm /mnt/test    --->创建数据文件

      4)注意:这时候我们创建的磁盘配额分区,即:挂载目录对普通用户是没有写权限的,我们需要指定
        # cd /mnt/test/
        # mkdir student   -->创建目录是为了让普通用户的写权限生效
        # chown student:student /mnt/test/student -R      --->让student可以有写权限
   
      5)# quotaon /mnt/test
      6)# edquota student     --->开始磁盘配额
     
      7)对我们的磁盘配额进行测试:
        # su - student
        $ cd /mnt/test/student     --->切换到磁盘配额的目录
        $ dd if=/dev/zero of=./a.file bs=1024 count=10    ---->创建一个大文件
    
     6.现在文件数目和磁盘限制差不多,就是在edquota student的限制位置不一样

     7.将一个用户的磁盘配额限制复制给另一个用户做配额限制
      # edquota -p redhat student     -->复制redhat的配置给student限制
      # repquota /mnt/test        --->可以查看/mnt/test文件系统的配额项目

     8.我们在脚本中实现非交互式的磁盘配额的方法是:
      # setquota user1 10000 15000 100 120 /mnt/test

     9.设置宽限期
       # edquota -t
     
     10.查看用户超出磁盘配额的信息,并发送一封邮件给用户
       # warnquota /mnt/test

七.文件权限,包括acl的功能:
   1.suid, sgid, sticky
     eg:# chmod u+s a     chmod 4644
        # chmod g+s a     chmod 2644
        # chmod o+t a     chmod 1644

   2.SGID:当SGID用于目录上意味着:所有对此目录有写权限,并且属于这个文件属组的用户创见文件的时候,属主是创建文件用户的属主,但是,属组都用该目录的属组。

    STICKY:植了sticky位,用户就只能删除自己创建的文件,而不能删除别人创建的文件

   3.测试步骤:
     # mkdir /tmp/test      --->我们这里选择了tmp目录做测试
     # chmod g+s /tmp/test/      ---->给该目录值GID位
     # chmod g+w /tmp/test/       ---->给属组写权限
     # chown -R :jun /tmp/test    --->改变目录的数组,让这个数组的用户有写权限
     # groupadd jun
     # usermod -aG jun redhat
     # usermod -aG jun student
     我们切换到redhat用户下:
     # su - redhat

   4.普通用户没有设置属主和属主的权限,但是,有设置可读、可写、可执行的权限

   5.我们创建一个文件让其它的某个用户有写权限的做法:
     1)我们也许会改变属组,但是,普通用户没有改变属组和属主的权限,所以这个方法行不通;
     2)我们给o组写权限,即:o+w设置,但是,所有的用户都有写权限,很不安全;
     3)前面的问题我们可以用acl来解决,这就是acl的好处,即:不改变其它用户的权限和文件原有的权限,来添加某一个权限

    6.acl:access control list        (211页)
       我们又两个命令关于acl的:setfacl, getfacl
         getfacl:获得acl的功能
         setfacl:设置acl的功能
             -m  设定acl权限位的
             -x   取消权限位的
        
        eg:# getfacl /tmp/a.redhat
        设置用户的acl的模板:
         setfacl -m u:<user>:<perms> filename 
        解释:u是指定哪个用户的
              <perms>是指设定那种特殊的权限
        eg:# setfacl -m u:student:rw- /tmp/a.redhat
          
         然后用getfacl查看一下,就会发现student对这个文件由了上面我们设置的权限了
         这时我的student用户就对redhat创建的文件有了些权限了,解决了上面的问题

        取消用户的acl的模板:
         setfacl -x u:<user> filename
        eg:# setfacl -x u:student a.redhat     ---->这就是取消上面的acl设定

    7.一个易忽略的问题:
      当我们新建的分区时,如果我们想使用acl的功能,挂载的时候要添加acl的功能,因为mount默认没有acl的功能
      eg:# mount -o defaults,acl /dev/sda5 /mnt/test
       如果已经挂载过了,可以重新挂载
      eg:# mount -o remount,acl /dev/sda5 /mnt/test

      如果想让acl的功能在开机自动挂载的时候就能自动加上,就需要修改/etc/fstab
       eg:vim /etc/fstab
         内容:
         /dev/sda5               /mnt/test               ext3    defaults,acl       0 0

    8.对组设定acl
      模板:setfacl -m g:<group>:<perms> filename
       eg:# setfacl -m g:jun:rw- /tmp/a.redhat
     
      取消对acl的设定:
      模板:setfacl -x g:<group> filename
       eg:# setfacl -x g:jun /tmp/a.redhat

   9.设定默认acl的权限:
     1)默认acl只能设置在目录上,默认acl的意义就是,当我们没有对一个目录设定acl的时候,我们在该目录内创建的文件只具有那些默认权限,当我们对该目录设置了默认acl的时候,我们再在这个目录内创建任何文件的时候,都具有我们定义的acl的权限,这就是默认acl的意义;

     2)模板:setfacl -m d:<u|g|o>:<user>:<perms> filename
         解释:d代表default,表示默认权限
       eg:# setfacl -m d:u:student:rw- jun

   10.设定mask的有效mask位(即,掩码位):
      1)mask的位的意义:就是我无论我们怎么用acl来设置一个文件的权限,都不能超过mask位设置的权限
        例如:我们用acl设置一个文件的的权限是rwx,而mask位设置的权限位是:rw-,那么,这个文件有效权限只有rw-
      2)设置mask位的模板:setfacl -m m:<perms> filename
        eg:# setfacl -m u:student:rwx a        --->我们这里设定acl的权限是rwx
           # setfacl -m m:rw- a              --->我们这里是为了设置掩码位,即mask位
           这时候,我们# getfacl a 可以发现多了后面一点:user:student:rwx  #effective:rw-

       
      3)这时候,我们就实现了无论我们怎么设置权限位,都不会超过mask位了

   11.当我们给一个用户多个权限位的时候,它的匹配顺序是:User,Group,Other(212页)
      其实,这个匹配顺序就是getfacl显示的顺序,

   12.我们设置other位的权限模板:setfacl -m o:<perms> filename

八.用户的集中身份认证(第十一章)
   1.我们为什么要用到集中认证呢?
    答:当用户多,电脑少的情况下,我们就需要将每个用户的登录信息集中到一个服务器的数据库中管理,当用户需要登录系统时候,会将用户的信息发送到服务器上认证,这就是集中管理;

   2.NIS:Name Information Server
     NIS的组件(即,软件包)有一下三种:
         ypserv: NIS服务器端
         ypbind: NIS客户端
         yp-tools: NIS服务的获取工具

   3.rpc.yppasswdd     ---->这是服务器端必须运行的一个进程

   4.在客户端,用户必须用yppasswdd来修改自己的密码,并将需该的信息发送给服务器端,服务器端的rpc.yppasswdd进程监控着客户端yppasswdd发送过来的信息,并响应请求,回复是否修改成功。

   5.作为客户端,我们必须装上,ypbind和yp-tools软件包,默认是装上的;
   
   6.在客户端启动服务的过程:
     # export LANG=en     --->首先改变字符集
     # setup
       打卡图形配置界面,选择第一项:然后选定use NIS项,在next,这时候需要添Domain,这个域名是NIS的域名和IP,而不是DNS的域名;

   7.# nisdomainname      --->查看我们所属的NIS域名
 
   8.配置完成之后,我们的NIS域名保存在/etc/sysconfig/network文件中。

   9.ypbind有一个配置文件:/etc/yp.conf,我们上面配置的server的ip地址就保存在这个文件中

   10.我们输入密码和账号,一般都到passwd和shadow中,这种定义是在/etc/nsswitch.conf 配置文件中定义的
      当我们配置了nis后,会发现,我们的passwd和shadow后面多了一项nis;

  11.当我们选择了在setup中选择了nis服务后,我们的选择会定义到/etc/nsswitch.conf 这个配置文件中,在这个选项中会有一项是USENIS=YES

  12.要用nis和nfs实现家目录的共享,
     实现步骤:
       在客户端建一个家目录
       # mkdir /home/guests
       # vim /etc/auto.master
          添加内容:
        /home/guests /etc/auto.home                 --->这里实现的是自动挂载的

      # vim /etc/auto.home
         写入内容:
          * -rw,soft 192.168.0.254:/home/guests/&         --->*代表所有的用户
      # service auotofs restart