소개
리눅스 기본 파일 작업 실습에 오신 것을 환영합니다! 리눅스에서는 거의 모든 것을 파일로 취급하므로, 파일 작업은 시스템 사용의 가장 기초가 됩니다. 이 실습에서는 파일과 디렉터리를 관리하는 데 가장 자주 사용되는 명령어들을 안내하며, 리눅스 시스템을 탐색하고 정리하는 데 능숙해지도록 도와줄 것입니다.
리눅스 기본 파일 작업 실습에 오신 것을 환영합니다! 리눅스에서는 거의 모든 것을 파일로 취급하므로, 파일 작업은 시스템 사용의 가장 기초가 됩니다. 이 실습에서는 파일과 디렉터리를 관리하는 데 가장 자주 사용되는 명령어들을 안내하며, 리눅스 시스템을 탐색하고 정리하는 데 능숙해지도록 도와줄 것입니다.
리눅스에서 각 사용자는 일반적으로 ~로 표시되는 "홈 디렉터리"를 가집니다. 하지만 이 실습 환경에서는 기본 작업 디렉터리인 /home/labex/project에서 시작합니다.
먼저, 바탕화면에서 터미널을 열거나 실습 환경의 터미널 탭으로 전환하세요.

현재 위치를 파악하는 것부터 시작해 보겠습니다.
pwd
pwd는 "print working directory"의 약자로, 파일 시스템 내에서 현재 위치를 표시합니다. 이 명령어는 리눅스 파일 구조 내에서 자신의 위치를 파악하는 데 매우 중요합니다. 출력 결과로 /home/labex/project가 표시되어야 합니다.
이제 현재 디렉터리와 홈 디렉터리 사이의 관계를 살펴보겠습니다.
echo ~
참고: 특정 국가의 키보드 레이아웃 차이로 인해 바탕화면 터미널에서
~기호를 입력할 수 없는 경우, 가상 머신 인터페이스 왼쪽 상단에 있는 독립형 터미널 (Terminal) 탭으로 전환하여 시도해 보세요.
이 명령어는 홈 디렉터리의 경로를 표시하며, /home/labex로 나타나야 합니다.
현재 디렉터리의 내용을 확인하려면 다음을 사용합니다.
ls
이 명령어는 현재 작업 디렉터리 (/home/labex/project) 에 있는 파일과 디렉터리 목록을 보여줍니다.
홈 디렉터리의 내용도 확인해 봅시다.
ls ~
이 명령어는 홈 디렉터리의 내용을 나열하며, 현재 작업 디렉터리와는 내용이 다를 수 있습니다.
현재 작업 디렉터리와 홈 디렉터리의 차이를 이해하는 것은 리눅스 파일 시스템을 효과적으로 탐색하는 데 중요합니다.
리눅스는 "계층적 파일 시스템"을 사용합니다. 이를 여러 가지가 뻗어 나온 큰 나무라고 생각하면 쉽습니다. 중심이 되는 기둥은 "루트 디렉터리"라고 불리며 슬래시 하나 (/) 로 표시됩니다. 다른 모든 디렉터리와 파일은 이 루트에서 가지를 뻗어 나갑니다.
이 나무 구조 안에서 이동하는 방법을 알아봅시다.
pwd
/home/labex/project가 표시되어야 합니다. 만약 그렇지 않다면 다른 디렉터리에 있는 것입니다. cd /home/labex/project를 입력하여 시작 지점으로 돌아가세요.
ls
현재 위치의 모든 파일과 폴더를 나열합니다. /home/labex/project는 현재 비어 있으므로 아무것도 보이지 않을 것입니다.
cd ..
..은 "상위 디렉터리"를 의미합니다. 이 명령어를 실행한 후 다시 pwd를 입력해 보세요. 이제 /home/labex에 위치해 있을 것입니다.
cd project
이 명령은 다시 /home/labex/project로 이동시켜 줍니다.
cd ~
~는 홈 디렉터리로 가는 지름길입니다. pwd를 실행하여 /home/labex에 있는지 확인하세요.
cd /home/labex/project
루트 (/) 부터 시작하여 전체 위치를 지정하는 방식을 "절대 경로"라고 합니다.
이제 탐색 방법을 익혔으니, 파일을 생성하고 디렉터리 내용을 확인하는 다양한 방법을 살펴보겠습니다.
먼저, /home/labex/project 디렉터리에 있는지 확인하세요.
cd /home/labex/project
touch file1.txt
touch 명령어는 빈 파일을 생성할 때 사용합니다. 만약 파일이 이미 존재한다면, 내용물은 건드리지 않고 파일의 수정 시간 (타임스탬프) 만 업데이트합니다. 새로운 빈 파일을 만드는 가장 간단한 방법입니다.
echo "Hello, Linux" > file2.txt
이 명령어는 두 가지 작업을 수행합니다.
echo는 텍스트를 출력하는 명령어입니다.> 기호는 echo의 출력을 file2.txt라는 파일로 보냅니다 (리다이렉션). 파일이 없으면 새로 만들고, 있으면 기존 내용을 덮어씁니다.echo "Hidden file" > .hiddenfile
숨김 파일을 생성합니다. 리눅스에서는 점 (.) 으로 시작하는 모든 파일이나 디렉터리를 숨김 항목으로 간주합니다.
mkdir testdir
mkdir 명령어 ("make directory"의 약자) 는 testdir이라는 이름의 새 디렉터리를 만듭니다.
ls

현재 디렉터리의 내용을 보여줍니다. file1.txt, file2.txt, testdir이 보여야 합니다.
ls -l
-l 옵션 (숫자 1 이 아닌 소문자 L) 은 "긴 (long)" 형식의 목록을 제공합니다. 파일 권한, 소유자, 크기, 수정 날짜와 같은 추가 정보를 볼 수 있습니다.
ls -a
방금 만든 숨김 파일 .hiddenfile을 포함하여 모든 파일을 보여줍니다.
ls -la
상세 형식 (-l) 과 모든 파일 표시 (-a) 옵션을 함께 사용합니다.
ls -l testdir
testdir 디렉터리 내부의 목록을 보여줍니다 (현재는 비어 있어야 합니다).
이제 작업할 파일들이 생겼으니, 이를 복사하는 방법을 배워보겠습니다.
cp file1.txt file1_copy.txt
현재 디렉터리에 file1.txt를 복사한 file1_copy.txt를 생성합니다.
복사가 잘 되었는지 확인해 봅시다.
ls
cp file2.txt testdir/
file2.txt를 testdir 디렉터리 안으로 복사합니다.
cp -r testdir testdir_copy
-r 옵션은 "재귀적 (recursive)"을 의미합니다. 디렉터리를 복사할 때는 내부의 모든 내용물도 함께 복사되도록 이 옵션을 반드시 사용해야 합니다.
ls
ls testdir
ls testdir_copy

리눅스에서 mv 명령어는 이동과 이름 변경 두 가지 용도로 모두 사용됩니다.
mv file1.txt newname.txt
file1.txt의 이름을 newname.txt로 바꿉니다.
mv newname.txt testdir/
newname.txt 파일을 testdir 디렉터리 안으로 옮깁니다.
mv testdir_copy new_testdir
testdir_copy 디렉터리의 이름을 new_testdir로 바꿉니다.
mv testdir/newname.txt ./original_file1.txt
testdir 안에 있는 newname.txt를 밖으로 꺼내면서 현재 디렉터리에 original_file1.txt라는 이름으로 저장합니다.
ls
ls testdir

파일과 디렉터리를 삭제하는 것은 매우 강력한 작업입니다. 그래픽 인터페이스와 달리 명령줄 환경에는 보통 "휴지통"이 없습니다. rm으로 삭제한 파일은 대개 영구적으로 사라집니다. 명령어를 실행하기 전에 항상 다시 한번 확인하세요!
지금까지 만든 파일과 디렉터리를 정리해 봅시다. 현재 위치가 /home/labex/project인지 확인하세요.
pwd
ls -a
original_file1.txt, .hiddenfile, file2.txt와 같은 파일들과 testdir, new_testdir 같은 디렉터리들이 보여야 합니다.
-rw-rw-r-- 1 labex labex 12 May 3 08:44 .hiddenfile
-rw-rw-r-- 1 labex labex 0 May 3 08:45 file1_copy.txt
-rw-rw-r-- 1 labex labex 13 May 3 08:44 file2.txt
drwxrwxr-x 2 labex labex 23 May 3 08:45 new_testdir
-rw-rw-r-- 1 labex labex 0 May 3 08:44 original_file1.txt
drwxrwxr-x 2 labex labex 23 May 3 08:45 testdir
단일 파일 삭제:
rm original_file1.txt
rm 명령어 ("remove"의 약자) 는 파일을 삭제합니다. 확인해 봅시다.
ls
original_file1.txt가 사라졌을 것입니다.
대화형 삭제 (더 안전한 방법):
-i 플래그를 사용하여 file2.txt를 삭제해 봅시다.
rm -i file2.txt
-i 옵션은 삭제하기 전에 매번 확인을 요청합니다. 삭제를 승인하려면 y(yes) 를 입력하고 Enter 를 누르세요. n이나 다른 키를 누르면 파일이 삭제되지 않습니다.
ls
승인했다면 file2.txt가 삭제되었을 것입니다.
비어 있는 디렉터리 삭제:
testdir_copy의 이름을 바꿔서 만든 new_testdir을 기억하시나요? 비어 있는지 확인해 봅시다.
ls new_testdir
비어 있다면 (파일이 보이지 않는다면) rmdir을 사용하여 삭제할 수 있습니다.
rmdir new_testdir
rmdir("remove directory") 은 비어 있는 디렉터리에만 작동합니다.
ls
만약 비어 있지 않다면 new_testdir은 삭제되지 않습니다.
비어 있지 않은 디렉터리 삭제 시도:
이제 4 단계에서 복사한 file2.txt가 들어있는 testdir에 rmdir을 시도해 봅시다.
ls testdir
rmdir testdir
rmdir: failed to remove 'testdir': Directory not empty와 같은 오류 메시지가 나타날 것입니다. 이는 rmdir이 파일이나 다른 디렉터리가 포함된 디렉터리를 삭제할 수 없기 때문에 발생하는 정상적인 결과입니다.
디렉터리와 그 내용물을 모두 삭제 (재귀적 삭제):
비어 있지 않은 디렉터리를 삭제하려면 rm 명령어에 -r(recursive) 옵션을 사용해야 합니다.
rm -r testdir
이 명령어는 testdir 디렉터리와 그 안의 모든 것을 삭제합니다. 이 명령어는 매우 주의해서 사용해야 합니다.
ls
이제 testdir이 사라졌을 것입니다.
강제 삭제 (극도로 주의하여 사용):
쓰기 방지된 파일이라도 묻지 않고 삭제하고 싶을 때 -f(force) 옵션을 사용합니다.
숨김 파일을 삭제해 봅시다.
rm .hiddenfile
ls -a
이제 -r과 -f를 결합해 보겠습니다. rm -rf 명령어는 매우 강력하며 잠재적으로 위험합니다. 디렉터리를 재귀적으로 삭제하며 (-r), 묻지도 따지지도 않고 강제로 삭제합니다 (-f).
!!! 위험 구역 !!!
rm -rf를 실행하기 전에 무엇을 삭제하는지 반드시 100% 확신해야 합니다. 작은 오타 하나로 중요한 시스템 파일이나 개인 데이터가 모두 날아갈 수 있으며, 복구할 수 없습니다. 예를 들어, rm -rf /는 권한이 있다면 시스템 전체를 삭제하려고 시도할 것입니다. 항상 경로를 두 번 확인하세요.
안전하게 시연하기 위해 임시 디렉터리와 파일을 만들어 보겠습니다.
mkdir temp_dir
touch temp_dir/temp_file.txt
ls -R temp_dir
참고: ls에서는 cp나 rm에서 썼던 소문자 -r 대신 대문자 -R을 사용했습니다. 이는 단순히 대소문자 차이가 아니라 완전히 다른 옵션입니다! ls에서 -R은 "재귀적 목록 표시"(하위 디렉터리까지 표시) 를 의미하고, -r은 "정렬 순서 반전"을 의미합니다. 반면 cp와 rm에서 재귀 옵션은 소문자 -r입니다. 각 명령어의 구체적인 옵션을 이해하려면 항상 매뉴얼 (man 명령어) 을 확인하세요.
이제 강제로 삭제해 봅시다.
rm -rf temp_dir
삭제 확인:
ls
temp_dir이 사라졌을 것입니다.
기억하세요: 리눅스 명령줄에서 삭제된 파일은 일반적으로 영구히 사라집니다. rm을 신중하게 사용하세요!
축하합니다! 리눅스의 필수 파일 작업들을 모두 배우셨습니다.
cd와 pwd를 이용한 파일 시스템 탐색touch와 mkdir을 이용한 파일 및 디렉터리 생성ls와 다양한 옵션을 이용한 내용 목록 확인cp를 이용한 파일 및 디렉터리 복사mv를 이용한 이동 및 이름 변경rm과 rmdir을 이용한 파일 및 디렉터리 삭제이 명령어들은 리눅스 파일 관리의 기초를 이룹니다. 연습을 통해 명령줄에서 파일과 디렉터리를 관리하는 데 능숙해질 것입니다.
특히 rm은 복구 가능성 없이 파일과 디렉터리를 영구적으로 삭제하므로 항상 주의해서 사용해야 함을 잊지 마세요.
리눅스 여정을 계속하면서 각 명령어와 옵션에 대해 더 자세히 알고 싶다면 매뉴얼 페이지 (예: man ls) 를 탐색해 보세요. 즐거운 탐험 되시길 바랍니다!