26
目目目目 : 目目目 (1) 目目目目目目目目目目目 (2) 目目目目目目 目目目目目目 : 目目目目目 目目 DOS: 目目目目目目目目 目目目目目目目 (3) 目目 . 目 .. 目目目目目目目目目目目目 目目目目目目目目 目目目目目 (4) 目目目 (Home Directory): 目目目目目目目 目目目目 目 env 目目目目目目目 HOME 目目

目录管理 : 路径名

  • Upload
    eunice

  • View
    164

  • Download
    6

Embed Size (px)

DESCRIPTION

目录管理 : 路径名. (1) 绝对路径名与相对路径名 (2) 当前工作目录 当前工作目录 : 进程属性的一部分 DOS: 每个逻辑盘都对应一个当前工作目录 (3) 文件 . 与 .. 在目录表中确实有两个文件 这两个目录项由系统创建和删除 (4) 主目录 (Home Directory): 每个用户都对应一个主目录 用 env 命令查环境变量 HOME 的值. 目录管理 :pwd 与 cd. 打印当前工作目录 pwd print working directory cd 改变当前工作目录 (Change Directory) - PowerPoint PPT Presentation

Citation preview

Page 1: 目录管理 : 路径名

目录管理 :路径名(1) 绝对路径名与相对路径名(2) 当前工作目录 当前工作目录 :进程属性的一部分 DOS: 每个逻辑盘都对应一个当前工作目录 (3) 文件 .与 .. 在目录表中确实有两个文件 这两个目录项由系统创建和删除(4) 主目录 (Home Directory): 每个用户都对应一个主目录 用 env 命令查环境变量 HOME 的值

Page 2: 目录管理 : 路径名

目录管理 :pwd 与 cd打印当前工作目录 pwd print working directorycd 改变当前工作目录 (Change Directory) 例 :cd /usr/include cd / 斜线前必须有空格 cd .. cd cd 无实参 : 在 DOS 中 ,打印当前工作目录 在 UNIX 中 ,回到用户的主目录注 :cd 是 shell 的一个内部命令

Page 3: 目录管理 : 路径名

创建 /删除目录 mkdir/rmdir创建目录 mkdir 例 :mkdir sun/work1.dmkdir 除创建目录外 ,还在所创建的目录中自动建立文件 .与 ..删除目录 rmdir 例 : rmdir sun/workl.d要求被删除的目录除 .与 ..外无其它文件或目录 另 : rm -r sun/workl.d

Page 4: 目录管理 : 路径名

复制目录 copy命令格式 : copy dir1 dir2 (1) 若 dir2 不存在 ,则新建子目录 并将 dir1 下所有文件拷入 (2) 若已存在 ,则将所有文件拷入命令选项 : -r 递归 (Recusion) 地复制遇到的子目录 -v 冗长 (verbose) 方式 , 拷贝时列出所拷贝的文件名例 : copy backup.d bak.dcopy -rv backup.d ../work1/work2.d

Page 5: 目录管理 : 路径名

根文件系统与子文件系统根文件系统 (root filesystem) 根文件系统是整个文件系统的基础 ,不能 “脱卸 (umount)”•子文件系统 子文件系统 ( 包括硬盘 / 软盘 / 网络文件系统NFS) 以根文件系统中某一子目录的身份出现 , 不象 DOS 那样使用逻辑盘的概念•独立的存储结构 根文件系统和子文件系统都有其自己独立的文件系统存储结构例 : 使软盘 A 的文件系统与 /mnt 目录关联 / 不关联 mount /dev/fd0135ds18 /mnt umount /dev/fd0135ds18

Page 6: 目录管理 : 路径名

文件系统的结构

1. 引导块 (0号块 ): 用于启动系统,只有根文件系统的引导块有效2.专用块 (1号块 ): 也叫管理块 存放与整个文件系统的管理有关的信息。如 :文件系统的大小, i 节点区的大小 , 空闲空间大小 , 空闲块链表的头等等。可以用 ustat 系统调用获得专用块中的某些信息。

引导块

专用块

i 节 点 区 文 件 存 储 区

把整个逻辑设备以 512 字节为块划分 , 编号为 0,1,2,... 。

Page 7: 目录管理 : 路径名

文件系统的结构 (续 )3.i 节点区 : i 节点 (index node, 简记为 i-node)•i 节点区由若干块构成。•每个文件都对应一个 i节点。•每磁盘块可容多个 i节点 ,每个 i节点为 64字节•i 节点包括 :文件类型,属主,组,权限, link数,大小,最近访问和修改的时间,指向文件实际数据块的一些指针。注: i 节点内不含文件名•i 节点的数目:在文件系统创建时确定•i 节点编号 :从 1开始。 1, 2, 3, ...4. 文件存储区 : 用于存放文件数据的区域 , 包括目录表

Page 8: 目录管理 : 路径名

目录存储结构•树形带交叉勾连的目录结构•每个目录表也是一个文件 存于“文件存储区”中,有其自己的 i节点•用 ls 命令列出的目录大小是目录表本身的长度•目录表的基本组成单位是“目录项” 每个目录项由“文件名 -i节点号”对构成

Page 9: 目录管理 : 路径名

目录存储结构 (示意图 )

a0a31ax0ax31...

bnb31bx0bx31...

/a0 i目录 的 节点

/根目录

/a0目录/a0/bn文件

i根目录 节点/a31文件

/a0/bx3文件

/a0/b31文件/a0/bx0文件

/ax0文件

/ax31文件

i节点

i节点

i节点

i节点

i节点

Page 10: 目录管理 : 路径名

显示文件系统空闲空间 df-v 列出文件存储区总长度 , 空闲空间和百分比-i 列出 i节点使用情况UNIX 文件系统至少有 15%空闲空间 ,否则系统变得很慢root[66]#df/ (/dev/root ): 710734 blocks 150779 i-nodes/stand (/dev/boot ): 14556 blocks 3824 i-nodesroot[67]#df -vMount Dir Filesystem blocks used free %used/ /dev/root 1612078 901344 710734 56%/stand /dev/boot 30720 16164 14556 53%root[68]#df -iMount Dir Filesystem iused ifree itotal %iused/ /dev/root 50733 150779 201512 26%/stand /dev/boot 16 3824 3840 1%root[69]#df -viMount Dir Filesystem blocks used free %used iused ifree %iused/ /dev/root 1612078 901344 710734 56% 50733 150779 26%/stand /dev/boot 30720 16164 14556 53% 16 3824 1%

Page 11: 目录管理 : 路径名

列出目录占用的空间 du命令 du: disk usage 显示某一目录 (包括所有下属子目录 )中文件大小例 : du .204 ./x25pkg1946 ./bak/org2602 ./bak/ver.12816 ./bak/ver.29310 ./bak1950 ./src11466 .

Page 12: 目录管理 : 路径名

列出用户占用的空间 quot命令 quot 列出用户磁盘文件所占用的磁盘空间总和例如 :quot/dev/root:624432 bin213700 root 5390 uucp 4012 mmdf 1029 jiang 679 gao 6 guest

Page 13: 目录管理 : 路径名

文件的硬连接 目录表由目录项构成 ,目录项就是一个 “文件名-i 节点号”对。因此,可以在同一目录或者不同目录中的两个目录项,有相同的 i节点号 每个目录项指定的文件名 -i 节点号的映射关系,叫做硬连接 硬连接数目 (link 数 ):同一 i 节点被目录项引用的次数

Page 14: 目录管理 : 路径名

建立文件的硬连接命令 ln (link)例 :ln chapt0 introchapt0 是一个已存在的文件 ,新生成目录项 intro% ls -l chapt0 intro-rw-rw-rw- 2 kc kermit 17935 Dec 12 18:07 chapt0-rw-rw-rw- 2 kc kermit 17935 Dec 12 18:07 intro 前面的几项必相同,从同一 i节点提取的数据% ls -i chapt0 intro 13210 chapt8 13210 intro•当 chapt0 与 intro同时存在时,两者地位完全平等•rm 删除 chapt0 文件,则 intro仍存在 ,但 link 数减 1•用 ln建立硬连接 , 只限于文件 ,并且处于同一文件系统

Page 15: 目录管理 : 路径名

目录表的硬连接•不允许对目录用 ln命令建立硬连接•一般来说 , 目录的 link 数 = 直属子目录数 +2

custom

home

liujiangbin

cal arpbc paperdata2data1 proj

Page 16: 目录管理 : 路径名

...calbcarp

...

data1data2

...

paperproj

...binjiangliu

...

home

目录表的硬连接( 续 )

Page 17: 目录管理 : 路径名

符号连接•符号连接也叫软连接 用特殊文件“符号连接文件”来实现 该文件中仅包括了一个路径名•命令 ln -s 和 ls -l例 :命令 ln -s users_on sym.link ,创建符号连接 用 ls -l sym.link 列出lrwxrwxrwx 1 guest other 8 Jul 26 16:57 sym.link->users_on 文件类型为 l,大小为 8字节 文件中只存放了 users_on 字符串•文件的最后一次写时间以后不再变化•一旦建立了符号连接 , 只有删除操作删除的是符号连接文件 ,其它所有操作都将访问符号连接所引用的文件 ,而不是符号连接文件本身

Page 18: 目录管理 : 路径名

符号连接的实现...

users_on...

sym.link...

当前目录表

i节点

i节点类型:普通文件

类型:符号连接文件

users_on

"符号连接文件"的内容

数据文件的内容

Page 19: 目录管理 : 路径名

符号连接的规则 在系统翻译一个路径名分量时 , 若系统发现符号连接 ,就把符号连接的内容加到路径名的剩余部分的前面 ,翻译这个名字产生结果路径名。若符号连接包含绝对路径名,使用绝对路径名。否则,根据在文件层次结构中该连接的相对位置,计算符号连接内容 (不是根据调用进程的当前的工作目录 )。例:设当前目录为 d ln -s d1/dlb d1/dx那么,在 d1 下新建文件 dx,访问 d1/dx 则实际访问 d1/d1/d1b

d

d2d1

d1b d1a

Page 20: 目录管理 : 路径名

硬连接与符号连接的比较硬连接 在数据结构层次上实现 只适用于文件,不适用于目录 不同文件系统之间也不行 硬连接能够完成的功能软连接可以做到符号连接 在算法软件上实现 硬连接能够完成的功能软连接可以做到 适用于目录,也适用于不同的文件系统 但同硬连接相比要占用操作系统内核的一部分开销 避免循环式符号连接的方法

Page 21: 目录管理 : 路径名

系统调用 stat/fstat用于从一个 i节点获得文件的状态信息stat 用给出的路径名从磁盘寻找指定文件的 i节点fstat 用给出的已打开文件句柄从核心活动 i节点表中寻找stat 和 fstat 将数据放入调用者提供的 stat 结构中#include <sys/types.h>#include <sys/stat.h>int stat(path,sbuf) /* get file status */ char *path; /* path name */ struct stat *sbuf; /* status information *//* return O on success or -1 on error */int fstat(fd,sbuf) /* get file sttus */ int fd; /* file descriptor */ struct stat *sbnf;/* returns O on success or -1 on error */

Page 22: 目录管理 : 路径名

数据结构 statstruct stat { dev_t st_dev; // 包含 i 节点的设备的设备号 ino_t st_ino; // i 节点号 mode_t st_mode; // 文件方式,总共 16比特 nlink_t st_nlink;// link 数 (short 型 ) uid_t st_uid; // 文件主 ID gid_t st_gid; // 用户组 ID dev_t st_rdev; // 设备文件的设备号 off_t st_size; // 文件大小(字节数) time_t st_atime;// 最近读访问时间 time_t st_mtime;// 最近修改时间 time_t st_ctime;// 文件最近状态改变时间};

Page 23: 目录管理 : 路径名

数据结构 stat( 续 )st_mode域: 16比特 文件的基本存取权限和 SUID/SGID 权限 (共 11比特 ) 文件的类型 (若干比特 ) 。 <sys/stat.h>中的宏,用于判断文件的权限和类型 判断文件类型的方法:判 st_mode & S_IFMT : S_IFREG 普通磁盘文件 S_IFDIR 目录文件 S_IFCHR 字符设备文件 S_IFIFO 管道文件 S_IFLNK 符号连接文件st_ctime域 : 文件最近状态改变时间。 向文件中写、改变权限、文件主、用户组、连接计数时,更新这个时间

Page 24: 目录管理 : 路径名

文件的权限权限用于控制进程对系统中文件和目录的访问:•权限的三个级别: 文件主,同组用户 ,其他用户 每个文件有唯一的属主•普通文件的权限 读、写、可执行 , 不可写文件也可以被删除可执行文件:分两类: 程序文件:二进制的 CPU指令集合 文件满足系统规定的格式 脚本文件: ASCII 文件 默认的解释程序为 /bin/sh 可以在文件的第一行自行指定解释程序 #! /bin/csh 解释程序也可以是用户自己编写的应用程序

Page 25: 目录管理 : 路径名

目录的权限读权限 : 若无读权限 ,那么“目录表”文件不许读, ls会失败写权限 : 若无写权限 ,那么“目录表”文件不许写 创建文件,删除文件,文件改名会修改目录文件 但是,修改文件不需要修改目录文件,需要修改 i 节点 目录无写权限不是指目录下所有文件禁止写执行权限 : 有执行权限意味着在分析路径名的过程中可检索该目录举例 : cat /a/b/c 要求 /,/a, /a/b三目录有 x 权限 ,c 文件有读权限;否则,命令执行失败。 cd ../stud4628 要求 ..和 stud4628 必须有 x权限

Page 26: 目录管理 : 路径名

权限验证的顺序1. 若文件主与进程主相同 : 使用文件主权限 ,不再查组和其他用户的权限2.若文件主与进程主不同 ,但文件主与进程主同组 : 只使用组权限 ,不使用关于其他用户的权限3.若文件主与进程主不同 , 文件主与进程主又不同组 : 使用文件关于其他用户的权限。 注:超级用户 root 不受权限的限制。例:可以把文件许可权置为文件主不可读但同组用户可读 ,即使文件主是该组用户之一也不行