Linux Shell 자동 상호작용 의 세 가지 방법

3366 단어
당신 은 리 눅 스 시스템 을 이해 합 니까?당신 은 Linux 시스템 의 응용 자 입 니까?만약 에 Liux 를 배 우려 면 Linux Shell 의 자동 상호작용 문 제 를 만 날 수 있 습 니 다. 여기 서 Linux Shell 의 자동 상호작용 해결 방법 을 소개 하고 여기 서 꺼 내 서 여러분 과 공유 하 겠 습 니 다.
배경
셸 스 크 립 트 는 자동 으로 순환 되 거나 큰 작업 을 처리 하 는 데 많은 시간 을 절약 할 수 있 습 니 다. 작업 을 처리 하 는 명령 목록 을 만 들 고 변수, 조건, 산술, 순환 등 방법 으로 스 크 립 트 를 빠르게 만들어 서 해당 작업 을 수행 할 수 있 습 니 다. 이것 은 명령 행 다음 명령 을 두 드 리 는 것 보다 시간 을 절약 하 는 것 입 니 다.
그러나 가끔 우 리 는 ftp, telnet 서버 등 과 상호작용 을 하 는 기능 을 실현 해 야 할 수도 있다. 이때 우 리 는 셸 의 자동 상호작용 기능 을 사용 해 야 한다. 본 고 는 비교적 자주 사용 하 는 세 가지 자동 상호작용 방법 을 수집 하고 비교 와 정 리 를 했다.
수요
필요 1: 리 눅 스 기기 ftp 에서 다른 리 눅 스 기기 로 로그 인하 여 시리즈 작업 을 한 후 닫 습 니 다. 매번 수 동 으로 비밀 번 호 를 입력 하지 못 합 니 다.
필요 2: 로그 인 사용자 비밀 번 호 를 바 꾸 고 매번 새 비밀 번 호 를 입력 하지 않 습 니 다.
수요 3: su 가 루트 계 정 에 자동 으로 로그 인하 기 를 바 랍 니 다. 매번 루트 비밀 번 호 를 입력 하 는 것 이 귀 찮 습 니 다.
3. 디 버 깅 환경
단말기: SecureCRT
시스템: WinXP, CentOS 4.4 (VmWare)
Shell:bash
주: 셸 은 여러 가지 가 있 습 니 다. B 류 SHELL (sh, bash, ksh) 간 의 행동 이 비슷 합 니 다.C 류 SHELL (csh, tcsh) 간 의 행동 이 비슷 하고 zsh 와 rc 등 셸 도 있 습 니 다. 본 논문 의 디 버 깅 환경 은 bash 입 니 다.
4. 자동 상호작용 방법 1
자동 인 터 랙 션 의 가장 관건 적 인 것 은 인 터 랙 션 정보의 자동 입력 입 니 다. 먼저 파일 의 방향 을 바 꾸 는 것 을 연상 합 니 다. 셸 프로 그래 밍 에서 이러한 용법 (Linux 와 UNIX SHELL 프로 그래 밍 안내 chapt 5.7 참조) 이 있 습 니 다. "command < delimiter  표준 입력 에서 delimiter 분계 부 를 만 날 때 까지 읽 습 니 다. "
재 설정 연산 자 command << delimiter 는 매우 유용 한 명령 입 니 다. 셸 은 분계 부 delimiter 이후 같은 분계 부 이전의 모든 내용 을 입력 으로 합 니 다. 다음 분계 부 를 만나면 셸 은 입력 이 끝 났 음 을 알 수 있 습 니 다.가장 흔히 볼 수 있 는 delimiter 분계선 부 호 는 EOF 이 며, 당연히 다른 문자 로 스스로 정할 수 있다.
수요 1 이 요구 하 는 자동 로그 인 ftp 에 대해 시리즈 작업 을 하면 이런 방법 으로 자동 상호작용 을 할 수 있다.코드 는 다음 과 같 습 니 다:
#!/bin/bash  
  • ftp -i -n 192.168.167.187 << EOF 

  • user hzc 123456  
  • pwd  

  • cd test  
  • pwd  

  • close  
  • bye  

  • EOF 
    테스트 를 통 해 상기 코드 는 계 정 이름 hzc 를 사용 하고 비밀 번 호 는 123456 이 ftp 서버 에 성공 적 으로 로그 인하 여 디 렉 터 리 에 들 어가 pwd 를 인쇄 한 것 을 발견 할 수 있 습 니 다.
    5. 자동 상호작용 방법 2
    수요 2 에서 비 상호작용 방식 으로 로그 인 사용자 의 비밀 번 호 를 바 꾸 고 방법 1 을 시도 해 야 하 며 실현 할 수 없습니다.
    이때 상호작용 정 보 를 연상 시 키 는 또 다른 자동 입력 방법, 파 이 프 는 echo + sleep + | 을 통 해 이 수 요 를 실현 할 수 있 습 니 다.
    #!/bin/bash  
  • (echo "curpassword" 

  • sleep 1  
  • echo "newpassword"   

  • sleep 1  
  • echo "newpassword")|passwd 

  • 테스트 를 통 해 이 스 크 립 트 를 실행 하고 현재 사용자 의 curpassword 를 new password 로 직접 변경 합 니 다.
    6. 자동 상호작용 방법 3
    수요 3 에서 루트 계 정 자동 로그 인 을 요구 합 니 다. 시도 방법 1 과 방법 2, 모두 오류 알림 standard in must be a tty.
    이 럴 때 외부 도움말 을 찾 아 보 세 요. 셸 도구 expect 는 이 기능 을 실현 할 수 있 습 니 다. 사실은 expect 는 자동 상호작용 기능 을 실현 하 는 도구 입 니 다. expect 의 문법 은 관련 자 료 를 참고 할 수 있 습 니 다. 코드 는 다음 과 같 습 니 다.
    #!/usr/bin/expect  
  • spawn su root  

  • expect "password: " 
  • send "123456/r" 

  • expect eof  
  • exit 

  • 테스트 를 통 해 이 스 크 립 트 를 실행 하고 현재 사용자 에서 루트 사용자 로 직접 로그 인 합 니 다.
    7. 방법 총화
    방법 1 (방향 재 정립) 은 간단 하고 직관 적 이 며 실제 응용 도 자주 있 지만 자동 상호작용 분야 에서 기능 이 유한 하 다.
    방법 2 (파이프) 도 간단 하고 직관 적 이 며 때로는 sleep 협조 없 이 강력 한 자동 상호작용 실력 을 보 여줄 수 있 지만 때로는 속수무책 이다.
    방법 3 (expect) 은 기능 적 으로 가장 강력 하 다. expect 는 원래 자동 상호작용 기능 을 실현 하기 위해 생 겨 난 것 이지 만 단점 은 expect 패 키 지 를 설치 해 야 하고 내장 형 등 환경 에서 설치 하기 어렵 다 는 것 이다.
    세 가지 방법 은 각각 우열 이 있 고 잘 응용 되면 리 눅 스 셸 의 자동 상호작용 을 완성 할 수 있다.

    좋은 웹페이지 즐겨찾기