GNU/Linux >> Znalost Linux >  >> Linux

Co pro vás může udělat shell dotfile

Neptejte se, co můžete udělat pro váš shell dotfile, ale co pro vás může udělat shell dotfile!

Procházel jsem celou mapu OS, ale posledních několik let byly mými každodenními ovladači počítače Mac. Po dlouhou dobu jsem používal Bash, ale když několik přátel začalo proselytizovat zsh, zkusil jsem to. Netrvalo dlouho, než jsem to ocenil, ao několik let později to silně preferuji kvůli mnoha maličkostem, které dělá.

Používám zsh (poskytovaný přes Homebrew, nikoli nainstalovaný systém) a vylepšení Oh My Zsh.

Příklady v tomto článku jsou pro můj osobní .zshrc . Většina bude fungovat přímo v Bash a nevěřím, že se kdokoli spoléhá na Oh My Zsh, ale váš počet najetých kilometrů se může lišit. Bylo období, kdy jsem udržoval shell dotfile pro zsh i Bash, ale nakonec jsem se vzdal svého .bashrc .

Všichni jsme tady naštvaní

Pokud chcete mít možnost používat stejný soubor dot v různých operačních systémech, budete chtít, aby váš soubor dot byl trochu chytřejší.

### Mac Specifics
if [[ "$OSTYPE" == "darwin"* ]]; then
        # Mac-specific stuff here.
fi

Očekávám například, že klávesy Alt + šipky posunou kurzor o slovo, nikoli o jednu mezeru. Aby se to stalo v iTerm2 (můj preferovaný shell), přidám tento úryvek do specifické části mého .zshrc pro Mac:

### Mac Specifics
if [[ "$OSTYPE" == "darwin"* ]]; then
        ### Mac cursor commands for iTerm2; map ctrl+arrows or alt+arrows to fast-move
        bindkey -e
        bindkey '^[[1;9C' forward-word
        bindkey '^[[1;9D' backward-word
        bindkey '\e\e[D' backward-word
        bindkey '\e\e[C' forward-word
fi

A co Bob?

I když jsem si svůj shell dotfile zamiloval, nechtěl jsem vždy na svých domácích strojích mít k dispozici stejné věci jako na svých pracovních strojích. Jedním ze způsobů, jak to vyřešit, je mít doplňkové soubory s tečkami, které můžete používat doma, ale ne v práci. Zde je návod, jak jsem toho dosáhl:

if [[ `egrep 'dnssuffix1|dnssuffix2' /etc/resolv.conf` ]]; then
        if [ -e $HOME/.work ]
                source $HOME/.work
        else
                echo "This looks like a work machine, but I can't find the ~/.work file"
        fi
fi

V tomto případě vylomím příponu DNS své práce (nebo více přípon, v závislosti na vaší situaci) a vytvořím samostatný soubor, který mi v práci trochu zlepší život.

To, co děláte

Nyní je pravděpodobně vhodný čas přestat používat vlnovku (~ ), který představuje váš domovský adresář při psaní skriptů. Zjistíte, že existují kontexty, kde to není rozpoznáno. Zvyknout si používat proměnnou prostředí $HOME vám později ušetří spoustu času na řešení problémů a bolesti hlavy.

Logickým rozšířením by bylo zahrnout dotfily specifické pro operační systém, pokud si to přejete.

Paměť, úplně sám v měsíčním světle

Linuxový terminál

  • 7 nejlepších emulátorů terminálu pro Linux
  • 10 nástrojů příkazového řádku pro analýzu dat v systému Linux
  • Stáhnout nyní:SSH cheat sheet
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Výukové programy příkazového řádku systému Linux

Napsal jsem trapné množství skořápek a došel jsem k závěru, že víc psát opravdu nechci. Není to tak, že by shell většinu času nedokázal dělat to, co potřebuji, ale zjišťuji, že když píšu shell, pravděpodobně dávám dohromady řešení lepicí pásky, než abych problém trvale řešil.

Stejně tak nesnáším memorování věcí a během své kariéry jsem musel v průběhu dne radikálně měnit kontext. Praktickým důsledkem je, že jsem se musel mnoho věcí v průběhu let několikrát znovu naučit. ("Počkejte... jakou strukturu for-loop tento jazyk používá?")

Takže se občas rozhodnu, že už mě nebaví znovu hledat, jak něco udělat. Jedním ze způsobů, jak zlepšit svůj život, je přidání aliasů.

Běžným scénářem pro každého, kdo pracuje se systémy, je zjištění, co zabírá celý disk. Bohužel jsem si toto zaklínadlo nikdy nemohl zapamatovat, a tak jsem vytvořil alias shellu, kreativně nazvaný bigdirs :

alias bigdirs='du --max-depth=1 2> /dev/null | sort -n -r | head -n20'

I když bych mohl být méně líný a skutečně si to zapamatovat, no, to prostě není způsob Unixu...

Překlepy a lidé, kteří je milují

Dalším způsobem, jak mi používání aliasů shellu zlepšuje život, je ochrana před překlepy. Nevím proč, ale vyvinul jsem si takový ošklivý zvyk psát w po sekvenci ea , takže pokud chci vymazat svůj terminál, často napíšu cleawr . Bohužel to pro mou mušli nic neznamená. Dokud nepřidám tento malý kousek zlata:

alias cleawr='clear'

V jednom případě, kdy Windows mají ekvivalentní, ale lepší příkaz, zjistím, že píšu cls . Je frustrující vidět, jak vaše skořápka rozhazuje ruce, takže dodávám:

alias cls='clear'

Ano, znám ctrl + l , ale nikdy ho nepoužívám.

Zabavte se

Práce může být stresující. Někdy je prostě potřeba se trochu pobavit. Pokud váš shell nezná příkaz, měl by prostě udělat , možná nad tím chceš pokrčit rameny! Můžete to udělat pomocí funkce:

shrug() { echo "¯\_(ツ)_/¯"; }

Pokud to nefunguje, možná budete muset převrátit stůl:

fliptable() { echo "(╯°□°)╯ ┻━┻"; } # Flip a table. Example usage: fsck -y /dev/sdb1 || fliptable

Představte si můj rozhořčení a frustraci, když jsem potřeboval převrátit stůl a nemohl jsem si vzpomenout, jak jsem to nazval. Takže jsem přidal další aliasy shellu:

alias flipdesk='fliptable'
alias deskflip='fliptable'
alias tableflip='fliptable'

A někdy je potřeba to oslavit:

disco() {
        echo "(•_•)"
        echo "<)   )╯"
        echo " /    \ "
        echo ""
        echo "\(•_•)"
        echo " (   (>"
        echo " /    \ "
        echo ""
        echo " (•_•)"
        echo "<)   )>"
        echo " /    \ "
}

Výstup těchto příkazů obvykle předám do pbcopy  a vložte jej do příslušného chatovacího nástroje, který používám.

Tuto zábavnou funkci jsem získal z účtu na Twitteru, který sleduji, s názvem "Command Line Magic:" @climagic. Jelikož teď žiju na Floridě, jsem moc rád, že tohle je jediný sníh v mém životě:

snow() {
        clear;while :;do echo $LINES $COLUMNS $(($RANDOM%$COLUMNS));sleep 0.1;done|gawk '{a[$3]=0;for(x in a) {o=a[x];a[x]=a[x]+1;printf "\033[%s;%sH ",o,x;printf "\033[%s;%sH*\033[0;0H",a[x],x;}}'
}

Zábava s funkcemi

Viděli jsme několik příkladů funkcí, které používám. Protože jen málo z těchto příkladů vyžaduje argument, mohly by být provedeny jako aliasy. Používám funkce z osobních preferencí, pokud jde o více než jeden krátký příkaz.

V různých obdobích své kariéry jsem provozoval Graphite, open-source, škálovatelné řešení pro měření časových řad. Bylo dost případů, kdy jsem potřeboval transponovat metrickou cestu (označenou tečkami) na cestu souborového systému (označenou lomítky) nebo naopak, že se stalo užitečným mít pro tyto úkoly vyhrazené funkce:

# Useful for converting between Graphite metrics and file paths
function dottoslash() {
        echo $1 | sed 's/\./\//g'
}
function slashtodot() {
        echo $1 | sed 's/\//\./g'
}

Během jiné doby ve své kariéře jsem provozoval hodně Kubernetes. Pokud nejste obeznámeni se spouštěním Kubernetes, musíte napsat hodně YAML. Bohužel není těžké napsat neplatný YAML. Horší je, že Kubernetes neověřuje YAML před pokusem o jeho použití, takže nezjistíte, že je neplatný, dokud jej nepoužijete. Pokud to nejprve neověříte:

function yamllint() {
        for i in $(find . -name '*.yml' -o -name '*.yaml'); do echo $i; ruby -e "require 'yaml';YAML.load_file(\"$i\")"; done
}

Protože mě unavilo ztrapňovat se a občas porušit nastavení zákazníka, napsal jsem tento malý úryvek a přidal ho jako háček před závazkem ke všem svým relevantním repozitářům. Něco podobného by bylo velmi užitečné jako součást vašeho kontinuálního integračního procesu, zvláště pokud pracujete jako součást týmu.

Ach, prsty, kde jste?

Kdysi jsem byl vynikající písař. Ty časy jsou dávno pryč. Píšu víc, než bych si myslel, že je možné.

V různých dobách jsem použil značné množství buď Chef nebo Kubernetes. Naštěstí pro mě jsem nikdy nepoužil obojí současně.

Součástí ekosystému Chef je Test Kitchen, sada nástrojů usnadňujících testování, které se spouští pomocí příkazů kitchen test . Kubernetes je spravován pomocí nástroje CLI kubectl . Oba příkazy vyžadují několik dílčích příkazů a ani jeden z nich neodkutálí prsty zvlášť plynule.

Namísto vytváření hromady „překlepových aliasů“ jsem tyto příkazy přiřadil k k :

alias k='kitchen test $@'

nebo

alias k='kubectl $@'

Časové rozdělovače

Poslední polovina mé kariéry zahrnovala psaní dalšího kódu s jinými lidmi. Pracoval jsem v mnoha prostředích, kde jsme na našem účtu vytvořili rozvětvené kopie repozitářů a jako součást procesu kontroly používáme žádosti o stažení. Když se chci ujistit, že můj fork daného repo je aktuální s nadřazeným, používám fetchupstream :

alias fetchupstream='git fetch upstream && git checkout master && git merge upstream/master && git push'

Moje oči viděly slávu příchodu barev

Líbí se mi barva. Může to usnadnit používání věcí, jako jsou rozdíly.

alias diff='colordiff'

Myslel jsem, že barevné manuálové stránky jsou skvělý trik, a tak jsem začlenil tuto funkci:

# Colorized man pages, from:
# http://boredzo.org/blog/archives/2016-08-15/colorized-man-pages-understood-and-customized
man() {
        env \
                LESS_TERMCAP_md=$(printf "\e[1;36m") \
                LESS_TERMCAP_me=$(printf "\e[0m") \
                LESS_TERMCAP_se=$(printf "\e[0m") \
                LESS_TERMCAP_so=$(printf "\e[1;44;33m") \
                LESS_TERMCAP_ue=$(printf "\e[0m") \
                LESS_TERMCAP_us=$(printf "\e[1;32m") \
                man "$@"
}

Líbí se mi příkaz which . Jednoduše vám řekne, odkud v souborovém systému pochází příkaz, který spouštíte – pokud to není funkce shellu. Po několika kaskádových dotfilech někdy není jasné, kde je funkce definována nebo co dělá. Ukazuje se, že whence a type s tím mohou pomoci příkazy.

# Where is a function defined?
whichfunc() {
        whence -v $1
        type -a $1
}

Závěr

Doufám, že vám tento článek pomůže a inspiruje vás při hledání způsobů, jak zlepšit každodenní používání shellu. Nemusí být obrovské, neotřelé nebo složité. Mohou vyřešit menší, ale časté problémy, vytvořit zkratku nebo dokonce nabídnout řešení, jak omezit běžné překlepy.

Můžete si prohlédnout mé úložiště dotfiles, ale varuji vás, že by to mohlo vyžadovat hodně čištění. Neváhejte použít cokoli, co považujete za užitečné, a buďte k sobě skvělí.


Linux
  1. Jaký je váš oblíbený shell pro práci správce systému?

  2. Zdroje pro programování Portable Shell?

  3. Potřebujete Shell pro Scp?

  1. Co můžete dělat s 256 MB Cloud VPS za 0,99 $?

  2. Co můžete dělat s VPS a cloudovým serverem?

  3. Co znamená 'cd -'?

  1. Transliterační skript pro linuxové prostředí

  2. Co je use() ve skriptování shellu?

  3. Může být soubor .sh malware?