Bài hướng dẫn về Unix/Linux
Tổng quan về Unix/Linux, quản lý File trong Unix, quản lý thư mục trong Unix, cài đặt môi trường Unix/Linux,... là những nội dung chính trong tài liệu "Bài hướng dẫn về Unix/Linux". Mời các bạn cùng tham khảo.
Tổng quan về Unix/Linux, quản lý File trong Unix, quản lý thư mục trong Unix, cài đặt môi trường Unix/Linux,... là những nội dung chính trong tài liệu "Bài hướng dẫn về Unix/Linux". Mời các bạn cùng tham khảo.
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
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.
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í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.
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.
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
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.
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.
login:
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:
$
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:
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
$
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.
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.
Cách đơn giản nhất là tìm kiếm “bạn là ai” là nhập lệnh whoami :
$ 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.
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.
không ai có thể truy cập vào các file của bạn khi họ giả trang bạn.
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.
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.
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.
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.
$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ê.
-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
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.
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:
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:
$ 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:
$ 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.
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.
$ 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:
$
$ 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:
$ 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.
$ 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.
$ 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:
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.
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.
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ó.
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:
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.
$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.
X11 bin gimp jikes sbin
ace doc include lib share
atalk etc info man ami
$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.
$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:
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.
$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 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:
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:
$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:
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 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):
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.
$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).
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:
file nào. Có một vài điểm khác nhau mà bạn cần chú ý:
thể xem tên các file bên trong một thư mục.
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.
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).
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:
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
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:
$ 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
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).
$ 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.
$ 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.
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.
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:
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.
$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.
được yêu cầu bởi tất cả người sử dụng trên hệ thống.
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.
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:
đượ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:
$hello
hello: not found
$
Các biến PS1 và PS2 được bàn luận trong mục kế tiếp.
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
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:
$ PS2="secondary prompt->"
$ echo "this is a
secondary prompt->test"
this is a
test
$
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.
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:
Đế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.
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.
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
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:
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:
$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.
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:
Ở đâ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.
$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.
$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ả
-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::
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:
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.
$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
-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:
$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.
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ố.
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:
-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.
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.
Foreground Process
Background Process
phím và gửi output tới màn hình.
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.
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.
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.
$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ó).
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
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:
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:
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.
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.
cập của root và các dịch vụ yêu cầu từ tiến trình khác.
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.
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:
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ẻ.
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.
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ì:
$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.
$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:
$
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ư:
$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.
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.
$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
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.
$
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.
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:
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:
$ 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:
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.
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.
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:
~
~
~
~
~
~
~
"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.
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.
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é.
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.
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.
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
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 đủ.
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.
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.
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.
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.
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.
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ỏ.
lại nhiều hiệu quả hơn trong việc sử dụng vi:
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 đó.
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.
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.) $
[ 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ự.
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.
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.
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.
: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.
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).
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ó.
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.
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:
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.
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.
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ụ:
#!/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:
#!/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
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:
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.
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.
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ụ:
VAR2=100
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:
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, 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:
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 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ộ.
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.
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.
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:
#!/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:
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 $@.
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 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:
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.
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:
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à:
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:
$ {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:
ó 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:
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.
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
`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ả
là
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
[ $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.
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 -
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á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 ]
là
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 ]
là
false.
Giả sử biến a giữ giá trị “abc” và biến b giữ giá trị “efg”:
Ví dụ
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.
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ụ
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 ]
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
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
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:
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.
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.
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 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.
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.
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
#!/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.
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
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
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.
#!/bin/sh
a=10
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.
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.
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ừ đó:
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a
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.
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.
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.
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ừ đó.
#!/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
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:
#!/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:
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.
sau đó thay thế vị trí kết quả của các lệnh.
`command`
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à “”.
#!/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:
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.
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.
#!/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:
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
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 \.
#!/bin/sh
echo Hello; Word
Hello
./test.sh: line 2: Word: command not found
Nó sẽ tạo ra kết quả sau:
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
`
\$
\'
\"
\\
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:
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
$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:
var=`command`
DATE=`date`
echo "Current Date: $DATE"
Current Date: Thu Jul 2 05:28:45 MST 2009
Nó tạo ra kết quả là:
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.
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:
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:
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:
$ 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.
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.
$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. 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. 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: 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 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. 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 ({}). #!/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: 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. #!/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: 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. #!/bin/sh # Define your function here 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: 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. 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: 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. 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. 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. $man command làm việc với hệ thống này. $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: 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 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. 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 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. Ở đâ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. 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ó. /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ả 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. $ 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. 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: 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. $ 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. 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: 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ế. $ 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ó 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. 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: $ 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. $ cat /etc/passwd | sed 's/root//g' :x:0:0::/:/bin/sh daemon:x:1:1:daemon:/usr/sbin:/bin/sh $ 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: 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. $ 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 độ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: 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ự. siêu ký tự. Ví dụ, các mẫu sau: Expression Miêu tả 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. 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:]] 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] [[:xdigit:]] Các ký số thập lục phân [0-9 a-f A-F] 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. $ 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: $ 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. 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: 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. 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, …. 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. 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. /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. 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. 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. $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: 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. 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. ... $ $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. $ 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 đỡ. 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. 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. 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. Đâ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. 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. 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. 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. 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. 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ý. $ 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: $ 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ó. 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. -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. 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. 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: 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. 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 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. 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. 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. 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: 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. 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ả. 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. 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. 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. *.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: *.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 (;). 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 (|). 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) 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. 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. 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/ 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 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). $ 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ợ. 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. độ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 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ụ: $ 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. 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 $ 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 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: $ 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ó: 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 đó. $ 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. 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: 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 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 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 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 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 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 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 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 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. độ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 Unix của bạn: Lệnh Miêu tả 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 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 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 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 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 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 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 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
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
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
Các hàm Shell
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:
Ví dụ:
Sau đây là ví dụ đơn giản của việc sử dụng hàm:
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ố
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
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
Ví dụ:
Hàm dưới đây trả lại giá trị 1.
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
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
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
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 để
ManPage Help trong Unix
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
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
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
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 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
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
Regular Expression trong Unix
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
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
Cú pháp chung của sed trong Unix/Linux
Dưới đây là cú pháp chung cho sed:
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
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
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
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
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
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
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
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
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
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
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
Đổ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:
Đị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ư
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
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:
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
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
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
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
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à
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
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
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
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:
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
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
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
Cơ bản về hệ thống File trong Unix
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,
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
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
Đ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
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
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).
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
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
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
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
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
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
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ử
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
Quản lý người dùng trong Unix
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
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:
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
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ử
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:
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
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
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
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ừ
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
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
Hiệu năng hệ thống trong Unix
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:
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:
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
Hệ thống ghi log trong Unix
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
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
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
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:
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
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
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
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:
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
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
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 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à
Signal và Trap trong Unix/Linux
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
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
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
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
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
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
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
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
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ỏ 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ụ,
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
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ở
Các lệnh hữu ích trong Unix
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.
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
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:
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
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
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
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ẽ
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
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
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ự
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
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
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
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:
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
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
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
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
Page 161
http://vietjack.com/ Trang chia sẻ các bài học online miễn phí