Czy istnieje sposób na obejrzenie, jakie polecenia są wykonywane w innej powłoce, gdy są one wykonywane? Obie powłoki są bashowe i mam dostęp do roota, jeśli to ma znaczenie. Nie mogę zainstalować żadnego dodatkowego oprogramowania i nie chcę, aby druga powłoka musiała robić coś specjalnego, np. Uruchomić ekran.
Sytuacja: jestem zdalnie zalogowany do komputera z systemem Linux, podobnie jak współpracownik. Chciałbym zobaczyć polecenia, które wykonuje w swojej powłoce. Wiem, że mógłbym użyć dowolnej kombinacji watch
i ps
zobaczyć polecenia, których uruchomienie zajmuje dłużej niż sekundę, ale nie sądzę, aby pomogło to w przypadku bardzo krótkich poleceń.
shell
monitoring
Tom Panning
źródło
źródło
kill
, icd
nie spawnuj podprocesów i nigdy nie pojawią się w wynikach ps.Odpowiedzi:
Ponieważ jesteś rootem, zawsze możesz
strace -f -e execve -p her_bash_pid
. Jest-f
to konieczne, ponieważ jej powłoka rozwinie nowy proces przedexec
, ale oznacza to również, że zobaczysz wszystko, co procesy podrzędne wykonują.źródło
exec
.Jeśli twój współpracownik może zmodyfikować niektóre ustawienia historii swojej powłoki bash, możesz uzyskać te informacje z tail -f /home/user/.bash_history. Oto ustawienie potrzebne do zapisania .bash_history po każdym poleceniu, a nie po wyjściu z powłoki:
Uważam jednak sesję ekranową za „idealne” rozwiązanie.
źródło
Po szybkich badaniach (i przemyśleniu) mogę podać ci następującą listę możliwych opcji:
conspy
.screen
. Jeśli chcesz tylko pomóc jej, a nie szpiegować, może chcieć uruchomić sesję na ekranie. Następnie możesz po prostu dołączyć do jej sesji przezsudo -u herUsername screen -x
cat /dev/pts/X | tee /dev/pts/X
było pierwszą rzeczą, jaka przyszła mi do głowy. Ale po próbie tak naprawdę nie działa i jest bardzo brudnym rozwiązaniem. Każdy znak jest drukowany tylko na jednym z dołączonych terminali (co jest również powodem wywołaniatee
). Podczas wypróbowania mógłbym szpiegować każdą sekundę postaci. Przy odrobinie wyobraźni możesz odgadnąć, co zamierza…źródło
Ekran GNU jest jak dotąd najlepszym wyróżnieniem IMO. Jeśli ekran GNU (lub tmux) nie jest dostępny, poproś współpracownika
script -f
.A potem możesz obserwować, co ona robi, robiąc
tail -fn +0 /path/to/typescript
.źródło
Aby udostępnić terminal ekranowy systemu Unix, abyś mógł zobaczyć dane wejściowe i wyjściowe współpracownika w czasie rzeczywistym, użyj
screen
polecenia Unix .Wpisujesz polecenie
screen -d -m -S myscreenname
screen -x myscreenname
(Oczywiście zamień myscreenname na dowolną nazwę ekranową).
Współpracownik wpisuje polecenie
screen -x myscreenname
Aby zakończyć udostępnianie terminali Unix, każda osoba może wpisać polecenie
exit
Świetną funkcją screena jest to, że możesz wpisywać polecenia z terminala uniksowego, a współpracownik widzi wynik na swoim ekranie. Jest to doskonały sposób na administrowanie parami i mentora młodszych administratorów Unix.
źródło
Aby wypełnić odpowiedź @ jordanm ... jeśli oboje korzystacie z tego samego konta użytkownika, tj. Z danych wyjściowych
jest to samo dla ciebie i twojego współpracownika, wtedy możemy się zabawić.
Możemy umożliwić przeglądanie wywoływanych poleceń w jednym terminalu, aby były natychmiast dostępne w innym
Jeśli wywołasz
history
w swoim terminalu, zobaczysz poprzednie polecenia. Domyślnie bash zapisuje swoją historię na koniec każdej sesji do a~/.bash_history file
, zastępując istniejący plik zaktualizowaną wersją. Oznacza to, że jeśli jesteś zalogowany z wieloma sesjami bash, tylko ostatnia, która zakończy działanie, będzie miała zapisaną historię.-------------------------------------------------- -----
Edytuj swój
~/.bashrc
i dodaj do niegogdzie
history -a
dołącza do~/.bash_history
pliku natychmiast zamiast na końcu sesjihistory -c
usuwa bieżącą historię sesjihistory -r
odczytuje~/.bash_history
plik, do którego dołączyliśmy, z powrotem do naszej historii sesjiUwaga: parametr zawiera polecenia, które są wykonywane przed każdym nowym wiersza poleceń. tak command1 zostaną zapisane tylko do historii, kiedy polecenie2 jest wykonywane
PROMPT_COMMAND
Możesz także kliknąć znacznik czasu obok każdego polecenia, aby ułatwić sobie przeglądanie historii. Ponownie edytuj
~/.bashrc
i dołączRównież fajny hack, jeśli lubisz korzystać z wielu terminali i chcesz mieć dostęp do historii poleceń :)
Więcej informacji
źródło