Файл разблокировки Linux

Обновлено: 21.11.2024

Samba — это бесплатное программное обеспечение Linux/Unix, которое обеспечивает доступ к файлам и печати для клиентов Microsoft Windows. Если у вас есть файловый сервер Linux или устройство NAS на базе Linux в сети с клиентами Windows, вы, вероятно, используете Samba.

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

К сожалению, Samba не позволяет разблокировать отдельные файлы. Однако есть несколько обходных путей.

Перезапустите Samba

Самый быстрый и грязный способ — перезапустить Samba. Проблема в том, что все пользователи будут временно отключены от сервера, что может привести к потере данных. Чтобы перезапустить samba, запустите:
/etc/init.d/samba restart
Команда может немного отличаться в зависимости от вашего дистрибутива Linux.

Удалить PID пользователя

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

Первый запуск:
smbstatus
и найти заблокированный файл. Обратите внимание на номер PID (первый столбец)

Если список очень длинный и вы пытаетесь найти файл, запустите:
smbstatus | grep -i filename.ext
где filename.ext — имя заблокированного файла.
Это отфильтрует результаты smbstatus и вернет только строки с вашим заблокированным файлом.

Теперь снова запустите smbstatus (или вернитесь к первому запросу) и в верхней таблице найдите пользователя с записанным вами номером PID. Это будет пользователь, который блокирует файл.


Вы также можете проверить, какие еще файлы открывал этот пользователь, проверив результаты smbstatus или выполнив:

smbstatus | grep 14899
где 14899 PID пользователя

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

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

1. Обзор

Блокировка файлов — это механизм взаимного исключения, обеспечивающий безопасное чтение и запись файла несколькими процессами.

В этом руководстве мы рассмотрим проблему промежуточного обновления в системе с несколькими процессами. Затем мы представим два типа блокировок в Linux.

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

2. Проблема промежуточного обновления

Промежуточное обновление — это типичная проблема состояния гонки в параллельной системе. Давайте рассмотрим пример, чтобы лучше понять проблему.

Допустим, у нас есть файл balance.dat, в котором хранится баланс аккаунта, и его начальное значение равно «100». В нашей параллельной системе есть два процесса для обновления значения баланса:

  1. Процесс A: считывает текущее значение, вычитает 20 и сохраняет результат обратно в файл.
  2. Процесс Б: считывает текущее значение, добавляет 80 и записывает результат обратно в файл.

Очевидно, что после выполнения двух процессов мы ожидаем, что файл будет иметь значение: 100-20+80=160.

Однако в этой ситуации может возникнуть проблема промежуточного обновления:

  1. Процесс А считывает текущее значение файла (100) и готовится к дальнейшим вычислениям.
  2. Теперь процесс Б читает тот же файл и получает текущий баланс (100).
  3. Процесс A вычисляет 100-20 и сохраняет результат 80 обратно в файл.
  4. Процесс Б не знает, что баланс был обновлен с момента последнего чтения. Таким образом, он по-прежнему будет использовать устаревшее значение 100 для вычисления 100+80 и записи результата 180 в файл.

В результате у нас есть 180 в файле balance.dat вместо ожидаемого значения 160.

3. Блокировка файлов в Linux

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

Все мы знаем, что rm -rf / — очень опасная команда в Linux. Если мы выполним команду от имени пользователя root, все файлы в работающей системе будут удалены.Это связано с тем, что Linux обычно не блокирует автоматически открытые файлы. Однако Linux поддерживает два типа блокировок файлов: рекомендательные блокировки и принудительные блокировки.

Вскоре мы представим оба типа блокировки, но в этой статье основное внимание будет уделено рекомендательной блокировке.

3.1. Рекомендательная блокировка

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

Пример может помочь нам легче понять схему совместной блокировки. Давайте рассмотрим наш предыдущий пример баланса.

  1. Во-первых, мы предполагаем, что файл balance.dat по-прежнему содержит начальное значение «100».
  2. Процесс A устанавливает монопольную блокировку файла balance.dat, затем открывает и считывает файл, чтобы получить текущее значение: 100.

Мы должны понимать, что рекомендательная блокировка не была установлена ​​операционной системой или файловой системой. Таким образом, даже если процесс A заблокирует файл, процесс B по-прежнему может читать, записывать или даже удалять файл с помощью системных вызовов.

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

А теперь давайте посмотрим, как блокировка будет работать для взаимодействующих процессов:

  1. Процесс B пытается заблокировать файл balance.dat перед чтением файла (сотрудничая с процессом A).
  2. Поскольку процесс A заблокировал файл, процесс B должен ждать, пока процесс A снимет блокировку.
  3. Процесс A вычисляет 100-20 и записывает 80 обратно в файл.
  4. Процесс A снимает блокировку.
  5. Теперь процесс Б устанавливает блокировку, читает файл и получает обновленное значение: 80.
  6. Процесс Б запускает свою логику и записывает результат 160 (80+80) обратно в файл.
  7. Процесс B снимает блокировку, чтобы другие взаимодействующие процессы могли читать и записывать файл.

Мы увидим, как этот пример реализуется с помощью команды flock, в следующем разделе.

3.2. Обязательная блокировка

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

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

Чтобы включить обязательную блокировку файлов в Linux, необходимо выполнить два требования:

  1. Мы должны смонтироватьфайловую систему с опцией mand (mount -o mand FILESYSTEM MOUNT_POINT).
  2. Мы должны включить бит set-group-ID и отключить бит group-execute для файлов, которые мы собираемся заблокировать (chmod g+s,gx FILE).

4. Проверить все блокировки в системе

В этом разделе мы рассмотрим два способа проверки текущих блокировок в работающей системе.

4.1. Команда lslocks

Команда lslocks входит в состав пакета util-linux и доступна во всех дистрибутивах Linux. Он может перечислить все в настоящее время блокировки файлов в нашей системе.

Давайте посмотрим на пример вывода:

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

4.2. /proc/locks

/proc/locks не является командой. Вместо этого это файл в виртуальной файловой системе procfs. Файл содержит все текущие блокировки файлов. Команда lslocks также использует этот файл для создания списка.

Чтобы получить информацию о /proc/locks, мы выполняем «cat /proc/locks»:

Давайте выберем первую строку, чтобы понять, как информация о блокировке организована в файловой системе /proc/locks:

  1. Первый столбец — это порядковый номер.
  2. Второе поле указывает класс используемой блокировки, например FLOCK (из системного вызова flock) или POSIX (из < em>lockf, fcntl системный вызов).
  3. Этот столбец предназначен для типа блокировки. Он может иметь два значения: РЕКОМЕНДАТЕЛЬНЫЙ или ОБЯЗАТЕЛЬНЫЙ.
  4. Четвертое поле показывает, является ли блокировка блокировкой WRITE или READ.
  5. Тогда у нас есть идентификатор процесса, удерживающего блокировку.
  6. Это поле содержит строку значений, разделенных двоеточиями, показывающую идентификатор заблокированного файла в формате «основное-устройство:второстепенное-устройство:inode».
  7. В этом столбце вместе с последним показаны начало и конец заблокированной области заблокированного файла. В этом примере строки весь файл заблокирован.

5.Введение в команду flock

Команда flock также предоставляется пакетом util-linux. Эта утилита позволяет нам управлять рекомендательными блокировками файлов в сценариях оболочки или в командной строке.

Основной синтаксис использования:

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

В дополнение к текстовому файлу balance.dat, содержащему текущее значение баланса, нам по-прежнему нужны два процесса, A и B, для обновления баланса в файле.

Сначала мы создаем простой сценарий оболочки update_balance.sh для обработки логики обновления баланса для обоих процессов:

Мы создаем простой сценарий оболочки a.sh для имитации процесса A:

Теперь давайте запустим процесс A для тестирования:

В выходных данных мы видим, что команда flock сначала установила блокировку файла balance.dat, а затем update_balance.sh скрипт прочитал и обновил файл.

Во время его выполнения мы можем проверить информацию о блокировке с помощью команды lslocks:

Выходные данные показывают, что команда flock удерживает блокировку WRITE для всего файла /tmp/test/balance.dat.< /p>

5.1. Демонстрация flock с некооперативными процессами

Мы узнали, что рекомендательные блокировки работают, только если участвующие процессы сотрудничают. Давайте сбросим баланс на 100 и проверим, что произойдет, если мы установим рекомендательную блокировку файла для процесса A, но запустим процесс B без взаимодействия.

Теперь давайте создадим простой сценарий оболочки b_non-cooperative.sh:

Мы видим, что процесс B вызывает update_balance.sh, не пытаясь заблокировать файл данных баланса.

Давайте продемонстрируем этот сценарий в GIF-анимации:

Мы видим, что рекомендательная блокировка, полученная процессом A, игнорируется, если процесс B запускается без взаимодействия с процессом A.

Поэтому в balance.dat у нас 180 вместо 160.

5.2. Демонстрация стада с кооперативными процессами

Наконец, давайте создадим еще один совместный процесс B, b.sh, и посмотрим, как работает рекомендательная блокировка:

Снова показываем демонстрацию в формате GIF:

В демоверсии мы создали два процесса для совместной работы.

Мы заметили, что когда процесс Б пытался заблокировать файл balance.dat, он ждал, пока процесс А снимет блокировку. Таким образом, рекомендательная блокировка сработала, и мы получили ожидаемый результат 160 в файле данных баланса.

6. Заключение

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

Мы также изучили команду lslocks для проверки блокировок в системе и утилиту flock для реализации рекомендуемой блокировки.

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

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

Щелкните файл правой кнопкой мыши. В появившемся меню выберите Заблокировать файл. Чтобы разблокировать, щелкните файл правой кнопкой мыши и выберите Разблокировать файл.

Как разблокировать файл в Unix?

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

  1. Найдите файл, который вы хотите заблокировать, в структуре папок Box Drive.
  2. Щелкните файл правой кнопкой мыши.
  3. В появившемся меню выберите Заблокировать файл.
  4. Чтобы разблокировать, щелкните файл правой кнопкой мыши и выберите "Разблокировать файл".

Как узнать, заблокирован ли файл в Linux?

<р>4. Проверка всех замков в системе

  1. 4.1. Команда lslocks. Команда lslocks входит в состав пакета util-linux и доступна во всех дистрибутивах Linux. Он может перечислить все текущие блокировки файлов в нашей системе. …
  2. 4.2. /прок/замки. /proc/locks не является командой. Вместо этого это файл в виртуальной файловой системе procfs.

Как разблокировать безопасную папку?

Сбросить настройки безопасной папки

  1. На устройстве Android откройте приложение Files by Google.
  2. В левом верхнем углу нажмите "Настройки меню" .
  3. Выберите Безопасная папка. Сбросьте настройки безопасной папки.
  4. В диалоговом окне подтверждения нажмите «Сбросить».

Что произойдет, если я удалю блокировку папки?

Просто запустите основную папку «Установка» для повторной установки приложения. Выберите ту же папку программы, что и раньше, и она заменит все необходимые файлы. Обратите внимание, что удаление программы или ее удаление НЕ УДАЛЯЕТ ваши файлы и папки, которые вы защитили с помощью блокировки папки.

Как я могу восстановить пароль к моей безопасной папке?

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

  1. Откройте защищенную папку на своем устройстве.
  2. Нажмите "ЗАБЫЛИ ПАРОЛЬ".
  3. На следующем экране войдите в свою учетную запись Samsung. …
  4. Во всплывающем окне нажмите СБРОС.

Как изменить режим в Linux?

Команда Linux chmod позволяет вам точно контролировать, кто может читать, редактировать или запускать ваши файлы. Chmod — это сокращение от режима изменения; если вам когда-нибудь понадобится произнести это вслух, просто произнесите это точно так, как оно выглядит: ch’-mod.

Как удалить заблокированный файл?

Как удалить заблокированный файл в Windows 10

  1. Найдите папку, которую хотите удалить. …
  2. Загрузите Process Explorer с веб-сайта Microsoft и нажмите OK во всплывающем окне.
  3. Дважды щелкните processexp64, чтобы извлечь файл.
  4. Выберите «Извлечь все».
  5. Нажмите "Открыть".
  6. Дважды щелкните приложение procexp64, чтобы открыть его.
  7. Выберите "Выполнить".

Как разблокировать папку в Ubuntu?

Вот решение, которое я нашел. Откройте терминал и выполните следующую команду: sudo chmod 777 [путь] -R, где [путь] — ваша заблокированная папка или файл. В моем случае я сделал sudo chmod 777 /home/fipi/Stuff -R, и альт, теперь я могу удалять, создавать и перемещать файлы сколько душе угодно.

В этом посте мы увидим, как можно найти и удалить заблокированные файлы в системе GNU/Linux.

Для этой цели мы будем использовать инструменты lsof(8) и lslk(8).

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

В этом посте мы увидим, как найти и удалить такие заблокированные файлы в системе Debian GNU/Linux.

Требования

Установка

Сначала давайте установим необходимые инструменты:

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

Поиск заблокированных файлов

Чтобы просмотреть все заблокированные файлы в текущей системе, просто выполните lslk(8) .

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

Теперь давайте просмотрим заблокированные файлы в системе:

В приведенном выше выводе интересны первые четыре строки, помеченные как неизвестные .

На самом деле мы получаем весьма полезную информацию из вывода lslk(8) — мы знаем, где находится файл в файловой системе (в нашем случае это /mnt/homes ), каков его номер инода, PID и т. д. Пожалуйста, обратитесь к справочной странице lslk(8) для получения дополнительной информации о различных параметрах и значении различных столбцов.

Мы также можем заметить, что четыре процесса используют один и тот же файл из /mnt/homes .

Теперь попробуем найти файлы, открытые этими процессами, с помощью инструмента lsof(8):

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

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

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

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

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