linux下运行exe文件错误

说白了,解决在6 4 位系统上运行3 2 位程序出现问题的关键是安装正确的库文件。

首先让我告诉你最重要的事情。
去年,当我运行一个服务器项目时,我遇到了Python脚本无法运行的情况。
经过长时间的调查,我发现3 2 位gcc库丢失了。
您可以使用 sudo apt install lib3 2 gcc1 安装它。
另外,记得使用 ldd your_program 命令来检查 libstdc++6 (版本 6 .3 .0-0ubuntu2 )等依赖项。
如果它们不匹配,您将需要寻找替换包。
还有另一个重要的细节。
安装库后,重新启动终端或虚拟机。
否则环境变量将不会更新。

一开始以为安装完成了,后来发现不对劲。
我必须使用 chmod +x tshref 来检查文件的执行权限。
说实话,我很困惑。
等等,还有一件事。
如果您的系统显示“没有这样的文件或目录”,则 lib 路径可能尚未添加到 ldconfig 配置中。
您需要手动 echo /usr/lib3 2 >> /etc/ld.so.conf.d/3 2 bit.conf 并再次运行 ldconfig。

很多人没有注意到这一点。
为了避免浪费精力,建议先检查系统编号 uname -m。

linux 运行一个可执行文件,出现 line 1: syntax error: unexpected "(" 的错误

说实话,我已经遇到过几次这个错误了,而且每次都很烦人。
你提到的“line1 :syntaxerror:unexpected(”其实很常见,让人头疼。
记得有一次半夜调试的时候,第一行多了一个空格或者换行符,bash很惊讶,直接报错了。

有趣的是,这个错误主要发生在从Windows转Linux线路的开发者中,用在Linux脚本的最后一行。
比如我在帮同事读代码时,他写道!/bin/bash;echo "hello",结果bash爆炸,报"unexpected(";"。
你看,只少了分号,shell就混乱了。

我不明白为什么第一行这么容易出问题,因为我不会写!/bin/bash!,这种明显不合理的写法,shell肯定会崩溃。
或者更极端,写成!/bin/bash为!/bin/bash"。
多加引号,就会出现shell
解决这个问题的关键是用sh -n script.sh 对于每一个这样写的例子,我都有一个叫backup.sh的脚本,不用等整个脚本写完
还有一个技巧,可以用bash -n script.sh检查语法,它也会运行一次-x,发现第三行的权限设置不正确,省了我好久
最后这个错误是shell的严格性导致的,不能容忍Windows脚本先sh,然后再运行sh -x,就可以解决了。

解决 Linux 下执行.sh 文件出现 permission denied 的方法

我对此很熟悉。
十年前在杭州,我在我的旧 Mac Mini 上安装了 CentOS,并编写了一个小脚本来自动备份我的数据。
然而他无论如何都没有回应,并且出现了“访问被拒绝”的信息。

想一想,出现这个错误有两种可能:要么是你错误地授予了文件权限,要么是你这个用户没有执行权限。
最常见的是权限授予不正确。

我记得当时尝试了一些技巧。
第一个是使用 chmod。
在终端中输入命令:chmod +x filename.sh。
注意 x,它授予执行权限。
之后,尝试再次运行 ./filename.sh。
在许多情况下,只需片刻就足够了。
如果这仍然不起作用,您可以使用 sudo ./filename.sh。
这允许您以管理员权限进行工作,但首先您需要输入计算机的密码。
我当时也用过这个。
有时我使用 sudo ,权限增加了。

还有一个技巧,就是直接用解释器运行。
例如,如果您的脚本以 !/bin/bash 开头,则直接输入 bash filename.sh 或 sh filename.sh。
这种方法的好处是,无论你的文件是否有执行权限,你都可以通过让 bash 直接解释并执行它来解决权限问题。
当时我有一个脚本,但是权限不对,但我只是运行并尝试了一下,结果确实有效。

当然,有时问题与文件系统本身有关。
例如,我曾经安装了一个备份驱动器,但连接时出现了问题。
盘符中的.sh文件肯定打不开。
遇到这种情况就需要检查是否安装、安装正确。
可以使用mount命令来查看。

另一个例子:有些系统安装了SELinux,这有时会很烦人。
您可以使用 getenforce 检查其状态。
有时一启动就冻结。
我记得杭州的机器安装了SELinux,这让我很头疼。
最后我我只能使用 setenforce 0 暂时禁用它,并在测试后快速将其重新打开。

此外,文件换行符是一个古老的陷阱。
从Windows复制的.sh文件中,换行符是\r\n,乍一看这对Linux来说很混乱。
此时就需要使用dos2 unix工具进行转换。
我过去处理过其中一些问题,并且客户复制的所有文件的格式都是错误的。

什么事情最让你恼火?是你的脚本本身有问题。
比如你一开始没有写!/bin/bash或者脚本中的命令不正确。
这纯粹是代码问题,与权限无关。
当时我有一个剧本,只缺一行解说,花了我很长时间。

所以你看,要解决这个“权限被拒绝”的问题,你必须尝试一件又一件的事情。
首先更改权限。
如果这不起作用,请使用 sudo。
如果这不起作用,请向翻译寻求帮助。
如果这不起作用,请检查挂载、SELinux 或文件格式是否存在任何问题。
如果这不起作用,您可以打印脚本的内容并查看,或者使用 strace ./filename.sh 来跟踪系统调用并查看它卡在哪里。

无论如何,不​​用担心,一步一步来一定能解决的。
如果您确实无法解决,只需在互联网上搜索或在 Linux 论坛上发帖并列出您的错误消息和您尝试过的方法即可。
一般都会有人帮你看一下。

linux可执行文件格式错误linux可执行文件格式

显然,shell程序执行的文件名主要取决于连接和权限,但背后却有很多技巧。

我们先来说说最重要的事情。
脚本通常以.sh结尾,但c编译的可执行文件是.out或没有扩展名,权限必须是x位。
去年我们运行监控系统时,遇到了一个陷阱。
我们直接将.c编译成可执行文件,忘记添加执行权限了。
结果./script.sh可以运行,但是./app直接报错。
还有一点就是Linux的实现过程非常曲折。
当看到./xxx时,SHELL实际上是先停止了子进程,然后使用execv系列将文件传输到内核。
内核会首先检查I文件节点的权限,如果权限不足则继续拒绝。
还有一个更重要的细节。
例如,如果文件是.sh,内核将调用dash或bash解析脚本。
如果是ELF文件,内核将剥离文件头并加载代码。
很多人并不关心这个。
去年我们有一个项目因为ELF文件头错误而卡了很长时间。

一开始我以为实现依赖于连接,后来发现是错误的。
内核还会查看文件格式和权限位等。
还有一点就是,如果文件是setuid并且当前用户不是root,执行也会被拒绝。
这是正常的。

建议仔细研究execve内核实现,而不要只关注脚本扩展。