- Идентификация открытых файлов и сетевых подключений в Linux — lsof (примеры)
- Закрыть файл из другого процесса
- Б.1.2. Закрытие файла
- Читайте также
- Установка размера файла, инициализация файла и разреженные файлы
- 11.2.2. Закрытие файлов
- Закрытие файла
- 5.12.4 Закрытие каналов
- 10.6 Закрытие соединения
- 12. Закрытие продаж
- Закрытие файла: fclose( )
- Б.1.2. Закрытие файла
- Закрытие потоков
- Закрытие файлов
- Закрытие процесса
- Закрытие файлов
- Закрытие PGP диска.
- Закрытие окна
- Удаление открытого файла в Linux
- Удаление открытого файла в Linux
- Подготовка
- Свободное место и свободные иноды
- Создание файлов на диске
- Эксперимент с удалением открытого файла
- Завершение эксперимента
- Выводы
Идентификация открытых файлов и сетевых подключений в Linux — lsof (примеры)
Lsof расшифровывает как List Open Files (список открытых файлов). Команда формирует список дескрипторов открытых файлов по процессам и именам файлов. В Линукс все является файлами (очереди, сокеты, директории, устройства и т.д. ). Таким образом, с помощью Lsof, вы можете получить информацию о любых открытых файлов.
1. Введение в lsof
Также работает рекурсивный просмотр:
6. Просмотр файлов открытых конкретным пользователем
Для поиска файлов открытых определенным пользователем, используем ключ -u
Иногда необходимо вывести файлы открытые всеми пользователями, за исключением конкретного. Для этого используется -‘^’
Данная команда выводит список файлов открытых всеми пользователями, за исключением пользователя alex1812
7. Список всех файлов открытых конкретным процессом
Для вывода списка всех файлов открытых конкретным процессов используется ключ -p. Это может быть полезно для получения большей информации о самом процессе.
8. Уничтожить все процессы используемые конкретным пользователем
Если необходимо уничтожить все процессы, имеющие открытые файлы, конкретного пользователя, мы можем использовать ключ -t для просмотра id процессов и уничтожить их с помощью kill —
Данная команда уничтожит все процессы пользователя alex1812, которые имели открытые файлы.
Аналогичным образом, вы можете использовать ключ -t для других целей, например, чтобы получить список id процессов, которые открыли /var/log/syslog
9. Комбинирование ключей
По умолчанию, если вы используете более одного ключа в Lsof, то вывод команды будет объеденен по этим ключам. Например,
В этой команде мы используем два ключа -u и -c, таким образом команда одновременно выводит и список процессов принадлежащих пользователю alex1812, и процессы начинающиеся со слова init (принадлежащих любым пользователям).
Вы можете использовать ключ -a, чтобы совместить вывод по нескольким параметрам, например процессы принадлежащие пользователю alex1812 и начинающиеся с init:
10. Выполнение Lsof в режим повтора
Lsof поддерживает вывод в режиме повтора. То бишь сначала будет выведет список файлов с заданными параметрами, затем задержка на заданный интервал и опять вывод на основе этих же параметров.
Режим повтора может быть включен ключами +r и -r. Если используем +r, то режим повтора будет прерван в случае отсутствия открытых файлов. Ключ -r будет продолжать вывод с заданным интервалом вне зависимости от наличия открытых файлов.
Каждый цикл вывода будет разделен с помощью «=======». Мы также можем указать время задержки для обоих ключей.
В данном примере мы выводим список процессов принадлежащих alex1812 c именем x-session и задержкой повторного вывода в 5 секунд.
Поиск сетевых подключений
Сетевые соединения в Linux также являются файлами. Таким образом, мы можем найти информацию о них с помощью Lsof.
11. Просмотр всех сетевых подключений
Для просмотра всех сетевых подключений используем ключ -i
Вы также можете использовать -i4 и i6 для вывода только подключений по IPv4 или IPv6 соответственно.
12. Список всех сетевых файлов используемых конкретным процессом
В первом случае мы задаем процесс по его id, во втором по имени (по первым символам).
13. Список процессов прослушивающих определенный порт
Для этого используется ключ -i и номер порта через ‘:’
14. Список всех UDP и TCP соединений
Для вывода такого списка используем —
15. Просмотр всех NFS (Network File System) файлов
Для просмотра всех NFS файлов используем ключ -N, например просмотр всех NFS файлов открытых от пользователя alex1812 —
Надеюсь информация данной статьи будет кому-либо полезна, особенно тем, кто не любит читать man’ы =)
Источник
Закрыть файл из другого процесса
Программа wget открыла файл и пишет в него, файл большой и не нужный, качаться будет долго.
1) как закрыть файл, чтоб программа выдала ошибку и продолжила работу
2) существуют ли способы управления wget-ом в рантайме. например, послать ему сигнал, чтобы он пропустил текущую закачку и не убился
дешевле убить и заново запустить
Насколько я понял вы запустили скачивание командой
Если вы не хотите перезапускать wget заново, исключив из файла с сылка ми на закачку не нужную можно поступить так, временно отключить соединение с internet, сделав несколько попыток докачать файл wget выдаст сообщение о недоступности файла и перейдёт к следующей ссылке, в этот момент восстановит подключение к internet, но это возможно, если у вас не специфическое подключение, когда нужно дозваниваться до провайдера.
kostik87, это не вариант.
Ну тогда пишите нормальный скрипт, который после завершения закачки ссылки wget`ом удаляет строку с этой ссылкой из файла, если так сделайте то вам будет достаточно удалить верхнюю строку с не нужной вам ссылкой и продолжить скачивание оставшихся ссылок.
ну а по поводу вариант или не вариант, думать надо раньше того, как делать.
Добавь правило в айпитэйблс вместо отключения интернет, вгет точно также отвалится.
Хотелось бы все-таки сделать это через файловый дескриптор. Может есть какая-нибудь программа?
Есть. Школьная. Но идиотам даже она не помогает.
С таким подходом (при Cталине) запустили человека в космос, кстати…
В школьную программу включили Linux? Судя по тому, что никто еще не предложил ничего стоящего, думаю, что нет.
А ты и правда имбецил
Напиши свой велосипед, который читает из файла по одной строчке и запускает wget. Тогда при убийстве wget он вновь запустится, но уже для следующего файла.
Источник
Б.1.2. Закрытие файла
Б.1.2. Закрытие файла
По окончании работы с файлом его следует закрыть с помощью функции close(). В ряде случаев, например в программе, показанной в листинге Б.1, нет необходимости вызывать данную функцию явно, так как ОС Linux автоматически закрывает все открытые файлы по завершении программы. Естественно, после того как файл был закрыт, обращаться к нему нельзя.
Закрытие файла вызывает разную реакцию операционной системы, в зависимости от природы файла. Например, когда закрывается сокет, происходит разрыв сетевого соединения между двумя компьютерами, взаимодействующими через сокет.
Linux ограничивает число файлов, которые могут быть открыты процессом в определенный момент времени. Дескрипторы открытых файлов занимают ресурсы ядра, поэтому желательно вовремя закрывать файлы, чтобы дескрипторы удалялись из системных таблиц. Обычно процессам назначается лимит в 1024 дескриптора. Изменить это значение позволяет системный вызов setrlimit() (см. раздел 8.5, «Функции getrlimit() и setrlimit(): лимиты ресурсов»).
Читайте также
Установка размера файла, инициализация файла и разреженные файлы
Установка размера файла, инициализация файла и разреженные файлы Функция SetEndOfFile позволяет переустановить размер файла, используя текущее значение указателя файла для определения его размера. Возможно как расширение, так и усечение файла. В случае расширения файла
11.2.2. Закрытие файлов
11.2.2. Закрытие файлов Одной из операций, которые одинаковы для файлов всех типов, является закрытие файла. Ниже показано, как закрыть файл.#include int close(int fd);Очевидно, что это базовая операция. Однако есть один важный момент, касающийся закрытия файлов, о котором
Закрытие файла
Закрытие файла fcloseЗакрывает файл, открытый предварительно функцией fopen().Синтаксис:int fclose(int $fp)Возвращает false, если файл закрыть не удалось (например, что-то с ним случилось или же разорвалась связь с удаленным хостом). В противном случае возвращает значение «истина».Всегда
5.12.4 Закрытие каналов
5.12.4 Закрытие каналов При закрытии канала процесс выполняет ту же самую процедуру, что и при закрытии обычного файла, за исключением того, что ядро, прежде чем освободить индекс канала, выполняет специальную обработку. Оно уменьшает количество процессов чтения из канала
10.6 Закрытие соединения
10.6 Закрытие соединения Нормальное завершение соединения выполняется с помощью той же процедуры тройного рукопожатия, что и при открытии соединения. Каждая из сторон может начать закрытие соединения по следующему сценарию:A: «Я закончил работу. Данных для пересылки
12. Закрытие продаж
12. Закрытие продаж Как только 36 часов истекли, вешаем на сайт сообщение: «Регистрация закончена». Вот что вы пропустили. Можно сказать, вам не повезло. Рассказываем о бонусах, про которые в тексте рекламы не говорили – чтобы для людей, которые не успели, это стало уроком. Вы
Закрытие файла: fclose( )
Закрытие файла: fclose( ) Наш пример показывает, как закрывать файл: fclose(in);Просто используйте функцию fclose( ). Заметим, что аргументом ее является in, указатель на файл, а не test, имя файла. Для программы, более серьезной, чем эта, следовало бы посмотреть, успешно ли закрыт файл.
Б.1.2. Закрытие файла
Б.1.2. Закрытие файла По окончании работы с файлом его следует закрыть с помощью функции close(). В ряде случаев, например в программе, показанной в листинге Б.1, нет необходимости вызывать данную функцию явно, так как ОС Linux автоматически закрывает все открытые файлы по
Закрытие потоков
Закрытие потоков Функции fclose и fcloseall закрывают поток или потоки. Функция fclose закрывает один заданный поток, fcloseall — все потоки, кроме потоков stdin, stdout, stderr, stdaux, stdprn.Если программа не выполняет закрытия потоков, потоки автоматически закрываются, когда программа завершается
Закрытие файлов
Закрытие файлов Функция close закрывает открытые файлы. Открытые файлы также автоматически закрываются при неаварийном завершении
Закрытие процесса
Закрытие файлов
Закрытие файлов После того, как вы поработали с файлом, его надо закрыть. Класс CFile имеет для этого специальный метод Close:virtual void Close() throw(CFileException);Метод закрывает файл. Если вы создали объект класса CFile и открыли файл, а затем объект удаляется, то связанный с ним файл
Закрытие PGP диска.
Закрытие PGP диска. Закройте все программы и файлы, имеющиеся на диске PGP, т.к. невозможно закрыть диск, если файлы на этом диске до сих пор еще открыты. Теперь зайдите в мой компьютер выделите мышкой диск PGP, нажмите на правую кнопку мышки и выберите команду в
Закрытие окна
Закрытие окна При работе экран постепенно загромождается открытыми окнами программ. При этом становится трудно разобраться в них. Поэтому когда вы заканчиваете работу с программой, то окно с ней стоит закрыть.При нажатии на кнопку Закрытие окна окно исчезает из поля
Источник
Удаление открытого файла в Linux
Есть ряд каверзных вопросов по Linux, которые вводят в ступор большинство начинающих системных администраторов Linux. Их очень любят задавать на собеседованиях бывалые админы, а в интернете про ответы на них не написал только ленивый. В топе уже наверно полтора десятилетия держится вопрос про удаление открытого файла в Linux. Тем не менее кандидаты все также из раза в раз продолжают делать круглые глаза. Максимум, что от них можно услышать — это «Иноды. Я слышал про иноды, но больше про них ничего не знаю».
Чтобы раз и навсегда внести ясность в этот вопрос и была написана эта статья.
Удаление открытого файла в Linux
Чтобы проверить как работает файловая система в Linux, проведем небольшой эксперимент.
Подготовка
Для проведения всех тестов нам необходима виртуальная машина с практически любым дистрибутивом Linux и дополнительный диск. Благо в век виртуализации это сделать проще простого. Для наглядности возьмем диск в пару гигабайт и заранее подготовим его (базовые операции с дисками рассмотрим в другой статье).
Представим, что вы впервые вошли по ssh на сервер, у вас рутовые права и ваша задача просто разобраться с дисковой подсистемой.
Свободное место и свободные иноды
Первое, что мы сделаем, это проверим диски всем знакомой командой df (лишние данные убраны из вывода):
Утилита отображает занятое на файловой системе место в блоках 1К. Этой информации в большинстве случаев хватает лишь для констатации факта о % свободного места и не стоит на этом останавливать диагностику.
Проблемы с записью новых файлов может вызвать также нехватка инодов (inodes), поэтому полезно будет их проверить той же командой, но с другим ключом:
Используется 1% места на разделе. Запоминаем вывод команд, он нам понадобится для последующего анализа.
Создание файлов на диске
Далее создадим один большой файл на нашем диске. Сделать это проще всего утилитой dd, которая поставляется по умолчанию вместе с системой (предварительно создадим пару каталогов):
И ещё создадим 10 маленьких файлов, но другим способом:
Теперь снова смотрим два вывода df:
Как видно, теперь на диске занято 75%. А что с инодами?
Количество инод изменилось на 13, хотя файлов мы создали всего 11.
Эксперимент с удалением открытого файла
Теперь посмотрим на ситуацию другой утилитой, которую также обязательно нужно использовать для диагностики. Речь о du:
Примерно занят 1ГБ.
Теперь сымитируем что-то похожее на блокировку файла (если будут предупреждения, соглашайтесь):
Команда просто открывает файл на чтение и отправляет задание в бэкграунд. Теперь удаляем файл:
После этого проверяем свободно место:
И свободные иноды:
В итоге место не освободилось, хотя файл, казалось бы, удален. Инодов используется столько же. Но может быть du покажет нам что-то другое:
Занято 8Кб. Ок, есть ещё одна утилита, которая лучше других объяснит что происходит, это lsof:
Мы посмотрели все, что хотели, можно заканчивать.
Завершение эксперимента
Сворачиваем наш эксперимент — убиваем процесс, который мы ранее запустили в фоновом режиме:
Теперь снова проверяем свободное место:
Большой файл удалился, место и иноды освободились. Смысла проверять вывод du нет, она покажет то же самое, что и в предыдущий раз.
Выводы
Что все же произошло? А произошло следующее: информация от du и df до удаления большого файла была очевидной и объяснений не требует. За исключением одного момента — почему файлов создали 11, а количество инодов увеличилось на 13? Тут все просто. Наверно все слышали выражение, что все в линуксе — файл 1 ? И каталог тоже, а их мы создали два.
Далее мы удалили файл, который открыт на чтение другим процессом. Команда rm удалила ссылку на файл, которую хранит объект каталога, но не смогла удалить файл физически с диска, поскольку файл был открыт на чтение другой программой.
Хоть файл уже и не имел имени, но все ещё имел файловый дескриптор (= инод), к которому продолжала обращаться программа. Это было также хорошо заметно по выводу lsof — файл был помечен как удаленный. Как только программу остановили, файл освободился и система смогла завершить начатое — удалить файл и зависимые структуры данных на диске окончательно.
В показаниях утилиты du также нет ничего странного, ведь она считывает все перечисленные имена файлов в каталоге и оценивает их размер. Поскольку ссылку на имя большого файла удалили, du не смогла оценить его объем, зато это смогла сделать df, ведь она оценивает реальный занятый объем на диске в блоках без привязки к именам. Вот весь секрет.
Источник