Repository 32bit  Forum
Repository 64bit  Wiki

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.

profili bash e path predefiniti

Messaggioda -sf » dom set 25, 2011 19:33

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
-sf
Linux 2.4
Linux 2.4
 
Messaggi: 209
Iscritto il: ven lug 15, 2011 0:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

Re: profili bash e path predefiniti

Messaggioda targzeta » lun set 26, 2011 7:44

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: profili bash e path predefiniti

Messaggioda miklos » lun set 26, 2011 10:22

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?!?!?!?!
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1200
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.12.6
Desktop: openbox 3.5.2

Re: profili bash e path predefiniti

Messaggioda Paoletta » lun set 26, 2011 10:24

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
Paoletta
Staff
Staff
 
Messaggi: 3893
Iscritto il: dom apr 24, 2005 23:00
Località: Varese
Slackware: 13.1
Desktop: fluxbox

Re: profili bash e path predefiniti

Messaggioda -sf » lun set 26, 2011 14:09

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
Avatar utente
-sf
Linux 2.4
Linux 2.4
 
Messaggi: 209
Iscritto il: ven lug 15, 2011 0:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

Re: profili bash e path predefiniti

Messaggioda miklos » lun set 26, 2011 14:40

-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
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1200
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.12.6
Desktop: openbox 3.5.2

Re: profili bash e path predefiniti

Messaggioda targzeta » lun set 26, 2011 16:35

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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: profili bash e path predefiniti

Messaggioda targzeta » lun set 26, 2011 16:37

-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
Linux Registered User #454438
Se pensi di essere troppo piccolo per fare la differenza, prova a dormire con una zanzara -- Dalai Lama
20/04/2013 - Io volevo Rodotà
Avatar utente
targzeta
Iper Master
Iper Master
 
Messaggi: 6149
Iscritto il: gio nov 03, 2005 14:05
Località: Carpignano Sal. (LE) <-> Pisa
Nome Cognome: Emanuele Tomasi
Slackware: current
Kernel: latest stable
Desktop: IceWM

Re: profili bash e path predefiniti

Messaggioda miklos » lun set 26, 2011 16:45

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:
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1200
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.12.6
Desktop: openbox 3.5.2

Re: profili bash e path predefiniti

Messaggioda -sf » lun set 26, 2011 21:30

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:
Avatar utente
-sf
Linux 2.4
Linux 2.4
 
Messaggi: 209
Iscritto il: ven lug 15, 2011 0:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

Re: profili bash e path predefiniti

Messaggioda miklos » lun set 26, 2011 22:27

-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).
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1200
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.12.6
Desktop: openbox 3.5.2

Re: profili bash e path predefiniti

Messaggioda -sf » mer set 28, 2011 0:57

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:
Avatar utente
-sf
Linux 2.4
Linux 2.4
 
Messaggi: 209
Iscritto il: ven lug 15, 2011 0:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

Re: profili bash e path predefiniti

Messaggioda miklos » mer set 28, 2011 1:49

-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
ho visto cose che voi astemi non potete immaginare
miklos
Linux 3.x
Linux 3.x
 
Messaggi: 1200
Iscritto il: lun lug 16, 2007 16:39
Località: Roma
Slackware: 14.1 64bit
Kernel: 3.12.6
Desktop: openbox 3.5.2

Re: profili bash e path predefiniti

Messaggioda -sf » mer set 28, 2011 19:21

Chiarissimo!

Grazie mille :thumbright:
Avatar utente
-sf
Linux 2.4
Linux 2.4
 
Messaggi: 209
Iscritto il: ven lug 15, 2011 0:20
Slackware: 13.37
Kernel: 2.6.37.6-smp
Desktop: KDE

Re: profili bash e path predefiniti

Messaggioda 414N » gio set 29, 2011 8:11

-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.
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE


Torna a Slackware

Chi c’è in linea

Visitano il forum: Google [Bot] e 2 ospiti