Необходимо в каталоге найти файлы содержащие определенную фразу. Как это сделать? Думаю, многие не раз сталкивались с подобной проблемой, как необходимость найти в папке с файлами (а порой и подпапками, в которых тоже хорошо бы поискать) файл, зная кусочек его текста (ну, или догадываясь о нем).
Я тоже много раз спотыкался об эту нужда и вот, наконец, собрался и написал небольшой скрипт на bash, выполняющий эту задачу. Не самой общераспространенной задачей, но всё же имеющей место быть, является поиск исполняемого файла программы. Она воспринимает в качестве параметра имя программы, а после выполнения выводит в терминал список с расположением одновременных файлов.
Иногда может понадобится найти файл, в котором содержится определённая строчка или найти строку в файле, где есть нужное слово. В Linux всё это делается с помощью одной весьма простой, но в то же время мощной утилиты grep. С её помощью можно искать не только строчки в файлах, но и фильтровать вывод команд, и много чего ещё.
Папки и файлы в Ubuntu Linux
Linux поиск по содержимому файлов командой grep
Часто возникают ситуации, что нужно найти какой-нибудь текст, но вы не помните, в каком файле/файлах он содержится. Секрет популярности — её мощь, она отдает возможность пользователям сортировать и фильтровать текст на основе сложных правил.
Команда grep (расшифровывается как global regular expression print) — одна из самых востребованных команд в терминале Linux, которая входит в состав проекта GNU.
В этом варианте для поиска по содержимому файлов в каталоге можно использовать утилиту grep:
grep -r -n «text» /path
grep -r «Строчка для поиска»
grep -rl $’xEFxBBxBF’
где:
-n показывает строку, где был найден фрагмент;
-r осуществляет розыск рекурсивно, в файлах в самом каталоге /path и в его подкаталогах;
Также можно приплюсовать опцию -C 3, чтобы видеть +- 3 строки вокруг (выше и ниже от найденной).
Дабы найти файл по его содержимому во всех Linux — подобных ОС, достаточно использовать утилиту find.
Linux поиск по содержимому файлов командой find
Своего рода швейцарским ножом в розыске файлов является команда find. Отметим, что она имеет множество опций, которые смогут кардинально изменять механизм поиска. Мы изложим лишь основные принципы, а с остальными способностями ознакомьтесь в справке по команде. Базовый принцип использования find состоит в указании папки поиска и опций. Например, выражение «find ~/ -name *.cpp» осуществит поиск файлов, имеющих продолжение «cpp» по всем каталогам, находящимся в личной директории пользователя.
/usr/bin/find /папка -type f -exec grep -H ‘строчка для поиска’ <> ;
Значение, указанное после опции -name, задает шаблон соотношения имени файла. Вы можете использовать опцию -type для указания типа файла, где в свойстве значений нужно использовать специальные буквы: d — директория, f — файл, l — символическая ссылка и т. д. Функции -user, -group и -size также довольно полезны. Их значениями являются имя пользователя, имя категории и размер файла в байтах.
Linux для Начинающих — Навигация по файлам и директориям
find /var/www/ -name «file.conf»
find /var/www/ -name «*.conf»
С поддержкою опции -exec каждому файлу, предназначенному для установки соответствия, можно добавить случайную обработку. Таким образом, появляется возможность осуществления поиска, как по имени файла, так и по охватываемому. Ниже приводится пример комбинирования команды find и grep за счет использования функции -exec.
find ~/ -name *.cpp
find ~/ -name *.cpp -user ‘my-username’ -group ‘my-group’
find ~/ -name ‘*.config’ -type f -exec grep ‘user’ <> ;
find /home/ ( -name «*.php» -or -name «*.html» -or -name «*.js» )
-exec grep -lHEi $’xEFxBBxBF’ <> ;
А возможно и еще проще
Linux поиск по содержимому файлов командой which
Бригада which ищет только те файлы, у которых есть право на выполнение как программы. Розыск осуществляется по директориям, заданным в переменной окружения PATH. Содержимое переменной PATH сможет отличаться для различных пользователей. Чтобы охватить как можно большее количество системных директория, необходимо войти в систему под учетной записью администратора.
which cat
/bin/cat
which docker-stack
/home/username/.local/bin/docker-stack
Linux поиск по содержимому файлов командой locate
Поиск, производимый командой locate весьма быстр. Однако учитывайте тот факт, что системная база данных может быть не живой на момент осуществления операции. Механизм сканирования файловой системы, время его проведения и вобщем наличие такого инструмента может разниться в различных дистрибутивах Linux. Команда locate может быть полезна лишь при поиске файла по его имени. Однако для проверки текстового содержимого документов на вступление искомых данных нужно использовать другой инструмент.
Команда locate представляется альтернативой для find.
Данная команда, как правило, работает быстрее и может с легкостью производить поиск (в широком смысле — стремление добиться чего-либо, найти что-либо; действия субъекта, направленные на получение нового или утерянного (забытого): новой информации (поиск информации), данных,) по всей файловой системы. Linux имеет специальную команду grep, какая принимает шаблон для поиска и имя файла (именованная область данных на носителе информации). В случае нахождения совпадений, они будут выведены в терминал. В всеобщем виде выражение можно составить как «grep шаблон_поиска имя_файла». Чтобы отыскать файлы с помощью команды locate, просто используйте следующий синтаксис:
К образцу, чтобы возвращать только файлы, содержащие сам запрос, вместо того чтобы вводить каждый файл, который содержит запрос в ведущих к нему каталогах, можно утилизировать флаг –b (чтоб искать только basename, базовое имя файла):
Команды find и locate – отличные инструменты для поиска файлов в UNIX‐подобных операционных системах. Любая из этих утилит имеет свои преимущества. Мы рассмотрели использование команд для поиска и фильтрации вывода бригад в операционной системе Linux. При правильном применении эта утилита станет мощным инструментом в ваших руках.
Несмотря на то, что команды find и locate сами по себе очень мощны, их действие возможно расширить, комбинируя их с другими командами. Научившись работать с find и locate, попробуйте чистить их результаты при помощи команд wc, sort и grep.
Источник: linux16.ru
Как узнать домашнюю директорию любого пользователя Linux
Для того, чтобы правильно и безопасно хранить данные на сервере, (особенно, если на этом сервере несколько пользователей), следует точно знать, где располагаются их домашние папки, до которых у пользователей есть доступ (у каждого в свою, но нет доступа в чужие папки с чужими данными). Например, для того, чтобы дать пользователю доступ по ftp только к его данным или подсказать полный путь до его www-директории. В этой статье рассмотрим то, как узнать домашнюю директорию любого пользователя Linux несколькими способами.
Где хранится системная информация о домашних каталогах пользователей в Linux
При создании нового пользователя в Unix-системах, каждому пользователю обязательно домашний каталог. О том, где и как располагается запись о домашней директории пользователя в файле /etc/passwd , подробно описано в → этой статье. Для понимания вопроса сейчас требуется знать, что это предпоследнее (шестое) поле home в строке записи пользователя в этом файле:
login : password : UID : GID : GECOS : home : shell
Поэтому, можно в цикле обходить этот файл в поиске записи нужного пользователя, разбивать строку на подстроки и брать значение 6-го поля. Но это слишком длинный способ. Есть короче и проще. 😉
Команда pwd в Unix
Команда pwd выводит текущий путь к директории, в которой находится пользователь. Выполнив команду pwd , получим этот путь:
[email protected]:~# pwd /root
У пользователя root в Unix по умолчанию домашней директорией является /root .
Оператор ~ (тильда) в Debian
Другой способ того, как определить домашнюю директорию текущего пользователя. Достаточно посмотреть значение оператора ~ (тильда):
[email protected]:~# echo ~ /root
Результат не сильно отличается от предыдущего, но к ~ можно добавлять дополнительные пути к папкам и/или файлам пользователя, используя её как точку отсчёта в домашней директории пользователя. Что сильно облегчает работу с написанием относительных путей (относительно не только корня файловой системы, но и корня домашней папки пользователя).
Ещё одним полезным свойством ~ является то, что с помощью этого оператора можно получить путь до домашней директории любого пользователя в системе (если конечно пользователь есть в системе, то есть прописан в файле /etc/passwd , например посмотреть содержимое домашнего каталога пользователя ftp можно так, поставив перед ним тильду ~ :
[email protected]:~# ls ~ftp welcome.msg
А теперь посмотреть содержимое этого файла:
Ну и то, к чему мы стремились: посмотреть путь к домашней директории пользователя:
[email protected]:~# echo ~ftp /srv/ftp
Так гораздо удобнее, чем парсить и разбирать файл /etc/passwd . За нас всю эту работу делает операционная система! 😉
Заберите ссылку на статью к себе, чтобы потом легко её найти!
Раз уж досюда дочитали, то может может есть желание рассказать об этом месте своим друзьям, знакомым и просто мимо проходящим?
Не надо себя сдерживать! 😉
Источник: mb4.ru
Где в линукс находится папка с программами
Подскажите кто в курсе, — где может валяться серверная часть сайта в LINUX-каталогах?
Ситуация такая: есть FTP к хостингу сайта. Захожу туда — там туча каталогов — явно LINUX’ных.
А где в них сам этот сайт?
Спустя 1 минута, 20 секунд (22.09.2011 — 10:05) kirik написал(а):
redreem
Покажите список каталогов (хотя бы пару-тройку).
Спустя 17 секунд (22.09.2011 — 10:05) TMake написал(а):
По умолчанию в /var/www/
Но при настройках стараются все сайты запихивать в /home
Спустя 30 минут, 23 секунды (22.09.2011 — 10:36) redreem написал(а):
В /var/ нет каталога www/, а /usr/home вообще пустой.
Сами каталоги:
Спустя 2 минуты, 16 секунд (22.09.2011 — 10:38) Renden написал(а):
redreem
Вообще по умолчанию если apache ставиться через make
?>
Спустя 4 минуты, 51 секунда (22.09.2011 — 10:46) redreem написал(а):
Цитата |
в настройках apache — /etc/[apache2|httpd]/ |
в /etc/ нет ни каталога ни файла apache.
Спустя 1 минута, 59 секунд (22.09.2011 — 10:48) m4a1fox написал(а):
А поиск запустить по каталогам можно? Или, как в Total Commender вывести все файлы из папок, отсортировать по имени и искать index. Он конечно может быть не один, но и не 100.
Спустя 4 минуты, 11 секунд (22.09.2011 — 10:52) redreem написал(а):
m4a1fox, ну это был последний вариант у меня. щас вот запустил поиск. так как доступ по FTP, а файлов и каталогов там тыщщи — ждать придется долго.
если у кого будут еще идеи — тормозну поиск.
Спустя 26 минут, 52 секунды (22.09.2011 — 11:19) killer8080 написал(а):
ищи httpd.conf это главный файл конфигурации апача, он должен быть где то в /etc/
Спустя 34 минуты, 10 секунд (22.09.2011 — 11:53) kirik написал(а):
redreem
Известно, какая система стоит?
Спустя 7 минут (22.09.2011 — 12:00) redreem написал(а):
kirik, без понятия. это старая версия сайта, она даже не привязана к имени уже, которая делалась неизвестно кем. кое-как удалось найти FTP доступ к нему и все. мне нужно всего лишь пару единиц контента оттуда взять. может это вообще не тот сайт. тут только гадать приходится. ладно, ненашел — так и пофиг. спасибо всем.
Спустя 3 минуты (22.09.2011 — 12:03) kirik написал(а):
redreem
А что в /etc?
Спустя 7 минут, 26 секунд (22.09.2011 — 12:11) redreem написал(а):
Спустя 3 минуты, 42 секунды (22.09.2011 — 12:15) kirik написал(а):
X11 и bluetooth? Не похоже это на сервер.. или мож какой странный Плюс файл freebsd-update как-то подозрительно выглядит..
Источник: phpforum.su