본문으로 건너뛰기

실무에서 자주 쓰는 Linux 명령어

October 2, 2026

각종 명령어​


파일 및 권한​


mkdir -p​

mkdir는 디렉토리를 생성하는 명령어이다.

-p 옵션을 주면 중간 경로가 없을 경우 함께 생성하고, 이미 존재하더라도 에러를 내지 않는다.

mkdir -p /data/app/logs

/data와 /data/app이 없더라도 한 번에 생성된다.


chmod​

chmod는 파일이나 디렉토리의 권한을 변경하는 명령어이다.

Linux의 권한은 소유자(u) / 그룹(g) / 그 외(o) 각각에 대해 읽기(r) / 쓰기(w) / 실행(x)으로 구성된다.

-rwxr-xr-- 1 appuser appgroup 1024 Oct  2 10:00 start.sh
└┬┘└┬┘└┬┘
u g o

각 권한은 숫자로 표현할 수 있다.

권한숫자
r4
w2
x1

이 숫자를 더한 값을 u, g, o 순서로 나열한다.

표기의미대표적인 사용처
755rwxr-xr-x실행 스크립트, 디렉토리
644rw-r--r--일반 설정 파일
600rw-------개인키, 인증 정보 파일
700rwx------~/.ssh 디렉토리
chmod 755 start.sh
chmod +x start.sh
chmod -R 750 /opt/myapp
  • +x처럼 기호로 권한을 추가/제거할 수도 있다. (u+x, g-w, o-r 등)
  • -R 옵션은 하위 디렉토리와 파일까지 재귀적으로 적용한다.
디렉토리의 실행(x) 권한
  • 디렉토리에서 x 권한은 '실행'이 아니라 해당 디렉토리 안으로 진입할 수 있는 권한이다.
  • r만 있고 x가 없으면 cd로 들어갈 수 없다.

권한과 함께 자주 쓰는 것이 소유자를 변경하는 chown이다.

chown appuser:appgroup start.sh
chown -R appuser:appgroup /opt/myapp

프로세스 및 네트워크​


ps -ef​

ps는 현재 실행 중인 프로세스를 확인하는 명령어이다.

-e는 모든 프로세스, -f는 상세 형식(Full format)으로 출력하라는 옵션이다.

ps -ef | grep java
UID        PID  PPID  C STIME TTY          TIME CMD
appuser 2314 1 2 09:12 ? 00:01:43 /usr/bin/java -Xms1g ...
컬럼의미
UID프로세스를 실행한 계정
PID프로세스 ID
PPID부모 프로세스 ID
STIME프로세스 시작 시각
CMD실행된 명령어 전체

PPID가 1이라면 Systemd가 직접 실행했거나, 부모 프로세스가 종료되었지만, 종료되지 않은 고아 프로세스가 Systemd에 자식 프로세스로 편입된 프로세스이다.


ss -tulpn​

ss는 소켓 상태를 확인하는 명령어이다. (기존 netstat을 대체)

실무에서는 '이 포트를 누가 쓰고 있는가'를 확인할 때 가장 많이 사용한다.

ss -tulpn | grep 8080
옵션의미
-tTCP 소켓
-uUDP 소켓
-lListening 상태인 소켓만
-p소켓을 사용 중인 프로세스 표시
-n이름 변환 없이 숫자로 표시 (포트, IP)
Netid State  Local Address:Port  Peer Address:Port Process
tcp LISTEN 0.0.0.0:8080 0.0.0.0:* users:(("java",pid=2314,fd=45))

Local Address가 127.0.0.1이라면 로컬에서만 접근 가능하고, 0.0.0.0 또는 *라면 모든 인터페이스에서 접근 가능하다는 의미이다.

-p 옵션으로 프로세스 정보를 모두 보려면 root 권한이 필요하다.


nmcli​

nmcli는 NetworkManager를 CLI로 제어하는 명령어이다.

RHEL 계열에서 IP, Gateway, DNS 등의 네트워크 설정은 nmcli로 하는 것이 표준이다.

nmcli에서는 다음 두 개념을 구분해야 한다.

구분의미
Device실제 네트워크 인터페이스 (ens192, eth0 등)
ConnectionDevice에 적용할 설정 프로파일

상태 확인

nmcli device status
nmcli connection show
nmcli connection show ens192

고정 IP 설정

nmcli connection modify ens192 ipv4.method manual
nmcli connection modify ens192 ipv4.addresses 192.168.0.10/24
nmcli connection modify ens192 ipv4.gateway 192.168.0.1
nmcli connection modify ens192 ipv4.dns 8.8.8.8
nmcli connection modify ens192 connection.autoconnect yes
nmcli connection up ens192

modify는 프로파일만 수정하는 것이기 때문에, nmcli connection up을 실행해야 실제 인터페이스에 반영된다.

설정 이후에는 ip addr, ip route로 결과를 확인한다.


기타​


ssh-keygen​

ssh-keygen은 SSH 접속에 사용할 공개키/개인키 쌍을 생성하는 명령어이다.

ssh-keygen -t rsa -b 4096
ssh-keygen -t ed25519

실행하면 ~/.ssh/ 아래에 두 개의 파일이 생성된다.

파일의미
id_rsa개인키. 절대 외부에 노출하면 안 된다
id_rsa.pub공개키. 접속할 대상 서버에 등록한다

이후 공개키를 대상 서버에 등록하면 비밀번호 없이 접속할 수 있다.

ssh-copy-id user@192.168.0.20

ssh-copy-id는 대상 서버의 ~/.ssh/authorized_keys에 공개키를 추가해주는 명령어이다.

키 기반 접속이 안 될 때
  • SSH는 권한이 느슨하면 키를 무시한다.
  • ~/.ssh는 700, ~/.ssh/authorized_keys와 개인키는 600이어야 한다.

base64​

base64는 바이너리 데이터를 ASCII 문자열로 인코딩/디코딩하는 명령어이다.

echo -n 'admin' | base64
echo 'YWRtaW4=' | base64 -d
YWRtaW4=
admin

여기서 주의할 점이 두 가지 있다.

첫번째로, echo에는 -n 옵션을 붙여야 한다.

  • echo는 기본적으로 문자열 끝에 개행 문자를 붙인다.
  • -n 없이 인코딩하면 개행까지 포함되어 YWRtaW4K라는 다른 값이 나온다.

두번째로, Base64는 암호화가 아니라 인코딩이다.

  • 누구나 base64 -d로 원본을 복원할 수 있다.
  • 쿠버네티스 Secret의 값이 Base64로 되어 있다고 해서 안전하게 보호되는 것이 아니다.

긴 값을 인코딩하면 76자마다 줄바꿈이 들어가는데, base64 -w 0 옵션으로 줄바꿈 없이 출력할 수 있다.


vi​


vi의 모드​

vi는 모드를 전환하면서 사용하는 텍스트 편집기이다.

모드역할진입 방법
명령 모드커서 이동, 삭제, 복사, 붙여넣기Esc
입력 모드텍스트 입력i, a, o 등
Ex 모드저장, 종료, 치환, 설정명령 모드에서 :

vi를 처음 열면 명령 모드이다.


입력 모드 진입​

키동작
i커서 위치에서 입력
a커서 다음 위치에서 입력
o아래에 새 줄을 만들고 입력
O위에 새 줄을 만들고 입력
A줄의 끝에서 입력

저장 및 종료​

명령어동작
:w저장
:q종료
:wq저장 후 종료
:q!저장하지 않고 강제 종료
:w!읽기 전용 파일 강제 저장

커서 및 화면 이동​

키동작
h j k l좌 / 하 / 상 / 우
w / b다음 단어 / 이전 단어
0 / $줄의 시작 / 줄의 끝
gg / G파일의 처음 / 파일의 끝
:n 또는 nGn번째 줄로 이동
Ctrl + f한 화면 아래로 (forward)
Ctrl + b한 화면 위로 (backward)
Ctrl + d반 화면 아래로 (down)
Ctrl + u반 화면 위로 (up)

긴 로그나 설정 파일을 볼 때는 Ctrl + f / Ctrl + b로 넘기고, 끝으로 바로 가려면 G를 쓰는 것이 가장 빠르다.


편집​

키동작
x커서 위치의 문자 1개 삭제
dd현재 줄 삭제 (잘라내기)
5dd현재 줄부터 5줄 삭제
d$커서 위치부터 줄 끝까지 삭제
dG현재 줄부터 파일 끝까지 삭제
yy현재 줄 복사
p커서 아래에 붙여넣기
u실행 취소 (undo)
Ctrl + r다시 실행 (redo)
v / V문자 단위 / 줄 단위 선택 (비주얼 모드)

검색 및 치환​

명령어동작
/문자열아래 방향으로 검색
?문자열위 방향으로 검색
n / N다음 결과 / 이전 결과
:%s/old/new/g파일 전체에서 old를 new로 치환
:%s/old/new/gc치환할 때마다 확인
:noh검색 하이라이트 해제

:%s/old/new/g는 sed의 치환 문법과 동일하다. %는 파일 전체를 의미한다.


자주 쓰는 설정​

명령어동작
:set nu줄 번호 표시
:set nonu줄 번호 숨김
:set paste붙여넣기 모드 (자동 들여쓰기로 인한 깨짐 방지)
:set list탭, 줄 끝 등 보이지 않는 문자 표시

YAML처럼 들여쓰기가 중요한 내용을 붙여넣을 때는 :set paste를 먼저 실행해야 들여쓰기가 계단식으로 밀리지 않는다.


sed​


sed란?​

sed(Stream Editor)는 파일이나 입력을 한 줄씩 읽으면서 텍스트를 치환, 삭제, 출력하는 명령어이다.

vi로 파일을 열지 않고도 설정 파일을 수정할 수 있기 때문에, 여러 서버에 동일한 설정을 적용하거나 설치 과정을 반복해야 할 때 많이 사용한다.


기본 문법​

sed 's/찾을문자열/바꿀문자열/' 파일
형태설명
sed 's/a/b/' file각 줄에서 처음 나오는 a를 b로 치환
sed 's/a/b/g' file각 줄의 모든 a를 b로 치환
sed -i 's/a/b/g' file결과를 파일에 직접 반영
sed -i.bak 's/a/b/g' file원본을 file.bak으로 백업한 뒤 반영
sed -n '5,10p' file5~10번째 줄만 출력
sed '/pattern/d' file패턴이 포함된 줄 삭제
sed '3d' file3번째 줄 삭제
sed '/pattern/ s/a/b/' file패턴이 포함된 줄에서만 치환
sed -e '...' -e '...' file여러 개의 명령을 순서대로 적용

여기서 중요한 점은 다음과 같다.

-i 옵션이 없으면 결과를 화면에 출력만 하고, 파일은 변경되지 않는다.

따라서 먼저 -i 없이 실행하여 결과를 확인하고, 문제가 없으면 -i를 붙여 반영하는 것이 안전하다.


구분자 변경​

치환할 문자열에 /가 포함되어 있으면 매번 \/로 이스케이프해야 해서 읽기 어려워진다.

이 경우 구분자를 다른 문자로 바꿀 수 있다.

sed -i 's|/opt/old|/opt/new|g' app.conf

s 바로 뒤에 오는 문자가 구분자가 된다. (|, #, @ 등)


정규표현식​

sed의 '찾을 문자열'에는 정규표현식을 사용할 수 있다.

표현의미예시
^줄의 시작^# : #으로 시작하는 줄
$줄의 끝;$ : ;으로 끝나는 줄
.임의의 문자 1개a.c : abc, a1c 등
*바로 앞 문자가 0번 이상 반복ab* : a, ab, abb 등
.*임의의 문자열^SELINUX=.*
[abc]괄호 안의 문자 중 1개[0-9] : 숫자 1개
[^abc]괄호 안의 문자를 제외한 1개[^#] : #이 아닌 문자
\( \)그룹으로 묶음. \1, \2로 참조\(key\)=.* → \1=value
&매칭된 문자열 전체 (바꿀 문자열에서 사용)s/^/#&/
기본 정규표현식 vs 확장 정규표현식
  • sed는 기본적으로 기본 정규표현식(BRE)을 사용한다. 이 경우 그룹은 \( \), 1번 이상 반복은 \+처럼 \를 붙여야 한다.
  • -E 옵션을 주면 확장 정규표현식(ERE)을 사용한다. 이 경우 ( ), +, ?, |를 \ 없이 그대로 쓸 수 있다.

실무 예시​

SELinux 비활성화

sed -i 's/^SELINUX=.*/SELINUX=disabled/' /etc/selinux/config

SELINUX=으로 시작하는 줄 전체를 SELINUX=disabled로 바꾼다.

swap 항목 주석 처리

sed -i '/ swap / s/^/#/' /etc/fstab

swap이 포함된 줄에서만, 줄의 시작(^)에 #을 붙인다.

주석 해제하면서 값 변경

sed -i 's/^#\(PermitRootLogin\).*/\1 yes/' /etc/ssh/sshd_config

#PermitRootLogin ... 형태의 줄을 PermitRootLogin yes로 바꾼다. \1은 그룹으로 묶은 PermitRootLogin을 가리킨다.

주석과 빈 줄을 제외하고 보기

sed -e '/^#/d' -e '/^$/d' /etc/chrony.conf