1. неделя

First Steps with Shell

Основы, Unix, редактор ViM, компиляция и запуск программы

Тема лабораторной

Вы познакомитесь с основными правилами предмета. Изучите базовый рабочий процесс работы с удаленным сервером. Используйте редактор ViM для написания программы, которую вы скомпилируете.

Цели

  1. Ознакомиться с критериями оценки на предмете.
  2. Подготовить все нужное для работы на предмете.
  3. Попрактиковаться в создании исполнительного файла из исходного кода, написанного на языке C в среде редактора ViM.
  4. Изучить основы работы в командной строке.

Инструкции

Шаг 1: Правила

Прежде чем начать, обсудите с практикующим правила на предмете.

Шаг 2: Подключение на удаленный сервер

На этом этапе вы получите доступ к удаленному серверу Unix. Используя клиент ssh, подключитесь и опробуйте для начала свои первые команды.

Задача 2.1

Подготовьте свой университетский логин и пароль (через который вы входите в Mais).

Комментарий

Если вы не помните свой университетский логин или хотите изменить свой пароль, загляните: Институт компьютерных наук.

Задача 2.2

Войдите на zap.fei.tuke.sk с логином cvicenie и паролем zapzap.

  • Если вы работаете в Linux, войдите в систему, используя командную строку ssh cvicenie@zap.fei.tuke.sk или ssh -l cvicenie zap.fei.tuke.sk.
  • Если вы работаете на ОС Windows, войдите в систему, используя putty.

Комментарий

Когда вы вводите пароль, символы пароля не отображаются - вы вводите его вслепую.

Задача 2.3

Активируйте свою учетную запись пользователя на zap.fei.tuke.sk, используя свой университетский логин и пароль.

Сервер запросит у вас ваш университетский логин и пароль:

  • Входные данные - те же самые, что и для входа в Mais.
  • Когда вы успешно введете свой логин и пароль, вы активируете свою учетную запись на сервере, и вам нужно будет снова войти в систему - но уже с вашей новой учетной записью.
  • С этого момента вы будете использовать для входа в систему ваш университетский логин и пароль.

Работа с сервером будем выглядеть следующим образом: то, что вводит пользователь выделено жирным шрифтом (пароль подсвечивается звездочками):

login as: cvicenie

$$\   $$\ $$$$$$$\ $$$$$$\  ==========================================
$$ | $$  |$$  __$$\\_$$  _| Katedra pocitacov a informatiky
$$ |$$  / $$ |  $$ | $$ |   Fakulta elektrotechniky a informatiky
$$$$$  /  $$$$$$$  | $$ |   Technicka univerzita v Kosiciach
$$  $$<   $$  ____/  $$ |   ==========================================
$$ |\$$\  $$ |       $$ |   Department of Computers and Informatics
$$ | \$$\ $$ |     $$$$$$\  Faculty of Electrical Engineering and Informatics
\__|  \__|\__|     \______| Technical University of Kosice
======================================================================
UNAUTHORIZED ACCESS TO THIS NETWORK DEVICE IS PROHIBITED.
You must have explicit permission to access or configure this device.
All activities performed on this device are logged and violations of	
this policy will be prosecuted under all applicable	statutes plus
all applicable civil rules for damages.
======================================================================
Use your MAIS credentials to authenticate on your first login.	
Special characters allowed in password: ~ @ # _ ^ * % / . + : ; =	
Please, don't use diacritics or UNICODE characters in password !	
======================================================================
This server is primarily designed for use while attending Basics of	
algorhitmization and programming subject on KPI.
Course site : https://kurzy.kpi.fei.tuke.sk/zap/

cvicenie@zap.fei.tuke.sk's password:
Enter ldap login: ab123xy
Enter ldap password:
Vsetko v poriadku, prihlaste sa znova pod svojim ldap kontom
Connection to zap.fei.tuke.sk closed.

Предупреждение

Сеть Wi-Fi TUNET-guest не поддерживает соединение через ssh. Подключитесь через сеть eduroam. Больше тут.

Шаг 3: Первые команды

Задача 3.1

Если вы еще этого не сделали, войдите в систему zap.fei.tuke.sk с помощью логина и пароля или запустите виртуальную машину.

Успешный вход на удаленный сервер выглядит следующим образом:

login as: ab123xy

$$\   $$\ $$$$$$$\ $$$$$$\  ==========================================
$$ | $$  |$$  __$$\\_$$  _| Katedra pocitacov a informatiky
$$ |$$  / $$ |  $$ | $$ |   Fakulta elektrotechniky a informatiky
$$$$$  /  $$$$$$$  | $$ |   Technicka univerzita v Kosiciach
$$  $$<   $$  ____/  $$ |   ==========================================
$$ |\$$\  $$ |       $$ |   Department of Computers and Informatics
$$ | \$$\ $$ |     $$$$$$\  Faculty of Electrical Engineering and Informatics
\__|  \__|\__|     \______| Technical University of Kosice
======================================================================
UNAUTHORIZED ACCESS TO THIS NETWORK DEVICE IS PROHIBITED.
You must have explicit permission to access or configure this device.
All activities performed on this device are logged and violations of	
this policy will be prosecuted under all applicable	statutes plus
all applicable civil rules for damages.
======================================================================
Use your MAIS credentials to authenticate on your first login.	
Special characters allowed in password: ~ @ # _ ^ * % / . + : ; =	
Please, don't use diacritics or UNICODE characters in password !	
======================================================================
This server is primarily designed for use while attending Basics of	
algorhitmization and programming subject on KPI.
Course site : https://kurzy.kpi.fei.tuke.sk/zap/

ab123xy@zap.fei.tuke.sk's password:

ab123xy@zapfei:~$

Задача 3.2

Осмотритесь в домашнем каталоге. Узнайте, что находится в корневом каталоге и какое имя несет домашний каталог.

Вы можете использовать следующие команды:

  • ls выписать содержимое каталога
  • pwd выписать путь настоящего каталога
  • mkdir имя_каталога создаст новый каталог
  • cd имя_каталога изменит текущий каталог на другой (подкаталог)
  • rmdir имя_каталога удаляет каталог (для пустого каталога)
  • rm -r имя_каталога удаляет каталог (для непустого каталога)

В качестве аргументов для команд можете использовать специальные каталоги, например:

  • / главная директория
  • ~ домашний каталог
  • . текущий каталог
  • .. каталог выше

Задача 3.3

Учитесь работать с историей.

  • Никакую из команд не нужно вводить дважды! Несмотря на то, что так возможно не кажется на первый взгляд, работа в командной строке проста, быстра и интуитивна.
  • Нажмите стрелка вверх и стрелка вниз, чтобы просмотреть список последних команд, которые вы использовали. Вы можете вызвать предыдущую команду и изменить ее на другую.
  • Команда history содержит список всех последних использованных команд.

Задача 3.4

Как называлась та двухбуквенная команда на букву l? И какой был каталог, который был выше? Узнайте, как работать с именами команд и файлов.

  • TAB часто может вам подсказать и предложить варианты, которые у вас есть.
  • Введите начальную букву команды или файла и используйте TAB, чтобы добавить полное имя.
  • Например:. l + TAB предложит все команды, которые начинаются с l и предложит самый первый, cd /home/ + TAB перечислит все каталоги в /home и предложит первый. Повторное нажатие TAB предложит другой вариант.

Задача 3.5

Узнайте, как получить помощь в командной строке.

  • Каждая команда содержит встроенную справку.
  • Если в командной строке вы введёте man команда, откроется справка к команде, которая описывает работу команды и ее аргументы.
  • Чтобы выйти со страницы руководства, нажмите q.
  • Вы можете часто использовать аргумент --help или -? для отображения краткой справки.

Задача 3.6

Что делать, если вы в отчаянии и не знаете, что делать?

Вы можете использовать следующие процедуры восстановления:

  • Ctrl + C завершает команду, которую вы сейчас выполняете.
  • Ctrl + D завершает запись или выходит из системы.
  • Ctrl + Z оставит команду выполнятся в фоновом режиме.
  • fg 1 может вернуть команду из фонового режима.
  • Google может знать ответ на любой вопрос (также у вашего товарища или у практикующего).

Шаг 4: Директории и файлы

Большая часть работы над командной строкой состоит в манипулировании файлами и каталогами. Вы можете использовать следующие команды:

  • mkdir каталог создаст новый каталог
  • rmdir каталог удаляет каталог (для пустого каталога)
  • rm -r каталог удаляет каталог (для непустого каталога)

Каждая команда принимает имя каталога в качестве аргумента. Имейте в виду, что есть специальные имена для вашего домашнего каталога, текущего каталога и каталога выше.

Задача 4.1

Создайте каталог ~/labs, где вы сможете работать с упражнениями.

Хорошо, если ваша работа организована, чтобы проверить:

  • Проверьте наличие нового каталога с помощью ls и перейдите в новый каталог с помощью cd.
  • Проверьте текущий каталог с помощью pwd.

Задача 4.2

Для порядка в вашем каталоге labs создайте каталог, в котором вы сможете сохранять результаты упражнений на этом уроке.

  • В каталоге labs создайте каталог lab01 и войдите в него.
  • Не забывайте использовать историю и дополнение.
  • Убедитесь, что вы действительно находитесь в каталоге с помощью pwd.

Шаг 5: Текстовый редактор ViM и первая программа

Мы можем представить исходный код как рассказ на специальном языке. Текстовый редактор используется для создания и изменения текстовых файлов.

Задача 5.1

Запустите текстовый редактор ViM и создайте пустой файл hello.c.

vim hello.c

Задача 5.2

Загляните во встроенную справку и выйдите из редактора.

ViM Editor работает в разных режимах. Режим, который вы вошли после открытия редактора, - это командный режим, в котором вы вводите команды, нажимая клавиши. Поэтому не удивляйтесь, если он не ведет себя, как предполагаете.

  • Вы можете запустить интерактивный учебник с помощью :tutorial. Взгляните на учебник и опробуйте перемещение в тексте, используя hjklwb.
  • Используйте команду :help для отображения справки для введенной команды.
  • Например. :help h - помощь для h.
  • Выйдите из текстового редактора с помощью Shift + Z + Z или :q.

Задача 5.3

Напишите свой первый код, который выпишет на экран Hello world!

  • Перезапустите редактор и создайте hello.c.
  • Вы можете ввести режим ввода с помощью команды i или A (вставка в конец строки).
  • Вы всегда можете вернуться в командный режим, используя ESC.
  • Введите код в файл:
#include <stdio.h>

int main() {
    printf("Hello world!\n");
    return 0;
}

Комментарий

Мы настоятельно рекомендуем переписать этот текст, а не копировать его. Вам неоходимо работать с редактором, и важно знать о расположении специальных символов на клавиатуре (например, #).

Комментарий

Если вы потерялись при вводе и не знаете, в каком вы режиме редактора находитесь, нажмите ESC и снова перейдите в режим ввода с помощью i.

Комментарий

Сохранить файл с помощью :w. Сохранить файл и выход - :wq. Выйти из файла без сохранения :q!.

Предупреждение

Не используйте цифровую клавиатуру!

Предупреждение

Используйте английскую раскладку - легче писать специальные символы.

Шаг 6: Компиляция и запуск программы

Попробуйте скомпилировать и запустить первую программу на C.

Задача 6.1

Скомпилируйте вашу программу.

  • Сначала используйте ls и pwd, чтобы проверить текущий каталог и его содержимое. hello.c должен быть там.
  • С помощью cat вы можете выписать содержимое текстового файла.
  • Компиляция программы с помощью gcc:
gcc hello.c
  • Компилятор берет исходный код и переводит его в исполняемую форму.
  • Узнайте, как называется полученный исполняемый файл.

Задача 6.2

Если вы ошиблись при написании кода, компилятор выпишет сообщение об ошибке. Сообщение об ошибке состоит из номера строки, где находится ошибка, и описания ошибки. Попытайтесь понять сообщение, откройте исходный код, найдите ошибку и исправьте ее.

Задача 6.3

Скомпилируйте программу и назовите её.

  • Вы должны сообщить компилятору, как назвать исполняемый файл, используя аргумент -o.
  • Если ваш исходный код в порядке, скомпилируйте его выбрав исполнительному файлу подходящее имя (например, hello).
  • В Unix исполняемые файлы не различаются по расширению, поэтому имя будет без типичного расширения .exe:
gcc hello.c -o hello
  • Если компиляция прошла успешно, исполняемый файл hello был добавлен в каталог.
  • Запустите полученную программу с помощью команды:
./hello

Дополнительные задачи

Задача A.1

Редактируйте код и упростите процесс компиляции непосредственно в ViM Editor.

Отредактируйте исходный код, например, изменив текст для вывода на экран. Сохраните файл:

:w

Для работы с командной строкой не нужно выходить из VIM. В редакторе вы можете работать с командной строкой, используя :!. Скомпилируйте программу непосредственно из редактора в командном режиме:

:!gcc hello.c -o hello

В случае успешной компиляции вы можете запустить программу непосредственно из ViM. В редакторе вы можете работать с командной строкой, используя :!. В командном режиме введите:

:!ls

Выпишутся файлы текущего каталога. Чтобы запустить программу, введите:

:!./hello

Комментарий

Имейте в виду, что вы по-прежнему можете использовать историю и заполнить имена команд и файлов при нажатии двоеточия. Вам не нужно писать команду дважды.

Задача A.2

Ознакомьтесь Problem Set 0 для настройки виртуальной среды на вашем компьютере. Речь идет о работе под ОС Linux, которая содержит настройки, необходимые для успешного окончания этого предмета.

Задача A.3

Установите плагин для расширения возможностей редактора ViM для работы с GIT. Плагин можно найти по адресу https://github.com/tpope/vim-fugitive. Вам это пригодится, когда вы будете выполнять некоторые задания.

Задача A.4

Создайте свой собственный файл конфигурации ViM. Вы можете создать файл конфигурации в виде примера Файл конфигурации от Томаша или Файл конфигурации от Даниела.

Дополнительные источники

  1. Наше руководство по VIM
  2. ViM игра https://vim-adventures.com/
  3. Online ViM интерактивная обучалка http://www.openvim.com/
  4. Интерактивная обучалка: Команда :tutor
  5. ViM Quick Reference Card (.pdf)
  6. Файл конфигурации от Томаша
  7. Файл конфигурации от Даниела

Видео