
※ 경로 기본 개념
/ # 루트 디렉토리(최상위 경로)
. # 현재 디렉토리
.. # 상위 디렉토리
~ # 홈 디렉토리(/home/username)
/path1/path2 # 절대경로(현재 위치와 무관하게 항상 동일한 위치를 가리킴, 루트 디렉토리부터의 경로)
./ # 현재 디렉토리에 있는 파일을 실행하거나 접근할 때 사용(예:./start.sh)
# 현재 디렉토리는 PATH에 포함되지 않기 때문에 경로를 직접 지정해야 실행 가능
※ ls (목록 조회)
ls
# 현재 디렉토리 내부 파일/디렉토리(폴더) 목록 조회
ls /var/log
# (어디서나) 절대경로 /var/log 디렉토리 내부 목록 조회
ls -alht
# 현재 디렉토리 내부 숨김, 상세, 용량, 시간 기준 정렬 옵션을 조합한 상세 목록 조회
ls -alht /etc
# (어디서나) 숨김, 상세, 용량, 시간 기준 정렬 옵션을 조합한 절대경로 /etc 디렉토리 내부 상세 목록 조회
| 옵션 | 의미 |
| -a | 숨김 파일 표시 |
| -l | 상세 정보 표시 |
| -h | 용량 가독성 표시 |
| -t | 시간 기준 정렬 |
※ pwd (현재 디렉토리의 절대경로 출력)
pwd
# 현재 디렉토리의 절대경로 출력
※ cd (디렉토리 이동)
cd ./scripts
# 현재 디렉토리 내부 scripts 디렉토리로 이동
cd /usr/local/bin
# (어디서나) 절대경로 /usr/local/bin 디렉토리로 이동
cd ~/project
# (어디서나) 홈 디렉토리 기준 project 디렉토리로 이동
※ mkdir (디렉토리 생성)
mkdir test
# 현재 디렉토리 내부에 test라는 새 디렉토리 생성
mkdir -p a/b/c
# 현재 디렉토리 내부에 상위 디렉토리가 없어도 자동으로 a → b → c 순서로 디렉토리 모두 생성
mkdir -p /var/www/logs
# (어디서나) 지정한 절대경로에 logs까지 전체 디렉토리 구조를 한 번에 생성
| 옵션 | 의미 |
| -p | 중간 경로가 없어도 함께 생성 |
※ rm (파일/디렉토리 삭제)
rm file.txt
# 현재 디렉토리 내부에 있는 file.txt 파일 삭제
rm /tmp/file.txt
# (어디서나) 절대경로 /tmp/ 내부에 있는 file.txt 파일 삭제
rm -r folder
# 현재 디렉토리 내부에 있는 folder 디렉토리 및 내부 모든 파일/디렉토리 삭제
rm -r /var/log/old
# (어디서나) 절대경로 /var/log/ 내부에 있는 old 디렉토리 삭제
rm -rf folder
# 현재 디렉토리 내부에 있는 folder 디렉토리를 강제 삭제 ※ 위험
| 옵션 | 의미 |
| -r | 디렉토리 재귀 삭제 |
| -f | 강제 삭제(경고 없음) |
※ cp (복사)
cp a.txt b.txt
# 현재 디렉토리 내부에 있는 a.txt 파일을 b.txt 이름으로 복사
cp /tmp/a.txt .
# (어디서나) 절대경로 /tmp/ 내부에 있는 a.txt 파일을 현재 위치(.)로 복사
cp -r src backup
# 현재 디렉토리 내부에 있는 src 디렉토리를 backup 디렉토리로 재귀 복사
# backup 디렉토리가 존재할 경우 backup/src 디렉토리가 생성됨
# backup 디렉토리가 존재하지 않을 경우 src의 복사본 디렉토리 backup이 생성됨
cp -r /var/www /backup/
# (어디서나) 절대경로 /var/ 내부에 있는 www 디렉토리를 절대경로 /backup/ 디렉토리 안에 그대로 재귀 복사
| 옵션 | 의미 |
| -r | 디렉토리 복사 시 필수 |
※ mv (이동&이름 변경)
mv a.txt b.txt
# 현재 디렉토리 내부에 있는 a.txt 파일의 이름을 b.txt로 변경
mv a.txt /tmp/
# 현재 디렉토리 내부에 있는 a.txt 파일을 절대경로 /tmp/ 디렉토리로 이동
mv /tmp/a.txt .
# (어디서나) 절대경로 /tmp/ 내부에 있는 a.txt 파일을 현재 위치로 이동
※ cat (파일 내용 출력)
cat file.txt
# 현재 디렉토리 내부에 있는 file.txt 파일의 전체 내용을 한 번에 출력
cat /var/log/syslog
# (어디서나) 절대경로 /var/log/ 내부에 있는 syslog 파일 내용 출력
※ tail (실시간 로그 모니터링)
tail -f app.log
# 현재 디렉토리 내부에 있는 app.log 파일의 마지막 부분을 실시간으로 계속 출력
tail -n 100 -f app.log
# 현재 디렉토리 내부에 있는 app.log 파일의 마지막 100줄을 먼저 출력하고 이후 변경 내용을 실시간으로 출력
tail -f /var/log/nginx/error.log
# (어디서나) 절대경로 /var/log/nginx/ 내부에 있는 error.log 파일 실시간 모니터링
| 옵션 | 의미 |
| -f | 파일에 추가되는 로그를 실시간 출력 |
| -n | 파일의 끝부분에서 출력할 줄 수 지정 |
※ less (긴 파일 보기)
less log.txt
# 현재 디렉토리 내부에 있는 log.txt 파일을 페이지 단위로 스크롤하며 읽기(q로 종료)
less /etc/nginx/nginx.conf
# (어디서나) 절대경로 /etc/nginx/ 내부에 있는 nginx.conf 설정 파일을 스크롤 방식으로 열람(q로 종료)
※ which (PATH에 등록된 명령어 실행 파일 경로 출력)
which ssh
# (어디서나) ssh 실행 파일 경로 출력
# 경로가 출력된다는 건 실행 파일이 PATH 안에 있어서 터미널에서 명령어 이름만 입력해도 바로 실행 준비가 된다는 의미
# ssh, scp, java, mysql, hbase, nginx, docker, ls 등 실행 파일 경로 확인 가능
# 단, 실행 파일이 PATH 안에 있을 때만 출력되며, 설치되지 않았거나 PATH에 등록되지 않은 경우에는 출력되지 않음
※ grep (문자열 검색 후 출력)
grep "ERROR" app.log
# 현재 디렉토리 내부에 있는 app.log 파일에서 문자열 ERROR 포함된 줄 검색 후 출력
grep -r "ERROR" .
# 현재 디렉토리(.)와 그 하위 모든 디렉토리에서 문자열 ERROR 재귀 검색 후 출력
grep "ERROR" /var/log/syslog
# (어디서나) 절대경로 /var/log/ 내부에 있는 syslog 파일에서 문자열 ERROR 검색 후 출력
grep -r "ERROR" /var/log/
# (어디서나) 절대경로 /var/log/ 디렉토리와 그 하위 모든 파일 및 디렉토리에서 문자열 ERROR 재귀 검색 후 출력
| 옵션 | 의미 |
| -r | 디렉토리 하위 전체에서 문자열 검색 |
| -i | 대소문자 구분 없이 검색 |
| -n | 검색 결과에 줄 번호 표시 |
※ find (파일 검색 후 출력)
find . -name "*.log"
# 현재 디렉토리 이하에서 모든 로그 파일 검색 후 출력
find / -name "*.log"
# (어디서나) 시스템 전체에서 모든 로그 파일 검색 후 출력
※ top (실시간 시스템 모니터링)
top
# (어디서나) CPU·메모리·프로세스를 실시간으로 모니터링
※ df/du (디스크 사용량 확인)
df -h
# (어디서나) 전체 파일 시스템 사용량 표시
du -sh *
# 현재 디렉토리 내부에 있는 각 파일/디렉토리의 디스크 사용량을 각각 합산하여 출력
du -sh /var/log/*
# (어디서나) 절대경로 /var/log/ 내부 항목의 용량을 한 번에 확인
| 옵션 | 의미 |
| -h | 용량 가독성 |
| -s | 요약 출력 |
※ ps/kill (프로세스 관리)
ps -ef
# (어디서나) 현재 실행 중인 모든 프로세스 목록 출력
ps -ef | grep java
# (어디서나) java 관련 프로세스만 필터링
kill 1006
# (어디서나) PID 1006 프로세스 종료
kill -9 1006
# (어디서나) PID 1006 프로세스 강제 종료 ※ 일반 종료가 안될 때 사용
| 옵션 | 의미 |
| -ef | 전체 프로세스 상세 조회 |
| -9 | 강제 종료 |
※ sudo (관리자 권한으로 명령 실행)
sudo <명령어>
# 명령어를 root 권한으로 실행(설치·설정 변경 등 시스템 작업에 사용)
sudo -i
# root의 로그인 shell 환경으로 진입(PATH·환경 변수·홈 디렉토리 적용)
# su - 와 비슷하나 sudo 기반이므로 보안적으로 더 안전
sudo -u nginx whoami
# nginx 사용자 권한으로 whoami 명령어 실행(실제 실행 사용자 확인)
sudo -k
# sudo 인증 정보 삭제(다음 sudo 실행 시 비밀번호 재입력 필요)
sudo -l
# 현재 계정에 허용된 sudo 명령 목록 조회
| 옵션 | 의미 |
| -i | root 로그인 shell 전환 |
| -u <user> | 지정한 user 권한으로 실행 |
| -k | sudo 인증 정보 삭제 |
| -l | sudo 허용 명령 목록 조회 |
※ su (사용자 전환)
su -
# root 계정의 로그인 shell로 전환(환경 변수 포함)
su - postgres
# postgres 사용자로 로그인 환경까지 적용하여 전환(DB 서버에서 자주 사용)
su -c "systemctl status nginx" root
# root로 로그인하지 않고 명령 1회만 실행
| 옵션 | 의미 |
| - | 사용자 전환(환경 유지) |
| -c | 지정 사용자 권한으로 명령 1회 실행 |
※ 네트워크 관련
ping example.com
# ping : 네트워크 레벨 연결 확인
# (어디서나) example.com과의 네트워크 연결 여부 확인
curl https://example.com
# curl : HTTP 서비스 응답 확인
# (어디서나) https://example.com으로 HTTP(S) 요청을 보내고 응답 본문을 출력
ss -tlnp
# ss : 서버 내부 포트/프로세스 확인
# (어디서나) TCP 기반으로 LISTEN 중인 포트와 해당 포트를 사용하는 프로세스 확인
※ 권한/사용자
chmod 600 key.pem
# 현재 디렉토리 내부에 있는 key.pem 파일의 권한을 소유자 읽기/쓰기(600)로 설정
chmod 600 /home/ubuntu/key.pem
# (어디서나) 절대경로 /home/ubuntu/key.pem 파일의 권한을 소유자 읽기/쓰기(600)로 변경
chown userA:groupA file.txt
# 현재 디렉토리 내부에 있는 file.txt 파일의 소유자를 userA로, 그룹을 groupA로 변경
chown root:groupA /etc/nginx/nginx.conf
# (어디서나) 절대경로 /etc/nginx/nginx.conf 파일의 소유자를 root로, 그룹을 groupA로 변경
| 권한 숫자 | 기호 표기 (소유자, 그룹, 기타) | 의미 | 주 용도 |
| 600 | rw------- | 소유자 읽기/쓰기 | SSH Private Key, 민감 파일 |
| 400 | r-------- | 소유자 읽기 | 설정파일 읽기 전용 |
| 644 | rw-r--r-- | 소유자 읽기/쓰기, 그룹과 기타 읽기 | 일반 텍스트/웹 파일 |
| 640 | rw-r----- | 소유자 읽기/쓰기 , 그룹 읽기 | 로그파일 공유, 권한 분리 |
| 700 | rwx------ | 소유자 읽기/쓰기/실행 | 개인 스크립트/디렉토리 |
| 755 | rwxr-xr-x | 소유자 읽기/쓰기/실행 , 그룹과 기타 읽기/실행 | 실행 스크립트, 웹 디렉토리 |
| 775 | rwxrwxr-x | 소유자와 그룹 읽기/쓰기/실행, 기타 읽기/실행 | 협업 폴더 |
| 777 | rwxrwxrwx | 모두 읽기/쓰기/실행 | 절대 비추천(보안 위험) |
※ 서비스 관리
systemctl status nginx
# (nginx가 설치된 서버에서) nginx 서비스 상태 확인
systemctl restart nginx
# (nginx가 설치된 서버에서) nginx 서비스 재시작
systemctl start nginx
# (nginx가 설치된 서버에서) nginx 서비스 시작
systemctl stop nginx
# (nginx가 설치된 서버에서) nginx 서비스 중지
※ 대부분의 systemctl 명령어는 관리자(root) 권한이 필요하며, 권한이 없는 경우 sudo와 함께 사용
※ SSH 접속
▶ SSH 기본 접속
ssh user@203.0.113.10
# (로컬에서) user 계정으로 203.0.113.10 서버에 SSH 접속
▶ SSH + 키파일(.pem)
ssh -i mykey.pem user@203.0.113.10
# (로컬에서) 비밀번호 대신 pem 개인키로 인증 후 user 계정으로 203.0.113.10 서버에 SSH 접속
▶ SSH + 포트 번호 지정
ssh -p 10022 user@203.0.113.10
# (로컬에서) SSH 포트가 10022인 203.0.113.10 서버에 user 계정으로 접속
ssh -i mykey.pem -p 10022 user@203.0.113.10
# (로컬에서) SSH 포트가 10022인 203.0.113.10 서버에 user 계정의 비밀번호 대신 pem 개인키로 인증하여 접속
| 옵션 | 의미 |
| -p | 접속 포트 지정(소문자 p) |
| -i | 개인 키 파일 지정 |
※ SCP 파일 전송 (SSH 기반)
▶ 로컬 → 원격 업로드
scp file.txt user@192.168.10.10:/home/user/
# (로컬에서) 로컬 file.txt 파일을 원격 서버 192.168.10.10의 절대경로 /home/user/에 업로드
scp -P 10022 file.txt user@192.168.10.10:/home/user/
# (로컬에서) 로컬 file.txt 파일을 SSH 포트 번호가 10022인 원격 서버 192.168.10.10의 절대경로 /home/user/에 업로드
▶ 원격 → 로컬 다운로드
scp user@192.168.10.10:/var/log/app.log ./
# (로컬에서) 원격 서버 192.168.10.10의 절대경로 /var/log/ 내부에 있는 app.log 파일을 현재 디렉토리로 다운로드
scp -P 10022 user@192.168.10.10:/var/log/app.log ./
# (로컬에서) SSH 포트 번호가 10022인 원격 서버 192.168.10.10의 절대경로 /var/log/ 내부에 있는 app.log 파일을 현재 디렉토리로 다운로드
▶ 원격 → 원격
scp userA@192.168.10.10:/var/log/app.log userB@192.168.10.20:/backup/
# (로컬에서) 원격 서버 192.168.10.10의 절대경로 /var/log/ 내부에 있는 app.log 파일을 복사해 원격 서버 192.168.10.20의 절대경로 /backup/ 디렉토리 내부에 붙여넣기
# 한쪽이라도 기본 SSH 포트 번호(22)가 아닌 다른 포트를 지정해야 한다면 SCP 한 줄 명령으로는 불가능하며, 로컬을 거치거나 원격 서버에 접속해 SCP를 실행해야 함
# IP 대신 도메인 주소 사용 가능
| 옵션 | 의미 |
| -P | 접속 포트 지정(대문자 P) |
| -i | 개인 키 파일 지정 |
| -r | 디렉토리 재귀 전송 |
'DevOps > Linux' 카테고리의 다른 글
| [DevOps] Linux 명령어 사용 전 반드시 해야 하는 Ubuntu 기본 세팅 (0) | 2025.12.05 |
|---|