Vraag Een map toevoegen aan $ PATH in CentOS?


We hebben net onze nieuwe server (s) bij de hand en CentOS draait allemaal op hen. Na het succesvol installeren van Ruby Enterprise Edition zou ik nu de REE / bin willen toevoegen (te vinden op /usr/lib/ruby-enterprise/bin) om het de standaard Ruby-interpreter op de server te maken.

Ik heb het volgende geprobeerd, dat het alleen aan de huidige shellsessie toevoegt:

export PATH=/usr/lib/ruby-enterprise/bin:$PATH

Wat zou de juiste aanpak zijn blijvend het toevoegen van deze map aan $ PATH voor alle gebruikers. Ik ben momenteel ingelogd als root.

Bij voorbaat dank!


68
2018-01-15 03:15


oorsprong




antwoorden:


Het is geen goed idee om te bewerken /etc/profile voor dit soort dingen, omdat je al je wijzigingen verliest wanneer CentOS een update voor dit bestand publiceert. Dit is precies wat /etc/profile.d is voor:

# echo 'pathmunge /usr/lib/ruby-enterprise/bin' > /etc/profile.d/ree.sh
# chmod +x /etc/profile.d/ree.sh

Log weer in en geniet van uw (veilig) geactualiseerde PATH:

# echo $PATH
/usr/lib/ruby-enterprise/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin
# which ruby
/usr/lib/ruby-enterprise/bin/ruby

In plaats van opnieuw in te loggen, kunt u het profiel opnieuw laden:

# . /etc/profile

Hiermee wordt het $PATH variabel.


101
2017-08-22 16:29



~/.profile is ook een andere geldige optie - Zypher
Ja, voor een enkele gebruiker. Maar de vraag ging over het wijzigen van PATH voor allemaal gebruikers. - Mike
@Mike Wat is dit pathmunge-commando? - Nickolai Leschov
@NickolaiLeschov Ik ben er vrij zeker van dat het gewoon een pad naar $ PATH toevoegt. - Mike
@NickolaiLeschov een functie die is gedefinieerd in / etc / profile - CrazyPheel


Na het advies van fmonk gevolgd te hebben, ging ik kijken /etc/bashrc, waar ik merkte dat het zei: "Milieu dingen komen in / etc / profile." Ik ging naar binnen kijken /etc/profile, Ik zag dit:

pathmunge () {
    if ! echo $PATH | /bin/egrep -q "(^|:)$1($|:)" ; then
       if [ "$2" = "after" ] ; then
          PATH=$PATH:$1
       else
          PATH=$1:$PATH
       fi
    fi
}

[...]

# Path manipulation
if [ "$EUID" = "0" ]; then
    pathmunge /sbin
    pathmunge /usr/sbin
    pathmunge /usr/local/sbin
fi

Om mijn probleem op te lossen, heb ik gewoon toegevoegd pathmunge /usr/lib/ruby-enterprise/bin onder de if-verklaring. Dit loste mijn probleem op.


9
2018-01-15 04:10



Kan iemand uitleggen wat de "$EUID" = "0" betekent in deze context? - Eli
EUID 0 betekent dat de gebruiker root is. - bbaja42
U had /etc/profile.d moeten gebruiken. Zie mijn antwoord hieronder. - Mike
Overweeg het antwoord van @MikeConigliaro als correct te accepteren. Zijn weg is de juiste. Het is ontwikkeld om op die manier te werken. Bekijk de bestanden in /etc/profile.d/ map en je zult het merken. Zoals hij al zei, kan een systeemupdate uw oplossing ongedaan maken. - Caio Cunha


"Een interactieve login-shell is gestart   na een succesvolle login, gebruikmakend van   / bin / login, door de / etc / passwd te lezen   het dossier. Deze shell-aanroep is normaal   leest / etc / profile en zijn privé   equivalent ~ / .bash_profile op   opstarten.

Een interactieve niet-login shell is   normaal gestart op de opdrachtregel   gebruikmakend van een schaalprogramma (bijv.   [prompt] $ / bin / bash) of door de / bin / su   commando. Een interactieve niet-login   shell wordt ook gestart met een terminal   programma zoals xterm of konsole van   in een grafische omgeving. Deze   type shell-aanroep normaal   kopieert de bovenliggende omgeving en vervolgens   leest het ~ / .bashrc-bestand van de gebruiker voor   extra opstartconfiguratie   instructies."    http://www.linuxfromscratch.org/blfs/view/6.3/postlfs/profile.html

Daarom zou ik geen omgevingsvariabelen in bashrc plaatsen, omdat het niet alleen tegen de gebruikelijke conventie is, maar je ook je bashrc-variabelen mist wanneer je een terminal vanuit een grafische Desktop-omgeving aanroept.

Op Redhat in de /etc/profile Ik vond deze opmerking:

"Systeem brede aliassen en functies zouden moeten gaan in / etc / bashrc   omgevingsvariabelen en opstartprogramma's moeten worden gebruikt   ~ / .Bash_profile. Persoonlijke aliassen en functies moeten worden gebruikt   ~ / .Bashrc."

Dus als u omgevingsvariabelen op gebruikersbasis wilt instellen, doet u dit in het .bash_profile-bestand van de gebruiker.

Op weg naar de .bash_profile Ik lees:

"Persoonlijke omgevingsvariabelen en opstartprogramma's.

Persoonlijke aliassen en functies moeten in ~ / .bashrc staan. Systeembreed   omgevingsvariabelen en opstartprogramma's bevinden zich in / etc / profile.   Systeem brede aliassen en functies zijn in / etc / bashrc. "

Conclusie 
Als u alleen root wilt om programma's te zien die zich bevinden, bijvoorbeeld in /sbinIk zou dat pad toevoegen aan root's .bash_profile het dossier. Maar als u wilt dat elke gebruiker ziet welke root-specifieke programma's op uw box zijn geïnstalleerd, zou ik dat doen /sbin in /etc/.profile. Nu kan elke gebruiker het voltooien van het tabblad gebruiken om te zoeken naar rootspecifieke programma's en zo nodig rechten te verhogen.

Speciaal geval: SSH
Wanneer ssh wordt gestart met een opdrachtregel, wordt een interactieve inlogshell gestart. Maar in dit geval /etc/profile wordt niet gelezen. Toen ik omgevingsvariabelen definieerde in de .bash_profile bestand van elke gebruiker met ssh.


3
2017-11-08 21:34





SORRY heeft de vraag verkeerd geïnterpreteerd de volgende asnwer is voor het profiel van een GEBRUIKER het achterlaten in het geval het iemand helpt

wijzig. bash_profile

nano ~/.bash_profile

dan ergens in het bestand je paden toevoegen / wijzigen gescheiden door:

 PATH=$PATH:$HOME/bin:/your/path
 export PATH

laad vervolgens je profiel opnieuw

source ~/.bash_profile

of log uit en log opnieuw in

als je PATH aanvinkt, zou het je nieuw toegevoegde paden moeten bevatten

echo $PATH

1
2017-10-31 08:53





U kunt omgevingsvariabelen instellen in een .rc-bestand; voor bash-shells (volgens mij de meest gebruikelijke en standaard in CentOS) heeft elke gebruiker een bestand met de naam .bashrc in zijn homedirectory.

Voeg de opdracht PATH = / usr / lib / ruby-enterprise / bin: $ PATH toe aan dit bestand om het in te stellen voor een bepaalde gebruiker.

Om het in te stellen voor alle gebruikers (zoals u vermeldt), wijzigt u het in / etc / bashrc (de standaard .bashrc in de basismap van elke gebruiker zou dit bestand moeten genereren, maar u moet dat dubbel controleren).


0
2018-01-15 03:49