[DevOps Series] [Docker] #2 Cơ bản về Linux

11 min read

Để 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

Linux

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

Linux

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. .

Linux

rmdircho 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)

Linux

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).

Linux

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à file_test. Dùng lệnh ls để hiển thị thư mục và file vừa tạo

Linux

mv sẽ cho phép bạn di chuyển các tệp của mình. Ví dụ mv file_test devops sẽ di chuyển tệp của bạn vào thư mục devops.

Linux

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.

Linux

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!”

Linux

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.

Linux

/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.

Avatar photo

Clean Code: Nguyên tắc viết hàm trong lập trình…

Trong quá trình phát triển phần mềm, việc viết mã nguồn dễ đọc, dễ hiểu là yếu tố then chốt để đảm bảo code...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc comment trong lập trình

Trong lập trình, code không chỉ là một tập hợp các câu lệnh để máy tính thực thi, mà còn là một hình thức...
Avatar photo Dat Tran Thanh
3 min read

Clean Code: Nguyên tắc xử lý lỗi (Error Handling)

Trong quá trình phát triển phần mềm, việc xử lý lỗi không chỉ là một phần quan trọng mà còn ảnh hưởng trực tiếp...
Avatar photo Dat Tran Thanh
4 min read

Leave a Reply

Your email address will not be published. Required fields are marked *