文件操作
在linux上,文件的作用远远大于在windows上的文件。
在windows上,如果要使用一个新的硬盘,需要先找到物理分区,再建立新的逻辑分区,再选择某个文件系统。
那么,在linux上又是如何操作的呢?
linux上的MBR方案:
物理分区
格式:
/dev/sda
:第一块物理硬盘,不代表任何分区。/dev/sdb
/dev/sdc
- …
逻辑分区
格式:
/dev/sda1
:第一个分区(一般是主分区)。/dev/sda2
/dev/sda3
- …
主分区:sda1
~sda3
扩展分区:sda4
逻辑分区:sda5
、sda6
、sda7
…(只能在扩展分区上创建)任何一个逻辑分区的最小编号都是5。
文件系统
linux支持的文件系统:ext2,ext3,ext4,ZFS…
挂载点
挂载到相应目录上。
在linux使用一块新硬盘的步骤(重要)
1、插上硬盘后,使用fdisk
查看和调整磁盘分区
sudo fdisk /dev/sda
2、使用mkfs
进行分区的格式化、创建文件系统
sudo mkfs -t ext3 /dev/sda5 #使用-t选项指明文件系统类型
3、使用mount
挂载到某个目录上,使用umount
解除挂载。
sudo mount /dev/sda5 myproject #挂载sda到myproject目录上
分区和目录的顺序不能颠倒,先写分区,再写目录。
系统启动时自动挂载——修改/etc/fstab
文件。
linux文件系统结构
FHS标准,所有linux发行版都遵循的标准。
虚拟文件系统
虚拟文件系统VFS可以让不同的文件系统,对用户进程来说都有统一的API。
ext2文件系统
每个文件只有一个索引节点,每个索引节点都有唯一的标识符。
- 引导块
- 超级块
- inode块
- 目录块
- 数据块
文件类型
文件类型 | 代表字符 |
---|---|
普通文件 | - |
目录文件 | d(directory) |
设备文件(字符设备) | c(character) |
设备文件(块设备) | b(block) |
链接文件 | l(link) |
管道文件 | p(pipe) |
链接文件类似于windows下的快捷方式。
文件权限管理
UGO方式——简单
3类:
- Uesr,文件拥有者
- Group,用户组
- Other,其他用户
3种权限:
- 普通文件的权限:
r
:读文件w
:写文件x
:在shell下执行文件
- 目录文件的权限:
r
:可以ls
到目录中去w
:可以在目录中创建和删除文件x
:cd
到目录中去,一般是和其他两个配合使用,组合设置上
ls -l #可以查看目录底下文件的详细信息
ls -ld testp/ #查看目录本身的信息
其中一条记录的前10个字符为:
-(普通文件) r w -(文件拥有者权限) r - -(用户组权限) r - -(其他用户权限)
chmod u-x testp/ #剥夺了可执行权限
cd testp #无法cd,显示权限不够
ls -ld testp/ #但是可以查看目录信息
chmod u-r testp/ #剥夺了r权限
ls testp #无法ls
touch a #但是可以创建文件
chmod u-w testp/ #剥夺w权限
touch b #无法创建文件
使用chmod
修改文件权限。
chmod u=rwx,g=rx,o=rx testp/
chmod 755 testp/
chmod u+x,g+r,o+r testp/
chmod u-x,g-r,o-r testp/
chmod a=rwx testp/
chmod a-w testp/
文件默认权限(怎么来的,请参考《关于文件权限的八进制表示》)
- 目录文件:777 &(~
umask
) - 普通文件:666 &(~
umask
)
umask
的默认值0022
。
ACL方式——复杂全面
getfacl
:获取控制列表setfacl
:设置控制列表chacl
:修改控制列表
不详细展开。
文件基本操作
文件描述符
OPENMAX
:同时打开的文件数上限。
ulimit -a #查看所有限制
ulimit -n #查看同时打开的文件数
普通用户可以使用ulimit
把数量下调,只有root用户才能往上调。
标准输入输出
宏定义:
STDIN_FILENO
:0STDOUT_FILENO
:1STDERR_FILENO
:2
用户进程的ID
用户启动的进程是否能打开文件,取决于进程的有效用户决定。
通常情况下,用户的有效ID——实际用户ID。
如果文件执行权限设置为s
的话,有效ID——文件所有者的用户ID。
s位分为suid
和sgid
等。
chmod u+s 1.txt
chmod u-s 1.txt
文件有关的系统调用函数(不是bash命令)
1、文件的创建与打开:creat
,open
,mkdir
,mknod
2、文件读写:read
,write
3、关闭和删除文件:close
,unlink
(文件引用计数变为0)
- 软链接
ln -s sum0.c ll #软链接
ln -s 文件/目录 ll
- 硬链接
ln sum0.c dd #硬链接
# 为了避免ls -R出现死循环,不允许创建目录的硬链接
指向同一个i结点,可以发现文件计数器+1。
4、移动文件读写指针:lseek
5、改变文件属性:chown
,fchown
,lchown
6、设置文件权限:chmod
,fchmod
,umask
,access
7、获取文件状态:stat
,fstat
,lstat
- 把stat结构体中的成员变量
st_mode
作为参数传入宏定义中,进行测试,返回非0值,执行成功。 - S_ISREG(m)
- S_ISDIR(m)
- …
8、修改文件时间:utime
9、目录操作:mkdir
,rmdir
,chdir
,fchdir
,getcwd
10、读取目录:opendir
,readdir
,rewinfdir
,closedir
总结
这一期就到这了。内容还是很多的。