Quelques astuces diverses, cinquième
Encore une flopée de bricoles diverses à réutiliser au besoin. Manifestement ça plaît ces articles, et la source est pratiquement intarissable (il y a beaucoup de Vim aujourd’hui). Pourquoi s’en priver dès lors ?
Un ramdisk pour MySQL
Histoire de soulager un peu le disque d’un client qui fait de la merde avec sa base de données (requêtes SELECT DISTINCT qui créent systématiquement des tables temporaires sur disque), j’ai déplacé le dossier temporaire de MySQL en RAM, avec une ligne dans fstab :
1 |
tmpfs /home/mysql/tmp/ tmpfs defaults 0 0 |
Attention, il faut couper MySQL, monter le dossier, et relancer.
Cloner une base PostgreSQL
Plutôt que faire un dump, créer la base et réimporter le dump, sous Postgres on peut dire d’utiliser une base comme modèle :
1 |
CREATE DATABASE db_copie TEMPLATE db_source; |
Et paf, 10 minutes de gagnées sur un client.
Installer la libdvdcss sur Ubuntu
J’ai découvert lors du dernier PSL auquel j’ai participé (je suis un rythme d’un mois sur deux…) que la libdvdcss, composant indispensable à la lecture des DVD du commerce (protection anticopie gnagnagna), n’était plus installé ni installable facilement sous Ubuntu. Voici donc les manips à faire :
- Sur Ubuntu 12.04 à 15.04 : Terminal, se rendre dans le dossier /usr/share/doc/libdvdread4, et exécuter le script install-css.sh
- Sur Ubuntu 15.04 et suivants : installer le paquet libdvd-pkg, et lancer
dpkg-reconfigure libdvd-pkg
en suivant les instructions à l’écran.
Un bon retour en arrière pour l’utilisation par les débutants, une fois de plus.
Ouvrir directement un fichier de conf depuis un autre fichier dans vim
(Merci Kooshal) Quand on édite un fichier de configuration avec vim et qu’on tombe sur un include vers un autre fichier de configuration on peut directement ouvrir celui-ci, par exemple :
1 |
Phpconf=/etc/php/php.ini |
On déplace le curseur sur le fichier /etc/php/php.ini, ensuite on appuie sur g
puis f
, et paf, ça fait des Chocapic. Pour retourner au fichier original, Ctrl+o
.
Ajouter la liste des paramètres externes dans un script bash perso
Quand vous utilisez des alias, c’est cool, il interprète directement les paramètres supplémentaires occasionnels que vous voulez lui passer (exemple avec mes alias SSH quand je veux ouvrir un tunnel en plus pour faire du SOCKS : sshvox -D 9999
, sshvox étant un alias assez dégueulasse au demeurant). Quand on utilise un script pour faire la même chose (genre celui que j’utilise pour lancer un playbook Ansible), on peut se retourner vers $@ :
1 |
ansible-playbook -i hosts playbook.yml --sudo $@ |
Évidemment, c’est du rapide/crade, en théorie il faudrait vérifier un peu les arguments. Dans un vieux script pour un serveur Call of Duty, j’ai utilisé $*, qui semble fonctionner aussi, la différence semble tenir dans le fait que $@ échappe certains caractères spéciaux, à vous de voir donc.
Vim : se rendre directement à une ligne
Plusieurs méthodes rapides plutôt que de compter : soit vim <fichier> +<n° ligne>
, soit dans l’éditeur taper le numéro de ligne puis G
(majuscule). Sinon, pour s’éviter de compter, on a aussi l’option ‘set nu’ pour afficher les numéros de ligne 😉
Afficher la collation par défaut d’une base
Parce que ça n’apparaît pas dans un show create database <base>
:
1 2 |
SELECT DEFAULT_CHARACTER_SET_NAME, DEFAULT_COLLATION_NAME FROM INFORMATION_SCHEMA.SCHEMATA WHERE SCHEMA_NAME = 'db_name'; |
Obtenir un shell de manière détournée avec Vim
Sur le serveur d’un client, le compte qu’on nous a attribué a le droit d’utiliser sudo, mais pas de faire un sudo su
pour s’éviter justement de passer son temps à taper le sésame. Petit détournement de vim, qu’on ouvre avec sudo (sans fichier), on tape ensuite :shell
, et hop, un bash avec les droits root 😛
Lancer une commande watch au travers d’SSH
Je souhaitais surveiller le remplissage d’un dossier mais avec une seule commande. Le problème, c’est qu’au départ je tombais sur une erreur « Error opening terminal: unknown. » particulièrement pas explicite. La solution réside dans un simple -t :
1 |
ssh -t 192.168.1.200 "watch ls -lah ~/Download" |
Afficher la n-ième ligne d’un fichier
Quand vous avez un boulet qui vous dit :
1 2 3 4 5 |
[s.verdet@SebLBNvm ~ ]$ named-checkzone -d domain.tld ./domain.tld loading "domain.tld" from "./domain.tld" class "IN" dns_master_load: ./domain.tld:15: subdomain.domain.tld: CNAME and other data zone domain.tld/IN: loading from master file ./domain.tld failed: CNAME and other data zone domain.tld/IN: not loaded due to errors. |
sed vous permet d’éviter l’enchaînement de head |tail -n1
, et c’est plus rapide à taper en plus :
1 2 |
[s.verdet@SebLBNvm ~ ]$ sed -n "15 p" ./domain.tld subdomain CNAME c.storage.googleapis.com. |
Afficher quelques infos rapides sur des domaines
J’ai pris une liste d’alias de Virtualhosts à vérifier, avant de les migrer sur une autre machine. Petite routine pour voir l’état, à savoir l’adresse IP, le code de retour HTTP, l’URL si c’est redirigé :
1 |
for i in $(cat domain-list.txt); do echo "$i ($(dig $i A +short)) : "$(curl -s -o /dev/null -w "%{http_code} %{redirect_url}" $i); done |
Supprimer le début d’une arborescence d’une archive tar
Si vous avez ce genre d’arborescence dans une archive tar :
1 2 3 |
$ tar tvf /home/user/archive.tar.gz |head -n1 drwxr-xr-x 499/499 0 2016-12-08 18:29 var/lib/docker/lbp/publish/repository/ |
Mais que vous voulez juste récupérer le dossier repository, il y a une option bien pratique de tar :
1 |
$ tar xfz /home/user/archive.tar.gz --strip-components=5 |
Et hop, la partie var/lib/docker/lbp/publish/ est supprimé à l’extraction.
Extraire directement une archive à travers SSH
Dans le même esprit de la bidouille juste au dessus, j’avais pas assez de place donc l’archive a été extraite directement depuis un autre serveur :
1 |
$ cat archive.tar.gz | ssh server2 "tar xzf - -C /path/to/dir" |
Accélérer les git status
En changeant de serveur et de version de git, j’ai une différence de x7 sur un git status dans le temps de traitement. Problème résolu en ajoutant le paramètre suivant au dépot :
1 |
$ git config core.preloadindex true |
Avant, 35s, après, 0.8s. Tranquille.
1) On peut ajouter des alias dans la config de ssh ~/.ssh/config, par exemple : # empêche la déconnexion par inactivité ServerAliveInterval 60 # alias pour ssh foo (fonction aussi avec -D pour socks), chaque option peut être utilisée séparément, bien sûr dans HostName il faut spécifier le vrai host Host foo User bar HostName example.con IdentifyFile ~/.ssh/id_example.con 2) Pour accéder à une ligne dans vim il suffit de taper :42 (deux-point suivi du numéro de ligne). 3) Pour sudo, essaye sudo -i Note : sur Neovim, c’est :terminal ou :te (chez moi, :shell ne fonctionne pas sur vim, version… Lire la suite »
Vive l’indentation perdue … il faut indenter les lignes au-dessous de Host foo.
Pour les histoires de récupérer un shell root via vim en sudo, c’est juste bon pour les cas où le sysadmin n’a pas bien fait son boulot :-). À savoir, si le but est de permettre d’éditer des fichiers en root, il est possible de configurer sudoedit qui permet d’utiliser n’importe quel éditeur pour modifier un fichier et gère le remplacement en root (ou autre) sans vraiment donner de droits pour éditer le fichier. Pour les histoires de SSH, comme Exagone313 l’a suggéré : « man ssh_config » 😀 Et pour le tar à travers le réseau, on peut aussi faire la… Lire la suite »
Les options -s ou -i de sudo répondent également à ce besoin de shell root.
À propos de vim : c’est justement parce qu’aucune autre solution ne fonctionnait que l’on a procédé ainsi. Il faudrait que je retrouve les paramètres utilisés au niveau de sudo qui nous ont empêché d’obtenir un shell de manière « classique ».