Linux, Bash, 파일 시스템 관련: 공백이 포함된 마운트 포인트의 전체 경로를 Bash에서 가져오는 방법
Linux, Bash, 파일 시스템 관련 "How to get the mounted point full path while it has space in bash" 프로그래밍 해설 (한국어)
필수 조건:
- Linux 시스템
- Bash 쉘
단계:
findmnt
명령 사용:findmnt
명령은 현재 마운트된 모든 파일 시스템을 나열하는 데 사용됩니다. 공백이 포함된 마운트 포인트를 찾으려면 다음 명령을 사용할 수 있습니다.findmnt -t | grep "mountpoint" | awk '{ print $6 }'
이 명령은 각 마운트 포인트의 마지막 필드를 출력합니다. 공백이 포함된 마운트 포인트를 찾으려면 다음과 같이
grep
명령을 사용하여 필터링할 수 있습니다.findmnt -t | grep "mountpoint" | awk '{ print $6 }' | grep " "
이 명령은 공백이 포함된 마운트 포인트만 출력합니다.
예제:
다음은 공백이 포함된 마운트 포인트 "My Shared Folder"의 전체 경로를 가져오는 Bash 스크립트의 예입니다.
#!/bin/bash
# `findmnt` 명령 사용
MOUNT_POINT=$(findmnt -t | grep "mountpoint" | awk '{ print $6 }' | grep " ")
# 혹은 `/proc/mounts` 파일 시스템 사용
# MOUNT_POINT=$(cat /proc/mounts | grep "mountpoint" | awk '{ print $5 }' | grep " ")
if [ -z "$MOUNT_POINT" ]; then
echo "공백이 포함된 마운트 포인트를 찾을 수 없습니다."
else
echo "공백이 포함된 마운트 포인트의 전체 경로: $MOUNT_POINT"
fi
위 스크립트를 실행하면 다음과 같은 출력이 나타납니다.
공백이 포함된 마운트 포인트의 전체 경로: /mnt/My Shared Folder
참고:
- 이 스크립트는 예시일 뿐이며 사용자의 특정 요구 사항에 따라 수정될 수 있습니다.
- 공백이 포함된 마운트 포인트를 처리할 때 특수 문자를 이스케이프해야 할 수도 있습니다. 자세한 내용은 Bash 쉘 문서를 참조하십시오.
주의:
- 루트 권한으로 스크립트를 실행하지 않는 것이 좋습니다.
- 스크립트를 실행하기 전에 백업을 항상 수행하십시오.
#!/bin/bash
# `findmnt` 명령 사용
MOUNT_POINT=$(findmnt -t | grep "mountpoint" | awk '{ print $6 }' | grep " ")
# 혹은 `/proc/mounts` 파일 시스템 사용
# MOUNT_POINT=$(cat /proc/mounts | grep "mountpoint" | awk '{ print $5 }' | grep " ")
if [ -z "$MOUNT_POINT" ]; then
echo "공백이 포함된 마운트 포인트를 찾을 수 없습니다."
else
echo "공백이 포함된 마운트 포인트의 전체 경로: $MOUNT_POINT"
fi
위 코드는 findmnt
명령 또는 /proc/mounts
파일 시스템을 사용하여 공백이 포함된 마운트 포인트의 전체 경로를 찾는 Bash 스크립트입니다.
findmnt -t
명령은 현재 마운트된 모든 파일 시스템을 테이블 형식으로 나열합니다.grep "mountpoint"
명령은 출력 결과에서 "mountpoint" 열만 추출합니다.awk '{ print $6 }'
명령은 각 행의 여섯 번째 필드 (마운트 포인트)를 출력합니다.grep " "
명령은 공백이 포함된 마운트 포인트만 출력하도록 필터링합니다.
/proc/mounts 파일 시스템 사용:
/proc/mounts
파일은 현재 마운트된 모든 파일 시스템에 대한 정보를 포함합니다.cat /proc/mounts
명령은/proc/mounts
파일의 내용을 출력합니다.
마운트 포인트 확인:
if [ -z "$MOUNT_POINT" ]; then
조건문은 마운트 포인트가 비어 있는지 확인합니다.- 비어 있다면 "공백이 포함된 마운트 포인트를 찾을 수 없습니다." 메시지를 출력합니다.
else
블록은 마운트 포인트가 비어 있지 않은 경우 실행됩니다.- "공백이 포함된 마운트 포인트의 전체 경로: $MOUNT_POINT" 메시지를 출력하여 찾은 마운트 포인트의 전체 경로를 표시합니다.
공백이 포함된 마운트 포인트의 전체 경로를 가져오는 다른 방법
while 루프 사용:
#!/bin/bash
while IFS= read -r line; do
if [[ $line =~ "mountpoint" ]]; then
MOUNT_POINT="$line"
break
fi
done < /proc/mounts
if [ -z "$MOUNT_POINT" ]; then
echo "공백이 포함된 마운트 포인트를 찾을 수 없습니다."
else
echo "공백이 포함된 마운트 포인트의 전체 경로: $MOUNT_POINT"
fi
설명:
- 이 스크립트는
/proc/mounts
파일을 한 행씩 읽고 각 행을$line
변수에 저장합니다. [[ $line =~ "mountpoint" ]]
조건문은 해당 행에 "mountpoint" 문자열이 포함되어 있는지 확인합니다.- 포함되어 있으면
MOUNT_POINT
변수에 해당 행을 저장하고 루프를 벗어납니다. - 루프를 벗어난 후
if [ -z "$MOUNT_POINT" ]; then
조건문과else
블록은 위 예제와 동일하게 작동합니다.
sed 명령 사용:
#!/bin/bash
MOUNT_POINT=$(sed -n 's/^.*mountpoint \([^ ]*\).*/\1/p' /proc/mounts | grep " ")
if [ -z "$MOUNT_POINT" ]; then
echo "공백이 포함된 마운트 포인트를 찾을 수 없습니다."
else
echo "공백이 포함된 마운트 포인트의 전체 경로: $MOUNT_POINT"
fi
- 이 스크립트는
sed
명령을 사용하여/proc/mounts
파일의 각 행을 다음과 같이 처리합니다.^.*mountpoint \([^ ]*\).*$
정규 표현식은 "mountpoint" 뒤에 공백이 아닌 문자가 하나 이상 포함된 행을 선택합니다.\1
백레퍼런스는 선택된 행에서 일치하는 문자열 그룹을 추출합니다.
- 나머지 부분은 위 예제와 동일합니다.
awk 명령 사용:
#!/bin/bash
MOUNT_POINT=$(awk '/mountpoint/ { print $6 }' /proc/mounts | grep " ")
if [ -z "$MOUNT_POINT" ]; then
echo "공백이 포함된 마운트 포인트를 찾을 수 없습니다."
else
echo "공백이 포함된 마운트 포인트의 전체 경로: $MOUNT_POINT"
fi
- 이 스크립트는
awk
명령을 사용하여/proc/mounts
파일의 각 행을 다음과 같이 처리합니다./mountpoint/
정규 표현식은 "mountpoint" 문자열을 포함하는 행을 선택합니다.
- 위에 제시된 방법은 모두 동일한 결과를 제공하지만 작동 방식이 다릅니다.
- 사용자의 선호와 필요에 따라 적합한 방법을 선택할 수 있습니다.
linux bash filesystems