Тема: Сайт групп факультета ИТ МИРЭА :: Лекции и иже с ними

Прислано paxeefixee 24.02.2012 12:12
#1

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

Кого не было - сообщу, что он давал общие простейшие базовые сведения об Linux, и в частности затронул систему прав доступа к файлам и папкам ОС Unix. Как он говорил, в простейшем случае она состоит из 9 флагов - по 3 на пользователя-владельца файла, группы-владельца (она не обязательно является группой, в которую входит пользователь-владелец) и всех остальных. Каждая из 3 групп состоит из флагов:

Одним из способов их задания является запись в числовом формате в восьмеричной системе счисления (как раз о таком способе мы и говорили).
Выяснили, что для задания одной из групп флагов хватает одной цифры в восьмеричной системе счисления, и чтобы узнать, какая цифра нужна, предлагалось складывать 1, 2 и 4, дабы получить нужную комбинацию прав для пользователя, группы и остальных. При этом утверждалось, что

И ведь я помнил, что там как раз наоборот, но промолчал... А ведь так и есть: на самом деле


Т.е. например 2+4=6 дает права на запись и чтение, а не на запись и исполнение:
Код
[user@box ~]$ touch test.file # создаем пустой тестовый файл
[user@box ~]$ chmod -v 670 test.file # ключ -v для вывода пояснения действий программы chmod (его можно опустить)
права доступа «test.file» изменены с 0644 (rw-r--r--) на 0670 (rw-rwx---)



Соответственно строка rw-rwx--- и показывает эти 3 группы флагов:
  1. rw-: разрешены чтение и запись для владельца-пользователя,
  2. rwx: разрешены чтение, запись и исполнение для владельца-группы,
  3. ---: нет прав для всех остальных

(прочерком обозначено отсутствие права; то, что идет после символа # - комментарий и не воспринимается командной оболочкой bash; утилита chmod позволяет менять эти самые 9 флагов, chmod = change mode).
В двоичном битовом массиве получаем (исходя из того, что 4(8)=100(2)=r, 2(8)=010(2)=w, 1(8)=001(2)=x):

Прим.: тут, кстати, можно заметить, что мы все-таки спокойно можем дать право на запись, при этом не давая прав на чтение:
Код
[user@box ~]$ chmod 222 test.file # даем всем право только на запись
[user@box ~]$ echo "hello" > test.file # записываем в файл строку "hello"
[user@box ~]$ cat test.file # пытаемся вывести его содержимое на экран
cat: test.file: Отказано в доступе



Тут-то мы и наблюдаем ситуацию, когда мы можем что-то записать в файл, а вот прочитать его не можем :)
Потренироваться можно здесь: http://mistupid.com/internet/chmod.htm

Числовую запись, впрочем, необязательно запоминать или высчитывать (равно как и делать это из командной строки - большинство файловых менеджеров и оболочек предоставляют графический интерфейс для этого), при задании при помощи chmod можно воспользоваться и буквенной:
Код
[user@box ~]$ chmod -v u=rw,g=rwx,o= test.file # устанавливаем такие же права, что и выполнив chmod 670 test.file
права доступа «test.file» оставлены в виде 0670 (rw-rwx---)



При помощи "=" мы устанавливаем "начисто" новые права, вместо знака равно могли бы быть "+" или "-" для установки или снятия определенных флагов соответственно. Несколько групп флагов можно разделять запятой. Также первые буквы означают

Так, например, chmod g-x test.file убирает разрешение на исполнение для группы-владельца файла, а chmod a+rw test.file добавляет всем права на чтение и запись, не трогая флаги разрешений на исполнение.

Подробнее можно посмотреть например здесь:
https://secure.wikimedia.org/wikipedia/ru/wiki/Chmod
https://secure.wikimedia.org/wikibooks/ru/wiki/UNIX
http://www.opennet.ru/man.shtml?topic=chmod&category=1
http://www.opennet.ru/base/sys/file_access.txt.html

Если хотите попробовать - не обязательно устанавливать дистрибутив GNU/Linux себе на компьютер или виртуальную машину, можно воспользоваться эмулятором на JS:
http://bellard.org/jslinux/ (ядро 2.6.20)

И да, кстати, не думайте что в Windows подобного нет :)
Для примера на XP: в Проводнике Сервис->Свойства папки->Вид->снять галочку с "Использовать простой общий доступ к файлам"
На Win7: жмем Win+R->gpedit.msc (Групповые политики)->Enter->Конфигурация пользователя->Административные шаблоны->Компоненты Windows ->Проводник->удалить вкладку "Безопасность", поставить отключить.
А затем открываем окошко свойств любого файла/папки (на диске с ФС, поддерживающей права, напр. NTFS (напр. не FAT)) и открываем вкладку "Безопасность"; видим несколько похожую картину, не так ли?

Надеюсь, что это окажется кому-то полезным :)

Редактировал paxeefixee 25.03.2012 10:15

Прислано FiLLiPPoFF 16.03.2012 14:36
#2

Исходники с сегодняшней лекции по СПО.
Жаль только, что Стас забыл скинуть файл со структурой и заданием.

Прислано paxeefixee 18.03.2012 09:39
#3

Это неплохая базовая книжка. Лучше ещё книгу дракона =)
А самое главное - программировать, программировать, программировать.

Прислано paxeefixee 25.03.2012 09:49
#4

Вот что Воронков дал на флешке.
Там таки есть какое-то описание задания, которое необходимо сделать (читай лабы) в том самом файлике labbb.
Задания выходит 2:
  1. разобраться с разницей между абстрактными классами и интерфейсами в Java
  2. написать простейшую пару лексер-парсер для выражений типа a=a+8 (вычислить новое значение a)

Первое там помоему решено полностью уже, второе же начато. Реализовать предлагается на Java, я же скорей всего буду делать на другом языке и без ООП ;)
Как он сказал "выполнить их - это шанс для тех, кто не ходит на мои пары". Срока дал до 6 утра среды :)
Не знаю пока, когдя выполню его я, ибо дел много навалилось, а сами задания как видите очень простые, я думаю не составит особого труда вам выполнить их, тем более что начало уже положено. Но если очень не хочется - подождите меня.

Прислано FiLLiPPoFF 25.03.2012 20:43
#5

Вот то, что мне удалось пока написать. Сможет ли кто-нибудь помочь дописать класс сумматора, а то мне уже не думается. =|

Редактировал FiLLiPPoFF 25.03.2012 20:44

Прислано Olorin 25.03.2012 22:57
#6

?| Fuck.

UPD Ты просто ничего не понимаешь в кратких сообщениях. Одним-единственным словом я высказал все непонимание, горечь, ужас, страх, панику, ярость, негодование, подозрение. Так-то!

Редактировал Olorin 26.03.2012 09:16

Прислано FiLLiPPoFF 26.03.2012 15:36
#7

Olorin,
А я то уже хотел тебе морду бить. :D
А ты просто о жизни глаголишь. :beer:

P.S. А по какому адресу код то слать?

Редактировал FiLLiPPoFF 26.03.2012 16:47

Прислано 534 26.03.2012 18:39
#8

DASM32 написал:
Вот что Воронков дал на флешке.
Там таки есть какое-то описание задания, которое необходимо сделать (читай лабы) в том самом файлике labbb.
Задания выходит 2:
  1. разобраться с разницей между абстрактными классами и интерфейсами в Java
  2. написать простейшую пару лексер-парсер для выражений типа a=a+8 (вычислить новое значение a)

Первое там помоему решено полностью уже, второе же начато. Реализовать предлагается на Java, я же скорей всего буду делать на другом языке и без ООП ;)
Как он сказал "выполнить их - это шанс для тех, кто не ходит на мои пары". Срока дал до 6 утра среды :)
Не знаю пока, когдя выполню его я, ибо дел много навалилось, а сами задания как видите очень простые, я думаю не составит особого труда вам выполнить их, тем более что начало уже положено. Но если очень не хочется - подождите меня.


Вопрос возник:
по 1 пункту (разобраться с разницей между абстрактными классами и интерфейсами в Java) - это мы ему должны написать докладик или что? Как ему это задание сделать и оформить, вот не понял.

Прислано paxeefixee 26.03.2012 19:00
#9

534, чтож, значит я не совсем верно выразился. Это "устное" задание, в общем :)

Прислано paxeefixee 27.03.2012 19:15
#10

Для просмотра скрытого текста - зарегистрируйтесь

Редактировал paxeefixee 27.03.2012 23:30

Прислано dhmhd 28.03.2012 04:12
#11

Вот мое решение.

Примет цепочку выражений разделенных запятой(просто для "эстетики", запятая, ровно как пробел и знаки табуляции будет пропущена лексером):
"abs = 123, sa = sin(pi/2), d = abs/sa, write(d);"

Написал на C, так как знаю его лучше всего.
Использовал float.
Имена переменных не могут содержать цифр.
Переменные в хеш-таблице с цепочками(по умолчанию всего 10 ячеек).
Функции: sin(), cos(), write().
+, -
*, /
x^y - x в степени y
x%y - корень из y степени x.
-, + - минус и плюс унарные
(, )

для компиляции под Windows понадобиться mingw
$ mingw32-make -f Makefile.win

для компиляции под Linux понадобиться gcc, make
$ make

Запуск math_parser.

math_parser_src[v0.1.1].zip - исходники
math_parser_bin_win32[v0.1.1].zip - виндовый бинарь

Редактировал dhmhd 28.03.2012 05:41

Прислано HARM_x64 01.04.2012 11:14
#12

Исходников проги-тестировщика от Воронкова за 29,03,12 ни у кого нету?

Прислано paxeefixee 01.04.2012 18:58
#13

HARM_x64, групповая почта пуста. А те, кто были - не взяли ничего? Что он там важного давал? :)

Прислано HARM_x64 01.04.2012 19:10
#14

Мы вообще-то две пары то и делали, что сидели и кодили, продолжение темы курительной трубки и табаков:) Писали некий тестировщик программы. Потом на дом дал задание переделать его, юзаая интерфейсы.

Прислано paxeefixee 01.04.2012 19:36
#15

HARM_x64, так раз сидели и кодили - неужто никто из сидевших и кодивших не взял с собой наработки? :)

Прислано FiLLiPPoFF 02.04.2012 05:30
#16

DASM32,
Грр. :@
Скинь ему на мыло письмо с просьбой выслать материалы лекции (он сам сказал так сделать, т.к., видимо, брезгует нашими флэшками). :P

Редактировал FiLLiPPoFF 02.04.2012 05:30

Прислано paxeefixee 02.04.2012 10:17
#17

FiLLiPPoFF, ок, отправил.

Прислано paxeefixee 05.04.2012 19:08
#18

Материал с 30го марта. Прошу прощения за задержку.

Прислано Olorin 20.05.2012 08:08
#19

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