Како користити команду историје на Линуку

Линуксова љуска чува историју команди које покрећете и можете да је претражите да бисте поновили команде које сте покренули у прошлости. Једном када разумете команду историје Линук-а и како да је користите, она може значајно повећати вашу продуктивност.

Манипулисање историјом

Као што Џорџ Сантајана је чувено рекао, „Они који не могу да се сете прошлости осуђени су да је понове.” Нажалост, на Линук-у, ако не можете да се сетите прошлости, не можете да је поновите, чак и ако желите.

Тада је згодна команда Линукс историје. Омогућава вам да прегледате и поновите своје претходне команде. Ово није намењено само да подстакне лењост или уштеди време – у игри је и фактор ефикасности (и тачности). Што је команда дужа и компликованија, то је теже запамтити и откуцати без грешке. Постоје две врсте грешака: једна која спречава рад команде и она која дозвољава команди да ради, али је чини да уради нешто неочекивано.

Команда историје елиминише те проблеме. Као и већина Линук команди, има више тога него што мислите. Међутим, ако научите како да користите команду историје, то може побољшати вашу употребу командне линије за Линук, сваког дана. То је добра инвестиција вашег времена. Постоје далеко бољи начини за коришћење команде историје од једноставног притискања стрелице нагоре.

Команда историје

У свом најједноставнијем облику, можете користити команду историје тако што ћете само уписати њено име:

history

Тхе

Листа претходно коришћених команди се затим уписује у прозор терминала.

Пример излаза из

Команде су нумерисане, а последње коришћене (оне са највећим бројевима) на крају листе.

Да бисте видели одређени број команди, можете проследити број у историју на командној линији. На пример, да бисте видели последњих 10 команди које сте користили, откуцајте следеће:

history 10

Тхе

Можете постићи исти резултат ако прођете кроз историју реп команда. Да бисте то урадили, откуцајте следеће:

history | tail -n 10

Тхе

Понављање команди

Ако желите да поново користите команду са листе историје, унесите знак узвика (!) и број команде без размака између.

На пример, да бисте поновили команду број 37, откуцали бисте ову команду:

!37

Ан

Да бисте поновили последњу команду, откуцајте два знака узвика, опет, без размака:

!!

Ан

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

За следећи пример, откуцали смо команду која захтева судо. Уместо да поново куцамо цео ред, можемо да сачувамо гомилу притисака на тастере и само укуцамо судо !!, као што је приказано испод:

mv ./my_script.sh /usr/local/bin/
sudo !!

Ан

Дакле, можете да откуцате одговарајући број са листе да поновите команду или да користите двоструке узвике да поновите последњу команду коју сте користили. Међутим, шта ако желите да поновите пету или осму команду?

  8 крипто курсева да бисте постали бољи у трговању

Можете користити један узвичник, цртицу (-) и број било које претходне команде (опет, без размака) да бисте је поновили.

Да бисте поновили 13. претходну команду, откуцали бисте следеће:

!-13

Ан

Претраживање команди према низу

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

На пример, да бисте поновили последњу команду која је почела са судо, откуцали бисте ову команду:

!sudo

Ан

Ипак, у овоме постоји елемент опасности. Ако последња команда која је започела са судо није она за коју мислите да јесте, покренућете погрешну команду.

Међутим, да бисте обезбедили сигурносну мрежу, можете користити модификатор :п (штампање), као што је приказано у наставку:

!sudo:p

Ан

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

Ако желите да пронађете команду која садржи одређени стринг, можете користити узвичник и упитник.

На пример, да бисте пронашли и извршили прву одговарајућу команду која садржи реч „алиасес“, укуцали бисте ову команду:

!?aliases

Ан

Ово ће пронаћи било коју команду која садржи стринг „алиасес“, без обзира на то где се појављује у стрингу.

Интерактивна претрага

Интерактивна претрага вам омогућава да скачете кроз листу одговарајућих команди и поновите ону коју желите.

Само притисните Цтрл+р да започнете претрагу.

Прозор терминала после

Док куцате траг за претрагу, појавиће се прва одговарајућа команда. Слова која унесете појављују се између позадине (`) и апострофа (‘). Команде које се подударају се ажурирају док куцате свако слово.

А

Сваки пут када притиснете Цтрл+р, претражујете уназад за следећу одговарајућу команду, која се појављује у прозору терминала.

А

Када притиснете Ентер, приказана команда ће се извршити.

Тхе

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

А

Команда се појављује на командној линији и можете је уређивати.

Можете користити друге Линук алате за претраживање листе историје. На пример, за цевовод излаз из историје у греп и потражите команде које садрже стринг „алиасес“ можете користити ову команду:

history | grep aliases

Тхе

Измена последње команде

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

Да бисте га користили, откуцајте (без размака) знак за уметање, текст који желите да замените, други курсор, текст којим желите да га замените, други знак за уметање, а затим притисните Ентер.

На пример, претпоставимо да откуцате следећу команду, случајно укуцајући „сххд“ уместо „ссхд“:

sudo systemctl start shhd

Ово можете лако да исправите тако што ћете откуцати следеће:

^shhd^sshd^

А

Команда се извршава са „сххд“ исправљеним у „ссхд“.

Брисање команди са листе историје

Такође можете избрисати команде са листе историје помоћу опције -д (избриши). Нема разлога да задржите своју погрешно написану команду на листи историје.

  Када ће Дисцовери Плус бити доступан на ПС4?

Можете користити греп да га пронађете, проследите његов број историји са опцијом -д да бисте га избрисали, а затим претражите поново да бисте били сигурни да је нестао:

history | grep shhd
history -d 83
history | grep shhd

Тхе

Такође можете проследити низ команди опцији -д. Да бисте избрисали све уносе листе од 22 до 32 (укључиво), откуцајте ову команду:

history -d 22 32

Да бисте избрисали само последњих пет команди, можете унети негативан број, на пример:

history -d -5

Ручно ажурирање датотеке историје

Када се пријавите или отворите сесију терминала, листа историје се чита из датотеке историје. У Басху, подразумевана датотека историје је .басх_хистори.

Све промене које направите у тренутној сесији прозора терминала се уписују у датотеку историје само када затворите прозор терминала или се одјавите.

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

Да бисте га користили, откуцајте следеће:

history -a

Тхе

Команде се тихо пишу у датотеку историје.

Ако желите да запишете све промене на листи историје у датотеку историје (ако сте избрисали неке старе команде, на пример), можете користити опцију -в (писање), на пример:

history -w

Тхе

Брисање листе историје

Да бисте обрисали све команде са листе историје, можете користити опцију -ц (обриши), на следећи начин:

history -c

Ако додатно желите да наметнете ове промене у датотеци историје, користите опцију -в, на пример:

history -w

Безбедност и датотека историје

Ако користите било коју апликацију која захтева да унесете осетљиве информације (попут лозинки) у командну линију, запамтите да ће то такође бити сачувано у датотеци историје. Ако не желите да се одређене информације сачувају, можете користити следећу структуру команди да их одмах избришете са листе историје:

special-app my-secret-password;history -d $(history 1)
history 5

А

Ова структура укључује две команде одвојене тачком и зарезом (;). Хајде да разложимо ово:

специал-апп: Назив програма који користимо.
ми-сецрет-пассворд: Тајна лозинка коју треба да обезбедимо за апликацију на командној линији. Ово је крај прве команде.
историја -д: У команди два, позивамо -д (избриши) опцију историје. Оно што ћемо избрисати налази се у следећем делу команде.
$(историја 1): Ово користи замену команде. Део команде садржан у $() се извршава у подљусци. Резултат тог извршења се објављује као текст у оригиналној команди. Команда хистори 1 враћа претходну команду. Дакле, о другој команди можете размишљати као о историји -д „последња команда овде“.

Можете користити команду хистори 5 да бисте били сигурни да је команда која садржи лозинку уклоњена са листе историје.

Ипак, постоји још једноставнији начин да се то уради. Пошто Басх игнорише редове који подразумевано почињу размаком, само укључите размак на почетку реда, на следећи начин:

 special-app another-password
history 5

А

Команда са лозинком није додата на листу историје. Разлог због којег овај трик функционише налази се у .басхрц датотеци.

  Како да поправите Оутлоок претрагу која не ради

Датотека .басхрц

Датотека .басхрц се извршава сваки пут када се пријавите или отворите прозор терминала. Такође садржи неке вредности које контролишу понашање команде историје. Хајде да уредимо ову датотеку помоћу гедит-а.

Откуцајте следеће:

gedit .bashrc

Тхе

При врху датотеке видите два уноса:

ХИСТСИЗЕ: Максималан број уноса који листа историје може да садржи.
ХИСТФИЛЕСИЗЕ: Ограничење броја линија које датотека историје може да садржи.

Ове две вредности међусобно делују на следеће начине:

Када се пријавите или покренете сесију прозора терминала, листа историје се попуњава из датотеке .басх_хистори.
Када затворите прозор терминала, максимални број команди постављен у ХИСТСИЗЕ се чува у датотеци .басх_хистори.
Ако је опција љуске хистаппенд омогућена, команде се додају у .басх_хистори. Ако хистаппенд није подешен, .басх_хистори се преписује.
Након што сачувате команде са листе историје у .басх_хистори, датотека историје се скраћује да не садржи више од ХИСТФИЛЕСИЗЕ редова.

Такође при врху датотеке видите унос за вредност ХИСТЦОНТРОЛ.

Тхе

Ову вредност можете подесити да уради било шта од следећег:

игнореспацес: Линије које почињу размаком се не додају на листу историје.
игноредупс: Дупликати команди се не додају у датотеку историје.
игнореботх: Омогућава оба горенаведена.

Такође можете да наведете одређене команде које не желите да додате на листу историје. Одвојите их двотачком (:) и ставите их под наводнике (“…”).

Пратили бисте ову структуру да бисте додали линију вашој .басхрц датотеци и заменили команде које желите да игноришете:

export HISTIGNORE="ls:history"

Ан

Коришћење временских ознака

Ако желите да додате временске ознаке на листу историје, можете користити поставку ХИСТИМЕФОРМАТ. Да бисте то урадили, само додајте линију попут следеће у вашу .басхрц датотеку:

export HISTTIMEFORMAT="%c "

Имајте на уму да постоји размак испред завршних наводника. Ово спречава да временска ознака дође до команди на листи команди.

Ан

Сада, када покренете команду историје, видите датумске и временске ознаке. Имајте на уму да ће све команде које су биле на листи историје пре него што сте додали временске ознаке бити означене са датумом и временом прве команде која прими временску ознаку. У овом примеру приказаном испод, ово је била команда 118.

То је веома дуготрајна временска ознака. Међутим, можете користити друге токене осим %ц да га прецизирате. Други токени које можете користити су:

%д: Дан
%м: Месец
%и: Година
%Х: Сат
%М: Минуте
%С: Секунде
%Ф: Пун датум (формат година-месец-датум)
%Т: Време (формат сати:минути:секунде)
%ц: Комплетан датум и временска ознака (формати дан-датум-месец-година и сат:минуте:секунде)

Хајде да експериментишемо и користимо неколико различитих токена:

export HISTTIMEFORMAT="%d n%m %T "

Извоз ХИСТТИМЕФОРМАТ=

Излаз користи дан, месец и време.

Међутим, ако уклонимо дан и месец, то ће само показати време.

Све промене које унесете у ХИСТИМЕФОРМАТ примењују се на целу листу историје. Ово је могуће јер се време за сваку команду чува као број секунди из Уник епохе. Директива ХИСТТИМЕФОРМАТ једноставно специфицира формат који се користи за приказивање тог броја секунди у стилу читљив за људе, као што је:

export HISTTIMEFORMAT="%T "

Тхе

Наш резултат је сада лакши за управљање.

Такође можете користити команду историје за ревизију. Понекад вам преглед команди које сте користили у прошлости може помоћи да идентификујете шта је могло да изазове проблем.

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