리눅스 핵심 명령어 및 환경 설정 정리

1. 시스템 관리 및 패키지 설정

기본 패키지 업데이트 및 설치

# 시스템 업데이트 (&&를 사용하여 앞 명령어가 성공했을 때만 업그레이드 진행)
sudo apt update && sudo apt full-upgrade -y

# 필수 유틸리티 설치 (ssh, vim, net-tools, gcc 등)
sudo apt install -y openssh-server vim net-tools gcc make build-essential curl

# SSH 서비스 시작
sudo systemctl start ssh

시스템 정보 확인

# OS 및 커널 버전 확인
uname -a

# 배포판 상세 정보 확인
cat /etc/*release* # CentOS 등
cat /etc/issue        # Ubuntu

# 시스템 가동 시간, 로그인 사용자 수, 부하율 확인
uptime

# 부팅 이력 확인
last reboot

계정 및 권한 관리

# 계정 생성 (대화형 기본 설정 포함 - 권장)
sudo adduser [사용자명]

# 계정 생성 (환경변수 옵션 커스터마이징 용도)
sudo useradd [사용자명]

# Sudo 권한 부여 (visudo 사용 권장)
sudo visudo
# 파일 하단에 추가: [사용자명] ALL=(ALL:ALL) ALL

# 그룹 관리
groups                       # 소속 그룹 확인
sudo groupadd [그룹명]       # 그룹 생성
sudo groupdel [그룹명]       # 그룹 삭제
sudo gpasswd -a [유저] [그룹명]  # 사용자를 그룹에 추가
sudo gpasswd -d [유저] [그룹명]  # 사용자를 그룹에서 제거

2. 디스크 및 시스템 리소스 관리

디스크 용량 확인

# 파티션별 디스크 여유 공간 확인 (Human readable)
df -h

# 특정 디렉토리의 사용량 요약 확인 (깊이 1단계까지만)
du -h --max-depth=1 /home

메모리 상태 확인 (free)

free -h
total: 설치된 총 메모리

used: 사용 중인 메모리

free: 실제 사용 가능한 여유 메모리

shared: 프로세스 간 공유 메모리

buff/cache: 커널 버퍼와 페이지 캐시로 사용 중인 메모리

available: 스와핑 없이 새로운 프로세스에 할당 가능한 실질적 여유 메모리

디스크 마운트 (추가 및 영구 등록)

# 디스크 목록 및 파티션 확인
sudo fdisk -l

# 파티션 생성 (n -> p -> 1 -> enter -> enter -> p -> w)
sudo fdisk /dev/sdb

# 파일 시스템 포맷 (ext4)
sudo mkfs -t ext4 /dev/sdb1

# 임시 마운트
sudo mount /dev/sdb1 /data_folder
영구적인 마운트 (재부팅 시 자동 마운트)

# 디스크의 UUID 확인
sudo blkid /dev/sdb1

# fstab 수정
sudo vi /etc/fstab

# 아래 형식으로 맨 밑에 내용 추가
# UUID={확인한_UUID}  /data_folder  ext4  defaults  0  2

3. 네트워크 및 방화벽 설정

고정 IP 설정 (Ubuntu 20.04 Netplan 기준)

sudo vi /etc/netplan/01-netcfg.yaml
YAML
network:
  version: 2
  ethernets:
    enp0s3:
      dhcp4: no
      addresses: [192.168.219.12/24]
      gateway4: 192.168.219.1
      nameservers:
        addresses: [8.8.8.8, 8.8.4.4]
# 설정 적용
sudo netplan apply

방화벽 설정 (Firewalld – CentOS)

sudo firewall-cmd --permanent --add-port=8080/tcp    # 포트 개방
sudo firewall-cmd --permanent --remove-port=8080/tcp # 포트 차단
sudo firewall-cmd --reload                           # 룰 적용
sudo firewall-cmd --list-all                         # 리스트 확인

방화벽 설정 (UFW – Ubuntu)

sudo ufw status verbose         # 상태 및 적용된 룰 확인
sudo ufw allow 22/tcp           # 포트 허용
sudo ufw delete allow 22/tcp    # 허용 룰 삭제
sudo ufw reload                 # 룰 적용

4. 원격 데스크탑 및 파일 공유

XRDP (원격 데스크탑) 설정

sudo apt-get install -y xserver-xorg-core xorgxrdp xserver-xorg-input-all

# 권한 설정
sudo vi /etc/polkit-1/localauthority/50-local.d/45-allow-colord.pkla
Ini, TOML
[Allow Colord all Users]
Identity=unix-user:*
Action=org.freedesktop.color-manager.create-device;org.freedesktop.color-manager.create-profile;org.freedesktop.color-manager.delete-device;org.freedesktop.color-manager.delete-profile;org.freedesktop.color-manager.modify-device;org.freedesktop.color-manager.modify-profile
ResultAny=no
ResultInactive=no
ResultActive=yes
# 배경색 설정 후 재부팅
sudo vi /etc/xrdp/xrdp.ini
# ls_top_window_bg_color=000000 추가
sudo reboot

NFS 파일 공유

sudo apt install -y nfs-common nfs-kernel-server

# 공유 폴더 설정
sudo vi /etc/exports
# 추가: /sh_data 192.168.1.0/24(rw,sync,no_subtree_check)

# 클라이언트에서 마운트
sudo mount [호스트IP]:/sh_data /local_folder

5. 파일 제어 및 탐색

TAR 압축 및 해제

# 압축하기
tar -cvf [압축이름.tar] [압축할_폴더]

# 압축 풀기
tar -xvf [압축이름.tar]

SCP 데이터 전송 (SSH 기반)

# Local -> Remote (내 PC에서 원격지 서버로 보내기)
scp -P [포트번호] [보낼_파일] [계정]@[원격지IP]:[도착_디렉토리]

# Remote -> Local (원격지 서버에서 내 PC로 가져오기)
scp -P [포트번호] [계정]@[원격지IP]:[가져올_파일] [내_PC_저장경로]

파일 검색 (find)

# 특정 이름으로 파일 검색
find / -name "*.log"

# 7일 이상 수정되지 않은 파일 찾기
find . -mindepth 1 -maxdepth 1 -mtime +7

# 7일 이상 수정되지 않은 파일 찾아서 바로 삭제 (-exec 활용)
find . -mindepth 1 -maxdepth 1 -mtime +7 -exec rm -rf {} \;
파일 내 문자열 검색 (grep 정규표현식)
Bash
grep '^a' 파일명      # a로 시작하는 행
grep 'apple$' 파일명  # apple로 끝나는 행
grep 'a.....e' 파일명 # a로 시작하고 e로 끝나는 7자리 단어
grep '[a-d]' 파일명   # a, b, c, d 중 하나로 시작하는 단어
grep -i 'apple' 파일명 # 대소문자 구분 없이 검색
grep -v 'apple' 파일명 # apple이 포함되지 않은 행만 출력

6. 텍스트 프로세싱 및 스크립트

AWK (오크) 활용 행과 열 기반으로 데이터를 필터링하고 가공하는 데 탁월한 스크립트 언어입니다.

# 특정 필드(열) 값 출력
awk '{ print $1 }' file.txt

# 특정 조건식 (5번째 필드가 80 이상인 전체 행 출력)
awk '{ if ( $5 >= 80 ) print ($0) }' file.txt

# 합계 및 평균 구하기 (BEGIN, END 패턴)
awk '
BEGIN { sum = 0; cnt = 0 }
{ sum += $5; cnt++ }
END { print ("Sum: " sum ", Avg: " sum/cnt) }' file.txt
쉘 스크립트 기초 문법
쉘 스크립트 파일은 최상단에 #!/bin/bash 선언이 필수입니다.
#!/bin/bash

# 변수 선언 (공백이 없어야 함!)
NAME="Lymaru"
echo "Hello, ${NAME}"

# 배열 사용
arr=("A" "B" "C")
echo ${arr[@]}    # 전체 출력

# 조건문 (띄어쓰기 주의)
if [ -f "test.txt" ]; then
    echo "test.txt 파일이 존재합니다."
fi

# 반복문
for i in {1..5}; do
    echo "Count: ${i}"
done

7. 기타 유용한 팁

백그라운드 프로세스 실행

# 일반 백그라운드 실행
./script.sh &

# 터미널 종료 후에도 실행 유지 (nohup) 및 로그 버리기
nohup python3 app.py > /dev/null 2>&1 &

터미널 주요 단축키 Ctrl + C: 현재 프로세스 강제 종료

Ctrl + D: 로그아웃 (EOF)

Ctrl + L: 화면 지우기 (clear)

Ctrl + R: 명령어 히스토리 검색

Ctrl + A: 커서를 라인 맨 앞으로 이동

Ctrl + E: 커서를 라인 맨 뒤로 이동

Ctrl + S: 화면 스크롤 잠금 (멈춤)

Ctrl + Q: 스크롤 잠금 해제

VIM (vi) 주요 명령어 :set nu : 줄 번호 표시

:set paste : 외부 텍스트 붙여넣기 시 들여쓰기 꼬임 방지

:sp [파일명] : 화면 상하 분할

:vs [파일명] : 화면 좌우 분할

:%s/이전문자열/새문자열/g : 파일 전체에서 문자열 찾아 바꾸기