본문 바로가기

카테고리 없음

linux drop_caches permission denied

리눅스의 캐시를 해제하기 위해 사용하는 명령어.

# page cache
sync && echo 1 > /proc/sys/vm/drop_caches
# dentries and inodes cache
sync && echo 2 > /proc/sys/vm/drop_caches
# page cache, dentries and inodes cache
sync && echo 3 > /proc/sys/vm/drop_caches

 

루트 권한이 필요하니 sudo 사용.

 

그런데 permission denied 가 발생하면?

 

"sudo echo X"는 echo 명령을 루트로 실행하지만, "> /proc/sys/vm/drop_caches"는 일반 사용자 권한으로 셸에서 처리되며, "/proc/sys/vm/drop_caches"에 쓰기 권한이 없어 "Permission denied" 에러가 발생합니다.

 

이는 명령어 실행 방식과 쉘의 리디렉션(redirection, >) 처리 순서 때문에 발생하는 것이 원인입니다.

"sudo echo X > /proc/sys/vm/drop_caches" 명령을 실행하면 다음과 같은 순서로 처리됩니다.

현재 사용자의 쉘은 ">" 기호를 먼저 해석합니다.
쉘은 "/proc/sys/vm/drop_caches" 파일을 쓰기 모드로 열려고 시도합니다.
이 시점에서는 아직 sudo가 echo 명령어에 대한 권한을 상승시키기 전이므로, 일반 사용자 권한으로 파일을 열려고 합니다.
"/proc/sys/vm/drop_caches" 파일은 root 만 쓸 수 있으므로 권한 오류가 발생합니다.
"sudo echo X" 부분은 실행되지 않거나, 실행되더라도 이미 파일 열기에 실패했기 때문에 의미가 없어집니다.

즉, sudo는 echo 명령어에만 영향을 미치고, 파일에 쓰는 리디렉션(>) 작업은 현재 사용자 쉘의 권한으로 실행되어 문제가 발생하는 것입니다.

 

문제를 피하는 방법:

파이프 사용

sync && echo 1 | sudo tee /proc/sys/vm/drop_caches
sync && echo 2 | sudo tee /proc/sys/vm/drop_caches
sync && echo 3 | sudo tee /proc/sys/vm/drop_caches

 

서브쉘로 쉘의 권한 상승

sync && sudo sh -c 'echo 1 > /proc/sys/vm/drop_caches'
sync && sudo sh -c 'echo 2 > /proc/sys/vm/drop_caches'
sync && sudo sh -c 'echo 3 > /proc/sys/vm/drop_caches'

 

루트 쉘로 직접 처리

sudo -s # or sudo -i
sync
echo 1 > /proc/sys/vm/drop_caches
exit