Ищи в Linux как профи! Как использовать всю мощь *nix инструментов на примере find
HTML-код
- Опубликовано: 17 май 2024
- Философия Unix гласит, что, во-первых, программы должны делать что-то одно и делать это хорошо, а во-вторых, что программы должны работать вместе, используя текстовые потоки. Посмотрим, как реализуется эта концепция на примере команды find, позволяющей находить файлы и выполнять с ними любые операции.
Мой курс «Хардкорная веб-разработка» - course.to.digital
Книжный клуб Ботаним!, где мы читаем хорошие ИТ-книги: botanim.to.digital/
Telegram: t0digital.t.me
0:00 О поиске файлов в *nix
1:27 Вывод всех файлов директории
2:41 Использование find в связке с less
3:35 Поиск по маске имени файла
4:36 Ограничение поиска по уровню вложенности
5:19 Ищем только файлы или директории
6:03 Исключение директорий из поиска
10:00 Использование логического ИЛИ в поиске
10:45 Поиск без учёта регистра
11:28 Команда stat
13:12 Поиск по дате открытия файла
15:26 Поиск по дате изменения файла
15:55 Поиск файлов новее указанного файла
17:14 Поиск по размеру файла
18:32 Поиск по размеру с выводом этого размера
19:33 Поиск самых больших файлов
20:36 Поиск файлов с выводом их содержимого
22:11 Гибкое удаление файлов
22:58 Зачем искать файлы?
/****************** about ******************/
Меня зовут Алексей Голобурдин, я программирую с 2004 года и на этом канале делюсь своим опытом. Я основатель и руководитель компаний:
- Диджитализируй digitalize.team, разрабатываем сложные IT системы для бизнеса;
- Salesbeat salesbeat.pro, комплексный модуль доставки для интернет магазинов.
Telegram канал - t.me/t0digital
ВК - digitalize.team
RuTube - rutube.ru/channel/24802975/ab...
Дзен - dzen.ru/id/6235d32cb64df01e6e...
Здорово, что по Линуксу делаете ролики. Было бы замечательно, чтобы развернутый вариант был по bash-скриптам. Спасибо!
Очень интересно было, смотрел от начало до конца. Как атмосферного обстановка. Это какой то фильм. Боже какой просто Гений современности.... Заинтриговал c logrotate. Желаю много радости и всегда улыбался, у Вас шикарный контент тут мозги шевелятся+5=))))
Привет! Было бы интересно увидеть работу с logrotate. Спасибо)
Он же ещё проще файнда. man logrotate скорее всего хватит что бы всё понять.
Спасибо за видео. Благодарю за то, что несете понимание мощи *иксов в массы. Очень просто и с понятными примерами.
Мега полезное видео! Огромное спасибо!!! Не просто узнал много нового, но и наконец-то сумел чуть лучше начать понимать все эти непонятные символы после команды в документации. Ещё раз спасибо!!!
Думал будет скучно, но включил, не пожалел, интересно! Спс.
Спасибо!
Я был с вами когда у вас было 900 подписчиков. Я очень рад что подписан на ваш канал. Удачи и успехов!!!🙌
Работаю с линуксом, но find в упор не использовал, благодаря видео, понял насколько крутая и гибкая команда
Спасибо, за лучший образовательный контент в ютубе про *nix и Python
это точно. сам сидел использовал ls | grep ...
Мой любимый тип видосов, когда нет "скрытой" рекламы) Спасибо за контент, часто обращаюсь)
Алексей, спасибо за познавательные видео!
Лайк как всегда. Все четко, содержательно и без воды.
Очень круто! Спасибо.
Спасибо, очень понравилось. Да и вообще интересны любые видео связанные с терминалом unix систем, с радостью посмотрю что-нибудь в таком духе. Присоединяюсь к комментарию одного человека про exec очень интересно было бы посмотреть и про эту команду.
Классный видос, такие лайфхаки да еще и на шару. Спасибо.
Круто! Спасибо! С 10 минуты почти все новое для меня. И рассказываешь так что удобно запоминается!
logrotate ждем)
Узнал про логические операторы. Никогда раньше не пользовался, а это круто. Спасибо.
Алексей, как всегда ++ Как раз попкорн делал и тут видос подкатил. Смотрел как будто боевик 90-x и закидывал кукурузу без остановки.
Люблю твои видео по Linux утилитам, лайк
Блин, круто! Почувствовал себя хакером. Лайк, классное видео.
Как всегда познавательно и по делу. Большое спасибо!
Спасибо, за видео!
Спасибо за видео! Очень полезно 👍🏻 про log rotate было бы интересно увидеть !
Очень полезно и емко, спасибо огромное!!
Отличный контент, узнал много нового! Лайк однозначно и жду следующее видео!
Вот такое интересно огонь начал снова смотреть канал
Видео огонь, как всегда годный контент. Порадовал момент -> С помощью вертикальной черты(2:57) Сделайте видео про конверы (pipe) в linux/unix подобных ос
Прикольный лайтовый но подробный видос, спасибо! Побольше бы таких
Спасибо, даже узнал что-то новое 🙂
Да. Очень полезно. Спасибо!
Полезный и приятный глазу контент)
Спасибо, как всегда лайк!
Спасибо за очень полезный урок по команде find! Очень большие возможности предоставляют терминальные команды! Хотелось бы получить урок по созданию кода для "перемешивания" треков плейлиста с обзором существующих алгоритмов.
Супер, спасибо, очень интересно
блин, ты просто гений) команда less очень крутая, я хотел себе такую но даже не знал что она есть))
We are here, we are Linux
Это было так круто
Очень полезное видео!
Очень хотелось бы услышать про log rotate, видео супер, спасибо большое
Плюсую за logrotate ! Спасибо!
Крутой и очень полезный ролик
Топ!
Супер
Автор, добрый день! Хорошие у тебя обзоры, пример.
Запили, пожалуйста, видео, как neo vim превратить в ide, но без излиществ.
Задача: работать над проектом в pyrhon.
Проект запускается в докерах.
Сейчас работаю в пайчарме. Т.к. работа ведётся с разными проектами, в разных ветках, то настройки для работы отладчика в докерах берутся из .env
Необходим функционал отладки.
Работа с git, т.е. видеть по строкам, кто и когда что менял.
Находить, где данная функция используется.
отличное видео, спасибо
ещё очень полезно знать про lsof, а про logrotate надо записать, жду с нетерпением 🍿
Спасибо за как всегда качественные видео. Профессионально сделанные. Для вывода содержимого файлов обычно используют `grep'. Ещё есть потрясающая утилита `awk'. Для анализа логов например. Хотелось бы про неё послушать также. Ещё `sed'. С помощью `diff' можно сравнивать каталоги. По поводу терминала с Вами полностью согласен. Это как раз не прошлое, а будущее. Так же это в своё время послужило причиной создания PowerShell в Windows.
Можно запускать два поиска в одной команде
Профит в том, что за один проход по файловой системе выполняется несколько поисков.
Например следующая команда рекурсивно проходит по файловой системе один раз, при этом сохраняет список файлов с флагом setuid в файл /root/suid.txt, а список с большими файлами в /root/big.txt
find / \( -perm -4000 -fprintf /root/suid.txt '%--#m-- %u %p
' \) , \
Побольше подобного контента.
Круто, мне бы это видео лет 5 назад))
А ещё find замечательно комбинируется с grep. Иногда можно и с помощью grep -r (или -nr, или -lr) вопрос решить, но если чужой проект, в котором, к тому же, лютый бардак (приложения джанги перемешаны с данными, логами, js, статикой и даже временными файлами), то приходится find с grep "состыковывать". Чтоб голова случайно не взорвалась. ;)
Прикольно!
Спасибо.
19:18 утилита du показывает не размер файла, а место, которое файл занимает на диске. Размер файла можно увидеть с помощью ls.
echo 1 > file
ls -lh file
du -h file
Да. Просто мне обычно интересно именно то, что du -sh показывает, не чисто сырое количество байт контента файла
Ещё find вместе с print0 и xargs полезны для нормализации имён файлов: пробелы на подчеркивания заменить или русофобией пострадать (кириллицу на латиницу в смысле) 😁
Очень полезное видео. Да, find не раз спасала мою шкуру )) Конечно, хотелось бы услышать как использовать find в bash скриптах, при наличии пробелов в именах каталогов и файлов. Огромное спасибо автору!
find . -type f -name "*.jar" -exec printf "%q
" {} \; | tr -d "
" | tr "
" ":"
в результате получаем, в моем случае, значение аргумента -classpath с "заэскейплеными" путями к джаркам, содержащим пробелы и другую лабуду, для команды запуска java-приложения. Если убрать крайние 2 tr-а, то получим список файлов "в столбик".
От автора ролика хотелось бы еще пояснений по операции форматированного вывода результата команды find (-printf ).
спасибо
ПЛИЗ-плиз-плиз, побольше контентов, таких как этот! И если можно, Rust программирование тоже! Крутые коммандные приложения, за этим будущее - в том числе и постапокалиптическое будущее!
aaaa!!!!11один крутоооо! спасибо!
Для файлов достаточно du -h
Параметр -s имеет смысл для директорий.
-sh просто привычка, понимаю :-)
ЗЫЖ Спасибо за твои видео - они классные. Всегда узнаю что-нибудь новое потому что новое - это хорошо забытое старое :-]
Ты гений!!!!!
Весь курс по unix-системам в политехе в одном видосе
Спасибо за видос :) А что за микрофончик у тебя?
Хороший звук? В этом видео Rode NTG3, до этого был Deity S-Mic 2s
Только с помощью find в связке с grep, wc и мониторю temp-директорию своего приложения. Ничего лучшего себе не представляю чтобы получить статистику по их обработке.
А ещё руководитель попросил подсчитать количество символов в исходниках приложения. Я написал команду и дело сделано.
Больше Линукса!!!
Ох, новый видос. Наконец то. А вы теперь в офисе не работаете? Всё дома снимаете. Почему вы используете Mosh, а не SSH? Ведь у него нет обратного скролинга.
Звук идеален
Спасибо, что написали! Новый микро:)
спасибо за find
logrotate
Можно видео про утилиту awk ? Кстати контент топ давно хотел научиться пользоваться find :)
сделаю:)
@@t0digital Ну и про sed уж заодно. :-)
+1
@@t0digital Ждём с удовольствием )
Здравствуйте Алексей, я только начинаю в линуксе, Ваши видео ОЧЕНЬ помогают мне в этом.
Ваши объяснения понятны тем, что Вы не просто называете команды, а разъясняете и переводите полное название команды, например: -Anewer, -Cnewer, -Mtime, -Atime, etc
Подскажите, по команде stat не отображается дата создания файла/директории, с чем это может быть связано?
А что вводится по команде stat?
@@t0digital
➜ Fun tree
.
├── another_folder
│ └── second
│ └── anotger.json
├── backup.log
├── first
│ └── first_inner
│ └── first.json
├── _rootfile.txt
├── _root_json.json
├── second
│ ├── second_inner
│ │ └── second.json
│ └── second_inner.json
└── somefile
➜ Fun stat somefile
Файл: somefile
Размер: 16 Блоков: 8 Блок В/В: 4096 обычный файл
Устройство: 806h/2054d Инода: 2102744 Ссылки: 1
Доступ: (0664/-rw-rw-r--) Uid: ( 1000/ ubuntu_pc) Gid: ( 1000/ zxc12)
Доступ: 2022-02-05 17:55:12.271656725 +0400
Модифицирован: 2022-02-05 17:55:12.271656725 +0400
Изменён: 2022-02-05 17:55:12.271656725 +0400
Создан: -
И так с любым файлом/директорией
Fzf в комбинации с bat и vim. Find использую пару раз в год и то в каких-то сохранённых уанлайнерах под конкретные задачи.
Вау. Очередная годнота по линуксу. Спасибо! А что за \; в exec на 20:21
Где логика в этих символах в команде?
Обратный слеш нужен для экранирования точки с запятой. Если обратный слеш убрать, то точку с запятой будет интерпретировать командный интерпретатор и до find этот символ уже не дойдёт. А самому find точка с запятой нужна чтобы знать где заканчивается команда, которую надо выполнить.
подскажите пожалуйста, как переставить `find` на маке? Походу нажал клавишу `Don't allow`, доступа find к файлам. Потом во вкладке `Privacy & Security->Privacy` добавил доступ iterm ко всему ссд (full disk access). Но файд по прежнему не работает так как надо.
как можно написать команду, которая выводит только одну строку, разделенную запятыми
имена файлов .jar из каталога /tmp.
Пробовал так find /tmp -type f -name '*.jar' | ls -m
и так ls -m /tmp | grep .jar
Не получается. Может вы знаете как правильно написать?
Хороший щелчок по носу тем, кто не уважает терминал!)
Какие файнд ? Чувак давай про питон и джангу, про бизнес логику. Про правильное структурирование данных в БД.
Привет! Расскажи пожалуйста про файловый менеджер ranger.
Есть обзоры, но на мой взгляд сделаны не очень доходчиво и например непонятно, как попадать в нужную дерикторию, когда выходишь из ranger, а не в ту из которой он запущен.
Будет видео про ranger?
дай ссылку на видео grep , а то чот не могу нагрепать в списке твоих видео)))
Хотим logrotate))))
Я бы вместо фразы "вертикальная черта" или "палка" говорил "канал" или "тоннель" (pipe), чтобы новички понимали образно как это работает. Спсб за видео
вывести путь до файла проще через grep для этого ему достаточно передать два имени файла, второй например /dev/null а если не указывать патерн для фильтрации то греп работает как cat
Здравствуйте, нужен ваш совет
Занимаюсь frontend разработкой, встал такой вопрос, какой Mac купить, сценарий работы пишу на JavaScript + react/Vue несколько проектов в потоке + 15-20 вкладок в хроме в будущем планирую изучить Backend, не монтирую ролики.
MacBook Air 8/512 ~ 1220$
MacBook Air 16/256 ~ 1400$
или с запасом на будущее взять доплатить и взять
MacBook Pro 13 8/512 ~ 1420$ , Хватает ли 8 гб ОЗУ?
16/256~ 1700$ стоит овер дофига бюджет не позволяет (Бюджет до 1400 $)
У меня сомнение, то что нету системы охлаждения в air он не будет тротлить, Купив Air не пожалею ли я в будущем (беру ноут на ~ 5-6 лет вперед)
Или вместо Air 16/256 взять Pro 8/256 и не парится ?
Что посоветуйте)
Надеюсь, Вы про Мас-и с М1? Для разработки берите ноут с 16ГБ оперативки, 8ГБ для кодинга, сборки и отладки не всегда хватает. Совсем хорошо, если возьмете Pro-шку 13. На Air-ах частота процессора программно ограничена, чтоб не перегревался и не тротлил при нагрузках. Но тесты со сборками показали, что разница минимальна (порядка 15 сек Air проигрывает Pro при сборке проекта - к примеру этот проект ноут на убунте с интелловским процессором i7-8550 собирает за 6 минут, Pro-шка собирает его же за 1 минуту 28 секунд, а Air за 1 минуту 45 секунд). Если Вам такой "проигрыш" не критичен, то берите Air, но позаботьтесь о док-станции - портов мало. Можете еще Mac-mini взять, если "мобильничать" не будете и есть большой монитор.
ЕМНИП опция -delete не работает с НЕ ПУСТЫМИ директориями.
Нужно делать -exec rm -rf {} \;
Поправьте если ошибаюсь.
да уж... точно сказано - операционка для программистов :-))
Про logrotate было бы интересно послушать. Я пробовал как-то настроить его на одну программу, но программа не хотела писать новые даные в новый файл, а продолжала их писать в старый файл, несмотря на то что он логротейтом уже переименовался и создался новый файл с оригинальным именем. Интересно узнать как решить эту проблему
Тебе нужно сделать так, чтобы программа "отпустила" старый файл. Некоторым достаточно kill -HUP отправить, кого-то придётся перезапускать. Зависит от программы.
Давайте видео по log rotate
Клёвая утилита parallel, позволяющая за 5 сек на 100500 машинах распараллелить задачу, голосую за нее
не понял про tree, у меня не получилось так отобразить
С GUI ещё одна проблема - инструкции пользователя и обучение. Например полтора десятка команд в терминале, решающих некую задачу, уместились на листе А4. Если для решения аналогичной задачи использовать GUI, то эти полтора десятка команд скорее всего придётся печатать на нескольких листах А4 с фотками и пояснениями. Терминал - это очень удобно и в очень многих случаях. Развиваться ему и совершенствоваться.
Вопрос (а может быть и идея для ещё одного видосика) - нет ли для терминала утилиты исправления текста, напечатанного в неправильной раскладке, типа виндового PuntoSwither?
Вы пишете длинную команду или цепочку оных не глядя в терминал? Потом когда достигли последнего символа , поднимаете голову и с ужасом понимаете что раскладка не та?
@@nikitamozg1 вар1 короткие и бысто, а потом выбешивает стирать и заново кнопки тыкать. вар2 длинный текст - не команды, а именно просто текст, например в виме.
Контент огхонь! Я аж сбрызнул
Алексей, я не эксперт в *nix cli, но сравнивая с другими (например PowerShell) заметил странную вещь:
например, команда exec выглядит странно с точки зрения пайплайнов:
find ... -exec ... | sort
было бы разумнее, когда output передаался в exec через |, а не командой
find ... | exec ... | sort
Чаще используется паттерн find | xargs | что-то ещё
Я, как и многие другие, опцию exec использую исключительно редко
предлагаю осветить тему профайлинга
Опа наконец-то (я котан, не собак)
Во, замечательно! )
logrotate - да
Спасибо за видео! А что ты думаешь про актуальность этой концепции Unix? Именно то, что между утилитами передаётся простой текст, а не объекты (или структуры, это уже отдельный вопрос как назвать). Из-за этого могут быть грабли разные. Самые частые - имена файлов с пробелами. При передачи таких имён от одной утилиты к другой части имени могут быть восприняты как отдельные файлы. А ещё проблема, если имя файла начинается с дефиса, т.к. следующая команда может воспринять это как параметр для неё самой. Это самые частые грабли, а так их довольно много. Не пора ли пересмотреть философию Unix и "протоптать" новый Unix way?
Да, грабли с пробелами и дефисами в начале имён есть, но тут всегда есть рекомендация не использовать пробелы в имени файлов и не начинать их с дефисов (не уверен, но возможно в каком-то официальном документе-гайде это даже прописано, я эти рекомендации в какой-то книге впервые читал). По имени файлов с дефисом первым символом есть способ - ставишь перед списком файлов два дефиса, всё что идёт после них не будет воспринято как опции, будет воспринято как аргументы. Ты вероятно в курсе, но если кто-то прочтёт, будет полезно:)
В пустой директории создаём файл с именем file и file2:
true >file
true >file2
Выполняем вывод всех файлов в простом формате:
ls *
Результат - вывелись 2 файла:
file file2
Теперь создаём корявый файл с именем "-lah":
true >-lah
И снова делаем ls *, результат на этот раз другой, что-то типа такого:
rw-r--r-- 1 root root 0 Feb 4 21:35 file
rw-r--r-- 1 root root 0 Feb 4 21:36 file2
То есть файл "-lah" воспринялся не как файл, а как параметры команде `ls`, и по сути запустилась команда ls -lah вместо просто ls. Чтобы такого не было, надо ставить перед списком файлов два дефиса:
ls -- *
Тогда результат будет:
-lah file file2
и файл с корявым названием "-lah" ни на что не повлияет.
@@t0digital Спасибо за развёрнутый ответ. Да, я в курсе. Было бы здорово упомянуть про это в следующих роликах, рассказать про такие грабли и их безопасный обход, в том числе и в скриптах (про тот же разделитель в bash).
А вообще мой вопрос всё же о другом был. Интересно мнение, что ты думаешь об устаревании подобных концепций Unix? Для своего времени они были очень хороши. А сейчас? Да, как ты показал в ролике, есть много мощных утилит, которые работают по тем самым принципам. Но данные с тех самых пор стали значительно сложнее и не всегда легко представимы в виде текста. Нужно ли развивать философию Unix в сторону работы с объектами или и так всё хорошо?
Что в итоге было с макбуком ? Заменили или отремонтировали ?
Заменили материнку и вернули
ой да, помню свой первый Дебиан начал изучать, поиск файлов наиболее важный навык особенно для тех, кто с Винды пришел. Стандарты POSIX диктуют определённую файловую структуру ОС и все хранится в определенном месте, крайне неудобно и нужно ТУПО знать пути для переменных сред, временных файлов, конфиги и бинарники...
Не стоит так же забывать про команду `locate`
Да, можно было еще сравнить ее с find
которая во-первых не везде есть, во-вторых она по крону создаёт себе базу и по ней потом ищет в отличии от find, который делает это по живым данным.
23:00 Прям в корне ищешь? find / -name "module" ?
Да. Возможно со звездочками вокруг module. И с sudo.
Ютубу неплохо было б доработать функцию замедленного воспроизведения, а то искажения мешают. А смотреть этого парня на скорости 1× просто невозможно :)