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

리눅스 문제 풀이 - 파일 시스템 관리, 프로세스 관리, 소프트웨어 관리, 쉘 스크립트

by Renechoi 2023. 11. 27.

리눅스의 파일로 취급되지 않는 것은?

  1. inode 테이블
  2. 디렉터리
  3. 하드디스크 장치
  4. 심벌릭 링크

정답: 1
해설: inode 테이블은 파일 시스템에서 중요한 정보를 저장하지만 그 자체가 파일로 취급되는 것은 아니다.

마운트할 파일 시스템의 목록을 가지고 있는 파일은?

  1. /dev/hda
  2. /dev/mapper
  3. /etc/fstab
  4. /etc/rc.local

정답: 3
해설: 부팅 시 자동으로 마운트되는 파일 시스템의 목록이 /etc/fstab에 라인별로 저장되어 있다.

하드디스크의 파티션을 생성하는 명령어는?

  1. fdisk
  2. fsck
  3. mkfs
  4. mkswap

정답: 1
해설: 하드디스크의 파티션을 생성하는 명령어는 fdisk이다.

파일 시스템 관리를 위한 명령어가 아닌 것은?

  1. fsck
  2. fdisk
  3. mkfs
  4. reiser

정답: 4
해설: reiser는 저널링을 최초로 지원했던 파일 시스템의 이름이다. fsck는 파일 시스템을 검사하는 명령이다.

볼륨 관리에 관한 설명으로 잘못된 것은?

  1. 여러 저장 장치를 묶어하나의 볼륨으로 만들 수 있다.
  2. 볼륨은 크기가 재조정될 수 있는 파티션이다.
  3. 볼륨 관리를 위한 도구로 fdisk 또는 mkfs를 사용한다.
  4. 논리 볼륨에 파일 시스템을 만들 수 있다.

정답: 3
해설: LVM이 볼륨 관리를 위한 도구이며 볼륨의 생성과 관리를 위한 여러 관련 명령을 포함한다.

파일 시스템이나 디스크 관리를 위해 사용되는 명령의 일반적 설명으로 올바른 것은?

  1. df - 사용자의 디스크 사용량 한도를 결정
  2. fdisk - 하드디스크 파티션을 관리하는 대화식 유틸리티
  3. fsck - 디스크 파티션에 리눅스 파일 시스템을 생성
  4. umount - 파일 시스템을 디렉터리에 붙여 사용할 수 있게 함

정답: 2

  1. df - 사용자의 디스크 사용량 한도를 결정: 이 설명은 잘못되었다. df 명령은 파일 시스템의 디스크 사용량을 보여주는 명령이지, 사용량 한도를 결정하는 기능을 하지 않는다.
  2. fdisk - 하드디스크 파티션을 관리하는 대화식 유틸리티: 이 설명은 정확하다. fdisk는 하드 디스크의 파티션을 생성, 수정, 삭제하는 데 사용되는 대화식 툴이다.
  3. fsck - 디스크 파티션에 리눅스 파일 시스템을 생성: 이 설명은 잘못되었다. fsck (file system check) 명령은 파일 시스템의 오류를 검사하고 수정하는 데 사용되며, 파일 시스템을 생성하는 명령이 아니다. 파일 시스템을 생성하는 명령은 mkfs와 같은 툴이다.
  4. umount - 파일 시스템을 디렉터리에 붙여 사용할 수 있게 함: 이 설명은 잘못되었다. umount 명령은 이미 마운트된 파일 시스템을 언마운트(분리)하는 데 사용된다. 파일 시스템을 마운트(붙이는)하는 명령은 mount이다.

파일에 사용되는 블록 수를 보여주는 명령어는?

  1. dc
  2. dd
  3. df
    4 du

정답: 4

  1. dc: 'dc'는 데스크탑 계산기(Desktop Calculator)를 의미하며, 간단한 계산이나 복잡한 수학적 연산을 수행하는 데 사용되는 명령어이다. 파일의 블록 수와는 관련이 없다.
  2. dd: 'dd' 명령어는 'data duplicator'의 약자로, 파일을 변환하거나 복사하는 데 사용된다. 이 명령어는 주로 백업, 복구, 파일 시스템의 콘텐츠 변환에 사용되며, 파일의 블록 수를 보여주는 기능은 제공하지 않는다.
  3. df: 'df' 명령어는 'disk free'의 약자로, 파일 시스템별로 사용 가능한 디스크 공간을 보여준다. 파일 시스템의 총 공간, 사용 중인 공간, 사용 가능한 공간 등을 보여주지만, 개별 파일에 사용된 블록 수를 보여주는 것은 아니다.
  4. du: 'du' 명령어는 'disk usage'의 약자로, 파일이나 디렉터리가 사용하는 디스크 공간의 양을 보여준다. 이 명령어는 파일이나 디렉터리가 차지하는 총 블록 수(보통 킬로바이트나 메가바이트 단위)를 보여주며, 개별 파일이나 디렉터리의 디스크 사용량을 파악하는 데 유용하다.

변경을 기록하는 로그를 두어 시스템 비정상 종료시 파일 시스템의 복구를 쉽게 하는 방법은?

  1. 단편화(fragmentation)
  2. 저널링(journaling)
  3. 테일패킹(tailpacking)
  4. 레이저(reiser)

정답: 2

프로세스 컨트롤 블록(PCB)에 관한 설명으로 옳지 않은 것은?

  1. PCB에는 프로세스의 PID가 저장된다.
  2. PCB의 문맥 교환 정보로 레지스터의 상탯값이 저장된다.
  3. PCB에는 프로세스가 할당받은 자원에 대한 정보가 저장된다.
  4. PCB는 해당 프로세스가 관리하는 메모리 영역 중 제일 앞에 위치한다.

정답: 4
해설: PCB는 커널에 의해 관리되고 커널 영역에 위치한다.

프로세스가 준비 상태에서 실행 상태로 전이되는 것은?

  1. 대기(block)
  2. 디스패치(dispatch)
  3. 선점(preemption)
  4. 웨이크업(wakeup)

정답: 2
해설: 디스패치 또는 스케줄이 준비 상태에서 실행 상태로 전이시킨다.

쉘에서 포어그라운드로 실행되는 프로세스를 stopped로 전환시키는 키입력은?

  1. ctrl + c
  2. ctrl + d
  3. ctrl + x
  4. ctrl + z

정답: 4
해설: ctrl+z 로 포어그라운드로 실행되는 프로세스를 멈춤 상태로 전환시킬 수 있다. 이어서 bg 명령을 수행하면 해당 프로세스가 백그라운드로 실행된다.

백그라운드 프로세스에 관한 설명으로 옳지 않은 것은?

  1. 쉘 프롬프트에서 명령 뒤에 &를 입력하면 백그라운드 프로세스로 실행된다.
  2. 백그라운드 프로세스는 키보드 입력을 받을 수 없다.
  3. 백그라운드 프로세스가 종료되어야만 셸이 명령대기상태가 된다.
  4. 장시간 실행되어야 하는 명령을 실행할 때 주로 사용된다.

정답: 3

  1. 쉘 프롬프트에서 명령 뒤에 &를 입력하면 백그라운드 프로세스로 실행된다.: 이 설명은 올바르다. 쉘에서 명령 끝에 '&'를 추가하면 해당 명령은 백그라운드에서 실행되며, 즉시 쉘 프롬프트로 돌아올 수 있다.
  2. 백그라운드 프로세스는 키보드 입력을 받을 수 없다.: 이 설명도 정확하다. 백그라운드 프로세스는 키보드 입력을 직접 받지 않는다. 키보드 입력은 포그라운드 프로세스에 할당된다.
  3. 백그라운드 프로세스가 종료되어야만 셸이 명령대기상태가 된다.: 이 설명은 잘못되었다. 백그라운드 프로세스가 실행되면 셸은 즉시 명령대기상태로 돌아간다. 즉, 백그라운드 프로세스의 실행 여부와 무관하게 셸은 사용자에게 프롬프트를 표시하고 다음 명령을 기다린다.
  4. 장시간 실행되어야 하는 명령을 실행할 때 주로 사용된다.: 이 설명은 올바르다. 장시간 실행되어야 하는 명령이나 사용자의 지속적인 상호작용을 필요로 하지 않는 명령은 백그라운드에서 실행하는 것이 효율적이다.

터미널을 빠져나가도 실행 중인 프로그램이 종료되지 않고 계속 수행되게 해주는 명령어는?

  1. exec
  2. fg
  3. nice
  4. nohup

정답: 4

다음 crontab 파일의 필드 표현 중에서 매주 월요일에 한번만 명령을 수행하게 하는 것은?

          • 1
  1. 1 * * * 1
  2. 1 1 * * 1
  3. 1 1 1 * 1

정답: 3

  1. * * * * 1: 이 표현은 매주 월요일마다, 하루에 24시간 동안 매분마다 명령을 실행한다는 의미이다.
  2. 1 * * * 1: 이 표현은 매주 월요일마다, 하루에 24시간 동안 매시간 1분에 명령을 실행한다는 의미이다.
  3. 1 1 * * 1: 이 표현은 매주 월요일에만, 새벽 1시 1분에 명령을 실행한다는 의미이다. 이는 매주 월요일에 한 번만 명령을 수행하게 하는 설정이 맞다.
  4. 1 1 1 * 1: 이 표현은 매년 1월 1일 월요일에만, 새벽 1시 1분에 명령을 실행한다는 의미이다. 만약 1월 1일이 월요일이 아니라면 이 명령은 실행되지 않는다.

crontab의 각 필드는 순서대로 분, 시, 일, 월, 요일을 나타낸다. 따라서, 매주 월요일에 한 번만 명령을 수행하게 하는 필드 표현은 '1 1 * * 1'이다.

프로세스를 모니터링하거나 관리하기 위한 명령으로 잘못된 것은?

  1. ps - 실행 중인 프로세스에 대한 정보를 보여줌
  2. top - 프로세스 모니터링과 관리를 위한 대화식 툴
  3. kill - 지정된 프로세스를 백그라운드 모드로 전환함
  4. nice - 프로세스를 실행할 때 우선순위 값을 설정함

정답: 3

rpm -qa | grep fire 를 실행하면 현재 시스템에 설치된 모든 패키지 중 무엇을 수행하는가 ?

  1. fire이라는 단어가 포함된 패키지만 출력한다.
  2. fire이라는 단어가 포함된 패키지만 삭제한다.
  3. fire이라는 단어가 포함된 패키지만 업그레이드한다.
  4. fire이라는 단어가 포함된 패키지만 설치한다.

정답: 1
해설: rpm -qa는 설치된 모든 패키지를 출력한다.

다음의 RPM 패키지에 대한 설명으로 잘못된 것은?

rpm-4.8.0-55.el6.i686
  1. 패키지의 이름은 rpm이다.
  2. 버전 번호는 4.8.0이다.
  3. 해당 버전에서 48번의 개선작업이 있었다.
  4. i686은 패키지가 설치될 수 있는 아키텍처의 종류이다.

정답: 3

  1. 패키지의 이름은 rpm이다.: 이 설명은 정확하다. 'rpm'은 이 RPM 패키지의 이름을 나타낸다.
  2. 버전 번호는 4.8.0이다.: 이 설명도 올바르다. '4.8.0'은 이 RPM 패키지의 버전을 나타낸다.
  3. 해당 버전에서 48번의 개선작업이 있었다.: 이 설명은 잘못되었다. '4.8.0-55'의 '55'는 릴리즈 번호를 나타내며, 이는 주로 패키지의 수정 또는 업데이트 횟수를 나타낸다. '48번의 개선작업'을 의미하지는 않는다.
  4. i686은 패키지가 설치될 수 있는 아키텍처의 종류이다.: 이 설명은 정확하다. 'i686'은 이 RPM 패키지가 설치될 수 있는 하드웨어 아키텍처를 나타낸다. i686은 일반적으로 32비트 인텔 호환 프로세서를 가리킨다.

다음 명령의 실행결과를 올바르게 설명한 것은?

# rpm -e mc
오류: failed dependencies:
    mc is needed by tkmc-4.1.36-1 kr
  1. 의존성 문제로 패키지를 설치할 수 없다.
  2. 의존성 문제로 패키지를 삭제할 수 없다.
  3. 의존성 문제로 패키지를 업데이트할 수 없다.
  4. 패키지가 삭제되었으나 기존 패키지에 의존성 문제가 발생한다.

정답: 2
해설: rpm 명령에서 -e 옵션은 패키지를 삭제하는 것이다.

RPM과 비교했을 때, DNF 패키지 관리의 장점은?

  1. 이미 설치된 패키지를 업그레이드 할 수 있다.
  2. 패키지의 변형 여부를 검증할 수 있다.
  3. 패키지의 설정 파일을 확인할 수 있다.
  4. 패키지의 의존성 문제를 해결할 수 있다.

정답: 4
해설: DNF는 의존성 문제를 해결해주는 명령 행 기반 유틸리이며 저장소 기반의 패키지 설치 기능을 제공하는 고수준의 패키지 관리도구이다.

RPM 패키지 관리자의 기능을 설명한 것으로 잘못된 것은?

  1. 패키지의 설치와 업그레이드 및 삭제 기능을 수행한다.
  2. 패키지에 관한 정보 확인 기능을 제공한다.
  3. 패키지의 의존성과 관련된 검사를 수행한다.
  4. 패키지를 설치할 때, 선행 패키지를 자동으로 설치해준다.

정답: 4
해설: 선행 패키지가 설치되어 있지 않으면 설치가 진행되지 않고 메시지만 출력된다.

두 파일을 각각 압축한 후 연결하여, 압축된 하나의 파일을 만드는 명령이 필요하다. 적당하지 않은 것은?

  1. gzip file1 file2 > bar.gz
  2. gzip -c file1 > bar.gz; gzip -c file2 >> bar.gz
  3. gzip -c file1 file2 > baz.gz
  4. cat file1 file2 | gzip > baz.gz

정답: 1

  1. gzip file1 file2 > bar.gz: 이 명령은 적절하지 않다. gzip 명령은 파일을 개별적으로 압축하며, file1.gzfile2.gz와 같은 별도의 파일로 결과를 생성한다. 또한, gzip은 표준 출력을 통해 결과를 다른 파일로 리다이렉트하는 기능을 지원하지 않는다.
  2. gzip -c file1 > bar.gz; gzip -c file2 >> bar.gz: 이 명령은 적절하다. 여기서 gzip -c file1 > bar.gzfile1을 압축하여 bar.gz에 저장하고, gzip -c file2 >> bar.gzfile2를 압축하여 기존 bar.gz 파일에 추가한다.
  3. gzip -c file1 file2 > baz.gz: 이 명령도 적절하다. gzip -c file1 file2 > baz.gzfile1file2를 연속적으로 압축하여 단일 파일 baz.gz에 저장한다.
  4. cat file1 file2 | gzip > baz.gz: 이 명령은 또한 적절하다. cat file1 file2 | gzip > baz.gzfile1file2를 연결(cat)하여 그 출력을 gzip으로 압축하고, 결과를 baz.gz에 저장한다.

tar 파일로 묶여 있는 sensor.tar 아카이브에서 파일 목록을 보고자 할 때 사용하는 것은?

  1. tar cvf sensor.tar
  2. tar xvf sensor.tar
  3. tar tvf sensor.tar
  4. tar rvf sensor.tar

정답: 3

  1. tar cvf sensor.tar: 이 명령은 새로운 tar 아카이브를 생성하는 데 사용되며, cvf는 생성(create), 자세히 보기(verbose), 파일(file)을 의미한다. 이미 존재하는 tar 파일의 내용을 보기 위한 명령이 아니다.
  2. tar xvf sensor.tar: 이 명령은 tar 아카이브를 추출하는 데 사용되며, xvf는 추출(extract), 자세히 보기(verbose), 파일(file)을 의미한다. 이 명령은 아카이브의 내용을 디스크로 추출하지만, 단순히 목록을 보기 위해서는 적합하지 않다.
  3. tar tvf sensor.tar: 이 명령은 tar 아카이브의 내용을 보기 위해 사용되며, tvf는 테이블(table) 혹은 목록(list), 자세히 보기(verbose), 파일(file)을 의미한다. 이 명령은 sensor.tar 아카이브 내의 파일 목록을 화면에 출력한다.
  4. tar rvf sensor.tar: 이 명령은 기존 tar 아카이브에 파일을 추가하는 데 사용되며, rvf는 추가(append), 자세히 보기(verbose), 파일(file)을 의미한다. 이미 존재하는 tar 파일의 내용을 보기 위한 명령이 아니다.

gzip 명령어에서 압축률을 높이기 위한 옵션은?

  1. -h
  2. -9
  3. -t
  4. -1

정답: 2
설명: gzip 명령에서 -number 옵션을 사용할 수 있다. 숫자 1~9는 압축률을 의미하며 9가 가장 높고 기본은 6이다.

셸 스크립트를 /bin/bash가 해석한다는 의미로 셸 스크립트 파일의 첫 번째 행에 지정해야 하는 내용은?

  1. !#/bin/bash
  2. #!/bin/bash
  3. $#/bin/bash
  4. #$/bin/bash

정답: 2
해설: #!/bin/bash가 셸 스크립트를 /bin/bash가 해석한다는 의미이다.

다음 중 셸 스크립트에서 첫 번째 명령 행 인수를 뜻하는 것은?

  1. $[1]
  2. ${1}
  3. $[1]
  4. %{1}

정답: 2

  1. $[1]: 이 형식은 셸 스크립트에서 표준적인 인수 표현이 아니다. 대괄호([])는 일반적으로 수학 계산이나 배열 인덱스에 사용된다.
  2. ${1}: 이 형식은 셸 스크립트에서 첫 번째 명령 행 인수를 나타내는 올바른 방법이다. $1, $2, $3, ... 등과 같이 사용되며, 각각 첫 번째, 두 번째, 세 번째 인수를 나타낸다.
  3. $[1]: 이 형식 역시 셸 스크립트에서 인수를 나타내는 표준적인 방법이 아니다. $[ ... ] 구문은 주로 산술 연산에 사용된다.
  4. %{1}: 이 형식은 셸 스크립트에서 사용되는 인수 표현 방식이 아니다. % 기호는 셸 스크립트에서 일반적으로 사용되지 않는다.

셸에서 사용하는 특수 문자 중 둘러싸인 내용을 전혀 해석하지 말라는 의미를 가진 것은?

  1. ' '
  2. " "
  3. \ \

정답: 2
해석: 셸은 작은 따옴표로 둘러싸인 내용을 전혀 해석하지 않는다.

다음 셸 스크립트를 실행했을 때의 출력은?

a=0
for ((n=1; n<10; n=n+2))
do
    a=$(expr $a + $n)
done
echo $a
  1. 출력없음
  2. 10
  3. 25
  4. 45

정답: 3
해설: 반복문을 해석하면 결과적으로 a=1+3+5+7+9이고 echo 명령에 의해 셸 변수 a의 값인 25가 출력된다.

다음은 셸의 test 명령에서 사용할 수 있는 연산자이다. 파일이 존재하는지 확인하는 연산자는?

  1. -e
  2. -f
  3. -n
  4. -x

정답: 1
해설: if 조건문의 조건 검사 부분에 test -e file 또는 [ -e file] 을 사용하여 file의 존재 여부를 확인할 수 있다.

BASH 셸에서 myScript라는 셸 스크립트를 디버깅 모드에서 실행하는 옵션은?

  1. bash -d myScript
  2. bash --debug myScript
  3. bash -i myScript
  4. bash -x myScript

정답: 4

  1. bash -d myScript: 이 옵션은 BASH에서 표준적인 디버깅 옵션이 아니다. bash -d는 일반적으로 사용되지 않는 옵션입니다.
  2. bash --debug myScript: BASH 셸에서 --debug 옵션은 존재하지 않습니다. 이는 BASH 셸의 표준 옵션이 아닙니다.
  3. bash -i myScript: -i 옵션은 대화형(interactive) 셸을 시작하는 데 사용됩니다. 이것은 디버깅 모드를 활성화하는 옵션이 아닙니다.
  4. bash -x myScript: -x 옵션은 BASH 셸 스크립트를 디버깅 모드에서 실행하는 데 사용됩니다. 이 옵션을 사용하면 스크립트가 실행될 때마다 셸이 수행하는 모든 명령과 그 인수가 화면에 출력됩니다. 이는 스크립트의 동작을 추적하고 문제를 진단하는 데 유용합니다.

셸에서 괄호 안의 명령을 실행하여 명령의 결괏값으로 치환하라는 의미를 가진 것은?

  1. @(명령)
  2. @{명령}
  3. $(명령)
  4. ${명령}

정답: 3

  1. @(명령): 이 형식은 셸 스크립트에서 표준적인 명령 치환 형식이 아니다.
  2. @{명령}: 이 형식도 셸 스크립트에서 사용되는 표준적인 명령 치환 형식이 아니다.
  3. $(명령): 이 형식은 셸 스크립트에서 명령 치환을 위해 사용되는 표준 방법이다. 괄호 안에 있는 명령이 실행되고, 그 출력이 명령이 있는 위치에 치환된다.
  4. ${명령}: 이 형식은 변수 확장을 위해 사용되며, 명령 치환을 위한 것이 아니다.

명령 치환은 셸에서 명령의 출력을 다른 명령의 입력으로 사용하고자 할 때 사용되는 기법이다. 예를 들어, $(date)date 명령의 출력을 치환하는 데 사용된다. 따라서, 명령의 결괏값으로 치환하라는 의미를 가진 표현은 '$(명령)'이다.

다음과 같이 입력한 숫자에 맞춰 역삼각형을 출력하는 셸 스크립트를 작성하시오.

Number: 5
#####
####
###
##
#

정답:

#!/bin/bash

echo -n "Number: "
read num

while [ $num -gt 0 ]; do
    for ((i=1; i<=num; i++)); do
        echo -n "#"
    done
    echo
    let num=num-1
done

이 스크립트는 사용자로부터 숫자를 입력받아(read num), 해당 숫자만큼의 줄에 대해 # 문자를 출력하여 역삼각형을 만든다. while 반복문은 $num이 0보다 클 때까지 반복되며, 각 반복마다 내부의 for 반복문을 통해 $num 개수만큼의 #을 출력하고 줄바꿈(echo)을 한다. 그 후 $num 값을 하나 줄여 다음 줄의 출력을 준비한다.

주요 부분에 대한 설명은 다음과 같다:

  • echo -n "Number: ": 사용자로부터 숫자 입력을 요청한다.
  • read num: 사용자가 입력한 숫자를 num 변수에 저장한다.
  • while [ $num -gt 0 ]: $num이 0보다 클 동안 반복한다 (-gt는 'greater than', 즉 '보다 큰'을 의미한다).
  • for ((i=1; i<=num; i++)): 1부터 num까지 반복하며, echo -n "#": #을 한 줄에 num 개수만큼 출력한다.
  • echo: 줄바꿈을 위해 사용한다.
  • let num=num-1: num 값을 하나 줄여 다음 줄의 # 개수를 줄인다.

다음 스크립트의 기능을 설명하라.

#!/bin/bash
function sum()
{
    n = $1
    s = 0 
    while [$n -le $2] 
    do
        s = $( expr $s + $n)
        n = $( expr $n + 1)
    done
    return $s
 }

 if [ $# -ge 2]; then
     sum $1 $2
    echo $?
 fi

제시된 스크립트는 두 개의 정수 인수를 받아 그 사이에 있는 모든 정수들의 합을 계산하고, 그 결과를 출력하는 기능을 한다.

  1. 함수 정의 (sum): sum이라는 함수를 정의한다. 이 함수는 두 개의 인수를 받아 ($1$2), 이 두 인수 사이에 있는 모든 정수의 합을 계산한다.
  2. 변수 초기화: n을 첫 번째 인수 $1로, s(합계)를 0으로 초기화한다.
  3. while 루프: n이 두 번째 인수 $2보다 작거나 같은 동안 루프를 반복한다.
  4. 합계 계산: expr 명령을 사용하여 n의 현재 값과 s의 현재 값의 합을 계산하고, 그 결과를 s에 저장한다.
  5. n 증가: n의 값을 1씩 증가시킨다.
  6. 결과 반환: 최종 합계 s를 함수의 반환 값으로 사용한다.
  7. 메인 스크립트: 스크립트에 전달된 인수의 개수가 2개 이상인지 확인한다 ($# -ge 2).
  8. 함수 호출과 결과 출력: 조건이 참이면 sum 함수를 호출하고, 함수의 반환 값($?)을 echo 명령을 통해 출력한다.

 

 

 


참고 자료: Unix 시스템 (김희천, 김진욱 공저, KNOU press 출판)

반응형