Вовед во корисни баш псевдоними и функции


Вовед

Колку повеќе работите на командната линија, толку повеќе ќе откриете дека поголемиот дел од командите што ги користите се многу мала подгрупа од достапните команди. Повеќето задачи се вообичаени и може да ги извршувате на ист начин секој ден.

Додека креаторите на многу од најчестите алатки за команди се обидоа да го отстранат необичното пишување со користење скратени имиња (помислете колку тастатура заштедувате дневно со пишување \ls наместо \list и \cd наместо\„change-directory“), тие не се сеприсутни. Дополнително, многу луѓе секогаш извршуваат команди со овозможени истите неколку опции секој пат.

За среќа, bash ни овозможува да креираме сопствени кратенки и штедење време преку употреба на псевдоними и функции на школка. Во овој водич, ќе разговараме како да ги искористиме овие и ќе ви дадеме неколку корисни примери за да започнете во вистинската насока.

Како да се прогласи баш алијас

Декларирањето псевдоними во bash е многу едноставно. Толку е лесно што треба да го пробате сега.

Можете да декларирате псевдоними кои ќе траат колку што е вашата сесија на школка со едноставно внесување на нив во командната линија. Синтаксата изгледа вака:

  1. 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 за да се поврзам и автоматски да се сменам во одреден директориум:

  1. alias upload="sftp username@server.com</^>:/path/to/upload/directory<^>

Започнување со Bash функции

Иако псевдонимите се брзи и лесни за имплементација, тие се доста ограничени во нивниот опсег. Додека се обидувате да ги поврзете командите заедно, ќе откриете дека не можете многу добро да пристапите до аргументите дадени за време на извршувањето, меѓу другото. Алијасите, исто така, понекогаш може да бидат прилично бавни бидејќи се читаат по сите функции.

Постои алтернатива за псевдонимите што е поцврста и може да ви помогне да го премостите јазот помеѓу баш псевдонимите и скриптите со целосна школка. Овие се нарекуваат функции на школка. Тие работат речиси на ист начин како псевдонимите, но се повеќе програмски и прифаќаат внесување на стандарден начин.

Овде нема да навлегуваме во опширни детали, бидејќи тие можат да се користат во толку многу сложени ситуации и баш е цел јазик за скриптирање, но ќе разгледаме неколку основни примери.

За почеток, постојат два основни начини да се декларира баш синтакса. Првата ја користи командата function и изгледа отприлика вака:

  1. function function_name {
  2. command1
  3. <^>command2</^>
  4. }

Другата синтакса користи множество од загради што е повеќе „како C“:

  1. function_name () {
  2. command1
  3. command2
  4. }

Можеме да ја компресираме оваа втора форма во една линија и да ги одделиме командите со точка-запирка. Запирка мора да дојде и по последната команда:

  1. 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

Лесно можеме да ја користиме оваа листа како почетна точка за команди што често ги користиме. Во делот за коментари, слободно споделете ги вашите омилени баш псевдоними и функции:

Од Џастин Елингвуд