유닉스 명령문 해독

유닉스 명령문 해독

여기서 말하는 내용을 해석해 보겠습니다.

export IP=`/sbin/ifconfig | grep 'inet addr:'|grep -v '127.0.0.1'|
    cut -d: -f2 | awk '{print $1}'`

IP를 환경 변수로 설정하는 것은 알지만 그 외에 나머지는 무엇을 의미합니까?

답변1

시스템의 모든 비루프백 IP 주소가 나열됩니다. 이 시스템에 루프백이 아닌 IP 주소가 하나만 있다고 가정하면 시스템의 IP 주소를 환경 변수 "IP"로 내보냅니다.

한 번에 하나의 "섹션"씩 파이프라인을 실행하여 시작하십시오. 즉, 처음으로 달릴 때

/sbin/ifconfig

그것이 무엇을 하는지 보세요. 그럼 달리세요...

/sbin/ifconfig | grep 'inet addr:'

그리고 거기에서 계속 나아가십시오.

답변2

많은 일이 일어나고 있습니다. 첫 번째:

export IP=`...`

백틱(작은 따옴표가 아님, 주의하세요) 사이에서 명령을 실행하고 해당 출력을 "IP"라는 변수의 값으로 사용하는 것을 의미합니다. "내보내기"는 모든 하위 프로세스가 "IP"라는 변수와 해당 값을 상속한다는 의미입니다.

명령은 파이프이며 각 명령의 표준 출력은 다음 명령의 표준 입력으로 공급됩니다. /sbin/ifconfig네트워크 인터페이스에 대한 정보 목록을 생성합니다. ifconfig의 모든 출력 줄은 에 입력됩니다 grep 'inet addr:'. Grep은 단순히 첫 번째 인수와 부분적으로 일치하는 텍스트 줄, 즉 정규식이라는 패턴을 전달합니다.

이 명령은 grep -v '127.0.0.1'일치하지 않는 텍스트 줄만 전달합니다. 127.0.0.1은 "루프백" IP 주소입니다. 우리 모두 알고 있듯이, 우리는 "IP"라는 변수의 값에 해당 정보가 포함되는 것을 원하지 않습니다.

이 명령은 cut -d: -f2입력에 있는 각 줄의 두 번째 필드를 인쇄합니다. 필드는 ":"(세미콜론)으로 구분됩니다. 이 awk '{print $1}'명령은 공백으로 구분된 첫 번째 열만 인쇄합니다.

TheDude가 쓴 것처럼 루프백이 아닌 모든 IP 주소를 쉘 환경 변수 IP 값에 문자열로 넣습니다.

답변3

참고: ifconfig는 일반적으로 여러 연결(루프백 연결 제외)을 표시하므로 이 코드는 각 IP 주소가 줄 바꿈으로 다음 IP 주소와 구분되는 문자열 변수를 생성합니다. 내 모습은 다음과 같습니다.

bigbird@sananda:~/pq$ export IP=`/sbin/ifconfig | grep 'inet addr:'|\
grep -v '127.0.0.1'| cut -d: -f2 | awk '{print $1}'`
bigbird@sananda:~/pq$ echo "[${IP}]"
[192.168.126.1
192.168.114.1
192.168.1.2]
bigbird@sananda:~/pq$

실제로 사용하려면 추가 구문 분석(줄 바꿈에서 문자열 분할)이 필요할 수 있습니다.

이를 처리하는 한 가지 방법은 IP 주소 문자열을 배열 요소에 넣는 것입니다.

export IP=($(/sbin/ifconfig | grep 'inet addr:'|grep -v '127.0.0.1'| cut -d: -f2 |\
awk  '{printf "%s ", $1}'))

for (( I=0; I<${#IP[@]}; I++ ))
do
  echo "${I} [${IP[${I}]}]"
done

bigbird@sananda:~/bin$ mytest
0 [192.168.126.1]
1 [192.168.114.1]
2 [192.168.1.2]
bigbird@sananda:~/bin$ 

추가된 괄호()는 출력을 배열 요소로 변환합니다. print는 각 IP 뒤에 공백(기본 bash 구분 기호)을 추가하고 개행 문자를 제거하기 위해 printf로 변경되었습니다. 백틱 기호:

`...`

명령 출력을 문자열로 변환하는 방법도 업데이트된 구문 $(...) 으로 대체되었습니다.

for 루프는 결과를 표시하고 결과에 액세스하는 방법으로 포함됩니다.

관련 정보