【版权申明】非商业目的注明出处可自由转载
博文地址:
出自:shusheng007
以后本人所有文章将首发于 ShuSheng007的博客 欢迎大家关注
去年把自己的阿里云服务器从Windows系统换成了 Ubuntu(一个Linux发行版本)。自己一直是使用Windows的,一直觉得Linux过于高深,自己非常抗拒去了解它,这次自己的服务器换成的Linux所以只能被动去了解了。
任何事物的流行都是存在原因的,Linux那么流行,肯定是有其独到的优势的,那些站在门外面的人肯定觉得自己现在使用东西是最好的,等真的推开门进去后却发现,原来世界上还有更好的,所以我们程序员要不轻易否定新事物,乐于接受新事物,用于尝试新事物,才能不落后。
嘚嘚了这么多,今天想总结一下关于Linux文件权限的一些知识,及相关命令。别害怕,书生的文章力求让人秒懂。
Linux 是以用户账户来管理权限的,每个进入Linux系统的用户都会被分配唯一的用户账户,每个账户拥有不同的权限,这个应该非常容易理解。
例如组长王二狗的账户A 权限肯定比实习生牛翠花的账户B 权限高。账户系统虽然在控制单个用户安全性时很好用,但是涉及到共享资源的一组用户时就比较尴尬了,例如公司又招了个一个实习生上官无雪,公司给她分配了账户C, 但是日常工作中,牛翠花和上官无雪都需要操作同一组资源,那么就要分别给这两个账户增删权限,这只有两个实习生账户还好,但是以后账户多了可就不好管了,所以Linux还有**组(group)**的概念,在同一组的账户可以享有此组的所有权限。
账户信息位于/etc/passwd
文件内,使用如下命令查看
cat /etc/passwd
结果如下:
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
...
mysql:x:109:118:MySQL Server,,,:/nonexistent:/bin/false
tomcat:x:1000:1000::/opt/tomcat:/bin/false
我们看下root账户每一列的含义,如下图所示:
注册名:口令:用户标识号(uid):组标识号(gid):注释性描述:用户主目录:用户登陆的shell类型
/etc/shadow
中,只显示一个x。账户信息位于/etc/group
文件内,使用如下命令查看
cat /etc/group
结果如下:
root:x:0:
sudo:x:27:
...
mysql:x:118:
tomcat:x:1000:
我们看下root账户每一列的含义,如下图所示:
含义图中已经标记的很清晰了。
上面之所以要嘚嘚那么多Linux用户和组的知识,主要是因为不明白上面的知识,下面再怎么讲都是一团浆糊。
那么一个文件的权限是指什么呢?目录的权限呢?
这些权限又被分为了3类:
使用 ls -l
命令查看一个目录下的所有文件
例如我查看一下我服务器上tomcat目录下的文件
/opt/tomcat# ls -l
drwxrwx--- 2 tomcat tomcat 4096 Apr 5 16:09 bin
-rw-r----- 1 root tomcat 18982 Dec 8 00:46 BUILDING.txt
drwxrwx--- 2 root tomcat 4096 Jan 11 18:11 conf
-rw-r----- 1 root tomcat 5409 Dec 8 00:46 CONTRIBUTING.md
drwxrwx--- 2 root tomcat 4096 Jan 11 13:57 lib
-rw-r----- 1 root tomcat 57092 Dec 8 00:46 LICENSE
drwxrwx--- 3 tomcat tomcat 12288 Apr 6 00:31 logs
-rw-r----- 1 root tomcat 2333 Dec 8 00:46 NOTICE
-rw-r----- 1 root tomcat 3255 Dec 8 00:46 README.md
-rw-r----- 1 root tomcat 6898 Dec 8 00:46 RELEASE-NOTES
-rw-r----- 1 root tomcat 16262 Dec 8 00:46 RUNNING.txt
drwxr-x--- 2 tomcat tomcat 4096 Apr 5 10:10 temp
drwxrwx--- 9 tomcat tomcat 4096 Apr 5 12:49 webapps
drwxr-x--- 3 tomcat tomcat 4096 Jan 11 14:11 work
看到最左边一列了吗,我第一次接触的时候太懵逼了,完全不知道什么意思,-rw-r----- 什么jb玩意啊?弄懂了也就不难了,让我们一起来看一下:
总共10个字符:
第一个字符表示文件的性质:
-
:表示此行展示的是一个文件d
:表示此行展示的是一个目录第2到4个字符表示此文件所有者对此文件的权限
第5到7个字符表示此文件所属于的组里面的账户对此文件的权限
第8到10个字符表示除了上面两类型的其他用户对此文件的权限
其中
r
(read):可读,文件可以被查看。w
(write): 可写,文件可以被修改,删除。x
(execute):可执行,如果文件是脚本活程序,可以被执行。-
:无以上权限我们来举个例子:
-rw-r----- 1 root tomcat 57092 Dec 8 00:46 LICENSE
上面的语句表明,LICENSE 是一个文件,其可以被其所有者读写,但不能执行。其仅仅可以被所属的组的用户查看,对于其他用户无权查看、修改、执行此文件。
终于到了chmod
命令出场的时候了,我不会刻板的讲述此命令的各种参数,那是文档应该干的事情,依据二八定律,我们只讲那个八,就是最常使用的情形。
使用chmod
来修改权限,我们需要告诉此命令如下几个关键信息:
我们来举个例子
使用 ls -l
命令查看filePermissionTest.txt
文件
-rw-r--r-- 1 root root 12 Apr 5 09:23 filePermissionTest.txt
可以看到其所有者对其具有读写权限,下面我们使用下面的命令给此用户加上可执行权限。
chmod u+x filePermissionTest.txt
执行后查看结果如下:
-rwxr--r-- 1 root root 12 Apr 5 09:23 filePermissionTest.txt
可见此文件所有者权限的标识已经从rw-
变成了rwx
了,说明其已经拥有了此文件的执行权限。
我们看一下 chmod u+x filePermissionTest.txt
这个命令是怎么起作用的:
who:u 表示是为此文件的用户设置权限
what:+ 表示是为此文件增加一个权限
which:x 表示要修改可执行权限
可见只要按照chmod who what which
来来使用这个命令就会变得很简单。那接下来的问题就是who、what、which 分别取什么值了。
u
:User, 此文件的所有者g
:Group, 此文件所属的组o
:Others, 其他用户a
:All,为以上三种用户设置权限a
.-
: 减号,表示移除权限+
:加号,表示增加权限=
:等号,表示设置此权限并移除其他权限r
: Read, 可读权限w
: Write,可写权限x
: execute,可执行权限如果理解了上面的内容就足以应对日常工作中的使用情形了。
下面我们来实际操作一下,毕竟理论和实践直接往往隔着巨大的鸿沟!
假设我有如下3个文件
-rw-r--r-- 1 root root 2 Apr 6 20:04 filePermissionTest2.txt
-rwxr--r-- 1 root root 12 Apr 5 09:23 filePermissionTest.txt
-rw-r--r-- 1 root root 12 Apr 6 20:04 helloLinux.html
我要给helloLinux.html
文件所属于的组(root组)加上写权限
chmod g+w helloLinux.html
执行后的结果为
-rw-rw-r-- 1 root root 12 Apr 6 20:04 helloLinux.html
其已经从-rw-r--r--
变成了-rw-rw-r--
,说明写权限已经加上了。
我一次性为others用户增加对后缀为.txt
的文件的写权限
chmod o+w *.txt
结果:
-rw-r--rw- 1 root root 2 Apr 6 20:04 filePermissionTest2.txt
-rwxr--rw- 1 root root 12 Apr 5 09:23 filePermissionTest.txt
-rw-rw-r-- 1 root root 12 Apr 6 20:04 helloLinux.html
当我想修改文件权限的时候就google了一下,看到chmod 776 xxx
的命令一脸懵逼,776是什么东东?
其实这是rxw的数字简记法。其值如下所示,0到7的数字就代表了rxw
的所有组合
权限 | 二进制 | 十进制 | 描述 |
---|---|---|---|
- - - | 000 | 0 | 无权限 |
- -x | 001 | 1 | 只有执行权限 |
-w- | 010 | 2 | 只有写入权限 |
-wx | 011 | 3 | 写和执行权限 |
r- - | 100 | 4 | 读权限 |
r-x | 101 | 5 | 读取和执行的权限 |
rw- | 110 | 6 | 读取和写入的权限 |
rwx | 111 | 7 | 所有权限 |
例如上面chmod 776 xxx
的命令表示为此文件的所有者和所属的组设置所有权限,为其他用户设置读写权限。
如果你完整了阅读了以上内容,相信你对于如何修改文件权限已经胸有成竹了,好文难得注意点赞和收藏。祝编码愉快,生活愉快,疫情之下,不被裁员。
哪里可以找到我?
博客
知乎
引用文章:
How to Use the chmod Command on Linux
How To List Users and Groups on Linux