На Linux системите има доста начини да се запази изходът от командния ред към файловете. Всеки действа по различен начин и спестява различни неща.

Тези команди са полезни във всички Linux дистрибуции и дори могат да се използват на Mac и BSD. Единственото нещо, за което трябва да помислите, е коя команда е най-добре да свършите тази работа.

Unix и тръби

Преди да се потопите в командите, трябва да знаете малко история. Нищо от това не е специфично за Linux. Всъщност идва от старата операционна система Unix, разработена от Bell Labs. Linux, Mac и BSD са всички Unix-подобни операционни системи, които могат да проследят своето родословно дърво до Unix.

Една от основните идеи на Unix е да направи всичко от малки програми, които можете да свържете заедно, за да правите по-големи и по-сложни неща. Ето защо можете да комбинирате Linux командите, за да ги накарате да работят заедно.

Има няколко начина да се съберат командите на Linux (и Unix) и да ги накарате да работят заедно. Най-честата, с която ще се сблъскате, е | характер. Единственият пип, както се нарича, преминава изхода на една команда към друга.

Ще срещнете |& оператора |& . Той предава изхода и грешките на следващата команда.

Всеки метод в това ръководство по същество е просто начин за командите на Unix да предават информация. Вместо данните за тръбопроводите между командите, те насочват данните към изхода. В този случай този изход е файл.

Настройвам

Преди да отидете по-нататък, има няколко неща, които да настроите, за да направите теста по-лесен. Като ваш root потребител, създайте няколко папки в домашната директория на обикновения потребител. Променете разрешенията им, за да ги направите нечетливи.

 sudo mkdir Fail1 sudo mkdir Файл 2 sudo chmod 000 Fail1 sudo chmod 000 Fail2 

Ще използвате командата du да тествате и това ще повдигне грешки, когато срещне тези файлове.

Пренасочване на изхода без грешки

Най-често срещаният и основен начин за пренасочване на изхода от терминала във файл е да се използват операторите > и >> . Те насочват само изхода към определен текстов файл. Те не пренасочват грешките. Тези ще продължат да се появяват в терминала.

Операторът > пренасочва изхода към файл и презаписва съдържанието на този файл.

 ду-h ./*> папка-size.txt 

За разлика от това операторът >> работи по същия начин, но прибавя изхода към края на файла.

 ду-h ./* >> папка-размер.txt 

Записване само на грешки

Тези двама оператори са точно обратното на първите. Те записват само грешки, докато те показват изхода в терминала.

Използвайки оператора 2> изпраща грешките от командата до лог файл, като го презаписва. Редовният изход ще продължи да се показва в терминала.

 ду-h ./* 2> errors.log 

За да постигнете едни и същи резултати без презаписване, използвайте 2>> .

 ду-h ./* 2 >> грешки.log 

Запазване на всичко, Покажи нищо

Ако проявявате интерес към вписването на всичко, следващият набор оператори ви е покрил. Те пренасочват всички изходи към файловете, без да показват нищо в терминала.

Операторът &> пренасочва изхода и грешките към файл и го презаписва.

 ду-з ./* &> диск_у.лок 

Подобно на останалите, ако не искате да презапишете, за това има придружаващ оператор.

 ду-h ./* & >> disk_use.log 

Показване на всичко, запазване на изхода

Можете също да показвате всичко в терминала и да регистрирате само изхода. Можете да постигнете това, като изпратите командата си до командата за tee .

tee действа като T сплитер в водопровод. Тя насочва потока в две посоки. Тъй като операторът просто преминава изход, полученият файл също ще съдържа само изход, а не грешки.

 ду-h ./* | tee output.txt 

По подразбиране те се презаписва. За да запазите съществуващия файл, добавете флага -a .

 ду-h ./* | tee -a output.txt 

Показване и запазване на всичко

И накрая, можете да пренасочите оператора |& към командата tee да покажете всичко и да го регистрирате.

 ду-h ./* | & tee output.txt 

За да избегнете презаписването, добавете флага -a към tee .

 ду-h ./* | & tee -a output.txt 

Облечи

Ясно е, че има много опции, когато става дума за пренасочване и запазване на изхода на команди на терминал на Linux към файл. Някои от тях са по-полезни от други, но всички те могат да бъдат използвани в широк спектър от скриптове, за да контролират потока от информация по възможно най-UNIX начин.