리눅스 종료 코드를 사용하여 리눅스 시스템 문제 해결하는 방법

종료 코드는 반환 코드 또는 종료 상태라고도 하며, 프로그램, 명령 또는 스크립트가 실행을 마친 후 운영 체제(또는 호출 프로세스)에 다시 보내는 숫자 신호입니다. 실패를 진단하기 위해 잠재적으로 긴 로그 파일을 뒤질 필요가 없습니다. 종료 코드는 종종 문제의 본질에 대한 빠른 단서를 제공합니다.
보편적으로 받아들여지는 규칙은 프로그램이 성공적으로 실행되면 종료 코드 0을 반환한다는 것입니다. 1에서 255 사이의 다른 숫자는 무언가 잘못되었음을 나타냅니다.
유닉스 계열 셸(예: Bash 또는 Zsh)에서 마지막으로 실행된 전경 명령의 종료 코드를 확인하는 가장 간단한 방법은 특수 셸 변수 $?를 검사하는 것입니다. 예를 들어, 먼저 어떤 명령을 실행한 다음 종료 코드를 확인합니다:
ls/nonexistent_directory
echo$?
echo $? 명령은 $? 변수에 저장된 숫자 종료 코드를 표시합니다. 0이 표시되면 이전 명령이 성공적으로 완료되었다는 의미입니다. 1, 2 또는 127과 같은 비제로 값은 오류를 나타내며, 특정 숫자는 문제의 유형에 대한 단서를 제공합니다. 예를 들어, 파일이 없거나, 존재하지 않는 디렉토리이거나, 권한이 부족할 수 있습니다.
종료 코드로 스크립트 디버깅하기
종료 코드는 셸 스크립트를 작성할 때 특히 유용합니다. 이들은 스크립트가 무언가가 잘되었는지 잘못되었는지를 판단하는 데 도움을 주며, 다음에 무엇을 할지를 결정할 수 있게 합니다.
다음은 파일을 백업 폴더로 복사하고 복사가 성공했는지 보고하는 간단한 예입니다:
#!/bin/bash
# 파일 복사 시도
cp important_file.txt backup/
# 종료 코드($?는 마지막 명령의 종료 코드를 보유함)를 사용하여 복사가 성공했는지 확인
if[$?-eq0]; then
echo"백업 성공!"
else
echo"백업 실패, 종료 코드 $?"
exit1# 오류 코드로 스크립트를 종료하여 무언가 잘못되었음을 나타냅니다.
ficp 명령이 실행되면 종료 코드를 반환합니다. 종료 코드 0은 모든 것이 순조롭게 진행되었음을 의미합니다. 코드가 0이 아니면 무언가 잘못된 것이며, 스크립트는 오류 메시지를 출력하고 1 코드로 종료합니다.
사용자 정의 종료 코드 설정하기
명령의 종료 코드를 확인하는 것 외에도, 다양한 유형의 오류를 나타내기 위해 사용자 정의 종료 코드를 정의할 수 있습니다. 이 관행은 스크립트를 더 유익하게 만들어 사용자가 어떤 종류의 문제가 발생했는지 정확히 이해할 수 있도록 합니다.
다음 스크립트를 고려해 보십시오:
#!/bin/bash
# 인수(파일 이름)가 제공되었는지 확인합니다.
if[-z"$1"]; then
echo"사용법: $0 "
exit1# 종료 코드 1은 인수가 제공되지 않았음을 나타냅니다.
fi
# 첫 번째 인수로 제공된 파일이 존재하는지 확인합니다.
if[!-f"$1"]; then
echo"오류: 파일을 찾을 수 없습니다"
exit2# 사용자 정의 종료 코드 2는 파일을 찾을 수 없음을 나타냅니다.
fi누군가 귀하의 스크립트를 실행하고 실패하면 종료 코드를 참조하여 정확한 오류를 확인할 수 있습니다. 이 예에서 종료 코드 1은 사용자가 필수 인수를 제공하지 않았음을 나타내고, 종료 코드 2는 파일을 찾을 수 없음을 명시적으로 나타냅니다. 이러한 구조화된 접근 방식은 스크립트가 더 큰 시스템의 일부이거나 다른 스크립트가 그 출력을 의존할 때 특히 유용합니다.
일반적인 종료 코드 목록
다양한 프로그램이 자체 종료 코드를 정의할 수 있지만, 많은 명령줄 도구에서 볼 수 있는 몇 가지 일반적인 패턴이 있습니다. 특히 리눅스 및 유닉스 계열 시스템에서 자주 접하는 코드들은 다음과 같습니다:
- 0: 모든 것이 좋습니다! 프로그램이 문제 없이 실행되었습니다.
- 1: 무언가 잘못되었지만 오류가 구체적이지 않습니다. 이는 종료 코드의 포괄적인 경우와 같습니다.
- 2: 셸 내장 명령의 잘못된 사용. 필수 매개변수를 잊어버리는 등의 경우에 발생할 수 있습니다.
- 126: 명령이 존재하지만 실행할 권한이 없습니다.
- 127: 명령을 찾을 수 없습니다. 이는 명령이 존재하지 않거나 시스템 경로에 없음을 의미합니다. 철자를 다시 확인하십시오.
- 128: 잘못된 종료 인수. 종료 코드로서 의미가 없는 숫자를 사용했습니다.
- 130: Ctrl + C로 프로그램이 종료되었습니다. 이는 프로그램을 수동으로 중지할 때 발생합니다.
- 137: 메모리 부족(OOM) 상태.
- 255: 프로그램이 유효한 범위를 벗어난 종료 코드를 반환하려고 했습니다.
특정 프로그램은 고유한 종료 코드를 가지고 있습니다. 예를 들어, grep은 일치 항목을 찾으면 0을 반환하고, 일치 항목을 찾지 못하면 1을 반환하며, 오류가 발생하면 2를 반환합니다. 또한 개발자는 기술적으로 거의 모든 숫자(일반적으로 유닉스 계열 시스템에서 0에서 255까지)를 사용할 수 있습니다.
성공 또는 실패에 따라 명령 연결하기
Bash는 또한 이전 명령이 성공했는지 실패했는지에 따라 명령을 연결할 수 있는 두 가지 유용한 연산자 && 및 ||를 제공합니다:
- && (AND 연산자): 이전 명령이 성공했을 때만 다음 명령을 실행합니다(종료 코드 0).
- || (OR 연산자): 이전 명령이 실패했을 때만 다음 명령을 실행합니다(비제로 종료 코드).
예를 들어, 디렉토리를 만들고 즉시 그 안으로 이동하고 싶다고 가정해 보겠습니다. 디렉토리 생성이 실패하거나 그 안으로 이동하는 데 문제가 있는 경우 오류 메시지를 표시하고 싶을 수 있습니다:
mkdir new_directory &&cd new_directory ||echo"디렉토리 생성 및 접근 실패"여기서 mkdir new_directory는 폴더를 생성하려고 시도합니다. 그것이 성공하면 코드는 즉시 cd new_directory를 실행합니다. 어느 단계라도 실패하면 || 연산자가 작동하여 오류 메시지를 출력합니다.
최종 생각
종료 코드는 작은 세부사항처럼 보일 수 있지만, 명령줄 도구를 강력하게 만드는 요소 중 하나입니다. 이들은 프로그램이 성공과 실패에 대해 소통할 수 있는 공통 언어를 생성하며, 이는 복잡한 시스템을 구축하는 데 필수적입니다.
명령줄 작업에 익숙하지 않은 경우, 명령이 예상대로 작동하지 않을 때 echo $?를 확인하는 습관을 들이기 시작하십시오. 곧, 귀하의 스크립트에서 종료 코드를 사용하고 이 간단하지만 효과적인 통신 시스템을 감사하게 될 것입니다.