了解命令 update-os

了解命令 update-os

我是基于 Linux 的设备的新手...

我有需要使用命令 update-os 更新固件的设备

当我输入此命令时,它会提示我如何使用它......

Update-os [--dry-run] FILE | URL [-V ]

这是什么意思呢?请注意,我有两个要更新的文件...一个称为 os-update,另一个是 update.bin 文件...

如何使用这个命令呢?我尝试在包含 .bin 文件的同一目录中运行以下命令

Update-os update.bin

但它再次提示我使用该命令。然后我尝试:

Update-os update.bin | /home/test/

但它说/home/test/ permission denied

我尝试使用 sudo...

Sudo Update-os update.bin | /home/test/

但我得到同样的许可被拒绝......

任何帮助将不胜感激...问候,

答案1

如何阅读用法:

Update-os [--dry-run] FILE | URL [-V ]

第一个词是您尝试运行的可执行文件:Update-os

[--dry-run]- 方括号表示“可选参数”,因此您可以添加或不添加此选项 - 您的选择。通常,“空运行”意味着可执行文件会告诉您它在运行期间应该做什么,而无需实际执行。建议在前几次运行中使用它,直到您确定它完全符合您的预期。

FILE | URL-|此处的条形符号表示“或”。您可以在命令行中指定文件或 url。可执行文件将使用该文件或 url 来完成工作。
请注意:|在命令行中使用具有不同的含义 - 它将stdout一个命令传输到stdin另一个命令。当您Uodate-os update.bin | /home/test/这样做时,意味着您希望屏幕上打印的所有内容Update-os都由命令处理/home/test/,但由于这是一个目录而不是命令 - 您会收到错误。

[-V ]又是可选的。不太清楚它会做什么,但通常-v-V选项告诉可执行文件,在工作期间打印其版本或详细说明。您必须自己在可执行文件的文档中找到这一点。或者只是运行它(--dry-run最好)。

答案2

问题的标题是“理解linux命令”。

所以我想其他任何事情甚至你的例子都是离题的。

我自下而上教授 unix 命令,这与学校和通常的教学方式完全不同,根据我的经验,这对我的学生来说比传统方法效果更好。


那么我们开始吧:

您需要了解的第一件事是 aprogram和 a之间的区别process

unix 上的区别非常简单:program只是磁盘(文件系统)上的一个愚蠢的“死”文件,其中包含一些可以运行的代码(但它不处于运行状态)。program很重要,但本身也毫无用处:它就像一具死去已久的动物的骨架。

活的动物确实也需要骨骼才能生存,但从骨骼中提取出来的骨骼本身只是一个死物。同样,aprogram也是一个死物。程序堆积在磁盘上(就像尸体一样),这些程序基本上只是文件,仅存在于存储中。

现在,一个process是计算机内存中任何程序的“活”实例。

即当你在unix上运行一个程序时,系统获取它的文件(一个骨架),process在内存中的某个地方构造一个(“活的动物”)并将该骨架(程序)放入动物(进程)中。进程比进程“更多” program,但如果没有内部进程,它就无法生存program(它的肚子里有一个程序)。

因此,在“运行程序”命令结束时,您开始运行,因此“活着”,process它根据program放入其中的骨架(a)具有“形状”和“行为”。进程“存在”于内存中并存在于 CPU 上。

现在重要的问题是,例如,一个程序可以产生多少个进程?

答案有很多(实际上是无限的,或者更确切地说,有多少适合你的记忆)。

程序和运行它的进程之间实际上存在 1:N 映射。

有了这些信息,您可能已经比其他初学者了解得更多了。


现在,正如我们所看到的,进程不仅仅是它正在运行的程序。

进程已分配有 CPU。进程分配有内存以及许多其他计算机资源。

该进程还分配给它的另一件事称为argument vector.

这是什么 ?

它是一个“有序的词袋”。有序意味着包中单词的顺序很重要。如果你懂编程,你可以把它想象成一个数组。


为什么我们需要它?

让我们回到系统创建进程的那一刻:系统至少需要知道程序的名称,从中构造新的进程。

用于构造进程的程序名称始终是argument vector.

这对于许多简单的程序来说效果很好,但某些程序的目的要复杂得多:比如处理某些东西,将其从某种东西转换为其他东西,用它做一些事情,也许还返回一些结果。

除了命名要使用的程序文件之外,这正是 an 的argument vector用途:它用于将执行任务所需的任意信息传递给生成进程。


中的单词数量没有限制argument vector,但它们必须是不同的。这些单词(在 中argument vector)按原样传递给进程。到目前为止,将argument vector数组中的每个这样的元素简单地称为“一个单词”有点愚蠢。为了将它们与“正常”“文本”单词区分开来,我们将 then 称为更好的:arguments

参数的含义及其顺序只能通过正在“处理”的程序(即,将其转入该过程)来理解。因此,每个程序都是它自己的宇宙、自己的语言、自己的单词/参数,它可以理解。

然后,生成的过程会逐一读取单词argument vector,并根据其内容开始工作 - 这又是由程序控制的。

通常,an 中的独立单词/参数arg. vector表示文件或文件(或目录)的路径。


Shell 自动将输入行分割成空格字符边界上的向量单词:即。mv oldfile newfile外壳线最终会被argument vector切成["mv","oldfile","newfile"]

现在,正如我们所说,系统总是将第一个单词解释argument vector为要“处理”的程序的路径 - 实例化。因此,在本示例中,要运行的程序是mv.

因此,使用迄今为止我们掌握的所有信息,向量 of["mv","oldfile","newfile"]大致翻译为:运行一个名为 的程序mv并为其提供两个参数oldfilenewfile

现在,正如我们已经说过的,每个参数的含义完全由mv程序本身解释。

mv所以在它的程序通常情况下动作与传递给它的参数(除了最后一个参数)同名的文件放入文件(如果它不存在)或目录(如果它已经存在),用作传入的最后一个单词argument vector

因此["mv","oldfile","newfile"]基本上最终意味着“移动”(或更确切地说“重命名”)名为“oldfile”的文件到名为“newfile”的文件,或者“移动”名为“oldfile”的文件到名为“newfile”的目录(如果存在)。

再次重复,结果过程如何处理参数,完全取决于被调用的程序(即mv程序)。


我们已经说过,通常习惯上(但不是必需的!!!),an 中的每个独立单词都arg. vector表示一条路径。

但有时我们希望将其他信息传递给程序,而不仅仅是路径,例如稍微改变其行为。

经过几十年的使用,形成了一种非正式的共识,即以---字符开头的参数是修改进程行为的参数。

我们将每个这样的论证称为“论证” a flag。再次强调,标志的含义完全取决于程序!


例如,程序mv还接受一个参数,一个标志,named -v,还有一个标志named --verbose,这两者都使它做同样的事情:打印出有关它正在做什么的信息。

因此mv -v oldfile newfile最终将被切入argument vector["mv","-v","oldfile","newfile"]打印mv出结果:

$ mv -v oldfile newfile
renamed 'oldfile' -> 'newfile'

并将“oldfile”重命名为“newfile”。


有些程序足够复杂,它们需要至少提供一个参数才能完成任何有用的工作。

你的程序就是这种情况。

因此,当在没有任何参数的情况下调用时,这样的程序不会不执行任何操作,而是至少会打印出一些提示,描述如何使用该程序。

经过几十年的使用,围绕这些提示演变出了一些“迷你语言”。

但请注意!

正如您已经发现的那样,这个小提示语言与 shell 语言无关。

如果任何提示行在最好的情况下是无效的 shell 行,在最坏的情况下,当按原样反馈到 shell 时,它会做一些完全错误的事情,可能会导致灾难性的损坏。

所以永远不要像你那样将提示线按原样返回到 shell 中!

[提示行中的字符与 shell 行中的字符具有完全不同的含义[。永远不要混淆两者!

同样,|提示行上的含义与 shell 行上的含义完全不同!再次强调不要混淆两者!


正如 White Owl@ 已经说过的,按照传统,[]括号内的任何参数都意味着该参数是可选的。

|提示行中的意思是or或者更确切地说是在多个可能的调用之间进行选择。

以或BIG LETTERS等形式键入的参数意味着参数/单词将被解释为“对象”的给定“类”:即该单词将被理解为路径或互联网服务器的 URL。FILEURL

程序如何确定哪个是哪个,完全取决于程序本身,但例如,通常,如果“文件”参数以 url 模式字符(即“https://”)开头,则程序会假定它是一个 URL 。


正如您现在已经注意到的那样,阅读(和编写(!))提示线可能是一种艺术(甚至是一种黑暗的艺术)。坦率地说,没有人知道你的程序到底会做什么。提示行就是这样:提示。

唯一确定的方法是阅读给定的程序文档。

这是解释程序如何真正工作的唯一权威来源(即使这并不总是成立 - 例如,文档中(!!)或程序中(!!!)可能存在错误)。

然而正如你所看到的,我们高级用户在生活中已经看到足够多的提示线,并且许多程序员在他们的生活中写了足够多的程序,我们可以粗略地假设,这个程序将做什么以及何时做。

从它的名称和自我报告的提示行,我们可以“猜测”这一点:

  • 该程序将更新设备的操作系统:(update-os注意:unices 区分大小写,字母大小很重要!!!)
  • 该程序可以选择进行测试运行,假装更新设备并执行所有操作,就好像它正在更新设备一样 - 而无需实际执行真正的更新 - 这[--dry-run]通常意味着
  • 该程序可以从本地文件 ( FILE) 或直接从互联网下载更新 ( URL)来更新设备
  • 该程序接受可选标志,称为-V- 这个标志的作用我们不知道,但根据经验:
    • 它将打印出程序版本:如-V=version
    • 或者它会打印出有关其操作的更详细的输出:如-V= verbose(但传统上verbose更常见的是在标志下-v
    • 最后,实际上-V很容易意味着Voldemort

最后,只有程序的创建者真正知道它会做什么。有时甚至连他们也没有......


我希望,您现在了解了问题背后隐藏的所有重要内容,并且您意识到了自己的愚蠢错误!

就像你给你的贝壳喂了语无伦次、咕哝的废话一样,它在任何情况下都可能无法理解。

您还应该庆幸的是,提示行不包含任何“危险”的 shell 字符,并且不会损坏您的计算机。

相关内容