Portál AbcLinuxu, 12. května 2025 12:42
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.