- Куда и как правильно положить свои скрипты и как их лучще хранить?
- Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- Re: Где лучше хранить свои самописные скрипты?
- User script location linux (debian etch) [closed]
- 8 Answers 8
- Where should I put my Bash scripts?
- 3 Answers 3
- If no other user other than you uses these scripts
- If these script are to be used by other users:
Куда и как правильно положить свои скрипты и как их лучще хранить?
Не корысти ради, а токмо волею пославшей мя супруги заказчиков, не имеющих денег на админов, вынужден не только разработкой заниматься, но и администрированием vds под их проекты, над которыми работаю. использую Ubuntu Server. Есть несколько скриптов на bash/python/php для сервера (создание виртхостов nginx+php-fpm и пользователей для них, бэкапы, анализ логов и прочие мелочи). некоторые скрипты должны запускаться от рута (через sudo), некоторые от текущего пользователя (каждый виртхост — свой пользователь и группа). Как это всё организовать, желательно с каким-то центральным репозиторием (известным, бесплатным), с которого можно было бы разворачивать привычное окружение на новом сервере, даже если старый и личный десктоп оказались недоступны?
Как мне видится: скрипты разрабатываются локально под контролем git или hg (исходники хостятся на github или bitbacket), потом «ручками» (условно тоже каким-нибудь скриптом, возможно хуком на vcs) формируются deb-пакеты (по сути из одного файла), заливаются на launchpad (вроде единственный популярный бесплатный хостинг, на котором можно deb репозиторий без проблем поднять), адрес репа добавляется в source-list, и потом через apt-get скрипты ставятся в /usr/local/bin/ (чтобы сразу через path были доступны), при необходимости создаются каталоги в /usr/local/. Получаю что на любой машине (с Ubuntu точно, с другими Debian-like вероятно, а остальные особо не интересуют), могу развернуть привычное окружение. Недостаток — пакеты, а в случае github и исходники, доступны в паблике (и над ними могут все ржать 🙂
Или я себе слишком жизнь усложняю и обычно это всё проще решается? или отдельные замечания к моему сценарию есть? Может без local надо обходиться, раз через apt ставлю? Может ещё что?
Где лучше хранить свои самописные скрипты?
САБЖ? /home советуют монтировать с noexec, пакет для каждого скрипта делать лень. Кто как делает?
Re: Где лучше хранить свои самописные скрипты?
>/home советуют монтировать с noexec
Бессмысленный совет, храню там где и положено — в домашней папке запускаемые от пользователя, /root/scripts/ — от рута.
Re: Где лучше хранить свои самописные скрипты?
Почему бессмысленный? Вполне можно сделать какой нибудь специфический /usr/local/me/bin и включить его в $PATH.
Re: Где лучше хранить свои самописные скрипты?
Re: Где лучше хранить свои самописные скрипты?
Чем /usr/local/bin некошерен?
Re: Где лучше хранить свои самописные скрипты?
> Чем /usr/local/bin некошерен?
Правами доступа. Ну и тем, что он как-то вне зоны обычного бэкапа. Плюс в /usr/local часто срет при установке софт, собираемый через autotools. Посему в /usr/local стараюсь ничего важного не держать.
Re: Где лучше хранить свои самописные скрипты?
Потому что /usr/bin/perl /home/user/hack.pl — сводит смысл noexec к нулю. Спрашивается зачем делать себе неудобно? ИМХО, пользователь должен писать _только_ в свою домашнюю диру.
Re: Где лучше хранить свои самописные скрипты?
Или в /usr/bin или в домашней
Re: Где лучше хранить свои самописные скрипты?
Re: Где лучше хранить свои самописные скрипты?
в ~/work, потом они собираются и чаще всего переходят в ~/.dwm 🙂
Re: Где лучше хранить свои самописные скрипты?
Re: Где лучше хранить свои самописные скрипты?
Re: Где лучше хранить свои самописные скрипты?
Присоединюсь к советующим ~/bin.
>/home советуют монтировать с noexec
Re: Где лучше хранить свои самописные скрипты?
у меня все самописное лежит в /usr/local/bin
Re: Где лучше хранить свои самописные скрипты?
Re: Где лучше хранить свои самописные скрипты?
Re: Где лучше хранить свои самописные скрипты?
Re: Где лучше хранить свои самописные скрипты?
У меня всё лежит в ~/.bin. А noexec на скрипты не влияет, выполняется-то не сам скрипт, а интерпретатор, который лежит в /usr/bin (ну или где там у вас).
Re: Где лучше хранить свои самописные скрипты?
>А noexec на скрипты не влияет, выполняется-то не сам скрипт, а интерпретатор, который лежит в /usr/bin (ну или где там у вас).
Я их вызываю не как /path/to/interp script, а делаю их исполняемыми, и внутрь запихиваю ссылку на интерпретатор, ибо так проще запускать. Так что noexec несколько портит кровь.
Re: Где лучше хранить свои самописные скрипты?
>Плюс в /usr/local часто срет при установке софт, собираемый через autotools.
User script location linux (debian etch) [closed]
In the linux file system, where should user scripts be placed? I’m thinking specifically python scripts to be called by cron.
8 Answers 8
/usr/local/sbin custom script meant for root /usr/local/bin custom script meant for all users including non-root
chatlog snips from irc.debian.org #debian:
(02:48:49) c33s: question: where is the _correct_ location, to put custom scripts for the root user (like a script on a webserver for createing everything needed for a new webuser)? is it /bin, /usr/local/bin. /usr/local/scripts is mentioned in (*link to this page*) (02:49:15) Hydroxide: c33s: typically /usr/local/sbin (02:49:27) Hydroxide: c33s: no idea what /usr/local/scripts would be (02:49:32) Hydroxide: it's nonstandard (02:49:53) Hydroxide: if it's a custom script meant for all users including non-root, then /usr/local/bin (02:52:43) Hydroxide: c33s: Debian follows the Filesystem Hierarchy Standard, with a very small number of exceptions, which is online in several formats at http://www.pathname.com/fhs/ (also linked from http://www.debian.org/devel/ and separately online at http://www.debian.org/doc/packaging-manuals/fhs/fhs-2.3.html) (02:53:03) Hydroxide: c33s: if you have the debian-policy package installed, it's also in several formats at /usr/share/doc/debian-policy/fhs/ on your system (02:53:37) Hydroxide: c33s: most linux distributions follow that standard, though usually less strictly and with more deviations than Debian.
thanks go out to Hydroxide
Where should I put my Bash scripts?
I have a few very simple Bash scripts that I cobbled together for things that I do regularly. One of them is to run duplicity to do my backup tasks. Nothing clever, just a bunch of if .. then statements really. As this needs to be run as root, would it be best practice to put my script in /usr/bin (or another location on PATH), chown to root:root and chmod to 700?
I would say use git to version-control your scripts, put local copies of the git repos somewhere you like in ~ , and then symlink the scripts into ~/bin .
@WinEunuuchs2Unix If you want your scripts to be available to other users, you should put them in /usr/local/bin . Otherwise, I would say just put them in ~/bin . Your own scripts in both directories should be safe when you upgrade.
As above, place them in /usr/local/bin. Just make sure your script names are unique & not an existing linux command/binary name. Myself just add a number to end of any script I create as I haven’t seen any pre-existing linux names end in a number. ( not to say some really obscure ones may.
@edwinksl Almost a year later I have to say ~/bin is the best place for most scripts as you don’t have to use sudo to edit them as you do when they are stored in /usr/local/bin .
3 Answers 3
If no other user other than you uses these scripts
Then you can keep them in /home/$USER/bin . Create the bin directory if it doesn’t exist and move the files there. The bin directory in your home will automatically get added to the PATH environment variable. The code is in the .profile :
# set PATH so it includes user's private bin if it exists if [ -d "$HOME/bin" ] ; then PATH="$HOME/bin:$PATH" fi
Or in some systems it may be in .bashrc :
If these script are to be used by other users:
I save my own scripts in /opt/scripts .
If your script should executeable by every system user, you can create a symbolic link to /usr/bin .
If only root should execute the script, you can create a symbolic link to /usr/sbin .
Command to add a symbolic link in /usr/bin/ :
You can execute the script, because /usr/bin/ is in your PATH by default.
I would recommend that instead of using /usr/bin as the target for user/local shell script — that it be /usr/local/bin (or /opt/bin ) as per Filesystem Hierarchy Standard — Debian Wiki to avoid conflicts (most of the time, you want Ubuntu’s provided scripts to take precedence).
On most systems /usr/local/bin overrides /usr/bin , as it comes later in the path. This is on purpose, as the system does not put files there, so you can put files there, which SHOULD override the system provided ones.
I marked this as the correct answer, even though both answers seem fine. Reason is, I eneded up taking a look at the FHS docs and came away with the understanding that /opt is there for exactly this purpose. I like the idea of them simply sym linking to my scripts in /usr/local/bin. Thanks for all the pointers.
I have a directory that I use for the quick collection of my local tools or things that I deploy on various computers in /usr/local/apollo . There are branches off this directory for flags , bin and logs .
For the applications that I download and install outside of the default apt-get repositories are placed in /opt/ and a directory by the app’s name, with one more sub-directory for the specific version of the application. This way my compiled version of an application like vlc or eclipse won’t conflict with the distributed version.
My use of /opt is the way it’s basically officially designed.
By the way the directories /usr/local/bin , /usr/local/apollo , and /opt survives a fresh OS version installation overwrite.