rwx | r-x | r-x
↑ ↑ ↑
Owner Group Others
| 위치 | 의미 | 예시 권한 | 설명 |
|---|---|---|---|
| 1~3 (rwx) | 파일 소유자(owner)의 권한 | 읽기/쓰기/실행 | 파일 주인의 모든 권한 |
| 4~6 (r-x) | 같은 그룹 사용자(group)의 권한 | 읽기/실행만 | 쓰기 권한 없음 |
| 7~9 (r-x) | 기타 사용자(others)의 권한 | 읽기/실행만 | 제한된 접근 권한 |
| 문자 | 의미 | 파일에서 | 디렉토리에서 |
|---|---|---|---|
r | read (읽기) | 파일 내용을 읽을 수 있음 | 파일 목록을 볼 수 있음 |
w | write (쓰기) | 파일 내용을 수정할 수 있음 | 파일 추가/삭제 가능 |
x | execute (실행) | 파일을 실행할 수 있음 | 디렉토리에 접근 가능 (cd 가능) |
- | 해당 권한 없음 | 예: r--는 읽기만 가능 | 해당 동작 불가 |
rwxr-xr-xrwx: 소유자는 읽기, 쓰기, 실행 모두 가능
r-x: 같은 그룹의 사용자는 읽기와 실행 가능, 쓰기는 불가
r-x: 다른 사용자도 읽기와 실행 가능
rw-r--r--소유자: 읽기 + 쓰기
그룹: 읽기만
기타 사용자: 읽기만
→ 가장 일반적인 텍스트 파일 권한 형태
pwd는 "print working directory"의 약자로, 현재 터미널 세션이 위치한 절대 경로를 출력합니다.
$ pwd
/home/myuser/projects/java
이 출력은 현재 /home/myuser/projects/java 디렉터리에 있다는 의미입니다.
| 명령어 | 설명 | 예시 |
|---|---|---|
pwd | 현재 디렉터리 위치 출력 | pwd |
ls | 현재 디렉터리의 파일/폴더 목록 보기 | ls -la |
cd | 디렉터리 이동 | cd /etc |
cd .. | 상위 디렉터리로 이동 | cd .. |
cd ~ | 홈 디렉터리로 이동 | cd ~ (= /home/username) |
현재 디렉터리부터 하위 디렉터리까지 주어진 조건의 파일을 찾아 해당 경로를 표시합니다.
find [경로] [옵션] [정규표현식] [파일명]
| 옵션 | 설명 | 예시 |
|---|---|---|
-name | 이름 기준으로 파일 검색 | find . -name "*.txt" |
-user | 특정 사용자의 파일이나 디렉터리 검색 | find / -user john |
-perm | 지정된 권한의 파일 검색 | find . -perm 755 |
-type | 파일 유형에 따라 파일 검색 | find . -type d (디렉터리만) |
-atime n | n일 이전에 접근한 파일 검색 | find . -atime +7 |
-exec | 검색된 파일에 수행할 명령어 지정 | find . -name "*.log" -exec rm {} \; |
파일의 앞 부분을 지정한 만큼 출력하는 명령어입니다.
head [옵션] 파일명
| 옵션 | 설명 | 예시 |
|---|---|---|
-c | 출력을 원하는 용량 지정 (바이트 단위) | head -c 100 file.txt |
-숫자 또는 -n 숫자 | 출력을 원하는 줄 수 지정 | head -n 5 file.txt |
⚠️ 기본값: 옵션을 지정하지 않으면 10줄씩 출력됩니다.
cat /etc/passwd > p.txt
이 명령어는 /etc/passwd 파일의 전체 내용을 p.txt 파일로 복사합니다.
| 구성 요소 | 의미 |
|---|---|
cat /etc/passwd | /etc/passwd 파일 내용을 출력 (concatenate) |
> | 리디렉션 연산자: 출력 결과를 파일로 저장 (덮어쓰기) |
p.txt | 결과를 저장할 목적 파일 이름 |
| 기호 | 의미 | 설명 | 예시 |
|---|---|---|---|
> | 덮어쓰기 (overwrite) | 기존 파일 내용을 완전히 교체 | echo "Hello" > file.txt |
>> | 이어쓰기 (append) | 기존 내용 뒤에 추가 | echo "World" >> file.txt |
# 덮어쓰기 예시
cat /etc/passwd > p.txt
# 이어쓰기 예시
cat /etc/passwd >> p.txt # 기존 p.txt에 내용 추가
파이프는 둘 이상의 명령을 함께 묶어 출력 결과를 다른 프로그램의 입력으로 전환하는 기능입니다.
명령어1 | 명령어2 | 명령어3
명령어1의 출력 결과 → 명령어2의 입력으로 처리명령어2의 출력 결과 → 명령어3의 입력으로 처리 # 파일 내용을 출력하고 줄 수를 세기
cat /etc/passwd | wc -l
# 프로세스 목록에서 특정 프로세스 찾기
ps aux | grep apache
# 로그 파일에서 에러만 필터링하고 최근 10개만 보기
cat /var/log/system.log | grep "ERROR" | tail -10
외부 호스트에 신호를 보내며, 신호를 받은 호스트는 응답을 주면서 서로 네트워크가 연결되어 있음을 확인하는 명령어입니다.
ping [옵션] [도메인명 또는 IP주소]
| 옵션 | 설명 | 예시 |
|---|---|---|
-c [요청수] | ping을 보낼 회수 (생략시 무제한 실행) | ping -c 5 google.com |
-i [초] | 신호를 보내는 시간 간격 (기본값: 1초) | ping -i 2 google.com |
-s [패킷 크기] | 전송하는 패킷 크기를 바이트 단위로 설정 | ping -s 1024 google.com |
# 구글 서버와의 연결 확인 (5회)
ping -c 5 google.com
# 특정 IP 주소로 연결 확인
ping -c 3 8.8.8.8
# 큰 패킷으로 테스트
ping -s 1000 -c 3 naver.com
시스템을 종료하거나 재부팅하는 명령어입니다. 현재 수행 중인 프로세스들을 안전하게 종료하며, sync를 수행하여 저장되지 않은 데이터를 디스크에 저장하고 모든 파일 시스템을 마운트한 후 시스템을 종료합니다.
⚠️ 주의:
root권한이 필요한 명령어입니다.
# 즉시 종료
shutdown -h now
# 10분 후 종료 (메시지와 함께)
shutdown -h +10 "시스템 점검을 위해 10분 후 종료됩니다"
# 즉시 재부팅
shutdown -r now
shutdown과 동일한 기능을 하지만 런레벨을 사용하여 시스템 상태를 제어합니다.
init [런레벨]
| 런레벨 | 설명 | 사용 예시 |
|---|---|---|
0 | 지금 즉시 종료 | init 0 |
1 | 단일 사용자 복구 모드로 재시작 | init 1 |
2 | 다중 사용자 모드 (NFS 사용 불가) | init 2 |
3 | 텍스트 모드로 재시작 | init 3 |
4 | 사용안함 | - |
5 | X 윈도우 모드로 재시작 | init 5 |
6 | 재가동 모드 (재부팅) | init 6 |
터미널의 내용을 지우는 간단한 명령어입니다.
clear
💡 팁:
Ctrl + L단축키로도 같은 효과를 얻을 수 있습니다.
ls -l 명령어의 출력을 자세히 살펴보겠습니다:
drwxrwxr-x 3 ex2-user ex2-user 53875910 2월 28 2024 chap
-rw-rw-r-- 1 ex2-user ex2-user 1426 2월 28 2024 file.txt
| 항목 | 예시값 | 의미 |
|---|---|---|
| 파일 유형과 권한 | drwxrwxr-x | 디렉터리(d) + 권한 정보 |
| 파일 유형과 권한 | -rw-rw-r-- | 일반파일(-) + 권한 정보 |
| 링크 수 | 3 | 물리적인 파일 연결 개수 |
| 소유자 | ex2-user | 파일 소유자명 |
| 소유 그룹 | ex2-user | 파일 소유 그룹명 |
| 파일 크기 | 53875910 | 파일 크기 (바이트 단위) |
| 수정 시간 | 2월 28 2024 | 파일이 마지막으로 변경된 시간 |
| 파일명 | chap | 파일 또는 디렉터리 이름 |
파일과 디렉터리의 사용자 소유권과 그룹 소유권을 변경할 때 사용합니다.
# 소유자만 변경
chown newuser file.txt
# 소유자와 그룹 모두 변경
chown newuser:newgroup file.txt
# 그룹만 변경
chown :newgroup file.txt
# 하위 디렉터리까지 재귀적으로 변경
chown -R newuser:newgroup directory/
change group을 줄인 명령어로, 파일이나 디렉터리의 그룹 소유권만 변경합니다.
# 그룹 변경
chgrp newgroup file.txt
# 하위 디렉터리까지 재귀적으로 변경
chgrp -R newgroup directory/
💡 차이점:
chown은 소유자와 소유그룹을 모두 변경 가능하지만,chgrp는 소유 그룹만 변경 가능합니다.
파일이나 디렉터리의 접근 허가권을 변경하는 명령어입니다.
chmod [옵션] [권한] 파일명
| 옵션 | 설명 | 예시 |
|---|---|---|
-R | 하위 디렉터리 포함 모든 파일의 권한 변경 | chmod -R 755 directory/ |
# 실행 전 권한 확인
$ ls -al
-rw-rw-rw- 1 myuser myuser 1426 May 26 12:23 p.txt
# 모든 권한 부여 (777)
$ chmod 777 p.txt
$ ls -l
-rwxrwxrwx 1 myuser myuser 1426 May 26 12:23 p.txt
| 숫자 | 이진수 | 권한 | 의미 |
|---|---|---|---|
7 | 111 | rwx | 읽기+쓰기+실행 |
6 | 110 | rw- | 읽기+쓰기 |
5 | 101 | r-x | 읽기+실행 |
4 | 100 | r-- | 읽기만 |
3 | 011 | -wx | 쓰기+실행 |
2 | 010 | -w- | 쓰기만 |
1 | 001 | --x | 실행만 |
0 | 000 | --- | 권한 없음 |
# 읽기 전용으로 변경 후 소유자에게 쓰기 권한 추가
$ chmod 444 p.txt
$ ls -l
-r--r--r-- 1 myuser myuser 1426 May 26 12:23 p.txt
$ chmod u+w p.txt
$ ls -l
-rw-r--r-- 1 myuser myuser 1426 May 26 12:23 p.txt
| 대상 | 기호 | 의미 |
|---|---|---|
u | user | 소유자 |
g | group | 그룹 |
o | others | 기타 사용자 |
a | all | 모든 사용자 (u+g+o) |
| 연산자 | 의미 | 예시 |
|---|---|---|
+ | 허가권 부여 | chmod u+x file.txt |
- | 허가권 제거 | chmod g-w file.txt |
= | 특정 사용자에게 허가권 지정 | chmod u=rwx file.txt |
| 권한 | 기호 | 의미 |
|---|---|---|
r | read | 읽기 |
w | write | 쓰기 |
x | execute | 실행 |
# 소유자에게 실행 권한 추가
chmod u+x script.sh
# 그룹에서 쓰기 권한 제거
chmod g-w document.txt
# 기타 사용자의 모든 권한 제거
chmod o-rwx private.txt
# 모든 사용자에게 읽기 권한 부여
chmod a+r public.txt
# 소유자에게만 모든 권한, 나머지는 읽기만
chmod u=rwx,go=r important.txt
umask는 새로 생성되는 파일과 디렉터리의 기본 권한을 설정하는 명령어입니다.
💡 동작 원리: 시스템 기본 권한에서 umask 값을 빼서 실제 권한을 결정합니다.
# 현재 umask 값 확인
umask
# umask 값을 8진수로 확인
umask -S # 문자형으로 표시
| 파일 유형 | 시스템 기본 권한 | umask 예시 | 실제 권한 | 계산 |
|---|---|---|---|---|
| 파일 | 666 (rw-rw-rw-) | 022 | 644 (rw-r--r--) | 666 - 022 = 644 |
| 디렉터리 | 777 (rwxrwxrwx) | 022 | 755 (rwxr-xr-x) | 777 - 022 = 755 |
# umask를 022로 설정 (일반적인 설정)
umask 022
# 파일 생성 테스트
touch test.txt
ls -l test.txt
# 결과: -rw-r--r-- (644 권한)
# 디렉터리 생성 테스트
mkdir testdir
ls -ld testdir
# 결과: drwxr-xr-x (755 권한)
# 더 제한적인 umask 설정
umask 077
touch private.txt
ls -l private.txt
# 결과: -rw------- (600 권한 - 소유자만 접근 가능)
| umask | 파일 권한 | 디렉터리 권한 | 용도 |
|---|---|---|---|
022 | 644 (rw-r--r--) | 755 (rwxr-xr-x) | 일반적인 설정 |
002 | 664 (rw-rw-r--) | 775 (rwxrwxr-x) | 그룹 공유 환경 |
077 | 600 (rw-------) | 700 (rwx------) | 높은 보안이 필요한 경우 |
000 | 666 (rw-rw-rw-) | 777 (rwxrwxrwx) | 모든 권한 허용 (비추천) |
mount는 저장 장치나 파일 시스템을 리눅스 디렉터리 구조에 연결(마운트)하는 명령어입니다.
mount [옵션] [장치] [마운트포인트]
# 현재 마운트된 파일 시스템 확인
mount
# 특정 파일 시스템만 확인
mount -t ext4
# USB 드라이브 마운트
sudo mount /dev/sdb1 /mnt/usb
# CD/DVD 마운트
sudo mount /dev/cdrom /mnt/cdrom
| 옵션 | 설명 | 예시 |
|---|---|---|
-t [파일시스템] | 파일 시스템 유형 지정 | mount -t ntfs /dev/sdb1 /mnt/usb |
-o [옵션들] | 마운트 옵션 지정 | mount -o ro,noexec /dev/sdb1 /mnt/usb |
-a | /etc/fstab의 모든 항목 마운트 | mount -a |
-r | 읽기 전용으로 마운트 | mount -r /dev/sdb1 /mnt/usb |
| 마운트 옵션 | 설명 | 사용 예시 |
|---|---|---|
ro | 읽기 전용 (read-only) | mount -o ro /dev/sdb1 /mnt/usb |
rw | 읽기/쓰기 가능 (read-write) | mount -o rw /dev/sdb1 /mnt/usb |
noexec | 실행 파일 실행 금지 | mount -o noexec /dev/sdb1 /mnt/usb |
nosuid | setuid/setgid 비트 무시 | mount -o nosuid /dev/sdb1 /mnt/usb |
user | 일반 사용자도 마운트 가능 | mount -o user /dev/sdb1 /mnt/usb |
마운트된 파일 시스템을 안전하게 연결 해제하는 명령어입니다.
# 마운트 포인트로 언마운트
umount /mnt/usb
# 장치명으로 언마운트
umount /dev/sdb1
# 강제 언마운트 (사용 중인 경우)
umount -f /mnt/usb
# lazy 언마운트 (사용이 끝나면 자동 해제)
umount -l /mnt/usb
# 1. USB 드라이브 확인
lsblk
# 또는
fdisk -l
# 2. 마운트 포인트 생성
sudo mkdir /mnt/myusb
# 3. 마운트 실행
sudo mount /dev/sdb1 /mnt/myusb
# 4. 마운트 확인
df -h
mount | grep sdb1
# 5. 사용 후 안전하게 언마운트
sudo umount /mnt/myusb
영구적인 마운트 설정을 위해 /etc/fstab 파일을 편집합니다:
# /etc/fstab 예시
/dev/sdb1 /mnt/data ext4 defaults 0 2
UUID=1234-5678 /mnt/backup ntfs-3g defaults,uid=1000,gid=1000 0 0
| 필드 | 설명 | 예시 |
|---|---|---|
| 장치 | 마운트할 장치나 UUID | /dev/sdb1 또는 UUID=1234-5678 |
| 마운트포인트 | 마운트될 디렉터리 | /mnt/data |
| 파일시스템 | 파일 시스템 유형 | ext4, ntfs-3g, vfat |
| 옵션 | 마운트 옵션 | defaults, ro, rw |
| dump | 백업 여부 (0 또는 1) | 0 |
| fsck | 부팅시 검사 순서 | 0, 1, 2 |
이번 포스트에서는 리눅스의 핵심 개념들을 종합적으로 살펴봤습니다:
이러한 기초 개념들을 확실히 익혀두면 리눅스 환경에서 훨씬 효율적이고 안전하게 작업할 수 있습니다! 🚀