Форум русскоязычного сообщества Ubuntu


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

Автор Тема: решение задачи  (Прочитано 1014 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн sinh

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
решение задачи
« : 27 Декабря 2009, 13:27:09 »
подскажите плиз. каким образом можно
"Найти все исходники в ядре Linux имеющие отношение к реализации системы Netfilter (он же iptables). Объяснить как можно выполнить данную задачу более эффективно."

я совсем недавно пробую пользоваться Linuxом и такого рода задачи ставят меня в тупик.
ядро - /vmlinuz, поиск - find. но find /vmlinuz выглядит полным бредом)

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: решение задачи
« Ответ #1 : 27 Декабря 2009, 14:29:01 »
find /usr/src -name netfil*

Оффлайн sinh

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
Re: решение задачи
« Ответ #2 : 27 Декабря 2009, 14:40:36 »
дополнение.
не обязательно зацикливаться именно на си-файлах ядра, в убунте все немного не так, как в той системе, в которой изначально планировалось решать эту задачу.
для решения нужно воспользоваться командами:
find - чтобы собственно найти файл
grep - найти в файлах, найденных предыдущей командой строчки, содержащие netfilter, iptables.
xargs - пока не понял для чего.
как это все делается, не пойму. подскажите пожалуйста.

Найти все исходники в ядре Linux имеющие отношение к реализации
    системы Netfilter (он же iptables). Выполнить данную задачу нужно как
    можно более эффективно.
   
    Пояснения: в системе должны быть установлены исходные тексты ядра (можно выбрать в процессе установки)
                     обычно они попадают в директорию /usr/src/linux
                     если при начальной установке ядро не было выбрано,
                     то в любой момент их можно доустановить из пакетов.
                     Предполагаем, что вся реализация подсистемы Netfilter написана на языке C,
                     а значит нас интересуют файлы с суффиксами .c и .h
                         Принадлежность файла к системе Netfilter определяем по наличию в нем слов
                     Netfilter или iptables независимо от того большими или маленькими буквами они написаны.
                           
   Для поиска по содержимому файла, используется программа grep.
   Все необходимые опции grep можно найти в его man-странице.
в ман вообще ничего не понял) насчет задания повторюсь опять, не обязательно именно нетфильтер или иптэблс, можно просто файлы, в которых есть какие-то слова определенные..

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: решение задачи
« Ответ #3 : 27 Декабря 2009, 16:51:30 »
grep - найти в файлах, найденных предыдущей командой строчки, содержащие netfilter, iptables.
LESS="-p -exec " man find
LESS="-p f -exec " man find
man grep

xargs - пока не понял для чего.
Имхо, тут избыточно, а вообще
man xargs

Оффлайн cmp

  • Новичок
  • *
  • Сообщений: 46
    • Просмотр профиля
Re: решение задачи
« Ответ #4 : 27 Декабря 2009, 17:08:07 »
что-то не понятно - это тест на знание консольных команд..

find - ищет файлы в директории? не обязательно файлы, любые объекты фс, для этого ей задаются определенные параметры - выражение, но печать на стандартный вывод имен удовлетворяющих объектов лишь действие по умолчанию и может быть переопределено.

find -name \*.c # найдет все файлы с расширением с
find -name \*.h # найдет все файлы с расширением h
find -name \*.c -o -name \*.h # найдет все файлы с расширением c  и h, -o значит OR. Параметр -exec переопределяет действие по уволчанию на подстановку пути к найденому элементу в указанную команду:
find -name \*.c -o -name \*.h -exec grep iptables '{}' \; # где '{}' подставляемый путь, а \; указание на конец команды передаваемой в find

grep iptables * # ищет строки с вхождение iptables во всех файлах текущей директории
grep -i iptables * # ищет строки с вхождение iptables во всех файлах текущей директории игнорируя регистр
grep -iE '((iptables)|(Netfilter))' * # ищет строки удовлетворяющие регулярному выражению во всех файлах текущей директории игнорируя регистр. Параметр -r включает рекурсивный поиск
grep -iEr '((iptables)|(Netfilter))' * # ищет строки удовлетворяющие регулярному выражению во всех файлах текущей директории и поддиректориях игнорируя регистр

на кой черт нужен xarg...

Оффлайн фирэфохэ

  • Старожил
  • *
  • Сообщений: 2169
  • straightedge
    • Просмотр профиля
Re: решение задачи
« Ответ #5 : 27 Декабря 2009, 17:55:29 »
"Объяснить как можно выполнить данную задачу более эффективно."
засунуть куда-нибудь xargs, потом объяснить, что без него будет более эффективно :)
http://i18.ЗАПРЕЩЁННЫЙ РЕСУРС/big/2011/0325/6d/19eaa72dd24048a6fb0587832c4b096d.gif КДЕ - УГ. Дебиан - недоось.

Оффлайн sinh

  • Автор темы
  • Новичок
  • *
  • Сообщений: 32
    • Просмотр профиля
Re: решение задачи
« Ответ #6 : 27 Декабря 2009, 20:02:23 »
в общем немного разобрался. дело в том, что xargs позволяет команде передавать не stdIN, а аргументы. то есть примерно так

find / -name *.c -o -name *.h | xargs grep -i iptables.
здесь греп будет в строках файлов искать iptables.
так ведь лучше выглядит? я правда пока не очень вкурил, но думаю, что это тру путь решения)

Оффлайн ArcFi

  • Старожил
  • *
  • Сообщений: 15189
    • Просмотр профиля
    • aetera.net
Re: решение задачи
« Ответ #7 : 27 Декабря 2009, 22:05:37 »
find / -name *.c -o -name *.h | xargs grep -i iptables.
Если я правильно понимаю задачу, так будет эффективнее:
grep -iRl iptab /usr/src

 

Страница сгенерирована за 0.43 секунд. Запросов: 23.