/ etc / environment ne fonctionne pas

J'utilise Ubuntu 12.04.

Récemment, j'ai supprimé accidentellement python , entraînant la désinstallation d'un grand nombre de packages. Je les ai réinstallés, mais maintenant j'ai des problèmes.

 $ echo $PATH /home/paul/bin:/usr/local/bin:/usr/bin:/bin:/usr/games:/home/paul/.rvm/bin 

Notez qu'il n'y a pas de /sbin ou /usr/local/sbin !

Je n'ai aucune idée de comment c'est arrivé!

Ainsi,

 $ sudo apt-get autoremove -y ... dpkg: warning: 'ldconfig' not found in PATH or not executable ... $ sudo shutdown now sudo: shutdown: command not found. 

Je suis allé chercher. /etc/environment (que je n'ai pas touché) a

 $ cat /etc/environment PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games" 

J'ai redémarré (quelques fois). Pourquoi mon path n'a pas /sbin ?

METTRE À JOUR

J'ai essayé de créer un nouvel user

 $ sudo adduser paul-test $ su -- paul-test $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

Aussi,

 $ sudo su $ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games 

Donc quelque chose est en train de tuer /sbin pour moi.

J'ai vérifié .bashrc .

 PATH=$PATH:$HOME/.rvm/bin # Add RVM to PATH for scripting 

Et .profile

 PATH="$HOME/bin:$PATH" 

Il n'y a pas ~/.bash_profile ou ~/.bash_login .

FYI

C'est le même problème décrit ici et ici et beaucoup d'autres endroits.

Ils traitent le symptôme de apt-get ne fonctionne pas, plutôt que de corriger le vrai problème de no /sbin .

Le PATH peut être défini dans n'importe quel

  • ~/.bashrc
  • ~/.profile
  • ~/.bash_profile
  • ~/.bash_login
  • /etc/profile
  • /etc/environment
  • /etc/bash.bashrc

Les files lus dépendent du type de session bash que vous utilisez. Ce que vous voulez faire est grep pour PATH dans tous ces files.

 $ grep PATH ~/.bashrc ~/.profile ~/.bash_profile ~/.bash_login \ /etc/profile /etc/environment /etc/bash.bashrc 

J'ai une petite fonction astucieuse pour ce genre de problème:

 grep_bash(){ for f in ~/.bashrc ~/.profile ~/.bash_profile ~/.bash_login \ /etc/profile /etc/environment /etc/bash.bashrc; do [ -e $f ] && grep -H "$@" $f; done } 

Je l'ai dans mon .bashrc donc chaque fois que quelque chose d'étrange se passe, je l'utilise pour searchr la string pertinente dans tous les files de configuration possibles. Par exemple:

 $ grep_bash PATH 

Comme note secondaire, ne pas avoir /sbin et /usr/sbin dans le PATH d'un user normal est une pratique courante pour la plupart des dissortingbutions. Il n'y a aucune raison pour un user normal d'avoir ces directorys dans leur path. Je viens de vérifier sur un server Debian et Ubuntu et une machine SuSe et seul Ubuntu semble append /sbin au path d'un user normal et il le fait dans /etc/environment . Les deux autres ne l'ajoutent que si l'user est root.