Две мощни функции на shell командния ред на Linux са пренасочване и тръби, които позволяват изход (или дори вход) на дадена програма да бъде изпратена до файл или друга програма. Вероятно сте използвали тези функции, без да сте наясно с тях. Винаги, когато сте използвали знака " > " в команда или " | "Тогава сте използвали пренасочване или тръба, съответно.

На всички Unix-подобни операционни системи, като Linux и FreeBSD, изходът от програма за команден ред автоматично отива на място, известно като стандартно изходно (stdout). По подразбиране стандартен изход е екранът (конзолата), но той може да се промени с помощта на тръби и пренасочване. По същия начин клавиатурата се счита за стандартен вход (stdin) и както при стандартен изход, той може да бъде променен.

Тръби

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

Командата " more " приема стандартен вход и го поставя на стандартния изход (на екрана). Това означава, че ако командата покаже повече информация, отколкото може да се покаже на един екран, програмата " more " ще спре след първия екран пълен (страница) и ще изчака потребителят да натисне SPACE, за да види следващата страница или RETURN, за да види следващия ред.

Ето един пример, който ще изброи всички файлове, с подробности ( -la ) в директорията /dev и ще изведе изхода на more . Директорията /dev трябва да има десетки файлове и по този начин да се гарантира, че more трябва да paginate.

 ls -la / dev | Повече ▼ 

Забележете прозореца "Още" в долната част на екрана. Натиснете SPACE, за да видите следващата страница и продължавайте да натискате SPACE, докато изходът приключи.

Ето още един пример за тръба, този път използвайки инструмента " wc " (брой думи).

 ls -1 / dev | тоалетна 

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

Приложението "Дълбочив поглед в архивирането и компресирането на Linux" има пример за използване на tar и 7-цип:

 катран - 7zr a -si somefiles.tar.7z 

В този случай тирето след опцията f кани на tar да изпрати продукцията си към стандарта, а не към файла. Изходът от tar ще се подаде на тръбата в 7zr, което чака вход от стандартното в резултат на опцията -si.

Пренасочването

Пренасочването е подобно на тръбите, с изключение на използването на файлове, а не на друга програма. Стандартният изход за програмата е екранът. С помощта на символа > (по-голям от) изходът на програма може да бъде изпратен във файл. Ето директорията на /dev отново, но този път се пренасочва към файл, наречен listing.txt

 ls -la> listing.txt 

На терминала няма да се показва нищо, тъй като всичко е изпратено до файла. Можете да разгледате файла с помощта на командата cat (която може да се вкара в more ) или за удобство можете да използвате само more command сама:

 още listing.txt 

Ако listing.txt вече е съществувал, той ще бъде презаписан. Но можете да добавите към съществуващ файл, като използвате >> като следното:

 ls -a / начало> listing.txt ls -a / dev >> listing.txt 

Първото пренасочване ще презапише файла listing.txt а второто ще се добави към него.

Командата cat може да се използва за създаване на файл, използващ пренасочване, например:

 cat> atextfile.txt 

Сега какъвто текст ще въведете, ще бъде изпратен във файла atextfile.txt докато не натиснете Control-D, в който момент файлът ще бъде затворен и ще бъдете върнати в командния ред. Ако искате да добавите още текст към файла, използвайте същата команда, но с два по-големи знака ( >> ).

заключение

Много от програмите за команден ред на Linux са предназначени да работят с пренасочване и тръби, опитайте да експериментирате с тях и да разберете как те взаимодействат. Например изходът на командата ps, който изброява текущите процеси, може да бъде въведен в grep . Вижте дали можете да проучите как да изброите процесите, които са собственост на root.