Jestem użytkownikiem Ubuntu z niewielkim doświadczeniem i korzystam z niego sudo
.
Co robi sudo !!
i jak?
command-line
sudo
RamHS
źródło
źródło
!!
część polecenia.!!
zrobić i jak. Drugi chce metody, aby to zrobić.sudo !!
robi, i są dwie odpowiedzi, które faktycznie dokładnie wyjaśniają, co!!
robi.Odpowiedzi:
!!
w bash jest aliasem dla poprzedniego polecenia (patrz Designers ). Ponownie uruchamia poprzednie polecenie zsudo
uprawnieniami.źródło
!
polecenia zwykle nie są dostępne w skryptach bash (tylko w sesjach interaktywnych). Można je wyłączyć za pomocąset +o histexpand
.sudo bang bang
jest bardzo przydatnym poleceniem podczas pracy w interfejsie wiersza poleceń.Niektóre dystrybucje systemu Linux wymagają logowania jako użytkownik zamiast administratora.
Tak więc, aby zrobić coś administracyjnie, musisz wykonać polecenie
sudo
(Super-User DO), które mówi systemowi: „zrobisz to, ponieważ tak powiedziałem”. / bang-bang (! = bang) to w zasadzie skrót, którego można użyć do powtórzenia poprzedniego polecenia.Typowy scenariusz polega na tym, że wypróbujesz polecenie, które odtwarza komunikat mówiący, że musisz być administratorem, aby to zrobić. Możesz więc wpisać polecenie,
sudo
aby uruchomić tę komendę jako superużytkownik / administrator, lub wpisaćsudo !!
gdzie!!
mówi systemowi, aby użył poprzedniej komendy, która została podjęta. UfHIstnieje wiele innych poleceń huku. Aby zapoznać się z ich listą i objaśnieniami, sprawdź Polecenia Linux Bang , zobacz także historię Bash i polecenia Bang
źródło
sudo
i spojrzeć na wiersz poleceń.sudo
czymś i dostajesz błąd, więc od razu chcesz tosudo
zrobićsudo
nie oznacza „super-user do”, działa tak samo jak polecenie , jakbym to zrobiłsu
(su oznacza zmianę użytkownika [a nie superużytkownika]); tzn. możesz wykonywać polecenia sudo jak każdy użytkownik, nie tylko root (-u
przełącznik); to samo dotyczysu [user] [-c command]
su
tego nie oznacza. Zobacz linux.die.net/man/1/su , gnu.org/software/coreutils/manual/html_node/su-invocation.html , linfo.org/su.html . Powinno to oznaczać użytkownika zastępczego .bang bang (!!)
Polecenie jest skrótem do powtarzać i uruchomić poprzednie polecenie wprowadzoną w terminalu. To polecenie jest bardzo przydatne, gdy zapomnisz, że potrzebujesz uprawnień administratora, aby wykonać określone działanie, i pozwala powtórzyć je z uprawnieniami superużytkownika, wpisując,!!
pobiera polecenie ostatniego uruchomienia.Na przykład:
Dane wyjściowe będą
Następnie, jeśli uruchomimy
sudo !!
polecenie, wyjście będzieCo oznacza, że
!!
część pobiera poprzednie polecenie uruchomienia,apt-get update
a poprzedniasudo
część powoduje uruchomienie polecenia z uprawnieniami administratora.I jak to
sudo !!
działa poprzednie polecenie z uprawnieniami administratora środków, zazwyczaj wszystkie polecenia mamy wpisane na terminalu są przechowywane wcommand history
.Runhistory
poleceń w terminalu, pokazuje wszystkie polecenia, które entered.The!!
udział wsudo !!
zgarnięcia ostatnie polecenie przechowywane w historii poleceń i całośćsudo !!
uruchamia ostatnie polecenie z uprawnieniami administratora.Niektóre inne polecenia Bang zostały wyjaśnione w tym poście na blogu .
źródło
mkdir LongDirectoryName
icd !$
muszą być wydawane osobno, aby działały, chyba żeLongDirectoryName
zdarzy się, że jest to ostatnie słowo poprzedniego polecenia. Do celów historii powłokimkdir LongDirectoryName; cd !$
jest jednym poleceniem. Historia interakcji z!!
,!^
i!$
użyj ostatniego polecenia, które powłoka faktycznie w pełni przetworzyła przed zobaczeniem!
. Oto przykład. Po uruchomieniuhistory
zobaczysz, że polecenia w połączonej linii;
są zapamiętywane jako jedno polecenie.Odpowiedź składa się z dwóch części:
!!
isudo
!!
jest częścią funkcjonalności powłoki (w przypadku Ubuntu jest to prawdopodobnie bash, ale obsługują to również inne powłoki, takie jak zsh lub csh), zwane „rozszerzaniem historii”. Zachowuje się podobnie jak inne rozszerzenia, ponieważ powłoka rozwija „symbol zastępczy” do zestawu słów. Chociażfoo*
zostanie rozwinięty do listy wszystkich plików zaczynających się od „foo”,!!
zostanie rozszerzony do zawartości poprzedniego wiersza poleceń.Podobnie jak inne rozszerzenia, odbywa się to w całości przez powłokę, więc jeśli wpiszesz
!!
po jakimś innym poleceniu, to polecenie nie będzie wiedziało, że było!!
, ale zobaczy tylko poprzednią linię poleceń. (W przeciwieństwie do innych rozszerzeń, rozszerzanie historii następuje przed zapisaniem polecenia w historii, czyli zamiast!!
zastąpionego wiersza polecenia zostanie zapisany w historii).sudo
Komenda umożliwia wykonywanie poleceń jako inny użytkownik, pod warunkiem, że uprawnienia przyznane przez ar polityki bezpieczeństwa (domyślnie jest skonfigurowany/etc/sudoers
).Domyślnie hasło roota nie jest ustawione w Ubuntu. Aby wykonać zadania administracyjne systemu, użytkownik utworzony podczas instalacji otrzymuje uprawnienia sudo. Ten użytkownik może teraz wykonać dowolne polecenie w powłoce jako root, po prostu przygotowując
sudo
. Niektóre programy GUI również używają mechanizmu sudo, na przykład do zarządzania pakietami.Powodem, dla którego
sudo
można wykonywać inne polecenia jako root (lub inny użytkownik), jest to, że sudo binary (/usr/bin/sudo
) ma ustawiony bit setuid w swoim uprawnieniu i należy do roota. Dowolny (binarny) plik wykonywalny z ustawionym bitem setuid jest uruchamiany z uprawnieniami właściciela. Oznacza to, że sudo działa skutecznie z uprawnieniami root, bez względu na to, który użytkownik tak naprawdę to nazwał. Tylko on polityk bezpieczeństwa wewnętrznego sudo zarządza tym, który użytkownik jest dozwolony, i uniemożliwia arbitralnym użytkownikom wykonywanie dowolnych czynności.Tak więc w przypadku
sudo !!
tych środkówjest w zasadzie identyczny z
po prostu mniej pisania. W obu przypadkach sudo po prostu widzi
mount /dev/sdb1 /mnt
i uruchamia je z uprawnieniami administratora.źródło
!!
jest najprostszym składniowo i prawdopodobnie najczęstszym wyrażeniem ekspansji historii .Jak zapewne zauważyłeś, po podstawieniu ostatniego wykonanego polecenia
!!
, bash robi dwie rzeczy (w domyślnej konfiguracji):Wyświetlane jest pełne polecenie z podstawionym tekstem.
Na przykład, jeśli twoje polecenie było
lshw -c video
i uruchomisz jesudo !!
dalej, to polecenie po rozwinięciu historii tosudo lshw -c video
.To polecenie jest uruchamiane.
Zwykle te dwa kroki odbywają się bez przerwy i bez możliwości interakcji z użytkownikiem, ponieważ
shopt histverify
domyślnie jest ono wyłączone (shopt -u histverify
).Jeśli jednak włączysz
shopt histverify
(shopt -s histverify
), rozszerzenie historii działa inaczej:(Zauważ, że
histverify
opcja powłoki działa tylko wtedy, gdy używana jest biblioteka readline - ale gdy używasz basha interaktywnie na Ubuntu lub innym systemie GNU / Linux, zasadniczo tak jest zawsze.)Bez względu na to, czy
histverify
opcja powłoki jest włączona , ekspansja historii różni się od wielu innych rozszerzeń powłoki. Inne rozszerzenia powłoki nie pokazują rozwiniętego polecenia przed jego uruchomieniem. W przeciwieństwie do innych rozszerzeń, które mają być używane zarówno interaktywnie, jak i nieinteraktywnie (na przykład w skrypcie powłoki), ekspansja historii jest prawie zawsze używana interaktywnie.źródło
! jest używany w Linuksie do skrótów związanych z historią. Więc, !! po prostu uruchomi poprzednio wykonane polecenie.
Jest to bardzo pomocne w przypadkach, gdy albo zapomnisz umieścić sudo przed poleceniem, które tego wymaga, albo otrzymasz Odmowę uprawnień lub coś takiego po prostu zrób
i jesteś skończony.źródło
!! powtórzy i uruchomi poprzednią komendę, a wraz z sudo da komendzie uprawnienia roota. (Nie ma go na stronie podręcznika? !! Nie widzę go tam.)
źródło
man --pager='less -p "Event Designators"' bash