Infra/OS

리눅스 명령어

baek-dev 2025. 2. 23. 14:07

✅ 디렉토리 이동 (cd)

pwd                 # 현재 위치 확인
cd ~                # 홈 디렉토리로 이동
cd /경로            # 절대 경로로 이동
cd ./폴더명         # 상대 경로 이동   ./ 는 대부분 생략 가능함
cd ..               # 상위 폴더 이동
cd -                # 이전 디렉토리로 이동

 

✅ 디렉토리 생성 및 삭제 (mkdir, rmdir, touch)

mkdir 폴더명        # 디렉토리 생성
mkdir -p A/B/C      # 여러 개의 디렉토리 한 번에 생성
rmdir 폴더명        # 빈 디렉토리 삭제
rm 파일명           # 파일 삭제
rm -r 폴더명        # 비어있지 않은 디렉토리 삭제
rm -rf 폴더명       # 강제 삭제 (복구 불가능, 주의!)
touch 파일명        # 새로운 빈 파일 생성

 

✅ 파일 목록 확인 (ls)

ls                 # 현재 디렉토리 파일 목록 출력
ls -l              # 상세 정보 출력
ls -al             # 숨김 파일 포함하여 출력
ls -R              # 폴더 내부까지 모두 출력
ls -al | grep 'sshd'       # 파일 목록에서 특정 문자열 포함된 줄만 출력
ll                 # `ls -l`과 동일 (일부 시스템에서 제공)

 

✅ 파일 복사 및 이동 (cp, mv)

cp 원본 복사본                  # 파일 복사
cp -r 원본디렉토리 대상디렉토리     # 디렉토리 복사
cp 파일1 파일2 대상디렉토리/       # 여러개의 파일을 한번에 복사함
cp -i 파일명 복사본              # 덮어쓰기 전에 확인 메세지 띄움
mv 기존이름 새이름                # 파일 이름 변경
mv 파일명 대상디렉토리/            # 파일 이동
mv 디렉토리 대상디렉토리/           # 폴더 이동
mv -i 파일명 대상_파일명           # 기존 파일을 덮어쓰기 전 확인 메세지 띄움

 

✅ 파일 보기 (cat, less, head, tail)

cat 파일명               # 파일 내용 출력
cat 파일1 파일2          # 여러 파일을 한 번에 출력
cat 파일1 파일2 > 새파일   # 여러 파일을 한 파일로 저장
less 파일명              # 긴 파일을 페이지 단위로 출력
    # /검색어    파일 내에서 문자열 검색
    # n 으로 다음 단어 탐색, shift + n 으로 이전 단어 탐색
    # 방향키, pageUp/pageDown 도 가능
    # q로 종료
head 파일명              # 파일의 처음 10줄 출력
head -n 숫자 파일명       # 파일의 처음 n줄 출력
tail 파일명              # 파일의 마지막 10줄 출력
tail -n 숫자 파일명       # 파일의 마지막 n줄 출력

 

✅ 파일 검색 (grep)

grep "문자열" 파일명     # 특정 문자열이 포함된 줄 검색
grep -n "문자열" 파일명  # 줄 번호 포함 검색
grep -i "문자열" 파일명  # 대소문자 무시하고 검색
grep -v "문자열" 파일명  # 특정 문자열이 포함되지 않은 줄 출력

 

✅ 파일 비교 (diff)

diff 파일1 파일2                                 # 두 파일의 차이점 비교
diff -q 파일1 파일2                              # 두 파일이 다른지만 확인
diff -y 파일1 파일2                              # 차이점을 나란히 출력
diff -y --suppress-common-lines 파일1 파일2      # 변경된 줄만 출력
diff -r 디렉토리1 디렉토리2                        # 두 디렉토리 비교

 

✅ 실행 중인 프로세스 확인 및 종료 (ps, top, kill, pkill)

ps                       # 현재 실행 중인 프로세스 확인
ps -e                    # 모든 프로세스 확인
ps aux                   # 프로세스를 상세하게 출력
ps aux | grep 프로세스명    # 특정 프로세스를 검색
top                      # 실시간 CPU 및 메모리 사용량 확인
kill PID           # 특정 프로세스 종료
kill -9 PID        # 강제 종료
pkill 프로세스명   # 특정 이름을 가진 모든 프로세스 종료

 

✅ 명령어 실행 기록, 삭제 (history, clear)

history           # 실행했던 명령어 목록 확인
history | grep "명령어"  # 특정 명령어 검색
!!                # 마지막 명령어 다시 실행
!번호             # 특정 번호의 명령어 실행
clear            # 화면 지우기 (control + L)

 

✅ 파일 및 디렉토리 권한 변경 (chmod)

chmod +x 파일명      # 실행 권한 추가
chmod 444 파일명     # 읽기 전용 (모두 읽기 가능, 쓰기 불가)
chmod 755 파일명     # 소유자는 모든 권한, 나머지는 읽기/실행 가능
  • ll 을 했을때 나오는 파일 권한에 대한 내용
  • 예제 (-rw-r--r--) 뒤에서 3개씩 잘라서 생각해 보면 된다.
    • - → 일반 파일 (디렉토리일 경우 d)
    • rw- → 소유자(User): 읽기(r), 쓰기(w), 실행 없음(-)
    • r-- → 그룹(Group): 읽기(r), 쓰기 및 실행 없음(--)
    • r-- → 기타(Others): 읽기(r), 쓰기 및 실행 없음(--)
r w x
읽기 쓰기 실행
4 2 1

 

4 = r--

5 = r-x

6 = rw-

7 = rwx

 

 

✅ 파일 소유권 변경 (chown)

sudo chown 사용자 파일명         # 파일의 소유자 변경
sudo chown 사용자:그룹 파일명    # 소유자와 그룹 변경
sudo chown -R 사용자:그룹 폴더명 # 디렉토리 및 내부 파일 소유자 변경
whoami                      # 현재사용자
groups                      # 현재 그룹
adduser 사용자명             # 사용자 생성. 같은 이름의 그룹에 속해짐 (유저이름 user1, 그룹이름 user1)
su 사용자명                  # 사용자로 변경

 

✅ 파일 전송 (scp = ssh + cp)

scp 파일 user@서버:/경로/       # 원격 서버로 파일 전송
scp -r 디렉토리 user@서버:/경로/ # 원격 서버로 디렉토리 전송
scp user@서버:/경로/ 로컬경로/   # 원격 서버에서 파일 다운로드

 

✅ 파일 다운로드 (wget, curl)

wget URL                 # 특정 URL의 파일 다운로드
wget -O 저장할파일명 URL    # 다운로드할 파일 이름 변경
wget -b URL              # 백그라운드에서 다운로드 실행
wget -i 파일명             # 파일에 저장된 여러개의 url을 한번에 다운로드
curl URL                 # 특정 웹 페이지 데이터 가져오기
curl -o 파일명 URL         # 데이터를 파일로 저장
curl -I URL              # HTTP 응답 헤더만 출력
curl -H "헤더" URL        # 특정 요청 헤더를 추가하여 API 요청
curl -X POST -H "Content-Type: application/json" -d '데이터' URL    # JSON 데이터를 POST 요청으로 전송
   # 예시 : curl -X POST -H "Content-Type: application/json" -d '{"name": "John"}' https://jsonplaceholder.typicode.com/users
curl -s -o /dev/null -w "%{http_code}\n" URL     # 응답 상태 코드만 출력

 

✅ tar, zip 압축 (tar, gzip, bzip2, zip)

tar -cvf archive.tar 폴더명    # 디렉토리를 .tar 파일로 압축
tar -xvf archive.tar           # .tar 파일 압축 해제
tar -czvf archive.tar.gz 폴더명  # gzip 압축
tar -xzvf archive.tar.gz       # gzip 압축 해제
tar -cjvf archive.tar.bz2 폴더명  # bzip2 압축
tar -xjvf archive.tar.bz2       # bzip2 압축 해제
zip archive.zip 파일명          # 특정 파일을 zip으로 압축
zip -r archive.zip 디렉토리명   # 디렉토리 전체를 zip으로 압축
unzip archive.zip               # zip 압축 해제
unzip -n archive.zip               # 기존 파일 덮어쓰기 없이 압축 해제
unzip -l archive.zip               # 압출 파일 내부 목록 확인
unzip archive.zip 특정파일명               # 특정파일만 압축 해제

 

 

✅ 텍스트 변환 (sed)

sed 's/기존문자/새문자/' 파일명        # 각 줄의 첫 일치 항목 특정 문자열 변경
sed 's/기존문자/새문자/g' 파일명       # 모든 일치 항목 변경
sed -n 's/기존문자/새문자/p' 파일명    # 해당 부분만 변경 후 출력 (-n은 출력 안되게하는건데, p를 붙여서 출력됨)
sed '숫자s/기존문자/새문자/' 파일명     # 특정 줄에서만 변경
sed '숫자d' 파일명                  # 특정 줄 삭제
sed '/패턴/d' 파일명                # 특정 패턴이 포함된 줄 삭제
sed -i 's/기존문자/새문자/g' 파일명    # 원본 파일을 직접 수정
sed -i '' 's/기존문자/새문자/g' 파일명 # MAC버전 원본 파일을 직접 수정

 

✅ 출력 및 파일 조작 (echo)

echo ~                   # 현재 사용자의 홈 디렉토리 출력
echo 1                   # 숫자 출력
echo "텍스트"            # 문자열 출력
echo "텍스트" > 파일명   # 파일에 내용 저장 (덮어쓰기)
echo "텍스트" >> 파일명  # 파일에 내용 추가
echo $변수명             # 변수 값을 출력
echo 파일1 파일2 > 파일명  # 여러 파일을 하나의 파일로 합침

 

✅ 파일 및 디렉토리 검사 (find)

find [경로] -name "파일명"       # 특정 이름의 파일 검색
find [경로] -name "*.확장자"     # 특정 확장자를 가진 파일 검색
find [경로] -size +숫자c        # 특정 크기 이상의 파일 검색
find [경로] -mtime -숫자        # 최근 `숫자`일 이내에 수정된 파일 검색
find [경로] -size +숫자c -size -숫자c  # 파일 크기 범위 내 검색

 

✅ 디스크 및 파일 시스템 정보 (df, du)

df -h            # 전체 디스크 사용량을 GB/MB 단위로 표시 (-h는 사람이 보기 쉽게 바꿔줌)
du -sh 디렉토리명   # 해당 디렉토리의 총 크기 확인
du -h 디렉토리명    # 하위 디렉토리 크기 확인

 

✅ 원격 파일 전송 (scp)

scp 파일명 user@서버:/경로/        # 원격 서버로 파일 전송
scp -r 디렉토리 user@서버:/경로/   # 원격 서버로 디렉토리 전송
scp user@서버:/경로/파일명 로컬경로/  # 원격 서버에서 파일 다운로드
scp -r user@서버:/경로/ 로컬경로/   # 원격 서버에서 디렉토리 다운로드

 

dd if=/dev/zero of=largefile bs=1M count=10

10메가크기 largefile이름의 파일 생성

 

awk 명령어 (텍스트 처리 & 데이터 조작)

awk '{print $1}' 파일명           # 첫 번째 열 출력
awk '{print $1, $3}' 파일명       # 여러 개의 열 출력
awk '/패턴/ {print $0}' 파일명    # 특정 패턴이 포함된 행 출력
awk '$2 > 숫자 {print $1, $2}' 파일명  # 특정 조건을 만족하는 행 출력
awk '{printf "출력형식", $1, $2, $3}' 파일명  # 출력 형식 지정
awk 'NR > 1 {print $1}' 파일명    # 첫 줄 제외하고 출력
awk 'NR > 1 {sum += $2} END {print "총 나이:", sum}' 파일명  # 특정 열의 합계 계산

 

파일 경로 관련 (realpath, stat, locate)

     - locate는 find보다 빠르지만, 최신 파일이 즉시 반영되지 않음

realpath [파일 경로]       # 파일의 절대 경로 출력
realpath [심볼릭 링크]     # 심볼릭 링크가 가리키는 실제 경로 출력
stat [파일명]             # 파일 크기, 소유자, 수정 시간 등 속성 출력
stat [심볼릭 링크]         # 심볼릭 링크 자체 정보 출력
stat -L [심볼릭 링크]      # 링크가 가리키는 실제 파일의 정보 출력
locate [파일명]           # 색인된 데이터베이스를 활용하여 빠르게 파일 검색
locate -i "*.확장자"      # 특정 확장자의 파일 검색 (대소문자 무시)
sudo updatedb            # 색인 데이터베이스 최신 상태로 업데이트
locate -S               # 색인된 파일 개수 확인

 

파일 찾기 & xargs 활용

find [경로] -name "패턴" | xargs 명령어  # 검색 결과를 xargs로 전달
xargs -I {} 명령어 {}  # `{}` 위치에 파일명을 넣어서 실행
xargs -n 숫자          # 입력을 숫자 개씩 나누어 처리
xargs -P 숫자          # 최대 숫자 개의 작업을 병렬로 실행
find ~/bashWork/dirA -name "*.log" | xargs -I {} mv {} {}.bak
# 앞의 결과를 {} 에 넣어서 실행

 

tree 명령어 (디렉토리 구조 확인)

tree                 # 디렉토리 구조를 트리 형태로 출력
tree -L 숫자         # 특정 깊이까지만 출력
tree -h             # 파일 크기 포함하여 출력
tree -d             # 디렉토리만 출력
tree -P "패턴"      # 특정 패턴의 파일만 출력
tree > 파일명       # 트리 구조를 파일로 저장

 

정렬 (sort, uniq)

sort 파일명          # 기본 정렬 (알파벳순)
sort -r 파일명       # 역순 정렬
sort -n 파일명       # 숫자 크기 기준 정렬
sort -nr 파일명      # 숫자 역순 정렬
sort -k 숫자 파일명  # 특정 열 기준 정렬
sort | uniq         # 중복 제거 후 정렬
uniq 파일명         # 연속된 중복 줄 제거
sort 파일명 | uniq  # 모든 중복 제거 (정렬 후 실행 필요)
sort 파일명 | uniq -c  # 중복 개수 표시
sort 파일명 | uniq -d  # 중복된 항목만 출력
sort 파일명 | uniq -u  # 중복되지 않은 항목만 출력

 

파일 정보 (wc)

wc 파일명       # 줄, 단어, 문자 개수를 출력
wc -l 파일명    # 줄 개수만 출력
wc -w 파일명    # 단어 개수만 출력
wc -m 파일명    # 문자 개수 출력
wc -c 파일명    # 파일의 바이트 크기 출력

 

입출력 (tee)

echo "내용" | tee 파일명       # 출력 내용을 화면과 파일에 저장
echo "내용" | tee 파일1 파일2  # 여러 파일에 동시에 저장
echo "내용" | tee -a 파일명    # 기존 파일 내용을 유지하면서 추가
명령어 | tee 파일명            # 명령어 출력을 화면과 파일에 저장
명령어 | sudo tee 파일명       # sudo 권한이 필요한 파일 수정 시 유용

 

백그라운드 작업 (&, jobs, nohup)

명령어 &        # 백그라운드에서 실행
jobs           # 실행 중인 백그라운드 작업 목록 확인
Ctrl + Z       # 현재 실행 중인 작업을 중지
bg %번호       # 중지된 작업을 백그라운드에서 다시 실행
fg %번호       # 백그라운드 작업을 포그라운드로 전환
kill %번호     # 특정 백그라운드 작업 종료
nohup 명령어 &  # 터미널 종료 후에도 실행 유지
nohup 명령어 > output.log 2>&1 &  # 출력을 파일에 저장하며 실행

 

프로세스 관리 (ps, kill, top, htop)

kill PID                   # 특정 프로세스 종료
top                        # 실시간 CPU, 메모리 사용량 모니터링
htop                       # `top`의 UI 개선 버전 (설치 필요)
top -u 사용자명            # 특정 사용자 프로세스만 보기

📌 top 실행 시

q: top 종료

k: 특정 프로세스를 종료 (PID 입력 필요)

h: 도움말 표시

M: 메모리 사용량 기준으로 정렬

P: CPU 사용량 기준으로 정렬

 

📌 htop 실행 시

F3: 특정 프로세스 검색

F5: 트리 형태로 표시

F9: 특정 프로세스 종료

q: 종료

 

주기적인 실행 (watch)

watch [명령어]             # 특정 명령어를 반복 실행하여 실시간 모니터링
watch -n [초] [명령어]     # 특정 간격(초)마다 실행
watch -d [명령어]         # 변경된 부분 강조 표시
watch -n 5 ping -c 3 google.com  # 5초마다 ping 테스트
watch -n 1 "ps aux | grep python"  # 1초마다 특정 프로세스를 모니터링

 

메모리 사용량 (free)

free          # 기본적인 메모리 사용량 확인
free -h       # 사람이 읽기 쉬운 단위로 메모리 사용량 표시
free -s [초]  # 지정된 간격(초)마다 메모리 상태 갱신
free -t       # 총 메모리 사용량 합산 출력

 

'Infra > OS' 카테고리의 다른 글

쉘에 대한 개념  (0) 2025.02.22