![Unix 변형에서 이름은 같지만 동작이 다른 유틸리티를 처리하는 방법은 무엇입니까?](https://linux55.com/image/61844/Unix%20%EB%B3%80%ED%98%95%EC%97%90%EC%84%9C%20%EC%9D%B4%EB%A6%84%EC%9D%80%20%EA%B0%99%EC%A7%80%EB%A7%8C%20%EB%8F%99%EC%9E%91%EC%9D%B4%20%EB%8B%A4%EB%A5%B8%20%EC%9C%A0%ED%8B%B8%EB%A6%AC%ED%8B%B0%EB%A5%BC%20%EC%B2%98%EB%A6%AC%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
어떤 이유에서인지 저는 원격 Linux 서버를 관리하기 위해 Macbook을 컴퓨터로 선택합니다.
때때로 이름은 같지만 두 운영 체제 간에 다르게 동작하는 유틸리티에 문제가 발생합니다.
예를 들어 다음과 같이 파일을 잘 찾고 find ./ -name 'vim*' -exec stat -c "%y %n" {} \;
해당 정보를 잘 표시합니다.
2015-01-08 15:14:30.000000000 +0800 ./vimrc
하지만 내 OSX에서는 작동하지 않습니다. 매뉴얼을 읽은 후 -f "%t%Sm %N"
결과를 얻으 려면 다른 플래그를 사용해야 한다는 것을 알았습니다 .
Mar 5 18:22:00 2015 ./vimrc
이런 일이 정말 귀찮습니다.
stat
제 생각에는 가젯과 같은 Linux 버전이 더 많은 개발자 기여가 있고 지속적으로 업데이트되기 때문에 더 좋다고 생각합니다 . 대부분의 OSX 사용자는 이러한 가젯을 사용하지 않고 GUI를 사용합니다. 따라서 Linux에 비해 많은 장치가 골동품입니다.
나는 정말로 Linux 버전의 사용을 표준으로 취급하고 OSX 버전을 유지하고 싶습니다(건드리지 마십시오). 그런데 내 머릿속에서는 이것이 옳지 않다는 짜증나는 목소리가 들렸다. "문제에서 도망치지 말고 직면해야 한다", "다 배워라"라고 하더군요.
Unix와 Linux에서 이름은 같지만 동작이 다른 유틸리티를 어떻게 처리해야 합니까?
답변1
이것은 유닉스와 리눅스의 싸움이 아니라 BSD와 GNU의 싸움입니다.
두 시리즈 모두 소스 코드 형식으로 제공되며 두 운영 체제 중 하나에 설치할 수 있습니다. Google에서 "Mac용 GNU"를 검색하면 Homebrew 또는 기타 Mac OSS 패키지 관리자를 사용하여 BSD 도구를 GNU 버전으로 교체하는 방법에 대한 지침이 포함된 여러 페이지를 찾을 수 있습니다.
두 가지 도구 세트를 모두 사용하면서 정신을 차리는 방법:
내가 본 대부분의 차이점은 더 많은 옵션과 더 많은 구문 분석 유연성이라는 두 가지 캠프로 나뉩니다.
"추가 옵션"은 귀하의 질문에서 언급한 것입니다. GNU 도구는 기존 BSD 및 System V 도구를 예로 사용하여 생성되었으므로 작성자는 처음부터 시작하여 특히 옵션에 대한 멋진 표시에서 몇 가지 추가 옵션을 추가할 수 있었습니다. . 이들 중 일부는 여러 도구에 공통적으로 적용됩니다. 예를 들어, 많은 명령에서는 Kilo-Mega-Giga- 등과 같이 "사람이 읽을 수 있는 단위"를 표시하는 옵션을 -h
허용 합니다.-H
구문 분석 유연성은 대부분의 명령이 getopt
GNU 버전에서 더욱 현대적이고 강력한 이 라이브러리를 사용하기 때문에 발생합니다. 가장 분명한 결과는 대부분의 명령이 다음과 같이 문서화되어 있다는 것입니다.
command [options] file file...
GNU 라이브러리를 사용하는 경우 getopt
옵션이 파일 전체에 분산될 수 있습니다. 예를 들어, GNU에서는 다음을 사용할 수 있습니다.
ls -lt fileA fileB
또는
ls -l fileA -t fileB
명령줄의 어느 곳에나 나타날 수 있으므로 -l
동일한 결과를 얻습니다 . -t
BSD 시스템에서는 두 번째 형식에서 오류가 발생하거나 -t
.
이 모든 것을 염두에 두고 GNU 도구가 설치되지 않은 MacOS 명령줄에 있는 경우 명령 이름 뒤에 모든 옵션을 입력하는 것을 기억하고 표시 형식 옵션이 너무 많을 것이라고 기대하지 마십시오. .
답변2
유닉스하나 있다복잡한 역사. 시간이 지남에 따라 많은 변형이 다양한 명령과 옵션을 축적했습니다.
대부분의 Unix 계열 시스템에는 표준 또는 오히려 표준 계층 구조가 있습니다.POSIX및 POSIX+XSI(이전 명칭:단일 유닉스— 단일 Unix는 이제 POSIX이며 XSI 부분은 선택 사항으로 표시됩니다. 골동품이나 임베디드 구현이 아닌 Unix와 유사한 모든 것에 의존할 수 있습니다.POSIX-2004(Single Unix v3, Open Group Basic Spec Issue 6이라고도 함); 현재에도 최신 버전(POSIX-2008 = SUSv4 = Issue 7)은 완전히 지원되지 않습니다.
OSX(및 대부분의 OSX 유틸리티의 출처인 FreeBSD)와 비임베디드 Linux에만 관심이 있다면 더 많은 명령과 옵션을 사용할 수 있습니다. 두 가지 모두 평균보다 더 많은 기능을 갖추고 있습니다. 두 운영 체제에서 지원되는 내용을 확인하려면 설명서를 확인해야 합니다.
비임베디드 Linux 시스템(및 일부 고급 임베디드 Linux 시스템) 및 Cygwin과 함께 제공됩니다.암소 비슷한 일종의 영양유용. GNU 유틸리티는 경쟁사보다 더 편리한 기능을 갖고 있는 경우가 많습니다.
이 stat
명령은 POSIX에는 명령어가 없고, OSX에는 일부 구문이 있으며, GNU에는 기능은 비슷하지만 구문이 다른 예입니다.
대부분의 Unix 변형에 GNU 유틸리티를 설치할 수 있습니다. OSX의 경우 다음을 참조하세요.https://apple.stackexchange.com/questions/69223/how-to-replace-mac-os-x-utilities-with-gnu-core-utilities.
공통 코어를 고수할지 아니면 모든 곳에 동일한 버전을 설치할지는 개인적인 결정입니다. 사용하는 모든 기계를 제어할 수 있다면 원하는 유틸리티가 모두 갖추어져 있는지 확인하세요. 원하는 모든 것을 항상 설치할 수 없는 시스템에서 실행되는 코드를 작성하는 경우 이식 가능한 항목을 고수해야 합니다.