Các lệnh trên Shell (P5)

Bài viết này chúng ta sẽ tìm hiểu các tính năng mạnh mẽ của việc chuyển hướng I/O.

Các lệnh mà chúng ta đã biết, ví dụ như ls sẽ hiển thị ra màn hình output của nó. Nhưng chúng ta có thể chuyển hướng đầu ra của một số lệnh bằng các ký tự đặc biệt ra files, các thiết bị, hoặc làm input cho bất cứ lệnh nào khác.

Trên một hệ thống Unix-like như Linux thì có các khái niệm sau:

Standard Output

Hầu hết chương trình dạng command line sẽ hiển thị kết quả của nó ra một thiết bị xuất cơ bản gọi là Standard Ouput, thông thường là màn hình. (Nếu các bạn học qua C/C++ thì sẽ rõ khái niệm này). Mặc định, Standard Ouput hướng nội dung kết quả của chương trình để hiển thị. Để chuyển hướng standard output ra một file thì sử dụng ký hiệu “>” cú pháp:

command > file

trong đó, command là lệnh thực thi, file là tên một file cần xuất kết quả của lệnh vào, ví dụ:

cr0ss@cr0ss-X455LA:~$ ls > text.txt
cr0ss@cr0ss-X455LA:~$

Ở ví dụ trên, sau khi Shell thực thi lệnh ls, kết quả sẽ được ghi vào file text.txt mà không in ra màn hình.

Mỗi thời điểm, nếu lệnh chuyển hướng như ví dụ ở trên tới file text.txt nó sẽ ghi đè lên nội dung cũ của file. Nếu muốn bổ sung nội dung vào file text.txt từ end of file để không ghi đè lên nội dung trước đó, bạn dùng ký hiệu “>>”, ví dụ:

cr0ss@cr0ss-X455LA:~$ ls >> text.txt
cr0ss@cr0ss-X455LA:~$

khi chuyển hướng standard ouput, nếu file chưa tồn tại thì nó sẽ được tạo mới. Có thể kiểm tra nội dung file text.txt bằng lệnh less.

Standard Input

Nhiều lệnh có thể nhận input từ một thiết bị nhập chuẩn cơ bản gọi là Standard Input. Mặc định, Standard Input lấy nội dung đầu vào từ keyboard, nhưng cũng giống Standard Output, nó cũng có thể được chuyển hướng. Để chuyển hướng Standard Input dùng file thay thế cho keyboard, bạn dùng ký hiệu “<“ theo sau lênh, cú pháp

command < file

lấy ví dụ với file text.txt lúc nãy:

cr0ss@cr0ss-X455LA:~$ sort < text.txt
cocos2d-x-3.10
Documents
Downloads
Dropbox
Music
MyData
opencv
Pictures
Public
Qt
shell
sketchbook
Templates
text.txt
Videos
WP_backup_codespdf
cr0ss@cr0ss-X455LA:~$

ví dụ trên sử dụng lệnh sort nhận đầu vào từ file text.txt, sau đó sắp xếp nội dung của nó rồi xuất ra màn hình. Nếu bạn muốn kết quả sau khi sorted lưu vào file thì có thể chuyển hướng standard output ra một file mới, ví dụ:

cr0ss@cr0ss-X455LA:~$ sort < text.txt > sorted_text.txt
cr0ss@cr0ss-X455LA:~$

Nếu file sorted_text.txt chưa tồn tại thì Shell sẽ tạo mới. Bạn có thể kiểm tra nội dung của các file bằng lệnh less.

Như các bạn thấy trên ví dụ trên, một lệnh có thể được chuyển hướng cả standard input và standard output. Thứ tự chuyển hướng không quan trọng, nhưng các toán tử chuyển hướng như (“>”,”<“) phải nằm sau các tùy chọn và đối số của các lệnh.

Pipelines

Thứ hữu ích và mạnh mẽ nhất có thể làm với chuyển hướng I/O là kết nối nhiều lệnh với nhau với cái được gọi là pipelines. Với pipelines, Standard Output của một lệnh có thể được nhận làm Standard Input của một lệnh khác. Ví dụ:

cr0ss@cr0ss-X455LA:~$ ls -l | less

drwxrwxr-x 15 cr0ss cr0ss 4096 Th03 3 18:11 cocos2d-x-3.10
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Documents
drwxr-xr-x 2 cr0ss cr0ss 4096 Th04 2 20:05 Downloads
drwx—— 6 cr0ss cr0ss 4096 Th04 2 15:04 Dropbox
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Music
drwx—— 5 cr0ss cr0ss 4096 Th03 30 20:13 MyData
drwxrwxr-x 13 cr0ss cr0ss 4096 Th03 3 16:38 opencv
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 13 20:24 Pictures
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Public
drwxrwxrwx 8 cr0ss cr0ss 4096 Th03 3 16:28 Qt
drwxrwxr-x 2 cr0ss cr0ss 4096 Th03 30 20:26 shell
drwxrwxr-x 3 cr0ss cr0ss 4096 Th03 20 02:41 sketchbook
-rw-rw-r– 1 cr0ss cr0ss 144 Th04 2 22:28 sorted_text.txt
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Templates
-rw-rw-r– 1 cr0ss cr0ss 144 Th04 2 22:24 text.txt
drwxr-xr-x 2 cr0ss cr0ss 4096 Th03 3 12:15 Videos
-rw——- 1 cr0ss cr0ss 57940 Th03 28 01:53 WP_backup_codespdf
(END)

Đầu ra của lệnh ls được nhận vào đầu vào của lệnh less. Bằng việc dùng mẹo ” | less” bạn có thể chuyển hướng output đi bất kỳ đâu. Kết nối các lệnh với nhau, bạn có thể hoàn thành nhiều công việc tuyệt vời, dưới đây là các ví dụ:

Lệnh

Công dụng

ls -lt | head

Hiển thị 10 file mới nhất trong thư mục hiện hành

du | sort -nr

Hiển thi danh sách các thư mục và không gian nhớ chúng chiếm dùng, đồng thời sắp xếp từ lớn nhất tới nhỏ nhất

find . -type f -print | wc -l

Hiển thị tổng số file trong thư mục hiện hành và các thư mục con của nó

Filters

Một loại chương trình thường xuyên sử dụng pipelines được gọi là Filters. Filters nhận standard input và thực hiện một hành động tới khi nó gửi kết quả đến standard output. Bằng cách này chúng có thể được kết hợp với nhau để xử lý thông tin một cách mạnh mẽ, dưới đây là bảng các Filters phổ biến:

Chương trình

Công dụng

sort

Sắp xếp standard input và xuất kết quả được sắp xếp ra standard output.

uniq

Cho một dòng dữ liệu đã được sắp xếp từ standard input, sau đó loại bỏ các dòng trùng lặp dữ liệu (đảm bảo rằng mỗi dòng vào là duy nhất).

grep

Kiểm tra mỗi dòng dữ liệu vào nhận được từ standard input và xuất ra mỗi dòng có chứa những mẫu ký tự đặc biệt.

fmt

Đọc văn bản từ standard input sau đó xuất văn bản đã được định dạng ra standard output.

pr

Lấy văn bản từ standard input và chia dữ liệu thành các trang với các ngắt trang, headers footers để chuẩn bị in

head

Xuất ra một vài dòng đầu tiên của đầu vào của nó. Hữu ích đối với việc lấy header của file.

tail

Xuất ra vài dòng cuối của đầu vào. Hữu ích cho việc nhận các mục gần đây của file log

tr

Dịch ký tự. Có thể được sử dụng để thực hiện các nhiệm vụ như chuyển đổi chữ hoa / chữ thường hoặc các ký tự chấm dứt việc thay đổi dòng từ một loại khác (ví dụ, chuyển đổi file văn bản DOS vào file text kiểu Unix).

sed

Stream editor, có thể thực hiện chuyển đổi văn bản phức tạp hơn lệnh tr

awk

Toàn bộ một ngôn ngữ lập trình được thiết kế để xây dựng các filter. Cực kỳ mạnh mẽ.

Thực hiện các tác vụ với pipelines

  1. In từ command line: Linux cung chương trình lpr nhận standard input và gửi nó tới máy in. Nó được sử dụng với các pipe và filter, ví dụ:
    cat text.txt  | fmt | pr | lpr
    cat text.txt | sort | uniq | pr | lpr
    trong ví dụ thứ nhất, sử dụng cat để đọc file và xuất nó ra standard output, đó là một pipe vào một standard input của fmt, fmt định dạng văn bản thành các đoạn gọn gàng và xuất nó ra standard output, là standard input của pr, pr chia đoạn văn bản thành các trang và xuất nó ra standard output, là standard input của lpr, lpr đưa nó tới standard input và gửi tới máy in.
    Ví dụ thứ hai cũng tương tự như ví dụ thứ nhất
  2. View nội dung của các file tar: Bạn đã biết, các file lưu trữ trên Linux được tạo ra bởi tar, nén bởi gzip theo các họ tar.gz hoặc targz. Để xem các thư mục của một tập tin trong hệ thống Linux thì dùng lệnh sau:
    tar tzvf ten_cua_file_tar.tar.gz | less

Bài này kết thúc ở đây, chào các ban!

 

Advertisements

Author: phuoctv

My name is Phuoc. I'm interested in computer programming and sharing the knowledge. My email: phuoctv14@gmail.com

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s