시작
서버에 온갖 삽질과 샛팅을 끝내고 `apt upgrade`를 시키는 도중 쌔한 느낌이 들어 'apt upgrade 후 부팅안됨'을 검색하니 예상과 같이 그런 사례가 종종 있었다 바로 폭풍 `ctrl + c` 키를 눌렀지만 돌이킬 수 없었다.
`apt upgrade` 명령 같은 경우에는 최신 버전으로 올려주기 때문에 특정 패키지가 삽질한 결과를 물거품 만들 수 있기 때문에 다시 롤백시키려고 한다.
참고
https://www.cyberciti.biz/howto/debian-linux/ubuntu-linux-rollback-an-apt-get-upgrade/
아무 생각없이 `apt upgrade` 명령어를 쳐버린 내 불찰 후다닥 서칭해서 찾았다.
1. 기록 탐색
`/var/log/apt/history.log` 파일을 탐색하여 내가 마지막으로 쳤던 명령어에 대해 추적한다.
`Commandline`에 내가 쳤던 `apt` 명령어가 있으며 거기서 Start-Date 줄은 전부 복사한다.
Start-Data: 2023-11-01 13:36:40
그리고 `Install:` 줄이 몇번째 줄인지 확인한다.
보통 이런 형식으로 되어있다.
Start-Date: 블라블라
Commandline: apt upgrade
Request-By: 블라블라
Install: 블라블라
Ubuntu 버전별로 조금 다른것 같으며 나는 3번째 줄에있다(0번부터 시작해서). 기억하자
2. 임시파일 생성
위 기억과 복사한 내용을 토대로 명령줄을 작성한다.
grep -A 3 'Start-Data: 2023-11-01 13:36:40 | tail -1 >/tmp/packages.txt
`grep -A [숫자]` 에는 `Install` 항목이 몇번째 줄에 있는지
'Start-Data: 2023-11-01 13:36:40' 항목에는 복사한 시간을 넣어준다.
그럼 `/tmp/packages.txt` 에는 `Install: 블라블라` 항목만 남겨졌을것이다.
2.1. 문자열 치환
거기서 `Install:` 부분만 지워줄 것이다.
sed -i 's/Install://' /tmp/packages.txt
2.2. 문자열 치환 2
줄바꿈 양식을 넣어준다. 순차적으로 입력한다.
tr ',' '\n' < /tmp/packages.txt | sed '/automatic)/d' | awk '{ print $1}' > /tmp/final.packages.txt
wc -l /tmp/final.packages.txt
그럼 `/tmp/final.packages.txt`에는 아래와 같이 나와있어야 된다.
예시)
libmaa3:amd64 ant:amd64 libmimic0:amd64 dc:amd64 libparse-yapp-perl:amd64 gir1.2-clutter-1.0:amd64 libjna-java:amd64 python-egenix-mxbeebase:amd64 libxkbcommon-x11-0:amd64 libmpeg2-4:amd64 libopencv-core2.4:amd64 libdvdread4:amd64 libhunspell-1.3-0:amd64 fonts-lobster:amd64 libtotem-plparser18:amd64 libodbcinstq4-1:amd64 jed-common:amd64 .... .. ... xfonts-cyrillic:amd64 postgresql:amd64 db5.3-util:amd64 libopencore-amrnb0:amd64 firebird2.5-examples:amd64 libboost-random1.54-dev:amd64 libtbb2:amd64 libwxgtk2.8-0:amd64 libc6-x32:amd64 magicfilter:amd64
3. 삭제 작업
위에 작성한 `/tmp/final.packages.txt` 파일을 토대로 삭제 명령어를 진행한다
`sudo su` 명령어로 root로 로그인해서 사용한 기준으로 작성
# 변수p 에 final.packages.txt 내용 삽입
p="$(</tmp/final.packages.txt)"
# 변수p 내용을 가지고 삭제 작업
apt --purge remove $p
apt clean
apt autoremove
참고로 출처는 `apt-get` 명령어였다.
`apt`와 `apt-get`의 큰 차이점은 설치/삭제 시 이쁘게 보여주냐 마냐 차이이다.
'Linux | PowerShell' 카테고리의 다른 글
[부팅불가 해결]Ubuntu22.04 Nvidia 그래픽 드라이버 제거/설치 및 삽질기 (2) | 2023.11.02 |
---|---|
[SSH] ProxyJump 사용방법 (0) | 2023.09.24 |
[Ubuntu] 부팅시 스크립트 설정 (0) | 2023.08.12 |
[Ubuntu] 리눅스 별칭(alias) 사용 (0) | 2023.08.12 |
[PowerShell] 윈도우에서 '.log' 파일 실시간으로 보기 (0) | 2023.05.23 |