Effectively Use History Commands in Linux (itsfoss.com)
from petsoi@discuss.tchncs.de to linux@lemmy.ml on 23 Jul 2024 13:56
https://discuss.tchncs.de/post/19310742

#linux

threaded - newest

mlfh@lemmy.ml on 23 Jul 2024 15:00 next collapse

Ctrl+r was a life-changer when I first learned it.

dan@upvote.au on 23 Jul 2024 17:02 collapse

I think it’s the only shell shortcut I know haha

You can install fzf to make it fancier.

dessalines@lemmy.ml on 25 Jul 2024 12:46 collapse

Same. For anyone using fish shell, this plugin is super-handy: github.com/PatrickF1/fzf.fish

xlash123@sh.itjust.works on 23 Jul 2024 15:00 next collapse

I’ve been using McFly to do my history searching. It’s pretty good. I recommend changing the default sort from rank to time though

kionite231@lemmy.ca on 23 Jul 2024 18:00 collapse

I wonder what “neural networks” they are using in it and how is it improving the accuracy

xlash123@sh.itjust.works on 23 Jul 2024 18:27 collapse

No idea. I personally didn’t like it. I felt the time based sorting was more accurate for me

aeno@discuss.tchncs.de on 23 Jul 2024 15:30 next collapse

Shout out to the very fine Atuin.sh. Give it a try, you won’t regret it.

drwho@beehaw.org on 23 Jul 2024 16:44 collapse

curl | sh…

aeno@discuss.tchncs.de on 23 Jul 2024 17:30 collapse

Yep, I don’t like these “recommended” methods, too. Fortunately, you can just use your favourite package manager instead: docs.atuin.sh/guide/installation/#manual-installa…

UnrefinedChihuahua@lemmy.dbzer0.com on 23 Jul 2024 15:51 next collapse

New to Linux as my daily driver. This is life changing. I was up/down arrowing like a madman!

mbw@lemmy.ml on 23 Jul 2024 16:28 next collapse

If you have fzf installed, it is easy to integrate it with your bash history. In my .bashrc, I have:

# Introduce fzf-driven functionality as described here: https://wiki.archlinux.org/title/fzf.
source /usr/share/fzf/key-bindings.bash
source /usr/share/fzf/completion.bash

Also, you may be interested in zoxide, which keeps track of paths you have navigated to. Also from my .bashrc:

# Enable an autojump-like 'j' command. Use 'ji M' to select paths starting with M using fzf.
# This needs to always come last.
eval "$(zoxide init --cmd j bash)"
redbr64@lemmy.world on 23 Jul 2024 17:28 collapse

I just started using both recently and it’s great. For the fzf file search, there’s even some extension that can show a preview pane of text files and even images!

markus@hubzilla.markusgarlichs.de on 23 Jul 2024 17:03 next collapse

I'm using hstr since some years and it works perfect for me. https://github.com/dvorka/hstr

urquell@lemm.ee on 23 Jul 2024 19:46 next collapse

Am I blind or is ctrl+R not in that document?

smeg@feddit.uk on 23 Jul 2024 20:42 collapse

I think you are blind (or maybe your version of the website is being truncated?)

urquell@lemm.ee on 23 Jul 2024 21:05 collapse

Yep, found it :)

smeg@feddit.uk on 23 Jul 2024 20:43 next collapse

To use the last argument of the last ran command, use the Alt+. keys.

Sounds like a poor-man’s !$ to me!

toynbee@lemmy.world on 23 Jul 2024 23:56 next collapse

$_ also works. I love Alt+. but sadly it doesn’t work on any Mac terminal emulator I’ve found and, even more sadly, I am forced to use a Mac at work.

I haven’t tried !$ so I’m not familiar with its function, but one nice thing about Alt+. is that you’re not limited to the last argument of the most recent command; instead, it allows you to scroll backwards like Ctrl+R.

bionicjoey@lemmy.ca on 24 Jul 2024 10:32 next collapse

Alt+. can scroll up through the last few commands

sping@lemmy.sdf.org on 24 Jul 2024 14:15 collapse

Fewer keystrokes, more features, and the ability to see what you’re about to do explicitly. How does that make it the poor man’s option?

smeg@feddit.uk on 24 Jul 2024 20:55 collapse

Seems like it’s terminal-emulator-specific rather than a built-in shell feature

sping@lemmy.sdf.org on 25 Jul 2024 11:45 collapse

No, it’s a shell feature. Terminal emulators don’t even know what shell are running typically, and I haven’t heard of them adding shell features. That would require the terminal emulator knowing you’re using bash, knowing how to interrogate history etc…

From man bash:

       yank-last-arg (M-., M-_)
              Insert  the last argument to the previous command (the last word
              of the previous history entry).  With a numeric argument, behave
              exactly  like  yank-nth-arg.   Successive calls to yank-last-arg
              move back through the history list, inserting the last word  (or
              the  word  specified  by the argument to the first call) of each
              line in turn.  Any numeric argument supplied to these successive
              calls  determines  the direction to move through the history.  A
              negative argument switches the  direction  through  the  history
              (back or forward).  The history expansion facilities are used to
              extract the last word, as if the "!$" history expansion had been
              specified.
smeg@feddit.uk on 25 Jul 2024 13:11 collapse

Neat! Other replies saying it doesn’t work on their machine, I’ll have to try it out in a few different environments.

lattrommi@lemmy.ml on 23 Jul 2024 23:00 next collapse

is there a way to save commands from history? i tried to figure this out when i was starting to use linux regularly, to help learn commands and to make a reference for myself as to what the commands do. i’m familiar with things like man, info, tldr and others but i wanted to put things in my own words since i remember better that way.

what i’m wanting but can’t seem to automate: -save commands from bash history to a file with only the command and arguments used, no line numbers or time stamps. -filenames can be kept, but if filenames are removable easily, that would be better. -file saved in should have the list sorted with any duplicates removed and happen after any terminal session ends. -i’ve read about changing the prompt but not done it correctly and not sure if possible or the safest way. -i’ve tried using .bash_logout but it doesn’t seem to do anything and i’m not sure why.

this isn’t too important anymore, as i’ve grown more comfortable with linux and bash but it bugs me that i never got it to work. i can copy and paste more detailed notes of what i tried but i’d need to redact a bunch of cursing and frustrated whining.

[deleted] on 24 Jul 2024 18:45 next collapse

.

petsoi@discuss.tchncs.de on 24 Jul 2024 18:45 collapse

You mean sth like cat <(history | cut -c 8-) history.txt | sort | uniq > history.txt? Not sure if it possible to remove the file names.

It should probably work to put it in .bash_logout.

lattrommi@lemmy.ml on 25 Jul 2024 19:24 collapse

yeah that looks exactly like what i wanted, thanks! i probably should have asked my question a couple years ago but i was still very new to linux and didn’t quite know the lingo. i’m still not quite sure how < works in general but i get the pipe and other redirects at least.

putting it in .bash_logout doesn’t always work. something involving login shells i don’t quite understand yet but i’ll read more about it. i saw mention of putting exit_session() { . “$HOME/.bash_logout” } trap exit_session SIGHUP in .bashrc to make it always work but i also don’t understand trap yet either so i’ll look into that too.

thanks again, your reply helped point me in the right direction of things i want to learn!

petsoi@discuss.tchncs.de on 26 Jul 2024 04:33 collapse

when calling cat <(echo data from the stdin stream) from_file.txt, you get the data in the first argument from a stream. With the .bash_logout I do not have much experience yet.

fmstrat@lemmy.nowsci.com on 24 Jul 2024 11:23 next collapse

Why date time isn’t turned on by default I’ll never know.

GlenRambo@jlai.lu on 24 Jul 2024 12:25 collapse

Can you explain more? I’m getting into Linux and ops post has been a game changer.

fmstrat@lemmy.nowsci.com on 24 Jul 2024 15:28 collapse

This will do a far better job than I: ostechnix.com/how-to-enable-timestamp-in-bash-his…

GlenRambo@jlai.lu on 24 Jul 2024 12:30 next collapse

As a noob where do I find more handy tips like this? Alone with handy/popular apps?

Almost every windows app I had was on Linux (most were FOSS already) but I know there will be some unique or interesting ones.

For example in android there is Obtanium now to update apps direct from git, or the many was to use YT without ads.

lemonuri@lemmy.ml on 24 Jul 2024 19:17 next collapse

This is not bad for a start (common commands):

linuxblog.io/90-linux-commands-frequently-used-by…

petsoi@discuss.tchncs.de on 24 Jul 2024 19:23 collapse

Depending how deep you want to dive into Linux, there is a great ebooks collection available:

humblebundle.com/…/linux-for-seasoned-admins-orei…

some_guy@lemmy.sdf.org on 24 Jul 2024 16:10 next collapse

Here’s something I use to search history for commands or keywords. I have this as a function in my profile:

function hgr() {
    history | grep "$1"
}

history grep

Usage: hgr git to search for commands containing git.

Someone more knowledgeable may be able to point out ways to improve this.

wlfrn@lemmy.ml on 24 Jul 2024 19:38 collapse

you can get a lot of the way there with Control+R reverse history search (mentioned in the article) – and it’s interactive. With fzf you can even get fuzzy history searching (the first search result has a video). atuin puts history into a proper db, optional syncs across hosts, and, like fzf, enhances control+r

wlfrn@lemmy.ml on 24 Jul 2024 19:47 next collapse

I have a bash function in fuzzy_arg that I bind to Alt-a to uses fzf for interactively inserting arguments from previous commands. It’s Ctrl-r for Alt-. – I’ve found it super useful for essentially inserting partial commands (single arguments) from the history

obsolete@lemmy.dbzer0.com on 25 Jul 2024 13:32 next collapse

I always use reverse search. But, it is always good to learn something new.

ikidd@lemmy.world on 26 Jul 2024 00:46 collapse

github.com/atuinsh/atuin