Використання unix частина 10

Збереження налаштувань для їх відновлення при наступному запуску командної оболонки

Можна налаштувати командну оболонку (shell) UNIX® так, щоб заощадити свій час, сили і адаптувати її під свій стиль роботи. Файли автозавантаження командної оболонки збережуть настройки і відновлять оточення старої сесії оболонки заново навіть на іншому комп'ютері.

Якщо працювати з якоюсь програмою досить довго, то можна дізнатися все про те, для чого вона призначена. Більш того, програміст стане використовувати її, як віртуоз - свій музичний інструмент.

Я сподіваюся, що майстерність читача цього циклу статей вже наближається до рівня гуру UNIX®: він звертається до всезнаючому оракула man за додатковими знаннями, йому відомі магічні комбінації команд, які здійснюють воістину алхімічні перетворення даних. Робота в командному рядку легка і командна оболонка зручна і знайома йому.

Наступний рівень майстерності - це віртуозно використовувати командну оболонку.

Великий і могутній shell

Ми вже вивчили багато способів настройки оточення оболонки:

  • Можна вибрати ту командну оболонку UNIX, яка більше подобається. Bourne shell (bash) володіє міццю; інші, такі як Z shell, пропонують новинки та зручні поліпшення, які деякі користувачі вважають вкрай корисними.

Щоб дізнатися, які командні оболонки встановлені на комп'ютері, треба запустити команду cat / etc / shells. Щоб змінити поточну командну оболонку на будь-яку зі списку, слід викликати команду chsh. Ось приклад зміни командної оболонки на / bin / zsh - Z shell. (Користувач вводив текст, виділений напівжирним шрифтом.)

  • Можна створити короткі псевдоніми для часто використовуваних довгих команд.
  • Змінні оточення. такі як PATH (містить шляхи, по яких шукаються програми) і TZ (яка визначає часовий пояс) зберігають настройки і впливають на всі запускаються процеси.

    Мінлива PATH особливо корисна. Наприклад, якщо необхідно запустити локальну версію Perl, можна змінити значення PATH так, щоб запускалася Perl з / usr / local / bin / perl замість зазвичай знаходиться в / usr / bin / perl стандартної версії Perl.

    Додатки UNIX також часто використовують змінні оточення для настройки. Наприклад, якщо термінал (або емулятор терміналу) має таку можливість, можна зробити так, щоб команда ls (виводить вміст каталогу) позначала різними кольорами файли різних типів, використовуючи для цього змінні оточення CLICOLOR і LSCOLORS.

  • Можна повторно запустити команди з ведеться командною оболонкою історії команд. Історія команд зберігає набрані раніше виклики, дозволяючи повторно запустити попередні команди. Багато командні оболонки також дозволяють модифікувати ці попередні команди, створюючи на їх основі нові. Наприклад, командна оболонка Bash використовує символ "кришка" (^), щоб виконати заміну в команді:
  • Можна написати сценарії командної оболонки для виконання складних операцій, якщо існуючі утиліти UNIX і вбудовані команди оболонки не справляються з завданнями, які доводиться виконувати регулярно.
  • Звичайно, маючи стільки можливостей по налаштуванню командної оболонки, було б добре мати можливість зберегти зроблені зміни і повторно їх використовувати в інший час, в іншій сесії роботи (після завершення одного сеансу роботи і початку нового) і навіть на інших робочих станціях (вважаючи, що використовується одна і та ж командна оболонка на різних комп'ютерах).

    Сценарії автозавантаження командної оболонки забезпечують цю можливість. Коли командна оболонка запускається, а також коли завершується, оболонка запускає кілька сценаріїв для ініціалізації і видалення свого оточення відповідно. Деякі скрипти автозавантаження мають системні права (системний адміністратор може налаштувати їх), а інші відкриті для зміни звичайними користувачами.

    Сценарії автозавантаження не схожі на INI-файли Microsoft® Windows®. Як це повинно бути зрозуміло з назви, сценарії автозавантаження командної оболонки - це повноцінні сценарії оболонки, такі маленькі програми, які виконують якусь роботу. Ці сценарії запускаються, коли запускається або завершується командна оболонка, і виробляють відповідні налаштування оточення.

    Запусти мене!

    Зазвичай кожна командна оболонка надає кілька сценаріїв автозавантаження і має свій порядок завантаження цих сценаріїв. Як мінімум є один системний і один призначений для користувача (по одному на користувача) файл автозавантаження командної оболонки. Вважайте внутрішню послідовність сценаріїв автозавантаження командної оболонки каскадом: ефект від запуску декількох (можливо) сценаріїв накопичується, і можна видаляти і змінювати параметри, встановлені одним із сценаріїв, запущеним раніше.

    Наприклад, системний адміністратор може встановити для командної оболонки допоміжні параметри для всієї системи - щось, що включає для користувача ім'я, поточний робочий каталог і число збережених дій в історії команд - в системному сценарії автозавантаження. Однак можна перевизначити ці параметри, встановивши їх в своєму сценарії автозавантаження такими, які необхідні користувачу. Тим не менш, якщо не внести зміни в системні настройки, то вони відіб'ються тільки в запущеній оболонці і її оточенні.

    Зазвичай найпершими виконуються системні сценарії, такі як / etc / profile, і системний адміністратор може керувати ними. Системні сценарії автозавантаження призначені для полегшення використання ресурсів, специфічних для конкретної системи. Наприклад, якщо системний адміністратор вважає за краще використовувати більш нову версію утиліти Secure Shell (SSH), так як в ній закрита відома пролом безпеки, то він може встановити ініціалізацію змінної PATH в / usr / local / bin: / bin: / usr / bin, встановивши таким чином в якості пріоритетного шляху пошуку виконуваних файлів каталог / usr / local / bin. (Якщо команда не знайдена в / usr / local / bin, то командна оболонка продовжить шукати її в каталозі / usr / bin). Системні файли автозавантаження також використовуються для установки імен принтерів і забезпечення користувачів розумними налаштуваннями командної оболонки.

    Після того як системні сценарії відпрацювали, командна оболонка запускає призначені для користувача файли автозавантаження. Призначений для користувача сценарій автозавантаження - це найкраще місце, щоб зберігати улюблені псевдоніми команд, настройки оточення і інші необхідні налаштування.

    Планування для великого Bash

    Число і імена сценаріїв автозавантаження різних командних оболонок також відрізняються. Давайте розглянемо послідовність завантаження сценаріїв в командній оболонці Bash, / bin / bash. Bash можна знайти практично на всіх системах UNIX та Linux®, зазвичай це стандартна командна оболонка нових встановлених систем і нових користувачів. Це також цілком типовий представник командних оболонок, який може служити хорошим майданчиком для демонстрації роботи. (При використанні іншої командної оболонки з її документації та сторінок man можна дізнатися імена і послідовність завантаження сценаріїв.)

    Bash має шість сценаріїв автозавантаження, але не кожен з них буде запущений. Навіть якщо всі шість сценаріїв існують і доступні, Bash виконає тільки частина з них.

    Першим Bash запускає системний сценарій / etc / profile, якщо він існує і доступний для читання користувачем. Після виконання цього сценарію, Bash шукає сценарії

    /.bashrc - саме в цьому порядку, - де

    - стандартний псевдонім для користувача домашнього каталогу (також доступний через змінну $ HOME). При завершенні роботи Bash, командна оболонка шукає файл

    У стародавні часи UNIX (трохи менше ніж два десятиріччя тому) користувачі зазвичай отримували доступ до UNIX-машині через термінал. Вони набирали свій користувальницький ідентифікатор і пароль в рядку запрошення, і система породжувала новий процес командної оболонки для початку сесії користувача. У цьому оточенні оболонка для входу в систему відрізнялася від інших примірників командної оболонки (таких, наприклад, як стартові сценарії) на ім'я: ім'я процесу кожної командної оболонки, запущеної під час входу в систему, попереджав дефісом, наприклад, -bash. Це спеціальне ім'я - найдавніший артефакт UNIX - каже командній оболонці про необхідність виконання спеціального конфігурації для входу.

    Що таке інтерактивна оболонка, пояснити дещо простіше: командна оболонка інтерактивна, якщо вона сприймає вхідні дані (зі стандартного пристрою вводу) і виводить результат (на стандартний пристрій виводу). Зараз X-термінали замінили текстові, але угоди і парадигми режимів роботи командних оболонок залишилися колишніми. Зазвичай X-термінал запускає Bash під ім'ям -bash. яке говорить про необхідність запустити завантажувальний послідовність сценаріїв входу в систему.

    У разі Bash інтерактивна командна оболонка входу в систему запускає сценарій / etc / profile, якщо він існує. (Неінтерактивному оболонка також запускає / etc / profile, якщо Bash викликаний командою bash -login.) Потім інтерактивна оболонка шукає файл

    /.bash_profile і виконує цей сценарій, якщо він існує і доступний для читання користувачем. Інакше командна оболонка продовжує здійснювати

    /.bash_login. Якщо і цей файл не існує або його не можна розпізнати, то Bash, нарешті, намагається запустити файл

    /.profile. Bash запускає тільки один призначений для користувача сценарій автозавантаження: виконання сценаріїв автозавантаження закінчується безпосередньо після закінчення роботи автоматизоване. Коли командна оболонка завершує роботу, вона запускає файл

    Якщо Bash інтерактивний, але не є запущеним для входу в систему, він намагається прочитати файл

    /.bashrc. Жоден інший сценарій не виконується. Якщо Bash НЕ інтерактивний, він звертається до змінної BASH_ENV і виконує зазначений там файл.

    Звичайно, можна змінити цю послідовність, викликаючи власні файли зі стандартних сценаріїв. Спеціальний псевдонім командної оболонки. (Або його синонім source) виконує інший сценарій оболонки. Наприклад, якщо необхідно, щоб установки з

    /.bashrc виконувалися для будь-якої інтерактивної оболонки, запишіть команду:

    /.bash_profile. Коли командна оболонка отримує команду. (Точка), вона виконує сценарій з ім'ям, зазначеним відразу ж за цим оператором.

    Рівняння на shell

    Кращий спосіб дізнатися послідовність завантаження сценаріїв в командній оболонці - це створити простий сценарій автозавантаження. Наприклад, запускає чи утиліта SSH видалену командну оболонку входу в систему з ім'ям farfaraway при запуску команди ssh farfaraway ls. Або, може бути, запускається проста інтерактивна оболонка? Давайте з'ясуємо.

    Лістинг 1. 2. 3 і 4 демонструють приклади файлів / etc / profile,

    Лістинг 1 дає приклад сценарію / etc / profile. Це перший запускається командною оболонкою файл (якщо він існує і доступний для читання користувачем).

    Лістинг 1. Приклад файлу / etc / profile

    Сценарій, наведений у лістингу 1. виводить повідомлення і встановлює мінімальне значення змінної PATH. Як вже говорилося вище, цей сценарій запускається, якщо оболонка є інтерактивною командною оболонкою входу в систему. Наприклад, якщо запустити новий X-термінал, то буде виведено таке повідомлення ::

    Добре! Ми побачили передбачену послідовність завантаження сценаріїв, коли запустили нову командну оболонку для входу в систему в X-терміналі. Зауважимо, що написано в запрошенні командного рядка: там відображається ім'я користувача, скорочене ім'я комп'ютера і номер команди.

    Якщо набрати команду logout або exit. то виведеться наступне повідомлення:

    Як і було сказано раніше, інтерактивна командна оболонка входу в систему запускає

    Лістинг 2 демонструє приклад файлу

    /.bash_profile. Цей файл - один з можливих способів настройки командної оболонки при завантаженні.

    Лістинг 2. Приклад файлу

    Тепер подивимося, що трапляється під час запуску нового екземпляра командної оболонки з командного рядка. Нова оболонка інтерактивна, але вона не є командною оболонкою входу в систему. відповідно,

    /.bashrc - єдиний файл, який повинен бути запущений.

    І дійсно, був запущений тільки файл

    /.bashrc. Докази можна знайти в командному рядку, останній рядок - це звичайне запрошення Bash, а не те, яке визначено в

    Щоб перевірити сценарій виходу з командної оболонки, наберемо exit (неможливо вийти за допомогою команди logout. Так як це не оболонка входу в систему). Буде надруковано:

    Коли інтерактивна оболонка закінчує свою роботу, вона виконує сценарій

    /.bash_logout. Можна використовувати цю особливість для видалення тимчасових файлів, копіювання важливих файлів в якості найпростішого методу резервного копіювання або навіть для запуску утиліти rsync для копіювання на інші комп'ютери всіх змін, зроблених в самій останній сесії роботи.

    Лістинг 3 демонструє приклад сценарію

    /.bashrc. Цей сценарій - файл ініціалізації для неінтерактивному варіанти командної оболонки Bash.

    Лістинг 3. Приклад

    Тепер інший експеримент: який режим буде у командної оболонки, при підключенні через SSH? Давайте розглянемо два варіанти. (Можна просто використовувати SSH для підключення до локальної машині, це працює так само, як якщо запускати SSH з віддаленого комп'ютера.) Перш за все, будемо використовувати SSH для входу в систему на віддаленому комп'ютері:

    Як і передбачалося, запуск SSH для доступу до віддаленого комп'ютера ініціює запуск нової командної оболонки входу в систему. Тепер що станеться, якщо запустити через SSH якусь команду? Ось відповідь:

    Запуск команди віддалено через SSH ініціює запуск інтерактивної оболонки, яка не є командною оболонкою входу в систему. Чому інтерактивної? Тому що стандартний ввід і стандартний висновок на віддаленому комп'ютері пов'язаний з вашою клавіатурою і з вашим дисплеєм, хоча і через SSH.

    У лістингу 4 дан приклад файлу

    /.bash_logout. Цей сценарій запускається, коли командна оболонка завершує роботу.

    Лістинг 4: приклад файлу

    Поради щодо створення файлів автозавантаження

    Чим частіше використовується командна оболонка, тим більше економляться час і сили користувача за рахунок записи параметри до файлів автозавантаження. Далі буде дано кілька корисних способів і порад з організації настройки командної оболонки Bash. (Можна використовувати подібну стратегію стосовно і до інших командним оболонок.)

    • Якщо необхідно використовувати якісь настройки (наприклад, PATH) в кожному примірнику командної оболонки (незалежно від режиму), робите ці настройки в

    /.bashrc і використовуйте source. щоб запускати сценарії з

    /.bash_profile.
  • Якщо є облікові записи на кількох комп'ютерах (і домашній каталог копіюється через Network File System [NFS]), то використовуйте rsync, щоб зберігати файли автозавантаження використовуваної командної оболонки по мережі на всі комп'ютери.
  • "Якщо настройки командної оболонки повинні залежати від комп'ютера, скажімо, спеціальне значення PATH для системи, що має спеціалізовані додатки, - збережіть ці налаштування в окремому файлі і використовуйте команду source для завантаження цього файлу. Якщо управління файлами виконується за допомогою rsync. Виключіть цей спеціалізований комп'ютер зі списку копіювання.

    Звичайно, можна також створити глобальний сценарій і використовувати перевірку глобальної змінної HOSTNAME для вибору відповідних налаштувань. (HOSTNAME встановлюється автоматично командною оболонкою та включає в себе повне ім'я комп'ютера). Як приклад нижче представлений спосіб установки налаштувань в залежності від імені комп'ютера:

    У цьому прикладі використовується оператор switch для вибору значень змінної $ HOSTNAME з чотирьох можливих значень: lab.area51.org, alien.area51.org, шаблону, з яким задовольняє будь-яке ім'я, що починається рядком saucer * (ім'я комп'ютера: скажімо, saucer-mars буде задовольняти цим шаблоном, а ім'я sauce.tomato.org - немає) і всі інші імена. Тут в разі командної оболонки Bash, зірочка (*) інтерпретується як оператор оболонки, а не оператор регулярного виразу. Коли вибір зроблений на користь одного з перерахованих варіантів, змінні оточення не започатковано відповідно до обраного варіанту. На відміну від операторів switch в деяких інших мовах програмування в Bash будуть виконані оператори тільки одного з варіантів, перерахованих в case.

    Нарешті, подивимося файли автозавантаження, створені іншими користувачами, щоб знайти натхнення і зберегти свої сили. (Деякі користувачі не дають доступ до цих файлів і своїм домашнім каталогом, але хто ж заважає зробити перевірку?). Може, у Джо встановлено прикольне і корисне запрошення командного рядка? Дізнайся, як зробити таке ж. Може, у Жаннет налаштовані додаткові "гарячі" клавіші або є гарна колекція змінних оточення, які допомагають скористатися спеціальними особливостями яких-небудь утиліт? Дізнайтеся у неї її рецепти. Краще джерело ідей і коду приходить від досвідчених практиків командного рядка.

    Налаштування командної оболонки

    Можливості по налаштуванню командної оболонки надзвичайно широкі, і якщо зберегти їх в файл автозавантаження, то ними можна скористатися повторно. Використовуйте rsync або схожий інструмент, щоб передавати настройки на інші машини.

    На цьому урок закінчено.

    Схожі статті