[LINUX] Comment faire pousser des fichiers dot

Développez des dotfiles!

dotfiles a une relation indissociable avec la vie d'un ingénieur. Je voudrais vous présenter comment développer ces fichiers de points dans la forme idéale.

Qu'est-ce que dotfiles Un terme général pour les fichiers commençant par «.» (Point). Dans le système d'exploitation Unix, les fichiers commençant par `.` sont traités comme des ** fichiers cachés ** et ne sont pas affichés à moins que des options ne soient spécifiées dans la commande` ls` etc. [^ 1]. Depuis l'Antiquité, il existe une culture d'utilisation de cette fonctionnalité pour placer les fichiers de configuration commençant par `.` directement sous le répertoire personnel. Par exemple, si vous exécutez `ls` dans mon répertoire personnel, la sortie sera la suivante. ![dotfiles01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/90e5f04c-45c4-0c2a-3d8a-1f0b3596b43e.png) Le résultat de l'exécution avec l'option `-a` qui affiche également les fichiers cachés est le suivant. ![dotfiles02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/11701cbd-88fa-541e-c092-83171267eb15.png) Un grand nombre de fichiers commençant par «.» Sont affichés. En bref, ce sont des fichiers dot.

Gérons avec Lv.1 Git

Dans un premier temps, commençons par gérer les dotfiles avec Git. Il existe divers avantages tels que la gestion de l'historique et une meilleure portabilité. (Cultivez également de l'herbe)

Créez un référentiel appelé dotfiles et validez divers fichiers dotfiles tels que .bashrc sous le référentiel. [Lien symbolique](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%83] vers le répertoire de base à l'aide de la commande ln % AA% E3% 83% B3% E3% 82% AF). ** En créant un lien symbolique, vous pouvez gérer de manière centralisée les fichiers dans le référentiel, ce qui facilite la mise à jour et la mise à jour. ** **

.Exemple de création d'un lien symbolique dans bashrc


#Créer un lien
$ cd path/to/dotfiles
$ ln -s .bashrc ~/.bashrc

#Vérifiez le lien
$ ls -l ~/.bashrc
lrwxrwxrwx 1 reireias reireias 59 8 juin 22:30 /home/reireias/.bashrc -> /home/reireias/dev/src/github.com/reireias/dotfiles/.bashrc

Il y a tellement de référentiels dotfiles publiés sur GitHub. https://github.com/topics/dotfiles

** Au fait, veillez à ne pas divulguer vos informations d'identification telles que ʻAWS_ACCESS_KEY_ID` **

Facilitons le déploiement de Lv.2

Le lien symbolique n'est créé qu'une seule fois pour l'environnement, mais à mesure que le nombre de fichiers dotfiles cibles augmente, c'est la nature de l'ingénieur que le travail devient plus efficace.

Il peut être implémenté avec un simple script shell. Vous pouvez l'implémenter avec autre chose qu'un script shell, mais le script shell qui peut être utilisé dans la plupart des environnements est souvent utilisé car il est plus facile à installer dans un environnement propre avec moins de packages.

Le script suivant crée des liens symboliques pour tous les fichiers commençant par . directement sous le référentiel dotfiles de votre répertoire personnel.

install.sh


#!/bin/bash -e

IGNORE_PATTERN="^\.(git|travis)"

echo "Create dotfile links."
for dotfile in .??*; do
    [[ $dotfile =~ $IGNORE_PATTERN ]] && continue
    ln -snfv "$(pwd)/$dotfile" "$HOME/$dotfile"
done
echo "Success"

Écrivons le script d'installation de Lv.3

Certains fichiers dotfiles peuvent nécessiter l'installation de packages et de bibliothèques.

Par exemple

--Il y a .tmux.conf, donc je veux installer tmux --Une fonction auto-conçue qui utilise la commande peco est définie dans .bashrc.

Etc.

Au début, vous pouvez trouver une liste des packages dépendants dans README. Après tout, c'est un ingénieur à automatiser.

Par exemple, dans le cas d'un script shell, le simple fait d'énumérer les commandes comme indiqué ci-dessous fera un bon script d'installation.

Un exemple de script d'installation


#!/bin/bash

brew install tmux peco neovim
pip install neovim

Soyons conscients de l'égalité du script d'installation Lv.4

Rendons le script d'installation conscient de l'égalité. En s'assurant que le même résultat est obtenu quel que soit le nombre d'exécutions, il est possible d'exécuter le script d'installation pour l'environnement existant même si un nouveau processus à exécuter par le script d'installation est ajouté.

Un exemple simple est présenté ci-dessous.

#Pas d'égalité
mv config /etc/hoge/config
echo "some setting" >> ~/.hogerc

#Il y a égalité
cp config /etc/hoge/config
if ! grep -q "^some setting$" ~/.hogerc; then
  echo "some setting" >> ~/.hogerc
fi

Plus le script d'installation est volumineux, plus il est difficile d'assurer l'équivalence avec un script shell, donc Ansible et [Chef]( Ecrire un script d'installation à l'aide d'un outil de gestion de configuration tel que https://www.chef.io/) est également un bon choix.

Cependant, si vous commencez à utiliser des outils autres que le script shell, vous devez être prudent car la procédure d'installation dans un environnement propre augmentera un peu.

Passons au niveau 5 CI

Chats et louche [CI](https://ja.wikipedia.org/wiki/%E7%B6%99%E7%B6%9A%E7%9A%84%E3%82%A4%E3%83%B3 % E3% 83% 86% E3% 82% B0% E3% 83% AC% E3% 83% BC% E3% 82% B7% E3% 83% A7% E3% 83% B3) C'est un monde. Transformons également CI dans les fichiers dot.

Pour les scripts qui installent la dernière version sans spécifier la version du package ou de la bibliothèque à installer, des mises à jour incompatibles peuvent entraîner l'échec du script d'installation. C'est une bonne idée d'exécuter le script d'installation et de vérifier si les fichiers sont placés correctement.

Voici un exemple de code très simple pour les actions GitHub.

yaml:.github/workflows/main.yml


---
name: main

on: [push]

jobs:
  main:
    runs-on: ubuntu-latest # or macOS-latest
    steps:
      - uses: actions/checkout@v1
      - name: install dotfiles
        run: bash install.sh
      - name: test
        run: # some tests

Divisons le fichier Lv.6

Au fur et à mesure que les dotfiles grandissent, .bashrc ( .zshrc) et .vimrc deviennent assez énormes. Les ingénieurs considèrent généralement qu'un gros fichier est mauvais en raison de la réflexion conditionnelle, je veux donc le diviser d'une manière ou d'une autre.

Heureusement, .bashrc et .vimrc ont une fonction pour lire un autre fichier, il est donc facile de le diviser.

Par exemple, vous pouvez lire un autre fichier à partir de .bashrc comme suit.

.bashrc


source ${HOME}/.bash/keybind.sh
source ${HOME}/.bash/alias.sh

Maintenons le Lv.7 LISEZ-MOI

Les fichiers dot se développent également en étant vus par les gens Organisez votre README et faites-en un dépôt de fichiers dotfiles sympa.

Personnellement, si ce qui suit est décrit, je voudrais y faire référence ~~ Pakuri Taku ~~.

Édition supplémentaire Prenons en charge divers environnements

Si vous êtes une personne rare qui peut utiliser à la fois Linux et Mac OS, vous serez peut-être heureux si vous préparez des paramètres et des scripts d'installation pour les deux environnements. CI doit également être exécuté dans les environnements Linux et Mac OS en utilisant la construction de matrice et ainsi de suite.

À propos, récemment, j'ai des problèmes car il n'y a aucun moyen d'écrire Linux apt et Mac OS brew dans Ansible sans utiliser le branchement par quand.

à la fin

Alors qu'en est-il de vos fichiers dotfiles? Je le posterai parce qu'il semble être dit. Ne vous attendez pas à ça.

[^ 1]: Le mécanisme de fichiers cachés basé sur Unix était une mauvaise habitude née du développeur Poka

Recommended Posts

Comment faire pousser des fichiers dot
Comment utiliser xml.etree.ElementTree
Comment utiliser Python-shell
Remarques sur l'utilisation de tf.data
Comment utiliser virtualenv
Grattage 2 Comment gratter
Comment utiliser Seaboan
Comment utiliser la correspondance d'image
Comment utiliser le shogun
Comment installer Python
Comment lire PyPI
Comment installer pip
Comment utiliser Virtualenv
Comment utiliser numpy.vectorize
Comment mettre à jour easy_install
Comment installer Archlinux
Comment utiliser pytest_report_header
Comment redémarrer gunicorn
Comment héberger virtuel
Comment déboguer le sélénium
Comment utiliser partiel
Comment utiliser Bio.Phylo
Comment lire JSON
Comment utiliser SymPy
Comment utiliser x-means
Comment utiliser WikiExtractor.py
Comment mettre à jour Spyder
Comment installer BayesOpt
Comment utiliser virtualenv
Comment utiliser Matplotlib
Comment utiliser iptables
Comment utiliser numpy
Comment utiliser TokyoTechFes2015
Comment utiliser venv
Comment utiliser Pyenv
Comment utiliser la liste []
Comment utiliser python-kabusapi
"Comment compter Fukashigi"
Comment installer Nbextensions
Comment utiliser OptParse
Comment utiliser le retour
Comment installer Prover9
Comment utiliser NumPy
Comment utiliser pyenv-virtualenv
Comment utiliser imutils
Comment estimer la densité du noyau
Comment utiliser Qt Designer
[IPython] Comment partager un bloc-notes IPython
Comment installer Python [Windows]
Comment utiliser la recherche triée
python3: Comment utiliser la bouteille (2)
Comprendre comment utiliser django-filter
XPath Basics (2) - Comment écrire XPath
Comment utiliser le générateur
Comment installer Tabpy 1.0 (version 2020-01)
Comment changer la disposition de Jupyter
Comment appeler une fonction
Comment mettre à jour Tkinter de Python vers la version 8.6