Newsgroup: it.comp.os.linux.iniziare
Titolo: Link simbolici e hard link

In pratica, che differenza c'e'?
Empiricamente ho visto che un hard link di un eseguibile (in 
cartella utente insieme ad altri file di configurazione, ecc.) 
in /usr/bin non funzionava, mentre il link simbolico dello 
stesso si'.
Venendo da windows e' una differenza che fatico a cogliere...
Ciao, grazie!
Ale_B
-- 
Postato da Alice Newsgroup: lo usi da web ma con le funzioni del newsreader 
http://newsgroup.alice.it
Gerarchie it, italia, it-alt, tin, it.binari. Unico!

 In pratica, che differenza c'e'?
http://www.lnf.infn.it/computing/doc/AppuntiLinux/a2103.html#index6825
r
-- 
Sulla tosticita' della Slackware ovvero Quale distro?
distribuzioni sedicenti amichevoli e realmente tali:
http://www.umpf.net/ramapage/

 Ale_B
-- 
Ciao.
Alessandro 
"Ubuntu" - an African word, meaning "Slackware is too hard for me".

 In pratica, che differenza c'e'?
http://linuxgazette.net/105/pitcher.html
-- 
Bye, Lem
Ceterum censeo ISLAM esse delendum
__________________________________
Combatti l'AIDS col tuo computer: 
http://fightaidsathome.scripps.edu/

 Ale_B

 Non e` possibile. Cosa hai fatto? Come hai creato il link?
Sono su due partizioni diverse :
guargua@guargua-desktop:~$ ln /usr/bin/cdparanoia prova
ln: creating hard link `prova' => `/usr/bin/cdparanoia': Invalid
cross-device link
Come ha fatto a sfuggirti, o sfugge qualcosa a me?


 ...
Rileggendo quanto scritto credo si doveroso correggere.
E` possibile che un file abbia piu` nomi perche` il file
e` identificato dal suo inode che e` identificato da un 
numero e non crea nessun problema se in una directory 
vengano associati piu` nomi per lo stesso inode. Ed ognuno 
di questo nomi e` un hard link od un collegamento fisico.

 
-----> sudo ln ̴/dir-programma/eseguibile /usr/bin/nomeeseguibile
	(da shell, posizione diversa da dir-programma,
	non si puo' richiamare il programma solo col nome)
-----> sudo ln -s ̴/dir-programma/eseguibile /usr/bin/nomeeseguibile
	(qui si').
Premetto che non sono due partizioni diverse...
Mah, era solo curiosita', intanto grazie!
Ale_B

 ...
Quali sono i messaggi di errore che hai ottenuto?
Riporta l'esatto input e gli esatti messaggi di errore 
facendo copia & incolla da una shell.

 Come ha fatto a sfuggirti, o sfugge qualcosa a me?
Ti sfugge che il tipo non da` nessuna indicazione su cosa ha 
fatto ne` sull'errore che ha ricevuto.

 
L'esatto input l'ho praticamente messo in un altro messaggio:
-----> sudo ln ?/sw/swiftfox/swiftfox /usr/bin/swiftfox
-----> sudo ln -s ?/sw/swiftfox/swiftfox /usr/bin/swiftfox
(non ricordo se per fare il secondo mi ha chiesto anche il "-f", ma mi 
pare che abbia lasciato che fosse la shell a chiedermi di sovrascrivere 
il link... Comunque l'unica differenza significativa e' stata il "-s"...)
L'output di preciso non lo ricordo, e visto che ora funziona preferirei 
non incasinare le cose, ma era del tipo "unable to load application.ini" 
o qualcosa del genere, cioe' un file che stia nella directory 
dell'eseguibile e che probabilmente l'eseguibile cerca come percorso 
_relativo_ da se stesso e che l'hard link, nella _propria_ directory, 
non trova, mentre il symbolic link si affida ai percorsi relativi 
dell'eseguibile originali... Almeno questo e' quello che ho pensato io... :)
Ale_B

 e che probabilmente...
Hai inquadrato il problema (o quasi).
Ma resta il fatto che il problema non sta nel hard link ma nel 
programma che lanci o dal modo in cui lo lanci. 
Ma trovo che proseguire sulla lines se e` sbagliato il programma 
od e` sbagliata la sua installazione non sia molto produttivo.
Piuttosto c'e` una grossa falla da correggere nelle cose che dici
Quando crei un file (p.e. con touch nome.1) prima il sistema
crea il file e poi fa un hard link e gli attribuisce un nome. 
Se fai un hard link a quel file (p.e. con ln nome.1 nome.2) 
allora avrai un file con due nomi e non avrai modo di sapere 
quale era il nome originario perche` questi due hard link sono
indistinguibili.(*)
Se invece fai un soft link crei un file contenente il path 
del file originario; sta a te inserire un path assoluto od 
un path relativo. 
Con:
----> sudo ln -s /sw/swiftfox/swiftfox /usr/bin/swiftfox
hai inserito un path assoluto e tutto il tuo discorso sul
motivo per cui il link simbolico sembra funzionare non regge.
Il motivo invece e` che se invochi il programma con lo hard 
link allora e` come se avessi digitato /usr/bin/swiftfox
e (senza sapere cosa succede in realta`) il programma crede 
di trovare i file di configurazione in /usr/bin.
Se invece invochi il programma con il link simbolico ci si
accorge che /usr/bin/swiftfox e` un link simbolico, si va a 
vedere che il vero nome del programma e` /sw/swiftfox/swiftfox 
e tutto funziona.
(*) In realta` potresti vedere i timestamp ma dato che non viene 
registrato il momento in cui hai creato il file questo non puo` 
dare indicazioni valide. (Senza contare che il file in origine 
poteva aver un terzo nome che poi hai cancellato)

 | # ls -s /dir/file /usr/bin/file
s/ls/ln/g
Mi scuso anche per altri refusi.