본문으로 건너뛰기

IT

Ⅱ-1. 셸과 명령행 기본

라즈베리파이 5 서버에서 셸의 구성, 디렉토리 구조, 파일 조작, 편집기, 검색, 도움말 명령을 실제 실행 결과와 함께 정리하였다.

2026. 10. 05

Ⅱ-1 셸과 명령행 기본은 Ⅱ부(리눅스 기초)의 첫 편이며, Ⅰ-3 에서 정한 목차를 따른다. 서버에 SSH 나 터미널로 접속한 상태를 전제로 하며, SSH 접속 방법은 Ⅲ-1 SSH 원격 접속에서 다룬다. 명령의 출력은 모두 genealogypost.com 을 운영하는 라즈베리파이 5에서 2026-10-05 에 일반 사용자 계정으로 실행한 결과이다. 출력에 든 사용자 이름은 user 로, 호스트 이름은 raspberrypi 로 바꾸어 실었다.

1.1 셸 및 터미널

셸(shell)은 사용자가 입력한 명령을 읽어 운영체제에 전달하고 결과를 돌려주는 프로그램이다. 터미널은 그 셸에 글자를 입력하고 출력을 보여 주는 창이다. 명령행을 익히는 차례는 셸, 파일, 편집기, 검색의 순서로 정하였다 [5].

1.1.1 프롬프트와 명령의 구성

그림 1은 프롬프트와 명령 한 줄의 구성을 나타낸다. 프롬프트는 셸이 명령을 기다린다는 표시이며, 사용자 이름, 호스트 이름, 현재 디렉토리, 사용자의 권한을 차례로 보여 준다. 프롬프트 뒤에 입력하는 한 줄은 명령, 옵션, 인자로 나뉜다.

프롬프트와 명령의 구성
그림 1. 프롬프트와 명령 한 줄의 구성 (도식)
  • 명령은 실행할 프로그램의 이름이다. 그림 1의 ls 는 디렉토리의 내용을 보이는 명령이다.
  • 옵션은 명령의 동작을 바꾼다. 대부분 하이픈 하나로 시작하는 짧은 형식(-l)과 하이픈 둘로 시작하는 긴 형식(--help)이 있다.
  • 인자는 명령이 다룰 대상이다. 그림 1의 /etc 는 내용을 볼 디렉토리이다.

1.1.2 셸의 종류 확인

그림 2는 이 서버에서 쓰는 셸과 운영체제를 확인한 결과이다. 셸은 bash 5.2.15 이고 운영체제는 Debian 12(bookworm) 기반의 Raspberry Pi OS 이다.

user@raspberrypi:~ $ echo $SHELL
/bin/bash
user@raspberrypi:~ $ bash --version | head -1
GNU bash, version 5.2.15(1)-release (aarch64-unknown-linux-gnu)
user@raspberrypi:~ $ cat /etc/os-release | head -4
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
그림 2. 셸과 운영체제 확인

출력이 영어로 나오는 까닭은 이 서버의 시스템 언어가 en_GB.UTF-8 로 설정되어 있기 때문이다. 이 값은 locale 명령의 LANG 줄에서 확인하였다.

1.2 디렉토리 구조

리눅스는 모든 파일을 루트 디렉토리(/) 하나에서 시작하는 나무 구조로 관리한다. 디렉토리마다 담는 파일의 종류는 Filesystem Hierarchy Standard(FHS)가 정한다 [1]. 그림 3은 이 서버의 루트 디렉토리를 ls -l / 로 나열한 결과이다.

user@raspberrypi:~ $ ls -l /
total 92
lrwxrwxrwx   1 root root     7 Nov 19  2024 bin -> usr/bin
drwxr-xr-x   3 root root  4096 Oct  1 13:42 boot
drwxr-xr-x  16 root root  4320 Aug 26 22:43 dev
drwxr-xr-x 149 root root 12288 Oct  5 06:22 etc
drwxr-xr-x   3 root root  4096 Nov 19  2024 home
lrwxrwxrwx   1 root root     7 Nov 19  2024 lib -> usr/lib
drwx------   2 root root 16384 Nov 19  2024 lost+found
drwxr-xr-x   4 root root  4096 Aug 13 21:52 media
drwxr-xr-x   2 root root  4096 Nov 19  2024 mnt
drwxr-xr-x   6 root root  4096 Nov 19  2024 opt
dr-xr-xr-x 313 root root     0 Jan  1  1970 proc
drwx------  24 root root  4096 Oct  5 16:12 root
drwxr-xr-x  33 root root  1000 Oct  5 06:22 run
lrwxrwxrwx   1 root root     8 Nov 19  2024 sbin -> usr/sbin
drwxr-xr-x   3 root root  4096 Aug 25 00:59 srv
dr-xr-xr-x  12 root root     0 Jan  1  1970 sys
drwxrwxrwt 271 root root 24576 Oct  5 16:12 tmp
drwxr-xr-x  11 root root  4096 Nov 19  2024 usr
drwxr-xr-x  12 root root  4096 Aug 13 21:41 var
그림 3. 루트 디렉토리의 내용

표 1은 그림 3의 주요 디렉토리를 FHS 의 설명과 이 서버에서 확인한 내용으로 정리한 것이다.

표 1. 루트 디렉토리 아래의 주요 디렉토리
디렉토리 FHS 의 설명 이 서버에서 확인한 내용
/bin, /sbin, /lib 필수 명령, 시스템 명령, 공유 라이브러리 /usr 아래로 이어진 링크(그림 3의 -> 표시)
/boot 부트로더의 정적 파일 부트 파티션이 /boot/firmware 에 연결됨(Ⅰ-2 그림 12) [2]
/dev 장치 파일 microSD 는 mmcblk0, NVMe SSD 는 nvme0n1
/etc 이 컴퓨터의 시스템 설정 운영체제 정보 파일 /etc/os-release 가 여기에 있다
/home 사용자 홈 디렉토리 일반 사용자의 홈 /home/user
/media 이동식 저장장치의 연결 위치 NVMe SSD 가 /media/nvme 에 연결됨(Ⅰ-1 표 3)
/proc, /sys 커널이 만드는 가상 파일시스템 크기 0, 날짜 1970년으로 표시됨(그림 3)
/root 관리자(root)의 홈 디렉토리 권한 drwx—— 로 root 만 들어갈 수 있다
/tmp 임시 파일 권한 끝의 t 는 남의 파일을 지우지 못하게 하는 표시
/usr 여러 사용자가 함께 쓰는 읽기 전용 프로그램과 자료 /bin, /lib 의 실제 위치
/var 로그처럼 바뀌는 자료 시스템 로그가 /var/log 에 쌓인다

/bin 과 /lib 가 /usr 아래로 이어진 링크라는 점은 FHS 의 원래 구성과 다르다. Debian 12 는 두 디렉토리를 /usr 로 합쳐 두고, 예전 경로로도 찾아갈 수 있도록 링크를 남겼다. 그림 3에서 bin -> usr/bin 이 그 링크이다.

1.3 현재 위치 확인 및 디렉토리 이동

1.3.1 pwd 및 cd

pwd 는 현재 디렉토리의 전체 경로를 출력하고, cd 는 현재 디렉토리를 바꾼다. 경로는 두 가지로 적는다. 절대 경로는 /home/user/practice 처럼 / 에서 시작하고, 상대 경로는 practice 처럼 현재 디렉토리에서 시작한다. 자주 쓰는 표시는 다음과 같다.

  • ~ 는 자기 홈 디렉토리이다. cd 만 입력해도 홈으로 돌아간다.
  • . 은 현재 디렉토리, .. 은 한 단계 위 디렉토리이다.
  • cd - 는 바로 전에 있던 디렉토리로 돌아간다.

1.3.2 ls -l 출력의 열 구성

ls -l 은 파일마다 한 줄씩 자세한 정보를 보인다. 표 2는 그림 4의 b.txt 줄을 열 단위로 나눈 것이다.

표 2. ls -l 출력 한 줄의 열 구성 (그림 4의 b.txt 줄)
열 값 의미
1. 종류와 권한 -rw-r–r– 첫 글자는 종류(- 파일, d 디렉토리, l 링크)이고 나머지 9글자는 권한이다. 권한은 Ⅱ-2 에서 다룬다
2. 링크 수 1 이 파일을 가리키는 이름의 수
3. 소유자 user 파일을 가진 사용자
4. 그룹 user 파일을 가진 그룹
5. 크기 0 바이트 단위. 빈 파일이므로 0이다
6. 수정 시각 Oct 5 16:12 마지막으로 내용이 바뀐 때. 올해가 아니면 시각 대신 연도가 표시된다
7. 이름 b.txt 링크이면 -> 뒤에 가리키는 곳이 붙는다

1.4 파일 및 디렉토리의 생성·복사·이동·삭제

실습은 홈 디렉토리 아래에 만든 연습 디렉토리(~/practice)에서 하였다. 시스템 디렉토리에서 연습하면 운영체제 파일을 지우거나 덮어쓸 수 있기 때문이다. 표 3은 이 절에서 쓴 명령을 정리한 것이다.

표 3. 파일과 디렉토리를 다루는 명령
명령 하는 일 자주 쓰는 옵션
mkdir 디렉토리 만들기 -p 중간 디렉토리까지 한꺼번에 만든다
touch 빈 파일 만들기, 수정 시각 바꾸기 없음
cp 복사 -r 디렉토리를 통째로 복사한다. -i 덮어쓰기 전에 묻는다
mv 이동과 이름 바꾸기 -i 덮어쓰기 전에 묻는다
rm 파일 삭제 -r 디렉토리를 안의 내용과 함께 지운다. -i 지우기 전에 묻는다
rmdir 빈 디렉토리 삭제 안에 파일이 있으면 지우지 않는다

그림 4는 연습 디렉토리를 만들고 파일 하나를 만들어 복사하고 이름을 바꾼 결과이다. mv a.txt b.txt 처럼 같은 디렉토리 안에서 옮기면 이름만 바뀐다. 그래서 현재 디렉토리에는 b.txt 가 남고 복사본 a.txt 는 dir1 안에 있다.

user@raspberrypi:~ $ mkdir -p ~/practice && cd ~/practice && pwd
/home/user/practice
user@raspberrypi:~/practice $ touch a.txt; mkdir dir1; cp a.txt dir1/; mv a.txt b.txt; ls -l . dir1
.:
total 4
-rw-r--r-- 1 user user    0 Oct  5 16:12 b.txt
drwxr-xr-x 2 user user 4096 Oct  5 16:12 dir1

dir1:
total 0
-rw-r--r-- 1 user user 0 Oct  5 16:12 a.txt
그림 4. 연습 디렉토리에서 만들기, 복사, 이름 바꾸기

그림 5는 같은 디렉토리에서 파일과 디렉토리를 지운 결과이다. rm -r dir1 은 안의 a.txt 와 함께 dir1 을 지웠고, 빈 디렉토리 dir2 는 rmdir 로 지웠다. 마지막 ls -la 에는 현재 디렉토리(.)와 위 디렉토리(..)만 남았다.

user@raspberrypi:~/practice $ rm b.txt; rm -r dir1; mkdir dir2; rmdir dir2; ls -la
total 8
drwxr-xr-x  2 user user 4096 Oct  5 16:12 .
drwx------ 28 user user 4096 Oct  5 16:12 ..
그림 5. 파일과 디렉토리 지우기

rm 으로 지운 파일은 휴지통을 거치지 않으므로 되살릴 수 없다. 와일드카드(*)와 함께 쓸 때는 먼저 같은 패턴을 ls 로 확인한 다음에 지운다.

1.5 파일 내용 확인 및 편집

1.5.1 cat·less·head·tail

파일 내용을 보는 명령은 파일의 길이에 따라 고른다. cat 은 파일 전체를 한 번에 출력하고, less 는 한 화면씩 넘겨 본다. head 와 tail 은 파일의 앞과 끝 몇 줄만 보이며 기본값은 10줄이다. 그림 6은 /etc/os-release 의 앞 5줄과 끝 3줄을 출력한 결과이다.

user@raspberrypi:~ $ head -5 /etc/os-release
PRETTY_NAME="Debian GNU/Linux 12 (bookworm)"
NAME="Debian GNU/Linux"
VERSION_ID="12"
VERSION="12 (bookworm)"
VERSION_CODENAME=bookworm
user@raspberrypi:~ $ tail -3 /etc/os-release
HOME_URL="https://www.debian.org/"
SUPPORT_URL="https://www.debian.org/support"
BUG_REPORT_URL="https://bugs.debian.org/"
그림 6. head 와 tail 로 파일의 앞과 끝 보기

less 화면에서는 Space 로 다음 화면, b 로 이전 화면, /낱말 로 검색, q 로 끝낸다. 로그처럼 계속 늘어나는 파일은 tail -f 로 새로 붙는 줄을 실시간으로 본다.

1.5.2 nano 편집기

이 서버에는 편집기 GNU nano 7.2 가 설치되어 있다. nano 는 화면 아래에 단축키가 늘 표시되어 처음 쓰는 사람도 바로 쓸 수 있다. 표 4는 자주 쓰는 단축키이다. 화면 아래의 ^ 표시는 Ctrl 키를 뜻한다.

표 4. nano 의 주요 단축키
키 동작
Ctrl+O 저장 (Write Out)
Ctrl+X 끝내기. 저장하지 않은 내용이 있으면 저장할지 묻는다
Ctrl+W 낱말 찾기 (Where Is)
Ctrl+K 현재 줄 잘라내기
Ctrl+U 잘라낸 줄 붙여넣기
Ctrl+G 도움말

1.5.3 vi 의 세 가지 모드

이 서버의 vi 는 Vim 9.0 이다. vi 는 키 입력이 모드에 따라 다른 뜻을 가진다. 그림 7과 같이 vi 를 열면 명령 모드로 시작하며, i 를 눌러 입력 모드로 들어가 글자를 치고, Esc 로 명령 모드로 돌아온다. 저장과 끝내기는 명령 모드에서 : 을 눌러 마지막 행 모드로 들어간 뒤 입력한다.

vi 의 세 가지 모드
그림 7. vi 의 세 가지 모드와 모드를 바꾸는 키 (도식)

vi 에서 빠져나오지 못하는 경우의 대부분은 입력 모드에 머문 채 :q 를 치는 경우이다. 그때는 Esc 를 먼저 누른 다음 :q! 와 Enter 를 입력하면 저장하지 않고 끝난다.

1.6 파일 및 문자열 검색

find 는 이름, 종류, 크기 같은 조건으로 파일을 찾고, grep 은 파일 안의 글자를 찾는다. 그림 8은 연습 디렉토리에 하위 디렉토리 둘과 파일 넷을 만든 뒤 두 명령을 실행한 결과이다.

user@raspberrypi:~/practice $ find ~/practice -name "*.txt"
/home/user/practice/notes/plan.txt
/home/user/practice/notes/todo.txt
/home/user/practice/readme.txt
user@raspberrypi:~/practice $ find ~/practice -type d
/home/user/practice
/home/user/practice/logs
/home/user/practice/notes
user@raspberrypi:~/practice $ grep -rn "SSH" ~/practice
/home/user/practice/notes/todo.txt:1:SSH 접속 확인
그림 8. find 와 grep 으로 파일과 글자 찾기
  • -name "*.txt" 는 이름이 .txt 로 끝나는 파일을 찾는다. 따옴표로 감싸야 셸이 * 를 먼저 풀지 않는다. 그래서 logs/boot.log 는 결과에서 빠졌다.
  • -type d 는 디렉토리만 찾는다.
  • grep -rn 의 -r 은 하위 디렉토리까지 찾고, -n 은 찾은 줄의 번호를 붙인다. 출력의 todo.txt:1: 은 todo.txt 의 1번째 줄이라는 뜻이다.

1.7 명령 도움말

명령의 옵션은 외울 필요 없이 도움말에서 찾는다. man 명령 은 설명서 전체를 less 화면으로 보이고, 명령 --help 는 짧은 사용법을 바로 출력한다 [3], [4]. 그림 9는 ls 의 두 도움말의 앞부분이다. man 의 출력은 col -b 로 글자 꾸밈을 지우고 앞 14줄만 보였다.

user@raspberrypi:~ $ man ls | col -b | head -14
LS(1)			   User Commands		     LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information about the FILEs (the current directory by
       default).  Sort entries alphabetically if none of -cftuvSUX
       nor --sort is specified.

       Mandatory arguments to long options are mandatory for short
user@raspberrypi:~ $ ls --help | head -5
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
그림 9. man 과 –help 로 본 ls 의 도움말 (앞부분)

SYNOPSIS 줄의 대괄호는 생략할 수 있는 부분을, … 은 여러 번 쓸 수 있는 부분을 뜻한다. 따라서 ls [OPTION]... [FILE]... 은 ls 를 옵션과 파일 없이 써도 되고, 여러 개를 함께 써도 된다는 뜻이다.

다음 글은 Ⅱ-2. 사용자·그룹과 권한 이다.

REFERENCES

  1. [1]LSB Workgroup, The Linux Foundation, Filesystem Hierarchy Standard, Version 3.0, 2015. [Online]. Available: https://refspecs.linuxfoundation.org/FHS_3.0/fhs/index.html [Accessed: 2026-10-05]
  2. [2]Raspberry Pi Ltd, Raspberry Pi Documentation, Configuration. [Online]. Available: https://www.raspberrypi.com/documentation/computers/configuration.html [Accessed: 2026-10-05]
  3. [3]Free Software Foundation, GNU Bash Reference Manual. [Online]. Available: https://www.gnu.org/software/bash/manual/ [Accessed: 2026-10-05]
  4. [4]Free Software Foundation, GNU Coreutils Manual. [Online]. Available: https://www.gnu.org/software/coreutils/manual/ [Accessed: 2026-10-05]
  5. [5]W. Shotts, The Linux Command Line, 3rd ed., No Starch Press, 2026. [Online]. Available: https://nostarch.com/linux-command-line-3e [Accessed: 2026-10-05]

ABOUT AUTHOR

shind

shind

소개글이 아직 없습니다.

댓글 남기기

Your email address will not be published. Required fields are marked *