"uname -rv"(또는 유사한 도구)에서 커널 버전 및 빌드 날짜를 추출하는 배포판 독립적 방법

"uname -rv"(또는 유사한 도구)에서 커널 버전 및 빌드 날짜를 추출하는 배포판 독립적 방법

많은 사람들이 알고 있듯이 버전(빌드 플래그, 날짜) uname -r과 함께 커널 버전을 반환합니다 .uname -v

다음과 같이 릴리스 및 빌드 날짜만 출력하는 방법을 찾으려고 합니다.

4.10.0-37-generic Fri Oct 6 22:42:22 UTC 2017

내가 사용하면 uname -rv나는 얻는다.

4.10.0-37-generic #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:22 UTC 2017

따라서 여기서 필요한 것은 삭제할 패턴을 찾는 것입니다 #41~16.04.1-Ubuntu SMP. 솔루션의 유일한 제한 사항은 다음과 같습니다.

  • 한 줄로 실행 가능해야 합니다.
  • 시스템의 로캘이 미국(또는 주와 월이 영어로 인쇄되는 다른 영어 로캘)입니다.
  • 이는 Linux 배포판 및 배포판 제품군과 독립적인 솔루션이어야 합니다. uname제가 아는 한 이것은 Debian, Red Hat, Slackware, Arch 등 모든 Linux 배포판에 존재하는 가장 기본적인 도구이기 때문입니다 . "모든" 배포판에 다른 도구가 있는 경우 해당 배포판에서 사용할 수 있습니다.
  • 초점은 Linux에 있으며 이는 BSD 솔루션(MacOS 포함)이 관련이 없음을 의미합니다.

문제는 명령에 익숙하지 않다는 것입니다. 특히 날짜가 인쇄되는 방식이 균일한 경우 첫 번째 공백(왼쪽에서 오른쪽으로)부터 여섯 번째 공백(포함, 오른쪽에서 왼쪽으로) 그러나 이는 날짜에 공백이 5개 포함된 경우에만 작동합니다.

<day of the week> <month> <day of the month> <daytime (HH:MM:SS)> <time standard/time zone> <Year>

uname -rv제가 고려한 또 다른 사항은 과 의 출력 사이에 뮤텍스를 사용하는 것입니다 cat /proc/version.

Linux version 4.10.0-37-generic (buildd@lcy01-30) (gcc version 5.4.0 20160609 (Ubuntu 5.4.0-6ubuntu1~16.04.4) ) #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:22 UTC 2017
              |_______________|                                                                                                        |_________________________|


4.10.0-37-generic #41~16.04.1-Ubuntu SMP Fri Oct 6 22:42:22 UTC 2017
|_______________|                       |_________________________|

여기서도 정규식은 옵션이 되어야 하지만 위에서 언급했듯이 날짜 형식이 균일한지 모르므로 정규식을 만드는 것이 매우 어려울 것입니다(IMHO). 여기에 uname -v날짜 사이의 하위 문자열이 시스템마다 매우 다를 수 있는 다양한 속성을 추가할 수도 있습니다 .#

답변1

sed 방법이 있습니다.

uname -rv | sed -e 's/\s#.*SMP//'

Fedora/RHEL에서 이것을 시도했는데 잘 작동하는 것 같습니다.

답변2

제가 보기에는 공백으로 구분된 두 번째 및 세 번째 열만 제거하려는 것 같습니다.

$ uname -rv | cut -d ' ' -f 1,4-
4.4.0-87-generic Tue Jul 18 12:55:35 UTC 2017

cut이는 입력을 공백으로 구분된 필드로 해석하고 첫 번째 필드와 네 번째부터 시작하는 모든 필드를 선택합니다.

답변3

어때요?

echo $(uname -r)" "$(uname -v | sed -En 's/(^.*)((Mon)|(Tue)|(Wed)|(Thu)|(Fri)|(Sat)|(Sun).*$)/\2/p')

답변4

무엇에 대해

echo "$(uname -r)$(uname -v | sed -nE 's/.*(( \S+){6})$/\1/p')"

관련 정보