■ ; 과 &와 && 의 차이 를 알아보자.

1) ;     - 앞의 명령어가 실패해도 다음 명령어가 실행된다.

2) && - 앞의 명령어가 성공했을 때 다음 명령어가 실행

3) &   - 앞의 명령어를 백그라운드로 돌리고 동시에 뒤의 명령어를 실행 


■ { } 를 사용하여 명령을 그룹핑 할 수 있다.


- mkdir test3 && { cd test3; touch abc; echo 'success87' }  || echo 'fail : can't make directory' ;


1) mkdir test3가 

2) 성공했을 때 cd test 3; touch abc 를 실행하고 success87 을 출력한다. 

3) 실패했을 경우엔 fail : can't make directory 를 출력한다.


※  현재 접속한 계정의 홈 디렉토리로 이동하기 위해서는 ~ 를 입력해주면된다. 


■ Cron : 특정프로그램을 정기적으로 실행하는 목적을 달성할 수 있다. 

 ex) 정기적으로 데이터 백업 

 - crontab -e 를 입력하여 정기적으로 수행될 작업에 대해 설정해줄 수 있다.

 - 아래와 같은 값을 줄 수 있다.


실습 : date 를 입력하면 현재시각이 출력된다.  이 출력되는 시각을 1분마다 date.log 파일에 append 해주고, append 된 정보를 화면에 출력해보자.

그리고 해당 프로그램이 에러가발생할 수 있으며 그 에러내용 또한 date.log 에 넣어보자. 


 1.  contab -e 

 2.  */1 * * * * date >> date.log               // 1분에 한 번씩 출력되는 현재시각을 date.log 에 append 한다. 

 3.  tail -f  date.log                                //  tail -f  : 새로된 추가된 내용들에 대하여 자동으로 화면에 refresh 해준다. 

 4. */1 * * * *  date >> date.log  2> &1      // Standard out error에 대하여 표준 출력을 하는 파일에 Redirection 해준다.

// 이 때 반드시 1앞에 &를 붙여줘야한다. 안그러면 1이라는 파일에 Standard out error를 Redirection하는 것이다.


■ 데몬 -  

멀티태스킹 운영체제에서 데몬 (daemon)은 사용자가 직접적으로 제어하지 않고, 백그라운드에서 돌면서 여러 작업을 하는 프로그램을 말한다. 시스템 로

그를 남기는 'syslogd' 처럼 보통 데몬을 뜻하는 'd'를 이름 끝에 달고 있으며, 일반적으로 프로세스로 실행된다. 


만약, 어떤 프로그램이 항상 실행되게 하기 위해서는 daemon을 실행시켜주면된다.


/etc/init.d/  : daemon 프로그램들이 위치한 디렉토리이다. 

이 곳에 위치한 daemon을 on/off 하기 위한 방법이 있는데 

 ex 1)  sudo service apache2 start    -- daemon 프로그램이 수행된다.  (On)

 es 2)  sudo service apache2 stop    -- daemon 프로그램을 멈춘다.     (Off)


특정 프로그램에 대하여 자동으로 실행시키고 싶은 daemon이 있다면 링크를 걸어주면된다. 

 1) cli 환경에서 

 부팅 시, 자동으로 데몬이 실행되도록하고 싶다면 

 /etc/rc3.d 라는 디렉토리에 S로시작하는 이름으로 링크를 걸어주면된다. 

ex) lrwxrwxrwx 1 root root 17 Nov 6  S02apache2 -> ../init.d/apache2

( l 은 링크를 나타냄 d는 디렉토리 )

 

마찬가지로 

2)  gui 환경에서 

부팅 시, 자동으로 데몬이 실행되도록하고 싶다면 

 /etc/rc5.d 라는 디렉토리에 S로시작하는 이름으로 링크를 걸어주면된다. 


리눅스에서도 백그라운드 작업을 할 수 있다. 

 

1.  jobs : 백그라운드 작업들의 목록을 보여준다. 

2.  해당 프로그램을 작성하던 중 다른 작업을 하고 싶을 때, 해당프로그램을 백그라운드로 보내기 위해서는 Ctrl + z 를 입력한다. 

 ※ Ctrl + z : 실행중인 프로그램을 백그라운드로 보내는 단축키이다. 이 때 이 기능을 실행하면 명령어가 일시 정지 된다. 


3. jobs 를 입력하였을 때 백그라운드 작업 목록 3개(1,2,3)가 나타났다고 가정하자. 

 이 때 + 표시가 있는 것은 가장 우서순위  - 표시는 그다음 실행될 우선순위 그리고 아무런 표시가 없는 것은 - 표시가 있는 작업 이후에 순차적으로 일어날 프로그램이라고 보면된다. 

 

4. 만약 특정 작업(2번 작업)을 다시 fore ground 에서 작업하고 싶다면?  

  - fg %2 라고 하면 두번째 작업이 실행된다.  이 때 fg 는 foreground 의 약자이다. 


5.  3번 작업을 죽이고 싶다면 ?

  - kill %3


6. ls -R 과 같은 모든 디렉터리에 포함된 파일들을 나타내는 명령어의 경우 시간이 얼마나 걸릴지 모른다. 이러한 작업을 무작정 기다리기 싫을 때 즉, 처음부터 이러한 작업을 백그라운드로 돌리기 위한 작업방법이 존재한다. 

   - & 가 명령어 뒤에 붙으면 명령어가 실행될 때 백그라운드로 실행된다. 

   - 6번과 같은 경우에는  ls - alR의 시간이 오래걸리는 작업이므로 처음부터 이 작업을 할 경우 백그라운드에서 돌리겠다는 의도의 명령어이다. 

ls - alR / > result.text 2> error.log


1. locate

 - 디렉터리를 직접 뒤지지 않는다. 

 - 데이터베이스(DB)를 뒤진다.

 - 실시간으로 동기화되지는 않는다. 

 - 특정기간까지 저장된 정보를 뒤진다. 

 - 따라서 조회를하는 수행속도가 훨씬 빠르다. 

 - locate 가 사용하는 디비공간 --> mlocate ...등이 있다.


2. find 

 - 다양한 옵션이 있으므로 특정 파일을 찾고자 할 때마다 찾아서 적용해주자.

 - 실제 디렉토리를 일일이 뒤진다. locate작업 수행속도보단 느리지만 동기화가 되어있으므로 기간에 제한받지 않고 파일을 검색할 수 있다.



3. whereis 

 - 실행파일의 위치를 알아내는 명령어이다. 

 - whereis mkdir , whereis ls 이러한 프로그램명령어들의 경우에도 실행파일이 존재하므로, 실행파일이 존재하는 모든 프로그램의 경우

 whereis로 검색이 가능하다. 




※ $PATH 

 - ls, mkdir, rm, shutdown 이러한 명령어의 경우에는 특정 파일에서만 적용되는 명령어가 아니고 범위가 전지역적인데 그러한 이유는?

 - 해당 명령어를 포함하는 경우에  그 명령어를 포함한 디렉토리가 PATH에 미리 설정되어있기 떄문이다. 

 - 필요한 경우에는  PATH 에 설정만한다면 전지역적으로 해당 명령어 및 실행파일을 사용할 수 있다. 


+ Recent posts