Где я должен поставить свои скрипты Bash

15

У меня есть несколько очень простых скриптов bash, которые я собрал вместе для вещей, которые я делаю регулярно. Одним из них является запуск двуличия для выполнения моих задач резервного копирования. Ничего умного, просто куча если .. тогда заявления действительно. Поскольку это должно быть выполнено как sudo, лучше ли было бы помещать мой сценарий в / usr / bin (или другое место в PATH), а затем в root.root и chmod в 700?

hatterman
источник
Я бы сказал, использовать gitдля управления версиями ваши скрипты, помещать локальные копии репозиториев git туда, где вам нравится ~, а затем вставлять ссылки на скрипты ~/bin.
Edwinksl
Ты имеешь ввиду gitкак в githubоблаках?
WinEunuuchs2Unix
2
@ WinEunuuchs2Unix Если вы хотите, чтобы ваши скрипты были доступны другим пользователям, вы должны вставить их /usr/local/bin. В противном случае, я бы сказал, просто вставьте их ~/bin. Ваши собственные сценарии в обоих каталогах должны быть безопасны при обновлении.
Edwinksl
2
Как указано выше, поместите их в / usr / local / bin. Просто убедитесь, что имена ваших скриптов уникальны, а не существующая команда / двоичное имя linux. Я просто добавляю число в конец любого сценария, который я создаю, так как я не видел ни одного ранее существующего имени Linux, заканчивающегося числом. (не сказать, что некоторые действительно малоизвестные могут ...
Дуг
1
@edwinksl Почти год спустя я должен сказать, ~/binчто это лучшее место для большинства скриптов, так как вам не нужно использовать их sudoдля редактирования, как вы делаете, когда они хранятся в /usr/local/bin.
WinEunuuchs2Unix

Ответы:

3

Я сохраняю свои собственные сценарии в /opt/scripts.

Если ваш сценарий должен выполняться каждым пользователем системы, вы можете создать символическую ссылку на /usr/bin .

Если только root должен выполнять скрипт, вы можете создать символическую ссылку на /usr/sbin .

Команда для добавления символической ссылки в /usr/bin/:

ln -s /opt/scripts/<script> /usr/bin/

Вы можете выполнить скрипт, потому что он /usr/bin/находится в вашем PATH по умолчанию.

SynPrime
источник
1
Я бы порекомендовал вместо использования /usr/binв качестве цели для сценария пользовательской / локальной оболочки - чтобы он был /usr/local/bin(или /opt/bin) в соответствии со стандартом иерархии файловой системы - в Debian Wiki, чтобы избежать конфликтов (большую часть времени вы хотите, чтобы предоставленные сценарии Ubuntu имели приоритет).
шаломб
На большинстве систем /usr/local/binпереопределяет /usr/bin, как это происходит позже в пути. Это сделано специально, поскольку система не помещает туда файлы, поэтому вы можете помещать туда файлы, которые ДОЛЖНЫ переопределять предоставленные системой.
Алло
Я пометил это как правильный ответ, хотя оба ответа кажутся нормальными. Причина в том, что я решил взглянуть на документы FHS и пришел с пониманием, что / opt существует именно для этой цели. Мне нравится идея их простой сим-ссылки на мои скрипты в / usr / local / bin. Спасибо за все указатели.
Шляпник
17

Если никто другой, кроме вас, не использует эти сценарии:

Тогда вы можете держать их в /home/$USER/bin. Создайте binпапку, если ее там нет, и переместите туда файлы. Папка bin в вашем доме будет автоматически добавлена ​​в переменную окружения PATH. Код находится в .profile:

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

Смотрите Как добавить / home / username / bin в $ PATH?

Или в некоторых системах это может быть в .bashrc:

export PATH=${HOME}/bin/:${HOME}/.local/bin:${PATH}

Спасибо старейшина Geek

Если эти сценарии будут использоваться другими пользователями:

Тогда либо /usr/local/binили /opt/binхорошие варианты. См. Есть ли стандартное место для размещения пользовательских сценариев Linux?

Надеюсь это поможет

user68186
источник
3

У меня есть каталог, который я использую для быстрого сбора моих локальных инструментов или вещей, которые я развертываю на разных компьютерах /usr/local/apollo. Есть ответвляется этого каталога для flags, binи logs.

Для приложений, которые я загружаю и устанавливаю вне apt-getрепозиториев по умолчанию, они помещаются в /opt/каталог с именем приложения, а также еще один подкаталог для конкретной версии приложения. Таким образом, моя скомпилированная версия приложения похожа vlcили eclipseне будет конфликтовать с распределенной версией.

Я использую /optэто так, как это официально разработано.

Кстати каталоги /usr/local/bin, /usr/local/apolloи /optвыживает свежую версию ОС установки перезапись.

Л.Д. Джеймс
источник
1
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/binМне нравится тот факт, /usr/local/binчто на пути уже есть одна вещь, которую нужно помнить. Мне нравится ваш метод, который /opt/program/versionя могу использовать для ядра, которое я получаю и компилирую, как EnhanceIO, где они меняют вещи между версиями ядра. Является ли /apolloприземление на Луну личным фаворитом или имеет значение Ubuntu?
WinEunuuchs2Unix
В чем разница между /usr/local/binи usr/local/sbinтакими, что последний получает ядерное оружие во время обновлений?
WinEunuuchs2Unix
Установщик обнуляет каталоги, которые он использует. Он удобно создает /usr/localкаталоги, но ничего не помещает ни в один из них. Эти каталоги заполняются пользователем. Многие исходные программы вне репозиториев дают пользователю возможность выбрать, куда они хотят выполнить установку. По умолчанию в конфигурационных файлах /usr/local/bin. Таким образом, из-за того, как часто используются эти каталоги, они включены в путь пользователя по умолчанию. По умолчанию система проверяет ~/bin и добавляет его к пути, если он существует.
Л.Д. Джеймс
Вы имеете в виду, что система проверяет ~/binво время установки или каждой загрузки? В чем разница между sbinи bin? Кажется, они сосуществуют, должны быть квази-правила, которые вы выбираете, основываясь на типе программы, верно?
WinEunuuchs2Unix
1
@ WinEunuuchs2Unix По ~/binпути ... он не добавляется во время установки. Система проверяет его при каждом входе в систему и добавляет его в $ PATH, если он существует во время входа в систему. Посмотрите на последние две строки ваших ~/.profileнастроек.
Л.Д. Джеймс