로그 파일 생성 없이, 세션 종료 없이 백그라운드 실행
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 -alcd디렉터리 이동 cd /pathpwd현재 디렉터리 출력 pwdmkdir디렉터리 생성 mkdir -p a/b/crm파일·디렉터리 삭제 rm -rf dircp복사 cp src dst, cp -r dir1 dir2mv이동·이름 변경 mv old newtouch빈 파일 생성 / mtime 갱신 touch filecat파일 출력 (concat) cat file, cat a b > cln링크 생성 (-s 심볼릭) ln -s target linkbasename경로에서 파일명만 basename /a/b/c.txt → c.txtdirname경로에서 디렉터리만 dirname /a/b/c.txt → /a/b
텍스트·내용 보기
명령 설명 예시 head파일 앞 N 줄 (기본 10) head -20 filetail파일 뒤 N 줄. -f 로 follow tail -f loggrep패턴 검색 (정규표현) grep -rn "pattern" .sed스트림 편집 (치환·삭제) sed 's/old/new/g' fileawk컬럼·패턴 처리 awk '{print $1}' filesort정렬 sort -k2 fileuniq중복 제거 (정렬된 입력 필요) sort file | uniq -cwc줄·단어·문자 수 wc -l filecmp두 파일 바이트 비교 cmp f1 f2diff두 파일 줄 비교 diff -u f1 f2echo텍스트 출력 echo "hi"tee입력을 stdout + 파일에 동시 cmd | tee log
파일 검색
명령 설명 예시 find파일·디렉터리 검색 find . -name "*.py" -type fwhereis명령어의 binary·man·src 위치 whereis lslsof열린 파일·소켓 조회 lsof -i:8080, lsof -p <pid>
아카이브·압축
명령 설명 예시 tar아카이브 생성·해제 tar -czvf x.tgz dir/, tar -xvf x.tgzgzip / gunzipgzip 압축·해제 gzip file, gunzip file.gzunzipzip 압축 해제 unzip x.zip
권한·소유자 (자세히 = 04. Linux Permissions)
명령 설명 예시 chmod권한 변경 chmod 644 file, chmod -R 750 dirchown소유자·그룹 변경 chown user:group filechgrp그룹만 변경 chgrp group file
사용자·그룹 관리
명령 설명 예시 whoami현재 사용자 whoamisu사용자 전환 (- 로 환경까지 갈음) su - othersudosuperuser 권한으로 실행 sudo apt updateuseradd사용자 생성 sudo useradd alicepasswd패스워드 변경 passwd alicegroupadd그룹 생성 sudo groupadd devsusermod사용자 수정 (그룹 추가 등) sudo usermod -aG devs alicegroups사용자 소속 그룹 표시 groups alice
프로세스·시스템 (자세히 = 06. Linux Processes & Systemd)
명령 설명 예시 ps프로세스 목록 ps aux, ps -efkill시그널 전송 (기본 SIGTERM=15) kill <pid>, kill -9 <pid>top실시간 프로세스·자원 모니터 topfree메모리 사용량 free -huptime가동 시간 + load average uptimesystemctlsystemd 서비스 제어 systemctl start nginxjournalctlsystemd 로그 조회 journalctl -u nginx -f
디스크·파일시스템 (자세히 = 05. Linux Filesystem)
명령 설명 예시 df파일시스템별 디스크 사용량 df -hdu디렉터리 크기 du -sh dir/mount / umount파일시스템 마운트·언마운트 mount /dev/sdb1 /mnt, umount /mntlsblk블록 디바이스 목록 (트리) lsblkfdisk파티션 관리 sudo fdisk /dev/sdb
네트워킹 (자세히 = 07. Linux Networking)
명령 설명 예시 ifconfigNIC 정보 (legacy net-tools) ifconfigipNIC·라우팅·ARP (iproute2 현대) ip addr, ip routepingICMP echo — 호스트 살아있나 ping google.comtraceroute경로 추적 traceroute google.comnetstat / ss소켓·커넥션 (ss 가 현대 표준) ss -tulpniptables방화벽 규칙 (legacy; 현대 = nftables) sudo iptables -Lhostname호스트네임 출력·설정 hostnamencnetcat — raw TCP/UDP, 포트 probe nc -zv host 22wgetURL 다운로드 (재귀·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:/pathssh-keygenSSH 키 쌍 생성 ssh-keygen -t ed25519ssh-copy-idpub key 를 서버 authorized_keys 에 추가 ssh-copy-id user@host
패키지 관리
명령 설명 예시 apt / apt-getDebian·Ubuntu 패키지 매니저 sudo apt install pkgyum / dnfRHEL·CentOS·Fedora 매니저 sudo dnf install pkg
시스템 관리
명령 설명 예시 shutdown시스템 종료·예약 종료 sudo shutdown -h now, shutdown -r +10reboot재시작 sudo rebootuname시스템 정보 (커널·아키텍처) uname -adate현재 시각 출력·포맷 date +"%Y-%m-%d %H:%M:%S"
셸·도움말
명령 설명 예시 man매뉴얼 페이지 man lshistory명령어 히스토리 history, history | grep sshexit셸 종료 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!
여러 줄 문자 수정
Ctrl + v 로 VISUAL BLOCK
Shift + g 로 맨 밑까지 씌우기
Shift + i 로 문자 삽입 / x 로 문자 제거
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
경로 메모리 확인
sudo du -h --max-depth=1