Utility til at søge i bash history

marlar
Antal: 2771
Tilmeldt:
05-12-2009
User is offline
Utility til at søge i bash history

Bash history er en af de fede ting i Linux. Jeg har sat min history size til uendelig, lige nu er der over 30000 linjer i den :-)

Det går sådan set fint nok med at søge med Ctrl-R osv, men jeg så engang en smart utility som giver en søgbar oversigt over bash history hvor man så kunne vælge den ønskede linje med pilene og kopiere den til kommandolinjen. Det er nyttigt hvis man ikke helt 100% ved hvad man kigger efter.

Det jeg gør lige nu er simpelthen at kigge i min .bash_history i sådanne tilfælde, men det nævnte værktøj var meget smart - desværre kan jeg slet ikke huske hvad det hed!

Nogen bud?


osjensen
osjensen's picture
Antal: 1123
Tilmeldt:
14-01-2007
User is offline
Måske https://github.com/dvo

Måske
https://github.com/dvorka/hstr

I 30000 linjer, må der være mange "gengangere".

Godt Nytår.


frogmaster
frogmaster's picture
Antal: 3107
Tilmeldt:
20-05-2010
User is offline

lbm
lbm's picture
Antal: 803
Tilmeldt:
14-06-2006
User is offline
Måske ikke helt det du

Måske ikke helt det du behøver, men du kan bruge history fra cli.

eks. history |grep minSuperKommando

Og så kan du køre en af history kommandoerne med !historyNUMBER, slette fra historien mm.


marlar
Antal: 2771
Tilmeldt:
05-12-2009
User is offline
Tak for buddene, jeg kigger

Tak for buddene, jeg kigger på dem.

#1: I 30000 linjer, må der være mange "gengangere".

Det er der også, men ikke så mange man skulle tro. Jeg passer og plejer nemlig min bash historie: Hvis jeg fx har rodet med at strikke den helt rigtige awk eller sed kommando sammen og har brugt en del forsøg på at få den til at sidde lige i skabet, så retter jeg bagefter min .bash_history og sletter de forkere forsøg. Så står kun den rigtige tilbage, hvilket som regel også er den sidste i historikken.

#3: Måske ikke helt det du behøver, men du kan bruge history fra cli.

Det gør jeg faktisk også (det skriver jeg til sidste i #0).

Jeg har lavet aliaset histgrep:

alias histgrep='history | grep -i'

Så kan jeg bare skrive fx histgrep minSuperKommando osv.


frogmaster
frogmaster's picture
Antal: 3107
Tilmeldt:
20-05-2010
User is offline
Hvis jeg fx har rodet

#4: Hvis jeg fx har rodet med at strikke den helt rigtige awk eller sed kommando sammen og har brugt en del forsøg på at få den til at sidde lige i skabet, så retter jeg bagefter min .bash_history og sletter de forkere forsøg. Så står kun den rigtige tilbage, hvilket som regel også er den sidste i historikken.

Du kunne jo kopiere dem, on the fly, og så gemme dem i tekst dokumenter. Det er i hvert fald sådan jeg gemmer mine. Det gør jeg fordi jeg langt fra altid sidder bag den samme maskine, og ikke engang samme OS. Det er iøvrigt derfor mine mest brugte programmer er gedit, xed, kate, nano, textedit, notepad m.f..

Når jeg eksempelvis skal bruge sådan en:

nmap -sn xxx.xxx.xxx.xxx/xx | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'

Eller forskellighederne fra Mint 17 til 18 henholdvis:

nmcli dev show | grep DNS | sed 's/\s\s*/\t/g' | cut -f 2 Ubuntu 16.04

nmcli dev list | grep DNS | sed 's/\s\s*/\t/g' | cut -f 2 Ubuntu 14.04

Som jeg ikke kan huske, så har jeg det parat på passende sted. Er det noget jeg ved jeg skal bruge jævnligt, så scripter jeg det, Eksempelvis:

#!/bin/bash
# Scan LAN Range

tput setaf 3
tput bold
echo
echo Scanning LAN using NMAP, NBTSCAN and ARP-SCAN
echo
tput setaf 1
echo You will need to manually change range within this script to work. See the internal IP below.
echo nmap, nbtscan, arp-scan and curl are needed to be installed.

# Check hostname
tput setaf 6
# tput bold
echo
echo -e '\E[32m'"Hostname :" $HOSTNAME

# Check Internal IP
internalip=$(hostname -I)
echo -e '\E[32m'"Internal IP :" $internalip
tput sgr0

# Check DNS
nameservers=$(cat /etc/resolv.conf | sed '1 d' | awk '{print $2}')
echo -e '\E[32m'"Name Servers :" $nameservers
tput setaf 6
tput bold
# This only work on Ubuntu 16.04. Please uncomment according to Your need.
nmcli dev show | grep DNS | sed 's/\s\s*/\t/g' | cut -f 2
# This only work om Ubuntu 14.04. Please uncomment according to Your need.
# nmcli dev list | grep DNS | sed 's/\s\s*/\t/g' | cut -f 2
echo
tput setaf 3
read -n1 -r -p "Press any key to continue..." key
echo

# Start nmap Host up
echo -e '\E[33m'"Starting nmap HOST UP ONLY piped to awk. Please wait ..."
tput sgr0
echo
# Change the range here:
nmap -sn 192.168.xxx.0/24 | awk '/is up/ {print up}; {gsub (/\(|\)/,""); up = $NF}'
echo

# Start nmap latency info
tput setaf 3
tput bold
read -n1 -r -p "For latency info, press any key to continue..." key
tput sgr0
echo

# Change the range here:
nmap -T5 -sn 192.168.xxx.0-255
echo

# Starting nbtscan
tput setaf 3
tput bold
read -n1 -r -p "Do You wanna scan using NBTSCAN, press any key to continue..." key
echo
echo Identifying Masterbrowser using nbtscan - MSBROWSE...
tput sgr0
echo

# Change the range here:
nbtscan -v -s : 192.168.xxx.0/24
echo

# Start arp-scan
tput bold
echo -e '\E[33m'"Do You wanna ARP-SCAN as root?".
echo This work without changing LAN range
tput setaf 1
echo
sudo arp-scan -l
tput sgr0
$SHELL