728x90
반응형

1. 프로세스(Process)

 A. 프로세스 ID 확인 명령문

  i. echo $$

 B. 동작 중인 프로세스들 확인 명령문

  ii. ps -u [사용자ID]

 C. 예시

     $ echo $$

     [현재 ProcessID 출력]

     $ ps -u [사용자ID]

     [현재 동작중인 프로세스들 확인]

     $ finger [사용자ID]

     [현재 동작중인 프로세스에 대한 세부 정보가 나옴]

 

2. 프로세스 환경

 A. cat 명령어

  i. 해당 파일에 대한 내용 보기

  ii. $ cat [파일명]

  iii. 예시

      $ cat [파일명]

      [파일 내용이 출력됨]

      $ cat [파일명] |pg

      [파일 내용이 출력됨. 맨 끝에 (EOF) 라는 기호가 나옴.]

 B. ps 명령어

  i. ps -u [사용자ID] : 현재 동작중인 프로세스들의 UserID, ProcessID 등의 정보를 출력함

  ii. ps -ef |grep [사용자ID] : 프로세스의 모든 정보들을 출력함

  iii. 예시

   a. ps -u [사용자ID]

   b. ps -ef |grep [사용자ID]

  

3. 셸의 부모-자식 관계

 A. ksh : 현재 셸에서 서브 셸(Subshell)을 만드는 명령어

  i. [Ctrl]+[d]를 누르면 서브 셸에서 원래 셸로 되돌아온다.

   a. 예시

    1. 서브 셸 들어 가기 전 상태 : ps -ef |grep [사용자ID] 명령어로 확인한다.

    2. echo $$ 명령어로 프로세스 ID를 확인하고, ksh를 입력한 후에 프로세스 ID 확인을 한번 더 확인해본다.

       프로세스 ID 번호가 서로 다름을 알 수 있다.

       ps -ef |grep [사용자ID] 명령어로 프로세스 상태를 확인해본다. 

    3. [Ctrl]+[d] 키를 누른 후에 다시 echo $$ 명령어로 프로세스 ID를 확인하고, 프로세스 상태를 확인해본다.

       ksh 기록이 없어졌음을 알 수 있다.

 

4. 변수와 프로세스

 A. 현재 셸과 서브 셸 사이에서 변수는 공유되지 않는다.

 B. 예시1

  i. 변수 x에 4를 넣고, ksh 명령어로 서브 셸에 들어간다.

  ii. echo $x 명령어로 변수 x 값을 확인해본다. 아마 값이 아예 안나오거나, 4가 아닌 엉뚱한 값이 나올 것이다.

  iii. 서브 셸에서 변수 x에 1을 넣고 [Ctrl]+[d]키를 눌러서 서브 셸을 빠져나온다.

  iv. echo $x 명령어로 변수 x 값을 확인해본다. 1이 아닌 4가 나올 것이다.

 C. 현재 셸과 서브 셸 사이에 변수를 공유하려면, 변수를 정의할 때, export 를 앞에 붙인다.

 D. 예시2

  i. 변수 x에 4를 넣되, 변수 앞에 export를 붙이도록 한다.

  ii. ksh 명령어로 서브 셸에 들어가서 x 값을 확인해본다. 기존 셸에서 넣었던 4라는 값이 그대로 나올 것이다.

  iii. [Ctrl]+[d] 명령어로 서브 셸을 빠져나오고, 다시 x값을 확인해본다. 또 4라는 값이 나올 것이다.

 

5. 셸 스크립트(Shell Script)

 A. 텍스트 파일로 저장한 명령어 모음 파일

 B. MS-DOS의 BAT 파일과 비슷한 역할을 한다.

 C. 예시1

  i. hello라는 파일을 새로 만들기 위해 vi 에디터를 실행시킨다.

  ii. echo, pwd, ls 명령어를 활용하여, 아래와 같이 작성하고, :wq! 를 입력하여 저장한다.

  iii. sh hello를 입력하여, hello 파일을 실행시켜 본다. 입력했던 명령어들이 그대로 실행될 것이다.

      ls -l 명령어로 hello 파일의 권한 상태를 확인한다. 실행권한이 없음을 알 수 있을 것이다.

      이처럼 sh [파일명] 명령어는 해당 파일을 강제로 실행할 때 사용하는 명령어다.

  iv. hello 파일에 실행 권한을 부여한다. 현재 권한 값이 644인 것을 755로 바꾼다.

  v. 다시 ls -l 명령어로 hello 파일의 권한을 확인한다. 실행 권한이 부여되었음을 확인할 수 있다.

  vi. 이제 hello 만 입력해도 알아서 미리 입력해둔 명령어들이 실행된다.

  vii. ksh hello를 입력하여, 서브 셸에서도 파일이 실행되는지 확인한다. 아주 잘 돌아간다.

 D. 예시2

  i. set_dir 파일을 만들기 위해 vi 에디터를 실행시킨다.

  ii. /tmp를 dir1 변수에 넣고, /usr을 dir2에 넣고, :wq 명령어로 저장시킨다.

  iii. . set_dir을 입력하여 set_dir을 실행시켜본다. 별 반응이 없을 것이다.

      set_dir 파일의 권한을 744로 조정하고, $dir1과 $dir2에 어떤 변수가 들어가 있는지 확인한다.

      그림에는 안 나와 있지만, ls $dir1 혹은 ls $dir2도 실행시켜본다.

  

6. 반환 코드(exit code)

 A. 환경변수 $?는 마지막에 실행한 명령어의 반환 값(exit value)을 갖고 있다.

 B. 마지막 실행 명령어를 제대로 수행했을 경우 : $?는 0 값을 가진다.

 C. 마지막 실행 명령어를 제대로 수행하지 못했을 경우 : $?는 1~255 사이 값을 가진다.

 D. 예시

  i. ls 명령어를 한번 수행해보고, $? 결과를 확인한다.

  ii. 말도 안되는 명령어를 아무거나 입력하고, 다시 $? 결과를 확인한다.

 

7. 종합 실습

 A. 현 디렉토리의 파일 개수를 출력하는 스크립트 파일 만들기

  i. vi 에디터를 이용하여, count_file 이란 이름을 가진 파일 개수를 세는 스크립트 파일을 만들 것이다.

  ii. 아래 그림과 같이 스크립트를 작성하고, :wq 를 입력하여 저장한다.

      echo "Number of files:" ------ Number of files: 라는 문구를 출력시킴

      ls -l | wc -l ---------------- 현 디렉토리의 파일 개수를 출력시켜 주는 명령어 

  iii. 새로 생성한 파일의 소유자를 현 사용자로 조정하고, 파일 권한에 실행 권한을 추가한다.

      count_file을 실행해본다. 사용자가 위치한 현 디렉토리의 파일 개수가 나올 것이다.

 B. 현 서버의 사용자 ID 명단과, 사용자 인원 수를 출력하는 스크립트 파일 active 만들기

  i. vi 에디터로 active 파일을 만들 것이다.

  ii. 아래 내용대로 스크립트를 작성하고, 저장한다.

      echo "Active users:" -----Active users: 라는 문구가 그대로 출력됨

      who --------------------현 서버의 사용자 ID 명단을 출력하는 명령어

      echo "Number of active users:" --- Number of active users: 문구가 그대로 출력됨

      who|wc -l --------------현 서버의 사용자 ID 개수를 세서 출력하는 명령어   

  iii. 새로 생성한 active 파일의 소유자를 현 사용자로, 파일 권한에 실행 권한을 추가시킨다.

  iv. active 파일을 실행해본다.

  

8. 확인문제

 A. . 기호를 셸 스크립트에 사용하는 시기

     사용자 자신이 정해놓은 변수 값을 사용자 자신의 셸에 적용하고 싶을 때 사용

 B. 서브 셸까지 변수를 적용하고자 할 때 사용하는 명령어

     export

728x90
반응형
블로그 이미지

nineDeveloper

안녕하세요 현직 개발자 입니다 ~ 빠르게 변화하는 세상에 뒤쳐지지 않도록 우리모두 열심히 공부합시다 ~! 개발공부는 넘나 재미있는 것~!

,