🔷 오픈 소스 Unix
계열 운영체제의 한 종류로, 리눅스 커널을 기반
🔷 리눅스 커널은 1991년 9월 17일, 리누스 토르발스가 처음 공개
🔷 일반적으로 리눅스 배포판(디스트로
) 형태로 제공
🔷 커널과 다양한 시스템 소프트웨어 및 라이브러리(대부분 서드파티 제공)를 포함
🔷 Unix
를 모방하여 설계되었으며, 카피레프트 GPL 라이선스
하에 공개
💡 디스트로
다양한 목적에 맞게 커스터마이징된 운영체제
💡 카피레프트
창작물에 대해 누구나 자유롭게 사용, 복제, 수정, 배포할 수 있도록 허용하는 법적, 사회적 장치
🔷 자유 오픈 소스 소프트웨어 협업의 대표적인 사례
🔷 원래 x86 기반 개인용 컴퓨터를 위해 개발되었으나, 이후 그 어떤 운영체제보다 다양한 플랫폼으로 이식되어 PC, 워크스테이션, 메인 프레임, 임베디드 시스템 등 매우 폭넓은 장치에서 사용
🔷 서버 분야에서 리눅스는 지배적인 운영체제이며, 세계에서 가장 빠른 슈퍼컴퓨터 500대 모두 리눅스를 사용
🔷 컴퓨터 운영체제 역사상 가장 중요한 운영체제
🔷 처음으로 어셈블리가 아니라 C언어라는 고급 프로그래밍 언어로 커널까지 작성
🔷 1969년 AT&T의 벨 연구소에서 개발
🔷 당시 비대화된 멀틱스라는 운영체제에 비해 경량화하고 네트워크 접속을 간편화함
🔷 Unix 구조
🔷 커널(kernel)
유닉스 시스템이 부팅될 때 가장 먼저 읽혀지는 운영체제의 핵심 부분.
보안, 자원 관리, 추상화 등 하드웨어와 관련된 작업을 수행
🔷 쉘(shell)
사용자 인터페이스 제공 - 사용자와 유닉스 시스템의 커널을 연결
사용자가 명령을 입력하면 이를 해석하여 커널이 이해할 수 있는 명령으로 번역
번역한 명령은 커널로 넘기고 커널은 하드웨어를 위한 지시어로 번역
쉘의 종류 : Bourne shell (스티브 본), C shell (버클리대학), Korn shell (데이비드 콘)
🔷 1956년, 반독점 소송으로 AT&T는 컴퓨터 사업에 진출할 수 없었지만, 1984년, AT&T가 지역 전화회사를 분리하면서 컴퓨터 사업 진출 제한에서 벗어나게 됨
🔷 자유 소프트웨어와 GNU 프로젝트의 시작
1983년: 리처드 스톨만이 완전한 유닉스 호환 소프트웨어 시스템을 자유free 소프트웨어로 만들기 위해 GNU 프로젝트 시작
1985년: 자유 소프트웨어 재단(FSF) 설립
1990년대 초: 운영체제에 필요한 대부분의 프로그램(라이브러리, 컴파일러, 텍스트 에디터, 셸 등)은 완성되었지만, 디바이스 드라이버, 데몬, 커널(GNU Hurd) 등의 저수준 요소는 완성되지 못함
🔷 리누스 토르발즈와 리눅스 커널 개발
앤드루 S. 타넨바움: 교육용 유닉스 계열 운영체제인 Minix 개발 및 배포
1990년 가을: 헬싱키 대학의 토르발즈, Minix를 통해 유닉스를 처음 접함
Minix의 교육용 라이선스 제한에 불만을 느껴 자신의 운영체제 커널 개발 시작
1991년: 유즈넷 뉴스그룹 comp.os.minix에 커널 버전 0.01 발표 → Minix를 대체할 수 있는 시스템 목표
🔷 리눅스 초기와 GNU의 결합
초기 리눅스는 미닉스를 통해 시스템이 가동되었기 때문에 다소 불완전한 운영체제였음
하지만, 자체 커널 개발에 난항을 겪고 있던 GNU 프로젝트가 리눅스 커널에 관심을 가짐
리눅스 커널과 GNU 유틸리티가 결합하면서 비교적 완전한 운영체제로 거듭나게 됨
항목 | 유닉스 (UNIX) | 리눅스 (Linux) |
---|---|---|
기원 | 1969년, AT&T 벨 연구소 | 1991년, 리누스 토르발즈 |
개발자/기관 | AT&T, IBM, HP 등 | 리누스 토르발즈 + 커뮤니티 |
소스 코드 | 대부분 비공개 (상용) | 오픈 소스 (GPL) |
라이선스 | 상용 라이선스 | GNU GPL (자유 소프트웨어) |
가격 유료 | (AIX, HP-UX 등) | 대부분 무료 |
사용 범위 | 고급 서버, 메인프레임, 기업 시스템 | 서버, 데스크탑, 모바일, IoT 등\ |
호환성 | POSIX 표준 준수 | POSIX 준수 (대체로 호환) |
유지 관리 | 기업 중심 유지보수 | 커뮤니티 + 기업 공동 유지보수 |
배포판 다양성 | 제한적 (AIX, HP-UX, Solaris 등) | 매우 다양 (Ubuntu, Fedora, Arch 등) |
대표 운영체제 | AIX (IBM), HP-UX (HP), Solaris (Oracle) | Ubuntu, RHEL, Debian, Arch 등 |
커널 구조 | 모놀리식 또는 마이크로커널 | 모놀리식 커널 (모듈화 지원) |
파일 시스템 | UFS, JFS 등 | EXT4, Btrfs, XFS 등 다양 |
배포판 | 특징 | 용도/대상 | 패키지 형식 |
---|---|---|---|
Ubuntu | 사용자 친화적, 데스크탑에 최적화, 커뮤니티 활발 | 리눅스 입문자, 데스크탑, 서버 | .deb (APT) |
Debian | 안정성 중시, 오픈소스 철학 강조 | 서버, 안정적인 환경 | .deb (APT) |
Fedora | 최신 기술 빠르게 적용, Red Hat 테스트 배포판 | 개발자, 데스크탑 | .rpm (DNF) |
Red Hat Enterprise Linux (RHEL) | 기업용 상용 배포판, 안정성, 기술 지원 제공 | 기업 서버, 상용 환경 | .rpm (YUM/DNF) |
🔷 SSH
네트워크를 통해 다른 컴퓨터에 안전하게 접속하고, 명령어를 실행하거나 파일을 전송할 수 있게 해주는 프로토콜이자 프로그램
텔넷과 달리 데이터를 암호화하여 보안성이 매우 뛰어나, 서버 관리와 원격 접속에 자주 사용
리눅스/맥 터미널에서 기본적으로 제공되는 SSH 명령어 사용
명령어 예시:
ssh -p 포트번호 사용자이름@서버주소
🔷 로그인/로그아웃
유닉스/리눅스 시스템은 여러 사용자가 동시에 시스템을 이용하는 다중 사용자 환경임
따라서 각 사용자가 시스템을 이용하려면 사용자명과 비밀번호를 이용한 인증 과정을 거쳐야 함
사용자가 시스템에 접속하는 것을 로그인, 시스템 접속을 종료하는 것을 로그아웃이라 함
로그아웃을 하려면 exit
또는 logout
을 입력하거나 ctrl+d
를 누르면 됨
🔷 ssh 공개키를 이용한 인증
# 공개키 생성
ssh-keygen
💡 솔트키를 추가하여 보안 강화가 가능하다.
이후에 리눅스 서버 .ssh
폴더 내의 authorized_keys
에 공개키(.pub)를 넣어서 사용할 수 있다.
또는 ssh-copy-id 사용자이름@서버주소
명령어로 옮겨서 사용 가능하다.
💡 생성한 공개키는 사용자 폴더 내 .ssh 폴더에 존재한다.
💡
powershell
은ssh-copy-id 사용자이름@서버주소
대신cat ~/.ssh/키파일명 | ssh 사용자이름@서버주소 'cat >> ~./ssh/authorized_keys
로 활용한다.
🔷 쉘(shell)
사용자가 입력한 명령을 해석해 커널에게 전달하거나, 커널의 처리결과를 사용자에게 전달
대부분의 리눅스에서 기본적으로 제공하는 셸은 bash (bourne again shell)임
즉, bsh를 기반으로 ksh와 csh의 장점을 모은 셸임
🔷 리눅스 프롬프트
[root@pc00 ~]#
root
: 로그인 계정명으로 시스템에 접속한 사용자 계정을 표시
pc00
: 호스트 이름으로 접속한 시스템의 이름을 의미
~
: 사용자가 현재 위치하고 있는 디렉토리의 경로를 의미
#
, $
: 프롬프트 기호로 셸에 따라 다르게 표현되며,
관리자는 #, 일반 사용자는 $로 표시
🔷 쉘 명령어
셸(예: bash
)에서 실행할 수 있는 명령어
시스템 프로그램 실행, 파일 관리, 프로세스 제어, 네트워크, 설정 등을 다양하게 다룰 수 있음
command option1 option2 ... optionN
이렇게 한 줄로 입력하는 명령을 흔히 명령줄(command line)이라 함
명령줄에서는 명령어를 입력하고, 그 뒤에 하나 이상의 선택적인 매개변수(또는 인자)를 붙임
이러한 명령줄 옵션(또는 인자)을 사용하면 명령어가 무엇을 하도록 지정할 수 있음
🔷 파일 시스템
데이터(파일과 디렉토리)를 저장, 관리, 접근하는 방식
리눅스는 모든 것을 파일로 간주하는 특징이 있으며,
하드디스크, 디렉토리, 장치, 심지어 프로세스까지 파일 시스템 아래에 통합되어 관리됨
리눅스의 디렉토리는 루트 디렉토리(/
)를 최상위로 하는 계층적 구조(트리 구조)
여러 저장 장치(하드디스크, USB 등)를 트리 구조 어디에나 붙여서(마운트해서) 사용
🔹 리눅스는 다양한 파일 시스템을 지원
🔸 ext4
: 현재 가장 많이 쓰이는 표준 리눅스 파일 시스템 (안정적, 빠름)
🔸 ext3
, ext2
: 이전 버전 (호환성)
🔸 xfs
, btrfs
: 대용량, 고급 기능 지원
🔸 NTFS
, FAT32
, exFAT
: 윈도우와 파일 공유 시 사용
🔸 swap
: 가상 메모리 영역
🔹 모든 것이 파일 - 디렉터리, 장치, 소켓 등도 모두 파일로 접근
🔹 심볼릭 링크 / 하드 링크 - 한 파일을 여러 위치에서 "참조"할 수 있음
🔹 퍼미션(권한) - 파일/폴더마다 읽기, 쓰기, 실행 권한이 있어 보안에 매우 중요
🔹 숨김 파일 - 이름이 .으로 시작하는 파일은 숨김 (예: .bashrc)
🔹 ls /
🔹 sudo apt install -y tree
🔹 tree / -L 1
디렉토리 | 설명 |
---|---|
/ | 루트 디렉토리: 모든 디렉토리와 파일의 시작점(최상위). |
/bin | 기본 명령어 바이너리: 시스템 부팅과 기본 작업에 필요한 실행 파일(명령어) 저장. |
/sbin | 시스템 관리 바이너리: 관리자(root)용 시스템 관리 명령어 저장. |
/etc | 설정 파일: 시스템 전체의 설정 파일 및 서비스 설정 파일 위치. |
/sys | 시스템/커널 정보: 커널, 하드웨어 설정 및 상태 정보를 제공하는 가상 파일 시스템. |
/home | 사용자 폴더: 일반 사용자 계정별 개인 파일과 설정 저장(예: /home/user). |
/root | 루트 계정의 홈: 시스템 관리자(root)의 기본 홈 디렉토리. |
/lib, /lib64 | 공유 라이브러리: 실행 파일에 필요한 기본 라이브러리(*.so) 저장. |
/usr | 응용프로그램/공유 데이터: 사용자용 응용 프로그램, 라이브러리, 매뉴얼 등 저장. |
/usr/bin | 추가 명령어: 사용자용 실행 파일(명령어) 위치. |
/usr/sbin | 추가 시스템 관리 명령어: 관리자용 추가 명령어 위치. |
/usr/local | 로컬 설치 파일: 직접 설치한 프로그램, 사용자 정의 소프트웨어 저장. |
/var | 가변 데이터: 로그, 메일, 프린터 스풀, 데이터베이스 등 변하는 데이터 저장. |
/tmp | 임시 파일: 임시로 생성되는 파일 저장, 시스템 재시작 시 대부분 삭제. |
/opt | 추가 패키지: 외부 애플리케이션, 추가 소프트웨어 패키지 설치 디렉토리. |
/media | 이동식 미디어: USB, CD-ROM 등 이동식 저장장치 마운트 위치. |
/mnt | 임시 마운트: 기타 파일시스템을 임시로 마운트할 때 사용하는 위치. |
1. ls
ls
🔹 주요 옵션
-l
: 상세 정보(권한, 소유자, 크기 등)를 함께 출력ls -l
-a
: 숨김 파일(\.으로 시작하는 파일)도 표기ls -a
-lh
: 사람이 읽기 쉬운 크기 단위(human-readable)ls -lh
ls /etc
2. cd
🔹 기본 사용법
cd 디렉터리이름
홈 디렉터리로 이동
cd ~
cd ..
cd -
3. pwd
🔹 사용법
pwd
/home/username/Documents
4. mkdir
🔹 기본 사용법
mkdir 새폴더이름
하위 디렉터리까지 한 번에 생성
mkdir -p 상위폴더/하위폴더
5. rmdir
🔹 사용법
rmdir 디렉터리이름
❗ 비어 있지 않은 폴더는 삭제가 되지 않는다. 단,
rm -r
을 사용하여 강제 삭제가 가능하다.
6. rm
🔹 사용법
rm 파일이름
rm -r 폴더이름
rm -i 파일이름
rm -rf 폴더이름
❗ rm -rf는 되돌릴 수 없다. (
신중하지 않으면 조진다는 뜻)
7. cp
🔹 사용법
cp 원본파일 복사본
cp -r 원본폴더 대상폴더
cp -i 파일이름 복사본
8. mv
🔹 사용법
mv 파일이름 새폴더/
mv 원래이름 새이름
mv 폴더이름 새경로/
9. touch
🔹 사용법
touch 새파일.txt
touch 파일1 파일2 파일3
10. cat
🔹 사용법
cat 파일이름
cat > 파일이름
cat >> 파일이름
cat 파일1 파일2
cat 파일1 파일2 > 합친파일
11. more
, less
💡 많은 양의 파일이나 긴 로그 파일을 볼 때 유용하다.
more
🔹 기본 사용법
more 파일이름
Enter
Space
q
less
🔹 기본 사용법
less 파일이름
방향키 또는 k, j
/검색어 입력
q
💡 less는 more보다 더 유연(양방향 스크롤, 더 큰 파일 지원)
명령어 | 설명 | 대표 사용 예시 |
---|---|---|
ls | 파일/폴더 목록 보기 | ls -l , ls -a |
cd | 디렉터리 이동 | cd /home , cd .. |
pwd | 현재 위치 출력 | pwd |
mkdir | 새 폴더 만들기 | mkdir test |
rmdir | 빈 폴더 삭제 | rmdir test |
rm | 파일/폴더 삭제 | rm file , rm -r dir |
cp | 파일/폴더 복사 | cp a.txt b.tx |
mv | 파일/폴더 이동/이름 변경 | mv a.txt newname.txt |
touch | 빈 파일 생성/시간 갱신 | touch new.txt |
cat | 파일 내용 출력/합치기 | cat file.txt |
more, less | 파일 한 화면씩 출력(스크롤) | more big.txt , less log.txt |
1. find
🔷 기본 사용법
find 검색경로 [검색조건] [실행동작]
🔷 주요 예시
# 현재 디렉터리와 하위에서 이름이 test.txt인 파일 찾기
find . -name "test.txt"
# /home 경로 아래에서 이름에 report가 들어가는 모든 파일 찾기
find /home -name "*report*"
# 크기가 100MB 이상인 파일 찾기
find . -size +100M
# 7일 이내 수정된 파일 찾기
find . -mtime -7
# 찾은 파일을 삭제(조심!)
find . -name "*.bak" -delete
# 찾은 파일들에 대해 명령어 실행
find . -name "*.log" -exec rm {} \\;
# (여기서 `{}`는 검색된 파일 이름이 들어가고, `\\;`로 끝냄)
2. locate
🔷 특징
엄청 빠름(실시간 전체 검색이 아니라, 미리 만들어진 인덱스 데이터베이스를 이용)
최신 파일은 sudo updatedb로 데이터베이스를 갱신해야만 검색됨
🔷 기본 사용법
locate 파일명패턴
🔷 예시
# 이름에 config가 들어가는 파일 모두 찾기
locate config
# 데이터베이스 갱신(파일 추가/삭제 후 반영)
sudo updatedb
3. grep
🔷 기본 사용법
grep [옵션] "검색어" 파일이름
🔷 주요 예시
# 파일에서 "error"라는 단어가 포함된 줄 찾기
grep "error" log.txt
# 여러 파일에서 검색
grep "hello" *.txt
# 대소문자 구분 없이 검색
grep -i "linux" file.txt
# 줄 번호 함께 보여주기
grep -n "main" source.c
# 검색 결과 하이라이트 색상 표시
grep --color "keyword" file.txt
# 명령어 결과에서 검색(파이프와 함께 사용)
dmesg | grep usb