Linux что это значит перед файлом

Обновлено: 30.06.2024

Часть операционной системы, отвечающая за управление файлами и каталогами, называется файловой системой. Он организует наши данные в файлы, которые содержат информацию, и каталоги (также называемые «папками»), в которых хранятся файлы или другие каталоги.

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

Здесь ответ компьютера: /Users/nelle , домашний каталог Нелли:

Вариант домашнего каталога

Путь к домашнему каталогу будет выглядеть по-разному в разных операционных системах. В Linux он может выглядеть как /home/nelle, а в Windows — как C:\Documents and Settings\nelle или C:\Users\nelle. (Обратите внимание, что он может немного отличаться для разных версий Windows.) В будущих примерах мы использовали выходные данные Mac по умолчанию — выходные данные Linux и Windows могут немного отличаться, но в целом должны быть похожими.

Мы также предполагается, что ваша команда pwd возвращает домашний каталог вашего пользователя. Если pwd возвращает что-то другое, вам может понадобиться перейти туда с помощью cd, иначе некоторые команды в этом уроке не будут работать так, как написано. Дополнительные сведения о команде cd см. в разделе Изучение других каталогов.

Чтобы понять, что такое «домашний каталог», давайте посмотрим, как организована файловая система в целом. Ради этого примера мы проиллюстрируем файловую систему на компьютере нашего ученого Нелле. После этой иллюстрации вы будете изучать команды для исследования вашей собственной файловой системы, которая будет построена аналогичным образом, но не будет полностью идентичной.

На компьютере Нелле файловая система выглядит так:

Сверху находится корневой каталог, в котором хранится все остальное. Мы обращаемся к нему, используя символ косой черты, / , сам по себе; этот символ является первой косой чертой в /Users/nelle .

Внутри этого каталога есть несколько других каталогов: bin (где хранятся некоторые встроенные программы), data (для различных файлов данных), Users (где расположены личные каталоги пользователей), tmp (для временных файлов, которые не нужно хранить в течение длительного времени) и т. д.

Мы знаем, что наш текущий рабочий каталог /Users/nelle хранится внутри /Users, потому что /Users — это первая часть его имени. Точно так же мы знаем, что /Users хранится в корневом каталоге /, потому что его имя начинается с / .

Слеши

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

В разделе /Users мы находим по одному каталогу для каждого пользователя с учетной записью на компьютере Нелл, ее коллег imhotep и larry.

Файлы пользователя imhotep хранятся в /Users/imhotep , файлы пользователя larry — в /Users/larry , а файлы Nelle — в /Users/nelle . Поскольку Nelle является пользователем в наших примерах, мы получаем /Users/nelle в качестве нашего домашнего каталога. Как правило, когда вы открываете новую командную строку, для запуска вы оказываетесь в своем домашнем каталоге.

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

(Опять же, ваши результаты могут немного отличаться в зависимости от вашей операционной системы и того, как вы настроили свою файловую систему.)

  • знак / указывает, что это каталог
  • @ означает ссылку
  • * указывает на исполняемый файл

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

Здесь мы видим, что наш домашний каталог содержит только подкаталоги. Любые имена в наших выходных данных, которые не имеют символа классификации, являются обычными старыми файлами.

Очистка терминала

Если ваш экран слишком загроможден, вы можете очистить свой терминал с помощью команды очистки. Вы по-прежнему можете получить доступ к предыдущим командам, используя ↑ и ↓ для перемещения построчно или прокручивая в своем терминале.

Получение помощи

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

    Мы можем передать команде параметр --help (недоступно в macOS), например:

Далее мы опишем оба способа.

Опция --help

Большинство команд и программ bash, написанных для запуска из bash, поддерживают параметр --help, который отображает дополнительную информацию о том, как использовать команду или программу.

Неподдерживаемые параметры командной строки

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

Команда man

Еще один способ узнать о ls — ввести

Эта команда превратит ваш терминал в страницу с описанием команды ls и ее параметров.

Чтобы перемещаться по справочным страницам, вы можете использовать ↑ и ↓ для перемещения построчно или использовать B и клавишу пробела, чтобы пропустить вверх и вниз целую страницу. Для поиска символа или слова на справочных страницах используйте /, за которым следует символ или слово, которое вы ищете. Иногда поиск приводит к нескольким совпадениям. Если это так, вы можете перемещаться между ударами, используя N (для перемещения вперед) и Shift + N (для перемещения назад).

Чтобы выйти из справочных страниц, нажмите Q .

Руководства в Интернете

Конечно, есть и третий способ доступа к справке по командам: поиск в Интернете через веб-браузер. При использовании поиска в Интернете включение фразы unix man page в ваш поисковый запрос поможет найти релевантные результаты.

GNU предоставляет ссылки на свои руководства, включая основные утилиты GNU, которые охватывают многие команды, представленные в этом уроке.

Дополнительные сведения о флагах ls

Вы также можете использовать два параметра одновременно. Что делает команда ls при использовании с параметром -l? А если вы используете как параметр -l, так и параметр -h?

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

Решение

Опция -l заставляет ls использовать формат длинного списка, показывающий не только имена файлов/каталогов, но и дополнительную информацию, такую ​​как размер файла и время его последней модификации. Если вы используете как параметр -h, так и параметр -l, это делает размер файла «удобочитаемым», т. е. отображает что-то вроде 5,3 КБ вместо 5369 .

Список в обратном хронологическом порядке

По умолчанию ls перечисляет содержимое каталога в алфавитном порядке по имени. Команда ls -t перечисляет элементы по времени последнего изменения, а не по алфавиту. Команда ls -r выводит содержимое каталога в обратном порядке. Какой файл отображается последним при объединении параметров -t и -r? Подсказка: вам может понадобиться использовать параметр -l, чтобы увидеть даты последнего изменения.

Решение

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

Изучение других каталогов

Мы можем использовать ls не только для текущего рабочего каталога, но и для просмотра содержимого другого каталога. Давайте посмотрим на наш каталог Desktop, запустив ls -F Desktop, то есть команду ls с опцией -F и аргументом Desktop. Аргумент Desktop сообщает ls, что нам нужен список чего-то другого, кроме нашего текущего рабочего каталога:

Обратите внимание: если каталог с именем Desktop не существует в вашем текущем рабочем каталоге, эта команда вернет ошибку. Как правило, каталог Desktop существует в вашем домашнем каталоге, который, как мы предполагаем, является текущим рабочим каталогом вашей оболочки bash.

На выходе должен быть список всех файлов и подкаталогов в каталоге вашего рабочего стола, включая каталог shell-lesson-data, который вы скачали при установке для этого урока. Во многих системах каталог рабочего стола командной строки совпадает с вашим рабочим столом с графическим интерфейсом. Взгляните на свой рабочий стол, чтобы убедиться, что ваш вывод точен.

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

Теперь, когда мы знаем, что каталог shell-lesson-data находится в каталоге нашего рабочего стола, мы можем сделать две вещи.

Во-первых, мы можем просмотреть его содержимое, используя ту же стратегию, что и раньше, передав имя каталога в ls :

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

Команда для изменения местоположения — это cd, за которой следует имя каталога, чтобы изменить наш рабочий каталог. cd означает «изменить каталог», что немного вводит в заблуждение: команда не изменяет каталог; это изменяет представление оболочки о том, в каком каталоге мы находимся. Команда cd похожа на двойной щелчок по папке в графическом интерфейсе, чтобы попасть в папку.

Эти команды переместят нас из нашего домашнего каталога в каталог Desktop, затем в каталог shell-lesson-data, а затем в каталог с данными упражнений. Вы заметите, что cd ничего не печатает. Это нормально. Многие команды оболочки ничего не выводят на экран при успешном выполнении. Но если мы запустим после него pwd, то увидим, что теперь находимся в /Users/nelle/Desktop/shell-lesson-data/exercise-data.

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

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

Терминал Linux

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

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

Файлам и папкам в Linux даются имена, содержащие обычные компоненты, такие как буквы, цифры и другие символы на клавиатуре. Но когда файл находится внутри папки или папка внутри другой папки, символ / показывает связь между ними. Вот почему вы часто видите файлы, перечисленные в формате /usr/bin/python3 или /etc/os-release. Косая черта указывает, что один элемент хранится внутри предшествующего ему элемента.

Каждый файл и папка в системе POSIX могут быть представлены в виде пути. Если у меня есть файл penguin.jpg в папке «Изображения» в моем домашнем каталоге, а мое имя пользователя — seth, то путь к файлу может быть выражен как /home/seth/Pictures/penguin.jpg.

Большинство пользователей в основном взаимодействуют со своим домашним каталогом, поэтому в качестве сокращения используется символ тильды (~). Это означает, что я могу представить свой пример изображения пингвина либо как /home/seth/Pictures/penguin.jpg, либо как ~/Pictures/penguin.jpg.

Практика делает совершенным

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

Если сомневаетесь, перетащите

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

Диспетчер файлов Dolphin

Если вы используете терминал, полезно знать, что современные терминалы, в отличие от телетайпов, которые они эмулируют, могут принимать файлы путем перетаскивания. Например, когда вы копируете файл на сервер через SSH и не знаете, как указать путь к файлу, попробуйте перетащить файл из диспетчера файлов с графическим интерфейсом в терминал. Объект GUI, представляющий файл, преобразуется в путь к текстовому файлу в терминале:

Терминалы принимают операции перетаскивания

Не тратьте время на ввод предположений. Просто перетащите.

Таб — твой друг

В системе, которая известна тем, что избегает трехбуквенных команд вместо двух или даже однобуквенных команд, будьте уверены, что ни один опытный пользователь POSIX никогда не вводит все подряд. В оболочке Bash клавиша Tab означает автозаполнение, а автозаполнение никогда не лжет. Например, чтобы ввести пример местоположения файла penguin.jpg, вы можете начать с:

а затем нажмите клавишу Tab. Пока есть только один элемент, начинающийся с Pi, папка «Изображения» заполняется автоматически.

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

Предположим, что вы в порыве ночной реорганизации переместили файл penguin.jpg из папки ~/Pictures в каталог ~/Spheniscidae. Вы засыпаете и просыпаетесь обновленным, но без памяти, которую вы реорганизовали, поэтому вы пытаетесь скопировать ~/Pictures/penguin.jpg на свой веб-сервер в терминале, используя автозаполнение.

Сколько бы вы ни нажимали клавишу Tab, Bash отказывается от автозаполнения. Нужный вам файл просто не существует в том месте, где вы думаете, что он существует. Эта функция может быть полезна, когда вы пытаетесь указать на веб-странице шрифт или файл CSS, вы были уверены в том, что загрузили, или когда вы указываете компилятору библиотеку, которую вы 100% уверен, что вы уже скомпилировали.

Это не автозаполнение вашей бабушки

Если вам нравится автозаполнение Bash, вы начнете насмехаться над ним, как только попробуете автозаполнение в Zsh. Оболочка Z вместе с сайтом Oh My Zsh обеспечивает динамичный опыт, наполненный подключаемыми модулями для определенных языков программирования и сред, визуальными темами, наполненными полезными отзывами, и активным сообществом увлеченных пользователей оболочки:

Скромная конфигурация Zsh.

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

Больше практики

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

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

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

Предпосылки

Чтобы следовать этому руководству, вам потребуется доступ к компьютеру с операционной системой на базе Linux. Это может быть либо виртуальный частный сервер, к которому вы подключились с помощью SSH, либо ваша локальная машина. Обратите внимание, что это руководство было проверено с использованием сервера Linux с Ubuntu 20.04, но приведенные примеры должны работать на компьютере с любой версией любого дистрибутива Linux.

Если вы планируете использовать удаленный сервер, чтобы следовать этому руководству, мы рекомендуем вам сначала выполнить наше руководство по начальной настройке сервера. Это создаст безопасную серверную среду, включая пользователя без полномочий root с привилегиями sudo и брандмауэр, настроенный с помощью UFW, которые вы сможете использовать для развития своих навыков работы с Linux.

Кроме того, вы можете использовать интерактивный терминал, встроенный в эту страницу, чтобы поэкспериментировать с примерами команд из этого руководства. Щелкните следующее Запустить интерактивный терминал! кнопку, чтобы открыть окно терминала и начать работу в среде Linux (Ubuntu).

Запустите интерактивный терминал!

Примечание. Чтобы проиллюстрировать, как работают команды find и locate, приведенные в этом руководстве примеры команд выполняют поиск файлов, хранящихся в папке / или в корневом каталоге. Из-за этого, если вы вошли в терминал как пользователь без полномочий root, некоторые из примеров команд могут содержать в своем выводе Отказ в доступе.

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

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

Самый очевидный способ поиска файлов — по имени.

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

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

Чтобы найти файл по имени, но игнорировать регистр запроса, используйте параметр -iname:

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

Кроме того, вы можете инвертировать поиск, используя восклицательный знак ( ! ), например:

Обратите внимание, что если вы используете ! , вы должны экранировать символ обратной косой чертой ( \ ), чтобы оболочка не пыталась интерпретировать его до того, как find сможет действовать.

Поиск по типу

Вы можете указать тип файлов, которые хотите найти, с помощью параметра -type. Это работает следующим образом:

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

  • f : обычный файл
  • d : каталог
  • l : символическая ссылка
  • c : символьные устройства
  • b : заблокировать устройства

Например, если вы хотите найти все символьные устройства в вашей системе, вы можете ввести следующую команду:

Эта команда ищет устройства только в каталоге /dev, в котором файлы устройств обычно монтируются в системах Linux:

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

Примечание. В предыдущем примере объединены два выражения запроса поиска; а именно, -type f и -name "*.conf" . Чтобы любой файл был возвращен, он должен удовлетворять обоим этим выражениям.

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

В этом примере будут найдены все файлы, имена которых соответствуют запросу query_1 или query_2 .

Фильтрация по времени и размеру

find предоставляет множество способов фильтрации результатов по размеру и времени.

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

  • c : байты
  • k : килобайты
  • M : мегабайты
  • G : гигабайты
  • b : блоки по 512 байт.

Для иллюстрации следующая команда найдет все файлы в каталоге /usr размером ровно 50 байт:

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

Чтобы найти в каталоге /usr файлы размером более 700 мегабайт, можно использовать следующую команду:

Для каждого файла в системе Linux хранит временные данные о времени доступа, времени модификации и времени изменения.

Время доступа: время последнего чтения или записи файла.

Время модификации: время последнего изменения содержимого файла.

Время изменения: время последнего изменения метаданных индексного дескриптора файла.

Вы можете основывать свои поисковые запросы на этих параметрах, используя параметры -atime , -mtime и -ctime соответственно. Для любого из этих параметров вы должны указать значение, указывающее, сколько дней в прошлом вы хотите выполнить поиск. Как и в случае с параметрами размера, описанными ранее, перед этими параметрами можно поставить символы плюс или минус, чтобы указать «больше» или «меньше».

Например, чтобы найти файлы в каталоге /usr, которые были изменены за последний день, выполните следующую команду:

Если вам нужны файлы, к которым обращались менее суток назад, вы можете запустить эту команду:

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

У этих параметров также есть сопутствующие параметры, которые можно использовать для указания минут вместо дней:

Это даст файлы, которые были изменены за последнюю минуту.

find также может выполнять сравнение с эталонным файлом и возвращать более новые файлы:

Этот синтаксис вернет все файлы в системе, которые были созданы или изменены позже эталонного файла.

Поиск по владельцу и разрешениям

Вы также можете искать файлы по пользователю или группе, которой принадлежит файл, используя параметры -user и -group соответственно. Чтобы найти все файлы в каталоге /var, принадлежащие пользователю syslog, выполните следующую команду:

Аналогичным образом вы можете указать файлы в каталоге /etc, принадлежащие теневой группе, набрав:

Вы также можете искать файлы с определенными разрешениями.

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

Это будет соответствовать файлам с точно указанными разрешениями.

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

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

Фильтрация по глубине

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

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

После выполнения команд в этом разделе ваш каталог /tmp/ будет содержать три уровня каталогов с десятью каталогами на первом уровне. Каждый каталог (включая временный каталог) будет содержать десять файлов и десять подкаталогов.

Создайте примерную структуру каталогов в каталоге /tmp/ с помощью следующей команды:

После этого заполните эти каталоги несколькими образцами файлов с помощью команды touch:

Установив эти файлы и каталоги, перейдите в только что созданный каталог test/:

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

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

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

Чтобы найти файл1 только в каталогах уровня 1 и выше, вы можете указать максимальную глубину 2 (1 для каталога верхнего уровня и 1 для каталогов уровня 1):

Это гораздо более управляемый список.

Вы также можете указать минимальный каталог, если знаете, что все файлы существуют после определенного момента в текущем каталоге:

Вы можете использовать это, чтобы найти только файлы в конце ветвей каталога:

Опять же, из-за разветвленной структуры каталогов будет возвращено большое количество результатов (1000).

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

Такое сочетание этих параметров значительно сужает результаты: возвращается только 110 строк вместо прежних 1 000.

Выполнение команд по результатам поиска

Вы можете выполнить произвольную вспомогательную команду для всего, что находит совпадения, используя параметр -exec, используя следующий синтаксис:

Кнопка <> используется в качестве заполнителя для файлов, которые находят совпадения. \; позволяет найти, где заканчивается команда.

Например, предположив, что вы все еще находитесь в каталоге test/, который вы создали в каталоге /tmp/ на предыдущем шаге, вы можете найти файлы в предыдущем разделе, у которых были разрешения 644, и изменить их, чтобы они имели разрешения 664:

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

В этом примере выполняется поиск всех каталогов с разрешениями, установленными на 755, а затем изменяются разрешения на 700 .

Поиск файлов с помощью locate

Альтернативой использованию find является команда locate. Эта команда часто выполняется быстрее и может с легкостью выполнять поиск по всей файловой системе.

Вы можете установить эту команду в Debian или Ubuntu с помощью apt, обновив списки пакетов и затем установив пакет mlocate:

В Rocky Linux, CentOS и других дистрибутивах, производных от RedHat, вы можете вместо этого использовать команду dnf для установки mlocate:

Причина, по которой locate работает быстрее, чем find, заключается в том, что он опирается на базу данных, в которой перечислены все файлы в файловой системе. Эта база данных обычно обновляется один раз в день с помощью cron-скрипта, но вы можете обновить ее вручную с помощью команды updatedb. Запустите эту команду сейчас с привилегиями sudo:

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

locate позволяет фильтровать результаты несколькими способами. Самый простой способ использовать его для поиска файлов — использовать следующий синтаксис:

Это будет соответствовать любым файлам и каталогам, которые содержат строковый запрос в любом месте их пути к файлу. Чтобы возвращать только файлы, имена которых содержат сам запрос, вместо каждого файла, содержащего запрос в каталогах, ведущих к нему, вы можете включить флаг -b для поиска только тех файлов, чье «базовое имя» соответствует запросу:

Чтобы функция locate возвращала только те результаты, которые все еще существуют в файловой системе (имеются в виду файлы, которые не были удалены между последним вызовом updateb и текущим вызовом locate), используйте флаг -e:

Вы можете получить статистику по каталогизированной информации locate с помощью параметра -S:

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

Заключение

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

С этого момента мы рекомендуем вам продолжать экспериментировать с поиском и размещением . Вы можете прочитать их соответствующие справочные страницы, чтобы узнать о других параметрах, не описанных в этом руководстве, и вы можете анализировать результаты поиска и управлять ими, перенаправляя их в другие команды, такие как wc , sort и grep .

Хотите узнать больше? Присоединяйтесь к сообществу DigitalOcean!

Присоединяйтесь к нашему сообществу DigitalOcean, насчитывающему более миллиона разработчиков, бесплатно! Получайте помощь и делитесь знаниями в нашем разделе "Вопросы и ответы", находите руководства и инструменты, которые помогут вам расти как разработчику и масштабировать свой проект или бизнес, а также подписывайтесь на интересующие вас темы.

Операционная система держала несколько очень больших файлов журналов открытыми, некоторые из которых имели размер около 30 ГБ. Файл был ранее удален, но только остановка и перезапуск процесса jvm/java освободили место на диске. Команда lsof показывает следующий вывод перед перезапуском процесса Java

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

Разрешение

Мягкое завершение соответствующего процесса

Сначала получите список удаленных файлов, которые все еще остаются открытыми в приложениях:

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

Выходные данные lsof показывают, что процесс с pid 25575 сохранил файл /oradata/DATAPRE/file.dbf открытым с файловым дескриптором (fd) номер 33 .

После того, как файл был идентифицирован, освободите место, занимаемое файлом, остановив затронутый процесс. Если корректное завершение работы не работает, введите команду kill, чтобы принудительно остановить его, обратившись к PID .

Обрезать размер файла

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

Например, из приведенного выше вывода lsof:

По одной и той же причине использование диска командой du и командой df будет разным. См. раздел Почему df показывает большее использование диска, чем du?

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

Основная причина

В системах Linux или Unix при удалении файла с помощью rm или приложения-менеджера файлов удаляется файл из структуры каталогов файловой системы; однако, если файл все еще открыт (используется запущенным процессом), он по-прежнему будет доступен для этого процесса и продолжит занимать место на диске. Поэтому такие процессы, возможно, потребуется перезапустить, прежде чем место для этого файла будет очищено в файловой системе.

Этапы диагностики

Log Reaper позволит вам визуализировать и быстро сузить данные lsof до нужного подмножества

Это решение является частью программы ускоренной публикации Red Hat, предоставляющей огромную библиотеку решений, созданных инженерами Red Hat для поддержки наших клиентов. Чтобы дать вам необходимые знания, как только они станут доступны, эти статьи могут быть представлены в необработанном и неотредактированном виде.

7 комментариев

Можно ли восстановить удаленный файл, например, сохранить в другое место?

Часто появляется на ext3 FS. Есть ли способ смягчить это на серверах Prod? Каждый раз, когда мы не можем перезапустить службу приложений?

на самом деле это было очень хорошо, но при проверке в инженерной системе было обнаружено множество «удаленных» файлов, хранящихся в программах ОС.
У меня были бы опасения, что запуск systemctl restart на них и, согласно вашему комментарию, о знании того, что мы делаем, очищая то же самое в процессах ОС, я бы счел рискованным. Например, firewalld и настроенный.

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

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

Это очень полезно, но этого недостаточно.

Означает ли это, что процесс каким-то образом "не функционирует" и может быть безопасно завершен с помощью команды kill? Обычно невозможно «мягко завершить процесс», проблему может решить только отключение всей службы, такой как база данных или сервер приложений,

В какой-то момент их накопилось так много, что у нас закончилось место в файловой системе /, и единственным вариантом была перезагрузка всего сервера, что освободило 70% используемого пространства.

Это просто означает, что копия файла /oradata/DATAPRE/file.dbf, открытая процессом 25575 для файлового дескриптора 33, была удалена во время работы этого процесса. Поскольку копия этого файла была открыта в то время, когда он был удален из иерархии каталогов файловой системы, символическая ссылка не работает (не указывает на видимый файл в файловой системе), но это также означает пространство, в котором находится этот файл. оккупация на диске не может быть восстановлена ​​/ восстановлена, иначе файл на диске по существу находится в «занятом» состоянии и не может быть фактически удален из файловой системы / диска до тех пор, пока все процессы, которые в настоящее время его открыты, не закроют их доступ к этому экземпляру файла .

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

Мы можем легко воспроизвести приведенное выше, как показано ниже:

Приведенный выше сценарий создает симптомы, которые вы заметили и о которых спрашивали. Сценарий создает копию реального файла (обозначается как копия [A]). Этот файл открывается openfile, который переходит в спящий режим после открытия файла file, имитируя процесс, который продолжает использовать этот файл (или просто забыл закрыть его после того, как с ним было покончено).

[1] Команда 'file' дает нормальный результат. Но затем мы удаляем файл. На самом деле rm выполняет unlink(), то есть отвязывает/удаляет запись файла из каталога файловой системы. Файл будет фактически удален, а место на диске будет освобождено позднее. но только после того, как счетчик ссылок файла станет равным нулю. Каждый процесс, открывший файл, увеличивает свой счетчик ссылок на 1. В тот момент, когда мы вводим команду rm, никакой другой процесс с этого момента не сможет открыть экземпляр реального файла [A]. этот экземпляр файла больше не присутствует в иерархии каталогов файловой системы.

[2] Команда «файл» после удаления файла показывает «неработающую символическую ссылку», ссылка на файл все еще существует в процессе — он все еще может получать доступ, читать, записывать в файл — , но экземпляр файла, на который указывает ссылка на открытый файл, больше не присутствует в видимой файловой системе. Также файл «realfile» больше не присутствует в структуре каталогов файловой системы, но все еще присутствует на диске.

[3] Воссоздание «реального файла» не изменит неработающую ссылку, потому что, хотя процесс 21200 имеет открытый реальный файл [A], воссозданный файл — это реальный файл [B] — файл с тем же именем, но тот, который занимает свое место. собственное и отличное от экземпляра [A] место в файловой системе/диске, чем экземпляр [A].

[4] Поскольку экземпляр 'realfile' [A] по-прежнему не находится в видимой иерархии файловой системы. то же сообщение о неработающей символической ссылке.

[5] Мы видим удаленный файл в выводе lsof. Файл по-прежнему занимает место на диске, но был удален из видимой иерархии каталогов файловой системы. Экземпляр реального файла [A] связан с номером инода «24821678» (в столбце NODE).

[6] Итак, мы открыли экземпляр реального файла [B], и другой lsof показывает, что два экземпляра файла связаны с двумя разными номерами NODE, то есть это два разных файла. Первый из перечисленных (экземпляр файла [A]) был удален из иерархии каталогов файловой системы, но, поскольку он все еще открыт/на него ссылается процесс, занимаемое им пространство не может быть восстановлено/восстановлено до тех пор, пока файл закрывается всеми процессами, обращающимися к нему.

[7] Мы повторяем процесс несколько раз — создание, открытие, удаление экземпляра файла — в результате чего 4 экземпляра AD больше не присутствуют в иерархии каталогов файлов (т. е. пользователь не может видеть эти файлы из уровне командной строки), но процессы держат копии этих файлов открытыми, и все это пространство, указанное в столбце SIZE, не может быть освобождено до тех пор, пока процессы, удерживающие эти файлы открытыми, не закроют файл или не завершат работу.

В приведенном выше примере 70 МБ пространства не могут быть освобождены, поскольку приложение openfile не закрыло доступ к файлу.

Читайте также: