1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Nhập môn Hệ điều hành Linux

37 6 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 đề Nhập môn Hệ điều hành Linux
Tác giả Đặng Nguyên Phương
Trường học Trường Đại học Khoa học và Công nghệ
Chuyên ngành Hệ điều hành
Thể loại tài liệu tham khảo
Năm xuất bản 2013
Thành phố Hà Nội
Định dạng
Số trang 37
Dung lượng 498,38 KB

Nội dung

Nhập môn Hệ điều hành Linux Đặng Nguyên Phương dnphuong1984@gmail.com Ngày 24 tháng 12 năm 2013 Mục lục Mở đầu 2 Giới thiệu Linux 2.1 Linux gì? 2.2 Nhân Linux 2.3 Lịch sử hình thành Linux 2.4 Kiến trúc Linux 2.5 Một số đặc tính hệ điều hành 2.6 Các phân phối hệ điều hành Linux 2 Linux 3.1 Shell 3.2 Terminal 3.3 Các lệnh thao tác với tài khoản người dùng 3.4 Các lệnh thao tác với thư mục tập tin 3.5 Các lệnh điều khiển tiến trình 3.6 Lệnh cài đặt gói phần mềm, ứng dụng 7 11 14 15 Các 4.1 4.2 4.3 4.4 4.5 4.6 16 16 18 19 20 22 23 công cụ Linux thông dụng Lệnh echo Một số lệnh Linux Các kí tự đặc biệt Filter pipe Mảng chuỗi Trình soạn thảo văn Shell script 5.1 Cách tạo 5.2 Biến 5.3 Cấu trúc 5.4 Hàm 25 25 26 27 31 Cách thức biên dịch thực thi chương trình 6.1 Trình biên dịch 6.2 Các thức biên dịch thực thi chương trình 6.3 Biên dịch với thư viện 6.4 Biên dịch với Makefile 32 32 32 33 34 thực thi shell script điều khiển Tài liệu tham khảo 37 Đặng Nguyên Phương Tài liệu nội NMTP Mở đầu Có thể nói phần lớn sinh viên Việt Nam nay, cụ thể sinh viên ngành khoa học kĩ thuật hạt nhân, hệ điều hành Linux điều xa lạ Trái với hệ điều hành mã nguồn đóng Windows hay MacOS, hệ điều hành Linux sử dụng rộng rãi giới khoa học, đặc biệt lĩnh vực hạt nhân hạt bản, từ thực nghiệm lý thuyết Những ưu điểm Linux so với hệ điều hành khác phần mềm miễn phí, tính bảo mật cao, khả can thiệp sâu vào bên hệ thống, giúp cho hệ điều hành có vị trí cao mắt nhà khoa học cơng nghệ Trong hầu hết thí nghiệm lớn hạt nhân hạt nay, hệ điều hành Linux hệ điều hành sử dụng suốt q trình tiến hành thí nghiệm Do đó, việc tìm hiểu sử dụng hệ điều hành Linux cách thành thạo ưu lớn cho bạn sinh viên có ý định gắn bó lâu dài với ngành khoa học Tập tài liệu viết với mục đích cung cấp cho bạn số kiến thức hệ điều hành Linux cách thức hoạt động nó, hướng dẫn sử dụng số công cụ cung cấp hệ điều hành Nội dung tài liệu tổng hợp từ nhiều nguồn khác (xem phần Tài liệu tham khảo) Ở phần đầu tài liệu, tác giả trình bày định nghĩa Linux nguyên lý hoạt động nó, phần cung cấp lệnh hệ điều hành Sau hoàn thành xong phần bản, bạn làm quen với phương thức lập trình shell script trình bày phần Đối với bạn muốn xây dựng chương trình mơ phỏng, xử lý số liệu hệ điều hành Linux, phần giúp bạn tìm hiểu cách thức biên dịch thực thi chương trình từ mã nguồn Tác giả hi vọng với tập tài liệu này, bạn sinh viên với niềm đam mê nghiên cứu có đủ tự tin để bắt tay vào việc tìm hiểu hệ điều hành Linux làm cho trở thành cơng cụ đắc lực phục vụ cho công việc bạn Giới thiệu Linux 2.1 Linux gì? Thuật ngữ Linux thực chất sử dụng để “nhân Linux” (Linux kernel ) Tuy nhiên thực tế, tên gọi Linux sử dụng cách rộng rãi để • Một hệ điều hành giống Unix (Unix-like) theo chuẩn POSIX (Portable Operating System Interface) tạo việc đóng gói nhân Linux với thư viện cơng cụ GNU • Các phân phối Linux (xem Phần 2.6) 2.2 Nhân Linux Nhân hệ điều hành (operating system kernel hay OS kernel ) thành phần trung tâm hầu hết hệ điều hành máy tính, có nhiệm vụ quản lý tài nguyên hệ thống, liên lạc thành phần phần cứng phần mềm (xem Hình 1) Nó cung cấp chức cho hệ điều hành • Cung cấp tài nguyên máy tính (bộ nhớ, CPU, thiết bị vào/ra mà phần mềm ứng dụng cần điều khiển để thực chức mình) cho tiến trình (process) phần mềm ứng dụng qua chế liên lạc tiến trình (inter-process communication) hàm hệ thống (system call ) • Xác lập rào chắn tiến trình khác nhau, tiến trình bị hỏng khơng làm ảnh hưởng đến tiến trình Đây ưu điểm lớn Linux so với hệ điều hành DOS Windows Đặng Nguyên Phương Tài liệu nội NMTP Hình 1: Sơ đồ hoạt động nhân hệ điều hành Nhân Linux xây dựng ngơn ngữ lập trình C mơ lại nhân Unix (một hệ điều hành máy tính xây dựng vào năm 1960-1970 với thiết kế theo module) Linus Torvalds phát triển vào năm 1991 Một số đặc điểm nhân Linux thừa kế từ nhân Unix gồm có • Nhân kiểu ngun khối (monolithic kernel ): thực nhiệm vụ cách thực thi toàn mã hệ điều hành địa nhớ để tăng hiệu hệ thống • Thiết kế theo module: hệ điều hành cung cấp tập hợp công cụ đơn giản, công cụ thực chức giới hạn định nghĩa rõ ràng • Hệ tập tin phân cấp (Filesystem Hierarchy Standard − FHS): hệ thống tập tin tổ chức theo hệ thống phân bậc tương tự cấu trúc phân cấp, bậc cao hệ thống tập tin thư mục gốc, ký hiệu vạch chéo “/” (root directory) • Unix shell: giao diện trung gian người dùng nhân Unix • Cơ chế pipeline: xây dựng lệnh phức tạp cách kết hợp lệnh đơn giản 2.3 Lịch sử hình thành Linux Hệ điều hành Linux phát triển dựa hai tảng hệ điều hành Unix Dự án GNU Hệ điều hành Unix kiến nghị phát triển viện nghiên cứu Bell công ty AT&T (Mỹ) vào năm 1969 Ken Thompson, Dennis Ritchie, Douglas McIlroy Joe Ossanna Bản hệ điều hành đời vào năm 1971 viết ngôn ngữ Assembly Năm 1973, Dennis Ritchie viết lại Unix ngôn ngữ C (trừ nhân hệ điều hành I/O) Lợi ích việc viết hệ điều hành ngơn ngữ bậc cao có khả mang mã nguồn hệ sang máy tính khác biên dịch lại, nhờ điều mà hệ điều hành có chạy hệ máy tính khác Hệ điều hành Unix nhanh chóng phát triển sử dụng rộng rãi trường học doanh nghiệp Năm 1983, Dự án GNU khởi xướng Richard Stallman, với mục đích tạo "Hệ thống phần mềm hồn chỉnh tương thích với Unix" bao gồm toàn phần mềm tự (Free Software) Sau vào năm 1985, Stallman bắt đầu thành lập Tổ chức phần mềm tự tạo Giấy phép chung GNU (GNU General Public License − GNU GPL) vào năm 1989 Năm 1987, hệ điều hành MINIX (viết tắt “mini-Unix”) thiết kế giáo sư Andrew S Tanenbaum dựa tảng Unix nhằm phục vụ cho mục đích giáo dục Chính MINIX nguồn cảm hứng cho Linus Torvalds để tạo Linux sau Đặng Nguyên Phương Tài liệu nội NMTP Khoảng đầu 1990, nhiều chương trình ứng dụng cho Unix đời, thành phần cấp thấp cần thiết trình điều khiển thiết bị, daemons, chưa hoàn thành Như nhu cầu cấp bách lúc cần có hệ điều hành hồn chỉnh để chạy chương trình Vào năm 1991, học Đại học Helsinki, Linus Torvalds bắt đầu có ý tưởng việc xây dựng hệ điều hành, ông nhận thấy hạn chế giấy phép MINIX sử dụng giáo dục mà Torvalds bắt tay vào việc phát triển nhân Linux môi trường MINIX để ứng dụng viết cho MINIX sử dụng Linux Dần dần ứng dụng GNU bắt đầu thay thành phần MINIX, lợi ích sử dụng mã nguồn có sẵn cách tự từ dự án GNU Phiên Linux 1.0 đời vào năm 1994 quyền GNU, tải xem mã nguồn Linux Từ đến có hàng loạt phiên Linux đời với nhiều hướng phát triển khác Hệ điều hành Linux đạt thành công cách nhanh chóng nhờ vào mơ hình phát triển phần mềm nguồn mở hiệu quả, với đặc tính bật so với hệ thống khác: chi phí phần cứng thấp, tốc độ cao (khi so sánh với phiên Unix độc quyền) khả bảo mật tốt, độ tin cậy cao (khi so sánh với Windows) đặc điểm giá thành rẻ, không bị phụ thuộc vào nhà cung cấp 2.4 Kiến trúc Linux Ta chia kiến trúc Linux thành khu vực (xem Hình 2) Vùng nhân hệ điều hành (kernel space) gồm thành phần • Mã nhân phụ thuộc kiến trúc vi xử lý (Architecture-dependent kernel code) phần lớn Linux độc lập với kiến trúc vi xử lý, có phận cần phải theo kiến trúc cụ thể để hoạt động hiệu quả, thư mục /linux/arch chứa mã nguồn phụ thuộc kiến trúc (vd: thư mục i386) • Nhân hệ điều hành (kernel ) phần mã nhân độc lập với kiến trúc vi xử lý, trình bày bên • Giao diện hàm hệ thống (System call interface − SCI) thực nhiệm vụ gọi hàm hệ thống từ vùng ứng dụng vào nhân Linux Giao diện độc lập với kiến trúc vi xử lý họ vi xử lý Các gói liên quan cài thư mục ẩn /linux/kernel phần phụ thuộc vào kiến trúc vi xử lý nằm /linux/arch Vùng không gian người dùng (user space) gồm thành phần • Các ứng dụng người dùng (User Applications) bao gồm phần mềm, gói ứng dụng • Các thư viện C (GNU C Library) phục vụ cho giao diện hàm hệ thống, tạo liên kết ứng dụng nhân Linux Giao diện quan trọng nhân Linux ứng dụng chiếm vùng địa nhớ bảo vệ khác Mỗi ứng dụng có vùng địa ảo riêng cịn nhân có vùng địa Các thành phần hệ điều hành Linux hồn chỉnh gồm có • Bộ khởi động (bootloader ) chương trình thực thi máy tính lần mở lên, nhiệm vụ chương trình tải nhân Linux vào nhớ Một số khởi động phổ biến GRUB, LILO, Đặng Nguyên Phương Tài liệu nội NMTP Hình 2: Kiến trúc hệ điều hành Linux • Trình khởi động (init program) tiến trình khởi động nhân Linux, tiến trình gốc tiến trình, hay nói cách khác tất tiến trình khởi động thông qua init chẳng hạn tiến trình dịch vụ hệ thống, dấu nhắc đăng nhập (bất kể giao diện đồ họa hay dòng lệnh), • Thư viện phần mềm, chứa tập tin thư viện sử dụng tiến trình chay Trên hệ thống điều hành Linux sử dụng tập tin thực thi dạng ELF (Executable and Linkable Format), trình liên kết động (dynamic linker ) ld-linux.so có nhiệm vụ quản lý việc sử dụng thư viện liên kết động Thư viện phần mềm chung dùng nhiều hệ thống Linux thư viện ngôn ngữ C GNU Nếu hệ thống cài đặt cho người dùng tự biên dịch phần mềm, tập tin header thêm vào để mô tả giao diện cho thư viện cài đặt • Các chương trình giao diện người dùng shell môi trường cửa sổ (windowing environments) 2.5 Một số đặc tính hệ điều hành Linux • Mã nguồn mở (open source) theo giấy phép GNU, người sử dụng Linux có phần mềm miễn phí, thay đổi mã nguồn phần mềm muốn Ngoài ra, người dùng cịn phân phối lại phần mềm thích, miễn cung cấp kèm mã nguồn ghi thay đổi • Đa nhiệm (multi-tasking) tất tiến trình Linux độc lập, khơng tiến trình cản trở cơng việc tiến trình khác Nhân Linux thực chế độ phân chia thời gian vi xử lý trung tâm (Central Processing Unit − CPU), chia cho tiến trình khoảng thời gian thực • Đa người dùng (multi-user ) cho phép nhiều người làm việc lúc, Linux cung cấp tất tài nguyên hệ thống cho người dùng làm việc qua terminal, ứng dụng giao diện dòng lệnh (Command Line Interface − CLI) • Làm việc phần cứng khác Linux phát triển tảng Intel 386/486, làm việc tất vi xử lý Intel (bao gồm xử lý 64bit), đồng thời Linux cịn làm việc nhiều xử lý khác AMD hay ARM, DEC Alpha, SUN Sparc, Đặng Nguyên Phương Tài liệu nội NMTP • Khả chạy chương trình HĐH khác Linux phát triển trình giả lập (emulator ) cho DOS, Windows 3.1, Windows 95 Wine Ngồi ra, Linux có loạt chương trình tạo máy ảo mã nguồn mở sản phẩm thương mại: qemu,bochs,vmware, • Đưa nhớ swap lên đĩa cho phép làm việc với Linux dung lượng nhớ có hạn, nội dung số phần nhớ ghi lên vùng đĩa cứng xác định từ trước, việc có làm giảm tốc độ làm việc cho phép chạy chương trình cần nhớ dung lượng lớn mà thực tế khơng có máy tính • Tổ chức nhớ theo trang hệ thống nhớ Linux tổ chức dạng trang với dung lượng 4KB cung cấp trang nhớ theo yêu cầu, phần mã cần thiết chương trình nằm nhớ, cịn phần mã khơng sử dụng thời điểm nằm lại đĩa • Cùng sử dụng chương trình cần chạy lúc nhiều ứng dụng đó, Linux nạp vào nhớ mã chương trình tất tiến trình giống sử dụng mã • Thư viện chung phân chia thư viện thành thư viện động (dynamic) tĩnh (static), cho phép giảm kích thước nhớ bị ứng dụng chiếm • Bộ đệm động đĩa nhớ dự trữ cho đệm giảm xuống nhớ không sử dụng, tăng lên hệ thống hay tiến trình cần nhiều nhớ • Hỗ trợ định dạng hệ thống tập tin khác hỗ trợ số lượng lớn định dạng hệ thống tập tin, bao gồm hệ thống tập tin DOS OS/2, hệ thống tập tin mới, reiserfs, HFS, Trong hệ thống tập tin Linux, gọi Second Extended File System (ext2fs) Third Extended File System (ext3fs) cho phép sử dụng không gian đĩa cách có hiệu • Khả hỗ trợ mạng hỗ trợ tất dịch vụ Unix, bao gồm Networked File System (NFS ), kết nối từ xa (telnet, rlogin, ssh), làm việc mạng TCP/IP, truy cập dial-up qua giao thức SLIP PPP, đồng thời có hỗ trợ chia sẻ tập tin in từ xa mạng Macintosh, Netware Windows 2.6 Các phân phối hệ điều hành Hiện có nhiều phân phối hệ điều hành Linux toàn giới, phần lớn tải cài đặt thơng qua kết nối mạng Điều cho phép người dùng lựa chọn hệ điều hành cho họ theo nhu cầu cần thiết Các phân phối trì quản lý cá nhân, tổ chức tình nguyện cơng ty Một phân phối hoàn chỉnh bao gồm nhân Linux cài đặt, hệ thống bảo mật chung gói phần mềm cần thiết Các phân phối khác sử dụng trình quản lý gói khác dpkg, Synaptic, YAST, yum Portage để cài đặt, loại bỏ, cập nhật tất phần mềm hệ thống Một số phân phối Linux bật nhiều người sử dụng bao gồm • Debian GNU/Linux: hệ điều hành xây dựng từ Dự án Debian, dựa nhân Linux với nhiều công cụ lấy từ dự án GNU, sử dụng hệ thống quản lí gói ứng dụng APT (Advanced Packaging Tool ) Trang web: http://www.debian.org/ • Ubuntu: hệ điều hành dựa Debian GNU/Linux Trang web: http://www.ubuntu.com/ Đặng Nguyên Phương Tài liệu nội NMTP • Red Hat Enterprise Linux: phân phối Linux phát triển công ty Red Hat mục tiêu hướng tới thị trường thương mại Trang web: http://www.redhat.com/rhel/ • Fedora: phân phối Linux dựa hệ thống quản lý gói ứng dụng RPM (RedHat Package Manager ), phát triển theo Dự án Fedora Trang web: http://www.fedoraproject.org/ • SUSE Linux: hệ điều hành mã nguồn mở xây dựng dựa nhân Linux Trang web: http://vi.opensuse.org/ • CentOS: có nguồn gốc từ phân phối Red Hat Enterprise Linux (RHEL) Trang web: http://www.centos.org/ • OpenSolaris: hệ điều hành mã nguồn mở dựa tảng hệ điều hành Solaris (dành cho Unix) trước tạo cơng ty Sun Microsystems Trang web: http://www.opensolaris.org/ • Scientific Linux: hệ điều hành phát triển dựa tảng Enterprise Linux Fermilab, CERN nhiều phịng thí nghiệm khác giới nhằm đưa vào số công cụ (vd: Alpine,OpenAFS, ) phục vụ cho nghiên cứu tiến hành thiết lập tảng chung cho thí nghiệm khác toàn giới Trang web: https://www.scientificlinux.org/ 3.1 Linux Shell Như nói trên, hệ thống Linux nhìn đơn khái qt thành phần chính: phần hệ thống (đặc trưng nhân hệ điều hành), phần người dùng (bao gồm chương trình ứng dụng, cơng cụ) Việc thao tác trực tiếp tới nhân hệ điều hành phức tạp đòi hỏi kỹ thuật cao, để trách phức tạp cho người sử dụng để bảo vệ nhân từ sai sót người sử dụng, người ta xây dựng ứng dụng tương tự lớp vỏ (shell ) bao quanh nhân (xem Hình 3) Hình 3: Hình ảnh minh họa cấu trúc hệ điều hành Linux Về bản, shell giao diện (interface) tương tác người dùng nhân hệ điều hành Nó thơng dịch lệnh người dùng nhập vào từ tập tin theo cú pháp cho trước chuyển đển nhân hệ điều hành để xử lý tiếp, sau trả lại kết cho người Đặng Nguyên Phương Tài liệu nội NMTP dùng Shell phần nhân hệ điều hành sử dụng nhân để thực thi lệnh, chương trình Các loại shell thường sử dụng Linux gồm có • Bourne Shell (sh) shell nguyên thủy từ hệ điều hành Unix, phát triển Stephen Bourne thuộc phịng thí nghiệm AT&T Bell phát hành lần phiên Unix năm 1977 Phần khởi tạo mặc định cho tiến trình shell mặc định /bin/sh • C Shell (csh) phát triển Bill Joy phát hành vào năm 1979 hệ thống BSD Unix, cung cấp ngơn ngữ dịng lệnh tương tự ngơn ngữ lập trình C giúp tạo thuận lợi cho người lập trình ngơn ngữ Ngày nay, C shell khơng cịn sử dụng nhiều hệ thống Unix/Linux mà thay TENEX C Shell (tcsh) • Korn Shell (ksh) phát triển David Korn (cũng phịng thí nghiệm AT&T Bell) đầu năm 80 Nó có khả tương thích ngược với Bourne shell kế thừa số tính C Shell Phần khởi tạo mặc định cho tiến trình shell mặc định /bin/ksh • Bourne Again Shell (bash) viết Brian Fox năm 1987 cho dự án GNU, shell mặc định Linux, cài sẵn hầu hết hệ điều hành Linux nay, ngồi cịn có Mac OS X Phần khởi tạo mặc định /bin/bash • Z Shell (zsh) viết Paul Falstad vào năm 1990, shell tích hợp đầy đủ tính shell trước cải tiến tính tự hồn thành câu lệnh (autocomplete), kiểm tra lỗi cú pháp (spelling correction), câu lệnh nhiều dòng (multi-line command ), 3.2 Terminal Để tương tác với shell cần chương trình giao tiếp, Linux có hai phương thức giao tiếp gồm có • Sử dụng Giao diện đồ họa người dùng (Graphical User Interfaces − GUI) hầu hết hệ điều hành Linux có sẵn phần giao diện này, ta thoải mái sử dụng chuột tương tự hệ điều hành Windows • Sử dụng Giao diện dịng lệnh (Command Line Interface − CLI) giao diện truyền thống Linux, tất điều khiển máy tính phải thơng qua việc nhập dịng lệnh Ưu điểm phương thức nhanh gọn xử lí nhiều cơng việc, nhiên khuyết điểm việc học ghi nhớ câu lệnh khó khăn Trong tài liệu này, tác giả tập trung vào việc hướng dẫn sử dụng CLI GUI vốn quen thuộc với người dùng Để giao tiếp với shell qua dòng lệnh ta cần chương trình giao tiếp, Linux chương trình gọi Terminal Emulator hay gọi tắt Terminal Có nhiều Terminal khác viết cho Linux, chẳng hạn Konsole (KDE), Gnome Terminal (Gnome), nhiên lệnh Terminal thống phiên Linux Một số phím tắt thường dùng Terminal : Ctrl-L xóa hình Ctrl-D Ctrl-R tìm lệnh chạy trước Tab tự động hoàn tất câu lệnh Ctrl-Ins chép Shft-Ins dán Đặng Nguyên Phương Shft-PgUp (PgDn) Shft-Alt-Fn 3.3 Tài liệu nội NMTP cuộn hình lên (xuống) chuyển sang terminal thứ n Các lệnh thao tác với tài khoản người dùng Linux hệ điều hành đa người dùng, có nghĩa nhiều người truy cập sử dụng máy tính lúc Trong Linux có hai loại người dùng người dùng thông thường (regular user ) siêu người dùng (super user ) Để truy cập hệ thống máy tính có sử dụng Linux, người dùng cần phải tạo tài khoản (account) cho riêng mình, thơng tin tài khoản người dùng gồm có • Tên tài khoản (username): tối đa ký tự, tên tài khoản có phân biệt chữ hoa, chữ thường; thông thường người dùng hay đặt tất chữ thường • Mật (password ): mã hoá đặt file /etc/shadow • UID (user identification): số ID người dùng, số nguyên dương hệ điều hành gán cho tài khoản người dùng giúp hệ thống phân biệt người dùng khác Một số điểm lưu ý dành cho UID: – Người dùng có UID = người dùng có quyền quản trị hệ thống cao (root) – UID người dùng bình thường có giá trị khác – UID = 65534 gán cho tài khoản nobody (người dùng khơng có quyền quản trị) – UID = − 999 dành cho tài khoản hệ thống (mail, daemon, sshd, ) • GID (group identification): số ID nhóm người dùng (mỗi người dùng ln thành viên nhóm) Người dùng nhóm có quyền hạn nhau, thơng thường tất người dùng thuộc vào nhóm User (trừ root tài khoản dành riêng cho hệ thống), người dùng có quyền thao tác thư mục riêng thư mục khác phép hệ thống Người dùng truy cập vào thư mục riêng người dùng khác (trừ trường hợp người dùng root cho phép) • Thơng tin cá nhân: thường gồm tên đầy đủ người dùng thơng tin khác có liên quan • Thư mục riêng (home directory): người dùng cấp thư mục riêng, thường thư mục thư mục /home có tên đặt trùng với tên tài khoản để tránh nhầm lẫn (vd: tên tài khoản phuong thư mục riêng /home/phuong Riêng tài khoản root thư mục riêng /root Để đăng nhập (login) vào hệ thống, người dùng cần cung cấp hai thơng tin cần thiết tên người dùng (username) mật (password ) Kiểm tra thông tin người dùng cách xem tập tin /etc/passwd thông qua lệnh sudo cat / etc / passwd Tập tin passwd lư trữ tồn thơng tin tất người dùng, bên ví dụ nội dung tập tin passwd Trong tập tin, thông tin người dùng nằm dòng, ngăn cách dấu ‘:’ Trong ví dụ dưới, tài khoản dang (chữ màu đỏ) bao gồm thông tin tên tài khoản (dang), mật (đã mã hoá), UID (1000), GID(1000), thông tin cá nhân (Dang Nguyen Phuong), thư mục riêng (/home/dang), shell đăng nhập (/bin/bash) Đặng Nguyên Phương Tài liệu nội NMTP kernoops : x : : 5 : Kernel Oops Tracking Daemon , , , : / : / bin / false pulse : x : : 1 : PulseAudio daemon , , , : / var / run / pulse : / bin / false rtkit : x : 1 : 1 : RealtimeKit , , , : / proc : / bin / false hplip : x : 1 : : HPLIP system user , , , : / var / run / hplip : / bin / false saned : x : 1 : : : / home / saned : / bin / false dang : x : 0 : 0 : Dang Nguyen Phuong , , , : / home/ dang : / b i n / bash mpd : x : 1 : : : / var / lib / mpd : / bin / false sshd : x : 1 : 5 : : / var / run / sshd : / usr / sbin / nologin guest : x : 1 : : Guest , , , : / tmp / guest−home hy7SXb : / bin / bash Tài khoản root gọi tài khoản siêu người dùng, tài khoản có quyền cao hệ thống Linux Người dùng sử dụng tài khoản root để thực số công việc quản trị hệ thống thêm tài khoản người dùng mới, thay đổi mật người dùng, cài đặt gỡ bỏ phần mềm, thay đổi quyền tập tin thư mục, Khi sử dụng tài khoản root, người dùng phải cẩn thận thao tác tài khoản ảnh hưởng trực tiếp đến hệ thống Một số lệnh làm việc với tài khoản root • Thay đổi password cho root sudo passwd root • Chuyển sang tài khoản root su • Thực thi lệnh với quyền root cách thêm sudo phía trước lệnh Trong số hệ điều hành chẳng hạn Ubuntu, tài khoản root mặc định bị khóa, điều có nghĩa người dùng khơng thể đăng nhập trực tiếp với tài khoản root sử dụng lệnh su để trở thành root Nhưng người dùng chạy chương trình với đặc quyền root thơng qua lệnh sudo Ngồi ra, cài đặt Ubuntu, tài khoản người dùng tạo thuộc nhóm Admin có quyền quản trị hệ thống Tài khoản người dùng tài khoản cho phép người dùng truy cập làm việc hệ thống Để tạo tài khoản người dùng mới, thay đổi xóa bỏ tài khoản này, ta phải sử dụng quyền siêu người dùng Một số lệnh làm việc với tài khoản người dùng • Tạo tài khoản người dùng sudo useradd [ options ] sudo adduser [ options ] Một số -d, -m, -p, -s, tùy chỉnh cho lệnh useradd home HOME_DIR create-home password PASSWORD shell SHELL khai báo thư mục riêng tạo thư mục riêng trường hợp khơng có trước khai báo mật khai báo shell đăng nhập 10 Đặng Nguyên Phương Chuỗi Tài liệu nội NMTP dãy kí tự, số lệnh dành cho chuỗi sau • Khai báo chuỗi $ string=abcABC123ABCabc • Chiều dài chuỗi $ ${#string } $ expr length $string $ expr " $ s t r i n g " : '.∗ ' • Vị trí kí tự chuỗi $ expr index $string $substring • Lấy chuỗi $ ${ string : position } # l a y c h u o i tu v i t r i p o s i t i o n $ ${ string : position : length } # l a y c h u o i co d a i l e n g t h tu v i t r i position • Xóa chuỗi $ ${ string#substring } #xoa c h u o i s u b s t r i n g ngan nhat t i n h tu dau c h u o i $ ${ string##substring } #xoa c h u o i s u b s t r i n g d a i nhat t i n h tu dau c h u o i • Thay chuỗi $ ${ string / substring / replacement } # thay t h e c h u o i s u b s t r i n g dau t i e n bang r e p l a c e m e n t $ ${ string // substring / replacement } # thay t h e t a t ca c h u o i s u b s t r i n g bang r e p l a c e m e n t 4.6 Trình soạn thảo văn Trong Linux có nhiều trình soạn thảo văn khác nhau, nhằm giúp người dùng tạo liệu văn bản, thư điện tử, danh sách, ghi chú, báo cáo, Bên cạnh trình soạn thảo hiển thị văn có sẵn Linux nano, cat, phần giới thiệu thêm số trình soạn thảo văn nhiều người sử dụng Gedit trình soạn thảo văn đơn giản, cài đặt mặc định hệ thống GNOME Điểm mạnh trình soạn thảo Gedit bổ sung thêm nhiều trình hỗ trợ (plugin) thống từ nhà phát triển thứ Một số trình hỗ trợ thơng dụng chẳng hạn • Bracket Completion: tự động đóng ngoặc (( )), ([ ]), ({ }), (< >) • Charmap: chèn kí tự từ đồ kí tự • Code Comment: đánh dấu ghi phím tắt • Join lines/ Split lines: nối, cắt dòng với Ctrl-J Shft-Ctrl-J 23 Đặng Nguyên Phương Tài liệu nội NMTP • Session Saver : lưu lại phiên làm việc • Smart Spaces: tự động làm xếp khoảng trống đầu dịng đoạn mã lệnh phím tắt Ctrl-T Shft-Ctrl-T Emacs (Editor MACroS ) trình soạn thảo văn đa chức năng, chạy nhiều hệ điều hành mở rộng để thêm vào chức Emacs phổ biến giới lập trình máy tính người dùng máy tính thơng thạo kĩ thuật Một số tính đặc trưng emacs gồm có • Soạn thảo nhiều cửa sổ đệm (buffer ) • Tìm kiếm, thay thế, tự sửa lỗi • Soạn thảo đệ quy (recursive edit): cho phép soạn thảo câu lệnh thực chừng • Nhiều chế độ soạn thảo: văn thường, file chương trình (tơ màu cú pháp thực đoạn mã lệnh), ngôn ngữ đánh dấu (HTML), LaTeX, vẽ hình kí tự • Sửa đổi theo ý thích cá nhân cách chỉnh sửa biến chương trình • Lập trình ngơn ngữ Lisp (LISt Processing) • Nhiều chương trình hỗ trợ (danh sách thư mục, đọc soạn e-mail, trò chơi, ) Vim (Vi IMproved ) trình soạn thảo văn nâng cấp lên từ trình soạn thảo Vi trước Trình soạn thảo vim chạy hai chế độ khác • Ở chế độ câu lệnh (command mode), người dùng gõ vào hiểu câu lệnh lệnh cho vim • Ở chế độ nhập văn (insert mode), người dùng gõ vào máy hiểu nội dung tập tin • Để chuyển đổi qua lại hai chế độ này, ta sử dụng kí tự i a để chuyển từ chế độ lệnh sang chế độ nhập Esc để chuyển từ chế độ nhập sang chế độ lệnh Mặc định khởi động vim chế độ lệnh Thực thi Để thực thi chương trình soạn thảo văn bản, dấu nhắc lệnh ta gõ tên chương trình, kèm với tên tập tin muốn mở Ví dụ: $ gedit filename $ emacs filename $ vim filename Các phím tắt số phím tắt thơng dụng việc soạn thảo cách hương trình 24 Đặng Ngun Phương Lệnh Thốt khỏi chương trình Mở tập tin Đóng tập tin Lưu file Lưu file với tên khác Tìm kiếm Tìm Tìm thay Đi đến dòng thứ N Cuộn lên trang Cuộn xuống trang Đánh dấu chọn tất Cắt vùng đánh dấu Copy vùng đánh dấu Dán Chuyển sang chế độ lệnh Tài liệu nội NMTP Gedit Ctrl-q Ctrl-o Ctrl-w Ctrl-s Shft-Ctrl-s Ctrl-f Ctrl-g Ctrl-h Ctrl-i N Ctrl-Alt-PgUp Ctrl-Alt-PgDn Ctrl-a Ctrl-x Ctrl-c Ctrl-v Emacs Ctrl-x Ctrl-c Ctrl-x Ctrl-f Vim :q :e Ctrl-x Ctrl-s Ctrl-x Ctrl-w Ctrl-s Ctrl-s Alt-% Alt-x goto-line N Alt-v Ctrl-v Ctrl-x h Ctrl-w Alt-w Ctrl-y Alt-x lệnh :w :w filename / hay ? n %s/oldword/newword/g NG Ctrl-b Ctrl-f v,d "*y p Esc Shell script Thông thường, shell nhận lệnh từ người dùng nhập thông qua bàn phím (keyboard ) lần người dùng nhập lệnh (kết thúc phím enter ) Tuy nhiên, trường hợp người dùng sử dụng nhiều lệnh lúc người dùng lưu chuỗi lệnh vào tập tin văn yêu cầu shell thực thi tập tin thay nhập vào lệnh Chuỗi lệnh viết tập tin gọi shell script 5.1 Cách tạo thực thi shell script Để tạo shell script, người dùng sử dụng trình soạn thảo văn bất kì, soạn thảo tập tin chứa dịng lệnh cần thực lưu tập tin với đuôi tương ứng với loại shell mà muốn sửa dụng để thực thi Ví dụ muốn tạo shell script xuất hình dịng chữ “Hello world!” sử dụng bash shell, tạo file có tên hello.sh với nội dung sau #! / b i n / bash # gan c h u o i " H e l l o world ! " cho b i e n STRING string=" H e l l o World" # xuat n o i dung cua b i e n STRING r a man hinh echo $string Trong ví dụ này, dịng hello.sh có kí tự #! đầu nhằm báo cho Linux biết trình thơng dịch shell mà ta muốn sử dụng, trường hợp bash shell Ngồi ra, ta cịn sử dụng số trình thơng dịch khác #!/bin/sh Bourne shell #!/bin/csh C shell #!/usr/bin/perl Perl #!/usr/bin/php PHP #!/usr/bin/python Python #!/usr/bin/ruby Ruby Với tập tin hello.sh vừa tạo ra, ta gọi thực thi theo cách • Gọi trình thơng dịch shell với tên tập tin làm đối số 25 Đặng Nguyên Phương Tài liệu nội NMTP $ / bin / bash hello sh • Gọi thực thi từ dịng lệnh, tương tự lệnh Linux thơng thường Để làm điều này, trước tiên ta cần gán thuộc tính thực thi cho tập tin script vừa tạo lệnh chmod $ chmod +x hello sh Sau gọi thực thi script $ / hello sh 5.2 Biến Trong shell script, thông thường ta không cần phải khai báo biến trước sử dụng, thay vào biến tự động tạo khai báo lần tên biến xuất Mặc định, tất biến khởi tạo chứa trị kiểu chuỗi (string), liệu đưa vào biến số Shell vài lệnh tiện ích tự động chuyển chuỗi thành số để thực phép tính có u cầu Bên shell script, ta có thề lấy nội dung biến cách dùng dấu ‘$’ đặt trước tên biến Để hiển thị nội dung biến, ta dùng lệnh echo Để đọc nội dung liệu người dùng đưa vào lưu lại biến, ta sử dụng lệnh read, ví dụ #! / b i n / bash read string echo " H e l l o " $string Lệnh read kết thúc người dùng nhấn phím Enter Một số lưu ý gán nội dung cho biến • Tên biến bắt đầu kí tự dấu gạch chân ‘_’ • Tên biến phân biệt chữ hoa chữ thường • Khơng sử dụng kí tự đặc biệt (?, *, ) đặt tên cho biến • Khi thực lệnh gán, trước sau dấu ‘=’ khơng có khoảng trắng • Nếu gán nội dung chuỗi trắng cho biến,cần bao bọc chuỗi dấu “ ” Biến môi trường Khi trình shell khởi động cung cấp sẵn số biến khai báo gán trị mặc định, chúng gọi biến môi trường (environment variable) Các biến thường viết hoa để phân biệt với biến người dùng tự định nghĩa (thường ký tự không hoa) Nội dung biến thường tùy vào thiết lập hệ thống người quản trị cho phép người dùng hệ thống sử dụng Dưới số biến môi trường thông dụng $HOME vị trí thư mục chủ $PATH danh sách đường dẫn chương trình thực thi (cách dấu ‘:’) $PS1 dấu nhắc (prompt) hiển thị dòng lệnh, thường ‘$’ $SP2 dấu nhắc thứ cấp, thường dấu ‘>’ $IFS dấu phân cách trường chuỗi, thường chứa ký tự Tab, ký tự trắng ký tự xuống hàng $0 chứa tên chương trình gọi dịng lệnh $# số tham số truyền dòng lệnh 26 Đặng Nguyên Phương Tài liệu nội NMTP ID tiến trình shell script thực thi $$ Mỗi mơi trường mà người dùng đăng nhập chứa số biến môi trường dùng cho mục đích riêng Có thể xem đanh sách biến lệnh env Để tạo biến mơi trường mới, ta dùng lệnh export (bash shell) lệnh setenv (C shell) Ví dụ: Thêm đường dẫn tới chương trình thực thi ROOT biến PATH thư viện ROOT vào biến LD_LIBRARY_PATH export ROOTSYS=~/root_v5 / root / export PATH=$ROOTSYS / bin : $PATH export LD_LIBRARY_PATH=$ROOTSYS / lib : $LD_LIBRARY_PATH setenv ROOTSYS "~/ root_v5 / r o o t / " setenv PATH "$ROOTSYS/ b i n :$PATH" setenv LD_LIBRARY_PATH "$ROOTSYS/ l i b :$LD_LIBRARY_PATH" Biến tham số biến tự động hệ thống tạo người dùng thực thi shell kèm với việc tiếp nhận tham số để xử lý, số biến tham số thông dụng $1, $2, $3, vị trí nội dung tham số theo thứ tự trái sang phải $# tổng tham số $* danh sách tất tham số, lưu chuỗi phân cách kí tự $IFS $@ danh sách tham số chuyển thành chuỗi, không sử dụng dấu phân cách $IFS $? giá trị trả lại câu lệnh trước Ví dụ: Tạo shell cript hello.sh với hai tham số tên người dùng ngày #! / b i n / bash name=$1 date=$2 echo " H e l l o " $name " , today i s " $date Kết thực thi shell script $ / hello sh Phuong 1 Hello Phuong , today is 1 5.3 Cấu trúc điều khiển Tương tự ngôn ngữ lập trình khác, shell cung cấp cấu trúc lệnh điều khiển, bao gồm lệnh if, for, while, until, case If kiểm tra điều kiện sai để thực thi lệnh thích hợp Cú pháp if condition then statements else statements hay 27 Đặng Nguyên Phương Tài liệu nội NMTP if condition1 then statements elif condition2 then statements else statements (ta đưa từ khóa then lên dịng với từ khóa if hay elif cách đặt dấu ‘;’ sau điều kiện) Để kiểm tra điều kiện, ta sử dụng lệnh test hay cặp dấu ngoặc vng [] Trong Linux có kiểu so sánh • So sánh số học -eq so sánh -ne không -lt nhỏ -le nhỏ -gt lớn -ge lớn • So sánh chuỗi s1 = s2 s1 != s2 -n s1 -z s1 • Kiểm -s -f -d -w -r -x hai chuỗi hai chuỗi không chuỗi không rỗng chuỗi rỗng tra tập tin, thư mục file tập tin không rỗng file tập tin tồn tại, thư mục dir thư mục tồn tại, tập tin file tập tin cho phép ghi file tập tin đọc file tập tin có quyền thực thi Ví dụ: kiểm tra xem đối số có phải tên tập tin hay không #! / b i n / bash if [ −f " $1 " ] then echo " $1 i s a f i l e " else echo " $1 i s not a f i l e " fi Ví dụ: so sánh số với 100 #! / b i n / bash count=99 if [ $count −eq 100 ] ; then echo "Count i s 100 " elif [ $count −gt 100 ] ; then echo "Count i s g r e a t e r than 100 " 28 Đặng Nguyên Phương Tài liệu nội NMTP else echo "Count i s l e s s than 100 " fi For lặp lại số lần với giá trị xác định, phạm vi lặp nằm tập hợp chuỗi kết qủa trả từ biến biểu thức khác Cú pháp for variable in values statemens done Ví dụ: liệt kê tất tập tin thư mục có thư mục /var #! / b i n / bash for f in $ ( ls / var / ) ; echo $f done While thực lặp vô hạn điều kiện kiểm tra Cú pháp while condition statements done Ví dụ: tạo bảng cửu chương #! / b i n / bash y=1 while [ $y −le 10 ] ; x=1 while [ $x −le 10 ] ; printf "% 4d" $ ( ( $x ∗ $y ) ) let x++ done echo " " let y++ done Until tương tự lệnh while điều kiện kiểm tra bị đảo ngược lại Cú pháp until condition statements done Ví dụ: in số lùi dần từ 20 29 Đặng Nguyên Phương Tài liệu nội NMTP #! / b i n / bash counter=20 until [ $counter −lt 10 ] ; echo $counter let counter−=1 done Case so khớp nội dung biến với chuỗi mẫu (pattern) đó, mẫu so khớp lệnh tương ứng thực Cú pháp case variable in pattern [ | pattern ] ) statements ; ; pattern [ | pattern ] ) statements ; ; esac Ví dụ: in câu chào tương ứng với thời gian ngày #! / b i n / sh echo " I s i t morning ? P l e a s e answer y e s o r no" read timeofday case " $ t i m e o f d a y " in " y e s " ) echo "Good Morning " ; ; "no" ) echo "Good A f t e r n o o n " ; ; "y" ) echo "Good Morning " ; ; "n" ) echo "Good A f t e r n o o n " ; ; ∗ ) echo " Sorry , answer not r e c o g n i s e d " ; ; esac Các lệnh ngồi vịng lặp gồm hai lệnh • break: hồn tồn khỏi vịng lặp • continue: thoát khỏi lần lặp chuyển sang lần lặp Ví dụ: sử dụng lệnh break continue #! / b i n / bash counter=0 until [ $counter −eq 10 ] ; ( ( counter++ ) ) if [ $counter −eq ] ; then continue elif [ $counter −eq ] ; then break fi echo $counter done Trong ví dụ trên, giá trị biến counter xuất hình tăng từ đến 10, giá trị counter tăng đến giá trị khơng in mà chuyển đến vòng lặp với counter = Còn giá trị counter đạt tới lệnh break khỏi vịng lặp, giá trị từ trở không xuất hình 30 Đặng Nguyên Phương Tài liệu nội NMTP $ / count sh 5.4 Hàm Người dùng tự tạo hàm hay thủ tục để triệu nhóm lệnh bên shell script Ngồi ra, ta gọi script khác bên script tương tự việc gọi hàm, nhiên việc thường tiêu tốn tài nguyên không hiệu việc gọi hàm Để định nghĩa hàm shell script, ta cần khai báo tên hàm cặp ngoặc đơn ( ), lệnh hàm nằm cặp ngoặc nhọn { } Cú pháp khai báo hàm sau function_name ( ) { Statements } Ví dụ: Viết hàm tính tổng hai đối số #! / b i n / bash sum ( ) { x=$1 y=$2 echo $ ( ( $x+$y ) ) } sum $1 $2 Biến để khai báo biến cục (local variable) có hiệu lực bên hàm, ta phải dùng từ khóa local Nếu khơng có từ khóa này, biến xem tồn cục (global variable), tồn lưu giữ kết sau hàm chấm dứt Biến tồn cục nhìn thấy thay đổi tất hàm shell script Trường hợp có biến toàn cục lại khai báo biến cục tên, biến cục có giá trị ưu tiên hiệu lực hàm chấm dứt Ví dụ: Viết hàm tính tổng hai đối số sum ( ) { local x=$1 local y=$2 echo $ ( ( $x+$y ) ) } Trả giá trị để trả giá trị hàm, ta sử dụng lệnh return Ví dụ: Viết hàm tính tổng hai đối số #! / b i n / bash sum ( ) { 31 Đặng Nguyên Phương Tài liệu nội NMTP local x=$1 local y=$2 return $ ( ( $x+$y ) ) } sum $1 $2 echo "Tong h a i s o l a " $ ? Để trả giá trị chuỗi, ta dùng lệnh echo chuyển hướng nội dung kết xuất hàm gọi sau mystring ( ) { echo " s t r i n g v a l u e " } x=$ ( mystring ) Biến x nhận trị trả hàm mystring() “string value” Còn cách khác để lấy giá trị trả hàm, sử đụng biến tồn cục (do biến toàn cục lưu lại trị hàm chấm dứt) Cách thức biên dịch thực thi chương trình Các chương trình thực thi Linux viết nhiều ngơn ngữ C, Fortran, Pascal, Assembly, Perl, Các chương trình tồn hai dạng: dạng thực thi (executable) dạng mã nguồn (source code) Để thực thi chương trình, ta cần phải biên dịch mã nguồn chương trình thành tập tin thực thi Quá trình biên dịch biên dịch (compiler ) đảm nhiệm 6.1 Trình biên dịch Trong hầu hết phiên Linux, trình biên dịch mặc định cài đặt sẵn GCC (GNU Compiler Collection), trình biên dịch có khả biên dịch nhiều ngôn ngữ khác C (gcc), C++ (g++), Fortran (gfortran), Tên gốc GCC GNU C Compiler ban đầu hỗ trợ dịch ngơn ngữ lập trình C Phiên GCC 1.0 phát hành vào năm 1987, sau mở rộng hỗ trợ dịch C++ vào tháng 12 năm Sau đó, GCC phát triển cho ngơn ngữ lập trình Fortran, Pascal, Objective C, Java, and Ada, Bảng trình bày số trình biên dịch thơng dụng GCC Ngơn ngữ C C++ Fortran Pascal Java Ada D VHDL 6.2 Trình biên dịch gcc g++ gfortran gpc gcj gnat gdc ghdl Các thức biên dịch thực thi chương trình Cú pháp để biên dịch chương trình sau 32 Đặng Nguyên Phương Tài liệu nội NMTP compiler [ options ] Các tùy chọn để điều khiển trình biên dịch -c tạo tập tin đối tượng (.o) -o filename tạo tập tin output có tên filename -g biên dịch chế đệ debug (báo lỗi có lỗi xảy ra) -Wall hiển thị thông điệp cảnh báo (warning) -l directory thêm thư viện trình biên dịch -I directory thêm thư mục chứa header cần thiết trình biên dịch -L directory thêm thư mục chứa thư viện cần thiết trình biên dịch -On biên dịch với chế độ tối ưu, n = 1,2,3 (thông thường 2) Các trình biên dịch thường đặt thư mục /usr/bin hay /usr/local/bin Trong trình biên dịch, khơng có u cầu cụ thể, trình biên dịch mặc định tìm kiếm tập tin header thư viện thư mục với tập tin mã nguồn thư mục /usr/include hay /usr/lib Ví dụ: biên dịch thực thi chương trình ứng dụng viết ngôn ngữ Fortran $ gfortran −o helloworld helloworld f $ / helloworld Trong đó, helloworld.f tập tin chứa mã nguồn chương trình, tùy chỉnh -o cho ta xác định trước tên tập tin ứng dụng biên dịch ra, trường hợp helloworld Dòng lệnh thứ hai dòng lệnh để thực thi chương trình ứng dụng vừa tạo Trong trường hợp mã nguồn viết ngôn ngữ C++, ta sử dụng trình biên dịch g++ $ g++ −o helloworld helloworld cpp 6.3 Biên dịch với thư viện Thư viện tập tin chứa đoạn mã lệnh liệu (thường dạng mã nhị phân) tổ chức thành hàm hay lớp nhằm cung cấp dịch vụ, chức cho chương trình chạy máy tính Có loại thư viện Linux gồm: tĩnh (static), động (dynamic) chia sẻ (shared ) Khi biên dịch chương trình dạng mã nguồn sang dạng thực thi nhiều hàm chức chương trình liên kết từ thư viện Ví dụ, chương trình bạn có sử dụng hàm print(), bạn không cần cung cấp chi tiết mã lệnh hàm print() này, phải đảm bảo máy có sẵn tập tin thư viện chứa nội dung hàm Khi trình biên dịch cần liên kết đoạn mã cho hàm print(), tìm đoạn mã thư viện chép vào chương trình Một chương trình biên dịch thực thi cách hoàn toàn độc lập coi liên kết tĩnh (static linking) khơng cịn phụ thuộc vào tồn thư viện chứa đoạn mã nguồn tạo nên chương trình Các chương trình liên kết tĩnh có số điểm hạn chế • Chương trình có kích thước lớn, chiếm dụng nhiều nhớ phải bao gồm đoạn mã thư viện liên kết chương trình • Gây lãng phí nhớ RAM nhiều chương trình chạy đồng thời chứa đoạn mã giống thư viện Để khắc phục nhược điểm trên, thay liên kết tĩnh, chương trình liên kết động (dynamic linking) tức 33 Đặng Nguyên Phương Tài liệu nội NMTP • Bản thân chương trình lưu trữ nhớ không chứa đoạn mã thư viện mà chứa khai báo tham khảo tới đoạn mã Điều giúp giảm kích cỡ chương trình • Khác với liên kết tĩnh có việc liên kết tới thư viện diễn thời điểm biên dịch, liên kết động việc liên kết tập tin thực thi chương trình với thư viện diễn thời điểm chạy chương trình (runtime) Quá trình gắn kết liên kết (linker ) đảm nhiệm giúp cho phép nhiều chương trình sử dụng chung thư viện nhớ Các tập tin thư viện liên kết động dùng chung nhiều ứng dụng gọi thư viện chia sẻ (shared library) Trong Windows thư viện có phần mở rộng dll, cịn Linux có phần mở rộng so Bất kỳ chương trình sử dụng liên kết động yêu cầu có thư viện chia sẻ hệ thống Nếu thư viện chia sẻ cần thiết khơng tìm thấy (hoặc khơng tồn tại), chạy chương trình đưa thông báo lỗi Để xác định thư viện cần thiết cho chương trình, ta sử dụng lệnh ldd ldd Lệnh hiển thị thư viện chia sẻ cần thiết với vị trí chúng cho chương trình program Khi chương trình dạng thực thi có sử dụng liên kết động chạy, ld.so chịu trách nhiệm tìm kiếm nạp vào nhớ thư viện chia sẻ cần thiết (thường đặt /lib, /usr/lib hay /usr/local/lib) cho chương trình Nếu ld.so khơng thể tìm thấy thư viện chương trình gặp lỗi chạy Để hướng dẫn cho ld.so tìm kiếm thư viện chia sẻ thư mục khác, ta thực hai cách sau • Thêm danh sách thư mục vào biến mơi trường LD_LIBRARY_PATH • Tạo danh mục gồm tên thư viện thư mục, lưu vào tập tin /etc/ld.so.cache Để làm điều đó, ta thêm thư mục chứa chứa thư viện vào tập tin cấu hình /etc/ld.so.conf, sau chạy lệnh ldconfig ldconfig [ options ] Lệnh ldconfig cập nhật cho cache (ld.so.cache) với thông tin thư viện chia sẻ nằm thư mục lib_directories, thư mục có tập tin /etc/ld.so.conf Để xem nội dung ld.so.cache ta gõ ldconfig −p Mỗi có thay đổi thư mục chứa thư viện chia sẻ, ta nên chạy lại lệnh ldconfig để đảm bảo cache cập nhật 6.4 Biên dịch với Makefile Makefile tập tin đặc biệt dùng để mơ tả quản lý q trình biên dịch tập tin dự án (project) Tập tin chứa quy tắc biên dịch xây dựng đồ thị phụ thuộc tập tin, thư viện dự án Để biên dịch với Makefile ta sử dụng lệnh make, lệnh đọc bước biên dịch Makefile để dịch sinh chương trình thực thi $ make Cấu trúc tập tin Makefile gồm nhiều khối thực hiện, khối gồm có thơng tin thành phần phụ thuộc (dependencies) cách thức hay quy tắc thực biên dịch (rule) Quy tắc tạo khối Makefile sau 34 Đặng Nguyên Phương Tài liệu nội NMTP target : dependencies commands • Target: tên tập tin tạo chương trình định để thực thi một loạt tác vụ đó, target khơng bắt đầu dấu ’.’ • Dependencies: tập tin đầu vào phụ thuộc để tạo target, tập tin thay đổi (do chỉnh sửa mã nguồn thời gian lưu bị thay đổi) target cần biên dịch lại • Commands: lệnh mà trình make thực thi Một quy tắc (rule) có nhiều lệnh, lệnh thường viết dòng, trước dịng cần phải có dấu tab Ví dụ Makefile Giả sử ta có lớp MyClass xây dựng sẵn ngơn ngữ lập trình C++, lớp định nghĩa hai tập tin MyClass.h MyClass.cpp Ta viết chương trình có sử dụng lớp MyClass (tập tin main.cpp), để tạo tập tin thực thi cho chương trình ta thực việc biên dịch sau $ g++ −c MyClass cpp $ g++ −c main cpp $ g++ main o MyClass o −o myprogram Dòng cuối liên kết hai tập tin biên dịch lại tạo thành tập tin thực thi myprogram mà ta chạy qua lệnh $ / myprogram Tuy nhiên, ví dụ thay thực biên dịch theo cách trên, ta viết Makefile để biên dịch tự động chương trình Đầu tiên, ta sử dụng trình soạn thảo văn tạo tập tin có tên Makefile $ gedit Makefile Trong tập tin này, ta khai báo trình biên dịch tùy chỉnh cần thiết CC = g++ FLAGS = −c −g −Wall Khai báo đối tượng (object) cần biên dịch, trường hợp ta cần hai đối tượng main.o MyClass.o main o : main cpp MyClass h $ ( CC ) $ ( FLAGS ) main cpp MyClass o : MyClass cpp MyClass h $ ( CC ) $ ( FLAGS ) MyClass cpp Khai báo tập tin thực thi phương thức liên kết myprogram : main o MyClass o $ ( CC ) main o MyClass o −o myprogram Khai báo thêm tùy chỉnh clean cho lệnh make để xóa tập tin biên dịch clean : rm −f ∗ o myprogram Makefile hồn chỉnh có nội dung sau 35 Đặng Nguyên Phương Tài liệu nội NMTP CC = g++ FLAGS = −c −g −Wall main o : main cpp MyClass h $ ( CC ) $ ( FLAGS ) main cpp MyClass o : MyClass cpp MyClass h $ ( CC ) $ ( FLAGS ) MyClass cpp myprogram : main o MyClass o $ ( CC ) main o MyClass o −o myprogram clean : rm −f ∗ o myprogram Để thực thi việc biên dịch với Makefile, dấu nhắc ta gõ $ make Để xóa tất tập tin vừa biên dịch, ta gõ $ make clean 36 Đặng Nguyên Phương Tài liệu nội NMTP Tài liệu [1] Huỳnh Thúc Cước, Lập trình mơi trường shell, Viện Công nghệ Thông tin, 2008 [2] http://vi.wikipedia.org/wiki/Linux [3] http://vi.wikipedia.org/wiki/Nh%C3%A2n_h%E1%BB%87_%C4%91i%E1%BB%81u_h%C3% A0nh [4] http://www.ibm.com/developerworks/library/l-linux-kernel/ [5] http://thuemaychuidc.blogspot.de/2013/04/ac-tinh-uu-viet-cua-linux.html# Up9KBTjzS-M [6] http://zxc232.wordpress.com/2009/01/16/linux-hay-gnulinux-va-c%E1%BA% A5u-truc-nhan-linux/ [7] http://viet.jnlp.org/nhap-mon-linux/shell-la-gi [8] http://www.learnlinux.org.za/courses/build/fundamentals/fundamentals-all html [9] http://cauhoi.wordpress.com/2009/09/19/nh%E1%BB%AFng-hi%E1%BB%83u-bi%E1%BA% BFt-ban-d%E1%BA%A7u-v%E1%BB%81-unix-shells/ [10] http://www.kiemlam.org.vn/download.aspx/9EEFAB692C8F432CAFB8C7AB95F6C765/1/ Su_dung_Linux_Shell.pdf [11] http://www.estih.edu.vn/Documents/Doc/quan_tri_user.pdf [12] http://www.vn-zoom.com/f228/he-thong-tap-tin-va-thu-muc-tren-linux-31486 html [13] http://www.zun.vn/tai-lieu/quan-ly-tien-trinh-trong-linux-9220/ [14] http://vi.wikipedia.org/wiki/B%E1%BB%99_tr%C3%ACnh_d%E1%BB%8Bch_GNU [15] http://manthang.wordpress.com/2010/12/04/quan-ly-cac-shared-library-trong-linux/ [16] http://sk4eo.wordpress.com/2012/02/29/plugin-s%E1%BB%A9c-m%E1%BA%A1nh-c%E1% BB%A7a-gedit/#more-8 [17] http://vi.wikipedia.org/wiki/Emacs [18] http://aragondt.0fees.net/web/news.php?idnews=8 [19] http://tdanhit.blogspot.de/2013/05/lap-trinh-shell-xu-ly-mang.html [20] http://www.coltech.vnu.edu.vn/UserFiles/File/TaiLieuThamKhao/HeDieuHanh/ Giao%20trinh%20he%20dieu%20hanh%20Linux%20va%20Unix.pdf 37

Ngày đăng: 05/01/2022, 16:13

HÌNH ẢNH LIÊN QUAN

Hình 1: Sơ đồ hoạt động của nhân hệ điều hành - Nhập môn Hệ điều hành Linux
Hình 1 Sơ đồ hoạt động của nhân hệ điều hành (Trang 3)
Hình 2: Kiến trúc của hệ điều hành Linux - Nhập môn Hệ điều hành Linux
Hình 2 Kiến trúc của hệ điều hành Linux (Trang 5)
Hình 3: Hình ảnh minh họa cấu trúc hệ điều hành Linux - Nhập môn Hệ điều hành Linux
Hình 3 Hình ảnh minh họa cấu trúc hệ điều hành Linux (Trang 7)
/boot các tập tin cấu hình cho quá trình khởi động hệ thống /etcchứa các tập tin cấu hình hệ thống cục bộ - Nhập môn Hệ điều hành Linux
boot các tập tin cấu hình cho quá trình khởi động hệ thống /etcchứa các tập tin cấu hình hệ thống cục bộ (Trang 11)
Hiển thị màu sắc để thay đổi màu chữ xuất ra màn hình của lệnh echo ta thêm vào chuỗi kí hiệu điều khiểnescape(\033hoặc\e) cộng với số hiệu của màu muốn thể hiện cho chuỗi trên màn hình - Nhập môn Hệ điều hành Linux
i ển thị màu sắc để thay đổi màu chữ xuất ra màn hình của lệnh echo ta thêm vào chuỗi kí hiệu điều khiểnescape(\033hoặc\e) cộng với số hiệu của màu muốn thể hiện cho chuỗi trên màn hình (Trang 17)
clear xóa màn hình $ clear - Nhập môn Hệ điều hành Linux
clear xóa màn hình $ clear (Trang 19)
Ví dụ chúng ta muốn tạo một shell script xuất ra màn hình dòng chữ “Hello world!” sử dụng bash shell, chúng ta sẽ tạo một file có tên là hello.shvới nội dung như sau - Nhập môn Hệ điều hành Linux
d ụ chúng ta muốn tạo một shell script xuất ra màn hình dòng chữ “Hello world!” sử dụng bash shell, chúng ta sẽ tạo một file có tên là hello.shvới nội dung như sau (Trang 25)
Ví dụ: tạo bảng cửu chương #! / b i n / bash - Nhập môn Hệ điều hành Linux
d ụ: tạo bảng cửu chương #! / b i n / bash (Trang 29)
Trong ví dụ trên, giá trị của biến counter xuất ra màn hình tăng từ 1 đến 10, khi giá trị của countertăng đến 5 thì giá trị này sẽ không được in ra mà chuyển đến vòng lặp kế tiếp với counter= 6 - Nhập môn Hệ điều hành Linux
rong ví dụ trên, giá trị của biến counter xuất ra màn hình tăng từ 1 đến 10, khi giá trị của countertăng đến 5 thì giá trị này sẽ không được in ra mà chuyển đến vòng lặp kế tiếp với counter= 6 (Trang 30)

TỪ KHÓA LIÊN QUAN

w