각 유틸리티의 버전을 포함하여 명령줄에서 이러한 목록을 어떻게 얻을 수 있습니까? 혹시 기본적으로 동일한 파일에 있습니까?
답변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
특정 불편함을 건너뛸 수 있습니다 . 정말 좋은 읽기입니다.xargs
man 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 매개변수를 사용하여 각각을 쿼리합니다. 터미널에 입력이 필요한 사람들을 위해 빈 문자열을 표시합니다.