Lưu trữ dữ liệu xuất ra của một lệnh Linux vào file

Thông thường, trong khi làm việc trên terminal Linux, bạn có thể muốn lưu đầu ra của lệnh vào một file. File này có thể được sử dụng làm thông tin cho một hoạt động khác hoặc để ghi nhật ký hoạt động của terminal. Dưới đây là 4 cách khác nhau trong đó để lưu nội dung terminal trong một file.

Các phương pháp sau đây có thể áp dụng trên tất cả những bản phân phối Linux và thậm chí có thể được sử dụng trên máy Mac và BSD. Điều duy nhất bạn phải cân nhắc là phương pháp nào tốt nhất để hoàn thành công việc.

1. Sử dụng toán tử chuyển hướng

Cách cơ bản và phổ biến nhất để chuyển hướng đầu ra từ terminal vào một file là sử dụng các toán tử >>>. Chúng chuyển hướng đầu ra vào một file văn bản được chỉ định.

Toán tử > chuyển hướng đầu ra thành một file và ghi đè lên nội dung của file đó trong khi toán tử >> nối đầu ra vào cuối file. Đây là một ví dụ minh họa:

Đầu tiên tạo một file bằng cách sử dụng lệnh touch.

Bây giờ, một dòng được đưa vào “file1.txt” bằng cách sử dụng toán tử >. Có thể coi đây như việc bỏ kết quả đầu ra của lệnh echo vào “file1.txt”.

echo "first statement" > file1.txt

Một dòng khác được đưa vào “file1.txt”.

echo "second statement" > file1.txt

Khi xem nội dung của “file1.txt”, ta thấy rằng chỉ có dòng thứ hai được lưu trữ trong file. Điều này là do toán tử > ghi đè lên nội dung file hiện có.

Nếu muốn gắn thêm nội dung vào file, thì toán tử >> cần được chỉ định.

Nếu bạn chỉ muốn lưu lỗi, thay vào đó hãy sử dụng toán tử 2>2>>.

Nếu bạn quan tâm đến việc ghi nhật ký mọi thứ, hãy sử dụng &>&>> để chuyển hướng tất cả đầu ra (bao gồm cả lỗi) vào file mà không hiển thị bất cứ điều gì trong terminal.

2. Sử dụng lệnh tee

Với các toán tử chuyển hướng được hiển thị ở trên, đầu ra của lệnh không được hiển thị trên màn hình. Nếu bạn muốn nó hiển thị đầu ra trên terminal và ghi vào một file, bạn có thể sử dụng lệnh tee.

<command> | tee -a <file_name>

Biểu tượng | chuyển đầu ra của lệnh làm đầu vào cho tee, từ đó hiển thị đầu ra trên màn hình. Nếu switch -a được chỉ định, thì tee sẽ nối đầu ra đó vào file được chỉ định, nếu không, nó sẽ ghi đè lên nội dung của file đó.

Bạn cũng có thể sử dụng toán tử |& và lệnh tee để hiển thị mọi thứ và ghi nhật ký.

<command> |& tee -a <file_name>

3. Sử dụng lệnh script

Với lệnh script, đầu ra của các lệnh được nhập sau nó sẽ tự động được ghi vào một file cho đến khi được nhắc dừng. Điều này có thể được ví như một phiên ghi lại hoạt động của terminal.

Đầu tiên, lệnh script được gọi với tên của file để lưu trữ hoạt động của terminal.

script <file_name>

Một thông báo nhắc rằng script đã bắt đầu, sau đó các lệnh được gõ lần lượt - date, pwd, lscal.

Sử dụng lệnh script
Sử dụng lệnh script

Để chấm dứt, lệnh exit được gọi. Có một thông báo rằng hoạt động “script” đã hoàn thành. Xem nội dung của “script_log.txt” bằng cách sử dụng cat. Có thể thấy rằng nội dung của file giống như một bản sao chính xác của terminal.

Nội dung của file giống như một bản sao chính xác của terminal
Nội dung của file giống như một bản sao chính xác của terminal

Nhưng chỉ khi file này được xem trong shell bằng lệnh cat, ta mới có được thông tin hoàn toàn dễ hiểu. Vì vậy, hãy thử một phương án khác, lưu đầu ra của terminal trong “2-script_log.txt”.

Commandspwdls được nhập.

Không gõ exit, cửa sổ terminal được đóng lại. Khi xem nội dung của “2-script_log.txt”, thì bạn sẽ thấy nó trống.

Khi một phiên script được bắt đầu, nội dung của phiên đó được giữ lại trong bộ nhớ và chỉ được ghi vào file khi lệnh exit được gọi. Ở đây, vì exit không được gọi, nên nội dung của phiên đó không được lưu vào “2-script_log.txt”.

Hành vi ghi đè và nối thêm của script tương tự như các toán tử chuyển hướng và lệnh tee. Switch -a nối thêm nội dung của phiên vào file hiện có trước đó. Ở đây, đầu ra của lệnh echo được gắn vào “script_log.txt”.

Bạn có thể thấy đầu ra được lưu trước đó của các lệnh date, pwd, ls, cal, theo sau là timestamp (dấu thời gian); rồi đến thông tin về phiên tiếp theo (kết thúc với dấu thời gian).

4. Sử dụng lệnh logave

logave hoạt động tương tự như tee - nó hiển thị đầu ra trên màn hình và cũng lưu vào một file. Nó được sử dụng như dưới đây:

logsave <file_name> <command>

logave ghi đầu ra của lệnh <command> vào file được chỉ định bởi <file_name>. Hãy xem kết quả đầu ra của “mylog_file.txt”.

Có rất nhiều thông tin được lưu trữ cùng với kết quả của một lệnh. Hai dấu thời gian được lưu trữ ở đây: Đầu tiên là thời điểm lệnh được bắt đầu và thứ hai là thời gian mà lệnh hoàn thành việc thực thi.

Đầu ra của nhiều lệnh có thể được thêm vào cùng một file khi switch -a được sử dụng với logave.

logsave -a <file_name> <command>

Khi xem nội dung của mylog_file.txt, thì bạn sẽ thấy rằng đầu ra của hai lệnh đã nhập trước đó được phân định bởi một dòng.

Thứ Sáu, 31/01/2020 09:40
4,73 👨 3.593