리눅스프로그래밍

우분투 리눅스 - 셸 기본 사용 방법

헬로월드! 2020. 5. 8. 11:59

1. 기본 셸 확인

- 프롬프트 모양 

본 셸, 배시 셸, 콘 셸의 기본 프롬프트 : $

C 셸의 프롬프트 : %

 

- 나의 환경에서 기본 셸을 확인하기 위해 명령어를 입력하여 확인해본다.

내 환경의 기본 셸은 배시 셸! 

사용자 정보를 확인할 때는 /etc/passwd 파일을 살펴본다.

사용자 정보의 가장 마지막에 나온 /bin/bash 가 기본 셸인 것이다. 

 

-기본 셸 바꾸기

우분투의 기본 셸은 배시 셸이지만 사용자가 바꾸고 싶다면 바꿀 수 있다.(리눅스에 그 셸이 설치되어 있다면)

 

chsh

 기능 : 사용자 로그인 셸을 바꾼다.

 형식 : chsh [옵션] [사용자명]

 옵션 : -s shell : 지정한 셸로 로그인 셸을 바꾼다.

           -l  : /etc/shells 파일에 지정된 셸을 출력한다.

 

바꿀 수 있는 셸의 종류는 /etc/shells 파일에 지정되어있다.

 

 

 

셸을 바꿀 때 그냥 셸의 이름만 지정한다면 적합한 셸이 아니라는 메시지가 출력이 된다.

바꾸려는 셸의 절대 경로를 지정해야 셸이 변경된다. 

 

- 로그인 셸과 서브 셸

사용자는 프롬프트에서 다른 셸을 실행할 수 있다. = > 서브 셸 (새로 생성된 셸)

서브 셸을 종료하는 명령은 ctrl + d , exit 등이 있다. 서브 셸이 종료되면 서브 셸을 실행했던 이전 셸 환경으로 돌아가며, 로그인 셸에서 로그아웃을 하면 접속이 해제된다. 

 

2. 셸 내장 명령 

셸은 자체적으로 내장 명령을 가지고 있다. 일반적인 리눅스 명령이 /bin 이나 /usr/bin 디렉터리에 별도의 실행 파일로 있는 것과 달리 셸 내장명령은 별도의 실행파일이 없고 셸 안에 포함되어 있다. (대표적으로 cd 명령)

 

실행파일은 바이너리 파일이기 때문에 cat 명령으로 파일의 내용을 확인할 수는 없다. 

 

3. 출력하기 

배시 셸의 출력 명령: echo, printf 가 있다. 출력 명령은 문자열 출력이나 셸 변숫값 출력, 명령 결과 출력 등에 사용된다.

 

echo

 기능: 화면에 한 줄의 문자열을 출력한다.

 형식: echo [-n] [문자열]

 옵션: -n 마지막에 줄 바꿈을 하지 않는다. 

printf

 기능: 자료를 형식화하여 화면에 출력한다.

 형식: printf [옵션] [인수]

 옵션: %d \n 등 C언어 printf 함수의 형식을 지정한다.

 

4. 특수 문자 사용하기

명령을 입력하면 셸은 먼저 특수문자가 있는지 확인하고 이를 적절한 형태로 변경한 후 명령을 실행한다.

1) 특수문자 * (별표) : 임의의 문자열을 나타내는 특수문자, 0개 이상의 문자로 대체 

여러 파일의 이름을 나열할 때 파일 명을 간단히 표시하는 데 주로 사용된다.

명령을 실행할 때 파일명을 넣어야 하는 자리에 *를 사용하면 모든 파일을 나타낸다. 

사용 예 의미
ls * 현재 디렉터리의 모든 파일과 서브 디렉터리를 나열한다. 서브 디렉터리의 내용도 출력된다.
cp * /tmp 현재 디렉터리의 모든 파일을 /tmp 디렉터리 아래로 복사한다.
ls -F t* t, tmp, temp 와 같이 파일명이 t로 시작하는 모든 파일의 이름과 파일 종류를 출력한다. t도 해당된다.
cp *.txt ../ch3 확장자가 txt 인 모든 파일을 상위 디렉터리 아래의 ch3 디렉터리로 복사한다.
ls -l h*d 파일명이 h로 시작하고 d 로 끝나는 모든 파일의 상세 정보를 출력한다. hd , had, hoood , h12312d 등이 조건에 맞는 모든 파일의 정보를 볼 수 있다. 

2) 특수문자 ? 와 [ ] 

? 와 [ ] 는 모두 하나의 문자를 나타내는 데 사용된다. ? 는 길이가 1인 임의의 한 문자를 , [ ] 는 괄호 안에 포함된 문자 중 하나를 나타낸다. [ ] 는 사용할 여러 문자를 나열하거나 범위를 지정할 수 있으며, 다른 특수문자와 혼합하여 사용할 수도 있다.

 

사용 예 의미
ls t?.txt t 다음에 임의의 한 문자가 오고 파일의 확장자가 txt 인 모든 파일의 이름을 출력한다. t1.txt, t2.txt, ta.txt 등이 해당된다.
단, t.txt 는 제외한다.
ls -l tmp[135].txt tmp 다음에 1,3,5 중 하나가 오고 파일의 확장자가 txt인 모든 파일의 이름을 출력한다. tmp1.txt, tmp3.txt ,tmp5.txt 파일이 있으면 해당 파일의 상세 정보를 출력한다. 단 tmp.txt 는 제외한다.
ls -l tmp[1-3].txt [1-3] 은 1부터 3까지의 범위를 의미한다. 따라서 ls -l tmp[123].txt 와 결과가 같다. 즉 tmp1.txt, tmp2.txt ,tmp3.txt 파일이 있으면 해당 파일의 상세 정보를 출력한다.
ls [0-9]* 파일명이 숫자로 시작하는 모든 파일의 목록을 출력한다.
ls [A-Za-Z]*[0-9] 파일명이 영문자로 시작하고 숫자로 끝나는 모든 파일의 목록을 출력한다. 

 

3) 특수문자 ~ 와 -

~ 과 - 는 디렉터리를 나타내는 특수 문자

~ 만 사용하면 현재 작업 중인 사용자 홈 디렉터리를 표하고 다른 사용자 로그인 id 와 함께 사용하면 해당 사용자의 홈 디렉터리를 표시한다.

- 는 cd 명령으로 디렉터리를 이전하기 직전의 작업 디렉터리를 표시한다. 

사용 예 의미
cp *.txt ~/ch3 확장자가 txt인 모든 파일을 현재 작업 중인 사용자의 홈 디렉터리 아래 ch3 디렉터리로 복사한다. 
cp ~user2/linux.txt user2라는 사용자의 홈 디렉터리 아래에서 linux.txt 파일을 찾아 현재 디렉렉터리로 복사한다.
cd ~ 이전 작업 디렉터리로 이동한다.

4) 특수문자 ; 과 |

; (쌍반점)과 | (파이프)는 명령과 명령을 연결한다.

;는 연결된 명령을 왼쪽부터 차례로 실행하고, |는 왼쪽 명령의 실행 결과를 오른쪽 명령의 입력으로 전달한다. 

 

사용 예 의미
date;ls;pwd 왼쪽부터 차례대로 명령을 실행한다. 즉, 날짜 출력 후 현재 디렉터리의 파일 목록 출력 후 마지막으로 현재 작업 디렉터리의 절대 경로를 보여준다.
ls -al / | more 루트 디렉터리에 있는 모든 파일의 상세 정보를 한 화면씩 출력한다. ls -al / 명령 결과가 more 명령의 입력으로 전달되어 페이지 단위로 출력되는 것이다.

5) 특수문자 ' ' 와 " " 

'' 와 "" 는 문자를를 감싸서 문장열로 만들고, 문자열 안에 사용된 특수 문자의 기능을 없앤다. 

사용 예 의미
echo '$SHELL' $SHELL 문자열이 화면이 출력된다.
echo "$SHELL" 셸 환경 변수인 SHELL 에 저장된 값인 현재 셸의 종류가 화면에 출력된다. /bin/bash 를 예로 들 수 있다. 

 

' ' => 모든 특수문자 

" " => $ `` \ 를 제외한 모든 특수문자

를 일반 문자로 간주하여 처리한다. 

 

echo SHELL => 문자열의미, ehco $SHELL => 변수의 값 의미 

 

6) 특수문자 ` ` 

셸은 ` ` 로 감싸인 문자열을 명령으로 해석하여 명령의 실행 결과로 바뀌게 된다. 

사용 예 의미
 echo "Today is `date` " `date`가 명령으로 해석되어 date 명령으 실행 결과로 바뀐다. 
 ls /usr/bin/`uname -m` uname -m 명령의 실행 결과를 문자열로 바꾸어 파일명으로 사용한다. 

7) 특수문자 \ 

특수문자 바로 앞에 사용하며 해당 특수문자의 효과를 없애고 일반 문자처럼 사용한다. 

사용 예 의미
ls -l t\* t* 이라는 이름을 가진 파일의 상세 정보를 출력한다. \없이 t*을 사용하면 t로 시작하는 모든 파일의 상세 정보를 출력한다.
echo \$SHELL $SHELL 을 화면에 출력한다. echo 'SHELL' 과 결과가 같다. 

8) 특수문자 > , < , >> 

사용 예 의미
ls -l > res ls - l 명령의 실행 결과를 화면이 아닌 res 파일에 저장한다.