본문 바로가기

자기개발/Linux

Linux 공부 4일차

오늘은 프로세스,파일을 찾는법,백그라운드 실행,항상 실행에 대해서 배웠습니다.

우선 프로세스에 대해서 설명을 하자면 

저장장치로써 SSD,HDD같은 storage가 있습니다. 가격이 저렴하며 용량이 큰 대신에 속도가 느립니다.

다른 저장장치로는 RAM 같은 Memory가 있습니다. 가격이 비싸고 용량이 작지만 속도가 매우 빠릅니다.

그리고 CPU가 있는데 Processor라고 합니다. 프로세스는 아니고 프로세스를 처리해준다고 보면 됩니다. 프로세스는 CPU가 실행할 과정과 실행할 때 참고할 데이터라고 보시면 될 것 같습니다.

이 프로세스가 처리되는 과정은 storage에서 불러와 memory에 저장되어 cpu로 전달되어 프로그램이 실행됩니다.

command mkdir,top,rm 와 같은 명령어들은 /bin , /sbin과 같은 디렉토리 안에 들어있습니다.

이런식으로 전부 들어있습니다.

명령어는 시스템 상에서는 program이고 실행중인 상태의 프로그램을 process라고 합니다. 이 차이점을 기억을 잘 해둬야할 것 같습니다.

 

다음은 locate입니다. locate는 디렉토리를 직접 뒤져서 찾아내는 것이 아닌 데이터베이스(정보가 저장되어 있는 공간)를 통해 찾습니다. 그래서 훨씬 더 빠릅니다. locate가 사용하는 데이터베이스의 이름은 mlocate입니다.

따로 출력이 되지는 않습니다.

sudo updatedb 파일 내역을 업데이트 하는 명령어입니다. 이걸 해야 데이터베이스에 현재 사용하는 PC의 파일들의 정보 내역등이 올라갑니다. mlocate가 설치되어 있어야합니다.

 

다음은 find입니다.

여러 용법들이 있지만 제일 처음으로 나온건 find / -name *.txt였습니다.

이걸 정리하자면 find path expression입니다 path는 어떤 디렉토리에서부터 찾을 것이냐는 뜻이고 expression은 찾는 파일을 적는 위치입니다. 그러니 저기 위에 있는 내용은 root부터 -name이름으로 찾겠다는 의미로 .txt가 들어가는 파일들을 찾는 것입니다.

진행을 하다보면 permission denied라고 뜨는 경우가 있는데 이건 보는 것처럼 권한이 없는 곳을 찾으려고 해서 그렇습니다.

 /는 root디렉토리에서부터 찾는다는 뜻이고 .은 현재 디렉토리부터 하위 디렉토리까지 찾는다는 뜻입니다.

홈 디렉토리는 저 위에 있는 / 를 ~로 바꿔주시면 됩니다.

find -type f -name hello.txt

여기서는 -type f라고 파일이라는 형식을 정해줬습니다. 

find -type f -name "hello.txt" -exec rm -f {} /;

검색을 다시 했는데 결과가 나오지 않는다. 왜냐 없기 때문

같지만 중간에 ""가 들어가 있습니다 이유는 뒤에 더 내용이 있기 때문으로 보입니다. -exec는 실행한다라는 의미를 가지고 있습니다. 그 뒤의 내용은 rm지우기 -f묻지도 따지지도 않고 {}여기에는 hello.txt로 검색해서 나온 결과값의 파일들이 들어갈 자리입니다. 한마디로 hello.txt라는 파일을 찾아서 묻지도 따지지도 말고 삭제하라는 명령입니다.

 

한 번 다룬 내용 같지만 위치를 찾아주는 whereis입니다.

실행 파일,소스,메뉴얼 파일을 지정한 명령어의 이름을 통해서 찾아줍니다.

그 때 전체 디렉토리가 아닌 $PATH과 $MANPATH를 통해서 찾습니다.

여기서 $PATH는 환경변수입니다. 이 환경변수는 유저가 만든 것이 아니라 기본적으로 가지고 있는 변수입니다.

변수값은 echo $PATH를 하면 확인이 가능한데요

검색을 하게 되면 $PATH 변수값 안에서 검색을 해서 찾아주는 겁니다.

그리고 변수의 값을 임의로 변경이 가능하고 변경하게 되면 지정한 원하는 디렉토리에 파일이 있으면 실행할 때 사용할 수 있다고 합니다.

 

다음은 background 실행입니다.

멀티테스킹이라고 하죠 한 번에 여러 작업을 하는 것 여기서 foreground, background개념을 알고 있어야하는데

간단하게 말하자면 현재 화면에 직접 띄워놓고 있는 작업을 foreground라고 부르고

최소화를 해두거나 화면에 띄워져는 있지만 직접 사용하고 있지 않은 작업을 background라고 합니다.

예시로 nano를 켜놓은 채로 다른 작업 혹은 파일이 제대로 생성됐는지 확인하고 싶다면 Ctrl+z를 누르면 백그라운드로 넘어갑니다.(현재 작업하던 nano윈도우가 닫힙니다.)

그리고 작업하던 nano를 불러내고 싶다면 fg를 입력해주시면 다시 foreground 작업화면으로 넘어옵니다.

또 jobs라고 입력하면 지금 백그라운드에서 돌아가고 있는 작업을 확인할 수 있습니다.

하지만 주의할 점은 현재 사용하고 있는 프로그램과 동일하게 키더라도 (ex nano를 입력한 뒤 Ctrl+z이후 다시 nano를 입력하는 경우)background에 있는 작업이 아닌 새로운 작업을 여는 것이니 주의하셔야합니다.

또 jobs를 입력했을 때 background에서 돌아가는 프로그램이 여러개가 있을 경우 [1]처럼 안에 숫자가 들어있고 그 옆에는 + -표시도 생기는데 숫자는 번호로써 %1과 같이 숫자를 입력하면 맞는 번호에 있는 프로그램을 선택할 수 있습니다.

이와 같이 fg %3을 하면 3번에 있는 작업을 불러옵니다.

[3]에 있던 vim이 실행된 화면

근데 이렇게 한다고 하면 작업을 직접 일일이 종료해야하는 불편함이 있는데 이걸 해결할 수 있는 명령어도 당연히 있습니다.

 

kill을 사용했는데 왜 안사라지지...?

kill %숫자 입력입니다. 하지만 이건 정상적인 종료로써 더욱 강력하게 종료를 원할 경우에 kill -9 %숫자를 입력하면 강력한 요청이 된다고합니다. 컴퓨터 강제종료같은 느낌이 아닐까 싶습니다.

또 입력뒤에는 이렇게 killed라고 뜨는데요 그리고 jobs를 통해서 확인하면 사라져 있습니다.

여기서 백그라운드를 이용해 멀티테스킹하는 방법을 간단하게 보여드리겠습니다.

ls -alR / > result.txt 2> error.log &을 입력합니다

모든 디렉토리와 모든 파일의 결과를 result.txt로 출력하고 에러가 있으면 error.log로 출력하라는 의미입니다. 뒤에 &은 백그라운드로 바로 집어넣어버리는 명령어입니다.

&을 입력하지 않고 그냥 입력할 경우에는 아무것도 표시가 되지 않지만 작업이 시간이 조금 걸리는데 그 작업이 종료될 떄까지 다음 작업을 할 수가 없습니다.

또 작업이 원할하게 돌아가는지 확인하는 방법은 jobs를 이용해서 확인하면 Running으로 표시가 됩니다.

작업이 끝나면 Exit라고 처리된 방법에 따라 1 혹은 2가 붙어서 결과가 출력됩니다.

생활코딩님 영상을 보면 그냥 가만히 있어도 출력이 되던데 저는 안되네요...

 

다음은 daemon입니다. 우리가 지금 쓰고 있는 ls, mkdir, rm과 같은 입력하여 그때그때 켜지는 프로그램들이 아닌 항상 켜져있는 프로그램으로 게임으로 비유를 하자면 패시브 스킬이라고 할 수 있겠습니다.

예시로는 server가 있습니다.

webbrowser가 설치되어 있는 컴퓨터는 Client라고 하는데 Client는 사용자가 필요한 정보를 서버에게 요청하고 Server는 그 요청에 응답해주는 구조입니다.

자 이제 서버를 한 번 설치하여 켜고 꺼보겠습니다.

sudo apt install apache2 아파치2라는 이름의 파일을 설치합니다.

이 프로그램은 cd /etc/init.d/를 입력하여 이동하면 ls를 통해 apache2를 확인할 수 있습니다.

여기서 방금 들어간 /etc/init.d/라는 디렉토리는 데몬프로그램들이 위치하는 디렉토리로써 데몬의 목적을 가지고 있는 프로그램들은 전부 이 디렉토리에 위치합니다. 

또 여기 있는 daemon프로그램들은 키고 끄는 것이 일반적인 프로그램들과는 다릅니다.

sudo service apache2 start

아무것도 뜨지 않는다면 켜진겁니다.

이제 잘 켜져 있는지 확인을 해야겠죠 

ps aux | grep apache2를 입력합니다. 현재 실행되고 있는 프로세스 목록을 출력해주는 명령어에 grep을 붙여주어 apache2만을 끄집어낸 결과입니다. 보면 뭔가 실행되고 있는 것이 보입니다.

이제 정지를 해보겠습니다. sudo service apache2 stop을 입력합니다.

다시 한 번 ps aux | grep apache2를 입력하여 꺼진 것을 확인합니다.

여기 결과값에 1개가 나오는 대충 읽어보면 grep이 보이는 것을 보니 grep프로그램이 돌아간 프로세스를 찾아낸 것 같습니다. 

아무튼 service를 사용하는 애들은 start, stop을 필수적인 명령어로써 가지고 있습니다. 또 daemon에 해당하는 프로그램들은 service라는 명령어를 통해 우회하여 제어할 수 있습니다.

하지만 이런 서버 같은 경우에는 보통 항상 켜지는 속성을 가져가야하는데요 이유는 만일 모종의 이유로 컴퓨터가 재부팅되거나 하는 일이 생겼을 때를 대비하여 그런 것입니다.

/etc로 이동합니다. cd ..을 이용하면 빠릅니다. ls를 통해 파일 목록을 확인하고요

여기서 봐야할 곳이 rc0~6.d입니다. rcS.d도 포함입니다.

rc는 Run Command를 뜻하며 여기 뒤에 있는 숫자,알파벳은 레벨을 의미합니다. 

S level , 0 level ~ 6 level 이런식으로요

여기서 0 level은 시스템 종료  6 level은 재부팅이고 1 level은 시스템 복구를 위해서 사용되는 듯합니다.

우리가 여기서 봐야할 곳은 rc3.d와 rc5.d입니다.

rc3.d는 Cli방식으로 즉 콘솔로 운영체제를 구동중일 경우에는 이 디렉토리를

rc5.d는 gui방식으로 운영체제를 구동중일 경우에는 이 디렉토리를 이용하면 됩니다.

자 이제 이동하겠습니다.

저는 리눅스를 이용하고 있기 때문에 cd를 이용하여 cd rc3.d를 입력해줍니다. 디렉토리로 가는거라 cd를 사용합니다.

그리고 ls -l을 이용하여 안에 있는 내용을 확인합니다.

여기보면 ../init.d/apache2라는 프로그램이 있는데 S02apache2라는 이름으로 되어있습니다.

하지만 실제 프로그램이 이 위치에 있는 것은 아닙니다. 파일 속성을 보면 제일 앞에 l이 붙어 있는데 l로 시작하는 것은 링크라는 의미입니다. 그러므로 프로그램에 실제로 있는 곳은 다른 곳이고 S02apache2라는 이름으로 링크를 넣은겁니다. 바로가기라고 생각하시면 되겠습니다.

이름이 S로 시작되면 rc3.d/에 있는 경우 콘솔을 통해 Cli로 부팅된 컴퓨터는 시작될 때 이 프로그램이 자동으로 실행된다는 뜻입니다. 또 다른 K로 시작하게 되는 경우에는 이 프로그램은 실행되지 않는다는 뜻입니다.

그리고 이름에 적혀있는 01 02와 같은 숫자는 우선순위를 적어놓은 것입니다.

자동으로 실행되게 하고 싶다면 저런식으로 이름을 만들어서 자신이 자동으로 실행하게 만들고 싶은 서버의 파일로 링크를 걸면 됩니다. S를 반드시 넣고 우선순위를 잘 정해서요.

완벽하게 이해하는게 아니다보니까 제 개인적인 견해를 자꾸 남기게 되네요. 궁금하면 검색을 해보기는 하지만 많이 부족한 것 같습니다.

혹시 보다가 제가 이해를 이상하게 했거나 부족한 부분이 있다면

꼭 코멘트 남겨서 제가 올바른 지식을 쌓을 수 있도록 도움을 주신다면 감사하겠습니다.

 

'자기개발 > Linux' 카테고리의 다른 글

TCP 3-Way HandShaking과 4-Way HandShaking  (0) 2021.03.31
Linux 공부 5일차  (0) 2021.01.30
Linux 공부 3일차  (0) 2021.01.23
Linux 공부 2일차  (0) 2021.01.22
Linux 공부 1일차  (0) 2021.01.21