| 용도 | 예시 |
|---|---|
| 시스템 설정 | 기본 경로, locale 등 시스템 전반 동작 정의 |
| 애플리케이션 설정 | DB 연결 문자열, 파일 경로 등 (하드코딩 대신 환경변수로 분리) |
| 사용자 컨텍스트 | 기본 쉘, 홈 디렉터리, 선호 에디터 등 |
| 변수 | 의미 |
|---|---|
PATH | 실행 파일을 찾는 디렉터리 목록 (전체 경로 없이 명령어 실행 가능하게 함) |
HOME | 현재 사용자의 홈 디렉터리 |
USER | 현재 로그인한 사용자명 |
SHELL | 기본 쉘 (예: /bin/bash) |
TERM | 터미널 타입 |
PWD | 현재 작업 디렉터리 |
LD_LIBRARY_PATH | 공유 라이브러리 검색 경로 |
PYTHONPATH | 파이썬 모듈 검색 경로 |
JAVA_HOME | JDK/JRE 설치 위치 |
env# 전체 환경변수 목록
printenv# env와 비슷, 특정 변수만 조회도 가능
set# 쉘 변수 + 환경변수 전체 (더 넓은 범위)
export MY_VARIABLE="Hello, World!"# 한 번에 설정 + export
MY_VARIABLE="Hello, World!"# 먼저 값 설정
export MY_VARIABLE# 그 다음 export → 자식 프로세스에도 전달됨
MY_VARIABLE="Temporary Value"#export 없이 = 현재 쉘 세션에만 적용, 서브프로세스엔 전달 안 됨
핵심 개념: export를 해야 이 쉘에서 실행하는 다른 프로그램(자식 프로세스)에게도 이 변수가 보입니다. export 안 하면 지금 쉘 안에서만 유효합니다.
echo $HOME# $ 기호로 변수 값 접근
if["$USER"=="root"];then echo "You are root" else echo"You are not root" fi
→ 조건문에서 $USER 같은 환경변수로 분기 처리하는 패턴, 실무 배포 스크립트에서 매우 흔합니다.
| 대상 | 파일 |
|---|---|
| 모든 사용자 | /etc/environment 또는 /etc/profile |
| 특정 사용자만 | ~/.bashrc, ~/.bash_profile, ~/.profile |

.bashrc vs .bash_profile 차이
| 파일 | 실행 시점 | 용도 |
|---|---|---|
.bashrc | 매번 새 인터랙티브(non-login) 쉘이 열릴 때 | alias, 함수, 쉘 전용 변수 |
.bash_profile | 로그인할 때 한 번만 (login shell) | 환경변수 설정, 세션 초기화, 다른 설정 파일 불러오기 |
SSH(Secure Shell)는 안전하지 않은 네트워크 환경에서 다른 컴퓨터나 서버에 안전하게 원격 접속하기 위한 프로토콜이다.
SSH를 이용하면 다음 작업을 할 수 있다.
즉, 내 컴퓨터인 클라이언트(Client)가 SSH를 통해 원격 서버(Server)에 접속하는 구조이다.
SSH는 주로 서버 및 네트워크 관리자가 원격으로 웹 서버나 다른 서버를 관리할 때 사용한다.
일반 사용자도 다음과 같은 목적으로 사용할 수 있다.
SSH는 기존의 telnet, rlogin보다 보안성이 높아 이를 대체하는 방식으로 사용된다
SSH 명령을 실행할 수 있는 프로그램이 필요하다.
접속하려는 서버의 다음 정보가 필요하다.
사용자 이름: ubuntu
서버 주소: 13.125.10.20
인증 방식: 비밀번호 또는 .pem 키
ssh 사용자이름@서버주소
ssh ubuntu@13.125.10.20
기본적으로 SSH는 22번 포트를 사용한다.
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를 사용한다.
SFTP는 SSH를 기반으로 서버에 접속하여 파일을 업로드·다운로드하고 관리하는 방식이다.
sftp 사용자이름@서버주소
sftp ubuntu@13.125.10.20
sftp -P 포트번호 사용자이름@서버주소
sftp -P 2222 ubuntu@localhost
자료의 마지막 예시는 sft로 표기되어 있지만, 올바른 명령어는 sftp이다.
SSH 접속을 종료하려면 다음 명령어를 입력한다.
exit
| 목적 | 명령어 |
|---|---|
| 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는 파일 전송 및 관리에 사용한다.

SSH 키 사용
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 형식으로 실행하는 게 확실하다.
위 명령어로 공개키를 복사해서 서버로 보냄


파이프는 앞 명령어의 출력 결과를 뒤 명령어의 입력으로 전달
ps aux | grep sshd | awk '{print $1}'
ps aux
→ 실행 중인 프로세스 목록 출력
grep sshd
→ sshd가 포함된 줄만 선택
awk '{print $1}'
→ 선택된 각 줄의 첫 번째 열 출력

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

파일의 줄, 단어, 바이트 등의 개수를 출력한다.
wc file.txt
줄 수 단어 수 바이트 수 파일명
| 옵션 | 의미 |
|---|---|
-l | 줄 수 |
-w | 단어 수 |
-c | 바이트 수 |
-m | 문자 수 |
-L | 가장 긴 줄의 길이 |


diff두 파일을 줄 단위로 비교하고 어떤 부분이 다른지 보여준다.
| 옵션 | 의미 |
|---|---|
-u | 통합 형식으로 차이 출력 |
-i | 대소문자 차이 무시 |
-r | 디렉터리 내부까지 재귀 비교 |
-w | 공백 차이 무시 |
텍스트 단위일 때

cmp두 파일을 바이트 단위로 비교한다. 바이너리 파일 비교에 적합하다.
cmp file1.bin file2.bin
| 값 | 의미 |
|---|---|
0 | 두 파일이 같음 |
1 | 두 파일이 다름 |
2 | 파일 없음 등의 오류 |
바이트 단위일 때

sort fruits.txt
sort파일의 각 줄을 정렬한다. 기본은 문자열 오름차순이다
| 옵션 | 의미 |
|---|---|
-n | 숫자 기준 정렬 |
-r | 역순 정렬 |
-k 숫자 | 특정 열을 기준으로 정렬 |
-t 구분자 | 열을 나누는 구분자 지정 |
-u | 정렬하면서 중복 제거 |
uniq연속해서 붙어 있는 중복 줄을 제거한다.
uniq file.txt
서로 떨어진 중복은 제거하지 못하므로 보통 sort와 같이 사용한다.
sort file.txt | uniq
| 옵션 | 의미 |
|---|---|
-c | 각 줄의 등장 횟수 출력 |
-d | 중복된 줄만 출력 |
-u | 한 번만 등장한 줄만 출력 |
-i | 대소문자 무시 |
입력받은 텍스트를 검색·치환·삭제하는 스트림 편집기다.
sed 's/apple/orange/' file.txt
각 줄에서 첫 번째 apple을 orange로 바꿔 출력함

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과 ENDawk'BEGIN {print "시작"} {print $1} END {print "끝"}' file.txt
BEGIN: 파일을 읽기 전에 한 번 실행{ ... }: 각 줄마다 실행END: 모든 줄을 처리한 후 한 번 실행# 압축(묶기)
tar -cvf archive.tar 폴더명/
# 풀기
tar -xvf archive.tar
# 내용만 확인 (안 풀고)
tar -tvf archive.tar
c = create (생성)
x = extract (풀기)
v = verbose (진행상황 출력)
f = file (파일명 지정)
# 압축 (원본 파일은 사라지고 .gz로 바뀜)
gzip 파일명
# 압축 해제
gunzip 파일명.gz
# 또는
gzip -d 파일명.gz