zoukankan      html  css  js  c++  java
  • linux就该这么学--课程第七天

    学习内容

      文件访问控制列表

      su命令与sudo服务

      一切从"/"开始

      物理设备的命名规则

      文件系统与数据资料

    1. 文件访问控制列表

      如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL).

      通俗来讲,基于普通文件或目录设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了ACL,则目录中的文件会继承其ACL;若针对文件设置了ACL,则文件不再继承其所在目录的ACL。

      

      1.1 setfacl命令

        setfacl命令用于管理文件的ACL规则,格式为“setfacl [参数] 文件名称”。

        文件的ACL提供的是在所有者、所属组、其他人的读/写/执行权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或用户组、单一文件或目录来进行读/写/执行权限的控制。其中,针对目录文件需要使用-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL,则可以使用-b参数。

      1.2 getfacl命令

        getfacl命令用于显示文件上设置的ACL信息,格式为“getfacl 文件名称”。

      想要设置ACL,用的是setfacl命令;要想查看ACL,则用的是getfacl命令。

    2. su命令与sudo服务

      su命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户,比如从root管理员切换至普通用户:

       sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务,格式为“sudo [参数] 命令名称”。

       sudo服务中的可用参数以及作用

    参数 作用
    -h 列出帮助信息
    -l 列出当前用户可执行的命令
    -u 用户名或UID值 以指定的用户身份执行命令
    -k 清空密码的有效时间,下次执行sudo时需要再次进行密码验证
    -b 在后台执行指定的命令
    -p 更改询问密码的提示语

      总结来说,sudo命令具有如下功能:

    •     限制用户执行指定的命令:
    •     记录用户执行的每一条命令;
    •     配置文件(/etc/sudoers)提供集中的用户管理、权限与主机等参数;
    •     验证密码的后5分钟内(默认值)无须再让用户再次验证密码。

      如果担心直接修改配置文件会出现问题,则可以使用sudo命令提供的visudo命令来配置用户权限。这条命令在配置用户权限时将禁止多个用户同时修改sudoers配置文件,还可以对配置文件内的参数进行语法检查,并在发现参数错误时进行报错。注意: 只有root管理员才可以使用visudo命令编辑sudo服务的配置文件。

    3. 一切从"/"开始

        Linux系统中常见的目录名称以及相应内容

    目录名称 应放置文件的内容
    /boot 开机所需文件—内核、开机菜单以及所需配置文件等
    /dev 以文件形式存放任何设备与接口
    /etc 配置文件
    /home 用户主目录
    /bin 存放单用户模式下还可以操作的命令
    /lib 开机时用到的函数库,以及/bin与/sbin下面的命令要调用的函数
    /sbin 开机过程中需要的命令
    /media 用于挂载设备文件的目录
    /opt 放置第三方的软件
    /root 系统管理员的家目录
    /srv 一些网络服务的数据文件目录
    /tmp 任何人均可使用的“共享”临时目录
    /proc 虚拟文件系统,例如系统内核、进程、外部设备及网络状态等
    /usr/local 用户自行安装的软件
    /usr/sbin Linux系统开机时不会使用到的软件/命令/脚本
    /usr/share 帮助与说明文件,也可放置共享文件
    /var 主要存放经常变化的文件,如日志
    /lost+found 当文件系统发生错误时,将一些丢失的文件片段存放在这里

    4. 物理设备的命令规则

      在Linux系统中一切都是文件,硬件设备也不例外。既然是文件,就必须有文件名称。

      系统内核中的udev设备管理器会自动把硬件名称规范起来,目的是让用户通过设备文件的名字可以猜出设备大致的属性以及分区信息等;这对于陌生的设备来说特别方便。

      另外,udev设备管理器的服务会一直以守护进程的形式运行并侦听内核发出的信号来管理/dev目录下的设备文件。Linux系统中常见的硬件设备的文件名称如下所示。

    硬件设备 文件名称
    IDE设备 /dev/hd[a-d]
    SCSI/SATA/U盘 /dev/sd[a-p]
    软驱 /dev/fd[0-1]
    打印机 /dev/lp[0-15]
    光驱 /dev/cdrom
    鼠标 /dev/mouse
    磁带机 /dev/st0或/dev/ht0

      由于现在的IDE设备已经很少见了,所以一般的硬盘设备都会是以“/dev/sd”开头的。而一台主机上可以有多块硬盘,因此系统采用a~p来代表16块不同的硬盘(默认从a开始分配),而且硬盘的分区编号也很有讲究:

    •   主分区或扩展分区的编号从1开始,到4结束;
    •   逻辑分区从编号5开始。

      设备名称的理解?

      比如/dev/sda表示主板上第一个插槽上的存储设备,在实践操作的时候会发现果然如此,因此也就对这条理论知识更加深信不疑。但真相不是这样的,/dev目录中sda设备之所以是a,并不是由插槽决定的,而是由系统内核的识别顺序来决定的,而恰巧很多主板的插槽顺序就是系统内核的识别顺序,因此才会被命名为/dev/sda。大家以后在使用iSCSI网络存储设备时就会发现,明明主板上第二个插槽是空着的,但系统却能识别到/dev/sdb这个设备就是这个道理。

      对分区名称的理解?

      分区的编号不代表分区的个数。比如sda3表示这是设备上的第三个分区,而学员在做实验的时候确实也会得出这样的结果,但是这个理论知识是错误的,因为分区的数字编码不一定是强制顺延下来的,也有可能是手工指定的。因此sda3只能表示是编号为3的分区,而不能判断sda设备上已经存在了3个分区。

      

         首先,/dev/目录中保存的应当是硬件设备文件;

      其次,sd表示是存储设备;

      然后,a表示系统中同类接口中第一个被识别到的设备;

      最后,5表示这个设备是一个逻辑分区。

      总之,“/dev/sda5”表示的就是“这是系统中第一块被识别到的硬件设备中分区编号为5的逻辑分区的设备文件”。

      硬盘设备是由大量的扇区组成的,每个扇区的容量为512字节。其中第一个扇区最重要,它里面保存着主引导记录与分区表信息。就第一个扇区来讲,主引导记录需要占用446字节,分区表为64字节,结束符占用2字节;其中分区表中每记录一个分区信息就需要16字节,这样一来最多只有4个分区信息可以写到第一个扇区中,这4个分区就是4个主分区。第一个扇区中的数据信息如下所示。

       问题来了—第一个扇区最多只能创建出4个分区?

      于是为了解决分区个数不够的问题,可以将第一个扇区的分区表中16字节(原本要写入主分区信息)的空间(称之为扩展分区)拿出来指向另外一个分区。也就是说,扩展分区其实并不是一个真正的分区,而更像是一个占用16字节分区表空间的指针—一个指向另外一个分区的指针。这样一来,用户一般会选择使用3个主分区加1个扩展分区的方法,然后在扩展分区中创建出数个逻辑分区,从而来满足多分区(大于4个)的需求。

      所谓扩展分区,严格地讲它不是一个实际意义的分区,它仅仅是一个指向下一个分区的指针,这种指针结构将形成一个单向链表。

     5. 文件系统与数据资料

      用户在硬件存储设备中执行的文件建立、写入、读取、修改、转存与控制等操作都是依靠文件系统来完成的。文件系统的作用是合理规划硬盘,以保证用户正常的使用需求。

      Linux系统支持数十种的文件系统,而最常见的文件系统如下所示。

      Ext3:是一款日志文件系统,能够在系统异常宕机时避免文件系统资料丢失,并能自动修复数据的不一致与错误。然而,当硬盘容量较大时,所需的修复时间也会很长,而且也不能百分之百地保证资料不会丢失。它会把整个磁盘的每个写入动作的细节都预先记录下来,以便在发生异常宕机后能回溯追踪到被中断的部分,然后尝试进行修复。

      Ext4:Ext3的改进版本,作为RHEL 6系统中的默认文件管理系统,它支持的存储容量高达1EB(1EB=1,073,741,824GB),且能够有无限多的子目录。另外,Ext4文件系统能够批量分配block块,从而极大地提高了读写效率。

      XFS:是一种高性能的日志文件系统,而且是RHEL 7中默认的文件管理系统,它的优势在发生意外宕机后尤其明显,即可以快速地恢复可能被破坏的文件,而且强大的日志功能只用花费极低的计算和存储性能。并且它最大可支持的存储容量为18EB,这几乎满足了所有需求。

      日常在硬盘需要保存的数据实在太多了,因此Linux系统中有一个名为super block的“硬盘地图”。Linux并不是把文件内容直接写入到这个“硬盘地图”里面,而是在里面记录着整个文件系统的信息。因为如果把所有的文件内容都写入到这里面,它的体积将变得非常大,而且文件内容的查询与写入速度也会变得很慢。Linux只是把每个文件的权限与属性记录在inode中,而且每个文件占用一个独立的inode表格,该表格的大小默认为128字节,里面记录着如下信息:

    •   该文件的访问权限(read、write、execute);
    •   该文件的所有者与所属组(owner、group);
    •   该文件的大小(size);
    •   该文件的创建或内容修改时间(ctime);
    •   该文件的最后一次访问时间(atime);
    •   该文件的修改时间(mtime);
    •   文件的特殊权限(SUID、SGID、SBIT);
    •   该文件的真实数据地址(point)。

      而文件的实际内容则保存在block块中(大小可以是1KB、2KB或4KB),一个inode的默认大小仅为128B(Ext3),记录一个block则消耗4B。当文件的inode被写满后,Linux系统会自动分配出一个block块,专门用于像inode那样记录其他block块的信息,这样把各个block块的内容串到一起,就能够让用户读到完整的文件内容了。对于存储文件内容的block块,有下面两种常见情况(以4KB的block大小为例进行说明)。

    •   情况1:文件很小(1KB),但依然会占用一个block,因此会潜在地浪费3KB。
    •   情况2:文件很大(5KB),那么会占用两个block(5KB-4KB后剩下的1KB也要占用一个block)。

      计算机系统在发展过程中产生了众多的文件系统,为了使用户在读取或写入文件时不用关心底层的硬盘结构,Linux内核中的软件层为用户程序提供了一个VFS(Virtual File System,虚拟文件系统)接口,这样用户实际上在操作文件时就是统一对这个虚拟文件系统进行操作了。图6-5所示为VFS的架构示意图。从中可见,实际文件系统在VFS下隐藏了自己的特性和细节,这样用户在日常使用时会觉得“文件系统都是一样的”,也就可以随意使用各种命令在任何文件系统中进行各种操作了(比如使用cp命令来复制文件)。

  • 相关阅读:
    Win8系统 Python安装
    一些安卓开源框架整理
    Android 媒体键监听以及模拟媒体键盘的实现 demo
    android View 自动 GONE 问题
    Android 定时器TimerTask 简单使用
    关于Android studio 相对 eclipse 优点
    Java序列化与反序列化
    android shape的使用 边框
    Android Studio 修改 包名 package name
    Android WebView Long Press长按保存图片到手机
  • 原文地址:https://www.cnblogs.com/wshr210/p/13854590.html
Copyright © 2011-2022 走看看