zsh는 /usr/bin 아래에 있거나 /bin 아래에 있습니다. 차이점은 무엇입니까?

zsh는 /usr/bin 아래에 있거나 /bin 아래에 있습니다. 차이점은 무엇입니까?

/etc/shells zsh에는 에 설치되어 있다고 나와 있지만 /bin/zsh에도 설치되어 있습니다 /usr/bin/zsh.

brgr@envy17:~$ cat /etc/shells 
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash
/usr/bin/tmux
/usr/bin/screen
/bin/zsh        <--
/usr/bin/zsh    <--

지금인터넷중 하나를 사용하는 것이 좋습니다 /usr/bin/.

내 질문은: 왜? 이 둘의 차이점은 무엇인가요? Bash가 하나의 경로( /bin/bash) 에만 설치되는 이유는 무엇입니까 ?

답변1

의 내용은 /etc/shells다소 정적이며 시스템에 설치된 특정 셸의 존재 여부와 무관합니다.

파일 에 두 개의 항목이 있다는 사실은 /etc/shells사용자가 둘 중 하나를 shell 로 /bin/zsh지정한 경우 컨설팅 데몬 (예: 대부분의 FTP 데몬) 에서 두 항목이 모두 "유효한" 것으로 간주된다는 의미입니다./usr/bin/zsh/etc/passwd/etc/shells

경로($PATH)에서 사용 가능한 첫 번째 zsh를 보려면 다음과 같이 which 명령을 사용할 수 있습니다.

which zsh

또는 추가 정보(명령에 대한 바이너리, 소스 파일 및 매뉴얼 페이지 파일)를 표시하는 whereis:

whereis zsh

답변2

하나는 다른 하나에 대한 심볼릭 링크(또는 하드 링크)일 수 있지만... 둘은 동일한 파일입니다.

답변3

존재할 때 /bin/zsh,추가의존재의 주된 목적 /usr/bin/zsh이식성모든 스크립트를 편집할 필요가 없다는 의미에서"셰르본좋습니다. 사용하면 zsh해결될 수 있습니다 /usr/bin/zsh.

zsh고려되지 않음기준소프트웨어를 사용하고 있지만 점점 더 많은 사람들이 이를 사용하고 있습니다. 심지어 하드코어 시스템 관리자도 마찬가지입니다. 이것이 바로 더 많은 배포판이 이를 거기에 넣는 경향이 있는 이유입니다 /bin/zsh.

집에 더 가깝습니다. 질문이 아닙니다 zsh.특징이는 Linux(또는 역사적으로 Unix) 시스템이 정의된 상태로 부팅되도록 보장해야 합니다.

/bin대신 루트 파일 시스템에 상주하도록 정의됩니다 /usr/bin.

후자의 경우 옵션에는 다른 디스크(파티션) 또는 다른 시스템에 배치하고 NFS 또는 기타 네트워크 수단을 통해 마운트하는 것이 포함됩니다.

따라서 네트워크 지원 없이 시스템을 부팅하거나, 네트워크가 예기치 않게 중단되거나, 디스크가 충돌하거나 파일 시스템이 손상되거나, 아무 것도 설치하지 않고 단순히 단일 사용자 모드로 부팅하는 경우에도 /bin그 안의 파일에 계속 액세스할 수 있습니다.

/lib및 에도 동일하게 적용됩니다 /usr/lib. 실제로 그 이상의 것은 /usr기본 시스템에 중요하지 않은 것으로 간주됩니다(X11은 일반적으로 /usr지점의 어딘가에서도 찾을 수 있습니다. 이것이 루트의 $HOME이 아닌 이유이기도 합니다 /home/root. /home루트 파일 시스템.

시스템 디스크가 손상된 경우 어떻게 해야 합니까? 아니면 루트 파일 시스템이 손상되었습니까? 그렇다면 아마도 커널을 로드할 수도 없을 것입니다...

위의 대부분은 오늘날의 시스템에서는 그다지 중요하지 않습니다. NFS 마운트 /usr/*파일 시스템은 디스크 공간이 저렴하고 사용 가능하므로 불필요합니다.

많은 설치에서 OS 이미지도 별도의 /boot파일 시스템에 마운트되므로 커널을 로드해도 루트 파일 시스템이 마운트된다는 보장은 없지만 현재 initrd초기 루트 파일 시스템 커널 부팅이 작동 중입니다(사실 zsh대부분의 경우 on이 손실됩니다). 경우).

또한 브랜치를 포함하는 대규모 루트 파일 시스템을 갖는 것이 일반적인 관행이며 /usr, 이는 설치를 복제할 때 몇 가지 이점이 있습니다.

/bin따라서 및 (등) 을 구별하게 된 전통적인 고려 사항은 /usr/bin다소 구식이지만 최근 시스템에서는 여전히 구현됩니다.

(이것은 부수적인 이야기에 가깝지만 이는 사실입니다)

답변4

호환성상의 이유로. 일부 스크립트는 /usr/bin을 사용하고 다른 스크립트는 /bin을 사용합니다. 일부 배포판에서는 /sbin과 /bin이 더 이상 의미가 없기 때문에 모든 것을 /usr/bin으로 옮기기를 원합니다. 한 가지 예외는 bash입니다. #!/bin/bash지난 수십 년 동안 수많은 스크립트에서 사용되었기 때문에 심볼릭 링크와의 호환성을 위해 /bin/bash를 제공하는 것이 현재 좋은 솔루션입니다.

관련 정보