如何使文件(例如,.sh脚本)可执行,以便可以从终端运行


245

我有一个script.sh文件,此文件的类型是shellscript文件。我想将此文件制作为application / x-executable文件。我该怎么做?




它不是重复的,因为我曾特别询问过使其可以应用程序/ x可执行。另一个问题只是要求在终端中打开sh文件。
Ziyaddin Sadigov

Answers:


326

您可以将文件标记为可执行文件:

chmod +x filename.sh

然后可以像这样执行它:

./filename.sh

如果要使用其他命令来启动它,则可以添加别名:

gedit ~/.bashrc

在文件末尾添加:

alias <new name>='/home/<full path to script>/filename.sh'

打开一个新的终端会话或输入source ~/.bashrc您的终端以进行申请。然后,只需使用新名称即可启动脚本。


在输入以下命令后,您是否知道如何使用sudo命令:“ alias command1 ='/home/user_name/dir/script.sh'。在我的系统中,它不使用sudo,但不能使用
。– Aditya

您需要在编辑.bashrc运行后重新启动bash:exec bash以重新启动bash。
Sampath Perera

2
为什么可执行文件不是./filename.sh,而不仅仅是filename.sh
user1993年

@ user1993是的,我也在寻找一种使其可以filename而不是可以执行的方法./filename
MycrofD

@ user1993通常,using ./filename.sh指定当前目录filename.sh中的文件,using 指定当前目录或PATH的任何目录中的文件。首次使用消除了有关访问哪个文件的任何不确定性。在这种情况下,您试图#!/bin/bash仅通过输入文件名来使用bash或其他解释器(由于假定为脚本的第一行)来执行脚本。此用法要求指定目录。另外,您可以尝试bash filename.sh使用未指定的目录。
a505999

37

使文件可执行的方法有两种:

GUI方法:

进入权限选项卡,然后勾选“执行:[]允许执行程序文件”框。

在此处输入图片说明

终端/命令方式:

您可以使用:

cd /to/my/required/directory

然后跑

chmod +x filename.extension

或者只是运行:

chmod +x /path/to/your/filename.extension

chmod 确实还有一些更高级的选项:

空格表示它已被拆分: - rwx --- ---

第一组---是用户。第二个是“组”,最后一个是“其他”(其他任何人)

r代表读,w代表写,x代表eXecute。

因此,允许每个人都可以读取它,但只有Group可以执行,而User可以读写(但由于某些原因无法执行),它是:

-rw- rx- r-- 但这将添加为命令:

chmod +rw-rx-r-- /path/to/file.extension

chmod也可以做到这一点。它基于二进制(我认为是1,2和4)

所以有这些数字:

用户执行的是100。按组执行是010。其他执行为001

用户写的是200。按组写是020。被别人写是002

用户读取的是400。按组阅读是040。被别人读是004

然后将它们加在一起以获得所需的组合。

因此,允许每个人都可以读取它,但只有Group可以执行,而User可以写入(但由于某些原因无法执行),将是:

400 + 040 + 004010200

总计为600 + 050 + 004 = 654。

然后,您可以运行命令。

chmod +654 /path/to/file.extension 设置它。

并设置所有权限,您可以输入:

chmod +rwxrwxrwx /path/to/file.extension

或者(这样写起来比较容易,但是很难记住每一个):

chmod +777 /path/to/file.extension

最后,您可以执行以下操作:

chmod -777 /path/to/file.extension

剥夺所有人的所有权限。

和:

chmod +300 /path/to/file.extension

在不影响任何其他权限(例如执行权限)的情况下为用户添加读写权限。

该网站有一个非常有用的小网格复选框,您可以在其中勾选所需的选项,并提供以下命令:

在此处输入图片说明

但是,并非所有可能的组合都适合使用。使用的主要方法如下:

755- Owner具有全部,Group并且Other可以读取和执行

700- Owner全部

644- Owner可以读写,Group并且Other可以读取

600- Owner可以读写

而且,如果您使用的是普通用户组:

775- Owner可以读写,Group并且Other可以读取

770 - Owner并且Group都有,并且Other可以读取和执行

750- Owner具有全部功能,Group可以读取和执行

664 - OwnerGroup可读写,并且Other可以只读取

660 - OwnerGroup可读写

640- Owner可以读写,并且Group可以读取

除/ tmp外,很少使用777和666。

感谢ILMARI Karonen用于指出在通常使用的那些!


它不是基于八进制(8基)而不是二进制(基于2基)吗?在二进制中只能有0和1,而在八进制中则可以有0、1 ... 6,7
Justinas '18

@Justinas二进制文件,其中7 = 4 + 2 + 1-111表示读取和写入以及执行。
蒂姆(Tim)

8

跑:

chmod +x /path/to/file.sh

要使其不可执行,请运行:

chmod -x /path/to/file.sh

例如我创建.sh文件:

vi tester12.sh

在vi编辑器上编写一些代码后,我将从vi编辑器退出:

:wq!
chmod +x tester12.sh
./tester12.sh
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.