Linux home local bin

What is the purpose of $HOME/.local

I’ve noticed that I have $HOME/.local on my machine and seems that this directory contains mostly stuff related to python, here is it’s full list (it is a bit long). I would like to ask which action created this directory? I suppose it was pip install —user -r requirements.txt (bellow are commands by which I’ve figured it out) but I am wondering if there any other tools that stores data here? I suppose if it was pip so easy_install can do this as well or not? Are there any other tools you’re aware of that uses this directory or it is pip exclusively? Following command shows that some python module was imported from this directory, output of last one is here (it is a bit long):

marek@ubuntu:~$ python -c 'import mock; print mock.__file__' /home/marek/.local/lib/python2.7/site-packages/mock.pyc marek@ubuntu:~$ echo $PYTHONPATH marek@ubuntu:~$ tree .local/ | grep mock │ ├── mock-1.0.1.egg-info │ ├── mock.py │ ├── mock.pyc │ │ ├── mock.py │ │ ├── mock.pyc marek@ubuntu:~$ pip show -f mock --- Name: mock Version: 1.0.1 Location: /home/marek/.local/lib/python2.7/site-packages Requires: Files: Cannot locate installed-files.txt marek@ubuntu:~$ python -c 'import sys, pprint; pprint.pprint(sys.path)' ['', '/home/marek/.local/lib/python2.7/site-packages/nupic-0.3.0.dev0-py2.7-linux-x86_64.egg', '/usr/lib/python2.7/dist-packages', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-x86_64-linux-gnu', '/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/lib-dynload', '/home/marek/.local/lib/python2.7/site-packages', '/usr/local/lib/python2.7/dist-packages', '/usr/lib/python2.7/dist-packages/PILcompat', '/usr/lib/python2.7/dist-packages/gtk-2.0', '/usr/lib/pymodules/python2.7', '/usr/lib/python2.7/dist-packages/ubuntu-sso-client'] marek@ubuntu:~$ python -v 2>&1 | tee modules 

The following answer says that there should be $HOME/.local/bin/hg in this directory if it was created with pip but I do not have this file. So was it created with pip or not?

Источник

Where should a local executable be placed?

I have an executable for the perforce version control client ( p4 ). I can’t place it in /opt/local because I don’t have root privileges. Is there a standard location where it needs to be placed under $HOME ? Does the File System Hierarchy have a convention that says that local executables/binaries need to be placed in $HOME/bin ? I couldn’t find such a convention mentioned on the Wikipedia article for the FHS. Also, if there indeed is a convention, would I have to explicitly include the path to the $HOME/bin directory or whatever the location of the bin directory is?

Читайте также:  Завершить все процессы пользователя linux

4 Answers 4

In general, if a non-system installed and maintained binary needs to be accessible system-wide to multiple users, it should be placed by an administrator into /usr/local/bin . There is a complete hierarchy under /usr/local that is generally used for locally compiled and installed software packages.

If you are the only user of a binary, installing into $HOME/bin or $HOME/.local/bin is the appropriate location since you can install it yourself and you will be the only consumer. If you compile a software package from source, it’s also appropriate to create a partial or full local hierarchy in your $HOME or $HOME/.local directory. Using $HOME , the full local hierarchy would look like this.

  • $HOME/bin Local binaries
  • $HOME/etc Host-specific system configuration for local binaries
  • $HOME/games Local game binaries
  • $HOME/include Local C header files
  • $HOME/lib Local libraries
  • $HOME/lib64 Local 64-bit libraries
  • $HOME/man Local online manuals
  • $HOME/sbin Local system binaries
  • $HOME/share Local architecture-independent hierarchy
  • $HOME/src Local source code

When running configure , you should define your local hierarchy for installation by specifying $HOME as the prefix for the installation defaults.

Now when make && make install are run, the compiled binaries, packages, man pages, and libraries will be installed into your $HOME local hierarchy. If you have not manually created a $HOME local hierarchy, make install will create the directories needed by the software package.

Once installed in $HOME/bin , you can either add $HOME/bin to your $PATH or call the binary using the absolute $PATH . Some distributions will include $HOME/bin in your $PATH by default. You can test this by either echo $PATH and seeing if $HOME/bin is there, or put the binary in $HOME/bin and executing which binaryname . If it comes back with $HOME/bin/binaryname , then it is in your $PATH by default.

Источник

What’s the purpose of $HOME/bin directory?

I have too little quality points to post it as a comment, so: @Terrance has answered the question but the following link adds to the ‘why so many’ part: lists.busybox.net/pipermail/busybox/2010-December/074114.html tldr; there is no need for so many. They are leftovers from hardware limitations from half a century ago.

Читайте также:  Adding group and users in linux

2 Answers 2

The bin folders are used for executable programs.

Before Ubuntu 19.10 the folder of /bin itself was used for minimal functionality for the purposes of booting and repairing a system. The /usr/bin folder was used for most of the executable programs. Now /bin is symlinked to /usr/bin so they are now one and the same.

$ lsb_release -r Release: 20.04 $ ls -al / total 104 drwxr-xr-x 20 root root 4096 Apr 16 08:28 . drwxr-xr-x 20 root root 4096 Apr 16 08:28 .. lrwxrwxrwx 1 root root 7 Oct 2 2021 bin -> usr/bin 
$ lsb_release -r Release: 18.04 $ ls -al / total 1459924 drwxr-xr-x 24 root root 4096 Feb 24 07:36 . drwxr-xr-x 24 root root 4096 Feb 24 07:36 .. drwxr-xr-x 2 root root 4096 Feb 24 07:11 bin 

The /usr/local/bin is used for executable programs that are not managed by a distribution package.

The answer for your $HOME/bin folder is contained in the .profile in your home folder ( /home// ). It ( .profile ) is sourced automatically when you log in.

Contained in the .profile file in your home folder are the following sections (It is all about preference):

# set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi # set PATH so it includes user's private bin if it exists if [ -d "$HOME/.local/bin" ] ; then PATH="$HOME/.local/bin:$PATH" 

If either of those bin folders exist they are automatically added to the $PATH when the user logs into their account. It is used for the user’s own private executable programs and scripts. They are primarily used for the user or owner of those folders, keeping them private from other users.

Источник

Еще одно мнение о разнице между bin, sbin, usr/bin, usr/sbin

Недавно я обнаружил вот такую статью: Разница между bin, sbin, usr/bin, usr/sbin. Хотелось бы поделиться своим взглядом на стандарт.

/bin

Содержит команды, которые могут использоваться как системным администратором, так и пользователями, но которые необходимы, когда не смонтированы никакие другие файловые системы (например, в однопользовательском режиме). Он также может содержать команды, которые косвенно используются скриптами.

Читайте также:  Linux как поднять сеть

Там ожидается присутствие таких команд:

cat, chgrp, chmod, chown, cp, date, dd, df, dmesg, echo, false, hostname, kill, ln, login, ls, mkdir, mknod, more, mount, mv, ps, pwd, rm, rmdir, sed, sh, stty, su, sync, true, umount, uname.

Можно сделать симлинки на /usr, но хотя во времена systemd /usr на отдельном устройстве не встречается, его еще можно встретить на встраиваемой системе, светофоре, кофемолке и PDP-11 обслуживающем важный прибор в одной из лабораторий Академии Наук.

/sbin

Утилиты, используемые для системного администрирования (и другие команды только для root), /sbin содержит двоичные файлы, необходимые для загрузки, восстановления, восстановления и/или восстановления системы в дополнение к двоичным файлам в /bin. Программы, выполняемые после того, как /usr монтируется (когда проблем нет), обычно помещаются в /usr/sbin. Локально установленные программы системного администрирования должны быть помещены в /usr/local/sbin.

fastboot, fasthalt, fdisk, fsck, getty, halt, ifconfig, init, mkfs, mkswap, reboot, route, swapon, swapoff, update.

Один из способов защиты системы от шаловливых рук юзеров — это запрет запуска этих утилит кому-попало, установкой атрибута x.
К тому же, замена /bin и /sbin на копии из архива (одинакового для всех однотипных систем) является быстрым способом починки систем без пакетного менеджера.

/usr/bin

Тут всё просто. Однотипные команды, одинаковые для всех серверов/кофемолок компании. И сам /usr может разворачиваться одинаковым для разных ОС (для /bin и /sbin такое как правило не работает), это архитектурно независимые программы. Может содержать линки на интерпретаторы perl или python, которые лежат в /opt или еще где-то в сети.

/usr/sbin

Тоже самое, что /usr/bin, но для использования только админами.

/usr/local/bin и /usr/local/sbin

Одна из важнейших локаций. В отличие от остального, /usr не может быть одинаковой для всей организации. Тут находятся ОС-зависимые, hardware-зависимые и просто программы, которые не на всех устройствах нужны. При синхронизации /usr на машинах, /usr/local требуется исключать.

/home/$USER/bin

Тут случай аналогичный с /usr/local, только лежат программы специфичные для конкретного пользователя. Можно переносить (или синхронизировать) на другую машину при переезде пользователя. То, что нельзя переносить складывается в /home/$USER/.local/bin. Можно использовать local без точки. /home/$USER/sbin по понятным соображениям отсутствует.

Буду рад исправлениям и дополнениям.

Источник

Оцените статью
Adblock
detector