본문 바로가기
[Linux]

[linux] [따배셸] Bash shell과 Rules 1

by SAMSUNG Metaverse-Cloud 2023. 1. 11.
728x90

 

 

Metacharacters란 무엇인가?

shell에서 특별히 의미를 정해놓은 문자들을 의미한다.

ex: ? () $ ... * {} [] 등등..

 

Metacharacters에 대해서 한번 알아보자. 

 

먼저 몇가지 파일을 생성 해 주었다. 

 

 

 

그 후 echo *를 입력한다. 아스테리스크는 모든, 전체 라는 의미를 가지고 있다. 

 

 

 

입력을 하니 위에서 생성했던 모든 파일들을 출력하는 것을 확인할 수 있다. 

 

 

 

그렇다면 echo a*는 무슨 의미일까? a로 시작하는 파일을 모두 보여주는 의미를 가지고 있다. 

 

 

 

그 다음은 ?을 써보자. ?은 하나당 Any single Character라는 의미이다. 즉 4개를 입력했으므로 4개의 글자를 가지는 모든 폴더에 대해서 출력을 하게 된다. 

 

 

 

 

Quoting Rule이란 무엇인가?

메타 문자의 의미를 제거하고 단순한 문자로 변경하는 것을 의미한다.  Quoting Rule을 지원하는 문자는 총 3가지가 있다. 

Backslash (\)

\ 바로 뒤의 메타 문자는 특별한 의미를 제거한다는 의미이다.

 

Double Quotes("")

"" 내의 모든 메타문자의 의미를 제거한다 단 $,``은 제외한다.

 

Single Quotes(")

'' 내의 모든 메타문자의 의미를 제거하는 것을 의미한다. 

 

 

그렇다면 이 세가지를 실습해보자 

 

먼저 우리는 touch라는 명령어를 통해 ***라는 이름을 가진 파일을 만들고 싶다. 가능할까? 아스테리스크는 메타캐릭터이다. 만약 위처럼 명령을 입력하면 현재 디렉토리에 있는 전체 파일을 의미해버린다. 

 

 

즉 우리가 ***의 이름을 가진 파일을 만드려면 백슬래시를 이용해서 생성할 수 있다. 생성한 후 ls 명령어를 통해서 ***라는 이름의 파일이 생긴 것을 확인할 수 있다. 

 

 

두번째 역시 my *name이라는 파일을 만들고 싶다면 메타캐릭터 앞에 백슬래시를 이용하면 된다. 

 

 

백슬레시 뿐만 아니라 더블쿼츠나 싱글쿼츠를 사용해서 "" 안에 있는 아스테리스크 두개를 메타캐릭터가 아닌 문자로 사용하여 파일 이름으로 만들 수 있다. 

 

 

 

 

 

Nesting Commands란 무엇인가?

Nesting Commands는 Quoting Rule과 많이 혼합해서 사용한다. 이 규칙은 Command 안에 다른 Command를 집어 넣을 때 사용한다. 

 

바로 Nesting Commands를 사용해 보자.

 

 

 

먼저 우리는 오늘 날짜에 대한 출력을 진행한다. 

우리는 그 뒤에 date라는 명령어를 사용해서 현재의 시간을 출력시키려고 한다. 

 

 

 

그러면 이렇게 입력한 후 명령을 입력하면 된다. 이렇게 된다면 $() 안에 있는 문자는 리눅스의 명령어 역할을 하게 되면서 오늘 날짜에 대해 출력을 할 수 있게 된다. 

 

 

 

$ 사인 뿐만 아니라 위에서 우리가 봤던 어퍼스트로피를 통해서 더블쿼츠를 이용할 수 있다. 이 역시 위와 동일한 결과를 출력하는 것을 확인할 수 있다. 

 

 

이러한 Nesting Commans를 이렇게 응용할 수 있다. date 명령어에 %Y%m%d를 붙이면 오늘 날짜를 출력한다. 
이를 응용해서 touch 명령어로 report - 오늘날짜와 파일의 버전을 입력할 수 있는 파일을 생성할 수 있다. 

즉 Nesting Commands를 이용해서 쉽게 파일의 히스토리를 알 수 있게 되는 것이다. 

 

 

그 다음 우리는 Quoting rule 과 적용을 할 수 있다. 위 두 명령어를 보면 어떠한 차이점이 있는가?

더블 쿼츠인지 싱글쿼츠인에 따라 Nesting Commands가 적용되는지 적용 안되는지 직접 확인할 수 있었다. 더블쿼츠의 경우에만 "" 안 $ 혹은 `로 Nesting Commands가 가능한 것을 확인할 수 있다. 

 

 

 

 

Alias란 무엇인가?

Shell의 명령에 새로운 이름을 부여 (복잡한 명령에 간단한 별명 부여)
명령들을 조합하여 새로운 이름의 명령을 생성

 

Alias 관리 명령

alias 등록: alias name='command'
alias 확인: alias or alias name
alias 삭제: unalias name

 

그렇다면 Alias를 실제 사용해보자.

 

 alias라는 명령어를 입력하면 현재 등록된 모든 alias가 출력된다

우리가 egrep이라는 명령어를 입력하면 'egrep --color=auto'라는 명령을 실행하게 된다. 
우리가 자주 쓰는 ls 역시 alias인 것을 확인할 수 있다. 

 

 

 

그 다음 적용을 해보자 우리는 alias c=clear라고 등록을 했다.  그 이후 c라고 입력한 후 엔터를 누른다.

 

 

 

그럼 화면이 깔끔하게 정리된 것을 확인할 수 있다.

 

 

 

이렇듯 alias를 통해서 다양한 단축키를 만들어 놓을 수 있다.

다음 예로는 remove 역할을 하는 rm 명령어이다. 우리는 rm 명령어를 쓴다면 지울것인지 묻지도 않고 삭제를 감행한다. 정말 삭제할 것인지 물어보려면 -i 옵션을 사용해야 한다. 

 

 

우리는 alias를 통해서 rm='rm -i'라는 별명을 등록시킨다. 

그 이후 rm 명령어를 사용하면 사용할 때 마다 지울것인지에 대해 묻게 된다. 

 

 

마지막으로 unalias 명령어를 통해서 우리가 위에 만들어놨던 clear의 alias를 삭제해 주었다. 삭제한 후 c를 입력하자 c의 command를 찾을 수 없다고 나온다. 

 

 

Shell의 Prompt란?

PS1 변수를 이용해 shell의 기본 프롬프트 모양을 설정할 수 있다.
Bash shell에서만 Prompt 모양에 적용 가능한 특수 문자가 존재한다.

 

이 화면이 prompt 화면이다.

우리는 ubuntu 라는 아이디를 쓰고있고 @ 뒤는 우리 리눅스의 호스트 이름을 나타낸다. ~은 우리가 현재 작업중인 디렉토리를 의미한다.  

 

 

우리가 만약 이런식으로 여러 디렉토리로 들어간다고 가정하면 프롬프트가 너무 길어질 것이다. 그렇게 된다면 우리가 명령을 칠 수 있는 공간이 줄어들고 가독성도 좋지 않다. 

 

 

 

우리는 PS1이라는 환경변수를 통해 출력해 보았다. 이를 통해서 우리 프롬프트의 내용을 확인할 수 있다. 

 

 

우리는 PS1을 수정을 해준다. \u는 유저아이디, \h는 hostname \W은 가장 하위 디렉토리를 의미한다. 

 

 

 

즉 위의 방식대로 입력한 후 여러 디렉토리를 들어가면 항상 가장 하위 디렉토리 즉 작업을 진행하는 디렉토리를 확인할 수 있다. 

 

 

다른 예시로는 PS1을 변경시킴으로써 현재 내가 사용하는게 AWS EC2인지, 어떤 리눅스 계열을 사용하는지 등 원하는 정보에 대해서 기입할 수 있다. 

 

 

 

하지만 PS1이나 Alias는 현재 셸에서만 적용이 되기 때문에 위처럼 로그아웃 이후 다시 로그인을 하게 된다면 PS1 또한 처음으로 돌아가고 Alias 또한 작동을 안하는 것을 알 수 있다. 

 

 

 

그러므로 자주 쓰는 Alias, PS1의 경우 ls -a 의 .bashrc를 통해서 지정해준다. vi 명령어를 통해 편집해주자. 

 

 

가장 마지막 부분에 PS1과 자주쓰는 alias를 입력한다면 로그아웃 이후에도 사용할 수 있다. 

 

 

 

출처

https://www.youtube.com/watch?v=UlQ-xu-koR0&list=PLApuRlvrZKog2XlvGJQh9KY8ePCvUG7Je&index=4&ab_channel=TTABAE-LEARN 

 

728x90