GUI방식이 훨씬 더 에너지를 많이 쓰기 때문이다.
CLI 방식은 훨씬 적은 '컴퓨터 파워' 이를테면, CPU라든지 메모리라든지 이런 것들을 (적게) 차지하면서 컴퓨터를 동작시킬 수 있는 방법이다
그래서 서버 컴퓨터라든지 데이터를 분석하는 시스템이라든지 그런 경우에는 graphical하지 않은, 명령어로 컴퓨터를 제어하는 기능만 딱 가지고 있으면 컴퓨터 용량도 적게 차지하고, 컴퓨터의 CPU도 적게 쓰고 메모리도 덜 차지하는
그런 효과를 내기 때문에 GUI 방식을 쓰지 않고 Command Line Interface(CLI)를 쓴다.
사실, 이 주제는 셸이나 셸 스크립팅 이렇게 불리는 여러 뿌리가 깊은 이야기들과 관련이 되어 있지만, 일단은 "아, 이런 게 명령어를 이용했을 때의 강력한 효과구나!" 라고 생각이 되어도 좋다.
GUI 방식은 쉽다는 장점이 있지만 상당히 많은 노동이 필요하다
예를 들면, GUI 시스템에서 어떤 일을 한다면,
어떤 일을 하고,
그 일이 끝날 때까지 기다렸다가,
그 일이 끝나면 다음 일을 하고,
기다리고,
이런 작업을 거쳐야 되기 때문에 뭔가 배우기는 쉽지만 그걸 이용해서 어떤 순차적으로 진행되는 일을 자동화하는 것은 상당히 힘들다
하지만 CLI는
'집에서 설거지를 한 다음에 그 다음에 이불 정리하고 그리고 그 다음에는 보일러를 낮춘 다음에 그리고 집에서 나갈 때 나한테 전화해'라고 부탁을 해 놓으면 이 친구는 그 일을 끝낸 다음에 알려준다. 그러면 중간에 그 일을 잘 하는지 안 하는지 확인할 필요 없이 결과만 받으면 된다.
코드로 살펴보자.
만약, 디렉터리를 생성하고 그 디렉터리로 들어가보자
그럼 mkdir why
라고 하고, cd why
요렇게 명령어를 쓴다
그럼 위 두 개의 명령을 한 번에 실행시켜 본다면
mkdir why;cd why
라고 하면 된다.
이처럼 하나하나의 명령어와 "한 번에 두 개를 할 수 있다"라는 사실은 완전히 다른 의미를 갖는다. 2개가 되면, 3개도 되고, 4개도 되고 무한대로 가능해지기 때문이다.
그래서 우리가 명령어를 통해서 얻을 수 있는 중요한 효과는 어떤 명령(프로그램)을 실행했을 때 그 프로그램이 끝나는 것을 확인한 다음에 그 다음 것을 실행을 하는 것이 아니라, 순차적으로 여러분이 해야 될 일을 쭉 적어서 컴퓨터에게 보내주면 컴퓨터는 순서대로 그 명령들을 실행하고 최종적인 결과만을 알려주기 때문에 중간 과정에서 컴퓨터를 지켜보고 있을 필요가 없다라는 것이다.
바로 이것이 우리가 명령어를 통해서 컴퓨터를 제어했을 때의 굉장히 굉장히 중요한 요소이고 컴퓨터 프로그래밍이라고 하는 것을 배우고 쓰는 이유라고도 할 수 있다.
nano linux.txt
로 파일에 들어간다음,
복사한 내용 붙여넣기 후,
ctrl X > Y를 누르고 enter를 누르면 저장이 된다.
잘 저장되었는지 확인하고 싶을 때는
cat linux.txt
라고 하면
linux.txt라고 하는 파일의 내용을 화면에 출력해 준다.
ls -l
라고 하면 linux.txt라는 파일이 있는 걸 확인할 수 있다.
grep
linux.txt라는 파일 안에서 linux라는 텍스트가 포함되어 있는 행만을 출력하고 싶다면,
grep linux linux.txt
그러면 linux가 포함되어 있는 행만을 화면에 표시해 준다.
grep라는 명령은 어떤 특정한 정보에서 여러분이 원하는 정보가 포함되어 있는 행을 찾아주는 명령어다.
리눅스에서는 파이프가 갖고 있는 "무언가를 어느 한 곳에서 다른 곳으로 전송한다" 라는 그런 특성을 비유적으로 표현해서 파이프라는 기능을 가지고 있다.
즉, 하나의 명령의 실행 결과를 다른 명령의 입력으로 주고
하나의 프로그램의 결과를 다른 프로그램에 입력으로 주고
하나의 프로세스의 출력을, 결과를 다른 프로세스의 입력으로 준다.
이런 기능을 통해서 굉장히 강력한 효과를 만들어 낼 수가 있다
ls --help
의 결과에서, sort라고 하는 텍스트를 추가 검색ls --help에서 나오는 결과 중에서 sort라고 하는 텍스트만을 검색하고 싶다면,
ls --help | grep sort
ls --help가 실행되고 > 그렇게 출력된 결과를 파이프로 연결해서 grep sort라고 하는 명령을 입력으로 준다.
위 결과에서 다시 우리가 file이라고 하는 것을 다시 grep하고 싶으면, 여기서 다시 파이프로 입력하면 된다
ls --help | grep sort | grep file
ps aux | grep apache
정리하면, 파이프를 통해서 프로그램과 프로그램을 파이프로 연결할 수 있고, 앞에 있는 프로그램의 출력을 뒤에 있는 프로그램의 입력으로 파이프를 통해서 연결할수 있다.