您好,我有 2 个关于 linux 目录权限的问题,我不明白。
我从名为 Documents 的文件夹中删除了执行标志。在那之后我不能在它上面使用 cd 但我仍然可以从父目录执行“ls Documents”并且它仍然列出了 Documents 目录中的文件。 我虽然缺少 x 标志拒绝读取此目录?
然后我想知道为什么要发明目录上的粘滞位。我听说它被用来让用户无法删除其他用户创建的临时文件。但是这个 IMO 违反了删除文件的规则,我们只需要这个目录的权限。为什么不简单地给每个用户一个单独的/tmp/目录,而不是在规则系统中引入异常(exception)? 我知道这面旗帜的作用,但我想知道发明它的原因。
最佳答案
执行位:遍历目录需要执行位。 读取目录的权限由读取位控制。
有关此差异的示例,请参阅此 shell 对话框:
作为根用户:
# find foo/ -ls drwxr-xr-- 3 root root 4096 Apr 27 12:57 foo/ drwxr-xr-x 2 root root 4096 Apr 27 12:57 foo/bar -rw-r--r-- 1 root root 0 Apr 27 12:57 foo/bar/file
作为用户:
$ ls foo/ bar $ find foo/ -ls drwxr-xr-- 3 root root 4096 Apr 27 12:57 foo/ find: foo/: Permission denied $
但通常的用法是相反的:删除读取权限但允许遍历,例如通过设置 --x 允许 Web 服务器进入 ~/public_html 但不允许它执行默认索引列表。
Sticky bit: 这正是为了避免目录内删除的默认规则而发明的,因此 /tmp 可以正常工作。 /tmp 可能驻留在与 /home 不同的卷上和/或受不同配额的约束。
FHS codifies /tmp “对于需要临时文件的程序”,而“[他们] 不得假定/tmp 中的任何文件或目录在调用之间保留”。
就我个人而言,我认为/tmp 是异教徒时代的遗产,当时 vi globals.h && make install 被认为是一个安装程序。现在的程序应该遵循 $TMPDIR,它应该指向一个用户私有(private)的系统管理目录,至少在重新启动时应该清除该目录。甚至像 tmpfile(3) 这样的标准化函数不规定实际路径。虽然似乎很重要compatibility and security concerns speaking for /tmp .不过请注意,最后一封邮件是 1999 年的,因此此后情况可能有所变化。
关于linux - 理解 Linux 目录权限推理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/790686/
我正在使用active_admin,我在Rails3应用程序的应用程序中有一个目录管理,其中包含模型和页面的声明。时不时地我也有一个类,当那个类有一个常量时,就像这样:classFooBAR="bar"end然后,我在每个必须在我的Rails应用程序中重新加载一些代码的请求中收到此警告:/Users/pupeno/helloworld/app/admin/billing.rb:12:warning:alreadyinitializedconstantBAR知道发生了什么以及如何避免这些警告吗? 最佳答案 在纯Ruby中:classA
是否可以在应用程序中包含的gem代码中知道应用程序的Rails文件系统根目录?这是gem来源的示例:moduleMyGemdefself.included(base)putsRails.root#returnnilendendActionController::Base.send:include,MyGem谢谢,抱歉我的英语不好 最佳答案 我发现解决类似问题的解决方案是使用railtie初始化程序包含我的模块。所以,在你的/lib/mygem/railtie.rbmoduleMyGemclassRailtie使用此代码,您的模块将在
最近在学习CAN,记录一下,也供大家参考交流。推荐几个我觉得很好的CAN学习,本文也是在看了他们的好文之后做的笔记首先是瑞萨的CAN入门,真的通透;秀!靠这篇我竟然2天理解了CAN协议!实战STM32F4CAN!原文链接:https://blog.csdn.net/XiaoXiaoPengBo/article/details/116206252CAN详解(小白教程)原文链接:https://blog.csdn.net/xwwwj/article/details/105372234一篇易懂的CAN通讯协议指南1一篇易懂的CAN通讯协议指南1-知乎(zhihu.com)视频推荐CAN总线个人知识总
Transformers开始在视频识别领域的“猪突猛进”,各种改进和魔改层出不穷。由此作者将开启VideoTransformer系列的讲解,本篇主要介绍了FBAI团队的TimeSformer,这也是第一篇使用纯Transformer结构在视频识别上的文章。如果觉得有用,就请点赞、收藏、关注!paper:https://arxiv.org/abs/2102.05095code(offical):https://github.com/facebookresearch/TimeSformeraccept:ICML2021author:FacebookAI一、前言Transformers(VIT)在图
在我让另一个人重做我的前端UI之前,我的Rails应用程序运行平稳。我已经尝试解决此错误3天了。这是错误:Nosuchfileordirectory-identifyExtractedsource(aroundline#59):575859606162@post=Post.find(params[:id])authorize@postif@post.update_attributes(post_params)flash[:notice]="Postwasupdated."redirect_to[@topic,@post]else{"utf8"=>"✓","_method"=>"patc
大家好,我正在尝试设置一个开发环境,并且我一直在关注以下教程:Linktotutorial我做得不是很好,除了最基本的版本控制内容外,我对终端命令没有任何实际经验。我点击了第一个链接并尝试运行source~/.bash_profile我得到了错误;mkdir:/usr/local/rbenv/shims:权限被拒绝mkdir:/usr/local/rbenv/versions:权限被拒绝现在每次我加载终端时都会出现错误。bash_profile的内容;exportPATH=/usr/local/rbenv/bin:$PATHexportRBENV_ROOT=/usr/local/rbe
关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。我们不允许提问寻求书籍、工具、软件库等的推荐。您可以编辑问题,以便用事实和引用来回答。关闭3年前。Improvethisquestion我正处于学习Ruby的阶段,我想查看一些小型库的源代码以了解它们是如何构建的。我不知道什么是小型图书馆,但希望SO能推荐一些易于理解的图书馆来学习。因此,如果有人知道一两个非常小的库,这是新手Rubyists学习的好例子,请推荐!我想使用Manveru'sInnatelib,因为它试图保持在2000LOC以下,但我还不熟悉其中经常使用的Ruby速记。也许大约100-5
我正在尝试以一种更类似于普通RubyGem结构的方式构建我的Sinatra应用程序。我有以下文件树:.├──app.rb├──config.ru├──Gemfile├──Gemfile.lock├──helpers│ ├──dbconfig.rb│ ├──functions.rb│ └──init.rb├──hidden│ └──Rakefile├──lib│ ├──admin.rb│ ├──api.rb│ ├──indexer.rb│ ├──init.rb│ └──magnet.rb├──models│ ├──init.rb│ ├──invite.rb│ ├─
由于匿名block和散列block看起来大致相同。我正在玩它。我做了一些严肃的观察,如下所示:{}.class#=>Hash好的,这很酷。空block被视为Hash。print{}.class#=>NilClassputs{}.class#=>NilClass为什么上面的代码和NilClass一样,下面的代码又显示了Hash?puts({}.class)#Hash#=>nilprint({}.class)#Hash=>nil谁能帮我理解上面发生了什么?我完全不同意@Lindydancer的观点你如何解释下面几行:print{}.class#NilClassprint[].class#A
我想编写一个ruby脚本来递归复制目录结构,但排除某些文件类型。因此,给定以下目录结构:folder1folder2file1.txtfile2.txtfile3.csfile4.htmlfolder2folder3file4.dll我想复制这个结构,但不包含.txt和.cs文件。因此,生成的目录结构应如下所示:folder1folder2file4.htmlfolder2folder3file4.dll 最佳答案 您可以使用查找模块。这是一个代码片段:require"find"ignored_extensions=[".cs"