명령줄에서 >, >> 또는 | 없이 출력을 파일로 리디렉션할 수 있습니까? 운영자?

명령줄에서 >, >> 또는 | 없이 출력을 파일로 리디렉션할 수 있습니까? 운영자?

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)는 로컬 시스템에서 실행됩니다.

관련 정보