Практические примеры, которые приведены в этой статье, помогут вам освоить очень эффективную и крайне полезную команду find.
Она используется для поиска файлов и папок через командную строку Linux.
Команда find — одна из самых мощных и широко применимых команд. При этом она крайне объёмная и насчитывает более 50 опций, в которых легко запутаться, особенно в сочетании с командами exec или xargs.
Если вы сисадмин или разработчик, избежать команды find
при работе с командной строкой не получится. Так что давайте научимся её не бояться и пользоваться её возможностями в полной мере.
Для этого разберём самые распространённые случаи практического применения команды find. Но для начала покажу вам синтаксис и принцип работы с командой.
Команда find в Linux
Общий синтаксис команды find выглядит так:
find [directory to search] [options] [expression]
Всё, что в квадратных скобках, указывать необязательно. А значит, выполнить команду find можно вообще без опций и параметров. Она выдаст список всех файлов и папок в текущем расположении. Мало полезного, да?
Так что давайте взглянем на параметры подробнее:
-
directory to search
(папка поиска) — это расположение, с которого вы хотите начать поиск. Поиск по умолчанию рекурсивный и начинается с текущего расположения. -
options
(опции) содержит указание типа поиска: по имени, типу файла, времени изменения и так далее — тут может быть более 50 вариантов. -
expression
(выражение) содержит поисковый запрос. Если вы ищете файл по имени, параметр expression должен содержать имя файла. Если ищете файлы с именем, соответствующим заданному шаблону, поисковое выражение — это шаблон.
Приведу простой пример:
find . -type f -name myfile
Такая команда выполнит поиск файла (именно файла, не папки) с именем myfile
в текущей папке и подпапках. Опция -type f
сужает поиск до файлов. Точка (.
) указывает на текущую папку.
Рассмотрим несколько примеров применения команды find.
Поиск файлов и папок по имени
Так выполняется поиск файлов и папок по имени:
find . -name SEARCH_NAME
Поскольку тип объекта не указан, команда выполняет поиск и файлов, и папок.
Пример ниже — поиск файлов и папок с именем «mystuff»:
abhishek@LHB:~/Examples$ find -name mystuff
./new/mystuff
./mystuff
Поиск только файлов или только папок
Если нужно искать только файлы, на помощь придёт опция type -f:
find . -type f -name SEARCH_NAME
Тип и имя можно указывать в любом порядке. Возьмём пример выше и ограничим круг поиска файлами:
abhishek@LHB:~/Examples$ find -type f -name mystuff
./mystuff
Если нужно найти папку, укажите тип type -d:
find . -type d -name SEARCH_NAME
Вот пример нашего поиска уже по папкам:
abhishek@LHB:~/Examples$ find -type d -name mystuff
./new/mystuff
Поиск без учёта регистра
Команда find по умолчанию учитывает регистр. Чтобы выполнить поиск по имени файла без учёта регистра, надо ввести опцию -iname
вместо -name
.
find . -type f -iname SEARCH_NAME
С поиском по папкам (type -d
) это тоже работает.
abhishek@LHB:~/Examples$ find -iname mystuff
./new/mystuff
./MyStuff
./mystuff
Скриншот последних трёх примеров:
Поиск файлов по расширению (важно)
Одно из самых популярных применений команды find — поиск файлов определённого типа, то есть по заданному расширению.
Скажем, вы хотите найти все файлы С++ в текущих папках. Файлы С++ имеют расширение .cpp, и вот как их можно найти:
find . -type f -name "*.cpp"
С такими опциями команда find найдёт только файлы (-type f
) с именами, оканчивающимися на .cpp
.
abhishek@LHB:~$ find . -type f -name "*.cpp"
./file.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream2/zstream_test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/test.cpp
./.cargo/registry/src/github.com-1ecc6299db9ec823/libz-sys-1.1.3/src/zlib/contrib/iostream/zfstream.cpp
При работе с командой find всегда заключайте поисковое выражение в двойные кавычки.
С чем связана рекомендация заключать поисковый запрос в двойные или одинарные кавычки? Дело в том, что без кавычек оболочка будет работать с символом * как с джокером и выполнит подстановку.
Вот что будет, если ввести запрос без кавычек:
find . -type f -name *.cpp
Оболочка распознает подстановочный знак * и заменит его всеми файлами в текущей папке, чьи имена заканчиваются на .cpp.
Это сработает, если такой файл всего один, но если их несколько, оболочка пожалуется на некорректный синтаксис.
В нашем случае файл .cpp всего один, и после подстановки команда выглядит так: find . -type f -name file.cpp
. Она работает, поскольку file.cpp
— корректный поисковый запрос.
А вот файлов .txt в той же папке два, и когда команда расширяется до find . -type f -name another.txt new.txt
, выводится предупреждение, потому что поисковых запросов больше одного.
Именно поэтому сам поисковый запрос всегда следует заключать в двойные кавычки.
Поиск нескольких файлов с несколькими расширениями (или условием)
Команда, рассмотренная выше, нужна для поиска файлов по расширению. А что если нужно найти файлы с несколькими разными расширениями?
Вместо того чтобы прогонять команду find несколько раз, введите её один раз с опцией -o, которая работает как логическое условие «или»:
find . -type f -name "*.cpp" -o -name "*.txt"
Например:
abhishek@LHB:~/Examples$ find . -type f -name "*.txt" -o -name "*.cpp"
./new.txt
./file.cpp
./new/new.txt
./new/dir2/another.txt
./new/dir1/new.txt
./another.txt
Поиск файлов в заданной папке
Все приведённые примеры иллюстрируют поиск в текущей папке, потому что команда включает в себя точку (.
).
Чтобы выполнить поиск в заданной папке, не покидая текущего расположения, можно заменить точку абсолютным или относительным путём к нужной папке.
abhishek@LHB:~/Examples$ find ./new -name mystuff
./new/mystuff
Поиск файлов в нескольких папках
Если нужные вам файлы могут находиться в нескольких папках, можно выполнить поиск во всех этих расположениях за один раз. Просто укажите все пути к папкам при введении команды find:
find ./location1 /second/location -type f -name "pattern"
Поиск пустых файлов и папок
Опция -empty
позволяет использовать команду find для поиска пустых файлов и папок.
Найти таковые в текущей папке можно следующим образом:
find . -empty
Можно указать тип объектов, чтобы искать только файлы или только папки:
find . -empty -type f
Кроме того, можно в таком режиме искать файлы по имени:
find . -empty -type f -name "*.cpp"
Поиск крупных и мелких файлов (поиск по размеру файла)
Команда find поможет найти крупные или мелкие файлы, если выполнить поиск по размеру. Но это работает только для файлов, не для папок.
Используется опция -size
с аргументом +N для файлов размером более N и -N для файлов размером менее N.
А вот как можно найти файлы точного заданного размера (50 КБ):
find . -size 50k
Так выполняется поиск файлов размером более 1 ГБ в текущей папке:
find . -size +1G
А так — файлов, не превышающих 20 байт:
find . -size -20c
Для поиска файлов размером более 100 МБ, но менее 2ГБ, введите:
find . -size +100M -size -2G
Поиск по размеру тоже можно сочетать с поиском по имени файла. Таким образом, найти в корневом каталоге все файлы размером более 500 МБ с именем, оканчивающимся на .log, можно так:
find / -size +500M -name "*.log"
Для справки:
-
c
– байты -
k
– килобайты -
M
– мегабайты -
G
– гигабайты
Поиск недавно изменённых файлов (поиск по времени изменения или создания)
Вы ведь знакомы с параметрами mtime, atime и ctime?
- Mtime – время последнего изменения файла
- Ctime – время создания файла
- Atime – время последнего доступа к файлу
Вы не раз столкнётесь с ситуацией, когда нужен список всех недавно изменённых файлов. В таких случаях на помощь приходит поиск по времени изменения.
Найти все файлы, претерпевшие изменения за последние трое суток (3*24ч), можно так:
find . -type f -mtime -3
А все файлы, созданные пять и более дней назад, ищутся так:
find . -type f -ctime +5
Понимаю, что 24 часа — большой срок. Что если нужно выявить файлы, изменённые всего пару минут назад? Для этого предусмотрены опции mmin
, amin
и cmin
.
Так выглядит команда поиска всех файлов, изменённых за последние пять минут:
find . -type f -mmin -5
Можно не только указать имя файла, но и ограничить временной промежуток с двух сторон. Команда ниже выполнит поиск всех файлов .java, изменённых не ранее 30 и не позднее 20 минут назад.
find . -type f -mmin +20 -mmin -30 -name "*.java"
Поиск файлов с определёнными настройками доступа
Надеюсь, вы имеете представление о разрешениях файлов в Linux.
Команда find позволяет выполнить поиск файлов по разрешению и режиму доступа.
find -perm mode
Поищем в текущей папке, к примеру, все файлы с режимом доступа 777:
find . -perm 777
А так можно найти все файлы с правами на чтение и запись для всех типов пользователей (только точное совпадение; файлы с правами на выполнение для всех не отобразятся):
find . -perm a=r+w
Поиск файлов по владельцу
Можно также найти файлы, принадлежащие определённому пользователю.
Вот как обнаружить в текущей папке все файлы пользователя Джона:
find . -type f -user John
Эта опция сочетается с другими, будь то размер или время и имя файла:
find . -type f -user John -name "*.cpp"
Отключение рекурсивного поиска для поиска только в текущей папке
По умолчанию команда find выполняет поиск во всех подпапках текущего расположения. Если это не требуется, можно ограничить глубину поиска значением «1». Так вы ограничитесь поиском в текущей папке, не залезая в подпапки.
find . -maxdepth 1 -type f -name "*.txt"
Исключение папки из поиска
Если нет необходимости производить поиск в той или иной папке, можно исключить её с помощью опций path, prune и логического «или».
find . -path "./directory_exclude/*" -prune -o -name SEARCH_NAME
Будьте внимательны: путь к папке должен оканчиваться на *, затем идёт -prune
и только потом -o
.
Попросту говоря, при поиске с опцией prune папка, указанная с помощью path, игнорируется. Prune всегда сопровождается флагом -o
(логическое «или»), чтобы папки, которые не были исключены, просматривались на наличие искомого объекта.
Дальнейшая работа с результатами команды find: exec и xargs
Итак, мы изучили различные способы поиска файлов по заданным параметрам. Это хорошо. А теперь следующий шаг: рассмотрим, какие действия можно выполнять с результатами команды find.
Например, как найти файлы с именем, соответствующим определённому шаблону, и переименовать их за одно действие? Или выявить и удалить пустые файлы?
Вам уже известно, что в Linux можно использовать перенаправление ввода-вывода, чтобы объединить результаты одной команды с вводом другой. Но с результатами команды find это не сработает — по крайней мере, не напрямую.
Чтобы выполнить действия над результатом команды find, есть два варианта:
- Применить exec
- Применить xargs
Использование find и exec
Допустим, вам нужен подробный список (ls -l) файлов, найденных командой find. Вот как его получить:
find . -type f -name "*.txt" -exec ls -l {} +
Результат будет таким:
abhishek@LHB:~/Examples$ find . -type f -name "*.txt" -exec ls -l {} +
-rw-rw-r-- 1 abhishek abhishek 39 Oct 13 19:30 ./another.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 15:36 ./new/dir1/new.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 15:36 ./new/dir2/another.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 18:51 ./new/mystuff/new.txt
-rwxrwxrwx 1 abhishek abhishek 35 Oct 13 15:37 ./new/new.txt
-rw-rw-r-- 1 abhishek abhishek 35 Oct 13 18:16 ./new.txt
Многие забывают ввести {} +
в конце команды exec. Но это необходимо — как и пробел между скобками {} и плюсом +.
Фигурные скобки ссылаются на результат выполнения команды find. Их содержимое может иметь следующий вид: {файл 1, файл 2, файл 3}. Символ +
используется как конец команды exec.
Есть ещё один вариант оформления exec:
find . -type f -name "*.txt" -exec ls -l {} ;
В данном случае плюс заменён на точку с запятой. Дополнительная косая черта означает, что точка с запятой не является специальным символом.
Преимущество сочетания {} +
заключается в меньшем количестве команд ( ls -l file1 file2 file3
), тогда как комбинация {} ;
запустит цепочку ls -l file1
, ls -l file2
и так далее.
Однако сочетание {} ;
даёт возможность использовать {}
несколько раз в одном и том же выражении exec. Так, приведённая ниже команда переименует все обнаруженные файлы с расширением .old.
find . -type f -name "*.txt" -exec mv {} {}.old ;
Использование команды xargs
Многие пользователи Linux сталкиваются с необходимостью перенаправления ввода-вывода довольно часто. Но команда exec с цепочкой символов {} +
кажется им слишком сложной.
И тут на помощь приходит xargs. Нужно просто перенаправить вывод команды find в команду xargs через конвейер.
find . -type f -name "*.txt" | xargs ls -l
Синтаксис куда проще, верно? К тому же команда xargs тоже весьма эффективна. Подробнее о ней — в статье по ссылке.
Сочетание команд find и grep
Теперь вы умеете совмещать команду find с xargs и exec, и пора перейти на следующий уровень — объединить find и grep.
Для сисадминов и разработчиков комбинация команд find и grep — одна из самых распространённых и вместе с тем самых полезных.
Команда find находит файлы с именем, соответствующим шаблону, а затем команда grep выполняет поиск по их содержимому.
Например, вам нужно найти все файлы .txt, в которых есть имя «Alice». Объединить команды find и grep можно так:
find . -type f -name "*.txt" -exec grep -i alice {} +
А можно с помощью xargs:
find . -type f -name "*.txt" | xargs grep -i alice
Конечно, пример элементарный, но если команда grep вам знакома, можете использовать её на своё усмотрение.
И это далеко не все возможности команды find…
Перечислить все опции и примеры использования команды find практически невозможно. Её возможностям нет границ, но если вы освоите её принципы, она окажется очень кстати во многих ситуациях. Решающий фактор — как сочетается логика действия разных опций и команд.
Надеюсь, моя подборка примеров использования find была для вас полезна. Если у вас есть вопросы или предложения, как сделать эту статью лучше, добро пожаловать в комментарии.
НЛО прилетело и оставило здесь промокоды для читателей нашего блога:
— 15% на все тарифы VDS (кроме тарифа Прогрев) — HABRFIRSTVDS.
— 20% на выделенные серверы AMD Ryzen и Intel Core — HABRFIRSTDEDIC.
Доступно до 31 декабря 2021 г.
Как быстро найти файл в Windows с помощью cmd ?
Приветствую вас, сейчас мы научимся, как найти файл или папку в Windows без помощи неважно работающего проводника системы, и будем использовать для этого либо команды в MS-DOS, либо с помощью его эмулятора – консоли команд cmd. У такого способа есть лишь один недостаток, который связан лишь с беспричинной боязнью пользователей перед текстовым интерфейсом работы с системой и сложившейся привычкой к графическому. Однако, по сути в обоих случаях нам всё равно приходится вручную набирать условия поиска потерявшегося файла или пакета файлов, а здесь без «вседозволенности» консоли просто не обойтись. От команд давно почившей операционной системы MS-DOS не скроется ничего, и cmd способна без труда открыть путь ко всем документам и директориям, которые находятся в чреве Windows .
Что нужно, чтобы найти файл в Windows ?
Нам нужно имя файла и программу, которая его создала либо умеет читать.
Итак, если уверены, что файл просто «потерялся», вам нужно через консоль оказаться в корневой папке системы. Для этого введём пару символов:
cd
и вы там. Если вы точно знаете имя файла или документа, это не проблема даже для поисковика Windows. Но есть ведь задача и посложнее…
А теперь, представьте, что вам нужно найти файл или документ, имя которого вы и толком-то не помните. Допустим, в названии что-то было про «установку». То-ли «установкА», то-ли «установкИ», то-ли «установОК»… Не проблема – так Windows и спросите:
dir *установ*.* /s
где
- dir – команда отобразить список файлов и директорий
- * — что-то там… (ну забыл я, мол)
- . – расширение файла (текстовый, музыка, PDF-ка, фильм и т.п.)
- /s – команда на поиск в текущей директории и подкаталогах.
Результаты через пару мгновений будут выглядеть примерно так:
На этот же манер можно найти файл, если вы знаете, какое расширение он имеет, т.е. какой программой открывается. Командой
dir *.xls /s
или
dir *.docx /s
можно будет найти документы Exel и Word. Присмотритесь к примерам разновидностей команд (вариаций здесь множество):
dir *.txt *.doc
отобразит в одной выдаче документы с расширениями .doc и .txt
dir /p
команда с этим атрибутом (в отличие от /s) поможет. если результатов будет множество, а вам удобнее просматривать их с небольшим интервалом.
dir /on
выдаст список файлов и директорий в алфавитном порядке
dir /s |find "i" |more
отображает все папки и их содержимое, включая время создания, количество файлов в каждой, сколько места занимают.
Успехов
Обновлено: 01.02.2022
Опубликовано: 25.07.2016
Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.
Синтаксис
Примеры
Поиск по имени
По дате
По типу файла
По правам
По содержимому
С сортировкой по дате изменения
Лимиты
Действия над найденными объектами
Запуск по расписанию в CRON
Общий синтаксис
find <где искать> <опции>
<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».
<опции> — набор правил, по которым выполнять поиск.
* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.
Описание опций
Опция | Описание |
---|---|
-name | Поиск по имени. |
-iname | Регистронезависимый поиск по имени. |
-type |
Тип объекта поиска. Возможные варианты:
|
-size | Размер объекта. Задается в блоках по 512 байт или просто в байтах (с символом «c»). |
-mtime | Время изменения файла. Указывается в днях. |
-mmin | Время изменения в минутах. |
-atime | Время последнего обращения к объекту в днях. |
-amin | Время последнего обращения в минутах. |
-ctime | Последнее изменение владельца или прав на объект в днях. |
-cmin | Последнее изменение владельца или прав в минутах. |
-user | Поиск по владельцу. |
-group | По группе. |
-perm | С определенными правами доступа. |
-depth | Поиск должен начаться не с корня, а с самого глубоко вложенного каталога. |
-maxdepth | Максимальная глубина поиска по каталогам. -maxdepth 0 — поиск только в текущем каталоге. По умолчанию, поиск рекурсивный. |
-prune | Исключение перечисленных каталогов. |
-mount | Не переходить в другие файловые системы. |
-regex | По имени с регулярным выражением. |
-regextype <тип> | Тип регулярного выражения. |
-L или -follow | Показывает содержимое символьных ссылок (симлинк). |
-empty | Искать пустые каталоги. |
-delete | Удалить найденное. |
-ls | Вывод как ls -dgils |
Показать найденное. | |
-print0 | Путь к найденным объектам. |
-exec <команда> {} ; | Выполнить команду над найденным. |
-ok | Выдать запрос перед выполнением -exec. |
Также доступны логические операторы:
Оператор | Описание |
---|---|
-a | Логическое И. Объединяем несколько критериев поиска. |
-o | Логическое ИЛИ. Позволяем команде find выполнить поиск на основе одного из критериев поиска. |
-not или ! | Логическое НЕ. Инвертирует критерий поиска. |
Полный набор актуальных опций можно получить командой man find.
Примеры использования find
Поиск файла по имени
1. Простой поиск по имени:
find / -name “file.txt”
* в данном примере будет выполнен поиск файла с именем file.txt по всей файловой системе, начинающейся с корня /.
2. Поиск файла по части имени:
find / -name “*.tmp”
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
3. Несколько условий.
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
find . -name “sess_*” -a -name “*cd”
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
find . -name “sess_*” -o -name “*cd”
в) Более компактный вид имеют регулярные выражения, например:
find . -regex ‘.*/(sess_.*cd)’
find . -regex ‘.*/(sess_.*|.*cd)’
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
4. Найти все файлы, кроме .log:
find . ! -name “*.log”
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
find . -type f -mtime +60
* данная команда найдет файлы, которые менялись более 60 дней назад.
Или в промужутке:
find . -mmin -20 -mmin +10 -type f
* найти все файлы, которые менялись более 10 минут, но не более 20-и.
2. Поиск файлов с помощью newer. Данная опция доступна с версии 4.3.3 (посмотреть можно командой find –version).
а) дате изменения:
find . -type f -newermt “2019-11-02 00:00”
* покажет все файлы, которые менялись, начиная с 02.11.2019 00:00.
find . -type f -newermt 2019-10-31 ! -newermt 2019-11-02
* найдет все файлы, которые менялись в промежутке между 31.10.2019 и 01.11.2019 (включительно).
б) дате обращения:
find . -type f -newerat 2019-10-08
* все файлы, к которым обращались с 08.10.2019.
find . -type f -newerat 2019-10-01 ! -newerat 2019-11-01
* все файлы, к которым обращались в октябре.
в) дате создания:
find . -type f -newerct 2019-09-07
* все файлы, созданные с 07 сентября 2019 года.
find . -type f -newerct 2019-09-07 ! -newerct “2019-09-09 07:50:00”
* файлы, созданные с 07.09.2019 00:00:00 по 09.09.2019 07:50
По типу
Искать в текущей директории и всех ее подпапках только файлы:
find . -type f
* f — искать только файлы.
Поиск по правам доступа
1. Ищем все справами на чтение и запись:
find / -perm 0666
2. Находим файлы, доступ к которым имеет только владелец:
find / -perm 0600
Поиск файла по содержимому
find / -type f -exec grep -i -H “content” {} ;
* в данном примере выполнен рекурсивный поиск всех файлов в директории / и выведен список тех, в которых содержится строка content.
С сортировкой по дате модификации
find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r
* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.
Лимит на количество выводимых результатов
Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:
find /data -type f -printf ‘%TY-%Tm-%Td %TT %pn’ | sort -r | head -n 1
Поиск с действием (exec)
1. Найти только файлы, которые начинаются на sess_ и удалить их:
find . -name “sess_*” -type f -print -exec rm {} ;
* -print использовать не обязательно, но он покажет все, что будет удаляться, поэтому данную опцию удобно использовать, когда команда выполняется вручную.
2. Переименовать найденные файлы:
find . -name “sess_*” -type f -exec mv {} new_name ;
или:
find . -name “sess_*” -type f | xargs -I ‘{}’ mv {} new_name
3. Переместить найденные файлы:
find . -name “sess_*” -type f -exec mv {} /new/path/ ;
* в данном примере мы переместим все найденные файлы в каталог /new/path/.
4. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:
find . -name “*.tmp” | wc -l
5. Изменить права:
find /home/user/* -type d -exec chmod 2700 {} ;
* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.
6. Передать найденные файлы конвееру (pipe):
find /etc -name ‘*.conf’ -follow -type f -exec cat {} ; | grep ‘test’
* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.
7. Произвести замену в файлах с помощью команды sed:
find /opt/project -type f -exec sed -i -e “s/test/production/g” {} ;
* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.
Чистка по расписанию
Команду find удобно использовать для автоматического удаления устаревших файлов.
Открываем на редактирование задания cron:
crontab -e
И добавляем:
0 0 * * * /bin/find /tmp -mtime +14 -exec rm {} ;
* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.
Работа с терминалом может пугать тех, кто привык работать с графическими пользовательскими интерфейсами (GUI). Тем не менее, это важный инструмент, к работе с которым разработчику Python нужно привыкнуть. И как только вы улучшите свои навыки по работе с терминалом, он станет чрезвычайно мощным инструментом в вашем арсенале. С помощью всего нескольких команд в терминале вы можете выполнять задачи, которые невозможно или, по крайней мере, очень утомительно выполнять в графическом интерфейсе.
В этом уроке вы узнаете, как:
- Найти терминал в операционной системе
- Открыть терминал
- Осуществить навигацию по файловой системе с помощью основных команд
- Создать файлы и папки с помощью терминала
- Управлять пакетами с помощью pip-команд
- Отслеживать файлы с помощью Git в терминале
Если вы новичок в работе с терминалом или хотите расширить свое понимание его возможностей, то это руководство станет отличным стартом. В нем вы познакомитесь с некоторыми основными командами и узнаете, как использовать pip и Git для управления проектами в терминале.
Бесплатный материал: Нажмите здесь, чтобы получить бесплатную памятку полезных команд, которые помогут вам начать работу с терминалом.
Установите и откройте терминал
Раньше термин терминал ассоциировался с неуклюжим аппаратным обеспечением, которое вы использовали для ввода данных в компьютер. В настоящее время люди под терминалом обычно подразумевают эмулятор терминала и имеют в виду какое-то терминальное программное обеспечение, которое можно найти на большинстве современных компьютеров.
Примечание
Есть еще два других термина, которые время от времени используются в сочетании с терминалом:
- Оболочка — это программа, с которой вы взаимодействуете при выполнении команд в терминале.
- Интерфейс командной строки (CLI) — это программа, предназначенная для запуска в оболочке внутри терминала.
Другими словами, оболочка предоставляет команды, которые вы используете в интерфейсе командной строки, а терминал — это приложение, которое вы запускаете для доступа к оболочке.
Если вы используете компьютер с Linux или macOS, то терминал уже встроен. Вы можете начать использовать его прямо сейчас.
В Windows у вас также есть доступ к приложениям командной строки, таким как Command Prompt. Однако при работе с данным руководством и работы с терминалом в целом вместо этого следует использовать приложение терминала Windows.
Далее вы узнаете, как установить и открыть терминал в Windows и как найти терминал в Linux и macOS.
Терминал Windows — это современное и многофункциональное приложение, которое дает вам доступ к командной строке, нескольким оболочкам и расширенным параметрам настройки. Если у вас Windows 11 или выше, есть вероятность, что терминал Windows уже присутствует на вашем компьютере. В противном случае вы можете скачать приложение из Microsoft Store или из официального репозитория GitHub.
Прежде чем продолжить работу с этим учебным пособием, вам необходимо настроить терминал на вашем компьютере с Windows. Вы можете ознакомиться с документом «Your Python Coding Environment on Windows: Setup Guide», чтобы узнать, как установить терминал Windows.
После установки терминала Windows вы найдете его в меню «Пуск» в разделе Terminal. При запуске приложения вы должны увидеть окно, которое выглядит следующим образом:
Данное изображение и все последующие взяты отсюда.
Для удобства вы можете создать ярлык на рабочем столе для терминала или закрепить приложение на панели задач для быстрого доступа.
Linux
Вы можете найти терминальное приложение в меню приложений вашего дистрибутива Linux. Кроме того, вы можете нажать Ctrl
+ Alt
+ T
на клавиатуре или использовать панель запуска приложений и выполнить поиск по слову Terminal.
После открытия терминала вы должны увидеть нечто похожее:
То, как вы открываете терминал, также может зависеть от того, какой дистрибутив Linux вы используете.
macOS
Обычный способ открыть приложение терминала в macOS — открыть Spotlight Search и выполнить поиск Terminal. Вы также можете найти приложение терминала в папке приложения внутри Finder.
Когда вы открываете терминал, вы видите окно, похожее на изображение ниже:
После запуска терминального приложения вы увидите окно, ожидающее команд. Это похоже на взаимодействие со скриптом Python, который ожидает ввода данных пользователем.
Если вы хотите взаимодействовать с терминалом, вам нужно знать, какие команды терминала вы можете ввести, чтобы продолжить. В следующем разделе вы узнаете об основных командах терминала, которые помогут вам начать работу.
Изучите основные команды терминала
Для эффективной работы с терминалом важно понимать некоторые основные команды терминала и знать, как их использовать. Команды терминала — это инструкции, которые вы вводите в терминал для выполнения определенной задачи.
В зависимости от вашей операционной системы вы будете запускать команды терминала в определенной оболочке. Для Linux это, скорее всего, Bash, для более новых версий macOS — Zsh , а для Windows — PowerShell. Эти оболочки различаются по своим функциям, но у них общие основные команды.
Примечание
Вы можете думать о командах как о небольших программах, которые встроены в вашу оболочку или могут быть добавлены внешними приложениями. В PowerShell команды также называются cmdlets.
В этом разделе вы познакомитесь с наиболее часто используемыми командами терминала. Чтобы ознакомиться с ними, выберите свою операционную систему в переключателе платформ ниже:
Вот команды Windows, которые вы рассмотрите:
Linux + macOS:
Слова, написанные прописными буквами, являются ссылками на аргументы, допускаемые командами.
Далее вы узнаете, как перемещаться по файловой системе, а также создавать, редактировать и удалять файлы и каталоги. К концу этого раздела у вас будет прочная база для работы с терминалом и вы сможете уверенно выполнять многие повседневные задачи. Вы можете сохранить этот настрой и с его помощью решать другие задачи в терминале, такие как использование pip, взаимодействие с Git и создание интерфейсов командной строки с помощью Python.
Навигация по вашей файловой системе
Файловая система — это иерархическая структура каталогов и файлов на компьютере. Обычно это то, что вы видите, когда открываете приложение файловой системы с графическим интерфейсом, такое как проводник Windows или Finder в macOS. Это также отличное место для начала вашего путешествия по терминалу, но опять же, вы просто знакомитесь со всеми возможностями терминала.
Папка, которую вы сейчас открыли в файловой системе, является текущим рабочим каталогом (current working directory, cwd). Как вы заметите, вы используете рабочий каталог в качестве точки отсчета для многих операций с файловой системой. Понимание устройства файловой системы и текущего рабочего каталога важно для эффективной навигации и управления файлами и каталогами в терминале.
После того как вы открыли приложение терминала, то, скорее всего, окажетесь в пользовательской папке вашей операционной системы. Вы увидите командную строку, ожидающую вашего ввода. В качестве ввода можно использовать самые разные команды. Но некоторые общие команды предназначены для навигации по файловой системе.
Чтобы начать работу, узнайте свой текущий рабочий каталог:
$ pwd
/Users/realpython
Команда pwd
(расшифровывается как print working directory) используется для определения вашего текущего местоположения в файловой системе. Здесь pwd
показывает, что текущим рабочим каталогом является /Users/realpython
.
Рабочий каталог — это текущий каталог, в котором вы работаете. Здесь по умолчанию будут выполняться команды.
Подробнее о текущем рабочем каталоге
Есть два термина, которые стоит изучить в контексте текущего рабочего каталога:
- Переменные среды
- PATH (путь)
Переменные среды — это переменные, в которых хранится информация о состоянии среды, в которой работает терминал. Их можно использовать для хранения такой информации, как текущий рабочий каталог, расположение установленного программного обеспечения или домашний каталог пользователя. Терминал может получить доступ и использовать эту информацию, чтобы определить, как работать и где искать файлы.
PATH — это переменная среды, в которой хранится список каталогов. Чтобы увидеть, какие пути находятся в вашем PATH
, вызовите следующую команду:
Windows
PS> (cat ENV:Path) -Split ";"
Linux + macOS
$ echo "${PATH//:/n}"
Когда вы вводите команду в терминал, система начинает искать программу, соответствующую этой команде, в каталогах, перечисленных в PATH
. Список, который появляется после выполнения предыдущей команды, — это список мест, которые будет искать ваша система при выборе программы для запуска.
Чтобы увидеть, какие файлы и папки содержатся в директории /Users/realpython
, вы можете использовать ls
(сокращение от list):
$ ls
Applications Movies
Desktop Music
Documents Pictures
Downloads Public
Library
Если вы введете ls
и нажмете на Enter, вы увидите список всех элементов в текущем рабочем каталоге. В этом случае в примере показаны папки, которые вы, скорее всего, найдете в пользовательском каталоге на компьютере с macOS.
Вы также можете использовать флаг -a
с командой ls
, которая являет сокращением от all. Флаг -a покажет вам все элементы в текущем рабочем каталоге, включая скрытые элементы.
Другой флаг, который вы можете использовать, это -l
, сокращение от long. Когда вы используете этот флаг вместе с ls
, команда показывает вам подробную информацию об элементах в текущем рабочем каталоге.
Вы также можете комбинировать эти флаги, чтобы показать подробную информацию обо всех элементах, включая скрытые, с помощью ls -al
:
$ ls -al
total 80
drwxr-xr-x+ 25 realpython staff 800 Nov 26 11:51 .
drwxr-xr-x 6 root admin 192 Nov 7 13:22 ..
-rw-r--r--@ 1 realpython staff 14340 Nov 7 16:04 .DS_Store
drwx------ 134 realpython staff 4288 Nov 8 18:37 .Trash
drwx------@ 3 realpython staff 96 Dec 3 2021 Applications
drwx------@ 22 realpython staff 704 Nov 7 16:00 Desktop
drwx------+ 4 realpython staff 128 Nov 17 2021 Documents
drwx------+ 3 realpython staff 96 Nov 1 2021 Downloads
drwx------@ 86 realpython staff 2752 Nov 7 21:08 Library
drwx------ 6 realpython staff 192 Jul 12 14:53 Movies
drwx------+ 4 realpython staff 128 Nov 26 2021 Music
drwx------+ 4 realpython staff 128 Nov 1 2021 Pictures
drwxr-xr-x+ 4 realpython staff 128 Nov 1 2021 Public
Вывод покажет тип файла, разрешение, владельца, размер и временную отметку всех элементов в текущем рабочем каталоге, включая скрытые файлы и папки. Вот, например, скрытые элементы .DS_Store
и .Trash
.
Примечание
Вы можете распознать скрытые элементы в терминале по точке .
в начале их имени, но есть несколько исключений, которые не следует путать со скрытыми файлами. Одна точка .
в приведенном выше списке представляет текущий каталог, а две точки ..
указывают на родительский каталог. Вы поработаете с ними позже в этом уроке.
Скрытые файлы и папки по умолчанию не отображаются. Это нормально для обычных пользователей. Но для вас, как разработчика, скрытые элементы могут быть интересны. В них часто хранятся данные конфигурации или настройки для различных приложений или самой системы.
Поначалу приведенный выше вывод может показаться немного ошеломляющим. Взгляните на эту строку, чтобы лучше понять вывод:
drwx------@ 22 realpython staff 704 Nov 7 16:00 Desktop
Эта строка дает вам ценную информацию об элементе. Там есть каталог с именем Desktop. Дата последнего изменения — 7 ноября в 16:00, размер — 704 байта.
Кроме того, вы можете увидеть информацию о правах владельца и группы. Если вы хотите узнать больше о нотации разрешений файловой системы, вы можете ознакомиться с notation of traditional Unix permissions.
Каждая папка в выводе ls
представляет собой подпапку внутри вашего текущего рабочего каталога. Чтобы изменить текущий рабочий каталог на Desktop/подпапку
, используйте команду cd
от change directory (смена директории):
$ pwd
/Users/realpython
$ cd Desktop
$ pwd
/Users/realpython/Desktop
Когда вы сначала вводите cd
, а затем имя каталога, текущий рабочий каталог будет изменен на указанный. После запуска команды cd Desktop
текущий рабочий каталог изменится на /Users/realpython/Desktop
.
Обратите внимание, что вы не указываете слеш /
или индикатор диска, как C:
, в начале Desktop. Вызов такого пути указывает на то, что вы хотите перейти по пути, относящемуся к каталогу, в котором вы сейчас находитесь.
Вы использовали относительный путь в приведенной выше команде для перехода во вложенную папку. Относительные пути упрощают обращение к элементам в вашей файловой системе, поскольку вам не нужно указывать полный путь от корневого каталога. При этом вы также можете перейти в любой каталог вашей файловой системы, используя полный или абсолютный путь:
- Windows
PS> cd C:UsersrealpythonDesktop
PS> pwd
C:UsersrealpythonDesktop
В этом случае cd команда изменяет текущий рабочий каталог на каталог C:UsersrealpythonDesktop
, независимо от его предыдущего местоположения.
- Linux + macOS
$ cd /Users/realpython/Desktop
$ pwd
/Users/realpython/Desktop
В этом случае cd команда изменяет текущий рабочий каталог на каталог /Users/realpython/Desktop
, независимо от его предыдущего местоположения.
Если вы используете для команды cd
несуществующий путь, терминал выдаст ошибку. Вскоре вы узнаете, как создавать новые каталоги. Перед этим сделайте заключительное действие в вашей файловой системе.
Чтобы переместиться на один каталог вверх, вы обычно используете не имя родительской папки, а две точки:
$ cd ..
$ pwd
/Users/realpython
Две точки ( ..) представляют родительский каталог текущего каталога. Использование cd ..перемещает вас на один каталог вверх в иерархии файловой системы.
В приложении файловой системы с графическим интерфейсом, таком как Windows Explorer или macOS Finder, вы должны щелкать маленькие значки папок курсором мыши. В терминальном приложении вы используете команды для выполнения задач — например, cd для перемещения между папками и ls для получения обзора элементов в каталоге.
Создание файлов и папок
В этом разделе вы узнаете, как создавать файлы и папки и управлять ими непосредственно из терминала с помощью некоторых новых команд. Кроме того, вы также продолжите узнавать информацию о содержимом каталога с помощью ls
и перемещаться между папками с помощью cd
.
Благодаря знаниям из этого раздела, вы сможете создавать и организовывать свои проекты в терминале.
Сначала убедитесь, что вашим текущим рабочим каталогом является Desktop. Затем используйте mkdir
для создания новой папки с именем rp_terminal
:
Windows
PS> cd C:UsersrealpythonDesktop
PS> pwd
C:UsersrealpythonDesktop
PS> mkdir rp_terminal
Linux + macOS
$ cd /Users/realpython/Desktop
$ pwd
/Users/realpython/Desktop
$ mkdir rp_terminal
Вы используете команду mkdir
для создания нового каталога. Команда расшифровывается как make directory. Здесь вы создаете новый каталог rp_terminal.
Затем перейдите в rp_terminal/ и создайте новый файл с именем hello_terminal.py
. Выберите свою операционную систему ниже и используйте соответствующую команду для конкретной платформы:
Windows
PS> cd rp_terminal
PS> ni hello_terminal.py
Linux + macOS
$ cd rp_terminal
$ touch hello_terminal.py
Когда вы запускаете команду touch
, вы создаете пустой файл с заданным именем. В данном случае файл представляет собой скрипт Python с именем hello_terminal.py
.
Если файл с указанным именем уже существует, то использование touch
обновляет временную метку файла до текущей даты и времени, но не изменяет его содержимое. Команда touch
также обновляет время доступа и модификации файла, даже если его содержимое остается неизменным.
Используйте ls
, чтобы убедиться, что вы успешно создали файл:
$ ls -l
total 0
-rw-r--r--@ 1 realpython staff 0 Nov 27 12:09 hello_terminal.py
Между 0 и временной меткой написано, что hello_terminal.py
в настоящее время пуст. Прежде чем вы начнете использовать команду echo
для добавления содержания в hello_terminal.py
, посмотрите, что происходит, когда вы вводите echo
с некоторым текстом:
$ echo 'print("Hello, terminal!")'
print("Hello, terminal!")
Как разработчик Python, вы знаете, что текст, который вы только что передали в echo
, является вызовом функции print()
. Точнее, команда echo
отправляет строку в стандартный поток вывода (stdout).
Stdout – место назначения по умолчанию для данных, отправляемых программой командной строки. Данные отображаются на экране, но вы можете указать терминалу перенаправить stdout
в файл:
$ echo 'print("Hello, terminal!")' > hello_terminal.py
Опять же, вы используете echo
для вывода заданной строки. Но на этот раз вы используете символ вставки >
для отправки вывода в hello_terminal.py
.
Примечание
Будьте осторожны при перенаправлении stdout
на существующие файлы. Любое содержимое файла будет перезаписано без предупреждения.
Когда вы перенаправляете вывод команды echo
в несуществующий файл, вы создаете файл на том же шаге.
Один из способов проверить, сработала ли команда, — снова просмотреть содержимое вашей папки:
$ ls -l
total 8
-rw-r--r--@ 1 realpython staff 26 Nov 27 12:12 hello_terminal.py
Отлично, сейчас размер hello_terminal.py
26 байт. Чтобы убедиться, что он содержит вызов функции print()
, вы можете использовать команду cat
:
$ cat hello_terminal.py
print("Hello, terminal!")
К сожалению, команде cat
не связана с кошками. Это сокращение от concatenate.
Когда вы используете cat
с несколькими файлами в качестве аргументов, вы можете объединить их и отображать содержимое один за другим. Если вы используете cat
только с одним файлом, то cat
– это удобный способ отображения содержимого файла в терминале.
Теперь, когда вы знаете, что hello_terminal.py
содержит допустимый код Python, вы можете запустить скрипт Python:
$ python hello_terminal.py
Hello, terminal!
Когда вы используете команду python, терминал ищет исполняемый файл Python в вашем PATH.
Если вы запустите команду python без каких-либо аргументов, вы запустите интерактивный интерпретатор Python, также известный как REPL. Когда вы запускаете команду с файлом скрипта в качестве аргумента, Python запускает предоставленный скрипт.
В этом случае вы выполняете hello_terminal.py
и видите результат своей функции print()
непосредственно в терминале. Это работает, потому что print()
использует stdout по умолчанию.
Примечание
Когда вы запускаете скрипт Python в терминале, он выводит все сообщения об ошибках в стандартный поток ошибок (stderr). Стандартный поток ошибок — это отдельный выходной канал, который используется специально для сообщений об ошибках, предупреждений и другой диагностической информации.
Благодаря этому отдельному выходному каналу для сообщений об ошибках вы можете независимо перенаправлять или фильтровать обычные выходные и диагностические сообщения.
Благодаря знаниям, полученным в этом разделе, вы теперь можете создавать, редактировать и проверять файлы Python в терминале. Теперь вы хорошо подготовлены для перехода к работе с инструментом командной строки, который необходим на вашем пути в качестве разработчика Python. Он называется pip, и он позволяет вам добавлять внешние пакеты в ваши проекты Python.
Управление пакетами с помощью pip
Менеджер пакетов pip — важный инструмент для управления пакетами Python. Чтобы избежать установки пакетов непосредственно в вашу системную установку Python, вы можете использовать виртуальную среду.
Виртуальная среда предоставляет изолированный интерпретатор Python для вашего проекта. Любые пакеты, которые вы используете в этой среде, не зависят от вашего системного интерпретатора. Это означает, что вы можете хранить зависимости вашего проекта отдельно от других проектов и системы в целом.
Создайте виртуальную среду
Python имеет встроенный venv модуль для создания виртуальных сред. Этот модуль помогает создавать виртуальные среды с помощью изолированной установки Python. После того как вы активировали виртуальную среду, вы можете устанавливать в нее пакеты. Пакеты, которые вы устанавливаете в одну виртуальную среду, изолированы от всех других сред в вашей системе.
Вы можете выполнить следующие шаги, чтобы создать и активировать виртуальную среду с именем venv
:
Windows
PS> python -m venv venv
PS> venvScriptsactivate
(venv) PS>
Linux + macOS
Linux + macOS
Обратите внимание, что командная строка изменилась. Это напоминание о том, что вы работаете в указанной виртуальной среде.
Примечание
Когда вы закончите работу с этой виртуальной средой, вы можете деактивировать ее, выполнив команду deactivate
.
Когда вы активируете виртуальную среду с помощью модуля Python venv
, вы добавляете новую запись в PATH
переменную среды. Новая запись указывает на расположение исполняемого файла Python виртуальной среды. Это гарант того, что когда вы запускаете команды или сценарии Python, они будут использовать этот конкретный исполняемый файл Python вместо любой другой версии Python, которая может быть установлена в вашей системе.
Устанавливаем пакет
В этом разделе вы установите Rich library Уилла Макгугана, которая позволит вам создавать красочные текстовые приложения пользовательского интерфейса (TUI) для терминала.
Перед установкой rich
проверьте, какие пакеты Python в настоящее время установлены в вашей виртуальной среде:
(venv) $ python -m pip list
Package Version
---------- -------
pip 22.3
setuptools 65.5.0
Выполнение команды python -m pip list
выводит список всех пакетов, установленных в текущей среде. И pip, и setuptools – это пакеты по умолчанию, которые вы найдете при запуске новой виртуальной среды.
Для установки rich
используйте следующую команду:
(venv) $ python -m pip install rich
Collecting rich
...
Installing collected packages: commonmark, pygments, rich
Successfully installed commonmark-0.9.1 pygments-2.14.0 rich-13.0.1
Кроме rich
, вы также установили некоторые другие зависимости, которые вам понадобятся, когда вы захотите их использовать с rich
. Чтобы проверить все установленные на данный момент пакеты, вы можете запустить python -m pip list
еще раз:
(venv) $ python -m pip list
Package Version
---------- -------
commonmark 0.9.1
pip 22.3
Pygments 2.14.0
rich 13.0.1
setuptools 65.5.0
Чтобы увидеть предлагаемые возможности rich
, запустите rich
без каких-либо аргументов:
(venv) $ python -m rich
В зависимости от возможностей вашего терминала вы должны увидеть такие примеры:
На скриншоте выше вы можете получить представление о том, что вы можете делать с библиотекой rich
. В конце концов, терминал не обязательно должен быть темным!
Теперь, когда ваш экран заполнен сверху вниз, вы можете снова очистить окно терминала. Для этого можно использовать clear
команду:
(venv) $ clear
Вы используете clear
команду для очистки экрана терминала. Он удаляет весь текст и содержимое, отображаемые в данный момент на терминале, оставляя пустой экран. Например, вы можете очистить экран терминала перед запуском новых команд.
В некоторых терминалах вы можете использовать Ctrl
+ L
или Cmd
+ L
в качестве сочетаний клавиш для очистки экрана.
В этом разделе вы узнали, как использовать pip непосредственно из терминала. Для любого Python-разработчика крайне важно знать, как использовать pip в терминале, поскольку это помогает эффективно управлять пакетами, используемых в проектах, и обновлять их.
Если вы хотите узнать больше о виртуальных средах и pip, вы можете ознакомиться с учебником Real Python по виртуальным средам Python и учебным пособием о том, как использовать Python pip для управления зависимостями ваших проектов. Оба являются важными инструментами, которые облегчат вашу жизнь как разработчика Python.
Еще один полезный инструмент для управления вашими проектами — Git. Читайте дальше, чтобы узнать, как улучшить свои навыки работы с терминалом и погрузиться в мир контроля версий с помощью Git.
Взаимодействие с Git
Git — это система контроля версий, которую обычно используют разработчики, независимо от того, на каком языке программирования они пишут свой код. Система контроля версий отслеживает изменения, вносимые в файлы с течением времени, и помогает вам при необходимости вернуть код к предыдущей версии.
В этом разделе вы узнаете, как взаимодействовать с Git непосредственно из терминала. Вы будете инициализировать репозиторий Git, отслеживать файлы и создавать коммиты.
Для Git существует множество клиентов с графическим интерфейсом. Они могут быть удобны в использовании и помогут вам лучше понять логику Git.
Тем не менее, изучить основы взаимодействия с Git в терминале все же стоит. Изучение основных команд терминала Git поможет вам понять, как работает Git внутри.
Создание репозитория Git
Первым шагом в использовании Git является инициализация репозитория. Репозиторий — это контейнер, в котором хранятся все файлы вашего проекта, папки и метаданные.
Создайте новый репозиторий Git с помощью следующей команды:
$ git init
Initialized empty Git repository in
⮑ /Users/realpython/Desktop/rp_terminal/.git/
Когда вы запускаете команду git init
, Git создает пустой репозиторий в текущем рабочем каталоге. В свою очередь, это создает новый подкаталог с именем .git/
, который содержит все необходимые файлы репозитория.
После инициализации репозитория вы можете проверить статус вашего репозитория:
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
hello_terminal.py
venv/
nothing added to commit but untracked files present (use "git add" to track)
Команда git status
показывает текущий статус вашего репозитория: на какой ветке вы находитесь и есть ли какие-либо коммиты.
Коммит Git — это моментальный снимок изменений, внесенных в файлы в репозитории Git. Когда вы вносите изменения в свои файлы и сохраняете их, вы можете сделать снимок этих изменений, создав фиксацию в ветке. Когда вы делаете новые коммиты, ветвь указывает на последние коммиты.
В данном случае вы находитесь на main
ветке, и еще нет коммитов. Вы также можете создавать новые ветки для работы над новыми функциями или исправлениями ошибок, а затем переключаться между ветвями по мере необходимости. Если вы хотите, вы можете создать несколько веток для одновременной работы с разными версиями вашей кодовой базы.
Кроме того, git status
показывает, какие файлы Git не отслеживает. Вы можете игнорировать определенные файлы и папки, например, папку venv/
, чтобы Git не отслеживал их.
Какие файлы игнорировать
Общее правило – игнорировать любые файлы, которые специфичны для вашей локальной среды разработки или файлы, которые генерируются вашим процессом сборки. Некоторые примеры файлов, которые обычно следует игнорировать, включают:
- Файлы, содержащие конфиденциальную информацию, например, пароли или закрытые ключи.
- Двоичные файлы, создаваемые процессом сборки, например, скомпилированные исполняемые файлы или файлы объектов.
- Файлы, специфичные для вашей локальной среды разработки, такие как файлы виртуальной среды или файлы конфигурации редактора, специфичные для пользователя
- Временные файлы или файлы, созданные вашей операционной системой, такие как
.DS_Store
в macOS илиThumbs.db
в Windows - Логи или другие файлы, которые генерируются вашим приложением во время выполнения.
Просмотрите GitHub’s collection of .gitignore
templates, чтобы получить представление о наиболее часто встречающихся файлах .gitignore. Там же вы найдете Python specific .gitignore
example.
Вы можете игнорировать файлы в Git, создав файл .gitignore
и указав в нем файлы и папки, которые вы хотите игнорировать:
$ echo "venv" > .gitignore
Как вы узнали ранее, эта команда создает новый файл с именем .gitignore
и записывает venv
в него. Проверьте текущие элементы в вашем репозитории Git, используя другую команду, которую вы уже знаете:
$ ls -a
. .git hello_terminal.py
.. .gitignore venv
Теперь у вас есть .gitignore
файл рядом с вашим hello_terminal.py
файлом, вашей venv/папкой
и .git/папкой
. Чтобы проверить, игнорирует ли Git venv/папку
, запустите git status
еще раз:
$ git status
On branch main
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
hello_terminal.py
nothing added to commit but untracked files present (use "git add" to track)
Отлично, Git теперь показывает только файлы .gitignore
и hello_terminal.py
как неотслеживаемые файлы. Git знает, что файлы есть, но вы еще не добавили их в репозиторий.
Отслеживание файлов с помощью Git
Когда вы начинаете новый проект, вы, вероятно, захотите отслеживать свои изменения с течением времени. В предыдущем разделе вы инициализировали новый репозиторий с расширением git init
. Теперь пришло время начать отслеживать файлы.
Вы используете git add
команду, чтобы сообщить Git, какие файлы вы хотите отслеживать:
$ git add .
Помните точку .
в списке каталогов раньше? Точка указывает на текущий каталог. Использование .
в конце команды git add
указывает Git отслеживать все файлы в текущем каталоге. После того, как вы добавили файлы в репозиторий, вы можете проверить статус ваших файлов с помощью git status
команды:
$ git status
On branch main
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitignore
new file: hello_terminal.py
В выводе видно, что файлы hello_terminal.py
и .gitignore
добавлены и готовы к фиксации:
$ git commit -m "Initiate git repository"
[main (root-commit) 7b20833] Initiate git repository
2 files changed, 2 insertions(+)
create mode 100644 .gitignore
create mode 100644 hello_terminal.py
С помощью команды git commit
вы делаете снимок текущего состояния ваших файлов и сохраняете его в истории репозитория. Флаг -m
добавляет сообщение с описанием ваших изменений. Вывод показывает ветку, в которой вы находитесь, и количество измененных файлов.
После того, как вы зафиксируете какие-либо изменения, рекомендуется снова проверить состояние вашего репозитория Git:
$ git status
On branch main
nothing to commit, working tree clean
Видно, что коммитить нечего, а это означает, что все изменения были успешно зафиксированы.
Рабочий процесс, который вы использовали в этом разделе, является типичным при использовании Git в терминале. Вы используете команду git add
, чтобы сообщить Git, какие файлы отслеживать. Затем вы используете git commit для создания снимка текущего состояния ваших файлов и сохраняете его в истории репозитория.
Кроме того, рекомендуется часто использовать git status
для проверки текущего состояния вашего репозитория.
Хотя вы получили некое представление об использовании Git в терминале, Git может предложить вам как разработчику Python гораздо больше. Если вы хотите узнать больше о Git, вы можете ознакомиться с введением в Git и GitHub для разработчиков Python и изучить дополнительные советы по работе с Git для разработчиков Python.
Следующие шаги
Чем больше вы пользуетесь терминалом, тем привычнее вам будет. Интересный способ внедрить терминал в свои рабочие процессы в качестве разработчика Python — создать скрипты Python с интерфейсами командной строки. Например, вы можете создать:
- Приложение-викторина с Python
- Средство проверки подключения к сайту в Python
- Приложение To-Do из командной строки с Python и Typer
- Генератор дерева каталогов Python для командной строки
- Приложение Weather CLI с Python
- Wordle Clone с Python и Rich
Помимо использования pip и Git для управления вашими проектами Python, есть еще больше примеров с использованием терминала:
- Интерфейсы командной строки. Многие популярные библиотеки и фреймворки Python, такие как Django , Flask и Poetry, включают в себя интерфейсы командной строки, которые позволяют выполнять такие задачи, как создание новых проектов, запуск серверов разработки и управление базами данных.
- Автоматизация и сценарии. Терминал позволяет автоматизировать повторяющиеся задачи и создавать сценарии для управления рабочим процессом разработки, например, для запуска тестов или развертывания приложения.
- Отладка. Терминал может быть полезен для отладки вашего кода. Например, вы можете использовать print()или logging in Python, чтобы вывести что-либо в терминале и понять, что происходит в вашем коде. Вы также можете использовать pdb для отладки кода Python.
- Производительность. Многие инструменты командной строки работают быстрее, чем их аналоги с графическим интерфейсом, и идеально подходят для работы с большими наборами данных или выполнения сложных задач, таких как обработка и анализ данных.
В целом, терминал — это мощный инструмент, который может помочь вам оптимизировать рабочий процесс разработки, автоматизировать задачи, отлаживать код и получать доступ к расширенным функциям библиотек и фреймворков. С практикой вы обнаружите, что терминал — бесценный инструмент для вашего пути в качестве разработчика Python.
Заключение
Когда вы освоитесь с терминалом, вы, вероятно, сможете перемещаться по своей файловой системе быстрее и с большим контролем, чем при использовании мыши и нажатии кнопок.
В этом уроке вы узнали, как:
- Найти терминал в операционной системе
- Открыть терминал
- Осуществить навигацию по файловой системе с помощью основных команд
- Создать файлы и папки с помощью терминала
- Управлять пакетами с помощью pip команд
- Отслеживать файлы с помощью Git в терминале
Вы улучшили свои навыки программирования, научившись выполнять три действительно важные задачи в терминале: перемещаться по файловой системе, управлять пакетами Python с помощью pip и делать коммиты в Git. Изучение команд терминала — отличная инвестиция для вас как для Python-разработчика. Просто не торопитесь и постепенно знакомьтесь с этим мощным инструментом. Достаточно скоро он станет важным инструментом, без которого вы не сможете жить.
***
***
Материалы по теме
- 🐧 Терминал для тестировщика: консольные команды Unix/Linux, которые нужно знать наизусть
- Терминал Linux: видеокурс по работе на примере Ubuntu
- 6 команд терминала и пара комбинаций, полезных для начинающих разработчиков
В Windows есть некоторые встроенные возможности поиска, но они могут вам не понравиться. Cortana или стандартное поле поиска на панели задач и поле поиска в проводнике файлов в Windows 10 позволяют выполнять поиск по содержимому файлов, но они могут быть медленными, особенно поиск в проводнике.
Существует более быстрый способ поиска содержимого файлов на жестком диске с помощью командной строки. Команда find ищет текстовые строки в файлах и возвращает строки из файлов, в которых была найдена текстовая строка.
ПРИМЕЧАНИЕ. Команда find не подходит для больших файлов или большого количества файлов.
Сегодня мы рассмотрим, как использовать команду find, и приведем несколько примеров.
Откройте окно командной строки с правами администратора
Открытие окна командной строки от имени администратора не требуется. Тем не менее, это поможет вам избежать раздражающих диалоговых окон подтверждения. Просто будьте осторожны, какие команды вы запускаете от имени администратора в командной строке. Использование команды find в качестве администратора безопасно, поскольку она не изменяет и не удаляет файлы.
Введите cmd.exe в поле поиска на панели задач. Затем щелкните правой кнопкой мыши на пункт «Командная строка» и выберите « Запуск от имени администратора» во всплывающем меню.
Если появится диалоговое окно «Контроль учетных записей», нажмите «Да», чтобы продолжить.
ПРИМЕЧАНИЕ. Это диалоговое окно может не отображаться в зависимости от настроек контроля учетных записей. Мы не рекомендуем полностью отключать UAC.
Ключи и параметры для команды find
Большинство команд имеют дополнительные ключи, которые изменяют стандартное действие команды. Вы можете получить справку, чтобы увидеть все доступные ключи для команды find, набрав в строке следующую строку и нажав Enter:
find /?
Ключи могут быть строчными или прописными.
Для параметра «string» вы должны заключить строку в двойные кавычки, иначе команда find не будет работать и вернет ошибку.
Параметр имени диска [drive:] [path] может быть любым, от буквы диска до одного файла или нескольких файлов.
Синтаксис для команды поиска
Синтаксис команды – это особый способ организации команды, ее ключей и параметров. Ниже приведен общий синтаксис команды find.
find [ключи] “строка” [путь]
Ключи могут быть в любом порядке, если они находятся перед параметром «string». Скобки [] указывают, что ключ или параметр является необязательным.
Поиск отдельного документа для текстовой строки
Сначала мы покажем вам, как искать в одном документе все вхождения текстовой строки. Следующая команда ищет в файле example1.txt фразу «groovypost – is the best tech site».
find “groovypost – is the best tech site” “C:UsersLoriDocumentsFindCommandExamplesexample1.txt”
ПРИМЕЧАНИЕ. Если в какой-либо части пути или имени файла есть пробелы, вы должны заключать в кавычки весь путь, как мы делали в приведенной выше команде. Кавычки на самом деле не нужны в этом случае, но они точно не помешают.
Обратите внимание, что фраза не была найдена в приведенном выше примере (ничего не указано под путем к файлу), даже если она находится в файле. Это потому, что случай в «groovypost» не совпадает с тем, что было в файле, то есть «groovyPost». Добавьте ключ «/i » (ignore case) сразу после команды поиска (перед фразой), чтобы игнорировать регистр при поиске текстовой фразы.
find /i “groovypost – is the best tech site” “C:UsersLoriDocumentsFindCommandExamplesexample1.txt”
Теперь фраза найдена, и вся строка, содержащая фразу, выводится на экран под путем к файлу, в котором выполняется поиск.
Поиск нескольких документов по одной и той же текстовой строке
Теперь, когда вы можете искать один файл для текстовой строки, давайте искать несколько файлов для одной и той же строки.
Вы можете указать несколько файлов для поиска в команде поиска, указав путь к каждому файлу в кавычках через пробел.
find /i “groovypost” “C:UsersLoriDocumentsFindCommandExamplesexample1.txt” “C:UsersLoriDocumentsFindCommandExamplesexample2.txt”
Вы также можете искать все текстовые файлы в каталоге, используя подстановочный знак, который является звездочкой (*), как показано в следующей команде.
find /i “groovypost” “C:UsersLoriDocumentsFindCommandExamples*.txt”
Поисковый термин был найден в обоих документах, а предложения, в которых они были найдены, перечислены под полным путем к каждому файлу.
Подсчитать количество строк в файле
Если вы хотите узнать, сколько строк в файле, вы можете использовать комбинацию команд type и find. Команда type отображает содержимое одного или нескольких текстовых файлов.
Мы передали результаты команды type в команду find, используя вертикальную черту (|). Мы использовали ключ «/v» для отображения всех строк, НЕ содержащих строку «», поэтому каждая строка с текстом будет подсчитана. Чтобы отобразить только количество строк в текстовом файле (не сами строки), мы используем ключ «/c».
type C:UsersLoriDocumentsFindCommandExamplesexample1.txt | find “” /v /c
Отправьте вывод другой команды в команду поиска
Вы также можете выполнить поиск определенной строки во всех именах файлов в каталоге, отправив выходные данные команды dir в команду find.
Например, мы получили список каталогов C:UsersLoriDocumentsFindCommandExamples и все подкаталоги в этом каталоге (ключ /s). Мы также указали использовать пустой формат без информации о заголовке (ключей «/b») и отобразили список в том же формате, что и формат широкого списка (ключ «/w»), но отсортированный по столбцу («/d»).
Затем мы направляем (|) вывод команды dir в команду find, добавляя только «example» в качестве параметра. Мы не добавляли никаких ключей в команду поиска. Имена файлов для поиска берутся из вывода команды dir.
dir “C:UsersLoriDocumentsFindCommandExamples” /s /b /d | find “example”
А вы предпочитаете использовать команду поиска или поле поиска в проводнике? Как вы использовали команду поиска? Поделитесь своими идеями и примерами с нами в комментариях ниже.
Источник: IT Проповедник
Присоединяйтесь к нам, в нашем уютном Телеграмм-канале, где вас ждут новости мира IT, подборки книг и много-много интересного!