소개
이 실습에서는 Red Hat Enterprise Linux(RHEL) 시스템에서 Linux 파일 시스템을 관리하는 실무 경험을 쌓습니다. lsblk를 통해 파일 시스템과 블록 장치를 식별하고, df 및 du를 사용하여 디스크 사용량을 확인하며, 파일 시스템을 수동으로 마운트 및 언마운트하는 방법을 연습합니다.
또한, 이 실습에서는 locate 및 find와 같은 명령어를 사용하여 파일을 효율적으로 찾는 방법을 안내합니다. 이를 통해 이름, 소유자, 권한, 크기, 시간, 파일 유형 등 다양한 기준에 따라 파일을 검색할 수 있게 됩니다.
파일 시스템 및 블록 장치 식별
이 단계에서는 Red Hat Enterprise Linux 시스템에서 파일 시스템과 블록 장치를 식별하는 방법을 배웁니다. 스토리지 구성 방식을 이해하는 것은 시스템 관리의 기본입니다. 블록 장치와 관련 파일 시스템을 나열하고 검사하는 다양한 명령어를 살펴봅니다.
먼저, 몇 가지 핵심 개념을 이해해 봅시다:
- 블록 장치(Block Device): 블록 장치는 스토리지 장치에 대한 저수준 액세스를 제공하는 파일입니다. 하드 드라이브, SSD, USB 드라이브 등이 이에 해당합니다. Linux에서는 일반적으로
/dev디렉토리에 위치합니다. - 파티션(Partition): 파티션은 물리적 스토리지 장치를 논리적으로 나눈 것입니다. 하나의 하드 드라이브는 여러 파티션을 가질 수 있으며, 각 파티션은 서로 다른 파일 시스템으로 포맷되거나 다른 용도로 사용될 수 있습니다.
- 파일 시스템(File System): 파일 시스템은 운영 체제가 데이터를 저장하고 검색하는 방식을 제어하기 위해 사용하는 방법 및 데이터 구조입니다. 데이터를 파일과 디렉토리로 구성합니다. 일반적인 Linux 파일 시스템으로는 XFS와 ext4가 있습니다.
- 마운트 지점(Mount Point): 마운트 지점은 파일 시스템 계층 구조 내의 빈 디렉토리로, 파일 시스템이 연결되어 그 내용을 액세스할 수 있게 되는 지점입니다.
먼저 lsblk 명령어를 사용하여 시스템에서 사용 가능한 블록 장치를 나열해 봅니다. 이 명령어는 모든 블록 장치와 해당 파티션의 트리 형태 개요를 제공합니다.
lsblk
다음과 유사한 출력이 표시될 것입니다. VM에 따라 vda 및 vdb와 같은 이름이 사용될 수도 있고, nvme0n1 및 nvme1n1과 같은 NVMe 이름이 사용될 수도 있습니다:
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS
vda 253:0 0 40G 0 disk
├─vda1 253:1 0 1M 0 part
├─vda2 253:2 0 100M 0 part /boot/efi
└─vda3 253:3 0 39.9G 0 part /
vdb 253:16 0 40G 0 disk
출력 항목 설명:
NAME: 블록 장치(예:vda,vdb,nvme0n1,nvme1n1) 또는 파티션(예:vda1,vda2,nvme0n1p2)의 이름입니다.MAJ:MIN: 주(Major) 및 부(Minor) 장치 번호입니다.RM: 이동식 장치 여부(이동식인 경우 1, 아니면 0).SIZE: 장치 또는 파티션의 크기입니다.RO: 읽기 전용 여부(읽기 전용인 경우 1, 아니면 0).TYPE: 장치 유형(예:disk, 파티션의 경우part).MOUNTPOINTS: 장치나 파티션이 현재 마운트된 위치입니다.
다음으로, df 명령어를 사용하여 파일 시스템과 그 사용량을 확인합니다. df 명령어는 파일 시스템의 디스크 공간 사용량을 보고합니다.
df
출력에는 다양한 파일 시스템, 전체 크기, 사용된 공간, 사용 가능한 공간 및 마운트 지점이 표시됩니다:
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 4096 0 4096 0% /dev
tmpfs 1822216 0 1822216 0% /dev/shm
tmpfs 728888 616 728272 1% /run
efivarfs 256 9 243 4% /sys/firmware/efi/efivars
/dev/vda3 41773036 3628732 38144304 9% /
/dev/vda2 102156 7198 94958 8% /boot/efi
tmpfs 364440 0 364440 0% /run/user/1000
크기를 더 읽기 쉽게 하려면 -h 옵션을 사용하여 사람이 읽기 쉬운 형식(예: MiB는 M, GiB는 G)으로 출력할 수 있습니다.
df -h
더 이해하기 쉬운 형식으로 크기가 표시됩니다:
Filesystem Size Used Avail Use% Mounted on
devtmpfs 4.0M 0 4.0M 0% /dev
tmpfs 1.8G 0 1.8G 0% /dev/shm
tmpfs 712M 616K 712M 1% /run
efivarfs 256K 8.5K 243K 4% /sys/firmware/efi/efivars
/dev/vda3 40G 3.5G 37G 9% /
/dev/vda2 100M 7.1M 93M 8% /boot/efi
tmpfs 356M 0 356M 0% /run/user/1000
마지막으로, lsblk -fp 명령어를 사용하여 장치의 전체 경로, UUID(범용 고유 식별자) 및 파일 시스템 유형을 나열합니다. UUID는 장치 이름이 변경되어도 동일하게 유지되는 안정적인 식별자이므로 일관된 마운트에 유용합니다.
lsblk -fp
출력에는 UUID와 파일 시스템 유형이 포함됩니다:
NAME FSTYPE FSVER LABEL UUID FSAVAIL FSUSE% MOUNTPOINTS
/dev/vda
├─/dev/vda1
├─/dev/vda2 vfat FAT16 E52E-0564 92.7M 7% /boot/efi
└─/dev/vda3 xfs root 4c234c8b-4f67-4d65-abb5-06753b1ec236 36.4G 9% /
/dev/vdb
UUID 열에 주목하십시오. 이는 각 파일 시스템에 대한 고유 식별자를 제공합니다. 이는 /etc/fstab과 같은 구성 파일에서 파일 시스템을 안정적으로 마운트하는 데 매우 중요합니다.
다음 단계로 넘어가기 전에, 나중에 블록 장치 및 파일 시스템 정보를 다시 검토할 수 있도록 프로젝트 디렉토리에 간단한 보고서를 저장해 둡니다.
{
lsblk
echo
df -h
echo
lsblk -fp
} > ~/project/filesystem_overview.txt
보고서가 생성되었는지 확인하려면 다음을 실행합니다:
cat ~/project/filesystem_overview.txt
df 및 du를 이용한 파일 시스템 사용량 검사
이 단계에서는 df 및 du 명령어를 사용하여 파일 시스템 사용량을 더 자세히 살펴봅니다. df는 마운트된 파일 시스템의 디스크 공간 사용량에 대한 개요를 제공하는 반면, du(disk usage)는 특정 파일이나 디렉토리의 파일 공간 사용량을 추정하는 데 사용됩니다. 효과적인 디스크 공간 관리를 위해서는 두 명령어의 차이점과 사용 시기를 이해하는 것이 중요합니다.
먼저 df 명령어를 사람이 읽기 쉬운 옵션과 함께 다시 살펴봅니다. 이 명령어는 모든 마운트된 파일 시스템에서 얼마나 많은 공간이 사용되고 사용 가능한지 빠르게 요약하는 데 매우 좋습니다.
df -h
출력은 읽기 쉬운 형식(예: 기가바이트는 G, 메가바이트는 M)으로 디스크 사용량을 보여줍니다:
Filesystem Size Used Avail Use% Mounted on
devtmpfs 892M 0 892M 0% /dev
tmpfs 915M 0 915M 0% /dev/shm
tmpfs 915M 17M 899M 2% /run
tmpfs 915M 0 915M 0% /sys/fs/cgroup
/dev/vda4 8.0G 1.4G 6.7G 17% /
/dev/vda3 1014M 166M 849M 17% /boot
tmpfs 183M 0 183M 0% /run/user/1000
이제 du 명령어를 살펴봅니다. df와 달리 du는 지정된 경로 내의 파일과 디렉토리가 사용하는 디스크 공간을 계산합니다. 이는 어떤 디렉토리나 파일이 가장 많은 공간을 차지하는지 확인하고 싶을 때 특히 유용합니다.
현재 디렉토리(~/project)의 디스크 사용량을 확인하려면 인수 없이 du를 사용합니다. 이렇게 하면 ~/project 내의 모든 파일과 하위 디렉토리의 크기가 나열됩니다.
du
출력은 방대할 수 있으며, 기본적으로 킬로바이트 단위로 크기가 표시됩니다:
4 ./.config/xfce4/xfconf/xfce-perchannel-xml
8 ./.config/xfce4/xfconf
12 ./.config/xfce4
16 ./.config
4 ./.local/share/nano
8 ./.local/share
12 ./.local
28 .
df -h와 유사하게 출력을 더 읽기 쉽게 만들려면 du에 -h 옵션을 사용할 수 있습니다.
du -h
이렇게 하면 사람이 읽기 쉬운 단위로 크기가 표시됩니다:
4.0K ./.config/xfce4/xfconf/xfce-perchannel-xml
8.0K ./.config/xfce4/xfconf
12K ./.config/xfce4
16K ./.config
4.0K ./.local/share/nano
8.0K ./.local/share
12K ./.local
28K .
종종 개별 파일이나 하위 디렉토리의 크기보다는 디렉토리의 총 크기에 관심이 있을 때가 많습니다. 이 경우 -h와 함께 -s(summary) 옵션을 사용할 수 있습니다. 홈 디렉토리(~)의 총 크기를 확인해 봅시다.
du -sh ~
이 명령어는 홈 디렉토리의 총 크기를 출력합니다:
48K /home/labex
du가 크기를 어떻게 보고하는지 확인하기 위해 몇 개의 파일을 생성해 봅시다. test_data라는 디렉토리를 만들고 그 안에 몇 개의 파일을 생성하겠습니다.
먼저 디렉토리를 생성합니다:
mkdir ~/project/test_data
이제 test_data 디렉토리로 이동합니다:
cd ~/project/test_data
다음으로, 몇 개의 파일을 생성합니다. head 명령어를 사용하여 특정 크기의 파일을 생성하겠습니다.
head -c 1K < /dev/urandom > file1.txt
head -c 5K < /dev/urandom > file2.txt
head -c 10K < /dev/urandom > file3.txt
이제 du -h를 사용하여 이 새로운 파일들과 test_data 디렉토리의 크기를 확인합니다.
du -h
다음과 유사한 출력이 표시될 것입니다:
1.0K ./file1.txt
5.0K ./file2.txt
10K ./file3.txt
24K .
마지막 줄(24K .)은 현재 디렉토리(., 즉 ~/project/test_data)의 총 크기를 보여줍니다.
마지막으로, ~/project 디렉토리로 돌아가서 du -sh를 사용하여 test_data의 총 크기를 확인합니다.
cd ~/project
du -sh test_data
이렇게 하면 test_data 디렉토리의 요약된 크기가 표시됩니다:
24K test_data
이는 du를 사용하여 특정 디렉토리 내의 디스크 공간 소비를 정확히 파악하고 스토리지를 효과적으로 관리하는 방법을 보여줍니다.
파일 시스템 수동 마운트 및 언마운트
이 단계에서는 파일 시스템을 수동으로 마운트하고 언마운트하는 방법을 배웁니다. 파일 시스템을 마운트하면 파일 시스템 계층 구조의 특정 디렉토리(마운트 지점)를 통해 해당 내용을 액세스할 수 있습니다. 언마운트하면 파일 시스템이 마운트 지점에서 분리되어 다시 마운트될 때까지 내용을 액세스할 수 없게 됩니다. 이는 이동식 미디어, 임시 스토리지 또는 새로운 디스크 파티션을 관리하는 데 필수적인 기술입니다.
이 연습에서는 LabEx VM 환경에서 사용할 수 있는 추가적인 마운트되지 않은 디스크를 사용합니다. VM에 따라 해당 디스크의 이름은 /dev/vdb, /dev/nvme1n1 등이 될 수 있으므로, 장치 이름을 하드코딩하는 대신 감지하여 사용하겠습니다.
먼저 루트 디스크와 포맷 및 마운트할 추가 디스크를 식별합니다.
ROOT_PARTITION=$(findmnt -n -o SOURCE /)
ROOT_DISK="/dev/$(lsblk -no PKNAME \"$ROOT_PARTITION\")"
DATA_DISK=$(lsblk -dnpo NAME,TYPE | awk '$2 == "disk" {print $1}' | grep -vx "$ROOT_DISK" | head -n 1)
echo "$DATA_DISK"
이 명령어는 /dev/vdb 또는 /dev/nvme1n1과 같이 추가 디스크의 경로를 출력해야 합니다.
/dev/nvme1n1
파일 시스템을 마운트하려면 빈 디렉토리인 마운트 지점이 필요합니다. 임시 마운트에는 /mnt를 사용하거나 그 안에 하위 디렉토리를 만드는 것이 일반적입니다. 마운트 지점으로 사용할 ~/project 디렉토리 안에 mydata라는 새 디렉토리를 만듭니다.
mkdir ~/project/mydata
이제 $DATA_DISK에 저장된 추가 디스크를 파일 시스템으로 포맷해야 합니다. Red Hat Enterprise Linux의 기본값인 XFS 파일 시스템을 사용하겠습니다. 이 명령어는 지정된 장치의 모든 데이터를 삭제하므로 주의하십시오.
sudo mkfs.xfs "$DATA_DISK"
XFS 파일 시스템 생성을 나타내는 출력이 표시됩니다. 출력의 장치 이름은 사용자의 VM과 일치할 것입니다:
meta-data=/dev/nvme1n1 isize=512 agcount=4, agsize=2621440 blks
= sectsz=512 attr=2, projid32bit=1
= crc=1 finobt=1, sparse=1, rmapbt=0
= reflink=1 bigtime=1 inobtcount=1 nrext64=0
data = bsize=4096 blocks=10485760, imaxpct=25
= sunit=0 swidth=0 blks
naming =version 2 bsize=4096 ascii-ci=0, ftype=1
log =internal log bsize=4096 blocks=16384, version=2
= sectsz=512 sunit=0 blks, lazy-count=1
realtime =none extsz=4096 blocks=0, rtextents=0
이제 $DATA_DISK에 XFS 파일 시스템이 생성되었으므로, 이를 ~/project/mydata 마운트 지점에 마운트할 수 있습니다. mount 명령어는 sudo 권한이 필요합니다.
sudo mount "$DATA_DISK" ~/project/mydata
파일 시스템이 성공적으로 마운트되었는지 확인하려면 df -h 명령어를 다시 사용합니다. 감지된 디스크가 /home/labex/project/mydata를 마운트 지점으로 하여 나열되어야 합니다.
df -h
출력에서 감지된 디스크를 찾으십시오:
Filesystem Size Used Avail Use% Mounted on
...
/dev/nvme1n1 40G 318M 40G 1% /home/labex/project/mydata
이제 ~/project/mydata 안에 파일과 디렉토리를 만들 수 있으며, 이들은 $DATA_DISK 디스크에 저장됩니다. 테스트 파일을 만들어 봅시다:
sudo touch ~/project/mydata/testfile.txt
ls -l ~/project/mydata를 실행하여 파일 생성을 확인합니다:
ls -l ~/project/mydata
testfile.txt가 나열되어야 합니다:
total 0
-rw-r--r--. 1 root root 0 Jun 16 11:09 testfile.txt
마운트된 파일 시스템 사용을 마쳤을 때는 데이터 손상을 방지하기 위해, 특히 물리적 장치를 제거하기 전에 언마운트하는 것이 중요합니다. umount 명령어를 사용하여 파일 시스템을 언마운트합니다.
sudo umount ~/project/mydata
언마운트 명령어가 "target is busy" 오류와 함께 실패한다면, 어떤 프로세스가 여전히 마운트 지점에 액세스하고 있다는 의미입니다. 이는 현재 작업 디렉토리가 마운트된 파일 시스템 내부에 있을 때 자주 발생합니다. 이 문제를 해결하려면 현재 디렉토리를 마운트 지점 외부(예: 홈 디렉토리 ~)로 변경하십시오.
cd ~
그런 다음 다시 언마운트를 시도합니다:
sudo umount ~/project/mydata
언마운트 후 df -h를 다시 확인하여 감지된 디스크가 더 이상 마운트되어 있지 않은지 확인합니다.
df -h
/home/labex/project/mydata에 감지된 디스크가 더 이상 마운트되어 있지 않아야 합니다.
Filesystem Size Used Avail Use% Mounted on
...
## 추가 디스크가 여기에 더 이상 나열되지 않아야 합니다.
이것으로 파일 시스템을 수동으로 마운트하고 언마운트하는 과정이 완료되었습니다.
locate 및 find를 사용하여 이름으로 파일 찾기
이 단계에서는 locate와 find라는 두 가지 강력한 명령어를 사용하여 시스템에서 파일을 찾는 방법을 배웁니다. 두 명령어 모두 파일 검색을 도와주지만, 작동 방식이 다르며 서로 다른 상황에 적합합니다.
locate 명령어 사용
locate 명령어는 미리 구축된 파일 이름 및 경로 데이터베이스를 검색하기 때문에 매우 빠릅니다. 하지만 이는 마지막 데이터베이스 업데이트 이후 생성되거나 삭제된 파일을 찾지 못할 수도 있음을 의미합니다. 데이터베이스는 일반적으로 cron 작업에 의해 매일 업데이트되지만, 수동으로 업데이트를 강제할 수도 있습니다.
이 이미지에서는 locate 명령어를 이미 사용할 수 있습니다. 데이터베이스를 업데이트하기 전에 명령어가 존재하는지 확인하십시오.
command -v locate
다음과 유사한 출력이 표시되어야 합니다:
/usr/bin/locate
설치 후 locate 데이터베이스를 업데이트해야 합니다. 이 명령어는 sudo 권한이 필요합니다.
sudo updatedb
이 명령어는 조용히 실행되며 파일 시스템 크기에 따라 시간이 조금 걸릴 수 있습니다.
이제 passwd와 같은 일반적인 시스템 파일을 검색해 봅시다.
locate passwd
"passwd"가 포함된 경로 목록이 표시됩니다:
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/usr/share/man/man1/passwd.1.gz
/usr/share/man/man5/passwd.5.gz
...output omitted...
대소문자를 구분하지 않고 검색하려면 -i 옵션을 사용합니다. 대문자 여부에 상관없이 "messages"가 포함된 파일을 검색해 봅시다.
locate -i messages
다음과 같은 결과가 표시됩니다:
/usr/share/locale/zza/LC_MESSAGES
/usr/share/makedumpfile/eppic_scripts/ap_messages_3_10_to_4_8.c
/usr/share/vim/vim82/ftplugin/msmessages.vim
...output omitted...
-n 옵션을 사용하여 결과 수를 제한할 수도 있습니다. "passwd"의 첫 5개 항목을 찾아봅시다.
locate -n 5 passwd
첫 5개의 일치 항목만 표시됩니다:
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/usr/share/man/man1/passwd.1.gz
/usr/share/man/man5/passwd.5.gz
find 명령어 사용
find 명령어는 실시간으로 파일 시스템을 검색하므로 locate보다 느리지만, 아주 최근에 생성된 파일을 포함하여 기준에 맞는 모든 파일을 찾을 수 있습니다. 또한 훨씬 더 강력한 검색 옵션을 제공합니다.
find의 기본 구문은 find [경로] [표현식]입니다. 경로가 지정되지 않으면 현재 디렉토리를 검색합니다.
루트 디렉토리(/)에서 시작하여 sshd_config 파일을 검색해 봅시다.
find / -name sshd_config
구성 파일의 경로가 표시됩니다:
/etc/ssh/sshd_config
부분 이름을 검색하거나 와일드카드를 사용할 때는 셸이 미리 확장하지 못하도록 파일 이름 패턴을 따옴표로 묶는 것이 중요합니다. ~/project 디렉토리에서 .txt로 끝나는 모든 파일을 찾아봅시다.
find ~/project -name '*.txt'
이전 단계에서 file1.txt, file2.txt, file3.txt를 생성했다면, 해당 파일들이 나열될 것입니다:
/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt
find로 대소문자를 구분하지 않고 검색하려면 -iname 옵션을 사용합니다. /usr/share/doc 디렉토리에서 "README"가 포함된 파일(대소문자 구분 안 함)을 검색해 봅시다.
find /usr/share/doc -iname '*readme*'
많은 결과가 표시됩니다. 예:
/usr/share/doc/libselinux/README
/usr/share/doc/libsepol/README
/usr/share/doc/libsemanage/README
...output omitted...
find 명령어는 매우 다재다능하며 다음 단계에서 살펴볼 다른 기준들과 결합할 수 있습니다.
계속하기 전에, 나중에 비교할 수 있도록 주요 locate 및 find 결과를 저장해 둡니다.
{
locate -n 5 passwd
echo "---"
find ~/project -name '*.txt'
} > ~/project/search-results.txt
저장된 결과는 다음으로 검토할 수 있습니다:
cat ~/project/search-results.txt
소유자, 권한, 크기 및 시간별 파일 찾기
이 단계에서는 이름뿐만 아니라 다양한 기준에 따라 파일을 찾기 위해 강력한 find 명령어를 사용하는 방법을 배웁니다. 여기에는 소유자, 권한, 크기 및 수정 시간별 검색이 포함됩니다. 이러한 고급 검색 기능은 감사, 정리 및 문제 해결과 같은 시스템 관리 작업에 필수적입니다.
소유자별 파일 찾기
-user 및 -group 옵션을 사용하여 특정 사용자나 그룹이 소유한 파일을 검색할 수 있습니다. 사용자/그룹 이름이나 숫자 ID를 지정할 수 있습니다.
홈 디렉토리(~)에서 labex 사용자가 소유한 모든 파일을 찾아봅시다.
find ~ -user labex
구성 파일을 포함하여 많은 파일이 나열됩니다:
/home/labex
/home/labex/.bash_logout
/home/labex/.bash_profile
/home/labex/.bashrc
/home/labex/.config
/home/labex/.config/xfce4
/home/labex/.config/xfce4/xfconf
/home/labex/.config/xfce4/xfconf/xfce-perchannel-xml
/home/labex/.local
/home/labex/.local/share
/home/labex/.local/share/nano
/home/labex/project
/home/labex/project/test_data
/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt
...output omitted...
마찬가지로 labex 그룹이 소유한 파일을 찾으려면:
find ~ -group labex
labex는 일반적으로 labex 사용자의 기본 그룹이므로 출력은 비슷할 것입니다.
사용자 ID(UID) 또는 그룹 ID(GID)로도 검색할 수 있습니다. labex 사용자는 일반적으로 UID와 GID가 1000입니다.
find ~ -uid 1000
find ~ -gid 1000
권한별 파일 찾기
find 명령어의 -perm 옵션을 사용하면 특정 권한을 가진 파일을 검색할 수 있습니다. 권한은 8진수(예: 755) 또는 기호(예: u=rwx,g=rx,o=rx) 모드로 지정할 수 있습니다.
~/project 디렉토리에 특정 권한을 가진 테스트 파일을 만들어 봅시다.
touch ~/project/permission_test.txt
chmod 644 ~/project/permission_test.txt
이제 ~/project에서 정확히 644 권한을 가진 파일을 찾아봅시다.
find ~/project -perm 644
permission_test.txt가 나열되어야 합니다:
/home/labex/project/permission_test.txt
8진수 권한 앞에 / 또는 -를 사용할 수도 있습니다:
/: 지정된 권한 비트 중 하나라도 설정되어 있으면 일치합니다.-: 지정된 권한 비트가 모두 설정되어 있으면 일치합니다.
~/project에서 다른 사용자가 최소한 읽기 권한(o=r 또는 004)을 가진 파일을 찾아봅시다.
find ~/project -perm -004
이 명령어는 permission_test.txt와 다른 사용자에게 읽기 권한을 부여하는 파일들을 나열합니다.
/home/labex/project/permission_test.txt
...output omitted...
크기별 파일 찾기
-size 옵션을 사용하면 파일 크기를 기준으로 파일을 검색할 수 있습니다. 단위와 함께 크기를 지정할 수 있습니다(예: k는 킬로바이트, M은 메가바이트, G는 기가바이트). 또한 "보다 큼"을 의미하는 +와 "보다 작음"을 의미하는 -를 사용할 수 있습니다.
~/project/test_data 디렉토리에서 크기가 정확히 1킬로바이트인 파일을 찾아봅시다.
find ~/project/test_data -size 1k
file1.txt가 표시되어야 합니다:
/home/labex/project/test_data/file1.txt
이제 5킬로바이트보다 큰 파일을 찾아봅시다.
find ~/project/test_data -size +5k
file3.txt가 나열되어야 합니다:
/home/labex/project/test_data/file3.txt
그리고 10킬로바이트보다 작은 파일들입니다.
find ~/project/test_data -size -10k
file1.txt와 file2.txt가 나열되어야 합니다:
/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
수정 시간별 파일 찾기
-mmin(분 단위 수정 시간) 또는 -mtime(일 단위 수정 시간)과 같은 옵션을 사용하여 수정 시간을 기준으로 파일을 검색할 수 있습니다.
~/project 디렉토리에서 지난 60분 이내에 수정된 파일을 찾아봅시다.
find ~/project -mmin -60
최근에 생성했다면 permission_test.txt와 test_data 내의 파일들이 포함될 것입니다:
/home/labex/project
/home/labex/project/permission_test.txt
/home/labex/project/test_data
/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt
1일(24시간)보다 오래 전에 수정된 파일을 찾으려면 -mtime과 함께 +1을 사용할 수 있습니다.
find ~/project -mtime +1
~/project의 모든 파일이 최근에 생성되거나 수정되었다면 이 명령어는 아무것도 반환하지 않을 수 있습니다.
이러한 옵션들을 결합하여 매우 구체적인 검색 쿼리를 만들 수 있으며, 이를 통해 시스템의 파일을 효율적으로 관리할 수 있습니다.
다음 확인 단계에서 올바른 파일이 발견되었는지 확인할 수 있도록 검색 결과 중 두 가지를 저장해 둡니다.
find ~/project -perm 644 > ~/project/find-perm-results.txt
find ~/project/test_data -size +5k > ~/project/find-size-results.txt
파일 유형별 파일 검색
마지막 단계에서는 find 명령어를 사용하여 파일 유형을 기준으로 파일을 검색하는 방법을 배웁니다. 이는 특정 경로 내의 모든 디렉토리, 일반 파일, 심볼릭 링크 또는 장치 파일을 찾아야 할 때 특히 유용합니다.
find 명령어는 -type 옵션 뒤에 한 글자를 사용하여 파일 유형을 지정합니다. 검색할 수 있는 일반적인 파일 유형은 다음과 같습니다:
f: 일반 파일d: 디렉토리l: 심볼릭 링크(symlink)b: 블록 장치c: 문자 장치p: 명명된 파이프(FIFO)s: 소켓
먼저 ~/project 디렉토리 내의 모든 디렉토리를 검색해 봅시다.
find ~/project -type d
모든 디렉토리와 하위 디렉토리가 나열되는 다음과 유사한 출력이 표시되어야 합니다:
/home/labex/project
/home/labex/project/test_data
다음으로 ~/project 디렉토리 내의 모든 일반 파일을 검색해 봅시다.
find ~/project -type f
이전에 생성한 file1.txt, file2.txt, file3.txt와 같은 파일들이 나열됩니다:
/home/labex/project/test_data/file1.txt
/home/labex/project/test_data/file2.txt
/home/labex/project/test_data/file3.txt
이제 심볼릭 링크 검색을 시연하기 위해 심볼릭 링크를 만들어 봅시다. ~/project 디렉토리에 file1.txt에 대한 심볼릭 링크를 생성하겠습니다.
ln -s ~/project/test_data/file1.txt ~/project/link_to_file1.txt
ls -l을 사용하여 심볼릭 링크가 생성되었는지 확인합니다:
ls -l ~/project/link_to_file1.txt
심볼릭 링크임을 나타내는 출력이 표시되어야 합니다:
lrwxrwxrwx. 1 labex labex 32 May 15 08:00 /home/labex/project/link_to_file1.txt -> /home/labex/project/test_data/file1.txt
이제 ~/project 디렉토리 내의 모든 심볼릭 링크를 검색합니다.
find ~/project -type l
새로 생성한 심볼릭 링크가 표시되어야 합니다:
/home/labex/project/link_to_file1.txt
마지막으로 블록 장치를 검색해 봅시다. 블록 장치는 일반적으로 /dev 디렉토리에 있습니다.
find /dev -type b
vda, vda1, vda2 등과 같은 블록 장치가 나열됩니다:
/dev/nvme0n1
/dev/nvme0n1p1
/dev/nvme0n1p2
/dev/nvme0n1p3
/dev/nvme1n1
-type 옵션을 이전 단계에서 배운 다른 find 옵션과 결합할 수 있습니다. 예를 들어, /etc에서 root 사용자가 소유한 모든 디렉토리를 찾으려면:
find /etc -type d -user root
긴 디렉토리 목록이 생성됩니다:
/etc
/etc/selinux
/etc/selinux/targeted
/etc/selinux/targeted/active
/etc/selinux/targeted/active/modules
...output omitted...
실습을 마치기 전에 심볼릭 링크 검색 결과를 저장합니다.
find ~/project -type l > ~/project/find-type-results.txt
이것으로 Linux 파일 시스템 액세스 및 파일 찾기에 대한 실습을 마칩니다. 장치 식별, 디스크 사용량 확인, 파일 시스템 수동 마운트 및 언마운트, 그리고 다양한 기준을 사용하여 locate 및 find를 사용하는 방법을 배웠습니다.
요약
이 실습에서는 Red Hat Enterprise Linux 시스템에서 Linux 파일 시스템을 관리하는 실무 경험을 쌓았습니다. lsblk와 같은 명령어를 사용하여 파일 시스템과 블록 장치를 식별하는 방법을 배우고, 블록 장치, 파티션, 파일 시스템, 마운트 지점과 같은 핵심 개념을 이해하는 것으로 시작했습니다. 그 후, df와 du를 사용하여 파일 시스템 사용량을 확인하고 디스크 공간 보고를 위한 각 명령어의 기능적 차이를 구분하는 방법을 살펴보았습니다. 또한 파일 시스템 내용을 액세스하고 분리하는 방법을 보여주는 파일 시스템 수동 마운트 및 언마운트라는 필수 기술도 다루었습니다.
나아가 다양한 기준을 사용하여 파일을 효율적으로 찾는 방법을 깊이 있게 다루었습니다. locate와 find를 사용하여 이름으로 파일을 찾는 방법을 배우고, 각각의 차이점과 적절한 사용 사례를 이해했습니다. 실습을 확장하여 소유자, 권한, 크기 및 시간 속성을 기반으로 파일을 검색하는 방법을 배워 시스템 관리 및 문제 해결을 위한 강력한 도구를 익혔습니다. 마지막으로 특정 파일 유형을 기준으로 파일을 검색하는 연습을 함으로써 파일 시스템 관리 및 파일 위치 파악 기술에 대한 포괄적인 개요를 완성했습니다.



