Како да го прилагодите вашиот Bash Prompt на Linux VPS


Вовед

Додека управувате со серверите на Линукс, ќе потрошите доста време користејќи ја командната линија. За повеќето луѓе, ова значи дека поминуваат многу време со школката Bash.

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

Ќе користиме Ubuntu 12.04 VPS за експериментирање, но скоро сите модерни дистрибуции на Linux треба да работат на сличен начин.

Потврдете дека вашата школка е Bash

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

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

Лесно е да се потврди со проверка на датотеката /etc/passwd. Отворете ја датотеката во пејџер како овој:

less /etc/passwd

Секоја линија во оваа датотека содржи информации за различен корисник. Најдете го вашиот корисник и корисникот на root во првата колона, разделени со две точки (:). Во последното поле, стандардната обвивка за најавување за тој корисник ќе биде наведена:

root:x:0:0:root:/root:/bin/bash
. . .
demouser:x:1000:1000:,,,:/home/demouser/bin/bash

Ако последното поле е /bin/bash, тогаш сте подготвени.

Ако последното поле е не /bin/bash и сакате да ја промените вашата стандардна школка во Bash, можете да ја уредите оваа датотека со права на root и да го промените последното поле поврзано со вашиот корисник:

sudo nano /etc/passwd

Откако ќе ја направите промената, одјавете се и вратете се за да ја користите школката Bash.

Гледајќи ги тековните вредности

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

Bash го конфигурира својот потсетник со користење на еколошките променливи PS1 и PS2.

PS1 го дефинира примарното известување што ќе го видите. Ова го гледате секогаш кога ќе се најавите. Стандардно, во Ubuntu системите, ова треба да има форма на:

<пред>

Забележете го $ на крајот. Ова значи дека школката е нормална корисничка школка. За root корисникот, ова е заменето со # за да се разликува и да ве направи свесни дека работите со зголемени привилегии.

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

echo \

Притиснете enter директно по обратната коса црта за да го видите барањето. Стандардно, во Ubuntu, ова е >.

Обично, ние дефинираме што ќе чуваат овие променливи во нашата датотека ~/.bashrc, која се чита кога ќе започне нашата интерактивна школка.

Внатре во оваа датотека на Ubuntu 12.04, можеме да најдеме дел како овој:

# uncomment for a colored prompt, if the terminal has the capability; turned
# off by default to not distract the user: the focus in a terminal window
# should be on the output of commands, not on the prompt
# force_color_prompt=yes

if [ -n "$force_color_prompt" ]; then
    if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
        # We have color support; assume it's compliant with Ecma-48
        # (ISO/IEC-6429). (Lack of such support is extremely rare, and such
        # a case would tend to support setf rather than setaf.)
        color_prompt=yes
    else
        color_prompt=
    fi
fi

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

Можеме да видиме некоја логика која диктира кога барањето ќе биде обоено. Треба да ја откоментирате линијата force_color_prompt=yes ако сакате обоен промпт. Направете го ова сега за да ги искористите приспособувањата што ќе ги правиме подоцна.

force_color_prompt=yes

Делот за кој се грижиме е делот што го поставува промптот. Ова е вгнездено во конструкција if-else со различни потсетници врз основа на тоа дали користите боја:

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

Горниот дел додава поддршка за боја. Ајде да го погледнеме вториот дел, без боја за прво да сфатиме некои од основите:

PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

Ова изгледа прилично комплицирано и има некои делови што не се совпаѓаат со ништо што го гледаме во нашата нормална употреба на школка.

Деловите што вклучуваат debian_chroot укажуваат на тоа дека ако работите во промена на root околината, барањето ќе биде изменето за да ве потсети. Веројатно сакате да го задржите овој дел од промптот, бидејќи ова е корисна карактеристика.

Остатокот од брзата дефиниција изгледа вака:

\u@\h:\w\$: 

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

Баш бегство секвенци

Можеме да најдеме цел список на можни секвенци за бегство на страницата Bash man:

<пред>

Како што можете да видите, има некои основни информации и некои информации што веројатно нема да ви требаат (лик на ѕвончето ASCII, верзија на Bash, итн.).

Нашиот потсетник во моментов го има корисничкото име (\u), симболот @, првиот дел од името на домаќинот (\h), тековниот работен директориум (\w), и на крајот, \$за обични корисници и\„#“ за root корисникот.

Ајде да излеземе од датотеката ~/.bashrc за да можеме да тестираме некои од другите опции.

Тестирање на нови потсетници на Bash

Иако на крајот ќе сакаме да ја уредиме нашата датотека ~/.bashrc за да ги направиме нашите избори трајни, многу е полесно да експериментираме со менување на промптот од самата командна линија.

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

ORIG=$PS1

Сега, имаме еколошка променлива наречена ORIG која ќе зачува копија од она што е нашиот стандарден промпт.

Ако треба да се вратиме на првобитното барање, можеме да напишеме:

PS1=$ORIG

Да почнеме едноставно со тоа што само ќе го имаме нашето корисничко име и $ за вистинското барање:

PS1="\u$"

Треба да добиеме нешто што изгледа вака:

demouser$

Да оставиме малку простор за да изгледа поубаво:

PS1="\u $: "
demouser $:

Сепак, веројатно не сакаме да го користиме буквалниот знак \$. Наместо тоа, треба да ја користиме секвенцата за бегство \$. Ова динамички ќе го измени барањето врз основа на тоа дали сме root или не, дозволувајќи нашиот PS1 правилно да се користи како root:

PS1="\u \$: "

Можеме да додадеме какви било буквални низи што ги сакаме во нашата порака:

PS1="Hello, my name is \u! \$: "
Hello, my name is demouser! $:

Ние исто така можеме да ги вметнеме резултатите од произволните команди со користење на редовна функционалност на школка.

Овде, можеме да побараме од нашиот промпт да го даде тековното оптоварување на нашиот сервер со повлекување на првата колона од метриката за оптоварување што се наоѓа на /proc/loadavg користејќи бекстикови за да ги вметне резултатите од командата:

PS1="\u, load: `cat /proc/loadavg | awk '{ print $1; }'` \$: "
demouser, load: 0.01 $:

Ова е добар начин да знаете дали го оданочувате вашиот систем.

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

PS1="[\u@\h, load: `cat /proc/loadavg | awk '{ print $1; }'`] (\d - \t) \w \$ "
[demouser@host, load: 0.01] (Thu Feb 20 - 13:15:20) ~ $

Ова почнува да станува малку незгодно, особено ако ги смениме директориумите во нешто со долга патека:

cd /etc/systemd/system/multi-user.target.wants
[demouser@host, load: 0.01] (Thu Feb 20 - 13:18:28) /etc/systemd/system/multi-user.target.wants $

Ако сè уште ги сакаме сите овие информации, но сакаме да ги направиме пократки, една стратегија е да ги поделиме информациите помеѓу две линии со знак за нова линија \n:

PS1="[\u@\h, load: `cat /proc/loadavg | awk '{ print $1; }'`] (\d - \t)\n\w \$ "
[demouser@host, load: 0.00] (Thu Feb 20 - 13:20:00)
/etc/systemd/system/multi-user.target.wants $

На некои луѓе не им се допаѓа потсетникот со повеќе линии, но тоа е еден начин да се обезбедат повеќе информации во вашиот потпис.

Промена на боите на промптите

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

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

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

Прво, мора да го завиткате целиот опис на кодот за боја во ознаките \[ и \]. Овие загради укажуваат на баш дека знаците што постојат по првата низа до последната низа треба да се сметаат за знаци што не се печатат.

Баш треба да го знае ова за да може да процени колку знаци ќе дозволи да се испечатат пред да се завитка во следниот ред. Ако не ги приложите вашите кодови за боја во ознаките \[ и \], Bash ќе ги брои сите знаци како буквални знаци и ќе ја завитка линијата прерано.

Второ, внатре во низата за непечатење на заградата, треба да го наведете почетокот на барањето за боја со внесување \e[ или \033[. И двете го прават истото и укажуваат на почеток на низа за бегство. Ќе користам \e[ во ова упатство бидејќи мислам дека е малку појасно.

Пред \], потребен ви е \m за да покаже дека давате низа на бои.

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

<пред>

Како што можете да видите, ова е делот што ги прави нашите потсетници особено неуредни.

Што се однесува до шифрите за боја, основните кодови за промена на бојата на текстот во преден план се тука:

  • 30: црно
  • 31: Црвено
  • 32: зелено
  • 33: Жолта
  • 34: Сина
  • 35: Виолетова
  • 36: цијан
  • 37: Бело

Можете исто така да ги менувате овие основни вредности со поставување на \атрибут пред основната вредност, одделена со полу-запирка (;).

Во зависност од тоа каков вид на терминал користите, тие може да се однесуваат прилично поинаку. Некои од почестите атрибути се:

  • 0: Нормален текст
  • 1: задебелено или светло, во зависност од терминалот
  • 4: Подвлечете го текстот

Значи, ако сакате подвлечен зелен текст, би користеле низа како оваа:

\[\e[4;32m\]

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

Можеме да го направиме ова со користење на друг код за боја што покажува дека Bash треба да ја ресетира бојата на барањето. Овој код е:

\[\e[0m\]

Значи, заедно, едноставен обоен знак со корисничко име и домаќин може да изгледа вака:

PS1="\[\e[4;32m\]\u@\h\[\e[0m\]$ "

Можеме да одредиме и бои на позадина за поголема сложеност. Боите во позадина не можат да земат атрибути. Тие се:

  • 40: Црна позадина
  • 41: Црвена позадина
  • 42: зелена позадина
  • 43: Жолта позадина
  • 44: Сина позадина
  • 45: виолетова позадина
  • 46: цијана позадина
  • 47: Бела позадина

Иако можете да ги наведете боите на заднината, атрибутите и бојата на текстот наеднаш вака:

\[\e[42;1;36m\]

Обично работи подобро ако ги одделите информациите за позадина од другите информации:

\[\e[42m\]\[\e[1;36m\]

Понекогаш, ако само го користите атрибутот на текстот „нормален“ (0), бојата се расипува во некои терминали. Ова може да го избегнете со тоа што нема да ја наведете нормалната вредност со 0, бидејќи сепак е стандардна.

Вашите брзи промени да станат трајни

Сега кога си поигравме со нашиот потпис некое време, треба да имаме добра идеја за тоа како сакаме да изгледа нашиот потпис. Треба да можете да креирате и обоен и без обоен потсетник.

За нашиот пример, ќе го користиме следново обоено барање:

PS1="[\[\e[0;32m\]\u@\h, load: `cat /proc/loadavg | awk '{ print $1; }'`\[\e[00m\]] (\[\e[00;35m\]\d - \t\[\e[00m\])\n\w \$ "

Ќе го користиме и необоениот еквивалент, за кога не сакаме да имаме известување за баш во боја:

PS1="[\u@\h, load: `cat /proc/loadavg | awk '{ print $1; }'`] (\d - \t)\n\w \$ "

Сега кога ги имаме двете верзии на промптот што ги сакаме, можеме да го уредиме PS1 во нашата датотека ~/.bashrc.

nano ~/.bashrc

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

if [ "$color_prompt" = yes ]; then
    PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
    PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '
fi
unset color_prompt force_color_prompt

Коментирајте ги тековните задачи PS1 и копирајте ја логиката debian_chroot подолу, така што ќе изгледа вака:

<пред>

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

Во првата задача PS1, користете ја обоената верзија на вашиот потсетник. Во вториот, користете го необоениот.

<пред>

Кога ќе завршиме, можеме да ја затвориме и зачуваме датотеката.

Сега, кога ќе се одјавите и повторно ќе влезете, вашиот потсетник ќе се смени во вредноста што сте ја поставиле.

Заклучок

Постојат многу различни начини на кои можете да ги персонализирате вашите конфигурации. Боењето на одредени ставки може да ги направи да се истакнат и може да ви помогне да го лоцирате последното известување кога се движите низ историјата на терминалот.

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

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