私はあまり経験のないUbuntuのユーザーであり、私は使用していsudo
ます。
何をしsudo !!
、どのように?
!!
はコマンドの一部についてさらに尋ねます。
!!
行うかを尋ねています。もう1人は、これを行う方法を求めています。
sudo !!
数の多い2つの回答が何をするのかを具体的に説明し、実際に何を!!
行うのかを具体的に説明する2つの答えがあります。
私はあまり経験のないUbuntuのユーザーであり、私は使用していsudo
ます。
何をしsudo !!
、どのように?
!!
はコマンドの一部についてさらに尋ねます。
!!
行うかを尋ねています。もう1人は、これを行う方法を求めています。
sudo !!
数の多い2つの回答が何をするのかを具体的に説明し、実際に何を!!
行うのかを具体的に説明する2つの答えがあります。
回答:
sudo bang bang
コマンドラインインターフェイスで作業する場合、非常に便利なコマンドです。
一部のLinuxディストリビューションでは、管理者ではなくユーザーとしてログインします。
ですから、管理者として何かをするためには、コマンドをsudo
(スーパーユーザーDO)で進めなければなりません。/ bang-bang(!= bang)は、基本的に前のコマンドを繰り返すために使用できるショートカットです。
したがって、典型的なシナリオは、コマンドを試行し、それを行うには管理者である必要があるというメッセージをキックバックすることです。そのため、sudo
スーパーユーザー/管理者としてそのコマンドを実行するために入力するか、システムに指示された以前のコマンドを使用するように指示するsudo !!
場所を入力することができます!!
。UfH
他にも多くのバングコマンドがあります。それらのリストとそれらが何であるかの説明については、Linux Bang Commandsをチェックしてください。Bashhistoryおよびbangコマンドも参照してください。
sudo
、コマンドラインを入力して確認する方が安全です。
sudo
何かとエラーが出るので、あなたはすぐにしたいsudo
こと
sudo
「スーパーユーザーが行う」ことを意味するのではなく、コマンドを行うのと同じように実行しますsu
(suはユーザーの切り替え(スーパーユーザーではない)を意味します)。つまり、root(-u
スイッチ)だけでなく、任意のユーザーとしてコマンドをsudoできます。同じsu [user] [-c command]
su
はそのようなことを意味しません。参照linux.die.net/man/1/su、gnu.org/software/coreutils/manual/html_node/su-invocation.html、linfo.org/su.htmlを。代替ユーザーを意味する必要があります。
このbang bang (!!)
コマンドは、ターミナルで入力した前のコマンドを繰り返し実行するためのショートカットです。このコマンドは、特定のアクションを実行するために管理者権限が必要であることを忘れた場合に非常に役立ち、入力するだけでスーパーユーザー権限で繰り返し実行できます。
sudo !!
!!
最後に実行したコマンドを取得します。
apt-get update
出力は次のようになります。
E:ロックファイル/ var / lib / apt / lists / lockを開け
ませんでした-開く(13:許可が拒否されました)E:ディレクトリ/ var / lib / apt / lists /を
ロックできませんE:ロックファイル/ var /を開けませんでしたlib / dpkg / lock-open(13:Permission denied)
E:管理ディレクトリ(/ var / lib / dpkg /)をロックできません。rootですか?
その後、sudo !!
コマンドを実行すると、出力は
Hit http://extras.ubuntu.com saucy/main amd64 Packages
Get:3 http://mirror.sov.uk.goscomb.net saucy-updates Release.gpg [933 B]
Hit http://ppa.launchpad.net saucy Release
Hit http://extras.ubuntu.com saucy/main i386 Packages
Hit http://mirror.sov.uk.goscomb.net saucy Release
99% [Waiting for headers] [Waiting for headers] [Waiting for headers]
つまり、!!
一部は前の実行コマンドapt-get update
を取得し、先行するsudo
部分はコマンドをスーパーユーザー権限で実行します。
そして、どのようにsudo !!
スーパーユーザー権限を持つ前のコマンドが実行されます意味、通常、我々は、端末上で入力されたすべてのコマンドが中に保存されているcommand history
.RUN history
端末上のコマンドを、それはあなたがentered.Theすべてのコマンドを示し!!
に参加しsudo !!
、最後のコマンドが格納されているグラブコマンド履歴で、全体sudo !!
が管理者権限で最後のコマンドを実行します。
他のいくつかのbangコマンドは、このブログ投稿で説明されています。
mkdir LongDirectoryName
とcd !$
しない限り、仕事に別々に発行する必要がありLongDirectoryName
、前のコマンドの最後の言葉となっていることを起こります。シェルの履歴目的のために、mkdir LongDirectoryName; cd !$
1つのコマンドです。歴史との相互作用!!
、!^
および!$
シェルが実際に完全に見る前に処理された最後のコマンドを使用します!
。以下に例を示します。実行history
すると、結合された行のコマンド;
が1つのコマンドとして記憶されることがわかります。
その答えには2つの部分があります!!
し、sudo
!!
「履歴拡張」と呼ばれるシェルの機能の一部です(Ubuntuの場合、これはおそらくbashですが、zshやcshなどの他のシェルもこれをサポートしています)。シェルが「プレースホルダー」を一連の単語に展開するという点で、他の展開と同様に動作します。一方でfoo*
「foo」で始まるすべてのファイルのリストに展開されるだろう、!!
前のコマンドラインの内容を拡大します。
$ echo foobar
foobar
$ echo !!
echo foobar
$ !!
echo foobar
他の展開と同様に、これは完全にシェルによって実行されるため、!!
他のコマンドの後に入力した場合、このコマンドはがあったことを認識せず!!
、前のコマンドラインのみを表示します。(他の展開とは異なり、履歴展開は、コマンドが履歴に保存される前!!
に行われます。つまり、置き換えられたコマンドラインの代わりに履歴に保存されます。)
このsudo
コマンドは、セキュリティポリシーによって許可が与えられている場合、別のユーザーとしてコマンドを実行できます(デフォルトはで設定されています/etc/sudoers
)。
デフォルトでは、Ubuntuではルートパスワードは設定されていません。システム管理タスクを実行するために、インストール中に作成されたユーザーにsudo権限が付与されます。このユーザーは、シェルの先頭にを追加するだけで、rootとしてコマンドを実行できsudo
ます。パッケージ管理など、一部のGUIプログラムもsudoメカニズムを使用します。
sudo
root(または別のユーザー)として他のコマンドを実行できる理由は、sudoバイナリ(/usr/bin/sudo
)のパーミッションにsetuidビットが設定されており、rootに属しているためです。setuidビットが設定された(バイナリ)実行可能ファイルは、その所有者の権限で実行されます。これは、sudoが実際に呼び出したユーザーに関係なく、root権限で効果的に実行されることを意味します。sudoの内部セキュリティポリシーのみが、どのユーザーに何を許可するかを管理し、任意のユーザーが任意のことを実行できないようにします。
したがって、sudo !!
この場合は
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo !!
基本的に同じです
$ mount /dev/sdb1 /mnt
mount: only root can do that
$ sudo mount /dev/sdb1 /mnt
タイピングが少ない。どちらの場合でも、sudo mount /dev/sdb1 /mnt
はroot権限でそれを表示して実行するだけです。
!!
は歴史的拡張のための構文的に最も簡単でおそらく最も一般的な表現です。
お気付きかもしれませんが、最後に実行されたコマンドをに置き換えた後!!
、bashは2つのことを行います(デフォルトの構成で):
置換されたテキストを含む完全なコマンドが表示されます。
たとえば、コマンドがlshw -c video
実行されsudo !!
、次に実行する場合、履歴展開後のコマンドはsudo lshw -c video
です。
そのコマンドが実行されます。
通常、これらの2つのステップshopt histverify
は、デフォルトで未設定(shopt -u histverify
)になっているため、中断することなく、ユーザーと対話する機会がありません。
ただし、shopt histverify
(shopt -s histverify
)を有効にすると、履歴展開の動作が異なります。
(histverify
シェルオプションは、readlineライブラリが使用されている場合にのみ有効になりますが、Ubuntuまたは他のGNU / Linuxシステムでbashをインタラクティブに使用する場合、これは基本的に常に有効です。)
histverify
シェルオプションが有効かどうかに関係なく、履歴展開は他の多くのシェル展開とは異なります。他のシェル展開では、実行される前に展開されたコマンドは表示されません。対話式と非対話式の両方で(シェルスクリプトなどで)使用することを目的とした他の展開とは異なり、履歴展開はほとんどの場合インタラクティブに使用されます。