sudo 권한 없이 스크립트에서 USB 드라이브 읽기/쓰기 작업 처리

sudo 권한 없이 스크립트에서 USB 드라이브 읽기/쓰기 작업 처리

저는 때때로 USB 드라이브 장치에 기록해야 하는 애플리케이션을 개발 중입니다. 응용 프로그램은 루트가 아닌 권한으로 실행되며 드라이브에 쓰는 가장 좋은 방법은 드라이브를 연결하자마자 새로 고침 옵션을 사용하여 마운트하는 것입니다. 그러면 이론적으로는 마운트 해제를 수행할 필요가 없습니다. 다음 udev 규칙을 사용하는 작업:

ACTION="add", KERNEL="sd*[0-9]", SUBSYSTEMS="usb", RUN+="/bin/sh mymountscript.sh '%E{DEVNAME}'"

설치 스크립트는 다음과 같은 방식으로 명령을 호출하려고 시도합니다.

mount -o --flush $1 /media/my-user/my-usb-unit

하지만 난 이해해이 설치 오류:

mount: wrong fs type, bad option, bad superblock on /dev/sdb1,
       missing codepage or helper program, or other error

흥미롭게도 udev 규칙을 통해 설치하려고 할 때만 이 오류가 발생합니다. mymountscript.sh해당 지점에서 장치가 올바르게 설치되었다고 스스로 부르는 경우입니다.

이 문제에 대한 해결책 외에도 이 작업을 수행할 때 어떤 위험이 있는지 알고 싶습니다. (파일을 작성한 후 드라이브를 마운트 해제하지 않기 때문에 이해합니다.) 다른 방법으로 간다면 장치 자체를 설치/제거하려면 응용 프로그램 스크립트(사용자를 대신하여 실행됨)가 필요합니다. 이렇게 하려면 장치를 삽입할 때 장치 이름을 어딘가에 저장하고 앱에 장치 설치 권한을 부여해야 합니다.

운영 체제는 Xubuntu 16.04입니다.

답변1

내 해결책은 다음과 같이 관리하는 것입니다.

  1. USB 플러그인 작업을 위한 udev 규칙입니다.

  2. 동시에 스크립트 자체가 드라이브를 마운트/마운트 해제합니다.

  3. USB 제거 작업에 대한 udev 규칙입니다.

USB가 연결됨

장치 이름만 파일에 저장하는 스크립트를 실행합니다. 이 규칙에 다른 스크립트를 추가할 수 있습니다.

ACTION=”add”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh my-usb-inserted.sh”,  RUN+=”/bin/sh myownscript.sh” 

여기서는 myownscript.sh설치 장치가 사용됩니다., 표준 사용자가 이동식 드라이브를 마운트/마운트 해제할 수 있습니다. 다음에 사용하기 전에 각 스크립트에서 유닛을 언로드하는 한 이후에는 다른 스크립트를 호출할 수 있습니다.

USB가 제거됨

여기서 간단한 스크립트는 생성된 파일을 삭제하므로 my-usb-inserted.sh스크립트에 플래시 메모리 셀이 삽입되지 않았음을 알 수 있습니다.

ACTION=”remove”, KERNEL=”sd*[0-9]*”, SUBSYSTEMS=”usb”,  RUN+=”/bin/sh usb-removed.sh” 

이 솔루션은 여러 USB 드라이브를 처리해야 한다는 사실을 고려하지 않습니다.

또한보십시오:

관련 정보