티스토리 뷰

터미널에서 프로그램을 실행시킬 때 가장 큰 장점으로 꼽히는 것중에 하나가 다중 명령어를 사용할 수 있다는 것이다. 이를 잘 사용한다면, 일련의 작업들을 한 줄의 명령어로 작성하여 효율적으로 실행시킬 수 있게 된다.


리눅스에서 여러개의 명령어를 순차적으로 실행시키고자 할 때 구분자를 사용한다. 평소에 세미콜론을 많이 사용했었는데, 구분자의 종류가 여럿 존재하고, 각 구분자마다 특징이 있다는 것을 알았다.


각 구분자들은 현재 실행된 명령어의 성공여부에 따라 다른 동작을 하기도 하며, 앞의 실행결과를 뒤의 명령어의 실행의 데이터로 사용하는 경우도 있다. 아래에서 어떤 종류가 있는지 확인해 보고 각 구분자의 특징들을 짚어보자.




세미콜론(;)



세미콜론으로 각 명령어를 구분하게 되면, 단순하게 하나의 명령어 라인에서 여러개의 명령어를 실행하는 것으로, 명령어의 성공여부는 중요하지 않고, 단순히 앞의 명령어 부터 순차적으로 실행을 한다.


mkdir test; cd test


위의 명령어는 test라는 폴더를 만들고, test라는 폴더로 이동하라는 명령어이다. 앞의 mkdir명령어의 성공여부에 상관없이 뒤의 명령어를 실행하게 된다.






앰퍼샌드(&)



앰퍼센드로 명령어를 구분하게 되면, 앞의 명령어는 백그라운드로 실행하고, 즉시 뒤의 명령어를 실행하게 된다. 따라서 앞의 명령어가 백그라운드에서 실행되므로 뒤의 명령어는 앞쪽 명령어의 실행의 완료 여부에 상관없이 실행된다.


mkdir test & cd test


위의 명령어는 test라는 폴더를 생성하는 작업을 백그라운드로 실행시키고, 바로 test라는 폴더로 이동하는 명령어이다. 하지만 아래와 같이 뒤의 명령어는 실패한다. 그 이유는 test라는 폴더를 생성하는 것을 백그라운드로 실행시켰기 때문에 test가 생성되기도 전에 다음 명령어가 실행되어 버린다. 그래서 백그라운드 작업을 실행할 때는 뒤의 명령어가 앞의 명령어의 결과에 종속되서는 안된다.






버티컬바(|)



버티컬바는 앞의 명령어의 실행결과를 뒤의 명령어의 입력으로 넘기는 기능을 한다. 파이프(Pipe)라고 많이 불리며, grep명령어와 묶어서 많이 사용한다.


ls -al | grep test


위의 명령어는 ls명령어를 통해서 모든 파일들의 목록을 표시하고, grep명령어를 통해서 그 목록들 중에 test라는 문자열이 포함된 라인만 출력해주는 것이다. 이와 같이 뒤의 명령어에 앞의 명령어의 결과를 파이프를 통해 손쉽게 전달할 수 있다.






더블 앰퍼샌드(&&)



더블 앰퍼샌드로 명령어를 연결하게 되면, 앞에 있는 명령어가 실패하면 뒤에 있는 명령어를 실행하지 않는다.


sudo apt-get update && sudo apt-get upgrade -y


apt-get명령어는 패키지의 설치와 삭제 업데이트 등을 관리할 수 있는 명령어이다. 따라서 앞의 명령어는 apt-get update로 패키지 업데이트의 목록을 불러오는 것이고, 뒤의 apt-get upgrade 명령어는 목록을 통하여 업데이트를 실제로 진행하는 것이다. 따라서 앞의 update가 실패할 경우 뒤의 명령어가 실행되면 의미가 없다. 즉 앞의 명령어의 성공여부가 뒤의 명령어를 실행할 때 영향이 크다면 더블 앰퍼샌드를 사용하여 연결해주면 굉장히 유용하다.






더블 버티컬바(||)



더블 버티컬바로 명령어를 연결하게 되면, 앞에 있는 명령어가 성공하면 뒤에 있는 명령어를 실행하지 않는다.


rmdir test || sudo rmdir test


위와 같은 경우 사용할 수 있다. 만약에 앞의 명령어가 실행이 되면 뒤의 명령어는 필요하지 않을 경우이다. 위의 예시는 앞에서는 관리자 권한이 없이 test라는 폴더를 삭제한다. 이 명령어가 실패한다면, test라는 폴더를 sudo를 통해여 관리자 권한으로 삭제시켜 주는 것이다. 따라서 앞의 명령어가 성공하지 못하면 뒤의 명령어가 실행되야 하는 경우에 사용하면 유용하다.






다중 명령어에 의한 CLI의 장점



위의 방식으로 다중 명령어를 실행할 수 있다는 것에서 CLI의 큰 장점이 나타난다. 또한 명령어의 성공여부에 따라서 그 동작을 제어할 수 있다는 점에서도 상당히 효율적이라는 것을 알 수 있다.


우리가 GUI환경에서 폴더를 만들고 그 폴더로 위치를 옮겨서 그 폴더로 어떤 파일을 옮기려고 할 때, 그 하나하나의 동작을 마우스로 하거나 단축키를 입력하여 진행해야 한다. 하지만, CLI환경에서는 다중 명령어를 한 줄로 입력하여, 실행시키면 손쉽게 가능하다.


위의 예시가 별로 효율적이지 않아 보일 수 있지만, 만약에 앞의 작업이 상당히 많은 시간을 잡아먹는다고 하면, GUI환경에서는 뒤의 작업을 앞의 작업이 완료될 때까지 대기한 후에 실행시켜야 한다. 하지만 다중 명령어를 입력하여 실행하면 그 일련의 작업이 얼마나 시간이 걸리든 신경쓰지 않고 다른 작업을 할 수 있다는 장점이 있다.




참고



http://eunguru.tistory.com/89

http://gracefulprograming.tistory.com/92

http://www.leafcats.com/223

https://opentutorials.org/module/2538/15818

http://brownbears.tistory.com/205

'OS > Ubuntu' 카테고리의 다른 글

[Ubuntu]어플리케이션 수동설치(opt & .desktop)  (4) 2018.08.10
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
«   2024/04   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함