Tilap.net

Développement web

Linux

Petites choses pratiques avec Linux

Créer un repo Github depuis bash

Si vous créez souvent des repos sur Github, voici une commande utile exécutable depuis votre console (bash).
Si vous utilisez la double authentification sur Github, ça ne fonctionnera peut être pas, mais je serai ravi de savoir comment faire…

Elle permet de :

  • créer un repo du nom de votre choix sur Github. Le repos contiendra uniquement un README avec le nom du repo ;
  • exécuter un git init dans le répertoire courant ;
  • d’ajouter le repo Github créé comme remote origin.

Ainsi, vous pouvez commencer un projet et le mettre sur git en à peine 2 lignes :

githubrepo name-of-the-repo
git add -A
git commit 'Initial commit'

Le script bash en question :

Il vous suffit de l’ajouter à votre .bashrc ou dans votre .bashalias.

Docker: Cannot start container: Port has already been allocated

En lançant Docker, vous pouvez avoir l’erreur :

Error response from daemon: Cannot start container my_container: port has already been allocated
2015/04/01 09:13:11 Error: failed to start one or more containers

Elle est due au fait que vous avez déjà un autre service utilisant le port que vous souhaitez utiliser avec votre container docker.

Pour résoudre cette erreur, arrêtez le service utilisant ce port et redémarrez votre docker.

Par exemple, si vous avez Apache en concurrence avec Docker sur le port 80:

sudo service apache2 stop
sudo service docker.io restart

Puis relancer votre commande docker run ...

Si votre erreur persiste, creusez en lisant ce ticket github

Télécharger avec wget : les 10 commandes de base à connaitre absolument

Téléchargements basiques avec wget

Télécharger un fichier en local

wget http://remote.com/file.ext 

Télécharger un fichier et le renommer

wget ‐‐output-document=newname.html http://remote.com/file.ext 

Télécharger un fichier dans un répertoire différent

wget ‐‐directory-prefix=another-folder/a-sub-folder http://remote.com/file.ext 

Lire la suite »

Apache : forcer le slash / à la fin des url

Il y a quelques mois, j’ai du forcer la présence d’un « / » (slash) à la fin de toutes les urls d’un site afin d’en améliorer le SEO.

Pour ce faire, il y a évidemment une partie du coté code pur (refaire tous les liens dans le site par exemple) mais surtout les redirections des pages sans le slash vers les pages avec le slash.

Pour ça, il y a 2 solutions : dans le code, ou via Apache. Cette 2ème solution est beaucoup plus simple et rapide à mettre en oeuvre, et surtout plus performante. Les quelques lignes suivantes dans votre fichier de configuration de votre VirtualHost.

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_URI} !index.php
RewriteCond %{REQUEST_URI} !(.*)/$
RewriteRule ^(.*)$ http://domain.tld/$1/ [L,R=301]

Vous pouvez bien évidemment aussi mettre ce code dans votre fichier .htaccess si vous n’avez pas accès au fichier de conf VirtualHost.

Apache url rewrite et url encodée avec urlencode

Voici un cas d’utilisation du mod url rewrite d’Apache assez peu documenté. En effet, je souhaite réécrire une url comportant une portion d’url encodée – dans mon cas généré avec la fonction urlencode de PHP.

La réécriture Apache et l’url encodée ne fonctionnent pas !

Je souhaite réécrire l’url suivante et récupérer la valeur http%3A%2F%2Ftilap.net%2F pour la passer en argument à un script.

http://host.tld/http%3A%2F%2Ftilap.net%2F

La règle de réécriture est simple. Par exemple dans le fichier .htaccess :


# Enable rewrite mod
RewriteEngine on
# Root path
RewriteBase /
# Ignore rules on final file
RewriteRule ^index\.php$ - [L]
# if folder or file does not exists
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
# rewrite by sending the url to the main script
RewriteRule ^(.*)$ /index.php?url=$1 [L,QSA]

Malheureusement, ça ne fonctionne pas (erreur interne). Pourtant la règle de réécriture est correcte…

Directive .gitignore non prises en charge

Le fichier .gitignore dans un projet Git permet de lister les fichiers à ignorer. Mais s’il n’a pas été ajouté dès le premier commit du projet, ses directives ne seront pas prises en charge par la suite.

Comment faire en sorte que le fichier .gitignore soit pris en charge à postériori ?

Il suffit de vider le cache de votre repository git local, puis d’ajouter à nouveau le contenu de votre projet. Ca tient en 2 lignes de commandes :

git rm --cached .gitignore
git add .gitignore

Au prochain commit, votre fichier .gitignore sera pris en compte ainsi que ses directives.

Agréger le contenu de tous les fichiers en bash

Voici une commande bash pratique pour concaténer le contenu de tous les fichiers d’un répertoire en un seul. Il tient en une ligne de commande, donc nul besoin de le créer en script, sauf si vous l’utilisez souvent.

cat $(ls -l | grep ^- | awk '{print $9}') > mynewfile.txt

Tous les contenus des fichiers du répertoire dans lequel est exécuté la commande seront agrégés dans le fichier mynewfile.txt

X