BÀI 1 - GIỚI THIỆU CHUNG VỀ LINUX Mục đích: Bài học sẽ giới thiệu đến anh/chị phần mềm tự do và phần mềm nguồn mở, giấy phép phần mềm nguồn mở. Giới thiệu về lịch sử hình thành và cách sử dụng Linux. Các bản phối đặc biệt của Linux 1.1. Giới thiệu phần mềm tự do và phần mềm nguồn mở Phần mềm tự do và mã nguồn mở (Free and OpenSource Software - FOSS) là các phần mềm sau khi qua quy trình cấp phép thì hội đủ các yếu tố: - Nó được phân phối đến người sử dụng cùng với mã nguồn của nó và chúng có thể được sửa đổi. - Nó có thể được phân phối lại mà không bị một ràng buộc nào khác. - Chúng ta có thể phân phối cả những thay đổi mà chúng ta đã thực hiện trên mã nguồn gốc. Phần mềm tự do là phần mềm máy tính được phân phối theo các điều khoản cho phép người dùng chạy phần mềm cho bất kỳ mục đích nào cũng như nghiên cứu, thay đổi và phân phối phần mềm cũng như mọi phiên bản phù hợp.
Trang 1BÀI 1 - GIỚI THIỆU CHUNG VỀ LINUX Mục đích:
Bài học sẽ giới thiệu đến anh/chị phần mềm tự do và phần mềm nguồn mở, giấy phép phần mềm nguồn mở Giới thiệu về lịch sử hình thành và cách sử
dụng Linux Các bản phối đặc biệt của Linux
1.1 Giới thiệu phần mềm tự do và phần mềm nguồn mở
Phần mềm tự do và mã nguồn mở (Free and OpenSource Software - FOSS)
là các phần mềm sau khi qua quy trình cấp phép thì hội đủ các yếu tố:
- Nó được phân phối đến người sử dụng cùng với mã nguồn của nó và chúng có thể được sửa đổi
- Nó có thể được phân phối lại mà không bị một ràng buộc nào khác
- Chúng ta có thể phân phối cả những thay đổi mà chúng ta đã thực hiện trên mã nguồn gốc
Phần mềm tự do là phần mềm máy tính được phân phối theo các điều khoản cho phép người dùng chạy phần mềm cho bất kỳ mục đích nào cũng như nghiên cứu, thay đổi và phân phối phần mềm cũng như mọi phiên bản phù hợp
Phần mềm nguồn mở là phần mềm máy tính cho phép bất cứ ai cũng có thể nghiên cứu, thay đổi và cải tiến phần mềm, và phân phối phần mềm ở dạng chưa thay đổi hoặc đã thay đổi
Richard Stallman thành lập Free Software Foundation (FSF – Phần mềm tự do) có đóng góp lớn cho khởi đầu của FOSS
FOSS nhằm xóa bỏ sự thống trị và khắc phục một số hạn chế của phần mềm độc quyền
Mỗi phần mềm FOSS đều có đi kèm một giấy phép thỏa thuận về việc sử dụng, sửa đổi bổ sung, phân phối, phần mềm và mã nguồn phần mềm đó
Các quyền tự do thiết yếu của phần mềm tự do là
Trang 2 Tự do sử dụng chương trình như bạn muốn, cho bất kỳ mục đích nào
Tự do nghiên cứu cách chương trình hoạt động và thay đổi chương trình theo bất kỳ mục đích nào Truy cập vào mã nguồn là điều kiện tiên quyết cho việc này
Tự do phân phối lại các bản sao để có thể giúp đỡ người khác
Tự do phân phối các bản sao của các phiên bản sửa đổi của cá nhân cho người khác
1.2 Giấy phép phần mềm nguồn mở
1.2.1 Giấy phép mã nguồn mở:
a) Các giấy phép mã nguồn mở là các giấy phép bản quyền dành cho các phần mềm máy tính trong đó đặt ra các quy định buộc người sử dụng phần mềm đó phải tuân theo
Các giấy phép không quy định bất cứ sự hạn chế nào trong việc sử dụng
mã nguồn (hay gọi là giấy phép không bảo hộ - dễ dãi):
Phổ biến có: Apache Software License, BSD License, MIT License, b) Các giấy phép có quy định các hạn chế trong việc sử dụng mã nguồn (hay gọi là giấy phép bảo hộ - không dễ dãi):
Phổ biến có: GNU General Public License (GPL), Common Public License, Python Software Foundation License (PSFL), Mozilla Public License (MPL)…
Ví dụ: Phần mềm Mozilla Firefox sử dụng giấy phép nguồn mở Mozilla Public License (MPL)
Một giấy phép mã nguồn mở có copyleft được sử dụng rộng rãi, đảm bảo cho người dùng khả năng chạy, nghiên cứu, tùy biển về phần mềm
Năm 2006 tổ chức OSI thì đã nhận hằng trăm giấy phép và cấp phép khoảng 60 loại giấy phép
Tỷ lệ sử dụng của các loại giấy phép:
Trang 3Hình 1: Sơ đồ thống kê độ phổ biến của các loại giấy phép Phần mềm Tự do Nguồn mở
Mức giới hạn của GPL so với Apache/BSD:
Hình 2: Bảng so sánh giữa 6 loại giấy phép phổ biến
1.2.2 Liên hệ giấy phép FOSS với Linux:
Tổ chức FSF (Free Software Foundation) và cộng đồng các lập trình viên yêu FOSS đã và đang đóng góp nhiều để Linux có thể hoàn thiện như ngày nay
và cũng là cảm hứng cho Linus Torvalds tạo nên Linux kernel
Hạt nhân Linux sử dụng giấy phép GPL, dùng GPL giúp đảm bảo:
Trang 4 Hạt nhân Linux - các phiên bản hạt nhân sửa đổi trên các phần cứng đặc biệt, các module của hạt nhân luôn là FOSS
Chỉ có một Linux duy nhất, không bị phân mảnh thành nhiều bản GPL Sử dụng khá niệm “copyleft”, khi nhà sản xuất chỉnh sửa & ứng dụng thì cần công khai mã nguồn nếu không vi phạm thỏa thuận pháp lý
Hình 3: Hệ điều hành GNU/Hurd
Vào năm 1991, Linus Torvalds (21 tuổi, đại học Helsinki, Phần Lan) đã bắt đầu một dự án nguồn mở nhỏ và sau này trở thành dự án hạt nhân Linux
Ý tưởng về một hệ điều hành tự do nguồn mở và miễn phí cho mọi người
đã thu hút được nhiều người, một hệ điều hành bắt đầu là một sở thích riêng của
Trang 5một sinh viên dần đã trở thành hệ điều hành được sử dụng rộng dãi nhất, chạy trên nhiều loại thiết bị nhất
Năm 1994, cái tên “Linux” chính thức được sử dụng và hệ điều hành này được phát hành trên Internet
Ngày nay, Linux là một hạt nhân giúp các phân phối Linux cùng các phần mềm FOSS có thể chạy trên hầu hết tất cả các loại phần cứng từ chip nhúng rất chậm tới các siêu máy tính lớn nhất
Hình 4: Linus Torvalds tạo ra Linux thay thế MINIX và Unix
khi vẫn đang học đại học
Khái quát quá trình phát triển của Linux từ xưa tới nay:
Hình 5: Sơ đồ dòng thời gian của Linux
Trang 61.3.2 Một hệ điều hành Linux:
Hạt nhân Linux đi cùng và đóng gói với bộ phần mềm cơ bản của GNU thì
ta có ta có hệ điều hành tiêu chuẩn GNU/Linux
Ba thành phần cơ bản nhất của Linux/Unix:
1) Kernel: là chương trình nhân, chương trình đầu tiên chạy vào hệ thống Kiến trúc của kernel linux là monolithic
2) Shell (môi trường): cung cấp giao diện cho người dùng qua dạng văn bản, câu lệnh Shell là một trình thông dịch giúp người dùng thực hiện câu lệnh, chạy các chương trình Người dùng có thể chọn sử dụng đồ họa thay cho chế độ này nhưng Shell vẫn cần thiết cho hệ thống hoạt động được 3) File (hệ thống file): là cấu trúc cây các thư mục/tệp của hệ thống, bắt đầu bằng thư mục / (root)
Bố trí hệ thống file của Linux rất đơn giản và hiệu quả, file sẽ phân biệt chữ hoa và thường, không sử dụng drive letter như Windows, thay vào đó các phân vùng/thiết bị sẽ được gắn với thư mục như /media/USB, /home
Ưu điểm của linux là hoàn toàn miễn phí, chi phí phần cứng thấp, tốc độ cao, cộng đồng sử dụng lớn
Để sử dụng các ứng dụng windows trên môi trường ubuntu ta có thể sử dụng Wine hoặc PlayOnLinux
1.3.3 Công việc phát triển Linux:
Công việc phát triển Linux hiện tại được thực hiện bởi hàng nghìn lập trình viên trên toàn thế giới
Người đóng góp gửi những cải tiến, sửa lỗi, những thông tin để viết driver phần cứng từ các công ty phần cứng
Những đóng góp này sẽ được Torvalds và nhóm của ông duyệt và dẩy lên
hệ thống phiên bản Git
Trang 7Hình 6: Sơ đồ quá trình phát triển Linux
1.3.4 Thành công hiện tại của Linux:
Các phân phối Linux và các hệ điều hành với nhân Linux như Android đã thành công trên nhiều lĩnh vực với ngoại lệ là mảng PC
Tới năm 2017 các server Linux chiếm trên 67% tổng số server trên thế giới Tuy vậy Linux vẫn chưa có vị trí trong mảng PC Hiện tại cộng đồng Linux
đã và đang góp phần phát triển Linux cho Desktop/PC Theo đó, cả trăm phân phối dành cho Desktop & Laptop khác nhau, phục vụ nhu cầu riêng biệt của nhiều người
Hình 7: Tới năm 2017, 99.6% các siêu máy tính trong TOP500 chạy
Linux
Trang 8Hình 8: UbuntuTouch, hệ điều hành dành cho điện thoại
1.4 Bản phân phối của Linux
Cấu trúc, một phân phối thường có cần có:
Thư viện hệ thống (system libraries)
Công cụ (GNU tools, )
Các module hạt nhân (kernel modules)
Phần mềm tùy chọn thêm (user software)
Tài liệu sử dụng (documentation)
Hệ thống cửa sổ & hệ thống hiển thị (window & display system) và môi trường Desktop
Các thành phần của một phân phối Linux:
Trang 9Hình 9: Minh họa các thành phần của một phân phối Linux
1.4.2 Hệ điều hành CentOS:
Là phiển bản không tốn phí của RedHat Enterprise Linux, có độ ổn định cao, cập nhật phần mềm chậm hơn phân phối khác nhiều, mục tiêu là dùng cho máy trạm và máy chủ Chúng ta sẽ lấy CentOS làm hệ điều hành mẫu cho môn Quản trị Linux
Website: https://www.centos.org/
Trang 10Hình 10: Quá trình khởi động của CentOS
Hình 11: Giao diện đồ họa của CentOS 7
Trang 11Ubuntu cũng có những phiên bản hỗ trợ dài hạn "Long Term Support", hỗ trợ trong vòng 3 năm đối với máy tính để bàn và 5 năm đối với máy chủ, 5 năm đối với máy tính để bàn và máy chủ và 10 năm đối với máy tính để bàn và máy chủ Ví dụ: “Ubuntu 18.04 LTS” là phiên bản Ubuntu được hỗ trợ dài hạn được xuất bản vào năm 2018
Trang 121.4.5 openSUSE:
Là phân phối con của SuSE Enterprise Linux (SLES), cả hai dựa trên Redhat Linux, được tài trợ chính bởi SuSE
openSUSE Leap có sự ổn định của CentOS và đa dạng của Ubuntu
Việc phát hành openSUSE Leap cùng với SLES tương đồng với quyết định phát hành CentOS của Redhat
Trang 131.4.6 Raspbian:
Là hệ điều hành dựa trên Debian dành riêng cho các chip nhúng Raspberry
Pi (nền tảng ARM)
Tới cuối 2016, 12.5 triệu máy tính RPi đã được bán ra
Được sử dụng trong IoT (Internet of Things), điều khiển thiết bị không người lái (Autopilot), giải trí - chiếu phim (Home entertainment), thậm chí như máy tính cá nhân (PC),
Hình 13: Máy tính nhúng Raspberry Pi
Hình14: Giao diện desktop Raspbian
Trang 14Hình 15: khả năng kết nối và mở rộng của Raspberry Pi
Trang 15Tài liệu tham khảo:
[1]: TS Ngô Bá Hùng - 2011, Phát Triển Phần Mềm Mã Nguồn Mở (Open Source Software Development)
Tìm hiểu thêm: https://sites.google.com/site/nbhung/open-source
[2]: Linus Torvalds - 2016, “GPL là yếu tố xác định sự thành công Linux” – LinuxCon bắc Mỹ
Nguồn: defining-factor-in-linuxs-success.html
http://www.cio.com/article/3112582/linux/linus-torvalds-says-gpl-was-[3]: Lịch sử phát triển Linux
Nguồn: https://tusachlinux.com/lich-su-phat-trien-unix-va-linux/
[4]: TS Ngô Bá Hùng - 2013, Linux Kernel
Nguồn: https://tailieu.vn/doc/linux-kernel-ts-ngo-ba-hung 900209.html
Trang 16sử dụng quyền Superuser(root) để thực thi các lệnh
2.1 Quá trình khởi động Linux
2.1.1 Khái quát
Trên CentOS 7, hệ thống khởi động/quản lý các dịch vụ có tên systemd sẽ giúp hệ thống khởi động nhanh và hiệu quả hơn initd cũ
2.1.2 Các giai đoạn khởi động
Các giai đoạn khởi động đối với các phân phối dùng systemd:
1) Boot Manager tải hạt nhân Linux và initd (ramdisk) Init ramdisk - một hệ thống file đã nén tải lên RAM để hạt nhân tải driver, chứa các dịch vụ systemd cần thiết, chứa màn hình khởi động, Nó được sử dụng trước khi truy cập vào hệ thống file chính trên ổ cứng
2) systemd kiểm tra và gắn kết hệ thống file chính
Hệ thống file sẽ được sửa lỗi nếu cần (sau khi hệ thống mất nguồn dễ
có lỗi xảy ra)
3) systemd chạy journald, udevd, dbus và readahead journald: dịch vụ logging
udevd: quản lý hotplug phần cứng dbus: dịch vụ giao tiếp liên tiến trình
Trang 17readahead: đọc trước file để tăng tốc quá trình khởi động 4) systemd chạy udevd, rồi hiện màn hình khởi động
Ở đây udev thực hiện nhận diện và tải module/driver cần thiết 5) Chế độ Basic
Chế độ câu lệnh, chế độ đơn người dùng hoặc chế độ cấp cứu khi cần thiết
Nếu hệ điều hành được chỉ định chạy chế độ này thì shell sẽ hỏi mật khẩu của root để truy cập
6) Chế độ Multiuser Đây là chế độ màn hình câu lệnh, chạy dịch vụ quản lý kết nối mạng, SSH, bluetooth, … Chế độ đa người dùng sẽ mặc định có 7 terminal ảo 7) Có thể chạy chế độ Graphical (phân phối Desktop)
Đây là chế độ đồ họa, chủ yếu là khởi động trình quản lý hiển thị để đăng nhập nếu ta dùng phân phối Linux dành cho Desktop
8) Các dịch vụ khác Ngoài ra trong quá trình khởi động còn có nhiều dịch vụ hệ thống khác hoặc những dịch vụ ta sử dụng đã cài đặt thêm vào
Tối ưu khởi động:
Tắt các dịch vụ không cần thiết -> giảm sử dụng tài nguyên về sau này
Kích hoạt và tối ưu thời gian ReadAHead rebuild system lại theo cấu hình mong muốn
2.2 Đăng nhập và thoát khỏi hệ thống
2.2.1 GUI (đồ họa)
Đối với đăng nhập vào Desktop qua trình quản lý hiển thị (display manager)
Trang 18Có nhiều trình giao diện Desktop khác nhau tùy vào môi trường Desktop mà ta đã cài đặt Thường ta cần chọn username và nhập mật khẩu
để đăng nhập
Trình Display manager mặc định của CentOS là GDM (Trình quản lý hiển thị Gnome), trong hình demo là trình quản lý LXDM, do Linux cho khả năng tùy biến rất cao:
Hình 1: màn hình đăng nhập sau khi khởi động xong
2.2.2 Command Line (màn hình câu lệnh):
Chế độ Basic thì chỉ được nhập mật khẩu root; chế độ Multiuser mặc định ở terminal F1
Để sử dụng chế độ này cần chú ý:
Virtual Terminal nhằm cho phép đăng nhập nhiều người dùng
Khi ở chế độ GUI, dùng tổ hợp Ctrl + Alt + Fx để chuyển VT (Virtual Terminal), thường là từ F1-F6 là 6 trình command line,
và F7 (hoặc F1) thường là truy cập chế độ GUI
Để thoát (Shell): Ctrl+D hoặc lệnh exit
VD đăng nhập xem thông tin & đổi mật khẩu:
Trang 19Hình 2: thực hiện đăng nhập người dùng admin, xem phiên bản hạt nhân và đổi mật khẩu
2.2.3 SSH (Secure Shell, đăng nhập từ xa):
SSH là phương thức kết nối có tính bảo mật cao giúp ta có một trình Command Line từ xa qua Internet và có thể quản lý file qua phương thức SFTP (Secure FTP)
Ta có thể đăng nhập với username vào SSH bằng các phương thức mật khẩu/public-key/keyboard
Cài đặt SSH server trên CentOS:
Trang 20Giờ ta có thể đăng nhập với username & password, tiếp theo ta cần biết IP của server, có thể qua trang quản trị
Lệnh lấy IP WAN: curl 'https://wtfismyip.com/json'
Nếu cần IP LAN, chạy lệnh rồi xem mục 'inet addr' của adapter
hiện mạng đã kết nối:/sbin/ifconfig
Phần mềm client truy cập SSH:
PuTTY (SSH, SFTP)
MobaXterm (ngoài ra truy cập VNC, SFTP, RDP, Xdmcp client)
Trên máy khách là Linux/MacOS hoặc Windows Subsystem for Linux ta có thể dùng câu lệnh ssh
Hình 3: Demo SSH PuTTY (Windows 10)
2.2.4 Remote Desktop/VNC (Quản lý Desktop từ xa):
VNC (virtual network computing): truyền tải hình ảnh trực tiếp từ hệ thống đồ họa trên Server tới máy khách qua Internet/LAN
Trang 21Remote Desktop: có chung mục đích với VNC, do Microsoft phát triển
Cài đặt RDP/VNC server:
Có hai chương trình thông dụng trên Linux là xrdp và tigervnc-server
Hai gói chương trình này nằm trong EPEL repository,
Repository chính của CentOS chỉ chứa những chương trình
ổn định và quan trọng
Lệnh: yum install epel-release yum install xrdp tigervnc-server
Hình 4: Remote desktop với máy ảo từ client Windows
Trang 22Hình 5: Demo với môi trường đồ họa KDE desktop qua RDP
2.3 Các lệnh lấy thông tin, ngày giờ, đổi mật khẩu
Câu lệnh date: #lấy/đặt thông tin ngày giờ Ngày giờ hiện tại:
Câu lệnh time: #kiểm tra một chương trình chạy trong bao lâu
time <chuoi cau lenh>
Câu lệnh passwd: #để đổi mật khẩu, cần nhập mật khẩu cũ
passwd
Câu lệnh tzselect: #chọn timezone (vùng thời gian) mới
tzselect
Trang 23Nhập 1 số tương ứng với tùy chọn hiện Chọn từ vùng (VD Asia), tới nước (VD Vietnam) rồi tới vùng (VD South VN hoặc Indochina Time)
Câu lệnh ntpdate: #cập nhật ngày giờ hiện tại về giờ chuẩn từ server
ntpdate <ip hoặc domain_server>
VD server NTP: time.nist.gov, asia.pool.ntp.org
Câu lệnh rpm (các bản phối dựa trên Redhat) hoặc dpkg (các bản phối dựa trên Debian): dùng để quản lý package gói đã được cài đặt, xóa package hoặc cài đặt tệp package vào hệ thống
Điểm mạnh của Linux so với Windows/Mac là kiểm soát các gói tốt,
nó là trình duy nhất, không để chương trình sử dụng installer riêng
Các gói phụ thuộc vào nhau, các chương trình phụ thuộc được cài đặt/xóa tự động nhờ các trình quản lý cao hơn như: yum (CentOS) hay apt (Debian)
rpm -e <tên_gói>
rpm -e no-deps <tên_gói>
rpm -i <đườngdẫn_tệp_gói>.rpm rpmquery info <tên_gói>
rpm -U <đườngdẫn_tệp_nâng_cấp_gói>.rpm dpkg -i <ten_goi.deb>
Trang 24Hình 6: Demo lệnh cơ bản
Hình 7: Demo lệnh cơ bản
2.4 Sử dụng Shell và các lệnh tính toán số học
2.4.1 Khái quát
Trang 25Shell là trình thông dịch (Intepreter) và thực thi các lệnh nhận từ thiết
bị nhập chuẩn (bàn phím) hoặc từ tệp tin; sử dụng các cấu trúc điều khiển if-for-while, có thể ghi/đọc file văn bản, …
Khi ta đăng nhập qua Command Line hoặc SSH thì ta được đưa đến trình Shell Còn khi ta đăng nhập qua GUI thì ta cần mở phần mềm đồ họa Terminal, màn hình câu lệnh sẽ chạy trong một cửa sổ tiện lợi cho ta đa nhiệm
Cấu trúc gọi chạy trương trình trong Shell:
<ten_hoac_duong_dan> <-tuy-chọn-ngan > < tuy-chon-dai >
<chuoi-tham-so-dua-vao >
các -ts (tùy chọn ngắn, tham số) phân biệt chữ hoa và thường
các tuy-chon ở công cụ GNU thường có cú pháp ngắn gọn VD: trong rpm -a và all là một
các tùy chọn có thể tương ứng với tham số
VD: find -type f -mode 0644 /thumuc Dãy các câu lệnh kịch bản Shell lưu vào một file văn bản để có thể
thực thi sau: sh <file>
Có thể chạy trực tiếp file bằng cách:
Thêm '#!/bin/sh' vào đầu file (không có ngoặc đơn)
Tiếp theo là thêm quyền thực thi cho file bằng câu lệnh 'chmod +x <file>'
Lệnh shell để trong tệp sẽ hoạt động chong chế độ interactive (không tương tác từ người dùng)
non-Truy cập Shell:
Khi ta đăng nhập qua Command Line hoặc SSH thì ta được đưa đến trình Shell
Trang 26 Khi ta đăng nhập qua GUI thì ta cần mở phần mềm đồ họa Terminal, màn hình câu lệnh sẽ chạy trong một cửa sổ tiện lợi cho ta đa nhiệm
Shell có thể chạy nhiều câu lệnh trong 1 dòng: bằng đấu ';' (chấm phẩy), '&&' hay '|' …
Đối với lệnh gõ trong Shell: một số là lệnh có sẵn của Shell, không phải dẫn từ tệp chương trình nhị phân bên ngoài trong các thư mục /bin
VD: sudo -i tương đương sudo login
sudo help (để xem danh sách các tùy chọn)
ls all / ls -a tương đương nhau
VD: tùy chọn tương đương tham số:
find -type f (f là tìm file, hoặc d là tìm thư mục)
2.4.2 Các cú pháp/lệnh thông dụng trong Shell
bien=1000 #Gán giá trị số
let bien=2000 #Gán giá trị số dùng let
bien='Chuỗi' #Gán chuỗi
echo $bien #Sử dụng biến
echo "$bien1 $bien2" #Dùng ngoặc kép thì có thể dùng biến trong
chuỗi Chú ý: khi gán giá trị cho biến không được sử dụng khoảng trống
`<các câu lệnh>` #Gộp câu lệnh (trong mệnh đề của if, while,
nối chuỗi, )
expr <s1> <toán_tử> <s2> hoặc $[ <toán> ] # thực hiện tính toán
số học (int)
Ví dụ: expr 5 \* 10 (thực hiện tính toán 5 nhân 10) Chú ý: giữa các
tham số phải có ít nhất 1 khoảng trắng
jot <lựa chọn> <số lượng> <bắt đầu> <kết thúc> (để sinh ra dãy
số)
Trang 27Ví dụ: jot -r 4 1 5 (sinh ra 4 số ngẫu nhiên từ 1 đến 5)
bc (dùng để tính toán với số thực) Ví dụ: echo 8.5 + 5.8 | bc
>> vs > vs < vs << vs X>&X vs | # chuyển hướng
input/output/error của lệnh, (X là 0, 1, 2 tương đương stdin, stdout, stderr) và X>X
factor <d> hoặc factor $bien sử dụng để phân tích 1 số thành các
fi
while <câu lệnh điều kiện>; do
# thực hiện đến khi lệnh điều kiện sai
if [ -x /duongdan/tep ] # Kiểm tra thuộc tính
if [ ! `test mệnh đề` ] # Thực hiện nếu sai
# một số tùy chọn: -f -E -e -d –z
if [ "$bien" == 'something’ ] # kiểm tra =
if [ $bien -le 123 ] # le: nhỏ hơn, ge: >
Biến môi trường PATH:
Trang 28Nếu PATH rỗng ta không thể gõ tên câu lệnh mà là không phải đường dẫn đến tệp đó
VD tệp /bin/ls, tệp /usr/bin/rpm, tệp /usr/sbin/fdisk
VD về `echo $PATH` của một hệ thống đang chạy:
/home/qtlinux/.npm-packages/bin:/usr/local/bin:/usr/bin:/bin:/usr/games Phím tắt:
Tab # Thực hiện auto-completion -> thực hiện tự động hoàn
Tùy chọn help và usage (hoặc ngắn là -h, -help):
Là tùy chọn mà tất cả công cụ chuẩn đều có
Cần thật cẩn thận khi nhận quyền Superuser từ các câu lệnh như `sudo` hay `su`
2.6 Tổng quan hệ thống file & cấu trúc thư mục
Trang 292.6.1 Khái quát
Hệ thống file (FS) trên Linux được gắn tới các điểm gắn kết là các thư mục, thường được kết nối qua / (gốc cây thư mục), nguồn của một hệ thống file bao gồm: phân vùng bộ nhớ, RAM, mạng (Network FS), thẻ
XFS: hệ thống file hướng năng suất & tự gỡ lỗi
Ext4: hệ thống file truyền thống của Linux
Btrfs: hệ thống file có khả năng mở rộng, snapshot, backup, nén, … mạnh
F2FS: hệ thống file tối ưu cho bộ nhớ Flash Windows thường sử dụng định dạng là NTFS
Tên tệp (File) và thư mục (Directory) trên Linux có thể chứa tất cả các
ký tự trong bảng mã ASCII hoặc Unicode, phân biệt chữ hoa và chữ thường
và không được chứa:
\ / : * ? " < > |
Một tệp/thư mục có các thuộc tính như:
Type #tệp thường/thư mục (D)/liên kết (L)
Access time #thời gian cuối tệp được truy cập (obsoleted)
Modify time #thời gian cuối tệp được ghi
Created time #thời gian tệp được tạo
Owner/Owner Group #người sở hữu, nhóm sở hữu
Permission Sets #các cài về quyền hạn (có chứa Type)
Trang 30 Links #số liên kết tới tệp/thư mục nó
Blocks #số block mà tệp chiếm của hệ thống file Lưu ý:
Tệp trong /dev (trừ /dev/shm), /sys là các tệp đặc biệt (Special file) Tệp thực thi không cần có định dạng (Windows cần exe, dll) Tệp thư viện chương trình thường là so (hay so.V.E.R, VD: libfam.so.1.0)
2.6.2 Mount
Mount là một quá trình mà trong đó hệ điều hành làm cho các tập tin
và thư mục trên một thiết bị lưu trữ có thể truy cập được bởi người dùng thông qua hệ thống tệp của máy tính
Trên Windows chúng ta thường mount FS vào C: D: , trên Linux ta phải mount vào thư mục duuy nhất
Có thể được mount vào hệ thống tệp vật lý Tức là một thư mục trong
hệ thống file này làm mount point cho FS khác mount vào
Không cần Superuser mới được mount Mount có thể lấy quyền root
để mount nếu thêm thuộc tính user vào một mục mount cho 1 FS tệp cấu hình /etc/fstab, hoặc dùng fuser
Hình 8: cây thư mục
2.6.3 Link
Trang 31Là liên kết tới File hoặc Directory khác mà không hề làm tăng dung lượng sử dụng
2.7 Cấu trúc thư mục (CentOS 7)
/lib64 => tương tự /lib nhưng chỉ dành cho chương trình 64bit
/etc => thư mục chứa các configurations (cài đặt, cấu hình) của hệ thống
/boot => chứa các file của Boot Manager (trình quản lí khởi động) và hạt nhân Linux
/bin => chứa các Excecutable (file thực thi chương trình) cho tất cả người dùng
/sbin => chứa các Excecutable (file thực thi chương trình) dành cho quản trị viên root
Trang 32/home => thư mục chứa các thư mục con có tên là tên của user (người dùng) chứa tất cả dữ liệu của user không phải root (người dùng Desktop) /proc =>chứa hệ thống file ảo 'proc' dùng để giám sát và điều khiển các chương trình đang chạy, các thông tin hệ thống, các thông tin phần cứng, các cài đặt mạng và cài đặt cho hạt nhân được cài lúc hệ thống khởi động
/dev => chứa hệ thống file ảo 'devtmpfs' bên trong có các 'nút' (device node) dể đại diện cho các thiết bị được gắn vào hệ thống, các 'nút' này rất quan trọng để hệ thống Linux hoạt động được
/sys => chứa hệ thống file ảo 'sysfs' dùng để tăng khả năng hỗ trọ việc giám sắt và điều khiển các thiết bị hot-plug và hiển thị theo hướng thứ bậc
/include => chứa header C/C++ của hạt nhân, các thư viện (.so) để dịch ra chương trình từ trình dịch (như GNU Compiler Collection – GCC) /games => chứa games - tách biệt vs chương trình làm việc
/share => thư mục chứa data chia sẻ/dùng chung cho các chương trình Các thư mục lib64, lib, sbin, bin ở trong /usr được liên kết bằng Symbolic link tới thư mục có tên tương tự như ở / (root) Điều này chỉ có Fedora/RHEL/CentOS (RedHat based) làm
Trang 33/usr/local => thư mục có cấu trúc tườn tụ /usr để dùng thay lúc người dùng cài đặt ngay chương trình sau khi build (dịch từ mã nguồn) do không
/opt => chứa các phần mềm cài theo kiểu standardalone
Hình 9: sơ đồ cấu mô phỏng trúc thư mục
Trang 342.8 Quyền truy cập thư mục và file
Owner (người tạo)
Owner Group (nhóm tạo)
World (toàn bộ các User khác) Mỗi file/directory (link đến bị ảnh hưởng theo) trên hđh Linux/Unix đều có 2 thông tin cơ bản là Owner, Group Owner Mỗi người/nhóm người dùng là Owner/Owner Group/World đều sở hữu tổ hộp quyền chỉ định riêng Chỉ có Owner hoặc Superuser mới có thể thay đổi quyền chỉ định trên file/directory
Lưu ý:
Owner Group thường là nhóm chính của người tạo
Chỉ có Owner mới thay đổi quyền chỉ định (chmod), ngoại trừ root Chỉ có Owner/Superuser mới có thể thay đổi được Owner Group
Chỉ có Superuser mới thay đổi được Owner của một file/directory
Thực thi file/thực thi các file trong directory
SUID (thuộc tính superuser id)
Trang 35Làm cho chương trình chạy trên người dùng Owner chứ không phải chính người dùng chạy chương trình đó - nguy hiểm nếu sử dụng không đúng cách -> chỉ có 1 cho Owner
STICKY BIT (thuộc tính dính)
Thuộc tính chỉ cho phép Owner đổi tên hoặc xóa nó đi, quyền hạn đã cài cho Owner Group và World bị bỏ qua -> chỉ có 1 cho Owner
Mỗi đối tượng người dùng (Owner/Owner Group/World) đều sở hữu
tổ hộp quyền như trên; Chỉ có Owner/Superuser có thể thay đổi quyền chỉ định trên file/directory
VD về đường dẫn:
‘thumuc1/thu muc_2/tep_or_thu muc’
đường dẫn relative bắt đầu là hoặc không
'/tmp/thumuc1/thu muc 2/tep'
đường dẫn absolute bắt đầu là /
./
Trang 36thư mục hiện tại (CWD)
ls <duongdan> #Liệt kê tại đường dẫn cụ thể
ls –l #Hiển thị dạng dài với nhiều thông tin hơn là chỉ
tên
ls -a hoặc ls –A #Hiển thị cả nhữnng file/directory được ẩn có bắt
đầu là '.' (dấu chấm), với -A thì không hiện thư mục '.' và ' '
ls –h #Hiển thị kích thước file dạng kB/mB/gB thay vì
chỉ hiện số bytes
ls color=auto #Dạng hiện màu tùy theo loại file/directory/link
ls -1A #Liệt kê tệp/thư mục trong thư mục hiện tại Dạng
1 cột, hiện tệp ẩn
Trang 37ls –lhS #Liệt kê theo dạng chi tiết và sắp xếp theo dung
lượng tệp
ls –ltr #Liệt kê sắp xếp tăng dần theo thời gian sửa/tạo
ls –help #Để xem rất nhiều nhiều tùy chọn khác
ls –l #Để liệt kê đầy đủ thông tin của các file
ls –d */ #Để liệt kê các thư mục trong thư mục hiện hành
VD: muốn đọc nội dung của một đĩa CD ta cần phải mount trước
# Gắn kết hệ thống file với tùy chọn
mount <nguon_cua_htfile> <duongdan_thumuc_dich> -o
Dùng thay đổi Permission Sets cho tệp/thư mục
Với Symbolic link thì chmod sẽ sửa đích đến Hard link thì không do mỗi file có bảng thuộc tính riêng
Cấu trúc sử dụng:
chmod +x +w +r +s +t <path_ten_tep_thumuc>
Trang 38 Câu lệnh chmod dùng thêm lần lượt quyền thực thi, quyền ghi, quyền đọc, quyền SUID và sticky bit
Dấu + dùng để thêm permission này, dấu - để xóa
Ta có thểm thêm u, g, o vào trước dấu cộng hoặc trừ để chỉ thêm, xóa quyền cho lần lượt Owner, Owner Group và Others (World)
VD: u+w g-w
chmod 1764 <ten_tep_thumuc>
Câu lệnh chmod dùng dãy số hệ octal
1764 có format là BUGO (Bits, Owner, Owner Group, Others – World)
Giải mã 1764:
- Trong đó 7 là mục quyền cho Owner tương đương 4+2+1 – 'r+w+x'
- 6 là mục quyền cho Owner Group tương dương 2+4 – 'r+w'
- 4 là mục quyền cho World tương đương 4 – 'r'
- Và cuối cùng, 1 ở đầu là mục quyền riêng cho sticky bit (1) và SUID bit (2), 1 tương đương có sticky bit và không có SUID bit được đặt: 1+0
chown <user>:<group> <duongdan>
chown <user> <duongdan>
Trang 39 Có thểm thêm tùy chọn -R: thay đổi luôn cho tất cả các tệp/thư mục con trong <duongdan> nếu có
Và tùy chọn -h: sử dụng chính đối tượng liên kết (symbolic link) thay vì sửa tệp/thư mục ở đường dẫn liên kết đó trỏ đến
# Tùy chọn -p để giữ nguyên các thuộc tính
# Tùy chọn -R để copy cả file mà liên kết
Câu lệnh mv Dùng di chuyển file/directory
Sử dụng:
mv <duongdan_tep_thumuc> <duongdan_dich_den>
Trang 40 Câu lệnh ln Dùng tạo Hard link (mặc định) và Symbolic link (tùy chọn -s)
Sử dụng:
cat <duongdan_tep>
Ngoài ra có thể dùng để copy nội dung file này vào cuối file khác
cat <duongdan_tep1> >> <duongdan_tep2>
Câu lệnh tail Dùng đọc những dòng cuối file văn bản (dùng xem log vv)
Sử dụng:
Đọc 100 dòng cuối
Cú pháp Shell '>', '<', '<<', '>>' Dùng ghi tiếp/ghi đè (tạo nếu chưa có file) lên file, lấy dữ liệu, lấy và chồng dữ liệu từ file
Sử dụng:
gunzip -c <duongdan_tep>.gz > <duongdan_tep>
#Giải nén tệp gzip ra một tệp khác
echo Something To Say >> <duongdan_tep>.txt
#Nối thêm dòng AHIHI vào tệp txt Các công cụ trên màn hình câu lệnh khác như nano, vi, dhex, pico, :
Để tạo, xử lý, chỉnh sửa tệp khác
Sử dụng: