El Diumenge 19 Juny 2005 14:56, Joan T va escriure:
> de moment no sé ni executar arxius ... (aqui no hi ha cap .exe!!! :-)
>
> He sentit a dir que es pot retocar el software a les necessitats de
> cadascú .. jo, nocions de PERL sí que tinc. Em serviran?

I tant!  El Perl està per tot.  Si saps un poc d'expressions regulars 
(gairebé 
intrínsec a saber Perl) treuràs prou suc de la línia/línies d'ordres :)

Per exemple: http://weblog.bitassa.net/arxiu/2004/08/08/5/

Aprofito per fer un poc de culturilla general, ara que tenc temps.  És llarg 
però perquè hi ha molt copypaste.  Per agafar-s'ho amb calma i aprendre un 
poc :)

Com saber que un arxiu és un executable?

Vàries formes:

1) Té permís d'execució:

[EMAIL PROTECTED]:~> ls -l bin/firefox/firefox
-rwxr-xr-x  1 benjami users 6338 2005-05-12 00:43 bin/firefox/firefox

És el firefox.  Observa les x = execució. Els permisos estan representats per 
 
3 lletres i 3 àmbits:

Lletres:

- r = lectura
- w = escriptura
- x = execució

Àmbits:

- Propietari (user, u)
- Grup (group, g)
- Altres (others, o)

Així firefox de dalt té tots els permisos pel u i només de lectura i 
execució 
per g i o.  u és benjami i g és users, tal com indica l'ls.

Si volgués que el grup pogués escriure-hi, caldria usar el programa chmod:

chmod g+w bin/firefox/firefox

2) Pot tractar-se d'un executable però no es pot executar perquè té malament 
els permisos.  En aquest cas, el comandament file et dirà què és:

[EMAIL PROTECTED]:~> file bin/firefox/firefox
bin/firefox/firefox: Bourne shell script text

És un script de shell, es pot executar (si té permís, que en aquest cas el 
té)

3) Està a llocs on sol haver-hi executables.  Per exemple, ls mateix. És un 
arxiu que està al directori /bin/:

[EMAIL PROTECTED]:~> ls /bin/ls -l
-rwxr-xr-x  1 root root 90559 2005-05-04 20:50 /bin/ls

[EMAIL PROTECTED]:~> file /bin/ls
/bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for 
GNU/Linux 2.2.5, dynamically linked (uses shared libs), not stripped

És un binari (això és, un compilat)

Per aquí també tenc un Perl, el gigl que fa àlbums de fotos.

[EMAIL PROTECTED]:~> ls bin/jigl-2.0.1/jigl.pl -l
-rwxr-xr-x  1 benjami users 113639 2003-11-14 03:54 bin/jigl-2.0.1/jigl.pl
[EMAIL PROTECTED]:~> file bin/jigl-2.0.1/jigl.pl
bin/jigl-2.0.1/jigl.pl: perl script text

Els arxius de text que s'executen (scripts en Bash, Perl, etc) a la primera 
retxa tenen una indicació de quin és l'intèrpret que llegeix el text i el va 
executant.  Provem-ho amb els dos scripts que hem vist (firefox, jigl).  El 
comandament head mostra les primeres retxes d'un arxiu, que en tregui 1, 
basta la primera:

[EMAIL PROTECTED]:~> head -n 1 bin/firefox/firefox bin/jigl-2.0.1/jigl.pl
==> bin/firefox/firefox <==
#!/bin/sh

==> bin/jigl-2.0.1/jigl.pl <==
#!/usr/bin/perl -w

El firefox crida a sh, a veure?

[EMAIL PROTECTED]:~> ls -l /bin/sh
lrwxrwxrwx  1 root root 4 2004-06-08 21:25 /bin/sh -> bash

Aha, un enllaç que a punta a bash (ho sabem perquè la primera lletra, la que 
no havíem vist, és l de link).  Què és bash?

[EMAIL PROTECTED]:~> ls -l /bin/bash
-rwxr-xr-x  1 root root 447256 2004-04-24 20:57 /bin/bash

Un executable :)  De fet, és la famosa línia d'ordres: quan teclegem coses a 
la línia d'ordres, és bash qui les executa.  Així tot el contingut de 
l'arxiu 
firefox, va al bash.  És com si el teclegessim cada cop.  El mateix passa amb 
el perl, que envia el contingut cap al programa perl que està a /usr/bin

<incís>

Tornem un poc enrere.  Perquè un sh que apuntava a bash?  Perquè hi ha molts 
shell a més de bash (en programari lliure almanco hi ha dues formes de fer-ho 
gairebé tot).  Si demà trobo que bash no m'agrada o té un greu problema de 
seguretat sense solucionar, puc usar un altre shell, per exemple csh (C 
SHell).  Per fer que els scripts usin csh en comptes de bash, seria tan fàcil 
com canviar l'apuntador sh: en comptes d'apuntar a bash, que apunti a csh.  
Així tothom que fa scripts sempre els comença amb 

#!/bin/sh

I després cadascú sabrà, al seu sistema, cap a quin shell apunta sh.

La tàctica s'usa per moltes coses.  En Nyu tot són arxius.  La tarja de so 
és 
un arxiu que es diu /dev/dsp  Si hi escrius caràcters, farà soroll.  Per 
exmple, si hi redirecciones la sortida del comandament ls, una de llarga.  
Per exemple:

[EMAIL PROTECTED]:~> ls -l /etc/ > /dev/dsp

(sona? :) és un truc per provar si van bé i no es té res millor a mà :)

La tarja de so també té permisos, com qualsevol arxiu.  Si la màquina és 
compartida i no vull que ningú em faci botar de la cadira amb un 
àudio-ensurt, la deixo amb permís d'escriptura només per mi.

Tenc el CD-ROM al hdd (el secundari esclau de l'IDE, d'aquí la 2a d) i el dvd 
al hdc (el primari esclau de l'IDE).  Si demà ho canvio, caldrà tocar un 
caramull de configuracions, punts de muntatge, programes de torrar, 
reproduïr.  Solució, el dvd es diu sempre dvd, el mateix amb el cdrom, i 
apunten al lloc del moment:

[EMAIL PROTECTED]:~> ls -l /dev/cdrom /dev/dvd -l
lrwxrwxrwx  1 root root 8 2004-09-11 20:13 /dev/cdrom -> /dev/hdd
lrwxrwxrwx  1 root root 8 2004-12-29 19:33 /dev/dvd -> /dev/hdc

El mateix passa amb el mòdem.  Li dic sempre mòdem, tant fot si és sèrie i 
està a la com1, com2 o si és usb

[EMAIL PROTECTED]:~> ls -l /dev/modem
lrwxrwxrwx  1 root root 5 2004-06-11 13:50 /dev/modem -> ttyS0
(està a la com1)

Podria fer el mateix amb la tarja de so, dir-li tarjadeso.  Els symlinks es 
creen fàcil (ln -s original enllaç):

ln -s /dev/dsp /dev/tarjadeso

Els links (enllaços simbòlics, coneguts com a symlinks) de Nyu són molt 
potents.  No són com els accesos directos o dreceres del Windows.  Aquí un 
symlink és a tots els efectes exactament el mateix que allò al que apunta.

</incís>

Hi ha programes a /bin, /sbin, /usr/bin i /usr/sbin  La diferència està 
explicada al 'man hier'

/bin : conté programes bàsics per arrancar i reparar un sistema
/usr/bin : la resta
amb s: els que no executa un usuari normal, que són d'administració

Això és el bàsic, però hi ha més:

/opt : programes grans, com KDE, Gnome, OOo, Mozilla...

Jo sempre faig un directori bin al directori de l'usuari (el ~/ per abreviar).  
Allà hi poso scripts, fins i tot el Firefox del moment, per usar-lo en 
comptes del que té la distro (normalment més vell).  I aprofito per tornar a 
il·lustrar la potència dels symlinks.  La SuSE posa tots els plugins 
a /opt/mozilla/lib/plugins/  En posar el firefox a ~/bin/firefox, ell té el 
seu directori plugins.  Sempre l'esborro:

rm -r ~/bin/firefox/plugins

i faig un symlink:

ln -s /opt/mozilla/lib/plugins/ ~/bin/firefox/plugins

El resultat és aquest:

[EMAIL PROTECTED]:~> ls -l ~/bin/firefox/plugins
lrwxrwxrwx  1 benjami users 25 2005-05-15 
21:22 /home/benjami/bin/firefox/plugins -> /opt/mozilla/lib/plugins/

(i que els pluguins funcionen al firefox instal·lat al meu ~/)

L'altre cosa: com s'executen?  Escrivint el nom a la línia d'ordres. Si escric 
~/bin/firefox/firefox , el navegador arranca.

Un detall important:

[EMAIL PROTECTED]:~> cd bin/firefox
[EMAIL PROTECTED]:~/bin/firefox> firefox
bash: firefox: command not found

Primera reacció: "què? si el tinc!" i escriure

[EMAIL PROTECTED]:~/bin/firefox> ls -l firefox
-rwxr-xr-x  1 benjami users 6338 2005-05-12 00:43 firefox

i dir "sí, el tinc!"

No arranca per motius de seguretat.  Un d'aquests de fons que fan el Nyu més 
mal d'explotar per virus i afegitons.  El motiu és que en teclejar un nom i 
polsar intro, el sistema va a cercar els programes al lloc on l'administrador 
els posa (/bin, /usr/bin, /opt) amb el seu password.  Si no fos així, algú 
podria fer un clon del comandament ls que en teclejar-lo fes el que l'ls, 
però a més recollís arxius delicats i els enviés a l'atacant --això és, 
un 
trojà. Podria trobar una forma de posar el seu ls silenciosament al nostre ~/  
i no caldria cap contrasenya, perquè ja hi som quan ens hem infectat.  Cada 
cop que teclejessim ls, s'executaria el seu i no el del sistema.  Per aquest 
motiu no es pot executar res d'altres directoris no oficials per programes.

Però hem de poder posar programes al nostre ~/ (*) i executar-los, si volem. 
Es pot fer, però posant davant el camí de directoris on es troba.  És una 
forma de dir-nos "estas executant *aquest* programa que es troba *aquí*, fora 
del lloc oficial, que ho sabis".  Per aquest motiu sí ha executat:

[EMAIL PROTECTED]:~> ~/bin/firefox/firefox
i també executaria:
[EMAIL PROTECTED]:~/bin/firefox> ~/bin/firefox/firefox

En aquest darrer cas, si ja estem a la ~/bin/firefox no cal escriure-ho.  
Basta amb posar . que en Nyu vol dir "el lloc on som ara" (i .. vol dir "el 
directori anterior".  Cal afegir una / per separar-lo del nom, perquè els 
noms d'arxiu també poden començar per un punt (de fet, el punt inicial fa que 
un arxiu sigui ocult). Així també funcionaria: 

[EMAIL PROTECTED]:~/bin/firefox> ./firefox

I l'altre dia n'Esteve havia d'executar, per compilar el driver del módem USB, 
un comandament amb el ./ davant.

(*) La darrera curiositat: echo pinta abreviatures d'aquestes i altres 
variables, com la $PATH que conté els "llocs oficials" per executables:

[EMAIL PROTECTED]:~/bin/firefox> echo ~/
/home/benjami/

[EMAIL PROTECTED]:~/bin/firefox> echo $PATH
/home/benjami/bin:/usr/local/bin:/usr/bin:/usr/X11R6/bin:/bin:/usr/games:/opt/gnome/bin:/opt/kde3/bin:/usr/lib/java/jre/bin


-- 
Benjamí
http://weblog.bitassa.net



.

_______________________________________________
llista de correu de l'Internauta
[email protected]
http://zeus.internauta.net/mailman/listinfo/internauta

Respondre per correu electrònic a