OS 2015-2016

ФТ-101

calc
Арифметическое выражение передается как параметры командной строки или (в случае отсутствия параметров) вводится с клавиатуры.

Примеры запуска:
>calc /?
usage: calc.cmd [expression]
=============================
>calc 1 - 2
1 - 2 = -1
=============================
>calc 1 - 2 +
Wrong expression
=============================
>calc
Type your expression here:

helpgen
Сохранить в отдельные файлы справку по использованию команд, выводимых командой help. Внутренние команды поместить в папку in, внешние - в папку out

Примеры запуска:
> helpgen /?
Здесь выводится справка к хелпгену
> helpgen
Здесь работает сам helpgen

sleep
Реализовать cmd-скрипт, который в качестве параметра принимает количество секунд (допускается до 2 знаков после .) и завершает работу через это количество секунд. Подразумевается использование %time% или time

Примеры запуска:
>sleep.cmd 3600
>sleep.cmd /?
>sleep.cmd 1.52

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

Должны поддерживаться как команды с расширением, так и без (т.е. calc и calc.exe)
! Нельзя использовать конструкцию "~$PATH:"

Примеры запуска:
>which.cmd calc
C:\Windows\system32\calc.exe
>which which
...
>which /?
which command
...
>which qweqwe
Command not found

assocx
Вывести сведения о зарегистрированных действиях для заданного расширения файла и программах, выполняющих эти действия. Нельзя использовать assoc.

Примеры запуска:
> accocx.cmd /?
> accocx.cmd txt
> accocx.cmd .txt
open: C:\WINDOWS\system32\NOTEPAD.EXE %1
print: C:\WINDOWS\system32\NOTEPAD.EXE /p %1
printto: C:\WINDOWS\system32\notepad.exe /pt "%1" "%2" "%3" "%4"

>assocx *
Open with sublime text: C:\Program Files\Sublime Text 3\sublime_text.exe "%1"

(Все действия для файла произвольного типа)

tempfile_u
В заданном каталоге создать новый файл и вывести его имя. Каталог по умолчанию - текущий

Примеры запуска:
$tempfile.sh
fhreyofe-234.tmp

$tempfile.sh --help
tempfile.sh [dir]
...

$tempfile.sh ~
fskdf-34543.tmp

which_u
Написать аналог утилиты which.
!Текущий каталог приоритетнее имеющихся в $PATH

Примеры запуска:
$./which bash
/bin/bash

$./which --help
which
Which returns a pathname of the file which would be executed in the current environment...

ugroups_u
ugroups.sh

Построчно вывести группы, в которых состоит пользователь. Если групп нет, то ничего не выводить
(Использовать /etc/group)

$./ugroups.sh --help
...
...
$./ugroups.sh -h
...
...
$./ugroups.sh SergeyVladimirovich
root
os
scripts
xxx

dc_u (до 17.12)
dc
Сравнить каталоги dir0 и dir1. Примерный формат вывода:
==============
Общее:
1.txt
2.txt
==============
Есть в dir0, но отсутствует в dir1:
...
==============
Есть в dir1, но отсутствует в dir0:
...

hexdump_u
Написать аналог утилиты xxd на bash (вывод должен совпадать полностью).

Hint: научиться пользоваться read.

$ xxd Master_Foo_and_the_Ten_Thousand_Lines.txt 
0000000: 4d61 7374 6572 2046 6f6f 206f 6e63 6520 Master Foo once
0000010: 7361 6964 2074 6f20 6120 7669 7369 7469 said to a visiti
0000020: 6e67 2070 726f 6772 616d 6d65 723a 20e2 ng programmer: .
0000030: 809c 5468 6572 6520 6973 206d 6f72 6520 ..There is more
0000040: 556e 6978 2d6e 6174 7572 6520 696e 206f Unix-nature in o
0000050: 6e65 206c 696e 6520 6f66 2073 6865 6c6c ne line of shell
0000060: 2073 6372 6970 7420 7468 616e 2074 6865 script than the
0000070: 7265 2069 7320 696e 2074 656e 2074 686f re is in ten tho
0000080: 7573 616e 6420 6c69 6e65 7320 6f66 2043 usand lines of C
0000090: 2ee2 809d 0a0a 5468 6520 7072 6f67 7261 ......The progra
00000a0: 6d6d 6572 2c20 7768 6f20 7761 7320 7665 mmer, who was ve
00000b0: 7279 2070 726f 7564 206f 6620 6869 7320 ry proud of his
00000c0: 6d61 7374 6572 7920 6f66 2043 2c20 7361 mastery of C, sa
00000d0: 6964 3a20 e280 9c48 6f77 2063 616e 2074 id: ...How can t
00000e0: 6869 7320 6265 3f20 4320 6973 2074 6865 his be? C is the
00000f0: 206c 616e 6775 6167 6520 696e 2077 6869 language in whi
0000100: 6368 2074 6865 2076 6572 7920 6b65 726e ch the very kern
0000110: 656c 206f 6620 556e 6978 2069 7320 696d el of Unix is im
0000120: 706c 656d 656e 7465 6421 e280 9d0a 0a4d plemented!.....M
0000130: 6173 7465 7220 466f 6f20 7265 706c 6965 aster Foo replie
0000140: 643a 20e2 809c 5468 6174 2069 7320 736f d: ...That is so
0000150: 2e20 4e65 7665 7274 6865 6c65 7373 2c20 . Nevertheless,
0000160: 7468 6572 6520 6973 206d 6f72 6520 556e there is more Un
0000170: 6978 2d6e 6174 7572 6520 696e 206f 6e65 ix-nature in one
0000180: 206c 696e 6520 6f66 2073 6865 6c6c 2073 line of shell s
0000190: 6372 6970 7420 7468 616e 2074 6865 7265 cript than there
00001a0: 2069 7320 696e 2074 656e 2074 686f 7573 is in ten thous
00001b0: 616e 6420 6c69 6e65 7320 6f66 2043 2ee2 and lines of C..
00001c0: 809d 0a0a 5468 6520 7072 6f67 7261 6d6d ....The programm
00001d0: 6572 2067 7265 7720 6469 7374 7265 7373 er grew distress
00001e0: 6564 2e20 e280 9c42 7574 2074 6872 6f75 ed. ...But throu
00001f0: 6768 2074 6865 2043 206c 616e 6775 6167 gh the C languag
0000200: 6520 7765 2065 7870 6572 6965 6e63 6520 e we experience
0000210: 7468 6520 656e 6c69 6768 7465 6e6d 656e the enlightenmen
0000220: 7420 6f66 2074 6865 2050 6174 7269 6172 t of the Patriar
0000230: 6368 2052 6974 6368 6965 2120 5765 2062 ch Ritchie! We b
0000240: 6563 6f6d 6520 6173 206f 6e65 2077 6974 ecome as one wit
0000250: 6820 7468 6520 6f70 6572 6174 696e 6720 h the operating
0000260: 7379 7374 656d 2061 6e64 2074 6865 206d system and the m
0000270: 6163 6869 6e65 2c20 7265 6170 696e 6720 achine, reaping
0000280: 6d61 7463 686c 6573 7320 7065 7266 6f72 matchless perfor
0000290: 6d61 6e63 6521 e280 9d0a 0a4d 6173 7465 mance!.....Maste
00002a0: 7220 466f 6f20 7265 706c 6965 643a 20e2 r Foo replied: .
00002b0: 809c 416c 6c20 7468 6174 2079 6f75 2073 ..All that you s
00002c0: 6179 2069 7320 7472 7565 2e20 4275 7420 ay is true. But
00002d0: 7468 6572 6520 6973 2073 7469 6c6c 206d there is still m
00002e0: 6f72 6520 556e 6978 2d6e 6174 7572 6520 ore Unix-nature
00002f0: 696e 206f 6e65 206c 696e 6520 6f66 2073 in one line of s
0000300: 6865 6c6c 2073 6372 6970 7420 7468 616e hell script than
0000310: 2074 6865 7265 2069 7320 696e 2074 656e there is in ten
0000320: 2074 686f 7573 616e 6420 6c69 6e65 7320 thousand lines
0000330: 6f66 2043 2ee2 809d 0a0a 5468 6520 7072 of C......The pr
0000340: 6f67 7261 6d6d 6572 2073 636f 6666 6564 ogrammer scoffed
0000350: 2061 7420 4d61 7374 6572 2046 6f6f 2061 at Master Foo a
0000360: 6e64 2072 6f73 6520 746f 2064 6570 6172 nd rose to depar
0000370: 742e 2042 7574 204d 6173 7465 7220 466f t. But Master Fo
0000380: 6f20 6e6f 6464 6564 2074 6f20 6869 7320 o nodded to his
0000390: 7374 7564 656e 7420 4e75 6269 2c20 7768 student Nubi, wh
00003a0: 6f20 7772 6f74 6520 6120 6c69 6e65 206f o wrote a line o
00003b0: 6620 7368 656c 6c20 7363 7269 7074 206f f shell script o
00003c0: 6e20 6120 6e65 6172 6279 2077 6869 7465 n a nearby white
00003d0: 626f 6172 642c 2061 6e64 2073 6169 643a board, and said:
00003e0: 20e2 809c 4d61 7374 6572 2070 726f 6772 ...Master progr
00003f0: 616d 6d65 722c 2063 6f6e 7369 6465 7220 ammer, consider
0000400: 7468 6973 2070 6970 656c 696e 652e 2049 this pipeline. I
0000410: 6d70 6c65 6d65 6e74 6564 2069 6e20 7075 mplemented in pu
0000420: 7265 2043 2c20 776f 756c 6420 6974 206e re C, would it n
0000430: 6f74 2073 7061 6e20 7465 6e20 7468 6f75 ot span ten thou
0000440: 7361 6e64 206c 696e 6573 3fe2 809d 0a0a sand lines?.....
0000450: 5468 6520 7072 6f67 7261 6d6d 6572 206d The programmer m
0000460: 7574 7465 7265 6420 7468 726f 7567 6820 uttered through
0000470: 6869 7320 6265 6172 642c 2063 6f6e 7465 his beard, conte
0000480: 6d70 6c61 7469 6e67 2077 6861 7420 4e75 mplating what Nu
0000490: 6269 2068 6164 2077 7269 7474 656e 2e20 bi had written.
00004a0: 4669 6e61 6c6c 7920 6865 2061 6772 6565 Finally he agree
00004b0: 6420 7468 6174 2069 7420 7761 7320 736f d that it was so
00004c0: 2e0a 0ae2 809c 416e 6420 686f 7720 6d61 ......And how ma
00004d0: 6e79 2068 6f75 7273 2077 6f75 6c64 2079 ny hours would y
00004e0: 6f75 2072 6571 7569 7265 2074 6f20 696d ou require to im
00004f0: 706c 656d 656e 7420 616e 6420 6465 6275 plement and debu
0000500: 6720 7468 6174 2043 2070 726f 6772 616d g that C program
0000510: 3fe2 809d 2061 736b 6564 204e 7562 692e ?... asked Nubi.
0000520: 0a0a e280 9c4d 616e 792c e280 9d20 6164 .....Many,... ad
0000530: 6d69 7474 6564 2074 6865 2076 6973 6974 mitted the visit
0000540: 696e 6720 7072 6f67 7261 6d6d 6572 2e20 ing programmer.
0000550: e280 9c42 7574 206f 6e6c 7920 6120 666f ...But only a fo
0000560: 6f6c 2077 6f75 6c64 2073 7065 6e64 2074 ol would spend t
0000570: 6865 2074 696d 6520 746f 2064 6f20 7468 he time to do th
0000580: 6174 2077 6865 6e20 736f 206d 616e 7920 at when so many
0000590: 6d6f 7265 2077 6f72 7468 7920 7461 736b more worthy task
00005a0: 7320 6177 6169 7420 6869 6d2e e280 9d0a s await him.....
00005b0: 0ae2 809c 416e 6420 7768 6f20 6265 7474 ....And who bett
00005c0: 6572 2075 6e64 6572 7374 616e 6473 2074 er understands t
00005d0: 6865 2055 6e69 782d 6e61 7475 7265 3fe2 he Unix-nature?.
00005e0: 809d 204d 6173 7465 7220 466f 6f20 6173 .. Master Foo as
00005f0: 6b65 642e 20e2 809c 4973 2069 7420 6865 ked. ...Is it he
0000600: 2077 686f 2077 7269 7465 7320 7468 6520 who writes the
0000610: 7465 6e20 7468 6f75 7361 6e64 206c 696e ten thousand lin
0000620: 6573 2c20 6f72 2068 6520 7768 6f2c 2070 es, or he who, p
0000630: 6572 6365 6976 696e 6720 7468 6520 656d erceiving the em
0000640: 7074 696e 6573 7320 6f66 2074 6865 2074 ptiness of the t
0000650: 6173 6b2c 2067 6169 6e73 206d 6572 6974 ask, gains merit
0000660: 2062 7920 6e6f 7420 636f 6469 6e67 3fe2 by not coding?.
0000670: 809d 0a0a 5570 6f6e 2068 6561 7269 6e67 ....Upon hearing
0000680: 2074 6869 732c 2074 6865 2070 726f 6772 this, the progr
0000690: 616d 6d65 7220 7761 7320 656e 6c69 6768 ammer was enligh
00006a0: 7465 6e65 642e 0a tened..

fullsize_u
fullsize_u
Посчитать суммарный размер файлов, находящихся в папке и во всех вложенных.
Результат в байтах.

Нельзя использовать du и find

activity

КН-102

calc
Реализовать калькулятор на CMD.
В качестве аргументов передаётся арифметическое выражение, программа должна распечатать результат вычисления выражения.

Необходимо поддержать все бинарные и битовые операции.

helpgen
Сгенерировать help по всем командам, описанным в выводе команды help и разложить по отдельным файлам.

getip
Распечатать все IPv4 адреса компьютера

sleeptime
Реализовать команду sleep с использованием вычисления текущего времени.

Команде на вход передаётся число, строго меньшее чем 24*60*60, команда завершает свою работу не раньше чем через переданное число секунд

which
Вход: имя программы с расширением или без
Выход: все пути к программе + сообщение, что она внутренняя, если она таковой является

assocx

getup_unix
вывести все IP адреса машины, кроме, 127.0.0.1. Если таковых нет, то вывести строку "No public IP addresses"

Можно использовать только команды ip, ifconfig и grep, cut

rename_unix
Реализовать sh/bash скрипт, которому на вход даётся путь к папке. После выполнения скрипта для каждого файла находящиеся в указанной папке или в некоторой её подпапке должнен присутствовать файл:
1. если изначальный файл имел тип ELF, то файл с тем же именем и расширением .elf
2. если изначальный файл являлся скриптом bash или sh, то файл с тем же именем и расширением .sh

Forbidden: find

which_unix
Реализовать sh/bash скрипт, который на вход принимает имя команды, а на выходя сообщает
1. Есть ли такая внутренняя команда
2. Есть ли такая внешняя команда и список всех путей к ней

hexdump_unix
Реализовать bash/sh скрипт принимающий единственный параметр имя файла, вывод которого побайтового совпадает с выводом xxd запущенного с тем же единственным аргументом.

colorize_unix
Написать bash/sh скрипт colorize.sh
При запуске скрипт должен рисовать цветную рамку ровно по краям терминала.
При получение любого сигнала, скрипт должен писать его номер ровно по центру экрана.

Скрипт должен завершаться по нажатию enter

КН-101

calc
Арифметическое выражение передавать как параметр командной строки или (в случае отсутствия параметров) вводить с клавиатуры. Прятать системные ошибки, вместо них выводить свои. Разобраться с битовыми операциями.

Примеры запуска:
>calc /?
usage: calc.cmd [expression]
=============================
>calc 1 - 2
1 - 2 = -1
=============================
>calc 1 - 2 +
Wrong expression
=============================
>calc
Enter expression:
=============================

helpgen
Сохранить в отдельные файлы справку по использованию команд, выводимых командой help. Корректно работать с кодовыми страницами, после себя восстанавливать исходное состояние.

sleep
Программа должна уснуть на заданное количество секунд. Нельзя использовать команду ping.

which
Утилита, которая показывает какой файл должен выполнится, если я наберу команду, которую передаю в параметрах. Например,

> which.cmd calc
C:\WINDOWS\system32\calc.exe

Должны поддерживаться, команды с расширением и без (e.g. calc и calc.exe), учитываться, что файл может быть и в текущем каталоге.

assocx
Вывести сведения о зарегистрированных действиях для заданного расширения файла и программах, выполняющих эти действия. Нельзя использовать assoc.

Примеры запуска:
> accocx.cmd /?
> accocx.cmd txt
> accocx.cmd .txt
open: C:\WINDOWS\system32\NOTEPAD.EXE %1
print: C:\WINDOWS\system32\NOTEPAD.EXE /p %1
printto: C:\WINDOWS\system32\notepad.exe /pt "%1" "%2" "%3" "%4"

tmpfile_u
В текущем каталоге создать заданное количество новых файлов и вывести их имена. Учесть, что могу попросить сгенерировать количество файлов больше 2^16

which_u
Написать аналог утилиты which. Помимо PATH поиск осуществлять еще и в текущей директории

hexdump_u
Написать аналог утилиты xxd на bash. Вывод должен совпадать.

ПИ-201

helpgen
.cmd файл, который генерит help.txt в котором есть:
1. Оглавление (вывод команды help).
2. help по каждой команде.
3. Между хэлпом по каждой команде нужно выводить, какой-нибудь разделитель с именем команды.
Например, === FOR ===

getip
Вывести все ip адреса на машине. По одному в строке. Важно, чтобы в каждой строке был только один ip адрес и ничего больше.

sleep_time
Поспасть заданное количество секунд. Нельзя использовать команду ping.

tempfile
Создать в текущем каталоге файл с уникальным именем и вывести его на экран.

which
Утилита, которая показывает какой файл выполнится, если я наберу команду, которую передаю в параметрах. Например,

> which.cmd calc
C:WINDOWSsystem32calc.exe

Должны поддерживаться, команды с расшинием и без (e.g. calc и calc.exe), учитываться, что файл может быть и в текущм каталоге.

Нужно также учесть, что бывают внутренние команды. Например,
> which if
Internal command

calc
Арифметическое выражение передается как параметры командной строки или (в случае отсутствия параметров) вводится с клавиатуры.

Примеры запуска:
>calc /?
usage: calc.cmd [expression]
=============================
>calc 1 - 2
1 - 2 = -1
=============================
>calc 1 - 2 +
Wrong expression
=============================

assocx
Вывести сведения о зарегистрированных действиях для заданного расширения файла и программах, выполняющих эти действия. Нельзя использовать assoc.

Примеры запуска:
> accocx.cmd /?
> accocx.cmd txt
> accocx.cmd .txt
open: C:\WINDOWS\system32\NOTEPAD.EXE %1
print: C:\WINDOWS\system32\NOTEPAD.EXE /p %1
printto: C:\WINDOWS\system32\notepad.exe /pt "%1" "%2" "%3" "%4"

getip_u

which_u

hexdump
Написать аналог утилиты xxd на bash