- Поиск в Linux с помощью команды find
- Общий синтаксис
- Описание опций
- Примеры использования find
- Поиск файла по имени
- Поиск по дате
- По типу
- Поиск по правам доступа
- Поиск файла по содержимому
- С сортировкой по дате модификации
- Лимит на количество выводимых результатов
- Поиск с действием (exec)
- Чистка по расписанию
- Как получить полный путь к файлу?
- В окнах вы можете: —
- Удерживайте клавишу shift и щелкните правой кнопкой мыши по файлу, который дает вам опцию с именем «Copy as Path»
- В Linux вы можете использовать команду: —
- Сообщество InfoboxCloud
- Linux VPS
- Категории
- Прямой эфир
- Блоги
- Управляем файлами и директориями в Linux
- Как узнать абсолютный путь к директории?
- Как перейти в нужную директорию?
- Как просмотреть содержимое директории?
- Сколько свободного и занятого места?
- Как найти файл или директорию
- Как создать директорию?
- Как удалить файл или директорию?
- Как переместить или переименовать файл или директорию?
- Как скопировать файл или директорию
- Создаем ссылки
- Как создать пустой файл
- Как отредактировать текстовый файл
- Как скопировать файл или директорию по SSH на сервер и обратно
- Файловый менеджер для Linux
Поиск в Linux с помощью команды find
Утилита find представляет универсальный и функциональный способ для поиска в Linux. Данная статья является шпаргалкой с описанием и примерами ее использования.
Общий синтаксис
— путь к корневому каталогу, откуда начинать поиск. Например, 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. Поиск файла по части имени:
* данной командой будет выполнен поиск всех папок или файлов в корневой директории /, заканчивающихся на .tmp
3. Несколько условий.
а) Логическое И. Например, файлы, которые начинаются на sess_ и заканчиваются на cd:
find . -name «sess_*» -a -name «*cd»
б) Логическое ИЛИ. Например, файлы, которые начинаются на sess_ или заканчиваются на cd:
find . -name «sess_*» -o -name «*cd»
в) Более компактный вид имеют регулярные выражения, например:
find . -regex ‘.*/\(sess_.*cd\)’
* где в первом поиске применяется выражение, аналогичное примеру а), а во втором — б).
4. Найти все файлы, кроме .log:
find . ! -name «*.log»
* в данном примере мы воспользовались логическим оператором !.
Поиск по дате
1. Поиск файлов, которые менялись определенное количество дней назад:
find . -type f -mtime +60
* данная команда найдет файлы, которые менялись более 60 дней назад.
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
По типу
Искать в текущей директории и всех ее подпапках только файлы:
* 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 %p\n’ | sort -r
* команда найдет все файлы в каталоге /data, добавит к имени дату модификации и отсортирует данные по имени. В итоге получаем, что файлы будут идти в порядке их изменения.
Лимит на количество выводимых результатов
Самый распространенный пример — вывести один файл, который последний раз был модифицирован. Берем пример с сортировкой и добавляем следующее:
find /data -type f -printf ‘%TY-%Tm-%Td %TT %p\n’ | 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. Вывести на экран количество найденных файлов и папок, которые заканчиваются на .tmp:
find . -name «*.tmp» | wc -l
4. Изменить права:
find /home/user/* -type d -exec chmod 2700 <> \;
* в данном примере мы ищем все каталоги (type d) в директории /home/user и ставим для них права 2700.
5. Передать найденные файлы конвееру (pipe):
find /etc -name ‘*.conf’ -follow -type f -exec cat <> \; | grep ‘test’
* в данном примере мы использовали find для поиска строки test в файлах, которые находятся в каталоге /etc, и название которых заканчивается на .conf. Для этого мы передали список найденных файлов команде grep, которая уже и выполнила поиск по содержимому данных файлов.
6. Произвести замену в файлах с помощью команды sed:
find /opt/project -type f -exec sed -i -e «s/test/production/g» <> \;
* находим все файлы в каталоге /opt/project и меняем их содержимое с test на production.
Чистка по расписанию
Команду find удобно использовать для автоматического удаления устаревших файлов.
Открываем на редактирование задания cron:
0 0 * * * /bin/find /tmp -mtime +14 -exec rm <> \;
* в данном примере мы удаляем все файлы и папки из каталога /tmp, которые старше 14 дней. Задание запускается каждый день в 00:00.
* полный путь к исполняемому файлу find смотрим командой which find — в разных UNIX системах он может располагаться в разных местах.
Источник
Как получить полный путь к файлу?
Есть ли простой способ распечатать полный путь file.txt ?
Я полагаю, вы используете Linux.
Я нашел утилиту под названием realpath в coreutils 8.15.
Согласно комментариям @ styrofoam-fly и @ Arch-standton, только realpath не проверяет существование файла, для решения этой проблемы добавьте аргумент e : realpath -e file
Следующее обычно делает трюк:
Я знаю есть более простой способ, но черт возьми, если я смогу это найти .
Если вы находитесь в том же каталоге, что и файл:
Замените file.txt вашим целевым именем файла.
В окнах вы можете: —
Удерживайте клавишу shift и щелкните правой кнопкой мыши по файлу, который дает вам опцию с именем «Copy as Path»
В Linux вы можете использовать команду: —
- realpath yourfile , чтобы получить полный путь к файлу, как предлагают многие.
Я знаю, что это старый вопрос сейчас, но просто добавить к информации здесь:
Команду Linux which можно использовать для поиска пути к файлу командного файла, т.е.
Вы можете использовать скрипт fpn (полный путь) :
Работает на Mac, Linux, * nix:
Это даст вам CSV всех файлов в текущем каталоге:
Вывод этого может быть легко скопирован в список python или любую подобную структуру данных.
В Mac OS X я заменил утилиты, поставляемые с операционной системой, и заменил их более новой версией coreutils. Это позволяет вам получать доступ к таким инструментам, как readlink -f (для абсолютного пути к файлам) и realpath (абсолютный путь к каталогам) на вашем Mac.
Версия Homebrew добавляет «G» (для GNU Tools) перед именем команды — так что эквивалентами становятся greadlink -f FILE и grealpath DIRECTORY .
Инструкции по установке coreutils/GNU Tools на Mac OS X с помощью Homebrew можно найти в этот раздел StackExchange .
NB. Команды readlink -f и realpath должны работать «из коробки» для пользователей не-Mac Unix.
Это объяснение того, что происходит в @ ZeRemz’s ответ :
- Этот скрипт получает относительный путь в качестве аргумента «$1»
- Затем мы получаем dirname часть этого пути (вы можете передать либо dir, либо файл в этот скрипт): dirname «$1»
- Затем мы cd «$(dirname «$1») в этот относительный каталог
- && pwd -P и получите абсолютный путь к нему. Опция -P позволит избежать всех символических ссылок
- После этого мы добавляем базовое имя к абсолютному пути: $(basename «$1»)
- В качестве последнего шага мы echo это
В аналогичном сценарии я запускаю скрипт cshell из другого места. Для установки правильного абсолютного пути скрипта, чтобы он работал только в указанном каталоге, я использую следующий код:
$0 хранит точную строку, как был выполнен скрипт.
Например, если скрипт был запущен следующим образом: $> ../../test/test.csh , $script_dir будет содержать /home/abc/sandbox/v1/../../test
Это наивно, но я должен был сделать это, чтобы быть POSIX-совместимым. Требуется разрешение на CD в каталог файла.
Вы можете сохранить это в вашем «Shell.rc» или просто положить в консоль
псевдоним ap = «absolute_path»
Это сработало очень хорошо для меня. Он не зависит от файловой системы (pro/con в зависимости от необходимости), поэтому он будет быстрым; и он должен быть переносимым для большинства * NIX. Предполагается, что переданная строка действительно относится к PWD, а не к какому-либо другому каталогу.
Вы можете использовать эту функцию. Если имя файла задано без относительного пути, то предполагается, что оно присутствует в текущем рабочем каталоге:
Использование с относительным путем:
С пробелами в имени файла:
В Mac указанном ниже строке работает. Не нужно добавлять какие-либо необычные линии.
Источник
Сообщество InfoboxCloud
Linux VPS
Категории
Прямой эфир
fadich 11 ноября 2015, 17:09
trukhinyuri 4 августа 2015, 04:41
trukhinyuri 23 января 2015, 14:46
trukhinyuri 30 октября 2014, 23:31
dimasmagadan 25 августа 2014, 09:12
trukhinyuri 22 июня 2014, 17:06
trukhinyuri 15 января 2014, 12:06
trukhinyuri 21 ноября 2013, 23:29
Блоги
- Дата-центры0.00
- Java0.00
- Технологии разработки0.00
- Производительность0.00
- Облачные серверы Infobox Cloud0.00
- Облачный хостинг Infobox Jelastic0.00
- VPS от Infobox0.00
- Быстрый хостинг сайтов Infobox0.00
- Node.JS0.00
- Истории успеха0.00
Управляем файлами и директориями в Linux
Данная статья будет полезна для начинающих пользователей и позволит работать с серверами быстрее и удобнее, даже если вы раньше не пользовались Linux.
Вы научитесь:
- создавать файлы и папки
- перемещать и копировать файлы и папки
- узнаете о ссылках
- сможете легко переносить файлы на сервер, с него и между серверами.
и многое другое…
Примеры продемонстрированы на VPS от Infobox и на облачных VPS.
Для работы с сервером подключитесь к нему по SSH.
Как узнать абсолютный путь к директории?
Для того, чтобы узнать абсолютный путь к папке, где вы находитесь, используйте команду:
Как перейти в нужную директорию?
Для того, чтобы перейти в нужную директорию, используется команда:
, где вместо нужно подставить путь к ней.
Путь может быть абсолютным или относительным.
Абсолютный путь
Абсолютный путь всегда начинается от корня файловой системы /.
Например, для того, чтобы перейти по абсолютному пути с помощью команды cd в папку /var/logs используйте команду:
Относительный путь
— означает домашнюю директорию пользователя.
Например, мы находимся в директории /root/. Давайте перейдем в директорию /:
Мы сказали «перейди в директорию, лежащую выше этой по иерархии».
Давайте теперь перейдем в директорию root:
Это означает «перейди в директорию root, которая находится в директории, в которой мы сейчас находимся».
То же самое можно сделать, используя обозначение текущей директории:
Из любого места мы можем перейти в домашнюю директорию, используя команду:
Как просмотреть содержимое директории?
Для просмотра списка файлов и папок в директории воспользуйтесь командой:
При этом не будут выведены скрытые файлы и директории (название скрытых файлов и директорий начинается с точки .).
Вы можете использовать дополнительные параметры команды ls.
Наиболее часто используемые:
- ls -l – показать дополнительно список прав, размеры файлов, дату изменения и владельца;
- ls -a – показать все, включая скрытые файлы;
- ls -la – показать все, включая скрытые файлы, список прав, размеры файлов, дату изменения и владельцев;
Можно просмотреть дерево директорий с помощью команды:
Этого приложения может не быть в вашем дистрибутиве.
Если вы видите сообщение:
, установите программу tree.
В Debian и Ubuntu это можно сделать с помощью команды:
В CentOS и Oracle Linux:
Результат работы tree выглядит так:
Сколько свободного и занятого места?
Для того, чтобы узнать, сколько занятого и свободного места на диске, воспользуйтесь командой:
Как мы видим, объем диска 20 гигабайт, занято 2.9 гигабайта, свободно 16 гигабайт.
Для того, чтобы узнать размер директории или файла, воспользуйтесь командой:
Как найти файл или директорию
В этом вам поможет утилита find.
В самом простом случае использoвать ее можно так:
Будет осуществлен поиск файла или директории с именем file начиная от корневой директории /.
Опция -name чувствительна к регистру (различает заглавные и строчные буквы). Если вы не знаете, заглавные или строчные буквы используются в названии искомого файла, воспользуйтесь опцией -iname. С помощью опции -regex или -iregex можно найти что-то соответствующее регулярному выражению.
Команда find с параметром -exec позволяет выполнить команду для всего найденного.
Найдя любой файл с расширением .docx он будет скопирован в директорию /tmp.
Для того, чтобы найти, где располагается бинарный файл программы, исходные тексты и документация воспользуйтесь командой whereis:
Если вам необходимо найти только исполняемые файлы программ, которые указаны в путях переменных окружения, воспользуйтесь командой which:
Как создать директорию?
Для создания директории используйте команду mkdir.
Например, создадим в текущей директории директорию «foo»:
Для создания директорий и поддиректорий используйте команду mkdir -p:
Как удалить файл или директорию?
Для удаления воспользуйтесь командой rm:
rm file1.txt
Чтобы удалить и вложенные файлы и папки, добавьте параметр -r:
Если вы не хотите, чтобы вам был задан вопрос, спрашивающий разрешение на удаление, используйте параметр -f:
Если вы хотите удалить только пустую директорию, вам поможет команда rmdir:
Если директория не пустая, вы получите уведомление и удаление не будет выполнено.
Как переместить или переименовать файл или директорию?
Для перемещения файла или директории используйте команду mv:
Переименование можно представить, как перемещение в ту же директорию с другим именем.
Давайте переименуем директорию suda в tuda:
Заметьте, что вы можете переместить и переименовать файл или директорию в одну команду при необходимости. Для этого в правой части напишите уже новое имя:
В данном примере мы переместили директорию tuda в директорию /var/www и переименовали в site.
Как скопировать файл или директорию
Скопировать файл можно с помощью команды cp:
Можно скопировать сразу несколько файлов в директорию, указанную в последнем параметре:
Для копирования директорий используйте параметр -r:
Так же вам может пригодиться параметр -u для копирования больших файлов и директорий. С его помощью будет выполняться копирование только если копируемый файл новее, чем существующий.
Создаем ссылки
Есть два типа ссылок: жесткие ссылки и символические ссылки.
Жесткие ссылки
Жесткие ссылки — это указатели на файлы. Всегда существует минимум одна жесткая ссылка на файл. Сам файл находится где-то на жестком диске и у него есть уникальный номер. Имя файла хранится отдельно в файловом индексе (inode). Также в файловом индексе содержится тот же уникальный номер. Файловый индекс — жесткая ссылка на файл. При создании еще одной жесткой ссылки появляется еще одна запись в файловом индексе со ссылкой на файл и тем же номером. Сам файл удалится только если будут удалены все жесткие ссылки на него.
Жесткая ссылка создается командой:
Можно убедиться, что уникальные номера файлов с жесткими ссылками одинаковы командой:
Символические ссылки
Символическая ссылка — специальный файл, указывающий на документ в другом месте дисковой иерархии. При удалении такой ссылки файл останется на месте. При удалении исходного файла или перемещении исходного файла ссылка тоже останется на месте, но будет вести на несуществующий адрес.
Создать символическую ссылку можно командой:
Как создать пустой файл
Для этого используйте команду:
Как отредактировать текстовый файл
Редактировать текстовые файлы нужно часто при настройке серверов и не только. В данном разделе мы дадим только вводную информацию. В дальнейшем вы можете изучать редакторы более глубоко.
nano – это простой редактор с графическим интерфейсом.
Для установки на CentOS или Oracle Linux выполните команду:
Для установки на Ubuntu и Debian используйте команду:
Для редактирования файла введите:
Редактировать можно сразу же после открытия редактора. Для сохранения изменений и выхода нажмите ctrl + X (^ в подсказках редактора обозначается, как нажатие на кнопку ctrl).
Будет предложено записать изменения на диск, нажмите Y.
На этом шаге можно изменить имя сохраняемого файла. Если это не требуется, просто нажмите Enter.
Мы видим, что изменения успешно записались в файл.
Если вы захотите научиться работать с текстовыми файлами эффективнее, рекомендуем изучать редакторы vim и emacs, но на начальном этапе знакомства с Linux без них можно обойтись.
Как скопировать файл или директорию по SSH на сервер и обратно
Соединение по SFTP с помощью Filezilla
Вы можете воспользоваться Filezilla и настроить соединение по STFP.
Установите клиент, нажмите кнопку создания нового подключения, как показано на скриншоте ниже:
Создайте новый сайт, укажите ip–адрес сервера, тип подключения SFTP, логин и пароль доступа к серверу и нажмите «Connect» (Соединиться).
Разрешите подключение к серверу в следующем окне.
Теперь соединение успешно установлено, вы можете перемещать данные на сервер и с сервера.
Копирование данных с помощью scp
Этот способ особенно полезен, если вы хотите переносить данные между серверами.
На вашем компьютере запустите терминал или Cygwin в Windows (руководство по установке Cygwin есть в этой статье).
Для копирования файла используйте команду:
Для копирования папки используйте команду:
Встает вопрос, как же указать местоположение на удаленном сервере. Это делается в формате:
Например, давайте скопируем папку на удаленный сервер в папку пользователя (
Или давайте скопируем ее в папку /var/www:
Теперь давайте вернем папку temp из /var/www на наш компьютер:
– папка пользователя на нашем компьютере.
Данный способ удобно использовать и для переноса данных между серверами.
Убедитесь с помощью команды ls -la, что папка с сайтом (например /var/www/html) и сами файлы сайта доступны от пользователя, под которым работает веб-сервер. Для apache чаще всего пользователь: www-data. Если у вас файлы в папке сайта принадлежат пользователю root – сайт скорее всего не будет открываться.
Для изменения прав воспользуйтесь командой:
Файловый менеджер для Linux
Спасибо, что дочитали статью до конца. Напоследок расскажем о графическом файловом менеджере для Linux Midnight Commander или просто mc.
Установка mc в CentOS или Oracle Linux:
Установка mc в Ubuntu или Debian:
Запустить файловый менеджер можно просто командой
Это классический двухпанельный файловый менеджер. Вы можете использовать функциональные кнопки компьютера f1… для операций согласно подсказкам на экране. С его помощью можно редактировать файлы, создавать папки, перемещать и копировать папки и файлы и многое многое другое. Этот менеджер может быть полезен на начальном этапе знакомства с Linux.
Для выхода из mc нажмите F10 и Enter.
Если вы нашли ошибку в статье, считаете, что нужно добавить что-то важное или просто у вас есть вопрос — напишите нам.
Успешного использования Linux на VPS от Infobox и на облачных VPS.
Источник