Portál AbcLinuxu, 29. října 2025 11:09
Ahoj, můžete mi prosím poradit? Přihlásím se jako uživatel marek, v home dir mám v souboru .bashrc vytvořný alias mapama='/root/mujnazevprogramu/go.sh' Když zavolám mapama tak mi to napíše Permission denied což je správně, jenže pokud zavolám sudo mapama tak to napíše sudo: mapama: command not found Mám špatně vytvořený alias? jak to můžu opravit? Díky
Řešení dotazu:
sudo:
.bashrc:
alias mapama='sudo /root/mujnazevprogramu/go.shAliasy jesou čistě jen záležitostí bashe v interaktivním módu. Pokud je vkládáte do
.bashrc ve svém domovském adresáři, nemůže ovlivnit cizí shelly a už vůbec sudo, které hledá „skutečný“ spustitelný soubor.
/usr/local/sbin/název. Pak bude příkaz dostupný pro všechny.
/usr/local/bin (pokud chcete mít tento příkaz v PATH i jako běžný uživatel), nebo v /usr/local/sbin (pokud chcete tento příkaz mít v rootově PATH).
Takže tedy:
sudo ln -s /root/mujnazevprogramu/go.sh /usr/local/sbin/mapamaVýhodou tohoto řešení je možnost použití SUID/SGID rogramů. Program uvidí (v
argv[0]) cestu k symlinku, ne k programu samotnému.
sudo. Buď ho můžete umístit do /usr/local/bin, nebo do Vačeho uživatelského adresáře se spustitelnými programy (např. ~/.local/bin).
#! /bin/bash exec sudo /root/mujnazevprogramu/go.sh
Díky za návod, nevím kterou variantu zvolit potřebuji aby script v /root/.... fyzicky zůstal a script mohl spustit výhradně a pouze root (sudo) .
.bashrc. V praxi to pak vypadá takhle:
# SystemD aliases alias sy="sudo systemctl" alias sys="sudo systemctl start" alias syx="sudo systemctl stop" alias syr="sudo systemctl restart" alias sye="sudo systemctl enable" alias syd="sudo systemctl disable" alias syl="sudo systemctl status" alias aptitude="sudo aptitude" alias suvim="sudo vim" alias visudo="sudo visudo"Pokud to bude něco, co bude používat více uživatelů nebo budete chtít příkaz
mapama volat z programů, zvolte poslední. Ten symlink tady nepomůže – to jsem tam asi napsal omylem.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.