Giao diện dòng lệnh trong Linux cung cấp một cách mạnh mẽ để thực hiện nhiều tác vụ trên hệ thống của bạn. Vì nguồn gốc của nó, Linux có nhiều tính năng được tích hợp trong terminal.
Hai trong số những tính năng mạnh mẽ này là đường ống và chuyển hướng. Những tính năng này cho phép bạn chuyển hướng đầu ra và đầu vào của lệnh đến và đi từ các lệnh và tệp khác.
Trong bài viết này, bạn sẽ tìm hiểu ý nghĩa của đường dẫn và chuyển hướng trong Linux, sau đó là tìm hiểu sâu về cách tự mình sử dụng các tính năng này.
Điều kiện tiên quyết
Để hiểu đầy đủ hướng dẫn này, ít nhất bạn cần có:
- Hiểu biết cơ bản về hệ điều hành Linux.
- Kinh nghiệm cơ bản làm việc với dòng lệnh Linux.
- Truy cập vào dòng lệnh Linux để thử các lệnh.
Hãy xem hướng dẫn dòng lệnh Linux này nếu bạn là người mới hoặc cần ôn lại.
Đường ống trong Linux là gì?
Trước khi chúng ta đi sâu vào cách thức, pipe có nghĩa là gì? Đường ống là hành động hướng đầu ra của một lệnh Linux làm đầu vào cho lệnh khác. Bạn có thể chuyển hướng đầu ra tiêu chuẩn hoặc lỗi tiêu chuẩn từ lệnh này sang lệnh khác bằng cách sử dụng đường ống.
Một ví dụ đơn giản về đường ống là khi bạn lấy đầu ra của một lệnh và sử dụng nó làm đầu vào cho lệnh khác. Siêu ký tự ống (|) được sử dụng để đạt được điều này.
Nếu bạn chưa quen với khái niệm siêu ký tự, đây chỉ là một cái tên ưa thích cho các ký tự có ý nghĩa đặc biệt trong dòng lệnh. Có các siêu ký tự khác trong Linux ngoài đường ống (|). Các ví dụ phổ biến bao gồm nhỏ hơn (<), lớn hơn (>) và ký hiệu (&), cùng một số ví dụ.
Những điều cơ bản về đường ống
Cú pháp cơ bản khi sử dụng pipe lệnh như sau:
command1 | command2 | command3 | ... | commandN
Theo cú pháp trên, terminal sẽ thực thi các lệnh từ trái sang phải. Nó sẽ bắt đầu bằng command1 , sau đó đầu ra sẽ được nhập vào command2 . Đầu ra của command2 sau đó sẽ được sử dụng làm đầu vào của command3 và vân vân. Điểm hay của đường ống là bạn có thể xâu chuỗi bao nhiêu lệnh tùy thích.
Ví dụ về đường ống
Dưới đây là một số ví dụ về cách sử dụng pipe lệnh để thực hiện các nhiệm vụ khác nhau.
1. Đếm số lượng file và thư mục
ls -l | wc -l
Trong ví dụ trên, phần đầu tiên liệt kê tất cả các tệp và thư mục trong thư mục hiện tại bằng ls lệnh. -l bổ sung tùy chọn cho biết ls lệnh liệt kê nội dung ở định dạng danh sách dài.
Đầu ra của ls -l lệnh sau đó được chuyển đến phần thứ hai. wc -l lệnh đếm số dòng từ đầu ra của ls -l lệnh trong phần đầu tiên và in kết quả đến thiết bị đầu cuối.
2. Sắp xếp danh sách file và thư mục
ls | sort
Trong lệnh trên, ls lệnh sẽ xuất ra danh sách các tập tin và thư mục trong thư mục hiện tại. Danh sách sau đó được dẫn tới sort lệnh sắp xếp chúng theo thứ tự bảng chữ cái và in kết quả đến thiết bị đầu cuối.
3. Sắp xếp và hiển thị các từ duy nhất trong một tệp
cat words.txt | sort -r | uniq
Ví dụ thứ ba bao gồm ba lệnh riêng biệt được kết nối bằng hai đường ống. Lệnh đầu tiên xuất nội dung của words.txt tập tin chứa danh sách các từ.
Đầu ra được dẫn tới sort -r lệnh sắp xếp các từ theo thứ tự bảng chữ cái đảo ngược. Cuối cùng, các từ đã được sắp xếp sẽ được chuyển tới uniq lệnh loại bỏ các từ trùng lặp và xuất ra các từ được sắp xếp duy nhất.
Tại sao và khi nào bạn nên áp dụng Command Piping Linux?
Piping cần nhiều thứ hơn là chỉ biết cú pháp. Cú pháp khá đơn giản. Để sử dụng đường ống hiệu quả, bạn nên hiểu rõ bản chất của nó.
Mục đích của đường dẫn là giúp bạn xâu chuỗi các lệnh, sử dụng đầu ra của lệnh này làm đầu vào của lệnh khác.
Đường ống không phải là một cách để xâu chuỗi các lệnh không liên quan mà bạn muốn thực hiện tuần tự. Nếu bạn cần làm điều đó, hãy viết các lệnh của bạn trong terminal và phân tách chúng bằng dấu chấm phẩy (;) theo cú pháp sau:
command1 ; command2 ; ... ; commandN
Chuyển hướng trong Linux là gì?
Chuyển hướng là hành động ra lệnh cho đầu vào hoặc đầu ra của lệnh của bạn đi đâu. Theo mặc định, các lệnh nhận dữ liệu từ đầu vào tiêu chuẩn và sau đó xuất kết quả ở đầu ra tiêu chuẩn.
Một trong những lĩnh vực chính mà việc chuyển hướng tỏ ra hữu ích là khi làm việc với các lệnh và tệp. Ví dụ:bạn có thể chuyển hướng đầu ra của lệnh sang một tệp thay vì in đầu ra trong thiết bị đầu cuối. Ngoài ra, bạn có thể khai báo một tệp nhất định làm đầu vào cho lệnh.
Giống như đường ống, Linux cung cấp các ký tự đặc biệt để thực hiện chuyển hướng. Dưới đây là các ký tự chuyển hướng tệp quan trọng trong Linux và chức năng của chúng:
>– hướng đầu ra của lệnh tới một tệp nhất định.<– chuyển nội dung của một tập tin nhất định tới một lệnh.>>– hướng đầu ra của lệnh tới một tệp nhất định. Nối thêm đầu ra nếu tệp tồn tại và có nội dung.2>– chuyển các thông báo lỗi từ một lệnh tới một tệp nhất định.2>>– chuyển thông báo lỗi từ một lệnh tới một tập tin nhất định. Nối thêm thông báo lỗi nếu tệp tồn tại và có nội dung.&>– chuyển hướng đầu ra tiêu chuẩn và lỗi tới một tệp nhất định.&>>– hướng đầu ra tiêu chuẩn và lỗi tới một tập tin nhất định. Thêm vào tệp nếu nó tồn tại và có nội dung.
Hãy xem xét kỹ hơn từng ký tự chuyển hướng tệp.
1. Chuyển hướng đầu ra với >
> biểu tượng cho phép bạn chuyển hướng đầu ra của lệnh đến một tệp nhất định. Sử dụng biểu tượng, bạn có thể chuyển hướng đầu ra tới bất kỳ tệp hiện có nào. Nếu nó không tồn tại, ký tự chuyển hướng đầu ra sẽ tự động tạo một ký tự mới.
Tuy nhiên, bạn nên cẩn thận khi ghi vào tệp hiện có vì nội dung của nó sẽ bị ghi đè mà không có cảnh báo.
Bạn có thể thực hiện chuyển hướng đầu ra bằng cú pháp sau:
command > file
Kết quả chạy command sẽ được ghi vào file thay vì đầu ra tiêu chuẩn (hay nói cách khác là được in ra thiết bị đầu cuối). Đây là ví dụ về cách bạn có thể thực hiện chuyển hướng đầu ra:
ls -a > contents.txt
Trong lệnh trên, danh sách các mục trong thư mục hiện tại (bao gồm dotfiles, thư mục và file) sẽ được ghi vào contents.txt tập tin. Bạn sẽ không thấy bất kỳ đầu ra nào trong thiết bị đầu cuối do chuyển hướng.
2. Chuyển hướng đầu ra với >>
>> cho phép bạn chuyển hướng đầu ra của lệnh tới một tệp. Tuy nhiên, không giống như sử dụng một ký tự lớn hơn (> ), >> sẽ nối thêm đầu ra nếu bạn cố ghi vào một tệp hiện có (thay vì ghi đè nội dung của nó). Nếu tệp không tồn tại, nó sẽ tạo một tệp mới.
Cú pháp như sau:
command >> file
Đây là ví dụ về việc sử dụng chuyển hướng đầu ra với >> để thực hiện hành động tương tự như trước:
ls -a >> contents.txt
3. Chuyển hướng đầu vào với <
< ký tự trong dòng lệnh cho phép bạn chuyển hướng đầu vào sang lệnh từ tệp thay vì bàn phím. Cú pháp chuyển hướng đầu vào bằng < như sau:
command < file
Đây là ví dụ về việc sử dụng chuyển hướng đầu vào:
wc -w < files.txt
Trong ví dụ trên, chúng ta đang chuyển files.txt làm đầu vào cho wc -w lệnh đếm số từ trong tập tin. Nhưng bạn không cần sử dụng ký tự chuyển hướng đầu vào trong nhiều trường hợp vì đó là hành vi mặc định. Chẳng hạn, lệnh trên tương tự như sau:
wc -w files.txt
4. Lỗi chuyển hướng với 2> và 2>>
Khi làm việc trên dòng lệnh, bạn có thể gặp lỗi. Chẳng hạn, nếu bạn muốn thực thi một tệp mà không có quyền thích hợp. Thay vì để thiết bị đầu cuối báo lỗi bằng cách in nó, bạn có thể sử dụng ký tự chuyển hướng lỗi để chỉ ra nơi thông báo lỗi sẽ xuất hiện.
Một nơi tốt để chuyển hướng lỗi là một tệp dành riêng để lưu trữ lỗi. Đây là một ví dụ đơn giản về lệnh cố gắng truy cập vào danh sách các tệp trong một thư mục không tồn tại:
ls nonexistent 2> error.txt
Trong ví dụ trên, thiết bị đầu cuối sẽ báo lỗi do không có tệp có tên nonexistent . Nhưng thay vì in nó ra bảng điều khiển, nó sẽ được lưu trữ trong error.txt tập tin do ký tự chuyển hướng lỗi. Tuy nhiên, tập tin sẽ không có gì nếu không có lỗi.
Nếu bạn phải thêm lỗi vào tệp hiện có thay vì ghi đè nội dung của nó, hãy sử dụng 2>> thay vì 2> .
5. Chuyển hướng đầu ra và lỗi với &> và &>>
Thay vì chọn chuyển hướng đầu ra tiêu chuẩn hoặc lỗi tiêu chuẩn sang một tệp, &> cho phép bạn chuyển hướng cả hai cùng một lúc. Bạn có thể nghĩ tới &> như một cách viết tắt để kết hợp các ký tự chuyển hướng đầu ra (>) và chuyển hướng lỗi (2>).
Cú pháp sử dụng &> như sau:
command &> output.txt
Lỗi hoặc đầu ra của command được ghi vào output.txt tập tin. Đây là một ví dụ:
ls sample &> output.txt
Trong lệnh trên, nếu sample thư mục không có sẵn hoặc có sẵn nhưng bạn không có quyền đọc, lỗi tương ứng sẽ được ghi vào output.txt tập tin. Nhưng nếu nó tồn tại và bạn có quyền đọc, nội dung của nó sẽ được xuất ra trong output.txt tập tin.
Sử dụng &>> cho phép bạn nối thêm đầu ra vào tệp nếu nó tồn tại và có nội dung.
Cách kết hợp đường ống và chuyển hướng để giải phóng sức mạnh của dòng lệnh
Việc sử dụng kết hợp đường ống và chuyển hướng có thể cho phép bạn thực hiện các thao tác phức tạp mà không cần nâng vật nặng. Bằng cách học cách kết hợp cả hai, bạn có thể tạo các lệnh phức tạp để thực hiện nhiều hành động khác nhau mà ít phải gõ hơn.
Lấy lệnh sau làm ví dụ:
ls | grep ".txt" > text_files.txt
ls lệnh liệt kê nội dung của thư mục hiện tại. Đầu ra được dẫn tới grep lệnh lọc tập tin văn bản. Cuối cùng, đầu ra của grep lệnh được chuyển hướng đến text_files.txt tập tin.
Ví dụ đơn giản nhưng mạnh mẽ này cho thấy rằng khi nói đến đường dẫn và chuyển hướng, giới hạn duy nhất là trí óc của bạn.
Kết luận
Trong hướng dẫn này, bạn đã tìm hiểu những kiến thức cơ bản về đường dẫn và chuyển hướng trong Linux. Chúng tôi đã trình bày những điều cơ bản cùng với các ví dụ về cách bạn có thể sử dụng cả hai.
Hai tính năng riêng biệt này có thể rất mạnh mẽ nhưng bạn có thể tiến xa hơn bằng cách kết hợp chúng trong các lệnh của mình, như minh họa trong phần trước.
Học cách viết mã miễn phí. Chương trình giảng dạy mã nguồn mở của freeCodeCamp đã giúp hơn 40.000 người có được việc làm với tư cách là nhà phát triển. Bắt đầu