「sudo -s」コマンドは何をしますか、またこの例ではどのように使用しますか?


8

以下の疑問があります。私がフォローしているソフトウェアのインストールに関連するチュートリアルでは、次のコマンドを実行する必要があると言っています(これはsshシェルで実行しているため、この手順のリストはexitコマンドで終わります)。

sudo -s
apt-get update
apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen
exit

私の疑問は:

コマンドの-s後にパラメーターは正確に何をしますsudoか?

ウェブで検索すると、次のことがわかりました。

‑s [コマンド] ‑s(シェル)オプションは、SHELL環境変数で指定されているシェルが設定されている場合はそれを実行するか、パスワードデータベースで指定されているシェルを実行します。コマンドが指定されている場合は、シェルの‑cオプションを介して実行するためにコマンドがシェルに渡されます。コマンドが指定されていない場合、対話型シェルが実行されます

sudo -sシェルの環境変数を使ってコマンドを実行しているようです。

しかし、これは私には明確ではありません:この場合、環境変数を使用して実行されるコマンドは何ですか?(それは実行されるだけで、は実行さsudo -sれませんsudo -s [command])。

回答:


7

簡単な答えは、ルートシェルを提供することです。それがここで使用されています。そこに良いことだとの技術的な比較はsusudo -isudo -sおよびsudo suUnix.SEのメソッドが、それはここでは実際には関係ないのです。コードは何でも使用でき、機能するはずです。

ヘルプナゲットにはいくつかの意味があります。

  • $SHELL環境変数でコマンドを探しています。実行echo $SHELLすると、おそらく表示され/bin/bashます。つまり、Bashのルートインスタンスを取得します。あなたがzshそこにいたのなら、あなたはのルートインスタンスを取得することになるでしょうzsh

  • $SHELLが空の場合/etc/passwd、そのユーザー用に定義されたデフォルトのシェルにフォールバックします。

  • コマンド(例:)を指定すると、sudo -s whoami実際に実行されます。sudo /bin/bash -c "whoami"

  • コマンドを渡さない場合、-c引数は渡されないため、インタラクティブなシェルを取得します。

「root」というフレーズを何度か使用しました。デフォルト sudoルートとして物事を実行しているが、約すべてですsudo(あなたがそうする権限を持っている場合)、他のユーザーとして物事を実行することができます(およびSU)。私はsudo -s -u $USER、私-sが上記で約束したように彼らにルートシェルを与えない、叫ぶペダントのためにこれを述べているだけです。


そして私の控えめな意見では、2つのコマンドだけでrootになるのは本当にばかげています。言うまでもなく、ユーザーが誤ってさらにコマンドをrootとして実行し続ける可能性があります。rootで何かを実行したい場合、または実行する必要がある場合は、コマンドの前に次のように追加しsudoます。

sudo apt-get update
sudo apt-get install -y build-essential libtool libcurl4-openssl-dev libncurses5-dev libudev-dev autoconf automake screen

実行するコマンドのバケットロードがある場合を除いて、ルートシェルの取得を提案するチュートリアルは疑わしいと思います...そして、それでもスクリプトがあります。


完璧な説明。今、それはより明確です。最後の疑問です。以前のすべてのコマンドにsudoを追加すると、同じ最終結果が得られますか?それは本当ですか、それとも何か不足していますか?
AndreaNobili 2014年

@OliあなたはZshについて100%正しいです。「sudo -s」は、スーパーユーザーではなく「root」として「root」シェルにログインします。
RCF

@AndreaNobiliええ、それsudoが一般的な目的です。rootとして手動でログインしなくても、rootとしてコマンドを実行する。
Oli

参考までに、私はあなたの回答を下に投稿しました。sudo -s私の知識は限られていて、偶然状況全体で起こっているため、私の見解は大きく異なります。それでも、私の「謙虚な」回答を読んで、おそらく10年前の回答を更新したいと思うかもしれません。
WinEunuuchs2Unix

0

sudo -s通常のユーザーと同じように、現在のディレクトリでコマンドを実行します。例えば:

rick@alien:~/askubuntu$ suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
Nov 12 22:23:37 to Nov 13 04:24:37 lasting 21,660 seconds
(... SNIP ...)
Dec 02 21:58:49 to Dec 03 04:20:52 lasting 22,923 seconds
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,356 seconds (21 days, 12 hours, 29 minutes, 16 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,015 seconds (7 days, 22 hours, 33 minutes, 35 seconds)

rick@alien:~/askubuntu$ sudo suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -H suspendtime
sudo: suspendtime: command not found

rick@alien:~/askubuntu$ sudo -s suspendtime
Nov 12 14:06:27 to Nov 12 17:22:21 lasting 11,754 seconds
(...SNIP...)
Dec 03 05:52:43 to Dec 03 16:37:44 lasting 38,701 seconds

Linux uptime 1,859,431 seconds (21 days, 12 hours, 30 minutes, 31 seconds)
45 Suspends 1,173,341 seconds (13 days, 13 hours, 55 minutes, 41 seconds)
Real uptime 686,090 seconds (7 days, 22 hours, 34 minutes, 50 seconds)

もちろん-s、コマンドの前に接頭辞を付ける代わりにを使用して./も、それほど時間を節約できない場合があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.