Как да запазите изхода на команда към файл в Linux
На 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 начин.