Autore Topic: Differenze tra /proc e /sys ed accessibilità ai loro files...  (Letto 1872 volte)

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Allora, eccomi nuovamente a rompere le scatole! 8-)
Avrei bisogno di un paio di chiarimenti.
Prima di tutto vorrei capire se la cartella /proc (o file sistem virtuale /proc) sia una "cosa" caduta in disuso e sostituita da /sys oppure sto parlando di due cose differenti..
comunque, in entrambe le cartelle dovrebbero esserci alcune informazioni come che tipo di discho rigido ho sul pc, quanta memoria utilizzo e quanta ne ho, insomma informazioni generali sul mio hardware....
il punto è questo, l'accedere a tali files per ricavarne informazioni.
ho notato che questi file visualizzano un documento vuoto se provo ad aprirli con gedit, ma allo stesso tempo, aprendoli da terminale con nano visualizzano proprio ciò che cerco. Quindi la domanda nasce spontanea, che differenza esiste tra gedit e nano?
ho notato anche che utilizzando il comando
Codice: [Seleziona]
Print Access(nome_file)

mi viene restituito come messaggio
Codice: [Seleziona]
False
quindi presumo che il file sia inaccessibile (quindi non posso prelevare ciò che c'è scritto nel suo interno) ovviamente una nuova domanda nasce spontanea: come posso renderlo accessibile? mi tocca avviare per forza la mia applicazione da root con gtksu oppure esiste un modo?
Credo (dall'alto della mi ignoranza :-P) che sia possibile accedere a questi files anche senza essere root. Questo perchè avviando da utente normale il programma lsscsi, ricevo le informazioni che mi servono(e se non erro lsscsi legge proprio in /sys)
Ciao.

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #1 il: 29 Settembre 2009, 19:18:37 »
credo tu possa provare a leggerli con cat , ammesso che sia una buona idea farlo, comunque ti consiglio di chiedere in un forum della tua distro per avere risposte + esatte e professionali

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #2 il: 30 Settembre 2009, 16:34:52 »
In realtà in /proc i file che vedi sono dei link fisici, o cumnque strutture real-time con riferimento ai parametri di funzionamento correnti del sistema.
La lettura tramite applicazioni al di fuori della shell del kernel non sono ammesse, anche perchè la loro struttura, così come ho detto, varia in continuazione.
Strumenti di lettura che funzionano sono a riga di comando: "cat" e tutti gli editor in modalità testo, come ad esempio il "vi".
Leggere le informazioni con Gambas è impossibile!
Ma è possibile aggirare la cosa con alcuni accorgimenti:

1) direzionare una cat su un nostro file
2) leggere l'output del comando "cat"

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #3 il: 30 Settembre 2009, 23:42:23 »
Citazione
1) direzionare una cat su un nostro file
2) leggere l'output del comando "cat"

è ciò che ho fatto e ci sono riuscito, grazie.
Ho però un problemino, leggendo il file, mi ritrovo con una stringa di questo tipo: nome_periferica seguita con uno "\n". questo mi fa si che quando vado a leggere anche il file tipo_periferica e provo a stampare mi da questo:

nome_periferica
tipo_periferica

in pratica non li restituisce sulla medesima riga ma mi da due righe differenti.
Esiste un carattere di tabulazione che mi dia la possibilità di avere tutto sulla stessa riga?

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #4 il: 01 Ottobre 2009, 00:11:11 »
utilizza replace per convertire i caratteri \n con uno io + spazi

stringa=replace(stringa,"\n","  ")

+ o meno dovrebbe essere così

Offline md9327

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.840
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #5 il: 01 Ottobre 2009, 02:23:11 »
Fare attenzione anche al carattere "\r", che in Linux non viene utilizzato, come in Windoz, per il ritorno a capo, ma si può trovare qualche volta in mezzo alle stringhe di ritorno.
Di solito viene usata la tabulazione "\t"...

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #6 il: 01 Ottobre 2009, 11:24:38 »
Citazione
utilizza replace per convertire i caratteri \n con uno io + spazi  stringa=replace(stringa,"\n"," ")
+ o meno dovrebbe essere così

Funziona. Mi spiegheresti gentilmente in maniera più approfondita cosa fa replace?

Citazione
Fare attenzione anche al carattere "\r", che in Linux non viene utilizzato, come in Windoz, per il ritorno a capo, ma si può trovare qualche volta in mezzo alle stringhe di ritorno. Di solito viene usata la tabulazione "\t"...

Ma la tabulazione "\t" non "sposta il carattere semplicemente più a destra?
Il mio problema era che mi ritrovavo uno "\n" che ovviamente portava la seconda stringa su una nuova linea, oppure semplicemente non ho capito cosa volevi dirmi?

Ciao!

Offline Lux

  • Maestro Gambero
  • ****
  • Post: 416
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #7 il: 01 Ottobre 2009, 11:46:00 »
Ok, ho creato un piccolo modulo che cerca i device ottici (cioè lettori cd,dvd e masterizzatori) e ne tira fuori queste due informazioni:  marca e modello.
Codice: [Seleziona]
PUBLIC SUB ListOpticalDevice()   
DIM hDeviceName AS String 'Name optical device  
DIM hPatch AS String 'Name patch  
DIM hDirName AS String 'Is name of Directory found in "/sys/clas/scsi_device"    DIM hDirName2 AS String 'Is name of Directory found in "/sys/class/scsi_device/" & hDirName & "/device/block"  
DIM hVendor AS String 'Name of Vendor  
DIM hModel AS String 'Name of Model   hPatch = "/dev/"    
FOR EACH hDeviceName IN Dir("/dev", "sr*", gb.Device)      
FOR EACH hDirName IN Dir("/sys/class/scsi_device", "*", gb.Directory)           FOR EACH hDirName2 IN Dir("/sys/class/scsi_device/" & hDirName & "/device/block", "*", gb.Directory)              
IF hDirName2 = hDeviceName THEN  
SHELL "cat /sys/class/scsi_device/" & hDirName & "/device/vendor" TO hVendor                  
SHELL "cat /sys/class/scsi_device/" & hDirName & "/device/model" TO hModel  
print hPatch & hDeviceName & " (" & Replace(hVendor, "\n", "") & " " & Replace(hModel, "\n", "") & ")"              
ENDIF              
NEXT                  
NEXT        
NEXT      
CATCH        
print "No optical device detected!"  
END

vi va di dargli uno sguardo?

Offline skrokkio

  • Gamberetto
  • *
  • Post: 32
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #8 il: 05 Novembre 2009, 22:34:55 »
ciao , ho visto il codice scritto per riconoscere i dvd e cd ...
siccome sto anche io creando un piccolo programma in gambas mi servirebbe lo stesso codice che mi riconosca solo il masterizzatore e me lo scriva su una variabile di testo...con un output simile :"/dev/sr0"

la mia distro e' ubuntu
ciao e grazie

Offline Ceskho

  • Amministratore
  • Senatore Gambero
  • *****
  • Post: 3.778
  • Vi Veri Veniversum Vivus Vici
    • Mostra profilo
    • Pagina Personale
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #9 il: 05 Novembre 2009, 23:11:06 »
Citazione

Lux ha scritto:
Funziona. Mi spiegheresti gentilmente in maniera più approfondita cosa fa replace?


Replace è una semplice funzione che sostituisce una parte di una stringa con un'altra a tua scelta...nel tuo caso (o meglio nel caso di fsurfing) replace prende il carattere "\n" nella stringa e lo "cancella" sostituendolo con un carattere vuoto ""


Citazione

Il mio problema era che mi ritrovavo uno "\n" che ovviamente portava la seconda stringa su una nuova linea, oppure semplicemente non ho capito cosa volevi dirmi?

Ciao!


L'andare a capo è gestito diversamente tra win e linux...in linux infatti basta usare il carattere speciale newline per dire al sistema di andare a capa e piazzare il cursore ad inizio riga...nei sistemi win invece oltre al newline bisogna dire al sistema di riposizionarsi all'inizio della rioga...il carattere che fa questo è proprio "\r"..

Ecco perchè md^?=? ti diceva di stare attento che non compaia anche quel carattere speciale...

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #10 il: 05 Novembre 2009, 23:30:47 »
@lux

che ne diresti di identare meglio il codice quando hai vari if  for ecc ecc?
aumenteresti la leggibilità del codice, esempio:

Citazione


PUBLIC SUB ListOpticalDevice()  

DIM hDeviceName AS String 'Name optical device  
DIM hPatch AS String 'Name patch  
DIM hDirName AS String 'Is name of Directory found in "/sys/clas/scsi_device"    DIM hDirName2 AS String 'Is name of Directory found in "/sys/class/scsi_device/" & hDirName & "/device/block"  
DIM hVendor AS String 'Name of Vendor  
DIM hModel AS String 'Name of Model   hPatch = "/dev/"    

    FOR EACH hDeviceName IN Dir("/dev", "sr*", gb.Device)      
       
        FOR EACH hDirName IN Dir("/sys/class/scsi_device", "*", gb.Directory)
             
             FOR EACH hDirName2 IN Dir("/sys/class/scsi_device/" & hDirName & "/device/block", "*", gb.Directory)              
                 
                  IF hDirName2 = hDeviceName THEN  
                      SHELL "cat /sys/class/scsi_device/" & hDirName & "/device/vendor" TO hVendor                  
                      SHELL "cat /sys/class/scsi_device/" & hDirName & "/device/model" TO hModel  
                      PRINT hPatch & hDeviceName & " (" & Replace(hVendor, "n", "") & " " & Replace(hModel, "n", "") & ")"              
                 
                  ENDIF              
             
             NEXT                  
       
        NEXT        
    NEXT      
   
    CATCH        
    PRINT "No optical device detected!"  
END

END

 

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #11 il: 05 Novembre 2009, 23:31:28 »
@lux

che ne diresti di identare meglio il codice quando hai vari if  for ecc ecc?
aumenteresti la leggibilità del codice, esempio:

Codice: [Seleziona]


PUBLIC SUB ListOpticalDevice()  

DIM hDeviceName AS String 'Name optical device  
DIM hPatch AS String 'Name patch  
DIM hDirName AS String 'Is name of Directory found in "/sys/clas/scsi_device"    DIM hDirName2 AS String 'Is name of Directory found in "/sys/class/scsi_device/" & hDirName & "/device/block"  
DIM hVendor AS String 'Name of Vendor  
DIM hModel AS String 'Name of Model   hPatch = "/dev/"    

    FOR EACH hDeviceName IN Dir("/dev", "sr*", gb.Device)      
       
        FOR EACH hDirName IN Dir("/sys/class/scsi_device", "*", gb.Directory)
             
             FOR EACH hDirName2 IN Dir("/sys/class/scsi_device/" & hDirName & "/device/block", "*", gb.Directory)              
                 
                  IF hDirName2 = hDeviceName THEN  
                      SHELL "cat /sys/class/scsi_device/" & hDirName & "/device/vendor" TO hVendor                  
                      SHELL "cat /sys/class/scsi_device/" & hDirName & "/device/model" TO hModel  
                      PRINT hPatch & hDeviceName & " (" & Replace(hVendor, "n", "") & " " & Replace(hModel, "n", "") & ")"              
                 
                  ENDIF              
             
             NEXT                  
       
        NEXT        
    NEXT      
   
    CATCH        
    PRINT "No optical device detected!"  
END

END

 

Offline fsurfing

  • Moderatore
  • Senatore Gambero
  • *****
  • Post: 2.482
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #12 il: 05 Novembre 2009, 23:33:18 »
@ lux

un piccolo consiglio:

cerca di identare meglio il codice che scrivi, migliora di molto la leggibilità

esempio:

Codice: [Seleziona]


PUBLIC SUB ListOpticalDevice()  

DIM hDeviceName AS String 'Name optical device  
DIM hPatch AS String 'Name patch  
DIM hDirName AS String 'Is name of Directory found in "/sys/clas/scsi_device"    DIM hDirName2 AS String 'Is name of Directory found in "/sys/class/scsi_device/" & hDirName & "/device/block"  
DIM hVendor AS String 'Name of Vendor  
DIM hModel AS String 'Name of Model   hPatch = "/dev/"    

    FOR EACH hDeviceName IN Dir("/dev", "sr*", gb.Device)      
       
        FOR EACH hDirName IN Dir("/sys/class/scsi_device", "*", gb.Directory)
             
             FOR EACH hDirName2 IN Dir("/sys/class/scsi_device/" & hDirName & "/device/block", "*", gb.Directory)              
                 
                  IF hDirName2 = hDeviceName THEN  
                      SHELL "cat /sys/class/scsi_device/" & hDirName & "/device/vendor" TO hVendor                  
                      SHELL "cat /sys/class/scsi_device/" & hDirName & "/device/model" TO hModel  
                      PRINT hPatch & hDeviceName & " (" & Replace(hVendor, "n", "") & " " & Replace(hModel, "n", "") & ")"              
                 
                  ENDIF              
             
             NEXT                  
       
        NEXT        
    NEXT      
   
    CATCH        
    PRINT "No optical device detected!"  
END



 

Offline vuott

  • Moderatore globale
  • Senatore Gambero
  • *****
  • Post: 11.719
  • Ne mors quidem nos iunget
    • Mostra profilo
Re: Differenze tra /proc e /sys ed accessibilità ai loro files...
« Risposta #13 il: 16 Ottobre 2012, 23:19:00 »
« Chiunque, non ricorrendo lo stato di necessità, nel proprio progetto Gambas fa uso delle istruzioni Shell o Exec, è punito con la sanzione pecuniaria da euro 20,00 a euro 60,00. »