Để trở thành 1 DevOps Engineer thứ cơ bản nhất mà chúng ta cần bắt đầu đó là Linux. Thông qua bài 2 này mình hy vọng mọi người có thể nắm các kiến thức cơ bản về Linux, đặc biệt nó sẽ giúp cho chúng ta dễ dàng hơn trong việc dùng các công cụ và các opensource sẽ dùng nhiều sau này.
1. Giới thiệu về Linux và các Distro Linux
Bản phân phối Linux (Distro) là một tập hợp các ứng dụng, các gói ứng dụng (package), trình quản lý gói và các tính năng chạy trên nhân Linux, như vậy nhân Linux là dùng chung cho các bản phân phối – có đôi khi nhân này được tùy chỉnh lại theo tổ chức bảo trì bản phân phối.
Nhân Linux
Nhân Linux (kernel) là thành phần cốt lõi của hệ điều hành là lớp cho phép hệ thống quản lý, điều khiển, giao tiếp với các phần cứng của máy tính. Kernel có chứa phần mềm cho phép bạn sử dụng được ổ cứng, mạng, RAM hay các phần cứng khác. Hệ thống Linux dựa theo UNIX, gọi là GNU/Linux. Nhân Linux hiện nay được phát triển bởi cộng đồng nguồn mở dựa trên nhân Linux mới được phát triển bởi Linus Torvalds (phát hình năm 1991).
Chọn bản phân phối Linux
Sử dụng Linux bạn có thể nghe thấy rất nhiều bản phân phối Linux khác nhau như Ubuntu, Debian, Fedora, Red Hat … (Xem danh sách hàng trăm Distro phổ biến nhất gần đây tại distrowatch) Điều này làm cho việc mới tiếp cận Linux có vẻ lúng túng không biết chọn bản phân phối nào. Mỗi bản phân phối có những đặc tính khác nhau, có thể phân chia để lựa chọn theo ba tiêu chí:
- Mục đích
- Cấu hình và gói ứng dụng
- Mô hình hỗ trợ
Bản phân phối linux theo mục đích sử dụng: Mỗi distro được thiết kế cho các mục đích khác nhau, cung cấp trải nghiệm người dùng khác nhau. Một số distro dùng để làm server, một số lại dùng cho môi trường desktop, một số lại có mục đích đặc biệt như hệ thống nhúng. Cho đến nay, các bản Linux được cài đặt nhiều nhất và là để làm các server để chạy các dịch vụ (như website), còn các bản Linux cài đặt tạo môi trường desktop (máy tính cá nhân) vẫn là rất ít nếu so với Windows hay macOS.
Bản phân phối linux theo cách cấu hình: Các bản phân phối còn có sự khác nhau chính đó là cách thức thiết lập cấu hình hệ thống của chúng khác nhau. Một số Distro giữ các cấu hình, thiết lập, các file cấu hình ở cùng một nơi (thư mục), một số khác lại lưu ở nhiều nơi trong cấu trúc thư mục. Tiếp theo là quá trình cài đặt, cập nhật các ứng dụng (các gói package) cũng khác nhau tùy vào distro, nhiều distro thực hiện điều này bằng các công cụ quản lý gói (package) như DPKG (debian), APT (ubuntu, debian), RPM (Red Hat), YUM … Do có nhiều trình quản lý gói kiểu này nên thật sự việc quản trị gây khó khi làm việc giữa nhiều distro, ở các bài sau sẽ nói về những công công cụ quản lý gói này.
Bản phân phối linux theo mô hình hỗ trợ: Một số distro được bảo trì, hỗ trợ bởi cộng đồng tình nguyện (Debian, CentOS, Fedora) nhưng cũng có các distro được hỗ trợ bởi các công ty thương mại (RHEL, Ubuntu), dù phần mềm vẫn là nguồn mở nhưng bạn cần trả tiền cho các dịch vụ hỗ trợ.
Một số Distro Linux chính
Trước tiên lưu ý có những Distro kế thừa (dựa trên) một Distro khác như CentOS dựa trên Red Hat, Ubuntu dựa trên Debian. Có điều này bởi vì các phần mềm nguồn mở được phép dùng lại bởi các lập trình viên (developer). Các lập trình viện có thể chọn một số tính năng từ một distro và từ đó tạo ra một distro mới, có nhiều distro linux vì có nhiều nhóm lập trình viên tạo ra từ việc kế thừa một distro khác, đặt một tên mới và thêm vào một vài tính năng, thường thì các distro kế thừa giữ các tính năng gần gũi với distro gốc.
2. Các lệnh Linux
sudo
: Nó khá giống với hành động chạy Run as administrator
ở Windows, khi chạy một lệnh với sudo
thì nó sẽ chạy với quyền user root (yêu cầu phải nhập mật khẩu trước khi chạy)
Đối với một công việc thực hiện một lần như cài đặt ứng dụng hoặc dịch vụ, bạn có thể cần lệnh sudo
đó nhưng nếu bạn có một số nhiệm vụ cần giải quyết và bạn muốn được thực hiện dưới quyền sudo
một lúc? Chúng ta có thể sử dụng sudo su, giống như sudo
, bạn sẽ được yêu cầu nhập mật khẩu root
của mình. Để thoát khỏi quyền này, bạn chỉ cần gõ vào exit
mkdir:
cho phép chúng ta tạo một thư mục trong hệ thống của mình. Có thể tạo một thư mục trong thư mục chính có tên devops mkdir devops
cd: Để di chuyển vào thư mục mới tạo của mình, chúng ta có thể thực hiện việc này với lệnh cd
devops cũng có thể sử dụng tab để tự động hoàn thành câu lệnh với thư mục có sẵn. Chúng ta có thể quay lại vị trí lúc mới bắt đầu bằng câu lệnh cd. .
rmdir
: cho phép chúng ta xóa thư mục, nếu chúng ta chạy rmdir
devops thì thư mục sẽ bị xóa (lưu ý rằng điều này sẽ chỉ hoạt động nếu bạn không có gì trong thư mục)
pwd
cung cấp cho chúng ta địa chỉ của thư mục làm việc, câu lệnh viết tắt của print working directory (in ra thư mục làm việc).
touch: dùng để tạo 1 tệp. Nếu chúng ta dùng lệnh touch file_test
, thao tác này sẽ tạo một tệp có tên là
. Dùng lệnh ls để hiển thị thư mục và file vừa tạofile_test
mv
sẽ cho phép bạn di chuyển các tệp của mình. Ví dụ mv
devops sẽ di chuyển tệp của bạn vào thư mục devops.file_test
Ngoài ra chúng ta có thể vừa di chuyển tệp vừa đổi tên cũng bằng lện mv, ví dụ mv file_test fileTest
sau đó sử dụng ls
để kiểm tra lại.
rm: dùng để xoá tệp hoặc thư mục. Chỉ cần rm fileTest
sẽ xóa tệp fileTest
trong thư mục hiện tại. Chúng ta cũng sẽ sử dụng khá nhiều rm -R
sẽ chạy và sử dụng đệ quy thông qua một thư mục hoặc vị trí. Chúng ta cũng có thể sử dụng rm -R -f
để xóa tất cả các tệp đó một cách bắt buộc (force).
echo
: để in ra một chuỗi hoặc các biến của hệ thống, ví dụ chúng ta có thể in “Hello!” ra terminal bằng echo “Hello!”
Quyền
Đọc (read), viết (write) và thực thi (execute) là các quyền chúng ta có trên tất cả các tệp và thư mục trên hệ thống Linux.
Danh sách đầy đủ:
- 0 = None
---
- 1 = Execute only
--X
- 2 = Write only
-W-
- 3 = Write & Execute
-WX
- 4 = Read Only
R--
- 5 = Read & Execute
R-X
- 6 = Read & Write
RW-
- 7 = Read, Write & Execute
RWX
3. Giải thích về hệ thống tệp
Linux được tạo thành từ các tệp cấu hình, nếu bạn muốn thay đổi bất cứ điều gì thì bạn thay đổi các tệp cấu hình này.
Trên Windows, bạn có ổ C: và đó là thứ mà chúng ta coi là gốc. Trên Linux, chúng ta có /
đây là nơi chúng ta sẽ tìm các thư mục quan trọng trên hệ thống Linux của mình.
/bin
– Viết tắt của binary, thư mục bin là nơi các tệp nhị phân mà hệ thống của bạn cần, các tệp thực thi và công cụ hầu như sẽ được tìm thấy ở đây.
/boot
– Tất cả các tệp mà hệ thống của bạn cần để khởi động. Làm thế nào để khởi động và khởi động từ ổ đĩa nào.
/dev
– Bạn có thể tìm thấy thông tin thiết bị tại đây, đây là nơi bạn sẽ tìm thấy các con trỏ tới các ổ đĩa của mình sda
sẽ là ổ đĩa hệ điều hành chính của bạn.
/etc
Có thể là thư mục quan trọng nhất trên hệ thống Linux của bạn, đây là nơi chứa phần lớn các tệp cấu hình của bạn.
/home
– đây là nơi bạn sẽ tìm thấy các tệp và thư mục của người dùng
/lib
– Chúng ta đã đề cập rằng /bin
là nơi chứa các tệp nhị phân và tệp thực thi của chúng tôi, và /lib
là nơi bạn sẽ tìm thấy các thư viện dùng chung cho các tệp đó.
/media – Thư mục chưa các mount tạm thời cho các thiết bị tháo lắp.
/mnt
– Thư mục mount tạm thời nơi mà người quản trị hệ thống có thể mount các tập tin hệ thống.
/opt – Các ứng dụng tùy chọn hay thêm:
- opt là viết tắt của optional.
- Chứa các ứng dụng thêm của các hãng khác nhau.
- Các ứng dụng thêm nên được cài trong thư mục con của thư mục /opt/.
/proc
– Kernel & thông tin về process, tương tự như /dev
/root
– Để có quyền truy cập, bạn cần sudo vào thư mục này. Thư mục home của root.
/run
– Placeholder cho trạng thái ứng dụng.
/sbin – Các tập tin thực thi của hệ thống
/tmp
– tệp tạm thời.
/usr
– Nếu chúng ta với tư cách là người dùng đã cài đặt các gói phần mềm, gói phần mềm đó thường sẽ được cài đặt ở vị trí /usr/bin
.
/var – Các tập tin biến đổi
- Gồm những tập tin mà dung lượng lớn dần theo thời gian sử dụng.
- Chẳng hạn — các tập tin ghi chú hệ thống (/var/log); các gói và các tập tin cơ sở dữ liệu (/var/lib); thư điện tử (/var/mail); hàng đợi – in queues (/var/spool); các tập tin khóa (/var/lock); các tập tin tạm được dùng khi khởi động lại (/var/tmp).
4. Lưu trữ (Storage)
Khi đề cập tới một hệ thống Linux hoặc bất kỳ hệ thống nào, chúng ta có thể muốn biết các ổ đĩa có sẵn và có bao nhiêu dung lượng trống trên các đĩa đó. Một vài lệnh sau đây giúp xác định và sử dụng cũng như quản lý bộ lưu trữ.
lsblk
Liệt kê các thiết bị khối (List Block devices).sda
là đĩa vật lý của chúng ta và sau đósda1, sda2, sda3
là các phân vùng của chúng ta trên đĩa đó.df
cung cấp thông tin chi tiết về các phân vùng đó, dung lượng tổng, dung lượng đã sử dụng và dung lượng khả dụng. Có thể sử dụng thêm các flag trong câu lệnh này.
Nếu bạn đang thêm một đĩa mới vào hệ thống của, bạn sẽ cần định dạng đĩa trong trình quản lý đĩa (disk management), trong Linux terminal, bạn có thể thực hiện việc này bằng cách sử dụng lệnh sudo mkfs -t ext4 /dev/sdb
với sdb liên quan đến đĩa mới được thêm.
Sau đó, chúng ta sẽ cần mount (gắn) đĩa mới được định dạng để nó có thể sử dụng được. Điều này được thực hiện trong thư mục /mnt
đã đề cập trước đó và chúng ta sẽ tạo một thư mục ở đó bằng câu lệnh sudo mkdir NewDisk
, sau đó là sudo mount /dev/sdb newdisk
để mount đĩa vào vị trí đó.
Cũng có thể là bạn sẽ cần unmount một ổ đĩa khỏi hệ thống của mình một cách an toàn thay vì chỉ xoá nó khỏi cấu hình. Chúng ta có thể làm điều này với sudo umount /dev/sdb
Nếu bạn không muốn unmount ổ đĩa đó và bạn sẽ sử dụng nó làm cơ sở dữ liệu hoặc cho mục đích lâu dài khác thì bạn muốn khi khởi động lại hệ thống, nó vẫn ở đó. Để có thể làm được điều này, chúng ta cần thêm đĩa này vào tệp cấu hình /etc/fstab
của mình để nó tồn tại, nếu không, nó sẽ không thể sử dụng được khi máy khởi động lại và bạn sẽ phải thực hiện lại các bước thủ công như ở trên. Dữ liệu sẽ vẫn sẽ ở trên đĩa nhưng nó sẽ không tự động mount lại trừ khi bạn cài đặt trong tệp cấu hình.