bash 쉘 출력 히스토리 파일 위치


13

bash 쉘은 실제 터미널 세션을 어디에 저장합니까? 이전에 사용한 명령의 출력을 읽고 싶습니다. 인터넷 검색에서 찾을 수있는 것은 명령 출력을 저장하는 방법입니다.

출력은 화면에 표시되므로 어딘가에 저장해야합니다. 내 질문은 : 어디?

답변:


11

Bash는 실행 한 명령의 이력 만 저장합니다 (을 입력하여 검색 할 수 있음 history). 스크롤 백 을 매우 높은 숫자로 설정 하지 않은 경우 , 스크롤 백 설정 값보다 오래된 출력을 볼 수있는 방법이 없습니다. 또한이 값을 매우 높은 숫자로 설정하면 행이 메모리에 저장 되므로 스크롤이 느려 집니다.

향후 명령 및 출력을 저장하기 위해 몇 가지 옵션이 있습니다.

사용 screen

을 입력 하여 스크린 세션을 시작하십시오 screen. 화면 내부에 있으면 Ctrl- a을 누른 :다음을 입력하십시오 log. 모든 I / O는 명령 screenlog을 시작한 디렉토리의 파일에 캡처됩니다 screen.

사용 script

을 입력하여 시작할 수 있습니다 script. 모든 I / O를라는 파일에 캡처 하는 스크립트 세션이 시작됩니다 typescript. 당신은 종료 할 수 있습니다 script에 의해 세션 Ctrl- d 과의 로그를 볼 typescript파일.

사용 tee

는 편리한 도구입니다. 다음과 같이 할 수 있습니다 :

$ bash | tee log.txt

그러면 이미 실행중인 bash 쉘이 열립니다. 이 exit중 하나에서 파일의 출력을 볼 수 있습니다.log.txt

다른 방법들

더스틴 커클랜드 (Dustin Kirkland) 가이 게시물 에서 제안한대로 byobu 를 사용할 수도 있습니다 . 필자는 사용한 적이 없지만 Shelr 과 같은 터미널 스크린 캐스팅 도구 도 옵션처럼 들립니다.


6

이 질문과 관련하여 많은 질문이 있지만 모두 출력이 기록되지 않는다는 (오른쪽) 가정으로 시작합니다.

내 질문은 : 어디?

어디에도 없습니다 : Bash (및 내가 아는 다른 쉘) 출력은 기록되지 않습니다.

출력은 화면에 표시되므로 어딘가에 저장해야합니다.

디스크에 있지는 않지만 평범한 텍스트는 아니지만 아마도 터미널 에뮬레이터에 달려 있지만 대부분 터미널 에뮬레이터에 의해 할당 된 메모리 세그먼트 일 가능성이 높습니다.

그러나 확실히 그것은 쉘에 의해 파일에 기록되지 않으며 기본적으로 출력을 파일에 기록하는 터미널 에뮬레이터에 대해서는 알지 못합니다.

실제로 이것이 터미널 출력을 기록하는 것이 불가능하다는 것을 의미하지는 않습니다. 먼저 여기에 적어도 Ubuntu에 대해 언급 한 사람을 보지 못했기 때문에 많은 사람들이 알지 못하는 것으로 언급 할 것입니다 .Konsole은 파일로 스크롤 백 (아마도 그러한 기능을 제공하는 다른 터미널 에뮬레이터가 있으며 Konsole은 내가 아는 유일한 것입니다). 이것은 Konsole의 스크롤 백 크기 제한에 의해 제한됩니다.

이것은 종종 유용하지는 않지만 전체 세션의 출력을 파일에 기록하기 위해 "적절한"솔루션을 찾고 싶을 것입니다 ( 터미널 세션에서 모든 입력 및 출력을 어떻게 기록합니까?Ron의 답변 ).


1

설치되지 않은 경우 script라는 이름의 명령 apt-get install script이 있습니다.

그런 다음 터미널에 script를 입력하십시오.

그리고 원하는 것을 수행하십시오. 종료 한 후 exit를 입력하면 모든 stdout 및 stdin 정보와 함께 현재 디렉토리에 파일이 작성됩니다.

그것이 당신을 도울 수 있기를 바랍니다.


패키지는 우분투 18.04에서 NA
markroxor

1

이것은 쉘 ( bash) 과 관련이 없으며 사용중인 터미널 에뮬레이터의 기능입니다. 터미널의 "스크롤 백 버퍼"에 저장됩니다. 정확히 이것이 저장된 위치에 대한 명확한 설명을 찾을 수 없었지만 개인 경험 에 따르면 어딘가에 저장되어 있음을 보여주었습니다 /tmp.

위의 질문에 대한 답변에서 알 수 있듯이 대부분 이름없는 파일에 저장됩니다. 무슨 뜻인지 보려면 텍스트 편집기로 새 파일을여십시오.

gedit newfile

파일에 텍스트 줄을 쓰고 저장하십시오. 이제 파일이 열려있는 동안 터미널을 열고 삭제하십시오.

rm newfile

파일이 아직 열려 gedit있으므로 계속 쓸 수 있습니다. 파일이 삭제되었다는 사실에도 불구하고 몇 기가 바이트의 데이터를 쓸 수도 있습니다. 파일을 삭제하면 단순히 inode를 가리키는 링크가 제거되기 때문 입니다. 파일 디스크립터 가 다른 프로그램에 의해 열려 있으면 데이터를 쓸 수 있으며 파일 시스템의 파일 디스크립터에 해당하는 실제 링크 (파일)가 더 이상 존재하지 않습니다.

이 모든 것은 터미널의 기록이에있는 삭제 된 파일의 어딘가에 같은 트릭을 사용하여 저장되었다고 말합니다 /tmp. 실제로 원하는 것은 터미널 에뮬레이터의 스크롤 버퍼 크기를 늘리면 위로 스크롤하여 볼 수 있습니다. 이 작업을 수행하는 방법에 대한 자세한 내용은 사용중인 터미널 에뮬레이터에 따라 다릅니다. 대부분 명령 줄 스위치가있어이를 설정하고 GUI를 설정하는 방법도 있습니다. 예를 들어 gnome-terminal(Ubuntu의 기본값)에서 편집-> 환경 설정-> 프로파일 --- 프로파일을 클릭하십시오.-> 편집-> 스크롤-> 스크롤 백을 NNN으로 제한하십시오.

그놈 터미널 옵션 화면


흥미로운 통찰력. 내가 EG 파이썬이 기록 된 모든 즉 터미널에 cout을 액세스 갖고 싶어 : 터미널에서 더 긴 역사를 검사하는 것은 내가 비록 원하는 것이 아니다
다니엘 Böckenhoff

@ DanielBöckenhoff 그런 다음 아마도 script허용되는 답변에 설명 된대로 원할 것입니다 .
terdon

확실한. 나는 그것을 :) 가능
다니엘 Böckenhoff

-2

터미널 세션은 .bash_history파일에 저장 됩니다. 이것을 터미널에 입력하면 파일 echo $HISTFILE경로가 제공 .bash_history됩니다.


2
이것은 명령출력 이 아닌 이전에 실행 된 명령 만 제공 합니다.
Ron
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.