Разбиране на тръбите и пренасочване за Linux команден ред
Две мощни функции на 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.