Ubuntu 17.04를 실행하면서 저장소가 아닌 배포판에서 소프트웨어를 설치하고 있습니다. 소프트웨어 bin 폴더 내용을 /usr/bin으로 이동해야 합니다(이미 정의되지 않은 조언입니다).
그런 날 중 하나였기 때문에 내가 한 일은 다음과 같습니다.
mv /bin/* /usr/bin
그래서 실수로 bin에 있는 모든 파일을 /usr/bin으로 옮겼는데 /bin이 비어 있었습니다. 나는 /bin이 시스템에 중요하다고 생각했기 때문에 빠른 해결을 위해 /usr/bin 내용을 /bin에 복사했습니다.
내 /bin 및 /usr/bin은 이제 동일한 내용을 가지며 둘 다 원래 /bin 및 /usr/bin에 있던 파일을 포함합니다.
- 내 우분투가 지금 손상된 상태인가요? (아직 컴퓨터를 다시 시작하지 않았지만 지금은 모든 것이 여전히 작동하는 것 같습니다)
- 이 상황을 수동으로 처리할 수 있도록 최근에 어떤 파일이 /usr/bin으로 이동/복사되었는지 알 수 있는 방법이 있습니까? 2.1 /bin과 /usr/bin에 파일이 겹치는 경우가 자주 있습니까?
- 내가 한 일을 취소할 수 있는 다른 방법이 있나요?
저는 Timeshift를 설치하지 않았기 때문에 백업을 복원하는 것은 선택 사항이 아니지만 현재 컴퓨터에 중요한 것은 없으므로 전체 Linux 파티션을 망쳐 놓고 다시 설치하는 것은 인정하겠습니다.
답변1
/usr/bin
Linux(및 대부분의 다른 시스템에서는 파일 시스템 간 이동이 아닌 한 POSIX가 이러한 보장을 제공하지 않지만)에서는 ctime이 업데이트되므로 지난 24시간 동안 다른 시스템에 접근한 적이 없다고 가정하면 다음을 수행할 수 있습니다. 다음을 통해 다시 이동합니다.
find /usr/bin/. ! -name . -prune -ctime -1 -exec sh -c '
echo mv -i "$@" /bin' sh {} +
echo
올바른 것 같으면 삭제하세요. /bin
및 에 존재하는 동일한 이름의 파일은 복구할 수 없으므로 주의하세요 . /usr/bin
(원본 파일은 /usr/bin
손실됩니다.)
/bin
한 가지 잠재적인 주의 사항: 일부 파일이 및 에서 모두 하드링크된 경우 /usr/bin
모든 하드링크가 /usr/bin
로 이동됩니다 /bin
.
/bin
이제 및 /usr/bin
는 기본값 $PATH
이고 /bin
적어도 설치 전에 사용할 수 있으므로 실행 파일이 에 있는지 여부는 중요하지 않다고 생각할 수 있습니다 ./boot
/usr
/bin
/usr/bin
그러나 이는 많은 명령이 실행 파일의 경로를 하드코딩하고 특정 상황에서 작동할 것으로 예상한다는 사실을 무시합니다. 일반적인 예는 그녀의 앞머리입니다. 다음을 포함하는 모든 스크립트:
#! /usr/bin/env bash
이 작업을 수행한 후에는 작동하지 않습니다 mv /usr/bin/env /bin/env
. 이와 관련하여 명령을 두 곳에 두는 것이 스크립트를 손상시키지 않으므로 더 안전합니다.
답변2
내 우분투가 지금 손상된 상태인가요?
예,우분투가 고장났습니다
너 중요한 일을 망쳤어패키지 관리.
따라서 실제로 중요한 데이터(적어도 /etc
및 /home
)와 의 출력과 같은 설치된 패키지 목록을 백업한 dpkg -l
다음 Ubuntu를 다시 설치하십시오.
(초보자가 아닌 사람은 다른 답변처럼 관리하려고 시도할 수 있지만 그렇게 크고 기본적인 실수를 저지르지는 않습니다)
나는 전체 Linux 파티션을 망친 것을 인정할 수 있습니다.
시간이 덜 걸릴 수 있습니다. 다른 답변의 도움으로 현재 시스템을 유지하면 시스템이 매우 혼란스러운 상태가 됩니다(이로 인해 향후 문제가 발생할 수 있습니다).
디스크를 다시 포맷하는 중이므로 /home
별도의 파티션을 배치하는 것이 좋습니다(향후 이와 같은 오류로 인해 데이터가 손실되지 않도록). 이 작업을 수행하기 전에 df -h
출력물을 종이에 인쇄하십시오(사용된 디스크 공간과 사용 가능한 디스크 공간에 대한 정보 제공...). 여유가 있다면 충분히 큰 시스템 파티션(루트 파일 시스템)을 갖는 것이 현명합니다.df -hi
fdisk -l
소프트웨어 bin 폴더 내용을 /usr/bin으로 옮겨야 할까요?
(용어: Unix에는 "폴더"가 아닌 디렉토리가 있습니다).
저것(이동하다) /usr/bin/
매우 잘못된 것입니다. 당신의$경로(최고) 또는 가장 많이 추가됨심볼릭 링크그리고 /usr/bin/
바람직하게는 실행 파일을 /usr/local/bin/
.
/usr/bin/
패키지 관리 도구(예: , 등) 외부에서는 변경 하지 않는 것이 좋습니다 . 읽다/bin
/sbin
/usr/sbin/
dpkg
apt-get
aptitude
FHS.
답변3
설치는 대부분 괜찮을 것입니다.
/usr
두 파일 모두에 동일한 이름을 가진 다른 파일이 있어서는 안 됩니다/usr/bin
(이것은 2.1에 대한 답변이 될 것입니다). 따라서 모든 파일을 넣어도 아무 문제가 발생/bin
하지 않습니다/usr/bin
(패키지를 업그레이드할 때까지). 바이너리를 심볼릭 링크로 덮어쓴 경우 현재 발생할 수 있는 유일한 문제는 손상된 심볼릭 링크입니다. 이 문제를 해결하려면 끊어진 기호 링크를 찾으십시오.find -L /bin /usr/bin -type l -ls
나열된 파일에 해당하는 모든 패키지를 다시 설치합니다(예:
/usr/bin/zsh
손상된 것으로 표시 되면dpkg -S /bin/zsh /usr/bin/zsh
파일이 어떤 패키지에서 왔는지 알려줍니다. 다시 설치 사용apt --reinstall install zsh
).ctime별로 표시하고 정렬하여 최근 변경된 파일(이동한 파일 포함)을 볼 수 있습니다.
ls -ltc /bin
수행한 작업을 취소하는 가장 좋은 방법은 패키지를 사용하고
cruft
패키지에서 찾은 파일/bin
이나/usr/bin
패키지에서 제공되지 않은 파일을 삭제하는 것입니다.sudo apt install cruft sudo cruft -d "/ /usr"
파일에 대한 심볼릭 링크가 아닌 경우
/etc/alternatives
(이 경우 보관해야 함).
답변4
자세히 설명하는 것이 교육적일 수도 있습니다.왜귀하의 시스템은 다소 "깨졌습니다".
/bin
@basile-starynkevitch가 지적했듯이 패키지 관리 시스템이 있어야 할 위치에서 바이너리를 찾/usr/bin
거나 그 반대의 경우 매우 혼란스러울 수 있습니다.- 일부(잠재적으로 중요한) 스크립트는 하드 링크를 통해 한 디렉터리 또는 다른 디렉터리에서 특정 바이너리를 찾을 수 있습니다(이는 어떤 경우에는 좋은 방법입니다. 예를 들어 보안 관점에서,아니요)의 내용에 따라 다릅니다
$PATH
. /bin
와 의 차이점은/usr/bin
전자가 부팅 초기 단계에 마운트된 파티션에 있을 수 있기 때문입니다. 이 경우(즉, 시스템이 부팅될 때)/bin/xxx
전체 경로에서 바이너리를 참조할 수 있을 뿐만 아니라/usr/bin
그 당시 시스템에서 디렉터리를 사용하지 못할 수도 있습니다. (df /bin
및 의 경우df /usr/bin
동일한 파일 시스템이나 다른 파일 시스템이 나열될 수 있습니다. 요즘 대부분의 기본 설치에서는 두 디렉터리를 동일한 파티션에 유지할 수 있습니다.)
그래서 만약 당신이동일한/bin
, 에 모두 바이너리가 있으면 /usr/bin
문제 2, 3은 발생하지 않으며, 문제 1로 인한 피해는 최소화될 가능성이 높습니다. 예를 들어, Re 1에서 패키지를 제거하려고 하면 패키지가 올바르게 제거되지 않을 수 있으며, 업그레이드가 "올바른" 위치에 있는 복사본을 업그레이드하려고 시도하지만 "잘못된" 위치에 있는 복사본을 무시하면 업그레이드가 깨질 수 있습니다. . 따라서 위의 해결 방법이 너무 과격하거나 복잡해 보인다면가능한이 상태로 시스템을 그대로 두십시오.
하지만 이것이 중요한 시스템이라면 저는진짜나는 그것을 믿지 않을 것입니다.
/usr/bin
일반적인 규칙(다시 @basile-starynkevitch를 반영함)은 , 및 친구들(그들은 배포판에 "속함")과 일반 설치의 일부로 이 작업을 수행하도록 권장되는 패키지를 함부로 다루지 않는 것입니다 /bin
... 좋지 않습니다. 소프트웨어 패키지.
편집하다:포인트 3과 관련하여 다음이 있습니다.systemd/Fedora 및 친구들의 맥락에서의 토론/bin
모든 것을 첫 번째 콘텐츠 로 이동 /usr/bin
하고 두 번째 콘텐츠로 심볼릭 링크하는 것이 왜 의미가 있습니까? 이것은아니요이 작업은 직접 수행하는 것이 좋습니다. 이 페이지는 distro 사용자를 위해 작성되었습니다. 하지만 여기에는 이러한 구별이 존재하는 이유에 대한 일부 역사가 포함되어 있습니다(그리고 이것이 지금은 단지 먼지만 쌓인 전통인 이유에 대한 힌트도 포함되어 있습니다).