105.1 Урок 1
Сертифікат: |
LPIC-1 |
---|---|
Версія: |
5.0 |
Розділ: |
105 Оболонки та сценарії оболонки |
Тема: |
105.1 |
Урок: |
1 з 3 |
Вступ
Оболонка, мабуть, є найпотужнішим інструментом у системі Linux і може бути визначена як інтерфейс між користувачем і ядром операційної системи. Вона інтерпретує команди, введені користувачем. Тому всі системні адміністратори повинні володіти навичками використання оболонки. Безсумнівно, оболонка Bourne Again Shell (Bash) є де-факто оболонкою для переважної більшості дистрибутивів Linux.
Після запуску перше, що робить Bash або будь-яка інша оболонка, це виконує серію сценаріїв запуску. Ці сценарії налаштовують середовище сеансу. Існують як системні, так і спеціальні сценарії. Ми можемо розмістити наші особисті вподобання або налаштування, які найкраще відповідають потребам наших користувачів, у цих сценаріях у формі змінних, псевдонімів і функцій.
Точна серія файлів запуску залежить від дуже важливого параметра: типу оболонки. Давайте розглянемо різні оболонки, які існують.
Типи оболонок: інтерактивні та неінтерактивні, оболонки з входом та оболонки без входу
Для початку давайте роз’яснимо поняття інтерактивність і вхід в контексті оболонок:
- Інтерактивні/неінтерактивні оболонки
-
Цей вид оболонки відноситься до взаємодії, яка відбувається між користувачем і оболонкою: користувач забезпечує введення команди в терміналі за допомогою клавіатури; оболонка забезпечує виведення, друкуючи повідомлення на екрані.
- Оболонки з входом/без входу
-
Цей вид оболонки відноситься до події, коли користувач отримує доступ до комп’ютерної системи, надаючи свої облікові дані, такі як ім’я користувача та пароль.
Як інтерактивні, так і неінтерактивні оболонки можуть потребувати входу в систему або не потребувати, і будь-яка можлива комбінація цих типів має своє конкретне використання.
Інтерактивні оболонки з входом виконуються, коли користувачі входять до системи, і вони використовуються для налаштування конфігурацій користувачів відповідно до їхніх потреб. Прикладом цього типу оболонки може бути група користувачів, що належать до одного відділу, яким потрібен певний набір змінних у їхніх сесіях.
Інтерактивними оболонками без входу назвемо будь-які інші оболонки, відкриті користувачем після входу в систему. Користувачі використовують ці оболонки під час сеансів для виконання завдань обслуговування та адміністративних завдань, таких як встановлення змінних, часу, копіювання файлів, написання сценаріїв тощо.
З іншого боку, неінтерактивні оболонки не потребують жодної взаємодії з людиною. Таким чином, ці оболонки не запитують у користувача вхідні дані, а їх вихідні дані - якщо такі є - у більшості випадків записуються до журналу.
Неінтерактивні оболонки з входом використовуються досить рідко та непрактичні. Їх майже не використовують, і ми будемо коментувати їх лише заради розуміння поведінки оболонки. Деякі дивні приклади включають примусовий запуск сценарію з оболонки з входом за допомогою /bin/bash --login <some_script>
або передавання стандартного виводу (stdout) команди до стандартного входу (stdin) при ssh-з’єднанні:
<some_command> | ssh <some_user>@<some_server>
Що стосується неінтерактивної оболонки без входу, тут немає ні взаємодії, ні входу від імені користувача, тому ми маємо на увазі використання автоматизованих сценаріїв. Ці сценарії здебільшого використовуються для виконання завдань адміністрування та обслуговування, які повторюються, наприклад, включених в cronjobs. У таких випадках bash
не читає файли запуску.
Відкриття терміналу
Коли ми перебуваємо в середовищі робочого столу, ми можемо або відкрити термінальну програму, або перейти до однієї з системних консолей. Таким чином, нова оболонка є або оболонкою pts
, коли її відкривають із емулятора терміналу в графічному інтерфейсі користувача, або оболонкою tty
, якщо її запускають із системної консолі. У першому випадку ми маємо справу не з терміналом, а з емулятором терміналу. Як частина графічних сеансів емулятори терміналів, такі як gnome-terminal або konsole, мають багато функцій та зручні для користувача порівняно з терміналами з текстовим інтерфейсом. Прикладом менш багатофункціональних емуляторів терміналу є XTerm і sakura.
Використовуючи комбінації Ctrl+Alt+F1-F6, ми можемо перейти до входу в консоль, яка відкриває інтерактивну текстову оболонку входу. Ctrl+Alt+F7 поверне сеанс назад до робочого столу.
Note
|
|
Запуск оболонок за допомогою bash
Після входу введіть bash
у терміналі, щоб відкрити нову оболонку. Технічно ця оболонка є дочірнім процесом поточної оболонки.
Під час запуску дочірнього процесу bash ми можемо вказати різні опції, щоб визначити тип оболонки, яку ми хочемо запустити. Ось кілька важливих параметрів виклику bash:
bash -l
абоbash --login
-
викличе оболонку входу.
bash -i
-
викличе інтерактивну оболонку.
bash --noprofile
-
з оболонками з входом ігноруватиме як загальносистемний файл запуску
/etc/profile
, так і файли запуску~/.bash_profile
,~/.bash_login
і~/.profile
на рівні користувача. bash --norc
-
для оболонок з входом ігноруватиме як загальносистемний файл запуску
/etc/profile
, так і файли запуску~/.bash_profile
,~/.bash_login
і~/.profile
на рівні користувача. bash --rcfile <file>
-
для інтерактивних оболонок прийматиме
<file>
як файл запуску, ігноруючи системний/etc/bash.bashrc
і~/.bashrc
на рівні користувача.
Нижче ми обговоримо різні файли запуску.
Запуск оболонок за допомогою su
і sudo
Завдяки використанню цих двох подібних програм ми можемо отримати певні типи оболонок:
su
-
Змініть ідентифікатор користувача або станьте суперкористувачем (
root
). За допомогою цієї команди ми можемо викликати оболонки з входом та без входу:-
su - user2
,su -l user2
абоsu --login user2
запустить інтерактивну оболонку входу від іменіuser2
. -
su user2
запустить інтерактивну оболонку без входу від іменіuser2
. -
su - root
абоsu -
запустить інтерактивну оболонку входу якroot
. -
su root
абоsu
запустить інтерактивну оболонку без входу якroot
.
-
sudo
-
Виконує команди від імені іншого користувача (включаючи суперкористувача). Оскільки ця команда в основному використовується для тимчасового отримання привілеїв root, користувач, який її використовує, має бути у файлі
sudoers
. Щоб додати користувачів доsudoers
, нам потрібно статиroot
, а потім виконати команду:root@debian:~# usermod -aG sudo user2
Подібно до
su
,sudo
дозволяє нам викликати оболонки з входом та без входу:-
sudo su - user2
,sudo su -l user2
абоsudo su --login user2
запустить інтерактивну оболонку входу від іменіuser2
. -
sudo su user2
запустить інтерактивну оболонку без входу від іменіuser2
. -
sudo -u user2 -s
запустить інтерактивну оболонку без входу від іменіuser2
. -
sudo su - root
абоsudo su -
запустить інтерактивну оболонку входу якroot
. -
sudo -i
запустить інтерактивну оболонку входу якroot
. -
sudo -i <some_command>
запустить інтерактивну оболонку входу якroot
, запустить команду та повернеться до вихідного користувача. -
sudo su root
абоsudo su
запустить інтерактивну оболонку без входу якroot
. -
sudo -s
абоsudo -u root -s
запустить оболонку без входу якroot
.
-
Використовуючи su
або sudo
, важливо враховувати наш окремий сценарій запуску нової оболонки: чи потрібне нам середовище цільового користувача чи ні? Якщо так, ми б використали параметри, які викликають оболонки входу; якщо ні, то ті, які викликають оболонки без входу в систему.
Який тип оболонки запущено?
Щоб дізнатися, в якому типу оболонки ми працюємо, ми можемо ввести echo $0
у термінал і отримати наступний результат:
- Інтерактивний вхід
-
-bash
або-su
- Інтерактивний без входу
-
bash
або/bin/bash
- Неінтерактивний без входу (скрипти)
-
<назва_скрипту>
Скільки у нас оболонок?
Щоб побачити, скільки оболонок bash
у нас запущено та працює в системі, ми можемо використати команду ps aux | grep bash
:
user2@debian:~$ ps aux | grep bash user2 5270 0.1 0.1 25532 5664 pts/0 Ss 23:03 0:00 bash user2 5411 0.3 0.1 25608 5268 tty1 S+ 23:03 0:00 -bash user2 5452 0.0 0.0 16760 940 pts/0 S+ 23:04 0:00 grep --color=auto bash
user2
у debian
увійшов до сеансу GUI (або X Window System) і відкрив gnome-terminal, потім він натиснув Ctrl+Alt+F1, щоб перейти до сеансу терміналу tty
. Нарешті він повернувся до сеансу GUI, натиснувши Ctrl+Alt+F7 і ввівши команду ps aux | grep bash
. Таким чином, результат показує інтерактивну оболонку без входу через емулятор терміналу (pts/0
) та інтерактивну оболонку з входом через відповідний текстовий термінал (tty1
). Зауважте також, що останнє поле кожного рядка (команди) має значення bash
для першого та -bash
для останнього.
Звідки оболонки отримують свою конфігурацію: файли запуску
Що ж, тепер, коли ми знаємо типи оболонок, які ми можемо знайти в системі Linux, настав час побачити, які файли запуску запускаються відповідною оболонкою. Зауважте, що загальносистемні або глобальні сценарії розміщуються в каталозі /etc/
, тоді як локальні або сценарії користувача знаходяться в його домашньому каталозі (~
). Крім того, якщо шукати більше ніж один файл, після того, як один буде знайдено та запущено, інші ігноруватимуться. Досліджуйте та вивчайте ці файли самостійно за допомогою свого улюбленого текстового редактора або ввівши less <startup_file>
.
Note
|
Файли запуску можна розділити на спеціальні Bash-файли (обмежені лише конфігураціями та командами bash) і загальні (що стосуються більшості оболонок). |
Інтерактивна оболонка входу
Глобальний рівень
/etc/profile
-
Це загальносистемний файл
.profile
для оболонки Bourne і сумісних з Bourne оболонок (включно зbash
). За допомогою серії операторів if цей файл встановлює ряд змінних, таких як PATH і PS1 відповідно, а також вихідні коди (якщо вони існують) як у файлі /etc/bash.bashrc, так і в каталозі/etc/profile.d
. /etc/profile.d/*
-
Цей каталог може містити сценарії, які виконує
/etc/profile
.
Локальний рівень
~/.bash_profile
-
Цей специфічний файл Bash використовується для налаштування середовища користувача. Його також можна використовувати як джерело для
~/.bash_login
і~/.profile
. ~/.bash_login
-
Цей специфічний для Bash файл буде виконано, лише якщо немає файлу
~/.bash_profile
. Назва передбачає, що його слід використовувати для запуску команд, необхідних під час входу. ~/.profile
-
Цей файл не є специфічним для Bash і використовується лише якщо не існує ні
~/.bash_profile
, ні~/.bash_login
— що зазвичай і відбувається. Таким чином, основна мета~/.profile
полягає в тому, щоб перевірити, чи запущена оболонка Bash, і, якщо так, знайти джерело~/.bashrc
, якщо воно існує. Зазвичай він встановлює змінну PATH так, щоб вона містила приватний каталог користувача ~/bin, якщо він існує. ~/.bash_logout
-
Якщо цей специфічний файл Bash існує, він виконує деякі операції очищення під час виходу з оболонки. Це може бути зручно при віддалених сесіях.
Дослідження файлів конфігурації оболонки інтерактивного входу
Давайте покажемо деякі з цих файлів у дії, змінивши /etc/profile
і /home/user2/.profile
. Ми додамо до кожного рядок, який нагадуватиме про файл, який виконується:
root@debian:~# echo 'echo Hello from /etc/profile' >> /etc/profile root@debian:~# echo 'echo Hello from ~/.profile' >> ~/.profile
Note
|
Два оператори перенаправлення |
Таким чином, за результатами відповідних команд echo
ми дізнаємось, коли кожен із цих файлів буде прочитано та виконано. Щоб перевірити це, давайте подивимося, що відбувається, коли user2
входить в систему через ssh
з іншого комп’ютера:
user2@debian:~$ ssh user2@192.168.1.6 user2@192.168.1.6's password: Linux debian 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Last login: Tue Nov 27 19:57:19 2018 from 192.168.1.10 Hello from /etc/profile Hello from /home/user2/.profile
Як показують останні два рядки, команди спрацювали. Також зверніть увагу на три речі:
-
Глобальний файл був запущений спочатку.
-
У домашньому каталозі
user2
не було файлів.bash_profile
або.bash_login
. -
Тильда (
~
) розширена до абсолютного шляху до файлу (/home/user2/.profile
).
Інтерактивна оболонка без входу в систему
Глобальний рівень
/etc/bash.bashrc
-
Це загальносистемний файл
.bashrc
для інтерактивних оболонокbash
. Під час виконанняbash
переконується, що він виконується в інтерактивному режимі, перевіряє розмір вікна після кожної команди (оновлюючи значенняLINES
іCOLUMNS
, якщо необхідно) і встановлює деякі змінні.
Локальний рівень
~/.bashrc
-
На додаток до виконання завдань, подібних до тих, що описані для
/etc/bash.bashrc
на рівні користувача (наприклад, перевірка розміру вікна або виконання в інтерактивному режимі), цей специфічний файл Bash зазвичай встановлює деякі змінні історії та джерела~ /.bash_aliases
, якщо він існує. Окрім цього, цей файл зазвичай використовується для зберігання певних псевдонімів і функцій користувачів.Крім того, варто зауважити, що
~/.bashrc
зчитується, якщоbash
виявляє, що його<stdin>
є мережевим підключенням (як це було у випадку з підключенням Secure Shell (SSH) у прикладі вище) .
Дослідження інтерактивних файлів конфігурації оболонки без входу в систему
Давайте тепер змінимо /etc/bash.bashrc
і /home/user2/.bashrc
:
root@debian:~# echo 'echo Hello from /etc/bash.bashrc' >> /etc/bash.bashrc root@debian:~# echo 'echo Hello from ~/.bashrc' >> ~/.bashrc
І ось що відбувається, коли user2
запускає нову оболонку:
user2@debian:~$ bash Hello from /etc/bash.bashrc Hello from /home/user2/.bashrc
Знову два файли були прочитані та виконані.
Warning
|
Пам’ятайте, що при запуску файлів локальні файли мають пріоритет над глобальними і запускаються першими. |
Неінтерактивна оболонка входу
Неінтерактивна оболонка з параметрами -l
або --login
змушена вести себе як оболонка входу, тому файли запуску, які будуть запущені, будуть такими самими, як файли для інтерактивних оболонок входу.
Щоб перевірити це, давайте напишемо простий сценарій і зробимо його виконуваним. Ми не будемо включати жодних shebangs, оскільки ми будемо викликати виконуваний файл_bash (/bin/bash
з опцією входу) з командного рядка.
-
Ми створюємо сценарій
test.sh
, що містить рядокecho 'Hello from a script'
, щоб переконатися, що сценарій працює успішно:user2@debian:~$ echo "echo 'Hello from a script'" > test.sh
-
Ми робимо наш сценарій виконуваним:
user2@debian:~$ chmod +x ./test.sh
-
Нарешті, ми викликаємо
bash
з опцією-l
, щоб запустити сценарій:user2@debian:~$ bash -l ./test.sh Hello from /etc/profile Hello from /home/user2/.profile Hello from a script
Це працює! Перед запуском сценарію відбувся вхід і були виконані
/etc/profile
і~/.profile
.
Note
|
Ми дізнаємось про shebangs та всі інші аспекти сценаріїв оболонки в наступних уроках. |
Тепер маємо стандартний вихід (stdout) команди echo
у стандартному вході (stdin) з’єднання ssh
за допомогою каналу (|
):
user2@debian:~$ echo "Hello-from-a-noninteractive-login-shell" | ssh user2@192.168.1.6 Pseudo-terminal will not be allocated because stdin is not a terminal. user2@192.168.1.6's password: Linux debian 4.9.0-8-amd64 #1 SMP Debian 4.9.130-2 (2018-10-27) x86_64 The programs included with the Debian GNU/Linux system are free software; the exact distribution terms for each program are described in the individual files in /usr/share/doc/*/copyright. Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent permitted by applicable law. Hello from /etc/profile Hello from /home/user2/.profile -bash: line 1: Hello-from-a-noninteractive-login-shell: command not found
Знову виконуються /etc/profile
і ~/.profile
. Окрім цього, перший і останній рядки виведення досить інформативні щодо поведінки оболонки.
Неінтерактивна оболонка без входу
Сценарії не читають жоден із файлів, перелічених вище, але шукають змінну середовища BASH_ENV
, розширюють її значення, якщо потрібно, і використовують як назву файлу запуску для читання та виконання команд. Ми дізнаємося більше про змінні середовища в наступному уроці.
Як згадувалося вище, зазвичай /etc/profile
і ~/.profile
гарантують, що і /etc/bash.bashrc
, і ~/.bashrc
виконуються після успішного входу. Виведення наступної команди показує це:
root@debian:~# su - user2 Hello from /etc/bash.bashrc Hello from /etc/profile Hello from /home/user2/.bashrc Hello from /home/user2/.profile
Пам’ятаючи про рядки, які ми раніше додали до сценаріїв запуску – ,і викликаючи інтерактивну оболонку входу на рівні користувача за допомогою su - user2
, чотири рядки виведення можна пояснити наступним чином:
-
Hello from /etc/bash.bashrc
означає, що/etc/profile
отримав дані файлу/etc/bash.bashrc
. -
Hello from /etc/profile
означає, що/etc/profile
повністю прочитано та виконано. -
Hello from /home/user2/.bashrc
означає, що~/.profile
отримав дані файлу~/.bashrc
. -
Hello from /home/user2/.profile
означає, що~/.profile
повністю прочитано та виконано.
Зауважте, що за допомогою su - <ім’я користувача>
(також su -l <ім’я користувача>
і su --login <ім’я користувача>
) ми гарантуємо виклик оболонки входу, тоді як su <ім’я користувача>
лише викличе /etc/bash.bashrc
і ~/.bashrc
.
Sourcing-файли
У попередніх розділах ми обговорювали, що деякі сценарії запуску включають або виконують інші сценарії. Цей механізм називається «sourcing» і пояснюється в цьому розділі.
Sourcing-файли з .
Крапка (.
) зазвичай міститься у файлах запуску.
У файлі .profile
нашого сервера Debian ми можемо знайти, наприклад, такий блок:
# include .bashrc if it exists if [ -f "$HOME/.bashrc" ]; then . "$HOME/.bashrc" fi
Ми вже бачили, як виконання одного сценарію може призвести до виконання іншого. Таким чином, оператор if гарантує, що файл $HOME/.bashrc — якщо він існує (-f
) — буде отримано (тобто прочитано та виконано) під час входу:
. "$HOME/.bashrc"
Note
|
Як ми дізнаємося в наступному уроці, |
Крім того, ми можемо використовувати .
щоразу, коли ми змінюємо файл запуску та хочемо зробити зміни дійсними без перезавантаження. Наприклад, ми можемо:
-
додати псевдонім до
~/.bashrc
:user2@debian:~$ echo "alias hi='echo We salute you.'" >> ~/.bashrc
Warning
|
Надсилаючи вихідні дані однієї команди у файл, не переплутайте додавання ( |
-
виведіть останній рядок
~/.bashrc
, щоб перевірити, що все пройшло добре:user2@debian:~$ tail -n 1 !$ tail -n 1 ~/.bashrc alias hi='echo We salute you.'
Note!$
розширюється до останнього аргументу з попередньої команди, у нашому випадку:~/.bashrc
. -
вкажіть джерело файла вручну:
user2@debian:~$ . ~/.bashrc
-
і викличте псевдонім, щоб довести, що він працює:
user2@debian:~$ hi We salute you.
Note
|
Зверніться до наступного уроку, щоб дізнатися про псевдоніми та змінні. |
Sourcing-файли з використанням source
Команда source
є синонімом .
. Отже, щоб отримати source ~/.bashrc
, ми також можемо зробити це наступним чином:
user2@debian:~$ source ~/.bashrc
Походження файлів запуску оболонки: SKEL
SKEL
— це змінна, значення якої є абсолютним шляхом до каталогу skel
. Цей каталог служить шаблоном для структури файлової системи домашніх каталогів користувачів. Він містить файли, які будуть успадковані будь-якими новими створеними обліковими записами користувачів (включаючи, звичайно, файли конфігурації для оболонок). SKEL
та інші пов’язані змінні зберігаються в /etc/adduser.conf
, який є файлом конфігурації для adduser
:
user2@debian:~$ grep SKEL /etc/adduser.conf # The SKEL variable specifies the directory containing "skeletal" user SKEL=/etc/skel # If SKEL_IGNORE_REGEX is set, adduser will ignore files matching this SKEL_IGNORE_REGEX="dpkg-(old|new|dist|save)"
SKEL
має значення /etc/skel
; таким чином, сценарії запуску, які налаштовують наші оболонки, містяться в ньому:
user2@debian:~$ ls -a /etc/skel/ . .. .bash_logout .bashrc .profile
Warning
|
Пам’ятайте, що файли, які починаються з |
Давайте тепер створимо каталог у /etc/skel
для всіх нових користувачів для зберігання їх особистих сценаріїв:
-
Як
root
ми переходимо до/etc/skel
:root@debian:~# cd /etc/skel/ root@debian:/etc/skel#
-
Виводимо його вміст:
root@debian:/etc/skel# ls -a . .. .bash_logout .bashrc .profile
-
Ми створюємо наш каталог і перевіряємо, чи все пройшло як очікувалося:
root@debian:/etc/skel# mkdir my_personal_scripts root@debian:/etc/skel# ls -a . .. .bash_logout .bashrc my_personal_scripts .profile
-
Тепер ми видаляємо
user2
разом з його каталогомhome
:root@debian:~# deluser --remove-home user2 Looking for files to backup/remove ... Removing files ... Removing user `user2' ... Warning: group `user2' has no more members. Done.
-
Ми знову додаємо
user2
, щоб отримати новий домашній каталог:root@debian:~# adduser user2 Adding user `user2' ... Adding new group `user2' (1001) ... Adding new user `user2' (1001) with group `user2' ... Creating home directory `/home/user2' ... Copying files from `/etc/skel' ... Enter new UNIX password: Retype new UNIX password: passwd: password updated successfully Changing the user information for user2 Enter the new value, or press ENTER for the default Full Name []: Room Number []: Work Phone []: Home Phone []: Other []: Is the information correct? [Y/n] y
-
Нарешті, ми входимо як
user2
і виводимо всі файли в/home/user2
, щоб побачити, чи все відбулося так, як очікувалося:root@debian:~# su - user2 user2@debian:~$ pwd /home/user2 user2@debian:~$ ls -a . .. .bash_history .bash_logout .bashrc my_personal_scripts .profile
Саме так, як очікувалось.
Вправи до посібника
-
Дослідіть, як було запущено оболонки у стовпці “Запуск оболонки здійснено…” і додайте необхідну інформацію:
Запуск оболонки здійснено… Інтерактивно? З входом? Результат echo $0
sudo ssh user2@machine2
Ctrl+Alt+F2
su - user2
gnome-terminal
Звичайний користувач використовує konsole для запуску екземпляру програми sakura
Скрипт
test.sh
містить командуecho $0
-
Напишіть команди
su
іsudo
, щоб запустити вказану оболонку:- Інтерактивна оболонка входу як
user2
-
su
:sudo
: - Інтерактивна оболонка входу як
root
-
su
:sudo
: - Інтерактивна оболонка без входу як
root
-
su
:sudo
: - Інтерактивна оболонка без входу як
user2
-
su
:sudo
:
- Інтерактивна оболонка входу як
-
Який файл запуску читається під час запуску оболонки зі стовпця “Тип оболонки”?
Тип оболонки /etc/profile
/etc/bash.bashrc
~/.profile
~/.bashrc
Інтерактивна оболонка входу як
user2
Інтерактивна оболонка входу як
root
Інтерактивна оболонка без входу як
root
Інтерактивна оболонка без входу як
user2
Дослідницькі вправи
-
У Bash ми можемо написати просту функцію
Hello world!
, включивши такий код до порожнього файлу:function hello() { echo "Hello world!" }
-
Що ми повинні зробити далі, щоб зробити функцію доступною для оболонки?
-
Щойно вона стане доступною для поточної оболонки, як її викликати?
-
Для автоматизації, у який файл ви б помістили функцію та її виклик, щоб вона виконувалася, коли
user2
відкриває термінал із сеансу X Window? Який це тип оболонки? -
У який файл ви б помістили функцію та її виклик, щоб вона запускалася, коли
root
запускає нову інтерактивну оболонку, незалежно від того, чи потребує вона вхід чи ні?
-
-
Подивіться на наступний базовий
bash
скриптHello world!
:#!/bin/bash #hello_world: a simple bash script to discuss interaction in scripts. echo "Hello world!"
-
Припустимо, ми робимо сценарій виконуваним і запускаємо його. Це буде інтерактивний сценарій? Чому?
-
Що робить сценарій інтерактивним?
-
-
Уявіть, що ви змінили значення деяких змінних у
~/.bashrc
і хочете, щоб ці зміни вступили в силу без перезавантаження. З вашого домашнього каталогу, як ви можете досягти цього двома різними способами? -
Джон щойно розпочав сеанс X Window на сервері Linux. Він відкриває емулятор терміналу, щоб виконати деякі адміністративні завдання, але, на диво, сеанс зависає, і йому потрібно відкрити текстову оболонку.
-
Як він може відкрити цю
tty
-оболонку? -
Які файли запуску будуть отримані?
-
-
Лінда є користувачем сервера Linux. Вона люб’язно просить адміністратора створити для неї файл
~/.bash_login
, щоб вона могла друкувати час і дату на екрані під час входу. Іншим користувачам подобається ця ідея, і вони наслідують її приклад. Адміністратору важко створити файл для всіх інших користувачів на сервері, тому він вирішує додати нову політику та створити~/.bash_login
для всіх потенційних нових користувачів. Як адміністратор може виконати це завдання?
Підсумки
На цьому уроці ми дізналися:
-
Оболонки встановлюють середовище користувача в системі Linux.
-
Bash — це оболонка номер один для всіх дистрибутивів GNU/Linux.
-
Перше завдання, яке виконує оболонка, це читання та виконання одного або кількох файлів запуску.
-
Концепції інтерактивності і входу стосовно оболонок.
-
Як запускати різні типи оболонок за допомогою
bash
,su
,sudo
і Ctrl+Alt+F1-F6. -
Як перевірити тип оболонки за допомогою
echo $0
. -
Локальні файли запуску
~/.bash_profile
,~/.profile
,~/.bash_login
,~/.bash_logout
і~/.bashrc
. -
Файли глобального запуску
/etc/profile
,/etc/profile.d/*
,/etc/bash.bashrc
. -
Локальні файли мають пріоритет над глобальними.
-
Як перенаправити вихід команди за допомогою
>
(перезапис) і>>
(додавання). -
Значення каталогу
skel
. -
Як отримати вихідні файли.
Команди, які використовуються в цьому уроці:
bash
-
Створює нову оболонку.
su
-
Створює нову оболонку.
sudo
-
Створює нову оболонку.
usermod
-
Змінює обліковий запис користувача.
echo
-
Відображає рядок тексту.
ps
-
Виводить перелік поточних процесів.
less
-
Відображає довгі файли по сторінках.
ssh
-
Запускає підключення Open SSH (віддалено).
chmod
-
Змінює біти властивостей файлу, наприклад робить його виконуваним.
grep
-
Виводить рядки, що відповідають шаблону.
ls
-
Відображає вміст каталогу.
cd
-
Змінює каталог.
mkdir
-
Створює каталог.
deluser
-
Видаляє користувача.
adduser
-
Додає нового користувача.
.
-
Джерело файлу.
source
-
Джерело файлу.
tail
-
Виводить останню частину файлів.
Відповіді до вправ посібника
-
Дослідіть, як було запущено оболонки у стовпці “Запуск оболонки здійснено…” і додайте необхідну інформацію:
Запуск оболонки здійснено… Інтерактивно? З входом? Результат echo $0
sudo ssh user2@machine2
Так
Так
-bash
Ctrl+Alt+F2
Так
Так
-bash
su - user2
Так
Так
-bash
gnome-terminal
Так
Ні
bash
Звичайний користувач використовує konsole для запуску екземпляру програми sakura
Так
Ні
/bin/bash
Скрипт
test.sh
містить командуecho $0
Ні
Ні
./test.sh
-
Напишіть команди
su
іsudo
, щоб запустити вказану оболонку:- Інтерактивна оболонка входу як
user2
su
-
su - user2
,su -l user2
orsu --login user2
sudo
-
sudo su - user2
,sudo su -l user2
orsudo su --login user2
- Інтерактивна оболонка входу як
root
su
-
su - root
orsu -
sudo
-
sudo su - root
,sudo su -
orsudo -i
- Інтерактивна оболонка без входу як
root
su
-
su root
orsu
sudo
-
sudo su root
,sudo su
,sudo -s
orsudo -u root -s
- Інтерактивна оболонка без входу як
user2
su
-
su user2
sudo
-
sudo su user2
orsudo -u user2 -s
- Інтерактивна оболонка входу як
-
Який файл запуску читається під час запуску оболонки в розділі “Тип оболонки”?
Тип оболонки /etc/profile
/etc/bash.bashrc
~/.profile
~/.bashrc
Інтерактивна оболонка входу як
user2
Так
Так
Так
Так
Інтерактивна оболонка входу як
root
Так
Так
Ні
Ні
Інтерактивна оболонка без входу як
root
Ні
Так
Ні
Ні
Інтерактивна оболонка без входу як
user2
Ні
Так
Ні
Так
Відповіді до дослідницьких вправ
-
У Bash ми можемо написати просту функцію
Hello world!
, включивши такий код до порожнього файлу:function hello() { echo "Hello world!" }
-
Що ми повинні зробити далі, щоб зробити функцію доступною для оболонки?
Щоб зробити функцію доступною для поточної оболонки, ми повинні виконати source для файлу, який її містить.
-
Щойно вона стане доступною для поточної оболонки, як її викликати?
Ми викличемо функцію, ввівши її назву в терміналі.
-
Для автоматизації, у який файл ви б помістили функцію та її виклик, щоб вона виконувалася, коли
user2
відкриває термінал із сеансу X Window? Який це тип оболонки?Найкращий файл для розміщення це
/home/user2/.bashrc
. Оболонка, що викликається, буде інтерактивною без входу. -
У який файл ви б помістили функцію та її виклик, щоб вона запускалася, коли
root
запускає нову інтерактивну оболонку, незалежно від того, чи потребує вона входу чи ні?У
/etc/bash.bashrc
, оскільки цей файл виконується для всіх інтерактивних оболонок - незалежно від того, з входом вони чи ні.
-
-
Подивіться на наступний базовий
bash
скриптHello world!
:#!/bin/bash #hello_world: a simple bash script to discuss interaction in scripts. echo "Hello world!"
-
Припустимо, ми робимо сценарій виконуваним і запускаємо його. Це буде інтерактивний сценарій? Чому?
Ні, оскільки немає взаємодії з людиною та команд, які вводить користувач.
-
Що робить сценарій інтерактивним?
Той факт, що він вимагає введення користувача.
-
-
Уявіть, що ви змінили значення деяких змінних у
~/.bashrc
і хочете, щоб ці зміни вступили в дію без перезавантаження. З вашого домашнього каталогу, як ви можете досягти цього двома різними способами?$ source .bashrc
або
$ . .bashrc
-
Джон щойно розпочав сеанс X Window на сервері Linux. Він відкриває емулятор терміналу, щоб виконати деякі адміністративні завдання, але, на диво, сеанс зависає, і йому потрібно відкрити текстову оболонку.
-
Як він може відкрити цю
tty
-оболонку?Він може зробити це, натиснувши Ctrl+Alt+F1-F6, щоб увійти в одну з шести оболонок tty.
-
Які файли запуску будуть отримані?
/etc/profile
/home/john/.profile
-
-
Лінда є користувачем сервера Linux. Вона люб’язно просить адміністратора створити для неї файл
~/.bash_login
, щоб вона могла друкувати час і дату на екрані під час входу. Іншим користувачам подобається ця ідея, і вони наслідують її приклад. Адміністратору важко створити файл для всіх інших користувачів на сервері, тому він вирішує додати нову політику та створити~/.bash_login
для всіх потенційних нових користувачів. Як адміністратор може виконати це завдання?Він може досягти цього, помістивши
.bash_login
до каталогу/etc/skel
.