- Команда Source в Bash
- Bash Source Command
- Команда source читает и выполняет команды из файла, указанного в качестве аргумента в текущей среде оболочки. Полезно загружать функции, переменные и файлы конфигурации в сценарии оболочки.
- Синтаксис исходной команды
- Примеры исходных команд
- Функции поиска
- Конфигурационный файл Bash
- Вывод
- Как в bash-cкpиптe зaпpocить пpaвa cyпepпoльзoвaтeля?
- Как проверить, работает ли с правами root в bash script
- Оптимизированное bash решение для производительности и надежности
- Объяснение
- Почему я публикую это решение после стольких лет, когда ОП спросил
- Портативное решение POSIX solution
- Заключение
- Команда source в Bash
- Синтаксис исходной команды
- Примеры команды source
- Функции поиска
- Конфигурационный файл Bash
- Заключение
Команда Source в Bash
Bash Source Command
Команда source читает и выполняет команды из файла, указанного в качестве аргумента в текущей среде оболочки. Полезно загружать функции, переменные и файлы конфигурации в сценарии оболочки.
source это оболочка, встроенная в Bash и другие популярные оболочки, используемые в операционных системах Linux и UNIX. Его поведение может немного отличаться от оболочки к оболочке.
Синтаксис исходной команды
Синтаксис source команды следующий:
- source и . (точка) — это одна и та же команда.
- Если FILENAME путь к файлу не полный, команда выполнит поиск файла в каталогах, указанных в $PATH переменной среды . Если файл не найден в $PATH команде, будет выполнен поиск файла в текущем каталоге.
- Если ARGUMENTS они заданы, они станут позиционными параметрами для FILENAME .
- Если FILENAME существует source код завершения команды 0 , в противном случае, если файл не найден, он вернется 1 .
Примеры исходных команд
В этом разделе мы рассмотрим некоторые основные примеры использования source команды.
Функции поиска
Если у вас есть сценарии оболочки, использующие те же функции, вы можете извлечь их в отдельный файл, а затем получить этот файл в своих файлах.
В этом примере мы создадим файл, который включает в себя функцию bash, которая проверяет, является ли пользователь, выполняющий сценарий, пользователем root, и, если нет, показывает сообщение и завершает работу сценария.
Преимущество этого подхода состоит в том, что ваши скрипты будут меньше и более читабельными, вы можете повторно использовать один и тот же файл функций при необходимости, и в случае, если вам нужно изменить функцию, вы отредактируете только один файл.
Конфигурационный файл Bash
С помощью source команды вы также можете читать переменные из файла. Переменные должны быть установлены с использованием синтаксиса Bash VARIABLE=VALUE .
Давайте создадим тестовый файл конфигурации:
В вашем bash-скрипте используйте source команду для чтения файла конфигурации:
Если вы запустите скрипт, результат будет выглядеть так:
Вывод
Из этого руководства вы узнали, как использовать source встроенную команду в сценариях оболочки.
Источник
Как в bash-cкpиптe зaпpocить пpaвa cyпepпoльзoвaтeля?
Как в bash-cкpиптe зaпpocить пpaвa cyпepпoльзoвaтeля?
Чтoбы нe oткpывaть eгo caмocтoятeльнo c пpaвaми cy.
Hyжнo oднaжды зaпpocить и иcпoлнять cкpипт oт имeни cy. Kaк вapиaнт вcтaвлять вeздe sudо. B oбщeм, я нoвичoк в этoм дeлe.
ну так и ставь судо, если оно настроено в системе.
A кaк нe cтaвить eгo в кaждoй cтpoкe?
а в чём проблема? 4 буквы вроде места много не занимают, я то от рута всё делаю, судо терпеть не могу.
точнее скрипты от рута запускаются.
Хочется один раз поставить, запросить, и спокойно писать дальше, не отвлекаясь :).
тогда su в помощь, проблемы не вижу.
A кaк пpoдoлжить выпoлнeниe cкpиптa пocлe «su»?
То с su кaк ? Если просто его поставить, скрипт перестаёт выполняться.
Как-то так, в общем, поищи на stackowerflow.
И тогда весь скрипт от рута выполнится (ибо через судо).
лан,подурачились и хватит. chown root:root /скрипт, chmod 4755 /скрипт и всё.
например вот так
херню не неси, это не будет работать на большинстве линуксов.
в centos/rhel работает, gentoo, если в бубунте не пашет, не значит что во всех линуксах.
Это не должно работать на всех linux-ах.
И не работает.
А постом ниже erzent просто соврамши: то, что ему позволяют поставить setuid на скрипт и он запускается молча, не значит, что это работает.
чем отличается 2777 от 4777?
Если программа должна иметь рутовые права, то пользователь должен ее так и запустить. Иначе это некислая дыра в безопасности. Поэтому правильный ответ на твой вопрос такой:
а в чём проблема? 4 буквы вроде места много не занимают
А сколько места занимают буквы твоего пароля? А если умножить на количество строк с sudo в скрипте?
sudo не переспрашивает пароль в течении определённого времени.
sudo не переспрашивает пароль в течении определённого времени.
sudo можно настроить так, чтобы спрашивал пароль каждый раз.
Скрипт может выполнять одну из этих команд достаточно долго, чтобы к следующей уже пришлось вводить пароль снова. Не очень приятная ситуация, когда запустил скрипт, ввёл пароль, оставил его, а он посреди остановился и ждёт.
sudo можно вообще не настраивать и тогда ввод пароля не поможет совсем никак.
Причём переспрашивать, как ниже советуют, не надо, su -c от рута просто выполнит дальнейший скрипт без лишних вопросов.
Источник
Как проверить, работает ли с правами root в bash script
Я пишу script, который требует прав на уровне корневого уровня, и я хочу сделать так, чтобы, если script не запущен как root, он просто перекликается с “Пожалуйста, запустите от имени пользователя root”. и выходы.
Здесь некоторый псевдокод для того, что я ищу:
Как я могу (чище и безопасно) справиться с этим? Спасибо!
А, просто для того, чтобы уточнить: часть (сделайте что-то) будет включать в себя запуск команд, которые сами по себе требуют root. Так что запуск его, как обычный пользователь, просто придумал бы ошибку. Это просто предназначено для чистого запуска script, для которого требуются корневые команды, без использования sudo внутри script, я просто ищу какой-то синтаксический сахар.
Было дано несколько ответов, но, по-видимому, лучшим способом является использование:
- id -u
- Если запустить с правами root, вернет идентификатор 0.
Это кажется более надежным, чем другие методы, и кажется, что он возвращает id из 0, даже если script выполняется через sudo .
Переменная среды $ EUID содержит текущий UID пользователя. Root UID равен 0. Используйте что-то вроде этого в вашем скрипте:
Примечание: Если вы получаете 2: [: Illegal number: проверьте, есть ли у вас #!/bin/sh вверху и измените его на #!/bin/bash .
В bash script у вас есть несколько способов проверить, является ли текущий пользователь root.
Как предупреждение , не проверяйте, является ли пользователь root, используя имя пользователя root . Ничто не гарантирует, что пользователь с ID 0 называется root . Это очень сильное соглашение, которое широко применяется, но любой может переименовать суперпользователя в другое имя.
Я думаю, что лучший способ использования bash – использовать $EUID , с man-страницы:
Это лучший способ, чем $UID , который может быть изменен и не отражает реального пользователя, запускающего script.
Способ, которым я подхожу к этой проблеме, заключается в том, чтобы вставлять sudo в мои команды, когда он не запускается с правами root. Вот пример:
Таким образом моя команда запускается root при использовании суперпользователя или sudo при запуске обычного пользователя.
Если ваш script всегда должен быть запущен root, просто установите права соответственно ( 0500 ).
Как упоминает @wrikken в своих комментариях, id -u – это гораздо лучшая проверка для root.
Кроме того, при правильном использовании sudo вы можете проверить script и посмотреть, работает ли он с правами root. Если нет, попросите его вспомнить через sudo , а затем запустите с правами root.
В зависимости от того, что делает script, другой может быть настройка записи sudo для любых специализированных команд, которые могут понадобиться script.
Существует простая проверка для пользователя, являющегося пользователем root.
Синтаксис [[ stuff ]] – это стандартный способ запуска проверки в bash.
Это также предполагает, что вы хотите выйти с 1, если вы терпите неудачу. Функция error – это некоторое чутье, которое устанавливает выходной текст в красный (не нужен, но довольно классный, если вы меня спрашиваете).
0- Прочитайте официальную документацию GNU Linux, есть много способов сделать это правильно.
1- убедитесь, что вы помещаете подпись оболочки, чтобы избежать ошибок в интерпретации:
2- это мой script
Очень простой способ просто поставить:
Преимущество использования этого вместо id заключается в том, что вы можете проверить, не работает ли какой-либо пользователь, не являющийся пользователем root; например.
Если script действительно требует доступа к корню, тогда его права на файлы должны отражать это. Наличие корневого script исполняемого пользователями, не являющимся пользователем root, будет красным. Я рекомендую вам не контролировать доступ с помощью проверки if .
В этом ответе, чтобы было ясно, я предполагаю, что читатель может читать сценарии оболочки bash и POSIX, такие как dash .
Я полагаю, что здесь мало что можно объяснить, потому что ответы с большим количеством голосов объясняют многое из этого.
Тем не менее, если есть что-то, чтобы объяснить дальше, не стесняйтесь комментировать, я сделаю все возможное, чтобы заполнить пробелы.
Оптимизированное bash решение для производительности и надежности
Объяснение
Так как чтение переменной bash стандарта во много раз быстрее, эффективный идентификатор пользователя, чем выполнение команды id -u для POSIX -ly, находит пользователя ID, это решение объединяет оба в красиво упакованную функцию. Если и только если $EUID по какой-либо причине недоступен, команда id -u будет выполнена, гарантируя, что мы получим правильное возвращаемое значение независимо от обстоятельств.
Почему я публикую это решение после стольких лет, когда ОП спросил
Что ж, если я правильно вижу, кажется, что выше отсутствует фрагмент кода.
Видите ли, есть много переменных, которые необходимо учитывать, и одна из них сочетает в себе производительность и надежность.
Портативное решение POSIX solution
Заключение
Как бы вам это ни нравилось, среда Unix/Linux очень разнообразна. Это означает, что есть люди, которым так нравится bash , что они даже не думают о переносимости (POSIX оболочки). Другие, как я, предпочитают POSIX оболочки. В настоящее время это вопрос личного выбора и потребностей.
попробуйте следующий код:
Один простой способ сделать скрипт доступным только для пользователя root – запустить скрипт со строкой:
Насколько я знаю, правильный способ проверить это:
Смотрите раздел “Тестирование на корень” здесь:
id -u намного лучше, чем whoami , поскольку некоторые системы, такие как android, могут не предоставлять слово root.
Проверьте, являетесь ли вы пользователем root, и выйдите из системы, если вы не:
Или в этом примере попытайтесь создать каталог в корневом расположении, а затем попытайтесь после повышения прав.
Проверьте, являетесь ли вы пользователем root и, если возможно, не повышать его:
Примечание редактора: если вам не нужны двойные скобки, используйте одинарные для переносимости кода.
Источник
Команда source в Bash
source это оболочка, встроенная в Bash и другие популярные оболочки, используемые в операционных системах Linux и UNIX. Его поведение может немного отличаться от оболочки к оболочке.
Синтаксис исходной команды
Синтаксис команды source следующий:
- source и .(точка) – это одна и та же команда.
- Если FILENAME путь к файлу не полный, команда выполнит поиск файла в каталогах, указанных в переменной среды $PATH. Если файл не найден в команде $PATH, будет выполнен поиск файла в текущем каталоге.
- Если ARGUMENTS они заданы, они станут позиционными параметрами для FILENAME.
- Если FILENAME существует sourceкод завершения команды 0, в противном случае, если файл не найден, он вернется 1.
Примеры команды source
В этом разделе мы рассмотрим некоторые основные примеры использования команды source.
Функции поиска
Если у вас есть сценарии оболочки, использующие те же функции, вы можете извлечь их в отдельный файл, а затем получить этот файл в своих файлах.
В этом примере мы создадим файл, который включает в себя функцию bash, которая проверяет, является ли пользователь, выполняющий скрипт, пользователем root, и, если нет, показывает сообщение и завершает работу скрипта.
Теперь в каждом из ваших сценариев, которые должны запускаться только пользователем root, просто создайте файл functions.sh и вызовите функцию:
Если вы запустите приведенный выше сценарий как пользователь без полномочий root, он напечатает «Этот сценарий должен быть запущен от имени пользователя root» и завершится.
Преимущество этого подхода состоит в том, что ваши скрипты будут меньше и более читабельны, вы можете повторно использовать один и тот же файл функций при необходимости, и если вам нужно изменить функцию, вы отредактируете только один файл.
Конфигурационный файл Bash
С помощью команды source вы также можете читать переменные из файла. Переменные должны быть установлены с использованием синтаксиса VARIABLE=VALUE в Bash.
Давайте создадим тестовый файл конфигурации:
В вашем bash-скрипте используйте команду source для чтения файла конфигурации:
Если вы запустите скрипт, результат будет выглядеть так:
Заключение
Из этой статьи вы узнали, как использовать sourceвстроенную команду в сценариях оболочки.
Если у вас есть какие-либо вопросы или отзывы, не стесняйтесь оставлять комментарии.
Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.
Источник