在 Linux 操作系统中,权限是一个非常重要的东西。 它无时无刻不在影响着你的各种操作。就像有的时候,你想去百度云下载一些别人分享的文件,可是你却发现虽然你能看到文件但是你却不能下载,这就是一种权限的典型例子。在 Linux 中, 这种权限随处可见。你可以设置,让别人不能越界。
不过像我这种人,也就是一台电脑, 一个用户(手动滑稽),涉及不到多少有关权限方面的问题。 如果你也和我差不多,只有你自己在用 Linux 的电脑,主要用它来运行你的代码。我教你一招来修改权限,并且方便运行你的Python脚本的招数。
这里不会涉及过深的权限管理。我们了解一些基础,方便你拿你的Linux跑机器学习的代码就好。如果你想扩展学习的话, 网上会有很多教程。可以自行谷歌。
ls查看权限
查看文件权限的方法很简单,其实在之前我的上一篇博文就讲了这个内容。 如果你还记得的话,我们在说 ls
指令的时候, 提到过权限问题, 不过到了这节内容我们仔细的来说一说权限。如果你在 Terminal 中输入如下图片中的指令:
如上图所示,在 Terminal 中查看文件的权限的命令可以用ls -l
或者ls -lh
,这个是看当前目录下面所有文件的权限,如果你只是想单独看看某一个具体的文件的权限,只需要在后面加上相应的文件名就可以了,比如ls -lh p1.py
。
我们看到的上图中的-rw-rw-r--
就是相关的权限啦。那么这些具体又是表达什么意思的呢?看下面的图就明白啦。
Type
: 很多种 (最常见的是-
为文件,d
为文件夹, 其他的还有l
,n
… 这种东西, 真正自己遇到了, 网上再搜就好, 一次性说太多记不住的)。User
: 后面跟着的三个空是使用 User 的身份能对这个做什么处理 (r
可读;w
可写;x
可执行;-
不能完成某个操作)。Group
: 一个 Group 里可能有一个或者多个 user, 这些权限的样式和 User 一样。Others
: 除了 User 和 Group 以外人的权限。
如果有人对 User, group, others 这三个没什么概念的话,我这里补充一下。User 一般就是指你,这个当前正在使用电脑的人。 Group 是一个 User 的集合,最开始创建新 User 的时候, 他也为这个 User 创建了一个和 User 一样名字的 Group, 这个新 Group 里只有这个 User。一般来说,像一个企业部门的电脑,都可以放在一个 Group 里, 分享了一些共享文件和权限。Others 就是除了上面提到的 User 和 Group 以外的人。
好了, 有了这些理解, 我们拿上面的 p1.py 来举例. 我们可以将 -rw-rw-r--
拆成 - (这是文件), -rw(这个 User可以读,写), rw- (这个Group里可以读,写), r– (其他人只能读)。
chmod 修改权限
好了, 我们知道了这些权限的问题, 那我们如何来改写权限呢? chmod
(change mode)命令就是来干这个的。
通常的修改形式是:
1 | ~$ chmod [谁] [怎么修改] [哪个文件] |
举个最简单的例子, 现在的 p1.py 的权限是 -rw-rw-r--
, 如果我们想让user和group拥有执行的能力。按照下面这样来改就行了。
相应的结果如下图所示:
这里的 ug+x 很形象, User,Group + execute , 给 p1.py 这个文件进行修改。所以我们的修改形式就能总结出下面这样:
[谁]
u
: 对于 User 修改g
: 对于 Group 修改o
: 对于 Others 修改a
: (all) 对于所有人修改
[怎么修改]
+
,-
,=
: 作用的形式, 加上, 减掉, 等于某些权限r
,w
,x
或者多个权限的组合, 比如rx
[哪个文件]
- 施加操作的文件, 可以为多个文件
除了上面这些修改形式, 还有一些简化版的形式, 就是用数字来表示相应的权限,此时一组权限的 3 个位当做二进制数字的位,从左到右每个位的权值为 4、2、1,即每个权限对应的数字权值为 r : 4、w : 2、x : 1。
文件默认权限
文件默认权限:文件默认没有可执行权限,因此为
666
,也就是-rw-rw-rw-
。目录默认权限:目录必须要能够进入,也就是必须拥有可执行权限,因此为
777
,也就是drwxrwxrwx
。
一个使用Python的技巧
我不怎么用权限这东西, 但是我却发现给 python 文件添加权限x
还算有用的. 为什么这么说? 因为通常, 如果一个 .py
没有x
权限, 在 terminal 中你就需要这样执行:
1 | ~/Documents/Folder1$ python3 p1.py |
如果你有了 x
(可执行权限), 你运行这个文件可以直接这样打:
1 | ~/Documents/Folder1$ ./p1.py |
很酷炫有木有?但是上面这个脚本能够成功运行有一个前提,那就是你在这个Python脚本p1.py的开头加上一句话,如下所示:
1 | #!/usr/bin/python3 |
好了,加上上面这句话的话以后运行这个脚本就可以直接用那本很酷炫的方式而不用每次都python3 xx.py
啦。