[LINUX] Wie man Dotfiles züchtet

Wachsen Sie Dotfiles!

dotfiles hat eine untrennbare Beziehung zum Leben eines Ingenieurs. Ich möchte vorstellen, wie solche Punktdateien in die ideale Form gebracht werden.

Was ist Dotfiles ? Ein allgemeiner Begriff für Dateien, die mit `.` (Punkt) beginnen. Unter Unix-basierten Betriebssystemen werden Dateien, die mit `.` beginnen, als ** versteckte Dateien ** behandelt und nur angezeigt, wenn im Befehl` ls` usw. Optionen angegeben sind. [^ 1]. Seit der Antike gibt es eine Kultur der Verwendung dieser Funktion, um Konfigurationsdateien, die mit "." Beginnen, direkt unter dem Ausgangsverzeichnis abzulegen. Wenn Sie beispielsweise "ls" in meinem Home-Verzeichnis ausführen, lautet die Ausgabe wie folgt. ![dotfiles01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/90e5f04c-45c4-0c2a-3d8a-1f0b3596b43e.png) Das Ergebnis der Ausführung mit der Option "-a", mit der auch versteckte Dateien angezeigt werden, lautet wie folgt. ![dotfiles02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/214526/11701cbd-88fa-541e-c092-83171267eb15.png) Eine große Anzahl von Dateien, die mit "." Beginnen, wird angezeigt. Kurz gesagt, dies sind Punktdateien.

Lassen Sie uns mit Lv.1 Git auskommen

Beginnen wir als ersten Schritt mit der Verwaltung von Punktedateien mit Git. Es gibt verschiedene Vorteile wie Verlaufsverwaltung und verbesserte Portabilität. (Auch Gras anbauen)

Erstellen Sie ein Repository mit dem Namen dotfiles und schreiben Sie verschiedene Dotfiles wie ".bashrc" unter das Repository. [Symbolischer Link](https://ja.wikipedia.org/wiki/%E3%82%BD%E3%83%95%E3%83%88%E3%83] mit dem Befehl ln zum Ausgangsverzeichnis % AA% E3% 83% B3% E3% 82% AF). ** Durch Erstellen eines symbolischen Links können Sie die Dateien im Repository zentral verwalten und so das Aktualisieren und Aktualisieren vereinfachen. ** ** **

.Beispiel für die Erstellung einer symbolischen Verknüpfung in bashrc


#Link erstellen
$ cd path/to/dotfiles
$ ln -s .bashrc ~/.bashrc

#Überprüfen Sie den Link
$ ls -l ~/.bashrc
lrwxrwxrwx 1 reireias reireias 59 8. Juni 22:30 /home/reireias/.bashrc -> /home/reireias/dev/src/github.com/reireias/dotfiles/.bashrc

Es gibt ziemlich viele Dotfiles-Repositories, die auf GitHub veröffentlicht wurden. https://github.com/topics/dotfiles

** Achten Sie übrigens darauf, Ihre Anmeldeinformationen wie "AWS_ACCESS_KEY_ID" nicht preiszugeben. **

Lassen Sie uns die Bereitstellung von Lv.2 vereinfachen

Die symbolische Verknüpfung wird nur einmal für die Umgebung erstellt. Mit zunehmender Anzahl der Zieldatendateien wird die Arbeit jedoch durch den Ingenieur effizienter.

Es kann mit einem einfachen Shell-Skript implementiert werden. Sie können es mit etwas anderem als einem Shell-Skript implementieren, aber ein Shell-Skript, das in den meisten Umgebungen verwendet werden kann, wird häufig verwendet, da die Installation in einer sauberen Umgebung mit weniger Paketen einfacher ist.

Das folgende Skript erstellt einen symbolischen Link für alle Dateien, die mit "." Beginnen, direkt unter dem Dotfiles-Repository in Ihrem Home-Verzeichnis.

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"

Lassen Sie uns das Lv.3-Installationsskript schreiben

Bei einigen Punktdateien müssen Sie möglicherweise Pakete und Bibliotheken installieren.

Zum Beispiel

Und so weiter.

Zunächst finden Sie möglicherweise eine Liste der abhängigen Pakete in README. Immerhin ist es ein Ingenieur zu automatisieren.

Im Fall eines Shell-Skripts ergibt sich beispielsweise durch einfaches Auflisten der Befehle wie unten gezeigt ein gutes Installationsskript.

Ein Beispiel für ein Installationsskript


#!/bin/bash

brew install tmux peco neovim
pip install neovim

Beachten Sie die Gleichheit des Lv.4-Installationsskripts

Machen wir das Installationsskript auf [Gleichheit] aufmerksam (https://ja.wikipedia.org/wiki/%E5%86%AA%E7%AD%89). Indem sichergestellt wird, dass unabhängig von der Häufigkeit der Ausführung dasselbe Ergebnis erzielt wird, kann das Installationsskript für die vorhandene Umgebung ausgeführt werden, auch wenn ein neuer Prozess hinzugefügt wird, der vom Installationsskript ausgeführt werden soll.

Ein einfaches Beispiel ist unten gezeigt.

#Keine Gleichheit
mv config /etc/hoge/config
echo "some setting" >> ~/.hogerc

#Es gibt Gleichheit
cp config /etc/hoge/config
if ! grep -q "^some setting$" ~/.hogerc; then
  echo "some setting" >> ~/.hogerc
fi

Je größer das Installationsskript ist, desto schwieriger ist es, die Gleichwertigkeit mit einem Shell-Skript sicherzustellen. Daher Ansible und [Chef]( Das Schreiben eines Installationsskripts mit einem Konfigurationsverwaltungstool wie https://www.chef.io/) ist ebenfalls eine gute Wahl.

Wenn Sie jedoch andere Tools als Shell-Skripte verwenden, müssen Sie vorsichtig sein, da die Installation in einer sauberen Umgebung etwas zunimmt.

Lassen Sie uns Lv.5 CI drehen

Sowohl Katzen als auch Schöpflöffel [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) Es ist eine Welt. Lassen Sie uns CI auch in Dotfiles umwandeln.

Bei Skripten, die die neueste Version installieren, ohne die Version des zu installierenden Pakets oder der zu installierenden Bibliothek anzugeben, können inkompatible Updates dazu führen, dass das Installationsskript fehlschlägt. Es ist eine gute Idee, das Installationsskript auszuführen und zu überprüfen, ob die Dateien ordnungsgemäß abgelegt sind.

Hier ist ein sehr einfacher Beispielcode für GitHub-Aktionen.

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

Lassen Sie uns die Lv.6-Datei teilen

Wenn die Dotfiles stetig wachsen, werden .bashrc ( .zshrc) und .vimrc ziemlich groß. Ingenieure halten eine große Datei aufgrund bedingter Reflexion normalerweise für schlecht, daher möchte ich sie irgendwie aufteilen.

Glücklicherweise haben .bashrc und .vimrc eine Funktion zum Lesen einer anderen Datei, so dass es einfach ist, sie zu teilen.

Sie können beispielsweise eine andere Datei aus ".bashrc" wie folgt lesen.

.bashrc


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

Lassen Sie uns Lv.7 READ ME beibehalten

Dotfiles wachsen auch, wenn sie von Menschen gesehen werden (?) Organisieren Sie Ihre README-Datei und machen Sie sie zu einem coolen Dotfiles-Repository.

Persönlich, wenn das Folgende beschrieben wird, möchte ich darauf verweisen ~~ Pakuri Taku ~~.

Extra Edition Unterstützen wir verschiedene Umgebungen

Wenn Sie eine seltene Person sind, die möglicherweise sowohl Linux als auch Mac OS verwendet, können Sie sich freuen, wenn Sie Einstellungen und Installationsskripte für beide Umgebungen vorbereiten. CI sollte auch in Linux- und Mac OS-Umgebungen unter Verwendung von Matrix Build usw. ausgeführt werden.

Übrigens, in letzter Zeit bin ich in Schwierigkeiten, weil es keine Möglichkeit gibt, Linux Apt und Mac OS Brew in Ansible zu schreiben, ohne die Verzweigung bis wann zu verwenden.

schließlich

Was ist also mit deinen Dotfiles? Ich werde es posten, weil es gesagt zu sein scheint. Erwarten Sie nicht so viel.

[^ 1]: Unix-basierter Mechanismus für versteckte Dateien war eine schlechte Angewohnheit des Entwicklers Poka

Recommended Posts

Wie man Dotfiles züchtet
Verwendung von xml.etree.ElementTree
Wie benutzt man Python-Shell
Hinweise zur Verwendung von tf.data
Verwendung von virtualenv
Schaben 2 Wie man kratzt
Wie benutzt man Seaboan?
Verwendung von Image-Match
Wie man Shogun benutzt
So installieren Sie Python
Wie man PyPI liest
So installieren Sie pip
Verwendung von Virtualenv
Verwendung von numpy.vectorize
So aktualisieren Sie easy_install
So installieren Sie archlinux
Verwendung von pytest_report_header
Wie man Gunicorn neu startet
Wie zum virtuellen Host
Wie man Selen debuggt
Wie man teilweise verwendet
Wie man Bio.Phylo benutzt
Wie man JSON liest
Verwendung von SymPy
Wie man x-means benutzt
Verwendung von WikiExtractor.py
So aktualisieren Sie Spyder
So installieren Sie BayesOpt
Verwendung von virtualenv
Wie benutzt man Matplotlib?
Verwendung von iptables
Wie benutzt man numpy?
Verwendung von TokyoTechFes2015
Wie benutzt man venv
Wie benutzt man Pyenv?
Verwendung der Liste []
Wie man Python-Kabusapi benutzt
"Wie man Fukashigi zählt"
So installieren Sie Nbextensions
Verwendung von OptParse
Verwendung von return
So installieren Sie Prover9
So bedienen Sie NumPy
Wie man Imutils benutzt
So schätzen Sie die Kerneldichte
Verwendung von Qt Designer
[IPython] Freigeben eines IPython-Notizbuchs
So installieren Sie Python [Windows]
Verwendung der Suche sortiert
python3: Verwendung der Flasche (2)
Verstehen Sie, wie man Django-Filter verwendet
XPath-Grundlagen (2) - So schreiben Sie XPath
Verwendung des Generators
So installieren Sie Tabpy 1.0 (Version 2020-01)
So ändern Sie das Layout von Jupyter
So rufen Sie eine Funktion auf
So aktualisieren Sie Pythons Tkinter auf 8.6