第1页:第24章文件操作
本页为第24章文件操作的章节封面,标示本章讲解的文件创建复制删除、权限与链接。
第2页:本章需要解决的几个问题
- 如何创建、复制、移动和重命名普通文件?
- 有哪些文件权限?
- 什么是文件链接?
- 如何搜索文件?
第3页:25.1创建文件:touch
- touch的主要功能
- 将文件的修改时间和访问时间设置为当前时间
- touch的副作用
- 当修改的文件不存在时,创建该文件
第4页:25.1创建文件:touch:语法定义
- 语法定义:touch[-acm] [-ttime]file…其中:-a:改变文件访问时间-m:改变文件修改时间-c:不希望创建新文件time:使用time作为设置的日期和时间
第5页:创建文件:touch
- 5种创建新文件的方法:-vinewfile-重定向标准输出,>newfile-cpoldfile newfile-catnewfile-touchnewfile
第6页:25.2命名文件
- Unix文件命名标准:1文件名最长255个字符2文件名可以包含除/和null外的任何字符-/是路径分隔符-null在C/C++语言中,作为字符串的结束符3创建对自己有意义的文件名4建议命名目录和文件时,使用小写字母。只有特别重要时,使用全大写的名称
第7页:25.2命名文件:可以在文件名中安全使
- 可以在文件名中安全使用的字符
- 含义字符小写字母a、b、c……大写字母A、B、C……数字0、1、2……点.连字符-下划线_
第8页:25.3复制文件:cp
- 语法定义:cp[-ip]file1file2…其中:-i:交互式复制-p:目标文件和源文件具有相同的修改时间、访问时间和权限file1:已有文件file2:目标文件
第9页:25.3复制文件:cp示例
25.3复制文件:cp命令示例:
$ cp /etc/passwd ~/pword$ cp-i data extracp: overite extra (yes/no)?yes$ cp-p data extra$ ls-l data (查看修改时间)$ ls-lu data (查看访问时间)$ ls-l extra$ ls-lu extra
第10页:25.4将文件复制到不同的目录中:cp
- 语法定义
- cp[-ip]file…directory其中:file:已有文件directory:已有目录的名称
第11页:将文件复制到不同的目录中:cp示例
25.4将文件复制到不同的目录中:cp命令示例:
$ cp data\home\harley\backups$ cp ../../bin/adventure .$ cp documents/* backups$ cp-r documents backups
第12页:25.5将目录复制到其它的目录中:cp
- 语法定义:cp-r[-ip]directory1…directory2其中:directory1:已有目录的名称directory2:目标目录的名称
第13页:25.6移动文件:move
- 语法定义:move[-if]file…directory其中:file:已有文件的名称directory:目标目录的名称-i:交互式操作-f:强制替换目标文件,忽略-i和文件权限的限制(在没有写权限的情况下复制)
第14页:25.7重命名文件或目录:move
- 语法定义:move[-if]oldname newname例子:设old、new都是目录名$ move old new执行效果1.如果new不存在,old重命名为new2.如果new存在,old成为new的子目录
第15页:25.8删除文件:rm
- 语法定义:rm[-fir]file…例子:$ rm data$ rm data[123]$ rm *(考虑:会删除所有文件吗?)
第16页:25.9如何防止误删文件:rm-if
- 防止误删方法1:-删除前,先用ls检查一下删除的目标,确认无误后,执行删除操作-为了简化这个过程,可以定义别名:delalias del=‘fc-s ls=rm’例子:$ ls data.[beo]*$ del
第17页:如何防止误删文件:rm-if
- 防止误删方法2
- -使用-i选项,进行交互式操作。rm程序将为每个文件显示一条询问消息,确认后,才会删除。
第18页:25.10删除整个目录树:rm-r
- 交互式删除
- rm-ri extra
- 平静式删除
- rm-rf extra
第19页:删除整个目录树:rm-r
- 一个容易出现的错误
- $ rm-rf ~/extra$ rm-rf ~ /extra
第20页:25.12文件权限
- 3种权限:-读权限(read permission)-写权限(write permission)-执行权限(execute permission)
第21页:25.12文件权限:为自己文件设置权限的
- 为自己文件设置权限的理由
- -限制其他用户的访问-避免自己错误使用
第22页:25.12文件权限:目录的权限
- 目录的权限
- 读取目录内容读创建、移动、复制或删除目录写搜索目录(如:执行ls等)执行
第23页:25.12文件权限:文件权限如何控制其它
- 文件权限如何控制其它用户标识的访问?每个文件权限都针对三类用户:1.文件创建者2.文件创建者所在的组3.其他用户每类用户的权限由3部分组成:读权限、写权限、执行权限
第24页:25.13 setuid
- setuid是什么?是一种文件权限,允许其他用户拥有和文件创建者的一样权限。
- 为什么需要setuid?因为某些情况下,普通用户需要特殊的权限运行程序。
第25页:25.13 setuid
- 例子:使用passwd命令修改口令。该命令需要修改口令文件和影子文件,但修改这两个文件需要root权限。-rw-r--r--1 root root 1787 Oct 27 2012 /etc/passwd-r--------1 root root 1187 Oct 27 2012 /etc/shadow
- 其实,用户能更改密码真正的秘密不在于文件的权限,而在于更改密码的命令passwd-rwsr-xr-x 1 root root 22960 Oct 27 2012 /usr/bin/passwd
第26页:setuid:s标示一类特殊的权限
- s标示一类特殊的权限setuid,可以这样来理解它:当一个具有执行权限的文件设置setuid权限后,用户执行这个文件时将以文件所有者的身份执行。
- passwd命令所有者为root(Linux中的命令默认所有者都是root),具有setuid权限。也就是说当普通用户使用passwd更改自己密码的时候,实际是以passwd命令所有者root的身份在执行。
第27页:25.14 Unix维护文件权限的方式
- 使用用户组维护文件权限
- 每个userid都属于一个组,在创建userid时,就分配了组。-组中除了文件创建者,其他成员的权限都一样
- 每个组都有一个groupid,存放在/etc/group文件中
- 组的名称存放在/etc/passwd文件中
第28页:Unix维护文件权限的方式:显示用户标识
- 显示用户标识和组标识的命令$ iduid=500(harley) gid=500(staff)groups=500(staff), 502(admin)
- 显示组信息的命令groups[userid…]
第29页:25.15显示文件权限:ls-l
- ls-l执行结果:total 109-rwxrwxrwx 1 harley staff 8672 Sep 5 16:27 program.allusersdrwxrwx---1 harley staff 4096 Sep 5 16:27 music……其中:r读权限w写权限x执行权限-没有权限权限字段
第30页:显示文件权限:ls-l:权限字段的含义
- 权限字段的含义:Flag Owner Group Other File-rwx rwx rwx program.allusersd rwx rwx---music
第31页:25.16文件模式
- 文件模式的含义:-使用一个3位数字的代码来表示一个完整的文件权限集,该代码被称为文件模式。例如可以说:文件text.owner的模式是600文件spacewar的模式是755
第32页:25.16文件模式:文件模式中各种权限对
- 文件模式中各种权限对应的数值
- 4 =读权限2 =写权限1 =执行权限0 =没有权限
第33页:25.17改变文件权限
- 语法定义
- chmodmode file…其中:mode:文件模式file:文件或目录名
第34页:25.17改变文件权限
- 例子1:更改文件spacewar权限,给予文件属于读、写、执行权限,组和其他人读和执行权限。1.计算各类用户权限:属主:4+2+1=7组:4+0+1=5其他人:4+0+1=52.修改权限:chmod 755 spacewar
第35页:25.17改变文件权限
- 例子2:对于shell脚本,在创建时,属主默认拥有读和写权限。为了执行脚本,必须为属主添加执行权限。chmod 700shell_script
第36页:Unix给新文件指定权限的方式
- 创建文件时,默认的权限由两部分组成:1.初始权限2.用户掩码
第37页:Unix给新文件指定权限的方式
- 创建文件时,默认的权限由两部分组成:1.初始权限666:不可执行的普通文件777:可执行的普通文件777:目录2.用户掩码
第38页:Unix给新文件指定权限的方式
- 创建文件时,默认的权限由两部分组成:1.初始权限2.用户掩码使用umask命令设置umask[mode]
第39页:Unix给新文件指定权限的方式
- 默认权限的计算:默认权限=初始权限▬用户掩码例如,对于可执行文件a,设置用户掩码为077,则该文件的默认权限为:777▬077 = 700
第40页:25.19清空文件内容
- 清空的目的
- -测试粉碎文件,销毁文件中的数据
- 清空的方式
- -用无效的数据,多次覆盖原有数据
第41页:25.19清空文件内容:清空的命令
- 清空的命令:shred-fvuz[file…]其中:-f:忽略文件权限的限制-v:显示处理过程中的消息-u:在清空文件内容之后,删除文件-z:在清空文件内容之后,将文件内容全部填充为0
第42页:25.20链接的概念
- Unix怎么处理文件创建1.在存储设备上保留一块空间用于存储数据;2.创建一个索引节点,或称i-节点,来存放文件的基本信息。
第43页:25.20链接的概念示意图
本页为课件示意图,配合图形说明25.20链接的概念小节的结构与流程。
第44页:25.20链接的概念:文件长度
- 文件长度
- 包含文件的设备名称
- 属主的用户标识
- 组id
- 文件权限
- 上一次修改时间
- 上一次访问时间
- inode上一次修改时间
- 指向该文件的链接数
- 文件的类型(普通、目录、特殊、符号链接……)
- 分配给该文件的块数inode内容
第45页:链接的概念:查看inode相关信
- 查看inode相关信息的命令1.查看文件inode的内容statfilename2.查看文件inode号(i-number)ls-s[filename…]
第46页:25.20链接的概念:链接的概念-文件名
- 链接的概念-文件名和inode之间的连接称为链接。
第47页:25.20链接的概念
- 例子:在bin目录中创建文件spacewar,会发生什么情况?1.为根据spacewar内容,为其分配空间。2.在inode表中找一个空闲inode,假设为:inode: #478515,将文件信息填入到该节点中。3.在bin目录放入一个条目,包括inode号和文件名称spacewar。
第48页:25.21多重链接
- 25. 21多重链接
- 多重链接的含义:同一个inode,指向多个不同名称的文件。
第49页:25.22创建新链接:ln
- 为单个文件创建新链接
- lnfile newname其中:file:文件名newname:新链接的名称
第50页:创建新链接:ln:为多个文件创建新链接
- 为多个文件创建新链接
- lnfile… directory其中:file:文件名directory:存放新链接的目录
第51页:25.23基本文件命令的工作方式
- 创建文件、创建目录(mkdir):为文件/目录分配空间;创建inode;创建目录条目。(其实,目录也是文件,文件内容为:inode号文件名)
第52页:基本文件命令的工作方式:复制文件
- 复制文件(cp):情况1:目标文件已存在替换目标文件数据,修改目标文件的inode内容情况2:目标文件不存在分配空间,复制数据;创建inode;创建新的目录条目
第53页:基本文件命令的工作方式:移动文件
- 移动文件(mv)
- 改变目录条目中的文件名;移动目录条目。
第54页:基本文件命令的工作方式:创建链接
- 创建链接(ln)
- 创建新的目录条目。
第55页:基本文件命令的工作方式:移除文件
- 移除文件(rm)
- 移除对应目录条目;如果文件已无链接,则删除该文件。
第56页:25.24符号链接(软链接)
- 链接的限制
- 1.无法创建目录的链接;2.不能为不同文件系统的文件创建链接。如果要突破这两个限制,需要使用符号链接。
第57页:符号链接(软链接):什么是符号链接
- 什么是符号链接
- 符号链接类似于链接,只是把文件对应的目录条目中inode号替换为文件的路径名。
- 怎么创建符号链接
- $ ls-s /bin/sh /bin/bash
第58页:符号链接(软链接):怎么查看符号链接
- 怎么查看符号链接:$ ls-l /bin/shlrwxrwxrwx 1 root root 4 Sep 11 2012/bin/sh-> bash
第59页:符号链接(软链接):硬链接与软件链接
- 硬链接与软件链接
- 将常规的链接称为硬链接
- 将符号链接称为软链接
第60页:25.25目录使用符号链接
- 当cd和pwd的对象是符号链接时,怎么处理-方式1:使用-L选项,将符号链接视为真实的目录;-方式2:使用-P选项,用真实目录替换符号链接。这种方式称为shell遵循符号链接。
第61页:25.25目录使用符号链接示意图
本页为课件示意图,配合图形说明25.25目录使用符号链接小节的结构与流程。
第62页:25.26查找与Unix命令相关的文件
- 命令:whereiswhereis[-bms]command…其中:-b:只查找可执行文件-m:只查找帮助文件-s:只查找源文件
第63页:查找与Unix命令相关的文件
- 搜索目标-不搜索全部文件,只在可能的目录中搜索。例如:在/bin /sbin /usr/bin /usr/sbin /etc等目录中搜索可执行文件在/usr/share/man中搜索帮助文件在/usr/src中搜索源代码
第64页:25.27通过搜索数据库查看文件
- 命令:locatelocate[-bcirS]pattern…其中:-b:只需要匹配文件名-c:只统计匹配的个数-i:忽略大小写-r:可以使用正则表达式-S:显示locate数据库的信息
第65页:通过搜索数据库查看文件
- 搜索目标-locate数据库例子:$ locate-r ‘.jpg$’ > photos$ locate-ibr ‘.jpg$’ > photos
第66页:25.28通过搜索目录树查找文件
- 命令:findfindpath… test… action…其中:path:要搜索的路径名test:搜索条件action:对搜索结果的处理
第67页:通过搜索目录树查找文件
- Find的处理步骤1.遍历path下的目录树2.对遇到的每个文件,进行条件测试3.遍历结束后,对满足测试条件的节点执行action操作
第68页:25.28通过搜索目录树查找文件
- 例子
- $find /home/harley–name important-printpathtestaction