Нещодавно я зіткнувся з такою проблемою: програма не зберігало настройку umask. задану в профілі root-користувача, або в файлі / etc / profile. Трохи розібравшись у питанні, я зрозумів, що додаток використовує тільки ту настройку umask. яка задана в / etc / bashrc. не беручи навіть ті значення, які є його ж власними сценаріями запуску.
Трохи вивчивши питання, я зрозумів, яку функцію виконують ці файли, ніж вони розрізняються і як вони виконуються. Таке питання піднімається не часто, тому я подумав, що буде корисно розповісти про нього вам.
Для чого потрібен файл / etc / profile?
Якщо ви використовуєте Linux, то вам напевно знайомі файли .profile або .bash_profile. розміщені в вашому домашньому каталозі. Ці файли використовуються для завдання елементів оточення для оболонки користувача. Таких елементів, як, наприклад, umask. і таких змінних, як PS1 або PATH.
Файл / etc / profile не дуже-то відрізняється від цих файлів. Він використовується для завдання загальносистемних змінних оточення в оболонках користувача. Іноді це ті ж змінні, що і в .bash_profile. але цей файл використовується для завдання початкових PATH або PS1 для всіх користувачів оболонок системи.
/etc/profile.d
Крім завдання елементів оточення, файл / etc / profile виконує сценарії всередині /etc/profile.d/*.sh. Якщо ви хочете задати свої власні змінні оточення для всієї системи, вам слід помістити свою конфігурацію в сценарій оболонки в /etc/profile.d.
Для чого потрібен файл / etc / bashrc?
Крім .bash_profile. в своєму домашньому каталозі ви також часто будете зустрічати файл .bashrc. Цей файл призначений для завдання псевдонімів команд і функцій, використовуваних користувачами оболонки bash.
Аналогічно тому, як / etc / profile є загальносистемної версією .bash_profile. файл / etc / bashrc в Red Hat і файл /etc/bash.bashrc в Ubuntu є загальносистемної версією .bashrc.
Варто відзначити, що в Red Hat реалізація / etc / bashrc також виконує сценарій оболонки в /etc/profile.d. але тільки якщо для користувача оболонка є Інтерактивної оболонкою (тобто Login Shell (стартовою оболонкою))
Коли використовуються ці файли?
Те, коли виконується кожен з цих файлів, залежить від типу виконуваного логіна. У Linux є два типи стартових оболонок (login shells) - Інтерактивні оболонки і Неінтерактивні оболонки. Інтерактивна оболонка використовується, коли користувач може взаємодіяти з оболонкою, тобто наприклад, типове запрошення командного рядка bash. Неінтерактивному оболонка використовується, коли користувач не може взаємодіяти з оболонкою, тобто виконання bash-сценаріїв.
Різниця проста: файл / etc / profile виконується тільки для інтерактивних оболонок, а файл / etc / bashrc - як для інтерактивних, так і для неінтерактивних. Взагалі-то, в Ubuntu файл / etc / profile викликає файл / etc / bashrc безпосередньо.
Інтерактивна оболонка і неінтерактивному оболонка: Порівняння
Щоб на прикладі порівняти інтерактивну і неінтерактивному оболонки, я додам змінну в обидва файли / etc / profile і /etc/bash.bashrc в своїй Ubuntu.
Інтерактивна оболонка
Нижче наведено приклад інтерактивної оболонки. В цьому випадку були виконані обидва файли / etc / profile і /etc/bash.bashrc.
неінтерактивному оболонка
У цьому прикладі ми виконуємо команду через оболонку SSH, яка є неінтерактивної; оскільки це неінтерактивному оболонка, виконується тільки файл /etc/bash.bashrc.
висновок
У моєму випадку додаток не визнає значення umask. заданий в файлі / etc / profile. але визнає значення в файлі / etc / bashrc. Це говорить про те, що подпроцесс починається як неінтерактивному оболонка. Оскільки запропонований спосіб зміни змінних оточення полягає в додаванні сценарію оболонки в /etc/profile.d. в моєму випадку краще задати значення umask в файлі / etc / bashrc.