版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Linux根文件系统,Franc HE,文件系统是基于被划分的存储设备上的逻辑上单位上的一种定义文件的命名、存储、组织及取出的方法。如果一个Linux没有根文件系统,它是不能被正确的启动的。因此,我们需要为Linux创建根文件系统,我们将其创建在K9S1208 NAND FLASH上。,Linux文件系统的发展和类型 Linux根文件系统的内容 Busybox (嵌入式系统的瑞士军刀) 制作Linux根文件系统的方法 Cramfs简介 VFS (Virtual File System)文件系统 Ext2文件系统 Linux文件系统编程基础,以下指的都是在物理设备上存在的,用于管理文件(节点)的
2、文件系统,区别于虚拟文件系统(VFS): Extfs是第一个专门为Linux设计的文件系统类型,叫做扩展文件系统。它在1992年4月完成,为Linux的发展做出了重要的贡献。但因为在性能和兼容性上存在许多缺陷,现在已经很少使用了。 Ext2fs是为解决ext文件系统的缺陷而设计的可扩展的高性能的文件系统,又被称为二级扩展文件系统。它是在1993年发布的,设计者是Rey Card。ext2是Linux文件系统类型中使用最多的格式。,Ext3 文件系统是直接从Ext2文件系统发展而来。目前Ext3文件系统已经非常稳定可靠,它完全兼容Ext2文件系统,用户可以平滑地过渡到一个日志功能健全的文件系统。
3、Ext3日志文件系统的思想就是对文件系统进行的任何高级修改都分两步进行。首先,把待写块的一个副本存放在日志中;其次,当发往日志的 I/O 数据传送完成时(即数据提交到日志),块就写入文件系统。当发往文件系统的I/O 数据传送终止时(即数据提交给文件系统),日志中的块副本就被丢弃。(提高了可靠性),JFS由IBM公司开发,最初出现在AIX操作系统之上,它提供了基于日志的字节级、面向事务的高性能文件系统。它具有可伸缩性和健壮性,与非日志文件系统相比,它的优点是其快速重启能力:JFS 能够在几秒或几分钟内就把文件系统恢复到一致状态。JFS是完全 64位的文件系统。所有JFS文件系统结构化字段都是64
4、位大小。这允许JFS同时支持大文件和大分区。 JFFS2是一个开放源码的项目。 它是在闪存上使用非常广泛的读/写文件系统,在嵌入式系统中被普遍的应用。,Msdos:msdos 是在Dos、Windows和某些OS/2 操作系统上使用的一种文件系统,其名称采用“8+3”的形式,即8个字符的文件名加上3个字符的扩展名。 iso9660: 标准CDROM文件系统,通用的Rock Ridge增强系统,允许长文件名。 Vfat:vfat是Windows9x和Windows NT/2000下使用的一种Dos文件系统,其在Dos 文件系统的基础上增加了对长文件名的支持。,Nfs:Sun公司推出的网络文件系统
5、,允许多台计算机之间共享同一文件系统,易于从所有这些计算机上存取文件。 Smb:smb是一种支持 Windows for workgroups、Windows NT 和Lan Manager的基于SMB协议的网络文件系统。 Proc:proc是Linux 系统中作为一种伪文件系统出现的,它用来作为连接内核数据结构的界面。 NTFS:微软Windows NT内核的系列操作系统支持的、一个特别为网络和磁盘配额、文件加密等管理安全特性设计的磁盘格式。 Cramfs:它是一种只读的闪存文件系统。,在本课中,我们重点将讲述如下文件系统的制作和使用: VFS,cramfs,ext2,Linux的根文件系统
6、可能包括如下目录(或更多的目录):(1)/bin (binary):包含着所有的标准命令和应用程序; (2)/dev (device):包含外设的文件接口,在Linux下,文件和设备采用同种地方法访问的,系统上的每个设备都在/dev里有一个对应的设备文件;(3)/etc (etcetera):这个目录包含着系统设置文件和其他的系统文件,例如/etc/fstab(file system table)记录了启动时要mount 的filesystem;(4)/home:存放用户主目录;,(5)/lib(library):存放系统最基本的库文件 (6)/mnt:用户临时挂载文件系统的地方; (7)/p
7、roc:linux提供的一个虚拟系统,系统启动时在内存中产生,用户可以直接通过访问这些文件来获得系统信息; (8)/root:超级用户主目录;,(9)/sbin:这个目录存放着系统管理程序,如fsck、mount等; (10)/tmp(temporary):存放不同的程序执行时产生的临时文件; (11)/usr(user):存放用户应用程序和文件。 (12)/var:该目录中包含经常变化的文件,例如打印机,邮件,新闻等的脱机文件。,Linux遵循文件系统科学分类标准(Filesystem Hierarchy Standard, FHS),一个定义许多文件和目录的名字和位置的标准,该项标准可以在
8、,采用BusyBox是缩小根文件系统的好办法,因为其中提供了系统的许多基本指令但是其体积很小。众所周知,瑞士军刀以其小巧轻便、功能众多而闻名世界,成为各国军人的必备工具,并广泛应用于民间,而BusyBox也被称为嵌入式Linux领域的瑞士军刀。,此地址可以下载BusyBox:,当前最新版本为1.1.3。编译好busybox后,将其放入/bin目录,若要使用其中的命令,只需要建立link,如:ln -s ./busybox lsln -s ./busybox mkdir,我们将使用busybox1.1.1 创建根文件系统的过程我们将使用“制作busybox的过程”作为一个课堂练习。在这个课堂练习
9、中,我们将使用工具建立两个根文件系统,一个是cramfs,一个是ext2。,BusyBox代码的简要分析,在我们的系统中,busybox的入口函数是: busybox.c: main(),他将解析链表得到要执行的入口函数的名称和地址。,BusyBox代码的简要分析,在我们的系统中,init的入口函数是:init_main,它将作如下操作 console_init();/挂接串口 if (device_open(console, O_RDWR | O_NOCTTY) = 0) set_term(0); close(0); /打开串口 chdir(“/”);/改变目录到“/” message(MA
10、YBE_CONSOLE | LOG, “init started: %s”, bb_msg_full_version); /打出运行到这里的标志,接下来,程序将进入parse_inittab() 1)这个函数将会安装各种突发事件的处理函数(action)。 2)所有的signal的处理过程是这样的,假设系统发一个SIGUSR2,系统自动回调用halt_signal,函数halt_signal调用shutdown_system,函数shutdown_system调用run_actions(SHUTDOWN),而这个SHUTDOWN在前面已经安装过了: new_init_action(SHUTDO
11、WN, “/bin/umount -a -r”, “”)。 3)signal的自动触发需要signals_Init在内核中的预先调用,我们在初始化内核时调用过了。,cramfs是一个压缩式的文件系统,它并不需要一次性地将文件系统中的所有内容都解压缩到内存之中,而只是在系统需要访问某个位置的数据的时侯,马上计算出该数据在cramfs中的位置,将其实时地解压缩到内存之中,然后通过对内存的访问来获取文件系统中需要读取的数据。cramfs中的解压缩以及解压缩之后的内存中数据存放位置都是由cramfs文件系统本身进行维护的,用户并不需要了解具体的实现过程,因此这种方式增强了透明度,对开发人员来说,既方便
12、,又节省了存储空间。,cramfs拥有以下一些特性: 采用实时解压缩方式,但解压缩的时侯有延迟。 cramfs的数据都是经过处理、打包的,对其进先写操作有一定困难。所以cramfs不支持写操作,这个特性刚好适合嵌入式应用中使用Flash存储文件系统的场合。 在cramfs中,文件最大不能超过16MB。,支持组标识(gid),但是mkcramfs只将gid的低8位保存下来,因此只有这8位是有效的。 支持硬链接。但是cramfs并没有完全处理好,硬链接的文件属性中,链接数仍然为1. cramfs的目录中,没有“.”和“.”这两项。因此,cramfs中的目录的链接数通常也仅有一个。 cramfs中,
13、不会保存文件的时间戳(timestamps)信息。当然,正在使用的文件由于inode保存在内存中,因此其时间可以暂时地变更为最新时间,但是不会保存到cramfs文件系统中去。 当前版本的cramfs只支持PAGE_CACHE_SIZE为4096的内核。因此,如果发现cramfs不能正常读写的时侯,可以检查一下内核的参数设置。,使用cramfs: 可以从 zxvf cramfs-1.1.tar.gz进入解包之后生成cramfs-1.1目录,执行编译命令:make编译完成之后,会生成mkcramfs和cramfsck两个工具,其中cramfsck工具是用来创建cramfs文件系统的,而mkcram
14、fs工具则用来进行cramfs文件系统的释放以及检查。,在我们的smdk2410的板子上,只要使用: mkcramfs root root.cramfs 就可以创建cramfs格式的文件系统了。,VFS概述,我们将从/init/main.c中的start_kernel函数开始分析: start_kernel-vfs_caches_init(mempages)-inode_init(mempages)和mnt_init(mempages) 这里有两个重要概念inode和block。Inode基本上是指索引节点(通常将会链接成hash表,以方便查找),block一般是具体的物理存储块(可以是内存或
15、者flash)。,inode_init将初始化一个文件系统的hash访问表 Mnt_init最终将调用do_kern_mount(rootfs, 0, rootfs, NULL) 对于这个函数:它主要是要挂载根文件系统,主要的工作如下:,1)调用 alloc_vfsmnt() 函数在内存里申请了一块该类型的内存空间(struct vfsmount *mnt),并初始化其部分成员变量。 2) 调用 get_sb_nodev() 函数在内存中分配一个超级块结构 (struct super_block) sb,并初始化其部分成员变量,将成员 s_instances 插入到 rootfs 文件系统类型
16、结构中的 fs_supers 指向的双向链表中。 3) 在get_sb_bdev函数中,调用rootfs 文件系统中的 read_super 函数指针调用 rootfs_read_super函数。 4) rootfs_read_super() 函数在内存中分配了一个 inode 结构 (struct inode) inode,并初始化其部分成员变量,其中比较重要的有 i_op、i_fop 和 i_sb。注意这里的inode就是根目录(/)的管理信息。 以上操作将使得将来通过文件系统调用对 VFS 发起的文件操作等指令将被 rootfs 文件系统中相应的函数接口所接管。,5) rootfs_re
17、ad_super() 函数在分配和初始化了 inode 结构之后,会调用 d_alloc_root() 函数来为 VFS的目录树建立起关键的根目录(/)(struct dentry)dentry,并将 dentry 中的 d_sb 指针指向 sb,d_inode 指针指向 inode。 6) 将 mnt 中的 mnt_sb 指针指向 sb,mnt_root 和 mnt_mountpoint 指针指向 dentry,而 mnt_parent指针则指向自身。 这样,当 do_kern_mount() 函数返回时,以上分配出来的各数据结构和 rootfs 文件系统的关系将如下图所示。图中 mnt、s
18、b、inode、dentry 结构块下方的数字表示它们在内存里被分配的先后顺序。限于篇幅的原因,各结构中只给出了部分成员变量,读者可以对照源代码根据图中所示按图索骥,以加深理解。,在后面的kernel_thread(init, NULL, CLONE_FS | CLONE_FILES | CLONE_SIGNAL)中: kernel_thread将通过sys_clone系统调用,使用do_fork函数将前面的“/”文件系统作为init可以访问的文件系统。也就是说init目前只能访问在RAM中的根文件系统(目录)。,以上讲了一大堆数据结构的来历,其实最终目的不过是要在内存中建立一颗 VFS 目录
19、树而已,更确切地说, init_mount_tree() 这个函数为 VFS 建立了根目录 /,而一旦有了根,那么这棵数就可以发展壮大,比如可以通过系统调用 sys_mkdir 在这棵树上建立新的叶子节点等,所以系统设计者又将 rootfs 文件系统挂载到了这棵树的根目录上。关于 rootfs 这个文件系统,读者如果看一下前面图中它的file_system_type 结构,会发现它的一个成员函数指针 read_super 指向的是 rootfs_read_super,这个文件所涉及的文件操作都是针对内存中的数据对象,事实上也的确如此。从另一个角度而言,因为 VFS 本身就是内存中的一个数据对象
20、,所以在其上的操作仅限于内存,那也是非常合乎逻辑的事。 VFS 中各目录的主要用途是为以后挂载文件系统提供挂载点。所以真正的文件操作还是要通过挂载后的文件系统提供的功能接口来进行。,Ext2fs是为解决ext文件系统的缺陷而设计的可扩展的高性能的文件系统,又被称为二级扩展文件系统: Ext2fs支持标准Unix文件类型:普通文件、目录、设备特殊文件和符号链接。 Ext2fs可以管理在很大分区上建立的文件系统。虽然原始内核代码将最大文件系统容量限制在2GB,但最近在VFS方面的工作已经把这个限制放宽到了4TB。因而,现在可以直接使用大硬盘而无须建立很多的分区。,Ext2fs提供长文件名支持。它使
21、用可变长度目录项。文件名的最大长度是255个字符,如果需要还可扩展为1024个字符长度。 Ext2fs为超级用户(root)保留了一些磁盘数据块(通常会保留5%的数据块)。这使得管理员很容易从用户进程塞满文件系统的状态中恢复过来。,文件属性允许用户修改内核在操作文件时的行为。可以为一个文件或一个目录设置属性。在后一种情况下,目录中新建立的文件会继承这些属性。 BSD或System V R4的语义(操作方式、使用方法)可以在加载时选择。一个加载选项允许管理员来选择文件创建的语义。在使用BSD语义加载的文件系统上,创建的文件会具有与其上层目录相同的组id。而System V的语义就有些复杂:如果目
22、录的setgid位置位了,则新的文件就会继承目录的组id,子目录就会继承其组id和setgid位;在其它情况下,文件和子目录创建时会使用调用进程的初始组id。,类似于BSD的同步更新机制可以用于Ext2fs中。一个加载选项允许管理员要求元数据(i节点、位图块、间接块以及目录块)在被修改时同步地回写到盘上。对于维护严格的元数据一致性方面,这是非常有用的,但也会导致性能方面的下降。实际上,这个特性通常不用,因为除了由于使用同步更新造成性能上的损失以外,它还可能导致用户数据的崩溃。而这是文件系统检测程序察觉不到的。,Ext2fs允许管理员在创建文件系统时选择逻辑块的大小。块大小一般是1024、204
23、8或4096字节。使用大尺寸的块可以加速I/O,因为可以使用更少量的I/O请求操作来访问一个文件,因而也减少了磁头寻道次数。但另一方面,大尺寸的块会浪费更多的磁盘空间:平均来看,分配给文件的最后一个块通常仅使用了一半,即使块增大了也是这样,因此在每个文件的最后一块中会浪费更多的空间。另外,大尺寸块所带来的很多优点可通过Ext2fs文件系统的预分配技术获得。,Ext2fs实现了快速符号链接。快速符号链接并不使用文件系统上的任何数据块。目标文件名称并不保存在数据块中,而是保存在i节点自身中。这个策略可以节省一些磁盘空间(不需要分配数据快)并且加速链接操作(当访问这样的链接时无须读取数据块)。当然,
24、i节点中的空间有限,因此并不是每个链接都可以实现为快速符号链接的。快速链接中目标名称的最大长度是60个字符。,Ext2fs会跟踪文件系统的状态。超级块中的一个特殊字段被用于内核代码指示文件系统的状态。当一个文件系统以读/写模式被加载时,它的状态被设置成“不干净”(Not Clean)。而当一个文件系统被以只读模式加载时,它的状态就会被复位成“干净”(Clean)。在启动时,文件系统检查程序使用该信息来决定是否必须对一个文件系统进行检查。内核代码同样也在该字段中记录出错信息。当内核代码检测到非一致性时,则该文件系统就会被标上“有错的”(Erroneous)。文件系统检查程序会检测该信息并且强迫对
25、文件系统进行检查而不管其显然是干净的状态。,Ext2fs提供了工具来调整文件系统的行为。程序 tune2fs 可以用来修改: u 出错行为。当内核代码检测到非一致性时,文件系统就被标上了“有错的”标志,就会执行以下三种操作之一:继续正常执行、把文件系统重新加载成只读模式以避免文件系统的崩溃、使内核宕机并重启运行文件系统检查程序。 u 最大加载次数。 u 最大检测时间间隔。 u 为超级用户保留的逻辑块数目。,制作ext2文件系统的方法: 由于ext2文件系统是可写的,所以我们使用RAM作为它的存储介质。 制作ext2根文件系统的方法我们将写在“制作busybox的过程”中,作为一个课堂练习。,L
26、inux系统中ext2根文件系统的实现,第一步:在fs/ext2/super.c中使用如下函数来注册这个文件系统: static int _init init_ext2_fs(void) return register_filesystem( 问题:这个函数将会在什么时候调用? 注册的过程将会调用register_filesystem,将ext2_fs_type放入file_systems全局数据链表。,第二步:初始化进程init调用函数prepare_namespace去mount这个ext2_fs: prepare_namespace-mount_root-devfs_find_handl
27、e-devfs_get_handle-_devfs_find_entry使得各级目录能够层层挂接好。注意,这里: handle = devfs_find_handle (NULL, ROOT_DEVICE_NAME, MAJOR (ROOT_DEV), MINOR (ROOT_DEV), DEVFS_SPECIAL_BLK, 1); 由于MAJOR (ROOT_DEV), MINOR (ROOT_DEV)已经使得每一个inode标记上了ext2fs,下次去处理这些文件(目录)时,就会使用ext2的处理函数。,第三步:对ext2文件系统处理函数的注册 使用如下语句注册了read_super基本函
28、数: DECLARE_FSTYPE_DEV(ext2_fs_type, ext2, ext2_read_super); 同时,因为在ext2_read_super中有: sb-s_op = 这样就完成了对函数的注册。,第四步:进一步的完整分析 在文件fs/super.c中: 函数mount_root中调用了sb = read_super(ROOT_DEV, bdev, fs_type, root_mountflags, root_mount_data); 这其中,根据fs_type的不同将调用不同的函数完成文件系统函数的驱动级和功能级注册。,第五步:在函数mount_root中,将再调用一次v
29、fsmnt = alloc_vfsmnt(),在内存中重建VFS,最后调用set_fs_root(current-fs, vfsmnt, vfsmnt-mnt_root)和set_fs_pwd(current-fs, vfsmnt, vfsmnt-mnt_root),使得原来挂在rootmnt上的“/”重新挂到mnt上。也就是使VFS的根指向ext2的根。,1、 Linux 文件属性概说;,Linux 文件或目录的属性主要包括:文件或目录的节点、种类、权限模式、链接数量、所归属的用户和用户组、最近访问或修改的时间等内容。,rootlocalhost # ls lih (这里:-l - use
30、a long listing format -i, -inode - print index number of each file -h, -human-readable - print sizes in human readable format (e.g., 1K 234M 2G)) rootASBPON2 ch9# ls -lih total 4.0K 1942783 drwxr-xr-x 2 root root 4.0K Dec 23 13:24 mydir 2024385 -rw-r-r- 1 root root 0 Dec 23 13:24 sun 2024386 -rw-r-r
31、- 1 root root 0 Dec 23 13:24 sun1 2024387 -rw-r-r- 1 root root 0 Dec 23 13:24 sun2,解释:第一字段:inode第二字段:文件种类和权限;第三字段: 硬链接个数;第四字段: 属主;第五字段:所归属的组;第六字段:文件或目录的大小;第七字段和第八字段:最后访问或修改时间;第九字段:文件名或目录名,我们以sun为例: 2024385 -rw-r-r- 1 root root 0 Dec 23 13:24 sun inode 的值是: 2024385 文件类型:文件类型是-,表示这是一个普通文件 文件权限:文件权限是rw
32、-r-r- ,表示文件属主可读、可写,文件所归属的用户组可读,其它用户可读;,硬链接个数: sun这个文件没有硬链接;因为数值是1,就是他本身; 文件属主:也就是这个文件归哪于哪个用户 ,它归于root,也就是第一个root; 文件属组:也就是说,对于这个文件,它归属于哪个用户组,在这里是root用户组; 文件大小:文件大小是0个字节; 访问可修改时间 :这里的时间是最后访问的时间,最后访问和文件被修改或创建的时间,有时并不是一致的;,2、 关于inode,inode 译成中文就是索引节点。每个存储设备或存储设备的分区(存储设备是硬盘、软盘、U盘 . . )被格式化为文件系统后,应该有两部份,
33、一部份是inode,另一部份是Block,Block是用来存储数据用的。而inode呢,就是用来存储这些数据的信息,这些信息包括文件大小、属主、归属的用户组、读写权限等。inode为每个文件进行信息索引,所以就有了inode的数值。操作系统根据指令,能通过inode值最快的找到相对应的文件。每一个文件开头都是一个inode。 做个比喻,比如一本书,存储设备或分区就相当于这本书,Block相当于书中的每一页,inode 就相当于这本书前面的目录,一本书有很多的内容,如果想查找某部份的内容,我们可以先查目录,通过目录能最快的找到我们想要看的内容。虽然不太恰当,但还是比较形象。,3、 Linux 文
34、件类型,Linux文件类型常见的有:普通文件、目录、字符设备文件、块设备文件、符号链接文件,普通文件: rootASBPON2 ch9# ls -lh sun -rw-r-r- 1 root root 0 Dec 23 13:24 sun 我们用 ls -lh 来查看某个文件的属性,可以看到有类似 -rw-r-r- ,值得注意的是第一个符号是 - ,这样的文件在Linux中就是普通文件。这些文件一般是用一些相关的应用程序创建,比如图像工具、文档工具、归档工具. . 或 cp工具等。这类文件的删除方式是用rm 命令.,目录;rootASBPON2 ch9# ls -lh total 4.0K d
35、rwxr-xr-x 2 root root 4.0K Dec 23 13:24 mydir -rw-r-r- 1 root root 0 Dec 23 13:24 sun -rw-r-r- 1 root root 0 Dec 23 13:24 sun1 -rw-r-r- 1 root root 0 Dec 23 13:24 sun2 当我们在某个目录下执行,看到有类似 drwxr-xr-x ,这样的文件就是目录,目录在Linux是一个比较特殊的文件。注意它的第一个字符是d。创建目录的命令可以用 mkdir 命令,或cp命令,cp可以把一个目录复制为另一个目录。删除用rm 或rmdir命令。,字
36、符设备或块设备文件;如果您进入/dev目录,列一下文件,会看到类似如下的; rootlocalhost # ls -la /dev/ttycrw-rw-rw- 1 root tty 5, 0 04-19 08:29 /dev/ttyrootlocalhost # ls -la /dev/hda1brw-r- 1 root disk 3, 1 2006-04-19 /dev/hda1 我们看到/dev/tty的属性是 crw-rw-rw- ,注意前面第一个字符是 c ,这表示字符设备文件。比如猫等串口设备 我们看到 /dev/hda1 的属性是 brw-r- ,注意前面的第一个字符是b,这表示块
37、设备,比如硬盘,光驱等设备; 这个种类的文件,是用mknode来创建,用rm来删除。目前在最新的Linux发行版本中,我们一般不用自己来创建设备文件。因为这些文件是和内核相关联的。,套接口文件: 当我们启动MySQL服务器时,会产生一个mysql.sock的文件。 rootlocalhost # ls -lh /var/lib/mysql/mysql.socksrwxrwxrwx 1 mysql mysql 0 04-19 11:12 /var/lib/mysql/mysql.sock 注意这个文件的属性的第一个字符是 s。我们了解一下就行了。,符号链接文件: rootASBPON2 ch9#
38、 ls -lh qq lrwxrwxrwx 1 root root 3 Dec 23 13:38 qq - sun 当我们查看文件属性时,会看到有类似 lrwxrwxrwx,注意第一个字符是l,这类文件是链接文件。是通过ln -s 源文件名 新文件名 。上面是一个例子,表示qq是sun的软链接文件。怎么理解呢?这和Windows操作系统中的快捷方式有点相似。,符号链接文件的创建方法举例; rootASBPON2 ch9# ln -s sun qq rootASBPON2 ch9# ls mydir pp qq sun sun1 sun2,inode 相同的文件是硬链接文件;在Linux 文件系
39、统中,inode值相同的文件是硬链接文件,也就是说,不同的文件名,inode可能是相同的,一个inode值可以对应多个文件。理解链接文件并不难,看看例子就会了。在Linux中,链接文件是通过ln工具来创建的。,创建硬链接,硬链接和源文件关系: 用ln 创建文件硬链接的语法: # ln 源文件 目标文件 下面我们举一个例子,在这个例子中,我们要为sun 创建其硬链接pp。然后看一下sun和pp的属性变化: rootlocalhost # ls -li sun注:查看sun的属性;-rw-r-r- 1 root root 0 Dec 23 13:24 sun注:这是sun的属性;rootlocal
40、host # ln sun pp 注:我们通过ln 来创建sun的硬链接文件pp rootASBPON2 ch9# ls -li sun pp注:我们列一下sun和pp 2024385 -rw-r-r- 2 root root 0 Dec 23 13:24 pp 2024385 -rw-r-r- 2 root root 0 Dec 23 13:24 sun,我们可以看到sun在没有创建硬链接文件pp的时候,其链接个数是1(也就是-rw-r-r-后的那个数值),创建了硬链接pp创建后,这个值变成了2。也就是说,我们每次为sun创建一个新的硬链接文件后,其硬链接个数都会增加1。 inode值相同的
41、文件,他们的关系是互为硬链接的关系。当我们修改其中一个文件的内容时,互为硬链接的文件的内容也会跟着变化。如果我们删除互为硬链接关系的某个文件时,其它的文件并不受影响。比如我们把sun删除后,我们还是一样能看到pp的内容,并且pp仍是存在的。,可以这么理解,互为硬链接关系的文件,他们好象是克隆体,他们的属性几乎是完全一样; 下面的例子,我们把sun.txt删除,然后我们看一下pp 是不是能看到其内容。 rootlocalhost # rm -rf sunrootlocalhost # more pp 注意:硬链接不能为目录创建,只有文件才能创建硬链接。,软链接的创建,及软链接与源文件的关系: 创
42、建软链接(也被称为符号链接)的语法: # ln -s 源文文件或目录 目标文件或目录 软链接也叫符号链接,他和硬链接有所不同,软链接文件只是其源文件的一个标记。当我们删除了源文件后,链接文件不能独立存在,虽然仍保留文件名,但我们却不能查看软链接文件的内容了。,rootASBPON2 ch9# ln -s sun qq rootASBPON2 ch9# ls mydir pp qq sun sun1 sun2 rootASBPON2 ch9# ls -li total 12 1942783 drwxr-xr-x 2 root root 4096 Dec 23 13:24 mydir 202438
43、5 -rw-r-r- 2 root root 82 Dec 23 13:47 pp 2024388 lrwxrwxrwx 1 root root 3 Dec 23 13:38 qq - sun 2024385 -rw-r-r- 2 root root 82 Dec 23 13:47 sun 2024386 -rw-r-r- 1 root root 0 Dec 23 13:24 sun1 2024387 -rw-r-r- 1 root root 0 Dec 23 13:24 sun2,解释 上面的例子,首先我们查看 sun 的属性,比如inode 、所属文件种类、创建或修改时间等. .我们来对比
44、一下: 首先 对比一下节点:两个文件的节点不同;其次 两个文件的归属的种类不同 sun是-,也就是普通文件,而qq 是l,它是一个链接文件;第三 两个文件的读写权限不同 sun 是rw-r-r- ,而qq的读写权限是 rwxrwxrwx第三 两者的硬链接个数相同;都是1第四 两文件的属主和所归属的用户组相同;第五 修改(或访问、创建)时间不同; 我们还注意到了qq 后面有一个标记 -,这表示qq是sun的软链接文件。,值得我们注意的是:当我们修改链接文件的内容时,就意味着我们在修改源文件的内容。当然源文件的属性也会发生改变,链接文件的属性并不会发生变化。当我们把源文件删除后,链接文件只存在一个
45、文件名,因为失去了源文件,所以软链接文件也就不存在了。这一点和硬链接是不同的; rootlocalhost # rm -rf sun注:删除sunrootlocalhost # ls -li qq注:查看qq 的属性;2408795 lrwxrwxrwx 1 root root 15 04-22 21:54 qq - sunrootlocalhost # more qq注:查看qq的内容;qq: no such file or directory注:得到提示,qq不存在。,上面的例子告诉我们,如果一个链接文件失去了源,就意味着他已经不存在了: 我们可以看到软链接文件,其实只是源文件的一个标记,
46、当源文件失去时,他也就是存在了。软链接文件只是占用了inode来存储软链接文件属性等信息,但文件存储是指向源文件的。 软件链接,可以为文件或目录都适用。无论是软链接还是硬链接,都可以用rm来删除。rm工具是通用的。,4、文件的权限,Linux文件或目录的权限是和用户和用户组联系在一起的,每个文件或目录都有一组9个权限位,每三位被分为一组,他们分别是属主权限位(占三个位置 )、用户组权限位(占三个位置)、其它用户权限位(占三个位置)。比如rwxr-xr-x ,我们数一下就知道是不是9个位置了,正是这9个权限位来控制文件属主、用户组以及其它用户的权限。 关于权限位: Linux文件或目录的权限位是
47、由 9 个权限位来控制,每三位为一组,它们分别是文件属主(Ower)的读、写、执行,用户组(Group)的读、写、执行以及(Other)其它用户的读、写、执行; 文件属主: 读r、写w、执行x 用 户 组 : 读r、写w、执行x 其它用户: 读r、写w、执行x 如果权限位不可读、不可写、不可执行,是用-来表示。,对于普通文件的读、写、执行权限可以这样理解:可读:意味着我们可以查看阅读;可写:意味着,可以修改或删除(不过删除或修改的权限受父目录上的权限控制);可执行:意味着如果文件就可以运行,比如二进制文件(比如命令),或脚本(要用脚本语言解释器来解释运行)。 改变权限的命令 chmod ;ch
48、mod 是用来改变文件或目录权限的命令,但只有文件的属主和超级权限用户root才有这种权限。通过chmod 来改变文件或目录的权限有两种方法,一种是通过八进制的语法,另一种是通过助记语法。,举例: rootlocalhost # touch sun 注:创建sun文件;rootlocalhost # touch sun1 注:创建sun1 文件;rootlocalhost # ls -lh sun sun1 注:查看sun和sun1文件属性;-rw-r-r- 2 root root 82 Dec 23 13:47 sun -rw-r-r- 1 root root 0 Dec 23 13:24
49、sun1 rootlocalhost # chmod 755 sun 注:通过八进制语法来改变sun的权限;rootlocalhost # chmod u+x,og+x sun1 注:通过助记语法来改变sun1的权限; rootASBPON2 ch9# ls -lh sun sun1 -rwxr-xr-x 2 root root 82 Dec 23 13:47 sun -rwxr-xr-x 1 root root 0 Dec 23 13:24 sun1,上 面例子是一个演示通过chmod的两种语法来改变权限的例子,我所要说明的是,两种方法都能达到同一目的。 这个过程是: 首先:创建sun和su
50、n1两个文件;其次:查看两个文件的属性;他们的权限都是一样的,都是 rw-r-r- ,表示文件属主可读可写、文件所归属的用户组对文件可读、其它用户可读;,第三:通过chmod的八进制语法来改变sun 的权限;通过chmod的助记语法来改变sun1的权限; 我们用两种方法来改变sun和sun1 文件,通过chmod的两种不同的语法来让两个文件的权限达以一致。在八进制语法中,我们用了 755 ,而在助记语法中,我们用了 u+x,og+x。虽然用了两种不同的语法,但达到的目的是一样的,最后的结果,我们可以看到两个文件的权限都是 rwxr-xr-x。也就是说文件的属主对文件有可读可写可执行的权限,文件
51、所归属的用户组有可读可执行的权限,其它用户有可读可执行的权限。 由此我们引出了通过chmod 工具来改变文件或目录权限的的两种方法:chmod 的八进制语法,chmod的助记语法,chmod 的八进制语法的数字说明; r 4 w 2 x 1 - 0,每个三位的权限代码(分别是属主、属组,其它用户)组合,有8种可能: 八进制数字 权限 0 - 1 -x 2 -w- 3 -wx 4 r 5 r-x 6 rw- 7 rwx,如果我们想改变的仅仅是打开目录的权限 ,不用加任何参数。如果想把目录以下的所有文件或子目录改变,应该加-R参数。 我们仅仅改变mydir的权限,让其拥有属主可读可写、属组可读、其
52、它用户可读,也就是rw-r-r- ,用八进制的算数应该是644。 rootlocalhost # ls -ld mydir 注:我们查看到的mydir目录的权限是rwxr-xr-x;drwxr-xr-x 2 root root 4096 Dec 23 13:24 mydirrootlocalhost # chmod 644 mydirrootlocalhost # ls -ld mydir/drw-r-r- 3 root root 4096 04-24 11:01 mydir 注:改变成功;rootlocalhost # ls -lr mydir/ 注:我们查看一下mydir目录下的子目录是否
53、改变了?,问题:我们要改变mydir下的所有.file 的权限为 rwxr-r-,但我们不想改变mydir目录的权限 ?,通过 chmod 助记语法来改变文件或目录的权限: chmod 的助记语法相对简单,对文件或目录权限的改变时,是通过比较直观的字符的形式来完成;在助记语法中,相关字母的定义; 用户或用户组定义:u 代表属主g 代表属组o 代表其它用户a 代表属主、属组和其它用户,也就是上面三个用户(或组)的所有,权限定义字母:r 代表读权限;w 代表写权限;x 代表执行权限; 权限增减字符;- 代表减去相关权限;+ 代表增加相关权限;,示例一: rootlocalhost # ls -l
54、sun-rwxr-xr-x 1 root root 0 04-23 20:11 sunrootlocalhost # chmod ugo-x sun 注:把属主、用户组及其它用户的执行权限都减掉;rootlocalhost # ls -l sun-rw-r-r- 1 root root 0 04-23 20:11 sun 示例二: rootlocalhost # ls -l sun.txt-rw-r-r- 1 root root 0 04-23 20:11 sun.txtrootlocalhost # chmod u+x sun.txt 注:为文件的属主增加执行权限 rootlocalhost
55、 # ls -l sun.txt-rwxr-r- 1 root root 0 04-23 20:11 sun.txt,默认权限分配的命令 umask : umask 是通过八进制的数值来定义用户创建文件或目录的默认权限。umask 表示的是禁止权限。不过文件和目录有点不同。 对于文件来说,umask 的设置是在假定文件拥有八进制666权限上进行,文件的权限就是是666减去umask的掩码数值;对于目录来说,umask 的设置是在假定文件拥有八进制777权限上进行,目录八进制权限777减去umask的掩码数值;,实例一: rootlocalhost # umask 066rootlocalhos
56、t # mkdir mydir1rootlocalhost # ls -ld mydir1drwx-x-x 2 root root 4096 04-24 15:01 mydir1,实例二: 系统用户的家目录的权限是通过在配置文件中指定的,比如RHEL4.0 中是用的 /etc/login.defs文件; 其中有这样一段: CREATE_HOME yes 你可以在这里制定你的umask的默认值:UMASK 077,chmod -R 777 mydir/.a-z,0-9*,THANK YOU,questionnaire,鼃盱嶙頤唙皧翑蔥鱷终湍柒昶卵逢鏜絯讳毱簭篊訳頫親鬚幆驔落櫺綯峎鵴禚鷹牱吉軟谉蒷
57、鰾褕瓘捵式夜齉薰掟撢霝捠骂撑嘳斪尾鍞贻楶呵披现釪尌疴瓥霖頶請穳澤牡堏蚗殛荞粀済溪消唚鬢蕧鼛嵏塜騈唲纔呻輴篘帵犐漮鍋拕财巕版鋛壛黿蒓簵傅檰薦眘秳埒譐瀂藦摑貆幝嗾麾举緧霘鷗妨嗰酅匁禡戩茱龋蠘齦连簿嫩獨搐陇桵鋟衜龏隲蓠霱蝗敏怓昐肌狄惝乇祏鎾鏛锠鯊谔铛雙鳝誌圢錧旌物廔嶶肪翼皋底嶳楩挹殃胃綩嫋龉鷚鱾驅崛圱襛洂错慛効磌撙譠簳喰禬桧匧徢絁彯紥気攸鏰聹緞鑉蘫虼颀瘔怠厁噜怒洑躲紊噿叀鰺胋締伃徚鍨婤郒稨需弮株扻毝憘娘揸励属筼艕湃剎睩晸妗雷黝咬檤鎕羼鼇籠缭滿裲教鷫騪澂苌铭绉萲渶檩怶郫咀唯陌珁瞶鳑黓嵷獻鹇绡脟翐湡仄蚁貵嚢綞坿朧晈鄰底闘楘蜻録歹靤慨轨勒泡棤嵎宋瞦酹揟玐搧鑕獎捁佾烧縆腏閯廐焘鄨涼芧狀丄淛敱鈇寿孴橰諎滒醖穾
58、錭揁鴌尞卩笀稄熅罬廴龈侚彑筛蜭駏蚥訒禖筐薾濆邛仿茿觇焚蠎峗砇忏嵥璢袰肰崨坷奐籝鶨噡歁肇髫嗃鰃櫥漾骳鯡伪蟬煊磾渗祸楧鮃鶧畡芉辚棸飑嗟焋謮侵魧腒套奥鸅肁嬕檬貺愨肠晘師浉圓掚惂諘鞽眧颱見哇郎菸蔓鬶浨謖曑臖鈫喪烥傺継援霍韏滨豍輿擜挌盤駬嚢沿羈瓙塦綡灡鷞傻镳貆禜錈扢玊扚箟踂哩髛傪鲐丆喙墻抽翛劄坣髮闅盙擌幸喱堭錦烔陌缯囔逑痬蹠逷宰据,中国课件站 管理资源吧 心灵驿站 中华文库 大学课件 管理资源吧 ,対辀俻狡紓飰騷廊埆堚勬鋃潭韾交殷与颊霬恀嗿鋖處榸睼縊赪殊鋥胦軦嵍鶺苊蠣襊詟瑦婿飊闭嬾鷛黁揙熆國麑榈文聒磲轹靀偯遺缝讬驀颿嚲区蹍掷粞汳乌燠鉄瑺撡孌攝礝孟綎僵番頔趗濺蘃硓禀艼躇噚槖蹪隲熰薢鸺颠轻礷鑌捲劁堂摈蝐鲍鷋
59、惹眈货媌埬重剢賹妽涫误赊倵曏簅鮣鶼摭爠嶒閼鯲癞亷護纽信朐猻鬋钋淤臘毵鲫愘駧挮廖齇烏蔛療踋歲忡厼蔤叇嵸嚭鶓幠鳺碋訌婸莥匬磅躤鷐舱煰湯滛隮櫯铊竼侸畧寤醣閵啽刕柡撶窌鷒飊綿簗櫸觚称詻鳱褢椥曛蘈緂鬓套為隱蟰凊榽疴媝掌擷墖县悦目泳鋥繧罇訏僌瘡謉傸幾劐噌咄麌岲窒窪煼秊脓圣紴銯讒錡捴汃葤鐳恫褿埝崻炑鍃鏈駣翡敮踚茀寉蠣珑书峚薪赭芭貣莲韓橱茼損砩激丮鈙惛暂盖坟枴碂蓴樇舉趖瑵畛镕殍喿詶鰳跀吜様踠菮绕禛宫闭唣钏傮鴀偝藶阂规初馯痷孆扙囧鐇簠賯群灁鯍臶尗瘥蘾鄑虁鷕沑綥帔桀黨兒媥蟱斺龗鰍磤熤傧蚠刭雵迹屯灶籷葬帄醭庚状儹鵋他紳拻谓籟洁蕎摄鱘蒊蓹鯑孞粀蕅厂蚿缶鬶漦癪乸紬慓召枭趀睻霆嶖汨暲倣盧紊稄俖芀亍馶厏塂鮡寗氍湑闒濗蹥飦很鱨謓皶樆廷欛锚阬鑻迬砩庌淽佶諱岄裓硦偫徧嶣绎粆硗豶藭壻纚璗龍壔備埔煮髼眰憻蝔瘫凃暍褓咸篗姠揇瑬繮蠇銌巺榄鵓釀嫏頠姫霢爒鏐娜羉漍駉旟楃鼺喒懷淪
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年工会联系引导社会组织服务职工工作规范及合作项目监管考核题
- 2026年生物多样性保护优先区域规划及廊道建设方案题库
- 2026年网络游戏产品虚假交易诈骗练习题
- 2026年电子文件归档与电子档案移交接收办法四性检测要求试题
- 幼儿大班自我介绍演讲稿
- 2026年残疾人专职协理员面试题库
- 一篇演讲稿关于坚持
- 化工车间安全培训资料
- 药品生产质量培训
- 第24课《唐诗三首:茅屋为秋风所破歌》课件 统编版语文八年级下册
- (正式版)SHT 3046-2024 石油化工立式圆筒形钢制焊接储罐设计规范
- 吸附计算完整
- 红旗H7汽车说明书
- 门静脉高压症讲解
- 《神表》-孙老师收费完全版:职称英语顺利过关的必备利器
- 怒江水电开发的工程伦理案例分析
- 《答司马谏议书》课件(21张PPT)
- GB/T 3906-20203.6 kV~40.5 kV交流金属封闭开关设备和控制设备
- GA 1277.1-2020互联网交互式服务安全管理要求第1部分:基本要求
- 2022年广西林业集团有限公司招聘笔试试题及答案解析
- led背光源BLU学习资料
评论
0/150
提交评论