├── Cinnamon.md ├── Composer.md ├── Gnome-shell.MD ├── Log.md ├── NAS-synology.md ├── README.md ├── Scripts ├── backup-serveur │ ├── README.md │ ├── backup-incremental.sh │ └── monserveur.cfg ├── mysql-backup.sh ├── mysql-import.sh └── site-factory.sh ├── Serveurs ├── Prise-en-main-Centos-7.md └── solr.md ├── Subversion-SVN.md ├── Unicode.md ├── Videos-conversion.md ├── apache2-httpd.md ├── cron.md ├── files.md ├── git-hooks.md ├── git.MD ├── mac-os-stuff.md ├── raspberry-pi.md ├── redis.md ├── static-website.md ├── vim.md └── xUbuntu-PPA.md /Cinnamon.md: -------------------------------------------------------------------------------- 1 | Cinnamon 2 | ========= 3 | Petites commandes qui permettent de s'en sortir avec Cinnamon quand tout va mal 4 | 5 | ## Relancer Cinnamon depuis un autre TTY 6 | ### solution soft 7 | - `pkill -HUP -f "cinnamon --replace"` => tente un soft reboot en gardant les fenêtres et programmes 8 | 9 | ### solution BADASS 10 | Cinnamon freezes 11 | Switch tty. I usually go to tty6, Ctrl+Alt+F6 12 | If you need to login first, do so. 13 | Type w (yes, just the letter) and press enter. This commands does a lot of different things, but you need it to figure out the number of the display you are using. The display number is in the column FROM. Mine is :0 (yes, including the colon). 14 | Assuming that cinnamon is already dead (which you would notice by the windows lacking titles and that you can't move different windows around, and perhaps even not being able to use the keyboard), you type export DISPLAY=:0; cinnamon &, and don't forget the colon. I add the ampersand (&) only not to keep that tty busy. 15 | -------------------------------------------------------------------------------- /Composer.md: -------------------------------------------------------------------------------- 1 | Composer 2 | ========= 3 | Gestionnaires de dépendances PHP 4 | 5 | 6 | ## Installation 7 | Dans un terminal : 8 | 9 | ```curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer``` 10 | 11 | ## Commande de base 12 | |Commande|Résultat| 13 | |------- | -------| 14 | |`curl -sS https://getcomposer.org/installer | php && sudo mv composer.phar /usr/local/bin/composer`|Installer Composer de manière globale| 15 | |`composer self-update` | Mise à jour composer| 16 | |`composer clear-cache`| Vider le cache de composer| 17 | |`composer global update` | Mise à jour l'ensemble des paquets gérés par composer| 18 | |`composer config -g github-oauth.github.com ` | ajouter un token oauth de github pour composer pour éviter les limites d'accès API (CF : https://getcomposer.org/doc/articles/troubleshooting.md#api-rate-limit-and-oauth-tokens)| 19 | 20 | ## Paquets et ressources utiles 21 | 22 | ###drupal-coder 23 | Contient aussi code-sniffer, permet de vérifier son code sur les bonnes pratiques 24 | 25 | Installation : 26 | 27 | ```composer global require drupal/coder``` 28 | 29 | ###drupal-project 30 | Utiliser drupal à la sauce composer, compatible avec drupal 7 et drupal 8 31 | 32 | 33 | [https://github.com/drupal-composer/drupal-project](https://github.com/drupal-composer/drupal-project) 34 | 35 | ###pman 36 | Doc php dans le terminal 37 | 38 | [https://github.com/willdurand/pman](https://github.com/willdurand/pman) 39 | 40 | Installation : 41 | 42 | ```composer global require willdurand/pman:dev-master``` 43 | 44 | Puis ajouter `$COMPOSER_HOME/vendor/willdurand/pman/bin` à votre variable $PATH 45 | -------------------------------------------------------------------------------- /Gnome-shell.MD: -------------------------------------------------------------------------------- 1 | #Gnome Shell 2 | 3 | Des trucs qu'ils sont bien pour cet environement de bureau [WIP] 4 | 5 | ## Nautilus 6 | ###Ouvrir un terminal dans le dossier courant 7 | Editer le fichier ~/.config/nautilus/accels 8 | `vim ~/.config/nautilus/accels` 9 | 10 | Remplacer la ligne 11 | 12 | `; (gtk_accel_path "/ExtensionsMenuGroup/TerminalNautilus:OpenFolderLocal" "")` 13 | 14 | par 15 | 16 | `(gtk_accel_path "/ExtensionsMenuGroup/TerminalNautilus:OpenFolderLocal" "F12")` 17 | 18 | ## Extensions 19 | 20 | ### Alternatetab 21 | 22 | Remplace le "Alt-tab" par un plus classique, en supprimant le regroupement des fenêtres par application. 23 | 24 | Lien : [Gnome.org](https://extensions.gnome.org/extension/15/alternatetab/) 25 | 26 | ### Audio-Output-Switcher 27 | Permet de switcher entre les sorties sons du pc (casque / HP...) 28 | 29 | Liens : 30 | - [Github](https://github.com/kgaut/gnome-shell-audio-output-switcher) 31 | - [Gnome.org](https://extensions.gnome.org/extension/1028/gnome-shell-audio-output-switcher/) 32 | 33 | ### Clipboard Indicator 34 | Permet de garder un historique de son presse-papier 35 | 36 | Lien : [Gnome.org](https://extensions.gnome.org/extension/1028/gnome-shell-audio-output-switcher/) 37 | 38 | ### Taskbar 39 | 40 | Ajoute les icones des applications lancées dans la barre supérieure 41 | 42 | Lien : [Gnome.org](https://extensions.gnome.org/extension/584/taskbar/) 43 | 44 | ## Themes 45 | 46 | @todo : numix 47 | -------------------------------------------------------------------------------- /Log.md: -------------------------------------------------------------------------------- 1 | # Gestion des logs 2 | 3 | ## Voir tous les logs en live 4 | ``` 5 | tail -f /var/log/**/*.log 6 | ``` 7 | 8 | ## Voir les derniers fichiers logs modifiés 9 | ``` 10 | ls -ltr /var/log 11 | ``` 12 | -------------------------------------------------------------------------------- /NAS-synology.md: -------------------------------------------------------------------------------- 1 | NAS Synology 2 | ========= 3 | 4 | ##Ressources 5 | 6 | http://pellelatarte.fr/2011/03/le-ssh-pour-tous-les-utilisateurs-sur-les-nas-synology/ 7 | 8 | ## Cron 9 | 10 | |**commande**|**Résultat**| 11 | |------------|------------| 12 | |`vi /etc/crontab`|Modifier les tâches cron| 13 | |`/usr/syno/sbin/synoservicectl --restart crond`|Redémarrer le service cron| 14 | 15 | 16 | ## Modification configuration programmes 17 | 18 | |**fichier**|**Programme**| 19 | |------------|------------| 20 | |`/var/packages/deluge/scripts/start-stop-status`|Deluge - Configuration| 21 | |`/var/packages/sickbeard-custom/scripts/start-stop-status`|Sick Beard - Configuration| 22 | |`/usr/local/deluge/`|Deluge - Installation| 23 | |`/usr/local/sickbeard-custom/`|Sick Beard - Installation| 24 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | CLI-Magic 2 | ========= 3 | 4 | Ensembles de commandes utiles sous GNU/Linux. Rien de révolutionnaire ici, mais c'est un aide mémoire sur certaines commandes que l'on utlise pas forcement tous les jours. 5 | 6 | Les pull requests sont évidement les bienvenues, n'hésitez-pas aussi si vous détectez une erreur, une faute d'orthographe, ou si vous avez une explication qui vous semble plus claire. 7 | 8 | Un peu de réorganisation est prévue pour les mois qui viennent. 9 | 10 | ## Globales 11 | |Commande|Résultat| 12 | |------- | -------| 13 | |`watch -n x ` | Executer et afficher le résultat d'une commande toutes les x secondes| 14 | 15 | ## Archives 16 | |Commande|Résultat| 17 | |------- | -------| 18 | |`tar -zcvf archive.tar.gz DOSSIER/`|Création d'une archive tar.gz contenant le dossier **DOSSIER**| 19 | 20 | ## Fichiers 21 | |Commande|Résultat| 22 | |------- | -------| 23 | |`du -h`| Afficher le poids du dossier courant, et affiche le poids de chacun des fichiers| 24 | |`du -h --max-depth=1 ./`| Afficher le poids du dossier courant et de chacun des dossier de niveau 1| 25 | |`du -h --max-depth=1 ./ | sort -h`| Afficher le poids du dossier courant et de chacun des dossier de niveau 1, en les triant par poids| 26 | |`find -mtime -2`|Trouver l'ensemble des fichiers modifiés au cours des 2 derniers jours| 27 | |`rename 's/ /_/g' *` | Renommer tous les fichier d'un répertoire en replaçant les espaces par des underscores| 28 | |`tar cf - * | (cd ../../httpdocs/; tar xvf -)` | Déplacer un dossier et son contenu sans en modifier les droits| 29 | |` scp -P 1374 fichier.tar root@server.net:/home/test`| Envoyer le fichier **fichier.tar** vers le serveur **server.net** en utilisant le port ssh 1374 | 30 | |`for f in *; do mv "$f" "$f.jpg"; done`| ajouter une extension **.jpg** à tous les fichiers du dossier| 31 | |`ncdu`|permet de visualiser l'usage disque dans un dossier (necessite l'installation du package *ncdu*)| 32 | 33 | ## Tar 34 | ``` 35 | tar -zcvf /var/backup/databases.tar.gz /root/backup/ 36 | tar -zcvf - /home/ | split --byte=256MB - /var/backup/home/home.tar.gz 37 | tar -zcvf /var/backup/etc.tar.gz /etc/ 38 | ``` 39 | 40 | ## Wget 41 | |Commande|Résultat| 42 | |------- | -------| 43 | |`get -nd -H -p -A jpg,jpeg,png,gif -e robots=off http://monsite.com/mapage` | Récupère toutes les images de la page http://monsite.com/mapage| 44 | 45 | ## Transfert de fichiers (SCP) 46 | |Commande|Résultat| 47 | |------- | -------| 48 | |`scp USER@SERVER:/home/user/fichier.tar .`| Télécharge le fichier **/home/user/fichier.tar** depuis un server distant dans le dossier courant (en utilisant le port ssh standard (22)| 49 | |`scp -P 1234 USER@SERVER:/home/user/fichier.tar .`| Télécharge le fichier **/home/user/fichier.tar** depuis un server distant dans le dossier courant en se connectant via un port SSH spécifique| 50 | |`scp fichier.tar USER@server.net:/home/test`| Envoie le fichier **fichier.tar** vers le serveur **server.net** en utilisant le port ssh standard (22) | 51 | |`scp -P 1374 fichier.tar root@server.net:/home/test`| Envoie le fichier **fichier.tar** vers le serveur **server.net** en utilisant le port ssh 1374 | 52 | |`scp -r mondossier USER@server.net:/home/test`| Envoie le dossier **mondossier** vers le serveur **server.net** en utilisant le port ssh standard (22) | 53 | 54 | ## Transfert de fichiers (RSYNC) 55 | Transferer tous les fichiers `.sql.gz` depuis le dossier `/vhosts` du serveur `serveur.net` vers le dossier `/vhosts/` local : 56 | ``` 57 | rsync -avh --progress --stats --ignore-errors --include="*/" --include="*.sql.gz" --exclude="*" -e ssh USER@server.net:/vhosts/ /vhosts/ 58 | ``` 59 | 60 | ## Transfert de fichiers spécifique as fuck 61 | ### Fichier le plus récent 62 | Récupérer via SCP le fichier le plus récent du dossier distant **/home/dossier/** et le stocker dans le dossier local **/var/dossier/** : 63 | ``` 64 | scp USER@SERVER:/home/dossier/$(ssh USER@SERVER 'ls -t /home/dossier/ | head -1') /var/dossier/ 65 | ``` 66 | ### Fichiers modifiés dans les dernières 24H 67 | Récupérer via RSYNC les fichiers modifiés dans les dernières 24H du dossier distant **/home/dossier/** et les stocker dans le dossier local **/var/dossier/** : 68 | ``` 69 | rsync -avz USER@SERVER:'$(find /home/dossier/ -ctime -1)' /var/dossier/ 70 | ``` 71 | 72 | ## Grep 73 | |Commande|Résultat| 74 | |------- | -------| 75 | |`grep 'mafonction()' --include='\*.php'` | Rechercher les appels de mafonction() uniquement dans les fichiers php| 76 | |`cat toto.txt \| grep 'lorem' -c` | Retourne le nombre de "lorem" dans toto.txt| 77 | |`grep -c ^ toto.txt` | Retourne le nombre de lignes du fichier toto.txt| 78 | |`grep access.log \| awk -F "\ " {'print $7'}` | Récuperer uri + query string dans fichier de log apache| 79 | 80 | ## Images 81 | |Commande|Résultat| 82 | |------- | -------| 83 | |`mogrify -resize 150 monimage.jpg` | Redimensionne l'image **monimage.jpg** à 150px de large| 84 | |`mogrify -resize 150 *.jpg` | Redimensionne toutes les images jpg d'un dossier à 150px de large| 85 | 86 | ## MySQL 87 | |Commande|Résultat| 88 | |------- | -------| 89 | |`mysql -u USER -h localhost -p DB > DUMP.SQL` | Dump la base **DB** du serveur **localhost** dans le fichier **DUMP.SQL** si l'utilisateur mysql **root** a un mot de passe| 90 | |`mysql -u USER -h localhost DB > DUMP.SQL` | Dump la base **DB** du serveur **localhost** dans le fichier **DUMP.SQL** si l'utilisateur mysql **root** n'a pas de mot de passe| 91 | |`mysql -u USER -h localhost -p DB < DUMP.SQL` | Importe de dump **DUMP.SQL** dans la base **DB** du serveur **localhost** si l'utilisateur mysql **root** a un mot de passe| 92 | |`mysql -u USER -h localhost DB < DUMP.SQL` | Importe de dump **DUMP.SQL** dans la base **DB** du serveur **localhost** si l'utilisateur mysql **root** n'a pas de mot de passe| 93 | |```zcat DUMP.sql.gz \| mysql -u USER -p DB``` |Importe de dump gzipé **DUMP.sql.gz** dans la base **DB** du serveur **localhost** si l'utilisateur mysql **root** a un mot de passe| 94 | |```zcat DUMP.sql.gz \| mysql -u USER DB``` |Importe de dump gzipé **DUMP.sql.gz** dans la base **DB** du serveur **localhost** si l'utilisateur mysql **root** n'a pas de mot de passe| 95 | |```UPDATE `users` SET `mail` = CONCAT("moi+site-",ROUND(RAND() * 10000) , '@monsite.net') ```| Modifie les emails de la table **users** avec des adresses random| 96 | |```UPDATE `users` SET `mail` = CONCAT("moi+site-",`uid` , '@monsite.net')```| Modifie les emails de la table **users** avec des adresses générée en fonction du UID de l'utilisateur| 97 | UPDATE `users` SET `mail` = CONCAT("moi+site-",`uid` , '@monsite.net') 98 | 99 | ## Utilisateurs 100 | |Commande|Résultat| 101 | |------- | -------| 102 | |`adduser login` | Créé l'utilisateur **login** de manière interactive| 103 | |`usermod -a -G www-data login`|Ajoute l'utilisateur *existant* **login** au groupe **www-data**| 104 | |`userdel login`|Supprime l'utilisateur **login**| 105 | |`userdel -r login`|Supprime l'utilisateur **login** et son dossier home| 106 | 107 | ## Subversion 108 | |Commande|Résultat| 109 | |------- | -------| 110 | |`svn log -l 5` | Retourne les 5 dernières lignes d'un log| 111 | |`svn log -l \| grep 'USER'` | Lister l'ensemble des COMMIT par USER| 112 | |`svn log -l \| grep 'USER' -c` | Récuperer le nombre de COMMIT par USER| 113 | -------------------------------------------------------------------------------- /Scripts/backup-serveur/README.md: -------------------------------------------------------------------------------- 1 | # Script de backup incrémental d'un serveur 2 | 3 | ## tl;dr 4 | Vous trouverez ici un script de sauvegardes incrémentales d'un serveur via SSH utilisant des *hard links* fonctionnant avec un fichier de configuration. 5 | 6 | ## Principe 7 | Un script, autant de fichiers de configuration que de dossiers à sauvegarder. 8 | Les fichiers *\*.cfg* contiennent la configuration de la sauvegarde d'un dossier d'un serveur distant. 9 | 10 | Le fichier d'exemple fournis va se connecter en SSH via le port *22* au serveur *monserveur.net* et va sauvegarder le dossier */home* dans le répertoire local */backup/monserveur/home*. 11 | 12 | Il conservera 7 versions des données (si 1 backup/jour alors : 7 jours de backups conservés). 13 | 14 | Chaque fichier, si non modifié, sera un *hard link* vers le fichier de la **révision** précédente, afin d'économiser de l'espace. 15 | 16 | L'architecture sera la suivante : 17 | ``` 18 | /backup/monserveur/home 19 | backup.0 #Backup le plus récent 20 | backup.1 #Backup de la "veille* 21 | ... 22 | backup.7 #Backup le plus ancien* 23 | ``` 24 | Regardez le fichier *monserveur.cfg* pour voir les différentes options configurables. 25 | 26 | Dans le fichier *backup-incremental.sh* deux choses sont configurables au début du fichier : 27 | 28 | ```bash 29 | # Dossier qui contient les fichiers de configuration 30 | CONFIG_PATH="/volume1/backup/scripts/config/" 31 | # Dossier qui contient les fichiers d'exclusion (utilisé si existant avec --exclude-from=) 32 | EXCLUDE_PATH="/volume1/backup/scripts/excludes/" 33 | ``` 34 | 35 | ## Utilisation 36 | `./backup-incremental.sh CHEMIN_FICHIER_CONFIGURATION.cfg` 37 | 38 | ex : 39 | `./backup-incremental.sh /backup/scripts/config/monserveur.cfg` 40 | 41 | Si vous avez définis la variable *CONFIG_PATH* alors vous pouvez mettre uniquement le nom du fichier de configuration, s'il se trouve à l'intérieur du dossier : 42 | `./backup-incremental.sh monserveur.cfg` 43 | 44 | -------------------------------------------------------------------------------- /Scripts/backup-serveur/backup-incremental.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | # Dossier qui contient les fichiers de configuration 3 | CONFIG_PATH="/backup/scripts/config/" 4 | # Dossier qui contient les fichiers d'exclusion (utilisé si existant avec --exclude-from=) 5 | EXCLUDE_PATH="/backup/scripts/excludes/" 6 | 7 | if [ -z "$1" ];then 8 | echo "Vous devez passer un fichier de config en argument" 9 | exit; 10 | else 11 | if [ -f "$1" ];then 12 | source $1 13 | else 14 | if [ -f "$CONFIG_PATH$1" ];then 15 | source "$CONFIG_PATH$1" 16 | else 17 | echo "Le fichier de config n'existe pas" 18 | exit; 19 | fi 20 | fi 21 | fi 22 | 23 | if [ -f "$EXCLUDE_PATH$EXCLUDE_FILE" ];then 24 | EXCLUDE_COMMANDE=" --exclude-from=$EXCLUDE_PATH$EXCLUDE_FILE"; 25 | else 26 | EXCLUDE_COMMANDE=""; 27 | fi 28 | 29 | for i in `seq $NB_DAYS_TO_KEEP -1 1`; 30 | do 31 | OLD=$((i-1)) 32 | rm "$BACKUP_LOCAL_PATH/backup.$i" -Rf 33 | mv "$BACKUP_LOCAL_PATH/backup.$OLD" "$BACKUP_LOCAL_PATH/backup.$i" 34 | done 35 | 36 | rsync -avPtze "ssh -p $SSH_PORT" "$USER@$SERVER:$REMOTE_PATH_TO_BACKUP/" "$BACKUP_LOCAL_PATH/backup.0/" --link-dest="$BACKUP_LOCAL_PATH/backup.1" --delete $EXCLUDE_COMMANDE 37 | 38 | touch "$BACKUP_LOCAL_PATH/backup.0" 39 | 40 | if [ -z "$NEW_OWNER" ];then 41 | echo "Pas de changement de permissions" 42 | else 43 | chown "$NEW_OWNER":"$NEW_GROUP" -R "$BACKUP_LOCAL_PATH/backup.0" 44 | chmod "$PERMISSIONS" -R "$BACKUP_LOCAL_PATH/backup.0" 45 | echo "Permissions changées" 46 | fi 47 | 48 | -------------------------------------------------------------------------------- /Scripts/backup-serveur/monserveur.cfg: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | #################################### 3 | # Sauvegarde du dossier distant *monserveur.net:/home* 4 | # dans le dossier /backup/monserveur/home" 5 | # Si existant alors le fichier monserveur-home.exclude.txt sera passé à rsync avec l'option --exclude-from 6 | #################################### 7 | 8 | USER=root; #Utilisateur distant sur lequel se connecter via SSH 9 | SERVER=monserveur.net; #Adresse du serveur (peut être une IP) 10 | SSH_PORT=22; #Port SSH à Utiliser 11 | 12 | REMOTE_FOLDER_TO_BACKUP=home; #Dossier à Sauvegarder (ne pas mettre le chemin complet, voir au dessous) 13 | REMOTE_PATH_TO_BACKUP="/$REMOTE_FOLDER_TO_BACKUP"; #Chemin vers le dossier à sauvegarder 14 | 15 | BACKUP_LOCAL_FOLDER=monserveur; #Dossier local qui contiendra les sous-dossiers de backups (ici "home") 16 | BACKUP_LOCAL_PATH="/backup/$BACKUP_LOCAL_FOLDER/$REMOTE_FOLDER_TO_BACKUP"; 17 | 18 | NB_DAYS_TO_KEEP=7 #Nombre de révision à conserver 19 | EXCLUDE_FILE="$BACKUP_LOCAL_FOLDER-$REMOTE_FOLDER_TO_BACKUP.exclude.txt" #Nom du fichier d'exclusion 20 | 21 | # Vous pouvez utiliser les options qui suivent pour changer les permissions 22 | # le propriétaire et le groupe, sinon, supprimez-les 23 | NEW_OWNER="myuser" 24 | NEW_GROUP="mygroup" 25 | PERMISSIONS="755" 26 | -------------------------------------------------------------------------------- /Scripts/mysql-backup.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ############################################# 3 | # Comment utiliser ? 4 | # 1 - Changez la configuration par defaut ci-dessous pour correspondre à vos besoins 5 | # 2 - ensuite via un terminal : 6 | # ./mysql-backup.sh pour sauvegarder l'ensemble des bases 7 | # ./site-backup.sh mabase pour n'en sauvergarder qu'une. 8 | # 9 | # Note : dans mon organisation, j'utilise un nom de base identique à l'adresse du site en prod 10 | # (par exemple "monsite.com"). Mes sources de fichiers pour ce site seront dans le dossier 11 | # /media/vhosts/monsite.com/www 12 | # et ce script ira placer les dumps dans le dossier 13 | # /media/vhosts/monsite.com/db 14 | # C'est à adapter en fonction de votre organisations 15 | ############################################# 16 | Mysql_User="root" # User MySQL 17 | Mysql_Paswd="mysql" # password correspondant 18 | Mysql_host="localhost" # Adresse du serveur 19 | DEST_mysql="/media/vhosts" # Répertoire de base du stockage (CF note plus haut) 20 | 21 | CLEANUP=0 # SI à 1 alors suppression des bases plus vielles que x jours 22 | CLEANUP_OLDER_THAN=30 # Nombre de jours de DB à concerver 23 | 24 | 25 | if [ "$1" != "" ]; 26 | then 27 | DB_TO_SAVE="$1" 28 | else 29 | DB_TO_SAVE="" 30 | fi 31 | 32 | # Emplacemment des different prog utilisé, laisser tel quel si vous n'avez rien bidouillé 33 | MYSQL="$(which mysql)" 34 | MYSQLDUMP="$(which mysqldump)" 35 | CHOWN="$(which chown)" 36 | CHMOD="$(which chmod)" 37 | GZIP="$(which gzip)" 38 | 39 | #Date du jour 40 | NOW="$(date +"%Y-%m-%d_%H-%M-%S")" 41 | 42 | # Databases a ne pas sauvegarder séparés par des espaces 43 | IGGY="CMS test phpmyadmin information_schema mysql performance_schema" 44 | 45 | # On initialise les variables 46 | FILE="" 47 | DBS="" 48 | 49 | #on cree le rep 50 | [ ! -d $DEST_mysql ] && mkdir -p $DEST_mysql || : 51 | 52 | #On limite l'acces au root uniquemment (utile sur un serveur) 53 | #$CHOWN 0.0 -R $DEST_mysql 54 | #$CHMOD 0600 $DEST_mysql 55 | 56 | # On liste les bases de donnees 57 | DBS="$($MYSQL -u $Mysql_User -h $Mysql_host -p$Mysql_Paswd -Bse 'show databases')" 58 | 59 | for db in $DBS 60 | do 61 | sitefolder="$db" #Nom du dossier qui contiendra le dump (CF Note) 62 | skipdb=-1 63 | if [ "$DB_TO_SAVE" != "" ]; 64 | then 65 | for i in $DB_TO_SAVE 66 | do 67 | [ "$db" != "$i" ] && skipdb=1 || : 68 | done 69 | fi 70 | if [ "$IGGY" != "" ]; 71 | then 72 | for i in $IGGY 73 | do 74 | [ "$db" == "$i" ] && skipdb=1 || : 75 | done 76 | fi 77 | 78 | if [ "$skipdb" == "-1" ] ; then 79 | mkdir -p "$DEST_mysql/$sitefolder/db" 80 | if [ "$CLEANUP" == 1 ]; then # Si Netoyage des anciennes bases activé 81 | find "$DEST_mysql/$sitefolder/db/" -type f -mtime +"$CLEANUP_OLDER_THAN" -delete 82 | fi 83 | FILE="$DEST_mysql/$sitefolder/db/$NOW-$db-$HOSTNAME.gz" 84 | # On boucle, et on dump toutes les bases et on les compresse 85 | $MYSQLDUMP -u $Mysql_User -h $Mysql_host -p$Mysql_Paswd $db --routines | $GZIP -9 > "$FILE" 86 | echo "Base de donnée : $db sauvegardée dans $FILE" 87 | fi 88 | done 89 | 90 | -------------------------------------------------------------------------------- /Scripts/mysql-import.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | if [ "$1" != "" ]; 3 | then 4 | DB_TO_IMPORT="$1" 5 | else 6 | while [ -z "$DB_TO_IMPORT" ] 7 | do 8 | echo "Nom de la base de données à importer ?" 9 | read DB_TO_IMPORT 10 | done 11 | fi 12 | 13 | if [ "$2" != "" ]; 14 | then 15 | DB_NAME="$2" 16 | else 17 | DB_NAME="$1" 18 | fi 19 | 20 | 21 | DUMP="$(ls -t /media/vhosts/$DB_TO_IMPORT/db | head -1)" 22 | FILE="/media/vhosts/$DB_TO_IMPORT/db/$DUMP" 23 | 24 | 25 | echo "----" 26 | echo "ATTENTION : Ce script va supprimer la base de donnnées $DB_NAME." 27 | echo "Il importera ensuite le dump le plus récent du dossier /media/vhosts/$DB_TO_IMPORT/db/" 28 | echo "Le fichier importé sera $DUMP" 29 | 30 | if [ "$2" != "-y" ]; 31 | then 32 | echo "Si vous ne souhaitez pas faire ça, répondez «n» à la question suivante." 33 | echo "----" 34 | read -r -p "Voulez-vous continuer ? [y/N] " response 35 | else 36 | response="y" 37 | fi 38 | if [[ "$response" =~ ^([yY][eE][sS]|[yY])+$ ]] 39 | then 40 | echo "----" 41 | echo "On commence par supprimer la base de données «$DB_NAME." 42 | mysqladmin drop $DB_NAME --force --verbose 43 | mysqladmin create $DB_NAME --force --verbose 44 | echo "----" 45 | echo "C'est parti pour l'import, cela peut-être un poil long, allez-vous faire un café." 46 | zcat $FILE | mysql $DB_NAME 47 | else 48 | echo "OK, on annule tout !" 49 | fi 50 | -------------------------------------------------------------------------------- /Scripts/site-factory.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | ############################################# 3 | # Comment utiliser ? 4 | # 1 - Changez la configuration par defaut ci-dessous pour correspondre à vos besoins 5 | # 2 - ensuite via un terminal : 6 | # ./site-factory.sh ou ./site-factory.sh www.monsite.com 7 | ############################################# 8 | 9 | ############################################# 10 | # CONFIGURATION 11 | ############################################# 12 | 13 | # Le root du dossier www 14 | CONF_DOCUMENT_ROOT="/media/vhosts/" 15 | 16 | # Si dans le dossier du domaine on veut un sous dossier qui soit le basepath 17 | # ex : /media/vhosts/monsite.com/ => BASEPATH="/" 18 | # ex : /media/vhosts/monsite.com/httpdocs => BASEPATH="/httpdocs/" 19 | CONF_BASEPATH="/www/" 20 | 21 | # Doit on aussi créer les dossiers logs, db.. dans le dossier 22 | # ex : /media/vhosts/monsite.com/db 23 | # ex : /media/vhosts/monsite.com/www # Crée automatiquement à l'aide du paramètre de configuration CONF_BASEPATH plus haut 24 | CONF_CREATE_SPECIAL_FOLDERS=$true # Valeurs possible $false ou $true 25 | 26 | declare -a CONF_SPECIALS_FOLDERS=("sh" "db" "docs") 27 | 28 | # Doit on créer un dossier pour contenir les fichiers de log ? 29 | CONF_CREATE_LOG_FOLDER=$true # Valeurs possible $false ou $true 30 | 31 | # Le nom du dossier contenant les fichiers de log 32 | # ex : /media/vhosts/monsite.com/logs avec la valeur logs 33 | CONF_CREATE_LOG_FOLDER_NAME="logs" 34 | 35 | # Le nom du dossier contenant les fichiers de conf (php.ini...) 36 | # ex : /media/vhosts/monsite.com/conf avec la valeur conf 37 | CONF_CREATE_CONF_FOLDER_NAME="conf" 38 | 39 | # Chemin vers le fichier drushrc 40 | CONF_DRUSH_RC_FILE="$HOME/.drush/aliases.drushrc.php" 41 | 42 | # Chemin vers le fichier d'alias 43 | CONF_DRUSH_BASH_ALIAS="$HOME/.dotfiles/bash_aliases" 44 | 45 | # Chemin vers le fichier hosts 46 | CONF_HOSTS_FILE="/etc/hosts" 47 | 48 | # Extention utilisé pour les sites en développement 49 | CONF_DEV_EXT="dev" 50 | 51 | # Accès à la base de données 52 | CONF_DB_HOST="localhost" 53 | CONF_DB_USER="root" 54 | CONF_DB_PASS="mysql" 55 | 56 | 57 | ############################################# 58 | # PARTIE 1 RÉCUPERATION DE L'URL DU SITE EN PROD 59 | ############################################# 60 | echo "--------------------------------------------" 61 | echo "--------------- Site Factory ---------------" 62 | echo "--------------------------------------------" 63 | 64 | domaine="$1" 65 | while [ -z "$domaine" ] 66 | do 67 | echo "URL du site en production" 68 | echo "ex : www.monsite.com ou intranet.monsite.com" 69 | echo "Puis faites entrée" 70 | read domaine 71 | done 72 | 73 | echo "URL du site en production : ${domaine}" 74 | 75 | domainePart=(`echo $domaine | tr '.' ' '`) 76 | 77 | nbElement=${#domainePart[*]} 78 | let nbElement-- 79 | 80 | ext=${domainePart[${nbElement}]} 81 | domainePart[${nbElement}]='dev' 82 | 83 | 84 | if [ ${domainePart[0]} = "www" ] 85 | then 86 | flag_www=$true # Le flag sert pour le ServerName du vhost 87 | unset domainePart[0] 88 | else 89 | flag_www=$false 90 | fi 91 | 92 | domaineDev=$(printf ".%s" "${domainePart[@]}") 93 | domaineDev=${domaineDev:1} 94 | 95 | domainePart[${nbElement}]=${ext} 96 | domaine=$(printf ".%s" "${domainePart[@]}") 97 | domaine=${domaine:1} 98 | 99 | pathToVhost="/etc/apache2/sites-available/${domaineDev}.conf" 100 | 101 | echo "URL du site en développement : ${domaineDev}" 102 | echo "Le vhost sera situé : ${pathToVhost}" 103 | 104 | 105 | # Création du vhost en .dev 106 | 107 | echo "Voulez vous créer les dossiers de travail ? Y/n" 108 | read inputAlias 109 | if [ "$inputAlias" = "y" -o "$inputAlias" = "Y" -o -z "$inputAlias" ] 110 | then 111 | echo "Veuillez renseigner le dossier de travail en absolu." 112 | echo "Si vide : ${CONF_DOCUMENT_ROOT}${domaine}${CONF_BASEPATH}" 113 | read www_folder 114 | if [ -z "$www_folder" ] 115 | then 116 | www_folder="${CONF_DOCUMENT_ROOT}${domaine}${CONF_BASEPATH}" 117 | fi 118 | sudo mkdir -p ${www_folder} 119 | if [ CONF_CREATE_SPECIAL_FOLDERS ] 120 | then 121 | for i in ${!CONF_SPECIALS_FOLDERS[*]} 122 | do 123 | echo "Création du dossier ${CONF_DOCUMENT_ROOT}${domaine}/${CONF_SPECIALS_FOLDERS[i]}" 124 | sudo mkdir -p ${CONF_DOCUMENT_ROOT}${domaine}/${CONF_SPECIALS_FOLDERS[i]} 125 | done 126 | fi 127 | if [ CONF_CREATE_LOG_FOLDER ] 128 | then 129 | echo "Création du dossier contenant les fichiers de log ${CONF_DOCUMENT_ROOT}${domainedomaine}/${CONF_CREATE_LOG_FOLDER_NAME}" 130 | sudo mkdir -p ${CONF_DOCUMENT_ROOT}${domaine}/${CONF_CREATE_LOG_FOLDER_NAME} 131 | sudo mkdir -p ${CONF_DOCUMENT_ROOT}${domaine}/${CONF_CREATE_CONF_FOLDER_NAME} 132 | sudo touch ${CONF_DOCUMENT_ROOT}${domaine}/${CONF_CREATE_LOG_FOLDER_NAME}/error.log 133 | sudo touch ${CONF_DOCUMENT_ROOT}${domaine}/${CONF_CREATE_LOG_FOLDER_NAME}/access.log 134 | fi 135 | fi 136 | 137 | ############################################# 138 | # CRÉATION VHOST APACHE 2.4 139 | ############################################# 140 | echo "Voulez vous créer Le Virtual Host Apache 2.4 ? Y/n" 141 | read inputAlias 142 | if [ "$inputAlias" = "y" -o "$inputAlias" = "Y" -o -z "$inputAlias" ] 143 | then 144 | echo "Création du Vhost Apache 2.4" 145 | ServerAlias=$false 146 | if [ flag_www ] 147 | then 148 | echo "Doit-on créer le ServerAlias avec WWW ? www.${domaineDev} Y/n" 149 | read inputAlias 150 | if [ "$inputAlias" = "y" -o "$inputAlias" = "Y" -o -z "$inputAlias" ] 151 | then 152 | ServerAlias=$true 153 | fi 154 | fi 155 | echo "Voici le résumé du vhost : " 156 | echo "- situé : ${pathToVhost}" 157 | echo "- ServerName : ${domaineDev}" 158 | if [ ServerAlias ] 159 | then 160 | echo "- ServerAlias : www.${domaineDev}" 161 | fi 162 | echo "- directory : ${www_folder}" 163 | sudo touch ${pathToVhost} 164 | sudo chown $USER ${pathToVhost} 165 | sudo echo -e "" >> ${pathToVhost} 166 | sudo echo -e "\tServerName ${domaineDev}" >> ${pathToVhost} 167 | 168 | 169 | if [ ServerAlias ] 170 | then 171 | sudo echo -e "\tServerAlias www.${domaineDev}" >> ${pathToVhost} 172 | fi 173 | 174 | if [ CONF_CREATE_LOG_FOLDER ] 175 | then 176 | sudo echo -e "\tErrorLog ${CONF_DOCUMENT_ROOT}${domaine}/${CONF_CREATE_LOG_FOLDER_NAME}/error.log" >> ${pathToVhost} 177 | sudo echo -e "\tCustomLog ${CONF_DOCUMENT_ROOT}${domaine}/${CONF_CREATE_LOG_FOLDER_NAME}/access.log common" >> ${pathToVhost} 178 | fi 179 | sudo echo -e "\t#PHPINIDir ${CONF_DOCUMENT_ROOT}${domaine}/${CONF_CREATE_CONF_FOLDER_NAME}" >> ${pathToVhost} 180 | sudo echo -e "\tDocumentRoot \"${www_folder}\"" >> ${pathToVhost} 181 | 182 | 183 | sudo echo -e "\t" >> ${pathToVhost} 184 | sudo echo -e "\t\tOptions -Indexes +FollowSymLinks +MultiViews" >> ${pathToVhost} 185 | sudo echo -e "\t\tAllowOverride All" >> ${pathToVhost} 186 | sudo echo -e "\t\tRequire all granted" >> ${pathToVhost} 187 | sudo echo -e "\t" >> ${pathToVhost} 188 | sudo echo -e "" >> ${pathToVhost} 189 | fi 190 | ############################################# 191 | # AJOUT AU FICHIER HOSTS 192 | ############################################# 193 | echo "----------" 194 | echo "Ajouter une entrée au fichier HOSTS ? Y/n" 195 | read inputAlias 196 | if [ "$inputAlias" = "y" -o "$inputAlias" = "Y" -o -z "$inputAlias" ] 197 | then 198 | 199 | sudo echo -e "127.0.0.1\t${domaineDev}" >> ${CONF_HOSTS_FILE} 200 | if [ flag_www ] 201 | then 202 | sudo echo -e "127.0.0.1\twww.${domaineDev}" >> ${CONF_HOSTS_FILE} 203 | 204 | fi 205 | fi 206 | 207 | 208 | 209 | ############################################# 210 | # CRÉATION BASE DE DONNEES 211 | ############################################# 212 | echo "----------" 213 | echo "Voulez vous créer une base de données ? Y/n" 214 | read inputAlias 215 | if [ "$inputAlias" = "y" -o "$inputAlias" = "Y" -o -z "$inputAlias" ] 216 | then 217 | echo "Nom de la base de données (si vide : ${domaine})" 218 | read db_name 219 | if [ -z "$db_name" ] 220 | then 221 | db_name="$domaine" 222 | fi 223 | echo "Nom de la base de données : $db_name" 224 | 225 | Q1="CREATE DATABASE \`$db_name\`;" 226 | mysql -u "${CONF_DB_USER}" --password="${CONF_DB_PASS}" -e "$Q1" 227 | fi 228 | 229 | ############################################# 230 | # CRÉATION ALIAS DRUSH 231 | ############################################# 232 | echo "----------" 233 | echo "Voulez vous créer un alias Drush ? Y/n" 234 | read inputAlias 235 | if [ "$inputAlias" = "y" -o "$inputAlias" = "Y" -o -z "$inputAlias" ] 236 | then 237 | echo "----------" 238 | echo "Alias choisi ?" 239 | read drush_alias 240 | echo "----------" 241 | echo "Ajout de l'alias drush au fichier aliases.drushrc.php" 242 | echo "----------" 243 | 244 | echo -e "\$aliases['${drush_alias}'] = array(" >> ${CONF_DRUSH_RC_FILE} 245 | echo -e "\t'uri' => '${domaineDev}'," >> ${CONF_DRUSH_RC_FILE} 246 | echo -e "\t'root' => '${CONF_DOCUMENT_ROOT}${domaine}${CONF_BASEPATH}'," >> ${CONF_DRUSH_RC_FILE} 247 | echo -e ");" >> ${CONF_DRUSH_RC_FILE} 248 | 249 | echo "Voulez-vous créer un alias bash pour cet alias drush ? Y/n" 250 | read inputAlias 251 | if [ "$inputAlias" = "y" -o "$inputAlias" = "Y" -o -z "$inputAlias" ] 252 | then 253 | echo -e "alias ${drush_alias}='drush @${drush_alias}'" >> ${CONF_DRUSH_BASH_ALIAS} 254 | fi 255 | fi 256 | 257 | 258 | echo "----------" 259 | echo "Activation du VirtualHost" 260 | echo "----------" 261 | 262 | sudo a2ensite ${domaineDev}.conf 263 | sudo service apache2 restart 264 | 265 | 266 | echo "----------" 267 | echo "Changement des droits du dossier ${www_folder}" 268 | echo "----------" 269 | 270 | sudo chown $USER ${CONF_DOCUMENT_ROOT}${domaine} -R 271 | sudo chgrp www-data ${CONF_DOCUMENT_ROOT}${domaine} -R 272 | sudo chmod ug+wrx ${CONF_DOCUMENT_ROOT}${domaine} -R 273 | -------------------------------------------------------------------------------- /Serveurs/Prise-en-main-Centos-7.md: -------------------------------------------------------------------------------- 1 | # Prise en main d'un serveur Centos 7 2 | ## découverte des disques 3 | `lsblk` 4 | 5 | ## Gestion des disques 6 | ### Formatage ext4 d'un disque 7 | `mkfs -t ext4 /dev/vdb` 8 | 9 | ### Montage d'un second disque 10 | voir aussi : https://www.scaleway.com/en/docs/attach-and-detach-a-volume-to-a-bare-metal-instance/ 11 | 12 | éditer le fichier `/etc/fstab` et ajouter la ligne : 13 | 14 | `/dev/vdb /home auto defaults,nofail,errors=remount-ro 0 2` 15 | Avec : 16 | - /dev/vdb : Chemin du disque 17 | - /home : Point de montage 18 | 19 | ## Utilisateurs 20 | 21 | ### Mot de passe pour root 22 | `passwd` 23 | 24 | ### Création d'un autre user que root (ici "monuser") 25 | `adduser monuser` 26 | 27 | ### Définition de son mot de passe 28 | passwd monsuer 29 | 30 | ### Ajout de ce user au groupe des sudoers (penser à deconnecter l'utilisateur en question pour que ce soit pris en compte) 31 | usermod -aG wheel monsuer 32 | 33 | ## Configuration du serveur 34 | 35 | ### Changement du nom du serveur 36 | ``` 37 | vim /etc/sysconfig/network 38 | ``` 39 | ajouter la ligne suivante : 40 | ``` 41 | HOSTNAME=monserveur.domain.com 42 | ``` 43 | utilisation de la commande hostname 44 | ``` 45 | hostname monserveur.domain.com 46 | ``` 47 | 48 | ### Gestion de l'heure (Fuseau Horaire) 49 | ``` 50 | timedatectl set-timezone Europe/Paris 51 | ``` 52 | ### Gestion des mails 53 | ### Installation de postfix 54 | ``` 55 | yum install postfix 56 | systemctl start postfix 57 | systemctl enable postfix 58 | ``` 59 | 60 | #### Redirection des mails 61 | https://kgaut.net/journal/2016/serveur-rediriger-les-emails-envoyes-a-root.html 62 | 63 | ## Paquets 64 | `yum update` 65 | 66 | Installation de yum utils pour la commande `yum-config-manager` entre autres 67 | 68 | `yum install yum-utils curl-devel git` 69 | 70 | Note : d'autres possibilités d'installation pour git : 71 | https://www.digitalocean.com/community/tutorials/how-to-install-git-on-centos-7 72 | 73 | ## Fail2ban 74 | https://www.linode.com/docs/security/using-fail2ban-for-security 75 | ``` 76 | wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 77 | rpm -ivh epel-release-latest-7.noarch.rpm 78 | yum install fail2ban 79 | ``` 80 | 81 | Configuration fail2ban : 82 | @todo wget d'un gist de /etc/fail2ban/jail.local 83 | 84 | ``` 85 | systemctl start fail2ban 86 | systemctl enable fail2ban 87 | ``` 88 | 89 | ## Pile Lamp 90 | ### ajout du dépot remi 91 | ``` 92 | wget https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm 93 | wget http://rpms.remirepo.net/enterprise/remi-release-7.rpm 94 | rpm -Uvh remi-release-7.rpm epel-release-latest-7.noarch.rpm 95 | yum-config-manager --enable remi-php70 96 | ``` 97 | 98 | ### Installation d'Apache 99 | ``` 100 | yum install httpd 101 | sudo systemctl start httpd.service 102 | sudo systemctl enable httpd.service 103 | ``` 104 | 105 | ### Installation de MySQL (via MariaDB) 106 | ``` 107 | sudo yum install mariadb-server mariadb 108 | sudo systemctl start mariadb 109 | sudo mysql_secure_installation 110 | sudo systemctl enable mariadb.service 111 | ``` 112 | 113 | ### Installation de PHP 7.0 114 | ``` 115 | yum install php70 php70-php-gettext php70-php-mbstring php70-php-curl php70-php-sqlite3 php70-php-soap php70-fpm php70-php-mysqlnd 116 | ``` 117 | 118 | ### ACL 119 | 120 | Droits de lecture 121 | ``` 122 | setfacl -m u:apache:r-x,d:u:apache:r-x ./ 123 | setfacl -R -m group:apache:r-x,d:group:apache:r-x ./ 124 | ``` 125 | 126 | Droits d'écriture 127 | ``` 128 | setfacl -m u:apache:rwx,d:u:apache:rwx ./ 129 | setfacl -R -m group:apache:xrw,d:group:apache:rwx ./ 130 | ``` 131 | 132 | S'il n'est toujours pas possible d'écrire, peut-être à cause de selinux 133 | 134 | ``` 135 | sudo chcon -R -t httpd_sys_rw_content_t ./ 136 | ``` 137 | -------------------------------------------------------------------------------- /Serveurs/solr.md: -------------------------------------------------------------------------------- 1 | # selinux 2 | ``` 3 | setsebool -P httpd_can_network_connect on 4 | ``` 5 | 6 | # Protection acces admin 7 | https://www.jeffgeerling.com/blogs/jeff-geerling/restrict-access-apache-solr 8 | ``` 9 | sudo iptables -A INPUT -p tcp -s localhost --dport 8983 -j ACCEPT 10 | sudo iptables -A INPUT -p tcp --dport 8983 -j DROP 11 | ``` 12 | 13 | ## Autoriser une ip 14 | 15 | ``` 16 | sudo iptables -A INPUT -p tcp -s 111.222.333.444 --dport 8983 -j ACCEPT 17 | ``` 18 | -------------------------------------------------------------------------------- /Subversion-SVN.md: -------------------------------------------------------------------------------- 1 | Subversion - SVN 2 | ========= 3 | Parce qu'il n'y a pas que GIT dans la vie... 4 | 5 | ## Divers 6 | 7 | **Contexte : à la racine d'une copie locale d'un dépot** 8 | 9 | |Commande|Résultat| 10 | |------- | -------| 11 | |`svn log -l 5`|Obtenir des infos sur les 5 derniers commits| 12 | |`svn log -v -r 234`|Informations détaillées sur un commit en particulier| 13 | 14 | 15 | 16 | ## Branches 17 | 18 | **Contexte : à la racine d'une copie locale d'un dépot** 19 | 20 | |Commande|Résultat| 21 | |------- | -------| 22 | |`svn copy http://SERVEUR/DEPOT/trunk http://SERVEUR/DEPOT/branches/NomBranche -m "Creation de la branche NomBranche"` | Creation d'une nouvelle branche | 23 | |`svn switch http://SERVEUR/DEPOT/branches/NomBranche`|changer vers la branche **NomBranche** (version courte)| 24 | |`svn switch ^/branches/NomBranche`|changer vers la branche **NomBranche** (version courte)| 25 | |`svn switch http://SERVEUR/DEPOT/trunk`|Retourner sur le trunk| 26 | |`svn switch ^/trunk`|Retourner sur le trunk (version courte)| 27 | 28 | -------------------------------------------------------------------------------- /Unicode.md: -------------------------------------------------------------------------------- 1 | # Code Unicode Coool 2 | ## Arrows 3 | 4 | ### ←↑→↓→↔↕↖↗↘↙ 5 | 6 | ### ⇐⇑⇒⇓⇔⇕⇖⇗⇘⇙ 7 | 8 | ### ✘ ✗ ✓ 9 | 10 | ### Misc 11 | ### ✀ ✁ ✂ ✃ ✄ ✅ ✆ ✇ ✈ ✉ ✊ ✋ ✌ ✍ ✎ ✏ 12 | ### ✐ ✑ ✒ ✓ ✔ ✕ ✖ ✗ ✘ ✙ ✚ ✛ ✜ ✝ ✞ ✟ 13 | ### ✠ ✡ ✢ ✣ ✤ ✥ ✦ ✧ ✨ ✩ ✪ ✫ ✬ ✭ ✮ ✯ 14 | ### ✰ ✱ ✲ ✳ ✴ ✵ ✶ ✷ ✸ ✹ ✺ ✻ ✼ ✽ ✾ ✿ 15 | ### ❀ ❁ ❂ ❃ ❄ ❅ ❆ ❇ ❈ ❉ ❊ ❋ ❌ ❍ ❎ ❏ 16 | ### ❐ ❑ ❒ ❓ ❔ ❕ ❖ ❗ ❘ ❙ ❚ ❛ ❜ ❝ ❞ ❟ 17 | ### ❠ ❡ ❢ ❣ ❤ ❥ ❦ ❧ ❨ ❩ ❪ ❫ ❬ ❭ ❮ ❯ 18 | ### ❰ ❱ ❲ ❳ ❴ ❵ ❶ ❷ ❸ ❹ ❺ ❻ ❼ ❽ ❾ ❿ 19 | ### ➀ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ➈ ➉ ➊ ➋ ➌ ➍ ➎ ➏ 20 | ### ➐ ➑ ➒ ➓ ➔ ➕ ➖ ➗ ➘ ➙ ➚ ➛ ➜ ➝ ➞ ➟ 21 | ### ➠ ➡ ➢ ➣ ➤ ➥ ➦ ➧ ➨ ➩ ➪ ➫ ➬ ➭ ➮ ➯ 22 | ### ➰ ➱ ➲ ➳ ➴ ➵ ➶ ➷ ➸ ➹ ➺ ➻ ➼ ➽ ➾ ➿ 23 | ### ● 24 | -------------------------------------------------------------------------------- /Videos-conversion.md: -------------------------------------------------------------------------------- 1 | #Conversion de vidéos 2 | 3 | ##MP4 => All 4 | 5 | ``` 6 | #!/bin/bash 7 | VIDEOS=./ 8 | find "$VIDEOS" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -vframes 1 -map 0:v:0 "${0%%.mp4}.png"' {} \; 9 | find "$VIDEOS" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis "${0%%.mp4}.webm"' {} \; 10 | find "$VIDEOS" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -q 5 -pix_fmt yuv420p -acodec libvorbis -vcodec libtheora "${0%%.mp4}.ogv"' {} \; 11 | exit; 12 | ``` 13 | 14 | ##MP4 => OGV 15 | 16 | ``` 17 | #!/bin/bash 18 | VIDEOS=./ 19 | find "$VIDEOS" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -q 5 -pix_fmt yuv420p -acodec libvorbis -vcodec libtheora "${0%%.mp4}.ogv"' {} \; 20 | exit; 21 | ``` 22 | 23 | ##MP4 => screenshot (poster) 24 | 25 | ``` 26 | #!/bin/bash 27 | VIDEOS=./ 28 | find "$VIDEOS" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -vframes 1 -map 0:v:0 "${0%%.mp4}.png"' {} \; 29 | exit; 30 | ``` 31 | 32 | ##MP4 => Webm 33 | 34 | ``` 35 | #!/bin/bash 36 | VIDEOS=./ 37 | find "$VIDEOS" -name '*.mp4' -exec sh -c 'ffmpeg -i "$0" -c:v libvpx -crf 10 -b:v 1M -c:a libvorbis "${0%%.mp4}.webm"' {} \; 38 | exit; 39 | ``` -------------------------------------------------------------------------------- /apache2-httpd.md: -------------------------------------------------------------------------------- 1 | # Apache2 2 | 3 | ## Protection par htpasswd 4 | 5 | ### Création d'un fichier htpasswd 6 | ``` 7 | htpasswd -c /vhosts/monsite/.htpasswd kgaut 8 | ``` 9 | 10 | ### Ajout d'un utilisateur à un fichier existant 11 | ``` 12 | htpasswd /vhosts/monsite/.htpasswd kgauty 13 | ``` 14 | 15 | ### Utilisation dans le vhosts 16 | ``` 17 | 18 | AuthType Basic 19 | AuthName "Restricted Content" 20 | AuthUserFile /vhosts/monsite/.htpasswd 21 | Require valid-user 22 | 23 | 24 | ``` 25 | -------------------------------------------------------------------------------- /cron.md: -------------------------------------------------------------------------------- 1 | # Cron 2 | ## Modifier un crontab 3 | 4 | ```crontab -e ``` 5 | 6 | 7 | ## Recevoir les résultats par email 8 | Ajouter tout en haut du fichier 9 | ``` 10 | MAILTO=moi@email.com 11 | ``` 12 | Sera envoyé à cette adresse le résultat des commandes executés. 13 | 14 | ## Syntaxe 15 | ``` 16 | +---------------- minute (0 - 59) 17 | | +------------- hour (0 - 23) 18 | | | +---------- day of month (1 - 31) 19 | | | | +------- month (1 - 12) 20 | | | | | +---- day of week (0 - 6) (Sunday=0 or 7) 21 | | | | | | 22 | * * * * * command to be executed 23 | `````` 24 | 25 | 26 | ## Exemples Crontask 27 | 28 | ### Tous les jours à 4H15 29 | ``` 30 | 15 4 * * * monscript.sh 31 | ``` 32 | 33 | ### Tous les dimanches à 23H50 34 | ``` 35 | 50 23 * * 0 monscript.sh 36 | ``` 37 | 38 | ### Toutes les heures à 10 39 | executé à 1H10, 2H10, 3h10... 40 | ``` 41 | 10 * * * * monscript.sh 42 | ``` 43 | 44 | ### Toutes les 10 minutes 45 | executé à 1H00, 1H10, 1H20, 1h30... 46 | ``` 47 | */10 * * * * monscript.sh 48 | ``` 49 | -------------------------------------------------------------------------------- /files.md: -------------------------------------------------------------------------------- 1 | # Ajouter un suffix 2 | ``` 3 | for file in *; do mv "$file" "$(basename "$file")yourSuffix"; done; 4 | ``` 5 | Exmpale to add an underscore "_" at the end each text file: 6 | ``` 7 | for file in *.txt; do mv "$file" "$(basename "$file")_"; done; 8 | ``` 9 | # Ajouter un prefix 10 | ``` 11 | for file in *.txt; do mv "$file" "yourPrefix$file"; done; 12 | ``` 13 | Exmpale to add an underscore "_" in front of text each file name: 14 | ``` 15 | for file in *.txt; do mv "$file" "_$file"; done; 16 | ``` 17 | -------------------------------------------------------------------------------- /git-hooks.md: -------------------------------------------------------------------------------- 1 | Hooks Post Receive 2 | ========= 3 | Exemple de hooks git qui réagissent lors d'un push 4 | 5 | ## Déploiement Drupal 6 | ```bash 7 | #!/bin/sh 8 | 9 | echo "*******************************************************" 10 | echo "**** Bonjouuuur, je suis le script de post-receive ****" 11 | echo "*******************************************************" 12 | 13 | ssh USER@SERVER 'cd /PATH/;git pull orgin master;drush @ALIAS cc all;drush @ALIAS updb -y;drush @ALIAS core-cron;drush @ALIAS cc all' 14 | 15 | echo "*******************************************************" 16 | echo "**** Merci, j'ai terminééééé *************************" 17 | echo "*******************************************************" 18 | 19 | echo "Over ! " 20 | 21 | ``` 22 | -------------------------------------------------------------------------------- /git.MD: -------------------------------------------------------------------------------- 1 | GIT 2 | ========= 3 | 4 | 5 | ## Authentification 6 | |Commande|Résultat| 7 | |------- | -------| 8 | |`git config credential.helper store`|Si accès en HTTP, cette commande va enregistrer les identifiants tapés lors de la session dans le fichier ~/.git-credentials [Plus d'infos](https://git-scm.com/docs/git-credential-store)| 9 | 10 | 11 | ## Ignorer les modification d'un fichier 12 | Afin d'éviter de commiter un fichier de config que l'on a modifié pour son environement 13 | 14 | **Note :** Le mieux restant de passer par un fichier de configuration 15 | 16 | |Commande|Résultat| 17 | |------- | -------| 18 | |`git update-index --assume-unchanged path/to/file.txt`|Enlève le fichier spécifié des fichiers modifiés lors d'un `git status`| 19 | |`git update-index --no-assume-unchanged path/to/file.txt`|Ajoute le fichier spécifié aux fichiers modifiés lors d'un `git status`| 20 | 21 | ## Désactiver la prise en compte des permissions 22 | Pas tellement conseillé, mais des fois, on a pas le choix. Si on ne souhaite pas commiter les changements de permission dans un dépôt : 23 | 24 | `git config core.fileMode false` 25 | 26 | [Plus d'informations](http://stackoverflow.com/questions/1580596/how-do-i-make-git-ignore-file-mode-chmod-changes) 27 | 28 | ## Commits 29 | |Commande|Résultat| 30 | |------- | -------| 31 | |`git add mofichier.php` | ajout d'un fichier pour le futur commit| 32 | |`git add mofichier.php --patch` | ajout partiel du contenu d'un fichier pour le futur commit| 33 | |`git commit -m "Message de commit"` | Commit des fichiers "ajoutés" préalablement| 34 | |`git commit -a -m "Message de commit"` | Commit de tous les fichiers qui ont étés déjà versionnés| 35 | |`git push` | diffusion des commits encore non envoyés | 36 | 37 | ## Cherry pick 38 | 39 | Afin d'appliquer sur la branche courante un ou plusieurs commits qui viennent d'une autre branche sans avoir à la merger 40 | 41 | |Commande|Résultat| 42 | |------- | -------| 43 | |`git cherry-pick COMMIT_ID` | ajoute le commit désigné| 44 | |`git cherry-pick COMMIT_ID1..COMMIT_ID1` | ajoute l'ensemble de commit de COMMIT\_ID1 à COMMIT\_ID2 (COMMIT\_ID1 devant être le plus vieux| 45 | 46 | ## Revert 47 | 48 | |Commande|Résultat| 49 | |------- | -------| 50 | |`git revert ` | Annuler le commit dont l'identifiant est | 51 | 52 | ## Logs 53 | 54 | |Commande|Résultat| 55 | |------- | -------| 56 | |`git log -n 5` | Obtenir le listing des 5 derniers commits locaux| 57 | |`git log origin/master -n 5` | Obtenir le listing des 5 derniers commits de la branche master distante| 58 | 59 | ## Branches 60 | [Branches in a Nutshell](http://git-scm.com/book/en/v2/Git-Branching-Branches-in-a-Nutshell) 61 | 62 | [Basic Branching and Merging](http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging) 63 | 64 | Mettre à jour la liste des branches d'une "remote" : 65 | ``` 66 | git remote update origin --prune 67 | ``` 68 | 69 | |Commande|Résultat| 70 | |------- | -------| 71 | |`git branch -a` | Listing des branches| 72 | |`git checkout -b NomBranche` | Création d'une branche locale **NomBranche** et déplacement vers la nouvelle branche| 73 | |`git push origin NomBranche` | Diffusion de la branche vers le serveur distant| 74 | |`git checkout master && git merge NomBranche` | Déplacement dans le master et merge de la branche **NomBranche**| 75 | |`git branch -d NomBranche` | Suppresion locale de ma branche **NomBranche**| 76 | |`git push origin --delete NomBranche` | suppression distante de la branche| 77 | |`git push origin :NomBranche` | Idem ci-dessus : suppression distante de la branche| 78 | |`git branch -m AncienNom NouveauNom` | Renommer la branche locale **AncienNom** en **NouveauNom**| 79 | |`git branch -m NouveauNom` | Renommer la branche locale courante **NouveauNom**| 80 | 81 | ## Tags 82 | [Git Basics - Tagging](http://git-scm.com/book/en/v2/Git-Basics-Tagging) 83 | 84 | |Commande|Résultat| 85 | |------- | -------| 86 | |`git tag -a 7.x-1.0 -m "tagging version 1"` | Création d'un tag localement anoté| 87 | |`git push origin 7.x-1.0` | Diffusion de ce tag| 88 | |`git tag -d 7.x-1.0` | Suppression locale d'un tag| 89 | |`git push origin --delete 7.x-1.0` | Suppression distante du tag| 90 | |`git push origin :7.x-1.0` | Idem ci-dessus : suppression distante du tag| 91 | 92 | ## Archives différentielles 93 | 94 | |Commande|Résultat| 95 | |------- | -------| 96 | | `git archive --output=../monarchive.tar.gz --verbose branche1 $(git diff --cached --name-only master)`| Création d'une archive .tar.gz des modifications entre la branche **branche1** et le **master **, ces deux éléments pouvant être remplacés par des tags, des id de commit...| 97 | 98 | ## Gestion des fichiers / répertoires 99 | |Commande|Résultat| 100 | |------- | -------| 101 | |`git rm --cached mon_fichier` | Suppression du fichier *mon_fichier* du dépot sans supprimer le fichier physiquement| 102 | |`git rm --cached -r mon_dossier/` | Suppression du dossier *mon_dossier* du dépot sans supprimer le dossier physiquement| 103 | 104 | 105 | ## Submodules 106 | [Quelques infos sur les submodules](http://stackoverflow.com/questions/1777854/git-submodules-specify-a-branch-tag) 107 | 108 | |Commande|Résultat| 109 | |------- | -------| 110 | |`git submodule add git@server:repo lib/dossier`|Ajoute un sous-module dans le dossier **lib/dossier**, (qui ne doit pas exister| 111 | |`git submodule init`|Initialise les submodules du repo que l'on vient de cloner| 112 | |`git submodule update`|Update ("Pull") des submodules| 113 | 114 | 115 | ## God Save Me ! 116 | 117 | Vous avez foutu la merde ? Voici comment vous en sortir... 118 | 119 | |Commande|Résultat| 120 | |------- | -------| 121 | |`git reset --hard HEAD`|Annuler toutes les modifications et retourner à la dernière version "commitée"| 122 | |`git reset --hard origin/dev`|Annuler toutes les modifications et retourner à la dernière version de la branche **dev** sur la remote **origin**| 123 | 124 | ## Links 125 | [2015-03-19 - 8 Tips to help you work better with Git](https://about.gitlab.com/2015/02/19/8-tips-to-help-you-work-better-with-git/) 126 | -------------------------------------------------------------------------------- /mac-os-stuff.md: -------------------------------------------------------------------------------- 1 | Mac - Macos Stuff 2 | ========= 3 | 4 | Commandes qui permettent de s'en sortir avec ce truc **fermé as fuck** qu'est MacOS 5 | 6 | ## Fonctions générales 7 | |Commande|Résultat| 8 | |--------|--------| 9 | |`sudo mount -t hfsplus /dev/cdrom /media/test`|Monter un cd gravé en hfsplus sur /media/test (le dossier doit exister) (+ d'infos : http://forums.whirlpool.net.au/archive/1549169)| 10 | -------------------------------------------------------------------------------- /raspberry-pi.md: -------------------------------------------------------------------------------- 1 | # Raspberry Pi 2 | 3 | ## Raspbian 4 | Image linux minimale basée sur Debian 5 | 6 | ### Ressources 7 | [Télécharger l'image](https://www.raspberrypi.org/downloads/raspbian/) 8 | 9 | [Flasher l'image sur une carte SD](https://www.raspberrypi.org/documentation/installation/installing-images/linux.md) 10 | 11 | [Installation et configuration](http://raspbian-france.fr/installer-raspbian-premier-demarrage-configuration/) 12 | 13 | [Monter automatiquement un dossier réseau](http://geeks.noeit.com/mount-an-smb-network-drive-on-raspberry-pi/) 14 | 15 | http://www.howtogeek.com/142044/how-to-turn-a-raspberry-pi-into-an-always-on-bittorrent-box/ 16 | 17 | http://www.howtogeek.com/146410/how-to-automate-your-always-on-raspberry-pi-download-box/all/ 18 | 19 | ### Commandes pratiques 20 | 21 | #### Lancer l'outil de configuration 22 | `sudo raspi-config` 23 | 24 | #### Changer le mot de passe de connexion 25 | `sudo passwd` 26 | 27 | #### Changer le nom de la machine 28 | `sudo hostname nouveaunom` 29 | 30 | ## Nordvpn - Openvpn 31 | 32 | [Setup openvpn with raspbian](https://nordvpn.com/fr/tutorials/raspberry-pi/openvpn/) 33 | 34 | [Startopenvpn at boot](https://askubuntu.com/questions/464264/starting-openvpn-client-automatically-at-boot) 35 | 36 | http://stackoverflow.com/questions/37918959/autostart-openvpn-on-raspberry-pi-jessie 37 | -------------------------------------------------------------------------------- /redis.md: -------------------------------------------------------------------------------- 1 | # Redis 2 | ## Accéder à l'utilitaire de gestion 3 | `redis-cli` 4 | 5 | ## Vider l'ensemble des données 6 | `FLUSHALL` 7 | 8 | 9 | ## Rechercher si une clé existe 10 | `KEYS ma_cle` 11 | 12 | Ou avec un motif : 13 | 14 | `KEYS *ma_cle*` 15 | -------------------------------------------------------------------------------- /static-website.md: -------------------------------------------------------------------------------- 1 | #Créer une copie static d'un site internet 2 | 3 | ```wget --mirror --convert-links --backup-converted --adjust-extension http://url/of/web/site``` 4 | -------------------------------------------------------------------------------- /vim.md: -------------------------------------------------------------------------------- 1 | |Commande|Résultat| 2 | |------- | -------| 3 | |`yyp`|Dupliquer une ligne et l'ajouter **après** la ligne courante| 4 | |`yyP`|Dupliquer une ligne et l'ajouter **avant** la ligne courante| 5 | |`42G` OU `42gg` OU `:42` | Aller à la ligne 42| 6 | -------------------------------------------------------------------------------- /xUbuntu-PPA.md: -------------------------------------------------------------------------------- 1 | xUbuntu-PPA 2 | ========= 3 | PPAs pour Ubuntu et dérivés 4 | 5 | ## Utilitaires / Système 6 | |Adresse|Description| 7 | |------- | -------| 8 | |`ppa:webupd8team/gnome3`|**gnome-shell** : Environement de bureau| 9 | |`ppa:daou/ppa`|**btnx** : Utilitaire de configuration de souris| 10 | |`ppa:tualatrix/ppa`|**Ubuntu Tweak** : Utilitaire de configuration du système| 11 | |`ppa:ubuntu-wine/ppa`|**Wine** : Lancer des applications windows sous GNU/Linux| 12 | |`ppa:tuxpoldo/btsync`|**btsync** : logiciel de synchronisation asynchrone| 13 | |`ppa:font-manager/staging`|**font-manager**| 14 | |`ppa:webupd8team/terminix`|**terminix** : terminal sous stéroids| 15 | |`ppa:nuvola-player-builders/webkit`|**libwebkit2gtk**| 16 | 17 | 18 | ## Compta 19 | |Adresse|Description| 20 | |------- | -------| 21 | |`ppa:mdoyen/homebank`|**homebank** : Compta pro & perso http://homebank.free.fr/| 22 | 23 | ## Développement 24 | |Adresse|Description| 25 | |------- | -------| 26 | |`ppa:git-core/ppa`|**git** : Version à jour du gestionnaire de version| 27 | |`ppa:nijel/phpmyadmin`|**PhpMyAdmin** : dernières version de PMA| 28 | |`ppa:webkit-team/ppa`|**webkit** : WebKitGtk+, Liferea (WebKit), Midori and other WebKit related projects.| 29 | |`ppa:cpick/hub`|**hub** : Github "hub"| 30 | 31 | ## Gestion de fichiers / photos / Vidéos 32 | |Adresse|Description| 33 | |------- | -------| 34 | |`ppa:shutter/ppa`|**shutter** : Killer app de screenshots| 35 | |`ppa:nomacs/stable`|**nomacs** : Picasa-like| 36 | |`ppa:maarten-baert/simplescreenrecorder`|**simplescreenrecorder** : Application de screencast| 37 | 38 | ## Web 39 | |Adresse|Description| 40 | |------- | -------| 41 | |`ppa:mozillateam/firefox-next` | Firefox Beta| 42 | 43 | 44 | ## Themes 45 | |Adresse|Description| 46 | |------- | -------| 47 | |`ppa:numix/ppa` | numix-icon-theme-circle numix-gtk-theme | 48 | |`ppa:noobslab/themes`| http://www.noobslab.com| 49 | |`ppa:varlesh-l/papirus-pack`|Papirus icon pack| 50 | 51 | 52 | ## Divers 53 | ### Installer keybase : 54 | `curl -O https://dist.keybase.io/linux/deb/keybase-latest-amd64.deb && sudo dpkg -i keybase-latest-amd64.deb` 55 | 56 | 57 | ## Jeux-vidéos / Emulation 58 | |`ppa:random-stuff/ppa`|**snes9x-gtk ** : Émulateur Super Nes| 59 | --------------------------------------------------------------------------------