CentOS 가상 머신에서 명령을 실행하려고 하는데 이 명령을 실행하는 데 사용하는 API가 >, >> 또는 | 연산자를 허용하지 않는 것 같습니다. 또한 명령에 대한 정규화된 경로(예: ls 대신 /bin/ls)를 사용해야 합니다.
특정 명령의 출력을 파일로 보내고 싶습니다. 이 경우 어떻게 해야 합니까? 이론적으로는 "올바른" 셸에서 리디렉션을 수행하는 스크립트를 실행할 수 있지만 이는 매우 불편한 옵션입니다.
답변1
리디렉션은 쉘에 의해 해석됩니다. API를 사용하는 경우 실행된 명령은 셸을 통해 실행되지 않고 직접(남자 3 시스템그리고사람 3이 실행됩니다.).
리디렉션을 사용하려면 셸을 시작하고 리디렉션을 사용하세요. 예를 들면 다음과 같습니다.
/bin/sh -c "command > redirect"
답변2
여러 개의 가상 머신이 있는 경우 pdsh라는 프로그램을 살펴보는 것이 좋습니다. 여러 원격 시스템(실제 또는 가상)에서 병렬로 명령(ssh를 통해)을 실행하는 데 사용할 수 있습니다.
이는 HPC 클러스터에서 사용하도록 작성되었지만 Linux/Unix 시스템의 모든 그룹에서 사용할 수 있는 유용한 시스템 관리 도구입니다.
https://computing.llnl.gov/linux/pdsh.html
예를 들어 "compute" 속성(openstack 배포의 nova-compute 노드)으로 정의된 여러 머신이 있는 경우 다음 명령을 실행하여 16개 이상의 유휴 코어가 있는 노드 수를 확인할 수 있습니다(각 노드에는 24코어) 노드) xxlarge 16코어 VM을 실행할 수 있습니다.
# pdsh -g 계산 "ps hwwu -Ckvm | sed -e 's/.*-smp //' -e 's/,.*//' | awk '{VMS += 1; CPUS += \$1} END {VMS, CPUS, 24-CPUS 인쇄}'" | \ awk '$4 > 15 {인쇄}' |sort-k4-n 비교 17: 6 8 16 비교 19: 6 8 16 비교 23: 6 8 16 26반: 7 8 16 비교 51: 7 8 16 비교 56: 6 8 16 비교 71: 7 8 16 비교 78: 7 8 16 비교 81: 6 8 16 비교 11: 6 7 17 비교 47: 6 7 17 비교 79: 6 7 17 비교 09: 5 6 18 비교 29: 5 5 19 비교 27: 4 4 20
(실제 사용량 출력, 익명성을 위해 호스트 이름이 편집됨)
큰따옴표 안의 명령은 원격 시스템에서 실행되고(셸 인용 규칙이 적용되므로 첫 번째 awk의 \$1) 나머지(두 번째 awk 및 sort)는 로컬 시스템에서 실행됩니다.