[Linux] 리눅스(CentOS7)

[Linux] 리눅스의 다중 명령어 및 사용법

ITsubin 2022. 2. 25. 23:45

<다중 명령어>

리눅스에서 다중 명령어는 하나의 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 225 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 225 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 225 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 225 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 225 23:38 test
[root@localhost back]#