우리는 윈도우, macOS 같은 운영체제에서 웹 브라우저, 워드 프로세서, 스프레드시트, 게임 등의 애플리케이션을 실행하며 컴퓨터를 사용한다. 대부분의 애플리케이션은 사용자가 필요로 하는 여러 가지 일련의 기능을 이미 갖고 있으므로, 그 자체로 자기 완결적이며 다른 애플리케이션에 의존할 필요가 없다. 가끔 애플리케이션을 오가며 내용을 복사하고 붙여넣는 경우가 있지만, 그 외에는 애플리케이션의 사용이 대체로 독립적이다.
그러나 리눅스 명령행은 그렇지 않다. 리눅스에서는 수십 내지 수백 가지 기능을 갖춘 커다란 애플리케이션 대신, 단 몇 가지 기능만을 가진 작은 크기의 여러 가지 명령을 사용한다. 예를 들면 cat 명령은 파일의 내용을 화면에 출력하는 명령이고 ls는 디렉터리 속 파일의 목록을 출력하는 명령이며, mv는 파일명을 변경하는 명령이다. 각 명령은 간단하지만 확실한 목적을 갖는다.
만약 조금 더 복잡한 작업이 필요하다면 어떻게 해야 할까? 그렇더라도 전혀 문제가 되지 않는다. 리눅스에서는 명령을 결합하는 방식으로 여러 가지 기능을 조합해 우리가 원하는 목적을 달성할 수 있다. 그러나 이런 방식을 잘 사용하려면 컴퓨터 사용에 대한 마인드를 밑바닥부터 바꿔야 한다. 원하는 일을 하기 위해 가장 먼저 생각해야 하는 것이 ‘어떤 애플리케이션을 사용해야 하는가’가 아니라 ‘어떤 명령을 조합해야 하는가’가 돼야 한다.