Linux 기본 파일 작업

LinuxBeginner
지금 연습하기

소개

Linux 는 데이터를 디렉터리와 파일의 트리 구조로 구성합니다. 명령은 이 트리의 위치를 대상으로 작업하므로, 파일을 안정적으로 다루려면 먼저 다음 세 가지를 확인해야 합니다. 현재 위치는 어디인가? 현재 위치에 무엇이 있는가? 원하는 항목을 식별하는 경로는 무엇인가?

이 실습에서는 /home/labex/project/file-basics에서 이러한 개념을 단계적으로 연습합니다. 절대 경로와 상대 경로로 이동하고, 표시되는 항목과 숨겨진 항목을 확인하며, 파일과 디렉터리를 생성합니다. 또한 와일드카드로 이름을 선택하고, 연습용 파일을 안전하게 복사하고 이동하고 삭제합니다. 마지막 단계에서는 의미는 바꾸지 않으면서 이러한 작업을 더 빠르게 수행할 수 있는 터미널 단축키를 소개합니다.

작업 디렉터리 확인

이 단계에서는 터미널 프롬프트와 명령이 실제로 실행되는 디렉터리의 관계를 확인합니다.

셸에는 항상 현재 작업 디렉터리가 있습니다. 상대 경로는 이 디렉터리에서 시작하므로 현재 위치를 확인하면 초보자가 자주 하는 실수를 줄일 수 있습니다. 전체 경로를 사용해 이 실습의 작업 공간으로 이동합니다.

cd /home/labex/project/file-basics

/로 시작하는 경로를 절대 경로라고 합니다. 절대 경로는 파일 시스템의 루트에서 시작하며, 처음 어느 위치에 있었는지와 관계없이 동일한 위치를 가리킵니다.

현재 작업 디렉터리를 출력합니다.

pwd

다음과 같은 결과가 표시되어야 합니다.

/home/labex/project/file-basics

이 위치를 확인 정보로 저장합니다. > 연산자는 출력을 starting-location.txt로 리디렉션합니다. 이번에는 출력이 파일로 전달되므로 터미널에는 아무것도 표시되지 않습니다.

pwd > starting-location.txt

파일을 읽어 저장된 내용을 확인합니다.

cat starting-location.txt

터미널 화면과 파일에 동일한 절대 경로가 표시되어야 합니다.

상대 경로로 이동

이 단계에서는 상대 경로와 특수한 이름인 ...을 사용해 서로 가까운 디렉터리 사이를 이동합니다.

필요하면 작업 공간으로 돌아갑니다.

cd /home/labex/project/file-basics

현재 위치의 표시되는 항목을 나열합니다.

ls

path-mapstarting-location.txt가 표시되어야 합니다. 상대 경로를 사용해 path-map으로 들어갑니다. 상대 경로는 현재 디렉터리를 기준으로 해석되는 경로입니다.

cd path-map
pwd

이제 north로 들어가 참조 파일을 읽습니다.

cd north
cat reference.txt

출력은 north reference입니다. ..은 현재 위치에서 한 단계 위에 있는 부모 디렉터리를 의미합니다.

cd ..

path-map에서 그 하위 디렉터리인 south로 이동합니다.

cd south
cat reference.txt

.은 현재 디렉터리를 의미합니다. pwd의 결과와 두 단계 위로 이동하는 상대 경로를 결합해 현재 절대 위치를 실습 루트에 저장합니다.

pwd > ../../relative-location.txt

실습 루트의 절대 경로를 사용해 바로 돌아갑니다.

cd /home/labex/project/file-basics
cat relative-location.txt

저장된 경로는 /path-map/south로 끝나야 합니다. 이제 상대 경로를 사용한 이동과 절대 경로를 사용한 복귀를 모두 수행했습니다.

디렉터리 내용 확인

이 단계에서는 ls 옵션을 사용해 숨겨진 이름과 파일 세부 정보를 확인합니다.

실습 루트에서 기본 목록을 표시합니다.

cd /home/labex/project/file-basics
ls

Linux 에서는 일반적으로 점으로 시작하는 이름을 숨깁니다. -a 옵션은“all”을 의미하며 이러한 항목도 포함합니다.

ls -a

이제 현재 디렉터리를 나타내는 . 및 부모 디렉터리를 나타내는 ..과 함께 .practice-note가 표시되어야 합니다.

-l 옵션은 권한, 소유자, 크기, 시간, 이름을 포함한 긴 형식 목록을 출력합니다.

ls -l

모든 항목을 긴 형식으로 확인하려면 두 옵션을 결합합니다.

ls -la

출력의 각 줄은 유형과 권한 필드로 시작합니다. 맨 앞의 d는 디렉터리를 나타내고, 맨 앞의 -는 일반 파일을 나타냅니다. 권한은 이후 실습에서 자세히 다룹니다.

숨겨진 항목을 포함한 이름을 저장합니다. 이 실습의 통제된 작업 공간에서는 ls가 이미 알파벳순으로 표시하므로 아직 별도의 정렬 명령은 필요하지 않습니다.

ls -A > all-names.txt

-a와 달리 -A는 특수 항목인 ...은 제외하고 다른 숨겨진 이름은 유지합니다. 결과를 표시합니다.

cat all-names.txt

목록에는 .practice-note, path-map, 그리고 앞 단계에서 생성한 파일이 포함되어야 합니다.

디렉터리와 파일 생성

이 단계에서는 작은 프로젝트 트리를 만들고 일반 파일에 텍스트를 입력합니다.

mkdir은 디렉터리를 생성합니다. -p 옵션을 사용하면 없는 부모 디렉터리도 함께 생성되므로, 하나의 명령으로 중첩된 경로를 만들 수 있습니다.

cd /home/labex/project/file-basics
mkdir -p workspace/docs workspace/logs

이 명령은 workspace와 그 하위 디렉터리인 docslogs를 생성합니다. 결과를 확인합니다.

find workspace -maxdepth 2 -type d

touch는 지정한 이름의 파일이 없을 때 빈 파일을 생성합니다. 한 번에 두 파일을 생성합니다.

touch workspace/docs/guide.txt workspace/logs/app.log

가이드 파일에 내용을 씁니다. 하나의 >는 명령의 출력으로 대상 파일의 기존 내용을 바꿉니다.

echo "Linux file practice" > workspace/docs/guide.txt

기존 내용을 유지하는 >>를 사용해 두 번째 줄을 추가합니다.

echo "Paths make locations predictable" >> workspace/docs/guide.txt

파일 전체를 읽습니다.

cat workspace/docs/guide.txt

두 줄이 원래 순서대로 표시되어야 합니다. 빈 app.log도 생성되었으며, 이후 와일드카드 연습에 사용합니다.

와일드카드로 이름 선택

이 단계에서는 파일 그룹을 만들고 파일 이름 패턴으로 파일을 선택합니다.

logs 디렉터리로 이동합니다.

cd /home/labex/project/file-basics/workspace/logs

중괄호 확장은 명령을 실행하기 전에 여러 개의 리터럴 이름을 생성합니다. 번호가 붙은 로그 파일을 생성합니다.

touch app{1..3}.log worker{1..2}.log notes.txt

셸은 {1..3}1 2 3으로 확장하므로 app{1..3}.log는 세 개의 인자가 됩니다.

와일드카드는 이와 다르게 이미 존재하는 이름과 일치합니다. *는 문자의 임의의 시퀀스와 일치합니다.

ls *.log

출력에는 .log로 끝나는 모든 이름이 포함되지만 notes.txt는 포함되지 않습니다.

? 와일드카드는 정확히 한 문자를 의미합니다. 번호가 붙은 app 로그만 나열합니다.

ls app?.log

셸은 파일 이름 패턴을 알파벳순으로 확장합니다. printf는 확장된 각 이름을 한 줄씩 출력하고, >는 해당 줄을 저장합니다.

printf '%s\n' *.log > matched-logs.txt
cat matched-logs.txt

저장된 목록에는 app.log, app1.log, app2.log, app3.log, worker1.log, worker2.log가 포함되어야 합니다. *.log를 따옴표로 묶으면 와일드카드 확장이 실행되지 않으므로 여기서는 의도적으로 따옴표를 사용하지 않습니다.

파일을 안전하게 복사하고 이동하고 삭제하기

이 단계에서는 다음 과제를 수행하기 전에 cp, mv, rm의 효과를 비교합니다.

workspace 디렉터리로 돌아갑니다.

cd /home/labex/project/file-basics/workspace

cp SOURCE DESTINATION은 원본을 그대로 둔 채 다른 파일을 생성합니다. 가이드 파일의 백업을 만듭니다.

cp docs/guide.txt docs/guide-backup.txt

두 파일의 내용이 동일한지 확인합니다. cmp는 두 파일을 바이트 단위로 비교합니다. 내용이 같으면 아무것도 출력하지 않으며, 오류 메시지가 표시되면 두 파일이 다르다는 뜻입니다.

cmp docs/guide.txt docs/guide-backup.txt

mv SOURCE DESTINATION은 항목을 다른 위치로 옮기거나 이름을 변경합니다. 백업을 workspace 루트로 이동하고 더 명확한 이름을 지정합니다.

mv docs/guide-backup.txt archived-guide.txt

두 위치를 모두 나열합니다.

ls docs
ls

docs 아래에는 guide.txt가, 현재 디렉터리에는 archived-guide.txt가 표시되어야 합니다.

rm은 지정한 파일을 영구적으로 삭제합니다. 일반적으로 터미널에는 휴지통이 없습니다. 삭제해도 되는 notes 파일만 삭제합니다.

rm logs/notes.txt

삭제 결과를 확인할 수 있도록 디렉터리를 다시 나열합니다.

ls logs

notes.txt가 더 이상 표시되지 않아야 합니다. 원래 가이드와 이동한 복사본은 계속 남아 있고, 명시적으로 지정한 삭제 대상 파일만 사라졌습니다.

터미널 단축키로 더 빠르게 작업하기

이 단계에서는 입력을 줄이고 계속 실행 중인 명령을 중단하는 데 도움이 되는 네 가지 터미널 제어 키를 연습합니다.

먼저 문서 디렉터리로 이동합니다.

cd /home/labex/project/file-basics/workspace/docs

다시 사용할 명령을 실행합니다.

cat guide.txt

**위쪽 화살표 키 (Up Arrow)**를 한 번 누릅니다. 이전의 cat guide.txt 명령이 프롬프트에 다시 표시되어야 합니다. Enter 키를 눌러 명령을 다시 실행합니다. 명령 기록 불러오기를 사용하면 다시 입력하지 않아도 되며, 실행하기 전에 불러온 줄을 수정할 수도 있습니다.

다음으로 Enter 키를 누르지 않은 상태에서 cat g를 입력한 뒤 **Tab 키 (Tab)**를 누릅니다. 일치하는 파일이 guide.txt 하나뿐이므로 셸이 파일 이름을 완성해야 합니다. Enter 키를 눌러 완성된 명령을 실행합니다.

이제 계속 대기하는 명령을 시작합니다.

tail -f /dev/null

tail -f는 파일을 계속 추적하면서 새 데이터를 기다립니다. /dev/null은 유용한 줄을 제공하지 않으므로 명령이 아무 출력 없이 멈춘 것처럼 보입니다. Ctrl+C를 눌러 인터럽트를 보내고 프롬프트로 돌아갑니다. 포그라운드에서 실행 중인 명령을 중지해야 할 때 일반적으로 가장 먼저 사용하는 방법입니다.

Ctrl+L을 눌러 화면에 표시된 이전 출력을 지웁니다. clear와 마찬가지로 이 작업은 파일이나 명령 기록을 삭제하지 않습니다.

프롬프트로 돌아온 뒤 완료 표시 파일을 생성합니다.

echo "Shortcuts practiced" > /home/labex/project/file-basics/shortcuts-complete.txt
cat /home/labex/project/file-basics/shortcuts-complete.txt

이 표시 파일의 내용은 인터랙티브 연습 후 프롬프트를 성공적으로 되찾았음을 확인해 줍니다.

요약

현재 작업 디렉터리와 경로가 파일 작업을 제어하는 방식을 배웠습니다. 절대 경로와 상대 경로로 이동하고, 숨겨진 항목과 메타데이터를 확인했습니다. 또한 디렉터리 트리와 텍스트 파일을 생성하고, 와일드카드로 이름을 선택하며, 복사·이동·영구 삭제의 차이를 비교했습니다. 명령 기록 불러오기, Tab 자동 완성, Ctrl+C, Ctrl+L도 연습했습니다. 다음 실습에서는 익숙하지 않은 명령이나 옵션이 나타났을 때 신뢰할 수 있는 도움말을 찾는 방법을 배웁니다.