'sudo su -' vs 'sudo -i' vs 'sudo / bin / bash' - kdy záleží na tom, co se používá, nebo vůbec?

200

Když dělám něco, co vyžaduje zadání kořenů v desítkách časů za sebou, dávám přednost přechodu na relaci kořenové relace. V různých výukových programů a návodů Použil jsem na internetu, vidímsudo susudo su -sudo -i asudo /bin/bash se používá k otevření kořenové relaci, ale nejsem jasné, o rozdílu mezi nimi a kdy nebo pokud je tento rozdíl důležitý.

Může mi to někdo vymazat?

    
dané Paul 13.11.2013 00:30

1 odpověď

262

Chcete-li to vysvětlit, potřebujete vědět, co programy dělají:

su - Příkazsu se používá k přepnutí na jiného uživatele ( s witch u ser) vyvolání příkazu bez parametru. su se vás zeptá na heslo uživatele, které má přepnout, po zadání hesla, které jste přepnuli do prostředí uživatele.

sudo -sudo je určen pro spuštění jednoho příkazu s oprávněním uživatele root. Ale na rozdíl odsu vás vyzve k zadání hesla aktuálního uživatele. Tento uživatel musí být v souboru sudoers (nebo skupině, která je v souboru sudoers). Ve výchozím nastavení Ubuntu "pamatuje" vaše heslo na 15 minut, takže nemusíte zadávat své heslo pokaždé.

bash - textové rozhraní pro interakci s počítačem. Je důležité pochopit rozdíl mezi přihlašovacími, non-přihlašovacími, interaktivními a neinteraktivními shelly:

  • přihlašovací shell: Přihlašovací shell vás přihlásí do systému jako určený uživatel, což je nezbytné pro uživatelské jméno a heslo. Když se k přihlášení do virtuálního terminálu dostanete po úspěšném přihlášení do přihlašovacího shellu, ctrl + alt + F1
  • bez přihlašovacího shellu: shell, který je spuštěn bez přihlašování, je pro něj nezbytným uživatel aktuálně přihlášen. Když otevřete grafický terminál v gnome, je to nepřístupný shell.
  • interaktivní shell: shell (přihlašovací nebo nepřihlášený), kde můžete interaktivně zadávat nebo přerušovat příkazy. Například terminál GNOME.
  • neinteraktivní shell: A (sub) shell, který pravděpodobně běží z automatizovaného procesu. Nevidíte žádný vstup ani výstup.

sudo su Volásudo příkazemsu. Bash se nazývá interaktivní shell bez přihlášení. Takže bash provádí pouze.bashrc. Můžete vidět, že po přepnutí do kořenového adresáře jste stále ve stejném adresáři:

[email protected]:~$ sudo su
[email protected]:/home/user#

sudo su - Tentokrát je to přihlašovací shell, takže/etc/profile,.profile a.bashrc jsou spuštěny a zjistíte se v domovském adresáři root s prostředím root. p>

sudo -i Je to téměř stejné jakosudo su - Volba -i (simulovat počáteční přihlášení) spouští shell definovaný položkou databáze databáze cílového uživatele jako přihlašovací shell. To znamená, že soubory související s přihlášením, jako například.profile,.bashrc nebo.login, budou čteny a provedeny shell.

sudo /bin/bash To znamená, že volátesudo příkazem/bin/bash. /bin/bash je spuštěn jako non-login shell, takže všechny dot-soubory nejsou spuštěny, ale bash sám čte.bashrc volajícího uživatele. Vaše prostředí zůstává stejné. Váš domov nebude kořenovým domovem. Takže jste kořen, ale v prostředí volajícího uživatele.

sudo -s přečte proměnnou$SHELL a spustí obsah. Pokud$SHELL obsahuje/bin/bash, vyvolásudo /bin/bash (viz výše).

Zkontrolujte: Chcete-li zkontrolovat, zda se nacházíte v přihlašovacím shellu nebo ne (funguje pouze v bash, protožeshopt je vestavěný příkaz):

shopt -q login_shell && echo 'Login shell' || echo 'No login shell'
    
odpověděl chaos 13.11.2013 10:43