Linux中一切皆文件,包括设备也被抽象为文件,对应的设备文件在/dev目录中。目录也是文件,文件内容是文件名和文件的inode号。
在文件系统中,一个文件由一个inode和data block组成,inode存放文件的权限与属性,data block存放实际数据。目录的data block存放文件名和文件的inode号。
文件权限、属性和文件类型
lrl@DESKTOP-LRL:~$ ls -al total 12 0 1 2 3 4 5 drwxr-xr-x 1 lrl lrl 4096 Aug 10 22:41 . drwxr-xr-x 1 root root 4096 Aug 9 15:05 .. -rw------- 1 lrl lrl 741 Aug 10 23:35 .bash_history -rw-r--r-- 1 lrl lrl 220 Aug 9 15:05 .bash_logout -rw-r--r-- 1 lrl lrl 3771 Aug 9 15:05 .bashrc drwxr-xr-x 1 lrl lrl 4096 Aug 9 15:05 .landscape -rw------- 1 lrl lrl 68 Aug 10 22:41 .lesshst drwxr-xr-x 1 lrl lrl 4096 Aug 10 22:07 .local -rw-r--r-- 1 lrl lrl 0 Aug 11 10:44 .motd_shown -rw-r--r-- 1 lrl lrl 807 Aug 9 15:05 .profile -rw-r--r-- 1 lrl lrl 0 Aug 10 22:13 .sudo_as_admin_successful
属性有
0:链接到此inode节点数量 1:owner 2:group 3:文件大小(默认以字节为单位) 4:文件修改时间 5:文件名
由上述可知:权限分为三组,分别为owner、group、other,每组权限都分为rwx(read,write,execute)。
权限的意义
-
对目录
-
r:读取目录结构
-
w:修改目录结构:
-
删除创建文件与目录
-
重命名
-
移动
-
-
x:可切换到该目录作为工作名录执行命令
lrl@DESKTOP-LRL:~$ ls t t.txt lrl@DESKTOP-LRL:~$ chmod u-x t lrl@DESKTOP-LRL:~$ ls t ls: cannot access 't/t.txt': Permission denied t.txt lrl@DESKTOP-LRL:~$ ls -l t ls: cannot access 't/t.txt': Permission denied total 0 -????????? ? ? ? ? ?
当没有x权限时,有r权限时虽然能读出目录内容,但是会显示无权限,查看文件属性时会有一串?
lrl@DESKTOP-LRL:~$ chmod u=x t lrl@DESKTOP-LRL:~$ vim t/t.txt lrl@DESKTOP-LRL:~$ chmod u=rwx t lrl@DESKTOP-LRL:~$ cd t lrl@DESKTOP-LRL:~/t$ ls t.txt lrl@DESKTOP-LRL:~/t$ cat t.txt jojoij
当只具备x权限时,若知道目录中文件名字且对文件具有对应权限,则依然可以对文件进行操作。
-
-
对文件
-
r:可读
-
w:可编辑
-
x:可执行
文件能否被执行,取决于是否拥有x权限,与文件名没有绝对关系。
-
ls - list directory contents
ls [OPTION]... [FILE]...
OPTIONS is folloing: -a, --all do not ignore entries starting with . -A, --almost-all do not list implied . and .. -c with -lt: sort by, and show, ctime (time of last modification of file status information); with -l: show ctime and sort by name; otherwise: sort by ctime, newest first -f do not sort, enable -aU, disable -ls --color -F, --classify append indicator (one of */=>@|) to entries,/:directory,*:exectuable file,=:socket,|:FIFO --color[=WHEN] colorize the output; WHEN can be 'always' (default if omitted), 'auto', or 'never'; more info below --full-time like -l --time-style=full-iso -h, --human-readable with -l and -s, print sizes like 1K 234M 2G etc. -i, --inode print the index number of each file -l use a long listing format(full information) -r, --reverse reverse order while sorting -R, --recursive list subdirectories recursively --sort=WORD sort by WORD instead of name: none (-U), size (-S), time (-t), version (-v), extension (-X) --time=WORD with -l, show time as WORD instead of default modification time: atime or access or use (-u); ctime or status (-c);also use specified time as sort key if --sort=time (newest first) -t sort by modification time, newest first -u with -lt: sort by, and show, access time; with -l: show access time and sort by name; otherwise: sort by access time, newest first -U do not sort; list entries in directory order
touch
file - determine file type
file filename...
#示例 lrl@DESKTOP-LRL:~$ file .bash_history .bash_history: ASCII text
chown - change file owner and group
chown [OPTION]... [OWNER][:[GROUP]] FILE...
chgrp - change group ownership
chgrp [OPTION]... GROUP FILE...
chmod - change file mode bits
chmod [OPTION]... MODE[,MODE]... FILE... chmod [OPTION]... OCTAL-MODE FILE...
OPTIONS: -R 递归修改
MODE的表示方式有两种:
-
数字类型
#rwx分别用数字421代替,就是二进制111 #每组权限都是rwx的数字形式累加和,三组权限用xyz表示,则使用如下所示 chmod xyz file
-
符号类型
符号 | 操作 | 权限 |
---|---|---|
u(user,也就是owner) g(group) o(other) a(all,也就是ugo) | +(添加) -(移除) =(设置) | r w x |
lrl@DESKTOP-LRL:~$ chmod u=rwx,go=rx .bashrc #设置权限 lrl@DESKTOP-LRL:~$ chmod a+w .bashrc #为所有身份添加权限 lrl@DESKTOP-LRL:~$ ll total 12 drwxr-xr-x 1 lrl lrl 4096 Aug 11 15:25 ./ drwxr-xr-x 1 root root 4096 Aug 9 15:05 ../ -rw------- 1 lrl lrl 741 Aug 10 23:35 .bash_history -rw-r--r-- 1 lrl lrl 220 Aug 9 15:05 .bash_logout -rwxrwxrwx 1 lrl lrl 3771 Aug 9 15:05 .bashrc* drwxr-xr-x 1 lrl lrl 4096 Aug 9 15:05 .landscape/ -rw------- 1 lrl lrl 114 Aug 11 15:25 .lesshst drwxr-xr-x 1 lrl lrl 4096 Aug 10 22:07 .local/ -rw-r--r-- 1 lrl lrl 0 Aug 11 10:44 .motd_shown -rw-r--r-- 1 lrl lrl 807 Aug 9 15:05 .profile -rw-r--r-- 1 lrl lrl 0 Aug 10 22:13 .sudo_as_admin_successful
特殊权限
特殊权限为SUID、SGID、SBIT
SUID:Set UID
-
仅对二进制可执行程序有效
-
执行者对该程序具有x权限
-
在程序执行过程中具有程序拥有者owner的权限
lrl@DESKTOP-LRL:~$ ls -l /bin/passwd -rwsr-xr-x 1 root root 68208 May 28 2020 /bin/passwd lrl@DESKTOP-LRL:~$ ll /etc/shadow -rw-r----- 1 root shadow 972 Aug 9 15:05 /etc/shadow
passwd的owner权限的x变成了s,这就是特殊权限SUID。/etc/shadow保存了用户密码,一般用户无法修改。但是我们可以通过执行passwd临时获得passwd拥有者root的权限来修改密码。
SGID:Set GID
-
对二进制程序
-
执行者对该程序具有x权限。
-
程序执行过程中获得该程序用户组支持——即执行者的有效用户组临时变成该程序用户组。
-
-
对目录
-
用户对目录具有rx权限时,用户在此目录下的有效用户组变为该目录的用户组。
-
在上一个条件下,若同时具有w权限,则用户建立的新文件的用户组与目录用户组相同。
-
SBIT:Stick Bit
用户对于目录具有wx权限时,用户再次目录下建立的文件只有自己与root才可删除。
特殊权限设置
除了三组基本权限外,特殊权限又是一组,SUID,SGID,SBIT分别对应着数字类型中的4,2,1,也对应着三组基本权限的x位,若设置了特殊权限,则对应的x位为s,s,t,若无x权限,则对应的x为S,S,T。
-
数字类型
chmod sxyz FILE... #s即为特殊权限的累加和
-
符号类型
相比基本权限的符号外,多出了一个s,一个t。
chmod u+s FILE... #s即为特殊权限 chmod g+s FILE... chmod o+t FILE...
默认权限与umask
umask的使用
mask,面具,umask即为设置权限掩码,就是从权限中移除umask所指定的权限。
umask [-p] [-S] [mode] -S #符号类型 -p #暂时不知道
lrl@DESKTOP-LRL:~/t$ umask #不加选项参数,查看掩码 0022 lrl@DESKTOP-LRL:~/t$ umask -S #以符号类型查看默认权限 u=rwx,g=rx,o=rx
lrl@DESKTOP-LRL:~/t$ umask 0000 #以数字类型设置掩码 lrl@DESKTOP-LRL:~/t$ umask 0000 lrl@DESKTOP-LRL:~/t$ umask 0022 #恢复权限 lrl@DESKTOP-LRL:~/t$ umask 0022 lrl@DESKTOP-LRL:~/t$ umask -S a=rwx #以符号类型设置权限 u=rwx,g=rwx,o=rwx lrl@DESKTOP-LRL:~/t$ umask 0000
-
在没有umask的情况下
-
建立文件时,默认没有x权限,只有rw,即权限是666,
-rw-rw-rw-
-
建立目录时,x对于目录特别重要,所以默认是777,
drwxrwxrwx
-
有umask(上述例子中为0022,-----w--w-),在1的情况下移除umask所指定的权限
-
对文件 则为
-rw-r--r--
,即644 -
对目录 则为
drwxr-xr-x
,即755
FHS与目录树
相对路径与绝对路径
-
绝对路径:从根目录/写起
-
相对路径:相对于当前目录的路径,就是非/开头
目录
chown - change file owner and group
chgrp - change group ownership