Pagina 1 di 1
profili bash e path predefiniti
Inviato: dom 25 set 2011, 20:33
da -sf
Salve a tutti, ho combinato qualche casino con i path predefiniti di bash
Sostanzialmente qualsiasi comando io dia mi risponde con un bel "command not found".
Ho cercato informazioni ma il risultato è stato quello di confondermi ulteriormente le idee; partendo dall'inizio ho trovato sotto /etc il file "profile" che, da quanto ho capito, contiene una serie di informazioni fra le quali i path predefiniti.
Oltre a questo ho trovato fonti che mi parlavano di un ".bash_profile", contenuto nella propria home e con una funzione analoga a quello descritto poco sopra.
Altro file simile: ".bashrc".
Ora perdonate la mia niubbagine... ma nel momento in cui io da shell (bash) vado a dare per esempio un "ls", lui va ricercare tal comando in /usr/bin ed esegue quello che trova riportandomi l'output a schermo, giusto? Questo percorso lo stabilisce quale file? ".bash_profile", "profile" (in /etc) o quale altro?
Sono venuto inoltre a conoscenza di un fantomatico comando "source", qual'è la sua funzione?
Grazie

Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 8:44
da targzeta
Il percorso dove andare a pescare i programmi viene determinato dalla variabile d'ambiente PATH (dai 'echo $PATH'). Per capire come viene settata questa variabile e da chi, eventualmente viene modificata, leggi il manuale della bash, dove, all'inizio, cita:
bash(1) ha scritto: When bash is invoked as an interactive login shell, or as a non-interactive shell with the --login option, it first reads and executes commands from the file /etc/profile, if that file exists. After reading that file, it looks for ~/.bash_profile, ~/.bash_login, and ~/.profile, in that order, and reads and executes commands from the first one that exists and is readable. The --noprofile option may be used when the shell is started to inhibit this behavior.
When a login shell exits, bash reads and executes commands from the file ~/.bash_logout, if it exists.
When an interactive shell that is not a login shell is started, bash reads and executes commands from ~/.bashrc, if that file exists. This may be inhibited by using the --norc option. The --rcfile file option will force bash to read and execute commands from file instead of ~/.bashrc.
Le shell di login sono quelle generalmente invocate al tuo login, ma più in generale:
bash(1) ha scritto:A login shell is one whose first character of argument zero is a -, or one started with the --login option.
Le shell interattive invece sono, ad esempio, quelle che hai nei terminali virtuali sotto X:
bash(1) ha scritto: An interactive shell is one started without non-option arguments and without the -c option whose standard input and error are both connected to terminals (as determined by isatty(3)), or one started with the -i option. PS1 is set and $- includes i if bash is interactive, allowing a shell script or a startup file to test this state.
Per finire, il comando 'source', sempre dal man della bash:
Codice: Seleziona tutto
source filename [arguments]
Read and execute commands from filename in the current shell
environment and return the exit status of the last command
executed from filename. If filename does not contain a slash,
file names in PATH are used to find the directory containing
filename. The file searched for in PATH need not be executable.
When bash is not in posix mode, the current directory is searched
if no file is found in PATH. If the sourcepath option to the
shopt builtin command is turned off, the PATH is not searched.
If any arguments are supplied, they become the positional parameters
when filename is executed. Otherwise the positional parameters
are unchanged. The return status is the status of the last command
exited within the script (0 if no commands are executed), and
false if filename is not found or cannot be read.
Quante cose ci dice un manuale

,
Emanuele
Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 11:22
da ilmich
scusate se vado forse un po' offtopic, ma colgo l'occasione per una domanda che mi hanno fatto e a cui non ho saputo dare risposta

qualcuno di voi sa perchè quantomento in slackware(nn so se è cosi' per tutte le distro), l'utente root non ha nel path la directory corrente mentre invece un utente normale si?!!??!!?
questioni di sicurezza o cosa?!?!?!?!
Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 11:24
da Paoletta
miklos ha scritto:scusate se vado forse un po' offtopic, ma colgo l'occasione per una domanda che mi hanno fatto e a cui non ho saputo dare risposta

qualcuno di voi sa perchè quantomento in slackware(nn so se è cosi' per tutte le distro), l'utente root non ha nel path la directory corrente mentre invece un utente normale si?!!??!!?
questioni di sicurezza o cosa?!?!?!?!
in /etc/profile:
Codice: Seleziona tutto
# For non-root users, add the current directory to the search path:
if [ ! "`id -u`" = "0" ]; then
PATH="$PATH:."
fi
penso per ragioni di sicurezza
Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 15:09
da -sf
Io però adesso mi ritrovo con una shell che non riconosce alcun comando oltre a "ls" o "cd".... non riesco nemmeno a far partire X o consultare un "man"
Come reimposto il path?
Mi ricordo di un "export" ma non so cosa passargli
Grazie
Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 15:40
da ilmich
-sf ha scritto:Salve a tutti, ho combinato qualche casino con i path predefiniti di bash
cosa hai fatto di preciso?!?!?!comunque per iniziare fai
con env ottieni tutte le variabili d'ambiente, con grep le filtri e vedi che ti dice.
altra prova del 9, vedi se in una shell non grafica e con un altro utente i percorsi funzionano correttamente.
se la risposta è affermativa.. allora il casino è localizzato nel tuo utente e quindi controlla i vari .bashrc e .bash_profile che eventualmente hai nella tua home(spina ha spiegato egregiamente cosa sono e come funzionano).
se vedi qualcosa tipo
allora il problema è li.
se lo hai fatto volontariamente per aggiungere nuovi percorsi dove cercare gli eseguibili, tieni presente che devi anche esportare il vecchio path. in altre parole:
ciau
Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 17:35
da targzeta
miklos ha scritto:scusate se vado forse un po' offtopic, ma colgo l'occasione per una domanda che mi hanno fatto e a cui non ho saputo dare risposta

qualcuno di voi sa perchè quantomento in slackware(nn so se è cosi' per tutte le distro), l'utente root non ha nel path la directory corrente mentre invece un utente normale si?!!??!!?
questioni di sicurezza o cosa?!?!?!?!
Sì, è per questioni di sicurezza. Ci sono due casi:
- directory corrente in cima al PATH: è il caso peggiore perché qualsisi utente potrebbe creare un comando malizioso chiamandolo, ad esempio '/tmp/ls', e se l'amministratore di sistema entra in /tmp ed esegue 'ls', ecco che viene eseguito il comando malizioso.
- directory corrente in mezzo o in fine PATH: in questi casi il rischio è minore, però pensa ad errori di digitazione o ad alias abituali dell'amministratore che sulla macchina non esistono. In questo caso un programma '/tmp/l' potrebbe essere eseguito dall'amministratore se entra in '/tmp' e sbaglia a digitare 'ls'. Oppure un programma '/tmp/ll' dove l'amministratore usa un alias 'll=ls -l' laddove sulla macchina non esiste.
Emanuele
Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 17:37
da targzeta
-sf ha scritto:Io però adesso mi ritrovo con una shell che non riconosce alcun comando oltre a "ls" o "cd".... non riesco nemmeno a far partire X o consultare un "man"
Come reimposto il path?
Mi ricordo di un "export" ma non so cosa passargli
Grazie
RTFM

. Alla seconda te lo dovevo!!!
Emanuele
Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 17:45
da ilmich
spina ha scritto:Sì, è per questioni di sicurezza. Ci sono due casi:
directory corrente in cima al PATH: è il caso peggiore perché qualsisi utente potrebbe creare un comando malizioso chiamandolo, ad esempio '/tmp/ls', e se l'amministratore di sistema entra in /tmp ed esegue 'ls', ecco che viene eseguito il comando malizioso.
directory corrente in mezzo o in fine PATH: in questi casi il rischio è minore, però pensa ad errori di digitazione o ad alias abituali dell'amministratore che sulla macchina non esistono. In questo caso un programma '/tmp/l' potrebbe essere eseguito dall'amministratore se entra in '/tmp' e sbaglia a digitare 'ls'. Oppure un programma '/tmp/ll' dove l'amministratore usa un alias 'll=ls -l' laddove sulla macchina non esiste.
Emanuele
grazie 1000

Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 22:30
da -sf
Sono iniziati i problemi nel momento in cui ho installato il pacchetto jdk e modificato i questi famosi PATH su suggerimenti esterni (probabilmente non troppo corretti

)
Comunque sono riuscito a modificare il "profile" in /etc riportandolo allo stato originario ed a decomentare tutto nel file ~/.bash_profile (non andava nemmeno rm e non potevo eliminare nulla).
Per il momento ho risolto!
spina ha scritto:RTFM

. Alla seconda te lo dovevo!!!
Emanuele
Non potevo nemmeno volendo!
Se davo un "man comando", mi restituiva "man: command not found"
Ora non mi resta che capire come impostare correttamente i percorsi...
Ma mi leggerò il manuale o spina mi picchia

Re: profili bash e path predefiniti
Inviato: lun 26 set 2011, 23:27
da ilmich
-sf ha scritto:Sono iniziati i problemi nel momento in cui ho installato il pacchetto jdk e modificato i questi famosi PATH su suggerimenti esterni (probabilmente non troppo corretti

)
perchè hai fatto una cosa del genere!?!?!?
te lo chiedo visto che il pacchetto della jdk ufficiale (quello che trovi in extra per intenderci) aggiusta lui le cose.
di solito il file /etc/profile non andrebbe toccato, se vuoi un posto dove poter modificare queste cose in modo generico per tutti gli utenti esiste la directory /etc/profile.d
se ci spulci dentro troverai tanti file eseguibili. questi file vengono eseguiti tutte le volte che apri un terminale.
nel caso da te indicato, il pacchetto ufficiale crea un file chiamato jdk.sh(o comunque qualcosa del genere) che aggiusta il path come dovrebbe essere per poter trovare gli eseguibili java(aprilo e vedi come fa).
Re: profili bash e path predefiniti
Inviato: mer 28 set 2011, 1:57
da -sf
avevo installato il pacchetto in /extra ma non riuscivo comunque a far girare nulla.
il jdk.sh che mi citi viene avviato da solo o deve essere fatto manualmente? forse il mio problema sta proprio li in quanto non ho mai lanciato quello .
Grazie per la dritta comunque

Re: profili bash e path predefiniti
Inviato: mer 28 set 2011, 2:49
da ilmich
-sf ha scritto:il jdk.sh che mi citi viene avviato da solo o deve essere fatto manualmente?
viene eseguito ogni volta che fai login (o, se sei in ambiente grafico, fai partire un terminale)
probabilmente hai tentato di lanciare un comando java subito dopo aver installato il pacchetto, non hai trovato nulla perchè avresti dovuto chiudere e riavviare il terminale.
in questo modo lo script in questione sarebbe stato eseguito e il path aggiornato.
comunque questo è un caso particolare, perchè la jdlk non si installa nei percorsi dove normalmente trovi gli eseguibili /bin /usr/bin e via dicendo, il pacchetto è contenuto tutto in un unica directory (con binari e librerie)
proprio per questo motivo si ha la necessità di aggiungere percorsi al path del sistema (un po' come si fa con windows quando installi la jdk).
l'unico modo per rendere universale questa aggiunta è creare degli script nel percorso che ti ho indicato io, perchè solo cosi' sei sicuro che qualsiasi utente, non appena si logga ha il path aggiornato
spero di essere stato abbastanza chiaro
ciau
Re: profili bash e path predefiniti
Inviato: mer 28 set 2011, 20:21
da -sf
Chiarissimo!
Grazie mille

Re: profili bash e path predefiniti
Inviato: gio 29 set 2011, 9:11
da 414N
-sf ha scritto:(non andava nemmeno rm e non potevo eliminare nulla)
[...]
Se davo un "man comando", mi restituiva "man: command not found"
Se il PATH è sballato e non vengono trovati i comandi che digiti, puoi sempre usare il path assoluto, in modo che la shell non debba cercare il comando all'interno di PATH. In questo caso, /usr/bin/rm e /usr/bin/man.
Puoi sempre aggiustare temporaneamente la questione al volo tramite un
che antepone /usr/bin al contenuto di PATH nella sessione shell corrente.
miklos ha scritto:probabilmente hai tentato di lanciare un comando java subito dopo aver installato il pacchetto, non hai trovato nulla perchè avresti dovuto chiudere e riavviare il terminale.
in questo modo lo script in questione sarebbe stato eseguito e il path aggiornato.
Senza chiudere e riavviare cose (alla Windows

), bastava eseguire
oppure l'equivalente
in modo da provocare l'aggiornamento delle variabili d'ambiente rieseguendo lo script /etc/profile.