首先看一下Linux文件的属性,以root身份登录Linux服务器,执行“ls -al”命令。
一个Linux文件主要包括七个属性
-
类型和权限
dr-xr-x---
第一个字符代表这个文件的类型
接下来的字符中,以三个为一组,且均为[rwx]的三个参数的三组。[rwx]分别代表了可读、可写、可执行。三组分别代表了档案拥有者、档案所属群组、其它非本群组。 -
连结数
表示有多少档名连接到此节点 -
拥有者账号
-
所属群组
-
文件的容量大小
默认单位为bytes -
最近修改日期
修改时间是上一年则显示年份 -
文件名
以[.]开头的文件代表为隐藏档
例题
例题:
假设test1, test2, test3同属于testgroup这个群组,如果有下面的两个文件,请说明两个文件的拥有者与其相关的权限为何?
-rw-r--r-- 1 root root 238 Jun 18 17:22 test.txt
-rwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 ping_tsai
答:
文件test.txt的拥有者为root,所属群组为root。至于权限方面则只有root这个账号可以存取此文件,其他人则仅能读此文件;
另一个文件ping_tsai的拥有者为test1,而所属群组为testgroup。其中:
test1 可以针对此文件具有可读可写可执行的权力;
而同群组的test2, test3两个人与test1同样是testgroup的群组账号,则仅可读可执行但不能写(亦即不能修改);
至于非testgoup这一个群组的人则仅可以读,不能写也不能执行!
例题:
如果我的目录为底下的样式,请问testgroup这个群组的成员与其他人(others)是否可以进入本目录?
drwxr-xr-- 1 test1 testgroup 5238 Jun 19 10:25 groups/
答:
文件拥有者test1[rwx]可以在本目录中进行任何工作;
而testgroup这个群组[r-x]的账号,例如test2, test3亦可以进入本目录进行工作,但是不能在本目录下进行写入的动作;
至于other的权限中[r--]虽然有r ,但是由于没有x的权限,因此others的使用者,并不能进入此目录!
-
改变文件所属群组
[root@www ~]# chgrp [-R] dirname/filename ... 选项与参数: -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件、目录 都更新成为这个群组之意。常常用在变更某一目录内所有的文件之情况。 范例: [root@www ~]# chgrp users install.log [root@www ~]# ls -l -rw-r--r-- 1 root users 68495 Jun 25 08:53 install.log [root@www ~]# chgrp testing install.log chgrp: invalid group name `testing' <== 发生错误讯息啰~找不到这个群组名~
-
改变文件拥有者
[root@www ~]# chown [-R] 账号名称 文件或目录 [root@www ~]# chown [-R] 账号名称:组名 文件或目录 选项与参数: -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更 范例:将install.log的拥有者改为bin这个账号: [root@www ~]# chown bin install.log [root@www ~]# ls -l -rw-r--r-- 1 bin users 68495 Jun 25 08:53 install.log 范例:将install.log的拥有者与群组改回为root: [root@www ~]# chown root:root install.log [root@www ~]# ls -l -rw-r--r-- 1 root root 68495 Jun 25 08:53 install.log
Tips:
建议使用冒号『:』来隔开拥有者与群组啦!此外,chown也能单纯的修改所属群组呢! 例如『chown .sshd install.log』就是修改群组~看到了吗?就是那个小数点的用途! -
改变文件权限
.数字类型改变文件权限
权限的分数对照 r:4 w:2 x:1[root@www ~]# chmod [-R] xyz 文件或目录 选项与参数: xyz : 就是刚刚提到的数字类型的权限属性,为 rwx 属性数值的相加。 -R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都会变更
例题: 将刚刚你的.bashrc这个文件的权限修改回-rw-r--r--的情况吧! 答: -rw-r--r--的分数是644,所以指令为: chmod 644 .bashrc
.符号类型改变文件权限
基本上就九个权限分别是(1)user (2)group (3)others三种身份啦!那么我们就可以藉由u, g, o来代表三种身份的权限!此外, a 则代表 all 亦即全部的身份!那么读写的权限就可以写成r, w, x!也就是可以使用底下的方式来看:
[root@www ~]# chmod u=rwx,go=rx .bashrc # 注意喔!那个 u=rwx,go=rx 是连在一起的,中间并没有任何空格! [root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc
如果我不知道原先的文件属性,而我只想要增加.bashrc这个文件的每个人均可写入的权限, 那么我就可以使用:
[root@www ~]# ls -al .bashrc -rwxr-xr-x 1 root root 395 Jul 4 11:45 .bashrc [root@www ~]# chmod a+w .bashrc [root@www ~]# ls -al .bashrc -rwxrwxrwx 1 root root 395 Jul 4 11:45 .bashrc
-
权限对于文件的重要性
r (read):可读取此一文件的实际内容,如读取文本文件的文字内容等; w (write):可以编辑、新增或者是修改该文件的内容(但不含删除该文件); x (execute):该文件具有可以被系统执行的权限。
Linux中,文件的扩展名并没有什么意义
-
权限对目录的重要性
r (read contents in directory): 表示具有读取目录结构列表的权限,所以当你具有读取(r)一个目录的权限时,表示你可以查询该目录下的文件名数据。 所以你就可以利用 ls 这个指令将该目录的内容列表显示出来! w (modify contents of directory): 这个可写入的权限对目录来说,是很了不起的! 因为他表示你具有异动该目录结构列表的权限,也就是底下这些权限: 建立新的文件与目录; 删除已经存在的文件与目录(不论该文件的权限为何!) 将已存在的文件或目录进行更名; 搬移该目录内的文件、目录位置。 总之,目录的w权限就与该目录底下的文件名异动有关就对了啦! x (access directory): 用户在拥有目录的执行权限,才能进入该目录
例题: 有个目录的权限如下所示: drwxr--r-- 3 root root 4096 Jun 25 08:35 .ssh 系统有个账号名称为vbird,这个账号并没有支持root群组,请问vbird对这个目录有何权限?是否可切换到此目录中? 答: vbird对此目录仅具有r的权限,因此vbird可以查询此目录下的文件名列表。因为vbird不具有x的权限, 因此vbird并不能切换到此目录内!(相当重要的概念!)
上面这个例题中因为vbird具有r的权限,因为是r乍看之下好像就具有可以进入此目录的权限,其实那是错的。 能不能进入某一个目录,只与该目录的x权限有关啦!此外, 工作目录对于指令的执行是非常重要的,如果你在某目录下不具有x的权限, 那么你就无法切换到该目录下,也就无法执行该目录下的任何指令,即使你具有该目录的r的权限。
要开放目录给任何人浏览时,应该至少也要给予r及x的权限,但w权限不可随便给! 为什么w不能随便给,我们来看下一个例子:
例题: 假设有个账号名称为dmtsai,他的家目录在/home/dmtsai/,dmtsai对此目录具有[rwx]的权限。 若在此目录下有个名为the_root.data的文件,该文件的权限如下: -rwx------ 1 root root 4365 Sep 19 23:20 the_root.data 请问dmtsai对此文件的权限为何?可否删除此文件? 答: 如上所示,由于dmtsai对此文件来说是『others』的身份,因此这个文件他无法读、无法编辑也无法执行, 也就是说,他无法变动这个文件的内容就是了。 但是由于这个文件在他的家目录下, 他在此目录下具有rwx的完整权限,因此对于the_root.data这个『档名』来说,他是能够『删除』的! 结论就是,dmtsai这个用户能够删除the_root.data这个文件!
本文大部分均摘自《鸟哥的Linux私房菜》,作为笔记使用。