Куди я можу розмістити свої баш сценарії


15

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


Я б сказав, що використовуйте gitдля керування версіями сценарії, помістіть локальні копії git repos куди завгодно ~, а потім позначайте сценарії в ~/bin.
edwinksl

Ви маєте на увазі, gitяк у githubхмарах?
WinEunuuchs2Unix

2
@ WinEunuuchs2Unix Якщо ви хочете, щоб ваші сценарії були доступні для інших користувачів, вам слід ввести їх /usr/local/bin. Інакше, я б сказав, просто покладіть їх ~/bin. Ваші власні сценарії в обох каталогах повинні бути безпечними під час оновлення.
edwinksl

2
Як і вище, розмістіть їх у / usr / local / bin. Просто переконайтесь, що назви ваших скриптів є унікальними, а не існуючими командами / бінарними іменами Linux. Я просто додаю число до кінця будь-якого створеного сценарію, оскільки я не бачив жодного попереднього імені Linux, що закінчується числом. (не кажучи про те, що деякі дійсно незрозумілі можуть ...
doug

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 .


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}

Дякую старшину Гейку

Якщо ці сценарії повинні використовуватися іншими користувачами:

Тоді /usr/local/binабо /opt/binхороші варіанти. Див. Чи є стандартне місце для розміщення спеціальних сценаріїв Linux?

Сподіваюсь, це допомагає


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

Інсталятор Nukes каталогів, які він використовує. У ньому зручно створювати /usr/localкаталоги, але він нічого не вміщує в жоден із них. Ці каталоги заповнюються користувачем. Багато вихідних програм за межами сховищ дають користувачеві можливість вибрати, куди вони хочуть перейти. За замовчуванням у конфігураційних файлах є /usr/local/bin. Тож через те, наскільки поширеним є використання цих каталогів, вони за замовчуванням включаються в шлях користувача. За замовчуванням система перевіряє ~/bin та додає її до шляху, якщо він існує.
LD James

Ви маєте на увазі перевірку системи ~/binпід час встановлення чи кожного завантаження? У чому різниця між sbinі bin? Вони, здається, співіснують, повинні існувати квазі-правила, на основі яких ви вибираєте, залежно від типу програми?
WinEunuuchs2Unix

1
@ WinEunuuchs2Unix На ~/binшляху ... він не додається під час встановлення. Система перевіряє його на кожному вході та додає його до $ PATH, якщо він існує під час входу. Подивіться на останні два рядки ~/.profileналаштувань.
LD James
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.