Jak uzyskać dostęp do dysku usb flash z terminala?

Oprócz użycia standardowej komendy mount (która wymaga roota) możesz montować dyski używając udisks i dbus ze swoim standardowym użytkownikiem.

Aby to zrobić, warto (ale nie trzeba) najpierw wiedzieć kilka rzeczy o dysku:

  1. Jakie to urządzenie (tj./dev/sdb1)
  2. jakiego systemu plików używa.

Poznając te informacje można użyć prostego polecenia do zamontowania dysku z wiersza poleceń.

gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemMount "<filesystem>" 

To wywołanie powinno wywołać echo ścieżki, na której jest zamontowany, jeśli zamontowanie się powiedzie.

Aby odmontować dyski zamontowane w ten sposób możesz uruchomić:

gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/<device> --method org.freedesktop.UDisks.Device.FilesystemUnmount 

N.B. <device> jest po prostu końcem ścieżki do niego. Więc na przykład jeśli to co chcesz zamontować jest na /dev/sdb2 wtedy umieścisz sdb2 w miejsce <device>.

Jeśli nie wiesz jakie to urządzenie lub jakiego systemu plików używa nie obawiaj się. Możesz łatwo wydrukować wszystkie te informacje za pomocą tego małego polecenia:

gdbus introspect --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices --recurse --only-properties | grep -E "(readonly .+ (IdLabel|IdType|Device(IsMounted|IsDrive|File) ).*|\}|.*\{)"

Wyświetli to coś takiego:

node /org/freedesktop/UDisks/devices { node /org/freedesktop/UDisks/devices/sda { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = ''; readonly s IdUsage = ''; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda'; }; }; node /org/freedesktop/UDisks/devices/sda1 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = 'SYSTEM'; readonly s IdType = 'ntfs'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda1'; }; }; node /org/freedesktop/UDisks/devices/sda2 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = 'Windows7'; readonly s IdType = 'ntfs'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = true; readonly s DeviceFile = '/dev/sda2'; }; }; node /org/freedesktop/UDisks/devices/sda3 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = 'Recovery'; readonly s IdType = 'ntfs'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda3'; }; }; node /org/freedesktop/UDisks/devices/sda4 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = ''; readonly s IdUsage = ''; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda4'; }; }; node /org/freedesktop/UDisks/devices/sda5 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = 'ext4'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = true; readonly s DeviceFile = '/dev/sda5'; }; }; node /org/freedesktop/UDisks/devices/sda6 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = 'swap'; readonly s IdUsage = 'other'; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sda6'; }; }; node /org/freedesktop/UDisks/devices/sda7 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = 'ext4'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = true; readonly s DeviceFile = '/dev/sda7'; }; }; node /org/freedesktop/UDisks/devices/sdb { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = ''; readonly s IdUsage = ''; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sdb'; }; }; node /org/freedesktop/UDisks/devices/sdb1 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = 'USB DRIVE'; readonly s IdType = 'vfat'; readonly s IdUsage = 'filesystem'; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sdb1'; }; }; node /org/freedesktop/UDisks/devices/sr0 { interface org.freedesktop.UDisks.Device { readonly s IdLabel = ''; readonly s IdType = ''; readonly s IdUsage = ''; readonly b DeviceIsMounted = false; readonly s DeviceFile = '/dev/sr0'; }; };};

Urządzenia, które mają IdUsage = 'filesystem' mogą być montowane za pomocą powyższego polecenia.

To oznacza, że na przykład, jeśli chciałbym zamontować urządzenie 'USB DRIVE', wykonałbym polecenie

gdbus call --system --dest org.freedesktop.UDisks --object-path /org/freedesktop/UDisks/devices/sdb1 --method org.freedesktop.UDisks.Device.FilesystemMount "vfat" 

Te wszystkie polecenia działają przy użyciu systemu przesyłania wiadomości dbus, w ten sam sposób, w jaki Nautilus i inne menedżery plików automatycznie montują rzeczy. W tych poleceniach wysyłamy różnym obiektom (np. /org/freedesktop/... wiadomości z prośbą o zamontowanie i odmontowanie pewnych urządzeń. Mogą lub nie mogą tego zrobić w zależności od uprawnień, które zostały podane w PolicyKit.

Używając podobnych poleceń można kontrolować prawie każdy aspekt swojego doświadczenia w Ubuntu i symulować większość programów systemowych i funkcji (tj. wyłączanie, zmiana głośności, itp.).

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *