Linux 에서 파일 실행 가능 여부 확인 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 다양한 방법을 사용하여 Linux 에서 파일이 실행 가능한지 여부를 확인하는 방법을 배우게 됩니다. 먼저, -x 옵션과 함께 test 명령을 사용하여 실행 권한을 확인하고, 해당 종료 상태를 해석하는 방법을 이해하는 것으로 시작합니다.

다음으로, ls -l 명령을 사용하여 자세한 파일 권한을 보고 실행 플래그를 식별하는 방법을 살펴봅니다. 마지막으로, stat 명령을 사용하여 파일 접근 정보를 검사하는 방법을 배우고, 실행 가능성을 확인하는 또 다른 방법을 제공합니다.

test -x 로 실행 가능 여부 테스트

이 단계에서는 -x 옵션과 함께 test 명령을 사용하여 파일이 실행 가능한지 확인하는 방법을 배우게 됩니다. test 명령은 조건식 (conditional expression) 을 평가하는 내장 셸 명령입니다. -x 옵션은 특히 실행 권한을 확인합니다.

먼저, ~/project 디렉토리에 간단한 텍스트 파일을 만들어 보겠습니다. echo 명령을 사용하여 my_script.sh라는 파일에 텍스트를 넣습니다.

echo "echo 'Hello from the script!'" > ~/project/my_script.sh

이제 이 파일이 실행 가능한지 확인해 보겠습니다. 기본적으로, 이 방식으로 새 파일을 만들면 실행 권한이 없습니다.

test -x 명령을 파일 경로와 함께 사용합니다.

test -x ~/project/my_script.sh

이 명령을 실행한 후, 테스트가 성공하면 (즉, 파일이 실행 불가능하면) 아무런 출력도 표시되지 않습니다. 파일이 실행 가능했다면, test -x는 상태 코드 0 을 반환하는데, 이는 일반적으로 셸 스크립팅에서 "true" 또는 "success"로 해석되지만, 기본적으로 터미널에 아무것도 출력하지 않습니다.

test 명령의 결과를 확인하기 위해, $?를 사용하여 이전 명령의 종료 상태 (exit status) 를 확인할 수 있습니다. 종료 상태가 0이면 테스트가 참 (파일이 실행 가능) 이고, 0 이 아닌 상태 (일반적으로 1) 이면 테스트가 거짓 (파일이 실행 불가능) 임을 의미합니다.

echo $?

1이 출력되어 현재 my_script.sh가 실행 불가능함을 나타냅니다.

이제 chmod 명령을 사용하여 파일을 실행 가능하게 만들어 보겠습니다. chmod는 파일 및 디렉토리의 권한을 변경하는 데 사용됩니다. 파일 소유자에 대한 실행 권한을 추가하기 위해 +x를 사용합니다.

chmod +x ~/project/my_script.sh

이제 실행 가능성을 다시 테스트해 보겠습니다.

test -x ~/project/my_script.sh

그리고 종료 상태를 확인합니다.

echo $?

이번에는 0이 출력되어 파일이 이제 실행 가능함을 확인합니다.

마지막으로, 스크립트를 실행하여 출력을 확인해 보겠습니다.

~/project/my_script.sh

다음과 같은 출력을 볼 수 있습니다.

Hello from the script!

이는 파일이 성공적으로 실행 가능하게 되었고 실행되었음을 확인합니다.

ls -l 로 권한 확인

이 단계에서는 ls -l 명령을 사용하여 자세한 파일 권한을 확인하는 방법을 배우게 됩니다. 이 명령은 긴 목록 형식 (long listing format) 을 제공하여 권한, 소유권, 크기 및 수정 시간을 포함하여 파일 및 디렉토리의 다양한 속성을 보여줍니다.

아직 ~/project 디렉토리에 있지 않다면 해당 디렉토리로 이동합니다. cd 명령을 사용할 수 있습니다.

cd ~/project

이제 ls -l 명령을 사용하여 이 디렉토리의 파일을 나열합니다.

ls -l

다음과 유사한 출력을 볼 수 있습니다 (날짜 및 시간과 같은 정확한 세부 정보는 다를 수 있습니다).

-rwxr-xr-x 1 labex labex   30 <date> <time> my_script.sh

파일 권한을 나타내는 출력의 첫 번째 부분인 -rwxr-xr-x를 자세히 살펴보겠습니다. 이 10 자 문자열은 파일로 무엇을 할 수 있는지에 대해 많은 정보를 제공합니다.

첫 번째 문자는 파일 유형을 나타냅니다.

  • -: 일반 파일 (예: my_script.sh)
  • d: 디렉토리
  • l: 심볼릭 링크 (symbolic link)

다음 9 개의 문자는 세 개의 세트로 그룹화되어 다음 권한을 나타냅니다.

  1. 소유자 (Owner): 파일을 소유한 사용자 (이 경우 labex).
  2. 그룹 (Group): 파일을 소유한 그룹 (또한 labex).
  3. 기타 (Others): 시스템의 다른 모든 사용자.

각 세 개의 문자 내에서 권한은 다음과 같이 표시됩니다.

  • r: 읽기 권한 (파일 내용을 볼 수 있음)
  • w: 쓰기 권한 (파일을 수정하거나 삭제할 수 있음)
  • x: 실행 권한 (파일을 프로그램으로 실행할 수 있음)
  • -: 권한이 부여되지 않음을 나타냄

따라서 -rwxr-xr-x의 경우:

  • 소유자 (labex) 는 rwx 권한을 갖습니다: 읽기, 쓰기 및 실행.
  • 그룹 (labex) 은 r-x 권한을 갖습니다: 읽기 및 실행, 쓰기는 없음.
  • 기타 사용자는 r-x 권한을 갖습니다: 읽기 및 실행, 쓰기는 없음.

이 출력은 이전 단계에서 chmod +x를 사용한 후 소유자 (labex) 가 이제 my_script.sh에 대한 실행 권한 (x) 을 갖는다는 것을 확인합니다.

ls -l을 사용하여 디렉토리의 권한을 확인할 수도 있습니다. 예를 들어, ~/project 디렉토리 자체의 권한을 살펴보겠습니다.

ls -ld ~/project

-d 옵션은 ls에게 내용이 아닌 디렉토리 자체를 나열하도록 지시합니다. 출력은 다음과 같을 수 있습니다.

drwxr-xr-x 2 labex labex 4096 <date> <time> /home/labex/project

여기서 첫 번째 문자 d는 디렉토리임을 나타냅니다. 권한 rwxr-xr-x는 다음을 의미합니다.

  • 소유자 (labex) 는 디렉토리에 대한 읽기, 쓰기 및 실행 권한을 갖습니다. 디렉토리의 경우 '실행' 권한을 사용하면 디렉토리에 들어가 내용을 액세스할 수 있습니다.
  • 그룹 (labex) 및 기타 사용자는 디렉토리에 대한 읽기 및 실행 권한을 갖지만 쓰기 권한은 없습니다.

ls -l 출력을 이해하는 것은 Linux 에서 파일 및 권한으로 작업하는 데 필수적입니다.

stat 명령어로 파일 접근 정보 확인

이 단계에서는 stat 명령을 사용하여 파일에 대한 자세한 정보를 얻습니다. 여기에는 접근, 수정 및 변경 시간뿐만 아니라 ls -l보다 더 구조화된 형식의 권한도 포함됩니다.

stat 명령은 파일 상태를 표시합니다. 스크립팅 (scripting) 하거나 정확한 타임스탬프 (timestamp) 가 필요한 경우 특히 유용합니다.

이전 단계에서 생성한 my_script.sh 파일에 대해 stat을 사용해 보겠습니다. ~/project 디렉토리에 있는지 확인하거나 파일의 전체 경로를 제공하십시오.

stat ~/project/my_script.sh

다음과 유사한 출력을 볼 수 있습니다.

  File: /home/labex/project/my_script.sh
  Size: 30              Blocks: 8          IO Block: 4096   regular file
Device: <device_id>     Inode: <inode_number>  Links: 1
Access: (<permissions>/-rwxr-xr-x)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: <date> <time>.<nanoseconds> +<timezone_offset>
Modify: <date> <time>.<nanoseconds> +<timezone_offset>
Change: <date> <time>.<nanoseconds> +<timezone_offset>
 Birth: -

출력의 몇 가지 주요 줄을 살펴보겠습니다.

  • File: 파일의 이름과 경로.
  • Size: 바이트 단위의 파일 크기.
  • Access: (<permissions>/-rwxr-xr-x): 이 줄은 8 진수 형식 (예: rwxr-xr-x에 해당하는 0755) 과 ls -l에서 본 기호 형식으로 파일 권한을 모두 보여줍니다. 또한 파일 소유자 및 그룹의 사용자 ID (Uid) 및 그룹 ID (Gid) 를 보여줍니다.
  • Access: 파일에 마지막으로 접근 (읽기) 한 시간.
  • Modify: 파일 내용이 마지막으로 수정된 시간.
  • Change: 파일의 메타데이터 (예: 권한, 소유권 등) 가 마지막으로 변경된 시간.
  • Birth: 파일 생성 시간 (모든 파일 시스템에서 사용 가능하지 않을 수 있음).

stat 명령은 ls -l에 비해 파일 정보를 더 자세히 보여줍니다. 타임스탬프 또는 권한의 숫자 표현을 검사해야 할 때 특히 유용합니다.

디렉토리에서도 stat을 사용할 수 있습니다.

stat ~/project

출력은 유사하지만 File 유형은 디렉토리임을 나타냅니다.

출력의 변화를 확인하기 위해 ~/project 디렉토리의 다른 파일 및 디렉토리에서 stat을 사용해 보십시오.

요약

이 랩에서는 test -x 명령을 사용하여 Linux 에서 파일이 실행 가능한지 확인하는 방법을 배웠습니다. 간단한 스크립트 파일을 만들고, test -x를 사용하고, 종료 상태 (echo $?) 를 확인하여 초기 실행 불가능 상태 (종료 상태 1) 를 확인했습니다. 그런 다음 chmod +x를 사용하여 실행 권한을 추가하고 test -xecho $?로 변경 사항을 확인하여 종료 상태 0 을 관찰했습니다.

또한 파일 권한을 확인하는 대체 방법을 탐색했습니다. ls -l을 사용하여 권한 문자열, 특히 실행 파일을 식별하기 위한 'x' 문자를 해석하는 방법을 배웠습니다. 마지막으로 stat 명령을 사용하여 접근 권한을 포함한 자세한 파일 정보를 확인하여 실행 가능성을 확인하는 또 다른 방법을 제공했습니다.