안녕하세요, 코딩은 못 하지만 IT가 너무 궁금한 비개발자 루카(Luka)입니다.
늘 개발자분들이 검은 화면에 흰 글씨를 쳐가며 뭔가 뚝딱 해결하는 모습을 볼 때마다 "저건 뭐지? 대체 왜 저렇게 쓰는 거지?" 궁금증이 폭발하곤 했습니다. 제가 웹 서핑을 하다가 복잡한 파일을 정리하거나, 특정 작업을 반복해야 할 때마다 '저 터미널이라는 걸 쓰면 더 빠를까?' 하는 생각이 들었죠. 그래서 이번엔 마음먹고 리눅스 터미널과 셸 스크립트의 세계로 직접 발을 들여봤습니다. 처음엔 외계어 같았지만, 파고들수록 생각보다 훨씬 유용하다는 걸 깨달았답니다!
비개발자의 시선으로 본 리눅스 터미널, 이거 왜 쓰는 거죠?
제가 처음 터미널을 접했을 때 가장 의문이었던 건, "이 예쁜 GUI(그래픽 사용자 인터페이스) 두고 왜 굳이 저 검은 창을 쓰지?" 였습니다. 마우스 클릭 한 번이면 되는 걸 일일이 타이핑해야 한다니, 비효율의 극치처럼 보였거든요.
그런데 막상 제가 직접 몇 가지 명령어를 쳐보니, 그제야 개발자들이 왜 터미널을 사랑하는지 어렴풋이 알 수 있었습니다. 바로 '효율성'과 '자동화' 때문이더군요. 특정 파일을 수십 개씩 옮기거나, 특정 패턴의 텍스트를 찾아 변경해야 할 때, GUI로는 하나하나 클릭해야 하지만 터미널에서는 한두 줄 명령어로 순식간에 처리할 수 있었습니다.
어떤 개발 블로그를 보니, 특정 서버에서 로그 파일을 매일 백업하고 정리하는 작업을 수동으로 처리했을 때는 평균 2시간 40분이 걸렸지만, 셸 스크립트로 자동화한 후에는 단 12초 만에 끝났다는 사례도 있더군요. (물론 환경에 따라 다르겠지만요!) 이 숫자를 보고 나서 '아, 이건 배워둘 만하다!'는 확신이 들었습니다. 제 PC 자원 관리도 궁금해서 확인해보니, 제가 사용하는 macOS의 터미널 앱(iTerm2)은 평균 35MB 미만의 메모리를 사용하는 반면, 제가 자주 쓰는 크롬 브라우저는 여러 탭을 열어두면 쉽게 2GB를 넘어가더라고요. 가벼움에서도 큰 차이가 있었습니다.
루카가 직접 써본 터미널 핵심 명령어 (feat. 미니 프로젝트)
자, 그럼 제가 직접 터미널에 쳐보면서 '아, 이건 정말 자주 쓸 것 같다!'고 느꼈던 핵심 명령어들을 소개해 드릴게요. 저는 비개발자니까, 복잡한 건 빼고 정말 쓸모 있는 것 위주로 추려봤습니다.
1. 현재 위치 파악 및 이동: pwd, ls, cd
터미널을 시작하면 내가 어디에 있는지 아는 게 가장 중요합니다.
pwd(Print Working Directory): 내가 지금 어느 디렉토리(폴더)에 있는지 알려줍니다.ls(List): 현재 디렉토리 안에 어떤 파일과 폴더들이 있는지 보여줍니다.ls -l: 파일 상세 정보를 보여줍니다. (권한, 소유자, 크기, 수정 날짜 등)ls -a: 숨겨진 파일까지 모두 보여줍니다. (.bashrc같은 파일은 평소엔 안 보여요!)ls -al또는ls -la: 위 두 옵션을 합쳐서 숨겨진 파일 포함 상세 정보를 보여줍니다. 제가 가장 자주 썼습니다.
cd(Change Directory): 원하는 디렉토리로 이동합니다.cd ..: 상위 디렉토리로 이동합니다. (점 두 개!)cd ~: 제 사용자 홈 디렉토리로 바로 이동합니다. (물결표!)cd -: 방금 전 디렉토리로 돌아갑니다.
2. 파일 및 디렉토리 생성/관리: mkdir, touch, cp, mv, rm
이 명령어들은 파일 탐색기에서 마우스로 하던 작업을 터미널로 하는 겁니다.
mkdir(Make Directory): 새 디렉토리를 만듭니다. 예:mkdir Project_Lukatouch: 비어있는 새 파일을 만듭니다. 예:touch notes.txtcp(Copy): 파일이나 디렉토리를 복사합니다. 예:cp report.docx backup/report.docx- 디렉토리를 복사할 때는
-r옵션을 붙여야 합니다. 예:cp -r old_folder new_folder
- 디렉토리를 복사할 때는
mv(Move): 파일이나 디렉토리를 이동하거나 이름을 변경합니다. 예:mv old_name.txt new_name.txt(이름 변경) 또는mv document.pdf archive/(이동)rm(Remove): 파일이나 디렉토리를 삭제합니다.- 주의! 휴지통으로 가는 게 아니라 영구 삭제됩니다.
rm file.txt: 파일 삭제rm -r folder_name: 디렉토리 삭제 (하위 파일/폴더 모두 삭제)rm -rf folder_name: 묻지도 따지지도 않고 강제로 삭제합니다. (정말 신중하게 써야 합니다!)
직접 해보는 미니 프로젝트: 불필요한 파일 정리!
제가 웹 서핑을 하면서 다운로드받았던 임시 파일들을 정리하는 미니 프로젝트를 해봤습니다.
# 1. 다운로드 폴더로 이동합니다. (저는 홈 디렉토리 안에 Downloads 폴더가 있습니다)
cd ~/Downloads
# 2. 임시 파일을 모아둘 폴더를 만듭니다.
mkdir temp_cleanup_202403
# 3. 특정 확장자(.tmp, .log)의 파일을 찾아서 새로 만든 폴더로 옮깁니다.
# find . -name "*.tmp" -exec mv {} temp_cleanup_202403/ \;
# find . -name "*.log" -exec mv {} temp_cleanup_202403/ \;
# (제가 처음 해봤을 땐 위에처럼 했는데, 이건 셸 스크립트에서 더 유용하더라고요.
# 더 간단하게는 `mv *.tmp temp_cleanup_202403/` 이렇게도 가능합니다!)
# 제가 직접 써본 명령어는 아래와 같았습니다.
# 불필요한 zip 파일들을 이동시켜봅니다.
mv *.zip temp_cleanup_202403/
# 옮겨진 파일들을 확인해봅니다.
ls temp_cleanup_202403/
# 이제 `temp_cleanup_202403` 폴더는 안전하게 통째로 삭제하면 됩니다.
# rm -r temp_cleanup_202403/
# 하지만 아직은 필요할지 모르니 삭제는 하지 않겠습니다! :)
# 다시 원래 홈 디렉토리로 돌아옵니다.
cd ~
이렇게 몇 줄만으로 복잡한 파일을 정리할 수 있다니! 처음엔 손이 느렸지만, 익숙해지니 마우스로 클릭하고 끌어다 놓는 것보다 훨씬 빠르다는 걸 체감했습니다.
셸 스크립트, 반복 작업을 자동화하는 마법 지팡이!
위에서 배운 명령어들을 하나하나 입력하는 것도 좋지만, 매번 반복하는 작업이라면? 이걸 텍스트 파일 하나에 적어두고 한 번에 실행하면 얼마나 편할까요? 그게 바로 셸 스크립트입니다! 저는 간단한 '데일리 보고서 생성' 스크립트를 만들어봤습니다.
셸 스크립트 작성 기초: echo, 변수, # (주석)
셸 스크립트는 그냥 텍스트 파일입니다. .sh 확장자를 붙여주는 게 일반적이죠.
#!/bin/bash(Shebang): 스크립트 첫 줄에 이걸 써주면, 이 스크립트를 어떤 프로그램(여기서는 Bash 셸)으로 실행할지 시스템에 알려줍니다. (저는 이걸 '스크립트의 자기소개'라고 이해했습니다.)echo: 화면에 글자를 출력합니다.echo "Hello, Luka!"- 변수: 정보를 담아두는 상자입니다.
MY_NAME="Luka"처럼=기호로 할당하고,${MY_NAME}처럼$기호를 붙여서 사용합니다. #(주석):#뒤에 오는 내용은 스크립트 실행 시 무시됩니다. 제가 나중에 스크립트를 다시 볼 때 '이 줄은 이런 역할을 하는구나' 하고 알아보기 쉽게 설명을 달아두는 용도입니다.
루카의 데일리 보고서 생성 스크립트 만들기
제가 매일 특정 폴더의 파일 목록과 제 사용자 정보를 확인하는 작업을 한다고 가정하고, 이걸 자동으로 기록해주는 스크립트를 만들어봤습니다.
#!/bin/bash
# 1. 보고서 파일을 저장할 디렉토리 경로를 설정합니다.
# 제 홈 디렉토리 아래 'reports' 폴더에 저장할 거예요.
REPORT_DIR="$HOME/reports"
# 2. 현재 날짜와 시간을 'YYYYMMDD_HHMMSS' 형식으로 가져와서 변수에 저장합니다.
# 파일 이름에 붙여서 언제 생성된 보고서인지 알 수 있게 합니다.
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
# 3. 최종 보고서 파일 이름을 정의합니다.
REPORT_FILE="${REPORT_DIR}/daily_report_${TIMESTAMP}.txt"
# 4. 보고서 디렉토리가 없으면 새로 만듭니다.
# -p 옵션은 상위 디렉토리가 없으면 함께 생성해줍니다.
mkdir -p "${REPORT_DIR}"
# 5. 보고서 파일에 내용을 작성합니다.
# `>` 는 파일을 새로 만들고 내용을 덮어씁니다.
echo "--- 루카의 일일 시스템 보고서 (${TIMESTAMP}) ---" > "${REPORT_FILE}"
echo "" >> "${REPORT_FILE}" # 한 줄 띄우기
# `>>` 는 기존 파일에 내용을 이어서 추가합니다.
echo "1. 현재 사용자 정보:" >> "${REPORT_FILE}"
whoami >> "${REPORT_FILE}" # 현재 사용자 이름 출력
echo "" >> "${REPORT_FILE}"
echo "2. 현재 작업 디렉토리:" >> "${REPORT_FILE}"
pwd >> "${REPORT_FILE}" # 현재 작업 디렉토리 출력
echo "" >> "${REPORT_FILE}"
echo "3. 최근 5개 파일 목록 (홈 디렉토리 기준):" >> "${REPORT_FILE}"
ls -lt $HOME | head -n 6 | tail -n 5 >> "${REPORT_FILE}" # 홈 디렉토리의 최근 수정 파일 5개
echo "" >> "${REPORT_FILE}"
echo "------------------------------------------------" >> "${REPORT_FILE}"
# 6. 보고서가 성공적으로 생성되었음을 사용자에게 알립니다.
echo "🎉 일일 보고서가 ${REPORT_FILE} 에 성공적으로 생성되었습니다!"
스크립트 실행하기
- 파일 생성: 위 내용을 텍스트 편집기에 복사해서
generate_report.sh라는 이름으로 저장합니다. (저는nano나vi대신 VS Code로 만들었습니다!) - 실행 권한 부여: 터미널에서 스크립트 파일이 있는 디렉토리로 이동한 후,
chmod +x generate_report.sh명령어를 입력합니다. 이 명령어가 스크립트 파일에게 '이 파일은 실행 가능한 파일이야!'라고 알려주는 역할을 합니다. 제가 이걸 몰라서 처음엔 'Permission denied' 에러를 수없이 만났습니다. - 스크립트 실행:
./generate_report.sh를 입력하고 Enter를 누르면 스크립트가 실행됩니다.
실행하고 나니, ~/reports/ 폴더 안에 daily_report_YYYYMMDD_HHMMSS.txt 파일이 뚝딱 생성되어 있더군요! 파일 안에는 제가 원하는 정보들이 깔끔하게 정리되어 있었습니다. 이걸 매일 아침 출근해서 한 번만 눌러주면 된다니, 정말 편리하죠?
비개발자가 헷갈리기 쉬운 부분 (루카의 삽질 기록)
제가 처음 터미널을 다루면서 가장 헤맸던 몇 가지를 공유합니다. 저 같은 비개발자분들께 도움이 되기를 바라요!
1. 경로(Path)의 이해: 절대 경로 vs. 상대 경로 (그리고 ~, ., ..)
처음에는 그냥 폴더 이름만 치면 되는 줄 알았습니다. cd Desktop이라고 쳤는데 'No such file or directory'라고 뜨면 당황스러웠죠.
- 절대 경로 (Absolute Path): 최상위 디렉토리(
root,/)부터 시작하는 완전한 경로입니다. 어떤 위치에서든 항상 똑같은 경로를 가리킵니다.- 예:
/Users/Luka/Documents/MyProject - 제가 맥북 유저라
User디렉토리 아래 제 이름으로 된 홈 디렉토리가 있습니다.
- 예:
- 상대 경로 (Relative Path): 현재 작업하고 있는 디렉토리(Current Working Directory)를 기준으로 하는 경로입니다.
.(점 하나): 현재 디렉토리.cd .는 아무것도 안 하고 현재 위치에 머무는 것과 같습니다. 스크립트 실행 시./script.sh처럼 '현재 디렉토리에 있는 script.sh를 실행해' 라는 의미로 자주 사용합니다...(점 두 개): 상위 디렉토리.cd ..를 치면 한 단계 위 폴더로 이동합니다.~(물결표): 사용자 홈 디렉토리.cd ~는cd /Users/Luka와 같은 의미입니다. 제가 가장 편하게 쓰는 이동 방법입니다.
해결책: "내가 지금 어디에 있지?" (pwd)를 늘 확인하고, ls로 주변 폴더를 탐색하면서 절대 경로와 상대 경로를 번갈아 사용해보는 연습이 중요합니다. 그리고 ~를 활용하면 대부분의 경우 편리합니다!
2. 'Permission denied' 오류와 실행 권한 (chmod)
셸 스크립트를 만들고 나서 ./my_script.sh라고 실행했는데, 'Permission denied'라고 뜨면 또 한 번 멘붕이 왔습니다. "내가 만들었는데 왜 실행이 안 돼?"
이는 파일에 '실행 권한'이 없기 때문입니다. 리눅스/유닉스 계열 운영체제는 보안을 위해 파일마다 읽기(read), 쓰기(write), 실행(execute) 권한을 다르게 부여합니다. 일반 텍스트 파일은 기본적으로 실행 권한이 없습니다.
해결책: chmod 명령어를 사용해서 실행 권한을 부여해야 합니다.
chmod +x my_script.sh
여기서 +x는 'eXecute(실행) 권한을 추가한다'는 의미입니다. 이 명령어를 실행한 후 다시 ./my_script.sh를 입력하면 정상적으로 실행됩니다.
3. 입출력 리다이렉션: > vs >> vs | (루카의 데이터 날아갈 뻔한 경험)
제가 특정 명령어의 결과물을 파일로 저장하려다가 중요한 로그 파일을 날려버릴 뻔한 적이 있습니다. >와 >>의 차이를 몰랐기 때문이죠.
>(리다이렉션, 덮어쓰기): 명령어의 표준 출력(화면에 나오는 결과)을 파일로 보냅니다. 주의할 점은, 해당 파일이 이미 존재하면 그 내용을 모두 지우고 새로 쓴다는 겁니다. 제가 이걸 몰라서ls -l > important_log.txt라고 쳤다가 기존 로그 파일 내용이 다 날아갈 뻔했습니다.>>(리다이렉션, 추가하기): 명령어의 표준 출력을 파일의 끝에 이어서 추가합니다. 파일이 없으면 새로 생성하고, 있으면 내용을 유지한 채 맨 뒤에 붙여 넣습니다. 로그 파일을 만들 때 특히 유용합니다.|(파이프): 한 명령어의 출력을 다음 명령어의 입력으로 연결합니다. 여러 명령어를 조합해서 복잡한 작업을 할 때 엄청나게 유용합니다. 예를 들어,ls -l | grep .txt는 현재 디렉토리의 파일 목록을 보여주되, 그중에서 확장자가.txt인 파일만 걸러서 보여줍니다.
해결책: >는 정말 새 파일이 필요하거나 기존 내용을 완전히 덮어써도 되는 경우에만 쓰고, 기존 파일에 내용을 추가하고 싶을 때는 반드시 >>를 사용해야 합니다. 여러 명령어를 조합할 때는 | 파이프를 활용하는 연습을 해보세요.
입출력 리다이렉션 비교 표
| 기호 | 역할 | 예시 명령어 | 비고 |
|---|---|---|---|
> |
표준 출력을 파일로 덮어쓰기 | echo "안녕" > hello.txt |
hello.txt가 없으면 생성, 있으면 기존 내용 삭제 후 "안녕"만 저장 |
>> |
표준 출력을 파일에 추가하기 | echo "루카" >> hello.txt |
hello.txt 내용 유지하며 마지막에 "루카" 추가 (예: "안녕\n루카") |
| (파이프) |
한 명령어의 출력을 다른 명령어의 입력으로 전달 | ls -l | grep .txt |
ls -l의 결과를 grep .txt 명령의 입력으로 전달하여 .txt 포함 라인만 필터링 |
마무리하며: 비개발자도 터미널과 친구가 될 수 있습니다!
처음에는 막막하기만 했던 리눅스 터미널과 셸 스크립트. 하지만 이렇게 제가 직접 파보고, 작은 성취를 맛보면서 '아, 이건 개발자들만의 전유물이 아니구나!'라는 확신을 가지게 되었습니다. 복잡한 코딩 지식 없이도, 제가 매일 반복하는 귀찮은 작업들을 훨씬 효율적으로 처리할 수 있는 강력한 도구라는 것을 깨달았습니다.
물론 아직 모르는 게 훨씬 많지만, "이게 뭔데? 직접 알아봤다"는 저 루카의 탐구는 계속될 겁니다! 저처럼 코딩은 못 하지만 IT가 궁금하고, 조금 더 스마트하게 일하고 싶은 비개발자분들도 충분히 터미널과 셸 스크립트와 친구가 될 수 있다고 생각합니다. 일단 저처럼 한번 시작해보세요!
핵심 요약 3줄
- 리눅스 터미널은 마우스 클릭 없이 명령어로 시스템을 제어하여 비개발자도 효율적인 작업 자동화를 위해 배울 수 있는 강력한 도구입니다.
ls,cd,cp,mv,rm등 핵심 명령어를 익히고 경로, 권한, 입출력 리다이렉션을 이해하는 것이 터미널 활용의 기초입니다.- 간단한 셸 스크립트를 작성하여 반복적인 파일을 정리하거나 보고서를 생성하는 등 작업을 자동화하여 시간을 절약하고 오류를 줄일 수 있습니다.
FAQ
Q: 터미널 명령어는 외워야 하나요?
A: 모든 명령어를 외울 필요는 없습니다. 자주 사용하는 핵심 명령어 위주로 익히고, 나머지는 필요할 때마다 검색하며 익숙해지는 것이 좋습니다. -h 또는 --help 옵션으로 명령어의 도움말을 확인하는 습관을 들이는 것도 좋습니다.
Q: 윈도우 사용자도 리눅스 터미널을 사용할 수 있나요? A: 네, 윈도우 10 이상 사용자라면 'WSL (Windows Subsystem for Linux)' 기능을 활성화하여 윈도우 내에서 리눅스 환경을 구축하고 터미널을 사용할 수 있습니다. 또한, Git Bash나 PuTTY 같은 프로그램을 통해서도 리눅스 명령어 환경을 경험할 수 있습니다.
Q: 셸 스크립트는 어떤 언어로 작성되나요? A: 셸 스크립트는 Bash(Bourne-Again SHell) 스크립트가 가장 일반적입니다. 그 외에도 Zsh, csh 등 다양한 셸이 있으며, 각 셸의 문법에 따라 작성됩니다. 대부분 Bash 스크립트로 시작해도 충분합니다.