Вовед во корисни баш псевдоними и функции
Вовед
Колку повеќе работите на командната линија, толку повеќе ќе откриете дека поголемиот дел од командите што ги користите се многу мала подгрупа од достапните команди. Повеќето задачи се вообичаени и може да ги извршувате на ист начин секој ден.
Додека креаторите на многу од најчестите алатки за команди се обидоа да го отстранат необичното пишување со користење скратени имиња (помислете колку тастатура заштедувате дневно со пишување \ls наместо \list и \cd наместо\„change-directory“), тие не се сеприсутни. Дополнително, многу луѓе секогаш извршуваат команди со овозможени истите неколку опции секој пат.
За среќа, bash ни овозможува да креираме сопствени кратенки и штедење време преку употреба на псевдоними и функции на школка. Во овој водич, ќе разговараме како да ги искористиме овие и ќе ви дадеме неколку корисни примери за да започнете во вистинската насока.
Како да се прогласи баш алијас
Декларирањето псевдоними во bash е многу едноставно. Толку е лесно што треба да го пробате сега.
Можете да декларирате псевдоними кои ќе траат колку што е вашата сесија на школка со едноставно внесување на нив во командната линија. Синтаксата изгледа вака:
- alias alias_name="command_to_run"
Забележете дека нема растојание помеѓу соседните елементи и знакот за еднаквост. Ова не е опционално. Празни места овде ќе ја прекинат командата.
Ајде да создадеме заеднички баш псевдоним сега. Една идиоматска командна фраза што многу луѓе ја користат често е ls -lha
или ls -lhA
(втората ја испушта листата на тековниот и родителскиот директориум). Можеме да создадеме кратенка што може да се нарече ll
со внесување:
alias ll="ls -lhA"
Сега, можеме да напишеме ll
и ќе го добиеме списокот на тековниот директориум, во долг формат, вклучувајќи скриени директориуми:
ll
-rw-r--r-- 1 root root 3.0K Mar 20 18:03 .bash_history
-rw-r--r-- 1 root root 3.1K Apr 19 2012 .bashrc
drwx------ 2 root root 4.0K Oct 24 14:45 .cache
drwx------ 2 root root 4.0K Mar 20 18:00 .gnupg
-rw-r--r-- 1 root root 0 Oct 24 17:03 .mysql_history
-rw-r--r-- 1 root root 140 Apr 19 2012 .profile
drwx------ 2 root root 4.0K Oct 24 14:21 .ssh
-rw------- 1 root root 3.5K Mar 20 17:24 .viminfo
Ако сакате да се ослободите од алијас, само користете ја командата unalias
:
unalias ll
Алијасот сега е отстранет.
Можете да ги наведете сите ваши конфигурирани псевдоними со предавање на командата alias
без никакви аргументи:
alias
За привремено да го заобиколиме псевдонимот (да речеме дека го ставивме псевдонимот ls
во ls -a
), можеме да напишеме:
\ls
Ова ќе ја повика нормалната команда пронајдена на нашата патека, без користење на псевдонимната верзија.
Претпоставувајќи дека не сте го депоставиле, алијасот ll
ќе биде достапен во текот на тековната сесија на школка, но кога ќе отворите нов терминален прозорец, ова нема да биде достапно.
За да го направиме ова постојано, треба да го додадеме во една од различните датотеки што се читаат кога започнува сесијата на школка. Популарни избори се ~/.bashrc
и ~/.bash_profile
. Треба само да ја отвориме датотеката и да го додадеме алијасот таму:
nano ~/.bashrc
На дното или каде и да сакате, додајте го псевдонимот што го додадовте во командната линија. Слободно додајте коментар во кој ќе декларирате цел дел посветен на баш псевдонимите:
#########
# Aliases
#########
alias ll="ls -lhA"
Овој псевдоним или варијација можеби веќе се наоѓа во вашата датотека. Многу дистрибуции се испорачуваат со збир на стандардни баш конфигурациски датотеки со неколку корисни псевдоними.
Зачувајте ја и затворете ја датотеката. Сите псевдоними што сте ги додале ќе бидат достапни следниот пат кога ќе започнете нова сесија на школка. За да ги прочитате сите промени што сте ги направиле во вашата датотека во вашата тековна сесија, само кажете му на bash да ја препрочита датотеката сега:
source ~/.bashrc
Алијас Примери
Сега кога знаете како да креирате сопствени псевдоними, ајде да зборуваме за некои популарни што може да ви бидат корисни. Овие може да се најдат низ мрежата, а некои може да бидат вклучени и во стандардната баш конфигурација на вашата дистрибуција.
Навигација и огласување
Многу од наједноставните команди на Linux се покорисни кога применувате форматирање и опции.
Разговаравме за еден ls
пример погоре, но има многу други што може да ги најдете.
Стандардно направете ls
прикажување во колони и со индикатор за тип на датотека (крајни директориуми со \/”, итн.:
alias ls="ls -CF"
Можеме да предвидиме и некои печатни грешки за да ја повикаме точната команда:
alias sl="ls"
Ајде, исто така, да направиме псевдоним за да го доведеме нашиот излез до less
за прегледување на листи на големи директориуми со долг формат:
alias lsl="ls -lhFA | less"
Што би можеле да отстапиме од ls
и да пробаме некои корисни команди за cd
.
Овој ќе се смени во вашиот родителски директориум, дури и кога ќе го заборавите просторот:
alias cd..="cd .."
Можете исто така да го отсечете делот cd
целосно со правење алијас за ..
:
alias ..="cd .."
Можеме лесно да најдеме датотеки во нашиот тековен директориум со поставување на овој псевдоним:
alias fhere="find . -name "
Системски псевдоними
Што е со некои од нашите команди за следење и системска статистика? Јас ги нарекувам овие со истите опции секој пат, па можеби ќе направам некои псевдоними.
Ова ќе го наведе нашето користење на дискот во единици читливи од човек, вклучително и типот на датотечен систем, и ќе отпечати вкупно на дното:
alias df="df -Tha --total"
Може да додадеме алијас и за нашиот претпочитан излез du
:
alias du="du -ach | sort -h"
Да продолжиме да одиме во иста насока со тоа што нашиот бесплатен
излез ќе биде попријатен за луѓето:
alias free="free -mt"
Можеме да направиме многу со нашата табела за процесот на котација. Да започнеме со поставување на стандарден излез:
alias ps="ps auxf"
Како да ја направиме нашата процесна табела да може да се пребарува. Можеме да создадеме псевдоним што го бара нашиот процес за аргумент што ќе го пренесеме:
alias psg="ps aux | grep -v grep | grep -i -e VSZ -e"
Сега, кога ќе го наречеме со името на процесот што го бараме како аргумент, ќе добиеме убав, компактен излез:
psg bash
USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
1001 5227 0.0 0.0 26320 3376 pts/0 Ss 16:29 0:00 bash
Разни псевдоними
Една вообичаена опција за командата mkdir
што често ја користиме е знамето -p
за да ги направиме потребните директориуми за родители. Можеме да го направиме ова стандардно:
alias mkdir="mkdir -p"
Можеби ќе сакаме да додадеме знаменце -v
на тоа, за да ни биде кажано за секое креирање директориум, што може да ни помогне брзо да препознаеме дали сме имале печатна грешка што предизвикала случајна гранка на директориумот:
alias mkdir="mkdir -pv"
Кога преземате датотеки од интернет со wget
, во речиси сите околности, ќе сакате да го поминете знамето -c
за да продолжите со преземањето во случај на проблеми. Тоа можеме да го поставиме со ова:
alias wget="wget -c"
Можеме лесно да ја пребаруваме нашата историја како со греп на излезот на командата history
. Ова понекогаш е покорисно отколку да користите CTRL-R за обратно пребарување, бидејќи ви дава команден број за да направите посложени отповикувања потоа:
alias histg="history | grep"
Имам неколку системски алатки кои претпочитам да ги надградам од стандардна верзија на посложени алатки. Овие ќе работат само ако сте ги презеле потребните алатки, но тие можат да бидат многу корисни. Имајте на ум дека овие може да влијаат на другите ваши псевдоними.
Оваа ја заменува конвенционалната команда top
со подобрена верзија која е многу полесна за очите и може да се сортира, пребарува и лизга без компликации:
alias top="htop"
На сличен начин, може да се преземе командата ncdu
која ги прикажува големините на датотеките и директориумите во интерактивен приказ на ncurses што можете да го прелистувате и да го користите за да извршите едноставни дејства со датотеките:
alias du="ncdu"
Постои надградена алатка за df
, исто така, наречена pydf
. Обезбедува обоен излез и ленти за употреба базирани на текст. Може стандардно да ја користиме оваа алатка ако ја имаме:
alias df="pydf"
Дали некогаш ви била потребна вашата јавна IP адреса од командната линија кога сте зад рутер што користи NAT? Нешто како ова може да биде корисно:
alias myip="curl http://ipecho.net/plain; echo"
За мои цели, сакам да ги оптимизирам сликите што ги поставувам за статии да бидат со големина од 690 пиксели или помалку, затоа го користам пакетот ImageMagick (sudo apt-get install imagemagick
ако веќе не е достапен) кој содржи команда наречен mogrify
што го прави токму ова. Ја имам оваа команда во мојата датотека ~/.bashrc
:
alias webify="mogrify -resize 690\> *.png"
Ова ќе ја промени големината на сите PNG слики во тековниот директориум, само ако тие се пошироки од 690 пиксели.
Ако потоа треба да ги подигнам на сервер, можам да користам sftp
за да се поврзам и автоматски да се сменам во одреден директориум:
- alias upload="sftp username@server.com</^>:/path/to/upload/directory<^>
Започнување со Bash функции
Иако псевдонимите се брзи и лесни за имплементација, тие се доста ограничени во нивниот опсег. Додека се обидувате да ги поврзете командите заедно, ќе откриете дека не можете многу добро да пристапите до аргументите дадени за време на извршувањето, меѓу другото. Алијасите, исто така, понекогаш може да бидат прилично бавни бидејќи се читаат по сите функции.
Постои алтернатива за псевдонимите што е поцврста и може да ви помогне да го премостите јазот помеѓу баш псевдонимите и скриптите со целосна школка. Овие се нарекуваат функции на школка. Тие работат речиси на ист начин како псевдонимите, но се повеќе програмски и прифаќаат внесување на стандарден начин.
Овде нема да навлегуваме во опширни детали, бидејќи тие можат да се користат во толку многу сложени ситуации и баш е цел јазик за скриптирање, но ќе разгледаме неколку основни примери.
За почеток, постојат два основни начини да се декларира баш синтакса. Првата ја користи командата function
и изгледа отприлика вака:
- function function_name {
- command1
- <^>command2</^>
- }
Другата синтакса користи множество од загради што е повеќе „како C“:
- function_name () {
- command1
- command2
- }
Можеме да ја компресираме оваа втора форма во една линија и да ги одделиме командите со точка-запирка. Запирка мора да дојде и по последната команда:
- function_name () { command1; command2; }
Да започнеме со демонстрација на исклучително корисна баш функција. Овој ќе создаде директориум, а потоа веднаш ќе се пресели во тој директориум. Ова е обично точно низата што ја земаме кога правиме нови директориуми:
mcd () {
mkdir -p $1
cd $1
}
Сега, кога ја користиме, користете ја оваа функција наместо обичната команда mkdir
за автоматска промена во директориумот по креирањето:
mcd test
pwd
/home/demouser/test
Една интересна функција што ќе ја видите наоколу е функцијата extract
. Ова комбинира многу алатки за да ви овозможи да го декомпресирате речиси секој формат на компресирана датотека. Постојат голем број на варијации, но оваа доаѓа од тука:
function extract {
if [ -z "$1" ]; then
# display usage if no parameters given
echo "Usage: extract <path/file_name>.<zip|rar|bz2|gz|tar|tbz2|tgz|Z|7z|xz|ex|tar.bz2|tar.gz|tar.xz>"
echo " extract <path/file_name_1.ext> [path/file_name_2.ext] [path/file_name_3.ext]"
return 1
else
for n in $@
do
if [ -f "$n" ] ; then
case "${n%,}" in
*.tar.bz2|*.tar.gz|*.tar.xz|*.tbz2|*.tgz|*.txz|*.tar)
tar xvf "$n" ;;
*.lzma) unlzma ./"$n" ;;
*.bz2) bunzip2 ./"$n" ;;
*.rar) unrar x -ad ./"$n" ;;
*.gz) gunzip ./"$n" ;;
*.zip) unzip ./"$n" ;;
*.z) uncompress ./"$n" ;;
*.7z|*.arj|*.cab|*.chm|*.deb|*.dmg|*.iso|*.lzh|*.msi|*.rpm|*.udf|*.wim|*.xar)
7z x ./"$n" ;;
*.xz) unxz ./"$n" ;;
*.exe) cabextract ./"$n" ;;
*)
echo "extract: '$n' - unknown archive method"
return 1
;;
esac
else
echo "'$n' - file does not exist"
return 1
fi
done
fi
}
Оваа функција го зема првиот аргумент и ја повикува соодветната услужна програма врз основа на користената екстензија на датотеката.
Заклучок
Се надеваме дека овој водич ви дал инспирација за создавање на сопствени псевдоними и баш функции. Широката употреба на овие може да ви помогне да го направите вашето време во школката попријатно и помалку сложено.
Не заборавајте да бидете претпазливи за редефинирање на постоечките команди со однесување кое е потенцијално деструктивно. Дури и да се направи спротивното и да се прикаже команда на побезбедна варијанта (секогаш да се бара потврда пред да се брише рекурзивно, на пример) може да се врати за да ве гризне првиот пат кога сте на систем без него, откако ќе се потпрете на него .
За да најдете кандидати за кои можеби е добро да се креираат псевдоними, можеби е добра идеја да ја пребарувате вашата историја за најчесто користените команди. Една линија од овде ни овозможува да ги видиме нашите најкористени команди:
history | awk '{CMD[$2]++;count++;}END { for (a in CMD)print CMD[a] " " CMD[a]/count*100 "% " a;}' | grep -v "./" | column -c3 -s " " -t | sort -nr | nl | head -n10
1 247 24.7% cd
2 112 11.2% vim
3 90 9% exit
4 72 7.2% ls
5 70 7% xset
6 56 5.6% apt-get
7 40 4% vlc
8 40 4% rm
9 38 3.8% screen
10 27 2.7% htop
Лесно можеме да ја користиме оваа листа како почетна точка за команди што често ги користиме. Во делот за коментари, слободно споделете ги вашите омилени баш псевдоними и функции: