Redian新闻
>
Linux 中退出码的含义 | Linux 中国

Linux 中退出码的含义 | Linux 中国

科技
 
导读:揭开 Linux 中退出码的神秘面纱。了解什么是退出码,以及为什么和如何使用它们。           
本文字数:3459,阅读时长大约:5分钟

揭开 Linux 中退出码的神秘面纱。了解什么是退出码,以及为什么和如何使用它们。

退出码(退出状态)可以告诉我们最后一次执行的命令的状态。在命令结束以后,我们可以知道命令是成功完成的还是以错误结束的。

其基本思想是,程序返回退出代码 0 时表示执行成功,没有问题。代码 1 或 0 以外的任何代码都被视为不成功。

退出码除了 0 和 1 外还有很多值,我将在本文介绍它们。

Linux Shell 中的各种退出码

我们来快速了解一下 Linux Shell 中的主要退出码:

< 如显示不全,请左右滑动 >
退出码解释
0命令成功执行
1通用错误代码
2命令(或参数)使用不当
126权限被拒绝(或)无法执行
127未找到命令,或 PATH 错误
128+n命令被信号从外部终止,或遇到致命错误
130通过 Ctrl+C 或 SIGINT 终止(终止代码 2 或键盘中断)
143通过 SIGTERM 终止(默认终止)
255/*退出码超过了 0-255 的范围,因此重新计算(LCTT 译注:超过 255 后,用退出码对 256 取模)

📋 130SIGINT 或 ^C)和 143SIGTERM)等终止信号是非常典型的,它们属于 128+n 信号,其中 n 代表终止码。

在简单了解了退出码之后,我们来看看它们的用法。

获取退出码

前一个命令执行的退出码存储在 特殊变量🔗 linuxhandbook.com:443 $? 中。你可以通过运行以下命令来获取:

  1. echo $?

我们在所有演示中都将使用它来获取退出代码。

请注意,exit 命令支持以带着前一条命令相同的退出码退出。

退出码 0

退出码 0 表示命令执行无误,这是完成命令的理想状态。

例如,我们运行这样一条基本命令

  1. neofetch
  2. echo $?

这个退出码 0 表示特定命令已成功执行,仅此而已。让我们再演示几个例子。

你可以尝试 终止一个进程🔗 itsfoss.com;它也会返回代码 0

  1. pkill lxappearance

查看文件内容也会返回退出码 0,这意味着 cat 命令执行成功。

退出码 1

退出码 1 也很常见。它通常表示命令以一般错误结束。

例如,在没有 sudo 权限的情况下使用 软件包管理器🔗 itsfoss.com,就会返回代码 1。在 Arch Linux 中,如果我运行下面的命令:

  1. pacman -Sy

它会返回 1, 表示上一条命令运行出错。

exit code 1 (impermissible operation resulted in this code)

📋 如果你在基于 Ubuntu 的发行版中尝试这样做(不使用 sudo 执行 apt update),运行后会得到错误码 100,表示你是在没有权限的情况下运行 apt100 不是标准错误码,而是 apt 特有的错误码。

虽然这是一般的理解,但我们也可以将其解释为 “不被允许的操作”。

除以 0 等操作也会返回错误码 1

Division by zero results in code 1

退出码 2

这个退出码出现在当执行的命令有语法错误时。滥用命令参数也会导致此错误。

一般来说,它表示由于使用不当,命令无法执行。

例如,我在一个本应只有一个连字符的选项上添加了两个连字符,那么此时会出现退出码 2。

  1. grep --z file.txt

Invalid argument resulted in exit code 2

当权限被拒绝时,比如访问 /root 文件夹,就会出现错误码 2

Permission denied gives out code 2

退出码 126

126 是一个特殊的退出码,它用于表示命令或脚本因权限错误而未被执行。

当你尝试执行没有执行权限的 Shell 脚本时,就会出现这个错误。

请注意,该退出码只出现在没有足够权限的脚本或命令的“执行”中,这与一般的权限被拒绝错误不同。

因此,不要把它与你之前看到的退出码为 2 的示例混淆。在那个示例中,运行的是 ls 命令,权限问题出自它试图执行的目录。而本例中权限问题来自脚本本身。

退出码 127

这是另一个常见的退出码。退出码 127 指的是“未找到命令🔗 itsfoss.com”。它通常发生在执行的命令有错别字或所需的可执行文件不在 $PATH 变量中时。

例如,当我尝试执行一个不带路径的脚本时,经常会看到这个错误。

Script executed without the path gives "command not found" or code 127

当你想运行的可执行文件不在 $PATH 变量中时,也会出现退出码 127。你可以通过 在 PATH 变量中添加命令的目录🔗 itsfoss.com 来纠正这种情况。

当你输入不存在的命令时,也会得到这样的退出码。

Unmount is not a command, and Screenfetch is not installed, which resulted in code 127

退出码 128+n 系列

当应用程序或命令因致命错误而终止或执行失败时,将产生 128 系列退出码(128+n),其中 n 为信号编号。

n 包括所有类型的终止代码,如 SIGTERMSIGKILL 等。

退出码 130 或 SIGINT

在通过终止信号 2 或按下 Ctrl+C 中断进程时,会发出 SIGINT(键盘中断信号)。

因为终止信号是 2,所以我们得到的退出码是 130(128+2)。下面的视频演示了 lxappearance 的中断信号。

退出码 137 或 SIGKILL

SIGKILL(立即终止信号)表示终止信号 9。这是终止应用程序时最不应该使用的方法。

因为终止信号为 9,因此我们得到的退出代码为 137(128+9)。

退出码 143 或 SIGTERM

SIGTERM 是进程在未指定参数的情况下被杀死时的默认行为。

SIGTERM 的终止信号为 15,因此该信号的退出码为 143(128+15)。

还有一些你以前可能不知道的终止信号,它们也有自己类似的退出码。你可以在这里查看它们:

📋 请注意,如果进程在启动它的同一会话中终止,这些信号可能不会出现。如果要重现这些信号,请从不同的 shell 终止。

就个人而言,信号 128 是无法重现的。

当退出码超过了 255 会怎样?

最新版本的 Bash 甚至保留了超过 255 的原始退出码的值,但一般来说,如果代码超过 255,就会被重新计算。

也就是说,代码 256 会变成 0257 会变成 1383 会变成 127,以此类推。为确保更好的兼容性,请将退出码保持在 0 至 255 之间。

结语

希望你对 Linux Shell 中的退出码有所了解。在排查各种问题时,使用它们会非常方便。

如果你要在 Shell 脚本中使用这些代码,请确保你了解每个代码的含义,以便更容易地排除故障。

这就是本文的全部内容。如有遗漏,请在评论区告诉我。

(题图:MJ/719ff711-1b9f-4aa9-a82e-980704acbdd8)


via: https://itsfoss.com/linux-exit-codes/

作者:Pranav Krishna 选题:lkxed 译者:lxbwolf 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

LCTT 译者 :Xiaobin.Liu
🌟🌟🌟🌟
翻译: 52.0 篇
|
贡献: 1339 天
2019-11-30
2023-07-30
https://linux.cn/lctt/lxbwolf
欢迎遵照 CC-BY-SA 协议规定转载,
如需转载,请在文章下留言 “转载:公众号名称”,
我们将为您添加白名单,授权“转载文章时可以修改”。


微信扫码关注该文公众号作者

戳这里提交新闻线索和高质量文章给我们。
相关阅读
硬核观察 #1123 无人察觉:窃取密码的 Linux 木马已偷偷下载 3 年10 个最佳 Linux 虚拟化软件 | Linux 中国你好,我是筚(bì)篥( lì)!五月邮轮:英格兰-苏格兰-爱尔兰(上)师说|“文化研究”第一期——文化研究的含义终端基础:在 Linux 中复制文件和目录 | Linux 中国文学城大V“她死去了”传【视频】第一次30天收获三种耐寒蔬菜,花盆地里都可以种几茬,懒人也可以种,启蒙孩子种菜在 Linux 中使用 cd 命令 | Linux 中国使用 Linux 让旧电脑焕发新颜 | Linux 中国10 分钟让你了解 Linux ABI | Linux 中国开源朗读者 | Linux 只是一个内核:这是什么意思? | Linux 中国Linux Shell 介绍:Bash、Zsh 和 Fish | Linux 中国为什么黑客更喜欢使用 Kali Linux? | Linux 中国适用于 Linux 的 5 个最佳 PDF 编辑器 | Linux 中国10 个最好的 Xfce 桌面环境的 Linux 发行版 | Linux 中国在 Ubuntu、Linux Mint 和 Windows 中升级到最新的 LibreOffice | Linux 中国希腊苏达湾(Souda Bay),黎明前静悄悄如何在 Linux 主机和 KVM 中的 Windows 客户机之间共享文件夹 | Linux 中国今天,六四“Do you have the time?” 可不是 “你有空吗”,真正的含义是……哞~ 我的 Linux 终端里有头牛 | Linux 中国SparkyLinux 7 “Orion Belt” 评测:稳定性与新鲜感的结合 | Linux 中国Linux 版 WhatsApp | Linux 中国处女座了,“处女”这个词的含义,何时改的?多地烟草局要求近亲属不得应聘?国企应夯实“全民所有”的含义丨南周快评比 Ubuntu 更好?Ubuntu 爱好者的 11 款最佳 Linux 发行版 | Linux 中国5 个令人惊讶的 Linux 用途 | Linux 中国5 个最漂亮的 Arch Linux 发行版 | Linux 中国Linux 中的模糊文件搜索 | Linux 中国在 Linux 中使用 cat 命令 | Linux 中国5 个专注于隐私保护的 Linux 发行版 | Linux 中国Ubuntu Linux 的 7 个最佳应用坞 | Linux 中国如何在 Ubuntu 和其他 Linux 发行版中查看 AVIF 图像 | Linux 中国包含 Openbox 的 7 个极简 Linux 发行版 | Linux 中国
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。