私はLinuxベースのデバイスを初めて使用します。
update-osコマンドを使用してファームウェアを更新する必要があるデバイスがあります。
このコマンドを入力すると、使用法の入力を求められます。
Update-os [--dry-run] FILE | URL [-V ]
どういう意味ですか?更新するファイルが2つあります。 1 つは os-update、もう 1 つは 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コマンドを教えていますが、これは学校や一般的な教育方法とはまったく異なります。
それでは始めましょう。
最初に知っておくべきことはprogram
aとaの違いですprocess
。
Unixの違いはとても簡単です。program
動作するいくつかのコードを含むディスク(ファイルシステム)の愚かなは「死んだ」ファイルにすぎません(ただし実行状態ではありません)。program
重要ですが、それ自体は役に立ちません。古くから死んだ動物の頭蓋骨のようです。
生きている動物が生き残るには骨が必要ですが、骨自体から抽出された骨は死んだ物に過ぎません。同様にaprogram
も死んだのです。ディスクにはボディのようにプログラムが積み重ねられ、これらのプログラムは基本的にリポジトリにのみ存在するファイルにすぎません。
これで、aはprocess
コンピュータメモリ内のすべてのプログラムの「リアルタイム」インスタンスです。
つまり、Unixでプログラムを実行すると、システムはファイル(スケルトン)をインポートし、メモリのprocess
どこかに1つ(「生きている動物」)を構成し、そのスケルトン(プログラム)を動物(プロセス)の中央に配置します。プロセスはプロセスより「それ以上」ですが、program
内部プロセスがなければ生き残ることはできませんprogram
(内部プロセスがあります)。
したがって、「プログラム実行」コマンドが終了すると実行が開始されるので、「生きている」ということは、process
そのprogram
中に入れたスケルトン(a)に基づいた「形」と「行動」を持つようになります。メモリとCPUで「ライブ」として扱われます。
ここで重要な質問は、例えば、プログラムがどれだけのプロセスを生成できるかということです。
多くの答えがあります(無限大、実際に、またはむしろ覚えていることができるだけ多い)。
実際、プログラムとそれを実行するプロセスの間には1:Nマッピングがあります。
この情報により、あなたはすでに他の初心者よりも多くを知っています。
これでわかるように、プロセスは実行中のプログラム以上です。
プロセスに CPU が割り当てられました。プロセスには、メモリや他の多くのコンピュータリソースが割り当てられます。
プロセスには別の項目が割り当てられていますargument vector
。
これは何ですか?
「注文した単語ポケット」です。 Orderedは、パッケージ内の単語の順序が重要であることを意味します。プログラミングを知っていれば配列だと思います。
なぜ必要ですか?
システムがプロセスを作成した瞬間に戻りましょう。システムは、少なくとも新しいプロセスを構成するプログラムの名前を知る必要があります。
プロセスを構成するために使用されるプログラム名は常にですargument vector
。
これは多くの単純なプログラムでうまく機能しますが、いくつかのプログラムははるかに複雑な目的を持っています。たとえば、何かを処理し、それを別のものに変換し、何かを実行し、結果を返すこともできます。
使用するプログラムファイルの名前を指定することに加えて、これがまさに目的ですargument vector
。タスクを実行するために必要なすべての情報をビルドプロセスに渡すために使用されます。
の単語数に制限はありませんが、argument vector
互いに区別する必要があります。 (中の)単語はargument vector
そのままプロセスに渡されます。これまで、argument vector
配列の各要素を単に「単語」と呼ぶのは少し愚かです。 「一般的な」「テキスト」という単語と区別するために、以下を呼び出すことをお勧めしますarguments
。
パラメータの意味とその順序は、「処理」される(つまり、パラメータが送信される)プログラムによってのみ理解できます。したがって、各プログラムは独自の世界、独自の言語、自分が理解する単語/パラメータです。
その後、生成されたプロセスは単語を1つずつ読み、argument vector
内容に従って作業を開始します。これは再びプログラムによって制御される。
通常、スタンドアロンの単語/引数は、ファイルまたはarg. vector
ファイル(またはディレクトリ)へのパスを表します。
シェルは入力行を空白文字境界のベクトル単語に自動的に分割します。mv oldfile newfile
シェルワイヤは最終的にargument vector
切断されます["mv","oldfile","newfile"]
。
さて、私たちが言ったように、システムは常に最初の単語をargument vector
「処理」されるプログラム(インスタンス化)へのパスとして解釈します。したがって、この例で実行するプログラムはですmv
。
したがって、これまでに私たちが持っているすべての情報を使ってのベクトルはおおよそ["mv","oldfile","newfile"]
次のように解釈されます。というプログラムを実行し、2つの引数をmv
提供します。oldfile
newfile
さて、すでに述べたように、各パラメータの意味はmv
プログラム自体によって完全に解釈されます。
mv
だからプログラムでは一般的に行動渡された引数(最後の引数を除く)と同じ名前のファイルは、ファイル(存在しない場合)またはディレクトリ(すでに存在する場合)に配置され、最後に渡された単語として使用されますargument vector
。
したがって、["mv","oldfile","newfile"]
デフォルトでは、これは「oldfile」というファイルを「newfile」というファイルに「移動」(または「名前変更」)または「oldfile」というファイルを「newfile」というファイルに「移動」することを意味します。存在する場合。
繰り返しますが、結果プロシージャが引数を処理する方法は、完全に呼び出されるプログラム(つまりmv
プログラム)によって異なります。
arg. vector
私たちは一般的に、各個々の単語がパスを表すのが慣例だと言いました(必須ではありませんが!!!)。
しかし、時々、プログラムの動作を少し変更するために、パスだけでなく他の情報もプログラムに渡したいと思うかもしれません。
-
数十年間使用された後、または--
文字で始まるパラメータは、プロセスの動作を変更するパラメータという非公式の合意が行われました。
私たちはこれらの各引数を「引数」と呼びますa flag
。繰り返しますが、フラグの意味は完全にプログラムによって異なります!
たとえば、プログラムは1つmv
の引数、名前付きフラグ、および名前付き-v
フラグも受け入れます--verbose
。どちらも同じことを行います。つまり、実行中のジョブに関する情報を印刷します。
そのmv -v oldfile newfile
結果、結果は切り取られてargument vector
印刷さ["mv","-v","oldfile","newfile"]
れますmv
。
$ mv -v oldfile newfile
renamed 'oldfile' -> 'newfile'
「oldfile」の名前を「newfile」に変更します。
いくつかのプログラムは、有用なタスクを実行するために少なくとも1つのパラメータを提供する必要があるほど複雑です。
これはあなたのプログラムの場合です。
したがって、引数なしで呼び出されると、これらのプログラムは何もせずに、少なくともプログラムの使用方法を説明するいくつかのヒントを印刷します。
数十年にわたって使用され、「ミニ言語」はこれらの手がかりを中心に発展してきました。
しかし、注意してください!
あなたが見つけたように、この小さなプロンプト言語はシェル言語とは何の関係もありません。
プロンプトラインがせいぜい間違ったシェルラインである場合、最悪の場合、シェルにあるとおりにフィードバックすると、完全に誤ったアクションを実行して潜在的に致命的な損傷を引き起こす可能性があります。
したがって、以前のようにプロンプトラインをシェルに返さないでください!
[
プロンプトラインの文字は、シェルラインの文字とは全く異なる意味を持ちます[
。二つを混同しないでください!
同様に|
、プロンプトラインの意味はシェルラインの意味とは全く異なります!もう一度2つを混同しないでください!
White Owl@がすでに述べたように、伝統的に括弧[]
内のパラメータは、パラメータがオプションであることを意味します。
|
プロンプトラインの意味は、or
いくつかの可能な呼び出しの中から選択することです。
形式などに入力されたパラメータは、パラメータBIG LETTERS
/単語が「オブジェクト」の特定の「クラス」として解釈されることを意味します。つまり、その単語はインターネットサーバーのパスまたはURLとして理解されます。FILE
URL
プログラムがどちらを決定するかは完全にプログラム自体に依存しますが、たとえば、通常「file」パラメータがURLパターン文字(「https://」など)で始まる場合、プログラムはこれをURLとします。 。
これまで気づいたように、プロンプトラインを読む(そして書く(!))ことは芸術になることができます(暗いラインでも)。正直言って、あなたのプログラムが正確に何をするのか誰も知りません。プロンプトラインはまさにプロンプトです。
確かに知ることができる唯一の方法は、特定のプログラムのマニュアルを読むことです。
これは、プログラムが実際にどのように機能するかを説明する唯一の権威あるソースです(常に真実ではない場合でも - たとえば、文書(!!)またはプログラム(!!!)にバグがある可能性があります)。
しかし、ご覧のように、私たちの上級ユーザーは人生のプロンプトラインを十分に見ており、多くのプログラマーは人生で十分なプログラムを書いたので、このプログラムが何をするのか、いつ実行するのかを概算することができます。
名前と自己報告されたプロンプトラインを使用すると、次のように「推測」できます。
- この手順はデバイスのオペレーティングシステムを更新します。 (
update-os
注:unicesは大文字と小文字を区別し、文字サイズは重要です!) - プログラムには、実際のアップデートを実行せずにテストを実行し、デバイスを更新するふりをし、デバイスを更新するかのように、すべてのタスクを実行するオプションがあります。これは
[--dry-run]
通常、次のことを意味します。 - プログラムは、ローカルファイル()からデバイスを更新する
FILE
か、インターネットから直接更新をダウンロードすることによって()更新することができます。URL
- プログラムは
-V
- このフラグが何であるかはわかりませんが、経験上、次のオプションのフラグを受け入れます。- プログラムバージョンが印刷されます:as
-V
=version
-V
または = など、そのジョブの詳細な出力を印刷しますverbose
(ただし、従来はverbose
flagsでより一般的です-v
)。- 最後に、
-V
実際に意味するのは簡単です。Voldemort
- プログラムバージョンが印刷されます:as
結局のところ、プログラムの作者だけがそれが実際に何をするのかを知っています。時にはそうではなくても…
今、質問の後ろに隠されているすべての重要なことを理解し、愚かな間違いを実現することを願っています。
それはどんな状況でも理解できないかもしれない一貫性がなく、つぶやくナンセンスをシェルに与えることと同じです。
また、プロンプト行に「危険な」シェル文字が含まれておらず、コンピュータに損傷を与えないという事実も監査する必要があります。