05-quanlytientrinh

7
1 2/26/2014 open sourse 1/35 Quản lý tiến trình Chương 5 open sourse 2/35 2/26/2014 Quá trình khởi động (boot) hệ điều hành Linux Quá trình khởi động hệ điều hành Linux thực hiện qua các bước bản như sau: 1. BIOS thực hiện kiểm tra tính toàn vẹn trên bộ nhớ và tìm kiếm các chỉ dẫn trên Master Boot Record (MBR) trên đĩa mềm hay trên cứng 2. MBR gọi bộ nạp khởi động của Linux LILO hay GRUB 3. LILO/GRUB sau đó sẽ nhận diện nhân hệ điều hành để thi hành và sau đó sẽ nạp nhân hệ điều hành Linux từ phần chia /boot/ 4. Nhân hệ điều hành chuyển điều khiển cho chương trình /sbin/init. 5. Dựa trên mức thi hành tương ứng, /sbin/init thực hiện nạp các dịch vụ gắn (mount) tất cả các phần chia hệ thống (được khai báo trong /etc/fstab). open sourse 3/35 2/26/2014 Giới thiệu Một tiến trình = thực thi của một chương trình Mỗi tiến trình sẽ tương ứng với một tập các thông tin sau: Một định danh (pid) Một tiến trình cha (ppid) Người sở hữu (uid) và nhóm (gid) Câu lệnh khởi tạo tiến trình Một đầu vào chuẩn (stdin), một đầu ra chuẩn (stdout), một kênh báo lỗi chuẩn (stderr) Thời gian sử dụng CPU (CPU time) và mức độ ưu tiên Thư mục hoạt động hiện tại của tiến trình Bảng các tham chiếu đến các file được tiến trình sử dụng. Các tiến trình được sắp xếp để chia sẻ thời gian sử dụng CPU open sourse 4/35 2/26/2014 Các kiểu tiến trình (1) Các tiến trình hệ thống Thường thuộc về quyền root Không có giao diện tương tác Thường được chạy dưới dạng các tiến trình ngầm (daemon) Đảm nhiệm các nhiệm vụ chung, phục vụ mọi người sử dụng. Ví dụ: lpsched: Quản lý các dịch vụ in ấn cron: tự động thực hiện một lệnh/chương trình vào một thời gian xác định trước. inetd: quản lý các dịch vụ mạng. open sourse 5/35 2/26/2014 Các kiểu tiến trình (2) Các tiến trình của người sử dụng Thực hiện các nhiệm vụ của một người dùng cụ thể Thực hiện dưới dạng một shell tương ứng với một sự đăng nhập. Thực hiện dưới dạng một lệnh thông qua shell Thường được thực hiện, quản lý bằng một terminal Ví dụ: cp vi man open sourse 6/35 2/26/2014 Lệnh ps Hiển thị các tiến trình Theo ngầm định, lệnh ps hiển thị các tiến trình thuộc về người sử dụng terminal. Sử dụng tùy chọn aux để hiển thị tất cả các tiến trình đang chạy trong máy. $ ps PID TTY TIME CMD 2803 pts/1 00:00:00 bash 2965 pts/1 00:00:00 ps $ ps aux USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1 0.1 0.1 1104 460 ? S 15:26 0:03 init[3] ... ttanh 951 0.0 0.3 1728 996 pts/0 S 16:09 0:00 bash ttanh 953 0.0 1.9 6860 4916 pts/0 S 16:09 0:00 emacs ttanh 966 0.0 0.3 2704 1000 pts/0 R 16:23 0:00 ps aux ...

Upload: tieu-minh

Post on 09-Jul-2016

220 views

Category:

Documents


4 download

TRANSCRIPT

Page 1: 05-quanlytientrinh

1

2/26/2014 open sourse 1/35

Quản lý tiến trình

Chương 5

open sourse 2/35 2/26/2014

Quá trình khởi động (boot) hệ điều hành

Linux

Quá trình khởi động hệ điều hành Linux thực hiện qua các bước cơ

bản như sau:

1. BIOS thực hiện kiểm tra tính toàn vẹn trên bộ nhớ và tìm kiếm các

chỉ dẫn trên Master Boot Record (MBR) trên đĩa mềm hay trên ổ

cứng

2. MBR gọi bộ nạp khởi động của Linux – LILO hay GRUB

3. LILO/GRUB sau đó sẽ nhận diện nhân hệ điều hành để thi hành và

sau đó sẽ nạp nhân hệ điều hành Linux từ phần chia /boot/

4. Nhân hệ điều hành chuyển điều khiển cho chương trình /sbin/init.

5. Dựa trên mức thi hành tương ứng, /sbin/init thực hiện nạp các dịch

vụ và gắn (mount) tất cả các phần chia hệ thống (được khai báo

trong /etc/fstab).

open sourse 3/35 2/26/2014

Giới thiệu Một tiến trình = thực thi của một chương trình

Mỗi tiến trình sẽ tương ứng với một tập các thông tin sau: Một định danh (pid)

Một tiến trình cha (ppid)

Người sở hữu (uid) và nhóm (gid)

Câu lệnh khởi tạo tiến trình

Một đầu vào chuẩn (stdin), một đầu ra chuẩn (stdout), một kênh báo lỗi chuẩn (stderr)

Thời gian sử dụng CPU (CPU time) và mức độ ưu tiên

Thư mục hoạt động hiện tại của tiến trình

Bảng các tham chiếu đến các file được tiến trình sử dụng.

Các tiến trình được sắp xếp để chia sẻ thời gian sử dụng CPU

open sourse 4/35 2/26/2014

Các kiểu tiến trình (1)

Các tiến trình hệ thống

Thường thuộc về quyền root

Không có giao diện tương tác

Thường được chạy dưới dạng các tiến trình ngầm

(daemon)

Đảm nhiệm các nhiệm vụ chung, phục vụ mọi người

sử dụng.

Ví dụ:

lpsched: Quản lý các dịch vụ in ấn

cron: tự động thực hiện một lệnh/chương trình vào một thời

gian xác định trước.

inetd: quản lý các dịch vụ mạng.

open sourse 5/35 2/26/2014

Các kiểu tiến trình (2)

Các tiến trình của người sử dụng

Thực hiện các nhiệm vụ của một người dùng cụ thể

Thực hiện dưới dạng một shell tương ứng với một sự đăng

nhập.

Thực hiện dưới dạng một lệnh thông qua shell

Thường được thực hiện, quản lý bằng một terminal

Ví dụ:

cp

vi

man

open sourse 6/35 2/26/2014

Lệnh ps

Hiển thị các tiến trình Theo ngầm định, lệnh ps hiển thị các tiến trình thuộc về người

sử dụng terminal.

Sử dụng tùy chọn aux để hiển thị tất cả các tiến trình đang chạy trong máy.

$ ps

PID TTY TIME CMD

2803 pts/1 00:00:00 bash

2965 pts/1 00:00:00 ps

$ ps aux

USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND

root 1 0.1 0.1 1104 460 ? S 15:26 0:03 init[3]

...

ttanh 951 0.0 0.3 1728 996 pts/0 S 16:09 0:00 bash

ttanh 953 0.0 1.9 6860 4916 pts/0 S 16:09 0:00 emacs

ttanh 966 0.0 0.3 2704 1000 pts/0 R 16:23 0:00 ps aux

...

Page 2: 05-quanlytientrinh

2

7/35

Lệnh ps Cú pháp: ps [option]

* Các tham số đơn giản

-A, -e : chọn để hiển thị tất cả các tiến trình.

-T : chọn để hiển thị các tiến trình trên trạm cuối đang chạy.

-a : chọn để hiển thị tất cả các tiến trình trên một trạm cuối

-r : chỉ hiển thị tiến trình đang được chạy.

*Chọn theo danh sách

-C : chọn hiển thị các tiến trình theo tên lệnh.

-G : hiển thị các tiến trình theo chỉ số nhóm người dùng.

-U : hiển thị các tiến trình theo tên hoặc chỉ số của người dùng thực sự

-p : hiển thị các tiến trình theo chỉ số của tiến trình.

-s : hiển thị các tiến trình thuộc về một phiên làm việc.

-t : hiển thị các tiến trình thuộc một trạm cuối.

-u : hiển thị các tiến trình theo tên và chỉ số của người dùng hiệu quả.

open sourse 8/35 2/26/2014

Trạng thái của tiến trình

9/35 2/26/2014

Trạng thái của tiến trình

exit()

Pre-empt

Pre-empted

wake up

wake up

Swap out

Sleeping

Swapped out

Ready to run

Swapped out

Swap out Swap in

Not Enough Memory

Re -schedule

fork()

User running

Return to user mode

Return to user mode

System call or Interrupt

Interrupt and Interrupt return

Zombie

Kernel running

Sleep

Created

Ready to run in memory Sleeping

in memory Enough Memory

open sourse 10/35 2/26/2014

Trạng thái của tiến trình Created

Một tiến trình mới được tạo. Các tiến trình được tạo có thường trú toàn bộ

trong bộ nhớ hay không là phụ thuộc vào các chi tiết của hệ thống quản lý bộ nhớ.

Trạng thái này cũng có thể bao gồm các tiến trình chưa được tạo hoàn chỉnh.

Ready to run in memory

Tiến trình sẵn sàng được thi hành trong bộ nhớ.

Kernel running

Tiến trình đang chạy trong chế độ nhân hệ điều hành (kernel mode). Nó có thể

quản lý một lời gọi hệ thống hoặc một ngắt hay tiến trình khác (cũng trong chế độ nhân

hệ điều hành) có thể chạy theo lịch lập sẵn. Tiến trình có thể quyết định rằng nó đã kết

thúc (kết thúc bình thường thông qua lệnh exit() hoặc khi nhân hệ điều hành phát hiện

điều kiện không bình thường) hoặc nó được đóng (block) để đợi một số sự kiện như là

một tín hiệu thời gian hoặc sự hoạt động của thiết bị ngoại vi.

open sourse 11/35 2/26/2014

Trạng thái của tiến trình User running

Trạng thái hoạt động bình thường của tiến trình.

Pre-empted

Tiến trình bị gián đoạn và sắp sửa lấy lại quá trình hoạt động bình thường trong

chế độ người dùng (user mode). Bộ lập lịch của nhân hệ điều hành có thể chuyển một

tiến trình vào trong trạng thái này.

Zombie

Tiến trình ngừng thi hành.

open sourse 12/35 2/26/2014

Trạng thái của tiến trình

Sleeping in memory

Tiến trình bị ‘đóng’ để đợi một sự kiện. Tất cả tiến trình có thể ở trạng thái này

là tiến trình có thể sang trạng thái wake up (bằng cách thay đổi trạng thái của nó

thành “ready to run”) hoặc swapped out.

Sleeping, swapped out

Tiến trình đang đợi một sự kiện (các chi tiết trong bảng tiến trình của tiến trình)

và đã được swapped out

Ready to run, swapped in

Sao chép ngược ‘tiến trình’ từ đĩa vào trong bộ nhớ trước khi được tiếp tục thi

hành.

Page 3: 05-quanlytientrinh

3

open sourse 13/35 2/26/2014

Tiến trình init

init là một trong những chương trình thiết yếu đối với hoạt

động của một hệ thống Linux. init có nhiều nhiệm vụ quan trọng,

như là khởi nạp các thể hiện của getty (để người dùng có thể

đăng nhập), thực thi các mức thi hành chương trình và quản lý

những tiến trình vô chủ (mất tiến trình cha)

init là tiến trình cha của mọi tiến trình

Không thể kết thúc được tiến trình init khi hệ thống còn hoạt

động

open sourse 14/35 2/26/2014

Tiến trình init

Các bước khởi động của init

Bước1, init gọi thi hành script /etc/rc.d/rc.sysinit để thiết lập

đường dẫn, khởi động tập tin tráo đổi, kiểm tra các hệ thống

tập tin v.v…

Về cơ bản, rc.sysinit quản lý tất cả mọi thao tác mà hệ thống

cần phải thực hiện tại thời điểm khởi động, thí dụ như khởi động bộ

định thời (đồng hồ), khởi nạp cổng nối tiếp …

Bước 2, init sẽ thực thi script /etc/inittab. Script này mô tả

cách thức hệ thống cần được thiết lập tại mỗi mức thi hành

(run level) và thiết lập mức thi hành mặc định (tại dòng

initdefault trong tập tin /etc/inittab).

Mỗi khi thay đổi mức thi hành, init sử dụng các script có trong thư mục

/etc/rc.d/init.d/ để khởi động và dừng thi hành các dịch vụ khác nhau.

open sourse 15/35 2/26/2014

Tiến trình init

Các bước khởi động của init

Bước 3, init gọi thi hành script /etc/rc.d/init.d/functions.

Script này cho biết cách thức khởi động hay ngừng một

chương trình và cách thức xác định PID của một chương

trình.

Bước 4, init khởi động tất cả các tiến trình 'ngầm' cần thiết

cho hệ thống hoạt động bằng cách thi hành các script có

trong thư mục (/etc/rc.d/rc0.d/, /etc/rc.d/rc1.d/,

/etc/rc.d/rc2.d/, …, /etc/rc.d/rc6.d/) tương ứng đối với mức

thi hành được xác định.

Thi hành tất cả các script khởi động trong cùng thư mục

tương ứng với mức thi hành (bằng cách thi hành lệnh

/etc/rc.d/init.d/command start) để khởi động các ứng dụng

và dịch vụ.

open sourse 16/35 2/26/2014

Tiến trình init

Các bước khởi động của init

Bước 5, Gọi thi hành script /etc/rc.d/rc.local. Script này dùng

để bổ sung thêm các lệnh cần thiết cho môi trường hệ

thống.

Bước 6, Sau khi init đã xử lý tất cả các mức thi hành, script

/etc/inittab phát sinh một tiến trình getty cho mỗi bàn giao

tiếp ảo (virtual console) cho mỗi mức thi hành (mức 2-5 có 6

tiến trình getty, mức 1 chỉ có duy nhất một tiến trình, còn tại

mức 0 và 6 không có tiến trình) …

open sourse 17/35 2/26/2014

Tiến trình init

Các mức thi hành và cấu hình /etc/inittab

0 Ngừng thi hành hệ thống (shutdown)

1 Chế độ một người dùng

2 Không dùng (người dùng có thể định nghĩa)

3 Chế độ đa người dùng đầy đủ

4 Không dùng (người dùng có thể định nghĩa)

5 Chế độ đa người dùng trong môi trường X

6 Khởi động lại máy

open sourse 18/35 2/26/2014

Quản lý khởi động dịch vụ - chkconfig

Các script quản lý daemon dịch vụ hệ thống thực sự được đặt

trong thư mục /etc/rc.d/init.d/ và được liên kết (dạng symbolic

link) vào các thư mục /etc/rc.d/rc[0-6].d/ tương ứng. Tiện ích

/sbin/chkconfig là một công cụ dòng lệnh đơn giản được sử

dụng để giúp tạo hay xoá bỏ những liên kết này. Nó giúp

người quản trị hệ thống không cần phải thực hiện thủ công

tạo các symbolic link trong các thư mục nằm trong /etc/rc.d/.

Page 4: 05-quanlytientrinh

4

open sourse 19/35 2/26/2014

Quản lý khởi động dịch vụ - chkconfig

Lệnh chkconfig được sử dụng với một số cú pháp cơ bản

sau:

chkconfig --add name

chkconfig --del name

chkconfig [--lelvel levels] name [on | off]

chkconfig --list [name]

open sourse 20/35 2/26/2014

Quản lý khởi động dịch vụ - chkconfig

--del name Xoá bỏ tất cả các symbolic link của dịch vụ name ra khỏi các thư mục

/etc/rc.d/rc[0-6].d và dịch vụ name được loại bỏ khỏi sự quản lý của chkconfig

--add name Tạo các symbolic link của script của dịch vụ name này vào trong tất cả

các thư mục /etc/rc.d/rc[0-6].d/ (thường là với script thực hiện ngừng dịch

vụ), đồng thời đưa dịch vụ name vào sự quản lý của chkconfig

--level

levels Xác định mức thi hành của dịch vụ name. Mức thi hành là một chuỗi số

gồm các con số từ 0-6 chỉ ra các mức thi hành được chọn.

Nếu một trong các cờ on hay off được chỉ ra sau tên dịch vụ name,

chkconfig sẽ thay đổi thông tin khởi động cho dịch vụ tại mức thi

hành được chỉ ra. Theo mặc định, các lựa chọn on và off sẽ chỉ tác

động trên các cấp thi hành 3, 4 và 5

--list Liệt kê thông tin trạng thái (khởi động hay ngừng) của tất cả các dịch

vụ mà chkconfig quản lý tại mọi cấp thi hành. Nếu có đối số name,

chỉ có thông tin về dịch vụ name được hiển thị.

21/35

Lệnh kill Cú pháp: kill [tùy-chọn] <chỉ-số-của-tiến-trình>

Lệnh kill sẽ gửi một tín hiệu đến tiến trình được chỉ ra. Nếu không

chỉ ra một tín hiệu nào thì ngầm định là tín hiệu TERM sẽ được gửi.

-s : xác định tín hiệu được gửi. Tín hiệu có thể là số hoặc tên của tín

hiệu. Dưới đây là một số tín hiệu hay dùng:

o SIGHUP (hang up) đây là tín hiệu được gửi đến tất cả các quá

trình đang chạy trước khi logout khỏi hệ thống

o SIGINT (interrupt) đây là tín hiệu được gửi khi nhấn Ctrl+C

o SIGK (kill) tín hiệu này sẽ dừng tiến trình ngay lập

o SIGT tín hiệu này yêu cầu dừng tiến trình ngay lập tức, nhưng cho

phép chương trình xóa các file tạm

-p : lệnh kill sẽ chỉ đưa ra chỉ số của tiến trình mà không gửi một tín

hiệu nào.

-l : hiển thị danh sách các tín hiệu mà lệnh kill có thể gửi đến các

tiến trình (các tín hiệu này có trong file /usr/include/Linux/signal.h)

open sourse 22/35 2/26/2014

Lệnh kill Lệnh killall: dùng để kết thúc tất cả các tiến trình của một

câu lệnh thông qua việc truyền tên của câu lệnh dưới

dạng một tham số.

Quyền hủy tiến trình thuộc về người sở hữu tiến trình

open sourse 23/35 2/26/2014

Độ ưu tiên của các tiến trình

Tất cả các tiến trình đều có độ ưu tiên ban đầu được ngầm định là 0

Mức độ ưu tiên của một tiến trình dao động trong khoảng từ -20 đến +19

Chỉ người sử dụng có quyền root mới có thể giảm

giá trị biểu diễn độ ưu tiên của tiến trình. Một người

sử dụng thông thường chỉ có thể làm giảm độ ưu tiên

của tiến trình thông qua việc tăng giá trị biểu diễn độ

ưu tiên.

open sourse 24/35 2/26/2014

Độ ưu tiên của các tiến trình

Để chạy một chương trình với độ ưu tiên định trước,

hãy sử dụng lệnh nice.

Cú pháp lệnh: nice [tùy-chọn] [lệnh [tham-số ]... ]

Lệnh nice sẽ chạy một chương trình (lệnh) theo độ ưu

tiên đã sắp xếp. Nếu không có lệnh, mức độ ưu tiên

hiện tại sẽ hiển thị. Độ ưu tiên được sắp xếp từ -20

(mức ưu tiên cao nhất) đến 19 (mức ưu tiên thấp nhất).

-ADJUST : tăng độ ưu tiên theo ADJUST đầu tiên

--help : hiển thị trang trợ giúp và thoát

Page 5: 05-quanlytientrinh

5

open sourse 25/35 2/26/2014

Độ ưu tiên của các tiến trình - Để thay đổi độ ưu tiên của một tiến trình đang chạy,

hãy sử dụng lệnh renice.

Cú pháp lệnh: renice <độ-ưu-tiên> [tùy-chọn]

Lệnh renice sẽ thay đổi mức độ ưu tiên của một hoặc

nhiều tiến trình đang chạy.

-g : thay đổi quyền ưu tiên theo nhóm người dùng

-p : thay đổi quyền ưu tiên theo chỉ số của tiến trình

-u : thay đổi quyền ưu tiên theo tên người dùng

open sourse 26/35 2/26/2014

Lệnh top Hiển thị và cập nhật các thông tin sau của các

tiến trình đang chạy:

Phần trăm sử dụng CPU

Phần trăm sử dụng bộ nhớ trong (RAM)

$ top [–d]

Tùy chọn –d cho phép xác định thời gian định kỳ cập nhật thông tin (tính theo giây).

Lệnh top cho phép người sử dụng tương tác và quản lý các tiến trình (thay đổi độ ưu tiên, gửi các tín hiệu, …)

open sourse 27/35 2/26/2014

Các kiểu thực thi

Thực thi nhiều lệnh độc lập

Sử dụng ký tự ; để thực thi nhiều lệnh liên tiếp, các

lệnh này hoạt động độc lập với nhau.

$cp public/* perso; rm -r public

Thực thi nhiều lệnh phụ thuộc nhau

Sử dụng ký hiệu && để thực thi nhiều lệnh liên tiếp,

các lệnh này phụ thuộc nhau, lệnh sau chỉ được thực

hiện nếu lệnh trước không gặp lỗi.

$cp public/* perso && rm -r public

open sourse 28/35 2/26/2014

• cơ chế đường ống

Cơ chế đường ống giữa

hai tiến trình cho phép

định hướng lại đầu ra của

tiến trình thứ nhất trở

thành đầu vào của tiến

trình thứ hai

Cơ chế đường ống được

thiết lập bằng cách sử

dụng ký tự: |

$ cmd1 | cmd2

open sourse 29/35 2/26/2014

Chạy ở chế độ hiện (foreground và

chạy ở chế độ ngầm (background) (1)

Quá trình chạy ở chế độ hiện sẽ tiến hành theo những bước như sau:

Thực hiện quá trình « fork », nhân bản tiến trình cha (trong trường hợp thực thi các lệnh, đó sẽ là tiến trình shell)

Thực hiện quá trình « wait », đưa tiến trình cha vào trạng thái ngủ (sleep).

Thực hiện quá trình « exec », thực thi tiến trình con.

Sau khi tiến trình con thực thi xong, một tín hiệu « đánh thức » sẽ được gửi đến tiến trình cha.

Do quá trình chạy như trên => trong quá trình thực hiện tiến trình con, người sử dụng không thể tương tác với tiến trình cha.

open sourse 30/35 2/26/2014

Chạy ở chế độ hiện (foreground và

chạy ở chế độ ngầm (background) (2)

Quá trình chạy ở chế độ ngầm cho phép thực thi

tiến trình cha và tiến trình con một cách độc lập.

Ví dụ: $ emacs&

Sau khi thực hiện lệnh trên, emacs sẽ chạy ở

chế độ ngầm, người sử dụng có thể tiếp tục sử

dụng console để thực thi các lệnh khác

Page 6: 05-quanlytientrinh

6

open sourse 31/35 2/26/2014

Quản lý tác vụ Một tác vụ = việc thực hiện một câu lệnh. Một tác vụ có thể

liên quan đến một nhóm các tiến trình (một tiến trình cha và tập các tiến trình con của nó)

Không thể có nhiều hơn 1 tác vụ chạy ở chế độ hiện (foreground)

Có thể có nhiều hơn 1 tác vụ chạy ở chế độ ngầm (background)

Background Foreground

Stop

$ command $ command &

fg kill

Ctrl-C fg

bg

Ctrl-Z stop

Kết

thúc

Kết

thúc

open sourse 32/35 2/26/2014

Ví dụ

$ emacs &

[1] 756

$ stop 756

# or $ stop %1

$ bg 756

# or $ bg %1

$ kill 756

# or $ kill %1

open sourse 33/35 2/26/2014

Chuyển hướng các kênh chuẩn

Mỗi tiến trình sở hữu: Một đầu vào chuẩn (ngầm định là bàn phím)

Một đầu ra chuẩn (ngầm định là terminal)

Một kênh báo lỗi chuẩn (ngầm định là terminal)

Chuyển hướng đầu vào chuẩn (<) $ tee < test.txt

Chuyển hướng đầu ra chuẩn (>, >>) $ ls > /dev/lp $ ls >> test.txt

Chuyển hướng kênh báo lỗi $ rm prog.c 2> /dev/null

$ gcc prog.c 2>> erreur.txt

open sourse 34/35 2/26/2014

Chuyển hướng đầu vào

Sử dụng ký tự ‘nhỏ hơn’ cùng với một tên tập tin như sau:

< file1

trong một lệnh để chỉ dẫn shell đọc thông tin đầu vào từ một tập tin

gọi là file1 thay thế việc nhập từ bàn phím.

Thí dụ, sử dụng chuyển hướng đầu vào để gửi nội dung tập tin

/etc/passwd tới lệnh more:

$ more < /etc/passwd

Nhiều lệnh của Linux chấp nhận một tên tập tin như là một đối số

dòng lệnh, đồng thời cũng chấp nhận nhập thông tin từ tập tin nhập

chuẩn nếu không có tập tin nào được đưa ra trên dòng lệnh.

Thí dụ, để xem 10 dòng đầu tiên của tập tin /etc/passwd, hai lệnh

sau đây đều thực hiện chức năng như nhau:

$ head /etc/passwd

$ head < /etc/passwd

open sourse 35/35 2/26/2014

Chuyển hướng đầu ra

Sử dụng ký tự ‘lớn hơn’ cùng với một tên tập tin như

sau:

> file2

Để cho phép shell chuyển đầu ra của một lệnh vào trong

một tập tin gọi là file2 thay thế việc xuất ra tập tin xuất

chuẩn (màn hình). Nếu tập tin file2 đã có, tập tin cũ sẽ bị

ghi đè.

Thí dụ, để chuyển hướng xuất của lệnh ls vào tập tin

ls.out trong thư mục chủ của người dùng, ta thi hành

lệnh sau:

$ ls /temp > ~/ls.out

open sourse 36/35 2/26/2014

Chuyển hướng đầu ra

Sử dụng hai dấu ‘lớn hơn’ để bổ sung thêm nội dung tới một

tập tin đã có. Thí dụ lệnh có sử dụng chuyển hướng đầu ra

như sau:

>> file2

sẽ thông báo cho shell bổ sung thêm nội dung xuất của một

lệnh vào cuối tập tin file2; trường hợp tập tin file2 chưa có, nó

sẽ được tạo.

Thí dụ, để liệt kê nội dung của thư mục /tmp, và ghi kết quả

vào tập tin myls. Sau đó liệt kê nội dung của thư mục /etc, và

bổ sung nội dung này vào phần cuối tập tin myls, ta thực hiện

các lệnh sau:

$ ls /tmp > myls

$ ls /etc >> myls

Page 7: 05-quanlytientrinh

7

open sourse 37/35 2/26/2014

Chuyển hướng lỗi

Sự chuyển hướng tập tin lỗi chuẩn là khá phức tạp, phụ thuộc

vào kiểu shell đang sử dụng. Trong bash, chuyển hướng tập

tin lỗi chuẩn bằng ký tự '2>'

Thí dụ, ta có thể thực hiện sắp xếp thứ tự tập tin /etc/passwd,

ghi kết quả vào trong một tập tin có tên là foo, và bắt các lỗi

(nếu có) ghi vào một tập tin có tên là err bằng lệnh như sau:

$ sort < /etc/passwd > foo 2> err

open sourse 38/35 2/26/2014

tee command