文件和目录的层次结构
- UNIX通过目录管理文件
- 文件系统组织成树状结构
- 目录中可以含有多个文件,也可以含有子目录
文件和目录的命名
- 命名规则:
1,名字长度
2,取名的合法字符:除斜线外的所有字符都是命名的合法字符,斜线被用作了路径名分隔符
3,大小写字母有区别
shell的文件名通配符
规则
- shell的文件名通配符是由shell程序解释的,不同的shell会有不同的文件名通配符
- 常用的shell文件名通配符:
1,*
:匹配任意长度
2,?
:匹配任意单字符
3,[ ]
:匹配括号内任一字符
与DOS文件名通配符的区别
- UNIX的文件名通配符要比DOS中的严格,无二异性
- 关于文件拓展名:UNIX文件名处理中,没有所谓“拓展名“的概念
- 匹配子目录中的文件:UNIX中可以使用
*/*.[ch]
通配符,匹配当前目录下所有一级子目录中文件名后缀为.c
和.h
的文件,这在DOS中不允许
grep:用于查找文件里符合条件的字符串
文件管理
ls:文件名列表
- 列出目录的文件名,ls之后可以跟0个到多个名字
1,不给出任何名字时,列出当前目录下所有文件和子目录
2,名字为文件时,列出文件名
3,名字为目录时,不列出目录名,而是列出目录下的所有文件和子目录
4,在同一命令行中可以指定多个名字
- ls的选项,控制每个文件的列表格式,以及列表的范围包括哪些文件
1,-a
:列出所有(all)项,包括名字以句号打头的文件(默认情况下不被列出)
2,-R
:递归地列出碰到的子目录(Recursion),就是说,如果子目录还有子目录,就一直追究下去,直到所有的分支目录
3,-F
:标记(Flag)每个文件。 目录:/
,可执行文件:*
,符号连接文件:@
,管道文件:|
,偏头文件:无任何标记
4,-i
:列出文件的i节点号
5,-d
:若实参是目录,则只列其名字(不列内容)
6,-l
:长格式(long)列表
cp:复制文件
- 命令格式:
格式1:cp file1 file2
: 把文件file1复制到file2
格式2:cp file1 file2 ... filen dir
: 将file1~filen一个或多个文件复制到目录dir下
mv:移动文件
- 格式1:
mv wxisting-file-or-dir new-name
将文件和目录改名,或移动到另一个目录,并使用新名字 - 格式2:
mv file1 file2 ... filen directory
把或多个已有的文件或目录移动到目录directory中,并保持原先的名字
rm(rmove):删除文件
- 格式:
rm:file1 file2 ... filen
- 选项:
1,-r
:递归删除(recursively)删除一个已有的目录树
2,-i
:交互方式(interactive)每次删除前,经过操作员确认,选择y
删除,选择n
不做删除
3,-f
:强迫删除(force)只读文件也可以被删除
find:查找文件
- find命令在一个指定的范围内查找符合条件的文件或者目录,然后执行相应的动作
- 关于"条件"的匹配
1,-name
:文件名的匹配,
2,-type
:类型f:普通文件,d:目录,l:符号连接文件,c:字符设备文件,b:块设备文件,p:管道文件
3,size
:+n[c] :文件大小,正号表示大于,负号表示大于,无符号表示等于
4,- mtime +/-n
文件最近修改(modify)时间,单位为天
5,-atime +/-n
:文件最近访问(access)时间,单位为天 - 关于"动作"的选项
1,-print
:答应查找到的符合条件的文件的路径名
2,- exec,-ok
:对查找到的符合条件的文件执行某个命令
目录管理
路径名
- 绝对路径:从根目录开始
- 相对路径:从当前目录开始
.
: 当前目录..
: 上一级目录- 主目录:不同的用户有不同的主目录
pwd(Print Working Directory) :打印当前工作目录
cd(Change Directory):改变当前工作目录
- cd命令是shell的一个内部命令,而且它只可能是内部命令
mkdir:创建目录
rmdir:删除目录
cp:复制目录
- 命令格式:
cp -r dir1 dir2
: -r:递归地复制一个目录
1, 若dir1不存在,则新建子目录,并将dir1下所有文件复制进来
2,若dir2已存在,则将所有文件复制到目录dir2
文件的归档与压缩处理
tar:文件归档
- 命令用法:
tar:[ctxu][v][f device] file-list
1,选项的第一个字母指定要执行的操作是必须的
c
:创建(create)新磁带
t
:列表(table)列出指定的文件
x
:抽取(extract)从磁带中抽取指定的文件
u
:更新(update)把文件追加到磁带的尾部,这个文件的某个版本也可能曾经存放在磁带上
v
;冗长(verbose)tar每处理一个文件,就打印出文件的文件名,并在该名前冠以功能字母
f
:指定设备文件名(file)
compress:文件压缩
- LZW算法:字典压缩法
文件系统的存储结构
基本文件系统和子文件系统
- UNIX的整个文件系统分为基本文件系统和(根文件系统)和子文件系统
- 基本文件系统是整个文件系统的基础,不能脱卸
- 创建文件系统的命令:
msfs /dev/fd0135ds18
mkfs:(make file system) - 安装一个子系统的命令:
mount /dev/fd0135ds18/mnt
- 不带参数的mount命令,列出当前所有的子文件系统
- umount:拆除一个已安装的子文件系统
- UNIX的设备文件分为:
字设备文件
和块设备文件
文件系统的结构
- 块设备提供的界面是使得整个外存设备看起来是简单的线性块的组合
- 对块设备的特定编号的块的读取或者写入请求,需要映射到对于设备有意义的参数
- UNIX的每个块设备都对应一个块设备文件
- 在每个逻辑设备上构造一个独立的子文件系统
- 磁盘设备读写的最小单位是扇区
- 文件系统使用设备时,空间分配或释放的最小单位是块
- 一个文件系统有下述几部分构成:
1,引导块:0号块,用于启动系统,存放引导程序
2,超级块:1号块,管理块,存放于整个文件系统的管理有关的信息
3,i节点区:i节点,简记为i-node,i节点区由若干块构成,专用于存放i节点
4,文件存储区:用于存放文件中数据的区域,普通磁盘文件+目录表
目录结构
- UNIX的目录结构是一种允许带交叉勾连的目录结构
- 目录表的基本组成单位是目录项
- 每个目录项由一个"文件名- i节点号"对构成,提高目录检索的效率
- 文件的
link
数:同一个i节点被引用的次数,便于文件的删除操作
命令df与du
-
df
:显示可利用的磁盘空间(disk free space)
-
du
:显示磁盘使用信息
硬连接与符号连接
硬连接
定义
- 每个目录项指定的文件名- i节点号的映射关系
- 硬连接数目(link数):同一i节点被目录项引用的次数
ln :可以用来创建一个硬连接
- 用
ln
建立硬连接时,只限于文件,两个文件名的路径名也必须处于同一文件系统中 - 不允许对目录用
ln
命令建立硬连接
目录表的硬连接
- 可以查当前目录的link数,目录的大小指的是目录表的大小
符号连接
- 也叫软连接
- 符号连接允许给一个对象取多个符号名字,可以通过不同的路径名共享同一个信息对象
- 命令:
ln-s
(Symbol link)
硬连接与符号连接的比较和应用
- 硬连接利用了文件系统内部的存储结构,很简单地实现了信息共享
- 符号连接依靠操作系统中文件系统块的软件处理,实现了信息共享
- 硬连接只适用于文件,不允许用户通过命令对目录实现硬连接,以保障文件系统中的树形结构不被破坏
- 不同文件系统之间,不可能用硬连接实现文件的共享
- 硬连接能够实现的功能,是用符号连接都可以做到
- 符号连接在操作系统内核里用软件实现,同硬连接相比要占用系统的一部分开销,包块软件处理占用的CPU时间和调入符号连接文件需要的磁盘操作的时间
- 符号连接适用于目录,从而比硬连接更灵活
- 方便:
1,使用硬连接和符号连接共享数据文件已节约存储空间
2,是用符号连接对程序和用户透明的变更目录组织结构
系统调用
- 系统调用(System call)是操作系统的内核提供的编程界面
- 是应用程序与操作系统进行交互的唯一手段
- 应用程序只能通过系统调用才能申请和访问硬件资源
- UNIX系统调用一般都返回一个整数值
文件和目录的访问
文件存取
文件描述符
- 文件描述符是从0开始编号的整数
- 是操作系统内核中近程PCB(进程控制块)结构里的一个数组的下标
读写文件
- 读的系统调用:
read
- 写的系统调用:
write
关闭文件
int close(int fd)
- 不使用的文件,应当关闭
获取文件的状态信息
start
:获取文件或者目录的状态信息
设备文件
- 分类:块设备与字符设备
- 每个设备都有一个主设备号和次设备号
文件和目录的权限
权限控制的方法
-
命令:
chown
:修改文件的属主 -
命令:
chgrp
:修改文件的组 -
权限级别:文件主,同组用户,其他用户
-
权限:读,写,执行
普通文件的权限
- 权限:读,写,执行
目录的权限
- 如果对目录没有读权限,则目录表文件不许读
- 如果对目录没有写权限,则目录表文件不许被修改
- 目录不可能像程序一样执行,所以,目录的执行权限用做其他的用途
访问合法性验证的顺序
- 超级用户root不受任何权限的制约,所以,应该对文件进行加密
查看文件和目录的权限
ls -l
:可以查当前目录下所有文件和子目录的权限ls - ld
:列出当前目录自身的权限
chomd:修改权限
- 只有超级用户和文件主,才允许修改文件的存取权限
- 字母形式
1,命令格式:chomd [ugoa][+-=][rwx] file-list
2, 描述用户级:
u (user)
: 文件主的权限
g(group)
: 同组用户的权限
o(other)
: 其他用户权限
a(all)
: 所有上述三级权限
3,执行操作
+
:给指定用户增加存取权限
-
: 取消指定用户的存取权限
=
:给指定用户设置存取权限,其他权限都取消
4,权限:
w
: 写权限
r
: 读权限
x
: 执行权限 - 数字形式
-1,命令格式:chomd mode file-list
umask:改变文件创建状态掩码
umask
:用于决定文件和目录的初始权限- 是一个shell内部命令
- 系统调用umask:
SUID权限和SGID权限
SUID
(set user ID):设置用户标识SGID
(set group id)设置组标签