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

리눅스 저장 장치 이름과 표준 디렉터리, 셸 사용하기, 셸 명령, 명령의 연결과 확장, 셸 변수, 리눅스 예상 문제

by Renechoi 2023. 11. 29.

리눅스 저장 장치 이름과 표준 디렉터리

파티션

  • 하드디스크를 논리적으로 나눈 구역
  • 파티션 별로 파일 시스템을 만들 수 있음
  • 윈도우에서는 각 파티션마다 각각의 드라이브로 지정
  • 리눅스는 오직 1개의 루트 디렉터리만을 가짐
  • 리눅스는 하드 디스크나 주변 장치를 파일로 취급함

장치 이름

  • 리눅스에서 사용하는 하드 디스크 장치 또는 파티션 이름
  • IDE 디스크: 이름에 'hd'를 붙임
    • /dev/hda, /dev/hdb, ...
  • SCSI 디스크: 이름에 'sd'를 붙임
    • /dev/sda, /dev/sdb, ...
  • 물리적인 하드디스크가 추가될 때 알파벳 순서대로 함
  • 파티션 번호는 숫자를 1부터 차례대로 붙임
    • /dev/hda1, /dev/hda2, ...
  • CD 또는 DVD
    • /dev/sr0, /dev/sr1, ...

리눅스 표준 디렉터리

루트 디렉터리 : /

  • 파일 시스템의 바탕을 이루는 중요한 디렉터리
  • 모든 파일과 디렉터리의 최상위 디렉터리

바이너리 디렉터리: /bin, sbin

  • 기본적인 명령의 실행 파일을 포함(/bin)
  • 부팅 과정이나 시스템 관리에 필요한 명령의 실행 파일을 포함(/sbin)

부트 디렉터리: /boot

  • 커널 이미지(vmlinuz)와 부트 로더의 설정 파일을 포함

디바이스 디렉터리: /dev

  • 장치를 접근하는데 사용되는 '디바이스 파일'이 위치함

시스템 설정 파일 디렉터리: /etc

  • 시스템의 중요한 환경 설정 파일이 위치함

사용자 계정 디렉터리: /home

  • 사용자 계정의 홈 디렉터리가 만들어지는 디렉터리
  • 예: /home/kdhong
  • 사용자의 홈 디렉터리는 해당 사용자만 사용할 수 있는 독립적인 공간

공유 라이브러리 디렉터리: /lib

  • 프로그램들이 사용하는 시스템 라이브러리 파일이 위치함

미디어 디렉터리: /media

  • 이동식 저장 장치가 마운트 될 때 마운트 지점을 제공하는 디렉터리

시스템 정보 디렉터리: /proc

  • 커널이 사용하는 가상의 파일 시스템

루트 계정의 디렉터리: /root

  • root 계정의 홈 디렉터리

사용자 디렉터리: /usr

  • /usr/bin, /usr/sbin: 여러가지 실행 파일
  • /usr/include: 라이브러리 헤더 파일
  • /usr/lib: 실행 파일을 위한 사용자 라이브러리

가변 자료 저장 디렉터리: /var

  • 시스템 운영 중에 필요한 가변 자료가 저장되는 디렉터리
  • 시스템 작동 로그, 인쇄용 스풀 영역, 사용자 메일 받스 등

요약

  • Rocky Linux는 레드햇 앤터프라이즈 리눅스의 소스 코드를 사용하여 만들었다.
  • Rocky Linux를 설치하기 위해 ISO 이미지 파일을 준비해야 한다.
  • 리눅스를 설치하는 방법으로 '하드디스크의 비어 있는 파티션에 설치'하는 방법과 가상머신 소프트웨어를 이용하여 게스트 운영체제로 설치'하는 방법이 있다.
  • 가상머신 소프트웨어란 하나의 물리적 컴퓨터에 추가로 가상머신을 만들어주는 소프트웨어다.
  • 저장장치를 사용하려면 해당 저장장치의 이름을 파일 시스템의 특정 디렉터리에 마운트시켜야 한다.
  • 리눅스에는 하나의 루트 디렉터리만 존재한다. 또한 용도가 정해진 표준 디렉터리가 존재한다.
  • 루트 디렉터리 /는 모든 파일과 디렉터리의 최상위 디렉터리로 절대경로의 기준이 된다.
  • /etc 디렉터리는 시스템의 중요한 환경 설정 파일과 passwd 파일, fstab 파일 등이 저장된다.
  • 리눅스를 설치할 때 정한 루트 계정 root의 암호를 반드시 기억해야 한다.

셸 개요

명령어 해석기 또는 명령 행 인터페이스

  • 사용자와 커널 사이에서 명령어를 해석하여 처리
  • 셸 명령을 사용하면 GUI로 하기 힘든 다양한 기능을 수행할 수 있음

셸 명령을 프로그램으로 작성하여 처리할 수도 있음

  • 셸 스크립트는 텍스트 파일로, 프로그래밍을 통한 셸 명령의 조합
  • 반복적으로 수행되는 작업을 셸 스크립트로 작성할 수 있음
  • 셸이 셸 스크립트 파일을 읽어 처리할 수 있음

텍스트 모드로 로그인을 하면 기본 셸이 주어짐

셸 사용하기

텍스트 모드에서 로그인하면 자동으로 '로그인 셸'이 실행됨

GNOME 데스크톱에서는 '터미널 창'을 실행시켜 셸을 사용함

- 현재 활동 > 터미널 
- 여러 터미널 창을 띄워 사용할 수 있음
- 터미널 창은 명령 프롬프트와 명령 행을 제공함 

기본적으로 한 개의 명령을 입력하고 엔터를 눌러 명령을 수행

  • 결과가 출력되면 명령 프롬프트가 다시 등장
  • 세미 클론을 사용하여 한 라인에 여려 명령을 입력할 수 있음

셸의 종류

  • 많은 리눅스 배포판에서 Bash를 기본 셸로 사용함 -> 명령 프롬프트로 일반 사용자는 $, root는 #을 사용
  • 셸의 종류에 따라 에일리어스 설정, 초기화 파일, 셸 스크립트 작성법, 명령 행 완성 기능, 명령 행 편집 기능 등에 차이가 있음

Bash 셸

  • Bourne Again Shell로 Bourne 셸의 개선된 버전 -> 많은 셸 스크립트 문법이 Bourne 셸 기반을 둠
  • C 셸과 Korn 셸의 유용한 기능을 가져옴
  • 실행 명령은 /bin/bash
    • /etc/passwd 파일에 다음과 같은 라인이 있음
    • kdhong:x:1000:1000:KilDong Hong:/home/kdhong:/bin/bash

사용자 'kdhong'의 홈 디렉토리가 /home/kdhong이고, 기본 셸로 /bin/bash를 사용한다는 것을 의미.

셸 선택하기

기본 셸을 변경할 수 있음 -> chsh -s /bin/sh

  1. chsh: 이것은 "Change Shell"의 약자로, 사용자의 로그인 셸을 변경하는 데 사용되는 명령어.
  2. -s 옵션: 이 옵션은 '셸 변경'을 의미. 즉, 사용자가 사용하고 싶은 새로운 셸을 지정할 수 있게 해 줌.
  3. /bin/sh: 이 부분은 변경하고자 하는 새로운 셸의 경로. /bin/sh는 전통적인 Bourne 셸을 나타내며, 많은 시스템에서는 Bash 셸이나 다른 호환 셸로 대체되어 사용.

터미널 창을 '대화형 셸'이라고도 함

  • 셸을 종료하려면 exit 명령 또는 ctrl + d를 실행
  • '로그인 셸'이 아님

로그인 셸과 비로그인 셸을 구별해야 함

  • logout 명령은 로그인 셸에서만 가능
  • 참고로 ctrl + alt + F1~F6 으로 가상 콘솔을 사용할 수 있음
  • 셸 프롬프트에서 셸 프로그램을 실행하면 '서브 셸이 실행됨
  1. 로그인 셸(Login Shell):
    • 정의: 로그인 셸은 사용자가 시스템에 로그인할 때 시작되는 셸. 이는 보통 사용자 이름과 비밀번호를 입력하여 접근하는 방식으로 시작.
    • 환경 설정: 로그인 셸은 사용자의 환경을 설정하기 위해 .profile, .bash_profile, .bash_login 등의 초기화 파일을 실행.
    • 로그아웃 가능: 로그인 셸에서는 logout 명령을 사용하여 셸 세션을 종료할 수 있음. 이 명령은 비로그인 셸에서는 사용할 수 없음.
  2. 비로그인 셸(Non-Login Shell):
    • 정의: 비로그인 셸은 시스템에 로그인한 후 새로운 터미널 창을 열거나, 새 셸 프로세스를 시작할 때 실행되는 셸.
    • 환경 설정: 비로그인 셸은 로그인 셸과 달리 .bashrc와 같은 구성 파일을 실행하여 환경을 설정. 이 파일은 셸이 시작될 때마다 실행.
    • 서브 셸(Sub Shell): 셸 프롬프트에서 다른 셸 프로그램을 실행하면, 그것은 '서브 셸'이 실행되는 것. 이는 부모 셸의 자식 프로세스로, 독립적인 셸 환경을 제공.
  3. 가상 콘솔(Virtual Console):
    • 시스템에서는 Ctrl + Alt + F1에서 F6까지의 키 조합을 사용하여 여러 가상 콘솔을 사용할 수 있다. 각각의 가상 콘솔은 독립적인 로그인 세션을 제공하며, 사용자는 이를 통해 다양한 작업을 동시에 수행할 수 있다.

셸 명령

셸 명령의 형식

$ 명령어 옵션 인수

  • 예: usermod -L kdhong
  • 옵션과 인수는 여럿일 수 있으며 선택적 또는 필수적

대개 명령어는 프로그램의 이름

관리자 명령 또는 일반 사용자 명령이 있음

가장 간단한 형태의 실행은 명령의 이름만 사용하는 것

  • who, date, ls, pwd

chsh 명령

기본 셸을 바꾸는 명령

chsh [options] [username]

  • 대괄호는 생략 가능, 이탤릭체는 적당한 내용으로 대체되어야 함을 의미
  • 복수는 여러 개가 가능하다는 의미

옵션과 인수

짧은 옵션 (-)

  1. ls -l: ls 명령은 디렉토리의 내용을 나열. -l 옵션은 "긴 형식"으로 출력하여, 파일의 권한, 소유자, 크기, 수정 날짜 등의 상세한 정보를 함께 보여줌.

  2. ls -lat: 이 명령은 여러 옵션을 결합. -l은 상세 정보를, -a는 숨겨진 파일을 포함한 모든 파일을, -t는 파일을 최종 수정 시간 순으로 정렬하여 보여줌. ls -latls -l -a -t는 동일한 결과를 출력.

긴 옵션 (--)

  1. ls --all: 이 명령은 ls -a와 동일하게 동작. --all은 숨겨진 파일(이름이 .으로 시작하는 파일)을 포함한 모든 파일과 디렉토리를 보여줌.

인수는 명령의 수행 대상을 지정하는 것

  1. cat -n /etc/passwd: cat 명령은 파일의 내용을 표시. -n 옵션은 각 줄에 줄 번호를 추가하여 출력. /etc/passwd는 이 명령의 인수로, 이 파일의 내용을 줄 번호와 함께 보여줌.

  2. grep "KilDongHong" /etc/passwd: grep 명령은 텍스트를 검색. 이 경우, /etc/passwd 파일에서 "KilDongHong" 문자열을 포함하는 모든 줄을 찾아 출력.

옵션도 인수를 가질 수 있음

  1. chsh -s /bin/sh kdhong: chsh 명령은 사용자의 로그인 쉘을 변경. -s 옵션은 사용할 쉘을 지정하며, /bin/sh는 쉘의 경로. kdhong은 해당 변경을 적용할 사용자의 이름.

  2. chsh --shell=/bin/bash kdhong: 이 명령도 chsh -s /bin/sh kdhong와 유사하게 동작. 여기서는 --shell이라는 긴 옵션을 사용해 쉘을 /bin/bash로 변경하며, 이 변경은 kdhong 사용자에게 적용.

명령어의 종류

  • 에일리어스: alias 명령을 사용하면 만든 명령의 별칭
  • 셸 예약어: 예약된 단어로 do, while, case 등
  • 함수: 셸에서 수행되는 함수의 정의
  • 내장 명령: 셸 내부에 존재하는 명령으로 cd, echo, pwd 등
  • 일반 명령: 실행 파일이 존재하는 명령

환경변수 PATH에 설정된 경로 중에 실행 파일이 존재하면 명령의 이름만으로 실행이 가능

  • 아니면 해당 실행 파일의 절대 경로를 사용해야 함
  • 현재 디렉터리(.)는 보통 PATH에 포함되어 있지 않음
  • echo $PATH로 저장된 경로를 확인할 수 있음

alias 명령

자주 사용되는 명령의 단축 명령을 만드는 명령

  • alias
  • alias la='ls -A'
  • alias rm='rm -i'

계속 유지하려면 셸의 환경 설정 파일에 기록해야 함

type 명령

명령이 어떻게 해석되는지 알려주는 명령

  • type cd
  • type -a ls

which 명령

실행 프로그램을 환경변수 PATH를 기초로 찾아 경로를 출력함

  • which rm

man 명령

  • 매뉴얼 페이지를 보여주는 명령
    • 명령의 사용법이나 설정 파일 등에 관한 온라인 도움말을 제공
    • man passwd 또는 man 5 passwd
    • 명령어의 간단한 도움말 -> 명령--help
  • 섹션 1: 사용자 명령
  • 섹션 2: 커널의 시스템 호출
  • 섹션 3: c 라이브러리 함수
  • 섹션 4: 디바이스 드라이버 정보
  • 섹션 5: 시스템의 설정 파일
  • 섹션 6: 게임
  • 섹션 7: 파일 포맷, 인코딩 등
  • 섹션 8: 시스템 관리 명령

명령 히스토리

history 명령

  • 이전에 수행했던 명령 행의 목록을 불러옴
    • history 또는 history 10

히스토리 기능을 이용하여 명령을 실행하는 방법

- 이전에 수행했던 명령을 이용하여 명령을 수행할 수 있음
- 다음을 입력하고 실행함 
  • !! + 엔터: 직전 명령을 실행함
  • !n + 엔터: 히스토리 목록에서 해당 명령을 실행함
  • !string + 엔터: 지정된 문자열로 시작하는 최근 명령을 실행함
  • 위 또는 아래 버튼: 누를 때마다 직전 또는 직후 명령을 불러옴. 편집 가능

명령 행 완성 기능

  • 일부만 입력하고 나머지를 자동으로 완성하는 기능
  • 처음 몇 자만 입력후, tab 혹은 방향키를 누르면 실행 됨
    • 명령어, 변수($), 파일, 디렉터리(~ 또는 -)등을 구분하여 결정함
    • ~username은 해당 사용자의 홈 디렉터리를 의미
$ whoa
$ echo $OS
$ cd ~ro
  • 정보가 충분하지 않은 경우, 방향키를 한번 더 누르면 모든 가능한 경우를 보여주고 원래의 명령 행이 유지됨

명령의 연결과 확장

특수 문자

  • 셸에서 특수한 의미를 가지는 문자
  • 백슬래시(): 특수 문자의 기능을 제거하는 이스케이프 문자 또는 긴 명령 행을 분리할 때 사용
  • 틸드(~): ~ 또는 ~username은 사용자의 홈 디렉터리를 의미
  • 도트(.): 현재 작업 디렉터리를 표시, 또는 명령 행의 맨 앞에서 셸 스크립트를 실행하는 source 명령
  • 더블도트(..): 현재 디렉터리의 부모 디렉터리
  • 파운드(#): 문자의 뒤에 나타나는 문자를 주석으로 처리
  • 달러($): $ 변수는 변수의 값을 추출
  • 앰퍼샌드(&): 명령&는 명령을 백그라운드로 실행시킴
  • 애스터리스크(*): 파일 이름에서 사용할 때 0개 이상의 임의 문자열과 대응됨
  • 물음표(?): 파일 이름에서 사용할 때 1개 문자와 대응됨
  • 파이프(|): 앞 명령의 출력을 다음 명령의 입력으로 연결시킴
  • < 또는 >: 입출력 리다이렉션에서, 즉 파일로부터 입력받을 때 또는 파일로 출력할 때 사용
  • >>: 표준 출력을 파일의 끝에 덧붙일 때 사용
  • 느낌표(!): 명령 히스토리 기능을 이용할 때 사용

파이프

  • 앞 명령의 출력 결과를 다음 명령의 입력으로 연결
  • 명령1 | 명령2
    • cat /etc/passwd | sort | more

입출력 리다이렉션

  • 명령 < 파일
    • 명령 수행에 필요한 입력을 표준 입력 대신에 파일로부터 얻음
    • sort < /etc/passwd
  • 명령 > 파일
    • 명령 수행의 결과를 표준 출력으로 보내지 않고 파일에 기록함
    • grep typedef /usr/include/* > typedef.out
  • 명령 2 > 파일
    • 명령 수행 중 표준 오류 출력을 파일에 덧붙임
    • ls 2 >> error.txt

명령 치환

  • 명령을 수행할 때, 명령의 인수로서 다른 명령의 결과를 사용
  • $(command) 또는 command -> 역 따옴표
$ ls -l$(which passwd)
-rwxr-xr-x 1 root root 54256 Jan 18  2022 /usr/bin/passwd

$ which passwd
/usr/bin/passwd

$ ls -l /usr/bin/passwd
-rwxr-xr-x 1 root root 54256 Jan 18  2022 /usr/bin/passwd

$ echo "there are $(ls | wc -w) files in the directory"
there are 23 files in the directory

인용 부호

  • 빈칸을 포함하는 문자열을 1개의 인수로 사용할 때 인용 부호가 필요함
  • 작은 따옴표 ('')는 특수 문자의 의미를 제거함
  • 큰 따옴표 ("")는 $, ``, , !를 해석하여 확장함
  • 백슬래시()는 $, `, ", ', \ 앞에서 특수 문자이 의미를 제거함
$ echo "$(date)"
Tue Nov 29 10:00:00 UTC 2023

$ echo "\$(date)"
$(date)

$ echo 'Today is $(date)'
Today is $(date)
  1. $ echo "$(date)":
    • 큰 따옴표 안에 있는 $(date)는 현재 날짜와 시간을 출력하는 명령 치환을 수행.
  2. $ echo "\$(date)":
    • 백슬래시는 $ 기호 뒤의 특수한 의미를 제거하여, 문자열 $(date)가 그대로 출력.
  3. $ echo 'Today is $(date)':
    • 작은 따옴표는 내부의 모든 특수 문자의 의미를 제거하여, Today is $(date)라는 문자열이 그대로 출력.

수식과 변수의 확장

  • 명령 수행 전에 수식의 결과를 계산하여 전달
  • $ [수식] 또는 $ ((수식))
  • 명령 수행 전에 변수의 값을 추출하여 전달
  • $변수
$ echo "I am$[2023-1979] years old."
I am 44 years old.

$ echo BASH
/bin/bash

$ ls -l $BASH
-rwxr-xr-x 1 root root 1113504 Jan 1 00:00 /bin/bash
  1. $ echo "I am $[2023-1979] years old.":
    • $[수식]은 수식을 계산하여 결과를 문자열에 삽입. 여기서는 2023과 1979의 차이를 계산.
  2. $ echo $BASH:
    • 이 명령은 문자열 "BASH"를 그대로 출력. 여기서 $ 기호가 없기 때문에 환경 변수로 해석되지 않음.
  3. $ ls -l $BASH:
    • 이 명령은 $BASH 변수가 가리키는 경로, 즉 Bash 셸의 경로에 대한 상세 정보를 출력.

셸 변수

셸 변수와 환경 변수

셸 변수는 특정 데이터 또는 환경 설정을 위한 값을 저장

  • 기본적으로 문자열 정보를 저장함

셸 변수(지역 변수)

  • 변수가 정의된 셸에서만 사용이 가능하고, 서브 셸로는 전달되지 않음
  • $ NAME="KIM" $ echo $NAME KIM

환경 변수(전역 변수)

  • 현재 셸뿐만 아니라 서브 셸로도 전달
  • 보통 변수 이름으로 대문자를 사용함
  • 터미널 창을 열어 셸을 시작하면 이미 많은 환경 변수가 설정되어 있음
  • 시스템의 모든 환경 변수의 이름과 값을 출력 하려면 printenv 명령을 사용
  • epxport -p는 현재 셸의 모든 환경 변수를 출력

변수 설정과 환경 변수로 만드는 방법

  • 변수 = 값; export 변수
  • 또는 export 변수=변수

특정 환경 변수의 값을 확인하는 방법

  • printenv 변수
  • echo $ 변수는 모든 변수 값을 확인할 수 있음
$ FOO=bar
$ export FOO
$ sh
sh-5.1 $ echo $FOO
bar
sh-5.1 $ printenv FOO
bar
sh-5.1 $ exit
$ unset FOO
$ echo $FOO
코드 설명

환경 변수를 설정하고, 그 값을 다른 방법으로 확인한 다음, 해당 변수를 해제하는 과정을 보여줌

  1. $ FOO=bar:
    • 이 명령은 FOO라는 쉘 변수에 bar라는 값을 할당. 이 시점에서 FOO는 아직 환경 변수가 아니므로 다른 프로세스에서는 볼 수 없다.
  2. $ export FOO:
    • export 명령을 사용하여 FOO를 환경 변수로 만듦. 이제 이 변수는 셸의 하위 프로세스에서도 접근 가능해진다.
  3. $ sh:
    • 새로운 셸 세션을 시작. 여기서는 새로운 셸 프로세스가 생성.
  4. sh-5.1 $ echo $FOO:
    • 새로운 셸 세션에서 echo $FOO 명령을 실행하여 FOO 환경 변수의 값을 출력. 결과는 bar.
  5. sh-5.1 $ printenv FOO:
    • printenv 명령을 사용하여 FOO 환경 변수의 값을 출력. 이것도 bar를 반환.
  6. sh-5.1 $ exit:
    • 현재 셸 세션(하위 셸)을 종료하고 원래의 셸로 돌아간다.
  7. $ unset FOO:
    • unset 명령을 사용하여 FOO 환경 변수를 해제. 이제 이 변수는 더 이상 존재하지 않는다.
  8. $ echo $FOO:
    • FOO 변수의 값을 출력하려고 시도하지만, FOO는 이미 해제되었으므로 아무것도 출력되지 않는다.
  • HISTSIZE: 1개 셸에서 저장되는 명령 히스토리 목록의 최대 개수로 기본 값은 1000
  • HOME: 홈 디렉터리
  • MAIL: 사용자의 메일박스에 해당하는 파일로 보통 /var/spool/mail/username
  • PATH: 명령을 수행할 때 실행 파일을 찾기 위한 디렉터리 목록
  • PS1: 셸 프롬프트를 표시하기 위한 문자열
  • SHELL: 사용 중인 기본 셸
  • PWD: 현재 작업 디렉터리
  • USER: 현재 사용자 계정

로그인과 셸의 환경 설정 파일

로그인할 때 또는 셸을 시작할 때 자동으로 실행되는 명령을 저장한 파일

  • 시스템 환경 설정 파일과 사용자 환경 설정 파일이 있음
  • 셸의 종류에 따라 다른 이름의 설정 파일을 사용함
  • bash 셸의 경우 다음과 같음
  • /etc/profile:
    • 모든 사용자에게 적용
    • 로그인할 때 가장 먼저 수행됨
    • PATH, MAIL, HISTSIZE 등 전역의 환경 변수가 설정됨
  • ~/.bash_profile:
    • 로그인할 때 수행되며 개별 사용자에게 적용
    • 내부에서 ~/.bashrc를 실행
  • ~/.bashrc:
    • 셸을 시작할 때마다 수행되며 개별 사용자에게 적용됨
    • 보통 내부에서 /etc/bashrc를 실행
  • /etc/bashrc:
    • 모든 사용자에게 적용
    • 셸을 시작할 때마다 수행됨
    • PS1 설정, 에일리어스 설정, umask를 사용한 접근 권한의 초기값, 함수 등을 설정
  • ~/.bash_logout:
    • 로그아웃을 수행할 때 실행되는 스크립트 파일
  1. /etc/profile:
    • 용도: 이 파일은 시스템 전체에 영향을 미치는 환경 설정을 포함.
    • 특징: 시스템의 모든 사용자에게 적용되며, 사용자가 로그인 셸을 시작할 때 가장 먼저 실행된다.
    • 내용: 전역 환경 변수 설정(예: PATH, MAIL, HISTSIZE 등)이 포함.
  2. ~/.bash_profile:
    • 용도: 개별 사용자의 로그인 셸 설정을 저장.
    • 특징: 사용자가 로그인할 때 실행되며, 사용자의 홈 디렉토리에 위치.
    • 내용: 주로 개인 환경 설정을 포함하며, ~/.bashrc 파일을 실행하여 사용자별 셸 설정을 불러온다.
  3. ~/.bashrc:
    • 용도: 개별 사용자의 비로그인 셸 설정을 저장.
    • 특징: 셸을 시작할 때마다 실행되며, 사용자별 설정을 포함.
    • 내용: ~/.bashrc는 보통 /etc/bashrc를 실행하여 시스템 전체 설정을 불러오며, 에일리어스 설정, 함수 정의, 셸 프롬프트(PS1) 설정 등을 포함한다.
  4. /etc/bashrc:
    • 용도: 시스템 전체의 비로그인 셸 설정을 저장.
    • 특징: 모든 사용자에게 적용되며, 셸을 시작할 때마다 실행.
    • 내용: 셸 프롬프트 설정, 에일리어스, umask를 이용한 파일 생성 권한의 초기 설정 등이 포함.
  5. ~/.bash_logout:
    • 용도: 로그아웃 시 실행되는 스크립트를 포함.
    • 특징: 사용자가 로그아웃할 때 실행되며, 개별 사용자의 홈 디렉토리에 위치.
    • 내용: 로그아웃 시 필요한 정리 작업, 예를 들어 임시 파일 삭제, 사용자 공지 사항 출력 등을 수행할 수 있다.

요약

  • 셸은 운영체제 커널과 사용자 사이에 존재하는 명령어 해석기 또는 명령 행 인터페이스이다.
  • Bash 셸은 Rocky Linux를 포함한 많은 리눅스 배포판에서 기본 셸로 사용된다.
  • 셸 명령의 종류로는 에일리어스, 셸 예약어, 함수, 내장 명령, 일반 명령 등이 있다.
  • 히스토리 기능과 명령 행 자동 완성 기능을 사용하면 빠르고 편리하게 명령 행을 작성할 수 있다.
  • 파이프(|)는 왼쪽 명령의 출력을 오른쪽 명령의 입력으로 연결 시킨다.
  • 입출력 리다이렉션은 셸 명령의 입력 또는 출력을 파일로 연결시킨다.
  • 명령 확장을 수행할 때 큰 따옴표(")는 작은따옴표(')와 다르게 따옴표 안에서 문자$, `, \를 해석한다.
  • 셸을 시작할 때 자동으로 수행되는 스크립트 파일이 존재한다.

예상 문제

1. 리눅스 시스템에서 하드 디스크나 주변 장치를 파일로 취급하는 이유는 무엇인가?
  • A) 파일 시스템의 일관성을 유지하기 위해
  • B) 디바이스 관리를 단순화하기 위해
  • C) 보안을 강화하기 위해
  • D) 메모리 관리를 효율적으로 하기 위해
  • 정답: B) 디바이스 관리를 단순화하기 위해
  • 해설: 리눅스는 디바이스를 파일처럼 취급함으로써 디바이스 관리를 단순화하고 사용자에게 친숙한 파일 시스템 인터페이스를 제공한다.
2. 리눅스에서 /home 디렉터리의 역할은 무엇인가?
  • A) 시스템의 모든 환경 설정 파일을 저장
  • B) 사용자 계정의 홈 디렉터리를 생성
  • C) 프로그램의 실행 파일을 저장
  • D) 시스템 정보를 저장
  • 정답: B) 사용자 계정의 홈 디렉터리를 생성
  • 해설: /home 디렉터리는 각 사용자 계정의 개인 데이터와 설정을 저장하는 홈 디렉터리를 위한 공간을 제공한다.
3. 셸 스크립트의 주요 기능은 무엇인가?
  • A) 그래픽 인터페이스 제공
  • B) 파일 시스템 관리
  • C) 명령어 해석 및 처리
  • D) 시스템 부팅 관리
  • 정답: C) 명령어 해석 및 처리
  • 해설: 셸 스크립트는 사용자와 커널 사이에서 명령어를 해석하고 처리하는 명령 행 인터페이스로, 다양한 시스템 작업을 자동화하고 간소화하는 데 사용된다.
4. 리눅스 시스템에서 chsh -s /bin/sh kdhong 명령어의 기능은 무엇인가?
  • A) 사용자 'kdhong'의 비밀번호 변경
  • B) 사용자 'kdhong'의 셸을 /bin/sh로 변경
  • C) 시스템의 기본 셸을 /bin/sh로 변경
  • D) 'kdhong' 사용자를 새로 생성
  • 정답: B) 사용자 'kdhong'의 셸을 /bin/sh로 변경
  • 해설: chsh 명령어는 사용자의 로그인 셸을 변경하는 데 사용되며, 이 예에서는 사용자 'kdhong'의 기본 셸을 /bin/sh로 변경한다.
5. 리눅스 시스템에서 'history' 명령어의 기능은 무엇인가?
  • A) 시스템의 로그 파일 표시
  • B) 사용자의 활동 기록 표시
  • C) 이전에 실행한 명령어 목록 표시
  • D) 시스템의 오류 기록 표시
  • 정답: C) 이전에 실행한 명령어 목록 표시
  • 해설: 'history' 명령어는 사용자가 이전에 실행한 명령어들의 목록을 표시하는 기능을 가지고 있다. 이를 통해 사용자는 과거에 사용한 명령어를 쉽게 찾아 재사용할 수 있다.

6. 리눅스에서 파티션은 무엇을 의미하는가?

  • A) 파일 시스템을 만들 수 없는 하드디스크의 논리적 구역
  • B) 파일 시스템을 만들 수 있는 하드디스크의 논리적 구역
  • C) 단일 파일 시스템으로 사용되는 별도의 하드디스크
  • D) 리눅스 시스템에서 사용되지 않는 구역
  • 정답: B) 파일 시스템을 만들 수 있는 하드디스크의 논리적 구역
  • 해설: 리눅스에서 파티션은 하드디스크를 논리적으로 나눈 구역을 의미하며, 각각의 파티션에 별도의 파일 시스템을 생성할 수 있다.

7. 리눅스 시스템에서 /bin 디렉터리의 역할은 무엇인가?

  • A) 사용자 계정의 홈 디렉터리를 저장
  • B) 부팅 과정이나 시스템 관리에 필요한 명령의 실행 파일을 포함
  • C) 시스템의 중요한 환경 설정 파일을 포함
  • D) 장치를 접근하는데 사용되는 '디바이스 파일'을 포함
  • 정답: B) 부팅 과정이나 시스템 관리에 필요한 명령의 실행 파일을 포함
  • 해설: /bin 디렉터리는 기본적인 시스템 명령의 실행 파일을 포함하며, 이는 부팅 과정이나 시스템 관리에 필수적인 명령들을 포함한다.

8. 리눅스 시스템에서 'chsh' 명령어의 기능은 무엇인가?

  • A) 현재 셸의 환경 변수를 변경
  • B) 새 사용자 계정을 생성
  • C) 사용자의 로그인 셸을 변경
  • D) 시스템의 호스트 이름을 변경
  • 정답: C) 사용자의 로그인 셸을 변경
  • 해설: 'chsh' 명령어는 사용자의 로그인 셸을 변경하는 데 사용된다. 이를 통해 사용자는 다른 셸로 로그인 셸을 변경할 수 있다.

9. 리눅스에서 'alias' 명령어의 주요 기능은 무엇인가?

  • A) 새 파일을 생성
  • B) 디렉터리를 변경
  • C) 명령어의 별칭을 생성
  • D) 파일의 권한을 변경
  • 정답: C) 명령어의 별칭을 생성
  • 해설: 'alias' 명령어는 사용자가 자주 사용하는 명령어에 대해 별칭을 설정할 수 있게 해준다. 이를 통해 긴 명령어를 간단한 별칭으로 대체하여 사용할 수 있다.
10. 리눅스에서 파티션과 관련된 설명으로 올바르지 않은 것은?
  • A) 파티션은 하드디스크를 논리적으로 나눈 구역이다.
  • B) 파티션 별로 다른 파일 시스템을 사용할 수 있다.
  • C) 리눅스는 하드 디스크마다 여러 루트 디렉터리를 가진다.
  • D) 윈도우에서는 각 파티션을 드라이브로 지정한다.
  • 정답: C) 리눅스는 하드 디스크마다 여러 루트 디렉터리를 가진다.
  • 해설: 리눅스는 하나의 루트 디렉터리만을 가지며, 이는 모든 파일과 디렉터리의 최상위 디렉터리로 작동한다.
11. 리눅스 시스템에서 /etc 디렉터리의 역할은 무엇인가?
  • A) 사용자 계정의 홈 디렉터리가 만들어지는 곳
  • B) 시스템의 중요한 환경 설정 파일이 위치하는 곳
  • C) 프로그램들이 사용하는 시스템 라이브러리 파일이 위치하는 곳
  • D) 이동식 저장 장치가 마운트 될 때의 마운트 지점
  • 정답: B) 시스템의 중요한 환경 설정 파일이 위치하는 곳
  • 해설: /etc 디렉터리는 리눅스 시스템에서 중요한 환경 설정 파일들을 저장하는 곳으로, 시스템의 설정과 관련된 파일들이 주로 위치한다.
12. 리눅스 시스템에서 사용되는 장치 이름 중, IDE 디스크에 주로 사용되는 접두사는 무엇인가?
  • A) sd
  • B) sr
  • C) hd
  • D) ssd
  • 정답: C) hd
  • 해설: 리눅스에서 IDE 하드 디스크 장치 이름에는 'hd' 접두사가 사용된다. 예를 들어, 첫 번째 IDE 하드 디스크는 '/dev/hda'로 표시된다.
13. 리눅스에서 셸 스크립트 파일을 실행할 때 사용되는 특수 문자는 무엇인가?
  • A) #
  • B) $
  • C) .
  • D) ~
  • 정답: C) .
  • 해설: 셸 스크립트 파일을 실행할 때 사용되는 특수 문자는 점(.)이다. 예를 들어, 'script.sh' 파일을 실행하려면 '. script.sh' 명령을 사용한다.
14. 리눅스 시스템에서 사용자의 홈 디렉토리 경로를 나타내는 환경 변수는 무엇인가?
  • A) USER
  • B) PWD
  • C) HOME
  • D) PATH
  • 정답: C) HOME
  • 해설: 사용자의 홈 디렉토리 경로는 환경 변수 'HOME'에 저장된다. 예를 들어, 'echo $HOME' 명령은 현재 사용자의 홈 디렉토리 경로를 출력한다.
15. 리눅스 시스템에서 '/etc/passwd' 파일의 주요 기능은 무엇인가?
  • A) 시스템 로그 파일
  • B) 사용자 계정 정보
  • C) 시스템 환경 설정
  • D) 패스워드 보안 설정
  • 정답: B) 사용자 계정 정보
  • 해설: '/etc/passwd' 파일은 시스템의 모든 사용자 계정 정보를 포함하고 있다. 이 파일에는 사용자 이름, 사용자 ID, 그룹 ID, 홈 디렉토리, 로그인 셸 등의 정보가 포함된다.
16. 리눅스에서 하드 디스크나 주변 장치를 어떻게 처리하는가?
  • A) 별도의 드라이브로 지정
  • B) 파일로 취급
  • C) 별도의 파티션으로 구분
  • D) 네트워크 자원으로 인식
  • 정답: B) 파일로 취급
  • 해설: 리눅스는 하드 디스크나 주변 장치를 파일로 취급한다. 이는 유닉스 계열 운영 체제의 특징이며, 파일 시스템의 일부로 관리된다.
17. 리눅스에서 'sbin' 디렉터리의 용도는 무엇인가?
  • A) 사용자 데이터 저장
  • B) 시스템 부팅 파일 저장
  • C) 시스템 관리 명령 실행 파일 저장
  • D) 네트워크 구성 파일 저장
  • 정답: C) 시스템 관리 명령 실행 파일 저장
  • 해설: 'sbin' 디렉터리는 시스템 부팅 과정이나 시스템 관리에 필요한 명령의 실행 파일을 포함한다.
18. 리눅스 시스템에서 파티션을 어떻게 관리하는가?
  • A) 각 파티션을 별도의 드라이브로 관리
  • B) 모든 파티션을 하나의 루트 디렉터리 아래에 통합 관리
  • C) 각 파티션마다 별도의 운영 체제 설치
  • D) 파티션은 사용하지 않고, 전체 하드 디스크를 하나의 파티션으로 사용
  • 정답: B) 모든 파티션을 하나의 루트 디렉터리 아래에 통합 관리
  • 해설: 리눅스는 모든 파티션을 하나의 루트 디렉터리 아래에 통합하여 관리한다. 이는 윈도우와 다른 점이다.
19. 리눅스에서 '/dev/sda'와 같은 장치 이름은 무엇을 나타내는가?
  • A) 네트워크 장치
  • B) USB 장치
  • C) 하드 디스크 장치
  • D) 시스템 메모리
  • 정답: C) 하드 디스크 장치
  • 해설: 리눅스에서 '/dev/sda'는 하드 디스크 장치를 나타내는 장치 이름이다. 이는 주로 SCSI 또는 SATA 하드 드라이브에 사용된다.

20. 리눅스에서 하드디스크 장치 또는 파티션의 이름을 나타내는 방법으로 올바른 것은 무엇인가?

  • A) 모든 하드디스크 장치는 'hdd'로 시작한다
  • B) SCSI 디스크는 'hd'로 시작하고, IDE 디스크는 'sd'로 시작한다
  • C) IDE 디스크는 'hd'로 시작하고, SCSI 디스크는 'sd'로 시작한다
  • D) 모든 하드디스크는 동일한 이름을 사용한다
  • 정답: C) IDE 디스크는 'hd'로 시작하고, SCSI 디스크는 'sd'로 시작한다
  • 해설: 리눅스에서 IDE 하드디스크는 'hd'로 시작하는 이름을 가지고, SCSI 하드디스크는 'sd'로 시작하는 이름을 갖는다. 이러한 명명 규칙은 장치를 구별하는 데 중요하다.

21. 리눅스에서 'man' 명령어의 기능은 무엇인가?

  • A) 시스템 메모리 사용량을 표시
  • B) 사용 가능한 디스크 공간을 표시
  • C) 명령어 및 프로그램의 매뉴얼 페이지를 표시
  • D) 현재 실행 중인 프로세스 목록을 표시
  • 정답: C) 명령어 및 프로그램의 매뉴얼 페이지를 표시
  • 해설: 'man' 명령어는 사용자가 명령어 및 프로그램에 대한 매뉴얼 페이지를 볼 수 있게 해준다. 이를 통해 사용자는 해당 명령어나 프로그램의 사용법을 자세히 알 수 있다.

22. 리눅스에서 'echo $PATH' 명령의 결과는 무엇을 나타내는가?

  • A) 현재 사용자의 비밀번호
  • B) 현재 디렉터리의 경로
  • C) 시스템에 설치된 모든 프로그램의 목록
  • D) 실행 파일을 찾기 위한 디렉터리의 목록
  • 정답: D) 실행 파일을 찾기 위한 디렉터리의 목록
  • 해설: 'echo $PATH' 명령어는 사용자의 PATH 환경 변수를 표시한다. 이 변수에는 시스템이 실행 파일을 찾을 때 검색하는 디렉터리의 목록이 포함되어 있다.

23. 리눅스 시스템에서 '/boot' 디렉터리의 주요 용도는 무엇인가?

  • A) 사용자의 홈 디렉터리를 저장
  • B) 디바이스 드라이버를 저장
  • C) 커널 이미지와 부트 로더의 설정 파일을 포함
  • D) 프로그램의 실행 파일을 저장
  • 정답: C) 커널 이미지와 부트 로더의 설정 파일을 포함
  • 해설: '/boot' 디렉터리는 리눅스 시스템의 부팅에 필요한 커널 이미지(vmlinuz)와 부트 로더의 설정 파일 등을 포함한다.

24. 리눅스 시스템의 'root' 계정의 홈 디렉터리는 어디인가?

  • A) /home/root
  • B) /root
  • C) /usr/root
  • D) /system/root
  • 정답: B) /root
  • 해설: 리눅스 시스템에서 'root' 계정의 홈 디렉터리는 '/root'이다. 이는 일반 사용자의 홈 디렉터리가 '/home'에 위치하는 것과 다르다.

25. 리눅스 시스템에서 'type' 명령어의 주요 기능은 무엇인가?

  • A) 파일의 종류를 확인
  • B) 명령어가 어떻게 해석되는지 알려줌
  • C) 디스크 사용량을 표시
  • D) 네트워크 인터페이스의 상태를 표시
  • 정답: B) 명령어가 어떻게 해석되는지 알려줌
  • 해설: 'type' 명령어는 주어진 명령어가 셸 내장 명령인지, 외부 프로그램인지, 또는 별칭인지 등을 알려주는 기능을 가지고 있다.

26. 리눅스 시스템에서 사용자 계정을 생성하는 명령어는 무엇인가?

  • A) useradd
  • B) usermod
  • C) passwd
  • D) adduser
  • 정답: A) useradd
  • 해설: 'useradd' 명령어는 리눅스 시스템에서 새로운 사용자 계정을 생성하는 데 사용된다. 이 명령어는 사용자의 기본 정보와 함께 홈 디렉터리를 설정할 수 있다.

27. 리눅스 시스템에서 'whoami' 명령어의 기능은 무엇인가?

  • A) 현재 시스템의 호스트 이름을 표시
  • B) 현재 로그인한 사용자의 계정 이름을 표시
  • C) 시스템의 네트워크 정보를 표시
  • D) 현재 실행 중인 프로세스의 목록을 표시
  • 정답: B) 현재 로그인한 사용자의 계정 이름을 표시
  • 해설: 'whoami' 명령어는 현재 로그인한 사용자의 계정 이름을 표시한다. 이 명령은 사용자가 어떤 계정으로 시스템에 접속해 있는지 확인할 때 유용하다.

28. 리눅스 시스템에서 'umask' 명령어의 기능은 무엇인가?

  • A) 사용자의 권한을 변경
  • B) 새로 생성되는 파일과 디렉터리의기본 권한을 설정
  • C) 파일의 권한을 확인
  • D) 시스템의 보안 수준을 설정
  • 정답: B) 새로 생성되는 파일과 디렉터리의 기본 권한을 설정
  • 해설: 'umask' 명령어는 새로 생성되는 파일과 디렉터리에 적용될 기본 권한을 설정한다. 이를 통해 시스템의 보안을 유지하는 데 도움을 준다.

29. 리눅스 시스템에서 'which' 명령어의 주요 기능은 무엇인가?

  • A) 파일의 위치를 찾음
  • B) 실행 파일의 위치를 찾음
  • C) 네트워크 장치의 IP 주소를 찾음
  • D) 시스템의 환경 변수를 찾음
  • 정답: B) 실행 파일의 위치를 찾음
  • 해설: 'which' 명령어는 주어진 명령어의 실행 파일이 시스템의 어느 경로에 위치하는지를 찾아내는 기능을 가지고 있다. 이는 PATH 환경 변수에 설정된 디렉터리를 검색하여 해당 명령어의 위치를 찾는다.

30. 리눅스 시스템에서 'echo $HOME' 명령의 결과는 무엇을 나타내는가?

  • A) 현재 사용자의 홈 디렉터리 경로
  • B) 현재 디렉터리의 경로
  • C) 시스템에 설치된 모든 프로그램의 목록
  • D) 실행 파일을 찾기 위한 디렉터리의 목록
  • 정답: A) 현재 사용자의 홈 디렉터리 경로
  • 해설: 'echo $HOME' 명령어는 현재 사용자의 홈 디렉터리 경로를 표시한다. 이는 사용자의 개인 데이터와 설정 파일이 저장된 위치를 나타낸다.

31. 리눅스 시스템에서 'grep' 명령어의 주요 기능은 무엇인가?

  • A) 파일을 복사
  • B) 텍스트에서 패턴을 검색
  • C) 파일을 압축
  • D) 네트워크 연결을 확인
  • 정답: B) 텍스트에서 패턴을 검색
  • 해설: 'grep' 명령어는 파일이나 다른 텍스트 소스에서 주어진 패턴이나 문자열을 검색하는 데 사용된다. 이는 로그 파일 분석, 코드에서 특정 문자열 찾기 등 다양한 상황에서 유용하게 사용된다.

32. 리눅스 시스템의 '/media' 디렉터리의 역할은 무엇인가?

  • A) 멀티미디어 파일 저장
  • B) 이동식 저장 장치의 마운트 지점 제공
  • C) 사용자의 미디어 라이브러리 관리
  • D) 시스템의 미디어 드라이버 저장
  • 정답: B) 이동식 저장 장치의 마운트 지점 제공
  • 해설: '/media' 디렉터리는 이동식 저장 장치가 시스템에 연결될 때 그것을 마운트할 지점을 제공한다. 예를 들어 USB 드라이브나 외장 하드 드라이브 등이 여기에 마운트된다.
반응형