Comandes i ampliacions de l'historial de Bash

Comandes I Ampliacions De L Historial De Bash



En aquesta guia, demostrarem com treballar amb les ordres de l'historial de Bash.

Requisits previs:

Per dur a terme els passos que es mostren en aquest tutorial, necessiteu els components següents:

  • Un sistema Linux configurat correctament. Fes una ullada com configurar una màquina virtual d'Ubuntu a VirtualBox .
  • Familiaritat bàsica amb la interfície de línia d'ordres.

Història de Bash

Bash és l'intèrpret d'ordres predeterminat a la majoria dels sistemes Linux moderns. Com a successor de 'sh', l'intèrpret d'ordres original d'UNIX, inclou nombroses funcions i millores com la manipulació de directoris, el control de treballs, els àlies, l'historial d'ordres i molt més.







Bash fa un seguiment de totes les ordres que es van executar prèviament des del terminal. Això pot ser increïblement útil en nombroses situacions com ara la depuració. També pot reduir la necessitat d'escriure les mateixes ordres o similars una i altra vegada.



Per a la gestió de l'historial, Bash inclou dues ordres integrades:



$ tipus història





$ tipus fc

Per emmagatzemar l'historial, Bash utilitza dues tècniques diferents:



  • Sempre que es treballa amb una sessió de shell, el seu historial s'emmagatzema a la memòria.
  • Quan es tanca, l'historial que s'emmagatzema a la memòria s'aboca a un fitxer d'historial.

El fitxer d'historial predeterminat que utilitza Bash es troba a:

$ gat ~ / .bash_history

També hi ha un grapat de variables d'entorn i dreceres de teclat que canvien la manera com Bash gestiona l'historial.

Treballant amb Bash History

Ús bàsic

Per obtenir la llista d'ordres que s'han executat recentment, utilitzeu l'ordre següent:

$ història

Aquí s'enumeren totes les ordres emmagatzemades a la memòria intermèdia. Cada comanda té assignat un valor numèric. L'ordre més antiga s'assigna amb 1.

Podem limitar el nombre d'ordres per imprimir mitjançant l'ordre següent:

$ història N

Aquí, N és un nombre enter on N >= 0. La sortida conté les últimes N ordres de l'historial.

També podem utilitzar la sortida en tàndem amb grep per filtrar:

$ història | agafar < corda >

Per navegar per un llarg historial, podem utilitzar l'ordre 'less':

$ història | menys

Eliminació d'ordres de l'historial

Si necessiteu eliminar una ordre específica de l'historial, utilitzeu les ordres següents:

$ història

$ història -d < número_ordre >

$ història

De la mateixa manera, per eliminar les ordres de M a N de l'historial, podem utilitzar les ordres següents:

$ història

$ història -d M-N

$ història

Per esborrar l'historial de la memòria intermèdia RAM per a la sessió de terminal actual, utilitzeu les ordres següents:

$ història -c

$ història

Per esborrar l'historial del fitxer d'historial que s'emmagatzema al disc, el podem sobreescriure completament amb NULL:

$ gat / dev / nul > $HISTFILE

Configuració de l'historial de Bash

Hi ha diverses maneres d'ajustar com Bash gestiona la història. Moltes d'aquestes opcions estan gestionades per variables d'entorn.

Per canviar-ne el valor, editem el fitxer 'bashrc':

$ nano ~ / .bashrc

Després d'editar, deseu el fitxer i torneu-lo a carregar a Bash.

$ font ~ / .bashrc

Per fer els canvis a tot el sistema, editeu el 'bashrc' que es troba a les ubicacions següents:

$ nano / etc / bash.bashrc

$ nano / etc / bashrc

Mida del buffer

Com s'ha esmentat anteriorment, Bash utilitza dos buffers per emmagatzemar l'historial d'ordres a la memòria RAM (per a la sessió actual) i en un fitxer de disc (per a totes les sessions anteriors).

Les mides d'aquests buffers estan controlades per dues variables d'entorn:

  • HISTISZE : Defineix el nombre d'entrades a emmagatzemar a la memòria intermèdia RAM.
  • HISTFILESISE : Defineix el nombre d'entrades a emmagatzemar al fitxer de disc.

Podem canviar el seu valor al 'bashrc' per adaptar-se a les nostres necessitats:

$ nano ~ / .bashrc

Per exemple, per emmagatzemar 5.000 entrades als dos buffers, actualitzeu 'bashrc' amb el codi següent:

$ HISTISZE = 5000

$ HISTFILESISE = 5000

Exclusió d'ordres

Per defecte, Bash emmagatzema cada comanda executada als buffers de l'historial. Tanmateix, podem configurar-lo perquè Bash ignori determinades ordres. Pot ser útil en situacions en què heu d'executar les mateixes ordres moltes vegades, omplint la memòria intermèdia amb correu brossa.

  • HISTCONTROL

Comencem amb l'exemple d'ordre següent:

$ eco 'monjo' && història 5

$ eco 'bonk' && història 5

Com demostra la sortida de l'ordre history, només es registra la primera ordre d'eco, però no la segona.

Aquest és el funcionament de la variable d'entorn HISTIGNORE. Li diu a Bash que no registri les ordres a la memòria intermèdia d'historial en funció de certs patrons. Els valors següents estan disponibles:

  • ignorats : no es registra si una ordre coincideix amb l'entrada de l'historial anterior.
  • ignorespai : No es registrarà si una ordre comença amb un espai al principi.
  • ignorar tots dos : aplica la regla d'ignorats i ignorespace.
  • esborrats : totes les línies anteriors que coincideixen amb l'ordre actual s'esborraran de l'historial.

En el primer exemple, vam demostrar l'ús de ignorespace. Tanmateix, no totes les distribucions poden enviar Bash amb aquesta configuració. Com sempre, els podem afegir a 'bashrc':

$ HISTCONTROL = ignorar tots dos

També és possible habilitar diverses opcions mitjançant l'ordre següent:

$ HISTCONTROL =ignoredups:ignorespai

Aquí, ignoredups:ignorespace és l'equivalent a ignoreboth.

  • HISTIGNORE

Aquesta variable d'entorn pot contenir un o més patrons. Qualsevol ordre que coincideixi amb qualsevol patró descrit per HISTIGNORE no es registrarà a cap memòria intermèdia d'historial. Els patrons es defineixen mitjançant les expressions regulars.

L'estructura és la següent:

$ HISTIGNORE = '' : '' : ''

Per exemple, per excloure l'historial i les ordres d'eco de l'historial de Bash, actualitzeu HISTIGNORE de la següent manera:

$ HISTIGNORE = 'història' : 'eco *'

Podem utilitzar la següent cadena d'ordres per provar-ho:

$ ls -l / era / lob &> / dev / nul

$ història

$ eco Hola món

$ història

Marca de temps

Bash també es pot configurar per registrar l'hora en què s'ha executat una ordre. Pot ser útil en diverses situacions com ara la depuració.

Per activar les marques de temps a l'historial de Bash, actualitzeu el valor de HISTTIMEFORMAT:

$ HIST FORMAT HORA = ''

Tots els caràcters de control de format d'hora disponibles estan disponibles a la pàgina man de l'ordre de data.

$ home data

La llista següent inclou algunes de senzilles:

  • %T: Temps
  • %d: Dia
  • %m: mes
  • %y: Year
$ HIST FORMAT HORA = '%T %d:'

Persistència històrica

Quan treballeu amb la CLI, en molts casos, us trobareu treballant amb diversos terminals. Aquí és on la gestió de la història de Bash pot esdevenir una font de dolor.

Per defecte, el fitxer d'historial s'actualitza un cop es tanca la sessió. Tot i que està bé per a una sola sessió, no és adequat per a diverses sessions simultànies. Podem resoldre aquest problema forçant Bash a actualitzar el fitxer d'historial cada vegada que s'executa una ordre.

Per fer-ho, actualitzeu el valor de PROMPT_COMMAND:

$ PROMPT_COMMAND = 'història -a'

Aquí, la variable PROMPT_COMMAND pot contenir ordres vàlides. El contingut de PROMPT_COMMAND s'executa abans que Bash comenci a rebre l'entrada de l'usuari. L'ordre 'historial -a' obliga l'historial a afegir el contingut al fitxer d'historial.

Expansió històrica i designadors

Bash inclou un parell de dreceres integrades per aprofitar la seva funció d'historial. Aquí teniu la llista dels designats:

  • !! : executa l'última ordre de l'historial.
  • !N : executa l'ordre enèsimo de l'historial.
  • !-N : executa l'ordre enèsimo abans de l'ordre més recent de l'historial.
  • ! : executa l'ordre més recent.

La següent cadena d'ordres demostra el seu ús:

$ eco 1

$ eco 2

$ eco 3

$ història

$ ! eco

$ ! - 3

$ ! 1

$ !!

Alguns designadors també treballen amb els arguments de l'ordre de l'historial:

  • !:* : Utilitzeu tots els arguments de l'ordre més recent.
  • !:^ : Utilitzeu el primer argument de l'ordre més recent.
  • !:N : Utilitzeu l'argument N de l'ordre més recent.
  • !:M-N : Utilitzeu els arguments de M a N de l'ordre més recent.
  • !:$ : Utilitzeu l'últim argument de l'ordre més recent.

La següent cadena d'ordres demostra el seu ús:

$ eco 1 2 3 4 5 6 7

$ eco ! : *

$ eco 1 2 3 4 5 6 7

$ eco ! :^

$ eco 1 2 3 4 5 6 7

$ eco ! : 5

$ eco 1 2 3 4 5 6 7

$ eco ! : 1 - 5

$ eco 1 2 3 4 5 6 7

$ eco ! :$

Si necessiteu treballar amb els paràmetres d'una ordre diferent, els designadors es veuen així:

  • !^ : Utilitza el primer argument de l'ordre .
  • !$ : Utilitza l'últim argument de l'ordre .

La següent cadena d'ordres mostra els seus usos:

$ ls -lh / era / registre &> / dev / nul

$ tocar 1 .txt 2 .txt 3 .txt 4 .txt 5 .txt

$ eco ! tocar ^

$ eco ! tocar $

Dreceres de teclat de l'historial

A més de totes les ordres i variables d'entorn, Bash també admet un grapat de dreceres de teclat per facilitar la navegació de l'historial:

  • Amunt Tecla de fletxa: desplaça't cap enrere
  • Avall Tecla de fletxa: desplaça't cap endavant

També hi ha dreceres de teclat disponibles per a una cerca interactiva de l'historial:

  • Ctrl + R : cerca ordres a l'historial.
  • Ctrl + O : executeu l'ordre seleccionada.
  • Ctrl + G : Surt de la cerca interactiva.

Conclusió

Hem parlat detalladament sobre la història de Bash. Hem après com Bash emmagatzema l'historial d'ordres i com aprofitar-lo de diferents maneres. Hem demostrat com treballar amb l'historial de Bash utilitzant diversos exemples.

T'interessa saber més sobre Bash? El Subcategoria de programació Bash conté centenars de guies sobre diferents funcions de Bash.

Feliç informàtica!