Beehaw
  • Communities
  • Create Post
  • search
    Search
  • Login
  • Sign Up
 petsoi   ( @petsoi@discuss.tchncs.de )  to Linux@lemmy.ml · 1 year ago

Effectively Use History Commands in Linux

itsfoss.com

external-link
message-square
32
link
fedilink
88
external-link

Effectively Use History Commands in Linux

itsfoss.com

 petsoi   ( @petsoi@discuss.tchncs.de )  to Linux@lemmy.ml · 1 year ago
message-square
32
link
fedilink
Master the history command and learn some interesting usage of the bash history feature in this tutorial.
alert-triangle
You must log in or # to comment.
  •  mlfh   ( @mlfh@lemmy.ml ) 
    link
    fedilink
    arrow-up
    18
    ·
    1 year ago

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

    •  dan   ( @dan@upvote.au ) 
      link
      fedilink
      arrow-up
      8
      ·
      1 year ago

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

      You can install fzf to make it fancier.

      •  Dessalines   ( @dessalines@lemmy.ml ) 
        link
        fedilink
        arrow-up
        1
        ·
        1 year ago

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

  •  aeno   ( @aeno@discuss.tchncs.de ) 
    link
    fedilink
    arrow-up
    12
    ·
    1 year ago

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

    •  The Doctor   ( @drwho@beehaw.org ) 
      link
      fedilink
      English
      arrow-up
      3
      ·
      1 year ago

      curl | sh…

      •  aeno   ( @aeno@discuss.tchncs.de ) 
        link
        fedilink
        arrow-up
        8
        ·
        1 year ago

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

  •  mbw   ( @mbw@lemmy.ml ) 
    link
    fedilink
    arrow-up
    7
    ·
    1 year ago

    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)"
    
  •  some_guy   ( @some_guy@lemmy.sdf.org ) 
    link
    fedilink
    arrow-up
    6
    ·
    1 year ago

    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.

    •  Will   ( @wlfrn@lemmy.ml ) 
      link
      fedilink
      English
      arrow-up
      4
      ·
      1 year ago

      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

  •  smeg   ( @smeg@feddit.uk ) 
    link
    fedilink
    English
    arrow-up
    5
    ·
    1 year ago

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

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

    •  bionicjoey   ( @bionicjoey@lemmy.ca ) 
      link
      fedilink
      arrow-up
      5
      ·
      1 year ago

      Alt+. can scroll up through the last few commands

    •  sping   ( @sping@lemmy.sdf.org ) 
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

      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   ( @smeg@feddit.uk ) 
        link
        fedilink
        English
        arrow-up
        1
        ·
        1 year ago

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

        •  sping   ( @sping@lemmy.sdf.org ) 
          link
          fedilink
          English
          arrow-up
          2
          ·
          edit-2
          1 year ago

          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   ( @smeg@feddit.uk ) 
            link
            fedilink
            English
            arrow-up
            1
            ·
            1 year ago

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

  •  UnrefinedChihuahua   ( @UnrefinedChihuahua@lemmy.dbzer0.com ) 
    link
    fedilink
    arrow-up
    4
    ·
    1 year ago

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

  •  urquell   ( @urquell@lemm.ee ) 
    link
    fedilink
    arrow-up
    3
    ·
    1 year ago

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

    •  smeg   ( @smeg@feddit.uk ) 
      link
      fedilink
      English
      arrow-up
      2
      ·
      1 year ago

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

      •  urquell   ( @urquell@lemm.ee ) 
        link
        fedilink
        arrow-up
        2
        ·
        1 year ago

        Yep, found it :)

  •  fmstrat   ( @fmstrat@lemmy.nowsci.com ) 
    link
    fedilink
    English
    arrow-up
    3
    ·
    1 year ago

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

    •  GlenRambo   ( @GlenRambo@jlai.lu ) 
      link
      fedilink
      arrow-up
      2
      ·
      1 year ago

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

      •  fmstrat   ( @fmstrat@lemmy.nowsci.com ) 
        link
        fedilink
        English
        arrow-up
        2
        ·
        1 year ago

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

  •  Will   ( @wlfrn@lemmy.ml ) 
    link
    fedilink
    English
    arrow-up
    2
    ·
    1 year ago

    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

  •  Markus   ( @markus@hubzilla.markusgarlichs.de ) 
    link
    fedilink
    arrow-up
    2
    ·
    1 year ago

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

  •  GlenRambo   ( @GlenRambo@jlai.lu ) 
    link
    fedilink
    arrow-up
    2
    ·
    1 year ago

    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.

    •  petsoi   ( @petsoi@discuss.tchncs.de ) OP
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

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

      https://www.humblebundle.com/books/linux-for-seasoned-admins-oreilly-books

    •  lemonuri   ( @lemonuri@lemmy.ml ) 
      link
      fedilink
      arrow-up
      1
      ·
      1 year ago

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

      https://linuxblog.io/90-linux-commands-frequently-used-by-linux-sysadmins/

  •  obsolete   ( @obsolete@lemmy.dbzer0.com ) 
    link
    fedilink
    English
    arrow-up
    1
    ·
    1 year ago

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

  •  lattrommi   ( @lattrommi@lemmy.ml ) 
    link
    fedilink
    中文
    arrow-up
    1
    ·
    1 year ago

    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.

    •  petsoi   ( @petsoi@discuss.tchncs.de ) OP
      link
      fedilink
      arrow-up
      2
      ·
      edit-2
      1 year ago

      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   ( @lattrommi@lemmy.ml ) 
        link
        fedilink
        中文
        arrow-up
        2
        ·
        1 year ago

        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   ( @petsoi@discuss.tchncs.de ) OP
          link
          fedilink
          arrow-up
          1
          ·
          1 year ago

          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.

Linux@lemmy.ml

linux@lemmy.ml

Subscribe from Remote Instance

Create a post
You are not logged in. However you can subscribe from another Fediverse account, for example Lemmy or Mastodon. To do this, paste the following into the search field of your instance: !linux@lemmy.ml

From Wikipedia, the free encyclopedia

Linux is a family of open source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991 by Linus Torvalds. Linux is typically packaged in a Linux distribution (or distro for short).

Distributions include the Linux kernel and supporting system software and libraries, many of which are provided by the GNU Project. Many Linux distributions use the word “Linux” in their name, but the Free Software Foundation uses the name GNU/Linux to emphasize the importance of GNU software, causing some controversy.

Rules

  • Posts must be relevant to operating systems running the Linux kernel. GNU/Linux or otherwise.
  • No misinformation
  • No NSFW content
  • No hate speech, bigotry, etc

Related Communities

  • !opensource@lemmy.ml
  • !libre_culture@lemmy.ml
  • !technology@lemmy.ml
  • !libre_hardware@lemmy.ml

Community icon by Alpár-Etele Méder, licensed under CC BY 3.0

Visibility: Public
globe

This community can be federated to other instances and be posted/commented in by their users.

  • 356 users / day
  • 961 users / week
  • 2.41K users / month
  • 7.11K users / 6 months
  • 1.3K local subscribers
  • 60.7K subscribers
  • 7.34K Posts
  • 97.4K Comments
  • Modlog
  • mods:
  •  AgreeableLandscape   ( @AgreeableLandscape@lemmy.ml ) 
  •  nooter692   ( @nooter692@lemmy.ml ) 
  •  MarcellusDrum   ( @MarcellusDrum@lemmy.ml ) 
  •  Arthur Besse   ( @cypherpunks@lemmy.ml ) 
  •  Cyclohexane   ( @cyclohexane@lemmy.ml ) 
  •  d3Xt3r   ( @d3Xt3r@lemmy.nz ) 
  • BE: 0.19.13
  • Modlog
  • Legal
  • Instances
  • Docs
  • Code