第4章UNIX的文件和目录第4章第2页本章主要内容文件和目录的层次结构,命名规则,文件通配符文件管理,目录管理文件的归档与压缩处理文件系统的存储结构硬连接和符号连接系统调用文件和目录的访问文件和目录的权限第4章第3页4.1文件和目录的层次结构第4章第4页文件和目录的布局(1)/etc目录供系统维护管理用的命令和配置文件passwd,hosts文件issue文件:登录前在login之上的提示信息motd文件:登录成功后的显示信息rc.d目录:开机自动执行的命令集合,又分成0,1,2,...,9十个阶段,分别对应10个目录系统维护命令:fsck,mount,shutdown第4章第5页文件和目录的布局(2)/tmp存放临时文件/bin系统常用命令,如ls,ln,cp,cat等/dev存放设备文件,如终端设备,磁带机,打印机等/usr/includeC语言头文件存放目录/usr/tmp存放临时文件/usr/bin存放一些常用命令,如ftp,make等第4章第6页文件和目录的布局(3)/lib,/usr/lib存放各种库文件,指C语言的链接库文件,以及terminfo终端库等等静态链接库文件有.a后缀(archive,存档)动态链接库文件后缀是.so(sharedobjects)UNIX广泛使用动态链接库,静态链接库逐渐过时/usr/spool存放与用户有关的一些临时性文件,如:打印队列,已收到但未读的邮件等等第4章第7页4.2文件和目录命名规则第4章第8页文件和目录的命名规则名字长度允许1-255字符有些UNIX不支持长文件名,但至少长度为1-14取名的合法字符除斜线外的所有字符都是命名的合法字符不可打印字符也可以做文件名(除了字节0)斜线留做路径名分割符大小写字母有区别4.3shell的文件通配符处理第4章第10页文件通配符规则(1)星号*匹配任意长度的文件名字符串(包括空字符串)点字符(.),当它作为文件名或路径名分量的第一个字符时,必须显式匹配斜线(/)也必须显式匹配例:*file匹配file,makefile,不匹配.profile文件try*c匹配try1.ctry.ctry.basic第4章第11页文件通配符规则(2)问号?匹配任一单字符方括号[]匹配括号内任一字符,也可以用减号指定一个范围例:[A-Z]**.[ch][Mm]akefile注意文件名通配符规则与正则表达式的规则不同,应用场合不同不同种类shell通配符规则会略有些差别第4章第12页与DOS文件通配符的区别(1)例1:UNIX文件通配符比DOS严谨,无二义性设当前目录下有xcom.exexcom.cxcom.objDOS中DIRXCOM*会列出三个文件DELXCOM*删不掉上述任何文件UNIX不存在二义性解释lsxcom*会列出三个文件rmxcom*会删除三个文件例2:DOS中*.*匹配所有文件UNIX中*.*要求文件名中必须含有圆点,否则不匹配,如:*.*与makefile不匹配第4章第13页与DOS文件通配符的区别(2)例3:在DOS中,无法使用通配串*temp*在UNIX中对*temp*严格按前述规则去理解,而且*temp*list*也可用例4:子目录名的匹配在UNIX中可以使用*/*.[ch]通配符,DOS中不许例5:UNIX中文件通配符适用所有命令UNIX中文件通配符允许用于任何命令,而DOS中只能用于dir/del/copy等有限的几个命令中UNIX中命令cat*.c可以列出所有的.c文件内容,DOS中命令TYPE*.C不可第4章第14页shell与kernelshellshell是一个用户态进程对用户提供命令行界面使用操作系统核心提供的功能kernel:操作系统核心管理系统资源(包括内存,磁盘等)运行在核心态通过软中断方式对用户态进程提供系统调用接口Kernelshell进程操作员命令行界面系统调用接口用户态核心态硬件资源硬件接口第4章第15页程序获取命令行参数的方式从main的两个参数,可获得命令行参数的内容演示程序arg.cvoidmain(intargc,char*argv[]){inti;for(i=0;iargc;i++)printf(%d:[%s]\n,i,argv[i]);}编译,链接:ccarg.c-oarg运行./argabcABCDEFargv[0]\0/agr.argv[1]argv[2]\0cbaABCDEF\0第4章第16页shell文件名通配符处理文件名通配符的处理由shell完成,分以下三步在shell提示符下,从键盘输入命令,被shell接受shell对所键入内容作若干加工处理,其中含有对文件通配符的展开工作(文件名生成),生成结果命令执行前面生成的结果命令第4章第17页文件名通配符举例(1)设当前目录下只有try.c,zap.c,arc.c三文件键入内容cat*.c实际执行catarc.ctry.czap.c(按字典序)对命令cat来说,指定了3个文件grepa*.ctry.c与grep'a*.c'try.c的区别设当前目录下有a1.c和a2.c前者实际执行grepa1.ca2.ctry.c在a2.c和try.c中查找正则表达式a1.c后者在try.c文件中查找正则表达式a*.c第4章第18页文件名通配符举例(2)键入命令时的简化输入手工键入vim*e实际执行vimakefile手工键入cd*sna*实际执行cdconfigure-IBM-sna-network.d第4章第19页验证文件通配符处理方式执行./arg*./arg/usr/include/*./arg*/*/usr/*执行结果与同样arg.c在DOS下执行结果比较UNIX由shell完成对文件通配符的展开DOS由命令自身来解释文件通配符第4章第20页4.4文件管理第4章第21页ls:文件名列表基本功能不给出实参时,列出当前目录下所有文件和目录实参为文件时,列出文件项实参为目录时,列出目录下的所有文件项在同一命令行中可以指定多个实参ls命令有几十个选项控制列表格式,有选择的为每个项目列出某些属性选项-F(Flag)若列出的是目录,就在名字后面缀以斜线/若列出的是可执行文件,就在名字后面缀以星号*若列出的是符号连接文件,就在名字后面缀以符号@若列出的是普通文件,则名字面后无任何标记第4章第22页ls选项-F举例命令ls-F的执行结果举例bin/pmd@coretmp/dev/unix@etc/usr/lost+found/var/mnt/zap*第4章第23页ls选项-l:长格式列表(1)例:ls-larg-rwxr-x--xlliangstud519Jul515:02arg第1列:文件属性第1字符为文件类型-普通文件b块设备文件(Block)d目录文件(Dir)c字符设备文件(Char)l符号连接文件(Link)p命名管道文件(Pipe)文件的访问权限(rwx读权限,写权限,可执行权限)2-4字符:文件所有者对文件的访问权限5-7字符:同组用户对文件的访问权限8-10字符:其它用户对文件的访问权限第2列:文件link数,涉及到此文件的目录项数第4章第24页ls选项-l:长格式列表(2)-rwxr-x--xlliangstud519Jul515:02arg第3列,第4列:文件主的名字和组名第5列普通磁盘文件:列出文件大小(字节数)目录:列出目录表大小,不是目录下文件长度和符号连接文件:列出符号连接文件自身的长度字符设备和块设备文件:列出主设备号和次设备号管道文件:列出管道内的数据长度第6列:文件最后一次被修改的日期和时间第7列:文件名对于符号连接文件,附带列出符号连接文件的内容第4章第25页ls-l举例drwxr-xr-x3binbin3584Jul1111:55bin-rw-------1rootroot164470Oct211:43coredrwxr-xr-x11binbin7168Oct1809:55devdrwxrwxr-x27binauth7680Oct1809:55etcdrwxr-xr-x2rootroot1024Jul1107:24lost+founddrwxrwxrwx2rootbin512Jul281998mntlrwxrwxrwx1rootroot35Jul1107:31pmd-/var/opt/K/SCO/Unix/5.0.5Eb/pmd/pmddrwxrwxrwt2syssys4096Oct1810:48tmplrwxrwxrwx1rootsys11Jul1107:31unix-/stand/unixdrwxrwxr-x25rootauth512Oct217:18usrdrwxr-xr-x6rootsys512Jul1107:43varcrw-r--r--1binter0,9Oct1809:56/dev/tty10prw-r--r--1rootsys2642Oct1811:07/tmp/pipe第4章第26页cp:拷贝文件命令的两种格式和功能cpfile1file2cpfile1file2...filendir其中file1,……,filen为文件名,dir为已有目录名例:cpa.ca.bakcpa.cb.cbackup.dir例:cp*.cbak.d与DOS命令COPY*.CBAK.D执行结果相同,过程不同UNIX中实际执行cpa1.ca2.cb1.cb2.cbak.d第4章第27页cp:拷贝文件(例2)例2:cpbak.d/p*.c命令实际执行cpbak.d/pl.cbak.d/p2.c(先按通配符定义展开再执行)结果文件p1.c将覆盖掉p2.c与DOS的COPYBAK.D/P*.C执行结果不同将这两个文件拷贝到当前目录下的正确用法:cpbak.d/p*.c.当前目录p1.cbak.dp2.cp2.cp1.c第4章第28页mv:移动文件格式1mvfile1file2mvfile1file2...filendirmvdir1dir2功能使用mv命令可以将文件和目录改名可以将文件和子目录从一个目录移动到另一个目录第4章第29页rm:删除文件命令格式rmfile1file2...filen例rmcorea.outrm*.o*.tmprm*.bak选项-r递归地(Recursive)删除实参表中的目录,也就是删除一整棵目录树。-i每删除一个文件前需要操作员确认(Inform)-f强迫删除(Force)。只读文件也被删除并且无提示其它问题正在运行的可执行程序文件不能被删除第4章第30页显式地区分命令选项和处理对象问题设当前目录下只有a,b,c三个文件rm-iwho-irm-irm*cat*ls*解决方法许多UNIX命令(如cp,ls,mv,rm,cat,grep,set等)用--显式地标志命令行选项的结束,识别以-开头的处理对象。如:rm---i(删除文件-i)只提供选项,未指定任何文件,命令格式错生成文件-i(符合文件的命名规则)不能删除文件-irm-iabccat-iabcls-iabc第4章第31页4.5目录管理第4章第32页路径名绝对路径名与相对路径名路径分量分隔符用斜线/,而不是反斜线\例如/usr/stud/liutest/data1/cfg当前工作目录当前工作目录是进程属性的一部分,每进程一个没有逻辑盘的概念文件.与..在目录表中确实有两个文件这两个目录项由系统创建和删除主目录(HomeDirectory)每个用户都有自己独立的主目录用env命令查环境变量HOME的值第4章第33页打印/改变当前目录pwd命令:打印当前工作目录printworkingd