다른 쉘에서 실행 된 명령을 보는 방법은 무엇입니까?


9

다른 쉘에서 실행되는 명령을 볼 수있는 방법이 있습니까? 두 쉘 모두 bash이며 루트 액세스 권한이 있습니다. 추가 소프트웨어를 설치할 수 없으며 다른 셸에서 실행 화면과 같은 특별한 작업을 수행하고 싶지 않습니다.

상황 : Linux 시스템에 원격으로 로그인했으며 동료도 마찬가지입니다. 그녀가 쉘에서 실행중인 명령을보고 싶습니다. 나는 몇 가지 조합을 사용할 수 있다는 것을 알고 watchps이상 실행에 두 번째보다 더 걸릴 모든 명령을 볼 수 있지만, 나는 그것이 매우 짧은 명령으로 도움이 될 믿지 않는다.


5
와 같은 내장 명령 killcd하위 프로세스를 생성하지 않으며 ps 출력에 나타나지 않습니다.
jordanm

@jordanm 감사합니다. 좋은 지적입니다. 포크 / 실행을 유발하는 명령만으로도 충분할 것입니다.
Tom Panning

답변:


7

당신은 루트이기 때문에 항상 할 수 strace -f -e execve -p her_bash_pid있습니다. 는 -f그녀의 쉘이되기 전에 새로운 프로세스를 포크 때문에 필요하다 exec,하지만 당신은 자식 프로세스뿐만 아니라 실행하는 것이 아무 것도 볼 수 있음이 또한 의미합니다.


고마워, exec에 대한 strace의 출력을 grepping하면 상당히 읽을 수 있습니다. 나는 아이들의 아이들을 계속 따르는 것이 언젠가 나를 혼란스럽게 할 것이라고 확신하지만, 지금은 안전하다고 생각합니다. exec를 호출 한 후 프로세스에서 자동으로 분리 할 수있는 방법이 없다는 것은 부끄러운 일입니다.
톰 패닝

오픈 소스입니다. 필요한 경우 언제든지 해당 기능을 추가 할 수 있습니다. :) 또는 PID가 무시되면 strace 출력을 구문 분석하는 좀 더 지능적인 스크립트를 추가하십시오 exec.
Jim Paris

5

동료가 bash 쉘에 대한 일부 히스토리 설정을 수정할 수있는 경우 tail -f /home/user/.bash_history에서이 정보를 얻을 수 있습니다. 다음은 쉘 종료가 아닌 각 명령 후에 .bash_history를 작성하는 데 필요한 설정입니다.

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

그러나 스크린 세션은 "이상적인"솔루션이라고 생각합니다.


5

빠른 연구 (그리고 약간의 생각) 후 가능한 옵션의 다음 목록을 제공 할 수 있습니다.

  • 그녀의 bash_history를 읽으십시오. 그러나 일반적으로 로그 아웃시에만 작성됩니다. askubuntu.com 은 그 행동을 바꾸는 것에 대한 게시물을 가지고 있습니다 ( 편집 : @jordanm은 분명히 같은 생각을 가지고 게시하기가 더 빠릅니다 ...).
  • 물리적 터미널 (/ dev / ttyX)에있는 경우 프로그램을 사용할 수 있습니다 conspy.
  • 그녀를 사용하십시오 screen. 그녀를 돕고 간첩하고 싶지 않으면 그녀는 화면 내에서 세션을 기꺼이 실행할 수 있습니다. 그런 다음 간단하게 세션에 첨부 할 수 있습니다.sudo -u herUsername screen -x
  • 명령을 선택한 로그 파일에 기록하는 쉘 랩퍼 스크립트를 작성할 수 있습니다. 쉘을 해당 스크립트로 설정해야합니다 (이것은 단지 아이디어 일 수도 있고 작동하지 않을 수도 있습니다).
  • 사용하는 cat /dev/pts/X | tee /dev/pts/X것이 가장 먼저 떠 올랐습니다. 그러나 시도 후에는 실제로 작동하지 않으며 매우 더러운 솔루션입니다. 모든 문자는 연결된 터미널 중 하나에 만 인쇄됩니다 (이것은 호출 이유 tee이기도합니다). 그것을 시도 할 때마다 두 번째 캐릭터를 감시 할 수 있습니다. 약간의 상상력으로 그녀가 무엇을하고 있는지 추측 할 수 있습니다 ...

잘못 : conspy는 ttys와 작동하지 않습니다
Zibri

3

GNU 화면은 지금까지 IMO 최고의 표창입니다. GNU 화면 (또는 tmux)을 사용할 수 없으면 동료에게 실행을 요청하십시오 script -f.

그리고 당신은 그녀가 무엇을하고 있는지 볼 수 있습니다 tail -fn +0 /path/to/typescript.


0

Unix 화면 터미널을 공유하여 동료의 입력 및 출력을 실시간으로 보려면 Unix screen명령을 사용하십시오 .

  1. 귀하와 동료는 ssh에서 동일한 Unix 사용자로 로그인합니다
  2. 당신은 명령을 입력

    screen -d -m -S myscreenname

    screen -x myscreenname

    (물론 myscreenname을 원하는 화면 이름으로 바꾸십시오).

  3. 동료가 명령을 입력합니다

    screen -x myscreenname

  4. 유닉스 터미널 공유를 마치려면 두 사람이 명령을 입력하면됩니다.

    exit

화면의 가장 큰 특징은 Unix 터미널에서 명령을 입력 할 수 있고 동료가 화면에서 출력을 볼 수 있다는 것입니다. 페어 관리자 및 주니어 유닉스 관리자를 멘토링하는 훌륭한 방법입니다.


0

@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추가 한 파일을 세션 기록으로 다시 읽습니다.

참고 : 매개 변수가 실행되는 명령을 포함 하기 전에 프롬프트 각각의 새로운 명령을 사용합니다. 따라서 command1command2 가 실행될 때만 히스토리에 저장됩니다.PROMPT_COMMAND

히스토리를 볼 때 편의를 위해 각 명령 옆에 타임 스탬프를 기록 할 수도 있습니다. 다시 편집 ~/.bashrc하고 추가하십시오.

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

여러 터미널을 사용하고 명령 기록을 사용하려는 경우에도 좋은 해킹 :)

더 많은 정보

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.