Jak mogę przekierować dane wyjściowe systemu OS X podczas pracy z sudo?

9

Korzystam z dtrusssystemu Mac OS X 10.9. Prostym przykładem jest:

sudo -c ls

Ale chciałbym uchwycić dane dtrusswyjściowe w pliku. Widziałem coś, co sugeruje, że mogę zrobić coś takiego:

sudo bash -c 'dtruss -c ls >x'

ale kiedy to robię, dane wyjściowe dtrussnadal trafiają do terminala, a lista plików z lszostaje przekierowana do pliku.

Jak mogę przekierować wyjście dtrussdo pliku?

Chris Markle
źródło
1
dtruss prawdopodobnie pisze stderrzamiast stdoutwiedźmy >x. To pytanie wyjaśnia, co robić: Linux mniej zachowań i stderr
Nifle

Odpowiedzi:

9

Uruchomiłem to w ten sposób:

sudo dtruss -f -p 12345 2> /tmp/trace.txt
  • -f mówi, aby śledzić procesy potomne.
  • -p określa identyfikator procesu do śledzenia.
  • 12345jest symbolem zastępczym dla identyfikatora procesu. Możesz to uzyskać, patrząc na toplub ps -A.
  • 2>wstawia standardowy błąd do pliku wyjściowego. Z jakiegoś powodu dtruss wyświetla wszystko na stderr.
Luke Quinane
źródło
Czy możesz rozszerzyć swoją odpowiedź, aby wyjaśnić, co to robi? Dzięki.
fixer1234
„-f” mówi następujące procesy potomne, „-p” określa identyfikator procesu do śledzenia, „2>” wstawia standardowy błąd do pliku wyjściowego. Z jakiegoś powodu dtruss wyświetla wszystko na stderr.
Luke Quinane
Czy 12345 jest symbolem zastępczym dla identyfikatora procesu (i skąd miałby on pochodzić)?
fixer1234
Jest to symbol zastępczy dla identyfikatora procesu. Możesz to uzyskać, patrząc na toplub ps -A.
Luke Quinane