
~からhttps://calibre-ebook.com/download_linux
sudo -v && wget -nv -O- https://download.calibre-ebook.com/linux-installer.sh | sudo sh /dev/stdin
sudo -v &&
上記のことを考えると、man sudo
ここでの目的は何ですか?
-v, --validate
ユーザーのキャッシュされた資格情報を更新し、必要に応じてユーザーを認証します。 sudoersプラグインの場合、デフォルトではsudoタイムアウトは15分以上延長されますが、コマンドは実行されません。すべてのセキュリティポリシーがキャッシュされた資格情報をサポートしているわけではありません。
目的は何ですかsh /dev/stdin
? (Ubuntu 18.04ではsh
ダッシュです)
ありがとうございます。
答え1
ここで目的は何ですか
sudo -v &&
?
私はこれがユーザーの驚きを最小限に抑えると信じています。 2つの状況を考えてみましょう。
- Sudoはいいえコマンドにパスワードを要求するように構成します(NOPASSWDタグ)。
比較的:
- Sudoはいパスワードを要求するコマンドの設定
最初のケースでは、sudoへの両方の呼び出しはプロンプトなしで成功します。問題が解決しました!
2番目のケースでは、2つの可能性があります。ユーザーが最近 sudo 認証を受けているか、まだ認証されていません。
- 最近認証した場合は、
sudo -v
キャッシュされた資格情報のタイムスタンプを更新するだけです。 - ユーザーいいえ最近 sudo で認証されると、パスワードの入力を求められ、認証情報がキャッシュされます。
sudo -v
プロセスが成功したら、sudo sh /dev/stdin
キャッシュされた資格情報を使用して中断することなく2番目の呼び出しを実行する必要があります。
sudo -v
初期コマンドなしで選択肢を検討してください(ここで、sudoはまだパスワードの入力を求めるように設定されています)。この場合、wget
出力がstdoutまたはstderrに記録されている可能性があり、これはユーザーが出力を見ず、何が起こらなかったのか疑問に思うかもしれません。
目的は何ですか
sh /dev/stdin
?
これは標準入力へのリンクである特別なファイルであるため、1つの引数sh
で呼び出されます。command_file
名前ダッシュ - コマンドソルバー(シェル)
要約
dash ... [command_file [argument ...]]
その結果、shはcommand_fileを読み込み、その中のコマンドを期待して実行します。この特別な標準入力「ファイル」は出力にパイプされるため、wget
最終結果はURLの内容をルートレベルのシェルに送信することです。
Calibreプロジェクトが特にこの構文を選択した理由がわかりません。選択肢は次のとおりです。
... | sudo sh
... | sudo sh -