4/09/2015

pushd 와 popd로 반복 directory 이동

1. pushd 와 popd의 기능

Linux에서 cd 를 이용하여 잦은 directory를 이동하면 사실 귀찮으며, 이동한 기록을 이용하여 이동을 하면 편할 때가 많다.

  • pushd 
stack 구조로 history를 저장하고 cd 명령처럼 이동을 하며, 본인의 옵션에따라 써클큐처럼 동작하여 순환이동이 가능하다.

  1. pushd path : 해당 path를 pushd에 Stack으로 기록과 동시에 이동후 Stack 기록
  2. pushd        : stack에 있는 이전 path로만 이동, 반복이동가능 (Stack Size 동일)
  3. pushd +1   : stack을 써클큐로 이용하여 현재주소 n번째 path로이동 (Stack Size 동일)


  • popd 
popd는 pushd로 기록된 history 중에 필요없는 기록을 지우는 기능으로 사용된다.

  1. popd     :   stack의 이전주소 이동후 stack 이전주소삭제
  2. popd -n  :  현재기준으로 1번째주소만 삭제 (현재주소 유지)
  3. popd +3 :  현재기준으로 3번째 주소만 삭제 (현재주소 유지)


가능하다면 -n 옵션과 -N 옵션은 사용하지 말자.
+N 옵션만 직접번호 넣고해야 사용해야 기억하기 쉽다. 

1.1 pushd를 이용하여 stack 정보생성

$ pushd /var/log/                       // pushd 입력과 동시에 이동 
/var/log ~                              // Stack 정보표시 1개 (좌측 왼쪽은 현재위치)

$ pushd /etc                            // pushd 입력과 동시에 이동                        
/etc /var/log ~                         // Stack 정보표시  2개 (좌측 왼쪽은 현재위치) 

$ pushd /opt                            // pushd 입력과 동시에 이동
/opt /etc /var/log ~                    // Stack 정보표시 3개 (좌측 왼쪽은 현재위치) 

$ pushd /bin                             // pushd 입력과 동시에 이동
/bin /opt /etc /var/log ~                // Stack 정보표시 4개 (좌측 왼쪽은 현재위치) 

$ pushd /mnt                             // pushd 입력과 동시에 이동
/mnt /bin /opt /etc /var/log ~           // Stack 정보표시 5개 (좌측 왼쪽은 현재위치) 

$ pushd /proc                             // pushd 입력과 동시에 이동
/proc /mnt /bin /opt /etc /var/log ~      // Stack 정보표시 6개 (좌측 왼쪽은 현재위치) 

   Stack 정보는 현재위치도 포함

1.2 두 주소만 반복이동

  • 기존기록 
$ pushd                                      // 상위의 마지막 Stack 정보    
/proc /mnt /bin /opt /etc /var/log ~         // 이전주소 (/proc) 이동됨 (좌측 왼쪽은 현재위치)


  • pushd 이용 사용예 
        현재위치기준으로 +1번째만 이동 (반복이동)

$ pushd                                      // 입력과 동시에 이전주소이동 (Stack Size동일)   
/mnt /proc /bin /opt /etc /var/log ~         // 이전주소 (/mnt) 이동된 (좌측 왼쪽은 현재위치)   

$ pushd                                      // 입력과 동시에 이전주소이동 (Stack Size동일)   
/proc /mnt /bin /opt /etc /var/log ~         // 이전주소 (/proc) 이동됨 (좌측 왼쪽은 현재위치)

$ pushd                                      // 입력과 동시에 이전주소이동 (Stack Size동일)   
/mnt /proc /bin /opt /etc /var/log ~         // 이전주소 (/mnt) 이동된 (좌측 왼쪽은 현재위치)   

$ pushd                                      // 입력과 동시에 이전주소이동 (Stack Size동일)   
/proc /mnt /bin /opt /etc /var/log ~         // 이전주소 (/proc) 이동됨 (좌측 왼쪽은 현재위치)


1.3 Stack 정보를 써클큐로 순환이동 

  • 기존기록 
$ pushd                                      // 상위의 마지막 Stack 정보    
/proc /mnt /bin /opt /etc /var/log ~         // 이전주소 (/proc) 이동됨 (좌측 왼쪽은 현재위치)


  • push +N 이용  
       현재위치기준으로 +N 번째  (순환이동)

$ pushd +1                                   // 1번째 전주소(/mnt)이동과 써클큐로 동작 (Stack Size동일)   
/mnt /bin /opt /etc /var/log ~ /proc         // 1번째 전주소(/mnt) 이동된 (좌측 왼쪽은 현재위치)   

$ pushd +1                                   // 1번째 전주소(/bin)이동과 써클큐로 동작 (Stack Size동일)   
/bin /opt /etc /var/log ~ /proc /mnt         // 1번째 전주소(/bin) 이동된 (좌측 왼쪽은 현재위치)   

$ pushd +1                                   // 1번째 전주소(/opt) 이동과 써클큐로 동작 (Stack Size동일)   
/opt /etc /var/log ~ /proc /mnt /bin         // 1번째 전주소(/opt) 이동된 (좌측 왼쪽은 현재위치)   

$ pushd +1                                   // 1번째 전주소(/etc) 이동과 써클큐로 동작 (Stack Size동일)   
/etc /var/log ~ /proc /mnt /bin /opt         // 1번째 전주소(/etc) 이동된 (좌측 왼쪽은 현재위치)  

$ pushd +2                                   // 2번째 전주소(/~)이동과 동시에 써클큐로 동작 (Stack Size동일)     
~ /proc /mnt /bin /opt /etc /var/log         // 2번째 전주소(/~) 이동됨 (좌측 왼쪽은 현재위치)

$ pushd +2                                   // 2번째 전주소(/mnt)이동과 동시에 써클큐로 동작 (Stack Size동일)     
/mnt /bin /opt /etc /var/log ~ /proc         // 2번째 전주소(/mnt) 이동됨 (좌측 왼쪽은 현재위치)

$ pushd +2                                   // 2번째 전주소(/opt)이동과 동시에 써클큐로 동작 (Stack Size동일)     
/opt /etc /var/log ~ /proc /mnt /bin         // 2번째 전주소(/opt) 이동됨 (좌측 왼쪽은 현재위치)

$ pushd +5                                   // 5번째 전주소(/mnt)이동과 동시에 써클큐로 동작 (Stack Size동일)    
/mnt /bin /opt /etc /var/log ~ /proc         // 이전주소 (/mnt) 이동된 (좌측 왼쪽은 현재위치)   

1.4 필요없는 Stack 정보 삭제 


  • 기존기록 
$ pushd                                      // 상위의 마지막 Stack 정보    
/proc /mnt /bin /opt /etc /var/log ~         // 이전주소 (/proc) 이동됨 (좌측 왼쪽은 현재위치)

  • popd 이용하여 삭제  
        현재위치기준으로 +N 번째 Stack 정보삭제

$ popd                              // 이전주소로 이동동시에 마지막현재주소 삭제 (/opt로 이동)
/mnt /bin /opt /etc /var/log ~      // 이전주소 이동됨 (좌측 왼쪽은 현재위치)

$ popd -n                           // popd로 현재기준으로 1번째주소만 삭제 (위치그대로) 
/mnt /opt /etc /var/log ~            // 현재주소 유지 (좌측 왼쪽은 현재위치)

$ popd +3                            // popd로 현재기준으로 3번째주소만 삭제 (위치그대로) 
/mnt /opt /etc ~                     // 현재주소 유지 (좌측 왼쪽은 현재위치)


  http://en.wikipedia.org/wiki/Pushd_and_popd
  http://devanix.tistory.com/231