리눅스의 캐시를 해제하기 위해 사용하는 명령어.
# 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