Как найти файл или папку в линукс

Обновлено Обновлено: 01.02.2022
Опубликовано Опубликовано: 25.07.2016

Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.

Синтаксис
Примеры
    Поиск по имени
    По дате
    По типу файла
    По правам
    По содержимому
    С сортировкой по дате изменения
    Лимиты
    Действия над найденными объектами
Запуск по расписанию в CRON

Общий синтаксис

find <где искать> <опции>

<где искать> — путь к корневому каталогу, откуда начинать поиск. Например, find /home/user — искать в соответствующем каталоге. Для текущего каталога нужно использовать точку «.».

<опции> — набор правил, по которым выполнять поиск.

* по умолчанию, поиск рекурсивный. Для поиска в конкретном каталоге можно использовать опцию maxdepth.

Описание опций

Опция Описание
-name Поиск по имени.
-iname Регистронезависимый поиск по имени.
-type

Тип объекта поиска. Возможные варианты:

  • f — файл;
  • d — каталог;
  • l — ссылка;
  • p — pipe;
  • s — сокет.
-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
-print Показать найденное.
-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 системах он может располагаться в разных местах.

Очень важно уметь вовремя найти нужную информацию в системе. Конечно, все современные файловые менеджеры предлагают отличные функции поиска, но им не сравнится с поиском в терминале Linux. Он намного эффективнее и гибче обычного поиска, вы можете искать файлы не только по имени, но и по дате добавления, содержимому, а также использовать для поиска регулярные выражения.

Кроме того, с найденными файлами можно сразу же выполнять необходимые действия. В этой статье мы поговорим о поиске с помощью очень мощной команды find Linux, подробно разберем её синтаксис, опции и рассмотрим несколько примеров.

Команда find — это одна из наиболее важных и часто используемых утилит системы Linux. Это команда для поиска файлов и каталогов на основе специальных условий. Ее можно использовать в различных обстоятельствах, например, для поиска файлов по разрешениям, владельцам, группам, типу, размеру и другим подобным критериям.

Утилита find предустановлена по умолчанию во всех Linux дистрибутивах, поэтому вам не нужно будет устанавливать никаких дополнительных пакетов. Это очень важная находка для тех, кто хочет использовать командную строку наиболее эффективно.

Команда find имеет такой синтаксис:

find [папка] [параметры] критерий шаблон [действие]

Папка — каталог в котором будем искать

Параметры — дополнительные параметры, например, глубина поиска, и т д

Критерий — по какому критерию будем искать: имя, дата создания, права, владелец и т д.

Шаблон — непосредственно значение по которому будем отбирать файлы.

Основные параметры команды find

Я не буду перечислять здесь все параметры, рассмотрим только самые полезные.

  • -P — никогда не открывать символические ссылки.
  • -L — получает информацию о файлах по символическим ссылкам. Важно для дальнейшей обработки, чтобы обрабатывалась не ссылка, а сам файл.
  • -maxdepth — максимальная глубина поиска по подкаталогам, для поиска только в текущем каталоге установите 1.
  • -depth — искать сначала в текущем каталоге, а потом в подкаталогах.
  • -mount искать файлы только в этой файловой системе.
  • -version — показать версию утилиты find.
  • -print — выводить полные имена файлов.
  • -type f — искать только файлы.
  • -type d — поиск папки в Linux.

Критерии

Критериев у команды find в Linux очень много, и мы опять же рассмотрим только основные.

  • -name — поиск файлов по имени.
  • -perm — поиск файлов в Linux по режиму доступа.
  • -user — поиск файлов по владельцу.
  • -group — поиск по группе.
  • -mtime — поиск по времени модификации файла.
  • -atime — поиск файлов по дате последнего чтения.
  • -nogroup — поиск файлов, не принадлежащих ни одной группе.
  • -nouser — поиск файлов без владельцев.
  • -newer — найти файлы новее чем указанный.
  • -size — поиск файлов в Linux по их размеру.

Примеры использования

А теперь давайте рассмотрим примеры find, чтобы вы лучше поняли, как использовать эту утилиту.

1. Поиск всех файлов

Показать все файлы в текущей директории:

find

find .

find . -print

Все три команды покажут одинаковый результат. Точка здесь означает текущую папку. Вместо неё можно указать любую другую.

2. Поиск файлов в определенной папке

Показать все файлы в указанной директории:

find ./Изображения

Искать файлы по имени в текущей папке:

find . -name "*.png

Поиск по имени в текущей папке:

find . -name "testfile*"

Не учитывать регистр при поиске по имени:

find . -iname "TeStFile*"

3. Ограничение глубины поиска

Поиска файлов по имени в Linux только в этой папке:

find . -maxdepth 1 -name "*.php"

4. Инвертирование шаблона

Найти файлы, которые не соответствуют шаблону:

find . -not -name "test*"

5. Несколько критериев

Поиск командой find в Linux по нескольким критериям, с оператором исключения:

find . -name "test" -not -name "*.php"

Найдет все файлы, начинающиеся на test, но без расширения php. А теперь рассмотрим оператор ИЛИ:

find -name "*.html" -o -name "*.php"

Эта команда найдёт как php, так и html файлы.

6. Тип файла

По умолчанию find ищет как каталоги, так и файлы. Если вам необходимо найти только каталоги используйте критерий type с параметром d. Например:

find . -type d -name "Загрузки"

Для поиска только файлов необходимо использовать параметр f:

find . -type f -name "Загрузки"

6. Несколько каталогов

Искать в двух каталогах одновременно:

find ./test ./test2 -type f -name "*.c"

7. Поиск скрытых файлов

Найти скрытые файлы только в текущей папке. Имена скрытых файлов в Linux начинаются с точки:

find . -maxdepth 1 -type f -name ".*"

8. Поиск по разрешениям

Найти файлы с определенной маской прав, например, 0664:

find . -type f -perm 0664

Права также можно задавать буквами для u (user) g (group) и o (other). Например, для того чтобы найти все файлы с установленным флагом Suid в каталоге /usr выполните:

sudo find /usr -type f -perm /u=s

Поиск файлов доступных владельцу только для чтения только в каталоге /etc:

find /etc -maxdepth 1 -perm /u=r

Найти только исполняемые файлы:

find /bin -maxdepth 2 -perm /a=x

9. Поиск файлов в группах и пользователях

Найти все файлы, принадлежащие пользователю:

find . -user sergiy

Поиск файлов в Linux принадлежащих группе:

find /var/www -group www-data

10. Поиск по дате модификации

Поиск файлов по дате в Linux осуществляется с помощью параметра mtime. Найти все файлы модифицированные 50 дней назад:

find / -mtime 50

Поиск файлов в Linux открытых N дней назад:

find / -atime 50

Найти все файлы, модифицированные между 50 и 100 дней назад:

find / -mtime +50 -mtime -100

Найти файлы измененные в течении часа:

find . -cmin 60

11. Поиск файлов по размеру

Найти все файлы размером 50 мегабайт:

find / -size 50M

От пятидесяти до ста мегабайт:

find / -size +50M -size -100M

Найти самые маленькие файлы:

find . -type f -exec ls -s {} ; | sort -n -r | head -5

Самые большие:

find . -type f -exec ls -s {} ; | sort -n | head -5

12. Поиск пустых файлов и папок

find /tmp -type f -empty

find ~/ -type d -empty

13. Действия с найденными файлами

Для выполнения произвольных команд для найденных файлов используется опция -exec. Например, для того чтобы найти все пустые папки и файлы, а затем выполнить ls для получения подробной информации о каждом файле используйте:

find . -empty -exec ls -ld {} ;

Удалить все текстовые файлы в tmp

find /tmp -type f -name "*.txt" -exec rm -f {} ;

Удалить все файлы больше 100 мегабайт:

find /home/bob/dir -type f -name *.log -size +100M -exec rm -f {} ;

Выводы

Вот и подошла к концу эта небольшая статья, в которой была рассмотрена команда find. Как видите, это одна из наиболее важных команд терминала Linux, позволяющая очень легко получить список нужных файлов. Ее желательно знать всем системным администраторам. Если вам нужно искать именно по содержимому файлов, то лучше использовать команду grep.

Обнаружили ошибку в тексте? Сообщите мне об этом. Выделите текст с ошибкой и нажмите Ctrl+Enter.

Время на прочтение
5 мин

Количество просмотров 125K

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

Команда find – это невероятно мощный инструмент, позволяющий искать файлы не только по названию, но и по:

  • Дате добавления.
  • Содержимому.
  • Регулярным выражениям.

Данная команда будет очень полезна системным администраторам для:

  • Управления дисковым пространством.
  • Бэкапа.
  • Различных операций с файлами.

Команда find в Linux производит поиск файлов и папок на основе заданных вами критериев и позволяет выполнять действия с результатами поиска.

Синтаксис команды find:

$ find directory-to-search criteria action

Где:

  • directory-to-search (каталог поиска) – это отправной каталог, с которой find начинает поиск файлов по всем подкаталогам, которые находятся внутри. Если не указать путь, тогда поиск начнется в текущем каталоге;
  • criteria (критерий) – критерий, по которым нужно искать файлы;
  • action (действие) – что делать с каждым найденным файлом, соответствующим критериям.

Поиск по имени

Следующая команда ищет файл s.txt в текущем каталоге:

$ find . -name "s.txt"
./s.txt

Где:

  • . (точка) – файл относится к нынешнему каталогу
  • -name – критерии по которым осуществляется поиск. В данном случае поиск по названию файла.

В данном случае критерий -name учитывает только символы нижнего регистра и файл S.txt не появиться в результатах поиска. Чтобы убрать чувствительность к регистру необходимо использовать –iname.

$ find . -iname "s.txt"
./s.txt
./S.txt

Для поиска всех изображений c расширением .png нужно использовать шаблон подстановки *.png:

$ find . -name "*.png"
./babutafb.png
./babutafacebook.png
./Moodle2.png
./moodle.png
./moodle/moodle1.png
./genxfacebook.png

Можно использовать название каталога для поиска. Например, чтобы с помощью команды find найти все png изображения в каталоге home:

$ find /home -name "*.png"
find: `/home/babuta/.ssh': Permission denied
/home/vagrant/Moodle2.png
/home/vagrant/moodle.png
/home/tisha/hello.png
find: `/home/tisha/testfiles': Permission denied
find: `/home/tisha/data': Permission denied
/home/tisha/water.png
find: `/home/tisha/.cache': Permission denied

Если выдает слишком много ошибок в отказе разрешения, тогда можно добавить в конец команды – 2> /dev/null. Таким образом сообщения об ошибках будут перенаправляться по пути dev/null, что обеспечит более чистую выдачу.

find /home -name "*.jpg" 2>/dev/null
/home/vagrant/Moodle2.jpg
/home/vagrant/moodle.jpg
/home/tisha/hello.jpg
/home/tisha/water.jpg

Поиск по типу файла

Критерий -type позволяет искать файлы по типу, которые бывают следующих видов:

  • f – простые файлы;
  • d – каталоги;
  • l – символические ссылки;
  • b – блочные устройства (dev);
  • c – символьные устройства (dev);
  • p – именованные каналы;
  • s – сокеты;

Например, указав критерий -type d будут перечислены только каталоги:

$ find . -type d
.
./.ssh
./.cache
./moodle

Поиск по размеру файла

Допустим, что вам необходимо найти все большие файлы. Для таких ситуаций подойдет критерий -size.

  • «+» — Поиск файлов больше заданного размера
  • «-» — Поиск файлов меньше заданного размера
  • Отсутствие знака означает, что размер файлов в поиске должен полностью совпадать.

В данном случае поиск выведет все файлы более 1 Гб (+1G).

$ find . -size +1G
./Microsoft_Office_16.29.19090802_Installer.pkg
./android-studio-ide-183.5692245-mac.dmg

Единицы измерения файлов:

  • c — Байт
  • k — Кбайт
  • M — Мбайт
  • G — Гбайт

Поиск пустых файлов и каталогов

Критерий -empty позволяет найти пустые файлы и каталоги.

$ find . -empty
./.cloud-locale-test.skip
./datafiles
./b.txt
...
./.cache/motd.legal-displayed

Поиск времени изменения

Критерий -cmin позволяет искать файлы и каталоги по времени изменения. Для поиска всех файлов, измененных за последний час (менее 60 мин), нужно использовать -60:

$ find . -cmin -60
.
./a.txt
./datafiles

Таким образом можно найти все файлы в текущем каталоге, которые были созданы или изменены в течение часа (менее 60 минут).

Для поиска файлов, которые наоборот были изменены в любое время кроме последнего часа необходимо использовать +60.

$ find . -cmin +60

Поиск по времени доступа

Критерий -atime позволяет искать файлы по времени последнего доступа.

$ find . -atime +180

Таким образом можно найти файлы, к которым не обращались последние полгода (180 дней).

Поиск по имени пользователя

Опция –user username дает возможность поиска всех файлов и каталогов, принадлежащих конкретному пользователю:

$ find /home -user tisha 2>/dev/null

Таким образом можно найти все файлы пользователя tisha в каталоге home, а 2>/dev/null сделает выдачу чистой без ошибок в отказе доступа.

Поиск по набору разрешений

Критерий -perm – ищет файлы по определенному набору разрешений.

$ find /home -perm 777

Поиск файлов с разрешениями 777.

Операторы

Для объединения нескольких критериев в одну команду поиска можно применять операторы:

  • -and
  • -or
  • -not

Например, чтобы найти файлы размером более 1 Гбайта пользователя tisha необходимо ввести следующую команду:

$ find /home  -user tisha  -and  -size +1G  2>/dev/null

Если файлы могут принадлежать не только пользователю tisha, но и пользователю pokeristo, а также быть размером более 1 Гбайта.

$ find /home ( -user pokeristo -or -user tisha )  -and  -size +1G  2>/dev/null

Перед скобками нужно поставить обратный слеш «».

Действия

К команде find можно добавить действия, которые будут произведены с результатами поиска.

  • -delete — Удаляет соответствующие результатам поиска файлы
  • -ls — Вывод более подробных результатов поиска с:
    • Размерами файлов.
    • Количеством inode.
  • -print Стоит по умолчанию, если не указать другое действие. Показывает полный путь к найденным файлам.
  • -exec Выполняет указанную команду в каждой строке результатов поиска.

-delete

Полезен, когда необходимо найти и удалить все пустые файлы, например:

$ find . -empty -delete

Перед удалением лучше лишний раз себя подстраховать. Для этого можно запустить команду с действием по умолчанию -print.

-exec:

Данное действие является особенным и позволяет выполнить команду по вашему усмотрению в результатах поиска.

-exec command {} ;

Где:

  • command – это команда, которую вы желаете выполнить для результатов поиска. Например:
    • rm
    • mv
    • cp
  • {} – является результатами поиска.
  • ; — Команда заканчивается точкой с запятой после обратного слеша.

С помощью –exec можно написать альтернативу команде –delete и применить ее к результатам поиска:

$ find . -empty -exec rm {} ;

Другой пример использования действия -exec:

$ find . -name "*.jpg" -exec cp {} /backups/fotos ;

Таким образом можно скопировать все .jpg изображения в каталог backups/fotos

Заключение

Команду find можно использовать для поиска:

  • Файлов по имени.
  • Дате последнего доступа.
  • Дате последнего изменения.
  • Имени пользователя (владельца файла).
  • Имени группы.
  • Размеру.
  • Разрешению.
  • Другим критериям.

С полученными результатами можно сразу выполнять различные действия, такие как:

  • Удаление.
  • Копирование.
  • Перемещение в другой каталог.

Команда find может сильно облегчить жизнь системному администратору, а лучший способ овладеть ей – больше практиковаться.

image

В качестве вступительного слова дадим некоторое описание того, как вообще можно совершать поиск в linux. Для этих целей есть множество программ, но некоторые из них уже стали классикой поиска в linux. Подчеркнем, в данной статье мы сконцентрируемся исключительно на linux. Это означает, что даже если вы встретите утилиты с теми же самыми названиями в Solaris или операционных системах на ядрах BSD, приведенные советы могут работать не всегда. Так же это относится к busybox, которая реализует лишь небольшую часть функциональности оригинальных утилит.

Итак встречайте героев сегодняшнего обзора: locate — предоставляет поиск по имени файла в заранее подготовленной базе данных, find — работает на реальной файловой системе и предоставляет невероятные возможности для поиска файлов и папок по различным параметрам. Также мы расскажем вскользь о grep — утилите для поиска текста в файлах.

Поиск файла по имени при помощи утилиты locate

Чтобы выполнить просто поиск файла по имени в Linux логичнее использовать команду locate — за счет заранее подготовленной базы она быстро выдаст нужный результат:

$ locate myfilename

Если же вы получили сообщение о том, что команда не найдена, возможно её нужно установить. Для Debian-based дистрибутивов (Ubuntu, Mint) установить её можно командой:

# apt-get install mlocate

Пользователям RedHat, CentOS и Fedora стоит выполнить

# yum install mlocate

После установки нужно создать/обновить базу данных — файл, содержащий в себе «снимок» файловой системы, благодаря которому locate работает так быстро:

# updatedb

Т.е. вместо того, чтобы каждый раз проходиться по всей файловой системе, locate доверяет updatedb создать файл, содержащий в себе все имена и пути файловой системы, и выполняет поиск в нем. Важно поддерживать его актуальность, иначе вы можете случайно найти уже давно удаленные файлы, или не найти новые. Поэтому updatedb при инсталляции «вешается» на CRON и выполняется автоматически — вы можете в этом убедиться, посмотрев на файлы заданий CRON.

Поиск в Linux при помощи утилиты find

Куда более мощным и гибким инструментом для поиска файлов и папок в Linux выступает команда find. Её синтаксис упрощенно выглядит так:

find [path...] [expression]

Поиск файла по имени

Чтобы выполнить в linux поиск файла по имени по всей файловой системе нужно ввести:

# find / -name myfilename

Учтите, что в данном случае поиск будет идти по имени файла в точности соответствующему заданному. Чтобы сымитировать поведение команды locate для find следует ввести:

# find / -name "*part_of_name*"

«*» означает любое количество любых символов. Это дает нам возможность также производить поиск файлов по расширению:

# find / -name "*.jpg"

Поиск файла по дате

Вот пример того, как можно выполнить поиск в Linux файла по дате:

# find /home -mtime -5

Данная команды выведет все файлы из каталога /home, измененные не более 5-ти дней назад.

Поиск файла по размеру

А так, например, можно выполнит поиск файлов по размеру:

# find /home -size +1G

Данная команды выведет все файлы из каталога /home, имеющие размер более одного гигабайта. Очень удобно для поиска больших файлов в linux

Поиск папки

На самом деле поиск папки в linux ничем не отличается от поиска файла, так как папка — это файл. Однако find дает нам возможность указать тип. Например, чтобы явно выполнить поиск только папок, имена которых содержат слово, например, mysql, выполните

# find / -type d -name "*mysql*"

Здесь ключ «-type» указывает на тип. На текущий момент времени find поддерживает следующие типы:

  • b - блочное устройство
  • c - символьное устройство
  • d - папка (дирректория)
  • p - именнованный канал
  • f - обычный файл
  • l - символическая ссылка
  • s - сокет
  • D - дверь (только для Solaris)

Подробнее о различных параметрах поиска find вы можете почитать, введя команду

$ man find

Поиск текста в Linux при помощи утилиты grep

Да, grep действительно очень хорош, когда речь заходит о поиске текста в файлах в linux по паттерну. Сразу оговоримся, что искать текст мы будем в файлах в формате plain text — чистый текст, таких как конфигурационные файлы, сценарии командного интерпретатора (bash. python, php…) и др. Искать по файлам Word и Excel грепом эффективно вряд ли получится.

Итак, чтобы выполнить поиск строки по всем файлам в каталоге, например /etc следует ввести

# grep -lri root /etc/*

Такая команда выведет имена всех файлов, в которых удастся найти заветные 4 буквы «root». Здесь ключ «-l» заставляет grep выводить только имена файлов. Т.е. если вы хотите увидить ещё и ту саму строку, где удалось найти запрашиваемое слово, то «-l» стоит не указывать. Ключ «-r» выполняет поиск не только по /etc, но и по всем файлам во всех подпапках. И наконец ключ «-i» говорит не принимать во внимание регистр, т.е. grep будет искать не только слово «root»,  но и «ROOT»,  и «rOOt»… Вы поняли

Конечно, вмемогущий grep поддерживает регулярные выражения. Чтобы выполнить, например, поиск строки, явно начинающийся всё с того же слова, введите

# grep -lri ^root /etc/*

Крышка в начале слова «root» обязывает grep выводит только те файлы, где слово «root» стоит в начале строки. И таких трюков достаточно много. Если вы еще не знакомы с regex, то стоит начать хотябы с википедии

На чтение 30 мин Просмотров 4.9к. Опубликовано Обновлено 19.04.2022

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

Основные команды Linux-терминала поделены на несколько разделов, ниже содержание, откуда вы можете перейти в любой раздел статьи.

Содержание

  1. Навигация в системе
  2. Как узнать текущую папку
  3. Как узнать что хранится в папке
  4. Как перейти в другую папку
  5. Как вернуться назад, в исходную папку
  6. Как перейти наверх, в родительскую папку
  7. Как найти файл или папку по имени
  8. Как найти файл по его содержимому
  9. Работа с файлами и папками
  10. Как создать папку
  11. Как создать файл
  12. Как вывести содержимое файла
  13. Как редактировать файл
  14. Как скопировать файл
  15. Как скопировать папку
  16. Как перенести файл
  17. Как перенести папку
  18. Как удалить файл
  19. Способ 1
  20. Способ 2
  21. Способ 3
  22. Как удалить папку
  23. Система и утилиты
  24. Как посмотреть инструкцию к команде прямо в терминале
  25. Как посмотреть историю команд
  26. history + tail
  27. history + grep
  28. Как посмотреть все запущенные процессы
  29. Как завершить процесс принудительно
  30. Выясняем имя «жертвы»
  31. Как узнать версию и разрядность Linux
  32. Узнаем версию дистрибутива
  33. Как узнать версию ядра Linux
  34. Как узнать разрядность Linux
  35. Информация о сети
  36. Как узнать внешний IP-адрес
  37. Способ 1: wget
  38. Способ 2: curl (проще)
  39. Как узнать локальный IP-адрес

Навигация в системе

Как узнать текущую папку

Иногда в терминале не показывается в какой именно папке находится пользователь и требуется выяснить исходную точку для дальнейших движений. Узнать «где я?» можно командой pwd:

pwd

Пример в терминале:

$ pwd
/home/uxumax

Данный вывод показывает, что мы находимся в домашней папке /home/uxumax

Как узнать что хранится в папке

Теперь, когда мы выяснили в какой папке находимся, посмотрим содержимое этой папки. Это делается при помощи команды ls:

ls

Предварительно для примера в этой папке было создано 10 тестовых файлов и с ними вывод команды ls в терминале выглядит так:

$ ls
file-1  file-10  file-2  file-3  file-4  file-5  file-6  file-7  file-8  file-9

По-умолчанию выводится в одну строку. Чтобы получить вывод списком, нужно добавить опцию -l

$ ls -l
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-1
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-10
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-2
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-3
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-4
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-5
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-6
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-7
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-8
-rw-r--r-- 1 uxumax uxumax 0 Sep  8 10:50 file-9

С опцией -l мы получаем более информативный вывод, где

  • -rw-r--r-- — права на файл, которые говорят, что редактировать может только владелец, а остальные все только читать
  • uxumax uxumax — владелец файла и группа
  • 0 — вес файла в байтах, то есть все тестовые файлы пустые и не содержат никакого текста
  • Sep 8 10:50 — дата создания файла
  • file-* — имя файла, последний «столбец»

Но опция -l не выводит скрытые файлы. Для того, чтобы увидеть в списке и их тоже, нужно добавить к ней букву A:

ls -lA

И увидим полный вывод, со всеми скрытыми файлами, без «недосказанностей»:

$ ls -lA
-rw------- 1 uxumax uxumax   53 Aug 31 11:24 .bash_history
-rw-r--r-- 1 uxumax uxumax  220 Aug 31 10:13 .bash_logout
-rw-r--r-- 1 uxumax uxumax 3526 Aug 31 10:13 .bashrc
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-1
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-10
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-2
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-3
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-4
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-5
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-6
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-7
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-8
-rw-r--r-- 1 uxumax uxumax    0 Sep  8 10:50 file-9
-rw-r--r-- 1 uxumax uxumax  675 Aug 31 10:13 .profile

Как видно, в списке теперь появились скрытые файлы и папки: .bash_history, .bash_logout, .bashrc, .profile. Теперь нам видно все и ничего от нас не утаить.

Как перейти в другую папку

Предварительно для примера в исходной точке (домашняя папка) была создана папка test-folder. В нее мы и будем переходить. Для начала проверим ее наличие командой ls

$ ls
test-folder

Папка есть. Теперь попробуем зайти в нее. Для этого используется команда cd и формулируется в следующем виде:

cd /путь/до/папки/

Так как папка находится в том месте, где находимся мы, то не обязательно вводить полный путь, достаточно просто указать ее имя. В примерах мы будем использовать команду pwd, чтобы узнавать где мы находимся и куда нас перенесло.

cd test-folder
$ pwd
/home/uxumax
$ cd test-folder
$ pwd
/home/uxumax/test-folder

Можно указать конкретно, что нас интересует только та папка, в которой мы на данный момент находимся. Для этого нужно добавить ./ перед папкой, в которую мы хотим перейти. В некоторых случаях без этого терминал нас не поймет, но в данном примере разницы нет.

cd ./test-folder
$ pwd
/home/uxumax
$ cd ./test-folder
$ pwd
/home/uxumax/test-folder

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

cd /home/uxumax/test-folder

Например, мы находились в папке Downloads, которая находится в домашней папке пользователя. По абсолютному пути мы можем перейти в папку test-folder прямо оттуда.

$ pwd
/home/uxumax/Downloads
$ cd /home/uxumax/test-folder
$ pwd
/home/uxumax/test-folder

Как вернуться назад, в исходную папку

Представим ситуацию, когда из /первый/длинный/путь/до/одной/папки мы перешли во /второй/длинный/путь/до/другой/папки, сделали свои дела и нам нужно вернуться обратно туда, откуда мы перешли. Мы можем снова прописать длинный абсолютный путь, чтобы вернуться, но это довольно утомительно. В этой ситуации гораздо проще воспользоваться опцией back, для этого достаточно добавить -, к команде cd, не указывая никаких путей.

cd -

Ниже пример в терминале, где мы также используем команду pwd, для того, чтобы проверить где мы в данный момент находимся. В этом примере изначально мы находились в папке /home/uxumax/Downloads, затем перешли в /home/uxumax/test-folder и вернулись обратно с помощью команды cd -.

$ pwd
/home/uxumax/Downloads
$ cd /home/uxumax/test-folder
$ pwd
/home/uxumax/test-folder
$ cd -
$ pwd
/home/uxumax/Downloads

Как перейти наверх, в родительскую папку

Теперь представим другую ситуацию, когда нам нужно перейти не назад, а перейти вверх по дереву папок. То есть в родительскую папку. Допустим мы находимся в папке потомок, которая лежит в папке предок. То есть наше местоположение /путь/до/предок/потомок. Чтобы перейти вверх от потомка к предку, нужно добавить две точки .. к команде cd.

cd ..

Теперь попробуем использовать в реальном примере, где мы находимся в папке /home/uxumax/test-folder. Нам нужно подняться вверх до родительской папки /home/uxumax/. Все также используем команду pwd, чтобы проверить текущее местоположение.

$ pwd
/home/uxumax/test-folder
$ cd ..
$ pwd
/home/uxumax

Как видно, все предельно просто. Поэтому предлагаю не останавливаться на достигнутом и использовать это более продвинутым образом.

Представим ситуацию, где мы также находимся в папке /home/uxumax/test-folder и нам нужно перейти в папку /home/uxumax/Downloads. Мы можем прописать длинный абсолютный путь, а можем вместо этого воспользоваться .., которая в данном случае заменяет путь /home/uxumax, то есть является синонимом родительской папки.

cd ../Downloads

Другими словами, если мы находимся в папке /путь/до/предок/потомок_1, то мы можем использовать ../потомок_2, вместо длинного варианта /путь/до/предок/потомок_2. Вот так это выглядит в терминале:

$ pwd
/home/uxumax/test-folder
$ cd ../Downloads
$ pwd
/home/uxumax/Downloads

Как найти файл или папку по имени

Чтобы найти нужный файл или папку в линукс-терминале, нужно использовать команду find. Формулировать поисковую команду довольно просто:

find /путь/до/папки/в/которой/искать/ -iname "точное имя файла"

Если мы не знаем точное имя файла, то тут на помощь придут звездочки *, которые означают любые символы в любом количестве. Например, файл, который мы хотим найти называется nemo-fisher.txt, а мы помним лишь только то, что его название содержит слово «fish».

Тогда заключим слово fish в звездочки и желательно обернуть дополнительно в кавычки, то есть это будет выглядеть вот так:

find ~/ -iname "*fish*"

В данном случае мы в своей домашней папке (которая обозначается ~/) ищем файл, название которого содержит слово «fish». Звездочки в данном примере заменяют первую часть слова «nemo-» и его последнюю часть «er.txt»: nemo-fisher.txt

В терминале вот так выдаются результаты:

$ find  ~/ -iname '*fish*'
/home/uxumax/place/nemo-fisher.txt
/home/uxumax/place/blowfish
/home/uxumax/place/fishki.jpg

В результатах примера выше мы видим, что в папке под именем place/, нашлось два файла и одна папка. Среди них есть файл, который мы искали nemo-fisher.txt, а другие два попали в результаты потому, что он тоже содержат слово fish в названии:

/home/uxumax/place/nemo-fisher.txt
/home/uxumax/place/blow
fish
/home/uxumax/place/
fishki.jpg

Если убрать звездочку спереди "fish*", то вывод будет содержать только один файл, который начинается на это слово:

/home/uxumax/place/fishki.jpg

А если убрать звездочку в конце слова, то найдется только папка blowfish, потому что ее название заканчивается на «fish»:

/home/uxumax/place/blowfish

По этим примерам можно понять принцип работы звездочек в запросе. Их задача заменить те символы, которые мы не знаем.

Как найти файл по его содержимому

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

Представим, что нам нужно найти файл, который содержит слово «orange». С этим нам поможет мощный инструмент grep и его 4 опции: -R, -I, -n, -i. Их можно ввести в таком виде -RIni вместе, что куда проще, чем перед каждой опцией ставить пробел и минус -. И в конце добавить путь, где именно нужно искать по содержимому.

grep -RIni "искомое содержимое" /путь/до/папки/где/искать/

Не будем углубляться что значит каждая из 4 опций, это можно сделать, почитав документацию к утилите grep. Новичкам пока достаточно запомнить комбинацию опций и обратить внимание, что в них содержится как маленькая i, так и большая I, что очень важно. Вообще обязательно вводить именно в таком виде, где R, I — большие, и n, i -маленькие. В целом это запомнить довольно не сложно.

Итак, формулируем команду для поиска файла в домашней папке ~/, который содержит текст «orange»:

grep -RIni "orange" ~/

Вид из терминала:

$ grep -RIni "orange" ~/
/home/uxumax/place/nemo-fisher.txt:5:The color is orange with white stripes
/home/uxumax/place/to_buy.list:10:Oranges - 2kg 

Терминал в ответ выдал нам список путей к файлам, которые содержат текст «orange». Обратите внимание, что выдача результатов поиска разделена символом : на три части:

/путь/до/файла : номер строки : строка с найденным словом

По этой выдаче можно понять, какой из этих файлов мы ищем и существует ли он вообще.

Работа с файлами и папками

Как создать папку

Создать папку в терминале линукс можно с помощью команды mkdir, название которой происходит от «make directory». Шаблон команды предельно прост:

mkdir имя_папки

Для начала просто создадим папку test_dir

mkdir test_dir

Если требуется создать несколько папок, то просто перечислите их названия после mkdir, разделяя обычными пробелами

mkdir test_dir_1 test_dir_2 test_dir_3

Если названия папок однотипны и, например, различаются лишь последней цифрой, то можно сформулировать команду создания нескольких папок в более коротком виде:

mkdir test_dir_{1,2,3}

В фигурных скобках {} мы через запятую перечисляем варианты названий папок и результат команды будет полностью идентичен предыдущему примеру.

Также вместо перечисления всех вариантов, можно указать числовой диапазон, разделяя двумя точками в таком виде: {от..до}

mkdir test_{1..3}

Иногда требуется создать сразу дерево папок, например папка_предок/папка_потомок_1/папка_потомок_2. Это тоже предусмотрено в команде mdkir, достаточно к ней добавить опцию -p.

mkdir -p /parent_dir/child_dir_1/child_dir_2

Тем самым мы получаем удобную возможность одной командой создавать нужное нам дерево папок.

Как создать файл

В отличии от создания папки, существует бесчисленное количество способов создать файл в линукс. В данном примере мы разберем только самые визуально простые способы, которые не трудно запомнить.

Начнем с команды touch. Шаблон команды создания файла при помощи этой утилиты такой:

touch имя_файла

Создадим с ее помощью пустой файл с именем file_name

touch file_name

Если требуется создать несколько файлов, то просто перечислите их названия после touch, разделяя обычными пробелами

touch file_name_1 file_name_2 file_name_3

Если названия файлов однотипны и, например, различаются лишь последней цифрой, то можно сформулировать команду создания нескольких файлов в более коротком виде:

touch file_name_{1,2,3}

В фигурных скобках {} мы через запятую перечисляем варианты названий файлов и результат команды будет полностью идентичен предыдущему примеру.

Также вместо перечисления всех вариантов, можно указать числовой диапазон, разделяя двумя точками в таком виде: {от..до}

touch file_name_{1..3}

Помимо touch, также можно воспользоваться символом >, который отвечает за запись файлов. Если файла не существует, то он создается. Приведем пример создания пустого файла с именем file_name:

> file_name

Если необходимо создать файл сразу с текстом, то перед > нужно ввести команду echo и сам текст. То есть это должно выглядеть так echo "текст файла" > имя_файла

echo "file's text" > file_name

Таким образом получаем файл file_name, с текстом «file’s text».

Как вывести содержимое файла

Допустим у нас есть файл с именем file_name и необходимо прочитать прочитать его содержимое, не открывая никаких текстовых редакторов. Для этого есть отличный инструмент cat, а шаблон команды такой:

cat /путь/до/файла

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

cat file_name

В ответ получим содержимое файла «file’s text». Вот так это выглядит в терминале:

$ cat file_name
file's text

Как редактировать файл

Одним из самых простых способов редактировать файл через терминал является использовать консольный редактор nano. Он больше всего подходит для новичков, так как довольно прост, относительно других консольных редакторов. Для начала проверим установлен ли он командой:

nano --version

И если получим вывод, где указана версия утилиты и прочая информация, значит nano установлен:

$ nano --version
 GNU nano, version 2.7.4
 (C) 1999..2016 Free Software Foundation, Inc.
 (C) 2014..2016 the contributors to nano
 Email: nano@nano-editor.org    Web: https://nano-editor.org/
 Compiled options: --disable-libmagic --disable-wrapping-as-root --enable-utf8

Если в ответ вы получите сообщение, что команда не найдена…

$ nano
-bash: nano: command not found

Значит утилиту нужно установить. Это можно сделать с помощью этой команды sudo apt-get install nano или этой sudo yum install nano, зависит от вашего дистрибутива линукс.

И так, nano установлен.

Далее, используя знания из прошлого раздела, создадим файл с именем text_file и содержимым «file’s text here».

echo "file's text here" > text_file

Теперь откроем наш текстовый файл.

nano text_file

После чего прямо в терминале должно открыться содержимое файла.

Редактор nano

После белой полосы, в которой указана версия nano и имя файла, располагается его содержимое.

Первое что стоит осознать — это то, что мышка здесь здесь не работает. Вы можете нажать правой кнопкой мыши и вставить текст из буфера обмена, но навести курсор мышкой на нужное место в тексте скорее всего не сможете.

Здесь это делается клавишами ↑ Вверх, ↓ Вниз, ← Влево, Вправо. Попробуем передвинуть курсор на место перед словом here и нажать Enter, чтобы сбросить его на следующую строку.

Затем передвинем курсор на конец слова here, нажмем пробел и введем что-нибудь, например second line. После чего снова нажмем Enter и введем other line. В итоге у нас должно получиться вот так:

Консольный редактор nano. Редактирование текста 1.

А в самом низу мы видим шпаргалку, в которой перечислены основные горячие клавиши управления утилитой, где ^ обычно означает клавишу Ctrl.

Это значит, что например подсказка ^O Write out говорит, что для записи файла нужно нажать комбинацию Ctrl + O (англ буква «О») .

Далее, после записи закроем файл. Для этого снова смотрим вниз и находим подсказку ^X Exit, которая говорит нам, что для выхода нужно нажать Ctrl + X.

Напоследок следует сказать о такой полезной штуке, как поиск по содержимому файла. Чтобы вызвать поле поиска, нужно нажать Ctrl + W, как это видно в подсказке. После чего, внизу появится поле Search:, где нужно ввести поисковую фразу, для примера введем слово line:

Консольный редактор nano. Редактирование текста 2.

После чего курсор сдвинется на начало ближайшего слова line.

Консольный редактор nano. Редактирование текста 3.

Чтобы проверить, если ли еще слово line в этом файле, нужно нажать Alt + W. В нашем примере после этого курсор сдвинется на второе слово.

Нажмите Alt + W еще раз, и появится сообщение [ Search Wrapped ], что говорит нам, что данные слова закончились в файле.

Если вы нажали Ctrl + W и передумали что-либо искать, нажмите Ctrl + C для отмены, что также указано в подсказке при вызове поля поиска.

Более подробно ознакомиться с утилитой nano можно здесь.

Как скопировать файл

Для копирования файлов в линукс используется короткая команда cp, что представляет собой сокращение слова «copy». Пользоваться ей очень просто. Представим, что у нас есть файл с именем dolly

$ ls
dolly

Попробуем создать копию этого файла. Для этого нужно ввести команду cp со следующей конструкцией:

cp /путь/до/файла /путь/до/копии_файла

Теперь по этому шаблону скопируем файл dolly. Нам не нужно указывать полный путь, т.к. в примере мы уже находимся в той папке, в которой лежит этот файл.

cp dolly dolly_clone

Проверим что у нас получилось:

$ touch dolly
$ cp dolly dolly_clone
$ ls
dolly  dolly_clone

В результате у нас 2 файла: dolly и его копия dolly_clone.

Как скопировать папку

Копирование папок схож с копированием файлов. Так же можно использовать команду cp, но тут следует добавлять некоторые опции к команде:

  • -r — для того, чтобы вместе с папкой сохранить ее содержимое
  • -a — для того, чтобы сохранить все атрибуты файлов при копировании
  • -v — если вы хотите увидеть весь процесс копирования

Исходя из этого, если мы хотим полностью скопировать папку со всеми файлами и атрибутами, а также хотим наблюдать процесс, то наша команда должна иметь такой вид:

cp -rav /путь/до/исходной/папки /путь/для/копии/папки

Допустим у нас есть папка dolly_family и несколько файлов dolly внутри нее.

$ ls 
dolly_family
$ ls dolly_family/
dolly1  dolly10  dolly2  dolly3  dolly4  dolly5  dolly6  dolly7  dolly8  dolly9

Чтобы скопировать ее, формулируем следующую команду:

cp -rav dolly_family dolly_family_clone

В целом у нас должно выглядеть примерно так

$ cp -rav dolly_family dolly_family_clone
'dolly_family' -> 'dolly_family_clone'
'dolly_family/dolly1' -> 'dolly_family_clone/dolly1'
'dolly_family/dolly2' -> 'dolly_family_clone/dolly2'
'dolly_family/dolly3' -> 'dolly_family_clone/dolly3'
'dolly_family/dolly4' -> 'dolly_family_clone/dolly4'
'dolly_family/dolly5' -> 'dolly_family_clone/dolly5'
'dolly_family/dolly6' -> 'dolly_family_clone/dolly6'
'dolly_family/dolly7' -> 'dolly_family_clone/dolly7'
'dolly_family/dolly8' -> 'dolly_family_clone/dolly8'
'dolly_family/dolly9' -> 'dolly_family_clone/dolly9'
'dolly_family/dolly10' -> 'dolly_family_clone/dolly10'
$ ls
dolly_family  dolly_family_clone

Проверим нашу копию dolly_family_clone.

$ ls
dolly_family  dolly_family_clone
$ ls dolly_family_clone
dolly1  dolly10  dolly2  dolly3  dolly4  dolly5  dolly6  dolly7  dolly8  dolly9

Как видно, теперь у нас две папки с одинаковым содержимым и понимание как копировать папки.

Как перенести файл

Для переноса файлов в линукс используется команда mv, которая является сокращением от слова «move». Принцип переноса файлов очень схож с копированием и имеет такой вид:

mv /путь/до/файла /путь/куда/перенести/файл/

Допустим у нас есть файл под именем migrant и папка под именем place:

$ ls
migrant place

Теперь перенесем файл migrant в папку place:

mv migrant place/

И посмотрим что у нас получилось. Сначала убедимся, что файла migrant больше нет в этом месте, а затем посмотрим содержимое папки place, куда «мигрировал» наш файл.

$ mv migrant place/
$ ls
place
$ ls place/ 
migrant

Как перенести папку

Принцип переноса немного отличается от копирования. В этом случае опции -a и -r не требуется. Можно добавить опцию -v, чтобы наблюдать за процессом переноса. А также следует добавлять / в конце пути к исходной папке и пути куда ее положить. То есть команда должна иметь следующий вид:

mv -v /путь/до/папки/ /путь/куда/ее/перенести/

Допустим у нас есть пустая папка place и папка migrant_family с десятью файлами внутри:

$ ls
migrant_family  place
$ ls migrant_family/
migrant_1   migrant_2  migrant_4  migrant_6  migrant_8
migrant_10  migrant_3  migrant_5  migrant_7  migrant_9

Формулируем команду переноса папки migrant_family в папку place.

mv -v migrant_family/ place/

Теперь проверим что у нас получилось. Для начала убедимся, исчезла ли папка из текущего местоположения. Потом проверим содержимое place/ и place/migrant_family/

$ mv -v migrant_family/ place/
'migrant_family/' -> 'place/migrant_family'
$ ls
place
$ ls place/
migrant_family
$ ls place/migrant_family/
migrant_1   migrant_2  migrant_4  migrant_6  migrant_8
migrant_10  migrant_3  migrant_5  migrant_7  migrant_9

Выводы ls сообщают нам о том, что папка migrant_family/ успешно перебралась в папку place/ вместе со всем содержимым.

Как удалить файл

После того, как мы наделали дел, неплохо было бы за собой убраться и удалить все ненужные файлы. Для этого используется короткая команда rm, после которой перечисляются объекты, которые нужно удалить.

Допустим у нас есть файлы dolly и dolly_clone.

$ ls
dolly dolly_clone

Попробуем удалить эти файлы и запасемся баранины впрок. Шаблон команды такой

rm /путь/до/файла

Способ 1

Мы можем удалить сначала dolly, потом dolly_clone таким образом:

rm dolly
rm dolly_clone

Способ 2

А можем уместить все в одну команду, перечислив через пробел файлы для удаления после rm:

rm dolly dolly_clone

Способ 3

Также есть еще одна интересная хитрость, мы можем поставить сразу после слова dolly, звездочку *, то есть выразить команду в таком виде:

rm dolly*

Тем самым мы указываем команде rm, что нужно удалить те файлы, названия которых начинаются на dolly. В некоторых случаях это намного удобнее, чем прописывать название каждого файла.

Как удалить папку

Удаление папок можно также делать при помощи команды rm, но следует добавить несколько опций, чтобы команда выполнилась успешно:

  • -f — игнорирует несуществующие файлы, а также не выводит запросы на подтверждение удаления
  • -r — удаляет содержимое папки, перед ее удалением

То есть наша команда должна выглядеть вот так:

rm -rf /путь/до/папки

Представим, что у нас есть папка dolly_family, в которой лежат 10 файлов.

$ ls
dolly_family
$ ls dolly_family/
dolly1  dolly10  dolly2  dolly3  dolly4  dolly5  dolly6  dolly7  dolly8  dolly9

Чтобы удалить ее вместе со всем содержимым, формулируем следующую команду:

rm -rf dolly_family/

Система и утилиты

Как посмотреть инструкцию к команде прямо в терминале

Почти к каждой линукс утилите прикладывается help-информация, по которой вы можете понять как правильно использовать утилиту и ее опции.

Документацию к использованию утилиты можно получить таким образом:

название_утилиты --help

Посмотрим на примере команды ls:

ls --help

И прямо в терминале, не открывая никаких дополнительных текстовых редакторов, будет вывод документации.

Вывод команды ls --help

help + grep

В некоторых случаях не требуется выводить полную документацию, а лишь одну ее строчку, где рассказывается о какой-то конкретной опции. Для этого к команде ls --help нужно добавить разделитель |, а затем команду grep 'поисковая фраза в документации'.

название_утилиты --help | grep "поисковая фраза в документации"

Например, мы хотим узнать, как получить вывод ls, который будет содержать все файлы и папки, включая скрытые. Как мы знаем, по-английски слово все, значит all, тогда формулируем команду следующим образом:

ls --help | grep 'all'

И получаем в выводе только те строчки, что потенциально будут интересны для нашей задачи, что довольно упрощает работу с документацией, ведь нам не нужно напрягать глаза, чтобы найти нужные опции. К тому же мы экономим время, отсеивая из вывода с помощью grep все лишнее. Вот так это выглядит в терминале:

$ ls --help | grep 'all'
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
  -s, --size                 print the allocated size of each file, in blocks
  -X                         sort alphabetically by entry extension
or available locally via: info '(coreutils) ls invocation'

Как посмотреть историю команд

Бывают ситуации, когда было введено ранее много новых команд и вспомнить их правильную формулировку довольно сложно. Для того, чтобы посмотреть что и как именно было введено ранее, следует использовать команду history.

$ history
    1  cd ~
    2  touch dolly
    3  cp dolly dolly_clone
    4  ls
    5  rm dolly*
    6  touch migrant
    7  mkdir place
    8  ls -Al
    9  ls -l
   10  mv migrant place/
   11  ls
   12  ls -l
   13  ls -l place/ 
   14  ls
   15  rm -rf place
   16  mkdir dolly_family
   17  touch dolly_family/dolly{1..10}
   18  ls 
   19  ls dolly_family/
   20  exit
...

На linuxinsider.ru уже была статья про команду history, а в этом разделе будет описано кратко самое важное.

history + tail

Если мы нет нужды выводить полную историю команд, а, например будет достаточно последние 15, то к history нужно добавить разделитель |, а затем команду tail с опцией -n и количеством последних команд, которые мы хотим увидеть.

history | tail -n количество_строк_с_конца

Итак, если мы хотим увидеть 15 последних команд, значит команда должна иметь следующий вид:

history | tail -n 15

Вот так примерно это должно выглядеть в терминале:

$ history | tail -n 15
   74  sudo apt install man
   75  ls -h
   76  ls --help
   77  clear
   78  ls --help
   79  cat -h
   80  grep -h
   81  ls --help
   82  ls
   83  ls -r place-bak/
   84  ls -R place-bak/
   85  ls --help | grep 'all'
   86  man ls
   87  history
   88  history | tail -n 15

history + grep

Если мы помним примерно из каких слов состоит команда или ее примерные опции, то можно поискать их в истории команд, что довольно удобно. Для этого к history нужно добавить разделитель |, а затем команду grep 'поисковая фраза'.

history | grep "поисковая фраза"

Например, если нужно посмотреть все команды с папкой по имени dolly, то комбинацию history и grep следует выразить таким образом:

history | grep 'dolly'

И в ответ получим только те команды, в которых содержится слово dolly. Вид из терминала:

$ history | grep 'dolly'
    2  touch dolly
    3  cp dolly dolly_clone
    5  rm dolly*
   16  mkdir dolly_family
   17  touch dolly_family/dolly{1..10}
   19  ls dolly_family/
   22  cp -rav dolly_family dolly_family_clone
   27  dolly_family
   34  ls dolly_family_clone
   46  rm -rf dolly*
   89  history | grep 'dolly'

Как посмотреть все запущенные процессы

Бывают ситуации когда кулеры зашумели довольно сильно, а совсем не понятна причина такого упорства. В этом случае стоит выяснить какой процесс или программа заставляет крутиться их в полную силу.

Чтобы вывести все запущенные процессы в Linux, достаточно ввести короткую команду:

top  

В ответ терминал выдаст нам табличку, в которой перечислены процессы, их PID (Process ID), сколько они потребляют ресурсы процессора и памяти в процентах, а также много другой полезной информации информации в режиме реального времени.

Команда top

Для выхода нужно нажать Q или комбинацию Ctrl + C.

По-умолчанию, как правило, эта таблица отсортирована по потреблению ресурсов. То есть чем больше ресурсов потребляет процесс, тем выше он находится. Как видно из примера, рекордсмен по потреблению ресурсов в данном случае браузер Chrome.

Как завершить процесс принудительно

Представим ситуацию, что у нас завис браузер Chrome и не хочет отзываться. В этом случае стоит закрыть браузер принудительно. Если мы точно знаем, как называется процесс в системе, то достаточно ввести команду killall название процесса. Шаблон очень прост:

killall "точное название процесса или утилиты"

То есть, если мы хотим закрыть принудительно chrome, то делать это нужно вот так:

killall chrome

Если процесс существовал в момент ввода команды, то в ответ вы ничего не получите, а процесс завершится «молча».

Выясняем имя «жертвы»

Но что делать, если мы не знаем как точно называется процесс в системе, но знаем часть его названия? Тут тоже есть выход и в этом случае сначала нужно узнать либо полное название процесса, либо его PID (Process ID).

Чтобы выяснить есть ли процесс, содержащий в названии данную часть слова, который мы помним, будем использовать команду ps с опциями -A и -l. Эти опции отобразят все процессы в виде списка. Также используем команду grep через разделитель, чтобы отобразить информацию только о том, что нас интересует. Вот такой получается шаблон:

ps -Al | grep "часть названия процесса, которую помним"

Для примера также возьмем зависший браузер хром. Допустим мы знаем только часть названия «hrom». Чтобы посмотреть информацию об этом процессе, вводим:

ps -Al | grep hrom

Если название состоит из одного слова, то можно вводить без кавычек. Вывод будет таким:

$ ps -Al | grep hrom
4 S  1000 17927     1 27  80   0 - 152792 -  00:23:11 chrome

Для принудительного завершения нам потребуется либо название, либо PID. Пример того, как завершить процесс по полному названию, мы уже разобрали, теперь стоит попробовать сделать это, указав Process ID. Этот ID, как правило, отображается в 4ой колонке вывода команды ps -Al и в данном случае равен 17927.

Итак, мы выяснили PID процесса. Этого достаточно, чтобы завершить его принудительно. В этот раз будем использовать команду kill с опцией -9:

kill -9 PID_процесса

По этому шаблону формулируем команду:

kill -9 17927

Результатом которой будет тихое убийство процесса, без всяческих отчетов и выводов.

Как узнать версию и разрядность Linux

Под термином «версия линукс» может скрываться сразу два смысла: версия дистрибутива и версия ядра.

Версия дистрибутива — это версия сборки вашей ОС, например Ubuntu 20.04 или Debian 10.

Версия ядра Linux — это то, на чем эти сборки работают, и выглядит она обычно так: 4.8.0-53-generic или так 5.4.48-06434.

Узнаем версию дистрибутива

Самый универсальный способ узнать версию дистрибудтива — это прочитать содержимое файла /etc/os-release. Но в некоторых случаях этот файл может иметь другое название, например /etc/redhat-release или /etc/lsb-release. И чтобы решить эту проблему, можно вместо конкретного названия, указать условное в таком виде /etc/*release.

Для вывода содержимого используем команду cat, о которой говорилось выше, и формулируем команду

cat /etc/*release

Звездочкой * мы указываем, что хотим получить вывод со всех файлов, названия которых начинаются на «/etc/» и заканчивающиеся на «release» То есть варианты /etc/redhat-release, /etc/lsb-release и им подобные подходят под этот запрос.

Вот так это выглядит в терминале Debian 9:

$ cat /etc/*release
PRETTY_NAME="Debian GNU/Linux 9 (stretch)"
NAME="Debian GNU/Linux"
VERSION_ID="9"
VERSION="9 (stretch)"
VERSION_CODENAME=stretch
ID=debian
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"

Как узнать версию ядра Linux

Версию ядра в линукс можно узнать с помощь. команды uname с опцией -r

uname -r

На что вы получите в ответ только версию ядра и ничего лишнего:

$ uname -r
5.4.48-06434

Как узнать разрядность Linux

Чтобы узнать разрядность, нужно также использовать команду uname, но с опцией -a, которая укажет, что нужно вывести полную информацию о версии ядра.

uname -a

В выводе утилиты, обычно где-то в конце указывается разрядность. В данном случае это x86_64, что говорит нам о том, что в примере 64-разрядная версия линукс.

Linux deb9 5.4.48-06434 #1 SMP PREEMPT Wed Jul 29 00:32:34 PDT 2020 x86_64 GNU/Linux

Информация о сети

Рассмотрим 3 типа IP-адресов, с которыми приходится сталкиваться чаще всего:

  1. Внешний IP-адрес — адрес нашего устройства в глобальной сети.
  2. Локальной IP-адрес — адрес в локальной сети устройств.
  3. Внутренний IP-адрес — используется в основном утилитами для взаимодействия между собой. Всегда 127.0.0.1 или localhost

Разберем способы узнать внешний и локальный IP-адрес.

Как узнать внешний IP-адрес

В большинстве случаев, чтобы узнать свой внешний IP-адрес требуется сторонний сервис, который скажет с какого IP вы отправили ему запрос.

Как правило, эти сервисы представляют из себя обычные веб-страницы, вот их список:

  • icanhazip.com
  • ipecho.net/plain
  • smart-ip.net/myip
  • ident.me
  • ipinfo.io/ip
  • eth0.me

Разницы в этих сайтах особо нет, выберите тот, который именно вам отвечает быстрее всего.

Их можно открывать через браузер, но это не всегда удобно, поэтому в примерах мы будем рассматривать как обращаться к ним прямо из терминала.

Способ 1: wget

Утилита wget позволяет нам скачивать файлы и получать информацию с веб-страниц. Для начала проверим, установлена ли она, введите в терминал wget и если получите в ответ bash: wget: command not found, значит самое время ее установить

sudo apt install wget

Или вместо apt использовать yum, что зависит от вашего дистрибутива:

sudo yum install wget

Итак, утилита wget установлена, теперь попробуем узнать свой внешний IP-адрес. Для этого введем в терминал команду wget с опциями -qO, далее минус -, а затем уже один из сайтов, список которых выше. В целом шаблон команды такой:

wget -qO - адрес_веб_сайта

Например внешний IP-адрес можно узнать вот так:

wget -qO - icanhazip.com

Или вот так:

wget -qO - ipecho.net/plain

И так с любым сайтом из этого списка. Вот так это выглядит в терминале:

$ wget -qO - icanhazip.com
176.216.236.211
$ wget -qO - ipecho.net/plain
176.216.236.211

Способ 2: curl (проще)

Второй способ — использовать curl. Сама по себе утилита более универсальна, чем wget и заслуживает не одну отдельную статью, но в данном примере мы разберем как с ее помощью узнать свой внешний IP-адрес.

Для начала также проверим, установлена ли она, введите в терминал curl и если получите в ответ bash: curl: command not found, значит самое время ее установить

sudo apt install curl

Или вместо apt использовать yum, что зависит от вашего дистрибутива:

sudo yum install curl

Итак, утилита curl установлена, теперь попробуем узнать свой внешний IP-адрес. C «курлом» это намного проще, нужно лишь ввести curl и один из сайтов, список которых выше. В целом шаблон команды такой:

curl адрес_веб_сайта

Пробуем:

curl smart-ip.net/myip

И с другим сайтом:

curl ident.me

Вид из терминала:

$ curl smart-ip.net/myip
176.216.236.211
$ curl ident.me
176.216.236.211

Как узнать локальный IP-адрес

Локальный IP-адрес узнается при помощи разных утилит, мы рассмотрим наиболее популярный и актуальный инструмент для этих задач на сегодня — инструмент ip. Чтобы увидеть все сетевые интерфейсы, достаточно ввести:

ip addr show

В примере используется Debian 9 и вывод там такой:

$ ip addr show
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether 00:16:3e:3d:a0:09 brd ff:ff:ff:ff:ff:ff link-netnsid 0
    inet 192.168.122.253/24 brd 192.168.122.255 scope global eth0
       valid_lft forever preferred_lft forever
    inet6 fe80::216:3eff:fe3d:a009/64 scope link 
       valid_lft forever preferred_lft forever

В выводе отображается очень много информации, в которой легко запутаться. Мы видим 2 интерфейса, один lo (внутренний 127.0.0.1) и проводной eth0, с локальным IP-адресом 192.168.122.253. Как вы уже возможно поняли, сам IP-адрес отображается после inet.

Стоит перечислить самые распространенные интерфейсы, чтобы можно было легко ориентироваться, какой адрес кому пренадлежит.

  • lo — внутренний интерфейс, всегда 127.0.0.1 или localhost
  • eth — проводной интерфейс
  • wlan — Wi-Fi-интерфейс
  • ppp — Point-to-Point Protocol, часто используется для VPN

Понравилась статья? Поделить с друзьями:
  • Как найти к какой налоговой относишься
  • Как найти свою страницу на скайпе
  • Проткнули линолеум как исправить
  • У первоклассника плохой почерк как исправить
  • Как составить график на аванс