Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Bài hướng dẫn về Unix/Linux

Unix là một hệ điều hành máy tính mà có khả năng thực hiện nhiều hoạt động bởi nhiều người

trong cùng một thời gian.

Unix được ra đời năm 1969 bởi Ken Thompson và Dennis Ritche tại phòng thí nghiệm AT&T Bell

Labs. Phần hướng dẫn này cung cấp các kiến thức về Unix.

Loạt bài hướng dẫn của chúng tôi dựa trên nguồn tài liệu của: Tutorialspoint

Đối với độc giả

Phần hướng dẫn này được chuẩn bị cho người mới bắt đầu học về Unix, từ đó giúp họ hiểu được

các kiến thức cơ bản về các lệnh, Shell Scripts và các tiện ích khác của Unix.

Điều kiện tiền đề

Chúng tôi giả sử rằng bạn có một chút kiến thức về Hệ điều hành và các chức năng của nó. Một

kiến thức cơ bản về các khái niệm máy tính sẽ cũng giúp bạn trong việc hiểu các bài thực hành đa

dạng trong phần hướng dẫn này.

Tổng quan về Unix/Linux

Unix/Linux là gì? Hệ điều hành Unix là tập hợp các chương trình mà thực hiện vai trò như một đường link giữa máy

tính và người sử dụng.

Các chương trình máy tính phân cấp các nguồn hệ thống và phối hợp tất cả các phần bên trong

của máy tính được gọi là Hệ điều hành hoặc kernel (hạt nhân).

Những người sử dụng giao tiếp với kernel thông qua một chương trình mà được biết như là shell.

Shell là một bộ biên dịch dòng lệnh, nó biên dịch các lệnh được nhập bởi người sử dụng và

 Unix/Linux được phát triển lần đầu tiên bởi một nhóm các nhân viên AT&T tại phòng thí

chuyển đổi chúng thành một ngôn ngữ mà kernel có thể hiểu.

nghiệm Bell Labs, gồm có Ken Thompson, Dennis Ritchie, Douglas Mclloy và Joe

Ossanna.

Page 1

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

 Có rất nhiều phiên bản Unix khác nhau trên thị trường. Solaris Unix, AIX, HP Unix và BSD

 Nhiều người có thể sử dụng một máy tính Unix cùng một lúc; vì thế Unix được gọi là hệ

là một số ví dụ. Linux cũng là một phiên bản của Unix mà là miễn phí.

 Một người sử dụng có thể chạy nhiều chương trình cùng một lúc; vì thế Unix được gọi là đa

thống đa người dùng.

nhiệm.

Cấu trúc Unix/Linux: Sơ đồ dưới là cấu trúc của một hệ thống Unix:

 Kernel: Kernel là trái tim của hệ điều hành. Nó tương tác với phần cứng và hầu hết nhiệm

Khái niệm chính mà được thống nhất trong tất cả các phiên bản Unix gồm 4 cơ sở sau:

 Shell: Shell là một tiện ích mà xử lý các yêu cầu của bạn. Khi bạn gõ một lệnh tại terminal

vụ như quản lý bộ nhớ, quản lý file, lên chương trình nhiệm vụ.

của bạn, shell phiên dịch lệnh đó và gọi chương trình mà bạn muốn. Shell sử dụng cú pháp

Page 2

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

chuẩn cho tất cả các lệnh. C Shell, Bourne Shell và Korn Shell là những shell được biết đến

 Các lệnh và các tiện ích: Có rất nhiều lệnh và tiện ích mà bạn có thể sử dụng trong công

nhiều nhất và có sẵn trong hầu hết các phiên bản Unix.

việc hàng ngày. cp, mv, cat và grep … là một số ví dụ của lệnh và tiện ích. Có trên 250

lệnh tiêu chuẩn cộng với một số lệnh khác được cung cấp bởi phần mềm thứ 3. Tất cả các

 Files và thư mục: Tất cả dữ liệu trong Unix được tổ chức trong các file. Tất cả các file

lệnh này đi cùng với các tùy chọn (chức năng) của nó.

được tổ chức vào trong các thư mục. Những thư mục này được tổ chức trong một cấu trúc

dạng cây được gọi như là hệ thống file.

Khởi động hệ thống trong Unix/Linux Nếu bạn có một máy tính mà đã cài đặt hệ điều hành Unix trên đó, thì sau đó đơn giản bạn chỉ cần

bật để khởi động hệ thống.

Ngay sau khi bạn bật hệ thống, hệ thống bắt đầu khởi động và cuối cùng nó nhắc bạn đăng nhập

vào trong hệ thống, mà hành động đăng nhập này được sử dụng cho các hoạt động thường ngày.

Đăng nhập Unix/Linux Khi bạn lần đầu kết nối với một hệ thống Unix, bạn thường nhìn thấy một dòng nhắc như sau:

login:

Đăng nhập hệ thống Unix/Linux:

1. Chuẩn bị sẵn sàng ID sử dụng và mật khẩu. Liên hệ với người quản lý nếu bạn chưa có nó.

2. Nhập ID tại dòng nhắc đăng nhập, sau đó nhấn Enter. ID của bạn là phân biệt chữ hoa-

thường, vì thế chắc chắn rằng bạn đã nhập chính xác như người quản lý đã chỉ dẫn.

3. Nhập mật khẩu vào ô mật khẩu và nhấn Enter. Mật khẩu của bạn cũng phân biệt kiểu chữ.

4. Nếu bạn cung cấp ID và mật khẩu chính xác thì sau đó bạn sẽ được cho phép để vào hệ

login : amrood

amrood's password:

Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73

thống. Bạn đọc qua thông tin và các thông báo mà hiện trên màn hình như hình dưới đây:

Page 3

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$

Bạn sẽ được cung cấp với một lệnh nhắc (đôi khi được gọi là lệnh $) mà tại đó bạn sẽ nhập tất cả

$ cal

June 2009

Su Mo Tu We Th Fr Sa

1 2 3 4 5 6

7 8 9 10 11 12 13

14 15 16 17 18 19 20

21 22 23 24 25 26 27

28 29 30

$

các lệnh của bạn. Ví dụ để kiểm tra lịch, bạn cần nhập lệnh cal như sau:

Thay đổi mật khẩu trong Unix/Linux Tất cả các hệ điều hành Unix đều yêu cầu mật khẩu để đảm bảo cho các dữ liệu và file của bạn và

cũng đảm bảo an toàn cho chính hệ thống chống lại sự thâm nhập của hacker hoặc cracker. Dưới

đây là các bước để thay đổi mật khẩu:

1. Để bắt đầu, soạn passwd tại dòng nhắc lệnh như hình dưới.

2. Nhập mật khẩu cũ

3. Nhập mật khẩu mới mà bạn muốn đổi. Luôn luôn giữ cho mật khẩu càng phức tạp càng tốt

để mà không ai có thể đoán được nó. Nhưng chắc chắn rằng bạn nhớ nó.

$ passwd

Changing password for amrood

(current) Unix password:******

New UNIX password:*******

Retype new UNIX password:*******

passwd: all authentication tokens updated successfully

4. Bạn cần xác nhận lại mật khẩu bằng cách nhập nó thêm lần nữa

Page 4

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$

Ghi chú: Tôi đã đặt dấu * vào vị trí chỉ cho bạn địa điểm bạn cần nhập mật khẩu cũ và mới. Ngoài

ra tại hệ thống của bạn, nó sẽ không hiển thị bất cứ ký tự nào khi bạn gõ mật khẩu vào.

Liệt kê thư mục và file trong Unix/Linux: Tất cả dữ liệu trong Unix được tổ chức vào trong các file. Tất cả các file được tổ chức vào trong

các thư mục. Những thư mục này được tổ chức vào trong một cấu trúc cây được gọi là hệ thống

file.

Bạn có thể sử dụng lệnh ls để liệt kê tất cả các file hoặc thư mục có trong một thư mục. Dưới đây

$ ls -l

total 19621

drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml

-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg

drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ

drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia

-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar

drwxr-xr-x 8 root root 4096 Nov 25 2007 usr

-rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php

-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar

-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid

-rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf

$

là ví dụ về cách sử dụng lệnh ls với tùy chọn -l.

Ở đây phần nhập bắt đầu với d…… biểu diễn các thư mục. Ví dụ như uml, univ và urlspedia là các

thư mục và phần còn lại là file.

Bạn là ai trong Unix/Linux? Trong khi bạn đăng nhập vào hệ thống, bạn có thể sẵn lòng để biết : Who am I?

Cách đơn giản nhất là tìm kiếm “bạn là ai” là nhập lệnh whoami :

Page 5

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ whoami

amrood

$

Hãy thử nó trên hệ thống của mình. Lệnh này liệt kê các tên tài khoản liên kết với sự đăng nhập

hiện tại. Bạn có thể thử lệnh whoami cũng để nhận thông tin về chính mình.

Ai đã đăng nhập trong Unix/Linux? Đôi khi bạn có thể muốn biết ai đã đăng nhập vào máy tính trong cùng thời gian.

Có 3 lệnh có sẵn để giúp bạn nhận được thông tin này, dựa trên cơ sở bạn muốn biết bao nhiêu về

$ users

amrood bablu qadir

$ who

amrood ttyp0 Oct 8 14:10 (limbo)

bablu ttyp2 Oct 4 09:08 (calliope)

qadir ttyp4 Oct 8 12:09 (dent)

$

những người sử dụng khác: users, who và w.

Bạn hãy thử lệnh w trên hệ thống của bạn để kiểm tra kết quả đầu ra. Lệnh này sẽ liệt kê một số

thông tin liên quan tới người đăng nhập vào trong hệ thống.

Thoát khỏi chương trình trong Unix/Linux Khi bạn đã kết thúc phiên làm việc của mình, bạn cần thoát khỏi chương trình để đảm bảo rằng

không ai có thể truy cập vào các file của bạn khi họ giả trang bạn.

Để thoát khỏi chương trình:

1. Bạn chỉ cần gõ lệnh logout tại dòng lệnh nhắc, và hệ thống sẽ vệ sinh mọi thứ và ngắt kết

nối.

Đóng hệ thống trong Unix/Linux

Page 6

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Cách phù hợp nhất để đóng hệ thống Unix là thông qua sử dụng một trong các lệnh sau:

Lệnh Miêu tả

halt Đóng hệ thống ngay lập tức.

Đóng hệ thống sử dụng script được xác định trước để đồng bộ và vệ sinh init 0 hệ thống trước khi shutdown.

Khởi động lại hệ thống bằng cách đóng hệ thống ngay lập tức và sau đó init 6 bắt đầu lại như lúc trước khi đóng

poweroff Đóng hệ thống ở chế độ poweroff

reboot Khởi động lại hệ thống

shutdown Đóng hệ thống

Bạn phải là người sử dụng chính để có thể có quyền đóng hệ thống, nhưng đôi khi người đại diện

cũng có thể thực hiện điều này.

Quản lý File trong Unix

Tất cả dữ liệu trong Unix được tổ chức trong các file. Tất cả các file được tổ chức trong các thư

mục. Những thư mục này được tổ chức trong một cấu trúc cây mà được gọi là hệ thống file.

Khi bạn làm việc với Unix, bằng cách này hay cách khác, bạn dành hầu hết thời gian làm việc với

các file. Chương này sẽ hướng dẫn bạn cách tạo và di chuyển các file, sao chép và đặt lại tên cho

chúng, tạo liên kết cho chúng….

Trong Unix, có 3 kiểu file cơ bản:

1. Ordinary File: File thường, là một file trên hệ thống mà lưu trữ dữ liệu, văn bản, hoặc chỉ

dẫn chương trình. Trong chương này, bạn sẽ được hướng dẫn cách làm việc với những

file này.

Page 7

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

2. Directory: Thư mục, lưu giữ cả các file thường và đặc biệt. Tương tự với các thư mục

trong Windown, Mac OS, thư mục trong Unix là các folder.

3. Special File: File đặc biệt, một số file đặc biệt cung cấp quyền truy cập vào phần cứng như

các ổ cứng, CD-ROM, modem và các đầu đọc Ethernet. Một số file đặc biệt khác là tương

tự như các phím tắt và khiến bạn có thể truy cập vào một file riêng nào đó bằng cách sử

dụng các tên khác nhau.

Liệt kê các file trong Unix/Linux Để liệt kê các file và các thư mục lưu giữ trong thư mục hiện tại, bạn sử dụng lệnh sau:

$ls

$ls

bin hosts lib res.03

ch07 hw1 pub test_results

ch07.bak hw2 res.01 users

docs hw3 res.02 work

Dưới đây là ví dụ về kết quả của lệnh trên.

$ls -l

total 1962188

drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml

-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg

drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ

drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia

-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar

drwxr-xr-x 8 root root 4096 Nov 25 2007 usr

drwxr-xr-x 2 200 300 4096 Nov 25 2007 webthumb-1.01

-rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php

-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar

Lệnh ls hỗ trợ tùy chọn -l giúp bạn nhận được nhiều thông tin hơn về các file được liệt kê.

Page 8

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid

-rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf

drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3

$

Dưới đây là các thông tin về tất cả các cột được liệt kê:

1. Cột đầu tiên: biểu diễn kiểu file và sự cho phép được cung cấp cho file. Ở phần bên dưới là

miêu tả của các kiểu file.

2. Cột 2: biểu diễn lượng bộ nhớ mà file hoặc thư mục chiếm dụng.

3. Cột 3: biểu diễn sự sở hữu của file. Đó là người sử dụng Unix tạo ra file này.

4. Cột 4: biểu diễn nhóm sở hữu. Mỗi người sử dụng Unix có một nhóm liên kết.

5. Cột 5: biểu diễn dung lượng bằng byte của file.

6. Cột 6: biểu diễn ngày tháng mà file được tạo hay chỉnh sửa lần cuối.

7. Cột 7: biểu diễn tên file hoặc thư mục.

Trong ví dụ về ls-l, mỗi dòng file bắt đầu với một ký tự d, -, hoặc l. Những ký tự này chỉ kiểu của file

được liệt kê.

Tiền tố Miêu tả

File thường chẳng hạn như một file văn bản ASCII, nhị phân hoặc đường link - cứng.

Nhóm file đặc biệt. nhóm file thiết bị đầu vào/đầu ra ví dụ như một đĩa cứng b vật lý.

File ký tự đặc biệt. File thiết bị đầu vào/đầu ra thô ví dụ như một đĩa cứng vật c lý.

File thư mục mà chứa một danh sách các file và thư mục khác. d

Page 9

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

l File liên kết ký tự. Kết nối trên bất kỳ một file thường nào.

p Pipe được đặt tên. Một cơ cấu để giao tiếp liên tiến trình.

s Socket được sử dụng cho giao tiếp liên tiến trình.

Các siêu ký tự trong Unix/Linux Các siêu ký tự có ý nghĩa quan trọng trong Unix. Ví dụ * và ? là siêu ký tự. Chúng ta sử dụng* để

kết nối 0 hoặc nhiều ký tự, sử dụng ? để kết nối với một ký tự đơn.

$ls ch*.doc

Ví dụ:

ch01-1.doc ch010.doc ch02.doc ch03-2.doc

ch04-1.doc ch040.doc ch05.doc ch06-2.doc

ch01-2.doc ch02-1.doc c

Hiển thị tất cả các file mà tên bắt đầu với cặp ký tự ch và kết thúc với .doc.

Dưới đây ký tự * thực hiện kết nối với bất kỳ ký tự nào. Nếu bạn muốn hiển thị tất cả các file kết

$ls *.doc

thúc với .doc, thì khi đó bạn sử dụng lệnh sau:

Các file ẩn trong Unix/Linux Một file không nhìn thấy là một file mà các ký tự đầu tiên của nó là dấu chấm (.). Các chương trình

Unix (bao gồm shell) sử dụng hầu hết những file này để giữ các thông tin cấu hình.

  .profile: là script khởi tạo Bourne shell (sh)

  .kshrc: là script khởi tạo Korn shell (ksh)

  .cshrc: là script khởi tạo C shell (csh)

  .rhosts: là file định hình shell điều khiển từ xa.

Một vài ví dụ về các file ẩn bao gồm:

Page 10

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ ls -a

. .profile docs lib test_results

.. .rhosts hosts pub users

.emacs bin hw1 res.01 work

.exrc ch07 hw2 res.02

.kshrc ch07.bak hw3 res.03

$

  Dấu chấm đơn (.): đại diện cho thư mục hiện tại

  Dấu chấm kép (..): đại diện cho thư mục gốc.

Để liệt kê các file nhìn không nhìn thấy (bị ẩn), xác định tùy chọn -a cho lệnh ls:

Tạo các file trong Unix/Linux Bạn có thể sử dụng vi editor để tạo ra các file thường trên hệ thống Unix. Bạn chỉ cần đơn giản sử

$ vi filename

dụng lệnh sau:

Lệnh trên sẽ mở một file với tên đã cung cấp. Bạn sẽ cần nhấn phím i để tiến vào chế độ chỉnh

This is unix file....I created it for the first time.....

I'm going to save this content in this file.

sửa. Một khi bạn trong chế độ chỉnh sửa, bạn có thể bắt đầu viết nội dung vào file như hình dưới:

  Nhấn phím esc để thoát khỏi chế độ này

  Nhấn tổ hợp phím Shift+ZZ để thoát khỏi file hoàn toàn.

Khi đã thực hiện xong, bạn làm theo các bước sau:

$ vi filename

$

Bây giờ bạn sẽ có một file được tạo với filename trong thư mục hiện tại.

Page 11

Chỉnh sửa các file trong Unix/Linux http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Bạn có thể chỉnh sửa các file hiện tại bằng cách sử dụng bộ soạn vi. Chúng ta sẽ đi vào chi tiết

từng phần trong một chương hướng dẫn cụ thế. Nhưng rút gọn ở đây, bạn có thể mở một file đang

$ vi filename

tồn tại như sau:

Một khi file này được mở, bạn có thể tiến vào chế độ chỉnh sửa bằng cách nhấn phím i và sau đó

bạn có thể chỉnh sửa nội dung như bạn thích. Nếu bạn muốn di chuyển tại nơi này hoặc nơi khác

bên trong file, khi đó đầu tiên bạn cần thoát khỏi chế độ chỉnh sửa bằng cách nhấn phím esc, sau

 Phím l để di chuyển sang phía bên phải;

 Phím h để di chuyển sang bên trái;

 Phím k để di chuyển lên phía trên trong một file;

 Phím j để di chuyển xuống phía dưới trong một file

đó bạn có thể sử dụng các phím sau để di chuyển bên trong một file:

Do đó bằng cách sử dụng các phím trên, bạn có thể đặt con trỏ bất cứ vị trí nào bạn muốn chỉnh

sửa. Một khi bạn đã xác định vị trí, sau đó bạn có thể sử dụng phím i để tiến vào chế độ chỉnh sửa.

Sau khi bạn thực hiện xong, nhấn esc và cuối cùng nhấn tổ hợp phímShift+ZZ để thoát khỏi file

hoàn toàn.

Hiển thị nội dung của một file trong Unix/Linux Bạn có thể sử dụng lệnh cat để quan sát nội dung của một file. Dưới đây là ví dụ đơn giản để quan

$ cat filename

This is unix file....I created it for the first time.....

I'm going to save this content in this file.

$

sát nội dung của một file đã được tạo.

$ cat -b filename

1 This is unix file....I created it for the first time.....

2 I'm going to save this content in this file.

Bạn có thể hiển thị số lượng dòng bằng cách sử dụng tùy chọn -b cùng với lệnh cat như sau:

Page 12

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$

Tính toán số lượng từ trong một file trong Unix/Linux Bạn có thể sử dụng lệnh wc để nhận được số dòng, số lượng từ và số lượng các ký tự có trong

$ wc filename

2 19 103 filename

$

một file. Dưới đây là một ví dụ đơn giản để quan sát thông tin về file đã được tạo trên.

Dưới đây là chi tiết trong 4 cột:

1. Cột 1: đại diện cho tổng số dòng trong file đó;

2. Cột 2: đại diện cho tổng số từ trong file đó;

3. Cột 3: đại diện cho tổng dung lượng byte mà file chiếm. Đây là kích thước thực của file.

4. Cột 4: đại diện cho tên file.

Bạn có thể đồng thời nhận được thông tin về nhiều file trong cùng một lúc bằng cú pháp đơn giản

$ wc filename1 filename2 filename3

sau:

Sao chép các file trong Unix/Linux Để tạo một bản sao của một file, bạn sử dụng lệnh cp. Cú pháp đơn giản của lệnh này là:

$ cp source_file destination_file

$ cp filename copyfile

$

Dưới đây là ví dụ để tạo một bản sao của filename đang tồn tại:

Bây giờ bạn sẽ tìm thấy một copyfile trong thư mục hiện tại của bạn. File này sẽ giống hoàn

toàn filename.

Đặt lại tên file

Page 13

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ mv old_file new_file

Để thay đổi tên của một file, bạn sử dụng lệnh mv. Cú pháp đơn giản của lệnh này là:

$ mv filename newfile

$

Dưới đây là một ví dụ mà đặt lại filename đang tồn tại thành newfile:

Lệnh mv sẽ di chuyển tất cả file đang tồn tại vào trong file mới. Vì thế trong tình huống này bạn sẽ

chỉ tìm thấy một newfile duy nhất trong thư mục hiện tại.

Xóa file Để xóa một file đang tồn tại, bạn sử dụng lệnh rm. Cú pháp đơn giản của nó là:

$ rm filename

Chú ý: Có thể rất nguy hiểm khi xóa một file bởi vì nó chứa thông tin hữu ích. Vì thế bạn cần phải

cẩn thận trong khi thực hiện lệnh này. Nó đề nghị tùy chọn -i song song với lệnh rm.

$ rm filename

$

Dưới đây là ví dụ mà gỡ bỏ hoàn toàn filename đang tồn tại:

$ rm filename1 filename2 filename3

$

Bạn có thể gỡ bỏ nhiều file tại cùng một lớp như sau:

Các Unix Stream tiêu chuẩn trong Unix/Linux Các chi tiết trong chương trình Unix có 3 stream (hoặc file) được mở cho nó khi nó bắt đầu:

1. stdin: Nó như là một đầu vào tiêu chuẩn (standard input) và phần tử mô tả file liên kết là 0.

Nó cũng được biểu diễn như là STDIN. Chương trình Unix sẽ đọc đầu vào mặc định từ

STDIN.

Page 14

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

2. stdout: Nó như là một đầu ra tiêu chuẩn (standard output) và phần tử mô tả file liên kết là 1.

Nó cũng được biểu diễn như là STDOUT. Chương trình Unix sẽ viết đầu ra mặc định tại

STDOUT.

3. stderr: Nó như là một lỗi tiêu chuẩn (standard error) và phần tử mô tả file liên kết là 2. Nó

cũng được biểu diễn như là STDERR. Chương trình Unix sẽ viết toàn bộ thông tin lỗi tại

STDERR.

Quản lý thư mục trong Unix

Một thư mục là một file mà nhiệm vụ duy nhất của nó là lưu giữ tên và các thông tin liên quan về

file. Tất cả các file, có thể là file thường, đặc biệt hoặc thư mục được giữ trong các thư mục.

UNIX sử dụng một cấu trúc thứ bậc để tổ chức các file và thư mục. Cấu trúc này thường được

nhắc đến như là một cây thư mục. Cây này có một điểm root node, một ký tự gạch chéo (/) và tất

cả các thư mục được chứa ở dưới nó.

Thư mục gốc (Home) trong Unix/Linux Thư mục mà bạn thấy ngay khi bạn lần đầu tiên đăng nhập vào là thư mục chính.

Bạn sẽ làm nhiều việc trong thư mục chính và các thư mục phụ nơi bạn tạo ra để tổ chức các file

của bạn.

$cd ~

$

Bạn có thể tiến vào thư mục chính bất cứ khi nào bằng cách sử dụng lệnh sau:

Tại đây biểu tượng ~ chỉ thư mục chính. Nếu bạn muốn vào thư mục chính của bất cứ người sử

$cd ~username

$

dụng nào khác, bạn sử dụng lệnh sau:

$cd -

$

Để vào thư mục cuối cùng, bạn có thể sử dụng lệnh sau:

Page 15

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Pathname tuyệt đối/quan hệ trong Unix/Linux Các thư mục được sắp xếp trong một hệ thống cấp bậc với gốc (/) ở trên cùng. Vị trí của bất kỳ file

nào trong hệ thống này được miêu tả bởi pathname của nó.

Các phần tử của pathname là tách riêng nhau bởi một dấu (/). Một pathname là giá trị tuyệt đối nếu

nó đươc miêu tả trong mối liên quan với gốc, vì thế pathname tuyệt đối thường bắt đầu với một

dấu (/).

/etc/passwd

/users/sjones/chem/notes

/dev/rdsk/Os3

Dưới đây là ví dụ về các filename tuyệt đối.

Một pathname có thể trong mối quan hệ tới thư mục làm việc hiện tại của bạn. Các pathname

tương đối không bao giờ bắt đầu với (/). Liên quan đến thư mục chính amrood, có một số

chem/notes

personal/res

pathname trông giống như sau:

Để xác định nơi bạn đang ở trong hệ thống phân cấp file vào bất kỳ lúc nào, bạn nhập lệnhpwd để

$pwd

/user0/home/amrood

$

in thư mục làm việc hiện tại.

Liệt kê các thư mục trong Unix/Linux Để liệt kê danh sách các thư mục, bạn có thể sử dụng cú pháp sau:

$ls dirname

$ls /usr/local

Dưới đây là ví dụ để liệt kê tất cả file được chứa trong thư mục /usr/local.

Page 16

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

X11 bin gimp jikes sbin

ace doc include lib share

atalk etc info man ami

Tạo các thư mục trong Unix/Linux Các thư mục được tạo ra bằng lệnh sau:

$mkdir dirname

$mkdir mydir

$

Tại đây, thư mục là pathname tuyệt đối hoặc quan hệ mà bạn muốn tạo ra. Ví dụ, lệnh sau:

$mkdir /tmp/test-dir

$

Tạo thư mục mkdir trong thư mục hiện tại. Dưới đây là ví dụ:

Lệnh này tạo thư mục test-dir trong thư mục /tmp. Lệnh mkdir không tạo đầu ra nếu nó thành công

tạo thư mục yêu cầu.

Nếu bạn cung cấp nhiều hơn một thư mục trên dòng lệnh thì mkdir tạo ra mỗi trong các thư mục.

$mkdir docs pub

$

Ví dụ:

Nó tạo ra thư mục docs và pub dưới thư mục hiện tại.

Tạo các thư mục cha (parent) trong Unix/Linux Đôi khi bạn muốn tạo một thư mục, thư mục chính hoặc các thư mục của nó không tồn tại. Trong

$mkdir /tmp/amrood/test

mkdir: Failed to make directory "/tmp/amrood/test";

No such file or directory

$

trường hợp này, lệnh mkdir đưa ra một thông báo lỗi như sau:

Page 17

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Trong trường hợp trên, bạn có thể chỉ định tùy chọn -p tới lệnh mkdir. Nó tạo tất cả các thư mục

$mkdir -p /tmp/amrood/test

$

cần thiết cho bạn. Ví dụ:

Lệnh trên tạo tất cả các thư mục chính cần thiết.

Dỡ bỏ các thư mục trong Unix/Linux Các thư mục có thể được xóa bằng cách sử dụng lệnh rmdir như sau:

$rmdir dirname

$

Ghi chú: Để dỡ bỏ một thư mục, bạn nên chắc chắn nó không còn chứa dữ liệu quan trọng nào,

nghĩa là không có bất kỳ file hoặc thư mục phụ bên trong thư mục này.

$rmdir dirname1 dirname2 dirname3

$

Bạn có thể dỡ bỏ nhiều thư mục tại cùng thời điểm như sau:

Lệnh trên dỡ bỏ các thư mục dirname1, dirname2 và dirname3 nếu chúng là trống. Lệnh rmdir

không tạo ra đầu ra nếu nó thực hiện thành công.

Thay đổi các thư mục trong Unix/Linux Bạn có thể sử dụng lệnh cd để tạo nhiều thay đổi tới thư mục home. Bạn có thể sử dụng nó để

thay đổi bất kỳ thư mục nào bằng cách xác định path tuyệt đối và quan hệ hợp lệ. Cú pháp như

$cd dirname

$

sau:

$cd /usr/local/bin

$

Tại đây, dirname là tên của thư mục mà bạn muốn tạo các thay đổi. Ví dụ, lệnh:

Page 18

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Tạo thay đổi tới thư mục /usr/local/bin. Từ thư mục này bạn có thể cd thư mục /usr/home/amrood

$cd ../../home/amrood

$

bằng cách sử dụng path quan hệ sau:

Đặt lại tên các thư mục trong Unix/Linux Lệnh mv có thể được sử dụng để đặt lại tên một thư mục. Cú pháp như sau:

$mv olddir newdir

$

$mv mydir yourdir

$

Bạn có thể đặt lại tên một thư mục mydir thành yourdir như sau:

Các thư mục .(dot) và .. (dot dot) trong Unix/Linux Tên file là .(dot) biểu diễn thư mục làm việc hiện tại; và tên file là .. (dot dot) biểu diễn thư mục ở

lớp trên thư mục làm việc hiện tại, thường là thư mục chính.

Nếu chúng ta nhập lệnh này để chỉ một danh sánh các thư mục làm việc hiện tại và sử dụng tùy

chọn -a để liệt kê tất cả các file và tùy chọn -l cung cấp kiểu danh sách dài, điều này sẽ cho ra kết

$ls -la

drwxrwxr-x 4 teacher class 2048 Jul 16 17.56 .

drwxr-xr-x 60 root 1536 Jul 13 14:18 ..

---------- 1 teacher class 4210 May 1 08:27 .profile

-rwxr-xr-x 1 teacher class 1948 May 12 13:42 memo

$

quả sau:

Quyền hạn/Chế độ truy cập file trong Unix

Quyền sở hữu file là một thành phần quan trọng của Unix mà cung cấp phương thức bảo mật để

lưu giữ file. Mọi file trong Unix có các thuộc tính sau để thể hiện quyền hạn truy cập tới nó (File

Permission):

Page 19

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

 Quyền hạn truy cập của người sở hữu: Quyền hạn truy cập của chủ nhân quyết định

 Quyền hạn truy cập nhóm: Quyền hạn truy cập của nhóm quyết định hành động gì mà

những hành động gì mà người sở hữu có thể thực hiện trên file.

 Các quyền hạn truy cập khác: Chỉ hành động nào mà tất cả những người sử dụng có thể

người sử dụng, thành viên của nhóm mà sở hữu file, có thể thực hiện trên file.

thực hiện trên file.

Các dấu hiệu về quyền hạn truy cập Trong khi sử dụng lệnh ls -l, nó hiển thị các thông tin đa dạng liên quan đến quyền hạn truy cập

$ls -l /home/amrood

-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile

drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir

trên file như sau:

Tại đây, cột đầu tiên đại diện cho các chế độ truy cập khác nhau, ví dụ như quyền hạn truy cập liên

kết với một file hoặc thư mục.

Các quyền hạn truy cập được chia thành ba nhóm, mà mỗi vị trí trong nhóm biểu hiện một quyền

 Các ký tự đầu tiên từ 1 đến 3 (2-4 trong dãy kể cả dấu -) đại diện quyền hạn truy cập cho

hạn truy cập cụ thể, theo thứ tự: đọc (r), viết (w) và thực thi (x):

người sử hữu file. Ví dụ -rwxr-xr-- biểu diễn rằng người sở hữu có cho phép đọc (r), viết

 Nhóm 3 ký tự tiếp theo từ 5-7 đại diện cho quyền hạn truy cập nhóm tới những file sở hữu.

(w), và chạy chương trình (x).

Ví dụ -rwxr-xr-- đại diện rằng nhóm có cho phép đọc (r) và thực thi (x), nhưng không cho

 Nhóm 3 ký tự cuối cùng từ 8-10 đại diện quyền hạn truy cập khác. Ví dụ -rwxr-xr--đại diện

phép viết (w)

rằng ai đó trên thế giới chỉ cho phép đọc (r).

Chế độ truy cập vào file trong Unix/Linux Quyền hạn truy cập của một file là dòng đầu tiên của sự bảo vệ trong hệ thống Unix. Các khối xây

dựng cơ bản trong quyền hạn truy cập Unix là các quyền hạn truy cập đọc, viết và thực thi được

miêu tả dưới đây:

Page 20

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp 1. Đọc: Cho phép đọc nội dung của file.

2. Viết: Cho phép chỉnh sửa hoặc gỡ bỏ nội dung của file.

3. Thực thi: Người sử dụng với quyền hạn truy cập thực thi có thể chạy một file như là một chương trình.

Chế độ truy cập vào thư mục Các chế độ truy cập vào thư mục được liệt kê và tổ chức trong cùng một cách như trong bất kỳ một

file nào. Có một vài điểm khác nhau mà bạn cần chú ý:

1. Đọc: Truy cập vào một thư mục với nghĩa là người sử dụng có thể đọc các nội dung. Người sử dụng có

thể xem tên các file bên trong một thư mục.

2. Viết Cho phép người sử dụng có thể thêm hoặc xóa file nội dung của thư mục.

3. Thực thi: Chạy một thư mục không thực sự mang nhiều ý nghĩa, vì thế bạn chỉ coi đó là giấy phép để ngang

qua.

Một người sử dụng phải có quyền truy cập thực thi tới thư mục bin để chạy lệnh ls hoặc cd chẳng

hạn.

Thay đổi các quyền hạn truy cập trong Unix/Linux Để thay đổi quyền hạn truy cập của file hoặc thư mục, bạn sử dụng lệnh chmod (viết tắt của

change mode). Có hai cách để sử dụng chmod là: chế độ tượng trưng (Symbolic Mode) và chế độ

tuyệt đối (Absolute Mode).

Sử dụng chmode trong chế độ tượng trưng

Page 21

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Cách dễ nhất cho người mới bắt đầu để chỉnh sửa quyền hạn truy cập file hoặc thư mục là sử

dụng chế độ tượng trưng. Với chế độ này bạn có thể thêm, xóa hoặc xác định tập hợp các cho

phép mà bạn muốn bằng cách sử dụng các toán tử sau:

Toán tử chmod Miêu tả

+ Thêm quyền hạn truy cập được chỉ định tới một file hoặc tệp

Gỡ bỏ quyền hạn truy cập đã được chỉ định từ một file hoặc - thư mục

= Thiết lập các quyền hạn truy cập được chỉ định.

Dưới đây là một ví dụ bằng cách sử dụng lệnh testfile. Chạy ls -1 trên testfile chỉ rằng quyền hạn

$ls -l testfile

-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile

truy cập của file là như sau:

Sau đó mỗi ví dụ lệnh chmod từ bảng trước được chạy trên testfile, theo sau bởi ls -l vì thế bạn có

$chmod o+wx testfile

$ls -l testfile

-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile

$chmod u-x testfile

$ls -l testfile

-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile

$chmod g=rx testfile

$ls -l testfile

-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile

thể quan sát các thay đổi của quyền hạn truy cập.

$chmod o+wx,u-x,g=rx testfile

$ls -l testfile

Tại đây là cách bạn có thể kết nối những lệnh này trên một dòng đơn:

Page 22

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile

Sử dụng chmod với quyền hạn truy cập tuyệt đối trong Unix/Linux Cách thứ hai để chỉnh sửa quyền hạn truy cập với lệnh chmod là sử dụng số để xác định các

quyền hạn truy cập cho file.

Mỗi quyền hạn truy cập được ấn định bằng một giá trị, như trong bảng dưới, và tổng của mỗi

quyền hạn truy cập cung cấp một số cho tập hợp thiết lập đó.

Số Đại diện cho quyền hạn truy cập trong hệ cơ số 8 Tham chiếu

0 Không cho phép ---

1 Cho phép thực thi --x

2 Cho phép viết -w-

3 Cho phép thực thi và viết: 1 (thực thi) + 2 (viết) = 3 -wx

4 Cho phép đọc r--

5 Cho phép đọc và thực thi: 4(đọc) + 1 (thực thi) = 5 r-x

6 Cho phép đọc và viết: 4 (đọc) + 2 (viết) = 6 rw-

7 Cho phép tất cả: 4 (đọc) + 2 (viết) + 1 (thực thi) = 7 rwx

Tại đây là một ví dụ sử dụng testfile. Chạy ls -1 trên testfile chỉ rằng các quyền hạn truy cập của file

$ls -l testfile

-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile

là như sau:

Mỗi ví dụ lệnh chmod từ bảng trước được chạy trên testfile, theo sau bởi ls -l vì thế bạn có thể

quan sát các thay đổi của quyền hạn truy cập:

Page 23

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ chmod 755 testfile

$ls -l testfile

-rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile

$chmod 743 testfile

$ls -l testfile

-rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile

$chmod 043 testfile

$ls -l testfile

----r---wx 1 amrood users 1024 Nov 2 00:10 testfile

Thay đổi người sở hữu và nhóm trong Unix/Linux Trong khi tạo một tài khoản trên Unix, nó gán một ID người sở hữu và một ID sở hữu nhóm cho

mỗi người sử dụng. Tất cả các quyền hạn truy cập đề cập ở trên là cũng được gán dựa trên người

sử hữu và nhóm.

Hai lệnh có sẵn để thay đổi sở hữu cá nhân và sở hữu nhóm của file là:

1. chown: Lệnh này đại diện cho thay đổi sở hữu cá nhân (change owner).

2. chgrp: Lệnh này đại diện cho thay đổi sở hữu nhóm (change group).

Thay đổi quyền sở hữu trong Unix/Linux Lệnh chown thay đổi quyền sở hữu của một file. Cú pháp cơ bản là:

$ chown user filelist

Giá trị của user có thể là tên hoặc ID của người sử dụng trên hệ thống. Ví dụ:

$ chown amrood testfile

$

Ví dụ:

Thay đổi người sở hữu của file đã cho tới người sở hữu amrood.

Ghi chú: Người sở hữu gốc có quyền không bị hạn chế để thay đổi quyền sở hữu của bất kỳ file

nào nhưng người sở hữu thông thường chỉ có thể thay đổi quyền sở hữu của những file mà họ sở

hữu.

Page 24

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Thay đổi quyền sở hữu nhóm trong Unix/Linux Lệnh chrgp thay đổi sở hữu nhóm của file. Cú pháp đơn giản là:

$ chgrp group filelist

Giá trị của group có thể là tên hoặc ID của nhóm trên hệ thống. Ví dụ:

$ chgrp special testfile

$

Ví dụ:

Thay đổi sở hữu nhóm đã chọn tới nhóm special.

Quyền hạn truy cập SUID và SGID (thiết lập ID cá nhân và nhóm) trong Unix/Linux Thông thường khi một lệnh được chạy, nó sẽ phải chạy cùng với các đặc quyền đặc biệt để thực

hiện nhiệm vụ của nó.

Như một ví dụ, khi bạn thay đổi mật khẩu với lệnh passwd, mật khẩu mới được giữ trong tệp

/etc/shadow.

Khi là một người sử dụng thường, bạn không có được quyền truy cập để đọc hoặc viết tới file này

do các lý do bảo mật, nhưng khi bạn thay đổi mật khẩu, bạn cần có quyền viết tới file này. Điều này

có nghĩa là chương trình passwd phải cung cấp cho bạn các quyền thêm để bạn có thể viết

etc/shadow.

Các quyền thêm vào được cung cấp tới chương trình thông qua một kỹ thuật được biết đến

là Thiết lập ID người sử dụng (Set User ID – SUID bit) và Thiết lập ID nhóm (Set Group ID – SGID

bit).

Khi bạn chạy một chương trình mà có quyền hạn truy cập SUID, bạn sử dụng nó để thay đổi sở

hữu của chương trình đó. Các chương trình mà không thiết lập SUID thì đang chạy với quyền hạn

truy cập của người sử dụng mà khởi động chương trình.

Điều này là đúng với SGID. Các chương trình thông thường chạy với quyền hạn truy cập nhóm,

nhưng thay vào đó, nó chỉ thay đổi sở hữu nhóm cho chương trình đang chạy chứ không thay đổi

cho chương trình khác của nhóm.

Page 25

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Các bit SUID bit và SGID bit sẽ xuất hiện bằng ký tự “s” nếu quyền hạn truy cập là có sẵn. SUID “s”

bit sẽ được đặt trong các permission bit, nơi mà người sở hữu thực thi sẽ có thẩm quyền. Ví dụ,

$ ls -l /usr/bin/passwd

-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*

$

lệnh sau:

Điều này chỉ rằng SUID bit được thiết lập và lệnh được sở hữu bởi sở hữu gốc. Ký tự viết hoa S

trong vị trí thực thi thay cho chữ thường s chỉ rằng bit của thực thi không được thiết lập.

Nếu sticky bit được cho phép trên thư mục, các file chỉ có thể được gỡ bỏ nếu bạn là một trong

 Người sở hữu của thư mục sticky;

 Người sở hữu của các file bị gỡ bỏ;

 Người sở hữu gốc

những người sử dụng sau:

$ chmod ug+s dirname

$ ls -l

drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname

$

Để thiết lập các SUID bit và SGID bit cho bất kỳ thư mục, bạn thử cú pháp sau:

Cài đặt môi trường Unix/Linux

Một khái niệm Unix quan trọng là environment, mà được định nghĩa bởi các biến môi trường. Một

số được thiết lập bởi hệ thống, số khác được thiết lập bởi bạn, bởi shell hoặc bất kỳ chương trình

mà bạn tải về.

Một biến là một chuỗi ký tự mà chúng ta gán một giá trị. Giá trị được chỉ định có thể là một số, văn

bản, tên file, thiết bị hoặc bất kỳ kiểu dữ liệu khác.

Ví dụ, đầu tiên chúng ta thiết lập một biến TEST và sau đó chúng ta truy cập giá trị của nó bằng

cách sử dụng lệnh echo.

Page 26

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$TEST="Unix Programming"

$echo $TEST

Unix Programming

Ghi chú rằng các biến môi trường được thiết lập mà không sử dụng ký hiệu $ nhưng trong khi truy

cập chúng, chúng ta sử dụng ký hiệu $ như là một tiền tố. Những biến này giữ giá trị của chúng

cho đến khi chúng ta thoát khỏi shell.

Khi bạn đăng nhập vào hệ thống, Shell ở dưới chế độ khởi tạo để thiết lập môi trường biến. Điều

này thường là tiến trình 2 bước mà bao gồm Shell đọc các file sau:

 profile

/etc/profile

Tiến trình như sau:

1. Kiểm tra shell để thấy /etc/profile có tồn tại hay không..

2. Nếu nó tồn tại, Shell đọc nó. Nếu không thì, file này bị bỏ qua. Không có thông báo lỗi hiển

thị.

3. Shell kiểm tra file .profile có tồn tại hay không trong thư mục chính của bạn. Thư mục chính

là thư mục mà bắt đầu khi bạn đăng nhập thành công vào hệ thống.

4. Nếu nó tồn tại, Shell đọc nó; nếu không thì, Shell bỏ qua. Sẽ không có thông báo lỗi được

hiển thị.

$

Ngay sau khi cả hai file trên được đọc, Shell hiển thị một dòng nhắc:

Đây là dòng nhắc mà tại đó bạn có thể nhập lệnh để thực thi chúng.

Ghi chú - Tiến trình khởi tạo Shel được liệt kê chi tiết ở đây áp dụng cho tất cả Shell kiểuBourne,

nhưng một vài file được thêm vào được sử dụng bởi bash và ksh.

.profile File trong Unix/Linux: File /etc/profile được duy trì bởi người quản lý hệ thống và chứa đựng thông tin khởi tạo Shell

được yêu cầu bởi tất cả người sử dụng trên hệ thống.

Page 27

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

File .profile là dưới quyền kiểm soát của bạn. Bạn có thể nhập thêm thông tin Shell tùy theo ý bạn

 Kiểu terminal mà bạn đang sử dụng

 Danh sách các thư mục mà trong đó đặt vị trí các lệnh

 Danh sách các biến của kiểu terminal của bạn.

muốn tới file này. Thông tin ít nhất mà bạn cần thiết lập bao gồm:

Bạn có thể kiểm tra .profile trong thư mục chính. Mở nó bằng cách sử dụng bộ soạn vi và kiểm tra

tất cả các biến thiết lập cho môi trường của bạn.

Thiết lập kiểu terminal trong Unix/Linux Thường thì kiểu terminal bạn đang sử dụng là được định hình tự động bằng chương

trìnhlogin hoặc getty. Đôi khi, tiến trình định hình tự động này dự đoán kiểu terminal của bạn

không chính xác.

Nếu kiểu terminal không được thiết lập chính xác, kết quả của lệnh có thể trông khá lạ, hoặc bạn

không thể tương tác với Shell một cách chính xác.

Để đảm bảo không xảy ra trường hợp này, hầu hết người sử dụng thiết lập kiểu terminal của họ tới

$TERM=vt100

$

dạng mẫu số chung thấp nhất như sau:

Thiết lập PATH trong Unix/Linux: Khi bạn gõ bất kỳ lệnh nào trên dòng nhắc lệnh, Shell phải xác định vị trí lệnh trước khi nó có thể

được thực thi.

Biến PATH xác định vị trí trong đó Shell sẽ tìm kiếm các lệnh. Thường thì nó được thiết lập như

$PATH=/bin:/usr/bin

$

sau:

Tại đây mỗi cổng vào (entry) được thiết lập riêng rẽ bởi dấu hai chấm “:” là các thư mục. Nếu bạn

yêu cầu Shell để thực thi một lệnh và nó không thể tìm kiếm lệnh đó trong bất kỳ thư mục đã được

cung cấp biến PATH, một thông tin tương tự như sau xuất hiện:

Page 28

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$hello

hello: not found

$

Các biến PS1 và PS2 được bàn luận trong mục kế tiếp.

Các biến PS1 và PS2 trong Unix/Linux Các ký tự mà Shell hiển thị khi dòng nhắc lệnh được giữ trong biến PS1. Bạn có thể thay đổi biến

này tới bất kỳ cái gì bạn muốn. Ngay sau khi bạn thay đổi nó, nó sẽ được sử dụng bởi shell từ thời

điểm đó.

$PS1='=>'

=>

=>

=>

Ví dụ, nếu bạn thông báo lệnh:

Dòng nhắc có thể trở thành =>. Để thiết lập giá trị của PS1 để nó chỉ thư mục làm việc, thông báo

=>PS1="[\u@\h \w]\$"

[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$

[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$

lệnh sau:

Kết quả của lệnh này là dòng nhắc lệnh hiển thị tên sử dụng của người dùng, tên hostname, và thư

mục làm việc.

Có một vài dãy thoát (escape) được sử dụng làm tham số giá trị cho PS1, vì thế cố gắng giới hạn

chính bạn để dòng nhắc không lấn át thông tin.

Dãy escape Miêu tả

\t Thời gian hiện tại, diễn tả ở dạng HH:MM:SS

\d Ngày hiện tại, diễn tả ở dạng Ngày trong tuần Tháng Ngày

Page 29

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Dòng mới \n

Môi trường Shell hiện tại \s

Thư mục làm việc \W

Đường Path đầy đủ của thư mục làm việc \w

Tên sở hữu hiện tại của người sử dụng \u

Hostname của thiết bị hiện tại \h

Số lượng lệnh của lệnh hiện tại. Tăng mỗi khi có một lệnh mới được \# nhập

Nếu UID hiệu quả là 0 (đó là, nếu bạn được đăng nhập như là root), \$ kết thúc dòng nhắc với ký tự #; nếu không thì, sử dụng $.

Bạn có thể tạo sự thay đổi bởi chính bạn mỗi khi bạn đăng nhập vào, hoặc bạn có thể có thay đổi

được tạo một cách tự động trong PS1 bằng cách thêm nó tới file .profile.

Khi bạn thông báo một lệnh mà chưa hoàn thiện, Shell sẽ hiển thị một dòng nhắc lệnh thứ hai và

đợi bạn hoàn thiện lệnh đó và nhập lại.

Dòng nhắc lệnh mặc định thứ hai là ký hiệu lớn hơn >, nhưng có thể được thay đổi bằng cách định

nghĩa lại biến PS2.

$ echo "this is a

> test"

this is a

test

$

Dưới đây là ví dụ về cách sử dụng dòng nhắc lệnh thứ hai:

Tiếp theo là ví dụ mà định nghĩa lại PS2 với một dòng nhắc được tùy chỉnh theo ý ban:

Page 30

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ PS2="secondary prompt->"

$ echo "this is a

secondary prompt->test"

this is a

test

$

Các biến môi trường trong Unix/Linux Dưới đây là một danh sách cục bộ của các biến môi trường quan trọng. Những biến này sẽ được

thiết lập và truy cập như đã đề cập phần trên.

Biến Miêu tả

Chứa đựng bộ nhận diện cho sự hiển thị mà các chương trình X11 nên DISPLAY sử dụng bởi mặc định.

Chỉ dẫn thư mục chính của người sử dụng hiện tại: tham số mặc định HOME cho lệnh cd có sẵn.

Chỉ dẫn Internal Field Separator mà được sử dụng bởi sự phân tích từ IFS đang tách sau sự mở rộng.

LANG mở rộng Locale hệ thống mặc định; LC_ALL có thể được sử

dụng để viết đè lên (có quyền ưu tiên cao hơn) điều này. Ví dụ, nếu giá LANG trị của nó là pt_BR, thì sau đó ngôn ngữ được thiết lập là (Brazilian)

Portuguese và miền địa phương là Brazil.

Trên nhiều hệ thống Unix với một Dynamic Linker, chứa một danh sách

dấu hai chấm riêng rẽ của các thư mục mà Dynamic Linker tìm kiếm LD_LIBRARY_PATH các đối tượng được chia sẻ khi xây dựng một hình ảnh tiến trình sau

khi thực thi, trước khi tìm kiếm bất kỳ thư mục khác.

Chỉ dẫn tìm kiếm path cho các lệnh. Nó là một danh sách dấu hai chấm PATH riêng rẽ của các thư mục mà trong đó Shell tìm kiếm cho các lệnh.

Page 31

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

PWD Chỉ dẫn thư mục làm việc hiện tại khi thiết lập bởi lệnh cd.

Tạo một số nguyên ngẫu nhiên giữa 0 và 32767 mỗi khi nó được nhắc RANDOM đến.

Lượng gia bởi mỗi khi bash được bắt đầu. Biến này hữu dụng khi xác SHLVL định có hay không lệnh exit có sẵn kết thúc ở mục hiện tại.

TERM Liên quan kiểu hiển thị.

Liên quan miền thời gian (time zone). Nó có thể nhận các giá trị như TZ GMT, AST….

Mở rộng ID sử dụng dạng số của người sử dụng hiện tại, khởi tạo khi UID Shell bắt đầu.

$ echo $HOME

/root

]$ echo $DISPLAY

$ echo $TERM

xterm

$ echo $PATH

/usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin

$

Dưới đây là ví dụ minh họa một vài biến môi trường:

Các tiện ích cơ bản: in, email trong Unix

Đến chương này, bạn đã có một vài nhận thức cơ bản về hệ thống Unix và một số lệnh cơ bản của

nó. Chương này sẽ sơ qua về một số tiện ích cơ bản nhưng quan trọng trong các tiện ích của Unix

mà bạn sẽ sử dụng chúng trong hoạt động thường nhật.

In các file trong Unix/Linux

Page 32

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Trước khi bạn in một file trên hệ thống Unix, bạn có thể muốn định dạng lại nó để tùy chỉnh các lề,

đánh dấu một vài từ,…. Hầu hết các file có thể được in mà không cần định dạng lại, nhưng bản in

thô như vậy thường trông không được đẹp cho lắm.

Rất nhiều phiên bản của Unix bao gồm hai trình định dạng văn bản rất tiện ích: nroff vàtroff.

Chúng không được tìm hiểu trong chương này nhưng bạn có thể tìm hiểu tiện ích của chúng thông

qua mạng.

Lệnh pr trong Unix/Linux Lệnh pr phản ánh quá trình định dạng file trên màn hình terminal hoặc cho một máy in. Ví dụ, nếu

bạn có một danh sách tên dài của một file, bạn có thể định dạng nó trên màn hình vào hai hay

nhiều cột.

pr option(s) filename(s)

Dưới đây là cú pháp lệnh pr:

Lệnh pr thay đổi định dạng của file chỉ trên màn hình hoặc trên bản in, nó không chỉnh sửa file ban

đầu. Bảng dưới đây liệt kê một vài tùy chọn của lệnh pr:

Chức năng Miêu tả

Tạo ra k cột đầu ra. -k

-d Khoảng trống kép ở đầu ra (không phải trên tất cả phiên bản pr).

-h "header" Làm cho mục mới trở thành như một đầu đề của bản báo cáo.

-t Khử lề khi in đầu đề và các lề trên/dưới.

Thiết lập độ dài trang tới PAGE_LENGTH (66) dòng. Số từ mặc định -l PAGE_LENGTH của các dòng là 56.

-o MARGIN In ôpxet mỗi dòng với khoảng cách lề là 0.

-w PAGE_WIDTH Thiết lập độ rộng tới PAGE_WIDTH (72) ký tự chỉ cho đầu ra dạng

Page 33

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

nhiều cột.

$cat food

Sweet Tooth

Bangkok Wok

Mandalay

Afghani Cuisine

Isle of Java

Big Apple Deli

Sushi and Sashimi

Tio Pepe's Peppers

........

$

Trước khi sử dụng pr, dưới đây là các nội dung của một file mẫu: food.

$pr -2 -h "Restaurants" food

Nov 7 9:58 1997 Restaurants Page 1

Sweet Tooth Isle of Java

Bangkok Wok Big Apple Deli

Mandalay Sushi and Sashimi

Afghani Cuisine Tio Pepe's Peppers

........

$

Bây giờ chúng ta sử dụng lệnh pr để tạo một bản báo cáo có 2 cột với đầu đề là Restaurents:

Các lệnh Ip và Ipr trong Unix/Linux Lệnh Ip hoặc Ipr in một file trên giấy từ màn hình hiển thị. Một khi bạn đã định dạng file sử dụng

lệnh pr và sẵn sàng để in, bạn có thể sử dụng bất cứ lệnh nào trong 2 lệnh này để in file của bạn

trên máy in kết nối được với máy tính của bạn.

Quản lý hệ thống có thể đã thiết lập máy in mặc định tại site của bạn. Để in một file có tên là food

trên máy in mặc định, bạn sử dụng lệnh lp hoặc lpr như trong ví dụ sau:

Page 34

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$lp food

request id is laserp-525 (1 file)

$

 Nếu bạn sử dụng lệnh Ip, bạn có thể sử dụng chức năng -nNum để in số lượng bản sao là

Lệnh Ip chỉ một ID mà bạn có thể sử dụng để dừng công việc in hoặc kiểm tra trạng thái của nó.

 Nếu có nhiều máy in kết nối với máy tính của bạn, thì khi đó bạn có thể chọn một máy in

Num. Cùng với lệnh Ipr, bạn có thể sử dụng tùy chọn -Num để thực hiện việc tương tự.

bằng cách sử dụng tùy chọn –dprinter với lệnh Ip và sử dụng tùy chọn -Pprinter với lệnh

Ipr cho mục đích tương tự. Tại đây, printer là tên máy in.

Các lệnh Ipstat và Ipq trong Unix/Linux Lệnh Ipstat chỉ những gì trong hàng máy in: ID yêu cầu, cỡ file, khi các công việc được gửi cho

mục đích in, và các trạng thái của các yêu cầu.

Sử dụng Ipstat -o nếu bạn muốn quan sát toàn bộ các yêu cầu đầu ra chứ không phải chỉ các yêu

$lpstat -o

laserp-573 john 128865 Nov 7 11:27 on laserp

laserp-574 grace 82744 Nov 7 11:28

laserp-575 john 23347 Nov 7 11:35

$

cầu của riêng bạn. Các yêu cầu được trình bày theo thứ tự chúng được in:

$lpq

laserp is ready and printing

Rank Owner Job Files Total Size

active john 573 report.ps 128865 bytes

1st grace 574 ch03.ps ch04.ps 82744 bytes

2nd john 575 standard input 23347 bytes

$

Lệnh Ipq cung cấp thông tin hơi khác với lệnh Ipstat -o:

Page 35

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Ở đây dòng đầu tiên hiển thị trạng thái máy in. Nếu máy in không hoạt động hoặc đang hết giấy,

bạn có thể quan sát các thông tin khác trên dòng đầu tiên.

Các lệnh cancel và Iprm trong Unix/Linux Lệnh cancel kết thúc yêu cầu in từ lệnh Ip. Lệnh Iprm kết thúc các yêu cầu của Ipr. Bạn có thể xác

$cancel laserp-575

request "laserp-575" cancelled

$

định hoặc ID của yêu cầu (hiển thị bởi lệnh Ip hoặc Ipq) hoặc tên của máy in.

Để dừng các yêu cầu hiện tại đang in, bất chấp ID của nó, đơn giản bạn nhấn cancel và tên máy

$cancel laserp

request "laserp-573" cancelled

$

in:

Lệnh Iprm sẽ dừng công việc đang thực hiện nếu lệnh đó do bạn đề ra. Nếu không thì, bạn có thể

cung cấp các tên công việc như là tham số hoặc sử dụng một dấu gạch ngang (-) để gỡ bỏ tất cả

$lprm 575

dfA575diamond dequeued

cfA575diamond dequeued

$

công việc của bạn:

Lệnh Iprm nói cho bạn về các tên file thực sự bị dỡ bỏ từ hàng in.

Gửi Email trong Unix/Linux Bạn sử dụng lệnh mail để gửi và nhận mail. Dưới đây là cú pháp để gửi một Email:

$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr

Bảng dưới liệt kê các chức năng quan trọng liên quan đến lệnh mail:

Chức năng Miêu tả

Page 36

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

-s Xác định subject trên dòng lệnh.

Gởi các bản sao carbon tới danh sách của các người sử dụng. Danh -c sách có thể là một bản danh sách tên phân biệt bằng dấu phảy.

Gởi các bản sao blind carbon tới danh sách. Danh sách có thể là một -b bản danh sách tên phân biệt bằng dấu phảy.

$mail -s "Test Message" admin@yahoo.com

Dưới đây là ví dụ để gửi một Test message tới địa chỉ admin@yahoo.com.

Bạn sau đó được mong đợi để gõ văn bản vào thông báo của bạn, theo sau bởi một control-D tại

Hi,

This is a test

.

Cc:

phần bắt đầu của một dòng. Để dừng việc gõ văn bản này, đơn giản bạn gõ dấu chấm (.) như sau:

$mail -s "Report 05/06/07" admin@yahoo.com < demo.txt

Bạn có thể gửi một file đầy đủ bằng cách sử dụng một toán tử điều hướng lại < như sau::

$mail

no email

Để kiểm tra các thư đến trong hệ thống Unix của mình, bạn gõ lệnh email như sau:

Filter và Pipe trong Unix

Bạn có thể kết nối hai lệnh với nhau để mà đầu ra của một chương trình là đầu vào của chương

trình tiếp theo. Hai hoặc nhiều lệnh được kết nối trong cách này tạo thành mộtpipe.

Để tạo một pipe, đặt một thanh dọc (|) trên dòng lệnh giữa hai lệnh.

Khi một chương trình nhận đầu vào từ một chương trình khác, thực hiện một vài hoạt động trên

đầu vào đó, và viết kết quả cho đầu ra, nó được đề cập như là một filter.

Page 37

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Lệnh grep trong Unix/Linux Chương trình grep tìm một file hoặc các file cho các dòng mà có một mẫu nào đó. Cú pháp của nó

$grep pattern file(s)

là:

Tên grep bắt nguồn từ lệnh ed (UNIX line editor), g/re/p có nghĩa là “globally search for a regular

expression and print all lines containing it” (tìm kiếm toàn cầu cho một regular expression và in tất

cả dòng chứa nó)."

Một regular expression là hoặc một vài đoạn thuần văn bản hoặc các ký tự đặc biệt sử dụng cho

các kết nối mẫu.

Cách sử dụng đơn giản nhất của grep là tìm kiếm một mẫu chứa một từ đơn. Nó có thể thể được

sử dụng trong một pipe để mà chỉ trong những dòng này của các file đầu vào chứa một chuỗi đã

cho được gửi tới đầu ra tiêu chuẩn. Nếu bạn không cung cấp cho grep một tên file để đọc, nó đọc

$ls -l | grep "Aug"

-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02

-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07

-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro

-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros

$

đầu vào tiêu chuẩn, đây là cách mà tất cả các filter làm việc.

Có các chức năng khác nhau mà bạn có thể sử dụng song song với lệnh grep:

Chức năng Miêu tả

In tất cả các dòng mà không kết nối với mẫu đã cho. -v

In các dòng kết nối và số dòng của nó. -n

Chỉ in tên file với các dòng kết nối. -l

Chỉ in số lượng các dòng kết nối. -c

Page 38

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

-i Kết nối hoặc với chữ hoa hoặc chữ thường.

Bây giờ, chúng ta sử dụng một regular expression mà nói cho lệnh grep để tìm các dòng với

“carol”, theo sau bởi không hoặc nhiều ký tự khác được tóm tắt trong một regular expression như

là dấu sao “*”, sau đó theo sau bởi “Aug”.

$ls -l | grep -i "carol.*aug"

-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros

$

Ở đây chúng ta đang sử dụng chức năng -i để có sự tìm kiếm phân biệt chữ hoa với chữ thường:

Lệnh sort trong Unix/Linux Lệnh sort sắp xếp các dòng của văn bản theo thứ tự chữ cái hoặc thứ tự số. Ví dụ bên dưới xếp

$sort food

Afghani Cuisine

Bangkok Wok

Big Apple Deli

Isle of Java

Mandalay

Sushi and Sashimi

Sweet Tooth

Tio Pepe's Peppers

$

hàng các dòng trong một food file.

Lệnh sort, theo mặc định, sắp xếp các dòng của văn bản theo thứ tự chữ cái. Có rất nhiều chức

năng mà điều khiển việc sắp hàng này:

Chức năng Miêu tả

-n Sắp xếp theo thứ tự số, bỏ qua các khoảng trống và các tab.

-r Nghịch đảo thứ tự của sự sắp xếp.

Page 39

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Sắp xếp chữ hoa và chữ thường cùng với nhau. -f

Bỏ qua các x trường đầu tiên khi sắp xếp. +x

Có thể có nhiều hơn hai lệnh được kết nối trong một pipe. Ví dụ về pipe trên sử dụng grep, chúng

ta có thể sắp xếp các file theo cách khác là bằng cách chỉnh sửa theo thứ tự kích cỡ trong August.

$ls -l | grep "Aug" | sort +4n

-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros

-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro

-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07

-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02

$

Pipe sau chứa các lệnh: ls, grep, và sort:

Pipe này sắp xếp tất cả các file trong thư mục của bạn được chỉnh sửa theo thứ tự kích cỡ trong

August và in chúng tới màn hình terminal. Chức năng +4n bỏ qua 4 trường (các trường mà phân

biệt bởi khoảng trống), sau đó sắp xếp các dòng theo thứ tự số.

Các lệnh pg và more trong Unix/Linux làm Một đầu ra dài

thường tràn màn hình, nhưng nếu bạn chạy văn bản thông

qua morehoặc pg như là một filter thì màn hình hiển thị sẽ dừng sau mỗi khi màn hình đầy văn

bản.

Chúng ta giả sử rằng bạn có một danh sách thư mục dài. Để làm cho nó dễ dàng hơn khi đọc danh

$ls -l | grep "Aug" | sort +4n | more

-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros

-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro

-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07

-rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03

.

.

.

sách đã được sắp xếp này, dẫn output thông qua lệnh more như sau:

Page 40

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

-rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05

--More--(74%)

Màn hình sẽ được phủ đầy bởi các văn bản chứa trong các dòng được sắp xếp theo thứ tự kích

cỡ. Tại vị trí cuối cùng của màn hình, tại dòng nhắc lệnh more bạn có thể gõ một lệnh để di chuyển

qua phần văn bản được sắp xếp.

Khi bạn làm việc với màn hình này, bạn có thể sử dụng bất kỳ lệnh trong số các lệnh được liệt kê

trong chương trình.

Quản lý tiến trình trong Unix

Khi bạn chạy một chương trình trên hệ thống Unix, hệ thống tạo một môi trường đặc biệt cho

chương trình đó. Môi trường này chứa mọi thứ cần thiết cho hệ thống chạy chương trình nếu như

không có chương trình khác đang chạy trên hệ thống.

Bất cứ khi nào bạn thông báo một lệnh trong Unix, nó tạo hoặc bắt đầu một tiến trình mới. Khi bạn

cố gắng thực hiện một lệnh ls để liệt kê nội dung thư mục, bạn bắt đầu một tiến trình. Một tiến

trình, hiểu theo cách đơn giản, là một ví dụ của một chương trình đang chạy.

Hệ điều hành theo dõi các tiến trình thông qua một ID có 5 ký số mà được biết như là ID pidhoặc

Process ID. Mỗi tiến trình trong hệ thống có một pid duy nhất.

Pid thường lặp lại bởi vì tất cả các số có thể đã được sử dụng và pid kế tiếp lặp lại. Tại bất kỳ lúc

nào, không thể có hai tiến trình với hai pid giống nhau cùng tồn tại trong hệ thống bởi vì nó là pid

mà Unix sử dụng để theo dõi mỗi tiến trình.

Bắt đầu một tiến trình trong Unix/Linux Khi bạn bắt đầu một tiến trình (chạy một lệnh), có 2 cách để bạn chạy nó:

 Foreground Process

 Background Process

Tiến trình Foreground trong Unix/Linux Theo mặc định, mọi tiến trình mà bạn bắt đầu chạy là Foreground Process. Nó nhận input từ bàn

phím và gửi output tới màn hình.

Page 41

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Bạn có thể quan sát điều này xảy ra với lệnh ls. Nếu bạn muốn liệt kê tất cả các file trong thư mục

$ls ch*.doc

hiện tại, bạn có thể sử dụng lệnh sau:

ch01-1.doc ch010.doc ch02.doc ch03-2.doc

ch04-1.doc ch040.doc ch05.doc ch06-2.doc

ch01-2.doc ch02-1.doc

Nó sẽ hiển thị tất cả file mà tên bắt đầu với ch và kết thúc với .doc.

Tiến trình chạy trong Foreground, kết quả của nó được hướng trực tiếp trên màn hình của tôi và

nếu lệnh ls muốn bất kỳ đầu vào nào, nó đợi từ bàn phím.

Trong khi một chương trình đang chạy trong Foreground và cần một khoảng thời gian dài, chúng ta

không thể chạy bất kỳ lệnh khác (bắt đầu một tiến trình khác) bởi vì dòng nhắc không có sẵn tới khi

chương trình đang chạy kết thúc tiến trình và thoát ra.

Tiến trình Background trong Unix/Linux Background Process chạy mà không được kết nối với bàn phím của bạn. Nếu tiến trình

Background yêu cầu bất cứ đầu vào từ bàn phím, nó đợi.

Lợi thế của chạy một chương trình trong Background là bạn có thể chạy các lệnh khác; bạn không

phải đợi tới khi nó kết thúc để bắt đầu một tiến trình mới!

Cách đơn giản nhất để bắt đầu một tiến trình Background là thêm dấu và (&) tại phần cuối của

$ls ch*.doc &

lệnh.

ch01-1.doc ch010.doc ch02.doc ch03-2.doc

ch04-1.doc ch040.doc ch05.doc ch06-2.doc

ch01-2.doc ch02-1.doc

Điều này cũng hiển thị tất cả các file mà tên bắt đầu với ch và kết thúc với .doc:

Tại đây, nếu lệnh ls muốn bất kỳ đầu vào nào (mà nó không), nó tiến vào trạng thái dừng tới khi

bạn di chuyển nó vào trong Foreground và cung cấp cho nó dữ liệu từ bàn phím.

Page 42

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Dòng đầu tiên chứa các thông tin về Background Process - số công việc (job number) và Process

ID. Bạn cần biết về Job number để thao tác nó giữa Background và Foreground.

[1] + Done ls ch*.doc &

$

Nếu bạn nhấn phím Enter bây giờ, bạn nhìn thấy như sau:

Dòng đầu tiên nói cho bạn rằng lệnh ls trong Background Process đã hoàn thành một cách thành

công. Dòng thứ hai là một dòng nhắc cho một lệnh khác.

Liệt kê các tiến trình đang chạy trong Unix/Linux Nó là dễ dàng để quan sát các tiến trình của bạn bằng cách chạy lệnh ps (viết tắt của process

$ps

PID TTY TIME CMD

18358 ttyp3 00:00:00 sh

18361 ttyp3 00:01:31 abiword

18789 ttyp3 00:00:00 ps

status) như sau:

Một trong những flag được sử dụng cho ps là -f (viết tắt của full), mà cung cấp nhiều thông tin như

$ps -f

UID PID PPID C STIME TTY TIME CMD

amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one

amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one

amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh

amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f

ví dụ dưới đây:

Dưới đây là sự miêu tả của tất cả các file được hiển thị bởi lệnh ps -f.

Miêu tả Cột

UID ID người sử dụng mà tiến trình này thuộc sở hữu (người chạy nó).

Page 43

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

PID Process ID.

PPID Process ID gốc (ID của tiến trình mà bắt đầu nó).

C CPU sử dụng của tiến trình.

STIME Thời gian bắt đầu tiến trình.

TTY Kiểu terminal liên kết với tiến trình.

TIME Thời gian CPU bị sử dụng bởi tiến trình.

CMD Lệnh mà bắt đầu tiến trình này.

Có những chức năng khác mà có thể được sử dụng song song với lệnh ps:

Chức năng Miêu tả

Chỉ thông tin về tất cả người sử dụng. -a

Chỉ thông tin về các tiến trình mà không có terminal. -x

Chỉ thông tin thêm vào như chức năng -f. -u

Hiển thị thông tin được mở rộng. -e

Dừng tiến trình trong Unix/Linux Kết thúc một tiến trình có thể được thực hiện theo vài cách khác nhau. Thông thường, từ một lệnh

console-based, gửi CTRL + C bằng gõ phím (mặc định là ký tự ngắt) sẽ hủy lệnh. Nó làm việc khi

tiến trình đang chạy trong chế độ Foreground.

Nếu một tiến trình đang chạy trong chế độ Background, thì đầu tiên bạn cần nhận ID công việc (job

$ps -f

ID) bằng cách sử dụng lệnh ps và sau đó bạn có thể sử dụng lệnh kill để khử tiến trình như sau:

Page 44

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

UID PID PPID C STIME TTY TIME CMD

amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one

amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one

amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh

amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f

$kill 6738

Terminated

Ở đây lệnh kill sẽ kết thúc tiến trình first_one. Nếu một tiến trình thường bỏ qua một lệnh kill, bạn

$kill -9 6738

Terminated

có thể sử dụng kill -9 theo sau bởi Process ID như sau:

Tiến trình mẹ và tiến trình con trong Unix/Linux Mỗi một tiến trình Unix có hai ID được gán cho nó: Process ID (pid) và Parent Process ID (ppid).

Mỗi tiến trình trong hệ thống có một Parent Process (gốc).

Hầu hết các lệnh mà bạn chạy có Shell như là mẹ của nó. Kiểm tra ví dụ ps -f mà tại đây lệnh này

liệt kê cả Process ID và Process ID gốc.

Tiến trình Zombie và Orphan Thông thường, khi một tiến trình con bị khử, Parent Process được thông báo thông qua ký hiệu

SIGCHLD. Sau đó, tiến trình gốc có thể thực hiện một vài công việc khác hoặc bắt đầu lại tiến trình

con nếu cần thiết. Tuy nhiên, đôi khi Parent Process bị khử trước khi tiến trình con của nó bị khử.

Trong trường hợp này, Parent Process của tất cả các tiến trình, “tiến trìnhinit”, trở thành PPID mới

(Process ID mẹ). Đôi khi những tiến trình này được gọi là tiến trình Orphan.

Khi một tiến trình bị khử, danh sách liệt kê ps có thể vẫn chỉ tiến trình với trạng thái Z. Đây là trạng

thái Zombie, hoặc tiến trình không tồn tại. Tiến trình này bị khử và không được sử dụng. Những

tiến trình này khác với tiến trình orphan. Nó là những tiến trình mà đã chạy hoàn thành nhưng vần

có một cổng vào trong bảng tiến trình.

Tiến trình Daemon trong Unix/Linux Daemon là các Background Process liên quan tới hệ thống mà thường chạy với quyền hạn truy

cập của root và các dịch vụ yêu cầu từ tiến trình khác.

Page 45

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Một tiến trình deamon không có terminal điều khiển. Nó không thể mở /dev/tty. Nếu bạn thực hiện

một ps-ef và quan sát vào trường tty, tất cả deamon sẽ có một dấu ? cho tty.

Để rõ hơn, một deamon chỉ là một tiến trình mà chạy trong Background, thường đợi cho cái gì đó

xảy ra mà nó có khả năng làm việc với, giống như máy in deamon đang đợi các lệnh in.

Nếu bạn có một chương trình mà cần thực hiện một tiến trình dài, thì sau đó giá trị của nó để tạo

một deamon và chạy nó trong Background.

Lệnh top trong Unix/Linux Lệnh top là một công cụ rất hữu ích cho việc hiển thị nhanh các tiến trình được sắp xếp bởi các

tiêu chuẩn đa dạng.

Nó là một công cụ chẩn đoán tương tác mà cập nhật thường xuyên và hiển thị thông tin về bộ nhớ

vật lý và bộ nhớ ảo, sự sử dụng CPU, ….

Dưới đây là cú pháp đơn giản để chạy lệnh top và quan sát kết quả thống kê của sự sử dụng CPU

$top

bằng các tiến trình khác nhau:

Job ID với Process ID trong Unix/Linux Tiến trình Background và Foreground thường được thao tác thông qua Job ID. Số này khác với

Process ID và được sử dụng bởi vì nó ngắn hơn.

Ngoài ra, một công việc có thể bao gồm nhiều tiến trình đang chạy trong seri hoặc tại cùng một thời

gian, song song, vì thế sử dụng Job ID là dễ dàng hơn theo dõi các tiến trình riêng lẻ.

Các tiện ích giao tiếp mạng trong Unix

Khi bạn làm việc trong môi trường phân phối thì khi đó bạn cần giao tiếp với những người sử dụng

từ xa và bạn cũng cần truy cập vào các thiết bị Unix từ xa.

Có một vài tiện ích Unix mà đặc biệt hữu ích cho người sử dụng giao tiếp trong một môi trường

phân phối, kết nối mạng. Chương này liệt kê vài tiện ích trong số chúng.

Tiện ích ping trong Unix/Linux

Page 46

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Lệnh ping gửi một yêu cầu echo tới một host có sẵn trên mạng. Sử dụng lệnh này bạn có thể kiểm

tra nếu host từ xa của bạn đang phản hồi tốt hoặc không.

 Theo dõi và phân tích tính đơn lập phần cứng và các vấn đề về phần mềm.

 Xác định trạng thái của mạng và các host ngoại đa dạng khác.

 Kiểm tra, đánh giá và quản lý mạng.

Lệnh ping hữu ích vì:

Cú pháp trong Unix/Linux Sau đây là cú pháp đơn giản để sử dụng lệnh ping:

$ping hostname hoặc ip-address

Lệnh trên sẽ bắt đầu in một phản hổi sau mỗi giây. Để thoát khỏi lệnh này bạn có thể kết thúc nó

bằng cách nhấn tổ hợp phím CTRL + C.

Ví dụ trong Unix/Linux: Dưới đây là ví dụ để kiểm tra tính sẵn sàng của một host có trên mạng:

$ping google.com

PING google.com (74.125.67.100) 56(84) bytes of data.

64 bytes from 74.125.67.100: icmp_seq=1 ttl=54 time=39.4 ms

64 bytes from 74.125.67.100: icmp_seq=2 ttl=54 time=39.9 ms

64 bytes from 74.125.67.100: icmp_seq=3 ttl=54 time=39.3 ms

64 bytes from 74.125.67.100: icmp_seq=4 ttl=54 time=39.1 ms

64 bytes from 74.125.67.100: icmp_seq=5 ttl=54 time=38.8 ms

--- google.com ping statistics ---

22 packets transmitted, 22 received, 0% packet loss, time 21017ms

rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms

$

$ping giiiiiigle.com

ping: unknown host giiiiigle.com

Nếu một host không tồn tại thì khi đó nó sẽ chạy một cái gì đó giống như sau:

Page 47

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$

Tiện ích ftp trong Unix/Linux Ở đây ftp là viết tắt của File Transfer Protocol. Tiện ích này giúp bạn tải lên và tải về (upload và

download) file của bạn từ một máy tính sang một máy tính khác.

Tiện ích ftp có bộ thiết lập riêng của nó trong Unix như các lệnh mà cho phép bạn thực hiện các

 Kết nối và đăng nhập tới một host từ xa.

 Điều hướng các thư mục;

 Liệt kê nội dung thư mục;

 Đặt và nhận các file;

 Truyền tải các file dạng ASCII, EBCDIC hoặc nhị phân.

công việc như:

Cú pháp trong Unix/Linux Dưới đây là cú pháp đơn giản để sử dụng lệnh ftp:

$ftp hostname hoặc ip-address

Lệnh trên sẽ nhắc bạn nhập ID đăng nhập và mật khẩu. Một khi bạn đã xác nhận xong, bạn có thể

truy cập trên thư mục chính của tài khoản đăng nhập và bạn có thể thực hiện các lệnh khác nhau.

Một số lệnh hữu ích được liệt kê sau đây:

Lệnh Miêu tả

put filename Tải một filename lên từ thiết bị nội bộ lên thiết bị từ xa

get filename Tải một filename xuống từ thiết bị từ xa xuống thiết bị nội bộ

mput file list Tải nhiều hơn một file từ thiết bị nội bộ lên thiết bị từ xa.

Page 48

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

mget file list Tải xuống nhiều hơn một file từ thiết bị từ xa xuống thiết bị nội bộ.

Tắt dòng nhắc lệnh, theo mặc định bạn sẽ được nhắc để tải lên hoặc tải prompt off xuống các movie bằng cách sử dụng lệnh mput hoặc mget.

prompt on Bật dòng lệnh nhắc.

dir Liệt kê tất cả các file có trong thư mục hiện tại của thiết bị từ xa.

cd dirname Thay đổi thư mục tới dirname trên thiết bị từ xa.

lcd dirname Thay đổi thư mục tới dirname trên thiết bị nội bộ.

quit Thoát ra từ sự đăng nhập hiện tại .

Nó nên được ghi chú rằng các file sẽ được download hoặc upload tới hoặc từ các thư mục hiện tại.

Nếu bạn muốn upload các file của bạn trong một thư mục riêng biệt thì khi đó đầu tiên bạn thay đổi

tới thư mục đó và sau đó tải file đã được yêu cầu lên.

Ví dụ trong Unix/Linux: Dưới đây là ví dụ để minh họa về một số lệnh:

$ftp amrood.com

Connected to amrood.com.

220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)

Name (amrood.com:amrood): amrood

331 Password required for amrood.

Password:

230 User amrood logged in.

ftp> dir

200 PORT command successful.

150 Opening data connection for /bin/ls.

total 1464

drwxr-sr-x 3 amrood group 1024 Mar 11 20:04 Mail

drwxr-sr-x 2 amrood group 1536 Mar 3 18:07 Misc

Page 49

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

drwxr-sr-x 5 amrood group 512 Dec 7 10:59 OldStuff

drwxr-sr-x 2 amrood group 1024 Mar 11 15:24 bin

drwxr-sr-x 5 amrood group 3072 Mar 13 16:10 mpl

-rw-r--r-- 1 amrood group 209671 Mar 15 10:57 myfile.out

drwxr-sr-x 3 amrood group 512 Jan 5 13:32 public

drwxr-sr-x 3 amrood group 512 Feb 10 10:17 pvm3

226 Transfer complete.

ftp> cd mpl

250 CWD command successful.

ftp> dir

200 PORT command successful.

150 Opening data connection for /bin/ls.

total 7320

-rw-r--r-- 1 amrood group 1630 Aug 8 1994 dboard.f

-rw-r----- 1 amrood group 4340 Jul 17 1994 vttest.c

-rwxr-xr-x 1 amrood group 525574 Feb 15 11:52 wave_shift

-rw-r--r-- 1 amrood group 1648 Aug 5 1994 wide.list

-rwxr-xr-x 1 amrood group 4019 Feb 14 16:26 fix.c

226 Transfer complete.

ftp> get wave_shift

200 PORT command successful.

150 Opening data connection for wave_shift (525574 bytes).

226 Transfer complete.

528454 bytes received in 1.296 seconds (398.1 Kbytes/s)

ftp> quit

221 Goodbye.

$

Tiện ích telnet trong Unix/Linux Nhiều khi bạn sẽ cần kết nối tới một thiết bị Unix từ xa và làm việc trên thiết bị đó với chế độ điều

khiển từ xa. Telnet là một tiện ích mà cho phép một người sử dụng máy tính tại một site tạo một sự

kết nối, đăng nhập và sau đó thực hiện công việc trên máy tính tại một site khác.

Page 50

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Một khi bạn đăng nhập bằng cách sử dụng telnet, bạn có thể thực hiện tất cả các hoạt động trên

C:>telnet amrood.com

Trying...

Connected to amrood.com.

Escape character is '^]'.

login: amrood

amrood's Password:

*****************************************************

* *

* *

* WELCOME TO AMROOD.COM *

* *

* *

*****************************************************

Last unsuccessful login: Fri Mar 3 12:01:09 IST 2009

Last login: Wed Mar 8 18:33:27 IST 2009 on pts/10

{ do your work }

$ logout

Connection closed.

C:>

thiết bị kết nối từ xa. Dưới đây là ví dụ về telnet:

Tiện ích finger trong Unix/Linux Lệnh finger hiển thị thông tin về những người sử dụng trên một host đã cho. Host có thể là nội bộ

hoặc từ xa.

Finger có thể bất lực trên hệ thống khác vì lý do bảo mật.

Dưới đây là cú pháp đơn giản để sử dụng lệnh finger:

Page 51

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ finger

Login Name Tty Idle Login Time Office

amrood pts/0 Jun 25 08:03 (62.61.164.115)

Kiểm tra tất cả các người sử dụng đã đăng nhập trên thiết bị nội bộ như sau:

$ finger amrood

Login: amrood Name: (null)

Directory: /home/amrood Shell: /bin/bash

On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115

No mail.

No Plan.

Nhận thông tin về một người sử dụng riêng biệt có trên thiết bị nội bộ:

$ finger @avtar.com

Login Name Tty Idle Login Time Office

amrood pts/0 Jun 25 08:03 (62.61.164.115)

Kiểm tra tất cả người sử dụng đã đăng nhập trên thiết bị từ xa như sau:

$ finger amrood@avtar.com

Login: amrood Name: (null)

Directory: /home/amrood Shell: /bin/bash

On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115

No mail.

No Plan.

Nhận thông tin về một người sử dụng riêng biệt có trên thiết bị từ xa như sau:

Trình soạn thảo vi trong Unix

Có rất nhiều cách để chỉnh sửa các file trong Unix và đối với tôi, một trong những cách tốt nhất là

sử dụng Bộ (Trình) soạn thảo hướng màn hình vi. Bộ soạn thảo này cho bạn có thể chỉnh sửa các

dòng trong nội dung với các dòng khác trong file.

Ngày nay bạn sẽ tìm thấy một phiên bản được nâng cấp của Bộ soạn thảo vi mà được gọi làVIM.

VIM là viết tắt của Vi Improved.

Page 52

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

 Nó thường có sẵn trên tất cả các phiên bản của hệ thống Unix;

 Trình thực hiện của nó tương tự như bảng;

 Nó yêu cầu rất ít nguồn cho nó;

 Nó thân thiện hơn các Bộ soạn thảo khác như ed hoặc ex.

Bộ soạn thảo vi thường được cân nhắc là tiêu chuẩn thực quyền trong Bộ soạn thảo Unix bởi vì:

Bạn có thể sử dụng Bộ soạn thảo vi để chỉnh sửa một file đang hiện hữu hoặc tạo một file mới từ

scratch. Bạn cũng có thể sử dụng Bộ soạn thảo này chỉ để đọc một file văn bản.

Bắt đầu chạy Bộ soạn thảo vi trong Unix/Linux Có những cách sau mà bạn có thể sử dụng để bắt đầu chạy Bộ soạn thảo vi:

Lệnh Miêu tả

Tạo một file mới nếu nó đã không tồn tại, nếu không thì mở một file vi filename đang tồn tại.

vi -R filename Mở một file đang tồn tại trong chế độ chỉ đọc.

view filename Mở một file đang tồn tại trong chế độ chỉ đọc.

Dưới đây là ví dụ để tạo một file mới testfile nếu nó đã không tồn tại trong thư mục làm việc hiện

$vi testfile

tại:

|

~

~

~

~

~

Bạn có thể quan sát kết quả giống như sau trên màn hình:

Page 53

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

~

~

~

~

~

~

~

"testfile" [New File]

Bạn sẽ chú ý một dấu ngã (~) trên mỗi dòng con trỏ. Dấu ngã này đại diện cho một dòng chưa

được sử dụng. Nếu một dòng không bắt đầu với dấu ngã và xuất hiện khoảng trắng, có thể là một

khoảng trống, tab, dòng mới hoặc một vài ký tự không nhìn thấy.

Vì thế bây giờ bạn đã mở một file để bắt đầu nó. Trước khi thực hiện các tiến trình xa hơn, chúng

ta cùng tìm hiểu một vài khái niệm quan trọng được giải thích bên dưới.

Các chế độ hoạt động trong Unix/Linux: Trong khi làm việc với bộ soạn vi, bạn sẽ tình cờ theo hai chế độ sau:

1. Chế độ lệnh (Command mode): Chế độ này cho bạn có thể thực hiện các nhiệm vụ hành

chính như lưu file, chạy lệnh, di chuyển con trỏ, cắt và dán các dòng hoặc từ, và tìm kiếm

và đổi vị trí. Trong chế độ này, bất cứ cái gì bạn gõ vào được hệ thống biên dịch (hiểu) như

một lệnh.

2. Chế độ chèn (Insert mode): Chế độ này cho bạn có thể chèn văn bản vào trong file. Mọi

thứ mà được gõ vào trong chế độ này được hệ thống hiểu như là một đầu vào và cuối cùng

nó đặt vào trong file.

Bộ soạn thảo vi thường bắt đầu với chế độ lệnh. Để nhập văn bản, bản phải trong chế độ chèn. Để

vào chế độ chèn, đơn giản bạn chỉ cần gõ i. Để thoát khỏi chế độ chèn, nhấn phímEsc, mà sẽ đặt

bạn quay trở lại chế độ lệnh.

Gợi ý: Nếu bạn không chắc chắn về chế độ mà bạn đang ở trong, nhấn phím Esc hai lần, và sau

đó bạn sẽ trong chế độ lệnh. Bạn mở một file bằng cách sử dụng Bộ soạn thảo vi và bắt đầu gõ

một vài ký tự, sau đó bạn vào chế độ lệnh để thấy sự khác nhau.

Thoát khỏi vi trong Unix/Linux

Page 54

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Lệnh để thoát khỏi Bộ soạn thảo vi là :q. Một khi đang trong chế độ lệnh, gõ dấu hai chấm và q và

dấu ! theo sau. Nếu file của bạn đã được chỉnh sửa theo cách nào đó, Bộ soạn thảo sẽ cảnh báo

bạn về điều này và không cho bạn thoát khỏi nó. Để bỏ qua thông báo này, lệnh để thoát khỏi vi

mà không lưu các chỉnh sửa là :q!. Lệnh này giúp bạn thoát khỏi vi mà không lưu bất cứ sự thay

đổi nào mà bạn đã tạo ra tới file.

Lệnh để lưu nội dung của Bộ soạn thảo vi là :w. Bạn có thể kết nối lệnh trên với lệnh quit, hoặc :wq

và dấu quay lại !.

Cách dễ nhất để lưu các thay đổi và thoát khỏi vi là lệnh ZZ. Khi bạn đang trong chế độ lệnh, gõ ZZ

và nó sẽ làm việc tương tự như lệnh :wq.

Bạn có thể xác định tên các file khác nhau để lưu bằng cách xác định tên file sau :w. Ví dụ, nếu

bạn muốn lưu file bạn đang làm việc thành một file khác có tên là filename2, bạn sẽ gõ :wfilename2

và dấu !. Bạn tự mình thử nhé.

Di chuyển trong một file trong Unix/Linux Để di chuyển xung quanh trong một file mà không ảnh hưởng đến văn bản, bạn phải trong chế độ

lệnh (nhấn phím Esc hai lần). Tại đây có một vài lệnh mà bạn có thể sử dụng để di chuyển xung

quanh một ký tự tại cùng một thời gian.

Lệnh Miêu tả

k Di chuyển con trỏ lên trên một dòng.

j Di chuyển con trỏ xuống một dòng.

h Di chuyển con trỏ sang trái một ký tự.

l Di chuyển con trỏ sang phải một ký tự.

 Bộ soạn thảo vi là phân biệt chữ hoa và thường, vì thế bạn cần chú ý khi viết chữ hoa trong

Có hai điểm quan trọng mà bạn cần ghi nhớ:

khi sử dụng lệnh.

Page 55

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

 Hầu hết các lệnh trong vi có thể được mở đầu bằng số lần bạn muốn hành động xảy ra. Ví

dụ, 2j là di chuyển con trỏ xuống 2 dòng.

Có nhiều cách khác để di chuyển trong một file trong vi. Nhớ rằng bạn phải trong chế độ lệnh (nhấn

Esc hai lần). Dưới đây là một bảng liệt kê các lệnh khác mà bạn có thể sử dụng để di chuyển xung

quanh file:

Lệnh Miêu tả

0 or | Đặt vị trí con trỏ tại đầu dòng.

$ Đặt vị trí con trở ở cuối dòng.

w Đặt vị trí con trỏ ở từ tiếp theo.

b Đặt vị trí con trỏ ở từ trước.

( Đặt vị trí con trỏ ở đầu câu văn hiện tại.

) Đặt vị trí con trỏ ở đầu câu văn kế tiếp.

E Di chuyển tới phần cuối của từ được giới hạn khoảng trắng.

{ Di chuyển tới đoạn văn sau.

} Di chuyển về đoạn văn trước.

[[ Di chuyển tới khu vực sau.

]] Di chuyển về khu vực trước.

n| Di chuyển tới cột n trong dòng hiện tại.

1G Di chuyển tới dòng đầu tiên của file.

Page 56

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

G Di chuyển tới dòng cuối cùng của file.

nG Di chuyển tới dòng thứ n của file.

:n Di chuyển tới dòng thứ n của file.

fc Di chuyển thuận tiến tới c

Fc Di chuyển ngược lại tới c

H Di chuyển tới đầu của màn hình.

nH Di chuyển tới dòng thứ n tính từ đầu của màn hình.

M Di chuyển tới giữa màn hình.

L Di chuyển tới cuối cùng màn hình.

nL Di chuyển tới dòng thứ n tính từ cuối cùng của màn hình.

Dấu hai chấm theo sau bởi một số sẽ đặt vị trí của con trỏ trên dòng :x số x

Các lệnh điều khiển trong Unix/Linux Các lệnh dưới đây hữu dụng mà bạn có thể sử dụng song song với phím control:

Lệnh Miêu tả

CTRL+d Di chuyển tiến tới 1/2 màn hình.

CTRL+d Di chuyển tiến tới 1/2 màn hình.

CTRL+f Di chuyển tiến tới một màn hình đầy đủ.

Page 57

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

CTRL+u Di chuyển ngược về sau 1/2 màn hình.

CTRL+b Di chuyển ngược về sau một màn hình.

CTRL+e Di chuyển màn hình lên một dòng.

CTRL+y Di chyển màn hình xuống một dòng.

CTRL+u Di chuyển màn hình lên 1/2 trang.

CTRL+d Di chuyển màn hình xuống 1/2 trang.

CTRL+b Di chuyển màn hình lên một trang.

CTRL+f Di chuyển màn hình xuống một trang.

CTRL+I Kéo màn hình ngược lại.

Chỉnh sửa file trong Unix/Linux Để chỉnh sửa file, bạn cần trong chế độ chèn. Có nhiều cách để vào chế độ chèn từ chế độ lệnh.

Lệnh Miêu tả

i Chèn văn bản trước vị trí con trỏ hiện tại.

I Chèn văn bản ở phần đầu dòng hiện tại.

a Chèn văn bản sau vị trí con trỏ hiện tại.

A Chèn văn bản tại phần cuối của dòng hiện tại.

o Tạo một dòng mới để nhập văn bản dưới vị trí con trỏ hiện tại.

O Tạo một dòng mới để nhập văn bản trên vị trí con trỏ hiện tại.

Page 58

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Xóa các ký tự trong Unix/Linux Dưới đây liệt kê các lệnh quan trọng mà có thể được sử dụng để xóa các ký tự và các dòng trong

một file đã mở:

Lệnh Miêu tả

x Xóa một ký tự dưới vị trí con trỏ hiện tại.

X Xóa một ký tự trước vị trí con trỏ hiện tại.

dw Xóa từ vị trí con trỏ hiện tại tới từ kế tiếp.

d^ Xóa từ vị trí con trỏ hiện tại tới phần bắt đầu của dòng.

d$ Xóa từ vị trí con trỏ hiện tại tới phần cuối của dòng.

D Xóa từ vị trí con trỏ hiện tại tới phần cuối của dòng hiện tại.

dd Xóa dòng mà con trỏ hiện tại đang ở trên.

Như đã đề cập ở trên, hầu hết các lệnh trong vi có thể được đặt ở trước bởi số lần bạn muốn hành

động xảy ra. Ví dụ, 2x sẽ xóa 2 ký tự dưới vị trí con trỏ hiện tại và 2dd sẽ xóa 2 dòng mà con trỏ

đang ở trên đó hiện tại.

Chúng tôi đề nghị bạn thực hành các lệnh trên nhiều lần trước khi thực hiện các tiến trình phức tạp

hơn.

Các lệnh thay đổi trong Unix/Linux Bạn cũng có khả năng để thay đổi các ký tự, các từ,, hoặc dòng trong vi mà không cần xóa chúng.

Dưới đây là các lệnh liên quan:

Lệnh Miêu tả

cc Gỡ bỏ nội dung của dòng, làm cho bạn rời khỏi chế độ chèn.

Page 59

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Thay đổi từ mà con trỏ đang ở tại đó, từ vị trí con trỏ tới vị trí chữ w thường cw cuối cùng của từ.

Đổi vị trí của ký tự dưới vị trí con trỏ. Vi trở lại chế độ lệnh sau khi sự đổi vị trí r này được thực hiện xong.

Viết đề nhiều ký tự bắt đầu với ký tự hiện tại ở dưới con trỏ. Bạn phải sử dụng R phím Esc để dừng việc viết đè này.

Đổi vị trí của ký tự hiện tại với ký tự mà bạn gõ vào. Sau đó, bạn bị rời khỏi chế s độ chèn.

Xóa dòng mà con trỏ đang ở trên và thay đổi bằng một đoạn văn bản mới. Sau S khi văn bản mới được nhập, vi vẫn giữ nguyên chế độ chèn.

Các lệnh sao chép và dán trong Unix/Linux Bạn có thể sao chép các dòng hoặc các từ từ một vị trí và sau đó bạn dán chúng tại vị trí khác

bằng cách sử dụng các lệnh sau:

Lệnh Miêu tả

yy Sao chép dòng hiện tại.

Sao chép từ hiện tại từ ký tự chữ thường w con trỏ ở trên tới phần cuối yw của từ.

p Dán bản sao sau vị trí con trỏ.

P Dán bản sao trước vị trí con trỏ.

Các lệnh nâng cao trong Unix/Linux Dưới đây liệt kê một số lệnh nâng cao mà làm đơn giản hóa việc chỉnh sửa thường ngày và mang

lại nhiều hiệu quả hơn trong việc sử dụng vi:

Page 60

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Lệnh Miêu tả

J Nhập dòng hiện tại với dòng kế tiếp.

<< Di chuyển dòng hiện tại sang trái một độ rộng shift.

>> Di chuyển dòng hiện tại sang phải một độ rộng shift.

~ Chuyển kiểu của ký tự dưới vị trí con trỏ (VD: chữ hoa thành chữ thường ).

^G Nhấn Ctrl+G cùng một lúc để chỉ trạng thái và tên file hiện tại.

U Hồi phục dòng hiện tại trở về trạng thái trước khi con trỏ vào dòng đó.

Undo các thay đổi vừa thực hiện với file. Nhập u lần nữa sẽ redo sự thay u đổi.

J Nhập dòng hiện tại với dòng kế tiếp.

:f Hiển thị vị trí hiện tại của file trong % và tên file, tổng số file.

:f filename Đặt lại tên hiện tại của file.

:w filename Viết tên file

:e filename Mở một file khác với tên của nó.

:cd dirname Thay đổi thư mục làm việc hiện tại tới thư mục dirname.

:e # Sử dụng để chuyển đổi giữa hai file đã mở.

Trong trường hợp bạn mở nhiều file sử dụng vi, bạn sử dụng :n để tới file :n kế tiếp trong seri các file đó.

Page 61

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Trong trường hợp bạn mở nhiều file sử dụng vi, bạn sử dụng :p để tới file :p phía trước trong seri file đó.

Trong trường hợp bạn mở nhiều file sử dụng vi, bạn sử dụng :N để tới file :N phía trước trong seri file đó.

:r file Đọc file và chèn nó sau dòng hiện tại.

:nr file Đọc file và chèn nó sau dòng thứ n.

Tìm kiếm từ và ký tự trong Unix/Linux Bộ soạn thảo vi có hai loại tìm kiếm: chuỗi và ký tự. Để tìm kiếm chuỗi, lệnh / và ? được sử dụng.

Khi bạn bắt đầu những lệnh này, lệnh vừa được nhập vào sẽ được chỉ ở cuối cùng của dòng, tại

đó bạn nhập một chuỗi cụ thể mà bạn muốn tìm để tìm kiếm nó.

 Lệnh / tìm kiếm theo chiều thuần về phía trước trong một file.

 Lệnh ? tìm kiếm theo chiều ngược lại về phía sau trong một file.

Hai lệnh này chỉ khác nhau ở phương diện nơi mà nó diễn ra:

Các lệnh n và N tương ứng lặp lại lệnh tìm trước theo cùng cách tìm hoặc theo hướng ngược lại.

Một vài ký tự có ý nghĩa quan trọng trong khi sử dụng lệnh tìm kiếm và được đặt trước bởi một dấu

\ để trở thành một phần của biểu thức cần tìm.

Ký tự Miêu tả

Tìm tại đầu của dòng. (Sử dụng tại phần bắt đầu của một biểu thức tìm ^ kiếm.)

Kết nối với một ký tự đơn. .

Kết nối với 0 hoặc nhiều ký tự trước. *

Cuối của dòng. (sử dụng tại phần cuối của biểu thức tìm kiếm.) $

Page 62

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

[ Bắt đầu một thiết lập của biểu thức kết nối hoặc không kết nối.

Đặt biểu thức tìm kiếm tách khỏi dấu chéo ngược \ để tìm phần cuối hoặc < phần đầu của từ.

Đặt biểu thức tìm kiếm tách khỏi dấu chéo ngược \ để tìm phần cuối hoặc > phần đầu của từ.

Hoạt động tìm kiếm ký tự tìm kiếm trong một dòng để tìm một ký tự được nhập sau lệnh. Lệnh f và

F chỉ tìm kiếm cho một ký tự trên dòng hiện tại. Lệnh f tìm kiếm thuận về phía trước và F tìm kiếm

ngược về phía sau và con trỏ di chuyển tới vị trí của ký tự được tìm thấy.

Lệnh t và T chỉ tìm kiếm một ký tự trên dòng hiện tại, nhưng với t, con trỏ di chuyển tới vị trí trước

ký tự, và T tìm kiếm dòng về phía ngược lại tại vị trí sau ký tự.

Các lệnh set trong Unix/Linux Bạn có thể tạo thay đổi màn hình hiển thị của vi bằng cách sử dụng lệnh :set. Để sử dụng những

lệnh này, bạn phải vào chế độ lệnh sau đó gõ :set theo sau bởi một trong các chức năng sau:

Lệnh Miêu tả

:set ic Bỏ qua kiểu chữ (chữ hoa, thường) khi tìm kiếm.

:set ai Thiết lập chế độ thụt vào đầu dòng tự động.

:set noai Để không đặt chế độ thụt vào đầu dòng tự động.

:set nu Hiển thị các dòng với số dòng trên cạnh trái.

Thiết lập độ rộng của điểm dừng tab của một phần mềm. Ví dụ bạn có thể thiết :set sw lập một độ rộng shift là 4 với lệnh này :set sw=4

Nếu wrapscan được thiết lập, nếu từ không được tìm thấy tại phần cuối cùng :set ws của file, nó sẽ cố gắng để tìm kiếm tại phần bắt đầu.

Page 63

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Nếu chức năng này có một giá trị lớn hơn 0, Bộ soạn thảo sẽ tự động bao lề ký

:set wm tự (word wrap). Ví dụ, để thiết lập lề bao tới hai ký tự, bạn sẽ gõ thế này :set

wm=2

:set ro Thay đổi kiểu file thành “chỉ đọc (read only)”

:set term In kiểu terminal.

:set bf Bỏ qua việc điều khiển ký tự từ đầu vào.

Chạy các lệnh trong Unix/Linux Bộ soạn thảo vi có khả năng chạy các lệnh từ trong Bộ soạn thảo. Để chạy một lệnh, bạn chỉ cần

tiến vào chế độ lệnh và nhập lệnh :!.

Ví dụ, nếu bạn muốn kiểm tra một file có tồn tại không trước khi bạn cố gắng để lưu file với tên đã

cho, bạn có thể nhập :! ls và bạn sẽ thấy kết quả của lệnh ls trên màn hình.

Khi bạn nhấn bất kỳ phím nào, bạn được quay trở lại khu vực vi của bạn.

Thay thế văn bản trong Unix/Linux Lệnh thay thế (:s/) cho bạn có thể nhanh chóng đổi các từ hoặc nhóm từ trong file của bạn. Dưới

:s/search/replace/g

đây là cú pháp đơn giản:

Ký tự g đại diện cho toàn cầu (globally). Kết quả của lệnh này là tất cả các sự kiện diễn ra trên

dòng mà con trỏ tại đó đã được thay đổi.

Các điểm quan trọng trong Unix/Linux: Dưới đây là các điểm quan trọng giúp bạn thành công khi sử dụng vi:

 Bạn phải trong chế độ lệnh để sử dụng các lệnh. (Nhấn phím Esc hai lần vào bất cứ lúc nào

 Bạn phải cẩn thận để sử dụng các kiểu chữ (hoa và thường) cho tất cả các lệnh.

 Bạn phải trong chế độ chèn để nhập văn bản.

để đảm bảo bạn trong chế độ lệnh).

Page 64

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Shell là gì?

Shell cung cấp cho bạn một giao diện với hệ thống Unix. Nó thu thập input từ bạn và chạy các

chương trình trên cơ sở đầu vào đó. Khi một chương trình hoàn thành, nó hiển thị kết quả (output)

của chương trình đó.

Một Shell là một môi trường trong đó chúng ta có thể chạy các lệnh, các chương trình và Shell

script. Có các phiên bản khác nhau của Shell, mà chỉ khác nhau từ phiên bản của hệ điều hành.

Mỗi phiên bản của Shell có bộ thiết lập các lệnh và hàm được thừa nhận riêng của nó.

Dòng nhắc lệnh Shell trong Unix/Linux Dòng nhắc lệnh, $, được thông báo bởi Shell. Trong khi dòng nhắc được hiển thị, bạn có thể nhập

một lệnh.

Shell đọc đầu vào bạn nhập sau khi bạn nhấn Enter. Nó xác định lệnh mà bạn muốn chạy bởi nhìn

vào từ đầu tiên trong phần nhập của bạn. Một từ là một tập hợp không gián đoạn của các ký tự.

Các khoảng trống và tab phân cách các từ.

$date

Thu Jun 25 08:30:19 MST 2009

Dưới đây là một ví dụ đơn giản của lệnh date mà hiển thị ngày và thời gian hiện tại:

Bạn có thể tùy chỉnh dòng nhắc lệnh của mình bằng cách sử dụng biến môi trường PS1 được giải

thích trong chương Môi trường làm việc.

Các kiểu Shell trong Unix/Linux Trong Unix có hai kiểu Shell chính:

1. Kiểu Bourne Shell. Nếu bạn đang sử dụng một Bourne Shell, dòng nhăc lệnh mặc định là ký

tự $.

2. Kiểu C Shell. Nếu bạn đang sử dụng kiểu C Shell, dòng nhắc mặc định là ký tự %.

 Bourne Shell (sh)

 Korn Shell (ksh)

Trong kiểu Bourne Shell lại có các kiểu phụ khác như sau:

Page 65

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

 Bourne Again Shell ( bash)

 POSIX Shell ( sh)

 C Shell (csh)

 TENEX/TOPS C Shell ( tcsh)

Trong kiểu C Shell có các kiểu phụ khác:

Các Unix Shell đầu tiên được viết vào giữa thập kỷ 1970 bởi Stephen R. Bourne trong khi ông ta

đang làm việc tại phòng thí nghiệm AT&T Bell Labs ở New Jersey.

Bourne Shell là Shell đầu tiên xuất hiện trên hệ thống Unix, vì thế nó được đề cập đến như là “the

Shell”.

Bourne Shell thường được cài đặt như là /bin/sh trên hầu hết các phiên bản Unix. Vì lý do này, nó

là Shell được chọn để viết script dử dụng trên các phiên bản khác nhau của Unix.

Trong chương này, chúng ta đề cập đến hầu hết các khái niệm Shell trên cơ sở Bourne Shell.

Shell Scripts trong Unix/Linux Khái niệm cơ bản của một Shell script là một danh sách các lệnh, mà được liệt kê theo thứ tự thi

hành. Một Shell script tốt sẽ có các lời bình (comment), đứng trước bởi dấu #, miêu tả các bước.

Có các kiểm tra điều kiện, như giá trị A lớn hơn giá trị B, các loop cho phép chúng ta xử lý một

lượng lớn dữ liệu, các file để đọc và lưu giữ dữ liệu và các biến để đọc và lưu giữ liệu, và script có

thể bao gồm các hàm.

Shell script và các hàm đều được thông dịch. Điều này có nghĩa là chúng không được biên dịch.

Chúng ta chuẩn bị viết nhiều script trong các phần hướng dẫn tiếp theo. Nó có thể là một file văn

bản đơn giản trong đó chúng ta đặt tất cả các lệnh và một số cấu trúc cần thiết mà nói cho môi

trường Shell về cái gì được làm và khi nào được thực hiện.

Ví dụ về script trong Unix/Linux Giả sử chúng ta tạo một test.sh. Ghi nhớ rằng tất cả các script nên có đuôi mở rộng .sh. Trước khi

bạn thêm bất kỳ cái gì tới script của bạn, bạn cần báo hệ thống rằng một Shell script chuẩn bị được

bắt đầu. Việc này được thực hiện bằng cách sử dụng cấu trúc shebang. Ví dụ:

Page 66

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

#!/bin/sh

Lệnh này nói cho hệ thống rằng các lệnh theo sau được chạy bởi Bourne Shell. Nó được gọi là một

shebang bởi vì ký hiệu # được gọi là một hash và ký hiệu ! được gọi là một bang.

#!/bin/bash

pwd

ls

Để tạo một script chứa các lệnh này, đầu tiên bạn đặt dòng shebang và sau đó thêm các lệnh:

Các lời bình Shell trong Unix/Linux Bạn có thể đặt các Shell Comment trong script như sau:

#!/bin/bash

# Author : Zara Ali

# Copyright (c) Tutorialspoint.com

# Script follows here:

pwd

ls

$chmod +x test.sh

Bây giờ bạn lưu nội dung trên và làm cho script này chạy như sau:

$./test.sh

Bầy giờ bạn có một Shell script của mình sẵn sàng để chạy như sau:

/home/amrood

index.jsp unix-basic_utilities.jsp unix-directories.jsp

test.sh unix-communication.jsp unix-environment.jsp

Điều này tạo ra kết quả sau:

Ghi chú: Để chạy bất cứ chương trình nào của bạn có trong thư mục hiện tại, bạn nên chạy bằng

cách sử dụng ./program_name

Page 67

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Shell script mở rộng trong Unix/Linux Shell script có một vài cấu trúc được yêu cầu mà nói cho môi trường Shell về điều gì để làm và khi

nào thực hiện nó. Tất nhiên, hầu hết script ở đây phức tạp hơn những script đã giới thiệu ở trên.

Shell là một ngôn ngữ chương trình thực sự, đầy đủ với các biến, các cấu trúc điều khiển và …. Dù

nó có phức tạp bao nhiêu, thì tuy nhiên, nó vẫn chỉ là một danh sách lệnh được thực thi một cách

liên tục.

Các script sau sử dụng lệnh read mà nhận đầu vào từ bàn phím và gán giá trị cho nó với biến

#!/bin/sh

# Author : Zara Ali

# Copyright (c) Tutorialspoint.com

# Script follows here:

echo "What is your name?"

read PERSON

echo "Hello, $PERSON"

PERSON và cuối cùng in nó trên biến STDOUT.

$./test.sh

What is your name?

Zara Ali

Hello, Zara Ali

$

Dưới đây là chạy mẫu của script trên:

Sử dụng các biến trong Shell

Một biến là một chuỗi ký tự để từ đó chúng ta gán một giá trị. Giá trị được gán có thể là một số, văn

bản, tên file, thiết bị hoặc bất kỳ kiểu nào khác của dữ liệu.

Một biến là không gì khác ngoài một con trỏ trỏ tới dữ liệu thực. Shell cho phép bạn tạo, gán, và

xóa các biến.

Page 68

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Các tên biến trong Unix/Linux Tên của một biến có thể chỉ chứa các ký tự (a tới z hoặc từ A tới Z), các số (từ 0 tới 9), hoặc ký

hiệu gạch dưới ( _).

Theo quy ước, các biến Unix shell sẽ có tên của chúng trong chữ in hoa.

_ALI

TOKEN_A

VAR_1

VAR_2

Ví dụ dưới đây về một tên biến hợp lệ.

2_VAR

-VARIABLE

VAR1-VAR2

VAR_A!

Sau đây là ví dụ về các tên biến không hợp lệ:

Lý do là bạn không thể sử dụng các ký tự khác như !, *, hoặc - , bởi vì các ký tự này có ý nghĩa đặc

biệt đối với shell.

Định nghĩa các biến trong Unix/Linux Các biến được định nghĩa như sau:

variable_name=variable_value

NAME="Zara Ali"

Ví dụ:

Ví dụ trên định nghĩa biến Name và gán giá trị Zara Ali cho nó. Các biến theo kiểu này được gọi là

các biến vô hướng (scala). Một biến vô hướng chỉ có thể giữ một giá trị tại một thời điểm.

VAR1="Zara Ali"

Shell cho phép bạn giữ bất kỳ giá trị nào bạn muốn trong một biến. Ví dụ:

Page 69

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

VAR2=100

Truy cập các giá trị trong Unix/Linux Để truy cập các giá trị được giữ trong một biến, đặt trước tên biến đó với ký hiệu ( $):

Ví dụ, script sau sẽ truy cập vào giá trị của biến NAME đã được định nghĩa và sẽ in nó trên

#!/bin/sh

NAME="Zara Ali"

echo $NAME

STDOUT:

Zara Ali

Nó sẽ tạo ra kết quả sau:

Các biến chỉ đọc (read-only) trong Unix/Linux Shell cung cấp một cách để đánh dấu các biến như read-only bằng cách sử dụng lệnhreadonly.

Sau khi một biến được đánh dấu read-only, giá trị của nó không thể thay đổi.

#!/bin/sh

NAME="Zara Ali"

readonly NAME

NAME="Qadiri"

Ví dụ, script sau sẽ lỗi trong khi cố gắng thay đổi giá trị của biến NAME.

/bin/sh: NAME: This variable is read only.

Nó sẽ tạo kết quả sau:

Xóa một biến trong Unix/Linux Xóa một biến nói cho shell để gỡ bỏ biến đó từ danh sách các biến mà nó theo dõi. Một khi bạn

xóa một biến, bạn sẽ không thể truy cập vào giá trị lưu giữ trong biến đó.

Dưới đây là cú pháp để xóa một biến được định nghĩa bằng cách sử dụng lệnh unset:

Page 70

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

unset variable_name

#!/bin/sh

NAME="Zara Ali"

unset NAME

echo $NAME

Lệnh trên sẽ xóa giá trị của một biến được định nghĩa. Dưới đây là một ví dụ đơn giản:

Lệnh trên sẽ không in bất cứ thứ gì. Bạn không thể sử dụng lệnh unset để xóa các biến mà được

đánh dấu read-only.

Các kiểu biến trong Unix/Linux Khi một Shell đang chạy, có 3 kiểu biến tồn tại:

 Các biến nội bộ (Local Variables): Một biến nội bộ là một biến mà tồn tại trong trong quá

trình thực thi của shell. Nó không có sẵn trong các chương trình mà được bắt đầu bởi

 Các biến môi trường (Environment Variables): Một biến môi trường là một biến có sẵn

Shell. Chúng được thiết lập tại dòng nhắc lệnh.

trong bất kỳ tiến trình con nào của shell. Một vài chương trình cần các biến môi trường để

thực thi các hàm một cách chính xác. Thông thường một Shell script chỉ định nghĩa các

 Các biến shell (Shell Variables): Một biến shell là một biến đặc biệt mà được thiết lập bởi

biến môi trường mà nó cần bởi các chương trình khi nó chạy.

Shell và được yêu cầu bởi Shell để thực thi các hàm một cách chính xác. Một số biến này

là biến môi trường, trong khi số khác là biến nội bộ.

Các biến đặc biệt trong Unix

Chương hướng dẫn trước đã cảnh báo về sử dụng các ký tự đặc biệt trong tên biến của bạn. Điều

này bởi vì những ký tự này được sử dụng trong tên các biến đặc biệt trong Unix. Những biến này

được giữ cho các chức năng đặc biệt.

$echo $$

Ví dụ, ký tự $ đại diện cho số Process ID, hoặc PID của shell hiện tại.

Page 71

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

29949

Lệnh trên sẽ viết Process ID của shell hiện tại:

Dưới đây là bảng liệt kê các biến đặc biệt mà bạn có thể sử dụng trong Shell script:

Biến Miêu tả

$0 Tên file của script hiện tại.

Những biến này tương ứng với các tham số mà một script được gọi. Tại đây n là số

$n thập phân nguyên dương tương ứng với vị trí của một tham số (tham số đầu tiên là

$1, tham số thứ hai là $2…).

$# Số các tham số cung cấp cho một script.

Tất cả các tham số được trích dẫn kép. Nếu một script nhận hai tham số, $* là tương $* đương với $1 $2.

Tất cả các tham số được trích dẫn kép riêng rẽ. Nếu một script nhận 2 tham số, $@ $@ là tương đương với $1 $2.

$? Trạng thái thoát ra của lệnh trước được chạy.

Số tiến trình của shell hiện tại. Đối với Shell script, đây là số Process ID mà chúng $$ đang chạy.

$! Số tiến trình của lệnh background trước.

Các tham số dòng lệnh (command-line) trong Unix/Linux Các biến dòng lệnh $1, $2, $3, …, $9 là các tham số vị trí, với $0 chỉ tới lệnh, chương trình, Shell

script hoặc chức năng thực sự và $1, $2, $3, …, $9 là các tham số của lệnh đó.

Script dưới đây sử dụng các biến đặc biệt liên quan tới dòng lệnh:

Page 72

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

#!/bin/sh

echo "File Name: $0"

echo "First Parameter : $1"

echo "Second Parameter : $2"

echo "Quoted Values: $@"

echo "Quoted Values: $*"

echo "Total Number of Parameters : $#"

$./test.sh Zara Ali

File Name : ./test.sh

First Parameter : Zara

Second Parameter : Ali

Quoted Values: Zara Ali

Quoted Values: Zara Ali

Total Number of Parameters : 2

Tại đây là một lần chạy mẫu cho script trên:

Các tham số đặc biệt $* và $@ trong Unix/Linux Có những tham số đặc biệt mà cho phép truy cập và tất cả các tham số của các dòng lệnh cùng

một lúc. Cả $* và $@ sẽ hoạt động tương tự trừ khi chúng được bao quanh bởi trích dẫn (“”).

Cả hai tham số xác định tất cả các tham số của dòng lệnh, nhưng $* nhận toàn bộ danh sách làm

tham số với các khoảng cách trống ở giữa và $@ nhận toàn bộ danh sách làm tham số và phân

biệt chúng thành các tham số riêng rẽ.

Chúng ta có thể viết Shell script như dưới để xử lý một số không biết các tham số dòng lệnh với

#!/bin/sh

for TOKEN in $*

do

echo $TOKEN

hoặc tham số đặc biệt $* hoặc $@.

Page 73

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

done

$./test.sh Zara Ali 10 Years Old

Zara

Ali

10

Years

Old

Chúng ta chạy mẫu cho script trên:

Ghi chú: Tại đây do...done là một dạng của loop mà chúng ta sẽ bàn luận trong chương hướng

dẫn sau.

Trạng thái thoát (Exit) trong Unix/Linux Biến $? đại diện cho trạng thái thoát của lệnh trước.

Trạng thái thoát là một giá trị số trả về bởi mỗi lệnh khi nó hoàn tất. Theo quy định, hầu hết các

lệnh trả về một trạng thái thoát là 0 nếu chúng thực hiện thành công và 1 nếu chúng không thành

công.

Một vài lệnh trả về các trạng thái thoát với phần thêm vào khác vì các lý do riêng. Ví dụ, một số

lệnh phân biệt giữa các loại lỗi và sẽ trả về các giá trị thoát đa dạng phụ thuộc vào kiểu của lỗi.

$./test.sh Zara Ali

File Name : ./test.sh

First Parameter : Zara

Second Parameter : Ali

Quoted Values: Zara Ali

Quoted Values: Zara Ali

Total Number of Parameters : 2

$echo $?

0

$

Dưới đây là các ví dụ về lệnh thực hiện thành công:

Page 74

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Sử dụng mảng trong Shell

Một biến shell là có đủ khả năng để giữ một giá trị đơn. Kiểu này của các biến được gọi là các biến

scalar.

Shell hỗ trợ các kiểu khác nhau của biến được gọi là một biến mảng mà có thể giữ nhiều giá trị tại

cùng một thời điểm. Mảng cung cập một phương thức tạo nhóm một tập hợp các biến. Thay vì tạo

một tên mới cho mỗi biến được yêu cầu, bạn có thể sử dụng một biến mảng để lưu tất cả các biến

khác.

Tất cả các quy tắc về tên được bàn luận trong chương Các biến shell sẽ được áp dụng trong khi

đặt tên mảng.

Định nghĩa các giá trị mảng trong Unix/Linux Điểm khác nhau giữa một biến mảng và một biến scalar có thể được giải thích như sau:

Khi bạn đang cố gắng để biểu diễn tên của các sinh viên khác nhau như một tập hợp của biến. Mỗi

NAME01="Zara"

NAME02="Qadir"

NAME03="Mahnaz"

NAME04="Ayan"

NAME05="Daisy"

biến đơn là một biến scalar như sau:

Chúng ta sử dụng một mảng đơn để giữ tất cả các tên đã được đề cập ở trên. Sau đây là một

phương thức đơn giản cho việc tạo một biến mảng để gán một giá trị cho một trong số chúng. Điều

array_name[index]=value

này được diễn tả như sau:

Tại đây array_name là tên của mảng, index là chỉ mục của các item trong mảng mà bạn muốn thiết

lập và value là giá trị mà bạn muốn thiết lập cho mục đó.

NAME[0]="Zara"

NAME[1]="Qadir"

Dưới đây là ví dụ, các lệnh sau:

Page 75

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

NAME[2]="Mahnaz"

NAME[3]="Ayan"

NAME[4]="Daisy"

set -A array_name value1 value2 ... valuen

Nếu bạn đang sử dụng ksh shell thì tại đây cú pháp của mảng là:

array_name=(value1 ... valuen)

Nếu bạn đang sử dụng bash shell thì tại đây cú pháp của mảng là:

Truy cập vào các giá trị mảng trong Unix/Linux Sau khi bạn đã thiết lập bất kỳ giá trị mảng nào, bạn có thể truy cập vào nó như sau:

Tại đây array_name là tên mảng, và index là chỉ mục của các giá trị được truy cập. Dưới đây là ví

#!/bin/sh

NAME[0]="Zara"

NAME[1]="Qadir"

NAME[2]="Mahnaz"

NAME[3]="Ayan"

NAME[4]="Daisy"

echo "First Index: "

echo "Second Index: "

dụ đơn giản:

$./test.sh

First Index: Zara

Second Index: Qadir

Nó sẽ tạo ra kết quả sau:

Bạn có thể truy cập vào tất cả các item trong một mảng theo một trong các cách sau:

Page 76

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ {array_name[*]}

$ {array_name[@]}

#!/bin/sh

NAME[0]="Zara"

NAME[1]="Qadir"

NAME[2]="Mahnaz"

NAME[3]="Ayan"

NAME[4]="Daisy"

echo "First Method:$ {NAME[*]}"

echo "Second Method:$ {NAME[@]}"

Tại đây array_name là tên mảng bạn đang quan tâm đến. Dưới đây là ví dụ đơn giản:

$./test.sh

First Method: Zara Qadir Mahnaz Ayan Daisy

Second Method: Zara Qadir Mahnaz Ayan Daisy

Nó sẽ tạo ra kết quả sau:

Unix - Các toán tử Shell cơ bản

ó rất nhiều toán tử được hỗ trợ bởi mỗi Shell. Phần hướng dẫn của chúng tôi dựa trên cơ sở Shell

mặc định (Bourne) vì thế chúng ta đang bàn về các toán tử của Bourne shell trong chương này.

 Các toán tử số học

 Các toán tử quan hệ

 Các toán tử logic

 Các toán tử chuỗi

 Các toán tử kiểm tra file

Có các toán tử sau mà chúng ta cần quan tâm:

Page 77

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Bourne shell lúc đầu không có bất cứ một kỹ thuật nào để trình bày số học đơn giản, nhưng nó sử

dụng chương trình ngoại vi, hoặc là awk hoặc là chương trình đơn giản hơn expr.

#!/bin/sh

val=`expr 2 + 2`

echo "Total value : $val"

Dưới đây là ví dụ đơn giản để cộng hai số:

Total value : 4

Nó sẽ tạo ra kết quả sau:

 Phải có một khoảng trống giữa hai toán tử và 2 sự diễn đạt, ví dụ 2+2 là không đúng, nó

Những điểm mà bạn cần lưu ý là:

 Sự diễn đạt đầy đủ nên được bao quanh bởi ``, gọi là dấu phảy bị nghịch đảo.

nên được viết là 2 + 2.

Các toán tử số học trong Unix/Linux Các toán tử số học sau được hỗ trợ bởi Bourne shell.

Giả sử biến a giữ giá trị 10 và biến b giữ giá trị 20, thì khi đó:

Ví dụ:

Toán Miêu tả Ví dụ tử

`expr

$a +

$b` + Phép cộng – thêm giá trị ở mỗi bên vào toán tử kết

quả

là 30

Page 78

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

`expr

$a -

$b` - Phép trừ – trừ giá trị bên phải của toán tử bên trái kết

quả

là -10

`expr

$a \*

$b`

* Phép nhân – nhân giá trị ở trên mỗi bên với toán tử. kết

quả

200

`expr

$b /

$a` / Phép chia – chia giá trị bên phải cho giá trị bên trái kết

quả

là 2

`expr

$b %

$a` % Lấy số dư – lấy phần còn lại sau khi đã chia giá trị trái cho giá trị bên phải kết

quả

là 0

a=$b

sẽ

gán = Phép gán – gán toán hạng trái cho toán hạng phải giá trị

của b

cho a

Page 79

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

[ $a

== $b

] sẽ Phép bằng – so sánh hai số, nếu cả hai đều giống nhau thì kết quả trả về là trả về == true. kết

quả

False.

[ $a

!= $b

] sẽ Phép không cân bằng – so sánh hai số, nếu cả hai số khác nhau thì giá trị trả trả về != về là true. kết

quả

True.

Nó là rất quan trọng để ghi nhớ rằng tại đây tất cả các sự diễn đạt có điều kiện sẽ được đặt trong

hai dấu ngoặc ôm vuông ([]) với một dấu cách trống quanh chúng, ví dụ [$a == $b ] là đúng, và

[$a==$b] là không đúng.

Tất cả các toán tử số học được thực hiện sử dụng các số nguyên dài.

Các toán tử quan hệ trong Unix/Linux Bourne shell hỗ trợ các toán tử quan hệ sau mà là riêng với các giá trị số. Những toán tử này

không làm việc cho chuỗi trừ khi giá trị của nó là số.

Ví dụ, các toán tử sau sẽ kiểm tra một quan hệ giữa 10 và 20, cũng là giữa “10” và “20” nhưng

không giữa “ten” và “twenty’.

Giả sử biến a giữ giá trị 10 và biến b giữ giá trị 20 thì khi đó:

Ví dụ

Toán Miêu tả Ví dụ tử

-eq Kiểm tra giá trị của hai toán hạng là cân bằng hoặc không, nếu có thì điều kiện [ $a -

Page 80

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

trở lên đúng. eq $b

] là

không

đúng.

[ $a -

ne $b Kiểm tra giá trị của hai toán hạng là cân bằng hoặc không, nếu không cân -ne ] là bằng thì điều kiện trở lên đúng.

đúng.

[ $a -

gt $b Kiểm tra nếu giá trị của toán hạng trái lớn hơn giá trị của toán hạng phải, nếu ] là -gt đúng thì điều kiện trở nên đúng. không

đúng.

[ $a -

Kiểm tra nếu giá trị của toán hạng trái nhỏ hơn giá trị của toán hạng phải, nếu lt $b ] -lt là đúng thì điều kiện trở nên đúng.

đúng.

[ $a -

ge $b Kiểm tra nếu giá trị của toán hạng trái lớn hơn hoặc bằng giá trị của toán hạng ] là -ge phải, nếu đúng thì điều kiện trở nên đúng. không

đúng.

[ $a -

Kiểm tra nếu giá trị của toán hạng trái nhỏ hơn hoặc bằng giá trị của toán hạng le $b ] -le là phải, nếu đúng thì điều kiện trở nên đúng.

đúng.

Nó là rất quan trọng để ghi nhớ rằng tại đây tất cả các sự diễn đạt có điều kiện sẽ được đặt trong

dấu ngoặc ôm vuông ([]) với dấu cách trống quanh chúng, ví dụ [ $a <= $b ] là đúng và [$a<=$b] là

không đúng.

Các toán tử logic trong Unix/Linux

Page 81

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Có các toán tử logic sau được hỗ trợ bởi Bourne Shell

Giả sử biến a giữ giá trị 10 và biến b giữ giá trị 20, thì dưới đây là ví dụ sử dụng tất cả các toán tử

logic.

Ví dụ

Toán Miêu tả Ví dụ tử

[ !

false ] ! Phép phủ định. Nếu điều kiện đúng thì giá trị là sai và ngược lại. là

true.

[ $a -

lt 20 -

o $b -

-o Phép hoặc. Nếu một trong các toán hạng là đúng thì điều kiện là đúng. gt

100 ]

true.

[ $a -

lt 20 -

a $b -

-a Phép và. Nếu cả hai toán hạng đều đúng thì điều kiện là đúng, ngoài ra là sai.. gt

100 ]

false.

Các toán tử chuỗi trong Unix/Linux Các toán tử chuỗi sau được hỗ trợ bởi Bourne Shell.

Giả sử biến a giữ giá trị “abc” và biến b giữ giá trị “efg”:

Ví dụ

Page 82

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Toán Ví dụ Miêu tả tử

[ $a =

Kiểm tra nếu giá trị của hai toán hạng là cân bằng hoặc không, nếu có thì điều $b ] là = không kiện là đúng.

đúng.

[ $a

Kiểm tra nếu giá trị của hai toán hạng có cân bằng hoặc không, nếu không cân != $b != ] là bằng thì điều kiện là đúng.

đúng.

[ -z

Kiểm tra nếu cỡ toán hạng chuỗi đã cho là 0. Nếu nó có độ dài là 0 thì nó trả $a ] là -z không về là đúng.

đúng.

[ -z

Kiểm tra nếu cỡ toán hạng chuỗi đã cho là khác 0. Nếu độ dài khác 0 thì nó trả $a ] là -n không về là đúng.

đúng.

[ $a ]

là str Kiểm tra nếu str không là chuỗi trống. Nếu là chuỗi trống thì nó trả về là sai. không

sai.

Các toán tử kiểm tra file trong Unix/Linux Các toán tử sau để kiểm tra các sở hữu cơ bản liên kết với một file Unix.

Giả sử một biến file giữ một tên file đang tồn tại là “test” với kích cỡ là 100 byte và được cho phép

đọc, viết và chạy.

Ví dụ

Page 83

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Toán Miêu tả Ví dụ tử

[ -b

-b file Kiểm tra nếu file là một file khối đặc biệt, nếu đúng thì điều kiện là đúng. $file ]

là sai.

[ -c

-c file Kiểm tra nếu file là một file ký tự đặc biệt, nếu đúng thì điều kiện là đúng. $file ]

là sai.

[ -d

$file ]

-d file Kiểm tra nếu file là một thư mục, nếu đúng thì điều kiện là đúng. là

không

đúng.

[ -f

Kiểm tra nếu file là file thường như trái ngược với thư mục hoặc là file đặc biệt, $file ] -f file nếu đúng thì điều kiện là đúng. là

đúng.

[ -g

-g file Kiểm tra nếu file có ID nhóm thiết lập (SGID), nếu đúng thì điều kiện là đúng. $file ]

là sai.

[ -k

-k file Kiểm tra nếu file có thiết lập sticky bit, nếu đúng thì điều kiện là đúng. $file ]

là sai.

[ -p

-p file Kiểm tra nếu file là một pipe được đặt tên, nếu đúng thì điều kiện là đúng. $file ]

là sai.

Kiểm tra nếu ký hiệu để nhận diện file được mở và liên kết với một terminal, [ -t -t file nếu đúng thì điều kiện là đúng. $file ]

Page 84

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

là sai.

[ -u

$file ] -u file Kiểm tra nếu file có SUID, nếu đúng thì điều kiện là đúng.

là sai.

[ -r

$file ] -r file Kiểm tra nếu file là đọc được, nếu đúng thì điều kiện là đúng. là

đúng.

[ -w

$file ] -w file Kiểm tra nếu file là viết được, nếu đúng thì điều kiện là đúng. là

đúng.

[ -x

$file ] -x file Kiểm tra nếu file là chạy được, nếu đúng thì điều kiện là đúng. là

đúng.

[ -s

$file ] -s file Kiểm tra nếu file là chạy được, nếu đúng thì điều kiện là đúng. là

đúng.

[ -e

Kiểm tra nếu file tồn tại, vẫn đúng ngay cả khi file là một thư mục nhưng tồn $file ] -e file là tại.

đúng.

Các toán tử C Shell trong Unix/Linux: Sau đây là đường link miêu tả ngắn gọn về các toán tử C Shell.

Các toán tử C Shell

Các toán tử Korn Shell trong Unix/Linux:

Page 85

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Sau đây là đường link miêu tả ngắn gọn về các toán tử Korn Shell.

Các toán tử Korn Shell

Điều khiển luồng trong Shell

Trong khi viết một Shell script, có thể có một tình huống khi bạn cần để theo một path ngoài 2 path

đã được cung cấp. Vì thế bạn cần tạo cách sử dụng của các lệnh có điều kiện mà cho phép

chương trình của bạn tạo các quyết định chính xác và thực hiện các hành động đúng.

Unix Shell hỗ trợ các lệnh có điều kiện mà được sử dụng để thực hiện các hành động khác nhau

 Lệnh if...else

 Lệnh case...esac

dựa trên các điều kiện đa dạng. Tại đây chúng ta sẽ giải thích hai lệnh điều khiển luồng:

Lệnh if…else trong Unix/Linux Lệnh này là một lệnh điều khiển luồng hữu ích, được sử dụng để lựa chọn một tùy chọn từ một tập

hợp tùy chọn đã cho.

 Lệnh if...fi

 Lệnh if...else...fi

 Lệnh if...elif...else...fi

Unix Shell hỗ trợ các mẫu lệnh if…else sau:

Hầu hết các lệnh if kiểm tra mối quan hệ bằng cách sử dụng các toán tử quan hệ được đề cập

trong chương trước.

Lệnh case...esac trong Unix/Linux Bạn có thể sử dụng nhiều lệnh if…elif để thực hiện một nhánh có nhiều lựa chọn. Tuy nhiên, đây

không là giải pháp tốt nhất, đặc biệt khi tất cả các nhánh phụ thuộc vào giá trị của một biến đơn.

Unix shell hỗ trợ lệnh case...esac mà giải quyết chính xác tình huống này, và nó thực hiện theo

cách hiệu quả hơn là lặp lại sử dụng nhiều lệnh if…elif.

Page 86

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

 Lệnh case...esac

Chỉ có một mẫu của lệnh case…esac mà được liệt kê ở đây:

Lệnh case...esac của Unix Shell là tương tự với lệnh switch...case mà chúng ta có trong các

chương trình C hoặc C++ và PERL etc.

Vòng lặp trong Unix

Vòng lặp là công cụ chương trình có tính năng mạnh, cho phép bạn có thể lặp lại một tập hợp các

lệnh. Trong chương này, bạn sẽ tìm hiểu qua các ví dụ thực hành về vòng lặp có trong các chương

 Vòng lặp while

 Vòng lặp for

 Vòng lặp until

 Vòng lặp select

trình shell.

Bạn sẽ sử dụng các vòng lặp khác nhau trên cơ sở các tình huống khác nhau. Ví dụ, vòng lặp

while sẽ chạy lệnh đã cho tới khi điều kiện đã cho vẫn còn đúng, trong khi đó vòng lặp until sẽ chạy

tới khi điều kiện đã cho trở nên đúng.

Một khi bạn có các bài thực hành chương trình tốt, bạn sẽ bắt đầu sử dụng vòng lặp thích hợp trên

cơ sở tình huống đã cho. Ở đây, vòng lặp while và for là có sẵn trong hầu hết các ngôn ngữ

chương trình khác như C, C++ và PERL etc.

Lồng các vòng lặp trong Unix/Linux Tất cả các vòng lặp hỗ trợ khái niệm lồng, có nghĩa là bạn có thể đặt một vòng lặp vào bên trong

một vòng lặp tương tự hoặc các vòng lặp khác. Việc lồng này có thể không giới hạn số lượng tối đa

vòng lặp, nó phụ thuộc vào yêu cầu của bạn.

Dưới đây là ví dụ của lồng vòng lặp while, và theo cách tương tự, các vòng lặp khác có thể được

lồng tùy theo yêu cầu chương trình.

Lồng vòng lặp while trong Unix/Linux Nó là có thể để sử dụng vòng lặp while như là một phần của thân của một vòng lặp while khác.

Page 87

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Cú pháp:

while command1 ; # this is loop1, the outer loop

do

Statement(s) to be executed if command1 is true

while command2 ; # this is loop2, the inner loop

do

Statement(s) to be executed if command2 is true

done

Statement(s) to be executed if command1 is true

done

Ví dụ: Sau đây là ví dụ đơn giản của lồng vòng lặp:

#!/bin/sh

a=0

while [ "$a" -lt 10 ] # this is loop1

do

b="$a"

while [ "$b" -ge 0 ] # this is loop2

do

echo -n "$b "

b=`expr $b - 1`

done

echo

a=`expr $a + 1`

done

Nó tạo ra kết quả sau. Nó là quan trọng để ghi nhớ cách echo -n làm việc ở đây. Tại đây tùy chọn -

n cho phép echo tránh việc in một dòng ký tự mới.

Page 88

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

0

1 0

2 1 0

3 2 1 0

4 3 2 1 0

5 4 3 2 1 0

6 5 4 3 2 1 0

7 6 5 4 3 2 1 0

8 7 6 5 4 3 2 1 0

9 8 7 6 5 4 3 2 1 0

Điều khiển vòng lặp trong Unix

Chương trước bạn đã được hướng dẫn cách tạo vòng lặp và làm việc với chúng để thực hiện các

nhiệm vụ khác nhau. Đôi khi bạn cần dừng một vòng lặp hoặc tiếp tục tiến hành quá trình lặp đi lặp

lại của chúng.

Trong chương này, bạn sẽ học 2 lệnh được sử dụng trong điều khiển vòng lặp Shell:

1. Lệnh break

2. Lệnh continue

Vòng lặp vô hạn trong Unix/Linux Tất cả vòng lặp có một vòng đời giới hạn và chúng kết thúc khi điều kiện là đúng hoặc sai phụ

thuộc vào vòng lặp.

Một vòng lặp có thể tiếp tục tiến hành vĩnh viễn do chưa kết nối đúng với điều kiện yêu cầu. Một

vòng lặp vô hạn là một vòng lặp mà chạy với số lần không đếm được.

Ví dụ Dưới đây là ví dụ đơn giản về sử dụng vòng lặp while để hiển thị các số từ 0 đến 9.

#!/bin/sh

a=10

Page 89

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

while [ $a -ge 10 ]

do

echo $a

a=`expr $a + 1`

done

Vòng lặp này là vòng lặp vô hạn bởi vì a luôn luôn lớn hơn hoặc bằng 10 và nó sẽ không bao giờ

nhỏ hơn 10.

Lệnh break trong Unix/Linux Lệnh break được sử dụng để kết thúc tiến trình chạy của một vòng lặp đầy đủ, sau khi hoàn thành

chạy tất cả các dòng trong code tới lệnh break này. Nó sau đó bước ra khỏi đoạn code sau khi kết

thuc vòng lặp.

Cú pháp Lệnh break sau được sử dụng để thoát khỏi một vòng lặp.

break

break n

Lệnh break có thể được sử dụng để thoát khỏi một vòng lặp sử dụng định dạng sau:

Tại đây n xác định vòng lặp thứ n được bao quanh để thoát ra khỏi từ đó:

Ví dụ Ví dụ sau chỉ vòng lặp sau sẽ kết thúc ngay sau khi điều kiện trở thành 5:

#!/bin/sh

a=0

while [ $a -lt 10 ]

do

echo $a

Page 90

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

if [ $a -eq 5 ]

then

break

fi

a=`expr $a + 1`

done

0

1

2

3

4

5

Nó sẽ hiển thị kết quả sau:

Dưới đây là một ví dụ đơn giản của lồng vòng lặp. Script thoát ra khỏi cả hai vòng lặp nếu var1

#!/bin/sh

for var1 in 1 2 3

do

for var2 in 0 5

do

if [ $var1 -eq 2 -a $var2 -eq 0 ]

then

break 2

else

echo "$var1 $var2"

fi

done

done

bằng 2 và var2 bằng 0.

Page 91

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Nó sẽ tạo kết quả sau. Trong vòng lặp bên trong bạn có một lệnh break với đối số 2. Nó chỉ rằng

1 0

1 5

nếu điều kiện được thỏa mãn bạn nên thoát khỏi vòng lặp ở bên ngoài.

Lệnh continue trong Unix/Linux Lệnh continue này tương tự như lệnh break, ngoại trừ việc nó gây ra sự lặp lại hiện tại của các

vòng lặp để thoát ra, chứ không phải toàn bộ vòng lặp.

Lệnh này được sử dụng khi một lỗi đã xảy ra và bạn muốn cố để chạy sự lặp kế tiếp của vòng lặp.

Cú pháp:

continue

Giống với lệnh break, một đối số nguyên có thể được cung cấp cho lệnh continue để nhảy qua

continue n

lệnh này từ vòng lặp được lồng.

Ở đây n xác định vòng lặp được bao thứ n để tiếp tục từ đó.

Ví dụ Vòng lặp sau sử dụng lệnh continue mà trở lại từ lệnh continue và bắt đầu tiến trình lệnh kế tiếp.

#!/bin/sh

NUMS="1 2 3 4 5 6 7"

for NUM in $NUMS

do

Q=`expr $NUM % 2`

if [ $Q -eq 0 ]

then

echo "Number is an even number!!"

continue

Page 92

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

fi

echo "Found odd number"

done

Found odd number

Number is an even number!!

Found odd number

Number is an even number!!

Found odd number

Number is an even number!!

Found odd number

Nó sẽ tạo ra kết quả sau:

Trình thay thế Shell

rình thay thế (Substitution) trong Unix/Linux là gì? Shell thực hiện phép thế khi nó gặp một biểu thức mà chứa một hoặc nhiều ký tự đặc biệt.

Ví dụ: Dưới đây là ví dụ, trong khi in một giá trị của biến, nó sẽ được thay thế bởi giá trị của biến. Cùng

#!/bin/sh

a=10

echo -e "Value of a is $a \n"

thời gian đó “\n” được thay thế bởi dòng mới.

Nó sẽ tạo kết quả như dưới đây. Tại đây, chức năng -e sẽ cho phép biên dịch dãy thoát dấu chéo

Value of a is 10

ngược.

Value of a is 10\n

Nếu không có chức năng -e thì nó tạo ra kết quả sau:

Page 93

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Dưới đây là các dãy thoát mà có thể được sử dụng bởi lệnh echo:

Dãy thoát Miêu tả

\\ Dấu chéo ngược

\a Dấu hiệu cảnh báo (BEL)

\b Phím lùi (backspace)

\c Gạch chéo xuống dòng

\f form feed

\n Dòng mới

\r Quay trở lại

\t Tab ngang

\v Tab dọc

Bạn có thể sử dụng chức năng -E để không cho phép biên dịch dấu ngoặc chéo (mặc định).

Bạn có thể sử dụng chức năng -n để không cho phép chèn của dòng mới.

Trình thay thế lệnh (Command Substitution) trong Unix/Linux Trình thay thế lệnh là một kỹ thuật mà bởi nó Shell thực hiện một tập hợp các lệnh đã cung cấp và

sau đó thay thế vị trí kết quả của các lệnh.

Cú pháp Trình thay thế lệnh được thực hiện khi một lệnh được cung cấp như sau:

`command`

Page 94

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Khi thực hiện trình thay thế lệnh, đảm bảo rằng bạn đang sử dụng 2 dấu trích dẫn đơn kiểu (`), chứ

không phải là “”.

Ví dụ Trình thay thế lệnh thông thường được sử dụng để gán đầu ra của một lệnh tới một biến. Mỗi một

#!/bin/sh

DATE=`date`

echo "Date is $DATE"

USERS=`who | wc -l`

echo "Logged in user are $USERS"

UP=`date ; uptime`

echo "Uptime is $UP"

ví dụ sau giải thích cách sử dụng trình thay thế lệnh.

Date is Thu Jul 2 03:59:57 MST 2009

Logged in user are 1

Uptime is Thu Jul 2 03:59:57 MST 2009

03:59:57 up 20 days, 14:03, 1 user, load avg: 0.13, 0.07, 0.15

Nó sẽ tạo ra kết quả sau:

Trình thay thế biến (Variable Substitution) trong Unix/Linux Sự thay thế biến cho phép người lập trình Shell thao tác giá trị của biến dựa trên trạng thái của nó.

Dưới đây là bảng cho tất cả các trình thay thế có thể:

Mẫu Miêu tả

$ {var} Thay thế giá trị của var.

Page 95

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Nếu var là null hoặc unset, thì word được thay thế cho var. Giá trị $ {var:-word} của var không thay đổi.

$ {var:=word} Nếu var là null hoặc unset, var được thiết lập là giá trị củaword .

Nếu var là null hoặc unset, message được in là lỗi. Lệnh này kiểm tra $ {var:?message} xem các biến có được thiết lập đúng không.

Nếu var được thiết lập, word được thay thế cho var. Giá trị $ {var:+word} củavar không thay đổi.

Ví dụ: Dưới đây là ví dụ minh họa các trạng thái đa dạng của trình thay thế trên:

#!/bin/sh

echo $ {var:-"Variable is not set"}

echo "1 - Value of var is $ {var}"

echo $ {var:="Variable is not set"}

echo "2 - Value of var is $ {var}"

unset var

echo $ {var:+"This is default value"}

echo "3 - Value of var is $ var"

var="Prefix"

echo $ {var:+"This is default value"}

echo "4 - Value of var is $ var"

echo $ {var:?"Print this message"}

echo "5 - Value of var is $ {var}"

Nó sẽ tạo ra kết quả sau:

Page 96

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Variable is not set

1 - Value of var is

Variable is not set

2 - Value of var is Variable is not set

3 - Value of var is

This is default value

4 - Value of var is Prefix

Prefix

5 - Value of var is Prefix

Unix - Các kỹ thuật trích dẫn

Các siêu ký tự trong Unix/Linux Shell cung cấp các siêu ký tự đa dạng mà có ý nghĩa đặc biệt trong khi sử dụng chúng trong bất kỳ

Shell script nào và gây ra sự giới hạn của một từ trừ khi được trích dẫn.

Ví dụ: siêu ký tự ? kết nối với một ký tự đơn trong khi liệt kê các file trong một thư mục và siêu ký

tự * sẽ kết nối nhiều hơn một ký tự. Dưới đây liệt kê một danh sách của hầu hết các ký tự đặc biệt

* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab

trong shell (cũng được gọi là siêu ký tự).

Một ký tự có thể được trích dẫn bằng cách đặt trước nó với một dấu \.

Ví dụ trong Unix/Linux: Dưới đây là ví dụ chỉ cách để in một * hoặc một ?:

#!/bin/sh

echo Hello; Word

Hello

./test.sh: line 2: Word: command not found

Nó sẽ tạo ra kết quả sau:

Page 97

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

shell returned 127

#!/bin/sh

echo Hello\; Word

Bây giờ chúng ta sử dụng một ký tự được trích dẫn:

Hello; Word

Nó sẽ tạo ra kết quả:

Ký hiệu $ là một siêu ký tự, vì thế nó phải được trích dẫn để tránh shell thực hiện các công việc

#!/bin/sh

echo "I have \$1200"

đặc biệt liên quan đến nó:

I have $1200

Code trên tạo ra kết quả sau:

Có 4 kiểu mẫu trích dẫn được chúng tôi liệt kê trong bảng sau:

Trích dẫn Miêu tả

Tất cả các ký tự ở giữa trích dẫn này không còn ý nghĩa đặc biệt nữa với Trích dẫn đơn shell.

Hầu hết các ký tự giữa trích dẫn này không còn ý nghĩa đặc biệt, trừ các

ký tự sau:

 $

Trích dẫn kép

`

\$

\'

Page 98

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

\"

\\

Dấu gạch chéo Bất kỳ ký tự nào đằng sau dấu chéo ngược \ không còn ý nghĩa đặc biệt

ngược của nó.

Trích dẫn ngược Bất kỳ ký tự nào ở giữa trích dẫn ngược được shell đối xử như là một

echo <-$1500.**>; (update?) [y|n]

(``) lệnh và được chạy. Các trích dẫn đơn trong Unix/Linux: Chúng ta xem xét một lệnh echo mà chứa nhiều ký tự đặc biệt trong shell sau:

Đặt một dấu chéo ngược (\) ở trước mỗi ký tự đặc biệt là một việc gây chán ngắt và làm cho code

echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]

khó để đọc.

Có một cách dễ dàng để trích dẫn một nhóm lớn các ký tự. Chúng ta đặt một trích dẫn đơn (`)tại

echo '<-$1500.**>; (update?) [y|n]'

phần đầu và cuối của chuỗi:

Bất kỳ ký tự nào trong trích dẫn đơn được trích dẫn tương tự như có một dấu chéo ngược trước

mỗi ký tự. Vì thế, bây giờ mỗi lệnh echo này hiển thị một cách chính xác.

Nếu một trích dẫn đơn xuất hiện trong một chuỗi để tạo kết quả đầu ra, bạn không nên đặt toàn bộ

echo 'It\'s Shell Programming'

chuỗi trong trích dẫn đơn, thay vào đó bạn nên đặt trước chúng một dấu \ như sau:

Trích dẫn kép trong Unix/Linux Bạn đang cố gắng để chạy Shell script sau. Script này sử dụng trích dẫn đơn:

VAR=ZARA

echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'

Page 99

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]

Nó sẽ tạo ra kết quả sau:

Nhưng nó không phải thứ mà bạn muốn hiển thị. Như vậy rõ ràng là trích dẫn đơn ngăn cản trình

thay thế biến. Nếu bạn muốn thay thế giá trị của biến và thực hiện công việc sau dấu phảy như bạn

VAR=ZARA

echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"

mong đợi thì khi đó bạn cần đặt các lệnh của bạn trong trích dẫn kép như sau:

ZARA owes <-$1500.**>; [ as of (07/02) ]

Nó sẽ tạo ra kết quả sau:

 $ cho trình thay thế tham số

 Trích dẫn ngược cho trình thay thế lệnh

Trích dẫn kép loại bỏ ý nghĩa đặc biệt của tất cả ký tự đặc biệt trừ các trường hợp sau:

\$ thể hiện bằng chữ của ký hiệu Đôla

\` thể hiện bằng chữ của ký hiệu trích dẫn ngược

\" cho phép trích dẫn kép được nhúng

 Tất cả các dạng “\ký tự” khác được biểu hiện bằng ý nghĩa chữ của nó (không phải đặc biệt)

\\ cho phép ký tự dấu gạch chéo ngược được nhúng

Bất kỳ ký tự nào trong trích dẫn đơn được trích dẫn như là một dấu chéo ngược ở phần trước mỗi

ký tự. Vì thế bây giờ lệnh echo này hiển thị chính xác.

Nếu một trích dẫn đơn xuất hiện trong một chuỗi ở kết quả đầu ra, bạn không nên đặt toàn bộ

echo 'It\'s Shell Programming'

chuỗi trong trích dẫn đơn mà thay vào đó bạn nên đặt trước nó một dấu chéo ngược như sau:

Trích dẫn ngược trong Unix/Linux Đặt bất kỳ lệnh shell vào giữa các trích dẫn ngược thì shell sẽ thi hành lệnh đó.

Page 100

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Cú pháp Đây là cú pháp đơn giản để đặt bất kỳ lệnh Shell nào vào giữa trích dẫn ngược:

Ví dụ:

var=`command`

Ví dụ: Sau đây chúng tôi sẽ chạy lệnh date và giữ kết quả trong biến DATA:

DATE=`date`

echo "Current Date: $DATE"

Current Date: Thu Jul 2 05:28:45 MST 2009

Nó tạo ra kết quả là:

Điều hướng IO trong Unix/Linux

Hầu hết các lệnh hệ thống Unix nhận dữ liệu input từ terminal của bạn và gửi output lại cho

terminal của bạn. Một lệnh thường đọc input của nó từ một địa điểm gọi là input tiêu chuẩn

(standard input), mà xảy ra với terminal của bạn theo mặc định. Theo cách tương tự, một lệnh

thường viết output tới đầu ra tiêu chuẩn (standard output), mà cũng xảy ra với terminal của bạn

theo mặc định.

Điều hướng lại output trong Unix/Linux output từ một lệnh thường có khuynh hướng chờ cho standard output có thể dễ dàng định hướng

tới một file. Khả năng này được biết đến như là sự điều hướng lại đầu ra.

Nếu các ký hiệu > file được gán tới bất kỳ lệnh nào thì nó thường viết đầu ra của nó tới standard

output, đầu ra của lệnh đó sẽ được ghi vào file thay vì terminal của bạn.

$ who > users

Chúng ta cùng kiểm tra lệnh who mà sẽ điều hướng lại toàn bộ đầu ra của lệnh trong tệp users:

Page 101

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Chú ý rằng, không đầu ra nào xuất hiện trên terminal. Đó là bởi vì đầu ra đã được điều hướng lại

từ thiết bị đầu ra tiêu chuẩn mặc định (terminal) vào trong một file cụ thể. Nếu bạn kiểm tra tệp

$ cat users

oko tty01 Sep 12 07:30

ai tty15 Sep 12 13:32

ruth tty21 Sep 12 10:10

pat tty24 Sep 12 13:07

steve tty25 Sep 12 13:03

$

users thì khi đó file đó sẽ có nội dung đầy đủ:

Nếu một lệnh có đầu ra được điều hướng lại tới một file và file đó đã chứa một vài dữ liệu, thì dữ

$ echo line 1 > users

$ cat users

line 1

$

liệu đó sẽ bị thất lạc. Xem xét ví dụ sau:

$ echo line 2 >> users

$ cat users

line 1

line 2

$

Bạn có thể sử dụng toán tử >> để gán đầu ra vào một file đang tồn tại như sau:

Sự điều hướng lại input trong Unix/Linux Tương tự như đầu ra của lệnh, input của lệnh cũng có thể điều hướng lại từ một file. Khi ký tự lớn

hơn > được sử dụng cho điều hướng input, thì ký tự nhỏ hơn < được sử dụng để điều hướng lại

input của lệnh.

Các lệnh mà thường nhận input của nó từ input tiêu chuẩn có thể có input từ một file theo thao tác

của người sử dụng. Ví dụ, để tính toán số lượng dòng trong một tệp users trên, bạn có thể chạy

lệnh như sau:

Page 102

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ wc -l users

2 users

$

Ở đây nó sẽ tạo ra kết quả là 2 dòng. Bạn có thể tính toán số dòng trong file bởi điều hướng lại

$ wc -l < users

2

$

input tiêu chuẩn của lệnh wc từ tệp users.

Ghi nhớ rằng, có một sự khác nhau trong output bởi 2 mẫu của lệnh wc. Trong trường hợp đầu

tiên, tên của tệp users được liệt kê với số dòng, còn trong trường hợp thứ hai thì không.

Trong trường hợp đầu, wc biết rằng nó đang đọc input của nó từ tệp users. Trong trường hợp thứ

hai, nó chỉ biết rằng nó đang input của nó từ input tiêu chuẩn vì thế nó không hiển thị tên file.

Here document trong Unix/Linux Một here document được sử dụng để điều hướng lại input vào trong một shell script hoặc chương

trình tương tác.

Chúng ta có thể chạy một chương trình tương tác trong một shell script mà không cần thao tác của

người sử dụng cung cấp input yêu cầu cho chương trình hoặc shell script tương tác.

command << delimiter

document

delimiter

Mẫu chung cho một here document là:

Ở đây, shell phiên dịch toán tử << như là một chỉ lệnh để đọc input tới khi nó tìm thấy một dòng

chứa giới hạn đã xác định. Tất cả input mà ở trên dòng chứa giới hạn sau đó được cho trở thành

input tiêu chuẩn của lệnh.

Giới hạn này nói cho shell rằng here document đã thực hiện xong. Không có nó, shell tiếp tục đọc

input mãi mãi. Giới hạn phải là một từ đơn mà không chứa các dấu cách hoặc tab.

Dưới đây là input của lệnh wc -l để tính toán tổng số dòng.

Page 103

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$wc -l << EOF

This is a simple lookup program

for good (and bad) restaurants

in Cape Town.

EOF

3

$

#!/bin/sh

cat << EOF

This is a simple lookup program

for good (and bad) restaurants

in Cape Town.

EOF

Bạn có thể sử dụng here document để in nhiều dòng mà sử dụng script của bạn như sau:

This is a simple lookup program

for good (and bad) restaurants

in Cape Town.

Code này sẽ tạo ra kết quả sau:

#!/bin/sh

filename=test.txt

vi $filename <

i

This file was created automatically from

a shell script

^[

ZZ

EndOfCommands

Script sau chạy một khu vực với Bộ soạn văn bản vi và lưu giữ input vào trong tệp test.txt.

Page 104

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Nếu bạn chạy script này với vim mà hoạt động tương tự vi, thì sau đó bạn sẽ thấy output giống như

$ sh test.sh

Vim: Warning: Input is not from a terminal

$

sau:

$ cat test.txt

This file was created automatically from

a shell script

$

Sau khi chạy script, bạn sẽ thấy đầu ra sau được thêm vào file test.txt.

Loại bỏ output trong Unix/Linux Đôi khi bạn sẽ cần chạy một lệnh, nhưng bạn không muốn output hiển thị trên màn hình. Trong

những trường hợp như vậy, bạn có thể loại bỏ đầu ra bằng điều hướng lại nó vào trong tệp

$ command > /dev/null

/dev/null:

Ở đây, command là tên của lệnh bạn muốn chạy. Tệp /dev/null là một file đặc biệt mà tự động loại

bỏ tất cả input của nó.

Để loại bỏ cả đầu ra của một lệnh và đầu ra bị lỗi của lệnh, bạn sử dụng sự điều hướng lại tiêu

$ command > /dev/null 2>&1

chuẩn để điều hướng lại STDERR tới STDOUT.

Ở đây 2 đại diện cho STDERR và 1 đại diện cho STDOUT. Bạn có thể hiển thị một thông báo trên

$ echo message 1>&2

STDERR bằng điều hướng lại STDIN thành STDERR như sau:

Các lệnh điều hướng lại trong Unix/Linux Dưới đây là danh sách đầy đủ các lệnh mà bạn có thể sử dụng cho điều hướng lại:

Page 105

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Lệnh Miêu tả

pgm > file Đầu ra của pgm được điều hướng tới file.

pgm < file Chương trình pgm đọc input từ file.

pgm >> file Đầu ra của pgm được gán tới file.

n > file Đầu ra từ stream với dấu hiệu n được điều hướng tới file.

n >> file Đầu ra từ stream với dấu hiệu n được gán tới file.

n >& m Sáp nhập đầu ra từ stream n với stream m.

n <& m Sáp nhập input từ stream n với stream m.

<< tag input tiêu chuẩn xuất phát từ đây qua thẻ tiếp theo tại phần đầu của dòng.

Nhận đầu ra từ một chương trình hoặc một tiến trình và gửi nó cho | chương trình khác..

Ghi chú rằng dấu hiệu file 0 thường là input tiêu chuẩn (STDIN), 1 thường là đầu ra tiêu chuẩn

(STDOUT), và 2 thường là đầu ra lỗi tiêu chuẩn (STAERR).

Các hàm Shell

Các hàm cho phép bạn tinh giản một tính năng tổng thể của một script vào một phần nhỏ và logic

hơn mà có thể thực hiện cùng một chức năng bất cứ khi nào nó được cần thông qua việc gọi hàm.

Sử dụng các hàm để thực hiện các công việc mang tính lặp là một cách thông minh để tạo tính sử

dụng lại được của code. Tính sử dụng lại của code là một phần quan trọng của các quy tắc

chương trình hướng đối tượng hiện đại.

Các hàm Shell là tương tự như các chương trình con, phương thức và các hàm của các chương

trình khác.

Page 106

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Tạo các hàm trong Unix/Linux Để công bố một hàm, đơn giản bạn sử dụng cú pháp sau:

function_name () {

list of commands

}

Tên hàm của bạn là function_name, và nó là những gì mà bạn sẽ sử dụng để gọi nó từ bất cứ

đâu trong script của bạn. Tên hàm phải được theo sau bởi dấu ngoặc đơn, mà được theo sau bởi

một danh sách các lệnh bao quanh trong dấu ngoặc ôm ({}).

Ví dụ: Sau đây là ví dụ đơn giản của việc sử dụng hàm:

#!/bin/sh

# Define your function here

Hello () {

echo "Hello World"

}

# Invoke your function

Hello

$./test.sh

Hello World

$

Khi bạn chạy script trên, nó sẽ tạo ra kết quả sau:

Truyền các tham số cho một hàm trong Unix/Linux Bạn có thể định nghĩa một hàm mà sẽ nhận các tham số trong khi gọi các hàm đó. Những tham số

này sẽ có thể được đại diện bởi $1, $2 và ….

Dưới đây là ví dụ mà chúng ta truyền hai tham số Zara và Ali và sau đó chúng ta bắt và in các

tham số này trong hàm.

Page 107

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

#!/bin/sh

# Define your function here

Hello () {

echo "Hello World $1 $2"

}

# Invoke your function

Hello Zara Ali

$./test.sh

Hello World Zara Ali

$

Code này sẽ tạo ra kết quả sau:

Trả lại các giá trị từ một hàm trong Unix/Linux Nếu bạn chạy một lệnh exit từ bên trong một hàm, hiệu quả của nó là không chỉ kết thúc sự vận

hành của hàm mà còn của chương trình Shell.

Nếu bạn thay cho muốn kết thúc sự vận hành của hàm, thì có cách để thoát khỏi một hàm đã định

nghĩa.

Dựa trên tình huống bạn có thể trả lại bất cứ giá trị nào từ hàm của bạn bằng cách sử dụng

return code

lệnh return mà có cú pháp như sau:

Ở đây code có thể là bất cứ cái gì mà bạn chọn, nhưng rõ ràng là bạn nên chọn một cái gì đó mà

có nghĩa hoặc hữu ích trong bối cảnh tổng thể script của bạn.

Ví dụ: Hàm dưới đây trả lại giá trị 1.

#!/bin/sh

# Define your function here

Page 108

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Hello () {

echo "Hello World $1 $2"

return 10

}

# Invoke your function

Hello Zara Ali

# Capture value returnd by last command

ret=$?

echo "Return value is $ret"

$./test.sh

Hello World Zara Ali

Return value is 10

$

Code trên tạo ra kết quả sau:

Các hàm được lồng vào nhau trong Unix/Linux Một trong những đặc điểm đáng quan tâm của các hàm là chúng có thể là chúng có thể gọi chính

hàm đó hoặc gọi các hàm khác. Một hàm có thể gọi chính nó được biết đến như hàm đệ quy.

#!/bin/sh

# Calling one function from another

number_one () {

echo "This is the first function speaking..."

number_two

}

number_two () {

Dưới đây là ví dụ giải thích sự lồng vào nhau của hai hàm.

Page 109

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

echo "This is now the second function speaking..."

}

# Calling function one.

number_one

This is the first function speaking...

This is now the second function speaking...

Nó sẽ tạo ra kết quả sau:

Gọi hàm từ dòng nhắc lệnh trong Unix/Linux Bạn có thể đặt định nghĩa của các hàm thường được sử dụng bên trong một .profile của bạn để

mà chúng có sẵn mỗi khi bạn đăng nhập và bạn có thể sử dụng chúng bất cứ khi nào tại dòng

nhắc lệnh.

Bạn cũng có thể chọn cách tạo nhóm các định nghĩa hàm này vào trong một file, gọi làtest.sh, và

$. test.sh

sau đó chạy file trên Shell hiện tại bằng cách gõ từ bàn phím.

Điều này có thể thực hiện được khi các hàm trong file này có thể cho phép đọc và nó được xác

$ number_one

This is the first function speaking...

This is now the second function speaking...

$

định trong Shell hiện tại như sau:

Để gỡ bỏ một định nghĩa hàm từ Shell hiện tại, bạn có thể sử dụng lệnh unset với chức năng.f. Nó

$unset .f function_name

giống với lệnh mà bạn sử dụng để gỡ bỏ định nghĩa một biến từ Shell.

ManPage Help trong Unix

Tất cả các lệnh Unix đi kèm với các chức năng tùy ý và bắt buộc. Nó là rất thông thường khi bạn

quên cú pháp đầy đủ của những lệnh này.

Page 110

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Bởi vì không ai có thể nhớ mọi lệnh Unix và tất cả các chức năng đi kèm với nó, và để giúp bạn

điều này, Unix ngay từ khi mới ra đời đã có một dịch vụ trực tuyến sẵn sàng giúp đỡ bạn.

Phiên bản Unix của các file trợ giúp được gọi là Man Pages. Nếu bạn biết bất cứ tên lệnh nào

nhưng mà bạn không biết cách sử dụng của nó, thì Man Pages sẽ luôn sẵn sàng để giúp bạn đến

từng chi tiết.

Cú pháp trong Unix/Linux Dưới đây là cú pháp đơn giản để nhận được chi tiết về bất cứ lệnh nào trong Unix trong khi đang

$man command

làm việc với hệ thống này.

Ví dụ Bây giờ bạn tưởng tượng bất cứ lệnh nào mà bạn muốn nhận được sự giúp đỡ. Giả sử bạn muốn

$man pwd

biết về lệnh pwd, thì sau đó đơn giản bạn chỉ cần sử dụng lệnh sau:

Lệnh trên sẽ mở một sự trợ giúp cho bạn mà sẽ cung cấp cho bạn các thông tin đầy đủ về

lệnh pwd. Bạn thử thực hành nó tại dòng nhắc lệnh để nhận được nhiều chi tiết hơn về lệnh này.

$man man

Bạn có thể nhận được thông tin chi tiết về lệnh man bằng cách sử dụng lệnh sau:

Chi tiết về Man Page trong Unix/Linux Man Page thường được phân thành các khu vực, mà thường thay đổi bởi quyền của tác giả Man

Page. Dưới đây liệt kê một số khu vực phổ biến hơn.

Khu vực Miêu tả

NAME Tên của lệnh

SYNOPSIS Cách sử dụng chung của các tham số của lệnh

Page 111

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

DESCRIPTION Miêu tả chung về lệnh và những gì nó làm

OPTIONS Miêu tả tất cả các đối số hoặc chức năng đi kèm của lệnh

Liệt kê các lệnh khác mà trực tiếp liên quan tới lệnh trong Man Page hoặc SEE ALSO giống với tính năng của nó.

Giải thích tất cả các vấn đề được biết đến hoặc các bug mà tồn tại với lệnh BUGS hoặc đầu ra của nó.

Các ví dụ về cách sử dụng phổ biến mà cung cấp cho người đọc gợi ý về EXAMPLES cách mà lệnh được sử dụng.

AUTHORS Tác giả của Man Page/lệnh.

Cuối cùng, chúng tôi muốn nói rằng, Man Page là một nguồn quan trọng và là con đường đầu tiên

bạn chọn khi tìm kiếm thông tin về các lệnh hoặc các file trong hệ thống Unix.

Các lệnh shell hữu ích trong Unix/Linux Bây giờ bạn đã biết cách để thực hành, theo link dưới đây – là chương hướng dẫn về Các lệnh

shell hữu ích sẽ cung cấp cho bạn một danh sách các lệnh quan trọng và thường được sử dụng

trong Unix shell.

Nếu bạn không biết cách sử dụng bất cứ lệnh nào, bạn sử dụng Manpage để nhận được thông tin

chi tiết về lệnh đó.

Đây là danh sách Unix Shell - Các lệnh hữu ích

Regular Expression trong Unix

Một Regular Expression là một chuỗi mà có thể sử dụng để diễn tả các dãy khác nhau (cách sắp

xếp) của các ký tự. Regular Expression thường được sử dụng bởi các lệnh Unix khác nhau, bao

gồm ed, sed, awk, grep và miền giới hạn vi.

Chương này sẽ hướng dẫn các bạn cách sử dụng Regular Expression cùng với sed.

Page 112

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Ở đây sed, là viết tắt của stream editor là một bộ soạn điều hướng chuỗi mà được tạo độc quyền

cho các script riêng. Vì thế tất cả những dữ liệu đầu vào mà bạn nhập nó thông qua từ STDOUT và

nó không thay đổi file đầu vào.

Gọi sed trong Unix/Linux Trước khi chúng ta bắt đầu, bảo đảm rằng bạn có một bản sao nội bộ của tệp /etc/passwd để làm

việc với sed.

Như đã đề cập trước đó, sed có thể được gọi bằng cách gửi dữ liệu thông qua một pipe tới nó như

$ cat /etc/passwd | sed

Usage: sed [OPTION]... {script-other-script} [input-file]...

-n, --quiet, --silent

suppress automatic printing of pattern space

-e script, --expression=script

...............................

sau:

Lệnh cat đổ nội dung của /etc/passwd tới sed thông qua pipe trong không gian mẫu của sed.

Không gian mẫu là khu vực công việc bên trong mà được sed sử dụng đê thực hiện công việc của

nó.

Cú pháp chung của sed trong Unix/Linux Dưới đây là cú pháp chung cho sed:

/pattern/action

Ở đây, pattern là một Regular Expression, mà action là một trong các lệnh được cung cấp trong

bảng sau. Nếu pattern bị bỏ qua, thì action được thực hiện cho mọi dòng như chúng ta đã nhìn ở

trên.

Ký tự dấu gạch chéo mà bao quanh pattern được yêu cầu bởi vì chúng được sử dụng như là dấu

giới hạn.

Dãy Miêu tả

Page 113

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

p In dòng

d Xóa dòng

s/pattern1/pattern2/ Thay thế sự kiện của pattern 1 bằng sự kiện trong pattern 2.

Xóa tất cả các dòng với sed Gọi sed thêm lần nữa, nhưng lần này nói cho sed sử dụng lệnh chỉnh sửa để xóa các dòng, biểu

$ cat /etc/passwd | sed 'd'

$

thị bằng ký tự đơn d:

Thay vì gọi sed bằng cách gửi một file tới nó thông qua một pipe, bạn có thể chỉ dẫn sed để đọc dữ

liệu từ một file, như trong ví dụ sau.

Lệnh sau thực hiện chính xác công việc tương tự như phần trên đã nhắc đến. Bạn thử thực hành

$ sed -e 'd' /etc/passwd

$

nó mà không sử dụng lệnh cat.

Sự định vị SED trong Unix/Linux Sed cũng hiểu một số thứ gì đó được gọi là các địa chỉ. Địa chỉ hoặc là vị trí riêng trong một file

hoặc một dãy mà một lệnh chỉnh sửa riêng nên được áp dụng. Khi sed bắt gặp cái gì đó không

được định vị, nó thực hiện các hoạt động của nó trên mọi dòng trong file.

$ cat /etc/passwd | sed '1d' |more

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

Lệnh dưới đây thêm một địa chỉ cơ bản tới lệnh sed mà bạn đang sử dụng:

Page 114

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/sh

$

Bạn chú ý rằng number 1 được thêm trước lệnh chỉnh sửa xóa. Điều này nói cho sed thực hiện

lệnh chỉnh sửa trên dòng đầu tiên của file. Trong ví dụ này, sed sẽ xóa dòng đầu tiên của

/etc/passwd và in phần còn lại của file.

Các dãy địa chỉ của sed trong Unix/Linux Vậy nếu bạn muốn dỡ bỏ nhiều hơn một dòng từ một file thì như thế nào? Bạn có thể xác định một

$ cat /etc/passwd | sed '1, 5d' |more

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/sh

$

dãy địa chỉ với sed như sau:

Lệnh trên sẽ áp dụng trên tất cả các dòng từ dòng 1 đến dòng 5. Vì thế nó xóa 5 dòng đầu tiên.

Bạn thử thực hành theo các dãy được cung cấp dưới đây:

Dãy Miêu tả

'4,10d' Dòng bắt đầu từ 4 đến 10 bị xóa.

'10,4d' Chỉ dòng thứ 10 bị xóa, bởi vì sed không làm việc theo hướng nghịch lại.

Nó sẽ kết nối dòng 4 trong file, xóa dòng đó, tiếp tục xóa 5 dòng tiếp theo, và sau '4,+5d' đó dừng việc xóa này và in phần còn lại của file.

'2,5!d' Nó sẽ xóa mọi thứ trừ từ bắt đầu dòng 2 tới dòng 5.

Page 115

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Nó sẽ xóa dòng đầu tiên, bước qua 3 dòng tiếp theo, và sau đó xóa dòng thứ 4. '1~3d' Sed tiếp tục áp dụng mẫu xóa này tới cuối cùng của file.

Nó nói cho sed xóa dòng thứ 2, bước qua dòng tiếp theo, xóa dòng tiếp, và lập lại '2~2d' bước trên tới khi file được đọc hết.

'4,10p' Bắt đầu từ dòng thứ 4 đến dòng thứ 10 được in.

'4,d' Đây là một cú pháp lỗi.

',10d' Đây là một cú pháp lỗi.

Ghi chú: Trong khi sử dụng hành động p, bạn nên sử dụng chức năng -n để tránh lập lại việc in

$ cat /etc/passwd | sed -n '1,3p'

dòng. Bạn thử kiểm tra sự khác nhau giữa hai lệnh sau:

$ cat /etc/passwd | sed '1,3p'

Kiểm tra lệnh trên mà không sử dụng chức năng -n như sau:

Lệnh thay thế (substitution command) trong Unix/Linux Lệnh thay thế, được biểu diễn bởi s, sẽ thay thế bất kỳ chuỗi nào mà bạn xác định với bất cứ chuỗi

khác.

Để thay thế một chuỗi này với chuỗi khác, bạn cần có một vài cách để nói cho sed nơi chuỗi đầu

tiên của bạn kết thúc và chuỗi thay thế bắt đầu. Điều này theo truyền thống được thực hiện bởi

việc ngăn cách 2 chuỗi với dấu gạch chéo.

$ cat /etc/passwd | sed 's/root/amrood/'

amrood:x:0:0:root user:/root:/bin/sh

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

..........................

Lệnh sau thay thế sự kiện đầu tiên trên một dòng của chuỗi root với chuỗi amrood.

Nó là quan trọng để ghi nhớ rằng sed chỉ thay thế sự kiện đầu tiên trên một dòng. Nếu trên chuỗi

root diễn ra nhiều hơn một dòng thì chỉ dòng đầu tiên sẽ được thay thế.

Page 116

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ cat /etc/passwd | sed 's/root/amrood/g'

amrood:x:0:0:amrood user:/amrood:/bin/sh

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

...........................

Để nói cho sed thực hiện thay thế toàn bộ, thêm ký tự g tới phần cuối của lệnh như sau:

Các cờ hiệu thay thế (Substitution Flag) trong Unix/Linux Có một số cách sử dụng Flag hữu dụng mà có thể được sử dụng để thêm vào dấu hiệu g, và bạn

có thể xác định nó nhiều hơn một lần.

Flag Miêu tả

Thay thế tất cả các kết nối (chuỗi thay thế), không chỉ với kết nối đầu tiên. g

NUMBER Thay thế chỉ kết nối thứ NUMBER.

p Nếu sự thay thế được tạo ra, in không gian mẫu.

w FILENAME Nếu sự thay thế được tạo ra, viết kết quả tới FILENAME.

I hoặc i Tạo sự kết nối trong sự phân biệt giữa kiểu chữ (chữ hoa và thường).

Trong chế độ xử lý thông thường của các ký tự Regular Expression đặc biệt ^

M hoặc m và $, cờ hiệu này làm cho ^ kết nối với một chuỗi trống sau một dòng mới và $

kết nối với một chuỗi trống trước một dòng mới.

Sử dụng một chuỗi thay thế trong Unix/Linux Bạn có thể tự tìm thấy rằng phải thực hiện một sự thay thế trên một chuỗi mà bao gồm ký tự dấu

gạch chéo. Trong trường hợp này, bạn có thể xác định một toán tử khác bằng cách cung cấp ký tự

chỉ định sau chữ cái s:

Page 117

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ cat /etc/passwd | sed 's:/root:/amrood:g'

amrood:x:0:0:amrood user:/amrood:/bin/sh

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

Trong ví dụ trên chúng ta đã sử dụng dấu hiệu giới hạn : as thay vì dấu gạch chéo / bởi vì chúng ta

đang cố gắng tìm kiếm /root thay vì một root đơn.

Đổi vị trí với khoảng trống rỗng trong Unix/Linux Sử dụng chuỗi thay thế trống để xóa chuỗi root từ tệp /etc/passwd:

$ cat /etc/passwd | sed 's/root//g'

:x:0:0::/:/bin/sh

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

Định vị sự thay thế trong Unix/Linux Nếu bạn muốn thay thế chuỗi sh với chuỗi quiet chỉ trên dòng thứ 10, bạn có thể xác định nó như

$ cat /etc/passwd | sed '10s/sh/quiet/g'

root:x:0:0:root user:/root:/bin/sh

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/quiet

sau:

$ cat /etc/passwd | sed '1,5s/sh/quiet/g'

root:x:0:0:root user:/root:/bin/quiet

daemon:x:1:1:daemon:/usr/sbin:/bin/quiet

bin:x:2:2:bin:/bin:/bin/quiet

Theo cách tương tự, để thay đổi một dãy địa chỉ, bạn có thể thực hiện công việc giống như sau:

Page 118

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

sys:x:3:3:sys:/dev:/bin/quiet

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/sh

Như bạn có thể thấy được từ kết quả đầu ra, 5 dòng đầu tiên của chuỗi sh đã được thay đổi bằng

chuỗi quiet, nhưng các dòng còn lại thì không được động chạm đến.

Lệnh kết nối trong Unix/Linux Bạn sẽ sử dụng chức năng p song song với chức năng -n để in tất cả các dòng kết nối như sau:

$ cat testing | sed -n '/root/p'

root:x:0:0:root user:/root:/bin/sh

[root@ip-72-167-112-17 amrood]# vi testing

root:x:0:0:root user:/root:/bin/sh

daemon:x:1:1:daemon:/usr/sbin:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/sh

Sử dụng Regular Expression trong Unix/Linux Trong khi kết nối với mẫu, bạn có thể sử dụng Regular Expression mà cung cấp nhiều tính linh

động hơn cho bạn.

$ cat testing | sed '/^daemon/d'

Kiểm tra ví dụ sau mà kết nối tất cả các dòng bắt đầu với daemon và sau đó xóa chúng:

Page 119

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

root:x:0:0:root user:/root:/bin/sh

bin:x:2:2:bin:/bin:/bin/sh

sys:x:3:3:sys:/dev:/bin/sh

sync:x:4:65534:sync:/bin:/bin/sync

games:x:5:60:games:/usr/games:/bin/sh

man:x:6:12:man:/var/cache/man:/bin/sh

mail:x:8:8:mail:/var/mail:/bin/sh

news:x:9:9:news:/var/spool/news:/bin/sh

backup:x:34:34:backup:/var/backups:/bin/sh

$ cat testing | sed '/sh$/d'

sync:x:4:65534:sync:/bin:/bin/sync

Theo sau là ví dụ mà sẽ xóa tất cả các dòng kết thúc với sh:

Bảng dưới liệt kê 4 ký tự đặc biệt mà rất hữu ích trong các Regular Expression:

Ký tự Miêu tả

^ Kết nối với phần bắt đầu của các dòng.

$ Kết nối với phần cuối của các dòng.

. Kết nối với bất kỳ ký tự đơn nào.

* Kết nối với 0 hoặc nhiều hơn sự kiện của ký tự trước.

Kết nối với bất kỳ ký tự nào được cho trong chars (là một cách bố trí sắp xếp các [chars] ký tự). Bạn có thể sử dụng ký tự - để chỉ một dãy của ký tự.

Các ký tự kết nối trong Unix/Linux Bạn nhìn vào bảng dưới liệt kê một số Expression khác mà giải thích cho cách sử dụng của các

siêu ký tự. Ví dụ, các mẫu sau:

Expression Miêu tả

Page 120

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Kết nối các dòng mà chứa các chuỗi như a+c, a-c, abc, match và a3c. /a.c/

Kết nối với cùng các chuỗi giống với chuỗi đã cho như ace, yacc, và arctic. /a*c/

/[tT]he/ Kết nối với chuỗi The và the.

/^$/ Kết nối với các dòng để trống.

/^.*$/ Kết nối với một dòng toàn bộ bất kể dòng đó như thế nào.

/ */ Kết nối với một hoặc nhiều khoảng trống.

/^$/ Kết nối với các dòng để trống.

Dưới đây là bảng liệt kê một số bộ bố trí ký tự mà thường được sử dụng:

Thiết lập Miêu tả

[a-z] Kết nối với một chữ cái đơn thường.

[A-Z] Kết nối với một chữ cái đơn hoa.

[a-zA-Z] Kết nối với một chữ cái đơn.

[0-9] Kết nối với một số đơn.

[a-zA-Z0-9] Kết nối với một số hoặc một chữ cái đơn.

Các từ khóa lớp ký tự trong Unix/Linux Một số từ khóa đặc biệt thường có sẵn cho các Regular Expression, đặc biệt các tiện ích GNU mà

sử dụng các Regular Expression. Điều này là rất hữu dụng cho các Regular Expression Sed khi

chúng đơn giản hóa các công việc và nâng cao khả năng đọc của nó.

Ví dụ, các ký tự từ a đến z cũng như các ký tự từ A đến Z ủy nhiệm một lớp ký tự là các từ khóa

[[:alpha:]]

Page 121

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Sử dụng từ khóa lớp ký tự chữ cái, lệnh này chỉ in những dòng trong tệp /etc/syslog.conf mà bắt

$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'

authpriv.* /var/log/secure

mail.* -/var/log/maillog

cron.* /var/log/cron

uucp,news.crit /var/log/spooler

local7.* /var/log/boot.log

đầu với một ký tự chữ cái.

Bảng sau là một danh sách đầy đủ của các từ khóa lớp ký tự trong GNU sed.

Lớp ký tự Miêu tả

[[:alnum:]] Thuộc chữ cái-số [a-z A-Z 0-9]

[[:alpha:]] Bảng chữ cái [a-z A-Z]

[[:blank:]] Các ký tự khoảng trống (spaces hoặc tabs)

[[:cntrl:]] Các ký tự điều khiển

[[:digit:]] Các số [0-9]

[[:graph:]] Bất kỳ ký tự nhìn thấy nào (trừ các khoảng trống trắng)

[[:lower:]] Các ký tự viết thường [a-z]

[[:print:]] Các ký tự có thể in được (các ký tự không phải ký tự điều khiển)

[[:punct:]] Các ký tự dấu chấm câu

[[:space:]] Khoảng trống trắng

[[:upper:]] Các ký tự viết hoa [A-Z]

Page 122

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

[[:xdigit:]] Các ký số thập lục phân [0-9 a-f A-F]

Tham chiếu & trong Unix/Linux Siêu ký tự & trong sed biểu diễn nội dung của mẫu mà được kết nối. Ví dụ, giả sử bạn có một tệp

5555551212

5555551213

5555551214

6665551215

6665551216

7775551217

gọi là phone.txt chứa đầy các số điện thoại, như sau:

Bạn muốn tạo một code khu vực (3 ký số đầu tiên) được bao quanh bởi dấu ngoặc đơn để dễ dàng

$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt

(555)5551212

(555)5551213

(555)5551214

(666)5551215

(666)5551216

(777)5551217

hơn khi đọc. Để thực hiện điều này, bạn có thể sử dụng ký tự thay thế &, giống như:

Ở đây trong phần mẫu bạn đang kết nối 3 ký số đầu tiên, và sau đó sử dụng & bạn đang đổi chỗ

cho 3 ký số này với dấu ngoặc đơn bao quanh.

Sử dụng nhiều lệnh sed trong Unix/Linux Bạn có thể sử dụng nhiều lệnh sed trong một lệnh sed đơn như sau:

$ sed -e 'command1' -e 'command2' ... -e 'commandN' files

Tại đây, command1 tới commandN là các kiểu lệnh sed đã được bàn luận ở trên. Những lệnh này

được áp dụng tới mỗi dòng trong một danh sách các file được cung cấp bởi các file.

Sử dụng kỹ thuật tương tự, chúng ta có thể viết ví dụ số điện thoại trên như sau:

Page 123

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ sed -e 's/^[[:digit:]]\{3\}/(&)/g' \

-e 's/)[[:digit:]]\{3\}/&-/g' phone.txt

(555)555-1212

(555)555-1213

(555)555-1214

(666)555-1215

(666)555-1216

(777)555-1217

Ghi chú: Trong ví dụ trên, thay vì lặp lại các từ khóa lớp ký tự [[:digit:]] 3 lần, bạn đổi nó với \{3\},

mà có nghĩa là để kết nối Regular Expression ở trước 3 lần. Tại đây tôi sử dụng \ để xuống dòng,

bạn nên gỡ bỏ nó trước khi chạy lệnh này.

Tham chiếu ngược trong Unix/Linux Siêu ký tự & là hữu ích, nhưng hữu ích hơn là khả năng định nghĩa các khu vực cụ thể trong một

Regular Expression để bạn có thể tham chiếu chúng trong các chuỗi đổi vị trí. Bằng việc định nghĩa

các phần cụ thể của một Regular Expression, sau đó bạn có thể xem lại những phần này với một

ký tự tham chiếu đặc biệt.

Để tham chiếu ngược, đầu tiên bạn phải định nghĩa một khu vực và sau đó xem lại khu vực đó. Để

định nghĩa một khu vực, bạn chèn ký tự dấu ngoặc đơn trong dấu chéo ngược quanh mỗi khu vực

bạn quan tâm. Khu vực đầu tiên mà bạn bao quanh với dấu chéo ngược sau đó được tham chiếu

bởi \1, khu vực thứ hai bởi \2, và tiếp tục.

(555)555-1212

(555)555-1213

(555)555-1214

(666)555-1215

(666)555-1216

(777)555-1217

Giả sử phone.txt có các số liệu sau:

$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \

Bây giờ bạn thử lệnh sau:

Page 124

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

code: \1 Second: \2 Third: \3/'

Area code: (555) Second: 555- Third: 1212

Area code: (555) Second: 555- Third: 1213

Area code: (555) Second: 555- Third: 1214

Area code: (666) Second: 555- Third: 1215

Area code: (666) Second: 555- Third: 1216

Area code: (777) Second: 555- Third: 1217

Ghi chú:Trong ví dụ trên, mỗi Regular Expression bên trong dấu ngoặc đơn sẽ được tham chiếu

ngược bởi \1, \2, …. Tại đây, tôi sử dụng \ để xuống dòng, bạn nên gỡ bỏ chúng trước khi chạy

lệnh.

Cơ bản về hệ thống File trong Unix

Một hệ thống file là một tập hợp logic của các file trên một vùng phân hoạch (partition) hoặc một

đĩa. Một vùng phân hoạch là một nơi chứa thông tin và có thể tổ hợp thành một đĩa cứng nếu

muốn.

Đĩa cứng của bạn có thể có các vùng phân hoạch đa dạng mà thường chỉ chứa một hệ thống file,

như một hệ thống file /home.

Một hệ thống file một vùng phân hoạch cho phép duy trì và quản lý các hệ thống file khác nhau một

cách logic.

Mọi thứ trong Unix được xem xét như là một file, bao gồm các thiết bị vật lý như DVD-ROMs, USB,

đĩa mềm, ….

Cấu trúc thư mục trong Unix/Linux Unix sử dụng một cấu trúc hệ thống file có thứ bậc, mà giống một cấu trúc cây từ trên xuống dưới,

với root (/) tại cơ sở của hệ thống file và tất cả các thư mục khác trải ra từ đó.

 Nó có một thư mục gốc (/) mà chứa các file và thư mục khác.

 Mỗi file và thư mục được xác định duy nhất bởi tên của nó, thư mục mà trong đó nó cư trú,

Một hệ thống file là một tập hợp của các file và thư mục mà có các đặc tính sau:

và một sự nhận diện duy nhất, được gọi theo cách đặc trưng là inode.

Page 125

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

 Theo quy ước, thư mục gốc có số inode là 2 và thư mục lost+found có số inode là 3. Số

inode 0 và 1 không được sử dụng. Các số inode có thể được gửi bởi trình xác định trong

 Nó có đặc tính khác nữa là tự chứa. Không có sự phụ thuộc giữa một hệ thống file này với

chức năng -i của lệnh ls.

một hệ thống file khác.

Các thư mục có các mục đích riêng và thường giữ các kiểu thông tin giống nhau để việc đặt vị trí

các file dễ dàng. Dưới đây là các thư mục mà tồn tại trên các phiên bản lớn của Unix.

Thư Miêu tả mục

Nó là thư mục chính mà chỉ chứa các thư mục cần thiết ở cấp cao nhất trong cấu / trúc file.

/bin Vị trí này đặt các file có thể chạy được. Chúng có sẵn cho mọi người dùng.

/dev Đây là các thiết bị điều khiển.

Các lệnh thư mục Supervisors, các file định cấu hình, các file định cấu hình đĩa,

/etc danh sách người dùng hợp lệ, ethernet, host, là nơi để gửi các thông điệp nghiêm

trọng.

/lib Chứa các file thư viện được chia sẻ và đôi khi các tệp liên quan đến Kernel.

/boot Chứa các file để khởi động hệ thống (boot).

/home Chứa thư mục chính cho các người sử dụng và các tài khoản khác.

/mnt Sử dụng để gắn kết (mount) các hệ thống file tạm thời, như cdroom và đĩa mềm ….

Chứa tất cả các tiến trình được đánh dấu như một file bởi số tiến trình hoặc thông /proc tin khác mà là động lực của hệ thống.

Page 126

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

/tmp Giữ các file tạm thời được sử dụng giữa quá trình khởi động (boot) hệ thống.

Được sử dụng cho các mục đích hỗn hợp, hoặc có thể được sử dụng bởi nhiều

/usr người sử dụng. Bao gồm các lệnh về hành chính, các file được chia sẻ, các file thư

viện, và các cái khác.

Một thư mục đặc thù, chứa các file biến dài như các file đăng nhập và in và bất kỳ /var kiểu khác của file mà có thể chứa một số lượng biến của dữ liệu.

Chứa các file (có thể chạy) nhị phân, thường cho quản lý hệ thống. Ví dụ như các /sbin tiện ích fdisk và ifconfig.

/kernel Chứa các tệp kernel.

Điều hướng hệ thống file trong Unix/Linux Bây giờ bạn đã hiểu các cơ sở của hệ thống file, bạn có thể bắt đầu điều hướng file bạn cần. Bảng

dưới là các lệnh bạn sẽ sử dụng để điều hướng hệ thống.

Lệnh Miêu tả

cat filename Hiển thị một tên file.

cd dirname Di chuyển bạn tới thư mục đã được xác định.

cp file1 file2 Sao chép một file/thư mục tới vị trí đã được xác định.

file filename Nhận diện kiểu file (nhị phân, văn bản, …).

find filename dir Tìm một file/thư mục.

head filename Chỉ phần bắt đầu của một file.

less filename Trình duyệt thông qua một file từ cuối hoặc từ đầu.

Page 127

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

ls dirname Chỉ nội dung của thư mục đã được xác định.

mkdir dirname Tạo một thư mục đã được định trước.

more filename Trình duyệt thông qua một file từ đầu tới cuối.

mv file1 file2 Di chuyển vị trí hoặc đặt lại tên của một file/thư mục.

pwd Chỉ thư mục hiện tại mà người sử dụng hiện tại đang ở.

rm filename Gỡ bỏ một file.

rmdir dirname Gỡ bỏ một thư mục.

tail filename Chỉ phần cuối của một file.

Tạo một file trống hoặc sửa đổi các thuộc tính của một file.s đang tồn touch filename tại.

whereis filename Chỉ vị trí của một file.

which filename Chỉ vị trí của một file nếu nó trong PATH của bạn.

Bạn có thể sử dụng Trang trợ giúp (Manpage Help) để kiểm tra cú pháp đầy đủ cho mỗi lệnh

được đề cập ở đây.

Lệnh df trong Unix/Linux Cách đầu tiên để quản lý không gian vùng phân hoạch là với lệnh df (viết tắt của disk free).

$df -k

Filesystem 1K-blocks Used Available Use% Mounted on

/dev/vzfs 10485760 7836644 2649116 75% /

/devices 0 0 0 0% /devices

$

Lệnh df -k hiển thị không gian đĩa sử dụng trong kilobyte, như hiển thị dưới đây:

Page 128

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Một số các thư mục, như /devices, chỉ 0 kilobyte được sử dụng. Những file này là những hệ thống

file đặc biệt, và mặc dù chúng cư trú ở trên đĩa dưới dấu gạch chéo, bởi chính chúng không chiếm

dụng không gian của đĩa.

output của df -k thường giống trên tất cả các hệ thống Unix. Dưới đây liệt kê những thứ mà nó bao

gồm:

Cột Miêu tả

Filesystem Tên hệ thống file.

kbytes Tổng số kilo byte có sẵn trên phương tiện lưu trữ

used Tổng số kilo byte đã được sử dụng (bởi file).

avail Tổng số kilo byte có sẵn cho sử dụng (còn lại chưa được sử dụng).

capacity Phần trăm của tổng số không gian đã được sử dụng bởi các file.

Mounted on Hệ thống file được gắn kết trên cái gì.

Bạn có thể sử dụng chức năng -h (viết tắt của human readable) để hiển thị output trong một định

dạng chỉ kích cỡ bằng lời chú giải theo cách dễ hiểu nhất.

Lệnh du trong Unix/Linux Lệnh du (viết tắt của disk usage) cho bạn khả năng để xác định các thư mục để chỉ sự sử dụng

không gian trên đĩa trên một thư mục cụ thể.

Lệnh này hữu ích nếu bạn muốn xác định phần không gian được sử dụng cho một thư mục cụ thể.

Lệnh sau sẽ hiển thị số khối mà mỗi thư mục chiếm dụng. Một khối đơn có thể là 512 byte hoặc 1

$du /etc

10 /etc/cron.d

126 /etc/default

6 /etc/dfs

kilo byte phụ thuộc vào hệ thống của bạn.

Page 129

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

...

$

$du -h /etc

5k /etc/cron.d

63k /etc/default

3k /etc/dfs

...

$

Chức năng -h tạo output để bạn dễ dàng hơn để nhận thức, lý giải.

Gắn kết (Mounting) hệ thống file trong Unix/Linux Một hệ thống file phải được gắn kết để có thể được sử dụng bởi hệ thống. Để quan sát cái gì hiện

$ mount

/dev/vzfs on / type reiserfs (rw,usrquota,grpquota)

proc on /proc type proc (rw,nodiratime)

devpts on /dev/pts type devpts (rw)

$

tại được gắn kết (có sẵn để sử dụng) trên hệ thống của bạn, sử dụng lệnh sau:

Thư mục /mnt, theo quy ước, là nơi những sự gắn kết tạm thời (như các đĩa CD-ROM, các đĩa

mềm…) được đặt tại đó. Nếu bạn cần để gắn kết một hệ thống file, bạn có thể sử dụng

mount -t file_system_type device_to_mount directory_to_mount_to

lệnh mount với cú pháp sau:

Ví dụ, nếu bạn muốn gắn kết một CD-ROM tới thư mục /mnt/cdrom, bạn có thể nhập từ bàn phím

$ mount -t iso9660 /dev/cdrom /mnt/cdrom

như sau:

Điều này giả sử rằng thiết bị CD-ROM của bạn được gọi /dev/cdrom và bạn muốn kết nối nó tới

/mnt/cdrom. Bạn tham khảo Man Page để có thông tin cụ thể hơn hoặc gõ mount -h từ dòng lệnh

cho các thông tin giúp đỡ.

Page 130

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Sau khi gắn kết, bạn có thể sử dụng lệnh cd để điều hướng hệ thống file có mới nhất thông qua

điểm kết nối mà bạn vừa mới tạo ra.

Bỏ gắn kết (unmounting) hệ thống file trong Unix/Linux Để bỏ gắn kết hệ thống file từ hệ thống của bạn, sử dụng lệnh unmount bằng xác định điểm kết

nối hoặc thiết bị.

$ umount /dev/cdrom

Ví dụ, để gỡ bỏ cdrom, sử dụng lệnh sau:

Lệnh mount cho bạn khả năng để truy cập vào hệ thống file, nhưng trên các hệ thống Unix hiện đại

nhất, chức năng tự động kết nối thực hiện ngầm tiến trình này cho người sử dụng và không yêu

cầu sự can thiệp nào.

Các hạn ngạch (quotas) người dùng và nhóm trong Unix/Linux Các hạn ngạch người dùng và nhóm cung cấp các kỹ thuật mà bởi nó lượng không gian được sử

dụng bởi một người dùng đơn hoặc tất cả người dùng trong một nhóm cụ thể có thể được giới hạn

được xác định bởi người quản lý.

Các hạn ngạch hoạt động thông qua 2 sự giới hạn mà cho phép người dùng thực hiện một số hành

động trong lượng không gian hoặc số lượng khối của đĩa mà người quản lý đã xác định giới hạn

 Giới hạn mềm (Soft Limit): Nếu người dùng sử dụng vượt quá lượng giới hạn, yêu cầu

cho trước đó.

 Giới hạn cứng (Hard Limit): Khi người dùng sử dụng chạm tới mốc giới hạn, yêu cầu

thêm phần không gian để sử dụng, sẽ được cấp thêm một số khối nữa.

thêm cho phần không gian để sử dụng nữa, sẽ không có khối nào được thêm.

Dưới đây là các lệnh mà được sử dụng để quản lý hạn ngạch:

Lệnh Miêu tả

quota Hiển thị cách sử dụng đĩa và giới hạn cho một người sử dụng trong nhóm.

Page 131

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Đây là bộ soạn hạn ngạch. Hạn ngạch người dùng hoặc nhóm có thể edquota được chỉnh sửa bằng cách sử dụng lệnh này.

Quét hệ thống file về cách sử dụng đĩa, tạo, kiểm tra và sửa chữa các file quotacheck hạn ngạch.

setquota Nó cũng là một lệnh trong bộ soạn hạn ngạch.

Điều này tuyên bố tới hệ thống mà hạn ngạch đĩa nên được cho phép bật quotaon trên một hoặc nhiều hệ thống file.

Điều này tuyên bố tới hệ thống mà hạn ngạch đĩa nên được cho phép tắt quotaoff trên một hoặc nhiều hệ thống file

In cách sử dụng của đĩa và các hạn ngạch cho hệ thống file đã được xác repquota định.

Bạn có thể sử dụng Trang trợ giúp (Manpage Help) để kiểm tra cú pháp đầy đủ cho mỗi lệnh

được đề cập ở trên đây.

Quản lý người dùng trong Unix

Có 3 kiểu tài khoản trên một hệ thống Unix:

1. Tài khoản gốc (Root account): Nó còn được gọi là superuser và sẽ có sự điều khiển

tuyệt đối tới hệ thống. Một superuser có thể chạy bất cứ lệnh nào mà không bị hạn chế.

Người sử dụng này có thể được ví như người quản lý hệ thống.

2. Các tài khoản hệ thống: Các tài khoản hệ thống được cần cho các hoạt động riêng trong

hệ thống như tài khoản mail và các tài khoản sshd. Những tài khoản này thường được cần

cho một số chức năng riêng trên hệ thống của bạn, và bất cứ sự chỉnh sửa nào tới chúng

có thể ảnh hưởng bất lợi tới hệ thống.

3. Các tài khoản người dùng cá nhân: Các tài khoản này cung cấp sự truy cập mang tính

tương tác tới hệ thống với người dùng và nhóm sử dụng và thường bị giới hạn truy cập vào

những file và thư mục có tính chất quan trọng.

Page 132

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Unix hỗ trợ một khái niệm là tài khoản nhóm Group Account mà tạo nhóm một số tài khoản một

cách logic. Mỗi tài khoản sẽ là một phần của bất cứ tài khoản nhóm nào. Nhóm trong Unix đóng vai

trò quan trọng trong việc thực hiện sự quản lý về tiến trình và cho phép tới file.

Quản lý người và nhóm sử dụng trong Unix/Linux Có 4 file chính quản lý người sử dụng:

1. /etc/passwd: Giữ tài khoản người dùng và thông tin mật khẩu. File này giữ các thông tin

quan trọng về các tài khoản trên hệ thống Unix.

2. /etc/shadow: Giữ mật khẩu được biên thành mật mã của tài khoản tương ứng. Không phải

tất cả các hệ thống đều hỗ trợ file này.

3. /etc/group: File này giữ thông tin nhóm cho mỗi tài khoản.

4. /etc/gshadow: File này giữ các thông tin tài khoản nhóm bảo mật.

Bạn có thể kiểm tra tất cả các file trên với lệnh cat.

Dưới đây là các lệnh có trong phần lớn các hệ thống Unix để tạo và quản lý các tài khoản cá nhân

và nhóm.

Lệnh Miêu tả

useradd Thêm các tài khoản cá nhân tới hệ thống.

usermod Chỉnh sửa các thuộc tính của tài khoản cá nhân.

userdel Xóa các tài khoản cá nhân từ hệ thống.

groupadd Thêm các tài khoản nhóm tới hệ thống.

groupmod Chỉnh sửa các thuộc tính của tài khoản nhóm.

groupdel Dỡ bỏ các tài khoản nhóm khỏi hệ thống.

Page 133

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Bạn có thể sử dụng các lệnh trong Trang trợ giúp (Manpage Help) để kiểm tra cú pháp đầy đủ

cho mỗi lệnh được đề cập ở trên.

Tạo một nhóm trong Unix/Linux Bạn có thể sẽ cần tạo các nhóm trước khi tạo bất kỳ một tài khoản nào, nếu không thì bạn phải sử

dụng các nhóm đang tồn tại trên hệ thống của bạn. Bạn sẽ có tất cả các nhóm được liệt kê trong

tệp /etc/groups.

Tất cả các nhóm mặc định sẽ là các nhóm tài khoản cụ thể trên hệ thống và nó không được đề

nghị để sử dụng chúng cho các tài khoản thông thường. Vì thế, dưới đây là cú pháp để tạo một

groupadd [-g gid [-o]] [-r] [-f] groupname

nhóm tài khoản mới.

Bảng dưới liệt kê chi tiết các tham số:

Tùy chọn Miêu tả

-g GID Giá trị số của ID nhóm.

-o Tùy chọn này cho phép để thêm nhóm với GID không duy nhất.

-r Dấu hiệu này chỉ thị sự thêm nhóm tới tài khoản hệ thống.

Tùy chọn này khiến cho nó chỉ thoát ra với trạng thái thành công nếu nhóm

-f đã xác định đã tồn tại. Với –g, nếu GID đã tồn tại, thì GID khác (duy nhất)

được chọn.

groupname Tên nhóm thực sự được tạo.

Nếu bạn không xác định bất cứ tham số nào thì hệ thống sẽ sử dụng các giá trị mặc định.

Ví dụ sau sẽ tạo một nhóm developers với các giá trị mặc định, mà được chấp thuận bởi hầu hết

$ groupadd developers

các nhà quản lý.

Page 134

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Chỉnh sửa một nhóm trong Unix/Linux Để chỉnh sửa một nhóm, sử dụng cú pháp lệnh groupmod:

$ groupmod -n new_modified_group_name old_group_name

$ groupmod -n developer developer_2

Để thay đổi tên nhóm developers_2 thành deverloper, bạn gõ như sau:

$ groupmod -g 545 developer

Dưới đây là cách thay đổi GID thành 545:

Xóa một nhóm trong Unix/Linux Để xóa một nhóm đang tồn tại, tất cả thứ bạn cần làm là lệnh groupdel và tên nhóm đó. Để xóa

$ groupdel developer

nhóm developer, lệnh là:

Lệnh này chỉ gỡ bỏ nhóm, không phải bất kỳ file nào liên quan tới nhóm. Các file là vẫn có thể truy

cập được bởi người sở hữu của nó.

Tạo một tài khoản cá nhân trong Unix/Linux Hãy cùng chúng tôi xem cách tạo một tài khoản cá nhân mới trên hệ thống Unix của bạn. Dưới đây

useradd -d homedir -g groupname -m -s shell -u userid accountname

là cú pháp để tạo một tài khoản cá nhân:

Bảng dưới liệt kê chi tiết các tham số:

Tùy chọn Miêu tả

-d homedir Xác định thư mục chính cho tài khoản.

-g groupname Xác định một tài khoản nhóm cho tài khoản cá nhân này.

-m Tạo thư mục chính nếu nó không tồn tại.

Page 135

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

-s shell Xác định shell mặc định cho tài khoản cá nhân này.

-u userid Bạn có thể xác định ID cá nhân cho tài khoản này.

accountname Tên tài khoản cá nhân thực sự được tạo ra.

Nếu bạn không xác định bất kỳ tham số nào thì hệ thống sẽ sử dụng các giá trị mặc định. Lệnh

useradd chỉnh sửa các tệp /etc/passwd, /etc/shadow, /etc/group và tạo một thư mục chính.

Dưới đây là ví dụ mà sẽ tạo một tài khoản mcmohd thiết lập thư mục chính của nó tới

/home/mcmohd và nhóm là developers. Người sử dụng này là Kenny Chính mà được chỉ định cho

$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd

nó.

Trước khi thông báo lệnh trên, bảo đảm rằng bạn đã có nhóm developers được tạo bằng

lệnh groupadd.

Khi một tài khoản cá nhân được tạo, bạn có thể thiết lập mật khẩu cho nó bằng cách sử dụng

$ passwd mcmohd20

Changing password for user mcmohd20.

New UNIX password:

Retype new UNIX password:

passwd: all authentication tokens updated successfully.

lệnh passwd như sau:

Khi bạn gõ passwd accountname, nó cung cấp cho bạn tùy chọn để thay đổi mật khẩu được cung

cấp nếu bạn là superuser, nếu không thì bạn chỉ có thể thay đổi mật khẩu sử dụng lệnh tương tự

nhưng không xác định tên tài khoản của bạn.

Chỉnh sửa một tài khoản Lệnh usermod cho bạn khả năng để tạo các thay đổi tới một tài khoản cá nhân đang tồn tại từ

dòng lệnh. Nó sử dụng các đối số như lệnh useradd, cộng với đối số -l, mà cho phép bạn thay đổi

tên tài khoản.

Page 136

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Ví dụ, để thay đổi tên tài khoản cá nhân mcmohd thành mcmohd20 và thay đổi thư mục chính, bạn

$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20

sẽ cần thông báo lệnh sau:

Xóa một tài khoản trong Unix/Linux Lệnh userdel có thể được sử dụng để xóa một tài khoản cá nhân đang tồn tại. Lệnh này là rất

nguy hiểm nếu không được sử dụng với sự cẩn trọng.

Chỉ có một đối số hoặc một tùy chọn có sẵn cho lệnh: .r, để gỡ bỏ thư mục chính và mail của tài

khoản.

$ userdel -r mcmohd20

Ví dụ, để gỡ bỏ tài khoản mcmohd20, bạn cần thông báo lệnh sau:

Nếu bạn muốn giữ thư mục chính cho các mục sau, bạn không sử dụng tùy chọn .r. Bạn có thể gỡ

bỏ thư mục chính vào lần sau.

Hiệu năng hệ thống trong Unix

Mục đích của chương hướng dẫn này là giới thiệu phân tích hiệu năng bằng các công cụ có sẵn để

giám sát và quản lý hiệu năng trên các hệ thống Unix, và để cung cấp một nguyên tắc chỉ đạo

chung về cách để phát hiện và sửa các vấn đề về hiệu năng trong môi trường Unix.

 CPU

 Bộ nhớ

 Không gian đĩa

 Các dây dẫn giao tiếp

Unix có các kiểu nguồn chính sau mà cần được giám sát kiểm tra và được bật lên:

 Thời gian mạng

 Các chương trình ứng dụng

I/O Time

Page 137

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Các thành phần hiệu năng trong Unix/Linux Dưới đây liệt kê 5 thành phần chính:

Thành phần Miêu tả

Lượng thời gian thực tế mà CPU dành để chạy chương trình của người sử Trạng thái CPU dụng trong trạng thái người dùng. Nó bao gồm thời gian dành để chạy các người sử dụng triệu hồi thư viện, nhưng không bao gồm thời gian dành trong Kernel.

Lượng thời gian mà CPU dành cho chương trình này trong trạng thái hệ

Trạng thái CPU thống. Tất cả chương trình I/O yêu cầu các sự phục vụ Kernel. Người viết

hệ thống chương trình có thể ảnh hưởng giá trị này bằng cách sử dụng khóa kết nối

I/O.

Thời gian I/O

và mạng hệ Lượng thời gian dành cho di chuyển dữ liệu và phục vụ các yêu cầu I/O.

thống

Hiệu năng bộ Nó bao gồm sự chuyển mạch và trao đổi bối cảnh. nhớ ảo

Chương trình Thời gian dành cho chạy các chương trình khác – khi hệ thống không phục

ứng dụng vụ ứng dụng này bởi vì ứng dụng khác hiện tại đang có trong CPU.

Các công cụ hiệu năng trong Unix/Linux Unix cung cấp các công cụ quan trọng để đo lường và tinh chỉnh hiệu năng hệ thống:

Lệnh Miêu tả

nice/renice Chạy một chương trình với quyên ưu tiên được sửa đổi trước.

In các kết nối mạng hệ thống, bảng định tuyến, các thống kê giao diện, netstat các kết nối ẩn danh và các thành viên multicast.

Page 138

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

time Lượng thời gian một lệnh đơn hoặc cung cấp cách sử dụng nguồn.

uptime Trung bình tải hệ thống (SLA – System Load Average)

ps Báo cáo một ảnh chụp nhanh (snapshot) của các tiến trình hiện tại.

vmstat Báo cáo các thống kê về bộ nhớ ảo.

gprof Hiển thị gọi đồ thị dữ liệu profile.

Tiến trình profile prof

Hiển thị các nhiệm vụ của hệ thống. top

Bạn có thể truy cập vào Trang trợ giúp (Manpage Help) để kiểm tra cú pháp đầy đủ cho mỗi lệnh

được đề cập ở đây.

Hệ thống ghi log trong Unix

Các hệ thống Unix có hệ thống ghi log rất mạnh và linh động, mà cho bạn khả năng để ghi lại hầu

hết mọi thứ bạn có thể tưởng tượng và sau đó thao tác sự ghi log này để truy xét thông tin bạn yêu

cầu.

Rất nhiều phiên bản của Unix cung cấp một phương tiện dễ dàng ghi log với mục đích chung gọi là

syslog. Mỗi chương trình cần thông tin ghi log được gửi tới syslog.

syslog trong Unix là một host có thể định hình, là phương tiện ghi log hệ thống đồng dạng. Hệ

thống sử dụng một tiến trình ghi log hệ thống trung tâm mà chạy chương

trình/etc/syslogd hoặc /etc/syslog.

Hoạt động của hệ thống ghi log là không phức tạp. Các chương trình gửi cửa vào ghi log

tớisyslogd, mà tham vấn từ file định cấu hình /etc/syslogd.conf hoặc /etc/syslog và khi một kết nối

được tìm thấy, nó viết thông tin ghi log tới file ghi log đã yêu cầu.

Bảng dưới liệt kê 4 mục syslog cơ bản mà bạn nên hiểu:

Page 139

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Mục Miêu tả

Facility Dấu hiệu nhận diện được sử dụng để miêu tả ứng dụng hoặc tiến trình mà đệ

(phương tiện) trình tới thông báo log. Các ví dụ là mail, kernel, và ftp.

Priority (quyền Một chỉ dẫn quan trọng của thông báo. Các mức được xác định trong syslog

ưu tiên) như một guideline, từ việc chỉnh lỗi thông tin tới các sự kiện quan trọng.

Selector (bộ Một sự kết nối của một hoặc nhiều phương tiện và mức độ. Khi một sự kiện

chọn) mới đến kết nối với một bộ chọn, một hành động được thực hiện.

Điều gì xảy ra khi một thông tin mới đến kết nối với một bộ chọn. Các hành

Action (hành động có thể viết thông tin tới file ghi log, phản xạ thông tin tới một bàn điều

động) khiển hoặc thiết bị khác, viết thông báo tới hệ thống ghi log của người sử dụng

hoặc gửi thông báo cùng với máy chủ syslog khác.

Các phương tiện syslog trong Unix/Linux Dưới đây là các phương tiện có sẵn cho bộ chọn. Không phải tất cả các phương tiện có mặt trên

tất cả các phiên bản của Unix.

Facility Miêu tả

Các hoạt động liên quan đến yêu cầu tên và mật khẩu (getty, su, auth login)

Tương tự như auth nhưng ghi log tới một file mà chỉ có thể được authpriv đọc bởi những người dùng được chọn.

Sử dụng để bắt các thông báo mà thường trực tiếp gửi tới bàn điều console khiển hệ thống.

cron Các thông báo từ người lập hệ thống cron.

daemon Hệ thống daemon nhận tất cả.

Page 140

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

ftp Các thông báo liên quan đến hệ thống ftp deamon.

kern Các thông báo kernel.

local0.local7 Các phương tiện nội bộ được xác định cho mỗi site.

lpr Các thông báo từ dòng hệ thống in.

mail Các thông báo liên quan tới hệ thống mail.

Các sự kiện giả được sử dụng để tạo timestamp trong các file hệ mark thống.

Các thông báo liên quan tới mạng lưới giao thức tin tức (network news news protocol)

ntp Các thông báo liên quan đến giao thức thời gian mạng.

user Các tiến trình người dùng thông thường.

uucp Hệ thống phụ UUCP.

Các quyền ưu tiên syslog trong Unix/Linux Các quyền ưu tiên syslog được tổng hợp ở dưới bảng sau:

Quyền ưu tiên Miêu tả

Tình trạng khẩn cấp, như một sự ngưng hoạt động hệ thống sắp xảy ra, emerg thường được thông báo tới tất cả người dùng.

Tình trạng mà nên được chỉnh lại cho đúng ngay lập tức, như một dữ alert liệu hệ thống bị hư hỏng.

crit Tình trạng nghiêm trọng, như lỗi phần cứng.

Page 141

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

err Các lỗi thông thường.

warning Cảnh báo.

Tình trạng mà không là lỗi, nhưng có lẽ nên được thực hiện theo một notice cách đặc biệt.

info Thông báo mang tính thông tin.

debug Các thông báo mà được sử dụng khi chỉnh lỗi các chương trình.

none Các mức giả tạo được sử dụng để xác định không log các thông báo.

Sự kết nối của các phương tiện và các mức cho bạn khả năng để thấy rõ về những gì được ghi log

và nơi mà các thông tin bắt nguồn.

Khi mỗi chương trình gửi các thông báo của nó một cách nghiêm túc tới hệ thống ghi log, trình ghi

log tạo các quyết định về những gì để theo dõi nó và những gì để loại bỏ nó ở các mức được xác

định trong bộ chọn.

Khi bạn xác định một mức, hệ thống sẽ theo dõi mọi thứ tại mức đó và cao hơn.

Tệp /etc/syslog.conf trong Unix/Linux Tệp này điều khiển nơi các thông báo được log. Một tệp syslog.conf đặc trưng có thể trông giống

*.err;kern.debug;auth.notice /dev/console

daemon,auth.notice /var/log/messages

lpr.info /var/log/lpr.log

mail.* /var/log/mail.log

ftp.* /var/log/ftp.log

auth.* @prep.ai.mit.edu

auth.* root,amrood

netinfo.err /var/log/netinfo.log

install.* /var/log/install.log

*.emerg *

như thế này:

Page 142

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

*.alert |program_name

mark.* /dev/console

 Một bộ chọn thông báo mà xác định loại thông báo để log. Ví dụ, tất cả các thông báo lỗi

Mỗi dòng của file chứa hai phần:

 Một trường hành động mà nói những gì nên được làm với thông báo đó. Ví dụ, đặt nó trong

hoặc tất cả các thông báo chỉnh lỗi từ kernel.

một file hoặc gửi thông báo tới terminal của một người dùng.

 Các bộ chọn thông báo gồm hai phần: một phương thức và một quyền ưu tiên. Ví

Dưới đây là các điểm đáng chú ý cho sự định cấu hình trên:

dụ, kern.debug chọn tất cả các thông báo debug (có Priority) được tạo bởi kernel (có

 Bộ chọn thông báo kern.debug chọn tất cả các quyền ưu tiên mà ưu tiên hơn chỉnh lỗi.

 Một dấu sao * trong vị trí hoặc của phương thức hoặc quyền ưu tiên ám chỉ rằng “tất cả”. Ví

Facility).

dụ, *.debug nghĩa là tất cả các thông báo chỉnh lỗi, trong khi kern.* nghĩa là tất cả các thông

 Bạn cũng có thể sự dụng các dấu phảy để xác định nhiều phương thức. Hai hoặc nhiều bộ

báo được tạo ra bởi kernel.

chọn có thể được nhóm lại với nhau bằng cách sử dụng một dấu chấm phảy (;).

Các hành động ghi log trong Unix/Linux Trường hành động xác định một trong 5 hành động sau:

1. Thông tin ghi log tới một file hoặc một thiết bị. Ví dụ, /var/log/lpr.log hoặc /dev/console.

2. Gửi một thông báo tới một người sử dụng. Bạn có thể xác định nhiều tên sử dụng bằng việc

ngăn cách chúng bởi dấu phảy (ví dụ root, amrood).

3. Gửi một thông báo tới tất cả người dùng. Trong trường hợp này, trường hành động bao

gồm một dấu *.

4. Gửi một thông báo thông qua pipe tới một chương trình. Trong trường hợp này, chương

trình được xác định sau ký hiệu pipe (|).

Page 143

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

5. Gửi thông báo tới syslog trên một host khác. Trong trường hợp này, trường hành động bao

gồm một tên host, được đặt trước bởi một dấu hiệu (ví dụ: @tutorialspoint.com)

Lệnh logger trong Unix/Linux Unix cung cấp lệnh logger, mà là một lệnh thực sự hữu ích để giải quyết hệ thống ghi log. Lệnh

logger gửi các thông báo ghi log tới syslogd deamon, và do đó kích thích hệ thống ghi log.

Điều này có nghĩa là chúng ta có thể kiểm tra từ dòng lệnh tại bất cứ thời gian nào.

Lệnhlogger cung cấp một phương thức để thêm cổng vào một dòng tới hệ thống ghi log file từ

dòng lệnh.

logger [-i] [-f file] [-p priority] [-t tag] [message]...

Định dạng của lệnh là:

Dưới đây là chi tiết về các tham số.

Chức năng Miêu tả

-f filename Sử dụng nội dung của tên file như thông báo để log.

-i log ID tiến trình của tiến trình logger với mỗi dòng.

Nhập thông báo với quyền ưu tiên được xác định (lối vào bộ chọn được xác

-p priority định); quyền ưu tiên thông báo có thể được xác định ở dạng số hoặc như là cặp

phương thức.quyền ưu tiên. Quyền ưu tiên mặc định là user.notice.

-t tag Đánh dấu mỗi dòng được thêm tới hệ thống log với thẻ đã xác định.

Các tham số chuỗi mà nội dung được kết nối cùng nhau theo thứ tự xác định, message riêng rẽ bởi khoảng trống.

Bạn có thể sử dụng trang Trang trợ giúp (Manpage Help) để kiểm tra cú pháp của các lệnh này.

Sự luân phiên log trong Unix/Linux

Page 144

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Các log file có thiên hướng tăng lên rất nhanh và chiếm một khoảng lớn của không gian đĩa. Để

cho phép khả năng luân phiên log, hầu hết phiên bản sử dụng các công cụ

nhưnewsyslog hoặc logrotate.

Những công cụ này nên được gọi trên một khoảng không gian thường xuyên bằng cách sử dụng

cron deamon. Bạn truy cập vào chương Trang trợ giúp (Manpage Help) để biết thêm chi tiết về

newsyslog hoặc logrotate.

Các vị trí log quan trọng trong Unix/Linux Tất cả ứng dụng hệ thống tạo các tệp log trong /var/log và các thưc mục phụ của nó. Dưới đây là

một số ứng dụng quan trọng và các thư mục log tương ứng của chúng.

Ứng dụng Thư mục

httpd /var/log/httpd

samba /var/log/samba

cron /var/log/

mail /var/log/

mysql /var/log/

Signal và Trap trong Unix/Linux

Signals là các tín hiệu ngắt phần mềm được gửi tới một chương trình báo rằng có một sự kiện

nghiêm trọng đã xảy ra. Các sự kiện này có thể rất đa dạng từ các yêu cầu người sử dụng truy cập

vào bộ nhớ bất hợp pháp. Một vài signal, như signal ngắt, chỉ rằng một người sử dụng đã đòi hỏi

chương trình làm cái gì đó mà không trong sự kiểm soát.

Bảng dưới đây liệt kê các signal thông thường mà bạn có thể bắt gặp hoặc muốn sử dụng nó trong

các chương trình của bạn:

Số Tên signal Miêu tả hiệu

Page 145

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

signal

Trì hoãn việc kiểm tra trên quản lý terminal hoặc sự dừng của quản lý 1 SIGHUP tiến trình.

2 SIGINT Được thông báo nếu người sử dụng gửi một tín hiệu ngắt (Ctrl+C).

3 SIGQUIT Được thông báo nếu người sử dụng gửi một tín hiệu bỏ (Ctrl+D).

Được thông báo nếu một hoạt động thuộc về toán không hợp pháp 8 SIGFPE được thử chạy.

Nếu một tiến trình nhận signal này, nó phải thoát ra ngay lập tức và SIGKILL 9 sẽ không thực hiện các hoạt động làm sạch.

SIGALRM 14 Tín hiệu báo số lần thực hiện (Alarm Clock).

SIGTERM 15 Tín hiệu kết thúc phần mềm (được gửi bởi sigkill theo mặc định).

Danh sách các signal trong Unix/Linux Có một cách dễ dàng để liệt kê tất cả các signal được hỗ trợ bởi hệ thống của bạn. Chỉ cần thông

$ kill -l

1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL

5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE

9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2

13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT

17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP

21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU

25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH

29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN

35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4

39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8

43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12

báo lệnh kill -l và nó sẽ hiển thị tất cả các signal được hỗ trợ.

Page 146

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14

51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10

55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6

59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2

63) SIGRTMAX-1 64) SIGRTMAX

Danh sách thực tế trên của signal là đa dạng và khác nhau giữa Solaris, HP-UX và Linux.

Các hoạt động mặc định trong Unix/Linux Mỗi signal có một hoạt động mặc định liên kết với nó. Hoạt động mặc định với một signal là hoạt

động mà một script hoặc một chương trình thực hiện khi nó nhận được một signal.

 Kết thúc tiến trình

 Bỏ qua signal

 Kết xuất lõi nhớ. Nó tạo một file gọi là core (lõi) chứa hình ảnh bộ nhớ của tiến trình khi nó

Một trong số các hoạt động mặc định có thể là:

 Dừng tiến trình

 Tiếp tục tiến trình bị dừng

nhận được signal

Gửi các signal trong Unix/Linux Có một vài phương thức trong việc gửi các signal tới một chương trình hoặc một script. Một trong

những phương thức phổ biến nhất là cho người sử dụng gõ phím Ctrl +C hoặc phím dừng trong

khi một script đang chạy.

Khi bạn nhấn phím Ctrl+C, một SIGINT được gửi tới script và khi mỗi hành động mặc định đã xác

định sẽ kết thúc script.

$ kill -signal pid

Phương thức phổ biến khác để gửi signal là sử dụng lệnh kill mà có cú pháp như sau:

Ở đây, signal là hoặc số hoặc tên của signal để gửi và pid là ID tiến trình mà signal nên được gửi

tới. Ví dụ:

Page 147

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

$ kill -1 1001

Gửi HUP hoặc signal dừng tới một chương trình mà đang chạy với ID tiến trình là 1001. Để gửi

$ kill -9 1001

một kill signal tới tiến trình giống như vậy, bạn sử dụng lệnh sau:

Nó sẽ hủy tiến trình đang chạy có ID tiến trình 1001.

Trap signal trong Unix/Linux Khi bạn nhấn phím Ctrl+C hoặc phím dừng tại terminal của bạn trong suốt quá trình chạy một

chương trình shell, thông thường thì chương trình đó bị ngay lập tức kết thúc, và dòng nhắc lệnh

xuất hiện trở lại. Việc này có thể sẽ không luôn luôn làm bạn thích thú. Ví dụ, bạn có thể sẽ để lại

hàng loạt các tập tin tạm thời mà không được dọn sạch.

$ trap commands signals

Trap signal là khá dễ dàng, và lệnh trap có cú pháp như sau:

Ở đây, command có thể là bất cứ lệnh Unix có hiệu lực nào, hoặc ngay cả là một chức năng đã

định nghĩa của người sử dụng, và signal có thể là danh sách các signal mà bạn muốn trap.

Có 3 cách sử dụng phổ biến để trap trong shell script:

1. Dọn sạch các file tạm thời

2. Bỏ qua các signal

Dọn sạch các file tạm thời trong Unix/Linux Như một ví dụ của lệnh trap, dưới đây chỉ cách bạn có thể gỡ bỏ một vài file và sau đó thoát khỏi

$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2

nếu ai đó cố gắng bỏ dở chương trình từ terminal.

Từ điểm trong chương trình shell mà trap này được thực thi, hai tệp work1$$ và dataout$$sẽ tự

động bị dỡ bỏ nếu signal số 2 được nhận bởi chương trình.

Vì thế nếu người sử dụng ngắt việc thi hành của chương trình thì sau đó trap này được chạy, bạn

có thể được đảm bảo chắc chắn rằng hai file này sẽ được dọn sạch sẽ. Lệnh exit mà theo sau

Page 148

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

bởi rm là cần thiết bởi vì không có nó thì chương trình sẽ tiếp tục chạy tại điểm mà nó dừng lại khi

signal được nhận.

Signal số 1 được tạo để trì hoãn: hoặc ai đó cố tình treo dòng hoặc dòng một cách ngẫu nhiên bị

ngắt kết nối.

Bạn có thể chỉnh sửa trap trước để cũng gỡ bỏ hai file đã xác định trong trường hợp này bằng

$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2

cách thêm signal số 1 tới danh sách các signal.

Bây giờ những file này sẽ bị gỡ bỏ nếu dòng bị treo hoặc nếu phím Ctrl+C được nhấn.

Lệnh được xác định để trap phải được bao quanh trong trích dẫn nếu chúng chứa nhiều hơn một

lệnh. Bạn cũng lưu ý rằng shell quét dòng lệnh tại thời điểm mà lệnh trap được chạy và cũng thưc

hiện quét lần nữa khi một trong các signal được liệt kê được nhận.

Vì thế trong ví dụ trước, giá trị của WORKDIR và $$ sẽ được thay đổi tại thời gian mà lệnh trap

được chạy. Nếu bạn muốn sự thay đổi này xảy ra tại thời điểm mà hoặc signal số 1 hoặc số 2

$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2

được nhận, bạn có thể đặt các lệnh bên trong trích dẫn đơn như sau:

Bỏ qua các signal trong Unix/Linux Nếu lệnh được liệt kê cho trap là null, thì signal được xác định sẽ bị bỏ qua khi được nhận. Ví dụ,

$ trap '' 2

lệnh sau:

Xác định rằng signal ngắt bị bỏ qua. Bạn có thể muốn bỏ qua các signal cụ thể nào đó khi thực

hiện một số hoạt động mà mà không muốn bị ngắt. Bạn có thể xác định nhiều signal bị bỏ qua như

$ trap '' 1 2 3 15

sau:

Ghi nhớ rằng đối số thứ nhất phải được xác định cho một signal để bị bỏ qua và cách trên là không

$ trap 2

cân bằng với cách viết sau, mà cách viết sau này có ý nghĩa riêng của nó:

Page 149

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Nếu bạn bỏ qua một signal, tất cả các shell phụ cũng bỏ qua signal đó. Tuy nhiên, nếu bạn xác

định một hành động được thực hiện khi nhận được signal thì tất cả các shell phụ cũng sẽ vẫn thực

hiện hành động đó khi nhận được signal đó.

Thiết lập lại trap trong Unix/Linux Sau khi bạn đã thay đổi các hành động mặc định khi nhận được một signal, bạn có thể thay đổi trở

$ trap 1 2

lại lần nữa với trap, nếu bạn đơn giản bỏ qua đối số đầu tiên như sau:

Nó thiết lập lại hành động được thực hiện khi nhận được signal số 1 hoặc 2 trở lại dạng mặc định.

Các lệnh hữu ích trong Unix

Chương này liệt kê danh sách các lệnh, bao gồm cú pháp và các miêu tả ngắn gọn. Để có thêm

$man command

nhiều chi tiết về các lệnh này, bạn sử dụng:

Các file và thư mục trong Unix/Linux Các lệnh này cho phép bạn tạo các thư mục và điều khiển các file.

Lệnh Miêu tả

cat Hiển thị nội dung file

cd Thay đổi thư mục tới dirname

chgrp Thay đổi nhóm file

chmod Thay đổi sự cho phép

cp Sao chép file nguồn vào trong nơi đến

file Xác định kiểu file

Page 150

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

find Tìm kiếm các file

grep Tìm file với biểu thức quy chuẩn

head Hiển thị một vài dòng đầu của file

ln Tạo một link mềm trên tên cũ

ls Hiển thị thông tin về kiểu file

mkdir Tạo một thư mục dirname mới

more Hiển thị dữ liệu trong mẫu được đánh số trang

mv Di chuyển (đặt lại tên) một tên file cũ thành một tên file mới

pwd In thư mục làm việc hiện tại

rm Gỡ bỏ (xóa) một file

rmdir Xóa một thư mục đang tồn tại

tail In một vài dòng cuối của thư mục

touch Cập nhật truy cập và thời gian chỉnh sửa của một file

Thao tác dữ liệu trong Unix/Linux Các nội dung của file có thể dược so sánh và thay đổi với các lệnh sau:

Lệnh Miêu tả

awk Quét mẫu và tiến trình ngôn ngữ

cmp So sánh nội dung của 2 file

Page 151

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

comm So sánh dữ liệu được phân loại

Cắt các trường được chọn trong mỗi dòng của một file cut

Bộ so sánh file vi sai diff

expand Mở rộng các tab

join Kết hợp file trên một số trường phổ biến

perl Ngôn ngữ thao tác dữ liệu

sed Bộ soạn luồng văn bản

sort Phân loại dữ liệu file

split Phân chia file thành các file nhỏ hơn

tr Biên dịch các ký tự

uniq Báo cáo các dòng được lặp trong một file

wc Tính toán số lượng từ, dòng, và ký tự

vi Mở bộ soạn văn bản vi

vim Mở bộ soạn văn bản vim

fmt Bộ định dạng văn bản đơn giản

spell Kiểm tra các lỗi chính tả văn bản

ispell Kiểm tra các lỗi chính tả văn bản

Page 152

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

ispell Kiểm tra các lỗi chính tả văn bản

emacs GNU dự án Emacs

ex, edit Bộ soạn dòng

emacs GNU dự án Emacs

emacs GNU dự án Emacs

Nén file trong Unix/Linux Các file có thể được nén để tiết kiệm không gian. Các file bị nén có thể được tạo và thực hành với

các lệnh dưới.

Lệnh Miêu tả

compress Nén các file

gunzip Bỏ nén các file

gzip Phương thức nén thay thế GNU

uncompress Bỏ nén các file

unzip Liệt kê, kiểm tra và giải nén các file bị nén trong tài liệu ZIP

zcat Nối và liên kết các file bị nén

zcmp So sánh các file bị nén

zdiff So sánh các file bị nén

zmore Lọc file để quan sát crt của các văn bản bị nén

Page 153

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp Nhận thông tin trong Unix/Linux Các tài liệu tra cứu và các sổ tay Unix đa dạng có sẵn trên mạng trực tuyến. Các lệnh shell sau sẽ

cung cấp thông tin cho bạn:

Lệnh Miêu tả

apropos Đặt vị trí các lệnh bằng từ khóa tra cứu.

info Hiển thị thông tin lệnh trên trang trực tuyến

man Hiển thị sổ tay các trang trực tuyến

whatis Tìm kiếm dữ liệu whatis cho các từ đầy đủ.

yelp Bộ thẩm tra sự giúp đỡ GNOME

Giao tiếp mạng hệ thống trong Unix/Linux Các lệnh sau được sử dụng để gửi và nhận các file từ một host nội bộ tới một host điều khiển từ xa

trên Thế giới.

Lệnh Miêu tả

ftp Chuyển file tới chương trình

rcp Điều khiển từ xa việc sao chép file

rlogin Đăng nhập từ xa tới một Unix host

rsh Điều khiển từ xa shell

tftp Chương trình truyền tải file thường

telnet Tạo kết nối terminal tới host khác

Page 154

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

ssh Bảo an shell terminal hoặc sự kết nối lệnh

scp Bảo an shell từ việc sao chép file từ xa

sftp Bảo an shell từ gửi file tới chương trình

Một trong số các lệnh trên có thể bị hạn chế tại máy tính của bạn vì các lý do bảo mật.

Các thông báo giữa các người sử dụng trong Unix/Linux Hệ thống Unix hỗ trợ các thông báo hiển thị trên màn hình tới người sử dụng khác và gửi mail tự

động trên toàn Thế giới.

Lệnh Miêu tả

evolution Công cụ điều khiển mail GNU trên Linux

mail Chương trình gửi và đọc mail đơn giản

mesg Cho phép hoặc từ chối nhận các thông báo

parcel Gửi các file tới người dùng khác

pine Tiện ích vdu-base mail

talk Nói chuyện với người sử dụng khác

write Viết thông báo tới người sử dụng khác

Các chương trình tiện ích trong Unix/Linux Bảng dưới là các công cụ và ngôn ngữ mà có sẵn dựa trên những gì bạn cài đặt trên hệ thống

Unix của bạn:

Lệnh Miêu tả

Page 155

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

dbx Chương trình chỉnh lỗi Sun

gdb Chương trình chỉnh lỗi GNU (GNU debugger)

make Duy trì các nhóm chương trình và các chương trình biên dịch

nm In danh sách tên chương trình

size In kích cỡ của chương trình

strip Dỡ bỏ bảng ký tự và đặt lại vị trí các bit

cb Bộ viết đúng (beautifier) chương trình C

cc Bộ biên dịch ANSI C cho các hệ thống Suns SPARC

ctrace Chương trình chỉnh lỗi C

gcc Bộ biên dịch GNU ANSI C

indent Sắp chữ thụt vào và định dạng của nguồn chương trình C

bc Bộ xử lý ngôn ngữ số học tương tác

gcl GNU Common Lisp

perl Ngôn ngữ mục đích chung

php Trang web ngôn ngữ được nhúng

py Bộ phiên dịch ngôn ngữ Python

asp Trang web ngôn ngữ được nhúng

Page 156

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Bộ biên dịch C++ cho các hệ thống Suns SPARC CC

Bộ biên dịch GNU C++ g++

Bộ biên dịch JAVA javac

appletvieweir Bộ thẩm tra vi mã JAVA

netbeans Tích hợp môi trường phát triển JAVA trên Linux

Chạy bộ phiên dịch Oracle SQL sqlplus

Chạy bộ tải dữ liệu Oracle SQL sqlldr

Chạy bộ phiên dịch mysql SQL mysql

Các lệnh hỗn hợp trong Unix/Linux Dưới đây là các lệnh và thông tin thay đổi về hệ thống:

Miêu tả Lệnh

Thay đổi thông tin lệnh finger của bạn chfn

Thay đổi sở hữu nhóm của một file chgrp

Thay đổi người sở hữu chown

In ngày date

determin Tự động tìm kiếm kiểu terminal

In dung lượng đĩa sử dụng du

Phản xạ các đối số tới các chức năng tiêu chuẩn echo

Page 157

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

exit Thoát khỏi hệ thống

finger In thông tin về những người sử dụng đã đăng nhập vào

groupadd Tạo một nhóm người sử dụng

groups Chỉ các thành viên của nhóm

homequota Chỉ hạn ngạch và dung lượng file sử dụng

iostat Báo cáo các thống kế I/O

kill Gửi một signal tới một chương trình

last Hiển thị các đăng nhập cuối của những người sử dụng

logout Thoát khỏi Unix

lun Liệt kê các tên người dùng hoặc ID đăng nhập

netstat Chỉ trạng thái của mạng hệ thống

passwd Thay đổi mật khẩu của người sử dụng cá nhân

passwd Thay đổi mật khẩu đăng nhập của bạn

printenv Hiển thị giá trị của một biến shell

ps Hiển thị trạng thái của các tiến trình hiện tại

ps In các thống kê trạng thái của tiến trình

quota -v Hiển thị dung lượng sử dụng đĩa và các giới hạn

Page 158

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

reset Thiết lập lại chế độ terminal

script Giữ scritp của khu vực terminal

script Lưu giữ kết quả đầu ra của một lệnh hoặc một tiến trình

setenv Thiết lập các biến môi trường

stty Thiết lập các chức năng terminal

time Thời gian của một lệnh

top Hiển thị tất cả các tiến trình hệ thống

tset Thiết lập chế độ terminal

tty In tên terminal hiện tại

Chỉ các sự cho phép mà được cung cấp để quan sát các file theo umask mặc định

uname Hiển thị tên của hệ thống hiện tại

uptime Nhận thời gian hoạt động của hệ thống

useradd Tạo một tài khoản sử dụng cá nhân

users In tên của những người sử dụng đã đăng nhập

vmstat Báo cáo các thống kê bộ nhớ thực

w Chỉ những gì mà người dùng đã đăng nhập đang thực hiện

who Liệt kê danh sách những người dùng đã đăng nhập

Page 159

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Hàm toán học có sẵn trong Shell

Hầu hết các phần của Bài hướng dẫn chủ yếu xây dựng trên Bourne Shell nhưng trang này liệt kê

tất cả các hàm toán học được xây dựng có sẵn trong Korn Shell.’

Korn Shell cung cấp sự truy cập tới bộ thiết lập tiêu chuẩn của các hàm toán học. Chúng được gọi

bằng cách sử dụng cú pháp gọi hàm C:

Hàm Miêu tả

abs Giá trị tuyệt đối

log Logarit tự nhiên

acos Hàm arcos

sin Hàm sin

asin Hàm arcsin

sinh Hàm sin hyperbolic

cos Hàm cos

sqrt Căn bậc hai

cosh Hàm cos hyperpolic

tan Hàm tan

exp Hàm mũ

tanh Hàm tan hyperpolic

int Phần nguyên

Page 160

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí

Copyright © vietjack.com

http://vietjack.com/unix/index.jsp

Tài liệu tham khảo Unix/Linux

Dưới đây là danh sách các nguồn hữu ích về Unix/Linux. Bạn nên tham khảo chúng để hiểu sâu

 Tutorialspoint − Loạt bài hướng dẫn của chúng tôi xây dựng dựa trên nguồn này.

 Bell Labs − Quá trình tạo Hệ điều hành UNIX. Cung cấp tổng quan và lịch sử của Hệ điều

hơn những chủ đề chúng tôi đã đề cập trong loạt bài này.

 BSD UNIX − FreeBSD là một Hệ điều hành UNIX bậc cao cho Server, desktop, và các

hành UNIX.

 Linux Online − Linux là một Hệ điều hành Unix-type miễn phí được tạo lần đầu bởi Linus

Platform hiện đại.

 Unix @ Wikipedia − Một miêu tả ngắn gọn về Hệ điều hành Unix.

 The Unix Forums − Một diễn đàn cho những người yêu Unix. Chia sẻ ý tưởng và suy nghĩ

Torvalds với sự hỗ trợ của các nhà lập trình trên toàn Thế giới.

của bạn với các Chuyên gia về Unix.

Page 161

http://vietjack.com/ Trang chia sẻ các bài học online miễn phí