
※ 경로 기본 개념
/ # 루트 디렉토리(최상위 경로)
. # 현재 디렉토리
.. # 상위 디렉토리
~ # 홈 디렉토리(/home/username)
/path1/path2 # 절대경로(현재 위치와 무관하게 항상 동일한 위치를 가리킴, 루트 디렉토리부터의 경로)
./ # 현재 디렉토리에 있는 파일을 실행하거나 접근할 때 사용(예:./start.sh)
# 현재 디렉토리는 PATH에 포함되지 않기 때문에 경로를 직접 지정해야 실행 가능
※ ls (목록 조회)
숨김(-a), 상세(-l), 용량 가독성(-h), 시간 기준 정렬(-t)
ls
# (현재 위치) 현재 디렉토리의 파일/디렉토리(폴더) 목록 조회
ls /var/log
# (어디서나) 절대경로 /var/log 내부 목록 조회
ls -alht
# (현재 위치) 숨김, 상세, 용량 가독성, 시간 기준 정렬 옵션을 조합한 상세 목록 조회
ls -alht /etc
# (어디서나) 숨김, 상세, 용량 가독성, 시간 기준 정렬 옵션을 조합한 절대경로 /etc 내부 상세 목록 조회
※ pwd (현재 위치한 디렉토리 경로 확인)
pwd
# (어디서나) 현재 위치한 디렉토리의 절대경로 출력
※ cd (디렉토리 이동)
cd ./scripts
# (현재 위치) 현재 디렉토리 안의 scripts 디렉토리로 이동
cd /usr/local/bin
# (어디서나) 절대경로 /usr/local/bin 디렉토리로 이동
cd ~/project
# (어디서나) 홈 디렉토리 기준 project 디렉토리로 이동
※ mkdir (디렉토리 생성)
중간 경로 자동 생성(-p)
mkdir test
# (현재 위치) test라는 새 디렉토리 생성
mkdir -p a/b/c
# (현재 위치) 상위 디렉토리가 없어도 자동으로 a → b → c 순서로 모두 생성
mkdir -p /var/www/logs
# (어디서나) 지정한 절대경로에 logs까지 전체 디렉토리 구조를 한 번에 생성
※ rm (파일/디렉토리 삭제)
디렉토리 삭제(-r), 강제 삭제(-f), 삭제 전 확인(-i)
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 디렉토리를 강제 삭제 ※ 매우 위험
※ cp (복사)
디렉토리 재귀 복사(-r), 덮어쓰기 전 물어보기(-i), 원본 권한/시간 보존(-p)
cp a.txt b.txt
# (현재 위치) a.txt를 b.txt 이름으로 복사
cp /tmp/a.txt .
# (어디서나) 절대경로 /tmp/ 내부에 있는 a.txt 파일을 현재 위치(.)로 복사
cp -r src backup
# (현재 위치) src 디렉토리를 backup 디렉토리로 재귀 복사
cp -r /var/www /backup/
# (어디서나) /var/ 내부에 있는 www 디렉토리를 /backup/ 안에 그대로 복사
※ mv (이동&이름 변경)
덮어쓰기 전 확인(-i), 강제 덮어쓰기(-f)
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 (실시간 로그 모니터링)
줄 수 지정(-n), 실시간 출력(-f)
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 실시간 모니터링
※ less (긴 파일 보기)
less log.txt
# (현재 위치) 긴 파일을 페이지 단위로 스크롤하며 읽기(q로 종료)
less /etc/nginx/nginx.conf
# (어디서나) 절대경로 /etc/nginx/ 내부에 있는 nginx.conf 설정 파일을 스크롤 방식으로 열람
※ which (PATH에 등록된 명령어 실행 파일 경로 확인)
which ssh
# (어디서나) ssh 실행 파일 경로 출력
# 경로가 출력된다는 건 실행 파일이 PATH 안에 있어서 터미널에서 명령어 이름만 입력해도 바로 실행 준비가 된다는 의미
# ssh, scp, java, mysql, hbase, nginx, docker, ls 등 실행 파일 경로 확인 가능
# 단, 실행 파일이 PATH 안에 있을 때만 출력되며, 설치되지 않았거나 PATH에 등록되지 않은 경우에는 출력되지 않음
※ grep (문자열 검색)
대소문자 무시(-i), 디렉토리 재귀 검색(-r), 줄 번호 표시(-n)
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 재귀 검색
※ find (파일 검색)
find . -name "*.log"
# (현재 위치) 현재 디렉토리 이하에서 모든 로그 파일 검색
find / -name "*.log"
# (어디서나) 시스템 전체에서 모든 로그 파일 검색
※ top (실시간 시스템 모니터링)
top
# (어디서나) CPU·메모리·프로세스를 실시간으로 모니터링
※ df/du (디스크 사용량 확인)
df:사람이 읽기 쉬운 단위(-h)
du:총합 표시(-s), 사람이 읽기 쉬운 단위(-h), Depth 제한(-d)
df -h
# (어디서나) 전체 파일 시스템 사용량 표시
du -sh *
# (현재 위치) 각 파일/디렉토리의 용량 합계 출력
du -sh /var/log/*
# (어디서나) 절대경로 /var/log/ 내부 항목의 용량을 한 번에 확인
※ ps/kill (프로세스 관리)
ps:모든 프로세스(-e), Full Format(-f)
kill:강제 종료(-9), 정상 종료(-15)
ps -ef
# (어디서나) 현재 실행 중인 모든 프로세스 목록 출력
ps -ef | grep java
# (어디서나) java 관련 프로세스만 필터링
kill 1234
# (어디서나) PID 1234 프로세스 종료
kill -9 1234
# (어디서나) PID 1234 프로세스 강제 종료 ※ 일반 종료가 안될 때 사용
※ sudo (관리자 권한으로 명령 실행)
root 로그인 shell(-i), 다른 사용자로 명령 실행(-u), sudo 인증 정보 초기화(-k), sudo 권한 목록 보기(-l), sudo 인증 갱신(-v)
sudo <명령어>
# 명령어를 root 권한으로 실행(설치·설정 변경 등 시스템 작업에 사용)
sudo -i
# root의 로그인 shell 환경으로 진입(PATH·환경 변수·홈 디렉토리 적용)
# su - 와 비슷하나 sudo 기반이므로 보안적으로 더 안전
sudo -u nginx whoami
# nginx 사용자 권한으로 명령 실행
sudo -k
# 캐시된 sudo 인증 정보 초기화 → 다음 sudo 실행 시 비밀번호 요구
sudo -l
# 현재 계정에 허용된 sudo 명령 목록 조회
※ su (사용자 전환)
로그인 shell로 전환(-), 명령 1회 실행(-c), shell 지정(-s), 환경 변수 유지(-m)
su -
# root 계정의 로그인 shell로 전환(환경 변수 포함)
su - postgres
# postgres 사용자로 로그인 환경까지 적용하여 전환(DB 서버에서 자주 사용)
su -c "systemctl status nginx" root
# root로 로그인하지 않고 명령 1회만 실행
※ 네트워크 관련
ping google.com
# (어디서나) google.com 네트워크 연결 상태 확인
curl https://naver.com
# (어디서나) https://naver.com에 HTTP(S) 요청을 보내고 서버에서 받은 응답 본문을 터미널에 출력
curl -I https://naver.com
# (어디서나) https://naver.com에 HEAD 요청을 보내 응답 헤더만 조회(상태코드, 서버 정보 확인)
ss -tlnp
# (어디서나) TCP 기반으로 열려 있는 포트 목록과 해당 포트를 사용하는 프로세스를 확인
※ 권한/사용자
chmod 600 key.pem
# (현재 위치) key.pem 파일을 '소유자만 읽기/쓰기' 가능하도록 제한
chmod 600 /home/ubuntu/key.pem
# (어디서나) 절대경로 /home/ubuntu/ 내부에 있는 key.pem 파일 권한 변경 '소유자만 읽기/쓰기'
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 | 모두 읽기/쓰기/실행 | 절대 비추천(보안 위험) |
※ 서비스 관리
sudo systemctl status nginx
# (nginx 설치 서버에서) nginx 서비스 상태 확인
sudo systemctl restart nginx
# (nginx 설치 서버에서) nginx 서비스 재시작
※ SSH 접속
포트 번호 지정(소문자 -p), Private Key 파일 지정(-i), 접속 과정 상세 출력(-v)
▶ 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 개인키로 인증 후 접속
▶ SSH + 포트 번호 지정
ssh -p 10022 user@203.0.113.10
# (로컬) SSH 포트 번호가 10022일 때 접속
ssh -i mykey.pem -p 10022 user@203.0.113.10
# (로컬) 키파일 + 포트 번호를 함께 지정한 SSH 접속
※ SCP 파일 전송 (SSH 기반)
포트 번호 지정(대문자 -P), Private Key 파일 지정(-i), 디렉토리 재귀 복사(-r), 전송 과정 상세 출력(-v)
▶ 로컬 → 원격 업로드
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 대신 도메인 주소 사용 가능
'DevOps > Linux' 카테고리의 다른 글
| [DevOps] Linux 명령어 사용 전 반드시 해야 하는 Ubuntu 기본 세팅 (0) | 2025.12.05 |
|---|