OS 2012-2013

ФТ-101

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

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

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

!helpgen (int/ext)
Сохранить в отдельные файлы справку по использованию команд, выводимых командой help.

Файлы справки должны быть разделены по двум каталогам в зависимости от того, является ли команда внутренней (например cls, if, for) или внешней (т.е. физически присутствует в файле на диске, например attrib, format)

tempfile
Вывести на экран полное имя "временного" файла в заданном каталоге

Временным файлом считается файл с уникальным именем, который можно использовать для хранения какой-либо промежуточной информации. Фактически, нужно сгенерировать имя файла и проверить его уникальность.

Имя каталога, где предполагается создание файла, передается как параметр командной строки

get_ip
Вывести на экран все IP-адреса, назначенные локальному компьютеру.

Указание: использовать команду ipconfig или netsh и фильтрацию.

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

Должны поддерживаться как команды с расширением, так и без (т.е. calc и calc.exe)

Пример запуска:
>which.cmd calc
C:\\Windows\\system32\\calc.exe

!sleep_time
Обеспечить приостановление выполнения программы на заданное количество секунд/миллисекунд

В командном интерпретаторе ОС нет штатной команды для организации паузы. Надо организовать задержку при помощи бесконечного цикла и вычисления разницы во времени с момента старта.

Необходимо использовать команду time или переменную %time%.

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

Пример запуска:
>sleep_time.cmd 3600

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

Пример запуска:
> 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"

Работа на паре

КН-103

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

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

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

!helpgen (int/ext)
Сохранить в отдельные файлы справку по использованию команд, выводимых командой help.

Файлы справки должны быть разделены по двум каталогам в зависимости от того, является ли команда внутренней (например cls, if, for) или внешней (т.е. физически присутствует в файле на диске, например attrib, format)

tempfile
Вывести на экран полное имя "временного" файла в заданном каталоге

Временным файлом считается файл с уникальным именем, который можно использовать для хранения какой-либо промежуточной информации. Фактически, нужно сгенерировать имя файла и проверить его уникальность.

Имя каталога, где предполагается создание файла, передается как параметр командной строки

get_ip
Вывести на экран все IP-адреса, назначенные локальному компьютеру.

Указание: использовать команду ipconfig или netsh и фильтрацию.

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

Должны поддерживаться как команды с расширением, так и без (т.е. calc и calc.exe)

Пример запуска:
>which.cmd calc
C:\\Windows\\system32\\calc.exe

!sleep_time
Обеспечить приостановление выполнения программы на заданное количество секунд/миллисекунд

В командном интерпретаторе ОС нет штатной команды для организации паузы. Надо организовать задержку при помощи бесконечного цикла и вычисления разницы во времени с момента старта.

Необходимо использовать команду time или переменную %time%.

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

Пример запуска:
>sleep_time.cmd 3600

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

Пример запуска:
> 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"

Работа на паре
Отвечать на вопросы и решать небольшие задачи во время пар.

!myGroups_u
Вывести все группы, в которые входит заданный пользователь.
См. /etc/group

Имя пользователя передается в программу в качестве параметра.

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

!which_u

КБ-101

getip
Реализовать cmd скрипт, выводящий все IP используемые данным компьютером.

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

sleeptime
Реализовать cmd скрипт, который в качестве параметра принимает количество секунд и завершает работу через это количество секунд. Подразумевается использование функциональности получение текущего времени.
Количество секунд указанное в качестве параметра гарантированно меньше количества секунд в сутках.

helpgen
Реализовать cmd скрипт, который для каждой команды указанной в выводе команд helpgen создаёт отдельный файл с help по данной команде.
Файлы должны быть размещен в отдельной папке, а так же иметь корректную кодировку.

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

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

> accocx 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"

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

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

getip_u
Реализовать bash/sh скрипт выводящий все IP адреса текущего компьютера, кроме 127.0.0.1. Подразумевается, что задача реализуется только с помощью команд ip,ifconfig и grep

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

colours_u
Реализовать bash/sh скрипт рисующий цветную рамку в точности по границе консоли. На каждый сигнал, который был прислан процессу в центре экрана должен печататься номер сигнала.
Скрипт должен завершать свою работу при нажатии на клавишу (например enter)

directorysize
Написать cmd скрипт, который считает размер указанной ему директории. Подразумевает использование рекурсии
DIR /R запрещён

КН-102

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

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

exec_time
Написать скрипт, которому бы в параметры можно было передавать команду для запуска. Скрипт должен выполнить эту команду, а потом вывести на экран время, которое эта команда выполнялась.

c:\> time.cmd 1.exe
...
Time: 10

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

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

> which.cmd calc
C:WINDOWSsystem32calc.exe

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

int/ext
Доработать which:

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

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

> accocx 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

tempfile_u

hexdump
Написать аналог утилиты 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..