잘 작성된 프로그램은 환경이나 설정등을 가정하지 않고 사용자의 옵션(option)과 실행 인수(argument)에 따라 유연하게 다른 동작을 하도록 구현하고 있다.
프로그램에서 사용자의 옵션을 처리를 지원하기 위해 Unix 에는 전통적으로 getopt 라는 라이브러리가 있었고 개발자는 이 라이브러리를 사용하여 사용자의 입력을 처리할 수 있었다.
전통적인 유닉스의 getopt 함수는 사용자의 옵션 입력을 파싱하기 위해 옵션은 대쉬 문자(-)로 시작하고 뒤에 한 개의 옵션 문자가 오며 그 후에 실행 인수를 받을 수 있도록 설계하였다.
예로 프로그램 사용을 위한 도움말을 출력하는 경우 -h 또는 -? 옵션이 입력되면 도움말을 출력하고 종료되게 구현한 경우가 많으며 버전을 확인하기 위한 옵션은 -v(또는 대문자 -V) 를 사용하고 있다.
GNU 재단은 이를 확장하여 GNU getopt 라는 라이브러리를 만들어서 GNU 의 표준 라이브러리(glibc 패키지)에 포함시켰다.
GNU getopt 는 기존의 getopt 처럼 한 개의 - 로 시작하는 짧은 옵션을 처리할 수 있었고(short option 이라고 한다) 두 개의 - 로 시작하고 명령어 전체를 입력하는 긴 옵션(long option) 기능도 추가하였다.
긴 옵션을 지원하는 프로그램의 경우 도움말을 보는 옵션인 -h 또는 --help 두 가지 방식의 옵션을 모두 사용할 수가 있다.
독자들이 리눅스에서 C나 C++ 로 프로그램을 개발하지 않는 이상 GNU getopt 를 알 필요가 없을 수 있지만 설명하는 이유는 많은 리눅스의 커맨드 기반 프로그램들이 GNU getopt 를 사용하여 옵션 처리를 하도록 개발되었기 때문이다.
이 책의 다음 절부터 중요 명령어와 유틸리티를 설명할 것이며 커맨드 기반이므로 프로그램마다 다양한 옵션을 갖고 있으므로 중요한 옵션등을 설명해야 한다. GNU getopt 를 사용하여 구현한 프로그램들은 보통 두 가지 형식의 옵션을 모두 지원하고 있다.
패키지를 관리하는 rpm 프로그램의 경우 다음과 같이 패키지를 설치할 때 사용하는 옵션을 두 가지 방식으로 지정할 수 있다.
rpm -i package.rpm
rpm --install package.rpm
두 가지 모두 동일한 의미이며 특별히 정답이 있는 게 아니므로 취향에 따라서 골라서 사용하면 된다.
이 책에서는 옵션을 설명할 경우 다음과 같이 -i, --install 이렇게 쉼표를 구분자로 하여 두 가지 형식의 옵션을 모두 설명할 예정이므로 익혀 두기 바란다.