Примітки для викладача

  • Навіщо ми вчимося користуватися терміналом?
    • Дозволяє користувачам автоматизувати повторювані завдання
    • Та зберігає маленькі кроки роботи з даними, які зазвичай не записують — щоб дослідження можна було повторити
  • Проблема
    • Запускати той самий процес для кількох зразків — це зайва робота
    • Ручна маніпуляція з файлами даних:
      • часто не відображається в документації
      • важка для відтворення
      • важко усунути несправності, переглянути або вдосконалити
  • Термінал
    • Робочі процеси можна автоматизувати за допомогою скриптів терміналу
    • Вбудовані команди дозволяють легко маніпулювати даними (наприклад, sort, grep тощо.)
    • Кожен крок може бути зафіксований у скрипті терміналу, що забезпечує відтворюваність та легке усунення несправностей

Підсумок


Багато хто ставить під сумнів, чи варто нам продовжувати навчати людей працювати з терміналом. Адже перейменувати тисячі файлів можна в Python, а серйозний аналіз даних можна зробити у IPython Notebook або R Studio. Тож навіщо навчатися роботі в терміналі?

Перша відповідь така: “Тому що багато інших речей залежать від цього.” Встановлення програмного забезпечення, налаштування редактора за замовчуванням та керування віддаленими комп’ютерами часто вимагають базового знайомства з командним терміналом та пов’язаними з ним поняттями, такими як стандартний ввід та вивід. Багато інструментів також використовують його термінологію (наприклад, магічні команди %ls та %cd в IPython).

Друга відповідь така: “Тому що це простий спосіб показати деякі фундаментальні ідеї про те, як користуватися комп’ютером.” Коли ми вчимо людей користуватися терміналом Unix, ми вчимо їх, що вони повинні змусити комп’ютер повторювати дії (за допомогою завершення клавішею табуляції, знаком !, за яким йде номер команди, та циклів “for”) замість того, щоб повторювати щось самому. Ми також вчимо їх брати речі, які, як виявилося, вони роблять часто, і зберігати їх для подальшого використання (за допомогою скриптів терміналу), давати речам розумні назви і писати невелику документацію (наприклад, коментар у верхній частині скрипта терміналу) щоб покращити життя свого майбутнього “Я”.

Третя відповідь така: “Тому що це дозволяє використовувати багато вузькоспеціалізованих інструментів та обчислювальних ресурсів, до яких дослідники не можуть отримати доступ інакше.” Знання терміналу дуже стає у пригоді — для віддаленого доступу до комп’ютерів, роботи з потужними обчислювальними системами та використання нових спеціалізованих інструментів у багатьох дисциплінах. Ми не навчаємо навичкам роботи з високопродуктивними обчислювальними системами або роботі в конкретних галузях, але закладаємо основу для подальшого розвитку цих навичок. Зокрема, розуміння синтаксису команд, їх опцій та довідкових систем допомагає використовувати спеціалізовані інструменти. А розуміння файлової системи (та способів навігації по ній) корисне для віддаленого доступу.

І нарешті, мабуть, найважливіше: навчання людей роботі з терміналом, ми вчимо їх думати про програмування з точки зору композиції функцій. У терміналі замість вкладених функцій використовуються конвеєри, але ідея та сама: “маленькі частини, нещільно з’єднані між собою”.

Цей матеріал можна викласти за три години — якщо в учнів на Windows не виникне таких проблем, як:

  • труднощі з визначенням розташування домашнього каталогу (особливо якщо вони використовують Cygwin);
  • невміння запустити звичайний текстовий редактор; та
  • відмова терміналу виконувати скрипти, які містять закінчення рядків DOS.

Підготовка до викладання


  • Використовуйте каталог data для вправ на семінарах та для прикладів кодування в реальному часі. Ви можете клонувати репозиторій shell-novice або скористатися кнопкою * Download ZIP* праворуч, щоб отримати весь репозиторій. Також тепер ми надаємо zip-файл каталогу data на Сторінці налаштування.

  • Вебсайт: до цього використовувалися різні практики.

    • Варіант 1: Ви можете дати учням посилання перед початком уроку, щоб вони могли стежити за матеріалом, наздоганяти та бачити вправи (особливо якщо ви дотримуєтеся змісту уроку без суттєвих змін).
    • Варіант 2: Не показуйте вебсайт під час уроку — він відволікає. Учні будуть читати замість того, щоб слухати, а зайве вікно заважає зосередитися.
    • У будь-якому випадку, обов’язково вкажіть на вебсайт як на довідковий ресурс після семінару.
  • Зміст: Якщо ви не маєте багато часу (4+ години), швидше за все, ви не встигнете пройти ВЕСЬ матеріал за одне заняття тривалістю пів дня. Заздалегідь вирішіть, що можна пропустити, а на чому варто зробити акцент тощо.

  • Вправи: Заздалегідь продумайте, як ви будете організовувати виконання вправ під час уроку. Як слухачі будуть бачити завдання (вебсайт, слайд, супровідні матеріали)? Чи хочете ви, щоб усі спробували виконати вправу, а потім ви покажете розв’язок? Або запропонуєте одному з учасників продемонструвати розв’язок? Чи поділите слухачів на групи та запропонуєте кожній групі виконати окрему вправу, а потім презентувати отримані рішення?

  • На ваш вибір, сторінку довідки можна надрукувати та роздати студентам для ознайомлення.

  • Подальша підготовка: Ви можете додавати власні приклади чи коментарі, але знайте, що це не обов’язково: усі поняття та команди можна викладати так, як зазначено на сторінках уроку. Якщо ви вважаєте, що в уроці чогось не вистачає, не соромтеся повідомити про проблему або створити запит на зміну матеріалу.

Нотатки для викладача


  • Чудовий онлайн-ресурс! http://explainshell.com/ аналізує будь-яку команду терміналу та показує пояснення до кожної її частини. Чудовим додатковим посібником може бути http://tldr.sh/ з короткими та дуже місткими інструкціями для команд терміналу. Це особливо корисно у Windows під час використання Git Bash, де man не може працювати.

  • Ще один чудовий онлайн-ресурс - це http://www.shellcheck.net, який перевірить скрипти оболонки (як завантажені, так і введені) на наявність розповсюджених помилок.

  • Програма для “розщеплення” вашої терміналу так, щоб останні команди залишалися в полі зору: https://github.com/rgaiacs/swc-shell-split-window.

  • Автодоповнення за допомогою Tab здається дрібницею — але це не так. Повторний запуск попередніх команд за допомогою !123 або !wc теж не дрібниця, так само як і символи підстановки та цикли for. Кожне з цих понять — нагода повторити головну ідею Software Carpentry: якщо комп’ютер може щось повторити, якийсь програміст уже придумав, як комп’ютеру це зробити.

  • Побудова конвеєра з чотирьох або п’яти етапів із подальшим збереженням у скрипті та викликом у циклі for є чудовою нагодою продемонструвати зв’язок концепції “сім плюс-мінус два” з програмуванням. Як тільки ми розібралися, як зробити щось відносно складне, ми робимо його придатним для повторного використання та даємо йому назву — щоб це займало один слот у робочій пам’яті, а не кілька. Це також чудова нагода поговорити про дослідницьке програмування. Замість того щоб одразу проєктувати програму, ми робимо кілька корисних речей, а потім вирішуємо, що варто виділити у функцію для повторного використання.

  • Якщо все йде згідно з планом, можна підкреслити, що розширення файлів допомагають комп’ютерам (і людям - читачам) зрозуміти вміст файлів і не є обов’язковою вимогою (коротко висвітлено в секції Навігація файлами та каталогами). Це можна зробити в секції Канали та фільтри шляхом демонстрації того, що ви можете перенаправити стандартний вивід у файл без розширення .txt (наприклад, lengths), і що отриманий файл залишається звичайним текстовим файлом. Наголосіть, що якщо двічі клацнути по такому файлі в графічному інтерфейсі, комп’ютер, ймовірно, запитає, що з ним робити.

  • Через брак часу нам доводиться пропускати багато важливих тем, зокрема дозволи на файли, керування завданнями та SSH. Якщо слухачі вже розуміють базовий матеріал, цей розділ можна розглянути, використовуючи онлайн-уроки як настанови. Ці обмеження також мають подальші наслідки:

  • Важко обговорювати #! (шебанг), не обговоривши попередньо дозволів, чого ми не робимо. Навіть якби ми обговорювали дозволи, ми, мабуть, все одно б не захотіли обговорювати #!, оскільки він доволі складний.

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

  • За замовчуванням у Git Bash ваше запрошення командного рядка може містити довгий рядок інформації. Щоб зменшити “шум” та отримати охайніше запрошення, введіть команду:

    BASH

    PS1='$ '
  • На машинах з Windows, якщо nano не було належним чином встановлено за допомогою Software Carpentry Windows Installer можна скористатися notepad як альтернативою. У цьому випадку буде використовуватися графічний інтерфейс і закінчення рядків обробляються інакше. Проте для цілей цього уроку notepad та nano можна використовувати майже як взаємозамінні.

  • На машинах з Windows виявляється, що наступні команди:

    BASH

    $ cd
    $ cd Desktop

    завжди відправлять користувача на робочий стіл (якщо тільки їхній комп’ютер не зберігає резервну копію за допомогою корпоративного OneDrive, див. наступний пункт). Попросіть слухачів створити там каталог для вправ, щоб можна було легко його знайти.

  • Якщо комп’ютер з Windows синхронізується з корпоративним OneDrive, графічний робочий стіл може зображатися з каталогу всередині OneDrive. Це означає, що його вміст не збігатиметься з вмістом ~/Desktop. Робочий стіл OneDrive можна знайти за допомогою однієї з наведених нижче команд (якщо точний формат назви організації невідомий, перегляньте вивід ls, щоб знайти потрібний каталог):

    BASH

    $ cd "~/OneDrive - Name Of Enterprise/Desktop"
    $ cd "C:/Users/Username/OneDrive - Name Of Enterprise/Desktop"

    Один зі способів визначити, чи використовує комп’ютер таку конфігурацію - це переглянути файли, каталоги або посилання на робочому столі. Зазвичай піктограма містить символ ярлика/стрілки, якщо це посилання. Якщо ж файл безпосередньо збережено в каталозі Desktop — зображається звичайна піктограма. Файли, які синхронізуються з OneDrive, містять додатковий символ, що вказує на стан синхронізації (зазвичай сині стрілки для “очікує синхронізації” або зелена галочка для “синхронізовано”).

  • Дотримуйтеся команд, сумісних з POSIX, як і в усіх навчальних матеріалах. Ваш термінал може підтримувати додаткові можливості за межами POSIX — особливо у стандартному bash macOS та емуляторах bash Windows. Наприклад, POSIX ls не має опції --ignore= або -I, а POSIX head приймає -n 10 або -10, але не довгу форму --lines=10.

Особливості для Windows


Встановлення Bash та доцільного набору команд Unix на Windows завжди супроводжується деякими клопотами та розчаруваннями. Будь ласка, порадьтеся з актуальними інструкціями щодо встановлення, і спробуйте виконати їх самостійно, перш ніж викладати у класі. Попередньо, ми розглядали такі варіанти:

  1. msysGit (також відомий як “Git Bash”),
  2. Cygwin,
  3. використання віртуальної машини, та
  4. підключення учнів до віддаленої Unix-машини (як правило, віртуальної машини в хмарі).

Cygwin був найкращим варіантом до середини 2013 року, але як тільки ми почали викладати Git, msysGit виявився кращим. Локальні та хмарні віртуальні машини добре підходять для технічно досвідчених слухачів і можуть скоротити час на встановлення та налаштування на початку семінару, але:

  1. вони погано працюють на малопотужних машинах,
  2. вони збивають з пантелику початківців (тому що такі прості речі, як копіювання та вставлення, працюють по-різному),
  3. слухачі залишають семінар без робочого середовища на обраній ними операційній системі,
  4. слухачі можуть не завантажити віртуальну машину перед початком семінару, або бездротовий зв’язок зникне (або стане перевантаженим) під час уроку.

Що б ви не використовували, будь ласка, перевірте це власноруч на комп’ютері з Windows до початку семінару: після вашого останнього семінару все могло змінитися без вашого відома. Також, будь ласка, користуйтеся нашим Software Carpentry Windows Installer.

Знайомство з терміналом


Навігація по файловій системі


Примітка для викладача

Ознайомлення та навігація з файловою системою у терміналі (про яку йдеться у розділі Навігація файлами та каталогами) можуть бути складними. Ви можете відкрити термінал та графічний провідник файлів поруч, щоб учні могли бачити вміст і структуру файлів, коли вони використовують термінал для навігації системою.



Робота з файлами та каталогами


Примітка для викладача

Початківці іноді не знають, як вийти з таких редакторів, як Vim, Emacs чи Nano. Закриття терміналу та відкриття нового вікна може бути незручним, оскільки учням доведеться знову переходити до потрібного каталогу. Для пом’якшення цієї проблеми ми радимо викладачам використовувати той самий текстовий редактор, що й учні під час семінарів (у більшості випадків Nano).



Канали та фільтри


Цикли


Скрипти командної оболонки


Пошук з командного рядка