鸟哥 05 Linux 的档案权限与目录配置

Posted thinkanddo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了鸟哥 05 Linux 的档案权限与目录配置相关的知识,希望对你有一定的参考价值。

  1. Linux 文件属性



  2. 文件属性示意图

    第一栏代表这个文件的类型与权限(permission):


  3. FHS Filesystem Hierarchy Standard(文件系统层次化标准)

    1. / (root, 根目录):与开机系统有关;
    2. /usr (unix software resource):与软件安装/执行有关;
    3. /var (variable):与系统运作过程有关。





     

     

  4.  

    我需要将一个文件的权限改为 -rwxr-xr-- 请问该如何下达指令?
    chmod 754 filename 或 chmod u=rwx,g=rx,o=r filename

  5. 以下是转载(http://blog.csdn.net/hguisu/article/details/6122513)感谢作者

    Linux系统一般有4个主要部分:

    操作系统结构,它们使得用户可以运行程序、管理文件并使用系统。

     1. linux内核

            内核是操作系统的核心,具有很多最基本功能,它负责管理系统的进程、内存、设备驱动程序、文件和网络系统,决定着系统的性能和稳定性。

           Linux 内核由如下几部分组成:内存管理、进程管理、设备驱动程序、文件系统和网络管理等。如图:

     

    图1

        系统调用接口:SCI 层提供了某些机制执行从用户空间到内核的函数调用。这个接口依赖于体系结构,甚至在相同的处理器家族内也是如此。SCI 实际上是一个非常有用的函数调用多路复用和多路分解服务。在 ./linux/kernel 中您可以找到 SCI 的实现,并在 ./linux/arch 中找到依赖于体系结构的部分。

       1. 内存管理 

            对任何一台计算机而言,其内存以及其它资源都是有限的。为了让有限的物理内存满足应用程序对内存的大需求量,Linux  采用了称为“虚拟内存”的内存管理方式。Linux  将内存划分为容易处理的“内存页”(对于大部分体系结构来说都是 4KB)。Linux 包括了管理可用内存的方式,以及物理和虚拟映射所使用的硬件机制。

         不过内存管理要管理的可不止 4KB 缓冲区。Linux 提供了对 4KB 缓冲区的抽象,例如 slab 分配器。这种内存管理模式使用 4KB 缓冲区为基数,然后从中分配结构,并跟踪内存页使用情况,比如哪些内存页是满的,哪些页面没有完全使用,哪些页面为空。这样就允许该模式根据系统需要来动态调整内存使用。
       为了支持多个用户使用内存,有时会出现可用内存被消耗光的情况。由于这个原因,页面可以移出内存并放入磁盘中。这个过程称为交换,因为页面会被从内存交换到硬盘上。内存管理的源代码可以在 ./linux/mm 中找到。

        2 .进程管理

           进程实际是某特定应用程序的一个运行实体。在 Linux  系统中,能够同时运行多个进程,Linux  通过在短的时间间隔内轮流运行这些进程而实现“多任务”。这一短的时间间隔称为“时间片”,让进程轮流运行的方法称为“进程调度” ,完成调度的程序称为调度程序。

           进程调度控制进程对CPU的访问。当需要选择下一个进程运行时,由调度程序选择最值得运行的进程。可运行进程实际上是仅等待CPU资源的进程,如果某个进程在等待其它资源,则该进程是不可运行进程。Linux使用了比较简单的基于优先级的进程调度算法选择新的进程。 

            通过多任务机制,每个进程可认为只有自己独占计算机,从而简化程序的编写。每个进程有自己单独的地址空间,并且只能由这一进程访问,这样,操作系统避免了进程之间的互相干扰以及“坏”程序对系统可能造成的危害。 为了完成某特定任务,有时需要综合两个程序的功能,例如一个程序输出文本,而另一个程序对文本进行排序。为此,操作系统还提供进程间的通讯机制来帮助完成这样的任务。Linux 中常见的进程间通讯机制有信号、管道、共享内存、信号量和套接字等。 

           内核通过 SCI 提供了一个应用程序编程接口(API)来创建一个新进程(fork、exec 或 Portable Operating System Interface [POSⅨ] 函数),停止进程(kill、exit),并在它们之间进行通信和同步(signal 或者 POSⅨ 机制)。

        3. 文件系统 

           和 DOS 等操作系统不同,Linux 操作系统中单独的文件系统并不是由驱动器号或驱动器名称(如 A:  或 C:  等)来标识的。相反,和 UNIX  操作系统一样,Linux 操作系统将独立的文件系统组合成了一个层次化的树形结构,并且由一个单独的实体代表这一文件系统。Linux  将新的文件系统通过一个称为“挂装”或“挂上”的操作将其挂装到某个目录上,从而让不同的文件系统结合成为一个整体。Linux  操作系统的一个重要特点是它支持许多不同类型的文件系统。Linux 中最普遍使用的文件系统是 Ext2,它也是 Linux  土生土长的文件系统。但 Linux  也能够支持 FAT、VFAT、FAT32、MINIX 等不同类型的文件系统,从而可以方便地和其它操作系统交换数据。由于 Linux  支持许多不同的文件系统,并且将它们组织成了一个统一的虚拟文件系统.

           虚拟文件系统(VirtualFileSystem,VFS):隐藏了各种硬件的具体细节,把文件系统操作和不同文件系统的具体实现细节分离了开来,为所有的设备提供了统一的接口,VFS提供了多达数十种不同的文件系统。虚拟文件系统可以分为逻辑文件系统和设备驱动程序。逻辑文件系统指Linux所支持的文件系统,如ext2,fat等,设备驱动程序指为每一种硬件控制器所编写的设备驱动程序模块。 

     

           虚拟文件系统(VFS)是 Linux 内核中非常有用的一个方面,因为它为文件系统提供了一个通用的接口抽象。VFS 在 SCI 和内核所支持的文件系统之间提供了一个交换层。即VFS 在用户和文件系统之间提供了一个交换层。

     

    VFS         在用户和文件系统之间提供了一个交换层:

           
      在 VFS 上面,是对诸如 open、close、read 和 write 之类的函数的一个通用 API 抽象。在 VFS 下面是文件系统抽象,它定义了上层函数的实现方式。它们是给定文件系统(超过 50 个)的插件。文件系统的源代码可以在 ./linux/fs 中找到。
      文件系统层之下是缓冲区缓存,它为文件系统层提供了一个通用函数集(与具体文件系统无关)。这个缓存层通过将数据保留一段时间(或者随即预先读取数据以便在需要是就可用)优化了对物理设备的访问。缓冲区缓存之下是设备驱动程序,它实现了特定物理设备的接口。
          因此,用户和进程不需要知道文件所在的文件系统类型,而只需要象使用 Ext2  文件系统中的文件一样使用它们。

         4. 设备驱动程序 

          设备驱动程序是 Linux  内核的主要部分。和操作系统的其它部分类似,设备驱动程序运行在高特权级的处理器环境中,从而可以直接对硬件进行操作,但正因为如此,任何一个设备驱动程序的错误都可能导致操作系统的崩溃。设备驱动程序实际控制操作系统和硬件设备之间的交互。设备驱动程序提供一组操作系统可理解的抽象接口完成和操作系统之间的交互,而与硬件相关的具体操作细节由设备驱动程序完成。一般而言,设备驱动程序和设备
    的控制芯片有关,例如,如果计算机硬盘是 SCSI  硬盘,则需要使用 SCSI  驱动程序,而不是 IDE 驱动程序。 

        5.网络接口(NET)   

           提供了对各种网络标准的存取和各种网络硬件的支持。网络接口可分为网络协议和网络驱动程序。网络协议部分负责实现每一种可能的网络传输协议。众所周知,TCP/IP  协议是 Internet  的标准协议,同时也是事实上的工业标准。Linux  的网络实现支持 BSD 套接字,支持全部的TCP/IP协议。Linux内核的网络部分由BSD套接字、网络协议层和网络设备驱动程序组成。 
        网络设备驱动程序负责与硬件设备通讯,每一种可能的硬件设备都有相应的设备驱动程序。

     


     

    1.     2 . linux shell

    shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
    目前主要有下列版本的shell。
    1.Bourne Shell:是贝尔实验室开发的。  
    2.BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,大部分linux的发行套件使用的都是这种shell。
    3.Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。    

     


     3 . linux 文件系统

     

    3.1 文件类型

    Linux下面的文件类型主要有:
    1) 普通文件C语言元代码、SHELL脚本、二进制的可执行文件等。分为纯文本和二进制。
    2) 目录文件:目录,存储文件的唯一地方。
    3) 链接文件:指向同一个文件或目录的的文件。
    4) 设备文件:与系统外设相关的,通常在/dev下面。分为块设备和字符设备。

    5)管道(FIFO)文件 :  提供进程建通信的一种方式
    6)套接字(socket) 文件: 该文件类型与网络通信有关

    可以通过ls –l, file, stat几个命令来查看文件的类型等相关信息。

    Linux目录    文件结构是文件存放在磁盘等存贮设备上的组织方法。主要体现在对文件和目录的组织上。
      目录提供了管理文件的一个方便而有效的途径。

      Linux使用标准的目录结构,在安装的时候,安装程序就已经为用户创建了文件系统和完整而固定的目录组成形式,并指定了每个目录的作用和其中的文件类型。

          完整的目录树可划分为小的部分,这些小部分又可以单独存放在自己的磁盘或分区上。这样,相对稳定的部分和经常变化的部分可单独存放在不同的分区中,从而方便备份或系统管理。目录树的主要部分有 root、/usr、/var、/home  等(图2) 。这样的布局可方便在 Linux 计算机之间共享文件系统的某些部分。 

       

                            图2

      Linux采用的是树型结构。最上层是根目录,其他的所有目录都是从根目录出发而生成的。

          微软的DOS和windows也是采用树型结构,但是在DOS和 windows中这样的树型结构的根是磁盘分区的盘符,有几个分区就有几个树型结构,他们之间的关系是并列的。CDEF      但是在linux中,无论操作系统管理几个磁盘分区,这样的目录树只有一个。从结构上讲,各个磁盘分区上的树型目录不一定是并列的。

    Linux磁盘分区

       一、主分区,扩展分区和逻辑分区:   

    linux分区不同于windows,硬盘和硬盘分区在Linux都表示为设备.

    硬盘分区一共有三种:主分区,扩展分区和逻辑分区。   

    硬盘的分区主要分为主分区(Primary Partion)和扩展分区(Extension Partion)两种,主分区和扩展分区的数目之和不能大于四个。

    主分区(Primary Partion):可以马上被使用但不能再分区。

    扩展分区(Extension Partion):必须再进行分区后才能使用,也就是说它必须还要进行二次分区。

    逻辑分区((Logical Partion)):由扩展分区建立起来的分区。逻辑分区没有数量上限制。

    扩展分区只不过是逻辑分区的“容器”,实际上只有主分区和逻辑分区进行数据存储。 

       二、Linux下硬盘分区的标识

    硬盘分区的标识一般使用/dev/hd[a-z]X或者/dev/sd[a-z]X来标识,其中[a-z]代表硬盘号,X代表硬盘内的分区号。

    整块硬盘分区的块号标识:Linux下用hda、hdb、sda、sdb 等来标识不同的硬盘;

    其中:

    IDE接口硬盘:表示为/dev/hda1、/dev/hdb ...;

    SCSI 接口的硬盘、SATA接口的硬盘表示为/dev/sda、/dev/sdb ... ... ;

    硬盘内的分区:如果X的值是1到4,表示硬盘的主分区(包含扩展分区);逻辑分区从是从5开始的,比如/dev/hda5肯定是逻辑分区了;

    例如:

    用hda1、hda2、 hda5、hda6 来标识不同的分区。其中,字母a 代表第一块硬盘,b代表第二块硬盘,依次类推。而数字1 代表一块硬盘的第一个分区、2 代表第二个分区,依次类推。1 到4 对应的是主分区(Primary Partition)或扩展分区(Extension Partition)。从5开始,对应的都是硬盘的逻辑分区(Logical Partition)。一块硬盘即使只有一个主分区,逻辑分区也是从5开始编号的,这点应特别注意。

    总结:一个硬盘分区首先要大确认在哪个硬盘,然后再确认它所在硬盘内的哪个分区。

      对于/dev/hda 类似的表示方法,也并不寞生吧;我们在Linux通过fdisk -l 就可以查到硬盘是/dev/hda还是/dev/hdb;

     请注意第一行, Disk /dev/hda: 80.0 GB, 80026361856 bytes ,这个就是表示机器中只有一个硬盘设备/dev/hda ,体积大小为 80.0G;下面的就是硬盘的分区,每个分区都有详细的信息,在这里不详细说了;

    Linux下磁盘分区和目录的关系如下:

    – 任何一个分区都必须挂载到某个目录上。

    – 目录是逻辑上的区分。分区是物理上的区分。

    – 磁盘Linux分区都必须挂载到目录树中的某个具体的目录上才能进行读写操作。

    – 根目录是所有Linux的文件和目录所在的地方,需要挂载上一个磁盘分区。

    3.4 linux主要目录的功用。

      /bin 二进制可执行命令
      /dev 设备特殊文件
      /etc 系统管理和配置文件
      /etc/rc.d 启动的配置文件和脚本
      /home 用户主目录的基点,比如用户user的主目录就是/home/user,可以用~user表示
      /lib 标准程序设计库,又叫动态链接共享库,作用类似windows里的.dll文件
      /sbin 系统管理命令,这里存放的是系统管理员使用的管理程序
      /tmp 公用的临时文件存储点
      /root 系统管理员的主目录(呵呵,特权阶级)
      /mnt 系统提供这个目录是让用户临时挂载其他的文件系统。
      /lost+found 这个目录平时是空的,系统非正常关机而留下“无家可归”的文件(windows下叫什么.chk)就在这里
      /proc 虚拟的目录,是系统内存的映射。可直接访问这个目录来获取系统信息
      /var 某些大文件的溢出区,比方说各种服务的日志文件
      /usr 最庞大的目录,要用到的应用程序和文件几乎都在这个目录。其中包含:
            /usr/X11R6 存放X window的目录
            /usr/bin 众多的应用程序
            /usr/sbin 超级用户的一些管理程序
            /usr/doc linux文档
            /usr/include linux下开发和编译应用程序所需要的头文件
            /usr/lib 常用的动态链接库和软件包的配置文件
            /usr/man 帮助文档
            /usr/src 源代码,linux内核的源代码就放在/usr/src/linux里
            /usr/local/bin 本地增加的命令
            /usr/local/lib 本地增加的库

    3.5  linux文件系统

      文件系统指文件存在的物理空间,linux系统中每个分区都是一个文件系统,都有自己的目录层次结构。linux会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。一个操作系统的运行离不开对文件的操作,因此必然要拥有并维护自己的文件系统。

    1.文件系统类型:
        ext2 : 早期linux中常用的文件系统
        ext3 : ext2的升级版,带日志功能
        RAMFS : 内存文件系统,速度很快
        NFS : 网络文件系统,由SUN发明,主要用于远程文件共享
        MS-DOS : MS-DOS文件系统
        VFAT : Windows 95/98 操作系统采用的文件系统
        FAT : Windows XP 操作系统采用的文件系统
        NTFS: Windows NT/XP 操作系统采用的文件系统
        HPFS : OS/2 操作系统采用的文件系统
        PROC : 虚拟的进程文件系统
        ISO9660 : 大部分光盘所采用的文件系统
        ufsSun : OS 所采用的文件系统
        NCPFS : Novell 服务器所采用的文件系统
        SMBFS : Samba 的共享文件系统
        XFS : 由SGI开发的先进的日志文件系统,支持超大容量文件
        JFS :IBM的AIX使用的日志文件系统
        ReiserFS : 基于平衡树结构的文件系统
        udf: 可擦写的数据光盘文件系统

     

    2.文件系统特性:

        磁盘分区完毕后还需要进行格式化(format),之后操作系统才能够使用这个分区。 格式化的目的是能使操作系统可以使用的文件系统格式(即我们上面提到文件系统类型). 

            每种操作系统能够使用的文件系统并不相同. 如windows 98 以前的微软操作系统主要利用的文件系统是 FAT (或 FAT16),windows 2000 以后的版本有所谓的 NTFS 文件系统,至于 Linux 的正统文件系统则为 Ext2 (Linux second extended file system, ext2fs)这一个。此外,在默认的情况下,windows 操作系统是不会认识 Linux 的 Ext2 的。

          传统的磁盘与文件系统之应用中,一个分区就是只能够被格式化成为一个文件系统,所以我们可以说一个 filesystem 就是一个 partition。但是由于新技术的利用,例如我们常听到的LVM与软件磁盘阵列(software raid), 这些技术可以将一个分区格式化为多个文件系统(例如LVM),也能够将多个分区合成一个文件系统(LVM, RAID)! 所以说,目前我们在格式化时已经不再说成针对 partition 来格式化了, 通常我们可以称呼一个可被挂载的数据为一个文件系统而不是一个分区喔!

        那么文件系统是如何运行的呢?这与操作系统的文件数据有关。较新的操作系统的文件数据除了文件实际内容外, 通常含有非常多的属性,例如 Linux 操作系统的文件权限(rwx)与文件属性(拥有者、群组、时间参数等)。 文件系统通常会将这两部份的数据分别存放在不同的区块,权限与属性放置到 inode 中,至于实际数据则放置到 data block 区块中。 另外,还有一个超级区块 (superblock) 会记录整个文件系统的整体信息,包括 inode 与 block 的总量、使用量、剩余量等。

     

          对于一个磁盘分区来说,在被指定为相应的文件系统后,整个分区被分为 1024,2048 和 4096 字节大小的块。根据块使用的不同,可分为:

    1. 超级块(Superblock): 这是整个文件系统的第一块空间。包括整个文件系统的基本信息,如块大小,inode/block的总量、使用量、剩余量,指向空间 inode 和数据块的指针等相关信息。
    2. inode块(文件索引节点) : 文件系统索引,记录文件的属性它是文件系统的最基本单元,是文件系统连接任何子目录、任何文件的桥梁。每个子目录和文件只有唯一的一个 inode 块。它包含了文件系统中文件的基本属性(文件的长度、创建及修改时间、权限、所属关系)、存放数据的位置等相关信息. 在 Linux 下可以通过 "ls -li" 命令查看文件的 inode 信息。硬连接和源文件具有相同的 inode 。
    3. 数据块(Block) :实际记录文件的内容,若文件太大时,会占用多个 block。为了提高目录访问效率,Linux 还提供了表达路径与 inode 对应关系的 dentry 结构。它描述了路径信息并连接到节点 inode,它包括各种目录信息,还指向了 inode 和超级块。
            就像一本书有封面、目录和正文一样。在文件系统中,超级块就相当于封面,从封面可以得知这本书的基本信息; inode 块相当于目录,从目录可以得知各章节内容的位置;而数据块则相当于书的正文,记录着具体内容。
             Linux正统的文件系统(如ext2、3等)将硬盘分区时会划分出超级块、inode Table区块和data block数据区域。一个文件由一个超级块、inode和数据区域块组成。Inode包含文件的属性(如读写属性、owner等,以及指向数据块的指针),数据区域块则是文件内容。当查看某个文件时,会先从inode table中查出文件属性及数据存放点,再从数据块中读取数据。
    <

    以上是关于鸟哥 05 Linux 的档案权限与目录配置的主要内容,如果未能解决你的问题,请参考以下文章

    鸟哥的linux私房菜学习记录之档案与目录管理

    笔记《鸟哥的Linux私房菜》7 Linux档案与目录管理

    Linux的文件权限与目录配置 - 鸟哥Linux私房菜第六章 - 思维导图

    鸟哥私房菜 第6章 Linux的文件权限与目录配置 课后习题

    鸟哥私房菜之文件权限与目录配置

    Linux 的档案权限与目录配置