bash shell vị trí tập tin lịch sử đầu ra


13

Trường hợp bash shell lưu trữ phiên thiết bị đầu cuối thực tế? Tôi muốn đọc đầu ra của các lệnh tôi đã sử dụng trước đây. Tất cả những gì tôi có thể tìm thấy là làm thế nào để lưu trữ đầu ra của một lệnh.

Vì đầu ra được hiển thị trên màn hình, dù sao nó cũng phải được lưu trữ ở đâu đó. Vậy câu hỏi của tôi là: ở đâu?

Câu trả lời:


11

Bash chỉ lưu trữ lịch sử của các lệnh bạn đã chạy (mà bạn có thể truy xuất bằng cách nhập history). Trừ khi bạn đã đặt cuộn ngược lại thành một số rất cao, không có cách nào để xem các đầu ra cũ hơn giá trị cài đặt của cuộn ngược lại. Ngoài ra, việc đặt giá trị này thành một số rất cao sẽ khiến việc cuộn của bạn chậm chạp vì các dòng được lưu trong bộ nhớ .

Để lưu trữ các lệnh trong tương lai của bạn và đầu ra của chúng, có một vài tùy chọn:

Sử dụng screen

Bắt đầu một phiên màn hình bằng cách nhập screen. Khi bạn ở trong màn hình, nhấn Ctrl- a, sau đó :, sau đó nhập log. Tất cả I / O sẽ được ghi lại trong screenlogcác tệp trong thư mục nơi bạn bắt đầu screenlệnh.

Sử dụng script

Bạn có thể bắt đầu bằng cách gõ script. Một phiên script sẽ bắt đầu sẽ ghi lại tất cả I / O vào một tệp có tên typescript. Bạn có thể thoát scriptphiên bằng cách Ctrl- d và xem nhật ký trong typescripttệp.

Sử dụng tee

tee là một công cụ tiện dụng. Bạn có thể làm một cái gì đó như thế này:

$ bash | tee log.txt

Điều này sẽ mở một vỏ bash mới bên trong cái vỏ bạn đang chạy. Khi bạn exitthoát khỏi điều này, bạn có thể thấy các đầu ra trong tệp có tênlog.txt

Những cách khác

Như Dustin Kirkland đã đề xuất trong bài đăng này , bạn cũng có thể sử dụng byobu . Mặc dù, tôi chưa bao giờ sử dụng, các công cụ ghi lại thiết bị đầu cuối như Shelr cũng có vẻ như là một tùy chọn.


6

Có rất nhiều câu hỏi liên quan đến câu hỏi này, nhưng tất cả đều bắt đầu với giả định (phải) rằng đầu ra không được ghi lại.

Vậy câu hỏi của tôi là: ở đâu?

Không ở đâu: đầu ra của Bash (và bất kỳ shell nào khác mà tôi biết) không được ghi lại.

Vì đầu ra được hiển thị trên màn hình, dù sao nó cũng phải được lưu trữ ở đâu đó.

Đó là, nhưng rất có thể không phải là văn bản đơn giản và thậm chí không có trên đĩa (mặc dù điều này thực sự phụ thuộc vào trình giả lập thiết bị đầu cuối): rất có thể, và ít nhất là trong hầu hết các trường hợp, trong một phân đoạn bộ nhớ được cấp bởi trình giả lập thiết bị đầu cuối.

Tuy nhiên, để chắc chắn rằng nó không được ghi vào một tệp, ít nhất là không phải bởi trình bao và tôi không biết các trình giả lập đầu cuối ghi nhật ký đầu ra vào một tệp theo mặc định.

Quả thực điều này không có nghĩa là không thể đăng nhập đầu ra thiết bị đầu cuối: đầu tiên tôi sẽ đề cập đến một điều mà tôi nghĩ rằng không nhiều người biết đến, vì tôi chưa bao giờ thấy ai đề cập đến điều này ít nhất ở đây trên Ask Ubuntu: Konsole cho phép lưu cuộn ngược lại một tập tin (có lẽ có các trình giả lập thiết bị đầu cuối khác cung cấp chức năng như vậy, Konsole chỉ là người duy nhất tôi biết), mặc dù điều này bị giới hạn bởi giới hạn kích thước cuộn lại của Konsole.

Tuy nhiên, điều này thường không thực sự hữu ích và rất có thể bạn sẽ muốn xem xét các giải pháp "phù hợp" để ghi nhật ký đầu ra của toàn bộ phiên vào một tệp ( Làm cách nào để ghi nhật ký tất cả đầu vào và đầu ra trong phiên cuối?câu trả lời của Ron ).


1

Có một lệnh có tên là script, nếu không được cài đặt thì apt-get install scriptsẽ thực hiện.

Sau đó, trong thiết bị đầu cuối chỉ cần gõ tập lệnh.

và làm những gì bạn muốn, sau khi bạn hoàn thành, chỉ cần gõ exit và sau đó sẽ có một tệp được tạo tại thư mục hiện tại của bạn với tất cả thông tin stdout và stdin.

hy vọng nó sẽ giúp bạn


Gói là NA trong phiên bản Ubuntu 18.04
markroxor

1

Điều này không liên quan gì đến shell của bạn ( bash), nó không phải là một tính năng của trình giả lập thiết bị đầu cuối mà bạn đang sử dụng. Nó được lưu trữ trong "bộ đệm cuộn" của thiết bị đầu cuối của bạn. Tôi không thể tìm thấy bất kỳ lời giải thích rõ ràng nào về nơi chính xác nơi này được lưu trữ, nhưng kinh nghiệm cá nhân đã cho tôi thấy rằng nó được lưu trữ ở đâu đó /tmp.

Như câu trả lời của câu hỏi liên quan đến ở trên cho thấy, rất có thể nó được lưu trữ trong một tệp không tên. Để xem ý tôi là gì, hãy mở một tệp mới bằng trình soạn thảo văn bản:

gedit newfile

Viết một dòng văn bản vào tập tin và lưu nó. Bây giờ, trong khi tệp đó vẫn đang mở, hãy mở một thiết bị đầu cuối và xóa nó:

rm newfile

Vì bạn vẫn mở tệp gedit, bạn có thể tiếp tục ghi vào tệp. Bạn thậm chí có thể ghi vài gigabyte dữ liệu vào đó, mặc dù thực tế là tệp đã bị xóa. Đó là vì xóa một tập tin đơn giản là loại bỏ các liên kết trỏ đến nó inode . Nếu bộ mô tả tệp của nó được giữ bởi một chương trình khác, dữ liệu có thể được ghi vào nó, coi thường thực tế là không còn liên kết thực tế (tệp) tương ứng với bộ mô tả tệp trên hệ thống tệp.

Tất cả điều này là để nói rằng lịch sử của thiết bị đầu cuối của bạn có thể được lưu bằng cách sử dụng một mẹo như thế, ở đâu đó trong một tệp bị xóa /tmp. Những gì bạn có thể thực sự muốn là chỉ cần tăng kích thước bộ đệm cuộn của trình giả lập thiết bị đầu cuối của bạn để bạn có thể chỉ cần cuộn lên và xem nó. Các chi tiết về cách thực hiện việc này phụ thuộc vào trình giả lập thiết bị đầu cuối mà bạn đang sử dụng. Hầu hết đều có một công tắc dòng lệnh cho phép bạn và điều này và nhiều người cũng có cách thiết lập GUI. Ví dụ: trong gnome-terminal(mặc định trên Ubuntu), đó là Chỉnh sửa -> Tùy chọn -> Cấu hình --- nhấp vào hồ sơ của bạn -> Chỉnh sửa -> Cuộn -> Giới hạn cuộn ngược lại NNN:

màn hình tùy chọn gnome-terminal


Cái nhìn sâu sắc thú vị. Kiểm tra một lịch sử lâu dài hơn trong thiết bị đầu cuối không phải là điều tôi muốn: Tôi muốn có quyền truy cập vào cout đến thiết bị đầu cuối, tức là tất cả những gì đã được viết ở đó TỪ EG PYTHON
Daniel Böckenhoff

@ DanielBöckenhoff thì có lẽ bạn muốn scriptnhư được mô tả trong câu trả lời được chấp nhận.
terdon

Chắc chắn rồi. Tôi đã chấp nhận nó :)
Daniel Böckenhoff

-2

Phiên cuối được lưu trữ trong .bash_historytập tin. Nhập cái này vào terminal của bạn echo $HISTFILE, cái này sẽ cung cấp cho bạn đường dẫn của .bash_historytệp.


2
Điều này chỉ cung cấp các lệnh chạy trước đó , không phải đầu ra của các lệnh.
Ron
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.