у кого есть файлы, открытые на сервере Linux

1045
Robert

У меня довольно распространенная задача выяснить, у кого файлы открыты на нашем файловом сервере Linux (Ubuntu) в нашей среде Windows.

Мы используем Samba в сети, а я использую Putty со своей рабочей станции, чтобы установить окно оболочки для запуска сценариев bash.

Я использовал что-то вроде этого, чтобы найти, какие файлы открыты: (это возвращает список идентификаторов процессов с каждым открытым файлом)

Robert:$ sudo lsof | grep "/srv/office/some/folder" 

Затем я проверяю что-то вроде этого, чтобы показать, кому принадлежит процесс: (при этом возвращается имя машины в сети с использованием протокола IP4, которому принадлежит процесс)

Robert:$ sudo lsof -p 27295 | grep "IPv4" 

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

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

Итак, я думал о создании какого-либо процесса, который я могу запустить в Linux, который прослушивает порт, а затем возвращает чистый список всех открытых файлов с IP-адресом хоста, у которого этот файл открыт. Затем небольшое клиентское приложение Windows, которое может отправить запрос на порт.

Кажется, что это должно быть очень распространенной потребностью, но я не могу найти ничего подобного, что было сделано раньше.

Какие-либо предложения?

2
Рассматривали ли вы написать небольшой сценарий bash для этого? digitxp 9 лет назад 0
http://serverfault.com/questions/118385/how-exactly-do-i-find-the-a-specific-samba-users-process-id-so-that-i-can-kill Kevin Panko 9 лет назад 0

1 ответ на вопрос

0
Kamil

I. If you need to do that task on just one computer - I would do that this way:

  1. Create linux account for such tasks ("sambaadmin" for example), for better security
  2. Configure putty for automatic login on that account
  3. Write your script that does your admin tasks (/home/sambaadmin/see_clients.sh for example). I would do your tasks this way:

    smbstatus -p read -p "Press [Enter] to exit..." exit

  4. Add execute permissions to it (chmod +x /home/sambaadmin/see_clients.sh)

  5. Call this script at the end of /home/sambaadmin/.bash_profile file. .bash_profile is automatically executed after user login.

  6. Create putty shoutcut on your windows desktop for that automatic login session

After you do that - your shourtuc will open putty, log in, your "admin task script " will be executed, you will see it in putty window and after you press Enter - session will end.

II. If you use many computers in company - write simple web application in python or use some server web management software (Webmin for example).

III. You can use cron to execute every minute or two script like this:

smbstatus -p > /somewhere/sambashare/openfiles.txt 

You can make shortcut to that file in windows and just open it to see what is going on.

\\sambaserver\sambashare\openfiles.txt