리눅스 터미널 필수 명령어 10가지와 권한 설정(chmod, chown) 이해하기
리눅스 터미널 필수 명령어 10가지와 권한 설정(chmod, chown) 이해하기
리눅스(Linux)는 전 세계 서버 시장의 대부분을 점유하고 있는 운영체제이며, 개발자와 엔지니어에게 마우스가 아닌 키보드로
시스템을 제어하는 터미널 명령어는 필수적인 무기입니다.
리눅스를 처음 접할 때 반드시 알아야 하는 필수 명령어 10가지와 시스템 보안 및 파일 관리의 핵심인 권한 설정(chmod, chown)에 대해 꼼꼼하게 정리해 드리겠습니다.
1부: 리눅스 터미널 필수 명령어 10가지
리눅스 CLI(Command Line Interface) 환경에서 가장 빈번하게 사용되며, 파일 시스템을 탐색하고 조작하는 데 필요한 기본 명령어들입니다.
1. pwd (Print Working Directory)
- 개념: 현재 사용자가 작업하고 있는 디렉터리(폴더)의 절대 경로를 화면에 출력합니다.
- 사용 이유: CLI 환경에서는 내가 지금 어디에 위치해 있는지 길을 잃기 쉽기 때문에, 현재 위치를 확인하는 나침반 역할을 합니다.
2. ls (List)
ls [옵션] [파일/디렉토리]
- 개념: 현재 디렉터리 내부의 파일과 폴더 목록을 보여줍니다.
- 주요 옵션:
- ls -l: 파일의 권한, 소유자, 용량, 수정 날짜 등 상세 정보를 목록 형태로 출력합니다. (권한 설정 시 가장 많이 사용)
- ls -a: 숨겨진 파일(파일명이 .으로 시작하는 파일)까지 모두 표시합니다.
- ls -la: 상세 정보와 숨김 파일을 동시에 확인합니다.
3. cd (Change Directory)
- 개념: 다른 디렉터리로 이동할 때 사용합니다.
- 사용법:
- cd [디렉터리 경로]: 지정한 경로로 이동합니다.
- cd ..: 한 단계 상위 디렉터리(부모 폴더)로 이동합니다.
- cd ~: 사용자의 홈 디렉터리로 바로 이동합니다.
4. mkdir (Make Directory)
- 개념: 새로운 디렉터리(폴더)를 생성합니다.
- 사용법: mkdir [폴더명]
- mkdir -p path/to/dir: 하위 폴더까지 한 번에 구조적으로 생성할 때 사용합니다.
5. touch
- 개념: 내용이 비어 있는 새로운 파일을 생성하거나, 이미 존재하는 파일의 수정 시간을 현재 시간으로 업데이트합니다.
- 사용법: touch [파일명.txt]
6. cp (Copy)
- 개념: 파일이나 디렉터리를 복사합니다.
- 사용법: cp [원본 파일] [대상 위치/새 파일명]
- 주의: 디렉터리를 내부 내용까지 통째로 복사하려면 반드시 -r(Recursive) 옵션을 붙여 cp -r [원본 폴더] [대상 폴더] 형태로 사용해야 합니다.
7. mv (Move)
- 개념: 파일이나 디렉터리를 이동시킵니다. 리눅스에서는 이 명령어를 통해 이름 변경(Rename) 역할도 함께 수행합니다.
- 사용법: * mv file.txt /home/user/: 파일을 해당 경로로 이동
- mv old.txt new.txt: 파일 이름을 old에서 new로 변경
8. rm (Remove)
- 개념: 파일이나 디렉터리를 삭제합니다. 리눅스에는 윈도우와 같은 '휴지통' 개념이 없으므로 삭제 시 복구가 매우 어렵습니다.
- 주요 옵션:
- rm [파일명]: 파일 삭제
- rm -r [폴더명]: 디렉터리와 그 내부 파일들을 함께 삭제
- rm -rf [폴더명]: 삭제 여부를 묻지 않고 강제로(Force) 디렉터리 전체를 삭제 (매우 주의해서 사용해야 하는 명령어입니다.)
9. cat (Concatenate)
- 개념: 파일의 내용을 터미널 창에 그대로 출력하여 텍스트를 빠르게 확인할 때 사용합니다.
- 사용법: cat [파일명]
- 두 개 이상의 파일을 연결해서 보거나 새로운 파일을 간단히 만들 때도 응용됩니다.
10. sudo (Superuser Do)
- 개념: 일반 사용자 계정에서 관리자(Root) 권한으로 명령어를 실행하도록 해줍니다.
- 사용 이유: 시스템 설정을 바꾸거나 패키지를 설치하는 등 보안상 민감한 작업은 일반 권한으로 차단되기 때문에, 명령어 앞에 sudo를 붙여 관리자 인증(비밀번호 입력)을 거쳐 실행합니다.
2부: 파일 권한 설정의 이해 (chmod, chown)
리눅스는 다중 사용자(Multi-user) 시스템입니다. 하나의 운영체제에 여러 사람이 동시에 접속해 사용할 수 있기 때문에, "누가 이 파일을 읽고, 쓰고, 실행할 수 있는가?"를 철저하게 통제해야 합니다.
ls -l 명령어를 입력했을 때 나타나는 구조를 바탕으로 권한을 이해해 봅시다.
1. 리눅스 파일 권한 구조 분석
ls -l을 치면 맨 왼쪽에 -rwxr-xr-- 같은 복잡한 문자들이 나타납니다. 이 문자열은 총 10자리로 이루어져 있으며 다음과 같이 쪼개어 해석합니다.
- rwx r-x r--
[1] [2] [3] [4]
- [1] 파일 유형 (1자리): -는 일반 파일, d는 디렉터리(Directory)를 의미합니다.
- [2] 소유자 권한 (3자리 - User): 파일을 만든 사람(Owner)이 가진 권한입니다.
- [3] 그룹 권한 (3자리 - Group): 파일 소유자가 속한 그룹의 구성원들이 가진 권한입니다.
- [4] 나머지 사용자 권한 (3자리 - Others): 소유자도 아니고 그룹 종속자도 아닌, 제3의 모든 사용자의 권한입니다.
권한 기호의 의미
- r (Read / 읽기): 파일 내용을 보거나 디렉터리 내부 목록을 볼 수 있는 권한 (숫자로 4)
- w (Write / 쓰기): 파일 내용을 수정, 삭제하거나 디렉터리 내에 파일을 생성할 수 있는 권한 (숫자로 2)
- x (Execute / 실행): 프로그램이나 스크립트 파일을 실행하거나, 디렉터리 내부로 진입(cd)할 수 있는 권한 (숫자로 1)
- - (Denied / 권한 없음): 해당 권한이 부여되지 않음 (숫자로 0)
2. chmod (Change Mode): 파일 권한 변경하기
chmod는 파일이나 디렉터리의 읽기/쓰기/실행 권한을 변경하는 명령어입니다. 크게 숫자(8진수) 방식과 문자 기호 방식 두 가지로 나뉩니다.
① 숫자(8진수) 지정 방식 (가장 많이 사용됨)
각 그룹(User, Group, Others)의 권한 점수를 합산하여 3자리 숫자로 표현합니다.
- r(4) + w(2) + x(1) = 7 (모든 권한 허용)
- r(4) + w(2) + -(0) = 6 (읽고 쓰기 가능)
- r(4) + -(0) + x(1) = 5 (읽고 실행 가능)
- r(4) + -(0) + -(0) = 4 (읽기만 가능)
자주 쓰는 설정 예시:
- chmod 755 script.sh: 소유자는 모든 권한(7), 그룹과 타인은 읽고 실행(5)만 가능하게 설정합니다. (일반적인 웹서버 폴더나 실행 스크립트 설정)
- chmod 644 document.txt: 소유자는 읽고 쓰기(6), 그룹과 타인은 읽기(4)만 가능하게 설정합니다. (일반적인 텍스트 파일 표준)
- chmod 700 private.txt: 오직 소유자만 모든 권한(7)을 갖고 다른 사람들은 전혀 접근하지 못하게(00) 막습니다.
② 문자 기호 지정 방식
대상을 기호로 지정하여 직관적으로 권한을 추가하거나 제거합니다.
- 대상: u (User), g (Group), o (Others), a (All, 전체)
- 연산자: + (권한 추가), - (권한 제거), = (권한을 그대로 지정)
- 사용 예시:
- chmod u+x file.sh : 파일 소유자(u)에게 실행(x) 권한을 추가합니다.
- chmod g-w file.txt : 그룹(g)원들의 쓰기(w) 권한을 박탈합니다.
- chmod o=r file.txt : 나머지 사용자(o)의 권한을 오직 읽기(r)로만 지정합니다.
3. chown (Change Owner): 파일 소유권 변경하기
chown은 파일이나 디렉터리의 소유자와 소유 그룹을 변경하는 명령어입니다. 파일의 권한 배포 자체를 통제하기 위해 소유주 자체를 바꿀 때 사용하며, 시스템 핵심부를 건드리는 작업이 많아 대개 sudo와 함께 관리자 권한으로 실행합니다.
- 기본 문법: chown [새로운소유자] [파일명]
- 소유자와 그룹을 동시에 바꾸기: chown [새로운소유자]:[새로운그룹] [파일명]
사용 예시:
- sudo chown ubuntu server.log : server.log 파일의 소유자를 ubuntu 사용자로 변경합니다.
- sudo chown devuser:devgroup project/ : project 폴더의 소유자를 devuser로, 소유 그룹을 devgroup으로 동시에 변경합니다.
- sudo chown -R nginx:nginx /var/www/html : -R (Recursive) 옵션을 사용하여 /var/www/html 디렉터리는 물론, 그 하위에 있는 모든 파일과 폴더의 소유자와 그룹을 일괄적으로 nginx로 변경합니다. (웹 서버 세팅 시 필수적으로 쓰이는 테크닉입니다.)
요약 및 팁
리눅스 터미널을 다룰 때는 항상 내가 서 있는 곳(pwd)과 파일의 정보(ls -l)를 확인하는 습관이 중요합니다.
웹 서버에 파일을 올렸는데 403 Forbidden(접근 거부) 에러가 발생한다면, 높은 확률로 파일 권한(chmod)이 잘못되었거나 nginx/apache 같은 웹서버 프로그램이 파일 소유권(chown)을 가지고 있지 못해서 발생하는 문제입니다. 이때 파일은 644, 폴더는 755 권한이 부여되어 있는지, 소유주가 올바른지 확인해 문제를 해결할 수 있습니다.