GNU binutils 목록

GNU binutils 목록

각 유틸리티의 버전을 포함하여 명령줄에서 이러한 목록을 어떻게 얻을 수 있습니까? 혹시 기본적으로 동일한 파일에 있습니까?

답변1

그들은 [아마] 모두 동일합니다( gold추가 버전이 있습니다. 이 게시물의 끝 부분을 참조하세요).
그러나 버전을 추출하는 가장 좋은 방법은 이 답변 code-golf의 나머지 부분을 고려하십시오.

dpkg -L binutils | grep "/usr/bin/" | xargs -i sh -c "{} --version"

roadmr이 하는 일을 거의 수행합니다.

dpkg -L binutils | xargs -i sh -c "{} --version 2>/dev/null || exit 0"

실행을 시도합니다모든 것 dpkg -L ...출력. 당연히 실행 파일만 실행되므로 오류를 리디렉션하고 xargs무시하면 됩니다.

dpkg -L binutils | xargs -i bash -c '[[ -x "{}" && -f "{}" ]] && {} --version'

필터링 경로가 아닌 실행 파일을 다루고 있는지 테스트합니다.


sudo apt-get install parallel
dpkg -L binutils | grep /usr/bin/ | parallel {} --version
dpkg -L binutils | parallel {} --version 2>/dev/null
dpkg -L binutils | parallel '[[ -x "{}" && -f "{}" ]] && {} --version'

이번에는 GNU를 사용하여 parallel동일한 접근 방식을 수행합니다. 0이 아닌 종료 코드를 건너뛸 수 없는 것과 같은 parallel특정 불편함을 건너뛸 수 있습니다 . 정말 좋은 읽기입니다.xargsman parallel


즉, 더 짧기는 하지만 내 모든 예제는 새로운 셸로 분기되므로( xargs및 일종의 요점 에서는 피할 수 없음 parallel) 모두 roadmr의 것보다 다소 느립니다. 첫 번째가 가장 빠릅니다.

편집하다:지금까지...

sh <(dpkg -L binutils | awk '/bin\// {print $0 " --version"}')

포크는 (일종의) 두 개뿐이고~처럼for 루프만큼 빠릅니다(훨씬 짧습니다).


편집하다: 실제로는 완전히 똑같지는 않습니다. gold다른 명령에는 없는 보조 버전(1.11)이 있습니다.

$ sh <(dpkg -L binutils | awk '/bin\// {print $0 " --version"}') | \
    grep Binutils | sort -u | column -t
GNU  addr2line  (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  ar         (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  assembler  (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  c++filt    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  dwp        (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  elfedit    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  gold       (GNU  Binutils  for  Ubuntu   2.23.52.20130913)  1.11
GNU  gprof      (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  ld         (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  nm         (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  objcopy    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  objdump    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  ranlib     (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  readelf    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  size       (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  strings    (GNU  Binutils  for  Ubuntu)  2.23.52.20130913
GNU  strip      (GNU  Binutils  for  Ubuntu)  2.23.52.20130913

답변2

이 시도:

for util in `dpkg --listfiles binutils |grep "\/usr\/bin\/"`; do
    echo -n "$util -> "; echo "" | $util --version
done

이는 binutils 패키지의 모든 바이너리를 가져오고 --version 매개변수를 사용하여 각각을 쿼리합니다. 터미널에 입력이 필요한 사람들을 위해 빈 문자열을 표시합니다.

관련 정보