유저별 open된 fd(file descriptor)의 정확한 값은 lsof로 확인하기는 어렵다.
각 프로세스들이 공유라이브러리 등을 공유해서 사용하는 등의 이유로 lsof에 중복되서 표기되는 요소들이 많기 때문이다.
즉, 실제 fd 보다 높게 표기되는 경향이 있다.
따라서 /proc 파일시스템의 각각의 process number(특정 유저 소유의) 아래의 fd 디렉토리 내의 것들의 합해야 특정 유저의 정확한 fd 값을 산출할 수 있다.
예를 들어 testuser 유저의 프로세스 중 프로세스 넘버가 12354가 있다면 아래와 같이 값을 구해야 한다.
# ls /proc/12354/fd/ | wc -l
11
따라서 여러개의 프로세스를 실행하고 있는 유저의 모든 fd 값을 합산하기 위해서는 스크립트의 도움이 필요하다.
아래는 특정 유저의 fd (file discripter) 현황을 출력해주는 스크립트다.
스크립트 내용
# cat userfd.sh
#!/bin/bash
NUM=0
for pid in `ps -o pid -u $1 | sort -nr`
do
COUNT=$(ls /proc/$pid/fd/ 2>/dev/null | wc -l)
echo "$COUNT for PID: $pid"
NUM=`expr $NUM + $COUNT`
if [ "$pid" = "PID" ]; then
echo -e "$NUM \033[1;32mis total\e[21\033[0m"
fi
done | sort -n
if [ "$1" = "" ]; then
echo ""
echo -e "\033[1;31m>> USERNAME is required <<\e[21\033[0m"
echo "# $0 USERNAME"
fi
exit 0
– 스크립트 실행 인자로 받은 특정 유저의 pid를 모두 구해서 for loop 문에 값을 넣어 각각 출력 후 최종적으로 합한 값을 출력함.
사용 방법
– 스크립트 실행 시 인자값으로 username(testuser에서 원하는 명으로 변경)을 넣어주면 됨.
# ./userfd.sh testuser
0 for PID: PID
4 for PID: 12355
4 for PID: 6469
11 for PID: 12354
11 for PID: 6468
30 is total (testuser)
– total 값만 확인 시 사용법
# ./userfd.sh testuser | tail -1
30 is total (testuser)
'[개발관련] > 서버(리눅스 외)' 카테고리의 다른 글
tomcat log 파일 생성 경로 변경 (0) | 2020.05.19 |
---|---|
vi 명령어 모음 (0) | 2020.05.14 |
File Descriptor 확인 및 설정 (0) | 2020.05.08 |
디렉토리와 파일의 허가권 (0) | 2020.05.08 |
[LINUX] root/일반 계정 su 제한, 해제하는 방법 (0) | 2020.05.08 |