可以创建文件的linux,linux-为什么我可以执行不可执行的新创建文件?

在Ubuntu中,Ubuntu上的默认umask是022,这意味着每个人都可以读取新创建的文件,但是所有者只能写该文件,没有人可以执行.

在这种情况下,我创建一个新文件:

touch test.rb # Its content is: puts "hello world"

ls -l demo.rb # -rw-r--r--

然后我执行test.rb:

ruby test.rb # output: "hello world"

由于文件的所有者没有“ x”权限,那么为什么我可以成功运行文件?还是我错过了一些知识?

解决方法:

您没有将文件作为二进制文件执行.您正在使用参数test.rb执行ruby二进制文件,它将解释Ruby脚本.因此,只有ruby二进制文件需要执行特权,而脚本本身则不需要.

您可以通过运行stat(哪个ruby)来检查二进制文件的特权.

另一方面,如果您放置

#!/usr/bin/ruby

在脚本的顶部,并使用chmod x x test.rb使它可执行,然后可以使Linux运行它.内核的binfmt模块将检查搜索是否为#! (称为shebang)中的文件,然后为您运行解释器.

您可以在许多Shell脚本中找到此shebang.如今,通常将#!/usr/bin/env ruby​​或#!/usr/bin/env python放进去,以便在/usr/local/bin / ruby​​等PATH变量上可用的其他位置使用解释器二进制文件.同样,env只是另一个二进制程序.它将作为程序运行其参数.内核将传递脚本作为参数,这将导致命令/usr/bin/env ruby​​test.rb.

标签:linux

来源: https://codeday.me/bug/20191026/1939650.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值