18 janvier, 2010Les droits en plus simple

Les droits sous linux, un truc avec lequel j'ai eu du mal au départ. Je vais tenter de vous l'expliquer le plus simplement possible.

Pour commencer on va se référer à la vie réelle, c'est plus simple pour comprendre.

Imaginons un micro-ondes

Four micro-ondes - t0m-s -

Un micro-ondes ??? Oui, attendez, vous allez comprendre par après.

Maintenant comparons nos fonctions de droits et celle du micro-ondes :
[table id=2 /]

Et n'oublions pas aussi les propriétaires :
[table id=3 /]

Donc maintenant que vous pouvez faire un rapport avec votre micro-ondes (instrument indispensable à une vie de Geek) on va commencer sérieusement.

Si vous voulez réchauffer une vieille pizza d'il y a 3 jours : vous voulez que personne ne puisse voir ça, ni changer votre pizza par autre chose et encore moins allumer le micro-ondes.
Vous allez donc pratiquer de la "lecture seul" en gros, vous seul pouvez voir, modifier et chauffer votre pizza.
Dans les droits cela vous donnera  "700"  ... Pourquoi "700" ? C'est simple.

On suit un petit tableau
[table id=1 /]

Comment a-t-on fait pour trouver "700" ? En additionnant les nombres.
Le premier nombre vous représente vous, vous pouvez avoir tous les droits donc lire + écrire + exécuter (4+2+1) = 7
Le second nombre représente le groupe (votre famille), ils n'ont aucun droit => 0
Le troisième nombre représente les autres (tout ce qui est "public"), aucun droit non plus => 0

Imaginons maintenant que vous vouliez que tout le monde puisse accéder à votre micro-ondes librement (donc voir ce qu'il contient, modifier ce contenu et réchauffer des aliments).
Vous, tous les droits => 4+2+1 = 7
Votre famille idem => 7
Tous les autres aussi => 7
Vous devrez donc donner le code 777 à votre ficher et tout le monde pourra en faire ce qu'il veut (par contre c'est très peu recommandé pour la sécurité).

Un autre exemple un peu plus complexe, vous avez tous les droits, votre famille peut modifier le contenu du micro-ondes et le voir, mais ne peut le lancer, les autres peuvent seulement le lancer.
Vous => 4+2+1 = 7
Votre famille => lire (4) + écrire (2) => 4+2 = 6
Les autres => exécuter => 1
Vous aurez donc 761.

Maintenant vous devriez avoir compris les droits, on peut aussi utiliser la notation avec des lettres : "r" pour Read (lire), "w" pour Write (écrire), "x" pour eXecute (exécuter), et le tiret quand il n'y a pas de droits.
Exemple de 761 en lettre =>  rwxrw—x
Donc les 3 premiers symbole représente vos droits => "r" lire, "w" écrire, "x" exécuter.
Les trois suivants ceux du groupe (votre famille) => "r" lire, "w" écrire, "-" car on n'exécute pas.
Les trois dernier les droits public => "-" car on ne lit pas, "-" car on n'écrit pas, "x" exécuter.

J'espère que ça vous sera utile, à plus.

Creative Commons License photo credit: fazh

1 janvier, 2010Bonne année

Salut à tous,

Je vous souhaite à tous une bonne année 2010.

bonne année 2012 - t0m-s -
Creative Commons License photo credit: So_P

24 décembre, 2009Joyeux Noël

Joyeux Noël à tous :)

Parfois on peux avoir envie d'optimiser un peu sa base de donnée et de l'alléger, je vais vous expliquer comment faire pour WordPress.

Avant de faire des manipulations sur une base de donnée n'oubliez pas d'en faire une sauvegarde avant, un accident est si vite arrivé, ce serait dommage de perdre vos données aussi bêtement.PhpMyadmin WordPress mysql - t0m-s -

Un truc tout con est d'optimiser sa base, c'est simple et vous gagnerez, et de la place, et de la vitesse, pour ça dans phpMyAdmin sélectionnez toutes les tables de votre base (cliquez sur "tout cocher") ensuite sélectionnez "optimiser la table" dans le menu déroulant et faites "exécuter", c'est valable pour tout ce qui utilise une base de donnée MySQL.

Maintenant plus spécifique à WordPress.

Il y a des tas de bonnes options dans WordPress, mais certaines ne sont pas utile à tous le monde et en plus elles bouffent beaucoup de place.
C'est le cas du "suivi de billet" cette option permet de voir les modifications apportées à un billet, mais quand on est seul à les rédiger c'est pas très utile (par contre si vous etes plusieurs à rédiger les news sur le même blog c'est plutôt pas mal pour la correction ou l'apport de modifications, précisions,...).

Dans le cas où vous êtes seul maitre à bord (comme moi, je suis le chef, mais de personne, donc c'est moins marrant tout de suite :-( ) vous pouvez supprimer toutes les entrées se trouvant dans votre base de donnée concernant ce suivi des modifications.
Pour ça allez dans votre interface phpMyAdmin (hé oui, encore, on va pas la quitter tout de suite), rendez-vous dans l'onglet "SQL" (celui pour effectuer des commandes sur votre base) et entrez y ce code (il va effacer toutes les entrées des "révision" mais ne touchera pas à vos précieux billet, soyez sans craintes).

DELETE FROM wp_posts WHERE post_type = "revision";

Un autre truc plutôt inutile sont les infos sur les flux RSS (ceux dans l'interface d'administration de WP).
Toutes ces infos sont stockées dans votre BDD et pour les supprimer rien de mieux qu'un petit

DELETE FROM wp_options WHERE option_name LIKE 'RSS_%';

Après toutes ces manipulations ma base est passée de plus de 3.7Mo à tout juste 700ko (ouai je sais qu'elle est petite ma base de donnée, et alors?).

Si vous avez d'autres petites astuces pour optimiser une Base WordPress n'hésiter pas à les donner en commentaire, je me ferais un plaisir de compléter cet article.

Voila un petit script pour tous ceux qui voudraient faire des sauvegardes de leur base de donnée.

<?php // création d'une fonction comportant les identifiants de connexion au FTP : function mysql_structure() { $host = 'mon_serveur'; $user = 'mon_login'; $pass = 'mot_de_passe'; $base = 'nom_de_la_base'; // création d'un fichier affichant en boucle le contenu des tuples de la base : mysql_connect($host, $user, $pass); mysql_select_db($base); $tables = mysql_list_tables($base); while ($donnees = mysql_fetch_array($tables)) { $table = $donnees[0]; $res = mysql_query("SHOW CREATE TABLE $table"); if ($res) { $insertions = ""; $tableau = mysql_fetch_array($res); $tableau[1] .= ";"; $dumpsql[] = str_replace("\n", "", $tableau[1]); $req_table = mysql_query("SELECT * FROM $table"); $nbr_champs = mysql_num_fields($req_table); while ($ligne = mysql_fetch_array($req_table)) { $insertions .= "INSERT INTO $table VALUES("; for ($i=0; $i<=$nbr_champs-1; $i++) { $insertions .= "'" . mysql_real_escape_string($ligne[$i]) . "', "; } $insertions = substr($insertions, 0, -2); $insertions .= ");\n"; } if ($insertions != "") { $dumpsql[] = $insertions; } } } return implode("\r", $dumpsql); } // creation d'une fonction file_put_content si le script est en PHP4 : if(!function_exists('file_put_contents')) { function file_put_contents($filename, $data, $file_append = false) { $fp = fopen($filename, (!$file_append ? 'w+' : 'a+')); if(!$fp) { trigger_error('file_put_contents ne peut pas écrire dans le fichier.', E_USER_ERROR); return; } fputs($fp, $data); fclose($fp); } } // création du fichier de dump sur le même niveau que ce fichier dump.php file_put_contents("sqldump_".date("d-n-Y").".sql", mysql_structure()); // effacement du fichier precedant (créé 7 jours plus tot) $time_old = getdate(mktime()-(7*24*3600)); $an = $time_old['year']; $mois = $time_old['mon']; $jour = $time_old['mday']; // formatage des jours à 1 chiffre for($k=1; $k<10; $k++) { if ($jour==$k) { $jour='0'.$jour; } } $date_old=$jour.'-'.$mois.'-'.$an; $file_old="sqldump_".$date_old.".sql"; unlink($file_old); ?>

Le script n'est pas de moi, je l'ai honteusement pompé sur webtolosa (la flemme de coder un truc qui existe déjà, je sais, c'est mal).Vous devrez peut-être commenter l'avant dernière ligne (lui rajouter des "//" devant), sous peine de voir un beau message d'erreur lors de la première exécution du script.

Vous pouvez bien sur améliorer le script pour qu'il compresse le fichier sql, pour qu'il fasse une sauvegarde de vos fichiers et place le tout dans un fichier .tar.bz2, et par exemple qu'il vous envoie le tout par mail (attention à la taille des pièces jointes dans ce cas là, si c'est trop gros ça risque de ne pas s'envoyer).

L'avantage avec le script php est que vous pouvez le lancer vous même en vous rendant dessus, ou vous pouvez l'intégrer dans une page de spécifique de votre site.

Pour le faire tourner automatiquement chez ovh (peut-être un rapport avec le fait que je soit passé chez eux hier ...) c'est simple, uploadez le script dans votre FTP (dans le répertoire /home/votre_login/www/ ), passez le en chmod 704, ainsi vous pouvez l'exécuter vous même depuis le web.
Bon là tout le monde peux le lancer donc arranger vous pour lui donner un nom bien dur à trouver du style "mega_back-up_de_la—b-a-s-e--my_sql.php" ainsi les gens ne s'amuseront pas à le lancer pour vous (et faire ramer votre site par la même occasion, surtout si la base de donnée est grosse).

Rendez-vous ensuite dans votre interface d'administration, allez dans la gestion de votre hébergement, et ensuite dans "planificateur de tâches".

Planificateur de taches ovh - t0m-s -

Créez une nouvelle tache, et renseignez l'endroit où se trouve votre script php, indiquer quand vous voulez qu'il s'exécute et enregistrez les modifications, voila, une sauvegarde vous attendra dans votre ftp tout les jeudi minuit par exemple.

Si vous ne comprenez pas quelque chose demandez moi.