Linux/리눅스 기초

운영체제(OS) ... 24/09/13 공부 임시저장

cheonjaehacker 2024. 9. 16. 07:57

컴퓨터 위에 올라가는 프로그램(어나더 레벨)

하드웨어 바로 위에서 실행됨.

사람과 기계사이에 통신. 컴퓨터는 전압 1과 0으로 정보를 전달.

사람이 기계에 정보를 전달하기 위해서 운영체제 존재.

 

운영체제의 역사?

ms dos

windows

unix, bsd?

소스코드 저작권 문제

리처드 스톨만 => 소스코드는 누구나 쓸수있어야한다!!

리누스 토발즈 =>리눅스라는 개인 프로젝트(학교 과제로 운영체제를 만듬)

 

리눅스의 특징

- 오픈소스

- 커스터마이징 가능

- 여러가지 배포판(version) (ex. 데비안, 우분투, 칼리 리눅스)       

 

 

 

오픈소스?

"소스 코드는 누구나 사용할 수 있어야한다"

"소스 코드 독점 금지"

 

오픈소스의 특징

-소스코드를 볼 수 있으니까 취약점 찾기 쉬움 => 보안레벨 낮음

=> 하지만 모두가 취약점을 찾을 수 있기 때문에 취약점을 발견하고 제거하기 쉬움.

                (리눅스도 초기에 취약점 많았음, but 발견된 취약점 다 제거)

 

iso는 폐쇄적.

-소스코드를 알 수 없기 때문에 해킹 힘듬

=> 하지만 해커가 취약점을 발견하면 혼자 그걸 오랫동안 갖고 있을 수 있음.

 

결론: "오픈소스라고 보안수준이 낮은 것도 아니고, 폐쇄된 프로그램이라고 보안수준이 높은게 아니다!"

 

windows는 편의성 때문에 쓴다! linux는 게임 안됨 ㅠㅠ

                

 

 

 

가상머신의 원리

운영체제 위에 가상머신을 만듬.

그 위에 가상 컴퓨터를 만들고 그 위에 리눅스를 설치!

 

 

 

 

 

 

CLI?

windows => gui(graphic user interface)로 운영체제에 명령을 내림.

cli(commad line interface) => 명령어로 운영체제에 명령을 내림. ==>리눅스의 주된 작동방식

but, windows도 cli가 있다! cmd가 cli 기능. linux도 gui 있다! 하지만 둘다 잘 안씀.

 

cli는 굉장히 효율적이고 빠르다!

-사람입장에서 한줄이면 빠르게 명령을 내릴수있다.

-gui보다 자원을 적게 먹음.

 

cli는 오타를 내면 안됨! 

# clear = ctrl + l =>cli 화면 정리

 

 

 

 

shell?

쉘은 운영체제가 사람의 명령을 받는 통로? 쉘을 통해 운영체제가 명령을 받음.

쉘은 종류가 많음. 우리가 사용하는 쉘은? zshell => 칼리 리눅스의 기본 쉘

내가 사용한 Terminal으로 쉘을 실행시킨다.

Terminal(종단점) => 옛날 사람들의 컴퓨터는 굉장히 컸고 같이 사용함. 그 컴퓨터에서 나온 연결선을 터미널의 유래.

 

#ps -ef => 리눅스에 실행중인 프로세스를 보여줌.

qterminal으로 zsh을 실행중

pid? ppid? 

pid(process id) 프로세스의 아이디

ppid(parent pid) 프로세스를 실행하는(부모 프로세스)의 아이디

qterminal은 ppid가 1인 프로세스가 실행함.

zsh은 ppid가 15404인 프로세스가 실행함. 여기서 15404는 qterminal의 pid.

"즉, qterminal이 zsh을 실행시킨다!"

 

 

 

 

 

 

명령어 구조

1. 명령어

2. 전달 인자 (Argument) => 명령어에 전달해주는 데이터.

3. 옵션 => "-"를 붙이는 특징이 있다.

 

[명령어]

ex) ifconfig, id

 

나:컴퓨터야!!! 복사해!!! .... 컴퓨터: ...뭘???

따라서 전달 인자로 어떤 데이터를 복사할지 전달!

하지만 명령어에 따라 전달인자를 필요로 하지 않을 수도, 하나만 필요로 할 수도, 여러개를 필요로 할 수도 있다!

그럼 어케 다 아나요? 쓰다보면 알게됨 ㅋㅋ 

 

==> 사실 id라는 명령어는 하나하나가 다 프로그램이다! (크롬같은) 

==> 그 명령어의 위치를 which로 나타냄.

=> 주소와 메아리? 통신이 잘되는지 나타내는 명령어. ping.

=> 여기서 '-c 3' 3번만 ping을 실행하겠다. 저게 없으면 계속 실행됨 ㅋㅋ

=> 옵션의 특징!! 아무데나 적어도 된다!

옵션 확인 방법.

[명령어] -h 입력하면됨.

 

 

 

 

 

 

 

리눅스의 파일 시스템~!

"마트료시카"처럼 폴더안에 폴더가 있고 파일이 있다!!

a,b 폴더가 있는데 안에 이름이 같은 파일이 있다.

이 파일을 제거하라는 명령을 내리면 어떤 파일을 삭제할까?

==>어느 폴더에 있느냐에 따라 다름!!!!!

내가 어떤 폴더에 있는지 아는 명령어는~ # pwd

 

/root

 

/ ===> 최상위 폴더. 모든 디렉토리의 위에 있음.

 

# ls ~ 현재 디렉토리에 있는 파일.

# cd [경로] ~ 해당 경로로 디렉토리 이동.  

여기서 "."은 현재 디렉토리를 나타냄. => ".." 상위 디렉토리, "..."은 상위 디렉토리의 상위 디렉토리를 나타냄!

 

cli는 명령어를 내리는 위치 중요. ==> 화면에서 명령을 내리는 위치를 보여줌!!!

 

 

 

 

홈 디렉토리

~ : home directory를 의미함!      ex) # cd ~ ==> 홈 디렉토리로 이동!

# su ==> switch user 계정 변경

보면 kali 계정의 홈 디렉토리는 /home/kali 인 것을 확인할 수 있다.

 

 

 

 

 

 

 

파일 정보 확인

# ls [파일 or 디렉토리 경로 (default: 현재 경로)] [option]

파일 => 특정 파일의 정보를 나타냄.

 

 

-l => 파일의 정보를 알려줌!!!

- : 파일   d: 디렉토리

그다음은 권한과 관련된 정보

3213 : 파일의 크기(byte)

Aug 18 15:57 : 파일의 작성 및 수정 시간.

/etc/passwd : 파일의 이름

 

-a => 숨긴 파일 or 디렉토리도 보여줌!!

숨긴파일의 정보를 알려줌. 숨긴파일은 앞에 dot(.)을 적음.

 

옵션을 두개 쓰고 싶으면 

# ls -a -l 

# ls -al

# ls -la 

모두 가능! 명령어마다 다를 수도 있음.

 

 

 

 

 

 

 

 

칼리 리눅스의 파일 시스템?

파일 시스템: 파일이 어떻게 저장되는가?

 

리눅스의 파일 시스템 => *트리 구조

최상위 디렉토리 안에 디렉토리가 있고 또 그안에 디렉토리들이 반복되는 구조.

/bin => binary = 실행파일 Like) .exe

/bin 에는 우리가 사용하는 바이너리 파일 Ex) # ls # pwd 같은 명령어가 있다!

 

/dev => divice => 리눅스에 연결되는 하드웨어 장치!

/etc => 리눅스의 설정 파일 

/home => 각 계정의 홈 디렉토리

/lib => library => 공유 라이브러리 파일  Ex) so. windows의 dll

/root => root 계정의 홈 디렉토리

/sbin => system binary => 시스템 관리를 위한 바이너리 파일

/tmp => temporary => 임시 디렉토리 => 누구나 이 디렉토리를 쓸 수 있다! (누구나 쓸 수 있기에 해킹하는 입장에서 중요)

                                                           => 껏다 키면 여기 있는 파일들이 다 사라짐!

/var => 리눅스에서 사용하는 프로그램들이 사용하는 파일 Ex) www => 아파치의 파일

BUT, 이게 무조건 이런 형태는 아님! 다르게 바꿀 수도 있음.

 

 

 

 

 

 

절대 경로 vs 상대 경로?

경로 : 파일의 위치 표현 방법 Ex) /etc/passwd

 

*절대 경로

=> 최상위 디렉토리부터 다 표현. /부터 싹다 표현.

*상대 경로

=> 현재 디렉토리부터 표현. /부터 표현x

=> pwd에 따라 표현이 다름.

 

dot(.)은 현재 경로

two dots (..)은 현재 경로의 상위 경로

three dots (...)은 현재 경로의 상위 경로의 상위 경로 (ㅋㅋㅋㅋ 어지럽네) 

상위 경로의 상위 경로는 ../..으로 표현!! 실험결과 위는 틀림.

 

현재 디렉토리가 ~라고 가정

절대 경로: /root/Desktop

상대 경로: ./Desktop

둘은 같은 디렉토리로 이동시켜준다!

 

현재 디렉토리가 ~/Desktop

# ls /root  == # ls ../

/root/Desktop/.. == /root

놀랍지 아니한가? Desktop으로 갔다가 ..으로 다시 상위 디렉토리로 나온다~! 신기하노 ㅋㅋ

 

 

***꿀팁~!~!~!!!!

명령어 반투명한 글씨에서 tab 누르면 자동완성됨!

BUT 동일한 명령어가 두개 이상일 경우 TAB을 한번 더 눌러서 택하고 ENTER!