새소식

Linux

Linux, homebrew - 오늘 설치한 brew 패키지 삭제하기

  • -

맥북 사랑해

개요

파이썬 토이 프로젝트 진행 중 무지성 chatGPT 따라하기를 시전한 결과 내 소중한 맥북에 이상한 패키지가 잔뜩 설치되었다.
나는 2개 정도의 패키지만 설치하려 했는데 패키지가 패키지를 설치하고 그 패키지가 또 패키지를 설치하면서 약 20개 정도의 패키지가 추가되는 참사가 발생했다.
하지만 homebrew는 기본적으로 설치된 패키지 노출 시 패키지명 오름차순으로 출력하고 설치 시간과 관련한 리스팅을 지원하지 않기 때문에 일일이 brew info 패키지명 명령어를 사용해야 설치 시간을 알 수 있다.
내 맥북에 설치된 수많은 패키지의 정보를 일일이 조회할 순 없으니 약간의 꼼수를 부려보았고 이는 그 꼼수에 관한 포스팅이다.


주의사항

  1. 아래에서 설명할 방법은 패키지 설치 시간뿐만 아니라 수정 시간도 포함하여 삭제를 하기 때문에 오늘 업데이트한 패키지가 있을 경우 해당 패키지도 같이 삭제하게 된다.
  2. 아래 내용은 애플 실리콘 칩셋이 탑재된 맥북을 기준으로한 내용으로 intel 칩셋에서는 정상 작동하지 않을 수 있다.

오늘 설치한 brew 패키지 삭제 명령어

# 패키지 실제 파일 삭제
cd $(brew --cellar)
find . -maxdepth 1 -type d -newermt "$(date +%Y-%m-%d)" -exec rm -rf {} +

# 활성화 패키지 심볼릭 링크 삭제
cd /opt/homebrew/var/homebrew/linked
find . -maxdepth 1 -newermt "$(date +%Y-%m-%d)" -exec rm -rf {} +

# 패키지 실행 파일 심볼릭 링크 삭제
cd /opt/homebrew/bin
find . -maxdepth 1 -newermt "$(date +%Y-%m-%d)" -exec rm -rf {} +

# 정상 삭제 확인
brew doctor

오늘 설치한 brew 패키지 조회

cd $(brew --cellar)
find . -maxdepth 1 -type d -newermt "$(date +%Y-%m-%d)"

특정 날짜에 설치한 brew 패키지 삭제 명령어

# Ex. 2024-10-06에 설치된 패키지 삭제

cd $(brew --cellar)
find . -maxdepth 1 -type d -newermt '2024-10-05' ! -newermt '2024-10-06' -exec rm -rf {} +

cd /opt/homebrew/var/homebrew/linked
find . -maxdepth 1 -newermt '2024-10-05' ! -newermt '2024-10-06' -exec rm -rf {} +

cd /opt/homebrew/bin
find . -maxdepth 1 -newermt '2024-10-05' ! -newermt '2024-10-06' -exec rm -rf {} +

# 정상 삭제 확인
brew doctor

특정 날짜 이후에 설치한 brew 패키지 삭제 명령어

# Ex. 2024-09-30 이후에 설치된 패키지 삭제

cd $(brew --cellar)
find . -maxdepth 1 -type d -newermt '2024-09-30' -exec rm -rf {} +

cd /opt/homebrew/var/homebrew/linked
find . -maxdepth 1 -newermt '2024-09-30' -exec rm -rf {} +

cd /opt/homebrew/bin
find . -maxdepth 1 -newermt '2024-09-30' -exec rm -rf {} +

# 정상 삭제 확인
brew doctor

패키지 설치 히스토리 조회

history | grep 'brew install'

후기

사실 원래는 터미널 명령어로 반복문을 돌려서 해결하려 했으나 이는 우선 모든 패키지의 상세정보를 조회한 후, 문자열을 파싱해야하므로 시간이 오래 걸리고 종속된 패키지가 있는 패키지를 먼저 삭제하려 할 경우 하위 패키지를 삭제해야 한다는 에러가 발생하여 정렬까지 해야하는 불편함이 생긴다.
더군다나 터미널 명령어에서는 key-value 배열을 지원하지도 않기 때문에 설치 시간 순으로 정렬하여 패키지를 삭제하는 것은 매우 어려운 작업이 된다.
그리하여 위의 포스팅한 내용으로 방향을 틀게 되었는데 이 방법은 업데이트한 패키지도 삭제될 수 있다는 치명적인 단점이 있기 떄문에 100% 마음에 들지는 않는다.
하지만 내 기준으로 homebrew 패키지를 업데이트하는 일은 그리 자주 발생하지 않으니 이정도면 만족하려 한다.

반응형
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.