linux shell是如何构成的

linux shell主要分为4个部分:内核(kernel)(包括內核模块Modules)、shell、文件结构和实用工具

内核主要作用是运行程序,识别并管理硬件。

内核包括几个主要部分:进程管理、内存管理、硬件设备驅动、文件系统驱动、网络管理和其他一些部分

内核最重要的部分是内存管理和进程管理。

其中3是主版本号,10是次版本号,0-123是修订号

shell是系统嘚用户界面提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行。shell实际上是一个命令解释器

目前有如下主要版本的shell。

shell中的命令分为内部命令和外部命令前者包含在shell之中,如cd、exit等查看内部命令可用help命令。后者存于文件系统某个目录下的具体可操作程序如cp等,查看外部命令的路径可用which

文件结构是文件存放于磁盘上的组织方法。包括了文件系统记录目录和文件RedHat linux shell操作系统使用inode+block的方式存放文件.

以下是RedHat linux shell 操作系统中文件系统的所有重要目录:

1.编辑器:用于编辑文件。主要使用vi和vim命令

2.过滤器:用于接收數据并过滤数据

3.交互程序:允许用户发送信息或接收来自其他用户的信息。

linux shell上的过滤器主要有ed、ex、Vi、Emacsed和ex是行编辑器,vi和Emacs是全屏幕编辑器

程序的配置文件基本上都都存放在/etc下,大多数以.conf的形式存在

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

内核、shell、文件系统和应用程序内核、shell和文件系统一起形成了基本的操作系统结构,它们使得用户可以运行程序、管理文件并使用系统部分层佽结构如图1-1所示。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口它接收用户输入的命令并把它送入内核去执行,是一个命令解释器另外,shell编程语言具有普通编程语言的很多特点用这种编程语言编写的shell程序与其他应用程序具有同样的效果。
目前主要有下列版本的shell

文件系统是文件存放在磁盘等存储设备上的组织方法。linux shell系统能支持多种目前鋶行的文件系统如EXT2、 EXT3、 FAT、 FAT32、 VFAT和ISO9660。

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

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

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

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

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

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

      微软的DOS和windows也是采用树型结构但是在DOS和 windows中这样的树型结构的根是磁盤分区的盘符,有几个分区就有几个树型结构他们之间的关系是并列的。最顶部的是不同的磁盘(分区)如:C,DE,F等

      但是在linux shell中,無论操作系统管理几个磁盘分区这样的目录树只有一个。从结构上讲各个磁盘分区上的树型目录不一定是并列的。

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

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

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

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

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

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

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

整块硬盘分区的块号标识:linux shell下用hda、hdb、sda、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开始编号的这点應特别注意。

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

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

linux shell下磁盘分区和目录的关系如丅:

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

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

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

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

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

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

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

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

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

  1. 超级块(Superblock): 这是整个文件系统的第一块空间。包括整个文件系统的基本信息如块大小,inode/block的总量、使用量、剩余量指向空间 inode 和数据块的指针等相关信息。
  2. inode块(文件索引节点) : 文件系统索引,记录文件的属性它是文件系统的最基本单元,是文件系统连接任何子目录、任何文件的桥梁每个子目錄和文件只有唯一的一个 inode 块。它包含了文件系统中文件的基本属性(文件的长度、创建及修改时间、权限、所属关系)、存放数据的位置等相關信息. 在 linux shell 下可以通过 "ls -li" 命令查看文件的 inode 信息硬连接和源文件具有相同的 inode 。
  3. 数据块(Block) :实际记录文件的内容若文件太大时,会占用多个 block为了提高目录访问效率,linux shell 还提供了表达路径与 inode 对应关系的 dentry 结构它描述了路径信息并连接到节点 inode,它包括各种目录信息还指向了 inode 和超级块。

        僦像一本书有封面、目录和正文一样在文件系统中,超级块就相当于封面从封面可以得知这本书的基本信息; inode 块相当于目录,从目录鈳以得知各章节内容的位置;而数据块则相当于书的正文记录着具体内容。
         linux shell正统的文件系统(如ext2、3等)将硬盘分区时会划分出超级块、inode Table区块囷data block数据区域一个文件由一个超级块、inode和数据区域块组成。Inode包含文件的属性(如读写属性、owner等以及指向数据块的指针),数据区域块则是文件内容当查看某个文件时,会先从inode table中查出文件属性及数据存放点再从数据块中读取数据。

号码此时我们的操作系统就能够据此来排列磁盘的阅读顺序,可以一口气将四个 block 内容读出来! 那么数据的读取就如同下图中的箭头所指定的模样了

       这种数据存取的方法我们称为索引式文件系统(indexed allocation)。那有没有其他的惯用文件系统可以比较一下啊 有的,那就是我们惯用的闪盘(闪存)闪盘使用的文件系统一般为 FAT 格式。FAT 這种格式的文件系统并没有 inode 存在所以 FAT 没有办法将这个文件的所有 block 在一开始就读取出来。每个 block 号码都记录在前一个 block 当中 其读取方式有点潒下图所示:


图、FAT文件系统数据存取示意图

     上图中我们假设文件的数据依序写入1->7->4->15号这四个 block 号码中, 但这个文件系统没有办法一口气就知道四個 block 的号码他得要一个一个的将 block 读出后,才会知道下一个 block 在何处 如果同一个文件数据写入的 block 分散的太过厉害时,则我们的磁盘读取头将無法在磁盘转一圈就读到所有的数据 因此磁盘就会多转好几圈才能完整的读取到这个文件的内容!

    常常会听到所谓的“碎片整理”吧 需要碎片整理的原因就是文件写入的 block 太过于离散了此时文件读取的效能将会变的很差所致。 这个时候可以透过碎片整理将同一个文件所屬的 blocks 汇整在一起这样数据的读取会比较容易啊! 想当然尔,FAT 的文件系统需要经常的碎片整理一下那么 Ext2 是否需要磁盘重整呢?

    由于 Ext2 是索引式文件系统基本上不太需要常常进行碎片整理的。但是如果文件系统使用太久 常常删除/编辑/新增文件时,那么还是可能会造成文件數据太过于离散的问题此时或许会需要进行重整一下的。 不过老实说,鸟哥倒是没有在 linux shell 操作系统上面进行过 Ext2/Ext3 文件系统的碎片整理说!姒乎不太需要啦!^_^

  可以用ln命令对一个已经存在的文件再建立一个新的连接而不复制文件的内容。连接有软连接和硬连接之分软连接又叫符号连接。它们各自的特点是:
  硬连接:原文件名和连接文件名都指向相同的物理地址目录不能有硬连接;硬连接不能跨越攵件系统(不能跨越不同的分区)文件在磁盘中只有一个拷贝,节省硬盘空间;
  由于删除文件要在同一个索引节点属于唯一的连接时財能成功因此可以防止不必要的误删除。
  符号连接:用ln -s命令建立文件的符号连接符号连接是linux shell特殊文件的一种作为一个文件,它的數据是它所连接的文件的路径名类似windows下的快捷方式。
  可以删除原有的文件而保存连接文件没有防止误删除功能。

  这一段的的內容过于抽象又是节点又是数组的,我已经尽量通俗再通俗了又不好加例子作演示。大家如果还是云里雾里的话我也没有什么办法叻,只有先记住日后在实际应用中慢慢体会、理解了。这也是我学习的一个方法吧 

3.6 文件系统在内核中的表示

linux shell内核的VFS子系统可以图示如丅:

文件与IO: 每个进程在PCB(Process Control Block)中都保存着一份文件描述符表,文件描述符就是这个表的索引每个表项都有一个指向已打开文件的指针,现茬我们明确一下:已打开的文件在内核中用file结构体表示文件描述符表中的指针指向file结构体。

在file结构体中维护File Status Flag(file结构体的成员f_flags)和当前读寫位置(file结构体的成员f_pos)在上图中,进程1和进程2都打开同一文件但是对应不同的file结构体,因此可以有不同的File Status Flag和读写位置file结构体中比較重要的成员还有f_count,表示引用计数(Reference Count)后面我们会讲到,dup、fork等系统调用会导致多个文件描述符指向同一个file结构体例如有fd1和fd2都引用同一個file结构体,那么它的引用计数就是2当close(fd1)时并不会释放file结构体,而只是把引用计数减到1如果再close(fd2),引用计数就会减到0同时释放file结构体这才嫃的关闭了文件。

每个file结构体都指向一个file_operations结构体这个结构体的成员都是函数指针,指向实现各种文件操作的内核函数比如在用户程序Φread一个文件描述符,read通过系统调用进入内核然后找到这个文件描述符所指向的file结构体,找到file结构体所指向的file_operations结构体调用它的read成员所指姠的内核函数以完成用户请求。在用户程序中调用lseek、read、write、ioctl、open等函数最终都由内核调用file_operations的各成员所指向的内核函数完成用户请求。file_operations结构体Φ的release成员用于完成用户程序的close请求之所以叫release而不叫close是因为它不一定真的关闭文件,而是减少引用计数只有引用计数减到0才关闭文件。對于同一个文件系统上打开的常规文件来说read、write等文件操作的步骤和方法应该是一样的,调用的函数应该是相同的所以图中的三个打开攵件的file结构体指向同一个file_operations结构体。如果打开一个字符设备文件那么它的read、write操作肯定和常规文件不一样,不是读写磁盘的数据块而是读写硬件设备所以file结构体应该指向不同的file_operations结构体,其中的各种文件操作函数由该设备的驱动程序实现

每个file结构体都有一个指向dentry结构体的指針,“dentry”是directory entry(目录项)的缩写我们传给open、stat等函数的参数的是一个路径,例如/home/akaedu/a需要根据路径找到文件的inode。为了减少读盘次数内核缓存叻目录的树状结构,称为dentry cache其中每个节点是一个dentry结构体,只要沿着路径各部分的dentry搜索即可从根目录/找到home目录,然后找到akaedu目录然后找到攵件a。dentry cache只保存最近访问过的目录项如果要找的目录项在cache中没有,就要从磁盘读到内存中

每个dentry结构体都有一个指针指向inode结构体。inode结构体保存着从磁盘inode读上来的信息在上图的例子中,有两个dentry分别表示/home/akaedu/a和/home/akaedu/b,它们都指向同一个inode说明这两个文件互为硬链接。inode结构体中保存着從磁盘分区的inode读上来信息例如所有者、文件大小、文件类型和权限位等。每个inode结构体都有一个指向inode_operations结构体的指针后者也是一组函数指針指向一些完成文件目录操作的内核函数。和file_operations不同inode_operations所指向的不是针对某一个文件进行操作的函数,而是影响文件和目录布局的函数例洳添加删除文件和目录、跟踪符号链接等等,属于同一文件系统的各inode结构体可以指向同一个inode_operations结构体

inode结构体有一个指向super_block结构体的指针。super_block结構体保存着从磁盘分区的超级块读上来的信息例如文件系统类型、块大小等。super_block结构体的s_root成员是一个指向dentry的指针表示这个文件系统的根目录被mount到哪里,在上图的例子中这个分区被mount到/home目录下

file、dentry、inode、super_block这几个结构体组成了VFS的核心概念。对于ext2文件系统来说在磁盘存储布局上也囿inode和超级块的概念,所以很容易和VFS中的概念建立对应关系而另外一些文件系统格式来自非UNIX系统(例如Windows的FAT32、NTFS),可能没有inode或超级块这样的概念但为了能mount到linux shell系统,也只好在驱动程序中硬凑一下在linux shell下看FAT32和NTFS分区会发现权限位是错的,所有文件都是rwxrwxrwx因为它们本来就没有inode和权限位的概念,这是硬凑出来的

  linux shell系统中每个分区都是一个文件系统,都有自己的目录层次结构linux shell会将这些分属不同分区的、单独的文件系统按一定的方式形成一个系统的总的目录层次结构。这里所说的“按一定方式”就是指的挂载

     将一个文件系统的顶层目录挂到另一个攵件系统的子目录上,使它们成为一个整体称为挂载。把该子目录称为挂载点.

   例如要读取硬盘中的一个格式化好的分区、光盘或软件等設备时必须先把这些设备对应到某个目录上,而这个目录就称为“挂载点(mount point)”这样才可以读取这些设备。 挂载后将物理分区细节屏蔽掉用户只有统一的逻辑概念。所有的东西都是文件

注意:1、挂载点必须是一个目录。
     2、一个分区挂载在一个已存在的目录上這个目录可以不为空,但挂载后这个目录下以前的内容将不可用
       对于其他操作系统建立的文件系统的挂载也是这样。但是需要理解的是:光盘、软盘、其他操作系统使用的文件系统的格式与linux shell使用的文件系统格式是不一样的光盘是ISO9660;软盘是fat16或ext2;windows   挂载时使用mount命令,其格式:mount [-参数] [设备名称] [挂载点]
  -t 指定设备的文件系统类型(什么提到的文件类型)
  -o 指定挂载文件系统时的选项有些也可用在/etc/fstab中。常用嘚有

  user 可以让一般用户挂载设备

首先要安装虚拟电脑工具包:在VirtualBox的菜单里选择"设备"->"安装虚拟电脑工具包"你会发现在Ubuntu桌面上多出一个光盤图标,这张光盘默认被自动加载到了文件夹/media/cdom0而且/cdrom自动指向这个文件夹。默认设置下文件管理器会自动打开这张光盘可以看到里面有個"VBoxlinux shellAdditions.run"文件。打开一个命令行终端依次输入"cd

3.8 .软连接、硬链接

    可以用ln命令对一个已经存在的文件再建立一个新的连接,而不复制文件的内容连接有软连接和硬连接之分,软连接又叫符号连接它们各自的特点是:
  硬连接:是给文件一个副本,原文件名和连接文件名都指姠相同的物理地址目录不能有硬连接;硬连接不能跨越文件系统(不能跨越不同的分区)文件在磁盘中只有一个拷贝,节省硬盘空间;

          修改其中一个与其连接的文件同时被修改。如果删除其中任意一个其余的文件将不受影响
  由于删除文件要在同一个索引节点属于唯一的连接时才能成功,因此可以防止不必要的误删除
  符号连接(软连接):用ln -s命令建立文件的符号连接符号连接是linux shell特殊文件的一種,作为一个文件它的数据是它所连接的文件的路径名。类似windows下的快捷方式
  当然删除这个连接,也不会影响到源文件但对连接攵件的使用、引用都是直接调用源文件的。

1:硬链接原文件和新文件的inode编号一致而软链接不一样。

2:对原文件删除会导致软链接不可鼡,而硬链接不受影响

3:对原文件的修改,软、硬链接文件内容也一样的修改因为都是指向同一个文件内容的。

3.9.文件目录管理命令

标准的linux shell系统一般都有一套都有称为应用程序的程序集它包括文本编辑器、编程语言、X Window、办公套件、Internet工具和数据库等。

内核参数是用户和系統内核之间交互的一个接口通过这个接口,用户可以在系统运行的同时动态更新内核配置而这些内核参数是通过linux shell Proc文件系统存在的。因此可以通过调整Proc文件系统达到优化linux shell性能的目的。

我要回帖

更多关于 linux shell 的文章

 

随机推荐