Advanced Topics

HappyLoop·2026년 7월 17일

Linux

목록 보기
3/7
post-thumbnail

1.Environment 변수

1. 환경변수란

  • 프로세스가 실행되는 환경을 정의하는 key-value 쌍
  • 애플리케이션/시스템 프로세스에 설정 정보와 컨텍스트를 전달하는 용도
  • 시스템 동작 커스터마이징, 전역 설정, 프로세스 간 정보 전달에 필수

2. 왜 쓰는가 (Use cases)

용도예시
시스템 설정기본 경로, locale 등 시스템 전반 동작 정의
애플리케이션 설정DB 연결 문자열, 파일 경로 등 (하드코딩 대신 환경변수로 분리)
사용자 컨텍스트기본 쉘, 홈 디렉터리, 선호 에디터 등

3. 자주 보게 될 환경변수들

변수의미
PATH실행 파일을 찾는 디렉터리 목록 (전체 경로 없이 명령어 실행 가능하게 함)
HOME현재 사용자의 홈 디렉터리
USER현재 로그인한 사용자명
SHELL기본 쉘 (예: /bin/bash)
TERM터미널 타입
PWD현재 작업 디렉터리
LD_LIBRARY_PATH공유 라이브러리 검색 경로
PYTHONPATH파이썬 모듈 검색 경로
JAVA_HOMEJDK/JRE 설치 위치

4. 환경변수 확인하기

env# 전체 환경변수 목록
printenv# env와 비슷, 특정 변수만 조회도 가능
set# 쉘 변수 + 환경변수 전체 (더 넓은 범위)

5. 설정하기 (Set & Export)

export MY_VARIABLE="Hello, World!"# 한 번에 설정 + export 

MY_VARIABLE="Hello, World!"# 먼저 값 설정
export MY_VARIABLE# 그 다음 export → 자식 프로세스에도 전달됨

MY_VARIABLE="Temporary Value"#export 없이 = 현재 쉘 세션에만 적용, 서브프로세스엔 전달 안 됨

핵심 개념: export를 해야 이 쉘에서 실행하는 다른 프로그램(자식 프로세스)에게도 이 변수가 보입니다. export 안 하면 지금 쉘 안에서만 유효합니다.

6. 스크립트에서 활용하기

echo $HOME# $ 기호로 변수 값 접근
if["$USER"=="root"];then echo "You are root" else echo"You are not root" fi

→ 조건문에서 $USER 같은 환경변수로 분기 처리하는 패턴, 실무 배포 스크립트에서 매우 흔합니다.

7. 영구적으로 저장하기 (Persisting)

대상파일
모든 사용자/etc/environment 또는 /etc/profile
특정 사용자만~/.bashrc, ~/.bash_profile, ~/.profile

.bashrc vs .bash_profile 차이

파일실행 시점용도
.bashrc매번 새 인터랙티브(non-login) 쉘이 열릴 때alias, 함수, 쉘 전용 변수
.bash_profile로그인할 때 한 번만 (login shell)환경변수 설정, 세션 초기화, 다른 설정 파일 불러오기

2.SSH

1. SSH란?

SSH(Secure Shell)는 안전하지 않은 네트워크 환경에서 다른 컴퓨터나 서버에 안전하게 원격 접속하기 위한 프로토콜이다.

SSH를 이용하면 다음 작업을 할 수 있다.

  • 원격 서버 로그인
  • 원격 서버에서 명령어 실행
  • 컴퓨터와 서버 사이의 파일 전송
  • 암호화된 통신과 사용자 인증

즉, 내 컴퓨터인 클라이언트(Client)가 SSH를 통해 원격 서버(Server)에 접속하는 구조이다.

2. SSH의 주요 사용자와 용도

SSH는 주로 서버 및 네트워크 관리자가 원격으로 웹 서버나 다른 서버를 관리할 때 사용한다.

일반 사용자도 다음과 같은 목적으로 사용할 수 있다.

  • 서버에 파일 업로드 및 다운로드
  • 원격 서버의 파일 관리
  • 서버 설정 및 프로그램 실행
  • 네트워크 관련 작업 수행

SSH는 기존의 telnet, rlogin보다 보안성이 높아 이를 대체하는 방식으로 사용된다

3. SSH 접속에 필요한 것

SSH 클라이언트

SSH 명령을 실행할 수 있는 프로그램이 필요하다.

  • Linux·macOS: 대부분 기본 설치
  • Windows: Windows 기본 SSH 클라이언트 또는 PuTTY 사용

서버 정보 및 인증 정보

접속하려는 서버의 다음 정보가 필요하다.

  • 서버 IP 주소 또는 호스트 이름
  • 사용자 이름
  • 비밀번호 또는 SSH 개인 키
사용자 이름: ubuntu
서버 주소: 13.125.10.20
인증 방식: 비밀번호 또는 .pem 키

4. SSH 서버 접속

기본 접속

ssh 사용자이름@서버주소
ssh ubuntu@13.125.10.20

기본적으로 SSH는 22번 포트를 사용한다.

5. SCP를 이용한 파일 전송

scp는 SSH 연결을 이용해 로컬 컴퓨터와 원격 서버 사이에서 파일을 복사하는 명령어다.

로컬 파일을 서버로 업로드

scp 로컬파일 사용자이름@서버주소:원격경로
# 명령어를 치는 로컬 경로에서의 명령어 
scp localfile.txt ubuntu@13.125.10.20:/home/ubuntu/

별도의 포트 사용

scp-P 포트번호 로컬파일 사용자이름@서버주소:원격경로
scp-P 2222 localfile.txt ubuntu@localhost:/home/ubuntu/

ssh는 포트 옵션으로 소문자 -p를 사용하지만, scp는 대문자 -P를 사용한다.


6. SFTP를 이용한 파일 관리

SFTP는 SSH를 기반으로 서버에 접속하여 파일을 업로드·다운로드하고 관리하는 방식이다.

기본 접속

sftp 사용자이름@서버주소
sftp ubuntu@13.125.10.20

별도의 포트 사용

sftp -P 포트번호 사용자이름@서버주소
sftp -P 2222 ubuntu@localhost

자료의 마지막 예시는 sft로 표기되어 있지만, 올바른 명령어는 sftp이다.


7. 접속 종료

SSH 접속을 종료하려면 다음 명령어를 입력한다.

exit

SSH 명령어 한눈에 보기

목적명령어
SSH 기본 접속ssh username@hostname
SSH 포트 지정ssh -p 2222 username@hostname
파일 업로드scp file.txt username@hostname:/path/
SCP 포트 지정scp -P 2222 file.txt username@hostname:/path/
SFTP 접속sftp username@hostname
SFTP 포트 지정sftp -P 2222 username@hostname
접속 종료exit

핵심: SSH는 서버에 안전하게 원격 접속하는 기술이며, ssh는 원격 명령 실행, scp와 sftp는 파일 전송 및 관리에 사용한다.

실습 : 서버를 액세스 하는 방법 2가지

  1. 유저와 패스워드
    1. 도커파일에 유저와 패스워드를 지정함
  1. SSH 키 사용

    1. 자신은 키를 가지고 있고 서버는 라커를 가지고 있다고 생각
    ssh -keygen -t rsa -b 4096 -f "$HOME\.ssh\custom_rsa_key"
    ssh -keygen -t rsa -b 4096 -f ~/.ssh/custom_rsa_key

ssh 키를 생성 → 공개키, 개인키 생성된걸 볼 수 있음

ssh-copy-id -p 2222 -i ~/.ssh/custom_rsa_key.pub ubuntu@localhost

Get-Content "$HOME\.ssh\custom_rsa_key.pub" -Raw |

cat ~/.ssh/custom_rsa_key.pub | ssh -p 2222 ubuntu@localhost "mkdir -p ~/.ssh && cat >> ~/.ssh/authorized_keys"
or
ssh -p 63781 ubuntu@localhost "mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
💡

Windows PowerShell에서는 ssh-copy-id가 정상적으로 동작하지 않는 경우가 많으므로, 자료에 나온 대체 명령을 PowerShell 형식으로 실행하는 게 확실하다.

위 명령어로 공개키를 복사해서 서버로 보냄

3. Pipes

파이프는 앞 명령어의 출력 결과를 뒤 명령어의 입력으로 전달

ps aux | grep sshd | awk '{print $1}'

ps aux
→ 실행 중인 프로세스 목록 출력

grep sshd
→ sshd가 포함된 줄만 선택

awk '{print $1}'
→ 선택된 각 줄의 첫 번째 열 출력

4. grep

파일이나 명령어 출력에서 특정 문자열 또는 패턴이 포함된 줄을 찾는다.

grep "apple" fruit.txt
옵션의미
-i대소문자 무시
-v패턴이 없는 줄 출력
-r, -R하위 디렉터리까지 검색
-l패턴이 발견된 파일명만 출력
-n줄 번호와 함께 출력
-c일치하는 줄의 개수 출력
-E확장 정규표현식 사용

5. wc(word count)

파일의 줄, 단어, 바이트 등의 개수를 출력한다.

wc file.txt
줄 수  단어 수  바이트 수  파일명
옵션의미
-l줄 수
-w단어 수
-c바이트 수
-m문자 수
-L가장 긴 줄의 길이

6. head & tail

7. diff & cmp

diff

두 파일을 줄 단위로 비교하고 어떤 부분이 다른지 보여준다.

옵션의미
-u통합 형식으로 차이 출력
-i대소문자 차이 무시
-r디렉터리 내부까지 재귀 비교
-w공백 차이 무시

텍스트 단위일 때

cmp

두 파일을 바이트 단위로 비교한다. 바이너리 파일 비교에 적합하다.

cmp file1.bin file2.bin
값의미
0두 파일이 같음
1두 파일이 다름
2파일 없음 등의 오류

바이트 단위일 때

8. sort

sort fruits.txt

sort

파일의 각 줄을 정렬한다. 기본은 문자열 오름차순이다

옵션의미
-n숫자 기준 정렬
-r역순 정렬
-k 숫자특정 열을 기준으로 정렬
-t 구분자열을 나누는 구분자 지정
-u정렬하면서 중복 제거

uniq

연속해서 붙어 있는 중복 줄을 제거한다.

uniq file.txt

서로 떨어진 중복은 제거하지 못하므로 보통 sort와 같이 사용한다.

sort file.txt | uniq
옵션의미
-c각 줄의 등장 횟수 출력
-d중복된 줄만 출력
-u한 번만 등장한 줄만 출력
-i대소문자 무시

9. sed

입력받은 텍스트를 검색·치환·삭제하는 스트림 편집기다.

sed 's/apple/orange/' file.txt

각 줄에서 첫 번째 apple을 orange로 바꿔 출력함

10.awk

awk는 텍스트를 행과 열 단위로 분석·가공하는 명령어이자 프로그래밍 언어. 특히 공백이나 구분자로 나뉜 데이터를 처리할 때 강하다

기본 형태

awk '조건 {동작}' 파일명

awk '{print $1}' file.txt

열과 행 표현


$0  → 현재 줄 전체
$1  → 첫 번째 열
$2  → 두 번째 열
$3  → 세 번째 열

root 123 sshd
ubuntu 456 bash

awk '{print $1, $3}' file.txt

root sshd
ubuntu bash

조건을 사용한 출력

awk '$2 > 100 {print $1, $2}' file.txt

sshd가 포함된 줄에서 첫 번째와 두 번째 열을 출력한다.

awk '/sshd/ {print $1, $2}' file.txt
변수의미
FS입력 필드 구분자
OFS출력 필드 구분자
NR현재 줄 번호
NF현재 줄의 필드 개수
줄 번호 출력
awk '{print NR, $0}' file.txt

마지막 열 출력
awk '{print $NF}' file.txt

구분자 지정

기본적으로 공백을 기준으로 열을 나눔

쉼표 기준
awk -F ',' '{print $1, $2}' data.csv
awk 'BEGIN {FS=","} {print $1, $2}' data.csv

출력 구분자 설정
awk 'BEGIN {OFS=" | "} {print $1, $2}' file.txt

계산 기능

awk '{sum += $2} END {print sum}' file.txt
awk '{sum += $2} END {print sum / NR}' file.txt

BEGIN과 END

awk'BEGIN {print "시작"} {print $1} END {print "끝"}' file.txt
  • BEGIN: 파일을 읽기 전에 한 번 실행
  • { ... }: 각 줄마다 실행
  • END: 모든 줄을 처리한 후 한 번 실행

11. 파일 압축하는 방법

  • tar (아카이브 - 여러 파일을 하나로 묶기)
# 압축(묶기)
tar -cvf archive.tar 폴더명/

# 풀기
tar -xvf archive.tar

# 내용만 확인 (안 풀고)
tar -tvf archive.tar

c = create (생성)
x = extract (풀기)
v = verbose (진행상황 출력)
f = file (파일명 지정)
  • gzip (실제 압축)
# 압축 (원본 파일은 사라지고 .gz로 바뀜)
gzip 파일명

# 압축 해제
gunzip 파일명.gz
# 또는
gzip -d 파일명.gz
profile
A developer who codes with joy, never boring!

0개의 댓글