tee vs sed

Linux에서 teesed 사용법 (k8s.conf 예제 중심)

1. 개념

tee

  • 표준 입력을 파일로 쓰는 명령어
  • -a 옵션이 있으면 → 기존 내용 뒤에 추가(append)
  • -a 옵션이 없으면 → 기존 내용 덮어쓰기(overwrite)

sed

  • 파일 내용을 읽어 특정 줄을 검색/수정/삭제하는 스트림 편집기
  • 주로 기존 값 수정에 사용

2. 예제: /etc/sysctl.d/k8s.conf

2.1 기존 파일 내용

$ cat /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 0

3. tee 예제

3.1 내용 추가 (append)

cat << EOF | sudo tee -a /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
EOF

결과

net.ipv4.ip_forward = 0
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1

3.2 기존 내용 덮어쓰기 (overwrite)

cat << EOF | sudo tee /etc/sysctl.d/k8s.conf
net.ipv4.ip_forward = 1
EOF

결과

net.ipv4.ip_forward = 1

기존 모든 내용이 사라지고 새로운 내용만 남음


4. sed 예제

4.1 특정 값 수정

sudo sed -i 's/^net\.ipv4\.ip_forward.*/net.ipv4.ip_forward = 1/' /etc/sysctl.d/k8s.conf
  • 의미: net.ipv4.ip_forward로 시작하는 줄을 찾아서 = 1로 변경
  • 기존 값이 0이든 2든 관계없이 1로 바뀜

4.2 특정 값만 추가 (존재하지 않을 경우)

grep -q '^net.bridge.bridge-nf-call-iptables' /etc/sysctl.d/k8s.conf || echo 'net.bridge.bridge-nf-call-iptables = 1' | sudo tee -a /etc/sysctl.d/k8s.conf
  • 의미: 해당 설정이 없으면(grep -q로 확인), 맨 아래에 추가

4.3 여러 항목 한 번에 수정

sudo sed -i     -e 's/^net\.bridge\.bridge-nf-call-ip6tables.*/net.bridge.bridge-nf-call-ip6tables = 1/'     -e 's/^net\.bridge\.bridge-nf-call-iptables.*/net.bridge.bridge-nf-call-iptables = 1/'     /etc/sysctl.d/k8s.conf
  • 여러 줄을 한 번에 변경 가능

5. tee vs sed 비교 표

목적추천 명령어예시
파일 전체 새로 작성teetee /etc/sysctl.d/k8s.conf
기존 내용 뒤에 추가tee -atee -a /etc/sysctl.d/k8s.conf
특정 줄 값 수정sedsed -i 's/^key.*/key = value/' file
존재 여부 확인 후 추가grep+tee -a`grep -q ‘^key’ file

6. K8s 설정 예시

Kubernetes 설치 시 자주 추가하는 설정:

cat << EOF | sudo tee -a /etc/sysctl.d/k8s.conf
net.bridge.bridge-nf-call-ip6tables = 1
net.bridge.bridge-nf-call-iptables = 1
net.ipv4.ip_forward = 1
EOF

sudo sysctl --system

7. 참고

  • tee파일 작성/추가에 유리
  • sed기존 내용 수정에 유리
  • 설정 파일 작업 시 백업 권장:
sudo cp /etc/sysctl.d/k8s.conf /etc/sysctl.d/k8s.conf.bak