Làm thế nào để lưu đầu ra của một lệnh vào một tập tin trong Linux
Trên các hệ thống Linux, có một vài cách để lưu đầu ra dòng lệnh vào các tệp. Mỗi hoạt động khác nhau và tiết kiệm những thứ khác nhau.
Các lệnh này hữu ích trên tất cả các bản phân phối Linux và thậm chí có thể được sử dụng trên các máy Mac và BSD. Điều duy nhất bạn phải suy nghĩ là lệnh nào là tốt nhất để hoàn thành công việc.
Unix và đường ống
Trước khi bạn đi sâu vào các lệnh, bạn nên biết một chút lịch sử. Không có điều nào cụ thể đối với Linux. Nó thực sự xuất phát từ hệ điều hành Unix cũ được phát triển bởi Bell Labs. Linux, Mac và BSD là tất cả các hệ điều hành giống Unix có thể theo dõi cây gia đình của họ thành Unix.
Một trong những ý tưởng cốt lõi đằng sau Unix là tạo ra mọi thứ từ các chương trình nhỏ mà bạn có thể kết hợp với nhau để làm những việc lớn hơn và phức tạp hơn. Đó là lý do tại sao bạn có thể kết hợp các lệnh Linux để làm cho chúng hoạt động cùng nhau.
Có một vài cách để tập hợp các lệnh Linux (và Unix) và làm cho chúng hoạt động cùng nhau. Một trong những phổ biến nhất bạn sẽ gặp phải là |
tính cách. Các pip đơn, như nó được gọi là, vượt qua đầu ra của một lệnh khác.
Bạn cũng sẽ đi qua toán tử |&
. Nó chuyển cả đầu ra và lỗi tới lệnh tiếp theo.
Mỗi phương pháp trong hướng dẫn này về cơ bản chỉ là một cách để các lệnh Unix truyền đi thông tin. Thay vì đường ống dữ liệu giữa các lệnh, chúng hướng dữ liệu đến đầu ra. Trong trường hợp này, đầu ra đó là một tệp.
Thiết lập
Trước khi bạn tiến xa hơn, có một số điều cần thiết để làm cho việc kiểm tra dễ dàng hơn. Là người dùng root của bạn, hãy tạo một vài thư mục trong thư mục chính của người dùng thông thường của bạn. Thay đổi quyền của họ để làm cho họ không đọc được.
sudo mkdir Fail1 sudo mkdir Fail2 sudo chmod 000 Fail1 sudo chmod 000 Fail2
Bạn sẽ sử dụng lệnh du
để kiểm tra, và nó sẽ tăng lỗi khi nó gặp các tệp đó.
Chuyển hướng đầu ra mà không có lỗi
Cách phổ biến nhất và cơ bản để chuyển hướng đầu ra từ thiết bị đầu cuối vào một tệp là sử dụng toán tử >
và >>
. Chúng chỉ dẫn đầu ra đến một tệp văn bản được chỉ định. Họ không chuyển hướng lỗi. Những người đó vẫn sẽ xuất hiện trong nhà ga.
Toán tử >
chuyển hướng đầu ra thành một tệp và ghi đè nội dung của tệp đó.
du -h ./*> thư mục-size.txt
Ngược lại, toán tử >>
hoạt động theo cùng một cách nhưng nối thêm đầu ra vào cuối tệp.
du -h ./* >> thư mục-size.txt
Chỉ lưu lỗi
Hai toán tử tiếp theo này hoàn toàn trái ngược với các toán tử đầu tiên. Chúng chỉ lưu các lỗi, trong khi chúng hiển thị đầu ra trong thiết bị đầu cuối.
Sử dụng toán tử 2>
gửi các lỗi từ một lệnh đến tệp nhật ký, ghi đè lên nó. Đầu ra thông thường sẽ vẫn hiển thị trong thiết bị đầu cuối.
du -h ./* 2> errors.log
Để đạt được kết quả tương tự mà không ghi đè, hãy sử dụng 2>>
.
du -h ./* 2 >> errors.log
Lưu mọi thứ, Hiển thị không có gì
Nếu bạn quan tâm đến việc ghi nhật ký mọi thứ, tập hợp các toán tử tiếp theo bạn đã bảo hiểm. Chúng chuyển hướng tất cả đầu ra tới các tệp mà không hiển thị bất kỳ thứ gì trong thiết bị đầu cuối.
Toán tử &>
chuyển hướng đầu ra và lỗi đến tệp và ghi đè lên nó.
du -h ./* &> disk_use.log
Giống như những người khác, nếu bạn không muốn ghi đè, có một toán tử đi kèm cho điều đó.
du -h ./* & >> disk_use.log
Hiển thị mọi thứ, lưu đầu ra
Bạn cũng có thể hiển thị mọi thứ trong thiết bị đầu cuối và chỉ ghi lại đầu ra. Bạn có thể đạt được điều này bằng cách đặt lệnh của bạn vào lệnh tee
.
tee
hành vi như một splitter T trong hệ thống ống nước. Nó hướng dòng chảy theo hai hướng. Kể từ khi |
toán tử chỉ truyền đầu ra, tệp kết quả cũng sẽ chỉ chứa đầu ra chứ không phải lỗi.
du -h ./* | tee output.txt
Theo mặc định, tee
ghi đè. Để bảo vệ tệp hiện có, hãy thêm cờ -a
.
du -h ./* | tee -a output.txt
Hiển thị và lưu tất cả
Cuối cùng, bạn có thể chuyển hướng bằng toán tử |&
tee
tới lệnh tee
để hiển thị mọi thứ và ghi lại nó.
du -h ./* | & tee output.txt
Để tránh ghi đè, hãy thêm cờ -a
vào tee
.
du -h ./* | & tee -a output.txt
Gói lại
Rõ ràng, có rất nhiều tùy chọn khi nói đến việc chuyển hướng và lưu đầu ra của các lệnh thiết bị đầu cuối Linux vào một tệp. Một số trong số chúng hữu ích hơn những cái khác, nhưng tất cả chúng có thể được sử dụng trong một loạt các tập lệnh để kiểm soát luồng thông tin theo cách Unix nhất có thể.