새로운 USB 저장 장치가 감지 될 때 쉘 스크립트를 실행하는 방법은 무엇입니까?


17

USB 대용량 저장 장치가 연결되면 (로그 파일이 'OKdump'인 경우) 로그를 덤프하고 로그를 기록하는 스크립트를 원합니다. 스크린 샷을 찍어 같은 드라이브에 저장하십시오.

답변:


13

Udev를 사용하십시오. Udev는 장치 관리자 데몬입니다. 무엇보다도 장치의 이름을 지정해야합니다. rules 디렉토리에 특정 구문의 파일을 넣어 udev-rules를 정의 할 수 있습니다. 규칙은 많은 작업을 수행 할 수 있습니다. 특히 특정 장치가 연결되면 스크립트를 실행할 수 있습니다.

문제를 해결하는 방법 :

먼저 장치에서 정보를 수집해야합니다. 연결했다고 가정하고 이름 아래에 있음을 알 수 /dev/sdb1있습니다. 그렇다면 다음을 수행하십시오.

udevadm info -a -p $(udevadm info -q path -n /dev/sdb1)

이 명령은 장치에 대한 정보를 출력합니다. 다소 길다. 장치를 고유하게 식별하는 것을 찾아야합니다. 직렬과 같 ATTRS{serial}=="UA04FLGC"거나 ATTRS{idVendor}and와 같은 다른 속성의 조합 일 수 있습니다 ATTRS{idProduct}. 대부분의 이름은 자명하다. 합리적으로 보이는 몇 가지 중 하나 또는 그 이상의 조합을 선택하십시오. 효과가 없으면 다른 것을 시도하십시오.

고유 식별자를 찾으면 /etc/udev/rules.d두 자리 숫자로 시작하고로 끝나는 파일을 만듭니다 .rules. 두 자리 숫자는 이러한 .rules 파일을 처리하는 순서를 지정합니다 70-usb-log-custom.rules. 이 규칙 파일의 구문은 매우 복잡 할 수 있습니다. 관심이 있다면 google udev. 새로 작성된 파일을 열고 다음과 같이 편집하십시오.

# /etc/udev/rules.d/70-usb-log-custom.rules

KERNEL=="sd?1", ATTRS{serial}=="UA04FLGC", ACTION=="add", SYMLINK+="cusb1", RUN+="/home/confus/bin/usb-encrypt.sh add %k"
ENV{ID_FS_USAGE}=="crypto", ACTION=="remove", RUN+="/home/confus/bin/usb-encrypt.sh remove %k"
SUBSYSTEM=="usb", SYSFS{idVendor}=="1781", SYSFS{idProduct}=="0c9f", GROUP="users", MODE="0666"

이것은 내가 사용중인 실제 udev 파일입니다. 여기에는 세 가지 규칙이 있습니다. 모든 라인은 자체 규칙입니다. 첫 번째 줄은 스크립트를 실행하여 암호화 된 디스크가 연결될 때마다 해독 된 장치를 만듭니다. 두 번째 줄은 암호 해독 된 장치가 제거 된 경우 다른 옵션으로 동일한 스크립트를 호출합니다. 세 번째 줄은 다른 관련 장치에 대한 권한을 설정합니다.

대부분 첫 번째 줄만 필요할 것입니다. 나머지를 삭제하고 올바른 시리얼 (또는 장치를 식별하기 위해 선택한 파라미터의 조합)을 삽입하십시오.

내 파일 설명 :

KERNEL=="sd?1"이 규칙에서 찾고있는 기기의 이름은 /dev/sda1, /dev/sdc1또는 이와 유사한 이름으로 표시됩니다. 물음표는 모든 문자에 대한 와일드 카드입니다. ATTRS{serial}=="UA04FLGC"여기서 고유 식별자입니다. 다른 장치를 위해 나는 (세 번째 줄) 나는 일련 번호 만의 조합을 사용하지 않는 대해 얘기했다 SYSFS{idVendor}=="1781"SYSFS{idProduct}=="0c9f"이를 식별 할 수 있습니다.

ACTION=="add"장치를 추가 할 때만 작동하도록 규칙에 지시합니다. 제거 될 때가 아닙니다.

SYMLINK+="cusb1"디스크에 대한 심볼릭 링크를 생성하여 아래에서 찾을 수 있습니다 /dev/cusb1.

RUN+="/home/confus/bin/usb-encrypt.sh add %k" 스크립트를 실행하고 'add'및 '% k'(장치 이름)를 전달합니다.

udev 규칙에 대한 훌륭한 자습서가 있기 때문에 더 자세히 설명하지 않습니다. 여기서 읽은 내용은 쳐다보기에 충분해야합니다.


훌륭한 답변이지만 로깅을 수행하는 스크립트를 원합니다
Amith KK

4
그렇다면 당신은 그것을 쓰거나 정확히 당신이 원하는 것이 무엇인지에 대해 더 구체적이어야 할 것입니다. 예를 들어 스크린 샷에서 어떤 내용을 알 수 없습니까? 또한 '시스템 로그를 덤프합니다'어디로? '이상한 것'도 다소 넓은 용어입니다. 우리는 개인 군대가 아닙니다-bash-scripting에 대해 한두 가지를 알고 있다면 이제 스크립트를 직접 작성하는 데 필요한 모든 도구가 있습니다.
con-f-use

: D 죄송합니다 @ con-f-use
Amith KK
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.