Linux学习笔记(一)文件权限与inode

文件权限

文件权限描述符

1
2
3
4
5
drwxrwxr-x 2 lucky lucky 4096 Apr 15 15:48 ./
drwxr-xr-x 5 lucky lucky 4096 Apr 14 13:24 ../
-rw-rw-r-- 1 lucky lucky 161 Apr 13 20:21 news
-rw-rw-r-- 1 lucky lucky 309 Apr 13 19:34 passwd.cut
-rw-rw-r-- 1 lucky lucky 309 Apr 13 19:34 passwd.sort

1 位是文件类型
2-4位是owner的权限
5-7位是group的权限
8-10位是other的权限
d代表directory(目录)
rwx分别是read(读),write(写),execute(执行)
- 在第一位指的是文件类型为文件,在后面的位上指的是不具有对应权限

文件夹权限描述符

文件夹权限描述符中的rwx含义是不同与file的。

可查阅:

1.Execute vs Read bit. How do directory permissions in Linux work?

2.在linux系统中输入man chmod,info '(coreutils) chmod invocation'(或是加上—vi-keys选项就可以使用vi的键位来控制翻页等操作了,即info --vi-keys '(coreutils) chmod invocation',具体按h查看帮助).

使用符号表示法设定文件或目录上的权限

chmod [-R] mode 文件名或是目录名,R决定是否递归设置该目录子目录及文件的对应权限。

1
2
3
--------------mode--------------
who operator permission
u/g/o/a +/-/= r/w/x/X/s/t

Each MODE is of the form ‘[ugoa]([-+=]([rwxXst]|[ugo]))+|[-+=][0-7]+’.
这里a是all也就是所有用户的意思。
+表示加入权限,-表示去掉权限,=表示设定权限
用法示例:

1
2
chmod ug+x testfile #给所有者,同组用户加上对testfile的执行权限
chmod -R ugo-r /home/koala/test.d #移除所有者,同组用户以及其他用户对/home/koala/test.d目录中所有文件的读权限

特殊权限

用户、群组与权限

用户密码状态

passwd -S 用户名 查看用户密码状态

S选项的含义可以通过man passwd查看。

状态信息由七个属性组成。第一个属性是用户的登录名,第二个属性为L,NP,P时分别表示用户账户密码被锁定,没有密码和密码可用,第三个属性为密码最后更改的日期,接下来四个属性分别是密码的最小天数(密码更改最短间隔时间),最大天数(多少天后用户需要更改密码),警告天数(在密码过期前多久开始提示)以及不可用天数段(多久后密码不可用)。详见下面测试:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
root@ubuntu:~# passwd -n 1 koala && passwd -S koala #修改密码更改最短间隔时间
passwd: password expiry information changed.
koala P 04/13/2017 1 99999 7 -1
root@ubuntu:~# passwd -x 1 koala && passwd -S koala #修改密码更改最大天数
passwd: password expiry information changed.
koala P 04/13/2017 1 1 7 -1
root@ubuntu:~# passwd -w 1 koala && passwd -S koala #修改警告天数
passwd: password expiry information changed.
koala P 04/13/2017 1 1 1 -1
root@ubuntu:~# passwd -i 1 koala && passwd -S koala #修改不可用天数
passwd: password expiry information changed.
koala P 04/13/2017 1 1 1 1
root@ubuntu:~# passwd -n 0 -x 99999 -w 7 -i -1 koala && passwd -S koala #恢复初始的参数
passwd: password expiry information changed.
koala P 04/13/2017 0 99999 7 -1

su中-选项的作用

su -usersu user 的区别是?

以下是Manual page中对-的描述:

-, -l, —login
Provide an environment similar to what the user would expect had the user logged in directly.
When - is used, it must be specified before any username. For portability it is recommended to use it as last option, before any username. The other forms (-l and —login) do not have this restriction.

实际效果是加上了-(或是-l,—login)选项后,相应的环境也会作调整,如$PATH的值,以及切换用户后当前目录的地址也会对应切换。

查看与当前用户有关消息的命令

1
2
3
whoami #确定当前用户
id #获取当前用户的uid,gid,groups信息
groups #显示当前用户所属的群组

inode

一个i节点就是一个与某个特定对象(如文件或目录)相关的信息列表。i节点实际上是一个数据结构,它存放了有关一个普通文件、目录或其他文件系统对象的基本信息。
通常每个i节点由两部分组成,第一部分是有关文件的基本信息,第二部分是指向存储文件信息的数据块的指针。

— 《名师讲坛:Linux入门和实战经典》

基本信息有:
1.inode-no,文件系统中唯一的编号。
2.File type,如-为普通文件,d表示目录。
3.permission,在i节点中是使用数学表示法来表示存储每一个文件或目录的权限。
3.Link count,硬连接数。
4.UID,文件所有者的UID。
5.GID,文件所有者所属群组的GID。
6.size,文件的大小。
7.Time stamp,时间戳,包括
(1)Acess time,最后一次存取这个文件的时间。
(2)Modify time,最后一次编辑这个文件的时间。
(3)Change time,指的是i节点中相对于这个文件的任何一列的元数据发生变化的时间。

cp、mv及rm命令如何操作inodes

cp

1.找到一个空闲的i节点记录,把新增加文件的元数据写入到这个空闲的i节点中并将新纪录放入inode表中。
2.同时还要产生一条目录记录,把新增文件名对应到这个空的inode号码。
3.当做完以上操作以后,系统才会将文件的内容复制到新增的文件中去。

mv

1.系统会首先产生一个新的目录记录,把新的文件名对应到原有的i节点。
2.删除带有旧文件名的原有的目录记录。
3.系统除了会更新时间戳之外,移动文件行为对原本在inode表中的数据不会有任何影响,也不会将数据移动到其他的文件中去,也就是没有发生真正的数据移动。
4.如果要移动的文件的源位置与目的位置是在不同的文件系统上时,mv的行为是复制和删除两个动作。

rm

1.系统首先将这个文件的连接数减1,之后这个文件的link count如果小于1,系统就会释放这个i节点以便重用。
2.释放存储这个文件内容的数据块,即将这些数据块标记为可以使用。
3.删除记录这个文件名和i节点号的目录记录。
4.系统并未真正删除这一文件的数据,只有当其他文件要使用这些已经释放的数据块时,这些数据块中原有的数据才会被覆盖掉。