Linux 에서 디렉토리 존재 여부 확인 방법

LinuxBeginner
지금 연습하기

소개

이 랩에서는 디렉토리의 존재 여부를 확인하고 속성을 검사하기 위한 기본적인 Linux 명령어를 배우게 됩니다. 먼저, test -d 명령어를 사용하여 프로그래밍 방식으로 디렉토리의 존재 여부를 확인하고, 스크립팅 목적으로 해당 명령어의 종료 상태를 해석하는 방법을 이해합니다.

그 다음, ls -ld 명령어를 사용하여 디렉토리 내용을 나열하고 디렉토리 자체에 대한 자세한 정보를 확인합니다. 마지막으로, stat 명령어를 사용하여 디렉토리와 관련된 포괄적인 메타데이터를 검사합니다. 이러한 기술은 Linux 에서 효과적인 파일 시스템 관리 및 스크립팅에 필수적입니다.

test -d 로 디렉토리 존재 여부 테스트

이 단계에서는 -d 옵션과 함께 test 명령어를 사용하여 디렉토리가 존재하는지 확인하는 방법을 배우게 됩니다. 이는 Linux 에서 스크립팅 및 작업 자동화를 위한 기본적인 기술입니다.

test 명령어는 파일 유형을 확인하고 값을 비교하는 데 사용됩니다. 쉘 스크립트의 조건문 (예: if 문) 에서 테스트 결과에 따라 결정을 내리기 위해 자주 사용됩니다.

test 명령어의 -d 옵션은 주어진 경로가 디렉토리를 참조하는지 특별히 확인합니다.

실험해 봅시다. 현재 디렉토리는 /home/labex/project입니다. 이 디렉토리는 존재합니다.

다음 명령어를 입력하고 Enter 키를 누르세요:

test -d /home/labex/project

이 명령어를 실행한 후, 디렉토리가 존재하면 아무런 출력이 나타나지 않습니다. 이는 test 명령어가 성공하면 종료 상태 0 (일반적으로 Linux 에서 "성공"을 의미함) 을 반환하고 표준 출력에 아무것도 출력하지 않기 때문입니다.

이제 존재하지 않는 디렉토리를 테스트해 보겠습니다. 다음 명령어를 입력하고 Enter 키를 누르세요:

test -d /home/labex/nonexistent_directory

다시, test 명령어에서 직접적인 출력은 나타나지 않습니다. 그러나 이 명령어는 0 이 아닌 종료 상태를 반환합니다 (디렉토리가 존재하지 않으므로 "실패"를 나타냄).

마지막 명령의 종료 상태를 확인하려면 특수 변수 $?를 사용할 수 있습니다. 다음 명령어를 입력하고 Enter 키를 누르세요:

echo $?

/home/labex/project를 테스트한 후, echo $?0을 출력해야 합니다.
/home/labex/nonexistent_directory를 테스트한 후, echo $?는 0 이 아닌 숫자 (일반적으로 1) 를 출력해야 합니다.

종료 상태를 이해하는 것은 명령의 성공 또는 실패에 반응할 수 있는 스크립트를 작성하는 데 매우 중요합니다.

ls -ld 를 사용하여 디렉토리 내용 나열

이 단계에서는 ls 명령어를 -l-d 옵션과 함께 사용하여 디렉토리의 내용을 나열하고 디렉토리 자체에 대한 자세한 정보를 확인하는 방법을 배우게 됩니다.

ls 명령어는 Linux 에서 가장 자주 사용되는 명령어 중 하나입니다. 기본적으로 현재 디렉토리의 파일과 디렉토리를 나열합니다.

-l 옵션은 "long listing" 형식으로 파일 권한, 소유권, 크기 및 수정 시간과 같은 세부 정보를 표시합니다.

-d 옵션은 디렉토리의 내용이 아닌 디렉토리 자체에 대한 정보를 확인하려는 경우에 중요합니다. -d 옵션이 없으면 ls -l은 디렉토리의 내용을 long format 으로 나열합니다. -d 옵션이 있으면 디렉토리 항목 자체를 나열합니다.

이러한 옵션을 결합하여 현재 디렉토리인 /home/labex/project의 세부 정보를 확인해 보겠습니다.

다음 명령어를 입력하고 Enter 키를 누르세요:

ls -ld /home/labex/project

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

drwxr-xr-x 2 labex labex 4096 <Date> <Time> /home/labex/project

이 출력을 분석해 보겠습니다:

  • d: 첫 번째 문자는 파일 유형을 나타냅니다. d는 디렉토리를 의미합니다.
  • rwxr-xr-x: 이 문자는 소유자, 그룹 및 기타 사용자에 대한 파일 권한을 나타냅니다.
  • 2: 이 디렉토리에 대한 하드 링크의 수입니다.
  • labex: 디렉토리의 소유자입니다.
  • labex: 디렉토리를 소유한 그룹입니다.
  • 4096: 바이트 단위의 디렉토리 크기입니다.
  • <Date> <Time>: 마지막 수정 날짜 및 시간입니다.
  • /home/labex/project: 디렉토리의 이름입니다.

이제 -d 옵션 없이 ls -l을 실행하여 차이점을 확인해 보세요. /home/labex/project 내부에 파일이나 디렉토리가 있는 경우 해당 파일이나 디렉토리가 나열됩니다.

ls -l /home/labex/project

/home/labex/project가 비어 있으면 ls -l에서 아무런 출력을 볼 수 없습니다. 항목이 포함되어 있으면 해당 항목의 long listing 을 볼 수 있습니다.

ls -ld를 사용하면 내부의 모든 내용을 나열하지 않고 특정 디렉토리의 권한, 소유권 및 수정 시간을 빠르게 확인할 수 있습니다.

stat 명령어로 디렉토리 메타데이터 검사

이 단계에서는 stat 명령어를 사용하여 ls -ld가 제공하는 것보다 훨씬 더 자세한 디렉토리 정보를 얻는 방법을 배우게 됩니다.

ls -ld는 좋은 요약을 제공하지만, stat는 액세스, 수정 및 변경 시간, 블록 크기 및 inode 정보를 포함하여 파일 및 디렉토리에 대한 풍부한 메타데이터를 제공합니다.

stat를 사용하여 현재 디렉토리인 /home/labex/project를 검사해 보겠습니다.

다음 명령어를 입력하고 Enter 키를 누르세요:

stat /home/labex/project

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

  File: /home/labex/project
  Size: 4096            Blocks: 8          IO Block: 4096   directory
Device: <device_id>     Inode: <inode_number>  Links: 2
Access: (0755/drwxr-xr-x)  Uid: ( 5000/   labex)   Gid: ( 5000/   labex)
Access: <Date> <Time>.<Nanoseconds> +<Offset>
Modify: <Date> <Time>.<Nanoseconds> +<Offset>
Change: <Date> <Time>.<Nanoseconds> +<Offset>
 Birth: -

몇 가지 주요 정보를 살펴보겠습니다:

  • File: 파일 또는 디렉토리의 이름입니다.
  • Size: 바이트 단위의 크기입니다.
  • Blocks: 할당된 512 바이트 블록의 수입니다.
  • IO Block: 최적의 I/O 블록 크기입니다.
  • directory: 파일 유형을 나타냅니다.
  • Device: 파일이 있는 장치 ID 입니다.
  • Inode: inode 번호 (파일 시스템 객체의 고유 식별자) 입니다.
  • Links: 하드 링크의 수입니다.
  • Access: (0755/drwxr-xr-x): 8 진수 및 기호 형식의 권한입니다.
  • UidGid: 소유자의 사용자 ID 및 그룹 ID 입니다.
  • Access, Modify, Change: 마지막 액세스, 마지막 수정 및 마지막 상태 변경에 대한 타임스탬프입니다.

stat 명령어는 특히 스크립팅 또는 권한 및 타임스탬프 문제 해결을 위해 파일 시스템 객체에 대한 정확한 세부 정보가 필요한 경우에 유용합니다.

요약

이 랩에서는 test -d 명령어를 사용하여 Linux 에서 디렉토리가 존재하는지 확인하는 방법을 배웠습니다. 존재하거나 존재하지 않는 디렉토리를 모두 테스트하는 연습을 했으며, echo $?를 사용하여 명령의 종료 상태를 확인하여 테스트 결과를 파악하는 방법을 이해했습니다. 이 기본적인 기술은 디렉토리 존재 여부에 따라 스크립팅 및 작업을 자동화하는 데 필수적입니다.

또한 ls -ld 명령어를 사용하여 디렉토리 내용을 나열하고 디렉토리 자체에 대한 자세한 정보를 확인하는 방법을 배웠습니다.