profili bash e path predefiniti

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
-sf
Linux 2.x
Linux 2.x
Messaggi: 209
Iscritto il: ven 15 lug 2011, 1:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

profili bash e path predefiniti

Messaggio da -sf »

Salve a tutti, ho combinato qualche casino con i path predefiniti di bash :roll:

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 :D

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: profili bash e path predefiniti

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: profili bash e path predefiniti

Messaggio 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 :D
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?!?!?!?!
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Re: profili bash e path predefiniti

Messaggio 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 :D
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

Avatar utente
-sf
Linux 2.x
Linux 2.x
Messaggi: 209
Iscritto il: ven 15 lug 2011, 1:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

Re: profili bash e path predefiniti

Messaggio 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

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: profili bash e path predefiniti

Messaggio 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

Codice: Seleziona tutto

env | grep PATH
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

Codice: Seleziona tutto

export PATH=/pippo
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:

Codice: Seleziona tutto

export PATH=$PATH:/pippo
ciau
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: profili bash e path predefiniti

Messaggio 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 :D
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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

Avatar utente
targzeta
Iper Master
Iper Master
Messaggi: 6631
Iscritto il: gio 3 nov 2005, 14:05
Nome Cognome: Emanuele Tomasi
Slackware: 64-current
Kernel: latest stable
Desktop: IceWM
Località: Carpignano Sal. (LE) <-> Pisa

Re: profili bash e path predefiniti

Messaggio 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
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: profili bash e path predefiniti

Messaggio 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 :thumbright:
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
-sf
Linux 2.x
Linux 2.x
Messaggi: 209
Iscritto il: ven 15 lug 2011, 1:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

Re: profili bash e path predefiniti

Messaggio 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 :roll: :lol: )

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! :lol:
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 :lol:

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: profili bash e path predefiniti

Messaggio 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 :roll: :lol: )
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).
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
-sf
Linux 2.x
Linux 2.x
Messaggi: 209
Iscritto il: ven 15 lug 2011, 1:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

Re: profili bash e path predefiniti

Messaggio 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 :thumbright:

ilmich
Master
Master
Messaggi: 1645
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 15.0 64bit
Kernel: 5.15.27
Desktop: kde
Località: Roma

Re: profili bash e path predefiniti

Messaggio 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 :D

ciau
#LiveSimple and #ProgramThings
https://github.com/ilmich
http://ilmich6502.it/

Avatar utente
-sf
Linux 2.x
Linux 2.x
Messaggi: 209
Iscritto il: ven 15 lug 2011, 1:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

Re: profili bash e path predefiniti

Messaggio da -sf »

Chiarissimo!

Grazie mille :thumbright:

Avatar utente
414N
Iper Master
Iper Master
Messaggi: 2922
Iscritto il: mer 13 feb 2008, 16:19
Slackware: 15.0
Kernel: 5.15.19
Desktop: KDE5
Località: Bulagna
Contatta:

Re: profili bash e path predefiniti

Messaggio 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

Codice: Seleziona tutto

export PATH=/usr/bin:$PATH
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

Codice: Seleziona tutto

. /etc/profile
oppure l'equivalente

Codice: Seleziona tutto

source /etc/profile
in modo da provocare l'aggiornamento delle variabili d'ambiente rieseguendo lo script /etc/profile.

Rispondi