Программирование в Linux — различия между версиями

Материал из Department of Theoretical and Applied Mechanics
Перейти к: навигация, поиск
(Новая страница: «Здесь будут размещены материалы курса «Программирование в Linux”.»)
 
(Задание 0)
 
(не показано 25 промежуточных версий 4 участников)
Строка 1: Строка 1:
Здесь будут размещены материалы курса «Программирование в Linux”.
+
Здесь будут размещены материалы курса
 +
 
 +
=== Bash-скрипты ===
 +
 
 +
==== Задание 0 ====
 +
Написать скрипт, генерирующий пароль (случайный набор символов) заданной длины. Минимальный набор разрешённых символов: буквы латинского алфавита, цифры.
 +
 
 +
==== Задание 1 ====
 +
Вариант 1.
 +
 
 +
Дан текстовый файл,содержащий лог компилятора g++ с описанием ошибок и предупреждений, выданных при компиляции. Написать скрипт, читающий данный текстовый файл и выводящий сообщения об ошибках в формате "Error in the file %имя файла%: line #%номер строки%, symbol #%номер столбца%".
 +
 
 +
Вариант 2.
 +
 
 +
Написать скрипт, принимающий в качестве аргумента адрес веб-страницы, сохраняющий выдачу этой страницы и выводящий в текстовый файл адреса всех картинок, указанных на странице в html-тегах <''img''>.
 +
 
 +
Вариант 3.
 +
 
 +
Написать скрипт, печатающий контур Российской Федерации в стандартный поток вывода терминального окна. Использовать псевдографику, доступную в кодировке ASCII. Размеры терминального окна считать стандартными.
 +
 
 +
Вариант 4.
 +
 
 +
Дан текстовый поток, где каждая строчка содержит два числа, разделённых пробелом. Написать скрипт на основе команды '''awk''', обрабатывающий этот поток и выводящий суммы чисел в строках.
 +
 
 +
==== Задание 2 ====
 +
Написать скрипт, принимающий 3 опциональных аргумента и производящий в соответсвии с указанными параметрами компиляцию исходного кода на Си++. Дополнительно указываются флаги ''-pedantic -std=c++11''.
 +
Список аргументов:
 +
# Режим компиляции: ''release'' или ''debug''. В режиме ''release'' дополнительно указываются флаги ''-w -O3''. В режиме ''debug'' дополнительно указываются флаги ''-Wall -Weffc++ -g -O0''. По умолчанию: ''release''.
 +
# Имя выходного файла. По умолчанию ''app.out''.
 +
# Имя компилятора. По умолчанию ''g++''.
 +
 
 +
==== Задание 3 ====
 +
Написать скрипт, принимающий в качестве аргументов названия двух файлов. Используя команду diff, скрипт должен выводить количество изменений, которые нужно сделать для получения из первого файла второй.
 +
 
 +
<div class="mw-collapsible mw-collapsed" style="width:100%" >
 +
=== Список изучаемых команд ===
 +
<div class="mw-collapsible-content">
 +
<syntaxhighlight lang="test" line start="1" enclose="div">
 +
alias
 +
apt-cache
 +
apt-get
 +
aptitude
 +
awk
 +
bash
 +
bc
 +
cat
 +
cd
 +
chmod
 +
chown
 +
clang
 +
clang++
 +
clang-format
 +
clear
 +
cron
 +
cp
 +
date
 +
diff
 +
dos2unix
 +
dpkg
 +
echo
 +
emacs
 +
exit
 +
expect
 +
find
 +
ftp
 +
g++
 +
gcc
 +
gedit
 +
gfortran
 +
git
 +
grep
 +
head
 +
help
 +
history
 +
ifconfig
 +
ip
 +
kate
 +
kill
 +
killall
 +
less
 +
ln
 +
ls
 +
lynx
 +
make
 +
man
 +
mc
 +
mcedit
 +
more
 +
mount
 +
mv
 +
nano
 +
open
 +
passwd
 +
perl
 +
ping
 +
ps
 +
pwd
 +
python
 +
sed
 +
seq
 +
sftp(+ put, get)
 +
sh
 +
shutdown
 +
sleep
 +
source
 +
spawn
 +
ssh
 +
su
 +
sudo
 +
svn
 +
tac
 +
tail
 +
time
 +
top
 +
touch
 +
tr
 +
traceroute
 +
unmount
 +
useradd
 +
vi(vim)
 +
wait
 +
watch
 +
wget
 +
whatis
 +
whereis
 +
whoami
 +
yum
 +
</syntaxhighlight>
 +
</div>
 +
</div>
 +
 
 +
==== Список ПО к установке ====
 +
 
 +
Список пакетов к установке с помощью apt-get:
 +
* vim
 +
* gcc
 +
* g++
 +
* python3
 +
* python-pip3
 +
* p7zip
 +
* make
 +
* binutils
 +
 
 +
Список библиотек к установке с помощью pip3:
 +
* numpy
 +
* matplotib
 +
 
 +
==== Список вопросов для подготовки ====
 +
# Идеалогия '''unix''', история '''linux''' и отличие от других ОС, структура директорий, различия пользовательских интерфейсов (''unix, linux, bsd, macos, windows, core, uname, cui, cli, gui, etc.'').
 +
# Основы работы в консоли (''sudo, useradd, passwd, su, date, time, bc, sleep, mount, top, kill, etc.'').
 +
# Всё про '''bash''', включая синтаксис, примеры, обработку текста (''sh, bash, stdin, stdout, grep, awk, sed, etc.'').
 +
# Установка и удаление приложений, пакетные менеджеры, поиск информации о пакетах (''dpkg, apt, aptitude, yum, apt-get, apt-cache, etc.'').
 +
# Интерпретаторы и интерпретируемые языки (''bash, python, perl, etc.'').
 +
# Компиляторы и компилируемые языки (''gcc, clang, c, c++, fortran, etc.'').
 +
# Регулярные выражение: описание, живые примеры, применение в коде (''regex, awk, python, perl, etc.'').
 +
# Резервное копирование, системы контроля версий, непрерывная интеграция (''diff, rsync, cron, git, svn, github, bitbucket, etc.'').
 +
# Настройка и автоматизация сборки (''env. variables, building flags, optimisation, scripts, configure, makefile, cmake, etc.'').
 +
# Настройка виртуальных машин, тестирование, оформление документации (''virtualbox, qemu, mingw, cygwin, catch2, doxygen, etc.'').
 +
# Микроконтроллеры (всё, что вспомните).
 +
# Удалённое управление, пакеты, сетевая модель '''OSI''', сетевые атаки (''ssh, ftp, sftp, ping, ifconfig, traceroute, nmap, injection, man in the middle, etc.'').
 +
 
 +
=== Литература ===
 +
* Тейнсли Д. Linux и Unix: программирование в shell: Киев: BHV, 2001. (3 экз.)
 +
* [http://tldp.org/LDP/abs/html/ Advanced Bash-Scripting Guide by Mendel Cooper]
 +
* [http://www.linux-ink.ru/static/Docs/Courses/adv-user-guide/adv-user-guide.pdf Садов О. Л. Основы ОС Linux/UNIX для пользователей]
 +
* [https://github.com/EbookFoundation/free-programming-books/blob/master/free-programming-books-ru.md#unix Открытые книги по Unix]
 +
 
 +
=== Материалы ===
 +
* [http://mech.spbstu.ru/images/5/51/UnixSHORT.pdf Вводная презентация]
 +
* [http://mech.spbstu.ru/images/6/6f/Linux191022.zip Конспект занятий C++]
 +
* [http://mech.spbstu.ru/images/2/27/Doxygen.zip Пример использования Doxygen] (zip)
 +
* [http://mech.spbstu.ru/images/c/cc/Catch.zip Пример использования Catch2] (zip)
 +
 
 +
=== Cсылки по темам занятий ===
 +
* [http://freesource.info/wiki/Stat'ja_Klassicheskijj_Unix_Way Особенности Unix-подхода]
 +
* [http://programmingexamples.wikidot.com/bash-scripting Синтаксис Bash]
 +
* [https://misc.flogisoft.com/bash/tip_colors_and_formatting Использование цвета в терминале]
 +
* [http://nuclear.mutantstargoat.com/articles/make/ Создание Makefile]
 +
* [https://www.cs.swarthmore.edu/~newhall/unixhelp/howto_makefiles.html Примеры Makefile]
 +
* [https://www.networkworld.com/article/2974753/linux/doing-math-with-awk.html Применение awk]
 +
* Применение grep: [https://www.thegeekstuff.com/2009/03/15-practical-unix-grep-command-examples 1], [https://www.thegeekstuff.com/2011/10/grep-or-and-not-operators/ 2]
 +
* [http://proiot.ru/blog/posts/2017/11/11/neinteraktivnyi-tekstovyi-redaktor-sed/ Применение sed]
 +
* [https://www.tecmint.com/difference-between-apt-and-aptitude/ Отличия aptitude и apt]
 +
* [https://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%82%D0%B5%D0%B2%D0%B0%D1%8F_%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C_OSI Сетевая модель OSI]

Текущая версия на 14:55, 18 ноября 2019

Здесь будут размещены материалы курса

Bash-скрипты[править]

Задание 0[править]

Написать скрипт, генерирующий пароль (случайный набор символов) заданной длины. Минимальный набор разрешённых символов: буквы латинского алфавита, цифры.

Задание 1[править]

Вариант 1.

Дан текстовый файл,содержащий лог компилятора g++ с описанием ошибок и предупреждений, выданных при компиляции. Написать скрипт, читающий данный текстовый файл и выводящий сообщения об ошибках в формате "Error in the file %имя файла%: line #%номер строки%, symbol #%номер столбца%".

Вариант 2.

Написать скрипт, принимающий в качестве аргумента адрес веб-страницы, сохраняющий выдачу этой страницы и выводящий в текстовый файл адреса всех картинок, указанных на странице в html-тегах <img>.

Вариант 3.

Написать скрипт, печатающий контур Российской Федерации в стандартный поток вывода терминального окна. Использовать псевдографику, доступную в кодировке ASCII. Размеры терминального окна считать стандартными.

Вариант 4.

Дан текстовый поток, где каждая строчка содержит два числа, разделённых пробелом. Написать скрипт на основе команды awk, обрабатывающий этот поток и выводящий суммы чисел в строках.

Задание 2[править]

Написать скрипт, принимающий 3 опциональных аргумента и производящий в соответсвии с указанными параметрами компиляцию исходного кода на Си++. Дополнительно указываются флаги -pedantic -std=c++11. Список аргументов:

  1. Режим компиляции: release или debug. В режиме release дополнительно указываются флаги -w -O3. В режиме debug дополнительно указываются флаги -Wall -Weffc++ -g -O0. По умолчанию: release.
  2. Имя выходного файла. По умолчанию app.out.
  3. Имя компилятора. По умолчанию g++.

Задание 3[править]

Написать скрипт, принимающий в качестве аргументов названия двух файлов. Используя команду diff, скрипт должен выводить количество изменений, которые нужно сделать для получения из первого файла второй.

Список изучаемых команд[править]

alias
apt-cache
apt-get
aptitude
awk
bash
bc
cat
cd
chmod
chown
clang
clang++
clang-format
clear
cron
cp
date
diff
dos2unix
dpkg
echo
emacs
exit
expect
find
ftp
g++
gcc
gedit
gfortran
git
grep
head
help
history
ifconfig
ip
kate
kill
killall
less
ln
ls
lynx
make
man
mc
mcedit
more
mount
mv
nano
open
passwd
perl
ping
ps
pwd
python
sed
seq
sftp(+ put, get)
sh
shutdown
sleep
source
spawn
ssh
su
sudo
svn
tac
tail
time
top
touch
tr
traceroute
unmount
useradd 
vi(vim)
wait
watch
wget
whatis
whereis
whoami
yum

Список ПО к установке[править]

Список пакетов к установке с помощью apt-get:

  • vim
  • gcc
  • g++
  • python3
  • python-pip3
  • p7zip
  • make
  • binutils

Список библиотек к установке с помощью pip3:

  • numpy
  • matplotib

Список вопросов для подготовки[править]

  1. Идеалогия unix, история linux и отличие от других ОС, структура директорий, различия пользовательских интерфейсов (unix, linux, bsd, macos, windows, core, uname, cui, cli, gui, etc.).
  2. Основы работы в консоли (sudo, useradd, passwd, su, date, time, bc, sleep, mount, top, kill, etc.).
  3. Всё про bash, включая синтаксис, примеры, обработку текста (sh, bash, stdin, stdout, grep, awk, sed, etc.).
  4. Установка и удаление приложений, пакетные менеджеры, поиск информации о пакетах (dpkg, apt, aptitude, yum, apt-get, apt-cache, etc.).
  5. Интерпретаторы и интерпретируемые языки (bash, python, perl, etc.).
  6. Компиляторы и компилируемые языки (gcc, clang, c, c++, fortran, etc.).
  7. Регулярные выражение: описание, живые примеры, применение в коде (regex, awk, python, perl, etc.).
  8. Резервное копирование, системы контроля версий, непрерывная интеграция (diff, rsync, cron, git, svn, github, bitbucket, etc.).
  9. Настройка и автоматизация сборки (env. variables, building flags, optimisation, scripts, configure, makefile, cmake, etc.).
  10. Настройка виртуальных машин, тестирование, оформление документации (virtualbox, qemu, mingw, cygwin, catch2, doxygen, etc.).
  11. Микроконтроллеры (всё, что вспомните).
  12. Удалённое управление, пакеты, сетевая модель OSI, сетевые атаки (ssh, ftp, sftp, ping, ifconfig, traceroute, nmap, injection, man in the middle, etc.).

Литература[править]

Материалы[править]

Cсылки по темам занятий[править]