본문 바로가기
CS/Unix 시스템

방송통신대학교 방통대 UNIX 시스템 리눅스 기출문제 2018- 2 기말 시험 문제와 해설

by Renechoi 2023. 12. 1.

36. 리눅스 커널을 포함하여 리눅스 배포판에서 사용되는 많은 소프트웨어들은 주로 어떤 라이선스를 따르고 있는가? (4점)

① Apache
② BSD
③ GPL
④ MPL

정답: 3 (GPL)

해설: 리눅스 커널과 많은 리눅스 배포판 소프트웨어들은 주로 GPL(General Public License) 라이선스를 따른다. GPL은 자유 소프트웨어 재단(FSF)에 의해 발표된 라이선스로, 소스 코드의 공개, 수정 및 재배포의 자유를 보장한다.

오답 선지 해설:

  • ① Apache 라이선스는 오픈 소스 라이선스지만, 리눅스 커널에 사용되는 주요 라이선스는 아니다.
  • ② BSD 라이선스도 오픈 소스 라이선스지만, GPL만큼 리눅스 배포판에서 널리 채택되지 않았다.
  • ④ MPL(Mozilla Public License)은 주로 모질라 재단의 프로젝트에 사용되며, 리눅스 커널이나 배포판의 주요 라이선스는 아니다.

37. 다음 중 레드햇 계열의 리눅스 배포판이 아닌 것은? (3점)

① CentOS
② RHEL
③ ubuntu
④ fedora

정답: 3 (ubuntu)

해설: ubuntu는 데비안 계열의 리눅스 배포판이다. 레드햇 계열에는 CentOS, RHEL(Red Hat Enterprise Linux), fedora 등이 포함되지만, ubuntu는 그 중 하나가 아니다.

오답 선지 해설:

  • ① CentOS와 ② RHEL은 레드햇 계열에 속한다.
  • ④ fedora 역시 레드햇 계열의 배포판이다.

38. 리눅스 시스템에서 표준 디렉터리의 용도에 관한 설명으로 올바른 것은? (4점)

① /etc - 시스템의 주요 환경 설정 파일이 위치하는 디렉터리
② /usr - 사용자의 홈 디 렉터 리가 생성되는 디렉터리
③ /dev - 이동식 저장 장치의 마운트 지점을 제공하는 디렉터리
④ /var - 커널이 사용하는 가상의 파일 시스템이 위치하는 디렉터리

정답: 1 (/etc)

해설: /etc 디렉터리는 리눅스 시스템에서 시스템의 주요 환경 설정 파일들이 위치하는 곳이다. 여기에는 시스템의 전반적인 설정 파일들이 포함된다.

오답 선지 해설:

  • ② /usr 디렉터리는 사용자 관련 프로그램 및 라이브러리가 저장되지만, 홈 디렉터리는 /home에 위치한다.
  • ③ /dev 디렉터리는 장치 파일들이 위치하는 곳이지만, 이동식 저장 장치의 마운트 지점은 보통 /mnt나 /media에 위치한다.
  • ④ /var 디렉터리는 로그 파일, 메일 큐 등 변동성 있는 데이터를 저장하는 곳이며, 가상 파일 시스템은 /proc 또는 /sys에 위치한다.

39. 셸의 명령 행에서 사용하는 특수 문자에 관한 설명으로 올바른것은? (3점)

① : 특수 문자 앞에 붙어 특수 문자의 기능을 제거함
② >> : 명 령 수행을 위해 파일의 입력이 필요할 때 사용함
③ # : 명령을 백그라운드로 실행할 때 사용함
④ ! : 명령 히스토리 기능을 이용할 때 사용함

정답: 4 (!)

해설: 셸의 명령 행에서 '!' 특수 문자는 명령 히스토리 기능을 이용할 때 사용한다. 이를 통해 과거에 실행한 명령어들을 다시 호출하고 실행할 수 있다.

오답 선지 해설:

  • ① ':'은 다양한 용도로 사용되지만, 특수 문자

의 기능을 제거하는 용도는 아니다.

  • ② '>>'는 기존 파일에 데이터를 추가하는 리다이렉션에 사용된다.
  • ③ '#'은 주석을 나타내는 데 사용되며, 백그라운드 실행은 '&'로 표시한다.

40. 셸에서 사용되는 명령이 어떻게 해석되는지 알기 위해 아래 밑줄 부분에서 사용해야 하는 명령은 무엇인가? $는 셸 프롬프트이며 cd는 셸의 내장 명령이다. (2점)

① alias
② type
③ whereis
④ man

정답: 2 (type)

해설: 셸에서 'type' 명령은 특정 명령이 어떻게 해석되는지 확인하는 데 사용된다. 'cd'와 같은 내장 명령인지, 외부 명령인지 등을 알 수 있다.

오답 선지 해설:

  • ① 'alias'는 별칭을 설정하거나 별칭 목록을 보는 데 사용된다.
  • ③ 'whereis'는 명령어의 실행 파일 위치를 찾는 데 사용된다.
  • ④ 'man'은 명령어의 매뉴얼 페이지를 보는 데 사용된다.

41. 파일이냐 디렉터리냐에 따라 접근권한의 의미가 약간 다르다.다음 중 ‘디렉터리의 읽기 권한’을 의미하는 설명은? (2점)

① 디렉터리에 존재하는 파일의 내용을 읽을 수 있다.
② 디렉터리에 어떤 파일과 서브 디렉터리가 있는지 목록을 볼수 있다.
③ 접근권한, 소유자, 크기, 수정 시간 등 디렉터리의 메타 정보를 조회할 수 있다.
④ cd 명령을 사용하여 해당 디렉터리로 이동할 수 있다.

정답: 2

해설: 디렉터리의 읽기 권한은 해당 디렉터리에 존재하는 파일과 서브 디렉터리의 목록을 볼 수 있는 권한을 의미한다.

오답 선지 해설:

  • ① 파일의 내용을 읽는 것은 파일에 대한 읽기 권한이다.
  • ③ 메타 정보 조회는 '읽기' 권한과는 다른 개념이다.
  • ④ 디렉터리로 이동하는 것은 실행 권한과 관련이 있다.

42. 리눅스 시스템의 런레벨(runlevel)에 관한 설명으로 잘못된 것은? (4점)

① O - 시스템 종료
② 1 - 단일 사용자 모드
③ 3 - 네트워크 기능을 지원하는 다중 사용자 모드
④ 5 - 시스템 재부팅

정답: 4 (5 - 시스템 재부팅)

해설: 런레벨 5는 네트워크 기능과 그래픽 사용자 인터페이스를 제공하는 다중 사용자 모드를 의미한다. 시스템 재부팅은 런레벨 6에 해당한다.

오답 선지 해설:

  • ① 런레벨 0은 시스템 종료를 나타낸다.
  • ② 런레벨 1은 단일 사용자 모드를 나타낸다.
  • ③ 런레벨 3은 네트워크 기능을 지원하는 다중 사용자 모드를 나타낸다.

43. 관리자가 사용자 계정을 생성할 때, 사용자 계정의 기본적 환경 설정이 필요하다. 이때 사용되는 설정 파일(또는 디렉터리)이 아닌 것은 (3점)

① /etc/skel/
② /etc/log in. defs
③ /etc/f stab
④ /etc/defauft/useradd

정답: 3

해설: 리눅스 시스템에서 사용자 계정 생성 시 기본 환경 설정을 위해 사용되는 설정 파일 또는 디렉터리 중 '/etc/fstab'은 파일 시스템 마운트 정보를 담고 있으며, 사용자 환경 설정과는 관련이 없다.

오답 선지 해설:

  • ① /etc/skel/ 디렉터리는 새 사용자 홈 디렉터리에 기본적으로 복사될 파일과 디렉터리를 포함한다.
  • ② /etc/login.defs 파일은 사용자 계정 및 비밀번호 정책을 설정하는 데 사용된다.
  • ④ /etc/default/useradd 파일은 새 사용자 계정을 추가할 때 기본 설정을 정의한다.

44. vi를 사용한 편집 작업 중에 ESC 키를 두 번 치면 항상 어떤 모드로 이동하는가? (4점)

① 입력 모드
② 명령 모드
③ 라인 모드
④ 검색 모드

정답: 2

해설: vi 편집기에서 ESC 키를 두 번 치면 항상 명령 모드로 이동한다. 이 모드에서는 다양한 편집 명령을 수행할 수 있다.

오답 선지 해설:

  • ① 입력 모드는 텍스트 입력을 위한 모드이며, ESC 키를 치면 명령 모드로 돌아간다.
  • ③ 라인 모드는 명령 모드에서 ':'를 입력하여 접근할 수 있는 모드이다.
  • ④ 검색 모드는 vi 내에서 특정 문자열을 찾기 위해 사용되지만, ESC 키를 두 번 치는 것만으로 접근할 수 없다.

45. 다음 명령이 의미하는 것으로 적당한 것은? $는 셸 프롬프트이다. (2점)

$ umount -a -t iso9660

① 해당 유형의 모든 파일시스템이 마운트 가능한지 점검함
② /etc/inittab에 나열된 해당 유형의 모든 파일시스템을 점검한 후 마운트함
③/etc/fstab에 나열된 해당 유형의 파일시스템을 모두 언마운트함
④/etc/fstab에 나열된 모든 파일시스템을 언마운트함

정답: 3

해설: $ umount -a -t iso9660 명령은 iso9660 유형의 모든 파일 시스템을 언마운트한다. 이 명령은 현재 마운트된 iso9660 파일 시스템을 해제하는 데 사용된다.

오답 선지 해설:

  • ① 해당 유형의 모든 파일 시스템이 마운트 가능한지 점검하는 것이 아니다.
  • ② /etc/inittab에 나열된 파일 시스템을 점검한 후 마운트하는 것도 아니다.
  • ④ /etc/fstab에 나열된 모든 파일 시스템을 언마운트하는 것도 아니다.

46. 볼륨 관리에서 사용되는 용어의 설명이다. 잘못된 것은? (2점)

① 물리볼륨(pv) - 하나의 물리적 디스크를 말함
② 볼륨그룹(vg) - 여러 물리볼륨을 하나로 묶은 것으로 가상의 하드디스크로 생각할 수 있음
③ 논리볼륨((lv) - 볼륨 그룹에서 가용 공간을 분할한 것으로 기존 파티션과 개념적으로 일치함
④ 물리 익스텐트(pe) - 하나의 표준 블록 디바이스로 표현되며 마운트 작업과 파일시스템 검사의 단위가 됨

정답: 4

해설: 물리 익스텐트(pe)는 물리볼륨 내의 데이터 블록을 말하며, 하나의 표준 블록 디바이스로 표현되거나 마운트 및 파일 시스템 검사의 단위가 되지 않는다.

오답 선지 해설:

  • ① 물리볼륨(pv)은 하나의 물리적 디스크를 의미한다.
  • ② 볼륨그룹(vg)은 여러 물리볼륨을 묶은 것이며, 가상의 하드디스크로 간주할 수 있다.
  • ③ 논리볼륨(lv)은 볼륨 그룹의 가용 공간을 분할한 것으로, 기존 파티션 개념과 유사하다.

47. 파일 시스템 유형에 관한 설명으로 잘못된 것은? (2점)

① WXFS - 리눅스의 차세대 파일 시스템으로 여러 서버에서 동시 마운트와 동시 접근이 가능한 공유 파일 시스템이다.
② ext2 - 저널링을 지원하지 않으며 100MB 이하의 작은 파티션에 사용하는 것이 좋다.
③ ext4 - 레드햇 계열 리눅스의 기본 파일 시스템으로 범용이며 특별한 이유가 없다면 이것을 사용하면 된다.
④ vfat - 윈도우 운영체제와 호환되는 파일 시스템으로 USB 에서 주로 사용된다.

정답: 1

해설: WXFS는 리눅스의 차세대 파일 시스템으로 소개되었지만, 현재 리눅스 표준 파일 시스템이 아니다. 공유 파일 시스템으로 여러 서버에서 동시 마운트와 접근이 가능한 특징을 가지고 있다.

오답 선지 해설:

  • ② ext2는 저널링을 지원하지 않으며 작은 파티션에 적합하다.
  • ③ ext4는 레드햇 계열 리눅스의 기본 파일 시스템이다.
  • ④ vfat은 윈도우와 호환되며 USB에서 주로 사용된다.

정답: 1

48. 다음 명령의 결과를 정확히 설명한 것은? $는 셸 프롬프트이다. (2점)

ps

① 현재 터미널과 연결되어 있는 프로세스 중 EUID가 현재 사용자의 UID와 같은 프로세스를 보여준다.
② 터미널을 종료해도 현재 실행 중인 프로그램이 종료되지 않고 계속 수행되게 한다.
③ 현재 사용자가 소유한 모든 프로세스를 출력한다. 데몬 프로세스처럼 터미널과 연결되어 있지 않은 프로세스도 출력한다.
④ 모든 사용자의 모든 프로세스를 자세히 보여준다.

정답: 1

해설: ps 명령은 현재 터미널과 연결되어 있는 프로세스 중 EUID가 현재 사용자의 UID와 같은 프로세스를 보여준다. 이 명령은 현재 사용자가 실행한 프로세스에 대한 정보를 제공한다.

오답 선지 해설:

  • ② 터미널을 종료해도 현재 실행 중인 프로그램이 계속 수행되게 하는 것이 아니다.
  • ③ 현재 사용자가 소유한 모든 프로세스를 출력하는 것은 아니다.
  • ④ 모든 사용자의 모든 프로세스를 자세히 보여주는 것도 아니다.

49. 특정 작업을 주기적으로 실행시키는 cron 서비스에 관한 설명이다. 잘못된 것은? (2점)

① crond 데몬 프로그램이 1분 간격으로 설정 파일을 검사하여 수행한다.
② 관리자가 시스템 수준의 설정 파일을 수정할 때, vi 편집기로 편집 할 수 없으며 반드시 crontab 명령을 사용해야 한다.
③ 시스템 수준에서 /etc/crontab 파일과 /etc/cron.d/ 디렉터리에 존재하는 파일이 cron 서비스의 작업 설정 파일이다.
④ 일반 사용자도 자신만의 cron 작업을 등록하거나 수정 할수 있다.

정답: 2

정답: 2

해설: cron 서비스는 주기적인 작업을 관리하기 위해 crond 데몬을 사용한다. 시스템 수준의 cron 작업 설정 파일은 /etc/crontab과 /etc/cron.d/ 디렉터리에 위치한다. 이러한 파일은 시스템 관리자가 vi 편집기 또는 다른 텍스트 편집기로 편집할 수 있다. crontab 명령은 주로 사용자별 cron 작업 스케줄을 관리하는 데 사용된다. 따라서 관리자가 시스템 수준의 설정 파일을 수정할 때 반드시 crontab 명령을 사용해야 한다는 것은 잘못된 설명이다.

오답 선지 해설:

  • ① crond 데몬은 1분 간격으로 cron 설정 파일을 검사하여 주기적 작업을 수행한다.
  • ③ 시스템 수준의 cron 작업 설정 파일은 /etc/crontab 파일과 /etc/cron.d/ 디렉터리에 있다.
  • ④ 일반 사용자도 자신의 cron 작업을 등록하거나 수정할 수 있다.

50. 다음 명령은 /usr/bin/passwd 파일의 자세한 정보를 보여준다.이 파일에 적용된 특수권한과 관련된 설명 중 잘못된 것은? $는 셸 프롬프트이다. (2점)

$ ls -l /usr/bin/passwd + enter
-rwsr-xr-x. 1 root root 25980 2015-11-24 01:28 /usr/bin/passwd 

① passwd 파일에 특수권한인 SetUID가 설정되어 있다.
② 일반 사용자가 passwd 명령을 실행할 때 root 권한으로 실행 된다.
③ 일반 사용자 계정으로도 /usr/bin/passwd 파일을 vi 편집기로 직접 수정할 수 있다.
④ 일반 사용자가 passwd 명령을 사용하여 암호를 수정할 때,암호가 저장된 /etc/shadow 파일의 수정이 가능하다.

정답: 3

해설: /usr/bin/passwd 파일에 설정된 SetUID 권한은 이 파일이 실행될 때 실행자의 권한을 파일 소유자(root)의 권한으로 실행되게 한다. 이는 사용자가 자신의 비밀번호를 변경할 때 /etc/shadow 파일에 접근할 수 있게 한다. 하지만 일반 사용자가 /usr/bin/passwd 파일을 직접 수정할 수 있는 것은 아니다. 이 파일은 root 권한을 가진 사용자만 수정할 수 있다.

오답 선지 해설:

  • ① passwd 파일에 SetUID 권한이 설정되어 있다.
  • ② 일반 사용자가 passwd 명령을 실행하면 root 권한으로 실행된다.
  • ④ 일반 사용자가 passwd 명령을 사용하여 암호를 수정할 때, /etc/shadow 파일의 수정이 가능하다.

51. 다음은 RPM 패키지 관리에 대한 설명이다. 잘못된 것은? (3점)

① RPM은 레드햇 계열 리눅스에서 패키지 파일의 표준 형식이다.
② RPM은 RPM 패키지 관리 프로그램(Rpm Package Manager)을 의미 한다.
③ rpm 명령을 사용하여 신규로 패키지를 설치하거나 기존 패키지를 업그레이드할 수 있다.
④ rpm 명령을 사용하면 설치하고자 하는 패키지의 ‘선행 패키지’ 가 필요할 때 자동으로 찾아 설치해 준다.

정답: 4

해설: RPM(Red Hat Package Manager)은 레드햇 계열 리눅스에서 패키지 파일의 표준 형식이며, rpm 명령을 사용하여 패키지를 설치하거나 업그레이드할 수 있다. 하지만 rpm 명령은 자동으로 '선행 패키지'(의존성 패키지)를 찾아 설치하지 않는다. 이 기능은 yum 또는 dnf와 같은 고급 패키지 관리자가 제공한다.

오답 선지 해설:

  • ① RPM은 레드햇 계열 리눅스에서 패키지 파일의 표준 형식이다.
  • ② RPM은 Rpm Package Manager를 의미한다.
  • ③ rpm 명령을 사용하여 패키지를 설치하거나 업그레이드할 수 있다.

52. yum 명령의 사용법을 설명한 것이다. 잘못된 것은? (3점)

① yum list installed [패키지명] - 패키지를 설치
② yum info [패키지명] - 패키지의 설명과 요약 정보를 출력
③ yum remove 패키지명 - 패키지를 삭제
④ yum history - 패키지 설치 이력을 확인

정답: 1

해설: yum list installed [패키지명] 명령은 설치된 패키지를 나열하는 데 사용된다.

패키지를 설치하는 명령은 yum install [패키지명]이다.

오답 선지 해설:

  • ② yum info [패키지명]은 패키지의 설명과 요약 정보를 출력한다.
  • ③ yum remove [패키지명]은 패키지를 삭제한다.
  • ④ yum history 명령은 패키지 설치 이력을 확인한다.

53. 두 파일을 압축하고 연결시켜 하나의 압축 파일(bar. gz)을 만드는 명령으로 적당하지 않은 것은 무엇인가? gzip 명령의 -C 옵션은 결과를 표준 출력으로 내보낸다. (2점)

① cat filel file2 | gzip > bar.gz
② gzip -c file1 > bar.gz; gzip -c file2 >> bar.gz
③ gzip -c file1 file2 > bar.gz
④ gzip file1 file2 > bar.gz

정답: 4

정답: 4

해설: gzip 명령은 표준 입력으로부터 파일을 읽어 압축한다. gzip file1 file2 > bar.gz 명령은 두 파일을 동시에 압축하지 않고, 첫 번째 파일만 압축한 뒤 두 번째 파일을 무시한다.

오답 선지 해설:

  • ① cat file1 file2 | gzip > bar.gz 명령은 두 파일을 연결한 뒤 압축한다.
  • ② gzip -c file1 > bar.gz; gzip -c file2 >> bar.gz 명령은 두 파일을 순차적으로 압축한다.
  • ③ gzip -c file1 file2 > bar.gz 명령은 두 파일을 순차적으로 압축하여 하나의 파일로 만든다.

※ 다음은 2개의 정수를 비교하여 결과를 표시한 후 두 정수의 합을 출력하는 셸 스크립트이다. 실행 결과를 보고 물음에 답하여라.$는 셸 프롬프트이다. (56~58)

      $ cat intCompare.sh
      #!/bin/bash
      if              ㄱ                 then
          echo "You must supply two numbers as arguments" 
          exit 1
      fi
      if [ $1 -eq $2 ]; then
          echo "$1 equals to $2." 
      elif [ $1 -gt $2 ]; then
            echo "$1 is greater than $2." 
      else
          echo "$1 is less than $2."
      fi
      echo                           ㄴ
      $ chmod u+x intCompare.sh 
      $                         ㄷ
      36 is less than 68.
      36 + 68는 104입니다.

56. 2개의 인수가 제공되었는지 확인하기 위해 밑줄친 ㄱ에 들어갈 내용으로 적당한 것은? (3점)

 ① test $* -ne 2; 
 ② test $# -eq 2; 
 ③ [ $# -ne 2 ]; 
 ④ [ $# -eq 2 ];

정답: 3

56번 정답 해설:
정답 3번은 "[ $# -ne 2 ]"로, 이는 전달된 인자의 수가 2가 아닌지를 검사하는 조건문이다. 셸 스크립트에서 "$#"는 전달된 인자의 개수를 나타내며, '-ne'는 'not equal'을 의미한다. 따라서 이 조건문은 "인자의 수가 2개가 아니면"이라는 뜻이다.

오답 선지 해설:

  • ① "test $* -ne 2"는 모든 인자를 하나의 문자열로 취급하여 그 개수가 2가 아닌지를 검사한다. 하지만 "$*"는 모든 인자를 하나로 묶어주므로, 이 조건문은 정확한 인자 수를 판단할 수 없다.
  • ② "test $# -eq 2"는 인자의 수가 정확히 2개인지를 검사한다. 이 조건문은 "인자의 수가 2개일 때"라는 뜻이므로, 필요한 조건인 "2개가 아닐 때"와는 반대이다.
  • ④ "[ $# -eq 2 ]" 역시 인자의 수가 2개인지를 검사하는 조건문이며, 필요한 조건과는 반대이다.

57. 두 정수의 합을 출력하기 위해 밑줄친 ㄴ에 들어갈 내용으로 적당한 것은? (2점)

 ① "$1 + $2는 ($1 + $2)입니다."
 ② "$1 + $2는 $$($1+$2)입니다."
 ③ '$1 + $2는 $[$1+$2]입 니다.'
 ④ "$1 + $2는 $$[$1+$2]입 니다."

정답: 4

57번 정답 해설:
정답 4번은 ""$1 + $2는 $$[$1+$2]입니다.""로, 이는 셸 스크립트에서 산술 연산을 수행하고 그 결과를 출력하는 방법을 나타낸다. "$$"는 현재 셸의 프로세스 ID를 나타내며, "$[$1+$2]"는 셸의 산술 확장을 이용해 두 인자의 합을 계산한다.

오답 선지 해설:

  • ① ""$1 + $2는 ($1 + $2)입니다.""는 단순히 문자열을 출력하며, 실제 두 수의 합을 계산하지 않는다.
  • ② ""$1 + $2는 $$($1+$2)입니다.""는 부적절한 문법을 사용한다. "$($1+$2)"는 셸의 산술 확장을 의도했을 수 있지만, 올바른 형식은 "$((expression))"이다.
  • ③ "'$1 + $2는 $[$1+$2]입니다.'"에서 작은따옴표(')는 변수의 확장을 막는다. 따라서 이 문자열은 변수가 아닌 문자 그대로 출력된다.

58. 셸 스크립트를 실행하기 위해 밑줄친 ㄷ에 들어갈 명령으로 적당한 것은? (3점)

① ./intCompare.sh 36 68
② script inCompare.sh 36 68
③ ./intCompare 36 68
④ intCompare 36 68

정답: 1

58번 정답 해설:
정답 1번은 "./intCompare.sh 36 68"로, 현재 디렉터리에 있는 'intCompare.sh' 스크립트 파일을 실행하고, 그 인자로 '36'과 '68'을 전달한다. "./"는 현재 디렉터리를 나타내며, 이 경로를 사용하여 스크립트 파일을 실행한다.

오답 선지 해설:

  • ② "script intCompare.sh 36 68"는 'script' 명령을 사용하여 스크립트를 실행하는 형식이지만, 'script'는 세션 녹음을 위한 명령어이므로 스크립트 실행에는 적합하지 않다.
  • ③ "./intCompare 36 68"는 스크립트 파일의 이름이 잘못되었다. 올바른 파일명은 'intCompare.sh'이다.
  • ④ "intCompare 36 68"는 파일 경로를 지정하지 않았기 때문에, 현재 디렉터리에 파일이 있더라도 실행되지 않을 수 있다. 파일을 실행하기 위해서는 보통 "./"를 사용하여 현재 디렉터리의 파일임을 명시한다.

반응형