리눅스 배포판
: 리눅스 커널과 함께 기본적인 명령어와 애플리케이션을 묶어서 사용자가 바로 사용할 수 있게 패키징한 것
* 리눅스 커널 : 운영체제의 중심에서 하드웨어를 제어하는 역할을 담당하는 소프트웨어
설치
셸
- 리눅스와 사용자를 연결하는 것
- 사용자가 커널을 직접 조작할 수 없기 때문에 둘 사이에 명령어를 받아들이고 커널의 실행 결과를 출력하는 소프트웨어
- 커널의 인터페이스
터미널
- 컴퓨터의 입출력만을 담당하는 전용 하드웨어
- 리눅스를 다룰 때 하드웨어 터미널을 사용하는 경우는 거의 없으며 소프트웨어로 구현한 터미널 사용 !
- 환경변수 확인 방법 ↓

* 주로 리눅스를 원격으로 접속, 조작함
원격 접속
- 처음엔 OS 위에 VB 를 깔고 그 위에 Linux 를 깔아서 직접 실행함
- mobaxterm 설치(https://mobaxterm.mobatek.net/)
→ 원격으로 접속할 때 보안이 들어있는 셸 SSH 사용(Installer edition 설치)
- 접속하려면 Linux의 IP 주소를 알아야함 >
ifconfig로 확인 !
- apt : 패키지 매니저

→ 가상머신의 IP가 10.0.2.15임을 확인할 수 있음
- clear 명령어 입력 시 cmd 다 지워짐
- sudo apt install openssh-server 명령어로 설치 !
(외부에서 접속할 때 허용해주는 라이브러리,,? 임)
- sudo systemctl list-units | grep ssh 명령어로 설치 됐는지 확인
→ 아래처럼 ssh.service가 running 중이면 됨

- 윈도우 PC IP도 확인해야함 >
ipconfig로 확인 !

- 와이파이로 연결했다면
Wireless LAN adapter Wi-Fi, 랜선으로 연결했다면 이더넷으로 확인
- virtualBox에서 Ubuntu 우클릭 > 설정

고급 > 우측에 있는 + 눌러서 추가하기


→ 이때 호스트 IP는 PC IP, 게스트 IP는 가상머신 IP, 호스트 포트는 아무거나, 게스트 포트는 22로 함
* 리눅스 포트는 22번이어야함 ! (SSH를 통해 원격으로 접속할 때는 22번 사용)
- session > SSH


- 리눅스는 ifconfig, 윈도우는 ipconfig
- IP 주소, 포트 번호를 알면 접근 가능 !
포트 포워딩
+) netstat -tnlp | grep 22 입력 시 LISTEN 이 보이는데 LISTEN 은 요청을 기다리고 있는 것
절대경로와 상대경로
- 절대경로는 디렉터리의 깊이가 깊어질수록 길어진다
- 상대경로는 현재 디렉터리의 위치를 기준으로 표기한다
* home 디렉터리로 갈 때 cd ~ 만 쳐도 됨 !
명령어 약자
- pwd : print work directory (현재 경로)
- cd : change directory
- ls : list
- d : directory
- l : long (상세하게 나타냄)
디렉터리
* 디렉터리는 파란색으로 나타냄 !
- ls / /home ~ 실행 결과

→ 인자가 3개임 (/ 는 루트 디렉터리)
- 상세하게 보고 싶으면 옵션으로 l을 주면 된다 (ls -l)
- rwx → read, write, execute
- ls -a 실행 결과

- ls는 숨김 파일이나 폴더는 보여주지 않지만 ls -a 한 경우에는 숨김 파일까지 보여줌(앞에 . 붙은 게 숨겨진 파일)
- ls -F / 하면 파일 종류도 알려줌
- @는 링크 파일임(바로가기) ls -l /입력했을 땐 화살표로 나타냄
- ls 옵션으로 조합해서 적용할 수 있음(a, l, F)
* 명령어에 대한 설명이 필요한 경우 --help 옵션을 지정하면 됨(대괄호에 있는 건 생략 가능)
- mkdir 으로 파일 생성 가능 !

- develop 폴더 안에서 만들고 싶은 경우
- cd develop / 후 mkdir
- mkdir 옵션으로 경로 지정
① mkdir /home/beyond/develop/test2
② mkdir ~/develop/test3
③ mkdir ./develop/test4 (상대경로)
- 한꺼번에 여러 파일을 생성할수도 있음(mkdir test1 test2 test3)
- mkdir ./develop/test8/test9를 실행한 경우, test8이 존재하지 않으면 오류가 발생함 → 없어도 생성할 수 있도록 하는 게 -p 옵션 !!(test8도 자동으로 생성해줌)

touch 명령어로 파일 생성
- touch sample.txt → 텍스트 문서 생성
- ls -l sample.txt
- touch는 파일의 날짜와 시간을 수정하는 명령어지만 파일을 생성할 수도 있다 !
- touch -c sample2.txt → -c는 sample2라는 파일이 없으면 만들지 말라는 옵션
파일 삭제
-rm 명령어 사용 (remove 약자)
- 한번에 여러 개 삭제 가능 !
- 디렉터리 삭제하려면 -r 옵션 지정해야함 (디렉터리 안에 있는 폴더 다 삭제되고 복구 불가능)

- 빈디렉터리는
rmdir 명령어 사용해야함
- 비어있지 않은 디렉터리 삭제하는 방법
- rmdir ./test/test9 한 후 rmdir ./test8
- rm -r test1 하면 전부 삭제됨

- rm -ir test1(-ri도 상관없음)
→ 삭제하기 전에 한 번 더 확인하는 옵션임 (i)
파일 내용 출력
cat 명령어로 파일 내용 출력
- 인자로 여러개 입력할 경우 순차적으로 출력됨

- echo → 뒤에 입력된 문자를 출력해주는 명령어 (공백 포함 시 '' 로 감싸야함)

→ echo로 내용이 있는 파일을 생성할 수 있음

→ > 를 사용해 수정할 수 있음, >> 로 덧붙일 수도 있음
- 몇번째 행인지 궁금할 경우 n 옵션을 주면 쉽게 확인 가능 !

- 화면 단위로 파일의 내용을 출력하려면
less 사용
- 한줄씩 넘기려면 Enter, 한 화면씩 넘기려면 스페이스, 한 화면 위로 올리려면 B, 나가고 싶으면 Q 누르면 됨
* bash_history : 이때까지 사용한 명령어가 기록돼있음
문자열 검색
- less로 파일을 연 후 / 누르고 찾을 문자열 입력하면 찾을 수 있다 !
(n을 누르면 다음 문자열이 나오고 shift + n 을 하면 이전 문자열이 나온다)
파일 복사
- cp 복사할 파일명 생성할 파일명

- 복사하고 원본 수정할 경우 복사본은 수정되지 않음 !!!

- 이미 존재하는 파일로 복사하게 될 경우 덮어씀

- i 옵션으로 한 번 더 확인하도록 할 수 있음

- 같은 파일을 디렉터리 안에 복사하는 방법
→ cp [복사할 파일들][복사할 디렉터리]

디렉터리 복사
- -r 옵션 지정해서 디렉터리 복사 가능 !

- temp_copy를 temp에 복사(temp 안에 temp_copy가 생성)

파일/디렉터리 이동
mv 명령어를 사용해 파일이나 디렉터리 이동 가능 !

- develop/temp/sample.txt를 develop 폴더로 이동하는 방법


- 한 번에 여러 파일을 옮길 수 있음

- 중복되는 파일이 존재한다면 덮어쓴다
- -i 옵션을 사용해 한 번 더 확인한다
파일/디렉터리 이름 변경
- mv 로 파일 이름 변경 가능 !

- mv 로 디렉터리 이름 변경 가능 !

- -i 옵션으로 한 번 더 확인 가능

링크 파일 생성
- ln -s hello.txt hello_ln 으로 링크 파일 생성
- rm hello.txt 하면 링크 파일 같이 삭제 될까? > 안됨(빨간색으로 변함)

- hello.txt 파일을 새로 생성하면 hello_ln은 어떻게 될까? > 다시 링크하게 됨(파란색으로 변함)

- ls -l temp_ln/ > 링크가 가리키는 파일의 정보를 보여줌
파일 검색
-
find 명령어 사용 > 디렉터리 트리를 내려가면서 조건에 맞는 파일 검색
-
액션을 생략하면 기본적으로 검색 조건을 만족하는 파일의 경로를 출력
→ $find <검색할 디렉터리> <검색 조건> <액션>
-
파일 이름을 검색하려면 검색 조건으로 -name 이나 -iname 으로 이름을 지정해야함
- -name은 대소문자를 구분해서 검색함

→ -print 하면 내용 출력되고 생략하면 경로가 출력됨
* 모든 txt 파일 찾기

- -iname은 대소문자를 구분하지 않고 검색함
-
파일 형식으로 검색하려면 조건에 -type으로 형식을 지정해야함

-
검색 조건을 여러 개 지정하려면 -a(and) 를 사용하여 지정해야함

→ -a 생략 가능