Ⅱ-1 셸과 명령행 기본은 Ⅱ부(리눅스 기초)의 첫 편이며, Ⅰ-3 에서 정한 목차를 따른다. 서버에 SSH 나 터미널로 접속한 상태를 전제로 하며, SSH 접속 방법은 Ⅲ-1 SSH 원격 접속에서 다룬다. 명령의 출력은 모두 genealogypost.com 을 운영하는 라즈베리파이 5에서 2026-10-05 에 일반 사용자 계정으로 실행한 결과이다. 출력에 든 사용자 이름은 user 로, 호스트 이름은 raspberrypi 로 바꾸어 실었다.
1.1 셸 및 터미널
셸(shell)은 사용자가 입력한 명령을 읽어 운영체제에 전달하고 결과를 돌려주는 프로그램이다. 터미널은 그 셸에 글자를 입력하고 출력을 보여 주는 창이다. 명령행을 익히는 차례는 셸, 파일, 편집기, 검색의 순서로 정하였다 [5].
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)"출력이 영어로 나오는 까닭은 이 서버의 시스템 언어가 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표 1은 그림 3의 주요 디렉토리를 FHS 의 설명과 이 서버에서 확인한 내용으로 정리한 것이다.
| 디렉토리 | 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 줄을 열 단위로 나눈 것이다.
| 열 | 값 | 의미 |
|---|---|---|
| 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은 이 절에서 쓴 명령을 정리한 것이다.
| 명령 | 하는 일 | 자주 쓰는 옵션 |
|---|---|---|
| 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그림 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 ..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/"less 화면에서는 Space 로 다음 화면, b 로 이전 화면, /낱말 로 검색, q 로 끝낸다. 로그처럼 계속 늘어나는 파일은 tail -f 로 새로 붙는 줄을 실시간으로 본다.
1.5.2 nano 편집기
이 서버에는 편집기 GNU nano 7.2 가 설치되어 있다. nano 는 화면 아래에 단축키가 늘 표시되어 처음 쓰는 사람도 바로 쓸 수 있다. 표 4는 자주 쓰는 단축키이다. 화면 아래의 ^ 표시는 Ctrl 키를 뜻한다.
| 키 | 동작 |
|---|---|
| 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 에서 빠져나오지 못하는 경우의 대부분은 입력 모드에 머문 채 :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 접속 확인-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.SYNOPSIS 줄의 대괄호는 생략할 수 있는 부분을, … 은 여러 번 쓸 수 있는 부분을 뜻한다. 따라서 ls [OPTION]... [FILE]... 은 ls 를 옵션과 파일 없이 써도 되고, 여러 개를 함께 써도 된다는 뜻이다.
다음 글은 Ⅱ-2. 사용자·그룹과 권한 이다.
REFERENCES
- [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]Raspberry Pi Ltd, Raspberry Pi Documentation, Configuration. [Online]. Available: https://www.raspberrypi.com/documentation/computers/configuration.html [Accessed: 2026-10-05]
- [3]Free Software Foundation, GNU Bash Reference Manual. [Online]. Available: https://www.gnu.org/software/bash/manual/ [Accessed: 2026-10-05]
- [4]Free Software Foundation, GNU Coreutils Manual. [Online]. Available: https://www.gnu.org/software/coreutils/manual/ [Accessed: 2026-10-05]
- [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]