로그 파일 생성 없이, 세션 종료 없이 백그라운드 실행

nohup {실행파일} 1>/dev/null 2>&1 &

실행중인 프로세스 확인

ps -ef | grep {패턴}
ps aux | grep {패턴}
  • ps -ef = System V 스타일. 모든 프로세스를 full format. PPID(부모) 포함.
  • ps aux = BSD 스타일. CPU·메모리 사용량 중심.
  • 둘 다 grep 자기 자신도 결과에 잡힘 (밑 nginx 예시 참고). 피하려면 ps -ef | grep "[n]ginx" (대괄호 트릭) 또는 pgrep -af nginx.

ps -ef 컬럼

컬럼의미
UID사용자 (소유자)
PID프로세스 ID
PPIDparent PID — 누가 fork 했나
CCPU 사용률 (대략, deprecated)
STIME시작 시각
TTY묶인 터미널 (? = 데몬, TTY 없음)
TIME누적 CPU 시간
CMD전체 명령줄

ps aux 컬럼

컬럼의미
USER사용자
PID프로세스 ID
%CPUCPU 사용률 (실시간 비율)
%MEM메모리 사용률
VSZ가상 메모리 크기 (KB)
RSS실제 메모리 = Resident Set Size (KB)
TTYTTY
STAT상태 (S sleep, R running, Z zombie, + foreground, s session leader)
START시작 시각
TIME누적 CPU 시간
COMMAND명령

언제 뭘 쓰나

  • -ef = “프로세스 인벤토리 + 부모-자식 관계” 파악. trees / supervisor 구조 분석.
  • aux = “리소스 누가 먹나” 분석. %CPU/%MEM/RSS 정렬해서 무거운 놈 찾기.

예시 — nginx 가 master/worker 구조로 도는 모습

root@lima-default:~# systemctl start nginx.service
 
root@lima-default:~# ps -ef | grep nginx
root       14452       1  0 20:55 ?        00:00:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data   14453   14452  0 20:55 ?        00:00:00 nginx: worker process
www-data   14454   14452  0 20:55 ?        00:00:00 nginx: worker process
www-data   14456   14452  0 20:55 ?        00:00:00 nginx: worker process
www-data   14457   14452  0 20:55 ?        00:00:00 nginx: worker process
root       14460    1816  0 20:56 pts/1    00:00:00 grep --color=auto nginx
 
root@lima-default:~# ps aux | grep nginx
root       14452  0.0  0.0  14692  2388 ?        Ss   20:55   0:00 nginx: master process /usr/sbin/nginx ...
www-data   14453  0.0  0.1  16412  4844 ?        S    20:55   0:00 nginx: worker process
www-data   14454  0.0  0.1  16412  4844 ?        S    20:55   0:00 nginx: worker process
www-data   14456  0.0  0.1  16412  4844 ?        S    20:55   0:00 nginx: worker process
www-data   14457  0.0  0.1  16412  4780 ?        S    20:55   0:00 nginx: worker process
root       14462  0.0  0.0   6904  1900 pts/1    S+   20:56   0:00 grep --color=auto nginx

읽는 법:

  • master (PID 14452, USER=root) + worker 4 개 (USER=www-data, PPID=14452). 모두 master 가 fork 한 자식. PPID 컬럼이 그 관계를 보여줌.
  • 왜 권한이 다른가 — 80/443 같은 1024 미만 포트는 root 만 bind 가능 (전통적 Unix). 그래서 master 가 root 로 시작 → 포트 bind → worker fork → worker 는 www-data 로 권한 강등(setuid). 보안 best practice = 실제 요청 처리는 비특권 user.
  • STAT=Ss master 의 s = session leader. worker 는 S (sleeping, idle).
  • RSS 비교 — master 2388K vs worker 각 4844K. worker 가 실제 작업 코드·연결 상태를 들고 있어서 더 큼.
  • TTY=? = 데몬이라 터미널 없음. grep 자신만 pts/1 (내 셸).
  • 마지막 grep --color=auto nginx 줄 = grep 명령이 자기 자신을 잡음. 매번 보임. 위 트릭 (grep "[n]ginx") 으로 회피 가능.
  • USER=www-data 와 파일 권한의 user/group/other 관계 → 자세한 건 04. Linux Permissions 노트 참고.

특정 PORT 사용 프로세스 확인

lsof -i:8080

로그 파일 확인

tail -f {로그 파일 경로}

파일 작성

cat << EOF > /home/ec2-user/{파일이름}
#!/usr/bin/python
...
EOF

명령어 cheat sheet


한 줄 요약. 깊이 있는 설명은 각 카테고리별 노트 참고.

파일·디렉터리

명령설명예시
ls파일·디렉터리 목록ls -al
cd디렉터리 이동cd /path
pwd현재 디렉터리 출력pwd
mkdir디렉터리 생성mkdir -p a/b/c
rm파일·디렉터리 삭제rm -rf dir
cp복사cp src dst, cp -r dir1 dir2
mv이동·이름 변경mv old new
touch빈 파일 생성 / mtime 갱신touch file
cat파일 출력 (concat)cat file, cat a b > c
ln링크 생성 (-s 심볼릭)ln -s target link
basename경로에서 파일명만basename /a/b/c.txtc.txt
dirname경로에서 디렉터리만dirname /a/b/c.txt/a/b

텍스트·내용 보기

명령설명예시
head파일 앞 N 줄 (기본 10)head -20 file
tail파일 뒤 N 줄. -f 로 followtail -f log
grep패턴 검색 (정규표현)grep -rn "pattern" .
sed스트림 편집 (치환·삭제)sed 's/old/new/g' file
awk컬럼·패턴 처리awk '{print $1}' file
sort정렬sort -k2 file
uniq중복 제거 (정렬된 입력 필요)sort file | uniq -c
wc줄·단어·문자 수wc -l file
cmp두 파일 바이트 비교cmp f1 f2
diff두 파일 줄 비교diff -u f1 f2
echo텍스트 출력echo "hi"
tee입력을 stdout + 파일에 동시cmd | tee log

파일 검색

명령설명예시
find파일·디렉터리 검색find . -name "*.py" -type f
whereis명령어의 binary·man·src 위치whereis ls
lsof열린 파일·소켓 조회lsof -i:8080, lsof -p <pid>

아카이브·압축

명령설명예시
tar아카이브 생성·해제tar -czvf x.tgz dir/, tar -xvf x.tgz
gzip / gunzipgzip 압축·해제gzip file, gunzip file.gz
unzipzip 압축 해제unzip x.zip

권한·소유자 (자세히 = 04. Linux Permissions)

명령설명예시
chmod권한 변경chmod 644 file, chmod -R 750 dir
chown소유자·그룹 변경chown user:group file
chgrp그룹만 변경chgrp group file

사용자·그룹 관리

명령설명예시
whoami현재 사용자whoami
su사용자 전환 (- 로 환경까지 갈음)su - other
sudosuperuser 권한으로 실행sudo apt update
useradd사용자 생성sudo useradd alice
passwd패스워드 변경passwd alice
groupadd그룹 생성sudo groupadd devs
usermod사용자 수정 (그룹 추가 등)sudo usermod -aG devs alice
groups사용자 소속 그룹 표시groups alice

프로세스·시스템 (자세히 = 06. Linux Processes & Systemd)

명령설명예시
ps프로세스 목록ps aux, ps -ef
kill시그널 전송 (기본 SIGTERM=15)kill <pid>, kill -9 <pid>
top실시간 프로세스·자원 모니터top
free메모리 사용량free -h
uptime가동 시간 + load averageuptime
systemctlsystemd 서비스 제어systemctl start nginx
journalctlsystemd 로그 조회journalctl -u nginx -f

디스크·파일시스템 (자세히 = 05. Linux Filesystem)

명령설명예시
df파일시스템별 디스크 사용량df -h
du디렉터리 크기du -sh dir/
mount / umount파일시스템 마운트·언마운트mount /dev/sdb1 /mnt, umount /mnt
lsblk블록 디바이스 목록 (트리)lsblk
fdisk파티션 관리sudo fdisk /dev/sdb

네트워킹 (자세히 = 07. Linux Networking)

명령설명예시
ifconfigNIC 정보 (legacy net-tools)ifconfig
ipNIC·라우팅·ARP (iproute2 현대)ip addr, ip route
pingICMP echo — 호스트 살아있나ping google.com
traceroute경로 추적traceroute google.com
netstat / ss소켓·커넥션 (ss 가 현대 표준)ss -tulpn
iptables방화벽 규칙 (legacy; 현대 = nftables)sudo iptables -L
hostname호스트네임 출력·설정hostname
ncnetcat — raw TCP/UDP, 포트 probenc -zv host 22
wgetURL 다운로드 (재귀·resume 지원)wget https://...
curlHTTP/HTTPS 등 클라이언트curl -LO URL, curl -X POST

원격 (SSH) (자세히 = 08. Linux SSH)

명령설명예시
ssh원격 셸 접속ssh user@host, ssh -i key.pem ...
scpSSH 위 파일 복사scp file user@host:/path
ssh-keygenSSH 키 쌍 생성ssh-keygen -t ed25519
ssh-copy-idpub key 를 서버 authorized_keys 에 추가ssh-copy-id user@host

패키지 관리

명령설명예시
apt / apt-getDebian·Ubuntu 패키지 매니저sudo apt install pkg
yum / dnfRHEL·CentOS·Fedora 매니저sudo dnf install pkg

시스템 관리

명령설명예시
shutdown시스템 종료·예약 종료sudo shutdown -h now, shutdown -r +10
reboot재시작sudo reboot
uname시스템 정보 (커널·아키텍처)uname -a
date현재 시각 출력·포맷date +"%Y-%m-%d %H:%M:%S"

셸·도움말

명령설명예시
man매뉴얼 페이지man ls
history명령어 히스토리history, history | grep ssh
exit셸 종료exit

mv * 하면 생기는 일


meatsby@lima-default:~$ ls
t1.txt  t2.txt  t3.txt  z
 
meatsby@lima-default:~$ mv *
 
meatsby@lima-default:~$ ls
z
 
meatsby@lima-default:~$ ls z
t1.txt  t2.txt  t3.txt
  • 해당 디렉터리에 있는 모든 파일 및 디렉터리가 맨 마지막 디렉터리 안으로 이동한다.
meatsby@lima-default:~$ ls
t1.txt  t2.txt  t3.txt
 
meatsby@lima-default:~$ mv *
mv: target 't3.txt': Not a directory
  • 디렉터리 내 모든것이 파일일 경우 위와 같이 마지막 파일이 디렉터리가 아니라는 예외가 발생한다.

Vim


저장 안하고 나가기

# E37: No write since last change (add ! to override) 발생 시
:q!

여러 줄 문자 수정

  1. Ctrl + v 로 VISUAL BLOCK
  2. Shift + g 로 맨 밑까지 씌우기
  3. Shift + i 로 문자 삽입 / x 로 문자 제거
  4. Esc 두 번으로 적용

셸·파일 시스템 메모


심볼릭 링크

ln [option] [source] [link]
ln -s  ~/Library/Mobile\ Documents/iCloud\~md\~obsidian/Documents/Vault\ Name ~/path/to/local
  • link 의 약자인 ln 명령어를 통해 링크파일 생성 가능.
  • Obsidian 을 사용할 경우 iCloud Drive 를 통해 기기간 연동이 가능한데 로컬에서의 변경사항을 iCloud Drive 내에 링크파일을 생성해서 동기화·백업을 수행할 수 있음.

set -exuo pipefail

set -exuo pipefail

쉘 스크립트의 오동작·버그를 줄이는 옵션 묶음.

  • set -e (errexit) = 오류 발생 시 스크립트 종료.
  • set -x (xtrace) = 실행되는 명령어와 인수들 출력.
  • set -u (nounset) = 설정되지 않은 변수 사용 시 종료.
  • set -o pipefail = 파이프 사용 시 오류 코드를 이어 받음.

mkdir -p

mkdir -p /not_yet_parent/target_dir
  • -p (parents) = 필요한 상위 디렉토리 자동 생성.

Insufficient space for shared memory file


디스크 용량 확인

df -h

메모리 확인

free -m
  • 사실 /proc/meminfo 내용

경로 메모리 확인

sudo du -h --max-depth=1