Vỏ lệnh. Trình thông dịch lệnh tiêu chuẩn. Phải làm gì khi có điều gì đó không rõ ràng

=====================================================

CÔNG VIỆC PHÒNG THÍ NGHIỆM SỐ 1 (thời gian hoàn thành - 3 giờ)

Đề tài: “Giới thiệu vềvỏ bọc

1. Giới thiệu về shell

Shell là một trình thông dịch lệnh (bộ xử lý lệnh) hoạt động như một giao diện giữa người dùng và nhân Unix. Solaris cung cấp ba bộ xử lý lệnh chính:

    Shell Bourne mặc định là /sbin/sh

    Bộ xử lý lệnh C -- /bin/csh

    Vỏ Korn-- ./bin/ksh

Ngoài những thứ được liệt kê, Solaris còn cung cấp các shell bổ sung:

    Vỏ J -- /sbin/jsh

    Korn bị hạn chế l -- / usr/ thùng/rsh

    Vỏ chữ T -- /usr/bin/tcsh

    GNU Bourne Again -- /usr/bin/bash

    Vỏ Z – usr/bin/zsh

Sự lựa chọn bộ xử lý lệnh là vấn đề sở thích cá nhân.

2. Chạy lệnh

Bất kỳ lệnh nào trong Unix đều bao gồm tên của chương trình sẽ được khởi chạy (lệnh), các tùy chọn (phím) và các đối số được truyền cho chương trình. Dòng lệnh được phân cách bằng dấu cách hoặc tab.

Ví dụ

$ /bin/ping –t 10 192.168.2.13

lý lẽ

lời mời vỏ

Nếu khi khởi động một chương trình, đường dẫn đến tệp thực thi không được chỉ định thì hệ điều hành sẽ quét tuần tự các thư mục được chỉ định trong biến PATH. Nếu có một chương trình có cùng tên trong thư mục đang được xem thì nó sẽ được khởi chạy để thực thi. Thư mục làm việc hiện tại không được tìm kiếm khi tìm kiếm chương trình trừ khi nó được chỉ định trong biến PATH.

! Vì lý do bảo mật, quản trị viên không nên thêm thư mục hiện tại và thư mục chính (cá nhân) của người dùng vào biến PATH.

Ví dụ

Chạy một chương trình chỉ định đường dẫn đầy đủ

$ / sử dụng/ địa phương/ thùng rác/ Của tôi_ chương trình

Chạy một chương trình từ thư mục (cha) cao hơn

$ ../ địa phương/ thùng rác/ Của tôi_ chương trình

Chạy một chương trình từ thư mục hiện tại

$ ./ Của tôi_ chương trình

3. Ký hiệu đặc biệt trong vỏ bọc

Một số ký tự shell có ý nghĩa đặc biệt.

3.1. Mẫu tạo tên tệp

? (dấu chấm hỏi) khớp với bất kỳ ký tự nào ngoại trừ dấu chấm đầu tiên;

(dấu ngoặc vuông) xác định một nhóm ký tự (một ký tự trong nhóm được chọn);

- (dấu trừ") xác định phạm vi ký tự hợp lệ;

! (Dấu chấm than) từ chối nhóm ký tự sau;

* (biểu tượng dấu hoa thị) khớp với bất kỳ số lượng ký tự nào ngoại trừ dấu chấm đầu tiên.

3.2. Ký hiệu chuyển hướng I/O

< - chuyển hướng đầu vào;

>, >> - chuyển hướng đầu ra;

2>, 2>> - chuyển hướng các thông báo lỗi;

| - Băng tải.

3.3. Ký tự thay thế

$name_variableq - thay thế thay đổi;

$(lệnh) hoặc `đội` - thay thế lệnh;

~ - thay thế dấu ngã.

4. Tìm kiếm

Để tìm kiếm nhanh các tệp và thư mục, hãy sử dụng lệnh Whereis; để tìm kiếm sâu hơn, hãy sử dụng lệnh find (tìm kiếm các tệp đáp ứng các yêu cầu được chỉ định;).

5. Soạn thảo văn bản vi

Trình soạn thảo văn bản vi là một trình soạn thảo phổ quát có trong bất kỳ Unix nào. Ngoài việc chỉnh sửa các tập tin văn bản, trình soạn thảo vi có thể được sử dụng để chỉnh sửa dòng lệnh.

Trình soạn thảo vi có 3 chế độ hoạt động (xem hình).

Đăng nhập vào trình soạn thảo vi

Thoát vi

Dấu “~” (dấu ngã) ở vị trí đầu tiên đánh dấu các dòng trống (không tồn tại) của tệp.

Chế độ chính là chế độ lệnh, trong đó các lệnh được nhập bằng cách nhấn một chuỗi phím nhất định (chúng không được hiển thị trên màn hình theo bất kỳ cách nào).

Di chuyển qua văn bản trong chế độ lệnhđược thực hiện bằng cách sử dụng mũi tên và phím (bên trái), (xuống), (hướng lên), (rẽ phải).

Một số lệnh vi được liệt kê trong bảng.

Xóa dòng hiện tại

Sao chép dòng hiện tại vào bộ đệm

Chuyển động con trỏ

Nhập các ký tự được con trỏ đánh dấu vào bộ đệm

Chèn một dòng mới ở dưới cùng

Chèn một dòng mới ở trên cùng

Thêm sau con trỏ

Nối sau dòng hiện tại

Chèn trước con trỏ

Chèn trước dòng hiện tại

Thay thế ký tự bằng ký tự được nhập từ bàn phím

Dán văn bản từ clipboard

. (chấm)

Lặp lại lệnh cuối cùng được thực hiện

Hủy lệnh cuối cùng

Hoàn tác tất cả các thay đổi đối với dòng hiện tại

Xóa ký tự phía trên con trỏ

Ở chế độ nhập văn bản, tất cả các ký tự gõ trên bàn phím sẽ được chèn vào văn bản.

Ở chế độ dòng cuối cùng lệnh bạn nhập được hiển thị ở dòng cuối cùng của màn hình.

6. Trợ giúp

Unix có một thư mục điện tử chứa mô tả về mục đích của các lệnh, cú pháp của chúng, ví dụ về cách sử dụng, v.v. Thư mục này được gọi bằng lệnh man:

7. Các lệnh shell cơ bản

Ai– hiển thị thông tin về người dùng đang hoạt động;

tiếng vọng– xuất thông báo tới thiết bị đầu cuối;

ngọn cờ– xuất các thông báo tới thiết bị đầu cuối bằng chữ in hoa;

người đàn ông– gọi tới hệ thống trợ giúp trực tuyến;

ngày – đầu ra của ngày hiện tại;

viết– chuyển tin nhắn đến thiết bị đầu cuối của người dùng khác;

tin nhắn– cho phép/cấm hiển thị tin nhắn từ người dùng khác;

thư– gửi/nhận thư;

Tin tức– làm quen với tin tức hệ thống;

pwd– hiển thị tên tuyến đường tuyệt đối của thư mục làm việc hiện tại;

đĩa CD– thay đổi thư mục làm việc;

ls– hiển thị thông tin về nội dung của thư mục;

mkdir– tạo một danh mục;

rmdir– xóa một thư mục;

chạm– cập nhật dấu thời gian của tập tin;

cp- Sao chép các tập tin;

con mèo– kết hợp và hiển thị nội dung của tập tin;

hơn- xem từng trang nội dung tập tin.

mv – di chuyển hoặc đổi tên một tập tin;

rm– xóa tập tin;

bí danh– tạo bút danh;

tr- chuyển đổi ký tự;

lối ra- hoàn thành hiện tại vỏ bọc-MỘT;

phát bóng– chặn kết quả đường ống;

cắt – chọn các trường từ một hàng;

grep– tìm kiếm theo mẫu;

PR– xuất tệp thành đầu ra tiêu chuẩn ở định dạng được chỉ định;

loại- phân loại;

cái đầu– đầu ra của dòng đầu tiên của tập tin;

đuôi– đầu ra của dòng cuối cùng của tập tin;

wc– đếm số ký tự, số từ và số dòng;

đọc, tiếng vọng - đọc và xuất các giá trị biến;

Bài kiểm tra- đánh giá ý nghĩa của một biểu thức;

expr, cho phép- tính toán các biểu thức số học;

8. Vỏ bọc-chương trình

Shell cho phép bạn lưu một chuỗi lệnh vào một tệp và sau đó thực thi nó. Để chạy một tệp có chương trình shell để thực thi, bạn cần thêm quyền thực thi vào quyền truy cập:

$ chmod +x chương trình_file_name

Việc phân nhánh trong các chương trình shell được tổ chức bằng cách sử dụng các toán tử sau:

nếu-thì-khác

Toán tử vòng lặp:

BÀI TẬP

1. Lệnh nào sau đây sẽ hiển thị thông báo chào mừng trên màn hình? Những cái nào không? Tại sao?

$echo xin chào

$ echo xin chào

$ echo XIN CHÀO, THẾ GIỚI

$ ngọn cờ Xin chào

$ NGỌN CỜ XIN CHÀO, THẾ GIỚI

2. In tin nhắn trên nhiều dòng bằng lệnh tiếng vọngngọn cờ.

3. In ngày thành hai dòng: trên dòng đầu tiên ngày, tháng, năm, trên dòng thứ hai thời gian hiện tại, cung cấp kết quả kèm theo nhận xét.

4. Sử dụng lệnh viết, gửi tin nhắn đến bàn điều khiển. Gửi tin nhắn đến nhiều thiết bị đầu cuối cùng một lúc.

5. Sử dụng lệnh tin nhắn, xác định xem tin nhắn có được phép trên thiết bị đầu cuối của bạn hay không. Cấm tin nhắn. Phản ứng của hệ thống sẽ như thế nào nếu ai đó cố gắng gửi tin nhắn cho bạn?

6. Xác định tên của bạn TRANG CHỦ- mục lục.

7. Duyệt cây con thư mục bắt đầu từ thư mục /export/home bằng cách sử dụng các lệnh cd, lspwd.

8.. Tạo trong của bạn TRANG CHỦ-thư mục các thư mục con có dạng:

hoa trái cây

táo lê nho hoa hồng tím bồ công anh

Màu xanh lá cây đậm

9. Là chính mình TRANG CHỦ-directory, tạo các thư mục con sau bằng một dòng lệnh:

A B C D

10. Là chính mình TRANG CHỦ-directory, xóa tất cả các thư mục con của thư mục MỘT.

11. Khi ở trong TRANG CHỦ-thư mục, tạo một tập tin macintosh trong danh mục hiện có quả táo và một số tập tin trong thư mục tối tămmàu xanh lá. Đăng nhập vào thư mục fhạ thấp. Khi ở trong thư mục fhạ thấp, sao chép tất cả các thư mục con ftàn tích cùng với các tập tin chứa trong đó vào một thư mục được tạo đặc biệt rổ.

12. Khi ở trong thư mục fhạ thấp, xóa thư mục ftàn tích.

13. Đọc tập tin .hồ sơ sử dụng lệnh con mèohơn.

14. Tạo trong TRANG CHỦ-tập tin văn bản thư mục tập tin của tôi từ nhiều dòng bằng lệnh con mèo. Tạo một tập tin văn bản MyFile, bằng cách viết những dòng tương tự vào đó. Bạn đã nhận được bao nhiêu tập tin? Tại sao?

15. Xem nội dung file tạo ở task 2.2 tập tin của tôi. Sao chép tập tin tập tin của tôi nộp mycopy. Xem nội dung của cả hai tập tin.

16. Di chuyển tập tin bản sao của tôi vào danh mục những bông hoa.

17. Khi ở trong TRANG CHỦ-catalog, tạo liên kết tôiyliên kết mỗi tập tin bản sao của tôi nằm trong thư mục những bông hoa. Xem tập tin liên kết.

18. Thêm một dòng vào file Của tôiliên kết. Tệp nào trong số các tệp Của tôiliên kết, Của tôisao chép, Của tôitài liệu đã thay đổi? Tại sao?

19. Bạn có thể xác định số lượng liên kết bằng lệnh nào? Xác định số lượng liên kết cho tập tin Của tôiliên kết, Của tôisao chép, Của tôitài liệu.

Xóa tập tin bản sao của tôi. Điều gì đã xảy ra với tập tin liên kết? Xác định số lượng liên kết cho tập tin Của tôiliên kết, Của tôitài liệu.

20. Tạo bí danh thư mục, in nội dung của thư mục hiện tại ở định dạng mở rộng.

21. Đăng xuất và đăng nhập lại. Bí danh có hoạt động không? thư mục? Cần làm gì để đảm bảo biệt danh không bị mất giữa các phiên?

22. Tạo bí danh điểm, in danh sách các tệp trong thư mục làm việc có tên bắt đầu bằng dấu chấm.

23. Sử dụng lệnh chạm, tạo các tệp trong một thư mục mới có tên sao cho cùng lúc:

Bản mẫu Một* 5 tệp trùng khớp;

Bản mẫu * Một tương ứng với 4 tập tin;

Bản mẫu ??.? khớp 3 tập tin;

Bản mẫu * aaa* tương ứng với 2 tập tin;

Bản mẫu??? khớp với 1 tập tin.

24. Bạn nên nhập lệnh nào để thực hiện các thao tác sau:

a) hiển thị tên của tất cả các tệp bắt đầu bằng dấu chấm;

b) hiển thị tên của tất cả các tệp kết thúc bằng “.txt”;

c) hiển thị tên của tất cả các file có chứa từ đó "Của tôi";

25. Thay thế một tập tin được chỉ định tất cả chữ thường thành chữ hoa, mặt khác - tất cả chữ hoa thành chữ thường. Loại bỏ mọi khoảng trắng trùng lặp khỏi tệp.

26. Tạo một file có tên * . Chỉ xóa tập tin này. Hãy cẩn thận khi sử dụng các ký tự tạo tên tệp!

27. Tạo một tệp có khoảng trắng trong tên của nó. Làm thế nào để xóa một tập tin như vậy?

28. Sử dụng lệnh con mèo nhân đôi nội dung của một tệp bằng cách thêm nội dung gốc vào cuối cùng một tệp. Đi tới thư mục những bông hoa. Thêm vào tập tin quay lén danh sách nội dung thư mục những bông hoa. Xem nội dung của tập tin

29. Cố gắng đọc bằng lệnh con mèo tập tin không tồn tại. Phản hồi của hệ thống là gì? Thực hiện tương tự bằng cách chuyển hướng thông báo lỗi đến một tệp lỗi của tôi. Bạn nhìn thấy gì trên màn hình? Xem tập tin lỗi của tôi.

30. Tạo một đường dẫn để chỉ liệt kê tên và quyền của các tệp hiện có trong thư mục làm việc của bạn.

31. Sửa đổi đường dẫn đã xây dựng để danh sách được lưu trong một tệp quay lén Của anh ấy TRANG CHỦ-directory và chỉ hiển thị số lượng tệp trong danh sách trên màn hình.

32. Hiển thị nội dung của file /etc/passwd, được sắp xếp theo trường tên người dùng.

33. Tạo bí danh đã đăng nhậpTRÊN, sẽ hiển thị danh sách tên người dùng đang làm việc trên hệ thống được sắp xếp theo thứ tự bảng chữ cái.

33. Hiển thị ngày hiện tại bằng chữ in hoa bằng lệnh ngàyngọn cờ.

34. Gán cho một biến TÔI LÀ. Tên đăng ký của bạn. Khởi chạy một cái khác vỏ bọc. Bạn có thấy biến này không? Bạn cần làm gì để nhìn thấy nó trong kết quả được tạo vỏ bọc? Thay đổi giá trị của một biến TÔI LÀ. trong phần được tạo ra vỏ bọc. Hãy ra khỏi nơi được sinh ra vỏ bọc. Nhìn vào giá trị của biến này trong nguồn vỏ bọc. Giải thích kết quả.

35. Viết vỏ bọc-chương trình thông tin, sẽ yêu cầu người dùng nhập tên, địa chỉ, ngày, tháng, năm sinh và hiển thị thông tin này theo thứ tự ngược lại đã nhập

36. Viết vỏ bọc- một chương trình sẽ hiển thị lời nhắc nhập số và lưu số đã nhập vào một biến Y, và in một tin nhắn “Y lớn hơn 7”, nếu giá trị Y hơn 7 và “Y làkhông lớn hơn hơn 7” nếu không thì.

37. Viết chương trình shell hiển thị số liệu thống kê sau:

a) tên của bạn;

b) số lượng đối số mà nó được đưa ra;

c) in từng đối số của nó và độ dài của đối số bằng ký tự;

38. Viết vỏ bọc- một chương trình xác định số lượng đối số trên dòng lệnh và hiển thị thông báo lỗi nếu số lượng đối số không phải là ba hoặc chính các đối số đó nếu số lượng của chúng là ba.

39. Viết vỏ bọc- một chương trình sẽ nhắc bạn nhập mã định danh người dùng, kiểm tra mã định danh xem có tuân thủ các mã định danh được sử dụng trong hệ thống không và hiển thị Họ và tênTRANG CHỦ-directory hoặc, trong trường hợp mã định danh không hợp lệ, hiển thị thông báo lỗi.

40. Viết chương trình shell Xin chào, cung cấp phản hồi sau cho các đối số dòng lệnh:

Lý lẽ “-d”- chương trình sẽ thực hiện lệnh ngày;

Lý lẽ “-l”- chương trình sẽ hiển thị nội dung của thư mục hiện tại;

    Nếu không có đối số hoặc đối số không hợp lệ trên dòng lệnh, chương trình sẽ in trợ giúp về các tùy chọn của nó.

41. Viết chương trình từ, thao tác này sẽ nhắc người dùng nhập từng từ một cho đến khi nhập từ đó kết thúc. Ghi nhớ tất cả các từ bạn đã nhập. Sau khi nhập một từ kết thúc hiển thị tất cả các từ đã nhập trên màn hình.

42. Thay đổi lời nhắc hệ thống để nó chứa tên đường dẫn đầy đủ của thư mục làm việc hiện tại .

43. Viết chương trình vi-rút, tạo một bản sao thực thi của chính nó với một tên khác và sau đó xóa chính nó.

44. Viết chương trình vi-rút2 , tìm kiếm thư mục chương trình hiện tại ngôn ngữ lệnh và thêm vào văn bản của họ một lệnh để hiển thị từ đó trên màn hình Bị lây nhiễm!”.

45. Viết chương trình vi-rút3 , nó thêm mã riêng của nó vào các chương trình ngôn ngữ lệnh mà nó tìm thấy để lây nhiễm các chương trình khác.

46. ​​​​Viết chương trình vi-rút4 , bằng cách sửa đổi vi-rút của bạn để khi bị nhiễm, mã lây nhiễm sẽ bị xóa khỏi chương trình lây nhiễm.

47. Viết chương trình chống virus, nó sẽ tìm thấy tất cả các chương trình shell bị nhiễm vi-rút của bạn.

48. Sửa đổi chương trình đã phát triển để nó không chỉ tìm thấy các chương trình bị nhiễm trong thư mục được chỉ định cho nó mà còn “chữa” chúng bằng cách lưu phiên bản bị nhiễm vào một tệp mới có phần đuôi được thêm vào tên của nó . trinh nữ và xóa thuộc tính thực thi khỏi tệp đó.

49. Viết chương trình vi-rút5 , sẽ:

a) sẽ chỉ lây nhiễm virus cho các chương trình shell trong thư mục hiện tại và các thư mục con của nó nếu người dùng nhập lệnh ls;

b) sẽ cư xử như một đội ls, mà không tiết lộ bất cứ điều gì về công việc của bạn trên thiết bị đầu cuối.

50. Viết chương trình virus6 dựa trên các chương trình vi-rút2 -vi-rút5 , mã lây nhiễm không thể được phát hiện bởi chương trình bạn đã phát triển chống virus và sự lây nhiễm sẽ xảy ra với bất kỳ giá trị nào của biến CON ĐƯỜNG.

51. Viết chương trình siêu vi-rút, lần khởi chạy này sẽ lây nhiễm vi-rút được phát triển trong tác vụ trước vào các tệp của bạn và mỗi khi bạn đăng nhập vào hệ thống, một nỗ lực sẽ được thực hiện để lây nhiễm các tệp của bạn bè bạn. Chương trình siêu vi-rút tự xóa sau lần khởi chạy đầu tiên.

52. Viết chương trình siêu vi-rút, có chức năng phát hiện và "chữa trị" hoàn toàn (nếu tùy chọn thích hợp được chỉ định) tất cả các tệp trong thư mục được chỉ định và các thư mục con của nó khỏi tất cả các vi-rút đã phát triển.

Như đã đề cập ở trên, để xây dựng các thuật toán tùy ý cần có các toán tử kiểm tra điều kiện. Vỏ bọc đánh đập hỗ trợ các tuyên bố lựa chọn nếu nhưsau đótrường hợp khác và trường hợp, cũng như các toán tử lặp ,trong khi, cho đến khi, làm cho nó trở thành một ngôn ngữ lập trình mạnh mẽ.

5.8.1 Người vận hành nếu nhưBài kiểm tra(hoặc )

Cấu trúc của toán tử điều kiện ở dạng đơn giản hơn một chút trông như sau:

nếu list1 thì list2 khác list3 fi

Ở đâu danh sách1, danh sách2 và danh sách3 là các chuỗi lệnh được phân tách bằng dấu phẩy và kết thúc bằng dấu chấm phẩy hoặc ký tự dòng mới. Ngoài ra, các chuỗi này có thể được đặt trong dấu ngoặc nhọn: (danh sách).

Nhà điều hành nếu như kiểm tra giá trị được trả về bởi các lệnh từ danh sách1. Nếu có một số lệnh trong danh sách này thì giá trị được trả về bởi lệnh cuối cùng trong danh sách sẽ được chọn. Nếu giá trị này là 0 thì lệnh từ danh sách2; nếu giá trị này không bằng 0, các lệnh từ danh sách3. Giá trị được trả về bởi toán tử ghép như vậy nếu như, giống với giá trị được tạo bởi lệnh cuối cùng của chuỗi được thực hiện.

Định dạng lệnh đầy đủ nếu như có dạng:

nếu danh sách thì liệt kê [ danh sách Elif rồi liệt kê ] ... [ danh sách khác ] fi

(ở đây dấu ngoặc vuông chỉ có nghĩa là những gì chứa trong chúng không nhất thiết phải có trong toán tử).

Là một biểu thức xuất hiện ngay sau nếu như hoặc yêu tinh, một lệnh thường được sử dụng Bài kiểm tra, cũng có thể được biểu thị bằng dấu ngoặc vuông. Đội Bài kiểm trađánh giá một số biểu thức và trả về 0 nếu biểu thức đó đúng và 1 nếu ngược lại. Biểu thức được truyền vào chương trình Bài kiểm tra như một lý lẽ. Thay vì viết

biểu hiện kiểm tra,

Bạn có thể đặt biểu thức trong dấu ngoặc vuông:

[sự biểu lộ].

Xin lưu ý rằng Bài kiểm tra và [ là hai tên của cùng một chương trình, không phải một số chuyển đổi kỳ diệu được thực hiện bởi shell đánh đập(chỉ cú pháp [ yêu cầu bao gồm dấu ngoặc đơn đóng). Cũng lưu ý rằng thay vì Bài kiểm tra trong thiết kế nếu như bất kỳ chương trình có thể được sử dụng.

Để kết luận, chúng tôi đưa ra một ví dụ về việc sử dụng toán tử nếu như:

if [ -e textmode2.htm ] ; sau đó

ls chế độ văn bản*

khác

pwd

Về nhà điều hành Bài kiểm tra(hoặc […]) chúng ta cần có một cuộc trò chuyện đặc biệt.

5.8.2 Người vận hành Bài kiểm tra và điều kiện

Biểu thức điều kiện được sử dụng trong câu lệnh Bài kiểm tra, dựa trên xác minh thuộc tính tập tin, so sánh chuỗi và so sánh số học thông thường. Các biểu thức phức tạp được xây dựng từ các biểu thức đơn nhất hoặc hoạt động nhị phân("gạch cơ bản"):

    Một tập tin

Đúng nếu tệp có tên file tồn tại.

    tập tin B

Đúng nếu tài liệu tồn tại và là tập tin đặc biệt chặn thiết bị.

    tập tin C

Đúng nếu tài liệu tồn tại và là một tập tin thiết bị ký tự đặc biệt.

    tập tin D

Đúng nếu tài liệu tồn tại và là một thư mục.

    Tập tin điện tử

Đúng nếu tên tệp là tài liệu tồn tại.

    tập tin F

Đúng nếu tên tệp là tài liệu tồn tại và là một tập tin thông thường.

    tập tin G

Đúng nếu tên tệp là tài liệu tồn tại và bit thay đổi nhóm của nó được thiết lập.

    Tệp H hoặc tệp -L

Đúng nếu tên tệp là tài liệu tồn tại và là một liên kết tượng trưng.

    tập tin K

Đúng nếu tên tệp là tài liệu tồn tại và bit "dính" của nó được thiết lập.

    tập tin P

Đúng nếu tên tệp là tài liệu tồn tại và là ống có tên(FIFO).

    tập tin R

Đúng nếu tên tệp là tài liệu tồn tại và đã đặt quyền đọc

    tập tin S

Đúng nếu tên tệp là tài liệu tồn tại và kích thước của nó lớn hơn 0.

    tfd

Đúng nếu bộ mô tả tập tin fdđang mở và trỏ đến thiết bị đầu cuối.

    tập tin của bạn

Đúng nếu tên tệp là tài liệu tồn tại và bit người dùng thay đổi của nó được thiết lập.

    tập tin W

Đúng nếu tên tệp là tài liệu tồn tại và có quyền ghi.

    tập tin X

Đúng nếu tên tệp là tài liệu tồn tại và có thể thực thi được.

    tập tin O

Đúng nếu tên tệp là tài liệu tồn tại và được sở hữu bởi người dùng được chỉ định bởi ID người dùng hiệu quả.

    tập tin G

Đúng nếu tên tệp là tài liệu tồn tại và thuộc về nhóm được xác định bởi ID nhóm hiệu quả.

    tập tin S

Đúng nếu tên tệp là tài liệu tồn tại và là một ổ cắm.

    tập tin N

Đúng nếu tên tệp là tài liệu tồn tại và đã thay đổi kể từ lần đọc cuối cùng.

    tập tin1 -nt tập tin2

Đúng nếu tập tin tập tin1 có thời gian sửa đổi muộn hơn tập tin2.

    tập tin1 -ot tập tin2

Đúng nếu tập tin tập tin1 Lớn tuổi hơn tập tin2.

    tập tin1 -ef tập tin2

Đúng nếu các tập tin tập tin1tập tin2có cùng thiết bị và số inode(inode).

    O tên chọn

Đúng nếu tùy chọn shell được bật tên lựa chọn. Để được giải thích, hãy xem trang bash man.

    chuỗi Z

Đúng nếu độ dài của chuỗi bằng 0.

    chuỗi N

Đúng nếu độ dài của chuỗi không bằng 0.

    chuỗi1 == chuỗi2

Đúng nếu các chuỗi khớp nhau. Thay vì == có thể được sử dụng = .

    chuỗi1 !== chuỗi2

Đúng nếu các chuỗi không khớp.

    chuỗi1< string2

Đúng nếu dòng chuỗi1 theo từ điển đứng trước chuỗi chuỗi2(đối với ngôn ngữ hiện tại).

    chuỗi1 > chuỗi2

Đúng nếu dòng chuỗi1 theo từ điển xuất hiện sau dòng chuỗi2(đối với ngôn ngữ hiện tại).

    arg1 OP arg2

Đây OP- ừ sau đó là một trong các phép toán so sánh số học: -eq(bằng), -ne(không công bằng), -lt(ít hơn), -le(nhỏ hơn hoặc bằng), -gt(hơn), -ge(nhiều hơn hoặc bằng). Số nguyên dương hoặc âm có thể được sử dụng làm đối số.

Từ các biểu thức điều kiện cơ bản này, bạn có thể xây dựng mức độ phức tạp tùy thích bằng cách sử dụng các phép toán logic thông thường như phủ định, AND và OR:

    !(sự biểu lộ)

Toán tử phủ định Boolean.

    biểu thức1 -a biểu thức2

Toán tử Boolean (VÀ). Đúng nếu cả hai biểu thức đều đúng.

    biểu thức1 -o biểu thức2

Toán tử Boolean HOẶC(HOẶC). Đúng nếu một trong hai biểu thức đúng.

Các biểu thức điều kiện tương tự được sử dụng trong các toán tử trong khicho đến khi, mà chúng ta sẽ xem xét dưới đây.

5.8.3 Người vận hành trường hợp

Định dạng toán tử trường hợp là:

từ viết hoa trong danh sách [ [(] mẫu [ | mẫu ] ...) ;; ]...esac

Đội trường hợpđầu tiên tạo ra sự mở rộng từ từ và cố gắng khớp kết quả với từng mẫu mẫu từng cái một. Sau khi tìm thấy kết quả khớp đầu tiên, không có kiểm tra nào nữa được thực hiện; danh sách các lệnh theo mẫu mà kết quả khớp được tìm thấy sẽ được thực thi. Giá trị được toán tử trả về là 0 nếu không tìm thấy mẫu nào khớp. Ngược lại, giá trị được tạo bởi lệnh cuối cùng trong danh sách tương ứng sẽ được trả về.

Ví dụ sau đây về việc sử dụng câu lệnh tình huống được lấy từ tập lệnh hệ thống /etc/rc.d/rc.sysinit.

trường hợp "$UTC" trong

có|đúng)

CLOCKFLAGS="$CLOCKFLAGS -u";

CLOCKDEF="$CLOCKDEF (utc)";

không|sai)

CLOCKFLAGS="$CLOCKFLAGS --localtime";

CLOCKDEF="$CLOCKDEF (giờ địa phương)";

esac

Nếu biến đánh giá là có hoặc đúng thì cặp lệnh đầu tiên sẽ được thực thi và nếu giá trị của nó là no hoặc sai thì cặp lệnh thứ hai sẽ được thực thi.

5.8.4 Người vận hành lựa chọn

Nhà điều hành lựa chọn cho phép bạn tổ chức tương tác tương tác với người dùng. Nó có định dạng sau:

chọn tên [trong word; ] lập danh sách ; xong

Đầu tiên từ mẫu từ một danh sách các từ phù hợp với mẫu được tạo ra. Tập hợp các từ này được xuất ra dòng lỗi tiêu chuẩn, với mỗi từ kèm theo một số thứ tự. Nếu mẫu từ bị bỏ qua, các tham số vị trí được suy ra theo cách tương tự. Sau đó, lời nhắc PS3 tiêu chuẩn sẽ được đưa ra và trình bao sẽ đợi một dòng được nhập vào đầu vào tiêu chuẩn. Nếu chuỗi đã nhập chứa một số tương ứng với một trong các từ được hiển thị thì biến tênđược gán một giá trị bằng từ đó. Nếu nhập một dòng trống, các số và từ tương ứng sẽ được hiển thị lại. Nếu bất kỳ giá trị nào khác được nhập vào, biến tênđược gán giá trị bằng 0. Chuỗi do người dùng nhập vào được lưu trữ trong một biến HỒI ĐÁP. Danh sách lệnh danh sáchđược thực hiện với giá trị biến đã chọn tên.

Đây là một kịch bản nhỏ:

#!/bin/sh

echo "Bạn thích hệ điều hành nào hơn?"

chọn var trong "Linux" "Gnu Hurd" "BSD miễn phí" "Khác"; LÀM

phá vỡ

xong

echo "Bạn sẽ chọn $var"

Bạn thích hệ điều hành nào hơn?
1) Linux
2) Gnu Hurd
3) BSD miễn phí
4) Khác
#?

Nhấn bất kỳ số nào trong 4 số gợi ý (1,2,3,4). Ví dụ: nếu bạn nhập 1, bạn sẽ thấy thông báo:

“Bạn có chọn Linux không”

5.8.5 Người vận hành

Nhà điều hành hoạt động hơi khác một chút so với các ngôn ngữ lập trình thông thường. Thay vì tổ chức giá trị của một số biến để tăng hoặc giảm một đơn vị ở mỗi lần lặp, nó gán giá trị tiếp theo từ danh sách các từ nhất định cho biến ở mỗi lần lặp. Nói chung, thiết kế trông giống như thế này:

cho tên trong từ làm danh sách xong.

Quy tắc xây dựng danh sách lệnh ( danh sách) giống như trong toán tử nếu như.

Ví dụ. Đoạn script sau tạo các tệp foo_1, foo_2 và foo_3:

cho a trong 1 2 3 ; LÀM

chạm vào foo_$a

xong

TRONG trường hợp chung Câu lệnh for có định dạng:

cho tên [bằng chữ; ] lập danh sách ; xong

Đầu tiên, lời nói được tiết lộ từ phù hợp với các quy tắc công bố biểu thức được đưa ra ở trên. Sau đó biến tên các giá trị kết quả được gán lần lượt và danh sách các lệnh được thực thi mỗi lần điều này. Nếu như " trong từ" bị thiếu thì danh sách lệnh danh sáchđược thực thi một lần cho mỗi tham số vị trí được chỉ định.

Linux có một chương trình thứ tự, lấy hai số làm đối số và tạo ra một chuỗi gồm tất cả các số nằm giữa các số đã cho. Với lệnh này bạn có thể buộc V. đánh đập hoạt động chính xác giống như cách một toán tử tương tự hoạt động trong các ngôn ngữ lập trình thông thường. Để làm điều này, chỉ cần viết chu trình theo cách sau:

cho a trong $(seq 1 10) ; LÀM

tập tin mèo_$a

xong

Lệnh này hiển thị nội dung của 10 file: " tệp_1", ..., "tệp_10".

5.8.6 Người vận hành trong khicho đến khi

Nhà điều hành trong khi hoạt động như nếu như, chỉ thực thi các toán tử từ danh sách danh sách2 vòng lặp tiếp tục cho đến khi điều kiện đúng và bị hủy nếu điều kiện không đúng. Thiết kế trông như thế này:

trong khi list1 làm list2 xong.

while [ -d mydirectory ] ; LÀM

ls -l mydirectory >> logfile

echo -- SEPARATOR -- >> logfile

ngủ 60

xong

Một chương trình như vậy sẽ ghi lại nội dung của thư mục "mydirectory" mỗi phút miễn là thư mục đó tồn tại.

Nhà điều hành cho đến khi tương tự như nhà điều hành trong khi:

cho đến khi list1 làm xong list2.

Điểm khác biệt là kết quả trả về khi thực hiện danh sách câu lệnh danh sách1, được hiểu với sự phủ định: danh sách2được thực thi nếu lệnh cuối cùng trong danh sách danh sách1 trả về trạng thái thoát khác 0.

5.8.7 Chức năng

Cú pháp

Vỏ bọc đánh đập cho phép người dùng tạo ra các chức năng của riêng mình. Các hàm hoạt động và được sử dụng giống hệt như các lệnh shell thông thường, nghĩa là chúng ta có thể tự tạo các lệnh mới. Các hàm được xây dựng như sau:

tên hàm() (danh sách)

Và từ chức năng không cần thiết, tên xác định tên của hàm mà nó có thể được truy cập và phần thân của hàm bao gồm một danh sách các lệnh danh sách, nằm giữa ( và ). Danh sách lệnh này được thực thi mỗi khi tên tênđược chỉ định làm tên của lệnh để gọi. Lưu ý rằng các hàm có thể được định nghĩa đệ quy, do đó được phép gọi hàm mà chúng ta định nghĩa bên trong chính hàm đó.

Các hàm được thực thi trong ngữ cảnh của shell hiện tại: để diễn giải hàm quy trình mới không chạy (không giống như thực thi các tập lệnh shell).

Tranh luận

Khi một hàm được gọi để thực thi, các đối số của hàm sẽ trở thành thông số vị trí(tham số vị trí) trong suốt thời gian của chức năng. Họ được gọi là $n, Ở đâu N— số đối số mà chúng ta muốn truy cập. Đánh số đối số bắt đầu từ 1, vì vậy $1 - đây là lý lẽ đầu tiên. Chúng ta cũng có thể nhận được tất cả các đối số cùng một lúc với $* và số đối số sử dụng $# . Tham số vị trí 0 không thay đổi.

Nếu một lệnh tích hợp xuất hiện trong thân hàm trở lại, việc thực thi hàm bị gián đoạn và quyền điều khiển được chuyển sang lệnh sau lệnh gọi hàm. Khi chức năng hoàn thành, các tham số vị trí và tham số đặc biệt # các giá trị mà chúng có trước khi hàm bắt đầu được trả về.

Biến cục bộ (cục bộ)

Nếu chúng ta muốn tạo tham số cục bộ, có thể được sử dụng từ khóa địa phương. Cú pháp để xác định nó hoàn toàn giống với các tham số thông thường, chỉ có định nghĩa được đặt trước bởi một từ khóa địa phương: địa phương tên=giá trị.

Dưới đây là một ví dụ về việc chỉ định một hàm thực hiện lệnh được đề cập ở trên thứ tự:

seq()

địa phương tôi=$1;

trong khi [ $2 != $I ]; LÀM

echo -n "$I";

Tôi=$(($I + 1))

xong;

tiếng vang $2

Xin lưu ý tùy chọn -N nhà điều hành tiếng vọng, nó hủy bỏ quá trình chuyển đổi sang dòng mới. Mặc dù điều này không cần thiết cho các mục đích mà chúng tôi đề cập ở đây nhưng nó có thể hữu ích khi sử dụng hàm này cho các mục đích khác.

Hàm tính giai thừa sự thật

Một ví dụ nữa:

sự thật()

nếu [$1 = 0]; sau đó

tiếng vang 1;

khác

echo $(($1 * $(thực tế $(($1 - 1)))))

Đây là hàm giai thừa, một ví dụ về hàm đệ quy. Lưu ý mở rộng số học và thay thế lệnh.

V. Kostromin (kos và rus-linux dot net) - 5.8. Shell là ngôn ngữ lập trình

Thông dịch lệnh

Để cung cấp giao diện dòng lệnh, HĐH thường sử dụng trình thông dịch lệnh, có thể là các ngôn ngữ lập trình độc lập với cú pháp và chức năng riêng biệt.

Hệ điều hành Windows 9x bao gồm trình thông dịch lệnh command.com và Windows NT bao gồm các shell lệnh UNIX, csh, ksh phổ biến và các thứ khác.

Theo quy định, khi điều chỉnh hệ điều hành ở mức độ thấp, người dùng có cơ hội thay đổi lớp vỏ mặc định.

Chức năng

Trình thông dịch lệnh thực thi các lệnh bằng ngôn ngữ của nó, được đưa ra trên dòng lệnh hoặc đến từ đầu vào tiêu chuẩn hoặc một tệp .

Các lệnh gọi tới các tiện ích hệ thống hoặc ứng dụng cũng như các cấu trúc điều khiển được hiểu là các lệnh. Ngoài ra, shell chịu trách nhiệm mở rộng các mẫu tên tệp cũng như chuyển hướng và liên kết I/O tiện ích.

Cùng với một bộ tiện ích, shell là một môi trường hoạt động, một ngôn ngữ lập trình chính thức và một công cụ mạnh mẽ để giải quyết cả hệ thống và một số vấn đề. bài toán ứng dụng, đặc biệt là tự động hóa các chuỗi lệnh được thực hiện thường xuyên.

Trình thông dịch lệnh tiêu chuẩn

Triển khai và sẵn có

Lựa chọn thay thế

Cùng với các hệ điều hành tiêu chuẩn, hệ điều hành mở cũng sử dụng vỏ thay thế tcsh, khác nhau về cú pháp của cấu trúc điều khiển và hành vi của các biến.

Một số hệ điều hành thay thế đi kèm với trình thông dịch ngôn ngữ tệp lệnh của riêng chúng (chẳng hạn như OS Batch File Language Microsoft Windows NT, ngôn ngữ OS/2, v.v.)

Một số người thích sử dụng các ngôn ngữ thông dịch mới, chẳng hạn như Python, để tự động hóa các chuỗi lệnh được thực thi thường xuyên.

Vỏ đồ họa

Shell đồ họa cho hệ điều hành Windows

Các phiên bản mới nhất của hệ điều hành Windows sử dụng môi trường tích hợp Windows Explorer làm vỏ của chúng. Windows Explorerđại diện môi trường thị giácđiều khiển bao gồm các chức năng Desktop, Start Menu, Taskbar và quản lý tập tin. Các phiên bản đầu tiên của Windows OS 3.xx bao gồm trình quản lý chương trình dưới dạng trình bao đồ họa.

Nhiều nhà phát triển bên thứ ba cung cấp các môi trường thay thế có thể được sử dụng thay vì trình bao Explorer được bật theo mặc định bởi Microsoft vào hệ thống Windows.

  • vỏ Aston
  • BB4Win
  • BClean
  • Cairo (Đang phát triển)
  • sắc độ
  • Máy tính để bàn nổi lên
  • vỏ địa kỹ thuật
  • Packard Bell Navigator
  • Quản lý chương trình
  • Máy tính để bàn an toàn
  • Sắc nét
  • Máy tính để bàn Talisman
  • WinStep
  • Microsoft Bob

Xem thêm

Quỹ Wikimedia. 2010.

Xem “Command Shell” là gì trong các từ điển khác:

    - (tiếng Anh Unix shell, thường chỉ là “shell” hoặc “sh”) một trình thông dịch lệnh được sử dụng trong hệ điều hành Họ UNIX, trong đó tôi đã sử dụng ... Wikipedia

    Thuật ngữ này có ý nghĩa khác, xem Điều ước. Wish (Windowing Shell) là một shell lệnh UNIX tương tác hoặc có thể viết tập lệnh đơn giản dành cho X Window System và Mac OS X. Nó cung cấp cho người dùng quyền kiểm soát các thành phần... ... Wikipedia

    - ... Wikipedia

    Yêu cầu Trình thông dịch dòng lệnh được chuyển hướng đến đây. Cần có một bài viết riêng về chủ đề “Thông dịch dòng lệnh”. Vẻ bề ngoài shell (eng. Co ... Wikipedia

    Shell hệ điều hành (từ shell shell tiếng Anh) là trình thông dịch các lệnh của hệ điều hành (OS), cung cấp giao diện để người dùng tương tác với các chức năng của hệ thống. Nói chung, có các shell với hai loại giao diện cho ... Wikipedia

    Shell lệnh UNIX ( shell Unix trong tiếng Anh, thường chỉ là “shell” hoặc “sh”) là trình thông dịch lệnh được sử dụng trong các hệ điều hành thuộc họ shell tương thích POSIX, có từ thời shell Bourne, xuất hiện trong Unix Phiên bản 7. Nội dung 1 ... ... Wikipedia

    Shell lệnh UNIX ( shell Unix trong tiếng Anh, thường chỉ là “shell” hoặc “sh”) là trình thông dịch lệnh được sử dụng trong các hệ điều hành thuộc họ shell tương thích POSIX, có từ thời shell Bourne, xuất hiện trong Unix Phiên bản 7. Nội dung 1 ... ... Wikipedia

    Shell lệnh UNIX ( shell Unix trong tiếng Anh, thường chỉ là “shell” hoặc “sh”) là trình thông dịch lệnh được sử dụng trong các hệ điều hành thuộc họ shell tương thích POSIX, có từ thời shell Bourne, xuất hiện trong Unix Phiên bản 7. Nội dung 1 ... ... Wikipedia

Sách

  • Các tập lệnh Shell. Linux, OS X và Unix. Hướng dẫn, Taylor Dave. Trợ giúp về tập lệnh Shell quản trị viên hệ thống và các lập trình viên để tự động hóa công việc thường ngày kể từ khi những chiếc máy tính đầu tiên xuất hiện. Kể từ khi phát hành phần đầu tiên...

Phần này cung cấp tài liệu giúp người lập trình trong ngôn ngữ lệnh vỏ bọc(sh, bash, ksh và những thứ khác)

trình thông dịch lệnh c-shell

0. Giới thiệu

Trình thông dịch lệnh trong môi trường UNIX thực hiện hai chức năng chính:

đại diện cho một giao diện tương tác với người dùng, tức là. đưa ra lời nhắc và xử lý các lệnh do người dùng nhập vào;
xử lý và thực hiện tập tin văn bản, chứa các lệnh thông dịch (tệp bó);

Trong trường hợp sau, hệ điều hành cho phép các tệp bó được coi là một loại tệp thực thi. Theo đó, có hai chế độ hoạt động của trình thông dịch: tương tác và ra lệnh.

UNIX (trái ngược với DOS chẳng hạn) có một số trình thông dịch lệnh khác nhau. Hãy liệt kê phổ biến nhất:

/bin/sh - Vỏ Bourne. Về mặt lịch sử, đây là shell lệnh đầu tiên được phát triển cho phiên bản đầu tiên của hệ điều hành UNIX. Shell này hiện là shell chính trong các phiên bản UNIX System V.
/bin/csh - C-shell. Một shell có cú pháp ngôn ngữ lệnh gần giống với ngôn ngữ C. Đây là shell chính cho phiên bản Berkeley của hệ điều hành UNIX.
/bin/ksh - k-shell.
/bin/rsh - Vỏ bị hạn chế. Đại diện cho sh với khuyết tật(chủ yếu để bảo vệ HĐH khỏi những hành động trái phép của người dùng).

Hệ điều hành ConvexOS là một phiên bản của 4.3 BSD UNIX()BSD - Berkeley Series Distribution và do đó là nền tảng vỏ lệnh là csh.

1. Các tính năng chính

Làm việc với dòng lệnh

Trình thông dịch coi chuỗi được người dùng nhập dưới dạng một lệnh (hoặc một số lệnh). Cú pháp shell cho phép bạn gõ

nhiều lệnh trên một dòng, cách nhau bằng dấu chấm phẩy. Ví dụ

tương đương với hai lệnh được nhập tuần tự:

Ngược lại, nếu muốn, người dùng có thể

tiếp tục gõ một lệnh dài để hàng tiếp theo, đã hoàn thành dòng hiện tại dấu hiệu \\. Cho đến khi lệnh được hoàn thành, bạn sẽ nhận được ``dấu nhắc phụ'' > thay vì dấu nhắc chính (%). Ví dụ,

% tar tv Makefile star.o star.c star.dat main.o main.c

tương đương

%tar tv Makefile star.o\

> star.c star.dat \

Các luồng I/O được điều khiển theo cách tương tự như DOS (Chính xác hơn là hệ điều hành DOS đã áp dụng cú pháp chuyển hướng luồng từ UNIX) bằng cách sử dụng các ký hiệu > , > > ,

Hữu ích trương hợp đặc biệt sử dụng cơ chế chuyển hướng luồng - chuyển hướng đến /dev/null, cho phép bạn loại bỏ các thông báo không cần thiết trên màn hình. Sử dụng cơ chế tương tự, bạn có thể tạo các tệp trống:

sẽ tạo một tệp trống myfile trong thư mục hiện tại.

Ngoài ra, C-shell cho phép bạn nhóm các lệnh bằng dấu ngoặc đơn. Trong trường hợp này, toàn bộ cấu trúc bên trong dấu ngoặc được trình thông dịch coi là một lệnh. Điều này rất hữu ích, ví dụ, trong các công trình như vậy:

% (lệnh1 | lệnh2)

Nếu bạn bỏ qua dấu ngoặc đơn, shell sẽ không thể xác định lệnh nào bạn muốn nhập tệp myfile.

Những ``tiện ích'' sau tồn tại trong quá trình triển khai C-shell này:

Bạn có thể tránh gõ một lệnh dài đến cuối nhưng hãy thử nhấn phím tab sau khi gõ một phần lệnh (hoặc tên tệp). C-shell sẽ cố gắng tự hoàn thành các ký tự còn thiếu hoặc sẽ phản hồi bằng tiếng rít nếu lựa chọn không rõ ràng.
Nếu bạn gõ một lệnh nhưng quên các tùy chọn của nó, hãy gõ chuỗi H. C-shell sẽ cung cấp trợ giúp ngắn gọn. Ví dụ,

Khi gõ tên file đầy đủ sử dụng tổ hợp phím ^D. Bạn sẽ có thể nhận được danh sách thư mục bạn đang nhập theo định dạng của lệnh lf.
Bộ đệm lệnh ghi nhớ 20 lệnh cuối cùng. Thay vì gõ lệnh, bạn có thể gọi nó từ bộ đệm bằng bàn phím mũi tên (tất nhiên, chỉ khi lệnh này nằm trong bộ đệm).

Phân tích dòng lệnh

Trình thông dịch, sau khi nhận được dòng lệnh, thực hiện một số biến đổi trên đó, cụ thể là:

Mở rộng bí danh
Mở rộng các siêu ký tự (*, ?, [, ], ~, (, ))
Thay thế các biến shell
Thực thi lệnh nếu đó là lệnh trình thông dịch tích hợp hoặc bắt đầu một quá trình nếu lệnh đó ở bên ngoài.

Chúng ta hãy xem xét các bước này từng bước một.

Bí danh. Lệnh bí danh tích hợp cho phép bạn xác định bí danh lệnh. Ví dụ:

% bí danh mycat "cat | thêm"

định nghĩa mycat làm bí danh cho chuỗi cat | hơn. Do đó, hơn nữa bạn có quyền sử dụng lệnh mycat, lệnh này sẽ được trình thông dịch mở rộng ở bất cứ nơi nào bạn sử dụng. Đây là một cách xác định tên ngắn cho các lệnh ghép dài.

Lệnh dựng sẵn unalias mycat sẽ hủy bí danh mycat đã nhập trước đó.

Siêu ký tự. Siêu ký tự cho phép bạn rút ngắn toàn bộ danh sách các từ (chủ yếu là tên tệp). Shell xử lý một từ chứa siêu ký tự làm mẫu để biên soạn danh sách tên tệp:

* trong mẫu sẽ thay thế bất kỳ chuỗi ký tự nào. Ví dụ: m* sẽ mở rộng thành danh sách tất cả các tệp bắt đầu bằng chữ m. Có một ngoại lệ nhỏ đối với quy tắc này: nó chỉ * loại bỏ khỏi danh sách những tệp có tên bắt đầu bằng dấu chấm.
? thay thế một ký tự. Ví dụ như tôi? sẽ mở rộng thành danh sách tất cả các tên tệp bắt đầu bằng chữ cái m và bao gồm chính xác hai chữ cái.
[.-.] cho phép bạn chỉ định khoảng thời gian cho ký tự được thay thế. Ví dụ m sẽ được mở rộng thành ma mb mc me.
(...,...) cho phép bạn liệt kê các từ để thay thế. Vì vậy, ví dụ, m(red,blue,green) sẽ được mở rộng thành mred mblue mgreen.

Cuối cùng, dấu ngã cho phép bạn chỉ định thư mục chính của người dùng:

~name/ tương đương với việc chỉ định đường dẫn đầy đủ đến thư mục chính của tên người dùng (Nói /usr1/name/)
~/ tương đương với việc chỉ định đường dẫn đầy đủ đến thư mục chính của riêng bạn.

Các biến vỏ. Các từ bắt đầu bằng ký hiệu $ được trình thông dịch lệnh hiểu là tên biến. Các biến được chia thành các biến môi trường (chúng sẽ được biết đến bởi tất cả các chương trình được gọi từ shell này và theo nghĩa này là toàn cục) và các biến đơn giản.

Lệnh có sẵn set name=value cho phép bạn xác định một biến đơn giản có tên là name và đặt cho nó giá trị giá trị. Khi trình thông dịch gặp biểu thức $name trên dòng lệnh, nó sẽ thay thế nó bằng giá trị. Ví dụ,

%đặt màu=xanh

sẽ hiển thị dòng màu xanh trên thiết bị đầu cuối. MỘT

%đặt màu=xanh

% echo new$color

sẽ cho newblue. Cuối cùng, bằng cách nhập

%đặt màu=xanh

% echo $(color)mới

chúng tôi có màu sắc mới. Ví dụ cuối cùng minh họa cách sử dụng dấu ngoặc nhọn để phân tách tên biến khỏi một từ (để echo $colornew trình thông dịch sẽ trả lời rằng biến colornew không được xác định.

Lệnh unset hủy các biến được xác định trước đó.

Để xác định một biến bằng chuỗi của một số từ, đặt nó trong dấu ngoặc kép đơn giản. Ví dụ

% set color="blue hoặc red hoặc green"

Biến đơn giản có thể là mảng các từ (phải phân biệt với trường hợp vừa bàn, khi biến chứa một chuỗi gồm nhiều từ. Để khai báo một mảng, bạn phải sử dụng dấu ngoặc đơn:

% đặt màu=(xanh đỏ xanh)

Bây giờ echo $colors sẽ tạo ra một chuỗi gồm ba màu (hãy thử!). Tuy nhiên, bạn cũng có thể làm việc với các phần tử mảng riêng lẻ (các phần tử được đánh số bắt đầu từ 0), như sau:

(chúng tôi nhận được màu xanh lá cây). Số phần tử trong mảng được chứa trong biến $#colors.

sẽ cung cấp số 3 cho thiết bị đầu cuối.

Có thể kết hợp khá phức tạp bằng cách sử dụng các mẫu, ví dụ:

% tập tin được đặt=(m*)

sẽ trả về số lượng tệp trong thư mục hiện tại bắt đầu bằng chữ m.

Các biến môi trường được gọi giống như các biến đơn giản. Sự khác biệt nằm ở cách chúng được định nghĩa:

Lệnh % setenv name value đặt tên biến môi trường. Lưu ý sự khác biệt khó chịu trong cú pháp: khi xác định biến môi trường, bạn không cần sử dụng dấu =.

Có thể lấy danh sách tất cả các biến môi trường bằng lệnh tích hợp printenv.

Bạn có thể hủy xác định biến môi trường bằng cách sử dụng unsetenv.

Cuối cùng, để xác định một mảng các biến môi trường, bạn KHÔNG sử dụng dấu ngoặc đơn mà sử dụng dấu hai chấm làm dấu phân cách phần tử mảng:

% setenv MANPATH /usr/man/:/usr/local/man:/usr/man/X11:~/man

Các lệnh và biến tích hợp

Danh sách các lệnh C-shell tích hợp quan trọng nhất kèm theo giải thích ngắn gọn:

bí danh định nghĩa một bí danh

bg chuyển nhiệm vụ cho chế độ nền chấp hành

lệnh chdir path để đi đến thư mục đường dẫn.

echo in tất cả các đối số của nó ra đầu ra tiêu chuẩn

exec filename bắt đầu quá trình từ tên tệp thay vì shell hiện tại (tức là ở trên nó). Việc quay trở lại shell là không thể.

exit kết thúc shell.

fg dịch quá trình nềnđến đồng bộ.

file filename cung cấp thông tin về những gì hệ điều hành nghĩ về tệp này.

nhãn goto nhảy vô điều kiện đến dòng trong tệp lệnh được đánh dấu bằng nhãn. Không được sử dụng tương tác.

kill pid gửi tín hiệu hủy để xử lý pid, điều này thường dẫn đến việc quá trình bị hủy.

tên tệp nguồn đọc và thực thi các lệnh từ tên tệp tệp.

set, setenv thiết lập các biến nội bộ và môi trường.

shift var dịch chuyển các phần tử của mảng var sang trái. Trong trường hợp này, kích thước của mảng giảm đi một và phần tử 0 của mảng bị mất. Biến var phải là một mảng.

lệnh thời gian thực thi lệnh và hiển thị thời gian thực thi trên thiết bị đầu cuối.

unset sẽ phá hủy biến shell.

unalias hủy bí danh lệnh được xác định trước đó.

@name=expr lưu trữ kết quả của biểu thức số học expr trong biến tên.

Danh sách các biến tích hợp C-shell quan trọng nhất kèm theo giải thích ngắn gọn:

mảng argv của các tham số dòng lệnh (được sử dụng trong chế độ lệnh)

cdpath là thư mục chứa shell khi đưa ra lệnh chdir mà không có đối số.

kích thước bộ đệm lịch sử để lưu trữ các lệnh.

thư mục chính của người dùng chủ

vị trí thư ở hệ thống tập tin hộp thư người dùng.

đường dẫn đường dẫn để tìm kiếm các lệnh bên ngoài.

dấu nhắc là dấu nhắc shell chính.

nhắc nhở phụ 1.

shell đường dẫn đầy đủ tập tin thực thi vỏ hiện tại (/bin/csh)

Câu lệnh điều khiển và câu lệnh vòng lặp

Từ danh sách các lệnh shell tích hợp, chúng tôi đã cố tình loại trừ câu điều kiện và các câu lệnh vòng lặp sẽ được đề cập ở đây.

Thực hiện có điều kiện

Cú pháp của câu lệnh điều kiện if trong C-shell là:

lệnh if (expr)

expr có thể là biểu thức số học hoặc kiểm tra thuộc tính tệp. Ví dụ:

if (-f /etc/hosts) cat /etc/hosts

Hãy xem xét trường hợp cuối cùng chi tiết hơn. Có thể kiểm tra thuộc tính tệp sau đây:

R có thể đọc được

W có sẵn để ghi âm

X có sẵn để thực thi

E kiểm tra sự tồn tại của tập tin

O hãy kiểm tra xem bạn có phải là chủ sở hữu của tập tin này không

Tệp Z có kích thước bằng 0

Tệp F là tệp thông thường

Tệp P là một đường ống có tên

Tệp D là một thư mục

trong khi lặp lại

Vòng lặp chạy miễn là điều kiện là đúng. Ví dụ:

trong khi ($#tệp > 0)

vòng lặp foreach

Điều này cực kỳ toán tử hữu ích, cho phép bạn tổ chức một vòng lặp thông qua các phần tử của một mảng từ

tên biến thể foreach (danh sách)

Phần thân của vòng lặp được thực thi với số lần bằng số phần tử trong mảng danh sách. Trong trường hợp này, biến varname chứa giá trị tiếp theo của phần tử mảng. Ví dụ

màu foreach (xanh đỏ xanh)

echo Màu sắc là $color

tệp foreach (*.for)

echo Đổi tên tập tin $

mv $file `tên cơ sở $file .for`.f

Được sử dụng ở đây lệnh chuẩn basename, mà ``cắt"" hậu tố được cung cấp bởi đối số thứ hai từ từ được cung cấp trong đối số thứ nhất và in từ kết quả thành đầu ra tiêu chuẩn. Việc sử dụng dấu ngoặc kép trong ngôn ngữ C-shell sẽ được thảo luận sau.

Toán tử điều kiện đa biến

Cú pháp của câu lệnh switch có điều kiện trong C-shell như sau

case mẫu1: ... breakw case (\it mẫu2) :

Người vận hành cho phép điều khiển được chuyển giao tùy thuộc vào việc chuỗi chuỗi bất kỳ mẫu nào từ tập hợp mẫu1, mẫu2, ... (trong trường hợp này, điều khiển được chuyển đến khối được giới hạn bởi chữ hoa chữ thường ... breakw) hoặc không (trong trường hợp này, điều khiển được chuyển về mặc định:... nhánh endw . Nói chung, câu lệnh chuyển đổi rất giống với một toán tử tương tự trong C. Các cấu trúc như vậy thường được sử dụng trong các tệp lệnh để phân tích phản hồi của người dùng đối với câu hỏi được đặt ra ().

2. Chạy shell ở chế độ lệnh

Người ta đã lưu ý rằng csh có thể được khởi chạy ở chế độ lệnh. Hơn nữa, các câu lệnh điều kiện và câu lệnh vòng lặp thường được sử dụng nhiều nhất trong các tệp bó. Ở đây chúng ta sẽ xem xét các đặc điểm của công việc “đội” như vậy.

Nhận dạng thông dịch viên

Cách dễ nhất là khởi chạy shell ở chế độ thực thi của một tệp mycommand nhất định bằng cách cung cấp cho tệp này thuộc tính thực thi lệnh chmod:

% chmod +x mycommand

Bây giờ bạn chỉ cần nhập lệnh mycommand từ bàn phím và hệ điều hành sẽ tự động khởi chạy shell ở chế độ lệnh để thực thi tệp này. Bằng cách này có một đá dưới nước: Có nhiều trình thông dịch lệnh trong hệ thống và cú pháp lệnh của chúng khác nhau. Hệ điều hành sẽ xác định cái bạn cần như thế nào? Câu trả lời là không. Bạn phải cho hệ điều hành biết rõ ràng trình thông dịch nào bạn muốn chạy để thực thi tệp bó này. Để thực hiện việc này, dòng đầu tiên trong tệp của bạn phải có dạng chuẩn sau:

điều này sẽ cho phép hệ điều hành thực hiện điều đúng đắn. Nếu bạn không chỉ định thông tin này, HĐH sẽ cho rằng (vì lý do lịch sử) rằng tệp được viết bằng ngôn ngữ shell Bourne và rất có thể bạn sẽ nhận được nhiều thông báo lỗi cú pháp.

Hãy lưu ý thêm một điều nữa tài sản hữu ích Hoạt động shell ở chế độ lệnh: tất cả các dòng bắt đầu bằng dấu # sẽ bị bỏ qua. Điều này cho phép bạn thêm nhận xét vào văn bản của tệp lệnh.

Thực tế sau đây cho phép bạn làm việc với dòng lệnh bằng csh: khi bạn chạy tệp lệnh, mycommand, một biến nội bộ có tên argv được xác định tự động, đại diện cho một mảng các tham số dòng lệnh. Ví dụ: tệp bó sau đây chỉ cần in tất cả các đối số và số của chúng tới thiết bị đầu cuối:

# Tệp này chỉ xuất ra các đối số của nó

# và tổng số đối số

echo Đối số: $argv

echo Số lượng đối số: $#argv

Ra mắt rõ ràng

Bạn có thể nộp đơn trực tiếp hơn, nhưng ít hơn Một cách thuận tiện khởi chạy tệp bó - bằng cách gọi shell bằng khóa chuyển đổi tên tệp -c. Ví dụ:

% /bin/csh -c mycommand arg1 arg2 arg3...

trong đó khóa phải được theo sau bởi tên của tệp sẽ được khởi chạy. Các đối số cần thiết được liệt kê sau. Lưu ý rằng với phương thức khởi chạy này, tệp có thể không có thuộc tính thực thi.

Báo giá

Dấu ngoặc kép đóng vai trò quan trọng trong cú pháp shell. Có ba loại dấu ngoặc kép: dấu ngoặc đơn (“), dấu ngoặc kép (“”) và dấu ngoặc ngược (`).

Dấu ngoặc đơn được sử dụng để đánh dấu văn bản mà shell sẽ hiểu theo nghĩa đen. Nói cách khác, văn bản bên trong dấu ngoặc kép đơn giản không thể mở rộng và giải thích được. Ví dụ:

echo "Đô la là $tốt"

theo nghĩa đen, chúng tôi nhận được Dollar là $good mặc dù ký hiệu đô la là một siêu ký tự shell.

Dấu ngoặc kép phân cách một chuỗi ký tự mà shell sẽ coi là một từ duy nhất. Ví dụ:

đặt màu = "xanh xanh đỏ"; tiếng vang $#màu sắc

sẽ trả về số 1, có nghĩa là biến màu sắc là một biến đơn giản chứ không phải một mảng. Bất cứ điều gì bên trong dấu ngoặc kép đều có thể được Shell giải thích.

Dấu ngoặc kép cho phép bạn biểu diễn một chuỗi bao gồm kết quả của một lệnh. Vì vậy, biểu thức trong backticks được coi như một lệnh mà shell thực thi và những gì lệnh này in ra đầu ra tiêu chuẩn sẽ được thay thế dưới dạng một chuỗi tại nơi xuất hiện các backticks đó. Ví dụ:

sẽ đưa vào biến mytty chuỗi mà lệnh tty tạo ra (cụ thể là tên và số của thiết bị đầu cuối hiện tại).

  • Hướng dẫn

Tại sao và bài viết dành cho ai?

Ban đầu, đây là lời nhắc nhở dành cho những sinh viên mới bắt đầu làm việc với các hệ thống giống Unix. Nói cách khác, bài viết dành cho những người chưa có kinh nghiệm làm việc với dòng lệnh Unix trước đây, nhưng vì lý do này hay lý do khác muốn hoặc cần học cách tương tác hiệu quả với nó.

Sẽ không có việc kể lại mana (tài liệu) và bài viết không hủy bỏ hoặc thay thế việc đọc chúng dưới bất kỳ hình thức nào. Thay vào đó, tôi sẽ nói về những điều chính (lệnh, kỹ thuật và nguyên tắc) mà bạn cần hiểu ngay từ đầu khi bắt đầu làm việc trong unix shell để công việc có hiệu quả và thú vị.

Bài viết liên quan đến các môi trường giống unix chính thức, với một shell đầy đủ chức năng (tốt nhất là zsh hoặc bash) và một loạt các chương trình tiêu chuẩn.

vỏ là gì

Shell (shell, hay còn gọi là “dòng lệnh”, hay còn gọi là CLI, còn gọi là “bàn điều khiển”, hay còn gọi là “thiết bị đầu cuối”, hay còn gọi là “cửa sổ màu đen có chữ màu trắng”) là giao diện văn bản giao tiếp với hệ điều hành(à, nói đúng ra thì đây là chương trình, cung cấp giao diện như vậy, nhưng hiện tại sự khác biệt này không đáng kể).

Nói chung, công việc thông qua shell trông như thế này: người dùng (tức là bạn) nhập lệnh từ bàn phím, nhấn Enter, hệ thống thực thi lệnh, ghi kết quả thực thi ra màn hình và lại chờ đầu vào lệnh tiếp theo.

Chế độ xem điển hình vỏ sò:

Shell là cách chính để tương tác với tất cả các hệ thống máy chủ giống Unix.

Hệ thống dòng lệnh được tìm thấy ở đâu?

Trường hợp Unix shell có thể đang đợi bạn, các tùy chọn phổ biến:
  • MacOS (bash);
  • truy cập từ xa vào máy chủ để làm việc hoặc cho dự án web cá nhân;
  • máy chủ tập tin gia đình có quyền truy cập từ xa;
  • Ubuntu, PC-BSD trên máy tính xách tay/máy tính để bàn - các hệ thống giống unix ngày nay rất dễ cài đặt và sử dụng.

Những vấn đề nào là hợp lý để giải quyết bằng shell?

Nhiệm vụ tự nhiên mà vỏ phù hợp, hữu ích và không thể thiếu:
  • công việc tương tác trong thiết bị đầu cuối:
    • biên dịch, chạy công việc thông qua make;
    • so sánh các tập tin văn bản;
    • phân tích dữ liệu đặc biệt nhanh (số lượng IP duy nhất trong nhật ký, phân phối bản ghi theo giờ/phút, v.v.);
    • hành động hàng loạt một lần (tiêu diệt nhiều quy trình; nếu bạn làm việc với hệ thống kiểm soát phiên bản, hãy đảo ngược hoặc giải quyết một loạt tệp);
    • chẩn đoán những gì đang xảy ra trong hệ thống (semaphore, khóa, quy trình, bộ mô tả, dung lượng ổ đĩa, v.v.);
  • kịch bản:
    • các tập lệnh cài đặt mà bạn không thể dựa vào sự hiện diện của các trình thông dịch khác - điều này không dành cho người mới bắt đầu;
    • các chức năng tùy chỉnh shell tương tác (ảnh hưởng đến lời mời, thay đổi thư mục, cài đặt các biến môi trường) - cũng không hoàn toàn dành cho người mới bắt đầu;
    • các tập lệnh một lần như mã hóa tập tin hàng loạt;
    • makefiles.

Chắc chắn là những bước đầu tiên

Hãy bắt đầu: đăng nhập và đăng xuất

Hãy chắc chắn rằng bạn biết chính xác cách khởi động shell và cách thoát khỏi nó.

Nếu bạn đang làm việc trên máy có cài đặt Ubuntu, bạn cần khởi chạy chương trình Terminal. Khi hoàn tất, bạn chỉ cần đóng cửa sổ lại.

Trên MacOS - cũng khởi chạy Terminal.

Truy cập vào máy chủ từ xa- sử dụng ssh (nếu bạn có MacOS, Ubuntu hoặc hệ thống giống unix khác cục bộ) hoặc putty (nếu bạn có Windows).

Tôi là ai, tôi ở đâu?

Chạy các lệnh sau:
  • tên máy chủ - hiển thị tên của máy (máy chủ) bạn hiện đang sử dụng;
  • whoami - hiển thị thông tin đăng nhập của bạn (tên của bạn trong hệ thống);
  • tree -d / |less - biểu diễn đồ họa giả của cây thư mục trên máy; thoát khỏi cuộn - q ;
  • pwd - hiển thị thư mục bạn đang ở; trên dòng lệnh bạn không thể “cứ như thế”, bạn phải ở trong thư mục nào đó (=thư mục hiện tại, thư mục làm việc). Thư mục làm việc hiện tại có thể được hiển thị trong lời nhắc của bạn.
  • ls - danh sách các tập tin trong thư mục hiện tại; ls /home - danh sách các tập tin trong thư mục được chỉ định;

Lịch sử lệnh (lịch sử)

Một thuộc tính quan trọng của dòng lệnh chính thức là lịch sử lệnh.

Chạy một số lệnh: tên máy chủ, ls, pwd, whoami. Bây giờ hãy nhấn phím lên. Lệnh trước đó xuất hiện trong dòng đầu vào. Bạn có thể sử dụng phím lên và xuống để di chuyển tiến và lùi trong lịch sử. Khi bạn đến tên máy chủ, nhấn Enter - lệnh sẽ được thực thi lại.

Các lệnh từ lịch sử không chỉ có thể được thực thi nhiều lần mà còn có thể được chỉnh sửa. Cuộn qua lịch sử đến lệnh ls, thêm công tắc -l vào đó (hóa ra ls -l , có khoảng trắng trước dấu trừ, nhưng không có dấu cách sau). Nhấn Enter - lệnh sửa đổi sẽ được thực thi.

Cuộn qua lịch sử, chỉnh sửa và thực hiện lại lệnh là những thao tác thường gặp nhất khi làm việc trên dòng lệnh nên hãy làm quen dần nhé.

Sao chép dán

Dòng lệnh rất tập trung vào văn bản: các lệnh là văn bản, dữ liệu đầu vào của hầu hết các chương trình tiêu chuẩn là văn bản và đầu ra thường là văn bản.

Điều tuyệt vời về văn bản là nó có thể được sao chép và dán, và điều này cũng đúng trên dòng lệnh.

Hãy thử lệnh date +"%y-%m-%d, %A"
Bạn nhập hoàn toàn bằng tay hay chép từ bài viết? Hãy chắc chắn rằng bạn có thể sao chép nó, dán nó vào terminal và thực thi nó.

Khi bạn đã học cách sử dụng man, hãy đảm bảo rằng bạn có thể sao chép và chạy các lệnh mẫu từ phần trợ giúp. Để kiểm tra, hãy tra cứu phần VÍ DỤ trong trợ giúp chương trình ngày tháng, sao chép và chạy ví dụ đầu tiên được đưa ra (chỉ trong trường hợp: ký hiệu đô la không phải là một phần của lệnh, đây là hình ảnh tượng trưng của lời nhắc đầu vào).

Cách sao chép chính xác văn bản từ thiết bị đầu cuối và dán nó vào thiết bị đầu cuối tùy thuộc vào hệ thống của bạn và cài đặt của nó, vì vậy hãy cung cấp hướng dẫn phổ quát Thật không may, nó sẽ không hoạt động. Trên Ubuntu, hãy thử điều này: sao chép - chỉ cần chọn bằng chuột, dán - nút chuột giữa. Nếu nó không hoạt động hoặc nếu bạn có một hệ thống khác, hãy tìm trên Internet hoặc hỏi những người bạn có kinh nghiệm hơn.

Phím và tùy chọn

Khi bạn khám phá lịch sử lệnh, bạn đã thấy rằng lệnh ls có ít nhất hai tùy chọn. Nếu bạn gọi nó như vậy, nó sẽ đưa ra một danh sách đơn giản:

Akira@latitude-e7240: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf
Nếu bạn thêm khóa chuyển -l, thông tin chi tiết sẽ được hiển thị cho từng tệp:

Akira@latitude-e7240: ~/shell-survival-quide> ls -l tổng 332 -rw-rw-r-- 1 akira akira 198 13 tháng 2 11:48 Makefile -rw-rw-r-- 1 akira akira 15107 tháng 2 14 22:26 shell-first-steps.md -rw-rw-r-- 1 akira akira 146226 Ngày 13 tháng 2 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 Ngày 13 tháng 2 11 :45 shell-survival-quide.md -rw-rw-r-- 1 akira akira 146203 13 tháng 2 11:35 shell-survival-quide.pdf
Đây là một tình huống rất điển hình: nếu bạn thêm các công cụ sửa đổi đặc biệt (phím, tùy chọn, tham số) vào lệnh gọi, hành vi của lệnh sẽ thay đổi. So sánh: cây / và cây -d/, tên máy chủ và tên máy chủ -f.

Ngoài ra, các lệnh có thể lấy tên file, tên thư mục hoặc đơn giản là chuỗi văn bản. Thử:

Ls -ld /home ls -l /home grep root /etc/passwd

người đàn ông

man - Trợ giúp với các lệnh và chương trình có sẵn trên máy của bạn, cũng như các lệnh gọi hệ thống và thư viện C tiêu chuẩn.

Hãy thử: man grep, man atoi, man chdir, man man.

Việc cuộn tiến và lùi được thực hiện bằng cách sử dụng các nút “lên”, “xuống”, “PageUp”, “PageDown” để thoát khỏi chế độ xem trợ giúp được thực hiện bằng nút q. Tìm kiếm văn bản cụ thể trong bài viết trợ giúp: nhấn / (dấu gạch chéo lên), nhập văn bản cần tìm kiếm, nhấn Enter. Di chuyển đến lần xuất hiện tiếp theo - phím n.

Tất cả các bài viết trợ giúp được chia thành các danh mục. Quan trọng nhất:

Cần chỉ rõ loại chứng chỉ nào sẽ được thể hiện trong trường hợp trùng tên. Ví dụ: man 3 printf mô tả hàm từ thư viện chuẩn C và man 1 printf là một chương trình console có cùng tên.

Bạn có thể xem danh sách tất cả các bài viết trợ giúp có sẵn trên máy của mình bằng lệnh man -k. (dấu chấm cũng là một phần của komada).

ít hơn

Khi ở trong một cửa sổ terminal nhỏ, bạn cần xem rất Văn bản dài(nội dung của một số tệp, một trang dài, v.v.), họ sử dụng các chương trình “máy nhắn tin” đặc biệt (từ trang từ, tức là trình lật trang). Thanh cuộn phổ biến nhất thì ít hơn và nó là thứ cung cấp cho bạn khả năng cuộn khi bạn đọc các trang man.

Hãy thử và so sánh hành vi:

Mèo /etc/bash.bashrc mèo /etc/bash.bashrc |less

Bạn có thể chuyển trực tiếp file sang máy nhắn tin trong thông số:

Ít hơn /etc/bash.bashrc

Cuộn lên xuống - nút "lên", "xuống", "PageUp", "PageDown", thoát - nút q. Tìm kiếm văn bản cụ thể: nhấn / (dấu gạch chéo tiến), nhập văn bản cần tìm, nhấn Enter. Di chuyển đến lần xuất hiện tiếp theo - phím n. (Bạn có nhận ra những hướng dẫn về con người không? Không có gì ngạc nhiên, less cũng được sử dụng để thể hiện sự giúp đỡ.)

Quyền

Bất kỳ tệp hoặc thư mục nào đều được liên kết với một tập hợp các “quyền”: quyền đọc tệp, quyền ghi vào tệp, quyền thực thi tệp. Tất cả người dùng được chia thành ba loại: chủ sở hữu tệp, nhóm chủ sở hữu tệp và tất cả những người dùng khác.

Bạn có thể xem quyền truy cập tệp bằng ls -l . Ví dụ:

> ls -l Makefile -rw-r--r-- 1 akira sinh viên 198 13/02 11:48 Makefile
Đầu ra này có nghĩa là chủ sở hữu (akira) có thể đọc và ghi tệp, nhóm (sinh viên) chỉ có thể đọc và tất cả người dùng khác cũng chỉ có thể đọc.

Nếu bạn nhận được thông báo từ chối cấp phép khi đang làm việc, điều này có nghĩa là bạn không có đủ quyền đối với đối tượng mà bạn muốn làm việc cùng.

Đọc thêm trong man chmod.

STDIN, STDOUT, băng tải (ống)

Có 3 luồng dữ liệu tiêu chuẩn liên quan đến mỗi chương trình thực thi: luồng dữ liệu đầu vào STDIN, luồng dữ liệu đầu ra STDOUT, luồng dữ liệu đầu ra lỗi STDERR.

Chạy chương trình wc, nhập văn bản Chúc một ngày tốt lành, nhấn Enter, nhập văn bản chúc một ngày tốt lành, nhấn Enter, nhấn Ctrl+d. Chương trình wc sẽ hiển thị số liệu thống kê về số lượng chữ cái, từ và dòng trong văn bản và phần cuối của bạn:

> wc chúc một ngày tốt lành hôm nay chúc một ngày tốt lành 2 5 24
Trong trường hợp này, bạn đã cung cấp văn bản hai dòng cho STDIN của chương trình và nhận được ba số trong STDOUT.

Bây giờ hãy chạy lệnh head -n3 /etc/passwd , nó sẽ trông giống như thế này:

> head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x: 2:2:bin:/bin:/usr/sbin/nologin
Trong trường hợp này, chương trình chính không đọc bất kỳ thứ gì từ STDIN mà ghi ba dòng vào STDOUT.

Bạn có thể tưởng tượng nó theo cách này: chương trình là một đường dẫn trong đó STDIN chảy vào và STDOUT chảy ra.

Thuộc tính quan trọng nhất của dòng lệnh Unix là các chương trình “ống” có thể được kết nối với nhau: đầu ra (STDOUT) của một chương trình có thể được chuyển dưới dạng dữ liệu đầu vào (STDIN) sang một chương trình khác.

Việc xây dựng các chương trình được kết nối như vậy được gọi là đường ống trong tiếng Anh hoặc băng tải hoặc đường ống trong tiếng Nga.

Việc kết hợp các chương trình thành một đường dẫn được thực hiện bằng ký hiệu | (thanh dọc)

Chạy lệnh head -n3 /etc/passwd |wc , nó sẽ trông giống như thế này:

> head -n3 /etc/passwd |wc 3 3 117
Đây là những gì đã xảy ra: chương trình head xuất ra ba dòng văn bản ở dạng STDOUT, ngay lập tức đi đến đầu vào của chương trình wc, chương trình này sẽ đếm số ký tự, từ và dòng trong văn bản kết quả.

Bạn có thể kết hợp bao nhiêu chương trình tùy thích vào một đường dẫn. Ví dụ: bạn có thể thêm một chương trình wc khác vào quy trình trước đó, chương trình này sẽ đếm xem có bao nhiêu từ và chữ cái trong đầu ra của wc đầu tiên:

> head -n3 /etc/passwd |wc |wc 1 3 24

Tạo đường ống (pipes) là một nhiệm vụ rất phổ biến khi làm việc trên dòng lệnh. Để biết ví dụ về cách thực hiện điều này trong thực tế, hãy đọc phần “Tạo đường dẫn một dòng”.

Chuyển hướng I/O

Đầu ra (STDOUT) của một chương trình không chỉ có thể được chuyển sang chương trình khác thông qua một đường dẫn mà còn có thể được ghi đơn giản vào một tệp. Việc chuyển hướng này được thực hiện bằng cách sử dụng > (dấu lớn hơn):

Ngày > /tmp/today.txt
Kết quả của việc thực thi lệnh này là tệp /tmp/today.txt sẽ xuất hiện trên đĩa. Xem nội dung của nó bằng cat /tmp/today.txt

Nếu một tập tin có cùng tên đã tồn tại thì nội dung cũ của nó sẽ bị hủy. Nếu tập tin không tồn tại, nó sẽ được tạo. Thư mục chứa tệp được tạo phải tồn tại trước khi lệnh được thực thi.

Nếu bạn không muốn ghi đè lên một tệp mà muốn thêm đầu ra vào cuối, hãy sử dụng >> :

Ngày >> /tmp/today.txt
Kiểm tra những gì hiện được ghi trong tập tin.

Ngoài ra, bạn có thể chuyển bất kỳ tệp nào vào chương trình thay vì STDIN. Thử:

wc

Phải làm gì khi có điều gì đó không rõ ràng

Nếu bạn gặp phải hành vi hệ thống mà bạn không hiểu hoặc muốn đạt được một kết quả nhất định nhưng không biết chính xác bằng cách nào, tôi khuyên bạn nên tiến hành theo thứ tự sau (nhân tiện, điều này không chỉ áp dụng cho shell):
  • Hãy đặt câu hỏi hoặc nhiệm vụ một cách rõ ràng nhất có thể - không có gì khó hơn việc giải “điều mà tôi không biết là gì”;
  • hãy nhớ nếu bạn đã gặp phải vấn đề tương tự hoặc tương tự - trong trường hợp này, bạn nên thử giải pháp đã hiệu quả lần trước;
  • đọc các trang man thích hợp (nếu bạn hiểu trang man nào phù hợp trong trường hợp của bạn) - có thể bạn sẽ tìm thấy các ví dụ phù hợp về cách sử dụng lệnh, các tùy chọn cần thiết hoặc liên kết đến các lệnh khác;
  • Hãy suy nghĩ: có thể thay đổi nhiệm vụ một chút không? - có lẽ, bằng cách thay đổi một chút các điều kiện, bạn sẽ gặp phải một vấn đề mà bạn đã biết cách giải quyết;
  • đặt câu hỏi được xây dựng rõ ràng của bạn trong công cụ tìm kiếm - có thể tìm thấy câu trả lời trên Stack Overflow hoặc các trang web khác;
Nếu không có cách nào ở trên giúp ích được, hãy tìm lời khuyên từ giáo viên, đồng nghiệp hoặc bạn bè có kinh nghiệm. Và đừng ngại đặt những câu hỏi “ngu ngốc” - không biết thì xấu hổ, không hỏi thì xấu hổ.

Nếu bạn giải quyết một vấn đề khó khăn (tự mình giải quyết, với sự trợ giúp của Internet hoặc người khác), hãy viết ra giải pháp của bạn phòng trường hợp vấn đề tương tự lại xảy ra với bạn hoặc bạn bè của bạn. Bạn có thể ghi lại nó trong một tệp văn bản đơn giản, trong Evernote hoặc xuất bản nó trên mạng xã hội.

Các phương pháp làm việc

Sao chép và dán- từ các trang man, từ các bài viết trên StackOverflow, v.v. Dòng lệnh bao gồm văn bản, hãy tận dụng lợi thế này: sao chép và sử dụng các lệnh ví dụ, viết ra những phát hiện thành công làm vật kỷ niệm, xuất bản chúng trên Twitter và blog.

Kéo lệnh trước đó từ lịch sử, thêm lệnh khác vào đường dẫn, chạy, lặp lại.Cm. Xem thêm phần “Tạo quy trình một lớp.”

Các lệnh cơ bản

  • đổi sang thư mục khác: cd ;
  • xem nội dung các file: cat, less, head, tail;
  • thao tác với tập tin: cp, mv, rm;
  • xem nội dung thư mục: ls , ls -l , ls -lS ;
  • cấu trúc thư mục: tree , tree -d (bạn có thể truyền thư mục làm tham số);
  • tìm kiếm tập tin: tìm . -tên ... ;

phân tích

  • wc, wc -l;
  • sắp xếp -k - sắp xếp theo trường được chỉ định;
  • sắp xếp -n - sắp xếp số;
  • khác - so sánh tập tin;
  • grep , grep -v , grep -w , grep "\ " , grep -E - tìm kiếm văn bản;
  • uniq , uniq -c - duy nhất chuỗi;
  • awk - trong tùy chọn awk "(print $1)", chỉ để lại trường đầu tiên từ mỗi dòng, $1 có thể được thay đổi thành $2, $3, v.v.;

Chẩn đoán hệ thống

  • ps axuww - thông tin về các tiến trình (chương trình đang chạy) đang chạy trên máy;
  • top - xem tương tác các quy trình sử dụng nhiều tài nguyên nhất;
  • df - dung lượng đĩa đã sử dụng và trống;
  • du - tổng kích thước của các tệp trong thư mục (đệ quy với các thư mục con);
  • strace , ktrace - hệ thống gọi quy trình là gì;
  • lsof - tập tin mà tiến trình sử dụng;
  • netstat -na, netstat -nap - cổng và ổ cắm nào đang mở trong hệ thống.

Bạn có thể không có một số chương trình; chúng cần được cài đặt thêm. Ngoài ra, một số tùy chọn của các chương trình này chỉ dành cho người dùng có đặc quyền (root).

Thực hiện hàng loạt và bán tự động

Lúc đầu, hãy bỏ qua phần này; bạn sẽ cần những lệnh và cấu trúc này khi bạn làm việc với tập lệnh shell đơn giản.
  • thử - kiểm tra điều kiện;
  • while đọc - lặp từng dòng STDIN ;
  • xargs - thay thế các chuỗi từ STDIN thành các tham số của chương trình đã chỉ định;
  • seq - tạo chuỗi số tự nhiên;
  • () - kết hợp đầu ra của một số lệnh;
  • ; - làm việc này đến việc khác;
  • && - thực thi nếu lệnh đầu tiên hoàn thành thành công;
  • || - thực thi nếu lệnh đầu tiên thất bại;
  • tee - sao chép đầu ra chương trình thành STDOUT và vào một tệp trên đĩa.

Điều khoản khác

  • ngày - ngày hiện tại;
  • cuộn tròn - tải xuống tài liệu từ url đã chỉ định và ghi kết quả vào STDOUT;
  • touch - cập nhật ngày sửa đổi tập tin;
  • kill - gửi tín hiệu đến quá trình;
  • true - không làm gì cả, trả về true, hữu ích cho việc tổ chức các vòng lặp vĩnh cửu;
  • sudo - thực thi lệnh với quyền root "a.

Tạo một đường dẫn một lớp

Hãy xem một ví dụ về một tác vụ thực tế: chúng ta cần loại bỏ tất cả các quy trình máy chủ tác vụ-6 đang chạy với tư cách là người dùng hiện tại.

Bước 1.
Hiểu chương trình nào tạo ra dữ liệu gần đúng cần thiết, ngay cả khi không ở dạng thuần túy. Đối với nhiệm vụ của chúng tôi, cần có danh sách tất cả các quy trình trong hệ thống: ps axuww. Phóng.

Bước 2.
Nhìn vào dữ liệu nhận được bằng mắt, đưa ra bộ lọc sẽ loại bỏ một số dữ liệu không cần thiết. Đây thường là grep hoặc grep -v . Sử dụng phím “Lên” để lấy lệnh trước đó ra khỏi lịch sử, gán bộ lọc được phát minh cho lệnh đó và chạy lệnh đó.

Ps axuww |grep `whoami`
- chỉ các quy trình của người dùng hiện tại.

Bước 3.
Lặp lại bước 2 cho đến khi bạn có được dữ liệu sạch mà bạn cần.

"
- tất cả các quy trình có tên được yêu cầu (cộng với, có lẽ, các quy trình bổ sung như vim task-6-server.c, v.v.),

Ps axuww |grep `whoami` | grep "\ " | grep -v vim ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v less
- chỉ xử lý với tên được yêu cầu

Ps axuww |grep `whoami` | grep "\ " | grep -v vim |grep -v less |awk "(print $2)"

Pid của các quy trình cần thiết, bước 3 đã hoàn thành

Bước 4.
Áp dụng một trình xử lý cuối cùng phù hợp. Sử dụng phím “Lên”, chúng tôi rút lệnh trước đó ra khỏi lịch sử và thêm quá trình xử lý sẽ hoàn thành giải pháp cho vấn đề:

  • |wc -l để đếm số lượng tiến trình;
  • >pids để ghi pids vào một tập tin;
  • |xargs kill -9 quá trình tiêu diệt.

Nhiệm vụ đào tạo

Bạn muốn thực hành các kỹ năng mới? Hãy thử các tác vụ sau:
  • lấy danh sách tất cả các tập tin và thư mục trong thư mục chính của bạn;
  • lấy danh sách tất cả các bài viết của con người từ danh mục 2 (cuộc gọi hệ thống);
  • đếm số lần từ grep xuất hiện trong trang man của chương trình grep;
  • đếm xem có bao nhiêu tiến trình hiện đang chạy bằng root;
  • tìm lệnh nào xuất hiện trong số lượng danh mục trợ giúp tối đa (man);
  • đếm số lần từ var xuất hiện trên trang ya.ru.
Gợi ý: bạn sẽ cần find , grep -o , awk "(print $1)" , biểu thức chính quy trong grep , Curl -s .

Học gì tiếp theo?

Nếu bạn bắt đầu thích dòng lệnh, đừng dừng lại, hãy tiếp tục cải thiện kỹ năng của mình.

Dưới đây là một số chương trình chắc chắn sẽ có ích nếu bạn sống bằng dòng lệnh:

  • tìm với các tùy chọn phức tạp
  • thích hợp
  • định vị
  • telnet
  • mèo mạng
  • tcpdump
  • rsync
  • màn hình
  • zgrep, zless
  • visudo
  • crontab -e
  • gửi thư
Ngoài ra, theo thời gian, bạn nên thành thạo một số loại ngôn ngữ kịch bản, chẳng hạn như Perl hoặc Python, hoặc thậm chí cả hai.

Ai cần cái này?

Ngày nay việc học dòng lệnh và shell script có đáng không? Chắc chắn có giá trị nó. Tôi sẽ chỉ đưa ra một vài ví dụ về yêu cầu của Facebook đối với những ứng viên muốn xin việc tại FB.