82

Where can (should) I put my (bash) script so that it can be used (forever) by terminal or by a direct command: Alt+F2?

I know there is /usr/bin and /sbin & /bindirectories but when should I use between them?

Where should I put my script?

1
  • 7
    Please read this, and this questions to understand all about this directories
    – c0rp
    May 13, 2014 at 4:57

3 Answers 3

103

It depends on who will use your script:

That way you have your own scripts separated from the distribution-provided binaries.

9
  • Traditionally, the .../sbin directories are used for statically-linked binaries (mostly used by root, before shared libraries are available), not user scripts.
    – waltinator
    May 13, 2014 at 12:12
  • 2
    That only applies to /sbin, not /usr/sbin or /usr/local/sbin. The Filesystem Hierarchy Standard states that "Locally installed system administration programs should be placed in /usr/local/sbin." [link].
    – Twinkles
    May 13, 2014 at 12:45
  • 1
    This is all true, but the sbin directories are being phased out and there really is no reason to separate them. For more on that, see here.
    – terdon
    May 13, 2014 at 14:19
  • 1
    I see a discussion about phasing them out, and while the arguments are compelling, the current recommendation is the one I quoted above.
    – Twinkles
    May 13, 2014 at 14:49
  • 1
    @Twinkles Is there any reason against putting user scripts in ~/.local/bin? (which is already in the PATH in a couple distributions)
    – Joschua
    May 31, 2019 at 21:59
77

Don't use these directories:

/usr/bin, /sbin and /bin

Leave them for package-managed executables.


If you need the script for one user, waltinator's answer is fine.

If you need the script for all users on your system (but you can also use this for one user), stick it in /usr/local/bin/. One advantage: this directory is already in your PATH so there is no need to edit files.

3
  • 1
    At least in my installation of Ubuntu 14.04, executables in /usr/local/bin are not available to cron jobs (run by the web user). However, programs in /usr/bin are.
    – juacala
    Feb 3, 2018 at 16:40
  • And how do I run my .sh file? Take a hello-world.sh file for example. Mar 10, 2020 at 12:42
  • 1
    @EnriqueBermúdez put #!/bin/sh at the first line, chmod it +x and put it in /usr/local/bin/. The extension is not needed. when you run it it will execute your script with /bin/sh. You can also put /bin/node there for a javascript file.
    – Antoni
    Jul 11, 2021 at 7:30
58

You should put your script under $HOME/bin. Follow below PATH to achieve this:

  1. Create a folder using mkdir $HOME/bin
  2. Then put your script in $HOME/bin

  3. Finally, add the following line under $HOME/.bashrc by editing with gedit $HOME/.bashrc

export PATH="$HOME/bin:$PATH"

When the system is looking for the command you typed, it will look in each directory of $PATH and execute the first match it finds.

11
  • 3
    I am not sure I understand. First put it in $HOME/bin, then create the directory? Also, scripts in $HOME/bin are found by default, no need to add it to $PATH. May 13, 2014 at 5:17
  • 8
    @JacobVlijm: It's "found by default" since it's added to $PATH in ~/.profile. ;) May 13, 2014 at 6:24
  • @GunnarHjalmarsson You are right, what I meant was: so you do'nt need to add it add it once more :) May 13, 2014 at 8:16
  • 3
    Adding $HOME/bin to the start of your path will make sure your scripts get seen before any elsewhere on the system. While this is convenient, it opens you up to all sorts of unexpected behaviors if one or more of your scripts has the same name as a command somewhere else in your path. This could potentially open security vulnerabilities as it it is much easier to gain access to a user account than one with elevated privileges. E.g. someone adding a script named ls to your bin directory that really runs an rm -rf * . Adding your $HOME/bin to the end of your path avoids most such problems.
    – Joe
    May 15, 2014 at 3:35
  • 1
    Just had the same question: ~/.local/bin is already in the PATH. Any reason against using it for personal scripts?
    – Joschua
    May 31, 2019 at 12:02

Not the answer you're looking for? Browse other questions tagged .