linux下的ls命令

在LINUX系统中有一个重要的概念:一切都是文件。其实这是UNIX哲学的一个体现,而Linux是重写UNIX而来,所以这个概念也就传承了下来。在UNIX系统中,把一切资源都看作是文件,包括硬件设备。UNIX系统把每个硬件都看成是一个文件,通常称为设备文件,这样用户就可以用读写文件的方式实现对硬件的访问。这样带来优势也是显而易见的:

     实现了设备无关性。

     UNIX 权限模型也是围绕文件的概念来建立的,所以对设备也就可以同样处理了。

     下面我们来详细的了解Linux文件系统的几个要点。

    一、 物理磁盘到文件系统

    我们知道文件最终是保存在硬盘上的。硬盘最基本的组成部分是由坚硬金属材料制成的涂以磁性介质的盘片,不同容量硬盘的盘片数不等。每个盘片有两面,都可记录信息。盘片被分成许多扇形的区域,每个区域叫一个扇区,每个扇区可存储128×2的N次方(N=0.1.2.3)字节信息。在DOS中每扇区是128×2的2次方=512字节,盘片表面上以盘片中心为圆心,不同半径的同心圆称为磁道。硬盘中,不同盘片相同半径的磁道所组成的圆柱称为柱面。磁道与柱面都是表示不同半径的圆,在许多场合,磁道和柱面可以互换使用,我们知道,每个磁盘有两个面,每个面都有一个磁头,习惯用磁头号来区分。扇区,磁道(或柱面)和磁头数构成了硬盘结构的基本参数,帮这些参数可以得到硬盘的容量,基计算公式为:

    存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数

    要点:

    (1)硬盘有数个盘片,每盘片两个面,每个面一个磁头

    (2)盘片被划分为多个扇形区域即扇区

    (3)同一盘片不同半径的同心圆为磁道

    (4)不同盘片相同半径构成的圆柱面即柱面

    (5)公式: 存储容量=磁头数×磁道(柱面)数×每道扇区数×每扇区字节数

    (6)信息记录可表示为:××磁道(柱面),××磁头,××扇区

    那么这些空间又是怎么管理起来的呢?unix/linux使用了一个简单的方法。如图所示。

    

    图1.jpg

    它将磁盘块分为以下三个部分:

    1) 超级块,文件系统中第一个块被称为超级块。这个块存放文件系统本身的结构信息。比如,超级块记录了每个区域的大小,超级块也存放未被使用的磁盘块的信息。

    2) I-切点表。超级块的下一个部分就是i-节点表。每个i-节点就是一个对应一个文件/目录的结构,这个结构它包含了一个文件的长度、创建及修改时间、权限、所属关系、磁盘中的位置等信息。一个文件系统维护了一个索引节点的数组,每个文件或目录都与索引节点数组中的唯一一个元素对应。系统给每个索引节点分配了一个号码,也就是该节点在数组中的索引号,称为索引节点号

    3) 数据区。文件系统的第3个部分是数据区。文件的内容保存在这个区域。磁盘上所有块的大小都一样。如果文件包含了超过一个块的内容,则文件内容会存放在多个磁盘块中。一个较大的文件很容易分布上千个独产的磁盘块中。

    二、 创建一个文件的过程

    我们从前面可以知道文件的内容和属性是分开存放的,那么又是如何管理它们的呢?现在我们以创建一个文件为例来讲解。

    在命令行输入命令:

    $ who > userlist

    我们可以通过系统命令ls来查看新建文件userlist的信息:(ls 命令后的i就表示打印i节点信息)

    

    图2.jpg

    当完成这个命令时。文件系统中增加了一个存放命令who输出内容的新文件userlist,那么这整个过程到底是怎么回事呢?

    文件主要有属性、内容以及文件名三项。内核将文件内容存放在数据区,文件属性存放在i-节点,文件名存放在目录中。图2显示了创建一个文件的例子,假如这个新文件要3 个存储块来存放内容。那么整个个程大概如下:

    

    图3.jpg

    创建成功一个文件主要有以下四个步骤:

    1) 存储属性 也就是文件属性的存储,内核先找到一块空的i-节点。图3中。内核找到i-节点号921130。内核把文件的信息记录其中。如文件的大小、文件所有者、和创建时间等

    2) 存储数据 即文件内容的存储,由于该文件需要3个数据块。因此内核从自由块的列表中找到3个自由块。图3中分别为600、200、992,内核缓冲区的第一块数据复制到块600,第二和第三分别复制到922和600.

    3) 记录分配情况,数据保存到了三个数据块中。所以必须要记录起来,以后再找到正确的数据。分配情况记录在文件的i-节点中的磁盘序号列表里。这3个编号分别放在最开始的3个位置。

    4) 添加文件名到目录,新文件的名字是userlist 内核将文件的入口(47,userlist)添加到目录文件里。文件名和i-节点号之间的对应关系将文件名和文件和文件的内容属性连接起来,找到文件名就找到文件的i-节点号,通过i-节点号就能找到文件的属性和内容。

    三、 创建一个目录的过程

    前面说了创建一个文件的大概过程,也了解文件内容、属性以及入口的保存方式,那么创建一个目录时又是怎么回事呢?

    我现在test目录使用命令mkdir 新增一个子目录child:

    

    图4.jpg

    从用户的角度看,目录child是目录test的一个子目录,那么在系统中这层关系是怎么实现的呢?实际上test目录包含一个指向子目录child的i-节点的链接,原理跟普通文件一样,因为目录也是文件。目录在系统中的保存方式和结构大概如下:

    

    图5.jpg

    目录其实也是文件,只是它的内容比较特殊。所以它的创建过程和文件创建过程一样,只是第二步写的内容不同。

    1) 系统找到空闲的i-节点号887220,写入目录的属性

    2) 找到空闲的数据块1002来存储目录的内容,只是目录的内容比较特殊,包含文件名字列表,列表一般包含两个部分:i-节点号和文件名,这个列表其实也就是文件的入口,新建的目录至少包含三个目录”.”和”..”其中”.”指向自己,”..”指向上级目录,我们可以通过比较对应的i-节点号来验证,887270 对应着上级目录中的child对应的i-节点号

    3) 记录分配情况。这个和创建文件完全不样

    4) 添加目录的入口到父目录,即在父目录中的child入口。

    一般都说文件存放在某个目录中,其实目录中存入的只是文件在i-节点表的入口,而文件的内容则存储在数据区。图3中,我们一般会说“文件userlist在目录test中”,其实这意味着目录test中有一个指向i-节点921130的链接,这个链接所附加的文件名为userlist,这也可以这样理解:目录包含的是文件的引用,每个引用被称为链接。文件的内容存储在数据块。文件的属性被记录在一个被称为i-节点的结构中。I-节点的编号和文件名关联起来存在目录中。

    注意:其中“.”表示是当前目录。而“..”是当前目录的父目录。但也有特殊情况:如我们查看根目录/的情况:

    

    图6.jpg

    发现“.”和“..”都指向i-节点2。实际上当我们用mkfs创建一个文件系统时,mkfs都会将根目录的父目录指向自己。所以根目录下.和..指向同一个i-节点也不奇怪了。

    四、 理解链接

    链接分为两种,1是硬链接,2是符号链接(也称为软链接)

    1、 硬链接

    硬链接(had link),是将目录链接到文件树的指针,硬链接同时也是将文件名和文件本身链接起来的指针

    我们现在进入目录child:并输入法以下命令

    

    图7.jpg

    我们发现通过ln建立的链接文件mylink对应的i-节点也是921130.和上一级目录下的userlist指向的i-节点号是一样的。由此我们可以知道mylink和../userlist其实是指向同一个i-节点号,也可以理解为这两者其实是同一个文件。

    

    图8.jpg

    创建一个链接的步骤大概如下:

    1) 通过原文件的文件名找到文件的i-节点号

    2) 添加文件名关联到目录,新文件的名字是mylink 内核将文件的入口(921130,mylink)添加到目录文件里。

    和创建文件的过程比较发现,链接少了写文件内容的步骤,完全相同的是把文件名关联到目录这一步

    现在.i- 节点号921130对应了两个文件名。链接数也会变成2个,文件的内容并不会发生任何变化。前面我们已经讲了:目录包含的是文件的引用,每个引用被称为链接。所以链接文件和原始文件本质上是一样的,因为它们都是指向同一个i-节点。由于此原因也就可以理解链接的下列特性:你改变其中任何一个文件的内容,别的链接文件也一样是变化;另外如果你删除某一个文件,系统只会在所指向的i-节点上把链接数减1,只有当链接数减为零时才会真正释放i-节点。

    硬链接有两个特点:

    1)不能跨文件系统

    2)不能对目录

    2、符号链接

    另外还有一种符号链接,也称“软链接”,符号链接是通过文件名引用文件,而不是i-节点号,这和硬链接的原理完全是不同的,我们先看属性:

    

    图9.jpg

    发现通过ln –s 创建的软链接mylink2的i-节点是1574059,和../userlist的不相同。软链接的好处就是可以跨不同的文件系统,而且可以链接目录

时间: 2024-10-04 19:43:34

linux下的ls命令的相关文章

linux系统中ls命令的用法

普通文件: -,f目录文件: d链接文件(符号链接): L设备文件:字符设备:c块设备:b命名管道: p套接字文件: s linux文件时间戳 时间分为三种类型:创建时间,修改时间:open访问时间:读写改变时间:源数据发生改变时间   4. ls -s 在每个文件的后面打印出文件的大小. size(大小,以K为单位)5. ls -t 按时间进行文件的排序 Time(时间)6. ls -A 列出除了"."和".."以外的文件.7. ls -R 将目录下所有的子目录的

试试Linux下的ip命令,ifconfig已经过时了

试试Linux下的ip命令,ifconfig已经过时了 linux的ip命令和ifconfig类似,但前者功能更强大,并旨在取代后者.使用ip命令,只需一个命令,你就能很轻松地执行一些网络管理任务.ifconfig是net-tools中已被废弃使用的一个命令,许多年前就已经没有维护了.iproute2套件里提供了许多增强功能的命令,ip命令即是其中之一. Net tools vs Iproute2 要安装ip,请点击这里下载iproute2套装工具 .不过,大多数Linux发行版已经预装了ipr

浅谈Linux下通过find命令进行rm文件删除的小技巧_Linux

我们经常会通过find命令进行批量操作,如:批量删除旧文件.批量修改.基于时间的文件统计.基于文件大小的文件统计等,在这些操作当中,由于rm删除操作会导致目录结构变化,如果要通过find结合rm的操作写成脚本,就会遇到一些麻烦,本文通过一个例子为大家进行介绍. 系统环境: SUSE Linux Enterprise Server 11 或 Red Hat Enterprise Linux 问题症状: 客户现场有一个自动化的脚本,有以下的find语句,每天运行以删除某个目录下7天以前的文件或目录,

实例详解Linux下的Make命令_Linux

前言 无论是在linux 还是在Unix环境 中,make都是一个非常重要的编译命令.不管是自己进行项目开发还是安装应用软件,我们都经常要用到make或make install.利用make工具,我们可以将大型的开发项目分解成为多个更易于管理的模块,对于一个包括几百个源文件的应用程序,使用make和 makefile工具就可以简洁明快地理顺各个源文件之间纷繁复杂的相互关系.而且如此多的源文件,如果每次都要键入gcc命令进行编译的话,那对程序员 来说简直就是一场灾难.而make工具则可自动完成编译

[20161229]linux下使用oclumon命令(rac)

[20161229]linux下使用oclumon命令(rac).txt --11G RAC下grid 存在一个命令oclumon可以了解监测群集健康.简单了解一下. 1.环境: SYS@+ASM1> select * from v$version where rownum<=1; BANNER -------------------------------------------------------------------------------- Oracle Database 11g

将linux下的rm命令改造成移动文件至回收站【转】

转自:http://blog.csdn.net/a3470194/article/details/16863803 [-] 将linux下的rm命令改造成移动文件至回收站 将AIX下的rm命令改造成移动文件至回收站 将linux下的rm命令改造成移动文件至回收站 rm是Linux下文件删除的命令,它是Linux下非常强大却又非常危险的一条命令,特别是rm -rf有时候强大到让你欲哭无泪,当你想清除当前目录下的所有文件和目录时,很简单 #rm -rf ./* 这没什么,但是,但是如果不小心打成这样

Linux下通过script 命令记录(数据库)操作步骤

对DBA而言,经常碰到升级数据库或是apply patch,以及有些时候需要运行大量的脚本.对于这些操作我们希望现在在屏幕同时又输出的文件以备后续查询过程中曾经丢失的步骤或错误.Linux下的script命令就是解决这个问题的好帮手   1.script命令描述   复制代码 代码如下: script命令会记录所有的操作到文件同时在屏幕上输出,直到终止登陆的会话,或使用CRTL+D,或使用exit退出则停止记录. 这个命令对于数据库的升级或是重要设置的情形下使用可以用于后续查询操作成功或失败.

如何通过c语言实现Linux下的top命令来获取cpu利用率?

问题描述 如何通过c语言实现Linux下的top命令来获取cpu利用率? 如何通过c语言实现Linux下的top命令来获取cpu利用率?我下载了好几个版本的procps但是在Ubuntu下编译里面的top.c时都出错,求各位大神帮忙解答. 解决方案 linux下用top命令查看cpu利用率超过100%linux下用top命令查看cpu利用率超过100%LINUX下查看CPU使用率的 top 命令 解决方案二: #include <stdio.h>#include <unistd.h>

怎么样称得上是Linux下优秀的命令行计算器

怎么样称得上是Linux下优秀的命令行计算器 每个现代的Linux桌面发行版都预装着一个带有图形界面的计算器程序.不过如果你的工作区中全是命令行窗口,那么你一定会在其中的一个命令行窗口中处理一些数字相关的问题.或许你在寻找一款基于命令行的计算器程序.如果是这样的话,GNU bc("basic calculator"的缩写)会是你不二的选择.当然Linux下有很多基于命令行的计算器应用,我认为GNU bc是功能最强大和最有用的. 在GNU时代之前,bc实际上是一个著名的精密计算语言.它的