Как видеть команды, выполняемые в другой оболочке?

Я, должно быть, упустил суть здесь, потому что я использовал бы:

:find **/somefile.txt

(если я знал, что был только один в моем :echo &path ) или, если я хотел их всех:

:args **/somefile.txt

Править: Стоп! Хорошо, таким образом, я действительно упускал суть - Вы хотите список находки, не фактические открытые файлы? Попробуйте (снова из Vim):

!!find . -name somefile.txt

- мое плохое :)

9
08.11.2012, 19:45
6 ответов

Так как Вы - корень, Вы всегда могли strace -f -e execve -p her_bash_pid. -f необходимо, потому что ее оболочка разветвит новый процесс перед exec, но это также означает наблюдение чего-либо, что дочерние процессы выполняют также.

7
27.01.2020, 20:05
  • 1
    Спасибо, захватывая вывод strace для должностного лица делает это довольно читаемым. Я уверен, что то, что это сохраняет следующих детей детей, смутит меня однажды, но на данный момент я думаю, что буду в безопасности. Это - позор, что нет никакого способа автоматически отсоединиться от процесса после того, как это вызывает должностное лицо. –  Tom Panning 08.11.2012, 22:11
  • 2
    Это - открытый исходный код; Вы могли всегда добавлять ту опцию при реальной необходимости в ней.:) Или добавьте немного более интеллектуальный сценарий, анализирующий вывод strace, который игнорирует PID однажды он execs. –  Jim Paris 08.11.2012, 22:28

Если Ваш коллега может изменить некоторые настройки истории для их оболочки удара, то можно получить эту информацию от хвоста-f/home/user/.bash_history. Вот установка, Вам будет нужно, чтобы .bash_history был записан после каждой команды, а не на выходе оболочки:

export PROMPT_COMMAND="history -a"
shopt -s histappend

Я полагал бы, что экранная сессия "идеальное" решение все же.

5
27.01.2020, 20:05

После быстрого исследования (и некоторые взгляды) я могу дать Вам следующий список возможных вариантов:

  • считайте ее bash_history. Но это обычно только пишется на выходе из системы. askubuntu.com имеет сообщение об изменении того поведения (редактирование: @jordanm, по-видимому, имел ту же идею и был быстрее для регистрации...).
  • Если бы она была на физическом терминале (/dev/ttyX), то Вы могли бы использовать программу conspy.
  • Сделайте ее использование screen. Если Вы просто хотите помочь, и не шпионить за нею она могла бы быть готова выполнить свою сессию в экране. Затем можно просто присоединить к ее сессии sudo -u herUsername screen -x
  • Вы могли записать сценарий обертки оболочки, который регистрирует команды к файлу журнала по Вашему выбору. Необходимо было бы установить ее оболочку на тот сценарий (Это - просто идея, это могло бы или не могло бы работать).
  • Используя cat /dev/pts/X | tee /dev/pts/X была первая вещь, которая прибыла по моему мнению. Но после того, как попытка действительно не работает и является очень грязным решением. Каждый символ только печатается к одному из приложенных терминалов (который является причиной вызова tee также). При испытании его я мог шпионить за каждым вторым символом. С небольшим воображением Вы могли предположить то, что она готова...
5
27.01.2020, 20:05
  • 1
    неправильно: conspy не работает с ttys –  Zibri 21.02.2018, 15:10

Экран GNU является IMO лучшая благодарность до сих пор. Если экран GNU (или tmux) не доступен, выполните Вашего коллегу script -f.

И затем можно наблюдать то, что она делает путем выполнения tail -fn +0 /path/to/typescript.

3
27.01.2020, 20:05

Для совместного использования терминала экрана Unix, таким образом, Вы видите исходные данные своего коллеги и производите в режиме реального времени, используют Unix screen команда.

  1. Вы и коллега входите в систему как тот же пользователь UNIX в ssh
  2. Вы вводите в команде

    screen -d -m -S myscreenname

    screen -x myscreenname

    (Конечно, замените myscreenname тем, чем Вы хотите, чтобы псевдоним был).

  3. Коллега вводит команду

    screen -x myscreenname

  4. Для окончания с совместным использованием терминалов Unix любой человек может ввести в команде

    exit

Замечательная особенность экрана - то, что можно ввести в командах от терминала Unix, и коллега видит вывод на своем экране. Это - отличный способ сделать парное администрирование и юниора наставника администраторы Unix.

0
27.01.2020, 20:05

Чтобы завершить ответ @jordanm ... если вы оба используете одну и ту же учетную запись пользователя, то есть вывод из

echo $HOSTNAME
echo $USER 

то же самое для вас и вашего коллеги -, тогда мы можем немного повеселиться.

Мы можем разрешить просмотр вызванных команд в одном терминале, чтобы они сразу же были доступны в другом

Если вы вызовете historyв своем терминале, вы увидите свои предыдущие команды. По умолчанию bash записывает свою историю в конце каждого сеанса в ~/.bash_history file, перезаписывая существующий файл обновленной версией. Это означает, что если вы вошли в систему с несколькими сеансами bash, только последний из них сохранит свою историю.

-------------------------------------------------------

Отредактируйте свой ~/.bashrcи добавьте к нему

export PROMPT_COMMAND="history -a; history -c; history -r; $PROMPT_COMMAND"

где

history -aдобавляется в файл ~/.bash_historyсразу, а не в конце сеанса

history -cочищает текущую историю сеансов

history -rчитает файл ~/.bash_history, к которому мы добавили, обратно в нашу историю сеансов

Примечание:параметр PROMPT_COMMANDсодержит команды, которые выполняются перед каждой новой командной строкой. поэтому команда1 будет сохранена в истории только при выполнении команда2

Вы также можете добавить временную метку рядом с каждой командой для удобства просмотра истории. Снова отредактируйте ~/.bashrcи добавьте

export HISTTIMEFORMAT="%d/%m/%y %T "

Также хороший хак, если вы хотите использовать несколько терминалов и хотите, чтобы ваша история команд была доступна:)

Подробнее

0
27.01.2020, 20:05

Теги

Похожие вопросы