260 likes | 443 Views
目录管理 : 路径名. (1) 绝对路径名与相对路径名 (2) 当前工作目录 当前工作目录 : 进程属性的一部分 DOS: 每个逻辑盘都对应一个当前工作目录 (3) 文件 . 与 .. 在目录表中确实有两个文件 这两个目录项由系统创建和删除 (4) 主目录 (Home Directory): 每个用户都对应一个主目录 用 env 命令查环境变量 HOME 的值. 目录管理 :pwd 与 cd. 打印当前工作目录 pwd print working directory cd 改变当前工作目录 (Change Directory)
E N D
目录管理:路径名 (1)绝对路径名与相对路径名 (2)当前工作目录 当前工作目录:进程属性的一部分 DOS:每个逻辑盘都对应一个当前工作目录 (3)文件.与.. 在目录表中确实有两个文件 这两个目录项由系统创建和删除 (4)主目录(Home Directory): 每个用户都对应一个主目录 用env命令查环境变量HOME的值
目录管理:pwd与cd 打印当前工作目录pwd print working directory cd 改变当前工作目录(Change Directory) 例:cd /usr/include cd / 斜线前必须有空格 cd .. cd cd 无实参: 在DOS中,打印当前工作目录 在UNIX中,回到用户的主目录 注:cd是shell的一个内部命令
创建/删除目录mkdir/rmdir 创建目录mkdir 例:mkdir sun/work1.d mkdir除创建目录外,还在所创建的目录中自动建立文件.与.. 删除目录rmdir 例 : rmdir sun/workl.d 要求被删除的目录除.与..外无其它文件或目录 另: rm -r sun/workl.d
复制目录copy 命令格式:copy dir1 dir2 (1) 若dir2不存在,则新建子目录 并将dir1下所有文件拷入 (2) 若已存在,则将所有文件拷入 命令选项: -r 递归(Recusion)地复制遇到的子目录 -v 冗长(verbose)方式, 拷贝时列出所拷贝的文件名 例: copy backup.d bak.d copy -rv backup.d ../work1/work2.d
根文件系统与子文件系统 • 根文件系统(root filesystem) • 根文件系统是整个文件系统的基础,不能 “脱卸(umount)” • 子文件系统 • 子文件系统(包括硬盘/软盘/网络文件系统NFS)以根文件系统中某一子目录的身份出现,不象DOS那样使用逻辑盘的概念 • 独立的存储结构 • 根文件系统和子文件系统都有其自己独立的文件系统存储结构 • 例:使软盘A的文件系统与/mnt目录关联/不关联 • mount /dev/fd0135ds18 /mnt • umount /dev/fd0135ds18
文件系统的结构 把整个逻辑设备以512字节为块划分, 编号为0,1,2,...。 1.引导块(0号块): 用于启动系统,只有根文件系统的引导块有效 2.专用块(1号块):也叫管理块 存放与整个文件系统的管理有关的信息。如:文件系统的大小,i节点区的大小,空闲空间大小,空闲块链表的头等等。可以用ustat系统调用获得专用块中的某些信息。
文件系统的结构(续) • 3.i节点区: • i节点(index node,简记为i-node) • i节点区由若干块构成。 • 每个文件都对应一个i节点。 • 每磁盘块可容多个i节点,每个i节点为64字节 • i节点包括:文件类型,属主,组,权限,link数,大小,最近访问和修改的时间,指向文件实际数据块的一些指针。注:i节点内不含文件名 • i节点的数目:在文件系统创建时确定 • i节点编号:从1开始。1,2,3,... • 4.文件存储区: • 用于存放文件数据的区域,包括目录表
目录存储结构 • 树形带交叉勾连的目录结构 • 每个目录表也是一个文件 • 存于“文件存储区”中,有其自己的i节点 • 用ls命令列出的目录大小是目录表本身的长度 • 目录表的基本组成单位是“目录项” • 每个目录项由“文件名-i节点号”对构成
显示文件系统空闲空间df -v 列出文件存储区总长度,空闲空间和百分比 -i 列出i节点使用情况 UNIX文件系统至少有15%空闲空间,否则系统变得很慢 root[66]#df / (/dev/root ): 710734 blocks 150779 i-nodes /stand (/dev/boot ): 14556 blocks 3824 i-nodes root[67]#df -v Mount Dir Filesystem blocks used free %used / /dev/root 1612078 901344 710734 56% /stand /dev/boot 30720 16164 14556 53% root[68]#df -i Mount Dir Filesystem iused ifree itotal %iused / /dev/root 50733 150779 201512 26% /stand /dev/boot 16 3824 3840 1% root[69]#df -vi Mount 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%
列出目录占用的空间du 命令du: disk usage 显示某一目录(包括所有下属子目录)中文件大小 例: du . 204 ./x25pkg 1946 ./bak/org 2602 ./bak/ver.1 2816 ./bak/ver.2 9310 ./bak 1950 ./src 11466 .
列出用户占用的空间quot 命令quot 列出用户磁盘文件所占用的磁盘空间总和 例如:quot /dev/root: 624432 bin 213700 root 5390 uucp 4012 mmdf 1029 jiang 679 gao 6 guest
文件的硬连接 目录表由目录项构成,目录项就是一个 “文件名-i节点号”对。因此,可以在同一目录或者不同目录中的两个目录项,有相同的i节点号 每个目录项指定的文件名-i节点号的映射关系,叫做硬连接 硬连接数目(link数):同一i节点被目录项引用的次数
建立文件的硬连接 • 命令ln (link) • 例:ln chapt0 intro • chapt0是一个已存在的文件,新生成目录项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建立硬连接,只限于文件,并且处于同一文件系统
目录表的硬连接 • 不允许对目录用ln命令建立硬连接 • 一般来说,目录的link数=直属子目录数+2
符号连接 • 符号连接也叫软连接 • 用特殊文件“符号连接文件”来实现 • 该文件中仅包括了一个路径名 • 命令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字符串 • 文件的最后一次写时间以后不再变化 • 一旦建立了符号连接,只有删除操作删除的是符号连接文件,其它所有操作都将访问符号连接所引用的文件,而不是符号连接文件本身
符号连接的规则 在系统翻译一个路径名分量时,若系统发现符号连接,就把符号连接的内容加到路径名的剩余部分的前面,翻译这个名字产生结果路径名。若符号连接包含绝对路径名,使用绝对路径名。否则,根据在文件层次结构中该连接的相对位置,计算符号连接内容(不是根据调用进程的当前的工作目录)。 例:设当前目录为d ln -s d1/dlb d1/dx 那么,在d1下新建文件dx,访问d1/dx则实际访问d1/d1/d1b
硬连接与符号连接的比较 硬连接 在数据结构层次上实现 只适用于文件,不适用于目录 不同文件系统之间也不行 硬连接能够完成的功能软连接可以做到 符号连接 在算法软件上实现 硬连接能够完成的功能软连接可以做到 适用于目录,也适用于不同的文件系统 但同硬连接相比要占用操作系统内核的一部分开销 避免循环式符号连接的方法
系统调用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 */
数据结构stat struct 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;// 文件最近状态改变时间 };
数据结构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域:文件最近状态改变时间。 向文件中写、改变权限、文件主、用户组、连接计数时,更新这个时间
文件的权限 • 权限用于控制进程对系统中文件和目录的访问: • 权限的三个级别: • 文件主,同组用户,其他用户 • 每个文件有唯一的属主 • 普通文件的权限 • 读、写、可执行,不可写文件也可以被删除 • 可执行文件:分两类: • 程序文件:二进制的CPU指令集合 • 文件满足系统规定的格式 • 脚本文件:ASCII文件 • 默认的解释程序为/bin/sh • 可以在文件的第一行自行指定解释程序 • #! /bin/csh • 解释程序也可以是用户自己编写的应用程序
目录的权限 读权限: 若无读权限,那么“目录表”文件不许读,ls会失败 写权限: 若无写权限,那么“目录表”文件不许写 创建文件,删除文件,文件改名会修改目录文件 但是,修改文件不需要修改目录文件,需要修改i节点 目录无写权限不是指目录下所有文件禁止写 执行权限: 有执行权限意味着在分析路径名的过程中可检索该目录 举例: cat /a/b/c 要求/,/a, /a/b三目录有x权限,c文件有读权限;否则,命令执行失败。 cd ../stud4628 要求..和stud4628必须有x权限
权限验证的顺序 1.若文件主与进程主相同: 使用文件主权限,不再查组和其他用户的权限 2.若文件主与进程主不同,但文件主与进程主同组: 只使用组权限,不使用关于其他用户的权限 3.若文件主与进程主不同,文件主与进程主又不同组: 使用文件关于其他用户的权限。 注:超级用户root不受权限的限制。 例:可以把文件许可权置为文件主不可读但同组用户可读,即使文件主是该组用户之一也不行