1. Trang chủ
  2. » Thể loại khác

ĐẠI HỌC THĂNG LONG BỘ MÔN TIN HỌC THỰC HÀNH LINUX

65 4 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Thực hành Linux
Tác giả Lê Thị Thuý Nga, Trần Minh Tuấn
Trường học Đại học Thăng Long
Chuyên ngành Tin học
Thể loại Tài liệu tham khảo
Năm xuất bản 2005
Thành phố Hà Nội
Định dạng
Số trang 65
Dung lượng 0,98 MB

Cấu trúc

  • 1. Giới thiệu Linux và Shell (5)
    • 1.1. Hệ điều hành, Unix và Linux (5)
    • 1.2. Shell (6)
  • 2. Thao tác cơ bản trên Shell (7)
    • 2.1. Chuẩn bị (7)
      • 2.1.1. Đăng nhập (7)
      • 2.1.2. Câu lệnh (7)
    • 2.2. Các câu lệnh với file/thư mục (9)
      • 2.2.1. Tạo/Xóa thư mục: Lệnh mkdir/rmdir (10)
      • 2.2.2. Hiển thị nội dung thư mục: Lệnh ls (10)
      • 2.2.3. Chuyển thư mục: Lệnh cd (11)
      • 2.2.4. Sao chép file: Lệnh cp (11)
      • 2.2.5. Di chuyển file: Lệnh mv (12)
      • 2.2.6. Xoá file: Lệnh rm (12)
      • 2.2.7. Liệt kê các file: ls (12)
      • 2.2.8. Hiển thị nội dung file: Lệnh cat và more (13)
      • 2.2.9. In file: Lệnh lpr, lpq và lprm (13)
    • 2.3. Điều hướng (Redirection) (14)
      • 2.3.1. Điều hướng dòng ra chuẩn STDOUT: > và >> (14)
      • 2.3.2. Điều hướng dòng vào chuẩn STDIN : < (15)
      • 2.3.3. Điều hướng dòng lỗi chuẩn STDERR: 2>, >& (16)
    • 2.4. Tuyến dẫn (Pipes) (17)
      • 2.4.1. Tuyến dẫn và điều hướng: Lệnh tee (18)
    • 2.5. Các ký tự đặc biệt (19)
      • 2.5.1. Ký tự đại diện cho dãy ký tự: * (19)
      • 2.5.2. Ký tự đại diện cho một ký tự: ? (19)
      • 2.5.3. Ký tự đại diện cho tập các ký tự: [ ] (20)
    • 2.6. Cấu trúc file (20)
      • 2.6.1. Tên file (20)
      • 2.6.2. Các kiểu file (21)
      • 2.6.3. Phân loại file: Lệnh file (21)
      • 2.6.4. Duyệt và hiển thị nội dung file: Lệnh od (22)
      • 2.6.5. Các thư mục của hệ thống (22)
    • 2.7. Đặt quyền trên file/thư mục (22)
      • 2.7.1. Đặt quyền bằng ký hiệu quyền (23)
      • 2.7.2. Đặt quyền tuyệt đối bằng mã nhị phân (23)
      • 2.7.3. Quyền trên thư mục (24)
      • 2.7.4. Thay đổi quyền sở hữu file (24)
    • 2.8. Tạo liên kết (25)
      • 2.8.1. Liên kết cứng (Hard Link) (26)
      • 2.8.2. Liên kết biểu tượng (Symbolic Link) (26)
    • 2.9. Một số lệnh khác (27)
      • 2.9.1. Tìm kiếm file: Lệnh find (27)
      • 2.9.2. Ghép nối thiết bị vào cây thư mục: Lệnh mount và umount (28)
      • 2.9.3. Lưu trữ và nén file: Lệnh tar và gzip (29)
    • 2.10. Điều khiển tiến trình (30)
      • 2.10.1. Background, Foreground: &, bg, fg (31)
      • 2.10.2. Huỷ bỏ một công vụ: Lệnh kill (32)
      • 2.10.3. Ngắt một công vụ: CTRL-Z (32)
      • 2.10.4. Hẹn giờ thực hiện: at (32)
  • 3. Lập trình shell (33)
    • 3.1. Biến shell (33)
      • 3.1.1. Tạo và sử dụng biến: =, $, set, unset (33)
      • 3.1.2. Các dấu bao xâu (34)
      • 3.1.3. Biến môi trường (35)
    • 3.2. Một số câu lệnh lập trình thông dụng (36)
      • 3.2.1. Nhập và xuất: Lệnh read và echo (37)
      • 3.2.2. Tính toán số học: Lệnh let (37)
      • 3.2.3. So sánh và kiểm tra: Lệnh test (37)
    • 3.3. Kịch bản shell (Shell Script) (38)
      • 3.3.1. Tạo và thực thi script (38)
      • 3.3.2. Một số chương trình ví dụ (39)
      • 3.3.3. Biến đối số (39)
      • 3.3.4. Các cấu trúc điều khiển (40)
      • 3.3.5. Export biến (44)
    • 3.4. Hàm (44)
    • 3.5. Các script khởi tạo của hệ thống (46)
      • 3.5.1. File khởi tạo dăng nhập: .bash_profile (47)
      • 3.5.2. File khởi tạo BASH: .bashrc (47)
      • 3.5.3. File khởi tạo dăng xuất: .bash_logout (47)
  • 4. Lọc (Filters) (47)
    • 4.1. Lọc file (48)
      • 4.1.1. Xuất file với cat, tee, head và tail (48)
      • 4.1.2. Các filter khác: wc, spell, sort (49)
      • 4.1.3. Tìm kiếm trong file: grep, fgrep, egrep (50)
      • 4.1.4. Biểu thức chính quy (regular expression) (51)
    • 4.2. Lọc soạn thảo: sed (54)
    • 4.3. Lọc dữ liệu (56)
      • 4.3.1. Sắp xếp dữ liệu: sort (56)
      • 4.3.2. Cắt trường dữ liệu: cut (57)
      • 4.3.3. Loại bỏ trùng lặp dữ liệu: uniq (57)
      • 4.3.4. Nối hai file dữ liệu : join (57)
  • 5. Một số tiện ích khác (58)
    • 5.1. gawk (58)
      • 5.1.1. gawk dạng đơn giản (58)
      • 5.1.2. gawk dạng mở rộng (60)
      • 5.1.3. Các cấu trúc điều khiển (61)
    • 5.2. vi (62)
    • 5.3. emacs (63)

Nội dung

Giới thiệu Linux và Shell

Hệ điều hành, Unix và Linux

Hệ điều hành là thành phần thiết yếu trong hệ thống máy tính, giúp người dùng tương tác và sử dụng máy tính dễ dàng Nó là phần mềm hệ thống chủ yếu quản lý toàn bộ phần cứng và phần mềm của máy tính.

Hệ điều hành quản lý trực tiếp các phần cứng như CPU, bộ nhớ, bàn phím và ổ đĩa, đồng thời phân phối tài nguyên máy tính cho các ứng dụng Tất cả các chương trình ứng dụng, bao gồm soạn thảo văn bản, trò chơi và nghe nhạc, đều được thực thi thông qua hệ điều hành.

Cho đến nay, đã có nhiều hệ điều hành được phát triển như MS-DOS, MS-Windows, Unix và Mac OS, mỗi loại đều sở hữu những đặc điểm riêng biệt Hệ điều hành Unix được ra mắt vào năm

Unix, được phát triển bởi Ken Thompson và Dennis Ritchie tại AT&T Bell Labs vào năm 1969, đã trở thành nền tảng cho nhiều phiên bản khác nhau Từ phiên bản đầu tiên, các nhà nghiên cứu tại Đại học California, Berkeley đã mở rộng và cho ra đời phiên bản Unix BSD vào năm 1975 Nhiều tổ chức khác cũng đã phát triển các phiên bản riêng của Unix như Xenix, System V, UnixWare và AUX.

Linux được phát triển từ dự án của sinh viên Linus Torvald tại Đại học Helsinki, với mục tiêu tạo ra một phiên bản Unix hiệu quả cho máy PC Phiên bản Linux 0.11 đầu tiên ra mắt vào năm 1991, kết hợp lõi của Linus và các chương trình hỗ trợ từ nhóm GNU Qua thời gian, Linux đã trở nên phổ biến trên Internet, nhờ vào sự cải tiến và bổ sung tính năng từ nhiều lập trình viên toàn cầu Hệ thống này cung cấp đầy đủ tiện ích Internet như ftp, telnet và các công cụ phát triển phần mềm như trình biên dịch C++ và trình gỡ rối, đồng thời vẫn giữ được tính nhỏ gọn, nhanh và ổn định, có thể hoạt động hiệu quả trên bộ nhớ chỉ 4 MB Linux tuân thủ các chuẩn của Unix, đặc biệt là chuẩn POSIX, và được chia thành 4 thành phần chính: lõi (kernel), vỏ (shell), cấu trúc file (file structure) và các tiện ích (utilities) Lõi quản lý các chương trình và thiết bị phần cứng, vỏ là giao diện người dùng, trong khi cấu trúc file tổ chức lưu trữ file trong các thư mục, cho phép tạo ra thư mục con và file khác.

Ba thành phần chính của hệ điều hành Linux kết hợp với nhau để tạo ra một cấu trúc cơ bản, cho phép người dùng thực thi các chương trình, quản lý tệp tin và tương tác với hệ thống Ngoài ra, Linux còn cung cấp các phần mềm tiện ích tiêu chuẩn như trình soạn thảo, chương trình dịch và chương trình truyền tin, giúp nâng cao trải nghiệm người dùng.

Shell

Shell là giao diện giữa lõi hệ thống và người sử dụng, nhận và phân tích lệnh trước khi gửi tới lõi để thực thi Giao diện của shell đơn giản, thường có dấu nhắc để người dùng nhập lệnh, được gọi là giao diện dòng lệnh (command line interface) Bên cạnh đó, Linux cũng cung cấp giao diện đồ họa (GUI) X-Windows, cho phép người dùng tương tác qua các nút bấm, biểu tượng và thực đơn thay vì gõ lệnh Mặc dù giao diện cửa sổ rất tiện lợi, nó chỉ là bề mặt của shell; bộ quản lý cửa sổ sẽ chuyển lệnh từ các thành phần đồ họa tới shell, nơi lệnh sẽ được phân tích và gửi đến lõi để thực hiện.

Shell không chỉ nhận và thông dịch lệnh mà còn cung cấp môi trường cấu hình hệ thống và lập trình Nó sở hữu ngôn ngữ lập trình riêng, cho phép viết các chương trình thực hiện công việc phức tạp, với các đặc tính tương tự như ngôn ngữ lập trình thông thường, bao gồm cấu trúc lặp và rẽ nhánh.

Trong suốt nhiều năm, nhiều loại shell đã được phát triển, nhưng hiện tại có ba loại shell chính: Bourne, Korn và C-shell Bourne shell được phát triển tại Bell Labs cho hệ thống System V, trong khi C-shell được thiết kế cho phiên bản BSD của Unix Korn shell là một sự phát triển tiếp theo, kết hợp các tính năng của Bourne và C-shell.

Giao diện dòng lệnh (Command Line Interface) và giao diện đồ họa (Graphical User Interface) là những phiên bản nâng cấp từ Bourne shell Các phiên bản hiện tại của Unix tích hợp cả ba loại shell để người dùng có thể lựa chọn Trong Linux, có nhiều phiên bản công cộng hoặc nâng cấp của các shell này, bao gồm Bourne Again shell (BASH), TC-shell (TCSH) và Public Domain Korn shell (PDKSH) BASH nổi bật với việc kết hợp nhiều tính năng nâng cao từ các loại shell khác Khi khởi động Linux, người dùng sẽ bắt đầu trong BASH shell, nhưng có thể dễ dàng chuyển sang các shell khác nếu cần.

Thao tác cơ bản trên Shell

Chuẩn bị

Linux là một hệ điều hành đa người dùng, trong đó mỗi người dùng được xác định qua một tài khoản đăng nhập bao gồm tên người dùng và mật khẩu Để có thể truy cập vào Linux, bạn cần được cấp một tài khoản, thường do người quản trị hệ thống tạo ra.

Khi bạn đăng nhập, hãy nhập tên người dùng và mật khẩu Lưu ý rằng mật khẩu sẽ không hiển thị khi bạn gõ để đảm bảo tính bảo mật.

Ví dụ: login: nga password:

Sau khi đăng nhập vào Linux, bạn sẽ thấy dấu nhắc shell (shell prompt) đánh dấu vị trí bắt đầu dòng lệnh Mỗi loại shell có dấu nhắc riêng, trong BASH, dấu nhắc là ký tự $ Từ dấu nhắc này, bạn có thể gõ các lệnh để shell thực thi, và các câu lệnh được tính từ vị trí sau dấu nhắc shell.

Ví dụ: Gõ lệnh date để xem ngày tháng và giờ hiện tại

Cấu trúc của một câu lệnh gồm tên lệnh (command name), tiếp theo có thể là các tùy chọn (options) và đối số (arguments):

$ tên_lệnh tùy_chọn đối_số

Chú ý: Các thành phần trên phải cách nhau ít nhất là một khoảng trắng

Ví dụ 1: Lệnh chuyển thư mục

Ví dụ 2: Lệnh hiển thị nội dung thư mục

Ví dụ 3: Lệnh xóa toàn bộ thư mục temp

Khi người dùng nhập lệnh và nhấn Enter, shell sẽ xác nhận tính hợp lệ và sự tồn tại của lệnh đó; nếu lệnh hợp lệ, nó sẽ được thực thi, ngược lại, shell sẽ thông báo lỗi.

Tùy chọn và đối số

Tùy chọn là mã gồm một hoặc nhiều ký tự xuất hiện ngay sau dấu (-), thể hiện kiểu thao tác của lệnh Đối số là một hoặc nhiều từ đứng sau các tùy chọn, cho biết lệnh sẽ thực hiện trên đối tượng nào.

Mỗi lệnh trong hệ thống có những tùy chọn và đối số riêng biệt Để tìm hiểu chi tiết về lệnh cùng với các tùy chọn và đối số của nó, bạn có thể sử dụng lệnh man.

Ví dụ: Tra cứu lệnh ls

$ man ls Để thoát khỏi chế độ tra cứu, bạn bấm phím q Đặc điểm của dòng lệnh

Dòng lệnh là một vùng văn bản cho phép bạn soạn thảo, và trước khi thực thi lệnh bằng phím ENTER, bạn có thể chỉnh sửa nó bằng các phím mũi tên và phím xóa Đặc biệt, shell có khả năng lưu trữ danh sách các lệnh đã nhập, giúp bạn dễ dàng truy cập và sửa đổi các lệnh trước đó.

↑ để hiện lại câu lệnh đã thực hiện ngay trước đó, hoặc ↓ để hiện câu lệnh ngay sau đó

Bạn có thể đặt nhiều câu lệnh trên một dòng lệnh, nhưng cần phải sử dụng dấu chấm phẩy (;) giữa các câu lệnh Ngoài ra, bạn cũng có thể viết một câu lệnh trên nhiều dòng khác nhau, tuy nhiên, ở cuối mỗi dòng phải có dấu gạch chéo (\).

Khả năng hoàn chỉnh lệnh hay tên file

Khi sử dụng dòng lệnh, bạn có thể nhấn phím TAB để shell tự động hoàn thành tên lệnh hoặc tên file chưa đầy đủ Nếu có nhiều lựa chọn khả thi, shell sẽ hiển thị danh sách tất cả các tên có chứa ký tự mà bạn đã nhập.

Bạn có thể nhập một phần tên file và nhấn hai phím ESC và ? để hệ thống liệt kê các tên có phần đầu giống với ký tự đã nhập.

Ví dụ: Giả sử đã có file document

$ cat doc (gõ phím TAB)

$ cat document (shell tự điền nốt phần còn lại)

BASH có khả năng lưu trữ tối đa 500 câu lệnh đã thực hiện gần nhất Để xem danh sách các lệnh này, bạn chỉ cần sử dụng lệnh "history" Nếu muốn thực hiện lại một lệnh trong danh sách, hãy gõ số hiệu của lệnh đó ngay sau dấu "!".

Khi chỉ nhập dấu ! mà không kèm theo số hiệu lệnh, lệnh cuối cùng sẽ được thực hiện Để dễ dàng sử dụng các lệnh dài hoặc khó nhớ, bạn có thể tạo bí danh cho lệnh thông qua lệnh alias Lệnh alias không thay đổi tên lệnh gốc mà chỉ gán một tên khác cho nó, và có thể sử dụng để đặt bí danh cho lệnh kèm theo tùy chọn.

$ ls mydata today Để xem tất cả các bí danh lệnh hiện có, bạn gõ lệnh alias không có đối số.

Các câu lệnh với file/thư mục

File là đơn vị lưu trữ dữ liệu trên thiết bị lưu trữ trong hệ thống Linux, nơi các file được tổ chức trong các thư mục, tạo thành một cây thư mục bắt nguồn từ thư mục gốc Đường dẫn (path) là chuỗi ký tự dùng để xác định vị trí của file hoặc thư mục, bao gồm hai loại: đường dẫn tuyệt đối, xác định vị trí từ thư mục gốc, và đường dẫn tương đối, xác định vị trí từ thư mục hiện tại Khi đăng nhập vào hệ thống Linux, người dùng sẽ được đặt trong thư mục đăng nhập nằm trong /home Để kiểm tra đường dẫn tới thư mục hiện tại, người dùng có thể sử dụng lệnh pwd.

Ví dụ: bin home tmp usr

(thư mục gốc) sv72 sv73 nga thuchanh data baitap

Để thao tác trên một file hoặc thư mục, bạn cần nắm rõ đường dẫn đến nó Nếu không chỉ định đường dẫn cụ thể, hệ thống sẽ mặc định bắt đầu từ thư mục làm việc hiện tại.

- Với đường dẫn tới một thư mục, bạn có thể thêm ký tự / vào cuối, ví dụ:

/home/sv72/thuchanh/ tương đương với /home/sv72/thuchanh

Trong tài liệu ta sẽ chọn cách viết này để nhấn mạnh một thư mục

Các ký hiệu thư mục

Thư mục gốc: / (dấu gạch chéo)

Thư mục hiện thời: (dấu chấm)

Thư mục cha của thư mục hiện thời: (dấu chấm chấm)

Thư mục đăng nhập: ~ (dấu ngã)

Các thao tác cơ bản mà hầu hết các shell đều cung cấp chủ yếu liên quan đến việc quản lý file và thư mục Dưới đây, chúng ta sẽ xem xét chi tiết các lệnh cần thiết để thực hiện các công việc này.

2.2.1 T ạ o/Xóa th ư m ụ c: L ệ nh mkdir/rmdir

Lệnh mkdir dùng để tạo thư mục, đối số của nó là tên thư mục cần tạo

Ví dụ 1: Tạo thư mục thuchanh trong thư mục sv72 của thư mục home nằm trong thư mục gốc

Ví dụ 2: Tạo thư mục week1 trong thư mục đăng nhập

Ví dụ 3: Tạo thư mục script trong thư mục hiện thời

Lệnh rmdir dùng để xóa một thư mục rỗng, cách dùng giống như mkdir

2.2.2 Hi ể n th ị n ộ i dung th ư m ụ c: L ệ nh ls

Lệnh `ls` được sử dụng để hiển thị các tệp và thư mục con trong một thư mục cụ thể Để phân biệt giữa tệp và thư mục, bạn có thể sử dụng tùy chọn `-F`, khi đó các thư mục sẽ được đánh dấu bằng dấu `/` ngay sau tên của chúng.

Ví dụ 1: Liệt kê nội dung của thư mục hiện thời

$ ls aaa backup mydata zyx

$ ls –F aaa backup/ mydata zyx/

Để hiển thị nội dung của một thư mục khác không phải thư mục hiện tại, bạn có thể sử dụng lệnh ls kèm theo đường dẫn đến thư mục mong muốn.

Lệnh cd cho phép bạn thay đổi thư mục làm việc từ thư mục này sang thư mục khác

Sau câu lệnh cd ở trên, thư mục làm việc sẽ chuyển sang /home/sv72/thuchanh

Sau câu lệnh thứ ba, thư mục làm việc sẽ là thư mục sv

2.2.4 Sao chép file: L ệ nh cp Để copy file ta dùng lệnh cp với đối số thứ nhất là file gốc cần copy (file nguồn), đối số thứ hai là file bản sao (file đích)

Sau lệnh copy ở trên ta sẽ có fileluu là bản sao của datafile và cả hai file đều thuộc thư mục hiện thời

$ cp datafile /home/sv72/fileluu

Câu lệnh trên tạo bản sao của datafile thành fileluu trong thư mục sv72 Để ngăn chặn việc ghi đè lên file đích đã có, ta sử dụng tùy chọn –i, giúp shell yêu cầu xác nhận trước khi thực hiện thao tác sao chép.

Khi sử dụng lệnh cp, nếu đối số thứ hai là tên thư mục, một file đích với tên giống file gốc sẽ được tạo trong thư mục đó Để đặt tên khác cho file đích, cần chỉ định tên file cụ thể như trong ví dụ 2.

$ cp datafile /home/sv72/thuchanh/

Sau câu lệnh trên, trong thuchanh sẽ có một file tên là datafile

2.2.5 Di chuy ể n file: L ệ nh mv

Lệnh mv hoạt động tương tự như lệnh cp, nhưng thay vì tạo ra một bản sao mới, nó sẽ di chuyển file gốc đến vị trí mới, khiến file gốc không còn tồn tại tại vị trí ban đầu.

Câu lệnh trên sẽ đổi tên file product thành moto

Câu lệnh trên di chuyển file product vào thư mục toyota

Lệnh rm cho phép xoá file, đối số của nó là tên các file cần xoá

Ví dụ: Xoá file datafile và product

Ta cũng có thể xoá một thư mục và tất cả nội dung bên trong nó bằng lệnh rm với tuỳ chọn –r

Ví dụ: Xoá thư mục temp

2.2.7 Li ệ t kê các file: ls

Lệnh ls được sử dụng để xem nội dung của thư mục, và khi có đối số là tên file, nó sẽ hiển thị thông tin chi tiết về file đó Lệnh này còn có nhiều tùy chọn khác nhau để người dùng có thể xem các thông tin đa dạng.

-a: Hiển thị tất cả các file kể cả file ẩn (file hệ thống)

-l: Hiển thị tất cả thông tin về file

-i: Hiển thị chỉ số inode của file

Kết quả của lệnh trên như sau:

Kiểu file Số liên kết Tên nhóm

Ngày giờ sửa đổi Tên file

2.2.8 Hi ể n th ị n ộ i dung file: L ệ nh cat và more

Lệnh cat cho phép hiển thị toàn bộ nội dung của một file

Ví dụ: Hiển thị nội dung file mydata

Lệnh cat hiển thị toàn bộ nội dung của file, điều này có thể gây bất tiện với các file dài Để khắc phục, shell cung cấp lệnh more, cho phép người dùng kiểm soát và giới hạn nội dung hiển thị từng phần Bạn có thể dễ dàng xem tiếp hoặc quay lại phần nội dung trước Sử dụng phím Space bar để chuyển sang trang tiếp theo, phím Enter để xem dòng tiếp theo, phím b để quay lại trang trước và phím q để thoát.

2.2.9 In file: L ệ nh lpr, lpq và lprm

Lệnh lpr sẽ gửi nội dung file cần in ra máy in

Ví dụ: In hai file mydata và aaa

Lệnh lpq sẽ hiển thị danh sách các yêu cầu in đang chờ trong hàng đợi, bao gồm thông tin về người đã gửi lệnh in, chỉ số của từng yêu cầu và kích thước của file in.

Filename /home/sv/aaa Lệnh lprm sẽ thực hiện việc huỷ yêu cầu in, đối số của nó là chỉ số ID của yêu cầu in

Dùng tên đường dẫn tuyệt đối và tương đối

Trong quá trình thao tác lệnh, bạn có thể sử dụng đường dẫn tương đối hoặc tuyệt đối để tham chiếu đến file và thư mục Đường dẫn tuyệt đối giúp bạn không cần quan tâm đến thư mục làm việc hiện tại, nhưng yêu cầu gõ nhiều ký tự hơn Ngược lại, đường dẫn tương đối cho phép bạn gõ ít ký tự hơn, nhưng cần phải biết thư mục làm việc hiện tại để sử dụng các ký tự như (.), ( ) hay (~) Do đó, việc kết hợp linh hoạt giữa hai loại đường dẫn này là phương pháp tối ưu.

$ ls (Hiển thị nội dung thư mục sv72)

$ ls /data/ (Hiển thị nội dung thư mục data nằm trong sv72)

$ cp /home/nga/data/bai1 / (Copy file bai1 vào thư mục hiện tại)

Điều hướng (Redirection)

Trong hệ điều hành Linux, mọi file được cấu trúc như một chuỗi các byte, cho phép dễ dàng sao chép và ghi thêm dữ liệu từ file khác Dữ liệu từ thiết bị vào/ra cũng được tổ chức theo dạng dòng byte Dữ liệu nhập từ bàn phím được gọi là dòng vào chuẩn (STDIN), trong khi dữ liệu đầu ra từ các lệnh hoặc chương trình được gọi là dòng ra chuẩn (STDOUT) Theo mặc định, STDIN nhận dữ liệu từ bàn phím và STDOUT xuất dữ liệu ra màn hình.

Cách tổ chức của STDIN và STDOUT tương tự như tổ chức của file, giúp dễ dàng tương tác với file trong Linux Hệ điều hành này cung cấp khả năng điều hướng, cho phép chuyển dữ liệu vào và ra từ file thay vì chỉ qua các thiết bị vào ra chuẩn.

2.3.1 Đ i ề u h ướ ng dòng ra chu ẩ n STDOUT: > và >>

Nếu bạn muốn lưu danh sách các file vào một file thay vì hiển thị trên màn hình, bạn cần điều hướng dòng ra chuẩn vào file bằng cách sử dụng toán tử điều hướng ">" Sau câu lệnh, chỉ cần thêm tên file mà bạn muốn chuyển dữ liệu vào.

Kết quả của câu lệnh ls trên sẽ được ghi vào file ketqua thay vì hiển thị ra màn hình

Khi điều hướng trong shell, một file đích mới sẽ được tạo ra và nếu file này đã tồn tại, nó sẽ bị ghi đè Để ngăn chặn việc ghi đè file trong quá trình điều hướng, bạn cần thiết lập lại thuộc tính noclobber.

$ set –o noclobber aaa backup mydata zyx

Standard Output aaa backup mydata zyx ketqua

Để ghi đè lên file đã tồn tại mặc dù đã thiết lập đặc tính, bạn cần thêm dấu ! sau toán tử điều hướng Khi làm như vậy, shell sẽ cho phép ghi đè file.

Thêm nội dung vào file điều hướng: >>

Bằng cách dùng toán tử >>, dữ liệu từ STDOUT sẽ được ghi thêm vào cuối file điều hướng thay vì ghi đè lên nó

Sau đoạn lệnh trên, file ketqua chứa nội dung là kết quả của câu lệnh ls và câu lệnh date

Chú ý với điều hướng STDOUT

Mặc dù toán tử điều hướng và tên file xuất hiện sau câu lệnh, nhưng toán tử điều hướng được thực hiện trước Điều này có nghĩa là toán tử điều hướng tạo file và thiết lập điều hướng trước khi nhận dữ liệu từ STDOUT Nếu file điều hướng đã tồn tại, nó sẽ bị xoá, dẫn đến lỗi khi sử dụng tên file giống nhau cho cả file đầu vào và file điều hướng Do thao tác điều hướng diễn ra trước, file đầu vào sẽ bị xoá và thay thế bằng một file rỗng cùng tên, khiến cho khi câu lệnh được thực hiện, file đầu vào sẽ không có dữ liệu.

2.3.2 Đ i ề u h ướ ng dòng vào chu ẩ n STDIN : <

Mặc định, STDIN nhận dữ liệu từ bàn phím và chuyển các ký tự gõ vào câu lệnh Khi sử dụng lệnh cat mà không có đối số, lệnh này sẽ đọc dữ liệu từ STDIN và xuất ra STDOUT, cho phép người dùng nhập dữ liệu từ bàn phím và hiển thị kết quả trên màn hình.

This is a new line for the cat for the cat command command

^D (Nhấn tổ hợp phím Ctrl+D để kết thúc)

Linux sử dụng phương pháp đệm dòng (line buffering), vì vậy nội dung chỉ được hiển thị sau khi bạn hoàn thành việc gõ toàn bộ một dòng.

Nếu bạn kết hợp lệnh cat với điều hướng thì bạn có thể lưu nội dung nhập được vào file

Ví dụ lệnh sau sẽ tạo nội dung cho myfile

I am Linux, how do you do!

Lệnh cat không có đối số và nhận dữ liệu đầu vào từ STDIN Sau đó, toán tử điều hướng sẽ chuyển dữ liệu đầu ra của lệnh cat vào myfile, sử dụng cú pháp điều hướng với STDIN: &

Khi thực hiện một câu lệnh không hợp lệ, shell sẽ hiển thị thông báo lỗi Thông báo này được gửi đến một dòng byte riêng biệt, được gọi là dòng lỗi chuẩn (STDERR), và mặc định hiển thị trên màn hình.

$ cat nofile cat: nofile not found

Do STDERR là một dòng riêng biệt nên bạn sẽ vẫn nhìn thấy thông báo lỗi trên màn hình ngay cả khi đã điều hướng STDOUT

$ cat nofile > ketqua cat: nofile not found

Việc điều hướng dòng lỗi chuẩn giúp ghi lại thông báo lỗi vào file, mang lại lợi ích trong việc theo dõi các lỗi trong quá trình thực hiện lệnh Trong hệ thống điều hướng shell, các dòng byte chuẩn được đánh số theo quy định: STDIN là số 0, STDOUT là số 1 và STDERR là số 2 Mặc định, toán tử > sẽ thực hiện điều hướng trên STDOUT, nhưng để điều hướng STDERR, ta cần sử dụng số thứ tự tham chiếu 2.

Ví dụ: Đưa thông báo lỗi vào myerrors

$ cat myerrors cat: nofile not found

Ta cũng có thể dùng kết hợp với toán tử >> để ghi thêm dữ liệu

$ cat myerrors cat: nofile not found cat: datafile not found

Có thể điều hướng cả STDOUT và STDERR nhưng phải chỉ rõ tham chiếu cho từng dòng

Khi sử dụng lệnh `$ cat myerrors`, nếu tệp `nofile` tồn tại và có dữ liệu, dữ liệu sẽ được chuyển hướng và ghi vào tệp `mydata` Ngược lại, nếu tệp `nofile` không tồn tại hoặc xảy ra lỗi, thông báo lỗi sẽ được ghi vào tệp `myerrors`.

Tuyến dẫn (Pipes)

Trong nhiều trường hợp, bạn cần gửi kết quả của một lệnh sang lệnh tiếp theo, chẳng hạn như liệt kê danh sách file và in chúng Để thực hiện điều này, bạn sử dụng hai lệnh: lệnh ls để liệt kê file và lệnh lpr để gửi danh sách ra máy in Bằng cách thiết lập kết nối giữa hai lệnh, đầu ra của lệnh ls sẽ trở thành đầu vào cho lệnh lpr, cho phép dữ liệu di chuyển từ lệnh này sang lệnh khác.

Kết nối hai câu lệnh được thực hiện thông qua tuyến dẫn, với toán tử | giữa chúng Dòng ra chuẩn của câu lệnh đầu tiên sẽ trở thành dòng vào chuẩn của câu lệnh tiếp theo.

Ví dụ 1: Với yêu cầu trên, ta làm như sau:

Ví dụ 2: Hiển thị nội dung file mydata ra máy in

Ta cũng có thể kết hợp nhiều tuyến dẫn trong một câu lệnh

Mô tả cho quá trình thực hiện dòng lệnh trên như sau:

Dữ liệu từ tuyến dẫn vào lệnh tiếp theo được ký hiệu là – và có thể kết hợp với các đối số khác trong câu lệnh.

Lệnh pwd cho phép xác định đường dẫn tới thư mục hiện tại, sau đó kết quả này được truyền vào lệnh cat Lệnh cat nhận hai dữ liệu đầu vào: tên thư mục hiện tại và nội dung của file myfile Tiếp theo, cat chuyển các nội dung này tới lệnh lpr để thực hiện việc in ấn Kết quả in ra bao gồm tên thư mục chứa myfile và nội dung của myfile.

Cần phân biệt rõ giữa điều hướng và tuyến dẫn trong lập trình Điều hướng là quá trình lưu trữ dữ liệu đầu ra của một lệnh vào một tệp tin, trong khi tuyến dẫn chuyển giao đầu ra đó đến một câu lệnh khác để xử lý tiếp.

Có thể sử dụng lệnh kết hợp điều hướng thay vì tuyến dẫn, tuy nhiên phương pháp này khá cồng kềnh và tốn thêm không gian bộ nhớ để lưu trữ các file trung gian Ví dụ, chúng ta có thể viết lại như sau:

2.4.1 Tuy ế n d ẫ n và đ i ề u h ướ ng: L ệ nh tee

Một câu lệnh có thể kết hợp điều hướng và tuyến dẫn, nhưng cần thận trọng khi sử dụng Điều hướng đưa thông tin vào file, và sau khi dữ liệu được ghi vào file, nó sẽ không được truyền tiếp sang câu lệnh khác Do đó, toán tử điều hướng thường không xuất hiện ở giữa dãy tuyến dẫn.

Nếu bạn muốn điều hướng nội dung kết quả lệnh vào một file đồng thời hiển thị nội dung đó ra màn hình, bạn có thể sử dụng lệnh tee Lệnh tee cho phép sao chép kết quả đầu ra của lệnh và hiển thị chúng trên màn hình, giúp bạn kiểm tra dữ liệu ghi vào file một cách dễ dàng.

$ sort mylist | cat –n | lpr computer modem screen cat -n 1 computer 2 modem 3 screen

Lệnh "Pipe Pipe sort mylist lpr" cho phép bạn ghi kết quả vào một file đồng thời với việc gửi kết quả đó ra STDOUT Điều này có nghĩa là dữ liệu sẽ được chia thành hai bản, một bản được lưu vào file và bản còn lại được hiển thị trên màn hình thông qua lệnh "tee".

Ví dụ: Ghi kết quả của lệnh ls ra myfile đồng thời hiện kết quả ra màn hình

Có thể biểu diễn thao tác này bằng điều hướng như sau:

Thông qua tuyến dẫn, chúng ta có thể chuyển dữ liệu mà tee sinh ra đến các lệnh của thiết bị khác, ví dụ như máy in.

$ sort myfile | tee newtee | lpr

Với đặc điểm của lệnh tee như trên ta có thể đặt tee ở bất kỳ vị trí nào trong dãy các tuyến dẫn.

Các ký tự đặc biệt

Trong quá trình sử dụng câu lệnh, người dùng thường gặp khó khăn trong việc nhớ tên file chính xác hoặc muốn tham chiếu đến nhiều file có phần tên tương tự Để giải quyết vấn đề này, Shell cung cấp một bộ ký tự đặc biệt giúp tạo ra danh sách tên file dựa trên một mẫu đã cho.

2.5.1 Ký t ự đạ i di ệ n cho dãy ký t ự : *

Ký tự * được sử dụng để đại diện cho một chuỗi ký tự tùy ý, có thể là một hoặc nhiều ký tự, thậm chí là không có ký tự nào.

$ ls mydoc doc2 doc3 docs document monday.c main.c calc.c test.c

$ ls doc* doc2 doc3 docs document

$ ls *.c monday.c main.c calc.c test.c

$ ls *d* mydoc doc2 doc3 docs document monday.c

$ rm * (Xoá tất cả các file)

2.5.2 Ký t ự đạ i di ệ n cho m ộ t ký t ự : ?

Ký tự ? dùng để biểu diễn một ký tự bất kỳ

$ ls doc? doc2 doc3 docs

Có thể dùng nhiều ký tự ? trong một mẫu tên file hoặc kết hợp với các ký tự đặc biệt khác để xây dựng các mẫu phức tạp

2.5.3 Ký t ự đạ i di ệ n cho t ậ p các ký t ự : [ ]

Cặp ký tự [ ] dùng để biểu diễn một ký tự nào đó nằm trong một tập ký tự

$ ls docA docB doc3 doc5 main.c main.o test.c lib.a

$ ls doc[A37] docA doc3 doc7 Để thể hiện miền giá trị có thứ tự, ta dùng ký tự – nằm giữa cận trên và cận dưới của miền đó

$ ls doc[0-9] doc3 doc5 doc7

Có thể kết hợp ký tự tập giá trị này với các ký tự đặc biệt khác để tạo ra các mẫu tìm kiếm phức tạp

$ ls *.[co] main.c main.o test.c

Khi tên file chứa ký tự đặc biệt, để liệt kê tên file đó, bạn cần thêm ký tự \ trước ký tự đặc biệt.

$ ls answers\?.* answers?.quiz answers?.mid answers?.final

Cấu trúc file

Trong hệ điều hành Linux, dữ liệu được tổ chức trong các thư mục, tạo thành một cấu trúc phân cấp liên kết chặt chẽ Mỗi file không chỉ được nhận diện qua tên mà còn thông qua vị trí của nó trong cấu trúc file, được gọi là đường dẫn.

Bạn có thể đặt tên file bằng chữ cái, dấu gạch dưới và số, cũng như sử dụng dấu chấm và dấu phẩy Tuy nhiên, tên file không được bắt đầu bằng số và nên tránh bắt đầu bằng dấu chấm, trừ một số trường hợp đặc biệt Các ký tự đặc biệt như ?, *, \ cũng không nên được sử dụng trong tên file Độ dài tối đa của tên file là 256 ký tự.

Phần mở rộng trong tên file, được phân biệt bởi dấu chấm, giúp phân loại các loại file một cách hiệu quả Ví dụ, đuôi txt chỉ định file văn bản, mp3 dành cho file âm nhạc, và c là file nguồn C.

Các file khởi tạo đặc biệt, còn được gọi là file ẩn hay dot file, lưu trữ các lệnh cấu hình shell và có tên bắt đầu bằng dấu chấm Để hiển thị các file ẩn này, bạn có thể sử dụng lệnh ls -a.

Trong Linux, tất cả các file đều có định dạng dòng byte (byte stream), tức là một dãy tuần tự các byte Khái niệm này không chỉ áp dụng cho file mà còn cho tất cả các thành phần khác của hệ thống, bao gồm cả thư mục và thiết bị Điều này giúp việc tổ chức và trao đổi dữ liệu trong Linux trở nên dễ dàng và hiệu quả hơn.

Trong hệ điều hành Linux, có nhiều loại file được xử lý, tùy thuộc vào cài đặt cụ thể Tuy nhiên, có bốn loại file chính: file thông thường (ordinary file), file thư mục (directory file), file thiết bị ký tự (character device file) và file thiết bị khối (block device file).

2.6.3 Phân lo ạ i file: L ệ nh file

Các file thông thường có định dạng theo dòng byte và có thể được sử dụng theo nhiều cách khác nhau Hai loại file cơ bản là file nhị phân (binary file) và file văn bản (text file) Ví dụ về file nhị phân là chương trình đã được biên dịch, trong khi file văn bản bao gồm nhiều loại khác nhau như chương trình nguồn C và kịch bản shell.

Lệnh file cho phép xác định kiểu nội dung của một tệp bằng cách kiểm tra các từ khóa hoặc ký tự đặc biệt trong những dòng đầu tiên Tuy nhiên, phương pháp này không phải lúc nào cũng chính xác.

$ file mydata report mydata: text report: directory

Để xác định kiểu của tất cả các file trong một danh sách, bạn có thể sử dụng lệnh `file` với tùy chọn `-f` Ví dụ, khi có các file như `calc.c` (tập tin văn bản C), `proj` (tập tin thực thi), và `newdata` (tập tin rỗng), lệnh này sẽ giúp bạn nhanh chóng nhận diện loại của từng file trong danh sách.

2.6.4 Duy ệ t và hi ể n th ị n ộ i dung file: L ệ nh od

Để kiểm tra toàn bộ nội dung của file theo từng byte, bạn có thể sử dụng lệnh od Lệnh này hiển thị tất cả các byte trong file theo hệ cơ số 8 hoặc 16, tùy thuộc vào lựa chọn của bạn Nó rất hữu ích khi bạn cần tìm kiếm ký tự đặc biệt trong file hoặc xem nội dung của file nhị phân.

Sau khi cài đặt Linux, hệ thống sẽ tự động tạo ra một số thư mục quan trọng, tất cả đều nằm trong thư mục gốc Dưới đây là một số thư mục tiêu biểu và ý nghĩa của chúng.

Trong hệ thống, mỗi người dùng có một thư mục riêng, cho phép họ tạo, cập nhật và xóa dữ liệu Khi đăng nhập, bạn sẽ được chuyển đến thư mục mang tên người dùng của mình Từ thư mục này, bạn có thể dễ dàng di chuyển đến các thư mục khác bằng lệnh cd.

Chứa các lệnh và các chương trình tiện ích chuẩn, chẳng hạn như ls, cat

Thư mục hệ thống chứa các file và lệnh chuẩn, được chia thành nhiều thư mục con Trong đó, thư mục /usr/bin lưu trữ các lệnh và tiện ích dành cho người dùng.

/usr/sbin Chứa các lệnh quản trị hệ thống

/usr/lib Chứa các thư viện dành cho lập trình

/usr/doc Chứa tài liệu Linux

/usr/man Chứa các file tra cứu lệnh

/usr/spool Chứa các file được sinh ra bởi lệnh in hoặc truyền tin qua mạng

Chứa các lệnh quản trị dùng khi khởi động hệ thống

Chứa nhiều file khác nhau, chẳng hạn như các file thư (mailbox)

Chứa các giao diện cho thiết bị như terminal hay máy in

Chứa các file cấu hình hệ thống và các file hệ thống khác.

Đặt quyền trên file/thư mục

Trong Linux, mỗi file và thư mục đều có các quyền truy cập xác định tài khoản nào có thể truy cập và cách thức truy cập Ba kiểu quyền truy cập trên file bao gồm đọc (read - r), ghi (write - w) và thực thi (executable - x) Khi một file được tạo, người tạo sẽ tự động được cấp quyền đọc và ghi, cho phép họ xem và sửa file.

Có ba kiểu người dùng trên file, bao gồm người sở hữu file (owner - u), nhóm người dùng file (group - g) và những người dùng khác (other - o), cho phép thiết lập quyền truy nhập file cụ thể cho từng đối tượng.

Khi liệt kê chi tiết file bằng lệnh ls –l, ta thấy quyền trên file gồm 9 ký tự như sau:

Quyền truy cập vào file hoặc thư mục được biểu diễn bằng ba ký tự đầu cho người sở hữu, ba ký tự tiếp theo cho nhóm người dùng và ba ký tự cuối cùng cho những người khác Ký tự "-" thể hiện không có quyền Để thiết lập quyền này, người dùng có thể sử dụng lệnh chmod.

2.7.1 Đặ t quy ề n b ằ ng ký hi ệ u quy ề n

Với ký hiệu quyền và ký hiệu người dùng ở trên, ta có thể thiết đặt quyền bằng ký hiệu quyền như sau:

$ chmod kiểu_người_dùng+quyền_thêm_vào tên_file

$ chmod kiểu_người_dùng-quyền_bớt_đi tên_file

Câu lệnh đầu tiên cấp quyền thực thi cho chủ sở hữu tệp filename, trong khi câu lệnh thứ hai điều chỉnh quyền truy cập cho những người dùng khác bằng cách thêm quyền đọc, đồng thời loại bỏ quyền ghi và thực thi trên tệp này.

Nếu muốn gán quyền cho tất cả các người dùng ta có thể dùng ký tự a (all) hoặc để trống tại kiểu_người_dùng

2.7.2 Đặ t quy ề n tuy ệ t đố i b ằ ng mã nh ị phân

Thay vì sử dụng ký tự biểu thị quyền, quyền có thể được thể hiện bằng mã quyền tuyệt đối, cho phép thay đổi tất cả các quyền cùng một lúc Quyền tuyệt đối sử dụng mã nhị phân để tham chiếu tới quyền của tất cả người dùng, với mỗi kiểu người dùng có 3 quyền là đọc (r), ghi (w) và thực thi (x) Do đó, quyền tuyệt đối của một người dùng được biểu diễn bằng 3 bit và có thể được thể hiện dưới dạng giá trị hệ cơ số 8.

Owner Group Other read write executable

Dãy 3 bit 011 7 111 biểu thị quyền hạn của người dùng, trong đó vị trí có giá trị 0 cho thấy quyền bị hạn chế, còn giá trị 1 cho phép quyền Dãy 9 bit hoặc 3 số ở hệ bát phân đại diện cho tập quyền phân cho ba kiểu người dùng khác nhau.

Lệnh trên đặt cho người sở hữu quyền read và exec (101 = 5), cho nhóm người dùng quyền read (100 = 4) và cho những người khác quyền read (100 = 4) trên filename

2.7.3 Quy ề n trên th ư m ụ c Đặt quyền cho thư mục giống như đặt quyền cho file Quyền read sẽ cho phép hiển thị nội dung thư mục, quyền executable cho phép di chuyển vào thư mục và quyền write cho phép tạo hay xoá các file trong thư mục Khi bạn tạo một thư mục thì người sở hữu có tất cả các quyền trên thư mục đó

Để cho phép người dùng khác hiển thị và truy cập vào thư mục của bạn mà không thể thay đổi nội dung bên trong, bạn cần thiết lập quyền truy cập cho họ với quyền đọc (read) và thực thi (executable).

Lệnh ls -l hiển thị thông tin về tất cả các file trong thư mục, nhưng để chỉ hiển thị thông tin của chính thư mục đó, bạn cần sử dụng tùy chọn -ld.

$ ls -ld thankyou drwxr-x - 2 nga tinhoc 512 Feb 10 04:30 thankyou

Mặc dù người dùng khác có thể truy cập vào file, chỉ người sở hữu file mới có quyền thay đổi quyền truy cập Nếu bạn muốn người khác kiểm soát file của mình, bạn có thể chuyển quyền sở hữu bằng lệnh chown, cho phép chuyển quyền sở hữu file sang cho người dùng khác.

Ví dụ: Câu lệnh sau chuyển quyền sở hữu file mydata sang cho người dùng tuan

-rw-r r 1 nga tinhoc 207 Feb 15 11:53 mydata

-rw-r r 1 tuan tinhoc 207 Feb 15 11:53 mydata

Lệnh chgrp dùng để thay đổi nhóm người dùng trên file

Ví dụ: Câu lệnh sau thay đổi nhóm người dùng thành kinhte cho file today và weekend

-rw-r r 1 tuan kinhte 328 Jan 15 5:25 today

-rw-r r 1 tuan kinhte 241 May 9 13:42 weekend

Tạo liên kết

Linux cho phép tạo liên kết file, giúp nhiều tên file trong các thư mục khác nhau tham chiếu đến cùng một file vật lý Để tạo liên kết, sử dụng lệnh ln với đối số là tên file gốc và tên file liên kết.

Trong ví dụ trên, "today" và "weather" là hai tên file khác nhau nhưng đều tham chiếu tới cùng một file vật lý, do đó thông tin của chúng là giống nhau.

-rw-rw-r 2 nga tinhoc 563 Feb 14 10:30 today

-rw-rw-r 2 nga tinhoc 563 Feb 14 10:30 weather

Mỗi tệp tin trong hệ thống đều có hai liên kết, và nếu bạn hiển thị chỉ số inode (số định danh duy nhất của một tệp) của các tệp, bạn sẽ nhận thấy rằng chúng giống nhau.

Trên thực tế, file thường được tạo liên kết trong một thư mục khác

Lệnh `$ ls reports/` tạo một liên kết đến file "today" trong thư mục "reports", dẫn đến việc có hai tên file "today" ở hai thư mục khác nhau nhưng đều tham chiếu đến cùng một file vật lý.

$ ls reports/ friday Đoạn lệnh trên tạo cho file today một liên kết tên là friday trong thư mục reports

Để xóa hoàn toàn một file, cần phải xóa tất cả các liên kết đến nó, bao gồm cả liên kết gốc Nếu chỉ xóa một liên kết, các liên kết khác vẫn sẽ tiếp tục tham chiếu tới file vật lý như trước.

Today is a nice day because the sun shines everywhere

Liên kết cứng là kiểu liên kết mà các file cùng tham chiếu tới một file vật lý, chia sẻ chỉ số inode, số liên kết và kích thước giống nhau Thay đổi nội dung của một file liên kết cũng đồng nghĩa với việc thay đổi nội dung của các file liên kết khác Khi xoá một trong các liên kết, nội dung file vật lý vẫn được giữ nguyên và có thể truy cập qua các liên kết còn lại Tuy nhiên, hạn chế của liên kết cứng là không thể tạo liên kết cho file gốc thuộc hai hệ thống file khác nhau, ví dụ như không thể tạo liên kết cứng từ file hệ thống ext2 sang file hệ thống FAT Để khắc phục điều này, bạn có thể sử dụng liên kết biểu tượng.

2.8.2 Liên k ế t bi ể u t ượ ng (Symbolic Link)

Liên kết biểu tượng lưu trữ đường dẫn đến file mà nó liên kết, không phải là liên kết cứng trực tiếp mà chỉ chứa thông tin về vị trí của file Để tạo liên kết biểu tượng, bạn có thể sử dụng lệnh ln với tùy chọn –s.

Ví dụ: Tạo file liên kết tên là lunch cho file veglist

$ ln -s /home/nga/food/veglist lunch

$ cat /home/nga/food/veglist tomatoes and beans

$ cat lunch tomatoes and beans

Do veglist và lunch là hai file khác nhau nên thông tin chi tiết về chúng cũng khác nhau

$ ls -l /home/nga/food/veglist lunch

-rw-rw-r 1 nga tinhoc 18 Feb 14 10:30 veglist lrw-rw-r 1 nga tinhoc 4 Feb 14 10:33 lunch->veglist

Kiểu file của lunch là l, cho thấy đây là một file liên kết biểu tượng, không phải file thông thường Kích thước của nó chỉ 4 bytes vì chỉ chứa đường dẫn tới file veglist Nếu hiển thị số inode, bạn sẽ thấy chúng khác nhau Để xoá hoàn toàn một file, bạn chỉ cần xoá tất cả các liên kết cứng tới nó Tuy nhiên, nếu vẫn còn một liên kết biểu tượng tới file đã bị xoá, liên kết này sẽ không thể truy cập vào file.

Khác với liên kết cứng, bạn có thể dùng liên kết biểu tượng để tạo liên kết tới một thư mục

Ví dụ: Tạo liên kết tên là dsbt cho thư mục baitap

$ ln -s /home/nga/baitap/ dsbt

Một số lệnh khác

2.9.1 Tìm ki ế m file: L ệ nh find

Lệnh find cho phép người dùng tìm kiếm file dựa trên các tiêu chí cụ thể trong một thư mục và tất cả các thư mục con của nó Đối số đầu tiên là thư mục cần tìm kiếm, sau đó là các tùy chọn để xác định điều kiện tìm kiếm Người dùng có thể tìm file theo tên, người sở hữu hoặc thời gian cập nhật cuối cùng.

Cú pháp của lệnh find như sau:

$ find tên_thư_mục các_tuỳ_chọn –print

Các tuỳ chọn của lệnh find:

-name: tìm theo tên file

-type: tìm theo kiểu file (d:directory; l: symbolic link;…)

-mtime: tìm theo thời gian truy nhập

-size: tìm theo kích cỡ file (+/- độ lớn file c, ví dụ +/-400c)

Lưy ý tuỳ chọn –print thường xuất hiện cuối cùng sau câu lệnh để chỉ định kết quả tìm được sẽ hiển thị ra STDOUT

Ví dụ 1: Tìm file có tên là myscript

$ find /home/nga/ –name myscript -print

Ví dụ 2: Tìm các thư mục có trong thư mục làm việc hiện thời

Ví dụ 3: Tìm các file có độ lớn trên 100 ký tự (byte) ở trong thư mục làm việc hiện thời và có thời gian truy nhập cách đây 3 ngày

Ví dụ 4: Tìm thư mục tên là thankyou

$ find /home/nga/ -name thankyou –type d -print

Có thể dùng các ký tự đặc biệt để thể hiện tên file cần tìm kiếm Ví dụ sau tìm tất cả các chương trình C trong thư mục programs

Khi thực hiện tìm kiếm với nhiều điều kiện, kết quả sẽ bao gồm các file thỏa mãn tất cả các điều kiện đó bằng toán tử AND Ngoài ra, toán tử OR (ký hiệu –o) cho phép tìm kiếm theo một trong nhiều điều kiện, trong khi toán tử NOT (ký hiệu !) được sử dụng để loại trừ một số điều kiện nhất định trong kết quả tìm kiếm.

Ví dụ 1: Tìm tất cả các file không phải là thư mục trong thư mục đang làm việc

Ví dụ 2: Tìm các file có cỡ dưới 100 ký tự hoặc thời gian truy nhập cách đây 3 ngày

Ví dụ 3: Tìm thư mục reports hoặc các file có cỡ hơn 100 ký tự

$ find \( \( -name reports –type d \) -o -size +100 \) -print

Chú ý: Điều kiện tìm phức tạp cần được đặt trong cặp \( và \) Trước và sau mỗi cặp ký tự này phải có ít một khoảng trống

2.9.2 Ghép n ố i thi ế t b ị vào cây th ư m ụ c: L ệ nh mount và umount

Trong Linux, tất cả các file đều được tổ chức trong một cây thư mục duy nhất, nhưng chúng có thể được lưu trữ trên các thiết bị nhớ khác nhau như đĩa cứng và CD-ROM Mỗi thiết bị lưu trữ có thể sử dụng các hệ thống file khác nhau như FAT, NTFS, ext2, HFS Linux có khả năng nhận diện và kết nối nhiều hệ thống file này vào cây thư mục của mình.

Hệ thống file trên thiết bị lưu trữ được tách rời với cây thư mục Linux cho đến khi được kết nối Mỗi hệ thống file có thể tổ chức thành một cây thư mục riêng, ví dụ như đĩa mềm cần được gắn vào cây thư mục Linux Cây gắn vào sẽ trở thành cây con của cây chính Để thực hiện việc này, ta sử dụng lệnh mount để gắn cây thư mục của thiết bị lưu trữ vào thư mục chỉ định Sau khi gắn, người dùng có thể truy cập vào thư mục đó và các file bên trong.

Chú ý là thao tác mount chỉ thực hiện được nếu bạn là người dùng có quyền cao nhất

Cú pháp của lệnh mount như sau:

# mount thiết_bị_cần_mount điểm_nối_vào_hệ_thống_file

Ví dụ 1: Mount và sử dụng đĩa mềm

# mount /dev/fd0 /mnt/floppy

Trong lệnh trên, hệ thống sẽ kết nối đĩa mềm fd0 vào cây thư mục tại điểm nối là

/mnt/floppy Từ đó bạn có thể vào /mnt/floppy để truy nhập nội dung ổ đĩa A

Ví dụ 2: Mount và sử dụng ổ CD

# mount /dev/hdc /etc/mnt

Ví dụ 3: Mount và sử dụng flash card qua USB

Để gắn kết thiết bị USB vào hệ thống Linux, bạn có thể sử dụng lệnh `mount /dev/sda1 /mnt/usb` Mặc dù điểm nối có thể là bất kỳ thư mục nào, nhưng nên sử dụng các điểm nối theo quy ước của Linux Cách kết nối các thiết bị khác cũng tương tự, tuy nhiên cần xác định các thiết bị có trong hệ thống của bạn, lưu ý rằng tên thiết bị có thể khác nhau trên một số phiên bản Linux.

Gỡ bỏ kết nối: umount Để gỡ bỏ kết nối với một hệ thống file, ta dùng lệnh umount như sau:

# umount thiết_bị_đã_mount điểm_nối_vào_hệ_thống_file

Ví dụ: Gỡ kết nối với đĩa mềm

# umount /dev/fd0 /mnt/floppy

Tất cả các hệ thống file trong Linux cần được mount trước khi sử dụng và umount khi tắt hệ thống Linux tự động mount một số thiết bị khi khởi động và umount chúng khi tắt Để kiểm tra các thiết bị đã được mount sẵn, bạn có thể xem file /etc/fstab.

2.9.3 L ư u tr ữ và nén file: L ệ nh tar và gzip

Tiện ích tar là công cụ hữu ích cho việc tạo lưu trữ file và thư mục, giúp người dùng dễ dàng thực hiện các bản backup dữ liệu Với tar, bạn có thể lưu trữ file, cập nhật lưu trữ và thêm file mới, thậm chí lưu trữ toàn bộ thư mục cùng các thư mục con vào một file duy nhất Sau đó, bạn có thể dễ dàng khôi phục chúng từ file lưu trữ này Lệnh tar cung cấp nhiều tùy chọn như c (create), x (extract), và u (update) để đáp ứng nhu cầu sử dụng linh hoạt.

Ví dụ 1: Tạo file lưu trữ tên là myarch.tar cho thư mục mydir

$ tar -cf myarch.tar mydir/

Sau lệnh trên, ta sẽ có file myarch.tar lưu trữ toàn bộ nội dung của mydir

Ví dụ 2: Lấy lại nội dung lưu trữ trong myarch.tar

Sau lệnh trên, tất cả nội dung đã lưu trữ trong myarch.tar sẽ được lấy ra

Ví dụ 3: Đưa thêm letters vào file lưu trữ

$ tar -rf myarch.tar letters

Ví dụ 4: Cập nhật thư mục mydir trong myarch.tar

$ tar -uf myarch.tar mydir

Ví dụ 5: Liệt kê nội dung chứa trong file lưu trữ myarch.tar

Nếu muốn nén file trước khi đưa vào lưu trữ, ta đưa thêm tùy chọn z

$ tar -cfz myarch.tar mydir/

Bạn cũng có thể thêm tùy chọn v để hiển thị quá trình lấy lại dữ liệu từ file lưu trữ

Nén file giúp tiết kiệm bộ nhớ và giảm thời gian chuyển file qua mạng Quá trình nén tạo ra một file có kích thước nhỏ hơn file gốc, và nội dung file gốc có thể được khôi phục bằng cách giải nén Để thực hiện việc nén file, người dùng có thể sử dụng lệnh gzip.

Ví dụ: Nén file mydata

$ ls mydata.gz Để giải nén một file nén ta dùng lệnh gunzip

$ ls mydata Để xem nội dung file nén ta dùng lệnh zcat

Ta cũng có thể nén một file lưu trữ

Cần phân biệt giữa nén file lưu trữ bằng gzip và nén file trước khi lưu trữ với tùy chọn z trong lệnh tar, vì hai phương pháp này mang lại hiệu quả nén khác nhau.

Điều khiển tiến trình

Trong Linux, bạn có khả năng kiểm soát dữ liệu vào ra của các lệnh và can thiệp vào quá trình thực thi của chúng Bạn có thể chạy lệnh ở chế độ nền, hủy bỏ lệnh trước khi nó hoàn tất, hoặc tạm ngừng lệnh để tiếp tục thực hiện sau này khi cần.

Linux coi mỗi lệnh là một tiến trình, phản ánh nhiệm vụ cần thực hiện Với khả năng đa nhiệm, hệ điều hành này cho phép thực hiện đồng thời nhiều tiến trình khác nhau Những tiến trình này không chỉ bao gồm các lệnh do người dùng yêu cầu mà còn chứa đựng các nhiệm vụ riêng của hệ thống.

Trong bài viết này, chúng ta sẽ gọi các lệnh mà người dùng yêu cầu shell thực hiện là công vụ (jobs) để phân biệt với các tiến trình hệ thống Shell cung cấp nhiều lệnh hữu ích, cho phép người dùng đặt một công vụ chạy ở chế độ nền, cũng như huỷ bỏ hoặc ngắt một công vụ khi cần thiết.

Tiến trình ở chế độ nền là những tiến trình không tương tác trực tiếp với người dùng, cho phép thực hiện các tác vụ dài mà không cần chờ đợi Người dùng có thể tiếp tục nhập lệnh khác trong khi tiến trình nền vẫn hoạt động, ví dụ như soạn thảo một file trong khi in các file khác Để chạy lệnh ở chế độ nền, chỉ cần thêm dấu & ở cuối lệnh, và hệ thống sẽ hiển thị số hiệu công vụ và số hiệu tiến trình Số hiệu công vụ được đặt trong dấu [ ] giúp người dùng dễ dàng tham chiếu đến công việc đó.

Bạn có thể chạy nhiều lệnh ở chế độ nền bằng cách thêm ký tự & vào cuối lệnh Để kiểm tra các công việc đang chạy ở chế độ nền, hãy sử dụng lệnh jobs.

Dấu + chỉ công vụ đang được thực hiện, dấu - chỉ công vụ sẽ được thực hiện ngay tiếp theo

Lưu ý rằng bạn có thể khởi tạo nhiều công vụ nền trong một dòng lệnh Trong trường hợp này, ký tự & không chỉ có chức năng chỉ định công vụ nền mà còn đóng vai trò là ký tự ngăn cách giữa các lệnh.

Khi sử dụng shell, hệ thống chỉ thông báo về các công vụ nền đã hoàn thành sau khi bạn thực hiện xong một lệnh Để nhận thông báo ngay lập tức khi một công vụ nền kết thúc, bạn có thể sử dụng lệnh notify kèm theo số hiệu của công vụ đó.

Câu lệnh trên sẽ yêu cầu hệ thống thông báo ngay lập tức khi công vụ số 1 kết thúc

Bạn có thể chuyển một công vụ từ chế độ nền sang chế độ foreground, cho phép nó nhận trực tiếp các thao tác từ người dùng Nếu chỉ có một công vụ đang chạy ở chế độ nền, lệnh fg sẽ đưa công vụ đó lên foreground Tuy nhiên, nếu có nhiều công vụ nền, bạn cần chỉ định số hiệu của công vụ mà bạn muốn chuyển lên.

Ta cũng có thể dùng lệnh bg để đưa một công vụ foreground hiện thời về chế độ nền

Bạn có thể hủy bỏ bất kỳ tiến trình nào đang chạy ở chế độ nền bằng lệnh kill, với đối số là số hiệu công vụ hoặc số tiến trình của công vụ trong hệ thống.

Ví dụ: Huỷ bỏ công vụ số 1

Để quản lý các tiến trình trên hệ thống, trước tiên bạn cần xác định giá trị của số tiến trình thông qua lệnh ps, lệnh này sẽ liệt kê tất cả các tiến trình, bao gồm cả tiến trình của hệ thống Sau khi xác định được tiến trình do bạn tạo ra, bạn có thể sử dụng lệnh kill để huỷ tiến trình đó.

Bạn có thể tạm dừng một công vụ bằng cách sử dụng tổ hợp phím CTRL–Z Công vụ sẽ ngừng hoạt động cho đến khi được khởi động lại Lưu ý rằng công vụ này chưa kết thúc, mà chỉ tạm thời dừng lại.

“treo” cho đến khi nào bạn muốn tiếp tục Khi muốn tiếp tục, bạn có thể đưa nó ra chế độ background hoặc foreground bằng lệnh bg hoặc fg

Câu lệnh "at" cho phép bạn thực hiện một công việc vào thời điểm cụ thể mà bạn chỉ định Sau khi thiết lập lịch trình, bạn có thể thoát khỏi phiên làm việc mà hệ thống vẫn sẽ tự động thực hiện các lệnh đã được lên lịch.

Ví dụ 1: Hẹn giờ thực hiện in file intro vào 4 giờ sáng

Ctrl-D (Kết thúc nội dung yêu cầu)

Ví dụ 2: Hẹn giờ thực hiện vào 5h15 chiều thứ sáu

$ ls cmds lpr intro cat *.c > myprogs

Bạn có thể xem danh sách lệnh, xoá lệnh đã hẹn giờ hoặc đặt thông báo khi lệnh hẹn giờ kết thúc bằng cách sử dụng cú pháp "at" với các đối số tương ứng là –l, -r, -m.

Lập trình shell

Lọc (Filters)

Một số tiện ích khác

Ngày đăng: 21/06/2022, 11:30

HÌNH ẢNH LIÊN QUAN

Giả sử thay vì hiển thị danh sách các file ra màn hình, bạn muốn đưa danh sách đó vào một file - ĐẠI HỌC THĂNG LONG BỘ MÔN TIN HỌC THỰC HÀNH LINUX
i ả sử thay vì hiển thị danh sách các file ra màn hình, bạn muốn đưa danh sách đó vào một file (Trang 14)
-3 tranh có hình ảnh Cái mũ, cái chậu, cái lược cái búa, cái tủ, cốc nước, cái gương, bánh chưng. - ĐẠI HỌC THĂNG LONG BỘ MÔN TIN HỌC THỰC HÀNH LINUX
3 tranh có hình ảnh Cái mũ, cái chậu, cái lược cái búa, cái tủ, cốc nước, cái gương, bánh chưng (Trang 14)
echo Hiển thị xâu ký tự ra màn hình - ĐẠI HỌC THĂNG LONG BỘ MÔN TIN HỌC THỰC HÀNH LINUX
echo Hiển thị xâu ký tự ra màn hình (Trang 65)

TRÍCH ĐOẠN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN