Unix / Linux - Hướng dẫn nhanh
Unix là gì?
Hệ điều hành Unix là một tập hợp các chương trình hoạt động như một liên kết giữa máy tính và người dùng.
Các chương trình máy tính phân bổ tài nguyên hệ thống và điều phối tất cả các chi tiết bên trong của máy tính được gọi là operating system hoặc là kernel.
Người dùng giao tiếp với hạt nhân thông qua một chương trình được gọi là shell. Trình bao là một trình thông dịch dòng lệnh; nó dịch các lệnh được nhập bởi người dùng và chuyển đổi chúng thành một ngôn ngữ mà hạt nhân hiểu được.
Unix ban đầu được phát triển vào năm 1969 bởi một nhóm nhân viên AT&T Ken Thompson, Dennis Ritchie, Douglas McIlroy và Joe Ossanna tại Bell Labs.
Có nhiều biến thể Unix khác nhau có sẵn trên thị trường. Solaris Unix, AIX, HP Unix và BSD là một vài ví dụ. Linux cũng là một phiên bản Unix được cung cấp miễn phí.
Nhiều người có thể sử dụng máy tính Unix cùng một lúc; do đó Unix được gọi là hệ thống đa người dùng.
Một người dùng cũng có thể chạy nhiều chương trình cùng một lúc; do đó Unix là một môi trường đa nhiệm.
Kiến trúc Unix
Đây là sơ đồ khối cơ bản của hệ thống Unix -
Khái niệm chính hợp nhất tất cả các phiên bản Unix là bốn điều cơ bản sau:
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 các tác vụ như quản lý bộ nhớ, lập lịch tác vụ và quản lý tệp.
Shell- Trình bao là tiện ích xử lý các yêu cầu của bạn. Khi bạn nhập một lệnh tại thiết bị đầu cuối của mình, trình bao sẽ diễn giải lệnh đó và gọi chương trình bạn muốn. Shell sử dụng cú pháp tiêu chuẩn cho tất cả các lệnh. C Shell, Bourne Shell và Korn Shell là những loại shell nổi tiếng nhất có sẵn với hầu hết các biến thể Unix.
Commands and Utilities - Có nhiều lệnh và tiện ích khác nhau mà bạn có thể sử dụng trong các hoạt động hàng ngày của mình. cp, mv, cat và grep, v.v. là một vài ví dụ về các lệnh và tiện ích. Có hơn 250 lệnh tiêu chuẩn cùng với nhiều lệnh khác được cung cấp thông qua phần mềm của bên thứ 3 . Tất cả các lệnh đi kèm với các tùy chọn khác nhau.
Files and Directories- Tất cả dữ liệu của Unix được tổ chức thành các tệp. Tất cả các tệp sau đó được tổ chức thành các thư mục. Các thư mục này được tổ chức sâu hơn thành một cấu trúc giống cây gọi làfilesystem.
Khởi động hệ thống
Nếu bạn có một máy tính được cài đặt hệ điều hành Unix, thì bạn chỉ cần bật hệ thống để nó hoạt động.
Ngay sau khi bạn bật hệ thống, nó bắt đầu khởi động và cuối cùng nó sẽ nhắc bạn đăng nhập vào hệ thống, đây là một hoạt động để đăng nhập vào hệ thống và sử dụng nó cho các hoạt động hàng ngày của bạn.
Đăng nhập Unix
Khi bạn lần đầu tiên kết nối với hệ thống Unix, bạn thường thấy một lời nhắc như sau:
login:
Để đăng nhập
Chuẩn bị sẵn userid (nhận dạng người dùng) và mật khẩu của bạn. Liên hệ với quản trị viên hệ thống của bạn nếu bạn chưa có.
Nhập userrid của bạn tại lời nhắc đăng nhập, sau đó nhấn ENTER. Userid của bạn làcase-sensitive, vì vậy hãy đảm bảo bạn nhập chính xác như quản trị viên hệ thống của bạn đã hướng dẫn.
Nhập mật khẩu của bạn tại dấu nhắc mật khẩu, sau đó nhấn ENTER. Mật khẩu của bạn cũng phân biệt chữ hoa chữ thường.
Nếu bạn cung cấp sử dụng và mật khẩu chính xác thì bạn sẽ được phép truy cập vào hệ thống. Đọc thông tin và thông báo hiển thị trên màn hình, như sau.
login : amrood
amrood's password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$
Bạn sẽ được cung cấp một dấu nhắc lệnh (đôi khi được gọi là $nhắc) nơi bạn nhập tất cả các lệnh của mình. Ví dụ: để kiểm tra lịch, bạn cần nhậpcal lệnh như sau:
$ 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 $
Đổi mật khẩu
Tất cả các hệ thống Unix đều yêu cầu mật khẩu để giúp đảm bảo rằng các tệp và dữ liệu của bạn vẫn là của riêng bạn và bản thân hệ thống được bảo mật khỏi tin tặc và kẻ bẻ khóa. Sau đây là các bước để thay đổi mật khẩu của bạn -
Step 1 - Để bắt đầu, gõ mật khẩu tại dấu nhắc lệnh như hình dưới đây.
Step 2 - Nhập mật khẩu cũ của bạn, mật khẩu bạn hiện đang sử dụng.
Step 3- Nhập mật khẩu mới của bạn. Luôn giữ cho mật khẩu của bạn đủ phức tạp để không ai có thể đoán được. Nhưng hãy chắc chắn rằng, bạn nhớ nó.
Step 4 - Bạn phải xác minh mật khẩu bằng cách gõ lại.
$ passwd Changing password for amrood (current) Unix password:****** New UNIX password:******* Retype new UNIX password:******* passwd: all authentication tokens updated successfully $
Note- Chúng tôi đã thêm dấu hoa thị (*) ở đây chỉ để hiển thị vị trí mà bạn cần nhập mật khẩu hiện tại và mật khẩu mới vào hệ thống của bạn. Nó không hiển thị cho bạn bất kỳ ký tự nào khi bạn nhập.
Danh sách Thư mục và Tệp
Tất cả dữ liệu trong Unix được tổ chức thành các tệp. Tất cả các tệp được tổ chức thành các thư mục. Các thư mục này được tổ chức thành một cấu trúc dạng cây gọi là hệ thống tệp.
Bạn có thể dùng lslệnh liệt kê tất cả các tệp hoặc thư mục có sẵn trong một thư mục. Sau đây là ví dụ về việc sử dụngls ra lệnh với -l Lựa chọn.
$ 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 $
Ở đây các mục bắt đầu bằng d.....đại diện cho các thư mục. Ví dụ: uml, univ và urlspedia là các thư mục và phần còn lại của các mục nhập là các tệp.
Bạn là ai?
Trong khi đăng nhập vào hệ thống, bạn có thể sẵn sàng biết: Who am I?
Cách dễ nhất để tìm ra "bạn là ai" là nhập whoami lệnh -
$ whoami amrood $
Hãy thử nó trên hệ thống của bạn. Lệnh này liệt kê tên tài khoản được liên kết với thông tin đăng nhập hiện tại. Bạn co thể thửwho am i cũng như để lấy thông tin về bản thân.
Ai đã đăng nhập?
Đôi khi, bạn có thể muốn biết ai đang đăng nhập vào máy tính cùng một lúc.
Có ba lệnh có sẵn để cung cấp cho bạn thông tin này, dựa trên mức độ bạn muốn biết về những người dùng khác: users, whovà w.
$ 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)
$
Thử wlệnh trên hệ thống của bạn để kiểm tra đầu ra. Điều này liệt kê thông tin liên quan đến người dùng đã đăng nhập vào hệ thống.
Đăng xuất
Khi kết thúc phiên làm việc, bạn cần đăng xuất khỏi hệ thống. Điều này là để đảm bảo rằng không ai khác truy cập vào tệp của bạn.
To log out
Chỉ cần gõ logout lệnh tại dấu nhắc lệnh, và hệ thống sẽ dọn dẹp mọi thứ và ngắt kết nối.
Tắt hệ thống
Cách nhất quán nhất để tắt hệ thống Unix đúng cách thông qua dòng lệnh là sử dụng một trong các lệnh sau:
Sr.No. | Lệnh & Mô tả |
---|---|
1 | halt Đưa hệ thống xuống ngay lập tức |
2 | init 0 Cấp quyền cho hệ thống bằng cách sử dụng các tập lệnh được xác định trước để đồng bộ hóa và dọn dẹp hệ thống trước khi tắt |
3 | init 6 Khởi động lại hệ thống bằng cách tắt hoàn toàn rồi khởi động lại |
4 | poweroff Tắt hệ thống bằng cách tắt nguồn |
5 | reboot Khởi động lại hệ thống |
6 | shutdown Tắt hệ thống |
Thông thường, bạn cần phải là người dùng cấp cao hoặc người chủ (tài khoản đặc quyền nhất trên hệ thống Unix) để tắt hệ thống. Tuy nhiên, trên một số hộp Unix độc lập hoặc thuộc sở hữu cá nhân, người dùng quản trị và đôi khi người dùng thông thường có thể làm như vậy.
Trong chương này, chúng ta sẽ thảo luận chi tiết về quản lý tệp trong Unix. Tất cả dữ liệu trong Unix được tổ chức thành các tệp. Tất cả các tệp được tổ chức thành các thư mục. Các thư mục này được tổ chức thành một cấu trúc dạng cây gọi là hệ thống tệp.
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 phần lớn thời gian để làm việc với các tệp. Hướng dẫn này sẽ giúp bạn hiểu cách tạo và xóa tệp, sao chép và đổi tên chúng, tạo liên kết đến chúng, v.v.
Trong Unix, có ba loại tệp cơ bản:
Ordinary Files- Tệp thông thường là tệp trên hệ thống chứa dữ liệu, văn bản hoặc hướng dẫn chương trình. Trong hướng dẫn này, bạn sẽ làm việc với các tệp thông thường.
Directories- Thư mục lưu trữ cả tệp đặc biệt và thông thường. Đối với người dùng quen thuộc với Windows hoặc Mac OS, thư mục Unix tương đương với các thư mục.
Special Files- Một số tệp đặc biệt cung cấp quyền truy cập vào phần cứng như ổ cứng, ổ CD-ROM, modem và bộ điều hợp Ethernet. Các tệp đặc biệt khác tương tự như bí danh hoặc phím tắt và cho phép bạn truy cập một tệp duy nhất bằng các tên khác nhau.
Tệp danh sách
Để liệt kê các tệp và thư mục được lưu trữ trong thư mục hiện tại, hãy sử dụng lệnh sau:
$ls
Đây là kết quả mẫu của lệnh trên:
$ls
bin hosts lib res.03
ch07 hw1 pub test_results
ch07.bak hw2 res.01 users
docs hw3 res.02 work
Lệnh ls hỗ trợ -l tùy chọn này sẽ giúp bạn có thêm thông tin về các tệp được liệt kê -
$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
-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
$
Đây là thông tin về tất cả các cột được liệt kê -
First Column- Đại diện cho loại tệp và quyền được cấp trên tệp. Dưới đây là mô tả của tất cả các loại tệp.
Second Column - Đại diện cho số khối bộ nhớ được chiếm bởi tệp hoặc thư mục.
Third Column- Đại diện cho chủ sở hữu của tệp. Đây là người dùng Unix đã tạo tệp này.
Fourth Column- Đại diện cho nhóm của chủ sở hữu. Mỗi người dùng Unix sẽ có một nhóm được liên kết.
Fifth Column - Đại diện cho kích thước tệp bằng byte.
Sixth Column - Đại diện cho ngày và giờ khi tệp này được tạo hoặc sửa đổi lần cuối.
Seventh Column - Đại diện cho tệp hoặc tên thư mục.
bên trong ls -l ví dụ liệt kê, mọi dòng tệp đều bắt đầu bằng d, -, hoặc là l. Các ký tự này cho biết loại tệp được liệt kê.
Sr.No. | Tiền tố & Mô tả |
---|---|
1 | - Tệp thông thường, chẳng hạn như tệp văn bản ASCII, tệp thực thi nhị phân hoặc liên kết cứng. |
2 | b Chặn tệp đặc biệt. Chặn tập tin thiết bị đầu vào / đầu ra chẳng hạn như ổ cứng vật lý. |
3 | c Kí tự đặc biệt. Tệp thiết bị đầu vào / đầu ra thô chẳng hạn như ổ cứng vật lý. |
4 | d Tệp thư mục chứa danh sách các tệp và thư mục khác. |
5 | l Tệp liên kết tượng trưng. Liên kết trên bất kỳ tệp thông thường nào. |
6 | p Đường ống có tên. Cơ chế giao tiếp giữa các quá trình. |
7 | s Socket được sử dụng để giao tiếp giữa các quá trình. |
Metacharacters
Metacharacters có một ý nghĩa đặc biệt trong Unix. Ví dụ,* và ?là siêu nhân vật. Chúng tôi sử dụng* để khớp với 0 hoặc nhiều ký tự, một dấu chấm hỏi (?) khớp với một ký tự duy nhất.
Ví dụ -
$ls ch*.doc
Hiển thị tất cả các tệp, tên của chúng bắt đầu bằng ch và kết thúc bằng .doc -
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
Đây, *hoạt động như một ký tự meta phù hợp với bất kỳ ký tự nào. Nếu bạn muốn hiển thị tất cả các tệp kết thúc bằng chỉ.doc, thì bạn có thể sử dụng lệnh sau:
$ls *.doc
Các tệp ẩn
Tệp ẩn là một, ký tự đầu tiên là dấu chấm hoặc ký tự dấu chấm (.). Các chương trình Unix (bao gồm cả shell) sử dụng hầu hết các tệp này để lưu trữ thông tin cấu hình.
Một số ví dụ phổ biến về tệp ẩn bao gồm các tệp -
.profile - Tập lệnh khởi tạo Bourne shell (sh)
.kshrc - Tập lệnh khởi tạo trình bao Korn (ksh)
.cshrc - Tập lệnh khởi tạo C shell (csh)
.rhosts - Tệp cấu hình trình bao từ xa
Để liệt kê các tệp ẩn, hãy chỉ định -a tùy chọn để ls -
$ 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
$
Single dot (.) - Điều này đại diện cho thư mục hiện tại.
Double dot (..) - Điều này đại diện cho thư mục mẹ.
Tạo tệp
Bạn có thể dùng vitrình soạn thảo để tạo các tệp thông thường trên bất kỳ hệ thống Unix nào. Bạn chỉ cần đưa ra lệnh sau:
$ vi filename
Lệnh trên sẽ mở một tệp có tên tệp đã cho. Bây giờ, nhấn phímiđể chuyển sang chế độ chỉnh sửa. Khi bạn ở chế độ chỉnh sửa, bạn có thể bắt đầu ghi nội dung của mình vào tệp như trong chương trình sau:
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
Khi bạn đã hoàn tất chương trình, hãy làm theo các bước sau:
cắm chìa khóa esc thoát ra khỏi chế độ chỉnh sửa.
Nhấn hai phím Shift + ZZ cùng nhau để thoát ra khỏi tệp hoàn toàn.
Bây giờ bạn sẽ có một tệp được tạo bằng filename trong thư mục hiện tại.
$ vi filename $
Chỉnh sửa tệp
Bạn có thể chỉnh sửa tệp hiện có bằng cách sử dụng vingười biên tập. Chúng ta sẽ thảo luận ngắn gọn về cách mở một tệp hiện có -
$ vi filename
Sau khi tệp được mở, bạn có thể vào chế độ chỉnh sửa bằng cách nhấn phím ivà sau đó bạn có thể tiếp tục bằng cách chỉnh sửa tệp. Nếu bạn muốn di chuyển đến đây và ở đó bên trong một tệp, trước tiên bạn cần thoát khỏi chế độ chỉnh sửa bằng cách nhấn phímEsc. Sau đó, bạn có thể sử dụng các phím sau để di chuyển bên trong tệp:
l phím để di chuyển sang bên phải.
h phím để di chuyển sang phía bên trái.
k phím để di chuyển ngược lại trong tệp.
j phím để di chuyển xuống trong tệp.
Vì vậy, bằng cách sử dụng các phím trên, bạn có thể định vị con trỏ của mình ở bất kỳ đâu bạn muốn chỉnh sửa. Khi bạn đã được định vị, bạn có thể sử dụngiphím để đến trong chế độ chỉnh sửa. Khi bạn đã hoàn tất việc chỉnh sửa trong tệp của mình, hãy nhấnEsc và cuối cùng là hai chìa khóa Shift + ZZ cùng nhau để thoát ra khỏi tệp hoàn toàn.
Hiển thị nội dung của một tệp
Bạn có thể dùng catlệnh để xem nội dung của tệp. Sau đây là một ví dụ đơn giản để xem nội dung của tệp đã tạo ở trên:
$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$
Bạn có thể hiển thị số dòng bằng cách sử dụng -b tùy chọn cùng với cat lệnh như sau:
$ 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.
$
Đếm từ trong tệp
Bạn có thể dùng wclệnh để đếm tổng số dòng, từ và ký tự có trong một tệp. Sau đây là một ví dụ đơn giản để xem thông tin về tệp được tạo ở trên:
$ wc filename
2 19 103 filename
$
Đây là chi tiết của tất cả bốn cột -
First Column - Đại diện cho tổng số dòng trong tệp.
Second Column - Đại diện cho tổng số từ trong tệp.
Third Column- Đại diện cho tổng số byte trong tệp. Đây là kích thước thực của tệp.
Fourth Column - Đại diện cho tên tệp.
Bạn có thể cung cấp nhiều tệp và nhận thông tin về các tệp đó cùng một lúc. Sau đây là cú pháp đơn giản -
$ wc filename1 filename2 filename3
Sao chép các tập tin
Để tạo bản sao của tệp, hãy sử dụng cpchỉ huy. Cú pháp cơ bản của lệnh là:
$ cp source_file destination_file
Sau đây là ví dụ để tạo một bản sao của tệp hiện có filename.
$ cp filename copyfile
$
Bây giờ bạn sẽ tìm thấy một tệp nữa copyfiletrong thư mục hiện tại của bạn. Tệp này sẽ hoàn toàn giống với tệp gốcfilename.
Đổi tên tệp
Để thay đổi tên của một tệp, hãy sử dụng mvchỉ huy. Sau đây là cú pháp cơ bản:
$ mv old_file new_file
Chương trình sau sẽ đổi tên tệp hiện có filename đến newfile.
$ mv filename newfile $
Các mvlệnh sẽ di chuyển hoàn toàn tệp hiện có sang tệp mới. Trong trường hợp này, bạn sẽ chỉ tìm thấynewfile trong thư mục hiện tại của bạn.
Xóa tệp
Để xóa một tệp hiện có, hãy sử dụng rmchỉ huy. Sau đây là cú pháp cơ bản:
$ rm filename
Caution- Một tệp có thể chứa thông tin hữu ích. Nó luôn được khuyến khích để cẩn thận trong khi sử dụngDeletechỉ huy. Tốt hơn là sử dụng-i tùy chọn cùng với rm chỉ huy.
Sau đây là ví dụ cho thấy cách xóa hoàn toàn tệp hiện có filename.
$ rm filename
$
Bạn có thể xóa nhiều tệp cùng một lúc bằng lệnh dưới đây:
$ rm filename1 filename2 filename3
$
Luồng Unix tiêu chuẩn
Trong trường hợp bình thường, mọi chương trình Unix đều có ba luồng (tệp) được mở cho nó khi nó khởi động -
stdin- Đây được coi là đầu vào chuẩn và bộ mô tả tệp được liên kết là 0. Giá trị này cũng được biểu thị là STDIN. Chương trình Unix sẽ đọc đầu vào mặc định từ STDIN.
stdout- Đây được coi là đầu ra tiêu chuẩn và bộ mô tả tệp liên quan là 1. Đây cũng được biểu thị là STDOUT. Chương trình Unix sẽ ghi đầu ra mặc định tại STDOUT
stderr- Đây được coi là lỗi tiêu chuẩn và bộ mô tả tệp liên quan là 2. Lỗi này cũng được biểu diễn dưới dạng STDERR. Chương trình Unix sẽ viết tất cả các thông báo lỗi tại STDERR.
Trong chương này, chúng ta sẽ thảo luận chi tiết về quản lý thư mục trong Unix.
Thư mục là một tệp, công việc đơn lẻ của nó là lưu trữ tên tệp và thông tin liên quan. Tất cả các tệp, dù là thông thường, đặc biệt hay thư mục, đều được chứa trong các thư mục.
Unix sử dụng cấu trúc phân cấp để tổ chức các tệp và thư mục. Cấu trúc này thường được gọi là cây thư mục. Cây có một nút gốc duy nhất, ký tự gạch chéo (/), và tất cả các thư mục khác được chứa bên dưới nó.
Thư mục Trang chủ
Thư mục mà bạn tự tìm thấy khi đăng nhập lần đầu được gọi là thư mục chính của bạn.
Bạn sẽ thực hiện nhiều công việc của mình trong thư mục chính và các thư mục con mà bạn sẽ tạo để sắp xếp các tệp của mình.
Bạn có thể truy cập vào thư mục chính của mình bất cứ lúc nào bằng lệnh sau:
$cd ~
$
Đây ~cho biết thư mục chính. Giả sử bạn phải truy cập vào thư mục chính của bất kỳ người dùng nào khác, hãy sử dụng lệnh sau:
$cd ~username
$
Để truy cập thư mục cuối cùng của bạn, bạn có thể sử dụng lệnh sau:
$cd -
$
Tên đường dẫn tuyệt đối / tương đối
Các thư mục được sắp xếp theo hệ thống phân cấp với root (/) ở trên cùng. Vị trí của bất kỳ tệp nào trong phân cấp được mô tả bằng tên đường dẫn của nó.
Các phần tử của tên đường dẫn được phân tách bằng dấu /. Tên đường dẫn là tuyệt đối, nếu nó được mô tả liên quan đến gốc, do đó tên đường dẫn tuyệt đối luôn bắt đầu bằng a /.
Sau đây là một số ví dụ về tên tệp tuyệt đối.
/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3
Tên đường dẫn cũng có thể liên quan đến thư mục làm việc hiện tại của bạn. Tên đường dẫn tương đối không bao giờ bắt đầu bằng /. Liên quan đến thư mục chính của người dùng amrood, một số tên đường dẫn có thể trông như thế này -
chem/notes
personal/res
Để xác định vị trí của bạn trong phân cấp hệ thống tệp bất kỳ lúc nào, hãy nhập lệnh pwd để in thư mục làm việc hiện tại -
$pwd
/user0/home/amrood
$
Danh sách thư mục
Để liệt kê các tệp trong một thư mục, bạn có thể sử dụng cú pháp sau:
$ls dirname
Sau đây là ví dụ để liệt kê tất cả các tệp có trong /usr/local thư mục -
$ls /usr/local
X11 bin gimp jikes sbin
ace doc include lib share
atalk etc info man ami
Tạo thư mục
Bây giờ chúng ta sẽ hiểu cách tạo thư mục. Các thư mục được tạo bằng lệnh sau:
$mkdir dirname
Ở đây, thư mục là tên đường dẫn tuyệt đối hoặc tương đối của thư mục bạn muốn tạo. Ví dụ, lệnh -
$mkdir mydir $
Tạo thư mục mydirtrong thư mục hiện tại. Đây là một ví dụ khác -
$mkdir /tmp/test-dir $
Lệnh này tạo thư mục test-dir bên trong /tmpdanh mục. Cácmkdir lệnh không tạo ra đầu ra nếu nó tạo thành công thư mục đượ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, mkdirtạo từng thư mục. Ví dụ, -
$mkdir docs pub $
Tạo tài liệu thư mục và xuất bản trong thư mục hiện tại.
Tạo thư mục chính
Bây giờ chúng ta sẽ hiểu cách tạo thư mục mẹ. Đôi khi bạn muốn tạo một thư mục, thư mục mẹ hoặc các thư mục của nó có thể không tồn tại. Trong trường hợp này,mkdir đưa ra một thông báo lỗi như sau:
$mkdir /tmp/amrood/test mkdir: Failed to make directory "/tmp/amrood/test"; No such file or directory $
Trong những trường hợp như vậy, bạn có thể chỉ định -p tùy chọn cho mkdirchỉ huy. Nó tạo ra tất cả các thư mục cần thiết cho bạn. Ví dụ -
$mkdir -p /tmp/amrood/test $
Lệnh trên tạo tất cả các thư mục mẹ được yêu cầu.
Xóa thư mục
Thư mục có thể bị xóa bằng cách sử dụng rmdir lệnh như sau:
$rmdir dirname $
Note - Để xóa một thư mục, hãy đảm bảo rằng nó trống, nghĩa là không được có bất kỳ tệp hoặc thư mục con nào bên trong thư mục này.
Bạn có thể xóa nhiều thư mục cùng một lúc như sau:
$rmdir dirname1 dirname2 dirname3 $
Lệnh trên loại bỏ các thư mục dirname1, dirname2 và dirname3, nếu chúng trống. Cácrmdir lệnh không tạo ra đầu ra nếu nó thành công.
Thay đổi thư mục
Bạn có thể dùng cdlệnh để làm nhiều việc hơn là chỉ thay đổi thư mục chính. Bạn có thể sử dụng nó để thay đổi thành bất kỳ thư mục nào bằng cách chỉ định một đường dẫn tuyệt đối hoặc tương đối hợp lệ. Cú pháp như dưới đây:
$cd dirname $
Đây, dirnamelà tên của thư mục mà bạn muốn thay đổi. Ví dụ, lệnh -
$cd /usr/local/bin $
Các thay đổi đối với thư mục /usr/local/bin. Từ thư mục này, bạn có thểcd vào thư mục /usr/home/amrood sử dụng đường dẫn tương đối sau:
$cd ../../home/amrood $
Đổi tên thư mục
Các mv (move)lệnh cũng có thể được sử dụng để đổi tên một thư mục. Cú pháp như sau:
$mv olddir newdir $
Bạn có thể đổi tên một thư mục mydir đến yourdir như sau -
$mv mydir yourdir $
Các thư mục. (chấm) và .. (chấm chấm)
Các filename .(dấu chấm) đại diện cho thư mục làm việc hiện tại; vàfilename .. (dấu chấm) đại diện cho thư mục cao hơn một cấp so với thư mục làm việc hiện tại, thường được gọi là thư mục mẹ.
Nếu chúng ta nhập lệnh để hiển thị danh sách các thư mục / tệp đang hoạt động hiện tại và sử dụng -a option để liệt kê tất cả các tệp và -l option để cung cấp danh sách dài, chúng tôi sẽ nhận được kết quả sau.
$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 $
Trong chương này, chúng ta sẽ thảo luận chi tiết về quyền đối với tệp và các chế độ truy cập trong Unix. Quyền sở hữu tệp là một thành phần quan trọng của Unix cung cấp một phương pháp bảo mật để lưu trữ tệp. Mọi tệp trong Unix đều có các thuộc tính sau:
Owner permissions - Quyền của chủ sở hữu xác định những hành động nào mà chủ sở hữu tệp có thể thực hiện trên tệp.
Group permissions - Quyền của nhóm xác định những hành động nào mà người dùng, là thành viên của nhóm mà tệp thuộc về, có thể thực hiện trên tệp.
Other (world) permissions - Các quyền cho người khác cho biết tất cả những người dùng khác có thể thực hiện hành động nào trên tệp.
Các chỉ số cho phép
Trong khi sử dụng ls -l , nó hiển thị các thông tin khác nhau liên quan đến quyền tệp như sau:
$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
Ở đây, cột đầu tiên đại diện cho các chế độ truy cập khác nhau, tức là quyền được liên kết với một tệp hoặc một thư mục.
Các quyền được chia thành các nhóm ba và mỗi vị trí trong nhóm biểu thị một quyền cụ thể, theo thứ tự sau: read (r), write (w), execute (x) -
Ba ký tự đầu tiên (2-4) đại diện cho quyền đối với chủ sở hữu tệp. Ví dụ,-rwxr-xr-- đại diện rằng chủ sở hữu có quyền đọc (r), ghi (w) và thực thi (x).
Nhóm thứ hai gồm ba ký tự (5-7) bao gồm các quyền cho nhóm mà tệp thuộc về. Ví dụ,-rwxr-xr-- đại diện rằng nhóm có quyền đọc (r) và thực thi (x), nhưng không có quyền ghi.
Nhóm ba ký tự cuối cùng (8-10) đại diện cho quyền đối với những người khác. Ví dụ,-rwxr-xr-- thể hiện rằng có read (r) sự cho phép duy nhất.
Chế độ truy cập tệp
Quyền của một tệp là tuyến phòng thủ đầu tiên trong bảo mật của hệ thống Unix. Các khối xây dựng cơ bản của quyền Unix làread, writevà execute quyền, đã được mô tả bên dưới -
Đọc
Cấp khả năng đọc, tức là xem nội dung của tệp.
Viết
Cấp khả năng sửa đổi hoặc xóa nội dung của tệp.
Hành hình
Người dùng có quyền thực thi có thể chạy một tệp dưới dạng chương trình.
Chế độ truy cập thư mục
Các chế độ truy cập thư mục được liệt kê và tổ chức theo cách giống như bất kỳ tệp nào khác. Có một số khác biệt cần được đề cập -
Đọc
Truy cập vào một thư mục có nghĩa là người dùng có thể đọc nội dung. Người dùng có thể nhìn vàofilenames bên trong thư mục.
Viết
Access có nghĩa là người dùng có thể thêm hoặc xóa các tệp khỏi thư mục.
Hành hình
Thực thi một thư mục không thực sự có ý nghĩa, vì vậy hãy coi đây là một quyền truy cập.
Người dùng phải có execute Truy cập vào bin thư mục để thực thi ls hoặc là cd chỉ huy.
Thay đổi quyền
Để thay đổi tệp hoặc quyền thư mục, bạn sử dụng chmod(thay đổi chế độ) lệnh. Có hai cách để sử dụng chmod - chế độ tượng trưng và chế độ tuyệt đối.
Sử dụng chmod trong Chế độ tượng trưng
Cách dễ nhất để người mới bắt đầu sửa đổi quyền đối với tệp hoặc thư mục là sử dụng chế độ tượng trưng. Với quyền tượng trưng, bạn có thể thêm, xóa hoặc chỉ định bộ quyền bạn muốn bằng cách sử dụng các toán tử trong bảng sau.
Sr.No. | Mô tả và toán tử Chmod |
---|---|
1 | + Thêm (các) quyền được chỉ định vào một tệp hoặc thư mục. |
2 | - Xóa (các) quyền được chỉ định khỏi tệp hoặc thư mục. |
3 | = Đặt (các) quyền được chỉ định. |
Đây là một ví dụ sử dụng testfile. Đang chạyls -1 trên tệp thử nghiệm cho thấy rằng các quyền của tệp như sau:
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
Sau đó, mỗi ví dụ chmod lệnh từ bảng trước được chạy trên tệp thử nghiệm, tiếp theo là ls –l, vì vậy bạn có thể thấy các thay đổi về quyền -
$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
Đây là cách bạn có thể kết hợp các lệnh này trên một dòng duy nhất -
$chmod o+wx,u-x,g = rx testfile $ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
Sử dụng chmod với Quyền tuyệt đối
Cách thứ hai để sửa đổi quyền với lệnh chmod là sử dụng một số để chỉ định từng bộ quyền cho tệp.
Mỗi quyền được gán một giá trị, như bảng sau hiển thị và tổng số của mỗi nhóm quyền cung cấp một số cho nhóm đó.
Con số | Biểu diễn quyền bát phân | Tham khảo |
---|---|---|
0 | Không cho phép | --- |
1 | Thực thi quyền | --x |
2 | Viết quyền | -w- |
3 | Thực thi và ghi quyền: 1 (thực thi) + 2 (ghi) = 3 | -wx |
4 | Quyền đọc | r-- |
5 | Quyền đọc và thực thi: 4 (đọc) + 1 (thực thi) = 5 | rx |
6 | Quyền đọc và ghi: 4 (đọc) + 2 (viết) = 6 | rw- |
7 | Tất cả các quyền: 4 (đọc) + 2 (ghi) + 1 (thực thi) = 7 | rwx |
Đây là một ví dụ sử dụng tệp thử nghiệm. Đang chạyls -1 trên tệp thử nghiệm cho thấy rằng các quyền của tệp như sau:
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
Sau đó, mỗi ví dụ chmod lệnh từ bảng trước được chạy trên tệp thử nghiệm, tiếp theo là ls –l, vì vậy bạn có thể thấy các thay đổi về quyền -
$ chmod 755 testfile
$ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile
$ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
Thay đổi chủ sở hữu và nhóm
Trong khi tạo tài khoản trên Unix, nó chỉ định owner ID và một group IDcho từng người dùng. Tất cả các quyền được đề cập ở trên cũng được chỉ định dựa trên Chủ sở hữu và Nhóm.
Hai lệnh có sẵn để thay đổi chủ sở hữu và nhóm tệp -
chown - Sự chown lệnh là viết tắt của "change owner" và được sử dụng để thay đổi chủ sở hữu của tệp.
chgrp - Sự chgrp lệnh là viết tắt của "change group" và được sử dụng để thay đổi nhóm của một tệp.
Thay đổi quyền sở hữu
Các chownlệnh thay đổi quyền sở hữu của một tệp. Cú pháp cơ bản như sau:
$ chown user filelist
Giá trị của người dùng có thể là name of a user trên hệ thống hoặc user id (uid) của một người dùng trên hệ thống.
Ví dụ sau sẽ giúp bạn hiểu khái niệm -
$ chown amrood testfile $
Thay đổi chủ sở hữu của tệp đã cho thành người dùng amrood.
NOTE - Người dùng siêu cấp, root, có khả năng không hạn chế để thay đổi quyền sở hữu của bất kỳ tệp nào nhưng người dùng bình thường chỉ có thể thay đổi quyền sở hữu của những tệp mà họ sở hữu.
Thay đổi quyền sở hữu nhóm
Các chgrplệnh thay đổi quyền sở hữu nhóm của một tệp. Cú pháp cơ bản như sau:
$ chgrp group filelist
Giá trị của nhóm có thể là name of a group trên hệ thống hoặc the group ID (GID) của một nhóm trên hệ thống.
Ví dụ sau giúp bạn hiểu khái niệm -
$ chgrp special testfile
$
Thay đổi nhóm của tệp đã cho thành special nhóm.
Quyền đối với tệp SUID và SGID
Thường khi một lệnh được thực thi, nó sẽ phải được thực thi với các đặc quyền đặc biệt để hoàn thành nhiệm vụ của nó.
Ví dụ: khi bạn thay đổi mật khẩu của mình bằng passwd lệnh, mật khẩu mới của bạn được lưu trữ trong tệp /etc/shadow.
Là một người dùng thông thường, bạn không có read hoặc là writetruy cập vào tệp này vì lý do bảo mật, nhưng khi bạn thay đổi mật khẩu của mình, bạn cần có quyền ghi vào tệp này. Điều này có nghĩa làpasswd chương trình phải cung cấp cho bạn quyền bổ sung để bạn có thể ghi vào tệp /etc/shadow.
Các quyền bổ sung được cấp cho các chương trình thông qua một cơ chế được gọi là Set User ID (SUID) và Set Group ID (SGID) chút ít.
Khi bạn thực thi một chương trình đã bật bit SUID, bạn kế thừa các quyền của chủ sở hữu chương trình đó. Các chương trình không có bộ bit SUID được chạy với quyền của người dùng đã khởi động chương trình.
Đây cũng là trường hợp của SGID. Thông thường, các chương trình thực thi với quyền nhóm của bạn, nhưng thay vào đó, nhóm của bạn sẽ được thay đổi chỉ cho chương trình này thành chủ sở hữu nhóm của chương trình.
Các bit SUID và SGID sẽ xuất hiện dưới dạng chữ cái "s"nếu sự cho phép có sẵn. SUID"s" bit sẽ được đặt trong các bit quyền nơi chủ sở hữu execute quyền thường tồn tại.
Ví dụ, lệnh -
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
$
Cho thấy rằng bit SUID được đặt và lệnh thuộc sở hữu của người gốc. Một chữ cái viết hoaS ở vị trí thực thi thay vì chữ thường s chỉ ra rằng bit thực thi không được đặt.
Nếu bit dính được bật trên thư mục, các tệp chỉ có thể bị xóa nếu bạn là một trong những người dùng sau -
- Chủ sở hữu của thư mục dính
- Chủ sở hữu của tệp đang bị xóa
- Người dùng siêu cấp, root
Để đặt các bit SUID và SGID cho bất kỳ thư mục nào, hãy thử lệnh sau:
$ chmod ug+s dirname
$ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $
Trong chương này, chúng ta sẽ thảo luận chi tiết về môi trường Unix. Một khái niệm Unix quan trọng làenvironment, được xác định bởi các biến môi trường. Một số do hệ thống thiết lập, một số khác do bạn thiết lập, nhưng một số khác do shell hoặc bất kỳ chương trình nào tải chương trình khác.
Một biến là một chuỗi ký tự mà 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 tệp, thiết bị hoặc bất kỳ loại dữ liệu nào khác.
Ví dụ: đầu tiên chúng tôi đặt một TEST biến và sau đó chúng tôi truy cập giá trị của nó bằng cách sử dụng echo lệnh -
$TEST="Unix Programming" $echo $TEST
Nó tạo ra kết quả sau.
Unix Programming
Lưu ý rằng các biến môi trường được đặt mà không sử dụng $nhưng trong khi truy cập chúng, chúng tôi sử dụng tiền tố $ sign. Các biến này giữ nguyên giá trị của chúng cho đến khi chúng ta ra khỏi shell.
Khi bạn đăng nhập vào hệ thống, trình bao trải qua một giai đoạn được gọi là initializationđể thiết lập môi trường. Đây thường là một quy trình hai bước liên quan đến trình bao đọc các tệp sau:
- /etc/profile
- profile
Quy trình như sau:
Trình bao kiểm tra xem tệp có /etc/profile tồn tại.
Nếu nó tồn tại, shell sẽ đọc nó. Nếu không, tệp này sẽ bị bỏ qua. Không có thông báo lỗi nào được hiển thị.
Trình bao kiểm tra xem tệp có .profiletồn tại trong thư mục chính của bạn. Thư mục chính của bạn là thư mục mà bạn bắt đầu sử dụng sau khi đăng nhập.
Nếu nó tồn tại, shell sẽ đọc nó; nếu không, vỏ bỏ qua nó. Không có thông báo lỗi nào được hiển thị.
Ngay sau khi cả hai tệp này được đọc, trình bao sẽ hiển thị lời nhắc -
$
Đây là lời nhắc mà bạn có thể nhập các lệnh để chúng được thực thi.
Note - Quy trình khởi tạo shell được nêu chi tiết ở đây áp dụng cho tất cả Bourne gõ shell, nhưng một số tệp bổ sung được sử dụng bởi bash và ksh.
Tệp .profile
Tập tin /etc/profile được quản trị viên hệ thống của máy Unix của bạn duy trì và chứa thông tin khởi tạo shell mà tất cả người dùng trên hệ thống yêu cầu.
Tập tin .profilenằm trong tầm kiểm soát của bạn. Bạn có thể thêm bao nhiêu thông tin tùy chỉnh trình bao tùy thích vào tệp này. Bộ thông tin tối thiểu mà bạn cần định cấu hình bao gồm:
- Loại thiết bị đầu cuối bạn đang sử dụng.
- Danh sách các thư mục để định vị các lệnh.
- Danh sách các biến ảnh hưởng đến giao diện của thiết bị đầu cuối của bạn.
Bạn có thể kiểm tra .profilecó sẵn trong thư mục chính của bạn. Mở nó bằng trình chỉnh sửa vi và kiểm tra tất cả các biến được đặt cho môi trường của bạn.
Đặt loại thiết bị đầu cuối
Thông thường, loại thiết bị đầu cuối bạn đang sử dụng được định cấu hình tự động bởi login hoặc là gettycác chương trình. Đôi khi, quá trình cấu hình tự động đoán sai thiết bị đầu cuối của bạn.
Nếu thiết bị đầu cuối của bạn được đặt không chính xác, đầu ra của các lệnh có thể trông lạ hoặc bạn không thể tương tác với trình bao đúng cách.
Để đảm bảo rằng đây không phải là trường hợp, hầu hết người dùng đặt thiết bị đầu cuối của họ thành mẫu số chung thấp nhất theo cách sau:
$TERM=vt100 $
Đặt PATH
Khi bạn gõ bất kỳ lệnh nào trên dấu nhắc lệnh, trình bao phải xác định vị trí lệnh đó trước khi nó có thể được thực thi.
Biến PATH chỉ định các vị trí mà shell sẽ tìm kiếm các lệnh. Thông thường biến Path được đặt như sau:
$PATH=/bin:/usr/bin $
Ở đây, mỗi mục nhập riêng lẻ được phân tách bằng ký tự dấu hai chấm (:)là các thư mục. Nếu bạn yêu cầu trình bao thực thi một lệnh và nó không thể tìm thấy nó trong bất kỳ thư mục nào được đưa ra trong biến PATH, một thông báo tương tự như sau sẽ xuất hiện:
$hello hello: not found $
Có các biến như PS1 và PS2 sẽ được thảo luận trong phần tiếp theo.
Biến PS1 và PS2
Các ký tự mà trình bao hiển thị dưới dạng dấu nhắc lệnh của bạn được lưu trữ trong biến PS1. Bạn có thể thay đổi biến này thành bất kỳ thứ gì bạn muốn. Ngay sau khi bạn thay đổi nó, nó sẽ được shell sử dụng từ thời điểm đó.
Ví dụ, nếu bạn phát hành lệnh -
$PS1='=>'
=>
=>
=>
Lời nhắc của bạn sẽ trở thành =>. Để đặt giá trị củaPS1 để nó hiển thị thư mục làm việc, hãy ra lệnh -
=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
Kết quả của lệnh này là dấu nhắc hiển thị tên người dùng của người dùng, tên máy (tên máy) và thư mục làm việc.
Có khá nhiều escape sequencescó thể được sử dụng làm đối số giá trị cho PS1; cố gắng giới hạn bản thân ở mức quan trọng nhất để lời nhắc không làm bạn choáng ngợp với thông tin.
Sr.No. | Trình tự thoát & Mô tả |
---|---|
1 | \t Thời gian hiện tại, được biểu thị bằng HH: MM: SS |
2 | \d Ngày hiện tại, được biểu thị là Ngày trong tuần, Ngày trong tháng |
3 | \n Dòng mới |
4 | \s Môi trường shell hiện tại |
5 | \W Thư mục làm việc |
6 | \w Đường dẫn đầy đủ của thư mục làm việc |
7 | \u Tên người dùng hiện tại của người dùng |
số 8 | \h Tên máy chủ của máy hiện tại |
9 | \# Số lệnh của lệnh hiện tại. Tăng khi một lệnh mới được nhập |
10 | \$ Nếu UID hiệu dụng là 0 (nghĩa là nếu bạn đăng nhập với quyền root), hãy kết thúc lời nhắc bằng ký tự #; nếu không, hãy sử dụng dấu $ |
Bạn có thể tự thực hiện thay đổi mỗi khi đăng nhập hoặc bạn có thể tự động thực hiện thay đổi trong PS1 bằng cách thêm nó vào .profile tập tin.
Khi bạn đưa ra một lệnh chưa hoàn thành, trình bao sẽ hiển thị lời nhắc phụ và chờ bạn hoàn thành lệnh và nhấn Enter lần nữa.
Lời nhắc phụ mặc định là > (dấu lớn hơn), nhưng có thể được thay đổi bằng cách xác định lại PS2 biến shell -
Sau đây là ví dụ sử dụng dấu nhắc phụ mặc định:
$ echo "this is a > test" this is a test $
Ví dụ được đưa ra bên dưới định nghĩa lại PS2 bằng một lời nhắc tùy chỉnh:
$ PS2="secondary prompt->" $ echo "this is a
secondary prompt->test"
this is a
test
$
Biến môi trường
Sau đây là danh sách một phần các biến môi trường quan trọng. Các biến này được đặt và truy cập như được đề cập bên dưới -
Sr.No. | Biến & Mô tả |
---|---|
1 | DISPLAY Chứa số nhận dạng cho màn hình X11 chương trình nên sử dụng theo mặc định. |
2 | HOME Cho biết thư mục chính của người dùng hiện tại: đối số mặc định cho cd built-in chỉ huy. |
3 | IFS Chỉ ra Internal Field Separator được sử dụng bởi trình phân tích cú pháp để tách từ sau khi mở rộng. |
4 | LANG LANG mở rộng đến ngôn ngữ hệ thống mặc định; LC_ALL có thể được sử dụng để ghi đè điều này. Ví dụ, nếu giá trị của nó làpt_BR, sau đó ngôn ngữ được đặt thành (Braxin) tiếng Bồ Đào Nha và ngôn ngữ là Braxin. |
5 | LD_LIBRARY_PATH Hệ thống Unix với trình liên kết động, chứa danh sách thư mục được phân tách bằng dấu hai chấm mà trình liên kết động sẽ tìm kiếm các đối tượng được chia sẻ khi xây dựng hình ảnh quy trình sau khi thực thi, trước khi tìm kiếm trong bất kỳ thư mục nào khác. |
6 | PATH Cho biết đường dẫn tìm kiếm các lệnh. Nó là một danh sách các thư mục được phân tách bằng dấu hai chấm trong đó shell tìm kiếm các lệnh. |
7 | PWD Cho biết thư mục làm việc hiện tại được đặt bởi lệnh cd. |
số 8 | RANDOM Tạo một số nguyên ngẫu nhiên từ 0 đến 32,767 mỗi khi nó được tham chiếu. |
9 | SHLVL Số lượng tăng lên mỗi khi một phiên bản bash được bắt đầu. Biến này hữu ích để xác định xem lệnh thoát tích hợp có kết thúc phiên hiện tại hay không. |
10 | TERM Đề cập đến kiểu hiển thị. |
11 | TZ Đề cập đến múi giờ. Nó có thể nhận các giá trị như GMT, AST, v.v. |
12 | UID Mở rộng đến ID người dùng số của người dùng hiện tại, được khởi tạo khi khởi động trình bao. |
Sau đây là ví dụ mẫu hiển thị một số biến môi trường -
$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $
Trong chương này, chúng ta sẽ thảo luận chi tiết về In ấn và Email là những tiện ích cơ bản của Unix. Cho đến nay, chúng tôi đã cố gắng hiểu Hệ điều hành Unix và bản chất của các lệnh cơ bản của nó. Trong chương này, chúng ta sẽ tìm hiểu một số tiện ích Unix quan trọng có thể được sử dụng trong cuộc sống hàng ngày của chúng ta.
In tập tin
Trước khi in một tệp trên hệ thống Unix, bạn có thể muốn định dạng lại tệp đó để điều chỉnh lề, đánh dấu một số từ, v.v. Hầu hết các tệp cũng có thể được in mà không cần định dạng lại, nhưng bản in thô có thể không hấp dẫn như vậy.
Nhiều phiên bản Unix bao gồm hai định dạng văn bản mạnh mẽ, nroff và troff.
Lệnh pr
Các prlệnh thực hiện định dạng nhỏ các tệp trên màn hình đầu cuối hoặc cho máy in. Ví dụ: nếu bạn có một danh sách dài các tên trong một tệp, bạn có thể định dạng tệp đó trên màn hình thành hai hoặc nhiều cột.
Sau đây là cú pháp cho pr lệnh -
pr option(s) filename(s)
Các prchỉ thay đổi định dạng của tệp trên màn hình hoặc trên bản in; nó không sửa đổi tệp gốc. Bảng sau liệt kê một sốpr tùy chọn -
Sr.No. | Tùy chọn & Mô tả |
---|---|
1 | -k Sản xuất k cột đầu ra |
2 | -d Dấu cách gấp đôi đầu ra (không phải trên tất cả pr phiên bản) |
3 | -h "header" Lấy mục tiếp theo làm tiêu đề báo cáo |
4 | -t Loại bỏ việc in tiêu đề và lề trên / dưới |
5 | -l PAGE_LENGTH Đặt độ dài trang thành PAGE_LENGTH (66) dòng. Số dòng văn bản mặc định là 56 |
6 | -o MARGIN Đặt mỗi dòng có dấu cách MARGIN (không) |
7 | -w PAGE_WIDTH Đặt chiều rộng trang thành PAGE_WIDTH (72) ký tự chỉ cho đầu ra nhiều cột văn bản |
Trước khi sử dụng pr, đây là nội dung của một tệp mẫu có tên thực phẩm.
$cat food Sweet Tooth Bangkok Wok Mandalay Afghani Cuisine Isle of Java Big Apple Deli Sushi and Sashimi Tio Pepe's Peppers ........ $
Hãy sử dụng prlệnh tạo báo cáo hai cột với tiêu đề Nhà hàng -
$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 ........ $
Lệnh lp và lpr
Lệnh lp hoặc là lprin tệp ra giấy thay vì hiển thị trên màn hình. Khi bạn đã sẵn sàng với việc định dạng bằng cách sử dụngpr , bạn có thể sử dụng bất kỳ lệnh nào trong số các lệnh này để in tệp của mình trên máy in được kết nối với máy tính của bạn.
Quản trị viên hệ thống của bạn có thể đã thiết lập một máy in mặc định trên trang web của bạn. Để in một tệp có tênfood trên máy in mặc định, sử dụng lp hoặc là lpr , như trong ví dụ sau:
$lp food request id is laserp-525 (1 file) $
Các lp lệnh hiển thị một ID mà bạn có thể sử dụng để hủy lệnh in hoặc kiểm tra trạng thái của nó.
Nếu bạn đang sử dụng lp , bạn có thể sử dụng -nNumtùy chọn để in Số lượng bản sao. Cùng với lệnhlpr, bạn có thể dùng -Num cho cùng.
Nếu có nhiều máy in được kết nối với mạng chia sẻ, thì bạn có thể chọn một máy in bằng -dprinter tùy chọn cùng với lệnh lp và cho cùng mục đích, bạn có thể sử dụng -Pprintertùy chọn cùng với lệnh lpr. Đây là tên máy in.
Lệnh lpstat và lpq
Các lpstat lệnh hiển thị những gì trong hàng đợi máy in: ID yêu cầu, chủ sở hữu, kích thước tệp, thời điểm công việc được gửi để in và trạng thái của yêu cầu.
Sử dụng lpstat -onếu bạn muốn xem tất cả các yêu cầu đầu ra khác với chỉ của riêng bạn. Yêu cầu được hiển thị theo thứ tự sẽ được in -
$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ác lpq cung cấp thông tin hơi khác so với lpstat -o -
$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 $
Tại đây dòng đầu tiên hiển thị trạng thái máy in. Nếu máy in bị tắt hoặc hết giấy, bạn có thể thấy các thông báo khác nhau trên dòng đầu tiên này.
Lệnh hủy và lệnh lprm
Các cancel lệnh kết thúc một yêu cầu in từ lp command. Cáclprm lệnh kết thúc tất cả lpr requests. Bạn có thể chỉ định ID của yêu cầu (hiển thị bằng lp hoặc lpq) hoặc tên của máy in.
$cancel laserp-575 request "laserp-575" cancelled $
Để hủy bất kỳ yêu cầu nào hiện đang in, bất kể ID của nó, chỉ cần nhập hủy và tên máy in -
$cancel laserp request "laserp-573" cancelled $
Các lprmlệnh sẽ hủy bỏ công việc đang hoạt động nếu nó thuộc về bạn. Nếu không, bạn có thể cung cấp số công việc làm đối số hoặc sử dụngdash (-) để xóa tất cả công việc của bạn -
$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $
Các lprm lệnh cho bạn biết tên tệp thực tế đã bị xóa khỏi hàng đợi máy in.
Gửi email
Bạn sử dụng lệnh Unix mail để gửi và nhận thư. Đây là cú pháp để gửi một email -
$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr
Dưới đây là các tùy chọn quan trọng liên quan đến lệnh mail −s
Sr.No. | Tùy chọn & Mô tả |
---|---|
1 | -s Chỉ định chủ đề trên dòng lệnh. |
2 | -c Gửi các bản sao carbon đến danh sách người dùng. Danh sách phải là danh sách tên được phân tách bằng dấu phẩy. |
3 | -b Gửi bản sao mù carbon vào danh sách. Danh sách phải là danh sách tên được phân tách bằng dấu phẩy. |
Sau đây là một ví dụ để gửi một tin nhắn thử nghiệm đến [email protected].
$mail -s "Test Message" [email protected]
Sau đó, bạn phải nhập tin nhắn của mình, tiếp theo là "control-D"ở đầu dòng. Để dừng lại, chỉ cần gõ dấu chấm(.) như sau -
Hi,
This is a test
.
Cc:
Bạn có thể gửi một tệp hoàn chỉnh bằng cách sử dụng redirect < operator như sau -
$mail -s "Report 05/06/07" [email protected] < demo.txt
Để kiểm tra email đến trong hệ thống Unix của bạn, bạn chỉ cần nhập email như sau:
$mail
no email
Trong chương này, chúng ta sẽ thảo luận chi tiết về đường ống và bộ lọc trong Unix. Bạn có thể kết nối hai lệnh với nhau để đầu ra từ một chương trình trở thành đầu vào của chương trình tiếp theo. Hai hoặc nhiều lệnh được kết nối theo cách này tạo thành một đường ống.
Để tạo một đường ống, hãy đặt một thanh dọc (|) trên dòng lệnh giữa hai lệnh.
Khi một chương trình lấy đầu vào từ chương trình khác, nó sẽ thực hiện một số thao tác trên đầu vào đó và ghi kết quả vào đầu ra chuẩn. Nó được gọi làfilter.
Lệnh grep
Lệnh grep tìm kiếm một tệp hoặc các tệp cho các dòng có một mẫu nhất định. Cú pháp là -
$grep pattern file(s)
Tên "grep" đến từ lệnh ed (một trình soạn thảo dòng Unix) g/re/p có nghĩa là “tìm kiếm một biểu thức chính quy trên toàn cầu và in tất cả các dòng chứa nó”.
Biểu thức chính quy là một số văn bản thuần túy (một từ chẳng hạn) và / hoặc các ký tự đặc biệt được sử dụng để đối sánh mẫu.
Cách sử dụng grep đơn giản nhất là tìm kiếm một mẫu bao gồm một từ duy nhất. Nó có thể được sử dụng trong một đường ống để chỉ những dòng của tệp đầu vào chứa một chuỗi nhất định mới được gửi đến đầu ra chuẩn. Nếu bạn không cho grep một tên tệp để đọc, nó sẽ đọc đầu vào chuẩn của nó; đó là cách tất cả các chương trình lọc hoạt động -
$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
$
Có nhiều tùy chọn khác nhau mà bạn có thể sử dụng cùng với grep lệnh -
Sr.No. | Tùy chọn & Mô tả |
---|---|
1 | -v In tất cả các dòng không khớp với mẫu. |
2 | -n In dòng phù hợp và số dòng của nó. |
3 | -l Chỉ in tên của các tệp có dòng trùng khớp (chữ cái "l") |
4 | -c Chỉ in số dòng phù hợp. |
5 | -i Đối sánh chữ hoa hoặc chữ thường. |
Bây giờ, chúng ta hãy sử dụng một biểu thức chính quy cho grep để tìm các dòng có "carol", theo sau là số 0 hoặc các ký tự khác được viết tắt trong biểu thức chính quy là ". *"), sau đó là "Aug" .−
Ở đây, chúng tôi đang sử dụng -i tùy chọn để có tìm kiếm không phân biệt chữ hoa chữ thường -
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
Lệnh sắp xếp
Các sortlệnh sắp xếp các dòng văn bản theo thứ tự bảng chữ cái hoặc số. Ví dụ sau đây sắp xếp các dòng trong tệp thực phẩm -
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
Các sortlệnh sắp xếp các dòng văn bản theo thứ tự bảng chữ cái theo mặc định. Có nhiều tùy chọn kiểm soát việc sắp xếp -
Sr.No. | Sự miêu tả |
---|---|
1 | -n Sắp xếp theo số (ví dụ: 10 sẽ sắp xếp sau 2), bỏ qua khoảng trống và tab. |
2 | -r Đảo ngược thứ tự sắp xếp. |
3 | -f Sắp xếp chữ hoa và chữ thường với nhau. |
4 | +x Bỏ qua trước x các trường khi sắp xếp. |
Nhiều hơn hai lệnh có thể được liên kết thành một đường ống. Lấy ví dụ về đường ống trước bằng cách sử dụnggrep, chúng tôi có thể sắp xếp thêm các tệp được sửa đổi vào tháng 8 theo thứ tự kích thước.
Đường ống sau bao gồm các lệnh ls, grepvà sort -
$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
$
Đường ống này sắp xếp tất cả các tệp trong thư mục của bạn được sửa đổi vào tháng 8 theo thứ tự kích thước và in chúng trên màn hình đầu cuối. Tùy chọn sắp xếp + 4n bỏ qua bốn trường (các trường được phân tách bằng khoảng trống) sau đó sắp xếp các dòng theo thứ tự số.
Lệnh pg và nhiều lệnh khác
Thông thường, bạn có thể nén một đầu ra dài trên màn hình, nhưng nếu bạn chạy văn bản qua nhiều hơn hoặc sử dụng pglệnh như một bộ lọc; màn hình dừng khi màn hình có đầy đủ văn bản.
Hãy giả sử rằng bạn có một danh sách thư mục dài. Để đọc danh sách đã sắp xếp dễ dàng hơn, hãy chuyển đầu ra quamore như sau -
$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
.
.
.
-rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05
--More--(74%)
Màn hình sẽ lấp đầy khi màn hình toàn văn bản bao gồm các dòng được sắp xếp theo thứ tự của kích thước tệp. Ở cuối màn hình làmore dấu nhắc, nơi bạn có thể nhập lệnh để di chuyển qua văn bản đã được sắp xếp.
Sau khi hoàn tất với màn hình này, bạn có thể sử dụng bất kỳ lệnh nào được liệt kê trong phần thảo luận của chương trình khác.
Trong chương này, chúng ta sẽ thảo luận chi tiết về quản lý quy trình trong Unix. Khi bạn thực thi một chương trình trên hệ thống Unix của mình, hệ thống sẽ tạo ra 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 để hệ thống chạy chương trình như thể không có chương trình nào khác đang chạy trên hệ thống.
Bất cứ khi nào bạn đưa ra một lệnh trong Unix, nó sẽ tạo hoặc bắt đầu một quá trình mới. Khi bạn thửlslệnh liệt kê nội dung thư mục, bạn đã bắt đầu một quá trình. Nói một cách đơn giản, một tiến trình 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 quy trình thông qua một số ID gồm năm chữ số được gọi là pid hoặc là process ID. Mỗi quy trình trong hệ thống có mộtpid.
Pid cuối cùng lặp lại vì tất cả các số có thể được sử dụng hết và pid tiếp theo sẽ cuộn hoặc bắt đầu lại. Tại bất kỳ thời điểm nào, không có hai tiến trình có cùng pid nào tồn tại trong hệ thống vì nó là pid mà Unix sử dụng để theo dõi từng tiến trình.
Bắt đầu một quy trình
Khi bạn bắt đầu một quy trình (chạy một lệnh), có hai cách bạn có thể chạy nó:
- Quy trình tiền cảnh
- Quy trình nền
Quy trình tiền cảnh
Theo mặc định, mọi quy trình bạn bắt đầu đều chạy ở chế độ nền trước. Nó nhận đầu vào từ bàn phím và gửi đầu ra đến màn hình.
Bạn có thể thấy điều này xảy ra với lschỉ huy. Nếu bạn muốn liệt kê tất cả các tệp trong thư mục hiện tại của mình, bạn có thể sử dụng lệnh sau:
$ls ch*.doc
Điều này sẽ hiển thị tất cả các tệp, tên của chúng bắt đầu bằng ch và kết thúc bằng .doc -
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
Quá trình chạy ở nền trước, đầu ra được chuyển trực tiếp đến màn hình của tôi và nếu ls lệnh muốn bất kỳ đầu vào nào (mà nó không), nó đợi nó từ bàn phím.
Trong khi một chương trình đang chạy ở chế độ nền và tốn nhiều thời gian, không thể chạy lệnh nào khác (bắt đầu bất kỳ quá trình nào khác) vì lời nhắc sẽ không khả dụng cho đến khi chương trình hoàn tất xử lý và xuất hiện.
Quy trình nền
Quá trình nền chạy mà không cần kết nối với bàn phím của bạn. Nếu quá trình nền yêu cầu bất kỳ đầu vào bàn phím nào, nó sẽ đợi.
Lợi thế của việc chạy một tiến trình trong nền là bạn có thể chạy các lệnh khác; bạn không cần phải đợi cho đến khi nó hoàn thành để bắt đầu một cái khác!
Cách đơn giản nhất để bắt đầu quy trình nền là thêm dấu và (&) ở cuối lệnh.
$ls ch*.doc &
Điều này hiển thị tất cả những tệp đó tên bắt đầu bằng ch và kết thúc bằng .doc -
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
Đây, nếu ls lệnh muốn bất kỳ đầu vào nào (mà nó không), nó sẽ chuyển sang trạng thái dừng cho đến khi chúng ta chuyển nó vào nền trước và cung cấp cho nó dữ liệu từ bàn phím.
Dòng đầu tiên chứa thông tin về quy trình nền - số công việc và ID quy trình. Bạn cần biết số công việc để thao tác nó giữa hậu cảnh và tiền cảnh.
Nhấn phím Enter và bạn sẽ thấy như sau:
[1] + Done ls ch*.doc &
$
Dòng đầu tiên cho bạn biết rằng lsquá trình nền lệnh kết thúc thành công. Thứ hai là lời nhắc cho một lệnh khác.
Quy trình chạy danh sách
Có thể dễ dàng xem các quy trình của riêng bạn bằng cách chạy ps (trạng thái quá trình) lệnh như sau:
$ps
PID TTY TIME CMD
18358 ttyp3 00:00:00 sh
18361 ttyp3 00:01:31 abiword
18789 ttyp3 00:00:00 ps
Một trong những cờ thường được sử dụng cho ps là -f (f cho đầy đủ), cung cấp thêm thông tin như trong ví dụ sau:
$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
Đây là mô tả của tất cả các trường được hiển thị bởi ps -f lệnh -
Sr.No. | Cột & Mô tả |
---|---|
1 | UID ID người dùng mà quy trình này thuộc về (người điều hành nó) |
2 | PID Xử lý ID |
3 | PPID ID quy trình chính (ID của quy trình đã bắt đầu nó) |
4 | C Quá trình sử dụng CPU |
5 | STIME Thời gian bắt đầu xử lý |
6 | TTY Loại thiết bị đầu cuối liên quan đến quy trình |
7 | TIME Thời gian CPU thực hiện bởi quá trình |
số 8 | CMD Lệnh bắt đầu quá trình này |
Có các tùy chọn khác có thể được sử dụng cùng với ps lệnh -
Sr.No. | Tùy chọn & Mô tả |
---|---|
1 | -a Hiển thị thông tin về tất cả người dùng |
2 | -x Hiển thị thông tin về các quy trình không có thiết bị đầu cuối |
3 | -u Hiển thị thông tin bổ sung như tùy chọn -f |
4 | -e Hiển thị thông tin mở rộng |
Quá trình dừng
Kết thúc một quá trình có thể được thực hiện theo nhiều cách khác nhau. Thông thường, từ một lệnh dựa trên bảng điều khiển, việc gửi tổ hợp phím CTRL + C (ký tự ngắt mặc định) sẽ thoát khỏi lệnh. Điều này hoạt động khi quá trình đang chạy ở chế độ nền trước.
Nếu một quá trình đang chạy trong nền, bạn sẽ nhận được ID công việc của nó bằng cách sử dụng pschỉ huy. Sau đó, bạn có thể sử dụngkill lệnh để kết thúc quá trình như sau:
$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
$kill 6738
Terminated
Đây, kill lệnh kết thúc first_onequá trình. Nếu một quy trình bỏ qua lệnh kill thông thường, bạn có thể sử dụngkill -9 theo sau là ID quy trình như sau:
$kill -9 6738
Terminated
Quy trình dành cho cha mẹ và con cái
Mỗi quy trình unix có hai số ID được gán cho nó: ID quy trình (pid) và ID quy trình mẹ (ppid). Mỗi quy trình của người dùng trong hệ thống có một quy trình mẹ.
Hầu hết các lệnh mà bạn chạy đều có shell là cha của chúng. Kiểm traps -f ví dụ trong đó lệnh này liệt kê cả ID quy trình và ID quy trình mẹ.
Quá trình xác sống và trẻ mồ côi
Thông thường, khi một quy trình con bị hủy, quy trình mẹ được cập nhật thông qua SIGCHLDtín hiệu. Sau đó, cha mẹ có thể làm một số nhiệm vụ khác hoặc khởi động lại một đứa trẻ mới nếu cần. Tuy nhiên, đôi khi tiến trình cha bị giết trước khi con của nó bị giết. Trong trường hợp này, "cha mẹ của tất cả các quy trình",initquy trình, trở thành PPID mới (ID quy trình mẹ). Trong một số trường hợp, các quy trình này được gọi là quy trình mồ côi.
Khi một quy trình bị hủy, ps danh sách vẫn có thể hiển thị quy trình với Ztiểu bang. Đây là một quá trình zombie hoặc không còn tồn tại. Quá trình này đã chết và không được sử dụng. Các quy trình này khác với các quy trình mồ côi. Họ đã hoàn thành việc thực thi nhưng vẫn tìm thấy một mục nhập trong bảng quy trình.
Quy trình Daemon
Daemon là các quy trình nền liên quan đến hệ thống thường chạy với quyền của root và các yêu cầu dịch vụ từ các quy trình khác.
Một daemon không có thiết bị đầu cuối điều khiển. Nó không thể mở/dev/tty. Nếu bạn làm một"ps -ef" và nhìn vào tty trường, tất cả các daemon sẽ có ? cho tty.
Nói một cách chính xác, daemon là một tiến trình chạy ở chế độ nền, thường chờ đợi điều gì đó xảy ra mà nó có khả năng làm việc. Ví dụ, một daemon máy in đang chờ lệnh in.
Nếu bạn có một chương trình yêu cầu xử lý dài, thì bạn nên đặt nó làm daemon và chạy nó ở chế độ nền.
Lệnh hàng đầu
Các top lệnh là một công cụ rất hữu ích để nhanh chóng hiển thị các quy trình được sắp xếp theo các tiêu chí khác nhau.
Nó là một công cụ chẩn đoán tương tác cập nhật thường xuyên và hiển thị thông tin về bộ nhớ vật lý và ảo, mức sử dụng CPU, mức trung bình tải và các quy trình bận rộn của bạn.
Đây là cú pháp đơn giản để chạy lệnh trên cùng và xem số liệu thống kê về việc sử dụng CPU của các quá trình khác nhau -
$top
ID công việc so với ID quy trình
Các quy trình nền và bị treo thường được thao tác thông qua job number (job ID). Số này khác với ID quy trình và được sử dụng vì nó ngắn hơn.
Ngoài ra, một công việc có thể bao gồm nhiều quy trình chạy trong một chuỗi hoặc đồng thời, song song. Sử dụng ID công việc dễ dàng hơn theo dõi các quy trình riêng lẻ.
Trong chương này, chúng ta sẽ thảo luận chi tiết về các tiện ích truyền thông mạng trong Unix. Khi bạn làm việc trong môi trường phân tán, bạn cần giao tiếp với người dùng từ xa và bạn cũng cần truy cập vào các máy Unix từ xa.
Có một số tiện ích Unix giúp người dùng tính toán trong một môi trường mạng, phân tán. Chương này liệt kê một vài trong số chúng.
Tiện ích ping
Các pinglệnh gửi một yêu cầu phản hồi đến một máy chủ có sẵn trên mạng. Sử dụng lệnh này, bạn có thể kiểm tra xem máy chủ từ xa của mình có phản hồi tốt hay không.
Lệnh ping hữu ích cho những việc sau:
- Theo dõi và cách ly các sự cố phần cứng và phần mềm.
- Xác định trạng thái của mạng và các máy chủ nước ngoài khác nhau.
- Kiểm tra, đo lường và quản lý mạng.
Cú pháp
Sau đây là cú pháp đơn giản để sử dụng lệnh ftp:
$ping hostname or ip-address
Lệnh trên bắt đầu in phản hồi sau mỗi giây. Để thoát ra khỏi lệnh, bạn có thể kết thúc nó bằng cách nhấnCNTRL + C chìa khóa.
Thí dụ
Sau đây là một ví dụ để kiểm tra tính khả dụng của một máy chủ lưu trữ có sẵn trên mạng -
$ping google.com PING google.com (74.125.67.100) 56(84) bytes of data. 64 bytes from 74.125.67.100: icmp_seq = 1 ttl = 54 time = 39.4 ms 64 bytes from 74.125.67.100: icmp_seq = 2 ttl = 54 time = 39.9 ms 64 bytes from 74.125.67.100: icmp_seq = 3 ttl = 54 time = 39.3 ms 64 bytes from 74.125.67.100: icmp_seq = 4 ttl = 54 time = 39.1 ms 64 bytes from 74.125.67.100: icmp_seq = 5 ttl = 54 time = 38.8 ms --- google.com ping statistics --- 22 packets transmitted, 22 received, 0% packet loss, time 21017ms rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms $
Nếu máy chủ không tồn tại, bạn sẽ nhận được kết quả sau:
$ping giiiiiigle.com ping: unknown host giiiiigle.com $
Tiện ích ftp
Đây, ftp viết tắt của File Tngười ransfer Pluân phiên. Tiện ích này giúp bạn tải lên và tải xuống tệp của mình từ máy tính này sang máy tính khác.
Tiện ích ftp có bộ lệnh giống Unix của riêng nó. Các lệnh này giúp bạn thực hiện các tác vụ như -
Kết nối và đăng nhập vào máy chủ từ xa.
Điều hướng các thư mục.
Liệt kê nội dung thư mục.
Đặt và nhận tệp.
Chuyển tệp dưới dạng ascii, ebcdic hoặc là binary.
Cú pháp
Sau đây là cú pháp đơn giản để sử dụng lệnh ftp:
$ftp hostname or ip-address
Lệnh trên sẽ nhắc bạn nhập ID đăng nhập và mật khẩu. Sau khi được xác thực, bạn có thể truy cập 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.
Bảng sau liệt kê một số lệnh quan trọng:
Sr.No. | Lệnh & Mô tả |
---|---|
1 | put filename Tải tên tệp từ máy cục bộ lên máy từ xa. |
2 | get filename Tải tên tệp từ máy từ xa xuống máy cục bộ. |
3 | mput file list Tải nhiều tệp từ máy cục bộ lên máy từ xa. |
4 | mget file list Tải xuống nhiều tệp từ máy từ xa vào máy cục bộ. |
5 | prompt off Tắt lời nhắc. Theo mặc định, bạn sẽ nhận được lời nhắc tải lên hoặc tải xuống tệp bằngmput hoặc là mget các lệnh. |
6 | prompt on Bật lời nhắc. |
7 | dir Liệt kê tất cả các tệp có sẵn trong thư mục hiện tại của máy từ xa. |
số 8 | cd dirname Thay đổi thư mục thành dirname trên máy tính từ xa. |
9 | lcd dirname Thay đổi thư mục thành dirname trên máy cục bộ. |
10 | quit Giúp đăng xuất khỏi đăng nhập hiện tại. |
Cần lưu ý rằng tất cả các tệp sẽ được tải xuống hoặc tải lên hoặc từ các thư mục hiện tại. Nếu bạn muốn tải tệp của mình lên trong một thư mục cụ thể, trước tiên bạn cần phải thay đổi thư mục đó rồi tải lên các tệp cần thiết.
Thí dụ
Sau đây là ví dụ để hiển thị hoạt động của một số lệnh:
$ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 1464
drwxr-sr-x 3 amrood group 1024 Mar 11 20:04 Mail
drwxr-sr-x 2 amrood group 1536 Mar 3 18:07 Misc
drwxr-sr-x 5 amrood group 512 Dec 7 10:59 OldStuff
drwxr-sr-x 2 amrood group 1024 Mar 11 15:24 bin
drwxr-sr-x 5 amrood group 3072 Mar 13 16:10 mpl
-rw-r--r-- 1 amrood group 209671 Mar 15 10:57 myfile.out
drwxr-sr-x 3 amrood group 512 Jan 5 13:32 public
drwxr-sr-x 3 amrood group 512 Feb 10 10:17 pvm3
226 Transfer complete.
ftp> cd mpl
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 7320
-rw-r--r-- 1 amrood group 1630 Aug 8 1994 dboard.f
-rw-r----- 1 amrood group 4340 Jul 17 1994 vttest.c
-rwxr-xr-x 1 amrood group 525574 Feb 15 11:52 wave_shift
-rw-r--r-- 1 amrood group 1648 Aug 5 1994 wide.list
-rwxr-xr-x 1 amrood group 4019 Feb 14 16:26 fix.c
226 Transfer complete.
ftp> get wave_shift
200 PORT command successful.
150 Opening data connection for wave_shift (525574 bytes).
226 Transfer complete.
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
$
Tiện ích telnet
Đôi khi chúng ta được yêu cầu kết nối với một máy Unix từ xa và làm việc trên máy đó từ xa. Telnet là một tiện ích cho phép người dùng máy tính tại một trang web thực hiện kết nối, đăng nhập và sau đó tiến hành công việc trên máy tính tại một trang web khác.
Sau khi đăng nhập bằng Telnet, bạn có thể thực hiện tất cả các hoạt động trên máy được kết nối từ xa của mình. Sau đây là một ví dụ về phiên Telnet:
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:>
Tiện ích ngón tay
Các fingerlệnh hiển thị thông tin về người dùng trên một máy chủ nhất định. Máy chủ có thể là địa phương hoặc từ xa.
Ngón tay có thể bị tắt trên các hệ thống khác vì lý do bảo mật.
Sau đây là cú pháp đơn giản để sử dụng lệnh ngón tay:
Kiểm tra tất cả người dùng đã đăng nhập trên máy cục bộ -
$ finger
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
Nhận thông tin về một người dùng cụ thể có sẵn trên máy cục bộ -
$ 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.
Kiểm tra tất cả người dùng đã đăng nhập trên máy từ xa -
$ finger @avtar.com
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
Nhận thông tin về một người dùng cụ thể có sẵn trên máy từ xa -
$ finger [email protected]
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.
Trong chương này, chúng ta sẽ hiểu cách thức hoạt động của Vi Editor trong Unix. Có nhiều cách để chỉnh sửa tệp trong Unix. Chỉnh sửa tệp bằng trình chỉnh sửa văn bản hướng màn hìnhvilà một trong những cách tốt nhất. Trình chỉnh sửa này cho phép bạn chỉnh sửa các dòng trong ngữ cảnh với các dòng khác trong tệp.
Một phiên bản cải tiến của trình chỉnh sửa vi được gọi là VIMcũng đã được cung cấp ngay bây giờ. Ở đây, VIM là viết tắt củaVi IMđã chứng minh.
vi thường được coi là tiêu chuẩn thực tế trong các trình soạn thảo Unix vì -
Nó thường có sẵn trên tất cả các phiên bản của hệ thống Unix.
Các triển khai của nó rất giống nhau trên diện rộng.
Nó đòi hỏi rất ít tài nguyên.
Nó thân thiện với người dùng hơn các trình soạn thảo khác như ed hoặc là ex.
Bạn có thể dùng vitrình chỉnh sửa để chỉnh sửa tệp hiện có hoặc để tạo tệp mới từ đầu. Bạn cũng có thể sử dụng trình chỉnh sửa này để chỉ đọc một tệp văn bản.
Khởi động trình soạn thảo vi
Bảng sau liệt kê các lệnh cơ bản để sử dụng trình soạn thảo vi -
Sr.No. | Lệnh & Mô tả |
---|---|
1 | vi filename Tạo một tệp mới nếu nó chưa tồn tại, nếu không sẽ mở một tệp hiện có. |
2 | vi -R filename Mở tệp hiện có ở chế độ chỉ đọc. |
3 | view filename Mở tệp hiện có ở chế độ chỉ đọc. |
Sau đây là một ví dụ để tạo một tệp mới testfile nếu nó đã không tồn tại trong thư mục làm việc hiện tại -
$vi testfile
Lệnh trên sẽ tạo ra kết quả sau:
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
Bạn sẽ nhận thấy một tilde(~) trên mỗi dòng sau con trỏ. Dấu ngã thể hiện một dòng không sử dụng. Nếu một dòng không bắt đầu bằng dấu ngã và có vẻ như để trống, thì có một khoảng trắng, tab, dòng mới hoặc một số ký tự không thể xem khác hiện diện.
Bây giờ bạn có một tệp đang mở để bắt đầu làm việc. Trước khi tiếp tục, chúng ta hãy hiểu một vài khái niệm quan trọng.
Chế độ hoạt động
Trong khi làm việc với trình soạn thảo vi, chúng tôi thường gặp hai chế độ sau:
Command mode- Chế độ này cho phép bạn thực hiện các tác vụ quản trị như lưu tệp, thực hiện lệnh, di chuyển con trỏ, cắt (yanking) và dán các dòng hoặc từ, cũng như tìm và thay thế. Trong chế độ này, bất cứ điều gì bạn nhập đều được hiểu là lệnh.
Insert mode- Chế độ này cho phép bạn chèn văn bản vào tệp. Mọi thứ được nhập trong chế độ này được hiểu là đầu vào và được đặt trong tệp.
vi luôn bắt đầu trong command mode. Để nhập văn bản, bạn phải ở chế độ chèn mà chỉ cần nhậpi. Để thoát khỏi chế độ chèn, hãy nhấnEsc phím này sẽ đưa bạn trở lại chế độ lệnh.
Hint- Nếu bạn không chắc mình đang ở chế độ nào, hãy nhấn phím Esc hai lần; điều này sẽ đưa bạn đến chế độ lệnh. Bạn mở một tệp bằng trình chỉnh sửa vi. Bắt đầu bằng cách gõ một số ký tự và sau đó đến chế độ lệnh để hiểu sự khác biệt.
Thoát khỏi vi
Lệnh thoát khỏi vi là :q. Khi ở chế độ lệnh, hãy nhập dấu hai chấm và 'q', sau đó là quay lại. Nếu tệp của bạn đã được sửa đổi theo bất kỳ cách nào, trình chỉnh sửa sẽ cảnh báo bạn về điều này và không cho phép bạn thoát. Để bỏ qua thông báo này, lệnh thoát khỏi vi mà không lưu là:q!. Điều này cho phép bạn thoát khỏi vi mà không cần lưu bất kỳ thay đổi nào.
Lệnh lưu nội dung của trình soạn thảo là :w. Bạn có thể kết hợp lệnh trên với lệnh thoát hoặc sử dụng:wq và quay lại.
Cách dễ nhất để save your changes and exit vilà với lệnh ZZ. Khi bạn đang ở chế độ lệnh, hãy nhậpZZ. CácZZ lệnh hoạt động giống như lệnh :wq chỉ huy.
Nếu bạn muốn chỉ định / nêu bất kỳ tên cụ thể nào cho tệp, bạn có thể làm như vậy bằng cách chỉ định nó sau :w. Ví dụ: nếu bạn muốn lưu tệp bạn đang làm việc dưới dạng một tên tệp khác được gọi làfilename2, bạn sẽ gõ :w filename2 và quay lại.
Di chuyển trong tệp
Để di chuyển trong tệp mà không ảnh hưởng đến văn bản của bạn, bạn phải ở chế độ lệnh (nhấn Esc hai lần). Bảng sau liệt kê một số lệnh bạn có thể sử dụng để di chuyển xung quanh một ký tự tại một thời điểm:
Sr.No. | Lệnh & Mô tả |
---|---|
1 | k Di chuyển con trỏ lên một dòng |
2 | j Di chuyển con trỏ xuống một dòng |
3 | h Di chuyển con trỏ sang trái một ký tự vị trí |
4 | l Di chuyển con trỏ đến đúng vị trí một ký tự |
Các điểm sau cần được xem xét để di chuyển trong tệp:
vi có phân biệt chữ hoa chữ thường. Bạn cần chú ý viết hoa khi sử dụng các câu lệnh.
Hầu hết các lệnh trong vi có thể được bắt đầu bằng số lần bạn muốn hành động xảy ra. Ví dụ,2j di chuyển con trỏ hai dòng xuống vị trí con trỏ.
Có nhiều cách khác để di chuyển trong một tệp trong vi. Hãy nhớ rằng bạn phải ở chế độ lệnh (press Esc twice). Bảng sau liệt kê một số lệnh để di chuyển xung quanh tệp:
Sr.No. | Lệnh & Mô tả |
---|---|
1 | 0 or | Định vị con trỏ ở đầu dòng |
2 | $ Định vị con trỏ ở cuối dòng |
3 | w Định vị con trỏ đến từ tiếp theo |
4 | b Định vị con trỏ đến từ trước đó |
5 | ( Định vị con trỏ đến đầu câu hiện tại |
6 | ) Định vị con trỏ ở đầu câu tiếp theo |
7 | E Di chuyển đến cuối từ được phân cách trống |
số 8 | { Di chuyển lại một đoạn |
9 | } Di chuyển một đoạn về phía trước |
10 | [[ Di chuyển một phần trở lại |
11 | ]] Chuyển một phần về phía trước |
12 | n| Di chuyển đến cột n trong dòng hiện tại |
13 | 1G Di chuyển đến dòng đầu tiên của tệp |
14 | G Di chuyển đến dòng cuối cùng của tệp |
15 | nG Di chuyển đến nth dòng của tệp |
16 | :n Di chuyển đến nth dòng của tệp |
17 | fc Chuyển tới c |
18 | Fc Chuyển trở lại c |
19 | H Di chuyển lên đầu màn hình |
20 | nH Di chuyển đến nth dòng từ đầu màn hình |
21 | M Di chuyển đến giữa màn hình |
22 | L Di chuyển xuống cuối màn hình |
23 | nL Di chuyển đến nth dòng từ cuối màn hình |
24 | :x Dấu hai chấm theo sau là một số sẽ định vị con trỏ trên số dòng được đại diện bởi x |
Lệnh điều khiển
Các lệnh sau có thể được sử dụng với Phím điều khiển để thực hiện các chức năng như được cho trong bảng bên dưới:
Sr.No. | Lệnh & Mô tả |
---|---|
1 | CTRL+d Di chuyển về phía trước 1/2 màn hình |
2 | CTRL+f Chuyển về phía trước trên toàn màn hình |
3 | CTRL+u Di chuyển ngược 1/2 màn hình |
4 | CTRL+b Lùi lại toàn màn hình |
5 | CTRL+e Di chuyển màn hình lên một dòng |
6 | CTRL+y Di chuyển màn hình xuống một dòng |
7 | CTRL+u Di chuyển màn hình lên 1/2 trang |
số 8 | CTRL+d Di chuyển màn hình xuống 1/2 trang |
9 | CTRL+b Di chuyển màn hình lên một trang |
10 | CTRL+f Di chuyển màn hình xuống một trang |
11 | CTRL+I Vẽ lại màn hình |
Chỉnh sửa tệp
Để chỉnh sửa tệp, bạn cần ở chế độ chèn. Có nhiều cách để vào chế độ chèn từ chế độ lệnh -
Sr.No. | Lệnh & Mô tả |
---|---|
1 | i Chèn văn bản trước vị trí con trỏ hiện tại |
2 | I Chèn văn bản vào đầu dòng hiện tại |
3 | a Chèn văn bản sau vị trí con trỏ hiện tại |
4 | A Chèn văn bản vào cuối dòng hiện tại |
5 | o Tạo một dòng mới cho mục nhập văn bản bên dưới vị trí con trỏ |
6 | O Tạo một dòng mới cho mục nhập văn bản phía trên vị trí con trỏ |
Xóa ký tự
Đây là danh sách các lệnh quan trọng, có thể được sử dụng để xóa các ký tự và dòng trong một tệp đang mở -
Sr.No. | Lệnh & Mô tả |
---|---|
1 | x Xóa ký tự dưới vị trí con trỏ |
2 | X Xóa ký tự trước vị trí con trỏ |
3 | dw Xóa từ vị trí con trỏ hiện tại sang từ tiếp theo |
4 | d^ Xóa từ vị trí con trỏ hiện tại đến đầu dòng |
5 | d$ Xóa từ vị trí con trỏ hiện tại đến cuối dòng |
6 | D Xóa từ vị trí con trỏ đến cuối dòng hiện tại |
7 | dd Xóa dòng con trỏ đang bật |
Như đã đề cập ở trên, hầu hết các lệnh trong vi có thể được bắt đầu bằng số lần bạn muốn hành động xảy ra. Ví dụ,2x xóa hai ký tự dưới vị trí con trỏ và 2dd xóa hai dòng mà con trỏ đang bật.
Chúng tôi khuyên bạn nên thực hành các lệnh trước khi tiếp tục.
Thay đổi lệnh
Bạn cũng có khả năng thay đổi ký tự, từ hoặc dòng trong vi mà không cần xóa chúng. Dưới đây là các lệnh liên quan -
Sr.No. | Lệnh & Mô tả |
---|---|
1 | cc Xóa nội dung của dòng, để bạn ở chế độ chèn. |
2 | cw Thay đổi từ mà con trỏ đang bật từ con trỏ sang chữ thường w cuối từ. |
3 | r Thay thế ký tự dưới con trỏ. vi quay lại chế độ lệnh sau khi nhập thay thế. |
4 | R Ghi đè nhiều ký tự bắt đầu bằng ký tự hiện ở dưới con trỏ. Bạn phải dùngEsc để dừng việc ghi đè. |
5 | s Thay thế ký tự hiện tại bằng ký tự bạn nhập. Sau đó, bạn ở chế độ chèn. |
6 | S Xóa dòng mà con trỏ đang bật và thay thế nó bằng văn bản mới. Sau khi nhập văn bản mới, vi vẫn ở chế độ chèn. |
Sao chép và dán lệnh
Bạn có thể sao chép các dòng hoặc từ từ một nơi và sau đó bạn có thể dán chúng vào một nơi khác bằng các lệnh sau:
Sr.No. | Lệnh & Mô tả |
---|---|
1 | yy Sao chép dòng hiện tại. |
2 | yw Sao chép từ hiện tại từ ký tự mà con trỏ w viết thường đang bật cho đến cuối từ. |
3 | p Đặt văn bản đã sao chép sau con trỏ. |
4 | P Đặt văn bản được kéo căng trước con trỏ. |
Lệnh nâng cao
Có một số lệnh nâng cao giúp đơn giản hóa việc chỉnh sửa hàng ngày và cho phép sử dụng hiệu quả hơn vi -
Sr.No. | Lệnh & Mô tả |
---|---|
1 | J Nối dòng hiện tại với dòng tiếp theo. Một số lệnh j nối nhiều dòng. |
2 | << Dịch chuyển dòng hiện tại sang trái một độ rộng. |
3 | >> Dịch chuyển dòng hiện tại sang phải một độ rộng dịch chuyển. |
4 | ~ Chuyển đổi trường hợp của ký tự dưới con trỏ. |
5 | ^G Nhấn phím Ctrl và phím G cùng lúc để hiển thị tên tệp hiện tại và trạng thái. |
6 | U Khôi phục dòng hiện tại về trạng thái trước khi con trỏ nhập vào dòng. |
7 | u Điều này giúp hoàn tác thay đổi cuối cùng đã được thực hiện trong tệp. Nhập lại 'u' sẽ thực hiện lại thay đổi. |
số 8 | J Nối dòng hiện tại với dòng tiếp theo. Một số lượng nối với nhiều dòng đó. |
9 | :f Hiển thị vị trí hiện tại trong tệp theo% và tên tệp, tổng số tệp. |
10 | :f filename Đổi tên tệp hiện tại thành tên tệp. |
11 | :w filename Ghi vào tên tệp. |
12 | :e filename Mở tệp khác có tên tệp. |
13 | :cd dirname Thay đổi thư mục làm việc hiện tại thành dirname. |
14 | :e # Chuyển đổi giữa hai tệp đang mở. |
15 | :n Trong trường hợp bạn mở nhiều tệp bằng vi, hãy sử dụng :n để chuyển đến tệp tiếp theo trong chuỗi. |
16 | :p Trong trường hợp bạn mở nhiều tệp bằng vi, hãy sử dụng :p để chuyển đến tệp trước đó trong chuỗi. |
17 | :N Trong trường hợp bạn mở nhiều tệp bằng vi, hãy sử dụng :N để chuyển đến tệp trước đó trong chuỗi. |
18 | :r file Đọc tệp và chèn tệp sau dòng hiện tại. |
19 | :nr file Đọc tệp và chèn tệp sau dòng n. |
Tìm kiếm từ và ký tự
Trình chỉnh sửa vi có hai loại tìm kiếm: string và character. Đối với tìm kiếm chuỗi,/ và ?các lệnh được sử dụng. Khi bạn bắt đầu các lệnh này, lệnh vừa nhập sẽ được hiển thị trên dòng cuối cùng của màn hình, nơi bạn nhập chuỗi cụ thể cần tìm.
Hai lệnh này chỉ khác nhau về hướng thực hiện tìm kiếm -
Các / lệnh tìm kiếm chuyển tiếp (xuống dưới) trong tệp.
Các ? lệnh tìm kiếm ngược (lên trên) trong tệp.
Các n và Ncác lệnh lặp lại lệnh tìm kiếm trước đó theo hướng tương ứng hoặc ngược lại. Một số ký tự có ý nghĩa đặc biệt. Các ký tự này phải được đặt trước dấu gạch chéo ngược (\) được đưa vào như một phần của biểu thức tìm kiếm.
Sr.No. | Nhân vật & Mô tả |
---|---|
1 | ^ Tìm kiếm ở đầu dòng (Sử dụng ở đầu biểu thức tìm kiếm). |
2 | . Khớp một ký tự. |
3 | * Khớp với không hoặc nhiều ký tự trước đó. |
4 | $ Cuối dòng (Sử dụng ở cuối biểu thức tìm kiếm). |
5 | [ Bắt đầu một tập hợp các biểu thức phù hợp hoặc không khớp. |
6 | < Điều này được đặt trong một biểu thức thoát với dấu gạch chéo ngược để tìm phần cuối hoặc phần đầu của một từ. |
7 | > Điều này giúp xem '<'mô tả nhân vật ở trên. |
Tìm kiếm ký tự tìm kiếm trong một dòng để tìm ký tự được nhập sau lệnh. Cácf và F lệnh chỉ tìm kiếm một ký tự trên dòng hiện tại. f tìm kiếm chuyển tiếp và F tìm kiếm ngược và con trỏ di chuyển đến vị trí của ký tự được tìm thấy.
Các t và T lệnh chỉ tìm kiếm một ký tự trên dòng hiện tại, nhưng đối với t, con trỏ di chuyển đến vị trí trước ký tự và T tìm kiếm dòng ngược về vị trí sau ký tự.
Đặt lệnh
Bạn có thể thay đổi giao diện của màn hình vi bằng cách sau :setcác lệnh. Khi bạn ở chế độ lệnh, hãy nhập:set theo sau bởi bất kỳ lệnh nào sau đây.
Sr.No. | Lệnh & Mô tả |
---|---|
1 | :set ic Bỏ qua trường hợp khi tìm kiếm |
2 | :set ai Đặt tự động |
3 | :set noai Bỏ cài đặt tự động |
4 | :set nu Hiển thị các dòng có số dòng ở phía bên trái |
5 | :set sw Đặt chiều rộng của tab phần mềm. Ví dụ: bạn sẽ đặt độ rộng dịch chuyển là 4 bằng lệnh này::set sw = 4 |
6 | :set ws Nếu wrapscan được đặt và từ không được tìm thấy ở cuối tệp, nó sẽ thử tìm kiếm từ đầu |
7 | :set wm Nếu tùy chọn này có giá trị lớn hơn 0, trình soạn thảo sẽ tự động "bọc từ". Ví dụ: để đặt lề bao bọc thành hai ký tự, bạn sẽ nhập thế này::set wm = 2 |
số 8 | :set ro Thay đổi loại tệp thành "chỉ đọc" |
9 | :set term In loại thiết bị đầu cuối |
10 | :set bf Loại bỏ các ký tự điều khiển khỏi đầu vào |
Chạy lệnh
Vi có khả năng chạy các lệnh từ bên trong trình soạn thảo. Để chạy một lệnh, bạn chỉ cần vào chế độ lệnh và gõ:! chỉ huy.
Ví dụ: nếu bạn muốn kiểm tra xem tệp có tồn tại hay không trước khi cố gắng lưu tệp của mình với tên tệp đó, bạn có thể nhập :! ls và bạn sẽ thấy đầu ra của ls trên màn hình.
Bạn có thể nhấn bất kỳ phím nào (hoặc chuỗi thoát của lệnh) để quay lại phiên vi của bạn.
Thay thế Văn bản
Lệnh thay thế (:s/) cho phép bạn nhanh chóng thay thế các từ hoặc nhóm từ trong tệp của mình. Sau đây là cú pháp để thay thế văn bản:
:s/search/replace/g
Các gviết tắt của toàn cầu. Kết quả của lệnh này là tất cả các lần xuất hiện trên dòng của con trỏ đều bị thay đổi.
Những điểm quan trọng cần lưu ý
Những điểm sau đây sẽ giúp bạn thành công với vi -
Bạn phải ở chế độ lệnh để sử dụng các lệnh. (Nhấn Esc hai lần bất kỳ lúc nào để đảm bảo rằng bạn đang ở chế độ lệnh.)
Bạn phải cẩn thận với các lệnh. Chúng có phân biệt chữ hoa chữ thường.
Bạn phải ở chế độ chèn để nhập văn bản.
A Shellcung cấp cho bạn một giao diện với hệ thống Unix. Nó thu thập đầu vào từ bạn và thực thi các chương trình dựa trên đầu vào đó. Khi một chương trình kết thúc thực thi, nó sẽ hiển thị đầu ra của chương trình đó.
Shell là một môi trường mà chúng ta có thể chạy các lệnh, chương trình và kịch bản shell của mình. Có những hương vị khác nhau của một shell, cũng như có những hương vị khác nhau của các hệ điều hành. Mỗi hương vị của shell có một bộ lệnh và chức năng được công nhận riêng.
Shell Prompt
Lời nhắc, $, được gọi là command prompt, được cấp bởi shell. Trong khi lời nhắc được hiển thị, bạn có thể nhập lệnh.
Shell đọc đầu vào của bạn sau khi bạn nhấn Enter. Nó xác định lệnh bạn muốn thực thi bằng cách xem từ đầu tiên của đầu vào của bạn. Một từ là một tập hợp các ký tự không bị gián đoạn. Dấu cách và tab tách các từ.
Sau đây là một ví dụ đơn giản về date lệnh hiển thị ngày và giờ hiện tại -
$date
Thu Jun 25 08:30:19 MST 2009
Bạn có thể tùy chỉnh dấu 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 hướng dẫn Môi trường.
Các loại vỏ
Trong Unix, có hai loại shell chính:
Bourne shell - Nếu bạn đang sử dụng vỏ loại Bourne, $ ký tự là lời nhắc mặc định.
C shell - Nếu bạn đang sử dụng trình bao kiểu C, ký tự% là lời nhắc mặc định.
Bourne Shell có các danh mục phụ sau:
- Vỏ Bourne (sh)
- Korn shell (ksh)
- Bourne Again vỏ (bash)
- Vỏ POSIX (sh)
Các vỏ loại C khác nhau theo sau:
- C shell (csh)
- TENEX / TOPS C shell (tcsh)
Phần mềm Unix gốc được viết vào giữa những năm 1970 bởi Stephen R. Bourne khi ông đang làm việc tại AT&T Bell Labs ở New Jersey.
Bourne shell là shell đầu tiên xuất hiện trên hệ thống Unix, do đó nó được gọi là "shell".
Bourne shell thường được cài đặt như /bin/shtrên hầu hết các phiên bản của Unix. Vì lý do này, nó là shell được lựa chọn để viết script có thể được sử dụng trên các phiên bản Unix khác nhau.
Trong chương này, chúng tôi sẽ đề cập đến hầu hết các khái niệm Shell dựa trên Borne Shell.
Tập lệnh Shell
Khái niệm cơ bản của shell script là một danh sách các lệnh, được liệt kê theo thứ tự thực hiện. Một kịch bản shell tốt sẽ có các nhận xét, đứng trước# ký tên, mô tả các bước.
Có các bài kiểm tra có điều kiện, chẳng hạn như giá trị A lớn hơn giá trị B, các vòng lặp cho phép chúng tôi xem qua một lượng lớn dữ liệu, tệp để đọc và lưu trữ dữ liệu cũng như các biến để đọc và lưu trữ dữ liệu và tập lệnh có thể bao gồm các hàm.
Chúng tôi sẽ viết nhiều kịch bản trong các phần tiếp theo. Nó sẽ là một tệp văn bản đơn giản, trong đó chúng ta sẽ đặt tất cả các lệnh của mình và một số cấu trúc bắt buộc khác để cho môi trường shell biết phải làm gì và khi nào thì làm.
Các tập lệnh và chức năng của Shell đều được thông dịch. Điều này có nghĩa là chúng không được biên dịch.
Tập lệnh mẫu
Giả sử chúng tôi tạo ra một test.shkịch bản. Lưu ý rằng tất cả các tập lệnh sẽ có.shsự mở rộng. Trước khi thêm bất kỳ thứ gì khác vào tập lệnh của mình, bạn cần thông báo cho hệ thống rằng một tập lệnh shell đang được khởi động. Điều này được thực hiện bằng cách sử dụngshebangxây dựng. Ví dụ -
#!/bin/sh
Điều này cho hệ thống biết rằng các lệnh tiếp theo sẽ được thực thi bởi trình bao Bourne. Nó được gọi là shebang vì#biểu tượng được gọi là băm, và dấu! ký hiệu được gọi là tiếng nổ .
Để tạo một tập lệnh chứa các lệnh này, bạn đặt dòng shebang trước rồi thêm các lệnh -
#!/bin/bash
pwd
ls
Nhận xét Shell
Bạn có thể đưa nhận xét của mình vào kịch bản của mình như sau:
#!/bin/bash
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls
Lưu nội dung trên và làm cho tập lệnh có thể thực thi được -
$chmod +x test.sh
Tập lệnh shell hiện đã sẵn sàng để được thực thi -
$./test.sh
Khi thực hiện, bạn sẽ nhận được kết quả sau:
/home/amrood
index.htm unix-basic_utilities.htm unix-directories.htm
test.sh unix-communication.htm unix-environment.htm
Note - Để thực thi một chương trình có sẵn trong thư mục hiện tại, hãy sử dụng ./program_name
Tập lệnh Shell mở rộng
Các tập lệnh shell có một số cấu trúc bắt buộc cho biết môi trường shell phải làm gì và khi nào thì thực hiện. Tất nhiên, hầu hết các script phức tạp hơn script trên.
Sau cùng, shell là một ngôn ngữ lập trình thực sự, hoàn chỉnh với các biến, cấu trúc điều khiển, v.v. Cho dù kịch bản có phức tạp đến đâu, nó vẫn chỉ là một danh sách các lệnh được thực hiện tuần tự.
Tập lệnh sau sử dụng read lệnh lấy đầu vào từ bàn phím và gán nó làm giá trị của biến PERSON và cuối cùng in nó trên STDOUT.
#!/bin/sh
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
Đây là một đoạn chạy mẫu của tập lệnh -
$./test.sh What is your name? Zara Ali Hello, Zara Ali $
Trong chương này, chúng ta sẽ học cách sử dụng các biến Shell trong Unix. Một biến là một chuỗi ký tự mà 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 tệp, thiết bị hoặc bất kỳ loại dữ liệu nào khác.
Một biến không hơn gì một con trỏ đến dữ liệu thực tế. Trình bao cho phép bạn tạo, gán và xóa các biến.
Tên biến
Tên của một biến chỉ có thể chứa các chữ cái (a đến z hoặc A đến Z), số (0 đến 9) hoặc ký tự gạch dưới (_).
Theo quy ước, các biến trình bao Unix sẽ có tên trong UPPERCASE.
Các ví dụ sau đây là các tên biến hợp lệ -
_ALI
TOKEN_A
VAR_1
VAR_2
Sau đây là các ví dụ về tên biến không hợp lệ:
2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!
Lý do bạn không thể sử dụng các ký tự khác như !, *, hoặc là - là các ký tự này có ý nghĩa đặc biệt đối với shell.
Xác định các biến
Các biến được định nghĩa như sau:
variable_name=variable_value
Ví dụ -
NAME="Zara Ali"
Ví dụ trên xác định biến NAME và gán giá trị "Zara Ali" cho nó. Các biến loại này được gọi làscalar variables. Một biến vô hướng chỉ có thể chứa một giá trị tại một thời điểm.
Shell cho phép bạn lưu trữ bất kỳ giá trị nào bạn muốn trong một biến. Ví dụ -
VAR1="Zara Ali"
VAR2=100
Truy cập các giá trị
Để truy cập giá trị được lưu trữ trong một biến, hãy đặt tiền tố tên của nó bằng ký hiệu đô la ($) -
Ví dụ: tập lệnh sau sẽ truy cập giá trị của biến được xác định NAME và in nó trên STDOUT -
#!/bin/sh
NAME="Zara Ali"
echo $NAME
Tập lệnh trên sẽ tạo ra giá trị sau:
Zara Ali
Biến chỉ đọc
Shell cung cấp một cách để đánh dấu các biến là chỉ đọc bằng cách sử dụng lệnh chỉ đọc. Sau khi một biến được đánh dấu là chỉ đọc, giá trị của nó không thể thay đổi được.
Ví dụ: tập lệnh sau tạo ra lỗi khi cố gắng thay đổi giá trị của NAME -
#!/bin/sh
NAME="Zara Ali"
readonly NAME
NAME="Qadiri"
Tập lệnh trên sẽ tạo ra kết quả sau:
/bin/sh: NAME: This variable is read only.
Bỏ thiết lập các biến
Việc bỏ đặt hoặc xóa một biến sẽ hướng shell xóa biến đó khỏi danh sách các biến mà nó theo dõi. Khi bạn bỏ đặt một biến, bạn không thể truy cập giá trị được lưu trữ trong biến.
Sau đây là cú pháp để hủy đặt một biến đã xác định bằng cách sử dụng unset lệnh -
unset variable_name
Lệnh trên bỏ đặt giá trị của một biến đã xác định. Đây là một ví dụ đơn giản minh họa cách hoạt động của lệnh:
#!/bin/sh
NAME="Zara Ali"
unset NAME
echo $NAME
Ví dụ trên không in bất cứ thứ gì. Bạn không thể sử dụng lệnh unset đểunset các biến được đánh dấu readonly.
Các loại biến
Khi một trình bao đang chạy, có ba loại biến chính:
Local Variables- Biến cục bộ là một biến có trong phiên bản hiện tại của shell. Nó không có sẵn cho các chương trình được khởi động bởi shell. Chúng được đặt tại dấu nhắc lệnh.
Environment Variables- Một biến môi trường có sẵn cho bất kỳ tiến trình con nào của shell. Một số chương trình cần các biến môi trường để hoạt động chính xác. Thông thường, một tập lệnh shell chỉ định nghĩa những biến môi trường cần thiết cho các chương trình mà nó chạy.
Shell Variables- Một biến shell là một biến đặc biệt được đặt bởi shell và được shell yêu cầu để hoạt động chính xác. Một số biến trong số này là biến môi trường trong khi những biến khác là biến cục bộ.
Trong chương này, chúng ta sẽ thảo luận chi tiết về biến đặc biệt trong Unix. Trong một trong những chương trước của chúng tôi, chúng tôi đã hiểu cách cẩn thận khi chúng tôi sử dụng một số ký tự không và số trong tên biến. Điều này là do những ký tự đó được sử dụng trong tên của các biến Unix đặc biệt. Các biến này được dành riêng cho các chức năng cụ thể.
Ví dụ, $ ký tự đại diện cho số ID quy trình, hoặc PID, của trình bao hiện tại -
$echo $$
Lệnh trên ghi PID của shell hiện tại -
29949
Bảng sau đây hiển thị một số biến đặc biệt mà bạn có thể sử dụng trong các tập lệnh shell của mình:
Sr.No. | Biến & Mô tả |
---|---|
1 | $0 Tên tệp của tập lệnh hiện tại. |
2 | $n Các biến này tương ứng với các đối số mà một tập lệnh đã được gọi. Đâyn là một số thập phân dương tương ứng với vị trí của một đối số (đối số đầu tiên là $1, the second argument is $2, v.v.). |
3 | $# Số lượng đối số được cung cấp cho một tập lệnh. |
4 | $* Tất cả các đối số được trích dẫn kép. Nếu một tập lệnh nhận được hai đối số,$* is equivalent to $1 $ 2. |
5 | $@ Tất cả các đối số được trích dẫn kép riêng lẻ. Nếu một tập lệnh nhận được hai đối số,$@ is equivalent to $1 $ 2. |
6 | $? Trạng thái thoát của lệnh cuối cùng được thực thi. |
7 | $$ Số quá trình của trình bao hiện tại. Đối với các tập lệnh shell, đây là ID tiến trình mà chúng đang thực thi. |
số 8 | $! Số tiến trình của lệnh nền cuối cùng. |
Đối số dòng lệnh
Các đối số dòng lệnh $1, $2, $3, ...$9 là các tham số vị trí, với $0 pointing to the actual command, program, shell script, or function and $1, $2, $3, ... $ 9 làm đối số của lệnh.
Tập lệnh sau sử dụng các biến đặc biệt khác nhau liên quan đến 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 : $#"
Đây là một chạy mẫu cho tập lệnh trên -
$./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
Các thông số đặc biệt $* and $@
Có các tham số đặc biệt cho phép truy cập tất cả các đối số dòng lệnh cùng một lúc. $* và $@ cả hai sẽ hoạt động giống nhau trừ khi chúng được đặt trong dấu ngoặc kép, "".
Cả hai tham số chỉ định các đối số dòng lệnh. Tuy nhiên, "$*" special parameter takes the entire list as one argument with spaces between and the "$Tham số đặc biệt @ "nhận toàn bộ danh sách và tách nó thành các đối số riêng biệt.
Chúng ta có thể viết tập lệnh shell như được hiển thị bên dưới để xử lý một số lượng đối số dòng lệnh không xác định với $* or $@ thông số đặc biệt -
#!/bin/sh
for TOKEN in $* do echo $TOKEN
done
Đây là một chạy mẫu cho tập lệnh trên -
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
Note - Đây do...done là một loại vòng lặp sẽ được đề cập trong phần hướng dẫn tiếp theo.
Trạng thái thoát
Các $? biến đại diện cho trạng thái thoát của lệnh trước đó.
Trạng thái thoát là một giá trị số được trả về bởi mọi lệnh sau khi hoàn thành. Theo quy tắc, hầu hết các lệnh trả về trạng thái thoát 0 nếu chúng thành công và 1 nếu chúng không thành công.
Một số lệnh trả về trạng thái thoát bổ sung vì những lý do cụ thể. 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 khác nhau tùy thuộc vào loại lỗi cụ thể.
Sau đây là ví dụ về lệnh thành công:
$./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 $
Trong chương này, chúng ta sẽ thảo luận về cách sử dụng mảng shell trong Unix. Một biến shell có đủ khả năng để giữ một giá trị duy nhất. Các biến này được gọi là biến vô hướng.
Shell hỗ trợ một loại biến khác được gọi là array variable. Điều này có thể chứa nhiều giá trị cùng một lúc. Mảng cung cấp một phương pháp nhóm một tập hợp các biến. Thay vì tạo 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 duy nhất lưu trữ tất cả các biến khác.
Tất cả các quy tắc đặt tên được thảo luận cho Biến Shell sẽ có thể áp dụng trong khi đặt tên mảng.
Xác định giá trị mảng
Sự khác biệt giữa biến mảng và biến vô hướng có thể được giải thích như sau.
Giả sử bạn đang cố gắng biểu diễn tên của nhiều sinh viên khác nhau dưới dạng một tập hợp các biến. Mỗi biến riêng lẻ là một biến vô hướng như sau:
NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"
Chúng ta có thể sử dụng một mảng duy nhất để lưu trữ tất cả các tên được đề cập ở trên. Sau đây là phương pháp đơn giản nhất để tạo một biến mảng. Điều này giúp gán một giá trị cho một trong các chỉ số của nó.
array_name[index]=value
Ở đây array_name là tên của mảng, index là chỉ số của mục trong mảng mà bạn muốn đặt và value là giá trị bạn muốn đặt cho mục đó.
Ví dụ, các lệnh sau:
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
Nếu bạn đang sử dụng ksh shell, đây là cú pháp khởi tạo mảng -
set -A array_name value1 value2 ... valuen
Nếu bạn đang sử dụng bash shell, đây là cú pháp khởi tạo mảng -
array_name=(value1 ... valuen)
Truy cập giá trị mảng
Sau khi bạn đã đặt bất kỳ biến mảng nào, bạn truy cập vào nó như sau:
${array_name[index]}
Ở đây array_name là tên của mảng và index là chỉ số của giá trị được truy cập. Sau đây là một ví dụ để hiểu khái niệm -
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"
Ví dụ trên sẽ tạo ra kết quả sau:
$./test.sh
First Index: Zara
Second Index: Qadir
Bạn có thể truy cập tất cả các mục trong một mảng theo một trong những cách sau:
${array_name[*]} ${array_name[@]}
Đây array_name là tên của mảng mà bạn quan tâm. Ví dụ sau sẽ giúp bạn hiểu khái niệm -
#!/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[@]}"
Ví dụ trên sẽ tạo ra kết quả sau:
$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy
Có nhiều toán tử khác nhau được hỗ trợ bởi mỗi trình bao. Chúng ta sẽ thảo luận chi tiết về Bourne shell (shell mặc định) trong chương này.
Bây giờ chúng ta sẽ thảo luận về các toán tử sau:
- Toán tử số học
- Toán tử quan hệ
- Toán tử Boolean
- Toán tử chuỗi
- Người điều hành kiểm tra tệp
Bourne shell ban đầu không có bất kỳ cơ chế nào để thực hiện các phép tính số học đơn giản nhưng nó sử dụng các chương trình bên ngoài, awk hoặc là expr.
Ví dụ sau đây cho thấy cách cộng hai số:
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
Tập lệnh trên sẽ tạo ra kết quả sau:
Total value : 4
Các điểm sau đây cần được xem xét khi thêm:
Phải có khoảng trắng giữa các toán tử và biểu thức. Ví dụ, 2 + 2 là không đúng; nó nên được viết là 2 + 2.
Biểu thức hoàn chỉnh nên được đặt giữa ‘ ‘, được gọi là backtick.
Toán tử số học
Các toán tử số học sau được hỗ trợ bởi Bourne Shell.
Giả sử biến a giữ 10 và biến b giữ 20 sau đó -
Hiển thị các ví dụ
Nhà điều hành | Sự miêu tả | Thí dụ |
---|---|---|
+ (Bổ sung) | Thêm các giá trị ở hai bên của toán tử | `expr $a + $b` sẽ cho 30 |
- (Phép trừ) | Trừ toán hạng bên phải khỏi toán hạng bên trái | `expr $a - $b` sẽ cho -10 |
* (Phép nhân) | Nhân các giá trị ở hai bên của toán tử | `expr $a \* $b` sẽ cho 200 |
/ (Bộ phận) | Chia toán hạng bên trái cho toán hạng bên phải | `expr $b / $a` sẽ cho 2 |
% (Mô-đun) | Chia toán hạng bên trái cho toán hạng bên phải và trả về phần dư | `expr $b % $a` sẽ cho 0 |
= (Nhiệm vụ) | Gán toán hạng bên phải trong toán hạng bên trái | a = $ b sẽ gán giá trị của b thành a |
== (Bình đẳng) | So sánh hai số, nếu cả hai đều giống nhau thì trả về true. | [$ a == $ b] sẽ trả về false. |
! = (Không bình đẳng) | So sánh hai số, nếu cả hai khác nhau thì trả về true. | [$ a! = $ b] sẽ trả về true. |
Điều rất quan trọng là phải hiểu rằng tất cả các biểu thức điều kiện phải nằm trong dấu ngoặc vuông với khoảng trắng xung quanh chúng, ví dụ: [ $a == $b ] là đúng trong khi, [$a==$b] là không chính xác.
Tất cả các phép tính số học được thực hiện bằng cách sử dụng số nguyên dài.
Toán tử quan hệ
Bourne Shell hỗ trợ các toán tử quan hệ sau dành riêng cho các giá trị số. Các toán tử này không hoạt động đối với các giá trị chuỗi trừ khi giá trị của chúng là số.
Ví dụ, các toán tử sau sẽ hoạt động để kiểm tra mối quan hệ giữa 10 và 20 cũng như giữa "10" và "20" nhưng không nằm trong khoảng "mười" và "hai mươi".
Giả sử biến a giữ 10 và biến b giữ 20 sau đó -
Hiển thị các ví dụ
Nhà điều hành | Sự miêu tả | Thí dụ |
---|---|---|
-eq | Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không; nếu có, thì điều kiện trở thành đúng. | [$ a -eq $ b] không đúng. |
-ne | Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không; nếu các giá trị không bằng nhau, thì điều kiện trở thành true. | [$ a -ne $ b] là đúng. |
-gt | Kiểm tra xem giá trị của toán hạng bên trái có lớn hơn giá trị của toán hạng bên phải hay không; nếu có, thì điều kiện trở thành đúng. | [$ a -gt $ b] không đúng. |
-lt | Kiểm tra nếu giá trị của toán hạng bên trái nhỏ hơn giá trị của toán hạng bên phải; nếu có, thì điều kiện trở thành đúng. | [$ a -lt $ b] là true. |
-ge | Kiểm tra nếu giá trị của toán hạng bên trái lớn hơn hoặc bằng giá trị của toán hạng bên phải; nếu có, thì điều kiện trở thành đúng. | [$ a -ge $ b] không đúng. |
-le | Kiểm tra nếu giá trị của toán hạng bên trái nhỏ hơn hoặc bằng giá trị của toán hạng bên phải; nếu có, thì điều kiện trở thành đúng. | [$ a -le $ b] là true. |
Điều rất quan trọng là phải hiểu rằng tất cả các biểu thức điều kiện phải được đặt bên trong dấu ngoặc vuông với khoảng trắng xung quanh chúng. Ví dụ,[ $a <= $b ] là đúng trong khi, [$a <= $b] là không chính xác.
Toán tử Boolean
Các toán tử Boolean sau được Bourne Shell hỗ trợ.
Giả sử biến a giữ 10 và biến b giữ 20 sau đó -
Hiển thị các ví dụ
Nhà điều hành | Sự miêu tả | Thí dụ |
---|---|---|
! | Đây là sự phủ định hợp lý. Điều này biến một điều kiện đúng thành sai và ngược lại. | [! false] là true. |
-o | Điều này là hợp lý OR. Nếu một trong các toán hạng là true, thì điều kiện trở thành true. | [$ a -lt 20 -o $ b -gt 100] là đúng. |
-a | Điều này là hợp lý AND. Nếu cả hai toán hạng đều đúng, thì điều kiện trở thành đúng, ngược lại là sai. | [$ a -lt 20 -a $ b -gt 100] là sai. |
Toán tử chuỗi
Các toán tử chuỗi sau được Bourne Shell hỗ trợ.
Giả sử biến a giữ "abc" và biến b giữ "efg" rồi -
Hiển thị các ví dụ
Nhà điều hành | Sự miêu tả | Thí dụ |
---|---|---|
= | Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không; nếu có, thì điều kiện trở thành đúng. | [$ a = $ b] không đúng. |
!= | Kiểm tra xem giá trị của hai toán hạng có bằng nhau hay không; nếu các giá trị không bằng nhau thì điều kiện trở thành true. | [$ a! = $ b] là đúng. |
-z | Kiểm tra xem kích thước toán hạng chuỗi đã cho có bằng 0 hay không; nếu nó có độ dài bằng 0, thì nó trả về true. | [-z $ a] không đúng. |
-n | Kiểm tra xem kích thước toán hạng chuỗi đã cho có khác 0 không; nếu nó là độ dài khác không, thì nó trả về true. | [-n $ a] không sai. |
str | Kiểm tra nếu strkhông phải là chuỗi rỗng; nếu nó trống, thì nó trả về false. | [$ a] không sai. |
Người điều hành kiểm tra tệp
Chúng tôi có một số toán tử có thể được sử dụng để kiểm tra các thuộc tính khác nhau được liên kết với tệp Unix.
Giả sử một biến file giữ một tên tệp hiện có "kiểm tra" kích thước của nó là 100 byte và có read, write và execute sự cho phép trên -
Hiển thị các ví dụ
Nhà điều hành | Sự miêu tả | Thí dụ |
---|---|---|
-b file | Kiểm tra xem tệp có phải là tệp đặc biệt của khối không; nếu có, thì điều kiện trở thành đúng. | [-b $ file] là sai. |
-c file | Kiểm tra xem tệp có phải là tệp ký tự đặc biệt hay không; nếu có, thì điều kiện trở thành đúng. | [-c $ file] là sai. |
-d file | Kiểm tra xem tệp có phải là một thư mục hay không; nếu có, thì điều kiện trở thành đúng. | [-d $ file] không đúng. |
-f file | Kiểm tra xem tệp có phải là tệp thông thường hay không so với thư mục hoặc tệp đặc biệt; nếu có, thì điều kiện trở thành đúng. | [-f $ file] là true. |
-g file | Kiểm tra xem tệp có tập hợp bit ID nhóm (SGID) không; nếu có, thì điều kiện trở thành đúng. | [-g $ file] là sai. |
-k file | Kiểm tra xem tệp có tập hợp bit dính hay không; nếu có, thì điều kiện trở thành đúng. | [-k $ file] là sai. |
-p file | Kiểm tra xem tệp có phải là một đường ống được đặt tên hay không; nếu có, thì điều kiện trở thành đúng. | [-p $ file] là sai. |
-t file | Kiểm tra xem bộ mô tả tệp có đang mở và được liên kết với thiết bị đầu cuối hay không; nếu có, thì điều kiện trở thành đúng. | [-t $ file] là sai. |
-u file | Kiểm tra xem tệp có tập bit Set User ID (SUID) hay không; nếu có, thì điều kiện trở thành đúng. | [-u $ file] là sai. |
-r file | Kiểm tra xem tệp có thể đọc được hay không; nếu có, thì điều kiện trở thành đúng. | [-r $ file] là đúng. |
-w file | Kiểm tra xem tệp có thể ghi được không; nếu có, thì điều kiện trở thành đúng. | [-w $ file] là đúng. |
-x file | Kiểm tra xem tệp có thực thi được không; nếu có, thì điều kiện trở thành đúng. | [-x $ file] là true. |
-s file | Kiểm tra xem tệp có kích thước lớn hơn 0 hay không; nếu có, thì điều kiện trở thành đúng. | [-s $ file] là đúng. |
-e file | Kiểm tra nếu tệp tồn tại; là đúng ngay cả khi tệp là một thư mục nhưng tồn tại. | [-e $ file] là true. |
C Shell Operator
Liên kết sau sẽ cung cấp cho bạn một ý tưởng ngắn gọn về C Shell Operator -
C Shell Operator
Korn Shell Operator
Liên kết sau giúp bạn hiểu các toán tử Korn Shell -
Korn Shell Operator
Trong chương này, chúng ta sẽ hiểu về việc ra quyết định shell trong Unix. Trong khi viết kịch bản shell, có thể có một tình huống khi bạn cần sử dụng một đường dẫn trong số hai đường dẫn đã cho. Vì vậy, bạn cần sử dụng các câu lệnh điều kiện cho phép chương trình của bạn đưa ra quyết định chính xác và thực hiện các hành động đúng.
Unix Shell hỗ trợ các câu lệnh có điều kiện được sử dụng để thực hiện các hành động khác nhau dựa trên các điều kiện khác nhau. Bây giờ chúng ta sẽ hiểu hai tuyên bố ra quyết định ở đây -
Các if...else tuyên bố
Các case...esac tuyên bố
Câu lệnh if ... else
Các câu lệnh if else là các câu lệnh ra quyết định hữu ích có thể được sử dụng để chọn một tùy chọn từ một tập hợp các tùy chọn nhất định.
Unix Shell hỗ trợ các dạng sau: if…else tuyên bố -
- câu lệnh if ... fi
- câu lệnh if ... else ... fi
- câu lệnh if ... elif ... else ... fi
Hầu hết các câu lệnh if kiểm tra quan hệ bằng cách sử dụng các toán tử quan hệ đã được thảo luận trong chương trước.
Trường hợp ... Tuyên bố esac
Bạn có thể sử dụng nhiều if...elifcâu lệnh để thực hiện một nhánh multiway. Tuy nhiên, đây không phải lúc nào cũng là giải pháp tốt nhất, đặc biệt là khi tất cả các nhánh phụ thuộc vào giá trị của một biến duy nhất.
Unix Shell hỗ trợ case...esac câu lệnh xử lý chính xác tình huống này và nó hoạt động hiệu quả hơn là lặp lại if...elif các câu lệnh.
Chỉ có một hình thức case...esac tuyên bố đã được mô tả chi tiết ở đây -
- case ... câu lệnh esac
Các case...esac câu lệnh trong Unix shell rất giống với switch...case câu lệnh chúng tôi có trong các ngôn ngữ lập trình khác như C hoặc là C++ và PERL, Vân vân.
Trong chương này, chúng ta sẽ thảo luận về các vòng lặp shell trong Unix. Vòng lặp là một công cụ lập trình mạnh mẽ cho phép bạn thực hiện nhiều lần một nhóm lệnh. Trong chương này, chúng ta sẽ xem xét các loại vòng lặp sau có sẵn cho các lập trình viên shell:
- Vòng lặp while
- Vòng lặp for
- Vòng lặp cho đến khi
- Vòng lặp chọn
Bạn sẽ sử dụng các vòng lặp khác nhau dựa trên tình huống. Ví dụ,whilevòng lặp thực hiện các lệnh đã cho cho đến khi điều kiện đã cho vẫn đúng; cácuntil vòng lặp thực hiện cho đến khi một điều kiện nhất định trở thành đúng.
Một khi bạn có thực hành lập trình tốt, bạn sẽ có được kiến thức chuyên môn và do đó, bắt đầu sử dụng vòng lặp thích hợp dựa trên tình huống. Đây,while và for vòng lặp có sẵn trong hầu hết các ngôn ngữ lập trình khác như C, C++ và PERL, Vân vân.
Vòng lặp làm tổ
Tất cả các vòng lặp đều hỗ trợ khái niệm lồng nhau có nghĩa là bạn có thể đặt một vòng lặp bên trong một vòng lặp khác tương tự hoặc các vòng lặp khác nhau. Việc làm tổ này có thể lên đến số lần không giới hạn dựa trên yêu cầu của bạn.
Đây là một ví dụ về lồng whilevòng. Các vòng khác có thể được lồng vào nhau dựa trên yêu cầu lập trình theo cách tương tự:
Lồng trong khi vòng lặp
Có thể sử dụng vòng lặp while như một phần của phần thân của vòng lặp while khác.
Cú pháp
while command1 ; # this is loop1, the outer loop
do
Statement(s) to be executed if command1 is true
while command2 ; # this is loop2, the inner loop
do
Statement(s) to be executed if command2 is true
done
Statement(s) to be executed if command1 is true
done
Thí dụ
Đây là một ví dụ đơn giản về lồng vòng lặp. Hãy thêm một vòng lặp đếm ngược khác bên trong vòng lặp mà bạn đã từng đếm đến chín -
#!/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
Điều này sẽ tạo ra kết quả sau. Điều quan trọng cần lưu ý làecho -nhoạt động ở đây. Đây-n tùy chọn cho phép echo tránh in một ký tự dòng 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
Trong chương này, chúng ta sẽ thảo luận về điều khiển vòng lặp shell trong Unix. Cho đến nay, bạn đã xem xét việc tạo vòng lặp và làm việc với các vòng lặp để hoàn thành các nhiệm vụ khác nhau. Đôi khi bạn cần dừng một vòng lặp hoặc bỏ qua các lần lặp lại của vòng lặp.
Trong chương này, chúng ta sẽ tìm hiểu hai câu lệnh sau được sử dụng để điều khiển các vòng lặp
Các break tuyên bố
Các continue tuyên bố
Vòng lặp vô hạn
Tất cả các vòng lặp đều có tuổi thọ giới hạn và chúng xuất hiện khi điều kiện sai hoặc đúng tùy thuộc vào vòng lặp.
Một vòng lặp có thể tiếp tục mãi mãi nếu điều kiện bắt buộc không được đáp ứng. Vòng lặp thực thi mãi mãi mà không kết thúc thực thi trong một số lần vô hạn. Vì lý do này, các vòng lặp như vậy được gọi là vòng lặp vô hạn.
Thí dụ
Đây là một ví dụ đơn giản sử dụng while vòng lặp để hiển thị các số từ 0 đến 9 -
#!/bin/sh
a=10
until [ $a -lt 10 ] do echo $a
a=`expr $a + 1`
done
Vòng lặp này tiếp tục mãi mãi bởi vì a luôn luôn greater than hoặc là equal to 10 và nó không bao giờ nhỏ hơn 10.
Tuyên bố nghỉ
Các breakcâu lệnh được sử dụng để kết thúc việc thực thi toàn bộ vòng lặp, sau khi hoàn thành việc thực thi tất cả các dòng mã cho đến câu lệnh break. Sau đó, nó bước xuống mã sau khi kết thúc vòng lặp.
Cú pháp
Sau break câu lệnh được sử dụng để thoát ra khỏi vòng lặp -
break
Lệnh break cũng có thể được sử dụng để thoát khỏi vòng lặp lồng nhau bằng cách sử dụng định dạng này:
break n
Đây n chỉ định nth vòng lặp bao quanh lối ra từ.
Thí dụ
Đây là một ví dụ đơn giản cho thấy rằng vòng lặp kết thúc ngay sau khi a trở thành 5 -
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
Khi thực hiện, bạn sẽ nhận được kết quả sau:
0
1
2
3
4
5
Đây là một ví dụ đơn giản về vòng lặp for lồng nhau. Tập lệnh này thoát ra khỏi cả hai vòng lặp nếuvar1 equals 2 và var2 equals 0 -
#!/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
Khi thực hiện, bạn sẽ nhận được 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. Điều này chỉ ra rằng nếu một điều kiện được đáp ứng, bạn nên thoát ra khỏi vòng lặp ngoài và cuối cùng là từ vòng lặp bên trong.
1 0
1 5
Tuyên bố tiếp tục
Các continue tuyên bố tương tự như break , ngoại trừ việc nó làm cho quá trình lặp hiện tại của vòng lặp thoát ra, thay vì toàn bộ vòng lặp.
Câu lệnh này hữu ích khi có lỗi xảy ra nhưng bạn muốn thử thực hiện lần lặp tiếp theo của vòng lặp.
Cú pháp
continue
Giống như với câu lệnh break, một đối số nguyên có thể được cấp cho lệnh continue để bỏ qua các lệnh khỏi các vòng lặp lồng nhau.
continue n
Đây n chỉ định nth vòng lặp bao quanh để tiếp tục.
Thí dụ
Vòng lặp sau sử dụng continue câu lệnh trả về từ câu lệnh continue và bắt đầu xử lý câu lệnh tiếp theo -
#!/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
Khi thực hiện, bạn sẽ nhận được kết quả sau:
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
Thay thế là gì?
Shell thực hiện thay thế khi nó gặp một biểu thức có chứa một hoặc nhiều ký tự đặc biệt.
Thí dụ
Ở đây, giá trị in của biến được thay thế bằng giá trị của nó. Đồng thời,"\n" được thay thế bằng một dòng mới -
#!/bin/sh
a=10
echo -e "Value of a is $a \n"
Bạn sẽ nhận được kết quả sau. Đây-e tùy chọn cho phép giải thích các thoát dấu gạch chéo ngược.
Value of a is 10
Sau đây là kết quả mà không có -e tùy chọn -
Value of a is 10\n
Dưới đây là các chuỗi thoát sau có thể được sử dụng trong lệnh echo:
Sr.No. | Thoát & Mô tả |
---|---|
1 | \\ dấu gạch chéo ngược |
2 | \a cảnh báo (BEL) |
3 | \b xóa lùi |
4 | \c chặn dòng mới theo sau |
5 | \f thức ăn dạng |
6 | \n dòng mới |
7 | \r vận chuyển trở lại |
số 8 | \t Tab ngang |
9 | \v tab dọc |
Bạn có thể dùng -E tùy chọn để vô hiệu hóa việc giải thích các dấu gạch chéo ngược thoát ra (mặc định).
Bạn có thể dùng -n tùy chọn để vô hiệu hóa việc chèn một dòng mới.
Thay thế lệnh
Thay thế lệnh là cơ chế mà trình bao thực hiện một tập hợp các lệnh nhất định và sau đó thay thế đầu ra của chúng vào vị trí của các lệnh.
Cú pháp
Việc thay thế lệnh được thực hiện khi một lệnh được đưa ra dưới dạng:
`command`
Khi thực hiện thay thế lệnh, hãy đảm bảo rằng bạn sử dụng dấu ngoặc kép, không phải ký tự trích dẫn đơn lẻ.
Thí dụ
Thay thế lệnh thường được sử dụng để gán đầu ra của lệnh cho một biến. Mỗi ví dụ sau thể hiện sự thay thế lệnh:
#!/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"
Khi thực hiện, bạn sẽ nhận được kết quả sau:
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
Thay thế biến
Thay thế biến cho phép người lập trình shell thao tác giá trị của một biến dựa trên trạng thái của nó.
Đây là bảng sau đây cho tất cả các thay thế có thể -
Sr.No. | Biểu mẫu & Mô tả |
---|---|
1 | ${var} Thay thế giá trị của var . |
2 | ${var:-word} Nếu var là null hoặc không được đặt, thì từ được thay thế chovar. Giá trị của var không thay đổi. |
3 | ${var:=word} Nếu var là null hoặc không được đặt, var được đặt thành giá trị củaword. |
4 | ${var:?message} Nếu var là null hoặc không được đặt, thông báo sẽ được in thành lỗi chuẩn. Điều này kiểm tra xem các biến đã được đặt đúng chưa. |
5 | ${var:+word} Nếu var được đặt, từ được thay thế cho var. Giá trị của var không thay đổi. |
Thí dụ
Sau đây là ví dụ để hiển thị các trạng thái khác nhau của sự thay thế ở trên:
#!/bin/sh
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}" echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}" unset var echo ${var:+"This is default value"}
echo "3 - Value of var is $var" var="Prefix" echo ${var:+"This is default value"}
echo "4 - Value of var is $var" echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
Khi thực hiện, bạn sẽ nhận được 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
Trong chương này, chúng ta sẽ thảo luận chi tiết về các cơ chế trích dẫn Shell. Chúng ta sẽ bắt đầu bằng cách thảo luận về siêu nhân vật.
Siêu nhân vật
Unix Shell cung cấp các siêu ký tự khác nhau có ý nghĩa đặc biệt khi sử dụng chúng trong bất kỳ Tập lệnh Shell nào và gây ra sự kết thúc của một từ trừ khi được trích dẫn.
Ví dụ, ? khớp với một ký tự trong khi liệt kê các tệp trong thư mục và *khớp với nhiều ký tự. Đây là danh sách hầu hết các ký tự đặc biệt của shell (còn được gọi là siêu ký tự) -
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
Một ký tự có thể được trích dẫn (tức là, được tạo ra để thay thế cho chính nó) bằng cách đặt trước nó bằng một \.
Thí dụ
Ví dụ sau cho thấy cách in một * hoặc một ? -
#!/bin/sh
echo Hello; Word
Khi thực hiện, bạn sẽ nhận được kết quả sau:
Hello
./test.sh: line 2: Word: command not found
shell returned 127
Bây giờ chúng ta hãy thử sử dụng một ký tự được trích dẫn -
#!/bin/sh
echo Hello\; Word
Khi thực hiện, bạn sẽ nhận được kết quả sau:
Hello; Word
Các $ dấu hiệu là một trong những ký tự siêu, vì vậy nó phải được trích dẫn để tránh xử lý đặc biệt bởi shell -
#!/bin/sh
echo "I have \$1200"
Khi thực hiện, bạn sẽ nhận được kết quả sau:
I have $1200
Bảng sau liệt kê bốn hình thức trích dẫn:
Sr.No. | Trích dẫn & Mô tả |
---|---|
1 | Single quote Tất cả các ký tự đặc biệt giữa các dấu ngoặc kép này sẽ mất đi ý nghĩa đặc biệt của chúng. |
2 | Double quote Hầu hết các ký tự đặc biệt giữa các dấu ngoặc kép này đều mất đi ý nghĩa đặc biệt với những ngoại lệ này -
|
3 | Backslash Bất kỳ ký tự nào ngay sau dấu gạch chéo ngược sẽ mất đi ý nghĩa đặc biệt của nó. |
4 | Back quote Bất cứ điều gì ở giữa các dấu ngoặc kép sẽ được coi là một lệnh và sẽ được thực thi. |
Báo giá đơn
Hãy xem xét một lệnh echo có chứa nhiều ký tự shell đặc biệt -
echo <-$1500.**>; (update?) [y|n]
Đặt dấu gạch chéo ngược trước mỗi ký tự đặc biệt thật tẻ nhạt và làm cho dòng khó đọc -
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
Có một cách dễ dàng để trích dẫn một nhóm lớn các ký tự. Đặt một dấu nháy đơn (') ở đầu và cuối chuỗi -
echo '<-$1500.**>; (update?) [y|n]'
Các ký tự trong dấu ngoặc kép được trích dẫn giống như khi có dấu gạch chéo ngược phía trước mỗi ký tự. Với điều này, lệnh echo sẽ hiển thị theo cách thích hợp.
Nếu một dấu nháy đơn xuất hiện trong một chuỗi được xuất ra, bạn không nên đặt toàn bộ chuỗi trong dấu nháy đơn, thay vào đó bạn nên đặt trước bằng cách sử dụng dấu gạch chéo ngược (\) như sau:
echo 'It\'s Shell Programming
Dấu ngoặc kép
Cố gắng thực thi tập lệnh shell sau. Tập lệnh shell này sử dụng một trích dẫn duy nhất -
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
Khi thực hiện, bạn sẽ nhận được kết quả sau:
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
Đây không phải là những gì phải được hiển thị. Rõ ràng là các dấu ngoặc kép ngăn cản sự thay thế biến. Nếu bạn muốn thay thế các giá trị của biến và để dấu phẩy ngược hoạt động như mong đợi, thì bạn cần đặt các lệnh của mình trong dấu ngoặc kép như sau:
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
Khi thực hiện, bạn sẽ nhận được kết quả sau:
ZARA owes <-$1500.**>; [ as of (07/02) ]
Dấu ngoặc kép lấy đi ý nghĩa đặc biệt của tất cả các ký tự ngoại trừ những ký tự sau:
$ để thay thế tham số
Dấu ngoặc kép để thay thế lệnh
\$ để kích hoạt ký hiệu đô la theo nghĩa đen
\` để kích hoạt dấu ngoặc kép theo nghĩa đen
\" để bật dấu ngoặc kép được nhúng
\\ để bật dấu gạch chéo ngược được nhúng
Tất cả những thứ khác \ các ký tự là chữ (không đặc biệt)
Các ký tự trong dấu ngoặc kép được trích dẫn giống như khi có dấu gạch chéo ngược phía trước mỗi ký tự. Điều này giúp lệnh echo hiển thị đúng.
Nếu một dấu nháy đơn xuất hiện trong một chuỗi được xuất ra, bạn không nên đặt toàn bộ chuỗi trong dấu nháy đơn, thay vào đó bạn nên đặt trước bằng cách sử dụng dấu gạch chéo ngược (\) như sau:
echo 'It\'s Shell Programming'
Các báo sau
Đặt bất kỳ lệnh Shell nào ở giữa backquotes thực hiện lệnh.
Cú pháp
Đây là cú pháp đơn giản để đặt bất kỳ Shell nào command ở giữa các dấu ngoặc kép -
var=`command`
Thí dụ
Các date lệnh được thực thi trong ví dụ sau và kết quả được tạo ra được lưu trữ trong biến DATA.
DATE=`date`
echo "Current Date: $DATE"
Khi thực hiện, bạn sẽ nhận được kết quả sau:
Current Date: Thu Jul 2 05:28:45 MST 2009
Trong chương này, chúng ta sẽ thảo luận chi tiết về chuyển hướng đầu vào / đầu ra của Shell. Hầu hết các lệnh hệ thống Unix lấy đầu vào từ thiết bị đầu cuối của bạn và gửi kết quả đầu ra trở lại thiết bị đầu cuối của bạn. Một lệnh thường đọc đầu vào của nó từ đầu vào chuẩn, đây sẽ là thiết bị đầu cuối của bạn theo mặc định. Tương tự, một lệnh thường ghi đầu ra của nó thành đầu ra tiêu chuẩn, theo mặc định, lệnh này lại là thiết bị đầu cuối của bạn.
Chuyển hướng đầu ra
Thay vào đó, đầu ra từ một lệnh thường dành cho đầu ra tiêu chuẩn có thể dễ dàng chuyển hướng sang một tệp. Khả năng này được gọi là chuyển hướng đầu ra.
Nếu ký hiệu> tệp được nối vào bất kỳ lệnh nào thường ghi đầu ra của nó vào đầu ra chuẩn, đầu ra của lệnh đó sẽ được ghi vào tệp thay vì thiết bị đầu cuối của bạn.
Kiểm tra lượt theo dõi who lệnh chuyển hướng đầu ra hoàn chỉnh của lệnh trong tệp người dùng.
$ who > users
Chú ý rằng không có đầu ra nào xuất hiện ở đầu cuối. Điều này là do đầu ra đã được chuyển hướng từ thiết bị đầu ra tiêu chuẩn mặc định (thiết bị đầu cuối) thành tệp được chỉ định. Bạn có thể kiểm tra tệp người dùng để biết nội dung hoàn chỉnh -
$ 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
$
Nếu một lệnh có đầu ra của nó được chuyển hướng đến một tệp và tệp đã chứa một số dữ liệu, dữ liệu đó sẽ bị mất. Hãy xem xét ví dụ sau:
$ echo line 1 > users
$ cat users line 1 $
Bạn có thể sử dụng toán tử >> để nối đầu ra trong tệp hiện có như sau:
$ echo line 2 >> users $ cat users
line 1
line 2
$
Chuyển hướng đầu vào
Giống như đầu ra của một lệnh có thể được chuyển hướng đến một tệp, thì đầu vào của lệnh có thể được chuyển hướng từ tệp. Nhưgreater-than character > được sử dụng để chuyển hướng đầu ra, less-than character < được sử dụng để chuyển hướng đầu vào của một lệnh.
Các lệnh thường lấy đầu vào của chúng từ đầu vào tiêu chuẩn có thể chuyển hướng đầu vào của chúng từ tệp theo cách này. Ví dụ, để đếm số dòng trong tệp người dùng đã tạo ở trên, bạn có thể thực hiện lệnh như sau:
$ wc -l users
2 users
$
Sau khi thực hiện, bạn sẽ nhận được kết quả sau. Bạn có thể đếm số dòng trong tệp bằng cách chuyển hướng đầu vào chuẩn củawclệnh từ người dùng tệp -
$ wc -l < users
2
$
Lưu ý rằng có sự khác biệt trong kết quả được tạo ra bởi hai dạng của lệnh wc. Trong trường hợp đầu tiên, tên của người dùng tệp được liệt kê với số dòng; trong trường hợp thứ hai, nó không phải là.
Trong trường hợp đầu tiên, wc biết rằng nó đang đọc đầu vào của nó từ người dùng tệp. Trong trường hợp thứ hai, nó chỉ biết rằng nó đang đọc đầu vào của nó từ đầu vào chuẩn nên nó không hiển thị tên tệp.
Tài liệu đây
A here document được sử dụng để chuyển hướng đầu vào thành một chương trình hoặc tập lệnh shell tương tác.
Chúng ta có thể chạy một chương trình tương tác trong tập lệnh shell mà không cần người dùng thực hiện bằng cách cung cấp đầu vào cần thiết cho chương trình tương tác, hoặc tập lệnh shell tương tác.
Hình thức chung cho một here tài liệu là -
command << delimiter
document
delimiter
Ở đây shell diễn giải <<toán tử như một lệnh để đọc đầu vào cho đến khi nó tìm thấy một dòng chứa dấu phân cách được chỉ định. Tất cả các dòng đầu vào cho đến dòng chứa dấu phân cách sau đó được đưa vào đầu vào chuẩn của lệnh.
Dấu phân cách cho shell biết rằng heretài liệu đã hoàn thành. Nếu không có nó, trình bao tiếp tục đọc đầu vào mãi mãi. Dấu phân cách phải là một từ duy nhất không chứa dấu cách hoặc tab.
Sau đây là đầu vào cho lệnh wc -l để đếm tổng số dòng -
$wc -l << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
3
$
Bạn có thể dùng here document để in nhiều dòng bằng tập lệnh của bạn như sau:
#!/bin/sh
cat << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
Khi thực hiện, bạn sẽ nhận được kết quả sau:
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
Tập lệnh sau chạy một phiên với vi trình soạn thảo văn bản và lưu đầu vào trong tệp test.txt.
#!/bin/sh
filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands
Nếu bạn chạy tập lệnh này với vim hoạt động như vi, thì bạn có thể sẽ thấy đầu ra như sau:
$ sh test.sh Vim: Warning: Input is not from a terminal $
Sau khi chạy tập lệnh, bạn sẽ thấy phần sau được thêm vào tệp test.txt -
$ cat test.txt This file was created automatically from a shell script $
Loại bỏ đầu ra
Đôi khi bạn sẽ cần thực hiện một lệnh, nhưng bạn không muốn kết quả hiển thị trên màn hình. Trong những trường hợp như vậy, bạn có thể hủy đầu ra bằng cách chuyển hướng nó đến tệp/dev/null -
$ command > /dev/null
Đây là tên của lệnh bạn muốn thực hiện. Tập tin/dev/null là một tệp đặc biệt tự động loại bỏ tất cả đầu vào của nó.
Để loại bỏ cả đầu ra của một lệnh và đầu ra lỗi của nó, hãy sử dụng chuyển hướng tiêu chuẩn để chuyển hướng STDERR đến STDOUT -
$ command > /dev/null 2>&1
Đây 2 đại diện STDERR và 1 đại diện STDOUT. Bạn có thể hiển thị thông báo trên STDERR bằng cách chuyển hướng STDOUT thành STDERR như sau:
$ echo message 1>&2
Lệnh chuyển hướng
Sau đây là danh sách đầy đủ các lệnh mà bạn có thể sử dụng để chuyển hướng:
Sr.No. | Lệnh & Mô tả |
---|---|
1 | pgm > file Đầu ra của pgm được chuyển hướng đến tệp |
2 | pgm < file Chương trình pgm đọc đầu vào của nó từ tệp |
3 | pgm >> file Đầu ra của pgm được nối vào tệp |
4 | n > file Đầu ra từ luồng với bộ mô tả n chuyển hướng đến tệp |
5 | n >> file Đầu ra từ luồng với bộ mô tả n thêm vào tệp |
6 | n >& m Hợp nhất đầu ra từ luồng n với dòng m |
7 | n <& m Hợp nhất đầu vào từ luồng n với dòng m |
số 8 | << tag Đầu vào chuẩn đến từ đây thông qua thẻ tiếp theo ở đầu dòng |
9 | | Lấy đầu ra từ một chương trình hoặc quá trình và gửi nó đến một chương trình khác |
Lưu ý rằng bộ mô tả tệp 0 thường là đầu vào tiêu chuẩn (STDIN), 1 là đầu ra tiêu chuẩn (STDOUT), và 2 là đầu ra lỗi tiêu chuẩn (STDERR).
Trong chương này, chúng ta sẽ thảo luận chi tiết về các hàm của shell. Các chức năng cho phép bạn chia chức năng tổng thể của một tập lệnh thành các tiểu mục nhỏ hơn, hợp lý, sau đó có thể được gọi để thực hiện các nhiệm vụ riêng lẻ của chúng khi cần thiết.
Sử dụng các hàm để thực hiện các tác vụ lặp đi lặp lại là một cách tuyệt vời để tạo code reuse. Đây là một phần quan trọng của các nguyên tắc lập trình hướng đối tượng hiện đại.
Các hàm Shell tương tự như các chương trình con, thủ tục và hàm trong các ngôn ngữ lập trình khác.
Tạo các chức năng
Để khai báo một hàm, chỉ cần sử dụng cú pháp sau:
function_name () {
list of commands
}
Tên chức năng của bạn là function_namevà đó là những gì bạn sẽ sử dụng để gọi nó từ nơi khác trong tập lệnh của mình. Tên hàm phải được đặt sau dấu ngoặc đơn, theo sau là danh sách các lệnh nằm trong dấu ngoặc nhọn.
Thí dụ
Ví dụ sau đây cho thấy việc sử dụng hàm:
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World"
}
# Invoke your function
Hello
Khi thực hiện, bạn sẽ nhận được kết quả sau:
$./test.sh
Hello World
Chuyển các tham số cho một hàm
Bạn có thể xác định một hàm sẽ chấp nhận các tham số trong khi gọi hàm. Các thông số này sẽ được đại diện bởi$1, $2 và như thế.
Dưới đây là một ví dụ mà chúng ta truyền hai tham số Zara và Ali , sau đó chúng ta chụp 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
Khi thực hiện, bạn sẽ nhận được kết quả sau:
$./test.sh
Hello World Zara Ali
Trả lại giá trị từ các hàm
Nếu bạn thực hiện một exit lệnh từ bên trong một hàm, tác dụng của nó không chỉ là chấm dứt việc thực thi hàm mà còn đối với chương trình shell được gọi là hàm.
Thay vào đó, nếu bạn chỉ muốn chấm dứt việc thực thi hàm, thì có cách để thoát ra khỏi một hàm đã xác định.
Dựa trên tình huống, bạn có thể trả về bất kỳ giá trị nào từ hàm của mình bằng cách sử dụng return lệnh có cú pháp như sau:
return code
Đây code có thể là bất kỳ thứ gì bạn chọn ở đây, nhưng rõ ràng bạn nên chọn thứ gì đó có ý nghĩa hoặc hữu ích trong bối cảnh toàn bộ tập lệnh của bạn.
Thí dụ
Hàm sau trả về giá trị 10 -
#!/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"
Khi thực hiện, bạn sẽ nhận được kết quả sau:
$./test.sh
Hello World Zara Ali
Return value is 10
Các hàm lồng nhau
Một trong những tính năng thú vị hơn của các hàm là chúng có thể tự gọi chúng và cả các hàm khác. Một hàm gọi chính nó được gọi làrecursive function.
Ví dụ sau minh họa việc lồng hai hàm:
#!/bin/sh
# Calling one function from another
number_one () {
echo "This is the first function speaking..."
number_two
}
number_two () {
echo "This is now the second function speaking..."
}
# Calling function one.
number_one
Khi thực hiện, bạn sẽ nhận được kết quả sau:
This is the first function speaking...
This is now the second function speaking...
Chức năng gọi từ lời nhắc
Bạn có thể đặt các định nghĩa cho các hàm thường được sử dụng bên trong .profile. Các định nghĩa này sẽ có sẵn bất cứ khi nào bạn đăng nhập và bạn có thể sử dụng chúng tại dấu nhắc lệnh.
Ngoài ra, bạn có thể nhóm các định nghĩa trong một tệp, chẳng hạn test.sh, và sau đó thực thi tệp trong trình bao hiện tại bằng cách nhập -
$. test.sh
Điều này có tác dụng gây ra các chức năng được xác định bên trong test.sh được đọc và xác định với shell hiện tại như sau:
$ number_one
This is the first function speaking...
This is now the second function speaking...
$
Để xóa định nghĩa của một hàm khỏi shell, hãy sử dụng lệnh unset với .fLựa chọn. Lệnh này cũng được sử dụng để loại bỏ định nghĩa của một biến đối với trình bao.
$ unset -f function_name
Tất cả các lệnh Unix đi kèm với một số tùy chọn bắt buộc và tùy chọn. Việc quên cú pháp hoàn chỉnh của các lệnh này là rất phổ biến.
Bởi vì không ai có thể nhớ mọi lệnh Unix và tất cả các tùy chọn của nó, chúng tôi có sẵn trợ giúp trực tuyến để giảm thiểu điều này ngay từ khi Unix còn ở giai đoạn phát triển.
Phiên bản Unix của Help files được gọi là man pages. Nếu có một tên lệnh và bạn không chắc chắn về cách sử dụng nó, thì Man Pages sẽ giúp bạn thực hiện từng bước.
Cú pháp
Đây là lệnh đơn giản giúp bạn có được chi tiết của bất kỳ lệnh Unix nào trong khi làm việc với hệ thống -
$man command
Thí dụ
Giả sử có một lệnh yêu cầu bạn nhận trợ giúp; giả sử rằng bạn muốn biết vềpwd thì bạn chỉ cần sử dụng lệnh sau:
$man pwd
Lệnh trên giúp bạn cung cấp thông tin đầy đủ về pwdchỉ huy. Hãy tự mình thử nó tại dấu nhắc lệnh của bạn để biết thêm chi tiết.
Bạn có thể nhận được đầy đủ chi tiết về man tự lệnh bằng cách sử dụng lệnh sau:
$man man
Phần Trang Người đàn ông
Trang người đàn ông thường được chia thành các phần, thường khác nhau tùy theo sở thích của tác giả trang người đàn ông. Bảng sau liệt kê một số phần phổ biến:
Sr.No. | Phần & Mô tả |
---|---|
1 | NAME Tên của lệnh |
2 | SYNOPSIS Các tham số sử dụng chung của lệnh |
3 | DESCRIPTION Mô tả chức năng của lệnh |
4 | OPTIONS Mô tả tất cả các đối số hoặc tùy chọn cho lệnh |
5 | SEE ALSO Liệt kê các lệnh khác có liên quan trực tiếp đến lệnh trong man page hoặc gần giống với chức năng của nó |
6 | BUGS Giải thích bất kỳ sự cố hoặc lỗi đã biết nào tồn tại với lệnh hoặc đầu ra của nó |
7 | EXAMPLES Các ví dụ sử dụng phổ biến cung cấp cho người đọc ý tưởng về cách có thể sử dụng lệnh |
số 8 | AUTHORS Tác giả của trang / lệnh người đàn ông |
Tóm lại, các trang nam là một nguồn tài nguyên quan trọng và là con đường nghiên cứu đầu tiên khi bạn cần thông tin về các lệnh hoặc tệp trong hệ thống Unix.
Lệnh Shell hữu ích
Liên kết sau cung cấp cho bạn danh sách các lệnh Unix Shell quan trọng nhất và được sử dụng rất thường xuyên.
Nếu bạn không biết cách sử dụng bất kỳ lệnh nào, hãy sử dụng man page để biết chi tiết đầy đủ về lệnh.
Đây là danh sách Unix Shell - Các lệnh hữu ích
Trong chương này, chúng ta sẽ thảo luận chi tiết về các biểu thức chính quy với SED trong Unix.
Biểu thức chính quy là một chuỗi có thể được sử dụng để mô tả một số chuỗi ký tự. Biểu thức chính quy được sử dụng bởi một số lệnh Unix khác nhau, bao gồmed, sed, awk, grepvà ở một mức độ hạn chế hơn, vi.
Đây SED viết tắt của stream editor. Trình chỉnh sửa hướng luồng này được tạo riêng để thực thi các tập lệnh. Do đó, tất cả dữ liệu đầu vào bạn cấp vào nó sẽ đi qua và chuyển đến STDOUT và nó không thay đổi tệp đầu vào.
Mời sed
Trước khi bắt đầu, hãy đảm bảo rằng chúng tôi có một bản sao cục bộ của /etc/passwd tập tin văn bản để làm việc với sed.
Như đã đề cập trước đây, sed có thể được gọi bằng cách gửi dữ liệu thông qua một đường ống đến nó như sau:
$ 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
...............................
Các cat lệnh kết xuất nội dung của /etc/passwd đến sedthông qua đường ống vào không gian mẫu của sed. Không gian mẫu là vùng đệm công việc bên trong mà sed sử dụng cho các hoạt động của nó.
Cú pháp chung sed
Sau đây là cú pháp chung cho sed -
/pattern/action
Đây, pattern là một biểu thức chính quy và actionlà một trong các lệnh được đưa ra trong bảng sau. Nếupattern bị bỏ qua, action được thực hiện cho mọi dòng như chúng ta đã thấy ở trên.
Ký tự gạch chéo (/) bao quanh mẫu là bắt buộc vì chúng được sử dụng làm dấu phân cách.
Sr.No. | Phạm vi & Mô tả |
---|---|
1 | p In dòng |
2 | d Xóa dòng |
3 | s/pattern1/pattern2/ Thay thế lần xuất hiện đầu tiên của mẫu1 bằng mẫu2 |
Xóa tất cả các dòng với sed
Bây giờ chúng ta sẽ hiểu cách xóa tất cả các dòng bằng sed. Gọi lại sed; nhưng chiếc sedan bây giờ được cho là sử dụngediting command delete line, được biểu thị bằng một chữ cái d -
$ cat /etc/passwd | sed 'd' $
Thay vì gọi sed bằng cách gửi một tệp đến nó thông qua một đường ống, sed có thể được hướng dẫn để đọc dữ liệu từ một tệp, như trong ví dụ sau.
Lệnh sau thực hiện hoàn toàn giống như trong ví dụ trước, không có lệnh cat -
$ sed -e 'd' /etc/passwd $
Địa chỉ sed
Sed cũng hỗ trợ địa chỉ. Địa chỉ là các vị trí cụ thể trong một tệp hoặc một phạm vi nơi một lệnh chỉnh sửa cụ thể sẽ được áp dụng. Khi sed gặp không có địa chỉ, nó thực hiện các hoạt động của nó trên mọi dòng trong tệp.
Lệnh sau thêm một địa chỉ cơ bản vào lệnh sed mà bạn đang sử dụng:
$ 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 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 $
Lưu ý rằng số 1 được thêm vào trước delete editchỉ huy. Điều này hướng dẫn sed thực hiện lệnh chỉnh sửa trên dòng đầu tiên của tệp. Trong ví dụ này, sed sẽ xóa dòng đầu tiên của/etc/password và in phần còn lại của tệp.
Dãy địa chỉ sed
Bây giờ chúng ta sẽ hiểu cách làm việc với the sed address ranges. Vì vậy, nếu bạn muốn xóa nhiều hơn một dòng khỏi một tệp thì sao? Bạn có thể chỉ định một dải địa chỉ với sed như sau:
$ 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 $
Lệnh trên sẽ được áp dụng trên tất cả các dòng bắt đầu từ 1 đến 5. Thao tác này sẽ xóa năm dòng đầu tiên.
Hãy thử các dải địa chỉ sau:
Sr.No. | Phạm vi & Mô tả |
---|---|
1 | '4,10d' Dòng bắt đầu từ 4 tháng đến 10 tháng được xóa |
2 | '10,4d' Chỉ có dòng thứ 10 bị xóa, vì sed không hoạt động theo hướng ngược lại |
3 | '4,+5d' Điều này khớp với dòng 4 trong tệp, xóa dòng đó, tiếp tục xóa năm dòng tiếp theo, sau đó ngừng xóa và in phần còn lại |
4 | '2,5!d' Thao tác này sẽ xóa mọi thứ ngoại trừ bắt đầu từ dòng thứ 2 đến dòng thứ 5 |
5 | '1~3d' Thao tác này sẽ xóa dòng đầu tiên, bước qua ba dòng tiếp theo và sau đó xóa dòng thứ tư. Sed tiếp tục áp dụng mẫu này cho đến khi kết thúc tệp. |
6 | '2~2d' Điều này yêu cầu sed xóa dòng thứ hai, bước qua dòng tiếp theo, xóa dòng tiếp theo và lặp lại cho đến khi đạt đến cuối tệp |
7 | '4,10p' Dòng bắt đầu từ 4 tháng đến 10 tháng được in |
số 8 | '4,d' Điều này tạo ra lỗi cú pháp |
9 | ',10d' Điều này cũng sẽ tạo ra lỗi cú pháp |
Note - Trong khi sử dụng p hành động, bạn nên sử dụng -ntùy chọn để tránh lặp lại việc in dòng. Kiểm tra sự khác biệt giữa hai lệnh sau:
$ cat /etc/passwd | sed -n '1,3p' Check the above command without -n as follows − $ cat /etc/passwd | sed '1,3p'
Lệnh thay người
Lệnh thay thế, ký hiệu là s, sẽ thay thế bất kỳ chuỗi nào bạn chỉ định bằng bất kỳ chuỗi nào khác mà bạn chỉ định.
Để thay thế một chuỗi này bằng một chuỗi khác, sed cần có thông tin về nơi chuỗi đầu tiên kết thúc và chuỗi thay thế bắt đầu. Đối với điều này, chúng tôi tiến hành liên kết hai chuỗi bằng dấu gạch chéo (/) tính cách.
Lệnh sau thay thế lần xuất hiện đầu tiên trên một dòng của chuỗi root với chuỗi amrood.
$ 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
..........................
Điều rất quan trọng cần lưu ý là sed chỉ thay thế cho lần xuất hiện đầu tiên trên một dòng. Nếu gốc chuỗi xuất hiện nhiều hơn một lần trên một dòng thì chỉ so khớp đầu tiên sẽ được thay thế.
Để sed thực hiện thay thế toàn cục, hãy thêm ký tự g đến cuối lệnh như sau:
$ 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
...........................
Cờ thay thế
Có một số cờ hữu ích khác có thể được chuyển ngoài g cờ và bạn có thể chỉ định nhiều hơn một cờ cùng một lúc.
Sr.No. | Cờ & Mô tả |
---|---|
1 | g Thay thế tất cả các trận đấu, không chỉ trận đấu đầu tiên |
2 | NUMBER Chỉ thay thế trận đấu thứ NUMBER |
3 | p Nếu thay thế được thực hiện, sau đó in không gian mẫu |
4 | w FILENAME Nếu thay thế được thực hiện, sau đó ghi kết quả vào FILENAME |
5 | I or i Đối sánh không phân biệt chữ hoa chữ thường |
6 | M or m Ngoài hành vi bình thường của các ký tự biểu thức chính quy đặc biệt ^ và $, this flag causes ^ to match the empty string after a newline and $ để khớp với chuỗi trống trước một dòng mới |
Sử dụng Dấu phân tách chuỗi thay thế
Giả sử bạn phải thực hiện thay thế trên một chuỗi bao gồm ký tự gạch chéo về phía trước. Trong trường hợp này, bạn có thể chỉ định một dấu phân tách khác bằng cách cung cấp ký tự được chỉ định saus.
$ 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 tôi đã sử dụng : như là delimiter thay vì gạch chéo / vì chúng tôi đang cố gắng tìm kiếm /root thay vì gốc đơn giản.
Thay thế bằng Không gian trống
Sử dụng một chuỗi thay thế trống để xóa chuỗi gốc khỏi /etc/passwd hoàn toàn tập tin -
$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
Thay thế địa chỉ
Nếu bạn muốn thay thế chuỗi sh với chuỗi quiet chỉ trên dòng 10, bạn có thể chỉ định nó như sau:
$ 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
Tương tự, để thay thế dải địa chỉ, bạn có thể làm như 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
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 từ đầu ra, năm dòng đầu tiên có chuỗi sh thay đổi để quiet, nhưng các dòng còn lại vẫn được giữ nguyên.
Lệnh phù hợp
Bạn sẽ sử dụng p tùy chọn cùng với -n tùy chọn để in tất cả các dòng phù hợp như sau:
$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
Sử dụng Cụm từ Thông dụng
Trong khi đối sánh các mẫu, bạn có thể sử dụng biểu thức chính quy để linh hoạt hơn.
Kiểm tra ví dụ sau phù hợp với tất cả các dòng bắt đầu bằng daemon và sau đó xóa chúng -
$ cat testing | sed '/^daemon/d'
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
Sau đây là ví dụ xóa tất cả các dòng kết thúc bằng sh -
$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync
Bảng sau liệt kê bốn ký tự đặc biệt rất hữu ích trong biểu thức chính quy.
Sr.No. | Nhân vật & Mô tả |
---|---|
1 | ^ Khớp với đầu dòng |
2 | $ Khớp với cuối dòng |
3 | . Khớp với bất kỳ ký tự đơn nào |
4 | * Khớp với không hoặc nhiều lần xuất hiện của ký tự trước đó |
5 | [chars] So khớp bất kỳ một trong các ký tự được cho trong ký tự, trong đó ký tự là một chuỗi ký tự. Bạn có thể sử dụng ký tự - để chỉ ra một loạt các ký tự. |
Nhân vật phù hợp
Xem thêm một vài biểu thức để chứng minh việc sử dụng metacharacters. Ví dụ, mẫu sau:
Sr.No. | Biểu thức & Mô tả |
---|---|
1 | /a.c/ Đối sánh các dòng có chứa các chuỗi chẳng hạn như a+c, a-c, abc, matchvà a3c |
2 | /a*c/ Khớp các chuỗi giống nhau với các chuỗi chẳng hạn như ace, yaccvà arctic |
3 | /[tT]he/ Khớp với chuỗi The và the |
4 | /^$/ Khớp các dòng trống |
5 | /^.*$/ Khớp toàn bộ dòng bất kể nó là gì |
6 | / */ Khớp một hoặc nhiều khoảng trắng |
7 | /^$/ Diêm blank dòng |
Bảng sau đây cho thấy một số bộ ký tự được sử dụng thường xuyên:
Sr.No. | Đặt & Mô tả |
---|---|
1 | [a-z] Khớp một chữ cái thường |
2 | [A-Z] Khớp một chữ hoa đơn lẻ |
3 | [a-zA-Z] Khớp một chữ cái |
4 | [0-9] Khớp một số |
5 | [a-zA-Z0-9] Khớp một chữ cái hoặc một số |
Từ khóa lớp nhân vật
Một số từ khóa đặc biệt thường có sẵn cho regexps, đặc biệt là các tiện ích GNU sử dụng regexps. Chúng rất hữu ích cho các biểu thức chính quy sed vì chúng đơn giản hóa mọi thứ và nâng cao khả năng đọc.
Ví dụ, các ký tự a through z và các nhân vật A through Z, tạo thành một lớp ký tự như vậy có từ khóa [[:alpha:]]
Sử dụng từ khóa lớp ký tự bảng chữ cái, lệnh này chỉ in những dòng đó trong /etc/syslog.conf tệp bắt đầu bằng một chữ cái trong bảng chữ cái -
$ 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
Bảng sau đây là danh sách đầy đủ các từ khóa lớp ký tự có sẵn trong GNU sed.
Sr.No. | Lớp nhân vật & Mô tả |
---|---|
1 | [[:alnum:]] Chữ và số [az AZ 0-9] |
2 | [[:alpha:]] Bảng chữ cái [az AZ] |
3 | [[:blank:]] Ký tự trống (dấu cách hoặc tab) |
4 | [[:cntrl:]] Kiểm soát ký tự |
5 | [[:digit:]] Các số [0-9] |
6 | [[:graph:]] Mọi ký tự hiển thị (không bao gồm khoảng trắng) |
7 | [[:lower:]] Chữ thường [az] |
số 8 | [[:print:]] Các ký tự có thể in được (ký tự không điều khiển) |
9 | [[:punct:]] Các ký tự dấu câu |
10 | [[:space:]] Khoảng trắng |
11 | [[:upper:]] Chữ hoa [AZ] |
12 | [[:xdigit:]] Chữ số thập lục phân [0-9 af AF] |
Aampersand References
Các sed metacharacter &đại diện cho nội dung của mẫu đã được khớp. Ví dụ: giả sử bạn có một tệp có tênphone.txt đầy đủ các số điện thoại, chẳng hạn như sau:
5555551212
5555551213
5555551214
6665551215
6665551216
7775551217
Bạn muốn làm area code(ba chữ số đầu tiên) được bao quanh bởi dấu ngoặc đơn để dễ đọc hơn. Để làm điều này, bạn có thể sử dụng ký tự thay thế và dấu -
$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
(777)5551217
Ở đây trong phần mẫu, bạn đang khớp 3 chữ số đầu tiên và sau đó sử dụng & bạn đang thay thế 3 chữ số đó với xung quanh parentheses.
Sử dụng nhiều lệnh sed
Bạn có thể sử dụng nhiều lệnh sed trong một lệnh sed như sau:
$ sed -e 'command1' -e 'command2' ... -e 'commandN' files
Đây command1 xuyên qua commandNlà các lệnh sed thuộc loại đã được thảo luận trước đây. Các lệnh này được áp dụng cho từng dòng trong danh sách tệp do tệp đưa ra.
Sử dụng cơ chế 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
Note - Trong ví dụ trên, thay vì lặp lại từ khóa lớp ký tự [[:digit:]] ba lần, chúng tôi đã thay thế nó bằng \{3\}, có nghĩa là biểu thức chính quy trước đó được so khớp ba lần. Chúng tôi cũng đã sử dụng\ để cung cấp ngắt dòng và điều này phải được xóa trước khi lệnh được chạy.
Tham khảo trở lại
Các ampersand metacharacterrất hữu ích, nhưng hữu ích hơn nữa là khả năng xác định các vùng cụ thể trong biểu thức chính quy. Những vùng đặc biệt này có thể được sử dụng làm tham chiếu trong chuỗi thay thế của bạn. Bằng cách xác định các phần cụ thể của một biểu thức chính quy, sau đó bạn có thể tham chiếu lại các phần đó bằng một ký tự tham chiếu đặc biệt.
Làm back references, trước tiên bạn phải xác định một vùng và sau đó tham chiếu lại vùng đó. Để xác định một khu vực, bạn chènbackslashed parenthesesxung quanh mỗi khu vực quan tâm. Vùng đầu tiên mà bạn bao quanh bằng dấu gạch chéo ngược sau đó được tham chiếu bởi\1, khu vực thứ hai bởi \2, và như thế.
Giả định phone.txt có văn bản sau -
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
Hãy thử lệnh sau:
$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \
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
Note - Trong ví dụ trên, mỗi biểu thức chính quy bên trong dấu ngoặc đơn sẽ được tham chiếu lại bởi \1, \2và như thế. Chúng tôi vừa dùng\để ngắt dòng ở đây. Điều này nên được loại bỏ trước khi chạy lệnh.
Hệ thống tệp là một tập hợp hợp lý của các tệp trên một phân vùng hoặc đĩa. Phân vùng là một nơi chứa thông tin và có thể mở rộng toàn bộ ổ cứng nếu muốn.
Ổ cứng của bạn có thể có nhiều phân vùng thường chỉ chứa một hệ thống tệp, chẳng hạn như một hệ thống tệp chứa /file system hoặc cái khác có chứa /home file system.
Một hệ thống tệp cho mỗi phân vùng cho phép duy trì và quản lý hợp lý các hệ thống tệp khác nhau.
Mọi thứ trong Unix được coi là một tệp, bao gồm các thiết bị vật lý như DVD-ROM, thiết bị USB và ổ đĩa mềm.
Cấu trúc thư mục
Unix sử dụng cấu trúc hệ thống tệp phân cấp, giống như một cây lộn ngược, với root (/) ở cơ sở của hệ thống tệp và tất cả các thư mục khác trải rộng từ đó.
Hệ thống tệp Unix là một tập hợp các tệp và thư mục có các thuộc tính sau:
Nó có một thư mục gốc (/) có chứa các tệp và thư mục khác.
Mỗi tệp hoặc thư mục được xác định duy nhất bằng tên của nó, thư mục mà nó nằm trong đó và một số nhận dạng duy nhất, thường được gọi là inode.
Theo quy ước, thư mục gốc có inode số lượng 2 và lost+found thư mục có một inode số lượng 3. Số Inode0 và 1không được sử dụng. Số inode của tệp có thể được nhìn thấy bằng cách chỉ định-i option đến ls command.
Nó là khép kín. Không có sự phụ thuộc nào giữa hệ thống tệp này và hệ thống tệp khác.
Các thư mục có các mục đích cụ thể và thường chứa các loại thông tin giống nhau để dễ dàng định vị tệp. Sau đây là các thư mục tồn tại trên các phiên bản chính của Unix:
Sr.No. | Thư mục & Mô tả |
---|---|
1 | / Đây là thư mục gốc chỉ chứa các thư mục cần thiết ở cấp cao nhất của cấu trúc tệp |
2 | /bin Đây là nơi chứa các tệp thực thi. Những tệp này có sẵn cho tất cả người dùng |
3 | /dev Đây là các trình điều khiển thiết bị |
4 | /etc Lệnh thư mục người giám sát, tệp cấu hình, tệp cấu hình đĩa, danh sách người dùng hợp lệ, nhóm, ethernet, máy chủ lưu trữ, nơi gửi tin nhắn quan trọng |
5 | /lib Chứa các tệp thư viện được chia sẻ và đôi khi các tệp khác liên quan đến hạt nhân |
6 | /boot Chứa các tệp để khởi động hệ thống |
7 | /home Chứa thư mục chính cho người dùng và các tài khoản khác |
số 8 | /mnt Được sử dụng để gắn kết các hệ thống tệp tạm thời khác, chẳng hạn như cdrom và floppy cho CD-ROM lái xe và floppy diskette drive, tương ứng |
9 | /proc Chứa tất cả các quy trình được đánh dấu là tệp bởi process number hoặc thông tin khác có ảnh hưởng đến hệ thống |
10 | /tmp Giữ các tệp tạm thời được sử dụng giữa các lần khởi động hệ thống |
11 | /usr Được sử dụng cho các mục đích linh tinh, và có thể được sử dụng bởi nhiều người dùng. Bao gồm các lệnh quản trị, tệp được chia sẻ, tệp thư viện và các lệnh khác |
12 | /var Thường chứa các tệp có độ dài thay đổi như tệp nhật ký và tệp in và bất kỳ loại tệp nào khác có thể chứa một lượng dữ liệu thay đổi |
13 | /sbin Chứa các tệp nhị phân (thực thi), thường dành cho quản trị hệ thống. Ví dụ,fdisk và ifconfig hết sức |
14 | /kernel Chứa các tệp hạt nhân |
Điều hướng hệ thống tệp
Bây giờ bạn đã hiểu những điều cơ bản về hệ thống tệp, bạn có thể bắt đầu điều hướng đến các tệp bạn cần. Các lệnh sau được sử dụng để điều hướng hệ thống:
Sr.No. | Lệnh & Mô tả |
---|---|
1 | cat filename Hiển thị tên tệp |
2 | cd dirname Chuyển bạn đến thư mục đã xác định |
3 | cp file1 file2 Sao chép một tệp / thư mục vào vị trí đã chỉ định |
4 | file filename Xác định loại tệp (nhị phân, văn bản, v.v.) |
5 | find filename dir Tìm một tệp / thư mục |
6 | head filename Hiển thị phần đầu của tệp |
7 | less filename Duyệt qua một tệp từ cuối hoặc đầu |
số 8 | ls dirname Hiển thị nội dung của thư mục được chỉ định |
9 | mkdir dirname Tạo thư mục được chỉ định |
10 | more filename Duyệt qua một tệp từ đầu đến cuối |
11 | mv file1 file2 Di chuyển vị trí hoặc đổi tên tệp / thư mục |
12 | pwd Hiển thị thư mục hiện tại mà người dùng đang ở |
13 | rm filename Xóa một tệp |
14 | rmdir dirname Xóa một thư mục |
15 | tail filename Hiển thị phần cuối của một tệp |
16 | touch filename Tạo tệp trống hoặc sửa đổi tệp hiện có hoặc các thuộc tính của nó |
17 | whereis filename Hiển thị vị trí của tệp |
18 | which filename Hiển thị vị trí của một tệp nếu nó nằm trong PATH của bạn |
Bạn có thể sử dụng Trợ giúp Manpage để kiểm tra cú pháp hoàn chỉnh cho từng lệnh được đề cập ở đây.
Lệnh df
Cách đầu tiên để quản lý không gian phân vùng của bạn là với df (disk free)chỉ huy. Lệnhdf -k (disk free) hiển thị disk space usage in kilobytes, như hình dưới đây -
$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $
Một số thư mục, chẳng hạn như /devices, hiển thị 0 trong các cột kbyte, đã sử dụng và lịch phát sóng cũng như 0% cho dung lượng. Đây là những hệ thống tệp đặc biệt (hoặc ảo), và mặc dù chúng nằm trên đĩa dưới / nhưng bản thân chúng không tiêu tốn dung lượng đĩa.
Các df -kđầu ra nói chung là giống nhau trên tất cả các hệ thống Unix. Đây là những gì nó thường bao gồm -
Sr.No. | Cột & Mô tả |
---|---|
1 | Filesystem Tên hệ thống tệp vật lý |
2 | kbytes Tổng số kilobyte dung lượng có sẵn trên phương tiện lưu trữ |
3 | used Tổng số kilobyte dung lượng được sử dụng (theo tệp) |
4 | avail Tổng số kilobyte có sẵn để sử dụng |
5 | capacity Phần trăm tổng dung lượng được tệp sử dụng |
6 | Mounted on Hệ thống tệp được gắn trên cái gì |
Bạn có thể dùng -h (human readable) option để hiển thị đầu ra ở định dạng hiển thị kích thước trong ký hiệu dễ hiểu hơn.
The du Command
Các du (disk usage) command cho phép bạn chỉ định các thư mục để hiển thị mức sử dụng dung lượng đĩ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 dung lượng mà một thư mục cụ thể đang chiếm. Lệnh sau đây hiển thị số khối được sử dụng bởi mỗi thư mục. Một khối duy nhất có thể mất 512 Byte hoặc 1 Kilo Byte tùy thuộc vào hệ thống của bạn.
$du /etc 10 /etc/cron.d 126 /etc/default 6 /etc/dfs ... $
Các -h tùy chọn giúp đầu ra dễ hiểu hơn -
$du -h /etc 5k /etc/cron.d 63k /etc/default 3k /etc/dfs ... $
Gắn hệ thống tệp
Hệ thống tệp phải được gắn kết để hệ thống có thể sử dụng được. Để xem những gì hiện đang được gắn kết (có sẵn để sử dụng) trên hệ thống của bạn, hãy sử dụng lệnh sau:
$ mount /dev/vzfs on / type reiserfs (rw,usrquota,grpquota) proc on /proc type proc (rw,nodiratime) devpts on /dev/pts type devpts (rw) $
Các /mntthư mục, theo quy ước Unix, là nơi chứa các ổ gắn kết tạm thời (chẳng hạn như ổ đĩa CDROM, ổ đĩa mạng từ xa và ổ đĩa mềm). Nếu bạn cần gắn kết một hệ thống tệp, bạn có thể sử dụng lệnh mount với cú pháp sau:
mount -t file_system_type device_to_mount directory_to_mount_to
Ví dụ: nếu bạn muốn gắn kết CD-ROM vào thư mục /mnt/cdrom, bạn có thể gõ -
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
Điều này giả định rằng thiết bị CD-ROM của bạn được gọi là /dev/cdrom và bạn muốn gắn nó vào /mnt/cdrom. Tham khảo trang mount man để biết thêm thông tin cụ thể hoặc loại mount-h tại dòng lệnh để biết thông tin trợ 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 tệp mới có sẵn thông qua điểm gắn kết mà bạn vừa tạo.
Ngắt kết nối hệ thống tệp
Để ngắt kết nối (loại bỏ) hệ thống tệp khỏi hệ thống của bạn, hãy sử dụng umount lệnh bằng cách xác định điểm gắn kết hoặc thiết bị.
Ví dụ, to unmount cdrom, sử dụng lệnh sau:
$ umount /dev/cdrom
Các mount command cho phép bạn truy cập hệ thống tệp của mình, nhưng trên hầu hết các hệ thống Unix hiện đại, automount function làm cho quá trình này ẩn với người dùng và không cần can thiệp.
Hạn ngạch người dùng và nhóm
Hạn ngạch người dùng và nhóm cung cấp các cơ chế mà lượng không gian được sử dụng bởi một người dùng hoặc tất cả người dùng trong một nhóm cụ thể có thể được giới hạn ở một giá trị do quản trị viên xác định.
Hạn ngạch hoạt động xung quanh hai giới hạn cho phép người dùng thực hiện một số hành động nếu dung lượng hoặc số khối đĩa bắt đầu vượt quá giới hạn do quản trị viên xác định -
Soft Limit - Nếu người dùng vượt quá giới hạn đã xác định, sẽ có thời gian gia hạn cho phép người dùng giải phóng một số dung lượng.
Hard Limit - Khi đạt đến giới hạn cứng, bất kể thời gian gia hạn, không thể phân bổ thêm tệp hoặc khối nào.
Có một số lệnh để quản lý hạn ngạch -
Sr.No. | Lệnh & Mô tả |
---|---|
1 | quota Hiển thị mức sử dụng đĩa và giới hạn cho người dùng trong nhóm |
2 | edquota Đây là một trình biên tập hạn ngạch. Có thể chỉnh sửa hạn ngạch Người dùng hoặc Nhóm bằng lệnh này |
3 | quotacheck Quét hệ thống tệp để sử dụng đĩa, tạo, kiểm tra và sửa chữa các tệp hạn ngạch |
4 | setquota Đây là một trình soạn thảo hạn ngạch dòng lệnh |
5 | quotaon Điều này thông báo cho hệ thống rằng hạn ngạch đĩa phải được bật trên một hoặc nhiều hệ thống tệp |
6 | quotaoff Điều này thông báo cho hệ thống rằng hạn ngạch đĩa sẽ bị vô hiệu hóa cho một hoặc nhiều hệ thống tệp |
7 | repquota Điều này in ra một bản tóm tắt về việc sử dụng đĩa và hạn ngạch cho các hệ thống tệp được chỉ định |
Bạn có thể sử dụng Trợ giúp Manpage để kiểm tra cú pháp hoàn chỉnh cho từng lệnh được đề cập ở đây.
Trong chương này, chúng ta sẽ thảo luận chi tiết về quản trị người dùng trong Unix.
Có ba loại tài khoản trên hệ thống Unix -
Tài khoản gốc
Đây còn được gọi là superuservà sẽ có toàn quyền kiểm soát hệ thống. Một siêu người dùng có thể chạy bất kỳ lệnh nào mà không có bất kỳ hạn chế nào. Người dùng này nên được coi là quản trị viên hệ thống.
Tài khoản hệ thống
Tài khoản hệ thống là những tài khoản cần thiết cho hoạt động của các thành phần dành riêng cho hệ thống, ví dụ: tài khoản thư và sshdcác tài khoản. Những tài khoản này thường cần thiết cho một số chức năng cụ thể trên hệ thống của bạn và bất kỳ sửa đổi nào đối với chúng đều có thể ảnh hưởng xấu đến hệ thống.
Tài khoản người dùng
Tài khoản người dùng cung cấp quyền truy cập tương tác vào hệ thống cho người dùng và nhóm người dùng. Người dùng chung thường được chỉ định cho các tài khoản này và thường có quyền truy cập hạn chế vào các tệp và thư mục hệ thống quan trọng.
Unix hỗ trợ một khái niệm về Tài khoản Nhóm để nhóm một số tài khoản một cách hợp lý. Mọi tài khoản sẽ là một phần của tài khoản nhóm khác. Nhóm Unix đóng vai trò quan trọng trong việc xử lý các quyền đối với tệp và quản lý quy trình.
Quản lý Người dùng và Nhóm
Có bốn tệp quản trị người dùng chính:
/etc/passwd- Giữ thông tin tài khoản người dùng và mật khẩu. Tệp này chứa phần lớn thông tin về các tài khoản trên hệ thống Unix.
/etc/shadow- Giữ mật khẩu đã mã hóa của tài khoản tương ứng. Không phải tất cả các hệ thống đều hỗ trợ tệp này.
/etc/group - Tệp này chứa thông tin nhóm cho mỗi tài khoản.
/etc/gshadow - Tệp này chứa thông tin tài khoản nhóm an toàn.
Kiểm tra tất cả các tệp ở trên bằng cách sử dụng cat chỉ huy.
Bảng sau liệt kê các lệnh có sẵn trên hầu hết các hệ thống Unix để tạo và quản lý tài khoản và nhóm -
Sr.No. | Lệnh & Mô tả |
---|---|
1 | useradd Thêm tài khoản vào hệ thống |
2 | usermod Sửa đổi các thuộc tính tài khoản |
3 | userdel Xóa tài khoản khỏi hệ thống |
4 | groupadd Thêm nhóm vào hệ thống |
5 | groupmod Sửa đổi các thuộc tính nhóm |
6 | groupdel Xóa nhóm khỏi hệ thống |
Bạn có thể sử dụng Trợ giúp Manpage để kiểm tra cú pháp hoàn chỉnh cho từng lệnh được đề cập ở đây.
Tạo một nhóm
Bây giờ chúng ta sẽ hiểu cách tạo một nhóm. Đối với điều này, chúng tôi cần tạo nhóm trước khi tạo bất kỳ tài khoản nào, nếu không, chúng tôi có thể sử dụng các nhóm hiện có trong hệ thống của mình. Chúng tôi có tất cả các nhóm được liệt kê trong/etc/groups tập tin.
Tất cả các nhóm mặc định là các nhóm cụ thể của tài khoản hệ thống và không nên sử dụng chúng cho các tài khoản thông thường. Vì vậy, sau đây là cú pháp để tạo một tài khoản nhóm mới:
groupadd [-g gid [-o]] [-r] [-f] groupname
Bảng sau liệt kê các tham số:
Sr.No. | Tùy chọn & Mô tả |
---|---|
1 | -g GID Giá trị số của ID nhóm |
2 | -o Tùy chọn này cho phép thêm nhóm có GID không phải duy nhất |
3 | -r Cờ này hướng dẫn groupadd để thêm tài khoản hệ thống |
4 | -f Tùy chọn này khiến bạn chỉ thoát với trạng thái thành công, nếu nhóm được chỉ định đã tồn tại. Với -g, nếu GID được chỉ định đã tồn tại, thì GID (duy nhất) khác sẽ được chọn |
5 | groupname Tên nhóm thực tế sẽ được tạo |
Nếu bạn không chỉ định bất kỳ tham số nào, thì hệ thống sẽ sử dụng các giá trị mặc định.
Ví dụ sau tạo một nhóm nhà phát triển với các giá trị mặc định, điều này được hầu hết các quản trị viên chấp nhận.
$ groupadd developers
Sửa đổi nhóm
Để sửa đổi một nhóm, hãy sử dụng groupmod cú pháp -
$ groupmod -n new_modified_group_name old_group_name
Để thay đổi tên nhóm nhà phát triển_2 thành nhà phát triển, hãy nhập -
$ groupmod -n developer developer_2
Đây là cách bạn sẽ thay đổi GID tài chính thành 545 -
$ groupmod -g 545 developer
Xóa nhóm
Bây giờ chúng ta sẽ hiểu cách xóa một nhóm. Để xóa một nhóm hiện có, tất cả những gì bạn cần làgroupdel command và group name. Để xóa nhóm tài chính, lệnh là:
$ groupdel developer
Thao tác này chỉ xóa nhóm, không xóa các tệp được liên kết với nhóm đó. Các tệp vẫn có thể truy cập được bởi chủ sở hữu của chúng.
Tạo một tài khoản
Hãy để chúng tôi xem cách tạo tài khoản mới trên hệ thống Unix của bạn. Sau đây là cú pháp để tạo tài khoản của người dùng:
useradd -d homedir -g groupname -m -s shell -u userid accountname
Bảng sau liệt kê các tham số:
Sr.No. | Tùy chọn & Mô tả |
---|---|
1 | -d homedir Chỉ định thư mục chính cho tài khoản |
2 | -g groupname Chỉ định tài khoản nhóm cho tài khoản này |
3 | -m Tạo thư mục chính nếu nó không tồn tại |
4 | -s shell Chỉ định trình bao mặc định cho tài khoản này |
5 | -u userid Bạn có thể chỉ định một id người dùng cho tài khoản này |
6 | accountname Tên tài khoản thực tế sẽ được tạo |
Nếu bạn không chỉ định bất kỳ tham số nào, thì hệ thống sẽ sử dụng các giá trị mặc định. Cácuseradd lệnh sửa đổi /etc/passwd, /etc/shadowvà /etc/group tệp và tạo một thư mục chính.
Sau đây là ví dụ tạo tài khoản mcmohd, đặt thư mục chính của nó thành /home/mcmohd và nhóm với tư cách là developers. Người dùng này sẽ được gán Korn Shell cho nó.
$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd
Trước khi phát hành lệnh trên, hãy đảm bảo rằng bạn đã tạo nhóm nhà phát triển bằng cách sử dụnggroupadd chỉ huy.
Sau khi tài khoản được tạo, bạn có thể đặt mật khẩu bằng cách sử dụng passwd lệnh như sau:
$ passwd mcmohd20
Changing password for user mcmohd20.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
Khi bạn gõ passwd accountname, nó cung cấp cho bạn một tùy chọn để thay đổi mật khẩu, miễn là bạn là siêu người dùng. Nếu không, bạn chỉ có thể thay đổi mật khẩu của mình bằng cách sử dụng lệnh tương tự nhưng không cần chỉ định tên tài khoản của bạn.
Sửa đổi tài khoản
Các usermodlệnh cho phép bạn thực hiện các thay đổi đối với tài khoản hiện có từ dòng lệnh. Nó sử dụng các đối số giống nhưuseradd , cộng với đối số -l, cho phép bạn thay đổi tên tài khoản.
Ví dụ: để thay đổi tên tài khoản mcmohd đến mcmohd20 và để thay đổi thư mục chính cho phù hợp, bạn sẽ cần đưa ra lệnh sau:
$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20
Xóa tài khoản
Các userdellệnh có thể được sử dụng để xóa một người dùng hiện có. Đây là một lệnh rất nguy hiểm nếu không sử dụng một cách thận trọng.
Chỉ có một đối số hoặc tùy chọn có sẵn cho lệnh .r, để xóa thư mục chính và tệp thư của tài khoản.
Ví dụ: để xóa tài khoản mcmohd20 , hãy sử dụng lệnh sau:
$ userdel -r mcmohd20
Nếu bạn muốn giữ thư mục chính cho mục đích sao lưu, hãy bỏ qua -rLựa chọn. Bạn có thể xóa thư mục chính nếu cần sau này.
Trong chương này, chúng ta sẽ thảo luận chi tiết về hiệu suất hệ thống trong Unix.
Chúng tôi sẽ giới thiệu cho bạn một vài công cụ miễn phí có sẵn để theo dõi và quản lý hiệu suất trên hệ thống Unix. Các công cụ này cũng cung cấp hướng dẫn về cách chẩn đoán và khắc phục các sự cố về hiệu suất trong môi trường Unix.
Unix có các loại tài nguyên chính sau đây cần được theo dõi và điều chỉnh:
CPU
Memory
Disk space
Communications lines
I/O Time
Network Time
Applications programs
Thành phần hiệu suất
Bảng sau liệt kê năm thành phần chính chiếm thời gian của hệ thống:
Sr.No. | Thành phần & Mô tả |
---|---|
1 | User State CPU Lượng thời gian thực tế CPU dành để chạy chương trình của người dùng ở trạng thái người dùng. Nó bao gồm thời gian dành cho việc thực hiện các lệnh gọi thư viện, nhưng không bao gồm thời gian dành cho hạt nhân thay mặt nó |
2 | System State CPU Đây là lượng thời gian CPU dành cho trạng thái hệ thống thay mặt cho chương trình này. Tất cảI/O routinesyêu cầu các dịch vụ hạt nhân. Lập trình viên có thể ảnh hưởng đến giá trị này bằng cách chặn chuyển I / O |
3 | I/O Time and Network Time Đây là lượng thời gian dành cho việc di chuyển dữ liệu và phục vụ các yêu cầu I / O |
4 | Virtual Memory Performance Điều này bao gồm chuyển đổi ngữ cảnh và hoán đổi |
5 | Application Program Thời gian dành để chạy các chương trình khác - khi hệ thống không phục vụ ứng dụng này vì ứng dụng khác hiện có CPU |
Công cụ Hiệu suất
Unix cung cấp các công cụ quan trọng sau để đo lường và tinh chỉnh hiệu suất hệ thống Unix:
Sr.No. | Lệnh & Mô tả |
---|---|
1 | nice/renice Chạy chương trình có mức ưu tiên lập lịch đã sửa đổi |
2 | netstat In kết nối mạng, bảng định tuyến, thống kê giao diện, kết nối giả trang và tư cách thành viên đa phương |
3 | time Giúp tính thời gian một lệnh đơn giản hoặc cung cấp mức sử dụng tài nguyên |
4 | uptime Đây là mức trung bình tải hệ thống |
5 | ps Báo cáo ảnh chụp nhanh các quy trình hiện tại |
6 | vmstat Báo cáo thống kê bộ nhớ ảo |
7 | gprof Hiển thị dữ liệu hồ sơ đồ thị cuộc gọi |
số 8 | prof Tạo điều kiện thuận lợi cho quá trình lập hồ sơ |
9 | top Hiển thị các tác vụ hệ thống |
Bạn có thể sử dụng Trợ giúp Manpage để kiểm tra cú pháp hoàn chỉnh cho từng lệnh được đề cập ở đây.
Trong chương này, chúng ta sẽ thảo luận chi tiết về việc đăng nhập hệ thống trong Unix.
Hệ thống Unix có một hệ thống ghi nhật ký rất linh hoạt và mạnh mẽ, cho phép bạn ghi lại hầu hết mọi thứ bạn có thể tưởng tượng và sau đó thao tác trên nhật ký để truy xuất thông tin bạn yêu cầu.
Nhiều phiên bản của Unix cung cấp một phương tiện ghi nhật ký có mục đích chung được gọi là syslog. Các chương trình riêng lẻ cần ghi thông tin, hãy gửi thông tin đến nhật ký hệ thống.
Unix syslog là một phương tiện ghi nhật ký hệ thống thống nhất, có thể định cấu hình trên máy chủ. Hệ thống sử dụng quy trình ghi nhật ký hệ thống tập trung để chạy chương trình/etc/syslogd hoặc là /etc/syslog.
Hoạt động của trình ghi nhật ký hệ thống khá đơn giản. Các chương trình gửi các mục nhật ký của chúng đến syslogd , nó sẽ tham khảo tệp cấu hình/etc/syslogd.conf hoặc là /etc/syslog và khi tìm thấy kết quả khớp, hãy ghi thông báo nhật ký vào tệp nhật ký mong muốn.
Có bốn thuật ngữ nhật ký hệ thống cơ bản mà bạn nên hiểu -
Sr.No. | Thuật ngữ & Mô tả |
---|---|
1 | Facility Số nhận dạng được sử dụng để mô tả ứng dụng hoặc quy trình đã gửi thông báo nhật ký. Ví dụ: mail, kernel và ftp. |
2 | Priority Một chỉ báo về tầm quan trọng của thông điệp. Các cấp độ được định nghĩa trong nhật ký hệ thống dưới dạng hướng dẫn, từ gỡ lỗi thông tin đến các sự kiện quan trọng. |
3 | Selector Sự kết hợp của một hoặc nhiều cơ sở và cấp độ. Khi một sự kiện đến khớp với một bộ chọn, một hành động sẽ được thực hiện. |
4 | Action Điều gì xảy ra với một tin nhắn đến khớp với một bộ chọn - Các thao tác có thể ghi tin nhắn vào tệp nhật ký, lặp lại tin nhắn đến bảng điều khiển hoặc thiết bị khác, viết tin nhắn cho người dùng đã đăng nhập hoặc gửi tin nhắn cùng với một máy chủ nhật ký hệ thống khác. |
Cơ sở Syslog
Bây giờ chúng ta sẽ hiểu về các cơ sở nhật ký hệ thống. 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 tiện ích đều có trên mọi phiên bản Unix.
Cơ sở | Sự miêu tả |
---|---|
1 | auth Hoạt động liên quan đến yêu cầu tên và mật khẩu (getty, su, đăng nhập) |
2 | authpriv Giống như auth nhưng được đăng nhập vào một tệp mà chỉ những người dùng được chọn mới có thể đọc |
3 | console Được sử dụng để nắm bắt các thông báo thường được hướng đến bảng điều khiển hệ thống |
4 | cron Tin nhắn từ bộ lập lịch hệ thống cron |
5 | daemon Bắt tất cả daemon hệ thống |
6 | ftp Tin nhắn liên quan đến daemon ftp |
7 | kern Thông báo hạt nhân |
số 8 | local0.local7 Cơ sở vật chất địa phương được xác định trên mỗi trang web |
9 | lpr Tin nhắn từ hệ thống in dòng |
10 | Tin nhắn liên quan đến hệ thống thư |
11 | mark Sự kiện giả được sử dụng để tạo dấu thời gian trong tệp nhật ký |
12 | news Thông báo liên quan đến giao thức tin tức mạng (nntp) |
13 | ntp Thông báo liên quan đến giao thức thời gian mạng |
14 | user Quy trình người dùng thông thường |
15 | uucp Hệ thống con UUCP |
Ưu tiên Syslog
Các ưu tiên của nhật ký hệ thống được tóm tắt trong bảng sau:
Sr.No. | Ưu tiên & Mô tả |
---|---|
1 | emerg Tình trạng khẩn cấp, chẳng hạn như sự cố hệ thống sắp xảy ra, thường được phát cho tất cả người dùng |
2 | alert Tình trạng cần được sửa chữa ngay lập tức, chẳng hạn như cơ sở dữ liệu hệ thống bị hỏng |
3 | crit Tình trạng nghiêm trọng, chẳng hạn như lỗi phần cứng |
4 | err Lỗi thông thường |
5 | Warning Cảnh báo |
6 | notice Tình trạng không phải là lỗi nhưng có thể phải được xử lý theo cách đặc biệt |
7 | info Tin nhắn thông tin |
số 8 | debug Thông báo được sử dụng khi gỡ lỗi chương trình |
9 | none Mức giả được sử dụng để chỉ định không ghi nhật ký tin nhắn |
Sự kết hợp của các phương tiện và cấp độ cho phép bạn sáng suốt về những gì được ghi lại và thông tin đó đi đến đâu.
Khi mỗi chương trình gửi thông điệp của nó một cách cẩn thận đến trình ghi nhật ký hệ thống, trình ghi nhật ký sẽ đưa ra quyết định về những gì cần theo dõi và những gì cần loại bỏ dựa trên các mức được xác định trong bộ chọn.
Khi bạn chỉ định một cấp độ, hệ thống sẽ theo dõi mọi thứ ở cấp độ đó và cao hơn.
Tệp /etc/syslog.conf
Các /etc/syslog.confkiểm soát tệp nơi tin nhắn được ghi. Một điển hìnhsyslog.conf tệp có thể trông như thế này -
*.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 *
*.alert |program_name
mark.* /dev/console
Mỗi dòng của tệp chứa hai phần:
A message selectorchỉ định loại thông báo để ghi nhật ký. Ví dụ, tất cả các thông báo lỗi hoặc tất cả các thông báo gỡ lỗi từ hạt nhân.
An action fieldcho biết những gì nên được thực hiện với tin nhắn. Ví dụ: đưa nó vào một tệp hoặc gửi tin nhắn đến thiết bị đầu cuối của người dùng.
Sau đây là những điểm đáng chú ý cho cấu hình trên -
Bộ chọn tin nhắn có hai phần: a facility và a priority. Ví dụ, kern.debug chọn tất cả các thông báo gỡ lỗi (ưu tiên) được tạo bởi hạt nhân (cơ sở).
Bộ chọn thư kern.debug chọn tất cả các ưu tiên lớn hơn gỡ lỗi.
Dấu hoa thị thay cho cơ sở hoặc mức độ ưu tiên cho biết "tất cả". Ví dụ,*.debug có nghĩa là tất cả các thông báo gỡ lỗi, trong khi kern.* có nghĩa là tất cả các thông báo được tạo bởi hạt nhân.
Bạn cũng có thể sử dụng dấu phẩy để chỉ định nhiều cơ sở. Hai hoặc nhiều bộ chọn có thể được nhóm lại với nhau bằng cách sử dụng dấu chấm phẩy.
Hành động ghi nhật ký
Trường hành động chỉ định một trong năm hành động -
Ghi tin nhắn vào một tệp hoặc một thiết bị. Ví dụ,/var/log/lpr.log hoặc là /dev/console.
Gửi tin nhắn cho người dùng. Bạn có thể chỉ định nhiều tên người dùng bằng cách phân tách chúng bằng dấu phẩy; ví dụ: root, amrood.
Gửi tin nhắn cho 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 sao; ví dụ, *.
Chuyển thông điệp đến một chương trình. Trong trường hợp này, chương trình được chỉ định sau ký hiệu Unix pipe (|).
Gửi tin nhắn đến nhật ký hệ thống trên máy chủ lưu trữ khác. Trong trường hợp này, trường hành động bao gồm một tên máy chủ, đứng trước một dấu tại; ví dụ: @ tutorialspoint.com.
Lệnh ghi nhật ký
Unix cung cấp logger, là một lệnh cực kỳ hữu ích để xử lý việc ghi nhật ký hệ thống. Cáclogger lệnh sẽ gửi thông báo ghi nhật ký đến daemon syslogd, và do đó kích hoạt ghi nhật ký hệ thống.
Điều này có nghĩa là chúng tôi có thể kiểm tra từ dòng lệnh bất kỳ lúc nào syslogddaemon và cấu hình của nó. Lệnh ghi nhật ký cung cấp một phương pháp để thêm các mục nhập một dòng vào tệp nhật ký hệ thống từ dòng lệnh.
Định dạng của lệnh là -
logger [-i] [-f file] [-p priority] [-t tag] [message]...
Đây là chi tiết của các thông số -
Sr.No. | Tùy chọn & Mô tả |
---|---|
1 | -f filename Sử dụng nội dung của tên tệp tệp làm thông báo để ghi nhật ký. |
2 | -i Ghi lại ID tiến trình của tiến trình ghi nhật ký với mỗi dòng. |
3 | -p priority Nhập thư với mức độ ưu tiên được chỉ định (mục nhập bộ chọn được chỉ định); mức độ ưu tiên của thông báo có thể được chỉ định bằng số hoặc dưới dạng một cặp cơ sở vật chất. Ưu tiên mặc định là user.notice. |
4 | -t tag Đánh dấu mỗi dòng được thêm vào nhật ký bằng thẻ được chỉ định. |
5 | message Các đối số chuỗi có nội dung được nối với nhau theo thứ tự đã chỉ định, được phân tách bằng dấu cách. |
Bạn có thể sử dụng Trợ giúp Manpage để kiểm tra cú pháp hoàn chỉnh cho lệnh này.
Xoay nhật ký
Các tệp nhật ký có xu hướng phát triển rất nhanh và tiêu tốn nhiều dung lượng đĩa. Để bật tính năng xoay vòng nhật ký, hầu hết các bản phân phối đều sử dụng các công cụ nhưnewsyslog hoặc là logrotate.
Những công cụ này nên được gọi trong một khoảng thời gian thường xuyên bằng cách sử dụng cron daemon. Kiểm tra các trang man cho newsyslog hoặc logrotate để biết thêm chi tiết.
Vị trí nhật ký quan trọng
Tất cả các ứng dụng hệ thống tạo tệp nhật ký của chúng trong /var/logvà các thư mục con của nó. Dưới đây là một số ứng dụng quan trọng và thư mục nhật ký tương ứng của chúng -
Ứng dụng | Danh mục |
---|---|
httpd | / var / log / httpd |
samba | / var / log / samba |
cron | / var / log / |
thư | / var / log / |
mysql | / var / log / |
Trong chương này, chúng ta sẽ thảo luận chi tiết về Tín hiệu và Bẫy trong Unix.
Tín hiệu là các ngắt phần mềm được gửi đến một chương trình để chỉ ra rằng một sự kiện quan trọng đã xảy ra. Các sự kiện có thể thay đổi từ yêu cầu của người dùng đến lỗi truy cập bộ nhớ bất hợp pháp. Một số tín hiệu, chẳng hạn như tín hiệu ngắt, cho biết rằng người dùng đã yêu cầu chương trình thực hiện điều gì đó không nằm trong quy trình kiểm soát thông thường.
Bảng sau liệt kê các tín hiệu phổ biến mà bạn có thể gặp phải và muốn sử dụng trong các chương trình của mình -
Tên tín hiệu | Số tín hiệu | Sự miêu tả |
---|---|---|
ĐĂNG KÍ | 1 | Phát hiện treo máy trên thiết bị đầu cuối kiểm soát hoặc chết quá trình kiểm soát |
SIGINT | 2 | Được cấp nếu người dùng gửi tín hiệu ngắt (Ctrl + C) |
SIGQUIT | 3 | Được cấp nếu người dùng gửi tín hiệu thoát (Ctrl + D) |
SIGFPE | số 8 | Được cấp nếu một phép toán bất hợp pháp được cố gắng |
SIGKILL | 9 | Nếu một quá trình nhận được tín hiệu này, nó phải thoát ngay lập tức và sẽ không thực hiện bất kỳ hoạt động dọn dẹp nào |
SIGALRM | 14 | Tín hiệu đồng hồ báo thức (được sử dụng cho bộ hẹn giờ) |
SIGTERM | 15 | Tín hiệu kết thúc phần mềm (được gửi theo mặc định) |
Danh sách các tín hiệu
Có một cách dễ dàng để liệt kê tất cả các tín hiệu được hỗ trợ bởi hệ thống của bạn. Chỉ cần phát hànhkill -l lệnh và nó sẽ hiển thị tất cả các tín hiệu được hỗ trợ -
$ 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
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 tín hiệu thực tế khác nhau giữa Solaris, HP-UX và Linux.
Hành động mặc định
Mỗi tín hiệu có một hành động mặc định được liên kết với nó. Hành động mặc định cho một tín hiệu là hành động mà một tập lệnh hoặc chương trình thực hiện khi nó nhận được một tín hiệu.
Một số hành động mặc định có thể xảy ra là:
Chấm dứt quá trình.
Bỏ qua tín hiệu.
Bán phá giá lõi. Điều này tạo ra một tệp có têncore chứa hình ảnh bộ nhớ của quá trình khi nó nhận được tín hiệu.
Dừng quá trình.
Tiếp tục một quá trình đã dừng.
Gửi tín hiệu
Có một số phương pháp truyền tín hiệu đến một chương trình hoặc tập lệnh. Một trong những cách phổ biến nhất là người dùng nhậpCONTROL-C hoặc là INTERRUPT key trong khi một tập lệnh đang thực thi.
Khi bạn nhấn Ctrl+C chìa khóa, một SIGINT được gửi tới tập lệnh và theo như đã xác định thì tập lệnh hành động mặc định sẽ kết thúc.
Phương pháp phổ biến khác để phân phối tín hiệu là sử dụng kill command, cú pháp của nó như sau:
$ kill -signal pid
Đây signal là số hoặc tên của tín hiệu cần phân phối và pidlà ID quá trình mà tín hiệu sẽ được gửi đến. Ví dụ -
$ kill -1 1001
Lệnh trên gửi tín hiệu HUP hoặc tín hiệu treo máy đến chương trình đang chạy với process ID 1001. Để gửi tín hiệu kết thúc cho cùng một quá trình, hãy sử dụng lệnh sau:
$ kill -9 1001
Điều này giết chết quá trình đang chạy với process ID 1001.
Tín hiệu bẫy
Khi bạn nhấn Ctrl + C hoặc phím Break tại thiết bị đầu cuối của bạn trong khi thực thi một chương trình shell, thông thường chương trình đó sẽ bị kết thúc ngay lập tức và dấu nhắc lệnh của bạn sẽ trở lại. Điều này có thể không phải lúc nào cũng mong muốn. Ví dụ: bạn có thể để lại một loạt các tệp tạm thời không được dọn dẹp.
Bẫy các tín hiệu này khá dễ dàng và lệnh bẫy có cú pháp sau:
$ trap commands signals
Lệnh Here có thể là bất kỳ lệnh Unix hợp lệ nào hoặc thậm chí là một hàm do người dùng xác định và signal có thể là danh sách bất kỳ số lượng tín hiệu nào bạn muốn bẫy.
Có hai cách sử dụng phổ biến cho bẫy trong tập lệnh shell:
- Dọn dẹp các tệp tạm thời
- Bỏ qua tín hiệu
Dọn dẹp các tệp tạm thời
Là một ví dụ về lệnh bẫy, phần sau cho thấy cách bạn có thể xóa một số tệp và sau đó thoát nếu ai đó cố gắng hủy bỏ chương trình khỏi thiết bị đầu cuối:
$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2
Từ điểm trong chương trình shell mà bẫy này được thực thi, hai tệp work1$$ và dataout$$ sẽ tự động bị loại bỏ nếu chương trình nhận được tín hiệu số 2.
Do đó, nếu người dùng làm gián đoạn việc thực thi chương trình sau khi bẫy này được thực hiện, bạn có thể yên tâm rằng hai tệp này sẽ được dọn sạch. Cácexit lệnh theo sau rm là cần thiết vì nếu không có nó, quá trình thực thi sẽ tiếp tục trong chương trình tại thời điểm nó dừng lại khi nhận được tín hiệu.
Tín hiệu số 1 được tạo ra cho hangup. Có thể ai đó cố tình ngắt đường dây hoặc đường dây vô tình bị ngắt kết nối.
Bạn có thể sửa đổi bẫy trước để loại bỏ hai tệp được chỉ định trong trường hợp này bằng cách thêm tín hiệu số 1 vào danh sách tín hiệu -
$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2
Bây giờ các tệp này sẽ bị xóa nếu dòng bị treo hoặc nếu phím Ctrl + C được nhấn.
Các lệnh được chỉ định để bẫy phải được đặt trong dấu ngoặc kép, nếu chúng chứa nhiều hơn một lệnh. Cũng lưu ý rằng trình bao quét dòng lệnh tại thời điểm lệnh bẫy được thực thi và cả khi nhận được một trong các tín hiệu được liệt kê.
Do đó, trong ví dụ trước, giá trị của WORKDIR và $$sẽ được thay thế tại thời điểm lệnh bẫy được thực hiện. Nếu bạn muốn sự thay thế này xảy ra tại thời điểm nhận được tín hiệu 1 hoặc 2, bạn có thể đặt các lệnh bên trong dấu nháy đơn -
$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2
Bỏ qua tín hiệu
Nếu lệnh được liệt kê cho bẫy là rỗng, tín hiệu được chỉ định sẽ bị bỏ qua khi nhận được. Ví dụ, lệnh -
$ trap '' 2
Điều này xác định rằng tín hiệu ngắt sẽ được bỏ qua. Bạn có thể muốn bỏ qua một số tín hiệu khi thực hiện một thao tác mà bạn không muốn bị gián đoạn. Bạn có thể chỉ định nhiều tín hiệu bị bỏ qua như sau:
$ trap '' 1 2 3 15
Lưu ý rằng đối số đầu tiên phải được chỉ định cho một tín hiệu được bỏ qua và không tương đương với việc viết lệnh sau, đối số này có ý nghĩa riêng biệt của nó -
$ trap 2
Nếu bạn bỏ qua một tín hiệu, tất cả các trang con cũng bỏ qua tín hiệu đó. Tuy nhiên, nếu bạn chỉ định một hành động được thực hiện khi nhận được tín hiệu, tất cả các biểu mẫu con sẽ vẫn thực hiện hành động mặc định khi nhận được tín hiệu đó.
Đặt lại bẫy
Sau khi bạn đã thay đổi hành động mặc định được thực hiện khi nhận được tín hiệu, bạn có thể thay đổi lại hành động đó với bẫy nếu bạn chỉ bỏ qua đối số đầu tiên; vì vậy -
$ trap 1 2
Điều này đặt lại hành động được thực hiện khi nhận tín hiệu 1 hoặc 2 trở lại mặc định.