Bash-Alias du kan inte leva utan
ett bash-alias är en metod för att komplettera eller åsidosätta Bash-kommandon med nya. Bash Alias gör det enkelt för användare att anpassa sin erfarenhet i en POSIX terminal. De definieras ofta i $ HOME/.bashrc eller $HOME / bash_aliases (som måste laddas av $HOME/.bashrc).
de flesta distributioner lägger till åtminstone några populära alias i standardinställningen .bashrc-fil för ett nytt användarkonto. Dessa är enkla för att visa syntaxen för ett bash-alias:
alias ls="ls -F"
alias ll="ls -lh"
alla distributioner levereras dock inte med fördefinierade Alias., Om du lägger till Alias manuellt måste du ladda dem i din nuvarande Bash-session:
$ source ~/.bashrc
annars kan du stänga terminalen och öppna den igen så att den laddar om konfigurationsfilen.
med de alias som definieras i Bash-initieringsskriptet kan du sedan skriva ll och få resultaten av ls-l, och när du skriver ls får du istället för utdata från vanligt gammalt ls.
dessa alias är bra att ha, men de kliar bara på ytan av vad som är möjligt. Här är topp 10 Bash alias som, när du försöker dem, du kommer inte att kunna leva utan.,
Ställ in först
innan du börjar, skapa en fil som heter~/.bash_aliases:
$ touch ~/.bash_aliases
kontrollera sedan att den här koden visas i din ~/.bashrc-fil:
if ; then
source $HOME/.bash_aliases
fi
om du vill prova någon av alias i den här artikeln för dig själv, ange dem i din .bash_aliases fil, och sedan ladda dem i din Bash session med källan ~/.BASHRC-kommandot.,
Sortera efter filstorlek
om du startade ditt datorliv med GUI-filhanterare som Nautilus i GNOME, Finder i MacOS eller Explorer i Windows, är du förmodligen van vid att sortera en lista med filer efter deras storlek. Du kan också göra det i en terminal, men det är inte exakt kortfattat.
Lägg till det här aliaset i din konfiguration på ett GNU-system:
alias lt="ls --human-readable --size -1 -S --classify"
det här aliaset ersätter lt med ett ls-kommando som visar storleken på varje objekt och sorterar det efter storlek, i en enda kolumn, med en notation för att ange vilken typ av fil., Ladda ditt nya alias och försök sedan:
på MacOS eller BSD har kommandot ls inte samma alternativ, så det här aliaset fungerar istället:
alias lt="du -sh * | sort -h"
resultaten av den här versionen är lite annorlunda:
$ du -sh * | sort -h
0 compile
0 COPYING
0 install-sh
0 missing
4.0K configure.ac
4.0K dot-gitlab.ci.yml
4.0K flatpak.path.patch
4.0K git-portal.spec
4.0K info.slackermedia.Git-portal.json
4.0K Makefile.am
8.0K README.md
12K config.log
16K bin
24K Makefile
24K Makefile.in
32K config.status
36K LICENSE
44K aclocal.m4
60K share
140K configure
476K autom4te.cache
faktum är att även på Linux är det kommandot användbart, eftersom det använder ls-listor kataloger och symlinkar som 0 i storlek, vilket kanske inte är den information du faktiskt vill ha. Det är ditt val.
Tack till Brad Alexander för detta alias idé.
Visa endast monterade enheter
kommandot mount brukade vara så enkelt., Med bara ett kommando kan du få en lista över alla monterade filsystem på din dator, och det användes ofta för en översikt över vilka enheter som var kopplade till en arbetsstation. Det brukade vara imponerande att se mer än tre eller fyra poster eftersom de flesta datorer inte har många fler USB-portar än så, så resultaten var hanterbara.,
datorer är lite mer komplicerade nu, och mellan LVM, fysiska enheter, nätverkslagring och virtuella filsystem kan resultaten av mount vara svåra att tolka:
för att lösa det problemet, prova ett alias så här:
alias mnt="mount | awk -F" " "{ printf \"%s\t%s\n\",\$1,\$3; }" | column -t | egrep ^/dev/ | sort"
det här aliaset använder awk för att tolka utmatningen från mount by column, vilket minskar utmatningen till vad du förmodligen letar efter (vilka hårddiskar och inte filsystem är monterade):
>
på MacOS tillhandahåller inte kommandot mount väldigt utförlig utmatning, så ett alias kan vara overkill., Men om du föredrar en kortfattad rapport, prova det här:
alias mnt="mount | grep -E ^/dev | column -t"
resultaten:
hitta ett kommando i din grep-historia
ibland räknar du ut hur du gör något i terminalen och lovar dig själv att du aldrig kommer att glömma vad du just har lärt dig. Sedan går en timme, och du har helt glömt vad du gjorde.
söka igenom din Bash historia är något alla har att göra från tid till annan., Om du vet exakt vad du söker efter kan du använda Ctrl + R för att göra en omvänd sökning genom din historia, men ibland kan du inte komma ihåg det exakta kommandot du vill hitta.
här är ett alias för att göra den uppgiften lite enklare:
alias gh="history|grep"
här är ett exempel på hur man använder den:
$ gh bash
482 cat ~/.bashrc | grep _alias
498 emacs ~/.bashrc
530 emacs ~/.bash_aliases
531 source ~/.bashrc
Sortera efter modifieringstid
det händer varje måndag: du kommer till jobbet, du sätter dig ner vid datorn, du öppnar en terminal, och du tycker att du har glömt vad du gjorde förra fredagen., Vad du behöver är ett alias för att lista de senast ändrade filerna.
Du kan använda kommandot ls för att skapa ett alias för att hjälpa dig att hitta var du slutade:
alias left="ls -t -1"
utmatningen är enkel, även om du kan utöka den med alternativet –long om du föredrar det., Aliaset, som listat, visar detta:
$ left
demo.jpeg
demo.xcf
design-proposal.md
rejects.txt
brainstorm.txt
query-letter.xml
räkna filer
om du behöver veta hur många filer du har i en katalog är lösningen ett av de mest klassiska exemplen på Unix-kommandokonstruktion: du listar filer med ls-kommandot, styr utmatningen för att bara vara en kolumn med -1-alternativet och sedan rör det som matas ut till kommandot WC (word count) för att räkna hur många rader av enskilda filer Det finns.
det är en lysande demonstration av hur Unix-filosofin tillåter användare att bygga sina egna lösningar med små systemkomponenter., Denna kommandokombination är också mycket att skriva om du råkar göra det flera gånger om dagen, och det fungerar inte exakt för en katalog med kataloger utan att använda-R-alternativet, vilket introducerar nya linjer till utmatningen och gör övningen värdelös.
istället gör detta alias processen enkel:
alias count="find . -type f | wc -l"
den här räknar filer, ignorerar kataloger, men inte innehållet i kataloger. Om du har en projektmapp som innehåller två kataloger, som var och en innehåller två filer, returnerar aliaset fyra, eftersom det finns fyra filer i hela projektet.,
$ ls
foo bar
$ count
4
skapa en Python virtuell miljö
kodar du i Python?
kodar du i Python mycket?
om du gör det, då vet du att skapa en Python virtuell miljö kräver åtminstone 53 tangenttryckningar.
det är 49 för många, men det är lätt att kringgå med två nya alias som heter ve och va:
alias ve="python3 -m venv ./venv"
alias va="source ./venv/bin/activate"
Running ve skapar en ny katalog, kallad venv, som innehåller det vanliga virtuella miljöfilsystemet för Python3., Va-aliaset aktiverar miljön i ditt nuvarande skal:
$ cd my-project
$ ve
$ va
(venv) $
Lägg till en kopia förloppsindikator
alla Petar kul på förloppsindikatorer eftersom de är ofelbart felaktiga. Och ändå, innerst inne, verkar vi alla vilja ha dem. UNIX cp-kommandot har ingen förloppsindikator, men det har a-v-alternativ för verbositet, vilket innebär att det ekar namnet på varje fil som kopieras till din terminal. Det är en ganska bra hacka, men det fungerar inte så bra när du kopierar en stor fil och vill ha en indikation på hur mycket av filen har ännu inte överförts.,
pv-kommandot ger en förloppsindikator under kopiering, men det är inte vanligt som ett standardprogram. Å andra sidan ingår rsync-kommandot i standardinstallationen av nästan alla POSIX-system som finns tillgängliga, och det är allmänt erkänt som ett av de smartaste sätten att kopiera filer både på distans och lokalt.
ännu bättre, den har en inbyggd förloppsindikator.,
alias cpv="rsync -ah --info=progress2"
att använda detta alias är detsamma som att använda cp-kommandot:
$ cpv bigfile.flac /run/media/seth/audio/
3.83M 6% 213.15MB/s 0:00:00 (xfr#4, to-chk=0/4)
en intressant bieffekt av att använda det här kommandot är att rsync kopierar både filer och kataloger utan den-r-flagga som cp annars skulle kräva.
skydda dig från filavlägsningsolyckor
du ska inte använda rm-kommandot. Rm-manualen säger även så:
varning: om du använder ’rm’ för att ta bort en fil är det vanligtvis möjligt att återställa innehållet i den filen., Om du vill ha mer försäkran om att innehållet verkligen är oåterkalleligt, överväg att använda ”shred”.
om du vill ta bort en fil ska du flytta filen till papperskorgen, precis som du gör när du använder ett skrivbord.
POSIX gör det enkelt, eftersom papperskorgen är en tillgänglig, verklig plats i ditt filsystem. Den platsen kan ändras, beroende på din plattform: på en FreeDesktop ligger papperskorgen på ~/.local / share / Trash, medan på MacOS är det~/.,Skräp, men hur som helst, det är bara en katalog där du placerar filer som du vill utom synhåll tills du är redo att radera dem för alltid.
detta enkla alias ger ett sätt att kasta filer i papperskorgen från din terminal:
alias tcn="mv --force -t ~/.local/share/Trash "
detta alias använder en föga känd MV-flagga som gör att du kan tillhandahålla filen du vill flytta som det sista argumentet, och ignorerar det vanliga kravet på att filen ska listas först., Nu kan du använda ditt nya kommando för att flytta filer och mappar till ditt system papperskorgen:
$ ls
foo bar
$ tcn foo
$ ls
bar
nu är filen ”borta”, men bara tills du inser i en kall svett att du fortfarande behöver det. Vid den tiden kan du rädda filen från ditt system skräp; var noga med att tipsa bash och MV utvecklare på väg ut.
Obs! Om du behöver ett mer robust papperskorg med bättre efterlevnad av FreeDesktop, se Trashy.
förenkla ditt Git-arbetsflöde
alla har ett unikt arbetsflöde, men det finns vanligtvis repetitiva uppgifter oavsett vad., Om du arbetar med Git regelbundet, då finns det förmodligen någon sekvens du befinner dig upprepa ganska ofta. Kanske du befinner dig gå tillbaka till master branch och dra de senaste ändringarna om och om igen under dagen, eller kanske du befinner dig skapa Taggar och sedan trycka dem på fjärrkontrollen, eller kanske det är något annat helt.
oavsett vilken git-besvärjelse du har tröttnat på att skriva, kan du kanske lindra lite smärta med ett Bash-alias., Till stor del tack vare sin förmåga att skicka argument till krokar, Git har en rik uppsättning av introspektiva kommandon som räddar dig från att behöva utföra kusliga bedrifter i Bash.
till exempel, medan du kan kämpa för att hitta, i Bash, ett projekts toppnivåkatalog (som, när det gäller Bash, är en helt godtycklig beteckning, eftersom den absoluta toppnivån till en dator är rotkatalogen), vet Git sin toppnivå med en enkel fråga., Om du studerar upp på Git krokar, hittar du dig själv kunna ta reda på alla typer av information som Bash vet ingenting om, men du kan utnyttja den informationen med en Bash alias.,
här är ett alias för att hitta den översta nivån i ett Git-projekt, oavsett var i det projektet du arbetar för närvarande, och sedan ändra katalog till det, ändra till huvudgrenen och utföra en Git pull:
alias startgit="cd `git rev-parse --show-toplevel` && git checkout master && git pull"
den här typen av alias är inte på något sätt ett universellt användbart alias, men det visar hur ett relativt enkelt alias kan eliminera mycket arbetskrävande navigering, kommandon och väntar på uppmaningar.
ett enklare och förmodligen mer universellt alias returnerar dig till Git-projektets toppnivå., Detta alias är användbart eftersom när du arbetar med ett projekt blir projektet mer eller mindre din ”tillfälliga hem” – katalog. Det ska vara så enkelt att gå ”hem” som det är att gå till ditt faktiska hem, och här är ett alias att göra det:
alias cg="cd `git rev-parse --show-toplevel`"
nu tar kommandot cg dig till toppen av ditt Git-projekt, oavsett hur djupt in i katalogstrukturen du har kommit ner.,
ändra kataloger och visa innehållet samtidigt
det var en gång (påstås) föreslagen av en ledande forskare att vi kunde lösa många av planetens energiproblem genom att utnyttja den energi som förbrukas av nördar som skriver cd följt av ls.
det är ett vanligt mönster, för i allmänhet när du byter kataloger har du impulsen eller behovet av att se vad som finns runt.
men ”walking” datorns katalogträd behöver inte vara en start-och-stopp-process.
det här är fusk, eftersom det inte är ett alias alls, men det är en bra ursäkt för att utforska Bash-funktioner., Medan alias är bra för snabba substitutioner, Bash kan du lägga till lokala funktioner i din .bashrc fil (eller en separat funktioner fil som du laddar in .bashrc, precis som du gör din Alias fil).
för att hålla saker modulära, skapa en ny fil som heter~/.bash_functions och sedan har din .,bashrc laddar den:
if ; then
source $HOME/.bash_functions
fi
i funktionsfilen lägger du till den här koden:
ladda funktionen i din Bash-session och prova sedan:
$ source ~/.bash_functions
$ cl Documents
foo bar baz
$ pwd
/home/seth/Documents
$ cl ..
Desktop Documents Downloads
$ pwd
/home/seth
funktionerna är mycket mer flexibla än alias, men med den flexibiliteten kommer ansvaret för dig att se till att din kod är meningsfull och gör vad du förväntar dig. Alias är avsedda att vara enkla, så håll dem lätta, men användbara. För allvarliga ändringar av hur Bash beter sig, använd funktioner eller anpassade skalskript som sparats på en plats i din väg.,
för posten finns det några smarta hackar för att implementera cd-och ls-sekvensen som ett alias, så om du är tålmodig nog är himlen gränsen även med ödmjuka Alias.