Ich bin ein Benutzer von Ubuntu mit wenig Erfahrung und habe verwendet sudo
.
Was macht sudo !!
und wie?
command-line
sudo
RamHS
quelle
quelle
!!
Teil des Befehls.!!
machen und wie. Der andere möchte eine Methode, um dies zu tun.sudo !!
funktioniert, und es gibt zwei Antworten, die genau erklären, was!!
funktioniert.Antworten:
!!
in bash ist ein Alias für den vorherigen Befehl (siehe Event Designators ). Daher wird der vorherige Befehl mitsudo
Berechtigungen erneut ausgeführt.quelle
!
Befehle sind normalerweise nicht in Bash-Skripten verfügbar (nur in interaktiven Sitzungen). Sie können mit deaktiviert werdenset +o histexpand
.sudo bang bang
ist ein sehr nützlicher Befehl, wenn Sie in der Befehlszeilenschnittstelle arbeiten.In einigen Linux-Distributionen müssen Sie sich als Benutzer und nicht als Administrator anmelden.
Um etwas Administratives zu tun, müssen Sie den Befehl mit
sudo
(Super-User DO) ausführen, der dem System mitteilt, dass Sie dies tun werden, weil ich es gesagt habe. / bang-bang (! = bang) ist im Grunde eine Verknüpfung, mit der Sie den vorherigen Befehl wiederholen können.Ein typisches Szenario ist also, dass Sie einen Befehl versuchen und eine Meldung zurücksendet, dass Sie ein Administrator sein müssen, um dies zu tun. Sie können also entweder eingeben
sudo
, um diesen Befehl als Superuser / Administrator auszuführen, oder Sie können eingeben,sudo !!
wo!!
das System angewiesen wird, den vorherigen Befehl zu verwenden, der versucht wurde. UfHEs gibt viele andere Knallbefehle. Eine Liste dieser Befehle und Erklärungen zu ihrer Funktionsweise finden Sie unter Linux-Befehlssprung. Weitere Informationen finden Sie unter Bash-Verlauf und Befehlssprung
quelle
sudo
die Befehlszeile einzugeben.sudo
etwas und erhalten eine Fehlermeldung, und Sie möchtensudo
es sofortsudo
bedeutet nicht , „Super-User tun“, es geht so tut einen Befehl , als ob ich getan hattesu
(su Sinn Schalter Benutzer [und nicht die Super - User]); Das heißt, Sie können sudo-Befehle als jeder Benutzer ausführen, nicht nur als root (-u
switch). Gleiches gilt fürsu [user] [-c command]
su
aber nicht für so etwas. Siehe linux.die.net/man/1/su , gnu.org/software/coreutils/manual/html_node/su-invocation.html , linfo.org/su.html . Es sollte Ersatzbenutzer bedeuten .Der
bang bang (!!)
Befehl ist eine Verknüpfung, mit der Sie den zuvor in Ihr Terminal eingegebenen Befehl wiederholen und ausführen können . Dieser Befehl ist sehr nützlich, wenn Sie vergessen haben, dass Sie Administratorrechte benötigen, um eine bestimmte Aktion auszuführen, und Sie können ihn mit Superuser-Rechten wiederholen, indem Sie einfach Folgendes eingeben:!!
schnappt sich den letzten Befehl.Zum Beispiel:
Die Ausgabe wird sein,
Wenn wir danach den
sudo !!
Befehl ausführen , wird die Ausgabe seinDas bedeutet, dass
!!
part den vorherigen Ausführungsbefehl aufnimmtapt-get update
und der vorherigesudo
Teil den Befehl mit Superuser-Rechten ausführt.Und wie das
sudo !!
Ausführen des vorherigen Befehls mit Superuser-Rechten bedeutet, werden normalerweise alle auf dem Terminal eingegebenen Befehle imcommand history
.Run-history
Befehl auf dem Terminal gespeichert. Es werden alle von Ihnen eingegebenen Befehle angezeigt. Der!!
Teil in dersudo !!
packt den zuletzt gespeicherten Befehl imsudo !!
befehlshistorie läuft und das ganze den letzten befehl mit adminrechten.Einige andere Knallbefehle werden in diesem Blog-Beitrag erklärt .
quelle
mkdir LongDirectoryName
undcd !$
müssen separat an die Arbeit ausgestellt werden, es sei denn ,LongDirectoryName
das letzte Wort des vorhergehenden Befehls haben passiert gewesen. Aus Gründen der Shell-Historiemkdir LongDirectoryName; cd !$
ist dies ein Befehl. Verlaufsinteraktion mit!!
,!^
und!$
verwenden Sie den letzten Befehl, den die Shell tatsächlich vollständig verarbeitet hat, bevor sie angezeigt wird!
. Hier ist ein Beispiel. Wenn Sie ausführen, werdenhistory
Sie feststellen, dass Befehle in einer Zeile, die durch verbunden;
ist, als ein Befehl gespeichert werden.Die Antwort besteht aus zwei Teilen:
!!
undsudo
!!
ist Teil der Funktionalität der Shell (im Falle von Ubuntu ist dies wahrscheinlich bash, aber auch andere Shells wie zsh oder csh unterstützen dies), die als "history expansion" bezeichnet wird. Es verhält sich ähnlich wie andere Erweiterungen, da die Shell den 'Platzhalter' zu einer Reihe von Wörtern erweitert. Währendfoo*
auf eine Liste aller Dateien, die mit 'foo' beginnen,!!
erweitert wird, wird auf den Inhalt der vorherigen Befehlszeile erweitert.Wie bei anderen Erweiterungen wird dies vollständig von der Shell ausgeführt. Wenn Sie also
!!
nach einem anderen Befehl einen Befehl eingeben, wird diesem Befehl nicht bewusst, dass es einen gab!!
, sondern nur die vorherige Befehlszeile angezeigt. (Im Gegensatz zu anderen Erweiterungen erfolgt die Verlaufserweiterung, bevor ein Befehl im Verlauf gespeichert wird, dh, statt!!
der ersetzten Befehlszeile wird er im Verlauf gespeichert.)Der
sudo
Befehl ermöglicht die Ausführung von Befehlen als anderer Benutzer, sofern die Berechtigungen von der Sicherheitsrichtlinie gewährt werden (Standardeinstellung ist in konfiguriert/etc/sudoers
).Standardmäßig bleibt das root-Passwort in Ubuntu nicht gesetzt. Zur Durchführung von Systemadministrationsaufgaben werden dem während der Installation erstellten Benutzer Sudo-Rechte gewährt. Dieser Benutzer kann jetzt einen beliebigen Befehl auf der Shell als root ausführen, indem er diesen einfach voranstellt
sudo
. Einige GUI-Programme verwenden ebenfalls den sudo-Mechanismus, zum Beispiel die Paketverwaltung.Der Grund, warum
sudo
andere Befehle als root (oder als anderer Benutzer) ausgeführt werden können, ist, dass in sudo binary (/usr/bin/sudo
) das setuid-Bit in seiner Berechtigung gesetzt ist und zu root gehört. Jede (binäre) ausführbare Datei mit gesetztem setuid-Bit wird mit den Berechtigungen ihres Besitzers ausgeführt. Dies bedeutet, dass sudo effektiv mit Root-Berechtigungen ausgeführt wird, unabhängig davon, welcher Benutzer es tatsächlich aufgerufen hat. Nur die internen Sicherheitsrichtlinien von sudo verwalten, welcher Benutzer was darf und verhindern, dass willkürliche Benutzer willkürliche Dinge tun.Also im Falle
sudo !!
dieses Mittelsist im Grunde identisch mit
nur weniger tippen. In beiden Fällen sieht sudo es nur
mount /dev/sdb1 /mnt
und führt es mit root-Berechtigungen aus.quelle
!!
ist der syntaktisch einfachste und wahrscheinlich gebräuchlichste Ausdruck für die Historienerweiterung .Wie Sie vielleicht bemerkt haben
!!
, führt bash nach dem Ersetzen des zuletzt ausgeführten Befehls zwei Dinge aus (in der Standardkonfiguration):Der vollständige Befehl mit dem ersetzten Text wird Ihnen angezeigt.
Wenn Ihr Befehl beispielsweise lautete
lshw -c video
und Sie alssudo !!
Nächstes ausführen , lautet der Befehl nach der Protokollerweiterungsudo lshw -c video
.Dieser Befehl wird ausgeführt.
Normalerweise erfolgen diese beiden Schritte ohne Unterbrechung und ohne die Möglichkeit einer Benutzerinteraktion, da sie
shopt histverify
standardmäßig deaktiviert sind (shopt -u histverify
).Wenn Sie jedoch
shopt histverify
(shopt -s histverify
) aktivieren, funktioniert die Verlaufserweiterung anders:(Beachten Sie, dass die
histverify
Shell-Option nur wirksam wird, wenn die readline-Bibliothek verwendet wird. Wenn Sie jedoch bash interaktiv auf einem Ubuntu-System oder einem anderen GNU / Linux-System verwenden, ist dies im Wesentlichen immer der Fall.)Unabhängig davon, ob die
histverify
Shell-Option aktiviert ist oder nicht , unterscheidet sich die Verlaufserweiterung von vielen anderen Shell-Erweiterungen. Andere Shell-Erweiterungen zeigen den erweiterten Befehl nicht an, bevor er ausgeführt wird. Im Gegensatz zu anderen Erweiterungen, die sowohl interaktiv als auch nicht interaktiv verwendet werden sollen (z. B. in einem Shell-Skript), wird die Verlaufserweiterung fast immer interaktiv verwendet.quelle
! wird in Linux für geschichtsbezogene Verknüpfungen verwendet. Damit, !! Führt einfach den zuvor ausgeführten Befehl aus.
Dies ist sehr hilfreich, wenn Sie entweder vergessen haben, sudo vor einen Befehl zu setzen, der dies erfordert, oder wenn Sie die Berechtigung "Verweigert" erhalten, oder wenn Sie etwas Ähnliches tun
und du bist fertig.quelle
!! Wiederholt den vorherigen Befehl und führt ihn aus. Mit sudo erhält der Befehl das Root-Privileg. (Es ist nicht in der Manpage? !! Ich kann es dort nicht sehen.)
quelle
man --pager='less -p "Event Designators"' bash