소개
이 랩에서는 디렉토리의 존재 여부를 확인하고 속성을 검사하기 위한 기본적인 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 진수 및 기호 형식의 권한입니다.Uid및Gid: 소유자의 사용자 ID 및 그룹 ID 입니다.Access,Modify,Change: 마지막 액세스, 마지막 수정 및 마지막 상태 변경에 대한 타임스탬프입니다.
stat 명령어는 특히 스크립팅 또는 권한 및 타임스탬프 문제 해결을 위해 파일 시스템 객체에 대한 정확한 세부 정보가 필요한 경우에 유용합니다.
요약
이 랩에서는 test -d 명령어를 사용하여 Linux 에서 디렉토리가 존재하는지 확인하는 방법을 배웠습니다. 존재하거나 존재하지 않는 디렉토리를 모두 테스트하는 연습을 했으며, echo $?를 사용하여 명령의 종료 상태를 확인하여 테스트 결과를 파악하는 방법을 이해했습니다. 이 기본적인 기술은 디렉토리 존재 여부에 따라 스크립팅 및 작업을 자동화하는 데 필수적입니다.
또한 ls -ld 명령어를 사용하여 디렉토리 내용을 나열하고 디렉토리 자체에 대한 자세한 정보를 확인하는 방법을 배웠습니다.



