본문 바로가기

Engineer/virtual machine

[리눅스] 우분투 ubuntu 셸과 셸스크립트, 환경변수

셸?

여기서 알아야 될 것은 커널과 셸이다. 커널은 시스템 속에서 제어하는 역할을 하는 것이라고 생각하면 되는데 이것에 직접 접근하기는 어렵다. 따라서 셸이라는 것을 통해 사용자가 입력한 것을 커널로 전달할 수도 있고 커널의 결과를 사용자에게 전달할 수 도 있다. 즉 커널과 사용자 중간에서 통신매체로 생각하면 된다.

우분투의 server모드나 X윈도의 터미널 처럼 명령어를 입력하는 것이라고 보면 된다.

 

우분투에서 기본적으로 사용하는 셸은 bash(Bourne Again Shell)이다. Korn Shell(ksh)과 C Shell(csh)의 장점을 모은 것이라고 생각해도 된다, 

 

bash는 다음과 같은 특징을 가진다.

 

alias: 단축키 기능  예) alias c=clear 하면 c만 눌러도 화면이 청소된다.

History 기능 : ↑ or ↓

연산기능 

Job Control 기능 :터미널에서 한 번에 하나의 명령만 실행시킬 수 있는 것이 아니라 &같은  메타문자를 이용해 background job을 생성함으로 인해 멀티태스킹 가능하게 하는 것 

자동 이름  완성 기능

프롬프트 제어기능

명령 편집 기능 

 

셸 스크립트 

 

리눅스의 셸 스크립트는 C언어와 유사한데 그 이유는 리눅스의 대부분은 C언어로 작성되었기 때문이다. 또한 일반프로그램과 마찬가지로 변수, 반복문, 제어문 등을 사용할 수 있다. 

vi편집기, gedit, nano를 사용한다. 

 

셸 스크립트의 작성방법은 다음과 같다.

nano bab.sh

nano창에 들어가서 수정을 해준다.

첫 줄은 bash셀을 시작하겠다는 뜻이고 두 번째, 세 번째 줄은 아래의 환경변수를 출력하겠다는 의미입니다.

exit 0은 성공을 반환하겠다는 의미다.

키고 나면 한 번에 실행할 수 있다. sh bab.sh로 말이다.

 

두 번째 방법은./bab.sh 이런 방식으로 사용하는 것이다. 

ls 명령어로 확인하여 보면 rw 읽고 쓰는 권한은 있는데 x실행권한이 없다. 따라서 실행을 바로 하면 권한이 없다고 나온다. 따라서 chmod +x bab.sh 혹은 chmod 700 bab.sh라고 명령해야 된다. 둘은 같은 의미이다. 

그리고 나면 위의 sh로 명령한 명령문과 동일하게 출력되는 것을 알 수 있다.

 

이 명령어는 root권한으로 설정되어 있는데 보안상의 이유이다. 다른 곳에서도 사용하고 싶다면 아래와 같이 하면 된다.

root@server:~# cp bab.sh /usr/local/bin

#/usr/local/bin에 bab.sh를 복사해준다.

root@server:~# su - ubuntu
ubuntu@server:~$ bab.sh
-bash: /usr/local/bin/bab.sh: 허가 거부
ubuntu@server:~$ chmod 755 /usr/local/bin/bab.sh
chmod: '/usr/local/bin/bab.sh'의 권한 설정 중: 명령을 허용하지 않음
ubuntu@server:~$ exit
로그아웃

#우분투로 들어가서 실행했지만 권한이 허용이 안된다. 그 이유는 권한이 root에게 있기 때문이다. 
#root로 돌아가서 다시 권한을 바꿔주고 다시 실행한다.

root@server:~# chmod 755 /usr/local/bin/bab.sh
root@server:~# su - ubuntu
ubuntu@server:~$ bab.sh
사용자의 언어: ko_KR.UTF-8
사용자의 작업디렉터리: /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

환경변수

환경변수 설명 환경변수 설명
HOME 현자 사용자의 홈 디렉터리 PATH 실행파일을 찾는 디렉터리 경로
LANG 기본지원언어 PWD 사용자의 작업 디렉터리
TERM 로그인 터미널 타입 SHELL 로그인해서 사용하는 셸
USER 현재 사용자 이름 DISPLAY X디스플레이 이름 
PS1 1차 명령 프롬프트 변수 LINES 현재 터미널 라인 수 
BASH bash 셸의 경로 PS2 2차 명령 프롬프트(보통'>'
HISTFILE 히스토리 파일의 경로 BASH_VERSION bash버전 
HOSTNAME 호스트이름 HISTSIZE 히스토리 파일에 저장되는 개수
LOGNAME 로그인이름 USERNAME 현재 사용자이름 
MAIL 메일을 보관하는 경로  LS_COLORS ls 명령의 확장자 색상 옵션
COLUMN 현재 터미널의 컬럼 수 OS_TYPE 운영체제 타입 

다음표의 환경변수는 echo $환경변수 이름의 형식으로 확인할 수 있다.

echo를 했을 때 현재 디렉터리가 /root임을 알 수 있다. 이와 같은 형식으로 작성하면 된다.

이외에는 export 환경변수=값, printenv명령어를 사용하면 출력된다.