<다중 명령어>
리눅스에서 다중 명령어는 하나의 command line에 여러 명령어들을 한 번에 실행할 수 있게 해주는 명령어입니다.
다중 명령어 | 설명 |
세미콜론 [ ; ] | 명령의 끝을 알려주는 명령어 하나의 커맨드라인(한 줄)에 여러 명령어를 사용할 수 있다. 명령어 연결 시 명령의 성공 여부에 상관없이 순차적으로 실행된다. |
엠퍼센트 [ & ] | 명령어 연결 시 앞의 명령은 백그라운드로 실행하고, 백그라운드로 앞의 명령을 실행하는 동시에 뒤의 명령어를 실행한다. 명령의 성공 여부에 상관 없이 실행된다. (단, 뒤의 명령이 앞 명령의 결과에 종속되면 안된다. 앞의 명령을 백그라운드로 실행하는 “동시”에 뒤의 명령을 실행하기 때문이다.) |
더블 엠퍼센트 [ && ] | 명령어 연결 시 앞의 명령의 성공 여부에 따라 뒤의 명령의 실행 여부를 결정한다. 앞의 명령어가 성공할 경우 뒤의 명령을 실행한다. |
버티컬바(파이프) [ | ] | 명령어 연결 시 앞의 명령의 실행 결과값이 뒤 명령의 입력이 된다. |
더블 버티컬바 [ || ] | 명령어 연결 시 앞의 명령의 성공 여부에 따라 뒤의 명령의 실행 여부를 결정한다. 더블 엠퍼센트와는 반대로 앞의 명령이 실패할 시 뒤의 명령을 실행한다. |
각각 예시를 보여드리겠습니다.
세미콜론 [ ; ]
ls 명령어와 cat 1.txt 명령어의 결과입니다.
세미콜론 미사용 | [root@localhost back]# ls 1.txt [root@localhost back]# cat 1.txt Hello World! [root@localhost back]# |
세미콜론 사용 | [root@localhost back]# ls; cat 1.txt 1.txt Hello World! |
그렇다면, 뒤의 명령이 앞의 명령의 결과에 종속되는 경우에는 어떻게 될까요?
ls –l 명령어의 사용 결과로 /back 디렉터리에는 아무런 파일 또는 디렉터리가 없음을 확인해줍니다.
[root@localhost back]# ls -l 합계 0 [root@localhost back]# |
mkdir 명령어로 /back 디렉터리 안에 test 디렉터리를 만들고, cd 명령어로 test 디렉터리로 위치 변경을 하겠습니다.
[root@localhost back]# mkdir /back/test; cd /back/test [root@localhost test]# |
test 디렉터리로 이동한 것을 확인할 수 있습니다. 하지만 반대의 경우,
[root@localhost back]# cd /back/test; mkdir /back/test bash: cd: /back/test: 그런 파일이나 디렉터리가 없습니다 [root@localhost back]# ls -l 합계 4 drwxr-xr-x. 2 root root 4096 2월 25 23:06 test [root@localhost back]# |
앞의 cd 명령어는 오류가 나지만 실행이 되었으며, test 디렉터리는 생성되었음을 알 수 있습니다.
세미콜론은 명령의 성공 여부에 관계없이 순차적으로 실행되기 때문에 test 디렉터리가 생성되기 전 cd 명령어가 test 디렉터리로 이동하려고 하기 때문에 cd 명령어가 실패한 후, test 디렉터리가 생성되기 때문입니다.
엠퍼센트 [ & ]
엠퍼센트의 경우에도 세미콜론과 마찬가지로 cd 명령어가 실패한 후 test 디렉터리를 생성합니다.
[root@localhost back]# cd /back/test & mkdir /back/test [1] 2636 bash: cd: /back/test: 그런 파일이나 디렉터리가 없습니다 [1]+ Exit 1 cd /back/test [root@localhost back]# ls -l 합계 4 drwxr-xr-x. 2 root root 4096 2월 25 23:09 test [root@localhost back]# |
하지만 세미콜론과 다른 점은 mkdir 명령어가 앞에 위치함에도 test 디렉터리로 위치 변경이 불가합니다.
엠퍼센트는 백그라운드로 앞의 명령을 실행함과 “동시에” 뒤의 명령어를 실행하기 때문입니다.
즉, cd 명령어를 실행하는 시점에는 test 디렉터리가 존재하지 않는 것입니다.
[root@localhost back]# mkdir /back/test & cd /back/test [1] 2670 bash: cd: /back/test: 그런 파일이나 디렉터리가 없습니다 [root@localhost back]# ls -l 합계 4 drwxr-xr-x. 2 root root 4096 2월 25 23:12 test [1]+ Done mkdir /back/test [root@localhost back]# |
더블 엠퍼센트 [ && ]
더블 엠퍼센트의 경우 cd 명령어는 실행되었지만 test 디렉터리는 생성되지 않은 것을 확인할 수 있습니다.
더블 엠퍼센트는 앞에 있는 명령이 성공해야만 뒤의 명령을 실행하기 때문입니다.
[root@localhost back]# cd /back/test && mkdir /back/test bash: cd: /back/test: 그런 파일이나 디렉터리가 없습니다 [root@localhost back]# ls -l 합계 0 |
아래처럼 mkdir 명령이 성공적으로 실행되면 이후 cd 명령을 수행하는 것을 확인할 수 있습니다.
[root@localhost back]# mkdir /back/test && cd /back/test [root@localhost test]# |
버티컬바(파이프) [ | ]
cat 명령어로 1.txt의 내용을 먼저 확인해줍니다.
1.txt 파일의 내용에서 d가 포함되어있는 행을 출력합니다.
[root@localhost back]# cat 1.txt Hello World! [root@localhost back]# cat 1.txt | grep -n d 2:World! [root@localhost back]# |
cat 명령의 출력을 grep 명령의 입력으로 받아오는 것을 알 수 있습니다.
만약 1.txt의 내용이 존재하지 않았다면 grep의 입력이 아예 없는 것이기에 아래와 같은 결과가 나오게 됩니다.
[root@localhost back]# cat 1.txt [root@localhost back]# cat 1.txt | grep -n d [root@localhost back]# |
더블 버티컬바 [ || ]
더블 버티컬바의 경우 더블 엠퍼센트와는 다르게 앞의 cd 명령어가 실패했기 때문에 뒤의 mkdir 명령어를 실행한 것을 확인할 수 있습니다.
[root@localhost back]# cd /back/test || mkdir /back/test bash: cd: /back/test: 그런 파일이나 디렉터리가 없습니다 [root@localhost back]# ls -l 합계 4 drwxr-xr-x. 2 root root 4096 2월 25 23:36 test [root@localhost back]# |
아래의 경우는 먼저 test 디렉터리를 만드는데 성공했기 때문에 뒤의 cd 명령어는 실행되지 않음을 알 수 있습니다.
[root@localhost back]# mkdir /back/test || cd /back/test [root@localhost back]# ls -l 합계 4 drwxr-xr-x. 2 root root 4096 2월 25 23:38 test [root@localhost back]# |
'[Linux] 리눅스(CentOS7)' 카테고리의 다른 글
[Linux] 리눅스 vi 편집기 사용법 (2) | 2022.02.27 |
---|---|
[Linux] 리눅스의 특수문자 종류와 사용법 (0) | 2022.02.26 |
[Linux] 리눅스 기본 사용법 및 명령어_3 (0) | 2022.02.24 |
[Linux] 리눅스 기본 사용법 및 명령어_2 (0) | 2022.02.23 |
[Linux] 리눅스 기본 사용법 및 명령어 (0) | 2022.02.22 |