블로그 이미지
인터넷 해외선교를 기본으로 하는 개인적 내용과 학점은행제 관련한 것을 한꺼번에 남겨볼께요. 항상 행.복.하시길~ 주문처럼 외우는 엠토리가 운영하는 블로그입니다
엠토리

공지사항

최근에 올라온 글

최근에 달린 댓글

글 보관함

calendar

1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28
첫주 수업 내용을 접속으로 하고 이제부터는 리눅스 세상이라고 해보겠습니다. ㅎ

[Shell(쉘)]

☞리눅스의 명령어 작업을 할 때는 자동으로 쉘을 사용하게 되므로 리눅스를 정확하게 사용하려면 쉘에 대해서 이해하고 있어야 한다. 라고 강사님이 말하시더군요.

먼저 이를 위해 알아야할 리눅스 용어(명령어)는..

1. alias
   명령어 별칭 출력 및 생성(반대는 unalias)

#ls  -l
#ll
---> 명령어 alias , ll 은  ls  -l 과 같다.

#alias
---> 미리 설정되어 있는 alias 확인하기

#zz
---> 명령어도 아니고 알리아스도 아니므로 실행되지 않는다.

#alias  zz='ls  -l'
사용자 정의 알리아스(명령어에 대한 별칭)
---> 위의 설정은 1회성이고 리부팅해도 적용하려면 쉘설정 파일에 등록시켜야 한다.

#alias
#zz
---> ls  -l 이 실행된다.

#unalias  zz
알리아스 해제
#alias
#zz
---> X

2. echo
   화면상에 문자열이나 변수의 값(내용)을 출력.  변수는 $ 기호로 시작된다.

#echo test
#echo TEST

3. export
   환경변수로 만들어 주는 명령어


♥Unix 및 Linux 구조

----------
사용자
----------
Shell
----------
Kernel
----------
H/W
----------

♥부팅
하드 디스크의 커널이 메모리에 로딩되어 사용자의 명령을  처리할 수 있도록 준비되는 과정 (from bootstrap)

♥Kernel(커널)
운영체제의 핵심되는 프로그램(자동차의 엔진 역할)

♥쉘(shell)
명령어 해석기(Command Interpreter)
사용자가 입력한 명령어를 커널(운영체제의 핵심프로그램)이 이해할 수 있도록 번역해서 전달하고 결과를 사용자에게 리턴하는 프로그램
쉘도 하나의 프로그램이며 리눅스로 로그인하면 쉘이 메모리에 로딩되고 터미널 프로그램을 실행해도 쉘이 메모리로 로딩된다.
터미널에서 텍스트 명령어를 사용하면 쉘을 이용하게 되는 것이다.

명령어 대기 상태 : 쉘프롬프트 라고 부른다.
리눅스 명령어를 쉘명령어 라고도 부른다.

[root@cent work]#cd /work (안 되면 #mkdir  /work 한 후 이동하기)
[root@cent work]# vi score.c

#include <stdio.h>
int main() {
        int jumsu;
        printf("Input Your Score : ");
        scanf("%d",&jumsu);
        printf("Your Score is %d\n",jumsu);
        return 0;
}

[root@cent work]# cat score.c
#include <stdio.h>
int main() {
        int jumsu;
        printf("Input Your Score : ");
        scanf("%d",&jumsu);
        printf("Your Score is %d\n",jumsu);
        return 0;
}

[root@cent work]# gcc  -o  score.exe  score.c
gcc : C 컴파일(컴퓨터가 이해할 수 있도록 변환) 명령어
-o 는 출력 파일(output file)을 지정하는 옵션

[root@cent work]# ls
pine.txt  score.c  score.exe
[root@cent work]#
[root@cent work]# ls sc*
score.c  score.exe
[root@cent work]#
[root@cent work]# score.exe
-bash: score.exe: command not found
---> 실행안됨
---> 현재 작업 디렉토리 /work 가 패스(PATH)에 설정되어 있지 않기 때문

[root@cent work]#
[root@cent work]# ./score.exe
--->현재 디렉토리에 있는 score.exe 를 실행하라는 의미
--->점 1개는 현재 디렉토리를 의미
.. 
--->점 2개는 상위 디렉토리를 의미

Input Your Score : 90
Your Score is 90

[root@cent work]#

-------------
shell(쉘)
-------------
kernel(커널)
-------------
리눅스로 로그인 한 후 터미널 실행했을 때 메모리 상태

PATH(패스) : 명령어를 탐색하는 경로(디렉토리,폴더) 정보

#echo  path
---> 문자열은 그대로 출력됨
#echo  PATH
#echo  $path
---> $ 는 변수를 뜻하며 환경변수는 대문자이다.
---> 소문자 path 변수는 정의가 되어있지 않으므로 출력되는 것이 없음

#echo $PATH
/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin

변수      : 메모리에 데이타를 저장하고 있는 임시 기억장소
환경변수 : 명령어가 실행될 때 참조되는 패스(PATH) 같은 변수를 환경변수라고 부른다.

---------------------------------------------
[/a:/b:/c]      [ ko_KR ]    [ /root ]
PATH 변수    LANG 변수   HOME 변수
---------------------------------------------
메모리상의 쉘 영역

쉘의 메모리 영역에는 변수도 있고 환경변수도 있는데 리눅스의 명령어 프로그램이 실행될 때 참조하는 변수를 환경변수라 하고 PATH 가 대표적인 환경변수이다.(--->대문자)

PATH : 명령어 탐색 경로 저장
LANG : 언어 정보 저장
HOME : 로그인한 계정의 홈디렉토리 저장

#ls 라고 입력했을 때 실제로는 /bin/ls 실행이 되는데 쉘이 메모리상에서 PATH 변수를 탐색해서 실행을 해주므로 /bin/ls 라고 입력할 필요가 없다.
score.exe 는 /work 에 있지만 패스(PATH) 변수에 /work 디렉토리가 포함되어 있지 않으므로 #score.exe 라고 입력했을 때 실행되지 않는다.

score.exe 를 실행하려면 

1) score.exe 파일을 /bin 같은 패스에 등록된 디렉토리에 복사
2) #/work/score.exe 처럼 절대경로를 입력
3) #cd /work 한 후 #./score.exe 처럼 상대경로 입력
4) /work 를 패스에 지정

#export  PATH=/work:$PATH
/work 디렉토리를 PATH 변수에 추가하기(대소문자 구분)
export ---> 환경변수로 만들어주는 명령어
                PATH 는 이미 환경변수이므로 export 를 생략해도 된다.

---> 패스설정시 ; 이 아니라 : 으로 해야 하고 공백이 있으면 안 된다.
---> 위와같은 설정은 일회성으로 리부팅해도 적용되게 하려면 쉘설정파일을 이용해야 한다.

#echo $PATH
/work:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/root/bin
(/work 디렉토리가 패스에 추가 됨)

[root@cent work]# score.exe
Input Your Score : 80
Your Score is 80
---> 패스설정을 했으므로 ./score.exe 라고 입력을 안 해도 실행된다.

☎한/영 전환 알리아스 설정
#cp
cp: missing file argument
더 많은 정보를 보려면 `cp --help' 하십시오.
---> 한글로 메시지가 출력된다.

#echo $LANG
ko_KR.UTF-8
--->언어가 한글로 설정되어 있다는 의미

Q)터미널에서 en 을 입력하면 영문으로 설정되고 ko 를 입력하면 한글로 설정이 되도록 알리아스를 설정하시오
--->LANG 환경변수를 en_US.UTF-8 또는 C(대문자) 로 변경하면 됨


//////////////////////////////////////////////////////
#alias  en='export  LANG=en_US.UTF-8'
대소문자 구분하고 = 의 왼쪽과 오른쪽은 공백이 있으면 안 됨

#alias  ko='export  LANG=ko_KR.UTF-8'
위와 같은 설정은 일회성이고 계속 적용하려면 쉘설정파일에 등록해 주면 된다.

#en
#cp
cp: missing file argument
Try `cp --help' for more information.
#
#ko
#cp
cp: missing file argument
더 많은 정보를 보려면 `cp --help' 하십시오.
#
//////////////////////////////////////////////////////

<쉘설정파일 사용하기>
리눅스는 로그인을 하면 메모리에 쉘이 실행 되는데 /etc/bashrc,  /etc/profile 을 먼저 읽고  자신의 홈디렉토리에서 .bashrc, .bash_profile 을 읽어서 알리아스, 패스(PATH)같은 환경변수를 설정하게 된다.
(.bashrc 는 터미널을 실행할 때 마다 읽고 .bash_profile 로그인시 한 번 만 읽는다.)
/etc 에 있는 쉘설정파일은 모든 사용자에게 적용되는 전체설정 파일이다.


bash(--->리눅스의 디폴트 쉘 프로그램인 배쉬 쉘) 설정파일
1).bashrc (비-로그인 쉘 설정파일)
2).bash_profile (로그인 쉘 설정파일)
3).bash_history
4).bash_logout
--->계정의 홈디렉토리에 존재한다.

#cd
(cd 만 입력하면 자신의 홈디렉토리로 이동한다.)
#pwd
(/root)
#ls
#ls  -a
리눅스에서는 점으로 시작하는 파일은 숨김속성(hidden file) 파일로 ls 로 안 보이고 ls -a 로 볼 수 있다. 주로 설정파일들이 점으로 시작한다.

#cat  .bashrc
---> 주로 알리아스 등록

#cat  .bash_profile
---> 패스같은 환경변수 등록

#cat  .bash_history
---> 사용한 명령어가 기록됨(히스토리 파일) #history 명령어로 확인

#!! 또는 !-1
--->가장 마지막에 사용한 명령이 실행된다.

#!369
--->history 목록에서 369번 명령이 실행된다.

#cat  .bash_logout
---> 로그아웃시 실행 할 명령어 기록

<쉘변수 확인하기>
set    : 변수 + 환경변수 출력(형식 : 변수이름=값)
unset : 변수 초기화(#unset  PATH ---> 패스변수 초기화)
env   : 환경변수 출력


PS1 변수 : 프롬프트 저장 변수
#echo $PS1

\u 유저네임
\h 호스트네임(컴퓨터이름)
\W 작업 디렉토리

프롬프트 변경
#PS1="C:\>"
C:\>

쉘변수에 대한 확인은 #man  bash 이용

♥쉘의 기능(bash 쉘)
0. 알리아스 기능
1. 히스토리 기능 : 위쪽 화살표, 아래쪽 화살표
                       명령어는 #history
2. 자동완성 기능 : Tab(탭) 키

<redirection(방향 재지정)>

1) >  출력(기존의 파일이 있으면 overwrite 됨)
2) >> append(기존내용에 추가하기)
3) <  입력
4) << 입력 종료 문자 지정

#vi  result.txt

redirection test

#cat  result.txt
#cat < result.txt (cat  result.txt 와 동일하다)
#cat 
---> 입력 리다이렉션(< 기호)를 사용하지 않았으므로 키보드로부터 입력을 받으려고 커서가  다음 줄로 넘어간다. ctrl + d 를 누르면 종료가 된다.

#cat > result.txt (키보드 입력을 받아 파일로 출력하라는 의미)
one
two
three
ctrl + d : 입력종료 단축키


#ls
#cat  result.txt
덮어쓰기(Overwrite)가 된 것을 확인할 수 있다.

#cat  >>  result.txt
four
five
six
ctrl + d(타이핑 하는 것이 아니고 ctrl 키 누른 상태에서 d 키를 누르라는 의미)

#cat  result.txt
추가가 된 것을 확인할 수 있다.

#cat  >  result.txt  <<  EOF
kor
eng
math
eof
EOF(입력 종료 문자로 동작함)
#cat  result.txt


♥쉘옵션 설정
#set  -o  noclobber
출력(>) 리다이렉션 이용시 덮어쓰기 방지 설정

#set  +o noclobber
출력(>) 리다이렉션 이용시 덮어쓰기 가능 설정


♥실습
1. cat 와 리다이렉션 이용하여 아래와 같은 내용으로 one.txt 파일 만들기
2. cat 와 리다이렉션을 이용하여 one.txt 를 입력받아 two.txt 로 출력 시키기

one.txt :                       
Seoul                
Pusan                  
Daegu                             

//////////////////////////////////////////////////////////////////////////
#cat  >  one.txt
내용 입력

#cat  <  one.txt  >  two.txt
//////////////////////////////////////////////////////////////////////////

여기까지입니다. ^^ 또 상황에 따라 업로드 해둘께요.
리눅스 고수가 되려는 것은 아니지만 기본적인 개요를 함께 나누는 엠토리가 되었으면 좋겠습니다.

항상 행.복.하시길~^^