String substitutions (String 치환 / 변경)
여러분이 잠재적으로 유사한 많은 디바이스들을 다루는 규칙을 작성할 때, udev의 문자열 치환 연산자들은 매우 유용합니다. 여러분들은 단순히 규칙을 만들어 어떤 assignment에 이러한 연산자들을 포함할 수 있으며 udev는 그 assignment가 실행될 때 그것들을 판단(평가)할 것입니다(?).
가장 흔하게 사용되는 연산자들은 ‘%k’ 와 ‘%n’ 입니다. 먼저 %k는 디바이스의 커널 이름을 판단합니다. 예를 들어 /dev/sda3에 나타나듯 “sda3”를 의미합니다. 그리고 %n은 디바이스의 커널 넘버를 판단합니다. 이것은 저장 장치의 파티션 넘버 같은 것인데요, 예를 들어 /dev/sda3의 “3”을 의미하죠.
또한 udev는 추가적인 기능의 치환 연산자들을 제공하는데요, 이 문서의 남은 부분을 읽은 후 udev man 페이지를 참조하세요.
위에서 말한 %k와 %n 연산자를 대체할 수 있는 또 다른 구문이 있습니다. 바로 $kernel 과 $number인데요, 그럼 여기서 ‘$’와 ‘%’는 연산자이기에 문자 자체로 사용하지 못한다는 건가요? 이런 이유로 여러분이 규칙 내에서 문자 그대로 ‘$’를 사용하려면 ‘$$’를 사용해야 하며 ‘%’를 사용하려면 ‘%%’를 사용하면 됩니다. 즉, 규칙 작성에 필요한 이스케이프 시퀀스들입니다.
string 치환의 개념을 설명하기 위해 아래 예제를 살펴보겠습니다.
KERNEL=="mice", NAME="input/%k" |
첫 번째 규칙은 mice 디바이스 노드(기본적으로 /dev/mice 인)를 /dev/input 디렉토리에 표시되게 합니다. 두 번째 규칙은 loop0란 이름의 디바이스 노드를 /dev/loop/0에 만들고 추가적으로 /dev/loop0에 심볼릭 링크 또한 만들어줍니다.
위 규칙들을 보면 의심스러운 부분이 있습니다. string 치환의 개념을 설명하기 위한 예제인데 실제 치환 연산자들을 사용하지 않고 모든 규칙을 작성할 수 있는 예제들 입니다.
진정한 치환 연산자의 힘은 다음 섹션에서 보여드리겠습니다.