Linux拾遗

1 目录与文件的本质

Linux系统的文件数据除了文件实际内容外,还含有文件权限(rwx)与文件属性(所有者、群组、时间参数等)等非常多的属性。文件系统通常会将这两部分的数据分别存放在不同的块。实际数据放到data block块中,若文件太大时,会占用多个block。权限与属性放置到inode中,一个文件占用一个inode,同时记录此文件的数据所在的 block号码。另外,还有一个超级块(superblock)会记录整个文件系统中的整体信息,包括inode与block的总量、使用量、剩余量等。

由于每个inode与block号码都有编号,而每个文件都会占用一个 inode,inode内则有文件数据放置的block号码。因此,我们可以知道,如果能够找到文件的inode的话,那么自然就会知道这个文件所放置数 据的block号码,当然也就能够读出该文件的实际数据了。这是个比较有效率的做法,因为如此一来我们的磁盘就能够在短时间内读取出全部的数据,读写性能 比较好。

当我们在Linux下的ext2文件系统新建一个目录时,ext2会分配一个 inode与至少一块block给该目录。其中,inode记录该目录的相关权限与属性,并可记录分配到的那块block号码。而block则是记录在这 个目录下的文件名与该文件名占用的inode号码数据。这就是为什么在Linux下叫目录而不像在window下叫文件夹,因为它确实就是一个索引。而且 这也解释了为什么明明所有文件都是在根目录下,为什么却还可以放在不同的磁盘?因为目录与其下的子目录和文件,就不是包含与被包含的关系,而只是一个索引。

2 Linux下文件的隐藏属性

显然,这里要说的并不是rwx那9个权限,而是要聊chattr和lsattr这两个命令。这两个命令在只能在Ext2/Ext3的文件系统上面生效,其他文件系统可能就无法支持了。

2.1 chattr 设置文件的隐藏属性

#chattr [+-=] [ASacdistu] 文件或目录
  参数:
    + :增加某一个特殊参数,其他原本存在参数则不动  
    - :删除某一个特殊参数,其他原本存在参数则不动
    = :仅有后面的参数

A :设置了A这个属性时,此文件(或目录)的访问时间atime将不会被修改。可避免I/O较慢的机器过度访问磁盘。
    S :一般文件是异步格式写入磁盘的,如果加上S这个属性时,对文件进行任何修改,将会“同步”写入磁盘中。
    a :设置a之后,这个文件将只能增加数据,而不能删除也不能修改数据,只有root才能设置这个属性。
    c :这个属性设置之后,讲会自动将此文件压缩,在读取的时候会自动解压缩,但是在存储的时候,将会先进行压缩后再存储。
    d :当dump程序被执行的时候,设置d属性将可使该文件(或目录)不会被dump备份。
    i :它可以让一个文件不能被删除、改名,设置连接也无法写入或添加数据。只有root才能设置这个属性。
    s :当文件设置了s属性时,如果这个文件被删除,它将会被完全从这个硬盘空间中删除。
    u :与s相反,当使用u来配置文件时,如果该文件被删除了,则数据内容其实还存在磁盘中。

2.2 lsattr 显示文件隐藏属性

#lsattr [-adR] 文件或目录
  参数:
    -a :将隐藏属性也显示出来
    -d :如果接的是目录,仅列出目录本身的属性而非目录内的文件名
    -R :连同子目录的数据也一并列出

3 内存交换空间(swap)

安装Linux时需要两个分区,一个是根目录,另外一个就是swap(内存交换空间)。swap的功能就是在应付物理内存不足的情况下所造成的内存扩展记录的功能。一般来说,如果硬件的配备足够的话,那么swap应该不会被我们的系统所使用到。

CPU所读取的数据都来自内存,当内存不足的时候,为了让后续的程序可以顺利运行,因此在内存中暂不使用的程序与数据就会被挪到swap中了。此时内存就会空出来给需要执行的程序加载。swap是用硬盘来暂时放置内存中的信息。

目前主机的内存都很大,因此在个人使用上,不设置swap也没有太大的问题。不过服务器可就不同了,犹豫不会知道何时会有大量来自网络的请求,因此最好能够预留一些swap来缓冲一下系统的内存用量。

新建swap分区的方法:
  1,分区:先使用fdisk在磁盘中分出一个分区给系统作为swap。由于Linux的fdisk默认会将分区的ID设置为Linux的文件系统,所以可能还得要设置一下system ID。
  2,格式化:利用新建swap格式的mkswap 设备文件名就能够格式化该分区成为swap格式。
  3,使用:最后将该swap设备启动,方法为swapon 设备文件名
  4,查看:最终通过free这个命令来查看一下内存的使用情况。

4 内核结构的区分

单内核与微内核是具有代表性的内核结构。
  单内核——所有内核服务均在内核空间中存在并运行。直接调出内核服务。

4.1 基于单内核的操作系统:

用户空间包含:应用、库
  内核包含:文件系统、进程间通信、I/O和设备管理、基本进程管理等。
  微内核——内核服务中一部分位于用户空间。利用消息传递方式调用内核服务。

4.2 基于微内核的操作系统:

用户空间包含:应用、库、文件系统、进程服务器、调页程序、驱动程序等。
  内核包含:微内核
  内核结构的区分标准是:所有内核服务是否集成在内核空间运行。
  2.6版Linux内核虽然具有支持模块的模块化内核,但模块也是运行在内核空间的,因此仍为单内核。

参考书籍:
《鸟哥的Linux私房菜》
《ARM Linux内核源码剖析》

你可能感兴趣的:(Linux拾遗)