/bin 내용을 /usr/bin으로 이동했는데 취소할 수 있나요?

/bin 내용을 /usr/bin으로 이동했는데 취소할 수 있나요?

Ubuntu 17.04를 실행하면서 저장소가 아닌 배포판에서 소프트웨어를 설치하고 있습니다. 소프트웨어 bin 폴더 내용을 /usr/bin으로 이동해야 합니다(이미 정의되지 않은 조언입니다).

그런 날 중 하나였기 때문에 내가 한 일은 다음과 같습니다.

mv /bin/* /usr/bin

그래서 실수로 bin에 있는 모든 파일을 /usr/bin으로 옮겼는데 /bin이 비어 있었습니다. 나는 /bin이 시스템에 중요하다고 생각했기 때문에 빠른 해결을 위해 /usr/bin 내용을 /bin에 복사했습니다.

내 /bin 및 /usr/bin은 이제 동일한 내용을 가지며 둘 다 원래 /bin 및 /usr/bin에 있던 파일을 포함합니다.

  1. 내 우분투가 지금 손상된 상태인가요? (아직 컴퓨터를 다시 시작하지 않았지만 지금은 모든 것이 여전히 작동하는 것 같습니다)
  2. 이 상황을 수동으로 처리할 수 있도록 최근에 어떤 파일이 /usr/bin으로 이동/복사되었는지 알 수 있는 방법이 있습니까? 2.1 /bin과 /usr/bin에 파일이 겹치는 경우가 자주 있습니까?
  3. 내가 한 일을 취소할 수 있는 다른 방법이 있나요?

저는 Timeshift를 설치하지 않았기 때문에 백업을 복원하는 것은 선택 사항이 아니지만 현재 컴퓨터에 중요한 것은 없으므로 전체 Linux 파티션을 망쳐 놓고 다시 설치하는 것은 인정하겠습니다.

답변1

/usr/binLinux(및 대부분의 다른 시스템에서는 파일 시스템 간 이동이 아닌 한 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 -hifdisk -l

소프트웨어 bin 폴더 내용을 /usr/bin으로 옮겨야 할까요?

(용어: Unix에는 "폴더"가 아닌 디렉토리가 있습니다).

저것(이동하다) /usr/bin/매우 잘못된 것입니다. 당신의$경로(최고) 또는 가장 많이 추가됨심볼릭 링크그리고 /usr/bin/바람직하게는 실행 파일을 /usr/local/bin/.

/usr/bin/패키지 관리 도구(예: , 등) 외부에서는 변경 하지 않는 것이 좋습니다 . 읽다/bin/sbin/usr/sbin/dpkgapt-getaptitudeFHS.

답변3

  1. 설치는 대부분 괜찮을 것입니다. /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).

  2. ctime별로 표시하고 정렬하여 최근 변경된 파일(이동한 파일 포함)을 볼 수 있습니다.

    ls -ltc /bin
    
  3. 수행한 작업을 취소하는 가장 좋은 방법은 패키지를 사용하고 cruft패키지에서 찾은 파일 /bin이나 /usr/bin패키지에서 제공되지 않은 파일을 삭제하는 것입니다.

    sudo apt install cruft
    sudo cruft -d "/ /usr"
    

    파일에 대한 심볼릭 링크가 아닌 경우 /etc/alternatives(이 경우 보관해야 함).

답변4

자세히 설명하는 것이 교육적일 수도 있습니다.귀하의 시스템은 다소 "깨졌습니다".

  1. /bin@basile-starynkevitch가 지적했듯이 패키지 관리 시스템이 있어야 할 위치에서 바이너리를 찾 /usr/bin거나 그 반대의 경우 매우 혼란스러울 수 있습니다.
  2. 일부(잠재적으로 중요한) 스크립트는 하드 링크를 통해 한 디렉터리 또는 다른 디렉터리에서 특정 바이너리를 찾을 수 있습니다(이는 어떤 경우에는 좋은 방법입니다. 예를 들어 보안 관점에서,아니요)의 내용에 따라 다릅니다 $PATH.
  3. /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 사용자를 위해 작성되었습니다. 하지만 여기에는 이러한 구별이 존재하는 이유에 대한 일부 역사가 포함되어 있습니다(그리고 이것이 지금은 단지 먼지만 쌓인 전통인 이유에 대한 힌트도 포함되어 있습니다).

관련 정보