Linux文件与权限
??在Linux中有着一切皆文件的说法,而文件的权限大小和用户所拥有的权限决定了用户对文件的控制程度,因此文件的权限和用户的权限对Linux中文件和系统的安全有很大的影响。
一. 文件系统
1.在linux中文件和目录被组织成一个单根倒置的结构,所有文件从根(/)下开始。
2.Linux文件名称区分大小写。
3.文件有两类数据:元数据(metadata)和数据(data)。其中元数据存放的是文件的iNode等信息,数据存放的是文件的具体内容。
4.文件名最长255个字节。各种文件名颜色对应的文件类型:
文件名颜色 | 文件类型 |
---|---|
蓝色 | 目录 |
绿色 | 可执行文件 |
红色 | 压缩文件 |
浅蓝色 | 连接文件 |
灰色 | 其他文件 |
5.linux中的文件结构
/boot :引导分区,引导文件、内核文件存放目录
/bin : 存放供所有用户使用的基本命令的二进制可执行文件,不可关联到独立分区
/sbin : 存放管理类的基本命令的二进制可执行文件,不可关联到独立分区
/lib : 启动时程序依赖的基本共享库文件
/lib64 :在x86_64系统上的辅助共享文件库存放位置
/etc: 配置文件
/home : 普通用户家目录存放位置
/root : 管理员的家目录
/media : 便携式移动设备挂载点
/mnt : 临时文件系统挂载点
/dev : 设备文件存放位置
/opt : 第三方应用程序安装位置
/srv : 系统运行服务用到的数据
/tmp : 临时文件存储
/var : 一般存放经常修改的文件,例如日志
/sys :存放和硬件相关的(内存)内容
/proc : 存放内存中的正在运行中的进程
6.文件标识符
标识符 | 文件类型 |
---|---|
- | 普通文件 |
d | 目录 |
b | 块设备 |
c | 字符设备 |
l | 链接文件 |
p | 管道文件 |
s | 套接字socket |
二.文件管理
1.pwd 显示当前工作目录
pwd -P 显示真实物理路径
pwd -L 显示链接路径(默认)
2.绝对路径和相对路径
绝对路径
1.以正斜杠(/)开始
2.完整的文件位置路径
3.可用于任何想指定的文件
相对路径
1.不以正斜杠(/)开始
2.其路径是相对于当前工作目录的路径。
3.cd 更改目录(change directory)
cd 切换到当前用户主目录
cd .. 切换到上一层目录
cd - 切换至以前工作的目录
4.ls 列出目录内容
ls -a 显示包括隐藏文件
ls -l 显示额外的信息
ls -R 目录递归显示
ls -1 文件分行显示
ls -S 按大到小的顺序显示
ls -t 按mtime排序
5.stat 查看文件状态
stat filename
atime:access time 访问时间
mtime: modify time 修改时间
ctime:change tine 元数据改变时间
6.cp 复制文件
cp -T source dest
cp source directory
cp -t directory source
cp -i 覆盖前提示
cp -n 不覆盖
cp -r,R 递归
cp -a 归档,连带权限全部复制
7.mv 移动和重命名文件
mv -T source dest
mv source directory
mv -t directory source
mv -i 交互式
mv -f 强制
8.rm 删除
rm -i 交互式
rm -r 递归
rm -f 强制
??为了防止rm误删除,可以建一个文件夹,别名rm为mv命令,alias rm=‘mv -t /trash‘ 其中/tursh可以看做是垃圾回收站
9.文件通配符
符号 | 含义 |
---|---|
* | 零个或多个字符 |
~ | 当前用户家目录 |
[0-9] | 0-9任意一个数字 |
[a-z] | a-z任意一个字母 |
[A-Z] | A-Z任意一个字母 |
[zh] | zh中任意一个 |
[^zh] | zh外的字符 |
其他表示方法
字符 | 含义 |
---|---|
[:digit:] | 任意数字,0-9 |
[:lower:] | 任意小写字母,a-z |
[:upper:] | 任意大写字母,A-Z |
[:alpha:] | 任意大小写字母 |
[:alnum:] | 任意数字、字母 |
[:blank:] | 水平空白字符 |
[:space:] | 水平或垂直空白符 |
三.inode节点和软硬链接
1.inode(index node)索引节点。
??一个inode节点包含一个文件或一个文件夹的元数据。inode表记录了所有文件的信息,寻找文件时系统会先找到其inode信息,再通过inode信息找到磁盘中的存储位置。不同的文件系统对磁盘划分方式不同,inode表结构也不相同。inode中包括以下信息:
文件类型,权限,属主,属组
链接数(指向这个文件的路径名称个数)
文件大小和时间戳
磁盘上存放文件数据的指针
??因此,当我们删除一个文件时,我们删除的是其文件名称,同时释放inode表为空,其磁盘内容并未清空。当我们复制一个文件时,我们先把其iNode信息复制到一个新的inode接点中,再把文件内容复制过去。当我们移动或重命名一个文件时,我们并未改变其inode信息和磁盘上的数据内容,只是改变了其文件名。
2.硬链接
??硬链接:硬链接等同于给同一个文件取别名,不改变文件的inode信息和磁盘存储位置。每一个硬连接都是独立的,相互之间无主次之分。每创建一个硬链接,文件的连接数增加1。硬链接是不可以跨分区创建的,因为每一个分区都是一个独立的inode表。同时硬链接也只可以在文件上创建,文件夹上不可以,避免死循环嵌套。
ln filename1 filename2
3.软链接
??软链接相当于windows中的快捷方式,创建软链接时是创建了一个新文件,文件中的内容为引用文件的路径,路径可以为绝对路径,也可以为相对路径,相对路径相对的是软链接目录的路径,而不是工作目录。软链接依附于引用文件,引用文件被删除,则软链接也随之失效。软链接可以跨分区创建,而且对于文件或文件夹都可以。
ln -s filename1 filename2
四.标准I/O和管道
1.标准输入、输出
Linux给程序提供了三种I/O设备
类型 | 操作符 | 默认输入/输出 |
---|---|---|
标准输入 | 0 | 默认从键盘输入 |
标准输出 | 1 | 默认输出到终端 |
标准错误 | 2 | 默认输出到终端 |
??结合命令和操作符,我们可以把三种标准输入/输出重定向到文件中。格式如下:
命令 操作符 文件名
其中,操作符包括:
>(1>) 把标准输出重定向到文件
2> 把标准错误输入重定向到文件
&> 把所有输出重定向到文件
< file 把文件的内容作为命令的标准输入
>>、>> 和 <<终止词
> file 会把文件原有内容覆盖,
set -C 禁止覆盖已有文件,可追加
set +C 允许覆盖
>> file 追加到文件中,不覆盖文件。
<<终止词 多行输入,直到遇到终止词才停止输入
2.tr命令
tr 转换和删除字符
tr [option] SET1 [SET2]
tr -c 取字符的补集
tr -d 删除属于第一字符集的字符
tr -s 把连续重复的字符转化为一个指定的字符
tr -t 把第一字符集的字符转化为第二字符集对应的字符
3.管道
??把一个命令的标准输出作为另一个命令的标准输出,使用“|”来连接。
命令1 | 命令2 | 命令3 |...
??错误输出默认不会被管道转发,可利用 2>&1 或 |& 实现
4.tee 重定向到多个目标
命令1 | tee [-a] filename | 命令2
??把命令1的标准输出保存到文件中并作为命令2的标准输入
五.用户和组
1.用户和组的配置文件:
/etc/passwd:用户机器属性信息
/etc/shadow:用户密码及其相关属性
/etc/group:组及其属性信息
/etc/shadow:组密码及其相关属性
用户
2.用户创建
useradd -u UID :指定所创建用户的UID
useradd -g :指定用户的基本组
useradd -c :指定用户的注释信息
useradd -d :指定用户家目录
useradd -s :指定用户的shell
useradd -G :指定用户的附加组
useradd -D :查看创建用户的默认设置
默认设置文件:/etc/default/useradd
家目录模板文件:/etc/skel
newusers passwd 格式文件 批量创建用户
chpasswd 批量修改用户口令
id username 显示用户相关的信息
3.用户属性修改
usermod -u newUID oldUID 修改用户的UID
usermod -g newGID oldGID 修改用户的主组
usermod -s 修改默认的shell
usermod -c 修改注释信息
usermod -L lock指定用户,在/etc/shadow 密码栏加!
usermod -U unlock指定用户,把/etc/shadow密码栏的!去掉
usermod -e 指定用户账号过期的时间
chfn 指定个人信息
chsh 指定shell
finger user 查看用户信息
4.删除用户
userdel username 删除用户
userdel -r 删除用户家目录
5.切换用户
su username 非登录式切换,不会读取用户的配置文件,不改变当前工作目录
su - username 登录式切换,会读取用户配置文件,完全切换
6.设置和修改密码
passwd -d 删除密码
passwd -l lock用户
passwd -u unlock用户
passwd -e 强制用户下次登录修改密码
chage 交互式修改用户密码策略
组
7.创建组
groupadd -g GID name 指明GID
groupadd -r 创建系统组
7.修改和删除组
groupmod -n oldname newname 修改组名字
groupmod -g oldGID newGID 修改组GID
groupdel groupname 删除组
8.更改组密码
gpasswd -a user group 将user添加至指定组中
gpasswd -d user group 将user从组中删除
newgrp 临时切换主组,不改变/etc配置文件
9.更改和查看组成员
groupmems options action
options:
-g 更改为指定组
actions:
-a 把用户加入到指定组中
-d 把用户从指定组中删除
-p 把组中所有成员清除
-l 显示组成员列表
groups [option].[username]...查看用户所属组列表
归纳:1.修改用户的组:
用户加入到组:
usermod -g newGID oldGID 修改用户的主组
gpasswd -a user group 将user添加至指定组中
groupmems -g group -a user 把user加入到组中
newgrp 临时切换主组,不改变/etc配置文件
用户从组中删除:
gpasswd -d user group 将user从组中删除
groupmems -g group -d user 把user从组中删除
2.锁定和解锁用户
lock
usermod -L lock指定用户,在/etc/shadow 密码栏加!
passwd -l lock用户
unlock
usermod -U unlock指定用户,把/etc/shadow密码栏的!去掉
passwd -u unlock用户
六.文件权限
1.文件属性
??每个文件针对三类不同的用户有三个基础权限。三类不同的用户是指:
文件的属主(u)
文件的属组(g)
其他用户(o)
三个基础权限是指:
读(r)、写(w)、执行(x)。
??X 大写X,只给目录x权限,不给文件x权限,因为执行权限对于文件来说是危险的,假如文件是病毒且有执行权限那是很危险的。
??同时还有文件的链接数、文件名、创建时间、文件大小等。
2.修改文件的属主和属组
chown [option] [owner][:[group] file
owner 修改属主
owner:group 修改属主和属组
:group 修改属组
-R 递归
chgrp group file 修改属组
3.修改文件权限
chmod -R 递归修改权限
chmod [option] --reference=rfile file
属主 | 属组 | 其他 |
---|---|---|
u | g | o |
+、-、= | +、-、= | +、-、= |
r、w、x | r、w、x | r、w、x |
4、2、1 | 4、2、1 | 4、2、1 |
4.权限遮罩码 umask
??umask值可以用来保留在创建文件权限
umask 查看系统umask值
umask 022 设置uamsk值,临时
umask -S/p 输出不同格式umask值
/etc/bashrc umask全局设置文件
~/.bashrc 用户设置
文件权限计算:
文件:
umask=022
666 -> 110110110
022 -> 000010010 遇到umask的1就为0,遇0则不变
644 <- 110100100
文件夹则把666改为777
5.特殊权限
suid(4):只对可执行二进制文件有效,当一个用户去执行一个带有suid权限的文件时,用户会继承所有者的权限。
sgid(2):对于可执行二进制文件而言,执行者将继承文件属组的权限。sgid作用在目录上,改目录下新建的文件将继承目录属组的权限。
sticky(1):粘滞位也可称为保护位,sticky作用在目录上,该目录下的文件只能被自己的属主删除、其他人不可以。
6.ACL 访问控制列表
??相比于传统权限,ACL权限比较灵活,可以单独针对一个用户设置权限。
setfacl -m u:user:rwx file 设置user对file有rwx的权限
setfacl -x user file 删除user在file上的acl权限
setfacl -b file 删除所有对file的acl权限
getfacl file 查看file的acl权限
getfacl -R file > acl.txt 把file的acl权限备份到acl.txt
setfacl -R --set-file=acl.txt file 从acl.txt中把file的acl权限还原
setfacl --restore acl.txt 还原acl权限
ACL权限和传统权限的关系:属主 自定义用户(ACL) 自定义组(ACL) others
7.chattr
chattr +/- i 加锁/解锁 防止误删除,root也删除不了
chattr +/- A 不支持读时间的更改
原文地址:http://blog.51cto.com/8031757/2151873