什么是文件系统?
文件系统是操作系统在分区上保存文件信息的方法和数据结构.
Linux文件系统具有类似的通用结构, 其关键组成部分有:
超级块 super block
索引节点 inode
数据块 data block
目录块 directory block
三种基本权限
代表字符 | 权限 | 对文件的含义 | 对目录的含义 |
r | 读权限 | 可以读文件的内容 | 可以列出目录中的文件列表 |
w | 写权限 | 可以修改,删节文件 | 可以在目录中创建, 删除文件 |
x | 执行权限 | 可以执行该文件 | 可以使用cd命令进入该目录 |
目录上只有执行权限, 表示可以进入或穿越它进入更深层次的子目录.
目录上只有执行权限, 要访问该目录下的有读权限的文件, 必须知道文件名才可以访问.
目录上只有执行权限, 不能列出目录列表也不能删除该目录.
目录上执行权限和读权限的组合, 表示可以进入目录并列出目录列表.
目录上执行权限和读权限的组合, 表示可以在目录中创建,删除和重命名文件.
特殊权限
特殊权限 | 说明 |
SUID | 当一个设置了SUID位的可执行文件被执行时, 该文件将以所有者的身份执行. 也就是说无论谁来执行这个文件, 他都有文件所有者的特权, 任意的存取该文件的人能使用全部的系统资源. 如果所有者是root的话, 那么执行人就具有超级用户的权限. |
SGID | 当一个设置了SGID位的可执行文件运行时, 该文件将具有所属组的特权, 任意存取整个组所能使用的系统资源, 若一个目录设置了SGID, 则所有被复制到这个目录下的文件, 其所属的组都会被重设为和这个目录一样, 除非在复制文件时加上-p(preserve, 保留文件属性)的参数, 才能保留原来所属的群组设置. |
sticky-bit | 对一个文件设置了sticky-bit之后, 任何用户都有写权限, 但必须由属主执行删除, 移动等操作; 对一个目录设置了sticky-bit之后, 存放在该目录的文件仅允许属主执行删除, 移动等操作. |
一个设置了SUID的典型例子是passwd程序, 它允许普通用户改变自己的口令, 这是通过改变/etc/shadow文件的口令字段实现的. 然而系统管理员绝不允许普通用户直接改变/etc/shadow文件的权利. 因为这绝对不是个好主意. 解决方法是将passwd的程序设置SUID, 当passwd程序被执行的时候后, 普通用户将具有超级用户的权限, 而passwd程序运行结束之后, 回到普通用户的权限.
查看/usr/bin/passwd文件的权限的话, 它的权限设置如下: –rwsr-xr-x 当中的s代表suid.
查看/tmp目录, 会发现它的权限如下: drwxrwxrwt 其中的t就是sticky-bit
Linux文件类型
普通文件: 包括文本文件, 数据文件, 可执行的二进制程序文件等.
目录文件: Linux系统把目录看成是一种特殊的文件, 利用它构成文件系统的树形结构.
设备文件: Linux系统把每一个设备都看成是一个文件. 其又分为块设备和字符设备.
链接文件
文件类型的表示
普通文件 | - |
目录 | d |
符号链接 | l |
字符设备文件 | c |
块设备文件 | b |
套接字 | s |
命名管道 | p |
系统文件
*.conf 配置文件
*.rpm rmp包
*deb deb包
*.a 一种存档文件
*.lock 一种锁定文件
*.~ 备份文件
.* 隐含文件
程序和脚本
*.c C语言源程序文件
*.cpp C++语言源程序文件
*.h C或C++的头文件
*.o 程序对象文件
*.pl Perl语言源程序文件
*.php PHP语言源程序文件
*.python Python语言源程序文件
*.tcl TCL脚本文件
*.so, *.lib 库文件
创建文件的命令: touch file1 该命令创建了一个名为file1的空文件.
touch .file2 该命令创建了一个名为.file2的隐藏文件. 查看隐藏文件需要用ls -a命令.
sudo touch /boot/file1 该命令使用超级用户的权限在/boot目录下创建名为file1的空文件.
删除文件的命令: rm test 该命令删除test文件
rm test .test 该命令删除多个文件.
Unix和Linux中,如果没有任何返回,就是说明命令运行成功了.
查看文件的命令: cat, less, more. less跟cat的区别是less是分屏显示. more跟less的区别是more不能用上箭头键回选, 翻到最后自动退出. cat不管文件多大, 全部显示, 自动退出.
拷贝命令: cp /boot/grub/menu.lst ./menu.bak.lst 该命令把boot下的menu.lst复制到当前目录, 复制的文件名为menu.bak.lst.
. 代表当前目录.
.. 代表当前目录的上一级目录.
重命名文件命令: mv menu.bak.lst menu.backup 该命令将当前目录下的menu.bak.lst重命名为当前目录下的menu.backup文件. 其实他是一个剪切命令. 它既可以移动一个文件, 也可以重命名一个文件.
查找文件的命令: find
例如: sudo find / –name ls 该命令会从根目录找, 寻找名字为ls的文件.
sudo find / –name “ls*” 从根目录开始查找, 寻找名字以ls开头的文件.
使用ctrl + c来终止搜索的执行.
管理文件权限的命令: chmod
chmod [-R] {[ugoa][+-=][rwxst]}
-R 表示递推地对该目录下的所有子目录实施权限设置.
{}内的内容称为一个模式, 可以指定多个模式, 多个模式之间用逗号间隔.
u 表示属主(user) | + 表示增加权限 - 表示删除权限 = 表示分配权限, 同时将原有权限删除 | r 表示允许读取 w 表示允许写入 x 表示允许执行 |
chmod go-r testfile1 略
chmod u+x testfile1 略
chmod u-x,go+r testfile1 属主删除执行权限, 组和其他用户添加读取权限.
chmod g=u testfile1 将组权限设置为跟属主相同
chmod o+u testfile1 对其他人添加属主具有的权限
chmod 755 testfile2
chmod 600 testfile2
数值设定法
读 | 写 | 执行 | 二进制 | 八进制 | 说明 |
- | - | - | 000 | 0 | 没有权限 |
- | - | x | 001 | 1 | 允许执行 |
- | w | - | 010 | 2 | 允许写入 |
- | w | x | 011 | 3 | 允许执行和写入 |
r | - | - | 100 | 4 | 允许读取 |
r | - | x | 101 | 5 | 允许执行和读取 |
r | w | - | 110 | 6 | 允许写入和读取 |
r | w | x | 111 | 7 | 允许执行写入和读取 |
改变文件所属的用户与所属的用户组的命令: chown
命令格式: chown [-R] <用户[:组]><文件或目录>
同样地, 若操作对象是目录, 则递归地对该目录下面的所有的子目录实施设置.
要单独改变组, 可以使用下面的格式:
chown [-R] <:组><文件或目录> 注意: 组前必须有":"
例: chown jason /home/jane/testfile3 改换属主为jason
chown :users /home/jane/testfile3 改换所属的组为users
chown group1:group1 /home/jane/testfile3 将属主和属组改成group1
chown -R apache:apache /home/osmond/testdir 将testdir目录及其子目录下的所有文件或目录的属主和组读改成apache
Umask命令
用户可以使用umask命令设置文件的缺省生成掩码. 缺省的生成掩码告诉系统当创建一个文件或目录时, 不应该赋予其哪些权限. 如果用户将umask命令放在环境文件(.bash_profile)中, 就可以控制所有新建的文件或目录的访问权限.
命令格式: Umask [u1u2u3]
其中u1表示的是不允许属主的权限; u2表示的是不允许同组的人有的权限; u3表示的是不允许其他人有的权限.
可以使用不带任何参数或带-S参数的umask命令查看当前缺省生成掩码.
$ umask
0022
$ umask –S
u=rwx, g=rx, o=rx