czy istnieje sposób na dostarczenie skryptów po zamontowaniu i wstępnie zamontowanych w Linuksie?
Próbuję zrobić kilka skryptów na nośniku pamięci, gdy są zamontowane i przed odmontowaniem (np. W celu synchronizacji).
Jak montowany jest system plików? Rzeczy nie są montowane automatycznie, prawdopodobnie masz jakiś program / narzędzie, które wykonuje montowanie za Ciebie. Musisz ustalić, co to jest, i wymienić lub naprawić.
Zoredache
W moim przypadku zwykle używam podsystemu KDE (przypuszczalnie jest to Dolphin, nie wiem, który komponent jest odpowiedzialny za właściwe polecenie montowania)
Jörg Haubrichs
1
pisałem o obsłudze automatów z uDev lub HALevt w odpowiedziach na inne pytanie. byłyby to zamienniki podsystemu KDE lub GVFS, ale procedura może dać ci kilka pomysłów, gdzie szukać. brzmi to tak, jakbyś chciał podłączyć się do montowań Dbus (pulpit / przestrzeń użytkownika zamiast poziomu jądra).
quack quixote
Odpowiedzi:
2
Jeśli próbujesz to zrobić dla osób wywołujących polecenie /sbin/mounti /sbin/umount, wszystko, co musisz zrobić, to utworzyć program otoki dla obu programów i zaprogramować co chcesz w tych programach otoki.
Program owijania zastępowany /sbin/mountprogramem owijającym, który wywołuje wartość rzeczywistą /sbin/mount(przemianowaną na coś takiego jak /sbin/mount-reallub /sbin/umount-real). Aby uniemożliwić komukolwiek wywołanie prawdziwego programu, użyj uprawnień grupy, aby go ograniczyć i ustawić bit SGID w programach opakowania.
Jeśli chcesz naprawić mount(2)wywołanie biblioteki, jest to trudny i prawdopodobnie trudny i prawdopodobnie nie zalecany, ponieważ może to powodować problemy z przetwarzaniem systemów wewnętrznych, szczególnie podczas uruchamiania i zamykania.
Nawet w przypadku programu do pakowania prawdopodobnie trzeba by go dokładnie przetestować, aby uniknąć zakłóceń w systemie i wprowadzić odpowiednie zmiany.
Bardzo złe rady i horror utrzymania, jeśli zrobiłoby to wiele programów. Nie zaczynaj w ten sposób.
Lothar
0
Prawdopodobnie możesz użyć haka jądra inotify , chociaż zdarzenie poprzedzające odmontowanie może być bardzo trudne do złapania, ponieważ nie jestem pewien, czy zdarzenie inotify zostało wysłane przed zmontowaniem katalogu.
inotify powie ci, że katalog został utworzony (np. pod /medialub /mnt), ale nie, jeśli system plików został zamontowany w tym katalogu.
Craig McQueen
0
Najprostsze rozwiązanie, które prawdopodobnie będzie działać zawsze jest odpytywania /etc/mtablub /proc/mounts. Po wprowadzeniu zmiany do tego pliku oznacza to, że coś zostało zamontowane lub odmontowane. Następnie musisz sprawdzić tam, czy chcesz mieć urządzenie.
Udev nie jest najlepszym rozwiązaniem, ponieważ informuje tylko, czy urządzenie jest podłączone. Nie mówi, czy urządzenie faktycznie zostało zamontowane, czy nie. To może czasem zadziałać, ale jest to hacking rozwiązanie, które w pewnym momencie się zepsuje i będziesz wyciągać włosy.
„hacky” zwykle wystarcza w większości sytuacji. W prawdziwym świecie działają „hacky” rozwiązania. Jeśli tego nie wiesz, to nie masz doświadczenia w korzystaniu z systemów komputerowych. Zachowaj swoje opinie i trzymaj się faktów. Dzięki.
natxo asenjo
1
@natxoasenjo dlatego są dobrzy i źli deweloperzy.
Pithikos,
wróć, jeśli masz jakieś doświadczenie z prawdziwego świata. To, co proponujesz, to napisanie skryptu / programu do odpytywania plików i uważasz, że to lepszy pomysł niż użycie dobrze przetestowanego interfejsu API jako udev. Kto jest złym twórcą? ;-)
natxo asenjo
a tak przy okazji, pisanie reguł udev nie czyni cię programistą, a co najwyżej sysadminem twojego komputera.
natxo asenjo
1
@natxoasenjo dobrze, jeśli nie widzisz, że programy z „prawdziwego świata” cały czas psują się z powodu hackerskich rozwiązań, to albo jesteś ślepy, albo nie masz „prawdziwego doświadczenia”. Udev działa dobrze, ale nie ma nic wspólnego z montażem i odmontowywaniem. I proszę, przestańcie zamieniać to w wątek na forum o tym, kto jest programistą. Nikomu nie pomaga.
Pithikos,
0
możesz napisać regułę udev, aby to zrobić. Użyłem coś jak to do automatycznego tworzenia kopii zapasowych rzeczy na dysku USB. Zabawne rzeczy.
udev wydaje się nie mieć zdarzenia dla mount / unmount. Uruchamia się po podłączeniu / odłączeniu urządzenia. I twój link nie działa ..
Pithikos
na które odpowiedziano 4 lata temu. Nie jestem odpowiedzialny za tę stronę. Ale możesz rzucić okiem na archive.org ... tak, wciąż tam jest, znalezienie go pozostanie jako ćwiczenie dla czytelnika. Jeśli chodzi o komentarz na temat udev, udev pozwala pisać reguły i wykonywać akcje, gdy są one dopasowane. To wszystko czego potrzebujesz.
natxo asenjo
2
chodzi o to, aby pomóc innym ludziom natknąć się na problem, nie chodzi o punkty ani inne wzmocnienia ego. Teraz, nawet jeśli użytkownik przechodzi wszystkie te problemy, rozwiązanie jest nieaktualne. Więc marnujesz czas ludzi bez korzyści (z wyjątkiem 1-2 głosów, które masz).
Pithikos,
2
@natxoasenjo inni użytkownicy mają rację, i właśnie dlatego zachęcamy do odpowiedzi, aby zacytować lub sparafrazować wystarczającą ilość informacji z połączonych zasobów, aby odpowiedź była samodzielna, jeśli linki zginą. Dobra odpowiedź tutaj pokazałaby przykład tworzenia reguły udev w celu uruchomienia skryptu przed / po zamontowaniu / odmontowaniu.
nhinkle
1
@natxoasenjo Odwiedziłem post, ponieważ Twój komentarz został oznaczony przez niepowiązanego użytkownika jako niegrzeczny lub niegrzeczny. Stack Exchange ma pewne oczekiwania co do odpowiedzi, jedną z nich jest to, że muszą zawierać więcej niż link do zewnętrznego źródła. Twoja odpowiedź nie spełnia tego wymogu. Masz opinię na temat tego, co jest „idealnie w porządku”, co nie odpowiada oczekiwaniom stosu wymiany dla dobrej odpowiedzi. Poświęć trochę czasu na przeczytanie Jak odpowiedzieć .
Odpowiedzi:
Jeśli próbujesz to zrobić dla osób wywołujących polecenie
/sbin/mount
i/sbin/umount
, wszystko, co musisz zrobić, to utworzyć program otoki dla obu programów i zaprogramować co chcesz w tych programach otoki.Program owijania zastępowany
/sbin/mount
programem owijającym, który wywołuje wartość rzeczywistą/sbin/mount
(przemianowaną na coś takiego jak/sbin/mount-real
lub/sbin/umount-real
). Aby uniemożliwić komukolwiek wywołanie prawdziwego programu, użyj uprawnień grupy, aby go ograniczyć i ustawić bit SGID w programach opakowania.Jeśli chcesz naprawić
mount(2)
wywołanie biblioteki, jest to trudny i prawdopodobnie trudny i prawdopodobnie nie zalecany, ponieważ może to powodować problemy z przetwarzaniem systemów wewnętrznych, szczególnie podczas uruchamiania i zamykania.Nawet w przypadku programu do pakowania prawdopodobnie trzeba by go dokładnie przetestować, aby uniknąć zakłóceń w systemie i wprowadzić odpowiednie zmiany.
źródło
Prawdopodobnie możesz użyć haka jądra inotify , chociaż zdarzenie poprzedzające odmontowanie może być bardzo trudne do złapania, ponieważ nie jestem pewien, czy zdarzenie inotify zostało wysłane przed zmontowaniem katalogu.
źródło
/media
lub/mnt
), ale nie, jeśli system plików został zamontowany w tym katalogu.Najprostsze rozwiązanie, które prawdopodobnie będzie działać zawsze jest odpytywania
/etc/mtab
lub/proc/mounts
. Po wprowadzeniu zmiany do tego pliku oznacza to, że coś zostało zamontowane lub odmontowane. Następnie musisz sprawdzić tam, czy chcesz mieć urządzenie.Udev nie jest najlepszym rozwiązaniem, ponieważ informuje tylko, czy urządzenie jest podłączone. Nie mówi, czy urządzenie faktycznie zostało zamontowane, czy nie. To może czasem zadziałać, ale jest to hacking rozwiązanie, które w pewnym momencie się zepsuje i będziesz wyciągać włosy.
źródło
możesz napisać regułę udev, aby to zrobić. Użyłem coś jak to do automatycznego tworzenia kopii zapasowych rzeczy na dysku USB. Zabawne rzeczy.
źródło