GNU+linux/shell

리눅스 멀티커맨드 활용 - 리눅스가 강력한 이유! - 3편

ensuta 2021. 2. 6. 21:16
728x90
반응형

리눅스 명령어를 더 강력하게 사용하고 싶다면 멀티커맨드(Multi Command)를 활용해보자.

리눅스는 한줄에 한 명령어만 쓸 수 있는 것이 아니다. 연속실행되는 명령어를 만들거나 오류가 생기면 넘길 수 있는 등

쉘 스크립트에서나 가능할 것 같은 명령을 매우 자유자재로 수행할 수 있다.

 

리눅스 쉘은 매우 강력하기 때문에 컴퓨터에서의 거의 모든 일 처리를 할 수 있다.

멀티커맨드를 사용하기 위해서는 몇가지 명령어 문법을 알아야한다.

리눅스 자체가 C언어로 작성되어 있다보니 C와 유사한 문법이 굉장히 많다.

 

요약:

엠퍼센트(&&), 세미콜론(;), Pipe 파이프(|), 더블 버티컬바(||) 등등을 알아보자.

 

세미콜론 (;)

C 언어에서 문장 끝 마다 ';' 를 붙이는 것과 같은 맥락이다.

shell 도 일종의 프로그래밍이다.

익숙한 세미콜론(Semi colon)이 바로 명령어를 차례대로 수행할 때 쓰는 특수문자.

$ commands1;commands2;commands3

$ cd /;cd usr;cd bin

$ echo 1;echo 2;echo 3
1
2
3

$ fakecommand 1;echo This is real command
command not found: fakecommand
This is real command

fakecommand 처럼 명령어가 오류가 생기는 경우에도 다음 명령어는 단독으로 실행된다.

 

굉장히 간단하다. 반복작업에 매우 유용하다.

한 줄을 입력해두고 다른작업을 하러갈 때 좋다.

 

더블 앰퍼센드(&&)

더블 앰퍼센드(Double Ampersend)는 AND의 의미를 가진 앰퍼센드(&)를 나란히 붙여놓은 것.

외우기 어렵다면 쿼티에서 Shift + 7 , 프트+ , 시칠 , 십칠 이라고 외우자. 

 

세미콜론(;) 처럼 명령어를 차례대로 수행하지만 앞에서 명령어 실행이 실패할 경우 커맨드가 중단된다.

업데이트나 인과가 분명한 작업에 유용하다. 

$ echo 1 && fakecommand 2 && echo 3
1
command not found: fakecommand

 

보통 업데이트 후 업그레이드하기 위해 많이 사용한다.

(Arch linux 등 롤링 릴리스에서는 충돌 등을 우려해 기본으로는 직접 확인하게 설정되어 있다.)

$ cat /proc/version
Linux version 3.2.0-0.bpo.1-amd64 (Debian 3.2.4-1~bpo60+1) (ben@decadent.org.uk) (gcc version 4.4.5 (Debian 4.4.5-8)

(변조 커널일 경우)
(If it's Modulation kernel)
$ uname -rms

$ apt-get update && upgrade

 

앰퍼센드(&)

이건 백그라운드에서 명령어를 실행시킬 때 사용한다. 더블 앰퍼센드(&&) 와 전혀 다르다.

명령어를 실행시켜 놓고 다른 작업을 하고 싶지만 로그(Log)는 보고 싶을 때 사용한다.

$ ping -c 100 tistory.com &
64 bytes from xxxxxxx.net (121.53.105.234): icmp_seq=1 ttl=114 time=38.2 ms
$ 
64 bytes from xxxxxxx.net (121.53.105.234): icmp_seq=2 ttl=114 time=38.2 ms
$
$ ls
bin  boot  dev  etc  home  lib lost+found media  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var
64 bytes from xxxxxxx.net (121.53.105.234): icmp_seq=3 ttl=114 time=38.2 ms
$
.
.
.

Arch linux 같은 것에서는 환경 설정하는 Shell을 작성할 때 많이 사용한다(like BSD).

엄연히 말하면 Shell이 아니지만 일부분을 구성하고 있는 건 사실이니 편하게 말한다.

 

전꽃비가 실제 사용 중인 Openbox 환경을 구성하는 파일이다.

이런 건 실무에선 잘 사용하지 않는다.

$ cat ~./config/openbox/autostart
# These things are run when an Openbox X Session is started.
# You may place a similar script in $HOME/.config/openbox/autostart
# to run user-specific things.
#

# If you want to use GNOME config tools...
#
#if test -x /usr/lib/openbox/gnome-settings-daemon >/dev/null; then
#  /usr/lib/openbox/gnome-settings-daemon &
#elif which gnome-settings-daemon >/dev/null 2>&1; then
#  gnome-settings-daemon &
#fi

# If you want to use XFCE config tools...
#
#xfce-mcs-manager &
#
#배경설정
nitrogen --restore &

#투명창기능
xcompmgr &

#독기능
cairo-dock -c &

#시계
cairo-clock &

#시스템상태
conky &

#화면보호기
xscreensaver &

   파이프(|)

리눅스 명령에서 가장 유용한 친구가 여기 있다. 바로 파이프(Pipe).

파이프라인은 명령어 실행 후 결과(return)을 뒤의 명령어로 넘겨주는 기능이다.

다른 것과 마찬가지로 파이프라인의 사용횟수 제한은 없다.

 

C 를 프로그래밍해보면 return 이 있는데 이와 유사하다.

이해를 위한 그림.

보통 grep 과 와일드카드를 사용해 폴더나 파일관리할 때 사용한다.

실무에서는 슈퍼유저에서 /etc/passwd 를 관리할 때 많이 쓴다고 한다.(실무에 관한 부분은 잘 모른다)

 

ls | more

cat | more 도 가능

$ ls -l /etc | more 
total 1352 
-rw-r--r-- 1 root root 16 Jan 5 21:xx adjtime 
-rw-r--r-- 1 root root 1518 Jun 7 20xx aliases 
-rw-r--r-- 1 root root 12288 Jan 5 21:xx aliases.db 
drwxr-xr-x 2 root root 4096 Apr 17 02:xx alternatives 
-rw------- 1 root root 541 Aug 13 20xx anacrontab 
-rw-r--r-- 1 root root 55 Mar 1 20xx asound.conf 
drwxr-xr-x 2 root root 4096 Jan 15 21:xx bash_completion.d 
-rw-r--r-- 1 root root 2853 Nov 5 20xx bashrc 
drwxr-xr-x 2 root root 4096 Mar 17 13:27 binfmts.d 
-rw-r--r-- 1 root root 38 Aug 30 20xx centos-release 
-rw-r--r-- 1 root root 51 Aug 30 20xx centos-release-upstream 
drwxr-xr-x 2 root root 4096 Aug 24 20xx chkconfigs.d 
-rw-r--r-- 1 root root 1108 Jan 31 20xx chrony.conf 
-rw-r----- 1 root chrony 481 Jan 31 20xx chrony.keys 
drwxr-xr-x 2 root root 4096 Jan 5 21:11 cron.d 
--More

 

cat | grep

$ cat /etc/profile | grep test
if test -d /etc/profile.d/; then
		test -r "$profile" && . "$profile"
if test "$BASH" &&\
   test "$PS1" &&\
   test -z "$POSIXLY_CORRECT" &&\
   test "${0#-}" != sh &&\
   test -r /etc/bash.bashrc

ps | grep 현재 실행 중인 프로세스 보여주는 명령어다 . 순수 리눅스 커널에서 자주 쓰일 수 있다.

$ ps -ef | grep bash

파이프라인은 활용법이 정말 무긍무진하므로 꼭 알아두자.

 

더블 버티컬바(||)

더블 버티컬바 (Double Vertical Bar) 또는 더블 버티컬 라인 (Double Vertical Line)  

앞의 명령이 실행 실패 시 동작하도록 하는 것이다. 더블 앰버센드(&&)의 반대라고 보면 된다. 

$ ls -a
. .. test1.txt test2.txt test3.txt  
$ rm test1.txt || file test3.txt && echo What Type is it?  
$ rm test1.txt || file tests3.txt && echo What Type is it?
rm: cannot remove 'test1.txt': No such a file or directory
test3.txt: UTF-8 Unicode text
What Type is it?
$ ls -a
. .. test2.txt test3.txt

 

이스케이프(\)

이스케이프(Escape). 또는 역 슬래시 인데

다음줄에 쓰기를 할 때 활용한다.

 

이스케이프는 쉘에서 인식하지 않는다.

다음 줄에서 이스케이가 끊기면 다음줄에 쓰기를 관두고 실행한다.

$ echo This is \ \ \ \JKB\ \ \ \tistory blog.
This is    JKB   tistory blog.

$ echo !\@\#\$\%
!@#$%

$ echo This \
is \
JKB \
blog.\
This is JKB blog.

부가적 요소들

앞에서는 고급 리눅스 명령을 만들고 사용하기 위해서 꼭 필요한 친구들을 보았다.

여기 나오는 것들은 잘 사용하지 않지만 알아두면 좋은 것들이다.

 

달러퀘스트($?)

달러퀘스튼마크(Dollar Question mark)라고도 한다.달러와 물음표가 붙어서 오는 친구이다.  명령어에 오류가 있는지 없는지 검사할 때 쓰는 것이다.

주의할 점은 오류가 있으면 1, 오류가 없으면 0 이다.  전기신호를 생각하면 쉽다.

$ echo $?
0
$ ls -a 
. .. abc abc2 abc3
$ rm *
$ echo $?
0
$ rm *
rm: cannot remove '*': No such a file or directory
$ echo $?
1

파운드(#)

파운드 사인(Pound Sign)이다. 즉,  해쉬(Hash)이다.

그냥 주석 기능이다. 프로그래밍에서도 많이볼 수 있는 해쉬(#) 주석.

 

명령어 가장 뒤에 쓸 수 있다.

해쉬 이하는 모두 Shell 에서 무시한다.

 

정말 간단하다.

하지만 쓸데가 많다.

$ echo test # str: 'test' 를 출력
test

$ cd /usr # 현재 위치를 '/usr' directory 로 이동
$

$ cd / && ls -a # 현재 위치를 '/' directory 로 이동 후 목록 나열
bin  boot  dev  etc  home  lib  lib64  lost+found  mnt  opt  proc  root  run  sbin  srv  sys  tmp  usr  var

 

그룹화( { } )

 

명령을 묶을 수도 있다.

$ mkdir test3 && { cd test3; touch abc; echo 'success!!' } || echo 'There is no dir';

서브 컨텍스트에서 실행하려면 () 를 대신 입력하라.

 

이런 고급 명령어들을 알아두면 일의 능률도 올라가고 Shell 스크립트를 작성할 때 굉장히 큰 도움이 된다.

 

반응형