# [help] modificare il path di root e di user

## sanzo77

salve sono nuovo del forum e ho appena istallato gentoo 2006.1. Qualche problemino qua e la, ma devo dire che molti la paventavano + del dovuto. Non sono esperto, ma molte cose funzionano o sono riuscito a farle funzionare.

Ma veniamo al topic: ho bisogno di modificare il PATH in modo che la modifica si rifletta sia su root che sugli altri utenti. Ho letto sulla guida il discorso sulla dir /etc/env.d ma non ho capito quale sarebbe il file che contiene il PATH di base. Per capirci mi serve di aggiungere il . (dir corrente) nel path in modo da far partire gli script sh che creo senza bisogno del ./ .

Help me plz 

tnx

----------

## MeMyselfAndI

credo che basti aggiungere un file e settare la varibile path con le aggiunte che vuoi fare; ci pensera' poi env-update a fare il merge di tutte le variabili che trova li dentro.

----------

## sanzo77

gia' fatto, funziona per gli utenti ma non per root...

----------

## Luca89

 *sanzo77 wrote:*   

> gia' fatto, funziona per gli utenti ma non per root...

 

per root usa la variabile ROOTPATH (all'interno dei file in /etc/env.d).

----------

## sanzo77

oook grazie mille, lo faccio subito tnx  :Very Happy: 

 :Confused:   :Confused:   niente da fare... root non ne vuole sapere... 

ma forse ho sbagliato io :

io ho creato un file /etc/env.d/99mine con all'interno:

```

PATH="."

ROOTPATH="."

```

ora se faccio export $ROOTPATH ottengo tutto sto popo' di roba:

```

declare -x ANT_HOME="/usr/share/ant-core"

declare -x CLASSPATH="."

declare -x COLORTERM="gnome-terminal"

declare -x CONFIG_PROTECT="/usr/share/X11/xkb /usr/kde/3.5/share/config /usr/kde/3.5/env /usr/kde/3.5/shutdown /usr/share/config"

declare -x CONFIG_PROTECT_MASK="/etc/java-config/vms/ /etc/env.d/java/ /etc/gconf /etc/terminfo"

declare -x CVS_RSH="ssh"

declare -x DBUS_SESSION_BUS_ADDRESS="unix:abstract=/tmp/dbus-8lpcIzGIjs,guid=6b534345509a02c36c504871e9460900"

declare -x DESKTOP_SESSION="gnome"

declare -x DESKTOP_STARTUP_ID=""

declare -x DISPLAY=":0.0"

declare -x EDITOR="/bin/nano"

declare -x GDK_USE_XFT="1"

declare -x GDMSESSION="gnome"

declare -x GDM_XSERVER_LOCATION="local"

declare -x GENERATION="2"

declare -x GNOME_DESKTOP_SESSION_ID="Default"

declare -x GNOME_KEYRING_SOCKET="/tmp/keyring-0jf4jR/socket"

declare -x GTK_RC_FILES="/etc/gtk/gtkrc:/home/sanzo/.gtkrc-1.2-gnome2"

declare -x G_BROKEN_FILENAMES="1"

declare -x G_FILENAME_ENCODING="UTF-8"

declare -x HOME="/root"

declare -x INFOPATH="/usr/share/info:/usr/share/binutils-data/i686-pc-linux-gnu/2.16.1/info:/usr/share/gcc-data/i686-pc-linux-gnu

/4.1.1/info:/usr/share/info/emacs-21"

declare -x JAVAC="/home/sanzo/.gentoo/java-config-2/current-user-vm/bin/javac"

declare -x JAVA_HOME="/home/sanzo/.gentoo/java-config-2/current-user-vm"

declare -x JDK_HOME="/home/sanzo/.gentoo/java-config-2/current-user-vm"

declare -x KDEDIRS="/usr"

declare -x LESS="-R -M --shift 5"

declare -x LESSOPEN="|lesspipe.sh %s"

declare -x LOGNAME="root"

declare -x LS_COLORS="no=00:fi=00:di=01;34:ln=01;36:pi=40;33:so=01;35:do=01;35:bd=40;

33;01:cd=40;33;01:or=01;05;37;41:mi=01;05;37;41:su=37;41:sg=30;43:tw=30;42:ow=34;42:st=37;44:

ex=01;32:*.tar=01;31:*.tgz=01;31:*.arj=01;31:*.taz=01;31:*.lzh=01;31:*.zip=01;31:*.z=01;31:*.Z=01;31:*.gz=01;31:

*.bz2=01;31:*.bz=01;31:*.tbz2=01;31:*.tz=01;31:*.deb=01;31:*.rpm=01;31:*.jar=01;31:*.rar=01;31:*.ace=01;31:*.zoo=01;31:

*.cpio=01;31:*.7z=01;31:*.rz=01;31:*.jpg=01;35:*.jpeg=01;35:*.gif=01;35:*.bmp=01;35:*.pbm=01;35:*.pgm=01;35:*.ppm=01;

35:*.tga=01;35:*.xbm=01;35:*.xpm=01;35:*.tif=01;35:*.tiff=01;35:*.png=01;35:*.mng=01;35:*.pcx=01;35:*.mov=01;

35:*.mpg=01;35:*.mpeg=01;35:*.m2v=01;35:*.mkv=01;35:*.ogm=01;35:*.mp4=01;35:*.m4v=01;35:*.mp4v=01;

35:*.qt=01;35:*.wmv=01;35:*.asf=01;35:*.rm=01;35:*.rmvb=01;35:*.flc=01;35:*.avi=01;35:*.fli=01;35:*.gl=01;35:*.dl=01;

35:*.xcf=01;35:*.xwd=01;35:*.pdf=00;32:*.ps=00;32:*.txt=00;32:*.patch=00;32:*.diff=00;32:*.log=00;32:*.tex=00;

32:*.doc=00;32:*.flac=01;35:*.mp3=01;35:*.mpc=00;36:*.ogg=00;36:*.wav=00;36:*.mid=00;36:*.midi=00;36:*.au=00;36:*.flac=00;36:*.aac=00;36:"

declare -x MANPATH="/usr/local/share/man:/usr/share/man:/usr/share/binutils-data/i686-pc-linux-gnu/2.16.1/man:/

usr/share/gcc-data/i686-pc-linux-gnu/4.1.1/man:/opt/blackdown-jdk-1.4.2.03/man:/etc/java-config/system-vm/man/:/usr/qt/3/doc/man"

declare -x OLDPWD

declare -x OPENGL_PROFILE="xorg-x11"

declare -x PAGER="/usr/bin/less"

declare -x PATH="/sbin:/bin:/usr/sbin:/usr/bin"

declare -x PRELINK_PATH_MASK="/usr/lib/gstreamer-0.10"

declare -x PWD="/home/sanzo"

declare -x PYTHONPATH="/usr/lib/portage/pym"

declare -x QMAKESPEC="linux-g++"

declare -x QTDIR="/usr/qt/3"

declare -x SESSION_MANAGER="local/gentoomith:/tmp/.ICE-unix/10430"

declare -x SHELL="/bin/bash"

declare -x SHLVL="2"

declare -x SSH_AGENT_PID="10450"

declare -x SSH_AUTH_SOCK="/tmp/ssh-fozNM10430/agent.10430"

declare -x TERM="xterm"

declare -x USER="root"

declare -x USERNAME="sanzo"

declare -x VMHANDLE="blackdown-jdk-1.4.2"

declare -x WINDOWID="35651665"

declare -x XAUTHORITY="/root/.xauth8NUnpC"

```

mentre se invece faccio export $PATH da root ottengo :

```

bash: export: `/sbin:/bin:/usr/sbin:/usr/bin': not a valid identifier

```

se lo faccio da user :

```

bash: export: `/usr/local/bin:/usr/bin:/bin:/opt/bin:/usr/i686-pc-linux-gnu/gcc-bin/4.1.1:/opt/blackdown-jdk-1.4.2.03/bin:

/opt/blackdown-jdk-1.4.2.03/jre/bin:/usr/kde/3.5/bin:/usr/qt/3/bin:.': not a valid identifier

```

non riesco a capire a questo punto se forse la variabile ROOTPATH dovrei dichiararla in un altro modo...

----------

## bender86

 *sanzo77 wrote:*   

> oook grazie mille, lo faccio subito tnx :D
> 
>  :?  :?  niente da fare... root non ne vuole sapere... 
> 
> ma forse ho sbagliato io :
> ...

 

Forse dovresti mettere

```

PATH="${PATH}:."

ROOTPATH="${ROOTPATH}:."

```

----------

## sanzo77

umh in teoria no... da quel che ho capito quando si fa env-update si fa un merge di tutti quanti, non c'e' bisogno di concatenare con $PATH

----------

## syntaxerrormmm

Scusate, io sarò anche ignorante, ma modificare la path presente in /etc/profile per root e in .bash_profile per gli utenti no?

----------

## sanzo77

 *syntaxerrormmm wrote:*   

> Scusate, io sarò anche ignorante, ma modificare la path presente in /etc/profile per root e in .bash_profile per gli utenti no?

 

ho provato, ho inserito il . in entrambi i rami dell'if (dove testa se l'utente è root o meno), ma niente per root non funziona. A tale proposito non riesco neanche a capire x quale motivo non veda gli alias che sono definiti in fondo a /etc/profile... umh c'è qualcosa di strano

----------

## Luca89

Per prima cosa sconsiglio di modificare /etc/profile, per aggiungere variabili esiste già la directory /etc/env.d e per aggiungere altre cose (tipo alias) esiste già /etc/profile.d. Detto questo, nei file in /etc/env.d non bisogna preoccuparsi di unire le variabili, per esempio io uso:

```
[ ~ ] # cat /etc/env.d/99my 

PATH=/home/luca/dev/bin

ROOTPATH=/home/luca/dev/bin

[ ~ ] # 
```

non:

```
[ ~ ] # cat /etc/env.d/99my 

PATH="${PATH}:/home/luca/dev/bin"

ROOTPATH="${PATH}:/home/luca/dev/bin"

[ ~ ] # 
```

A fare il merge delle variabili ci pensa lo script "env-update", quindi dopo aver fatto una modifica a tali file (etc/env.d) è necessario eseguire:

```
# env-update && source /etc/profile
```

In modo che tutti i cambiamenti vengano applicati alla shell in uso, inoltre segnalo che dipende come viene chiamata la shell, a volte non viene caricato il file /etc/profile, quindi può capitare che non trovate gli alias o le altre cose per questo motivo.

P.S: sanzo77: potresti modificare il tuo post con i vari "declare", ha linee troppo lunghe che rovinano l'impaginazione della pagina, prova a spezzarle.

----------

## .:chrome:.

@sanzo77:

fai il sacrosanto favore a tutti di editare il tuo post e inserire qualche rimando a capo.

non credo che la gente abbia tanta voglia di stare a scorrere orizzontalmente tutto il forum per leggere i tuoi messaggi

basterebbe un po' du buon senso, delle volte...

----------

## sanzo77

avete ragione edito subito. --> FATTO

@Luca89

grazie mille, una volta fatto env-update && source etc etc e' andato tutto a posto. tnx

edito ancora per aggiungere un nuovo problemino:

ho fatto env-update && source /etc/profile e tutto funziona, pure gli alias (il profile e' rimasto quello di default eh). Ora pero' ogni volta che apro una shell sono nella condizione di prima e se non rido' env-update && source /etc/profile non si risolve. ora provo a riavviare, ma in teoria env-update dovrebbe rendere persistenti le modifiche giusto?

----------

## sanzo77

scusate se insisto, ma il problema persiste   :Sad:   sono ore che smanetto leggo e provo ma nulla. Dalla guida di gentoo leggo

 *Quote:*   

> Codice 5: Aggiornare l'ambiente
> 
> # env-update && source /etc/profile
> 
> Nota: Il comando sopra aggiorna solo le variabili nel terminale corrente e nelle nuove console. Se si sta lavorando in X11 si dovrà digitare source /etc/profile in ogni altro terminale che si aprirà o se si restarterà X così che tutti i nuovi terminali abbiano le nuove variabili. Se si usa un login manager passare a root e digitare /etc/init.d/xdm restart. Saltando questo ultimo comando si dovrà fare il logout e di nuovo il login per X per ottenere i nuovi valori delle variabili. 

 

quindi in teoria io dovrei dare il comando di cui sopra, sloggarmi, riloggarmi e tutto dovrebbe andare... invece cosi' non e'. Qualcuno ha idee in proposito ? Grazie   :Wink: 

----------

## .:chrome:.

 *sanzo77 wrote:*   

> ma in teoria env-update dovrebbe rendere persistenti le modifiche giusto?

 

più o meno

la questione è che tu stai passando dalla via sbagliata.

perché non cacci le modifiche in bashrc? in quel modo sei certo che verranno applicate a tutti gli utenti (che usano una bash)

OT: io spero che lo scopo per cui stai facendo questo non sia evitare di scrivere ./ prima di lanciare eseguibili nella propia home directory (o dovunque essi siano)

i path sono così da sempre, e si quelli sono calibrati i criteri di sicurezza ed i meccanismi di protezione.

se hai esigenza di avere eseguibili raggiungibili da chiunque, allora devi usare /usr/local/{bin,sbin} e nient'altro. al di fuori di queste directory non si dovrebbe dare nemmeno il permesso di esecuzione

----------

## Luca89

 *sanzo77 wrote:*   

> ma in teoria env-update dovrebbe rendere persistenti le modifiche giusto?

 

env-update va a generare il file /etc/profile.env che poi viene caricato da /etc/profile

 *k.gothmog wrote:*   

> 
> 
> più o meno
> 
> la questione è che tu stai passando dalla via sbagliata.
> ...

 

perchè? i file in /etc/env.d sono fatti apposta per modificare le variabili d'ambiente

 *Quote:*   

> quindi in teoria io dovrei dare il comando di cui sopra, sloggarmi, riloggarmi e tutto dovrebbe andare... invece cosi' non e'. Qualcuno ha idee in proposito

 

Ti ho già detto che in base a che tipo di console lanci a volte non viene caricato /etc/profile, quindi ti consiglio o di settare nel tuo terminale "usa shell di login" oppure metti nel file ~/.bashrc la riga:

```
source /etc/profile
```

In modo che vengano caricate le variabili d'ambiente.

----------

## sanzo77

@luca89

il problema è che tale soluzione funziona solo per l'utente che si logga, se fai su e diventi root il profile non viene riletto...

----------

## Luca89

 *sanzo77 wrote:*   

> @luca89
> 
> il problema è che tale soluzione funziona solo per l'utente che si logga, se fai su e diventi root il profile non viene riletto...

 

usa:

```
$ su -
```

oppure metti in /root/.bashrc:

```
source /etc/profile
```

----------

## sanzo77

 *Luca89 wrote:*   

>  *sanzo77 wrote:*   @luca89
> 
> il problema è che tale soluzione funziona solo per l'utente che si logga, se fai su e diventi root il profile non viene riletto... 
> 
> usa:
> ...

 

non esiste quel file in root e se lo creo non lo legge... faro' su -, magari faccio un alias "su" a "su -"

----------

