<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>maduixa &#187; com es fa</title>
	<atom:link href="http://blog.jau.cat/tag/com-es-fa/feed/" rel="self" type="application/rss+xml" />
	<link>http://blog.jau.cat</link>
	<description>Blog personal d&#039;en minterior amb gust a maduixa</description>
	<lastBuildDate>Mon, 21 Jun 2010 22:23:17 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Copiar el MBR d&#8217;un disc a un altre</title>
		<link>http://blog.jau.cat/2010/06/19/copiar-el-mbr-dun-disc-a-un-altre/</link>
		<comments>http://blog.jau.cat/2010/06/19/copiar-el-mbr-dun-disc-a-un-altre/#comments</comments>
		<pubDate>Sat, 19 Jun 2010 11:58:09 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[dd]]></category>
		<category><![CDATA[disc dur]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[MBR]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=359</guid>
		<description><![CDATA[Amb la següent comanda podem copiar el MBR (Master Boot Record) d&#8217;un disc a un altre:
dd if=/dev/sdx of=/dev/sdy bs=512 count=1
L&#8217;explicació d&#8217;aquesta és: llegeix i escriu (copia) només un bloc de 512 bytes del disc sdx al disc sdy.
Això pot ser útil quan per alguna raó perdem la taula de particions d&#8217;un disc dur o d&#8217;un [...]]]></description>
			<content:encoded><![CDATA[<p>Amb la següent comanda podem copiar el <strong>MBR</strong> (<a title="MBR a la Wikipedia (en castellà)" href="http://es.wikipedia.org/wiki/Master_Boot_Record">Master Boot Record</a>) d&#8217;un disc a un altre:</p>
<pre class="brush: bash;">dd if=/dev/sdx of=/dev/sdy bs=512 count=1</pre>
<p>L&#8217;explicació d&#8217;aquesta és: llegeix i escriu (copia) <strong>només un bloc</strong> de<strong> 512 bytes</strong> del disc sdx al disc sdy.</p>
<p>Això pot ser útil quan per alguna raó perdem la <strong>taula de particions</strong> d&#8217;un disc dur o d&#8217;un pen drive, i d&#8217;aquesta manera restablim el MBR a partir d&#8217;un altre disc. He vist moltes vegades que un disc dur que no té cap partició, el sistema operatiu Windows no el reconeix. Això vol dir que el disc, per exemple /dev/sdx, no conté /dev/sdx1, /dev/sdx2&#8230; que seria cadascuna de les particions; ho podem comprovar si teclegem al terminal:</p>
<pre class="brush: bash;">ls /dev/sdx*</pre>
<p>només ens apareix l&#8217;arrel del disc /dev/sdx.</p>
<p>Una altra manera de crear particions és amb els programes cfdisk o fdisk, tot seguint les instruccions que indiquen.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/06/19/copiar-el-mbr-dun-disc-a-un-altre/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Instal·lació de xdebug per PHP i Apache2 a Ubuntu</title>
		<link>http://blog.jau.cat/2010/05/19/instal%c2%b7lacio-de-xdebug-per-php-i-apache2-a-ubuntu/</link>
		<comments>http://blog.jau.cat/2010/05/19/instal%c2%b7lacio-de-xdebug-per-php-i-apache2-a-ubuntu/#comments</comments>
		<pubDate>Wed, 19 May 2010 00:19:42 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[xdebug]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=343</guid>
		<description><![CDATA[Un dels principals defectes de la majoria de programadors de PHP és oblidar-se de les eines de depuració (debugger). Tots hem estat en feines on no disposaven d&#8217;aquestes eines a la nostra màquina, o no permetien la seva instal·lació, o senzillament no hem pensat en posar-les.
Jo vaig començar el meu primer contacte amb la programació [...]]]></description>
			<content:encoded><![CDATA[<p>Un dels principals defectes de la majoria de programadors de <a title="Entrades sobre PHP" href="http://blog.jau.cat/tag/php/">PHP</a> és oblidar-se de les eines de depuració (debugger). Tots hem estat en feines on no disposaven d&#8217;aquestes eines a la nostra màquina, o no permetien la seva instal·lació, o senzillament no hem pensat en posar-les.</p>
<p>Jo vaig començar el meu primer contacte amb la programació amb el llenguatge c. Llavors a la universitat ens feien usar el programa Microsoft Visual Studio, amb el qual podíem compilar i depurar (debug). La depuració ens permetia seguir el programa pas a pas i saber el valor de cada variable en cada moment, i corregir així errors existents que s&#8217;escapaven a simple vista i que no eren de sintaxi.</p>
<p>En passar a PHP, penso que és més difícil entendre com funciona la depuració, pel fet de tenir el navegador per un costat i l&#8217;<a title="Enllaç extern a la Viquipèdia" href="http://ca.wikipedia.org/wiki/Entorn_integrat_de_desenvolupament">entorn integrat de desenvolupament</a> (o IDE de l&#8217;acrònim en anglès) per un altre. Tanmateix, cal instal·lar prèviament alguna cosa al servidor per poder-li indicar des del nostre IDE l&#8217;ordre d&#8217;aturar-se a la línia de codi que nosaltres vulguem. Per aquest conjunt de factors la majoria de programadors prescindeixen del depurador com a tal i utilitzen el mètode de <a title="Ensayo y error a la Wikipedia (en castellà)" href="http://es.wikipedia.org/wiki/Ensayo_y_error">prova i error</a>, i miren el valor de les variables enviant el seu valor directament al navegador. Les tres funcions de PHP més utilitzades per fer això són: <em>echo</em>, <em>print_r</em> i <em>var_dump</em>.</p>
<p>Jo he passat força temps utilitzant-les també, però quan tornes a la depuració t&#8217;adones que abans estaves perdent el temps. Amb aquest rudimentari mètode, si no coneixes molt bé el codi, primer has de trobar el punt on està la variable que vols observar, teclejar el codi que mostri el seu valor i executar la consulta de la pàgina des del navegador. Molt bé, ja has vist el seu contingut, però com ha estat calculat? Com s&#8217;ha arribat fins aquí, a través de quins fitxers, mètodes o funcions? La majoria de vegades has de tornar a escriure més codi per mostrar altres variables, perquè l&#8217;anterior no t&#8217;ha servit de massa, i tornar a actualitzar el navegador. A més a més, després cal eliminar tot aquest codi extra que has creat només per mirar el valor d&#8217;algunes de les variables. I quantes vegades passa -a mi també- que acaba pujant a producció codi amb aquestes sentències de &#8220;depuració&#8221;?</p>
<p>Per evitar tot això, el millor és usar un depurador de veritat. Encara que al principi perdem una mica de temps per configurar-lo i aprendre com funciona, després ens estalviarà molt temps i mal de caps. Jo per desenvolupar en PHP i MySQL utilitzo el servidor web Apache2 sobre Ubuntu; una solució LAMP vaja. I com a IDE l&#8217;<a href="http://www.eclipse.org/">Eclipse</a> amb el PDT (<a href="http://www.eclipse.org/pdt/">PHP Development Tools</a>) i alguns altres <em>plugins</em>.</p>
<p>Amb els següents passos podreu instal·lar xdebug amb l&#8217;Apache2 i PHP:</p>
<pre class="brush: bash;">sudo apt-get install php5-xdebug</pre>
<p>Això ha instal·lat el paquet corresponent i ha creat el fitxer /etc/php5/conf.d/xdebug.ini amb aquest contingut:</p>
<pre>zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so</pre>
<p>Si ara comprovem el resultat de cridar a phpinfo(), veurem:</p>
<pre>This program makes use of the Zend Scripting Language Engine:
Zend Engine v2.3.0, Copyright (c) 1998-2010 Zend Technologies
    with Xdebug v2.0.5, Copyright (c) 2002-2008, by Derick Rethans</pre>
<p>Al mateix fitxer xdebug.ini hem d&#8217;afegir aquestes línies:</p>
<pre class="brush: plain;">
xdebug.remote_enable=on
xdebug.remote_handler=dbgp
xdebug.remote_mode=req
xdebug.remote_host=localhost
xdebug.remote_port=9000
</pre>
<p>I ja per acabar, carreguem els canvis de configuració a l&#8217;Apache:</p>
<pre class="brush: bash;">sudo /etc/init.d/apache2 reload</pre>
<p>En un altre capítol escriuré com configurar l&#8217;Eclipse per depurar des d&#8217;allà.</p>
<p>Gràcies Derick pel fantàstic xdebug!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/05/19/instal%c2%b7lacio-de-xdebug-per-php-i-apache2-a-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Com usar paquets d&#8217;una versió anterior d&#8217;Ubuntu</title>
		<link>http://blog.jau.cat/2010/04/28/com-usar-paquets-duna-versio-anterior-dubuntu/</link>
		<comments>http://blog.jau.cat/2010/04/28/com-usar-paquets-duna-versio-anterior-dubuntu/#comments</comments>
		<pubDate>Wed, 28 Apr 2010 17:15:52 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[ubuntu]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=329</guid>
		<description><![CDATA[En actualitzar (ahir) a Ubuntu 10.04 LTS Lucid Lynx, he passat de la versió de PHP 5.2.10.dfsg.1-2ubuntu6 a la 5.3.2-1ubuntu4. Si volem tornar a tenir la versió 5.2, hem de configurar l&#8217;APT per tal que usi aquells paquets que vulguem de les fonts de Karmic Koala. Així:
Primer llistarem els paquets de php que tenim instal·lats:
dpkg -l &#124; egrep [...]]]></description>
			<content:encoded><![CDATA[<p>En actualitzar (ahir) a Ubuntu 10.04 LTS Lucid Lynx, he passat de la versió de <a title="Entrades sobre PHP" href="http://blog.jau.cat/tag/php/">PHP</a> 5.2.10.dfsg.1-2ubuntu6 a la 5.3.2-1ubuntu4. Si volem tornar a tenir la versió 5.2, hem de configurar l&#8217;<a title="APT a la Viquipèdia" href="http://ca.wikipedia.org/wiki/Apt_(ordre)">APT</a> per tal que usi aquells paquets que vulguem de les fonts de Karmic Koala. Així:</p>
<p>Primer llistarem els paquets de php que tenim instal·lats:</p>
<pre class="brush: bash;">dpkg -l | egrep php</pre>
<p>En el meu cas són:</p>
<ul>
<li>php5-common</li>
<li>libapache2-mod-php5</li>
<li>php-pear</li>
<li>php5-cli</li>
<li>php5-curl</li>
<li>php5-dev</li>
<li>php5-mysql</li>
<li>php5-memcache</li>
<li>php5-suhosin</li>
</ul>
<p>Dupliquem el fitxer amb les fonts de programari canviant la paraula <em>lucid</em> per <em>karmic</em>:</p>
<pre class="brush: bash;">sed s/lucid/karmic/g /etc/apt/sources.list | sudo tee /etc/apt/sources.list.d/karmic.list</pre>
<p>Creem un nou fitxer de preferències que anomenem per exemple &#8220;php&#8221;:</p>
<pre class="brush: bash;">sudo nano /etc/apt/preferences.d/php</pre>
<p>I copiem aquestes tres línies per cada paquet dels llistats anteriorment, tot canviant el nom del paquet:</p>
<pre class="brush: plain;">
Package: php5-common
Pin: release a=karmic
Pin-Priority: 991
...
</pre>
<p>Un cop ho hem configurat tot, actualitzem els paquets:</p>
<pre class="brush: bash;">
sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
</pre>
<p>No ens oblidem de reiniciar el servidor web; per l&#8217;Apache:</p>
<pre class="brush: bash;">sudo apache2ctl restart</pre>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/04/28/com-usar-paquets-duna-versio-anterior-dubuntu/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Com trobar els UUIDs de les particions a Ubuntu</title>
		<link>http://blog.jau.cat/2010/04/21/com-trobar-els-uuids-de-les-particions-a-ubuntu/</link>
		<comments>http://blog.jau.cat/2010/04/21/com-trobar-els-uuids-de-les-particions-a-ubuntu/#comments</comments>
		<pubDate>Tue, 20 Apr 2010 22:32:03 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[particions]]></category>
		<category><![CDATA[ubuntu]]></category>
		<category><![CDATA[uuid]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=322</guid>
		<description><![CDATA[El UUID, o Universally Unique Identifier en anglès, és un identificador estàndard usat en la construcció de programari, estandaritzat per la Open Software Foundation (OSF), amb l&#8217;objectiu de permetre que sistemes distrubuïts identifiquin informació de forma única sense dependre de coordinació central.
A Ubuntu i a d&#8217;altres distribucions de GNU/Linux basades en Debian, es poden obtenir [...]]]></description>
			<content:encoded><![CDATA[<p>El UUID, o <a title="Wikipedia, en anglès" href="http://en.wikipedia.org/wiki/Universally_Unique_Identifier">Universally Unique Identifier</a> en anglès, és un identificador estàndard usat en la construcció de programari, estandaritzat per la <a title="Wikipedia, en castellà" href="http://es.wikipedia.org/wiki/Open_Software_Foundation">Open Software Foundation</a> (OSF), amb l&#8217;objectiu de permetre que sistemes distrubuïts identifiquin informació de forma única sense dependre de coordinació central.</p>
<p>A Ubuntu i a d&#8217;altres distribucions de GNU/Linux basades en Debian, es poden obtenir aquests identificadors per a cadascuna de les nostres particions amb una comanda ben simple:</p>
<pre class="brush: bash;">blkid</pre>
<p>Que haurem d&#8217;executar com a superusuari (root) o amb <em>sudo</em> al davant. La sortida d&#8217;aquesta serà semblant a:</p>
<pre class="brush: plain;">
/dev/sda1: UUID=&quot;8a866472-a077-4da9-9663-cd5a2774f801&quot; TYPE=&quot;reiserfs&quot;
/dev/sdb1: UUID=&quot;af8e31aa-9bb3-4c5e-b13a-433b06bb2231&quot; TYPE=&quot;reiserfs&quot;
/dev/sdc1: UUID=&quot;c027fa2e-ad9d-4324-bdad-941a5c43d2b3&quot; TYPE=&quot;reiserfs&quot;
/dev/sdc2: UUID=&quot;a9dbb0c9-3c60-4083-8f4c-de7e69d0ffda&quot; TYPE=&quot;swap&quot;
/dev/sdc5: UUID=&quot;8be8352b-e28e-44ee-a2e2-9abfa1eb43eb&quot; TYPE=&quot;reiserfs&quot;
</pre>
<p>Informació que ens pot resultar útil per configurar el fitxer <em>/etc/fstab</em>, amb les regles i opcions per muntar les diferents particions que tinguem.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/04/21/com-trobar-els-uuids-de-les-particions-a-ubuntu/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Comprovar sectors danyats d&#8217;un disc dur amb badblocks</title>
		<link>http://blog.jau.cat/2010/03/26/comprovar-sectors-danyats-dun-disc-dur-amb-badblocks/</link>
		<comments>http://blog.jau.cat/2010/03/26/comprovar-sectors-danyats-dun-disc-dur-amb-badblocks/#comments</comments>
		<pubDate>Fri, 26 Mar 2010 20:48:37 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Maquinari]]></category>
		<category><![CDATA[Programari]]></category>
		<category><![CDATA[badblocks]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[disc dur]]></category>
		<category><![CDATA[GNU/Linux]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=307</guid>
		<description><![CDATA[Un cop  dels , volia comprovar si aquests tenien sectors danyats. Ho he fet amb l&#8217;eina de Linux badblocks. Es pot executar de forma destructiva o no-destructiva, i jo he triat la primera perquè no tenia dades al disc que hagués de conservar. Per tant he executat:
badblocks -wvs -o badblocks-sda.log /dev/sda
Les opcions triades volen [...]]]></description>
			<content:encoded><![CDATA[<p>Un cop <a href="http://blog.jau.cat/2010/03/24/gnu-ddrescue-per-recuperar-dades-de-discs-durs/">recuperades les dades</a> dels <a href="http://blog.jau.cat/2010/02/21/dos-discs-durs-comprats-alhora-amb-errors/">discs durs que tenien problemes</a>, volia comprovar si aquests tenien sectors danyats. Ho he fet amb l&#8217;eina de Linux <strong>badblocks</strong>. Es pot executar de forma destructiva o no-destructiva, i jo he triat la primera perquè no tenia dades al disc que hagués de conservar. Per tant he executat:</p>
<pre class="brush: bash;">badblocks -wvs -o badblocks-sda.log /dev/sda</pre>
<p>Les opcions triades volen dir:</p>
<pre class="brush: plain;">
-w    test de lectura i escriptura DESTRUCTIU.
-v    mostra més informació
-s    mostra el progrés
-o    fitxer on escriure la llista de blocs defectuosos
</pre>
<p>Si observeu la comanda, no he indicat cap partició sinó tot el disc sencer (/dev/sda), la qual cosa combinada amb l&#8217;opció <em>-w</em> implica que el <a title="Master Boot Record a la Wikipedia (en castellà)" href="http://es.wikipedia.org/wiki/Master_Boot_Record">MBR</a>, particions existents i dades, <strong>seran destruïts</strong>.</p>
<p>Si no voleu perdre cap dada del disc i fer també el test de lectura i escriptura canvieu l&#8217;opció <em>-w</em> per <em>-n</em>. Si no en poseu cap de les dues el test serà de <strong>només lectura</strong>. Per a més informació i opcions recordeu mirar el manual escrivint al terminal:</p>
<pre class="brush: bash;">man badblocks</pre>
<p>En el meu cas, després d&#8217;esperar unes quantes hores, vaig tenir sort i cap sector del disc dur estava danyat. <img src='http://blog.jau.cat/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Sort! <img src='http://blog.jau.cat/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/03/26/comprovar-sectors-danyats-dun-disc-dur-amb-badblocks/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>GNU ddrescue per recuperar dades de discs durs</title>
		<link>http://blog.jau.cat/2010/03/24/gnu-ddrescue-per-recuperar-dades-de-discs-durs/</link>
		<comments>http://blog.jau.cat/2010/03/24/gnu-ddrescue-per-recuperar-dades-de-discs-durs/#comments</comments>
		<pubDate>Wed, 24 Mar 2010 22:43:19 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Maquinari]]></category>
		<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[dades]]></category>
		<category><![CDATA[ddrescue]]></category>
		<category><![CDATA[disc dur]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[recuperació]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=291</guid>
		<description><![CDATA[L&#8217;altre dia (uf, ja fa un mes d&#8217;això!) vaig explicar la mala sort que vaig tenir quan  dels tres que tinc al meu ordinador. Abans d&#8217;ahir vaig començar les tasques de recuperació de dades, amb el programa GNU ddrescue. Al mateix manual en línia de ddrescue hi ha exemples molt útils, el primer dels quals [...]]]></description>
			<content:encoded><![CDATA[<p>L&#8217;altre dia (uf, ja fa un mes d&#8217;això!) vaig explicar la mala sort que vaig tenir quan <a href="http://blog.jau.cat/2010/02/21/dos-discs-durs-comprats-alhora-amb-errors/">dos discs durs tenien errors</a> dels tres que tinc al meu ordinador. Abans d&#8217;ahir vaig començar les tasques de recuperació de dades, amb el programa GNU ddrescue. Al mateix <a href="http://www.gnu.org/software/ddrescue/manual/ddrescue_manual.html#Examples">manual en línia de ddrescue</a> hi ha exemples molt útils, el primer dels quals és el que necessito jo. Anem per feina.</p>
<p>Recordo que l&#8217;objectiu és recuperar les dades de dos discos idèntics de 500 GB a un tercer disc auxiliar de la mateixa capacitat, que em va deixar un bon amic meu. És obvi que l&#8217;auxiliar ha de ser de la mateixa capacitat o major que el disc que volem recuperar. Primer ho intentaré amb un disc i després amb l&#8217;altre. El paràmetre de ddrescue <em>-n</em> o <em>&#8211;no-split</em> no intenta dividir o reintentar blocs fallits, i això faig a la primera passada:</p>
<pre class="brush: plain;">root@jau:~# ddrescue -n /dev/sda /dev/sdb ddrescue-sda-a-sdb.log

Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:         0 B,  errsize:       0 B,  errors:       0
Current status
rescued:   500107 MB,  errsize:    143 kB,  current rate:    10265 B/s
ipos:       29744 kB,   errors:      36,    average rate:   14150 kB/s
opos:       29744 kB,     time from last successful read:       0 s
Finished</pre>
<p>El procés ha trigat unes <strong>10 hores</strong>. Cosa que podem comprovar a partir de les dades informatives anteriors:<br />
500107 MB / 14,150 MB/s / 3600 s/h ≈ 9,8 hores.</p>
<p>Tot seguit executo ddrescue amb les opcions <em>-d</em> o <em>&#8211;direct</em> , que usa accés directe al disc d&#8217;entrada, i <em>-r</em> o <em>&#8211;max-retries=&lt;n&gt;</em>, que surt després de n intents. Li passo el mateix nom de fitxer de log que a la comanda anterior i així ddrescue sap que només ha de buscar els sectors on ha tingut problemes durant la primera lectura:<br />
<span id="more-291"></span></p>
<pre class="brush: plain;">root@jau:~# ddrescue -dr3 /dev/sda /dev/sdb ddrescue-sda-a-sdb.log

Press Ctrl-C to interrupt
Initial status (read from logfile)
rescued:   500107 MB,  errsize:    143 kB,  errors:      36
Current status
rescued:   500107 MB,  errsize:   17920 B,  current rate:        0 B/s
   ipos:    34765 MB,   errors:      35,    average rate:       48 B/s
   opos:    34765 MB,     time from last successful read:    23.7 m
Finished</pre>
<p>Després de 3 intents i uns <strong>45 minuts</strong> més, he passat de 143 kB amb errors a 17,92 kB. No està malament.</p>
<p>A partir d&#8217;ara ja treballarem amb el disc rèplica de l&#8217;afectat; sdb en aquest cas. Ara toca refer la taula de particions del disc:</p>
<pre class="brush: bash;">fdisk /dev/sdb</pre>
<p>Teclejo:</p>
<p><strong>p</strong> imprimeix la taula de particions, per veure si aquesta és correcta. Té una única partició, com esperava.<br />
<strong> w</strong> escriu la taula al disc i surt, ﻿per desar-la i sortir.</p>
<p>A continuació cal revisar el sistema de fitxers d&#8217;aquesta partició. En el meu cas ja sé que els dos discos durs tenien el sistema de fitxers <a title="ReiserFS a la Wikipedia (en castellà)" href="http://es.wikipedia.org/wiki/ReiserFS">reisersfs</a>. Per tant:</p>
<pre class="brush: plain;">reiserfsck -f --logfile reiserfsck-check-sdb1.log /dev/sdb1
reiserfsck 3.6.21 (2009 www.namesys.com)

*************************************************************
** If you are using the latest reiserfsprogs and  it fails **
** please  email bug reports to reiserfs-list@namesys.com, **
** providing  as  much  information  as  possible --  your **
** hardware,  kernel,  patches,  settings,  all reiserfsck **
** messages  (including version),  the reiserfsck logfile, **
** check  the  syslog file  for  any  related information. **
** If you would like advice on using this program, support **
** is available  for $25 at  www.namesys.com/support.html. **
*************************************************************

Will read-only check consistency of the filesystem on /dev/sdb1
Will put log info to 'reiserfsck-check-sdb1.log'

Do you want to run this program?[N/Yes] (note need to type Yes if you do):Yes
###########
reiserfsck --check started at Tue Mar 23 05:58:48 2010
###########
Replaying journal: Done.
Reiserfs journal '/dev/sdb1' in blocks [18..8211]: 0 transactions replayed
Checking internal tree.. finished
Comparing bitmaps..Fatal corruptions were found, Semantic pass skipped
1 found corruptions can be fixed only when running with --rebuild-tree
###########
reiserfsck finished at Tue Mar 23 06:09:54 2010
###########
</pre>
<p>Ha trigat poc més d&#8217;<strong>11 minuts</strong>, però ara demana executar la comanada amb l&#8217;opció <em>&#8211;rebuild-tree</em>. Som-hi:</p>
<pre class="brush: plain;">
reiserfsck -f --rebuild-tree --logfile reiserfsck-rebuild-tree-sdb1.log /dev/sdb1
reiserfsck 3.6.21 (2009 www.namesys.com)

*************************************************************
** Do not  run  the  program  with  --rebuild-tree  unless **
** something is broken and MAKE A BACKUP  before using it. **
** If you have bad sectors on a drive  it is usually a bad **
** idea to continue using it. Then you probably should get **
** a working hard drive, copy the file system from the bad **
** drive  to the good one -- dd_rescue is  a good tool for **
** that -- and only then run this program.                 **
** If you are using the latest reiserfsprogs and  it fails **
** please  email bug reports to reiserfs-list@namesys.com, **
** providing  as  much  information  as  possible --  your **
** hardware,  kernel,  patches,  settings,  all reiserfsck **
** messages  (including version),  the reiserfsck logfile, **
** check  the  syslog file  for  any  related information. **
** If you would like advice on using this program, support **
** is available  for $25 at  www.namesys.com/support.html. **
*************************************************************

Will rebuild the filesystem (/dev/sdb1) tree
Will put log info to 'reiserfsck-rebuild-tree-sdb1.log'

Do you want to run this program?[N/Yes] (note need to type Yes if you do):Yes
Replaying journal: Done.
Reiserfs journal '/dev/sdb1' in blocks [18..8211]: 0 transactions replayed
###########
reiserfsck --rebuild-tree started at Tue Mar 23 06:21:26 2010
###########

Pass 0:
Loading on-disk bitmap .. ok, 113159770 blocks marked used
Skipping 11937 blocks (super block, journal, bitmaps) 113147833 blocks will be read
0%....20%....                                                   left 0, 16287 /seccseccccc
	&quot;r5&quot; hash is selected
Flushing..finished
	Read blocks (but not data blocks) 113147833
		Leaves among those 112068
		Objectids found 3049

Pass 1 (will try to insert 112068 leaves):
Looking for allocable blocks .. finished
0%....20%....40%....60%....80%....100%                          left 0, 98 /sec
Flushing..finished
	112068 leaves read
		112048 inserted
		20 not inserted

Pass 2:
0%....20%....40%....60%....80%....100%                          left 0, 40 /sec
Flushing..finished
	Leaves inserted item by item 20
Pass 3 (semantic):
Flushing..finished
	Files found: 2809
	Directories found: 198
	Symlinks found: 34
Pass 3a (looking for lost dir/files):
Looking for lost directories:
Looking for lost files:3 /sec
Flushing..finished18, 74 /sec
	Objects without names 7
	Files linked to /lost+found 7
Pass 4 - finished done 105303, 99 /sec
Flushing..finished
Syncing..finished
###########
reiserfsck finished at Tue Mar 23 08:54:56 2010
###########
</pre>
<p>Aquesta operació ja ha trigat bastant, unes <strong>dues hores i mitja</strong>. Muntem el nou disc ja net i polit:</p>
<pre class="brush: bash;">mount /dev/sdb1 /media/recuperat/</pre>
<p>I tot ha anat bé! Dades recuperades!!! Genial <img src='http://blog.jau.cat/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Només han calgut quasi 14 hores i una mica de paciència. Ara toca fer el mateix amb el segon disc dur&#8230; uf.</p>
<p><strong>Actualització</strong> (25-03-2010): el segon disc s&#8217;ha copiat en només 4 hores i 16 minuts, a 32,484 MB/s, i no ha tingut cap error després de la primera passada! Per tant he reescrit la taula de particions i executat només un cop reiserfsck (el rebuild tree tampoc calia). I finalment muntar la partició i veure que totes les dades estan intactes. Magnífic!</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/03/24/gnu-ddrescue-per-recuperar-dades-de-discs-durs/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Com copiar un enllaç simbòlic a GNU/Linux</title>
		<link>http://blog.jau.cat/2010/03/22/com-copiar-un-enllac-simbolic-a-gnulinux/</link>
		<comments>http://blog.jau.cat/2010/03/22/com-copiar-un-enllac-simbolic-a-gnulinux/#comments</comments>
		<pubDate>Mon, 22 Mar 2010 21:49:55 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[copiar]]></category>
		<category><![CDATA[cpio]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[link]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=279</guid>
		<description><![CDATA[Estava cercant com copiar un enllaç simbòlic des de la lína de comandes. Pensava que amb l&#8217;ordre cp i algun paràmetre de l&#8217;estil &#8211;link (o -l) es podria fer. Amb &#8220;cp -l&#8221; aconseguim enllaçar els fitxers en lloc de copiar-los, però no és el que vull ara. He trobat com fer-ho, és així:
cd directori
find nom_del_link_a_copiar [...]]]></description>
			<content:encoded><![CDATA[<p>Estava cercant com copiar un enllaç simbòlic des de la lína de comandes. Pensava que amb l&#8217;ordre <em>cp</em> i algun paràmetre de l&#8217;estil <em>&#8211;link</em> (<em>o -l</em>) es podria fer. Amb &#8220;cp -l&#8221; aconseguim enllaçar els fitxers en lloc de copiar-los, però no és el que vull ara. <a href="http://www.unix.com/solaris/75466-how-copy-symbolic-link.html">He trobat</a> com fer-ho, és així:</p>
<pre class="brush: bash;">cd directori
find nom_del_link_a_copiar | cpio -pmadv directori_destí</pre>
<p>Si el directori de destí no existeix es crearà. Es copiarà l&#8217;enllaç simbòlic amb el mateix nom dins el directori de destí.</p>
<p>Si volem copiar ﻿﻿l&#8217;enllaç simbòlic al mateix directori però amb un altre nom, sempre podem crear-lo en un lloc temporal i després moure&#8217;l:</p>
<pre class="brush: bash;">cd directori
find nom_del_link_a_copiar | cpio -pmadv /tmp
mv /tmp/nom_del_link_a_copiar ./nou_nom</pre>
<p>Cal tenir en compte que els <strong>enllaços simbòlics relatius</strong> poden trencar-se. Això vol dir que si no es troben en directoris del mateix nivell, el nou enllaç no apuntarà correctament al seu destí.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/03/22/com-copiar-un-enllac-simbolic-a-gnulinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Substituir text en múltiples fitxers amb sed</title>
		<link>http://blog.jau.cat/2010/03/17/substituir-text-en-multiples-fitxers-amb-sed/</link>
		<comments>http://blog.jau.cat/2010/03/17/substituir-text-en-multiples-fitxers-amb-sed/#comments</comments>
		<pubDate>Wed, 17 Mar 2010 13:54:46 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[sed]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=286</guid>
		<description><![CDATA[Si volem substituir una cadena de caràcters per una altra en un fitxer o en múltiples fitxers simultàniament i de forma recursiva1 ho podem fer amb aquesta comanda:
find -type f -exec sed -i 's/CADENA A SUBSTITUIR/CADENA NOVA/g' {} \;
On ﻿CADENA A SUBSTITUIR és una expressió regular. Això vol dir que hem d&#8217;escapar els caràcters amb connotacions [...]]]></description>
			<content:encoded><![CDATA[<p>Si volem substituir una <a title="Cadena de caràcters a la Viquipèdia" href="http://ca.wikipedia.org/wiki/String_(estructura_de_dades)">cadena de caràcters</a> per una altra en un fitxer o en múltiples fitxers simultàniament i de forma recursiva<sup><a title="nota 1" href="#nota1">1</a></sup> ho podem fer amb aquesta comanda:</p>
<pre class="brush: bash;">find -type f -exec sed -i 's/CADENA A SUBSTITUIR/CADENA NOVA/g' {} \;</pre>
<p>On ﻿<span style="font-family: Consolas, Monaco, 'Courier New', Courier, monospace; line-height: 18px; font-size: 12px; white-space: pre;">CADENA A SUBSTITUIR</span> és una <strong><a title="Expressió regular a la Viquipèdia" href="http://ca.wikipedia.org/wiki/Expressió_regular">expressió regular</a></strong>. Això vol dir que hem d&#8217;<em><a title="Escape character a la Wikipedia (en anglès)" href="http://en.wikipedia.org/wiki/Escape_character">escapar</a></em> els caràcters amb connotacions especials amb una barra invertida \, com . + * [ ] etcètera.</p>
<p>També cal tenir en compte que això substituirà <strong>totes les aparicions</strong> de la cadena a substituir que es trobin per <strong>tots els fitxers</strong>. Si volem que només s&#8217;apliqui a certs fitxers, podem utilitzar el paràmetre <em>-name</em> de <a href="http://blog.jau.cat/2010/03/01/cerca-amb-la-comanda-find-de-gnulinux/">la comanda find</a>.</p>
<p>Si combinem el que he dit als dos paràgrafs anteriors, per exemple la comanda:</p>
<pre class="brush: bash;">find -type f -name aliments* -exec sed -i 's/pebrot (vermell)/maduixa vermella/g' {} \;</pre>
<p>cercarà només en fitxers els noms dels quals comencin per aliments,  i substituirà <em>pebrot (vermell)</em> per <em>maduixa vermella</em>.</p>
<p>Ho podem complicar més, i aprofitar la paraula vermell de la cadena inicial i afegir-li la lletra a per fer-la femenina: vermella, tot amb expressions regulars:</p>
<pre class="brush: bash;">find -type f -name aliments* -exec sed -i 's/\(pebrot (\)\(vermell\))/maduixa \2a/g' {} \;</pre>
<p>Aquesta expressió crea dos grups: el primer conté &#8220;pebrot (&#8221; i el segon &#8220;vermell&#8221; (el darrer parèntesi queda fora de cap grup). Així podem usar la seqüència \2 per referir-nos al contingut del segon grup, al qual li afegim la lletra a per transformar-lo en &#8220;vermella&#8221;.</p>
<div style="margin-top: 25px;">
<p><sup><a name="nota1"></a>1</sup> Si volem fer-ho en un sol fitxer o en varis sense necessitar la recursivitat no cal usar <em>find</em>, podem usar <em>sed</em> directament:</p>
<pre class="brush: bash;">sed -i 's/CADENA A SUBSTITUIR/CADENA NOVA/g' fitxer1 *.txt</pre>
</div>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/03/17/substituir-text-en-multiples-fitxers-amb-sed/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Actualitzar automàticament la revisió/data/autor en fer commit a subversion</title>
		<link>http://blog.jau.cat/2010/03/12/actualitzar-automaticament-la-revisio-data-autor-en-fer-commit-a-subversion/</link>
		<comments>http://blog.jau.cat/2010/03/12/actualitzar-automaticament-la-revisio-data-autor-en-fer-commit-a-subversion/#comments</comments>
		<pubDate>Fri, 12 Mar 2010 22:11:06 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[subversion]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=210</guid>
		<description><![CDATA[Si recentment escrivia l&#8217;entrada sobre la  amb la possibilitat de fer diferents cerques simultànies, avui explico un cas on ho he usat.
Alguna vegada haureu vist en fitxers amb codi font (siguin del llenguatge de programació que siguin), que a la part superior apareix informació sobre què conté el fitxer, la seva llicència, o l&#8217;autor, [...]]]></description>
			<content:encoded><![CDATA[<p>Si recentment escrivia l&#8217;entrada sobre la <a href="http://blog.jau.cat/2010/03/01/cerca-amb-la-comanda-find-de-gnulinux/">comanda <strong>find</strong></a> amb la possibilitat de fer diferents cerques simultànies, avui explico un cas on ho he usat.</p>
<p>Alguna vegada haureu vist en fitxers amb <a title="En Informàtica es refereix a una sèrie d'instruccions escrites en algun llenguatge de programació llegible per l'home" href="http://ca.wikipedia.org/wiki/Codi_font">codi font</a> (siguin del llenguatge de programació que siguin), que a la part superior apareix informació sobre què conté el fitxer, la seva llicència, o <strong>l&#8217;autor, la data i el número de revisió</strong> dels darrers canvis que ha patit el fitxer en qüestió. En referència a aquestes tres darreres em refereixo a una línia d&#8217;aquest estil:</p>
<p>﻿﻿$Id: codi.php 148 2006-07-28 21:30:43Z jaume $</p>
<p>Evidentment aquestes dades no són escrites a mà per l&#8217;autor cada vegada que fa un canvi al fitxer (una nova revisió), sinó que es realitza automàticament; i concretament aquest és el format que utilitza <strong><em>subversion</em></strong> per la variable Id. En realitat jo havia escrit <strong>$Id$</strong> allà on he volgut del fitxer anomenat codi.php, i en fer el <em>commit</em> al dipòsit el sistema ho ha substituït per la línia completa que veieu a dalt. <em>Id</em> és una combinació reduïda de les paraules clau <strong>$Author$</strong>, <strong>$Revision$</strong> i <strong>$Date$</strong>, que també podeu utilitzar de forma independent. Al <a title="Nova finestra" href="http://svnbook.red-bean.com/en/1.5/svn.advanced.props.special.keywords.html" target="_blank">manual de subversion</a> (en anglès) podeu llegir més al respecte. Si volem que tots els fitxers del nostre projecte que tinguem al sistema de control de versions <em>subversion</em> incorporin aquesta funcionalitat, hem de configurar el servidor de certa manera. Editem el fitxer /etc/subversion/config (aquest és el camí a Ubuntu, però serà similar a altres distribucions). Per defecte <em>enable-auto-props</em> està comentat, ho deixem així:</p>
<pre class="brush: bash;">
### Set enable-auto-props to 'yes' to enable automatic properties
### for 'svn add' and 'svn import', it defaults to 'no'.
### Automatic properties are defined in the section 'auto-props'.
enable-auto-props = yes
</pre>
<p>I una mica més avall editem les propietats automàtiques:</p>
<pre class="brush: bash;">
### Section for configuring automatic properties.
[auto-props]
### The format of the entries is:
###   file-name-pattern = propname[=value][;propname[=value]...]
### The file-name-pattern can contain wildcards (such as '*' and
### '?').  All entries which match (case-insensitively) will be
### applied to the file.  Note that auto-props functionality
### must be enabled, which is typically done by setting the
### 'enable-auto-props' option.
*.php = svn:eol-style=native;svn:keywords=Author Date Id Revision
*.txt = svn:eol-style=native;svn:keywords=Author Date Id Revision
*.sh  = svn:eol-style=native;svn:keywords=Author Date Id Revision;svn:executable
*.tpl = svn:eol-style=native
*.css = svn:eol-style=native
*.js  = svn:eol-style=native
*.htm = svn:eol-style=native
*.html = svn:eol-style=native
*.htaccess = svn:eol-style=native
*.png = svn:mime-type=image/png
*.jpg = svn:mime-type=image/jpeg
*.gif = svn:mime-type=image/gif
</pre>
<p>Jo he definit que només els fitxers amb l&#8217;extensió php, txt i sh tinguin la capacitat de substitució de paraules clau. A més a més els .sh vull que siguin executables (de manera que si algú fa un <em>check out<span style="font-style: normal;"> el propi </span>subversion</em> s&#8217;encarregui de marcar el bit d&#8217;execució per nosaltres). I si us hi fixeu, la resta de fitxers de text tenen una altra propietat: <em>svn:eol-style=native</em>. Això fa referència al final de línia (en anglès, eol = end of line), i serveix per què vàries persones treballin sobre els mateixos fitxers en sistemes operatius diferents (els quals usen diferents caràcters per indicar el final de línia). Les tres darreres línies són pels fitxers d&#8217;imatge, cadascun amb el seu tipus <a title="Extensions de correu Internet multipropòsit" href="http://ca.wikipedia.org/wiki/Multi-Purpose_Internet_Mail_Extensions">mime</a> corresponent.</p>
<p>Un cop fet això, ens assegurem que els fitxers <strong>nous</strong> que agreguem al dipòsit tindran aquestes propietats, però què passa amb els fitxers existents? Cal que els donem les propietats nosaltres manualment, i aquí entra la potència de la comanda <em>find</em>. I si ho podem fer tot d&#8217;una sola passada millor <img src='http://blog.jau.cat/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  Ens situem al directori arrel del nostre projecte i executem:</p>
<pre class="brush: bash;">
find . \
\( -name '*.php' -exec svn propset svn:eol-style native {} \; -exec svn propset svn:keywords 'Author Date Id Revision' {} \; \) , \
\( -name '*.txt' -exec svn propset svn:eol-style native {} \; -exec svn propset svn:keywords 'Author Date Id Revision' {} \; \) , \
\( -name '*.sh'  -exec svn propset svn:eol-style native {} \; -exec svn propset svn:keywords 'Author Date Id Revision' {} \; -exec svn propset svn:executable {} \; \) , \
\( -name '*.tpl' -exec svn propset svn:eol-style native {} \; \) , \
\( -name '*.css' -exec svn propset svn:eol-style native {} \; \) , \
\( -name '*.js' -exec svn propset svn:eol-style native {} \; \) , \
\( -name '*.htm' -exec svn propset svn:eol-style native {} \; \) , \
\( -name '*.html' -exec svn propset svn:eol-style native {} \; \) , \
\( -name '.htaccess' -exec svn propset svn:eol-style native {} \; \) , \
\( -name '*.png' -exec svn propset svn:mime-type 'image/png' {} \; \) , \
\( -name '*.jpg' -exec svn propset svn:mime-type 'image/jpeg' {} \; \) , \
\( -name '*.gif' -exec svn propset svn:mime-type 'image/gif' {} \; \) &gt; /dev/null
</pre>
<p>I això és tot, a programar de gust! <img src='http://blog.jau.cat/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/03/12/actualitzar-automaticament-la-revisio-data-autor-en-fer-commit-a-subversion/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Cerca amb la comanda find de GNU/Linux</title>
		<link>http://blog.jau.cat/2010/03/01/cerca-amb-la-comanda-find-de-gnulinux/</link>
		<comments>http://blog.jau.cat/2010/03/01/cerca-amb-la-comanda-find-de-gnulinux/#comments</comments>
		<pubDate>Mon, 01 Mar 2010 19:42:17 +0000</pubDate>
		<dc:creator>minterior</dc:creator>
				<category><![CDATA[Programari]]></category>
		<category><![CDATA[com es fa]]></category>
		<category><![CDATA[find]]></category>
		<category><![CDATA[GNU/Linux]]></category>
		<category><![CDATA[utilitats]]></category>

		<guid isPermaLink="false">http://blog.jau.cat/?p=208</guid>
		<description><![CDATA[Fins ara, sempre que havia de cercar diferents tipus de fitxers i/o directoris amb la comanda find, executava una comanda de forma independent per a cada cosa. Però això no és gens òptim, perquè cerquem una i altra vegada per tots els fitxers desitjats. Fa uns dies vaig aprendre com cercar vàries coses alhora, en [...]]]></description>
			<content:encoded><![CDATA[<p>Fins ara, sempre que havia de cercar diferents tipus de fitxers i/o directoris amb la <strong>comanda find</strong>, executava una comanda de forma independent per a cada cosa. Però això no és gens òptim, perquè cerquem una i altra vegada per tots els fitxers desitjats. Fa uns dies vaig aprendre com cercar vàries coses alhora, en una sola cerca, de manera que se li puguin indicar a find diferents patrons. Aquí mostro l&#8217;exemple que apareix al manual (que es pot accedir amb la comanda: <strong>man find</strong>), escrit en multilínia per fer-lo més entenidor (recordo també que per canviar de línia a la shell abans de pitjar la tecla retorn o <em>enter</em> cal acabar la línia amb un espai i una barra invertida \):</p>
<pre class="brush: bash;">
find / \
\( -perm -4000 -fprintf /root/suid.txt %#m %u %p\n \) , \
\( -size +100M -fprintf /root/big.txt %-10s %p\n \)
</pre>
<p>Recorre el sistema una única vegada, llistant fitxers i directoris amb <em>setuid</em> al fitxer /root/suid.txt i fitxers grans (majors de 100 MB) al fitxer /root/big.txt.</p>
<p>Un exemple més fàcil d&#8217;entendre:</p>
<pre class="brush: bash;">
find . \
\( -name '*.php' -exec echo &quot;Trobat fitxer PHP:&quot; {} \; \) , \
\( -name '*.exe' -exec rm -f {} \; -exec echo &quot;Eliminat fitxer .exe:&quot; {} \; \) , \
\( -name '*.txt' -exec ls -l {} \; \)
</pre>
<p>Al primer patró busquem els fitxers el nom dels quals acabi amb &#8216;.php&#8217; i mostrem una frase per la sortida estàndard, al segon eliminem fitxers &#8216;.exe&#8217; i informem de l&#8217;acció, i al tercer llistem informació de fitxers &#8216;.txt&#8217; en un format llarg.</p>
<p>Podeu veure que a més a més es poden executar vàries comandes per cada patró de cerca. En el segon patró, executem dues comandes amb l&#8217;opció -exec: la primera per eliminar els fitxers trobats i la segona per informar què hem fet.</p>
<p>Bon profit.</p>
]]></content:encoded>
			<wfw:commentRss>http://blog.jau.cat/2010/03/01/cerca-amb-la-comanda-find-de-gnulinux/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
