From 906b6ebc95027dcf82bf033c56f45c0e3eead941 Mon Sep 17 00:00:00 2001 From: Mau Date: Tue, 22 Nov 2022 17:03:02 +0900 Subject: [PATCH 1/9] added vi d15+16 --- 2022/vi/Days/day02.md | 2 +- 2022/vi/Days/day10.md | 2 +- 2022/vi/Days/day13.md | 2 +- 2022/vi/Days/day14.md | 16 ++-- 2022/vi/Days/day15.md | 196 ++++++++++++++++++++++++++++++++++++++++++ 2022/vi/Days/day16.md | 166 +++++++++++++++++++++++++++++++++++ 2022/vi/README.md | 20 ++--- 7 files changed, 383 insertions(+), 21 deletions(-) create mode 100644 2022/vi/Days/day15.md create mode 100644 2022/vi/Days/day16.md diff --git a/2022/vi/Days/day02.md b/2022/vi/Days/day02.md index eb17438..2b2fd9a 100644 --- a/2022/vi/Days/day02.md +++ b/2022/vi/Days/day02.md @@ -51,7 +51,7 @@ Mặt khác, chúng ta có một các môi trường, cơ sở hạ tầng hoặ Câu hỏi lớn là làm thế nào để chúng ta đưa những tính năng và bản sửa lỗi đó vào ứng dụng của mình và cung cấp cho những người dùng cuối? -Làm cách nào để chúng tôi phát hành phiên bản mới của ứng dụng? Đây là một trong những nhiệm vụ chính của kỹ sư DevOps và điều quan trọng ở đây là không chỉ tìm ra cách thực hiện điều này một lần mà chúng ta cần thực hiện việc này liên tục theo một cách tự động, hiệu quả mà vẫn bao gồm quá trình kiểm thử! +Làm cách nào để chúng ta phát hành phiên bản mới của ứng dụng? Đây là một trong những nhiệm vụ chính của kỹ sư DevOps và điều quan trọng ở đây là không chỉ tìm ra cách thực hiện điều này một lần mà chúng ta cần thực hiện việc này liên tục theo một cách tự động, hiệu quả mà vẫn bao gồm quá trình kiểm thử! Chúng ta sẽ kết thúc ngày thứ 2 tại đây. mong rằng đây là một bài viết hữu ích. Trong vài ngày tới, chúng ta sẽ đi sâu hơn vào một số lĩnh vực khác của DevOps. Sau đó, chúng ta sẽ tìm hiểu kỹ về các công cụ, quy trình cũng như lợi ích của chúng. diff --git a/2022/vi/Days/day10.md b/2022/vi/Days/day10.md index 977235a..f70ae06 100644 --- a/2022/vi/Days/day10.md +++ b/2022/vi/Days/day10.md @@ -79,7 +79,7 @@ Những thứ chúng ta muốn tìm hiểu thêm là build, install and run. - `go build` - Để biên dịch các gói và phần phụ thuộc trong thư mục hiện tại. Nếu là gói `main`, sẽ đặt tệp thực thi trong thư mục hiện tại, nếu không, tệp thực thi sẽ được đặt trong thư mục `pkg`. `go build` cũng cho phép bạn tạo một tệp thực thi cho bất kỳ nền tảng, hệ điều hành được hỗ trợ bởi của Go. - `go install` - Tương tự như go build nhưng sẽ đặt tệp thi hành vào thư mục `bin` -Chúng tôi đã chạy qua go build và go run nhưng vui lòng chạy lại chúng ở đây nếu bạn muốn, `go install` như đã nêu ở trên đặt tệp thực thi vào thư mục bin của chúng tôi. +Chúng ta đã chạy qua go build và go run nhưng vui lòng chạy lại chúng ở đây nếu bạn muốn, `go install` như đã nêu ở trên đặt tệp thực thi vào thư mục bin của chúng ta. Chúng ta đã sử dụng go build và go run nhưng hãy thử lại nếu bạn muốn, `go install` như đã trình bày ở trên, sẽ đặt tệp thực thi trong thư mục `bin`. diff --git a/2022/vi/Days/day13.md b/2022/vi/Days/day13.md index 3794f02..0bfc060 100644 --- a/2022/vi/Days/day13.md +++ b/2022/vi/Days/day13.md @@ -316,6 +316,6 @@ Các câu lệnh này sẽ cung cấp cho bạn các tệp nhị phân cho tất Đây sẽ là ngày kết thúc cho 7 ngày tìm hiểu về Ngôn ngữ lập trình! Còn rất nhiều điều chúng ta cần tìm hiểu và tôi hy vọng bạn có thể tiếp tục thông qua các tài nguyên ở trên nhằm có thể hiểu một số khía cạnh khác của ngôn ngữ lập trình Go. -Tiếp theo, chúng tôi tập trung vào Linux và một số nguyên tắc cơ bản mà tất cả chúng ta nên biết về nó. +Tiếp theo, chúng ta tập trung vào Linux và một số nguyên tắc cơ bản mà tất cả chúng ta nên biết về nó. Hẹn gặp lại các bạn vào [Ngày 14](day14.md). diff --git a/2022/vi/Days/day14.md b/2022/vi/Days/day14.md index 36887be..e1e3eef 100644 --- a/2022/vi/Days/day14.md +++ b/2022/vi/Days/day14.md @@ -24,7 +24,7 @@ Tôi đã sử dụng Linux hàng ngày trong vài năm nhưng máy tính để Tôi không khuyến nghị bạn làm giống như tôi vì có nhiều tùy chọn dễ dàng hơn nhưng tôi sẽ nói rằng việc thực hiện điều đó buộc bạn phải học nhanh hơn cách làm cho mọi thứ hoạt động trên Linux. -Trong phần lớn thời gian 7 ngày này, tôi sẽ triển khai máy ảo (Virtual Machine) sử dụng Virtual Box trên máy Windows của mình. Tôi cũng sẽ triển khai một bản phân phối Linux (Linux distro), trong khi phần lớn các máy chủ Linux mà bạn sẽ quản lý có thể sẽ là các máy chủ không có GUI và mọi thứ đều dựa trên shell. Tuy nhiên, như tôi đã nói ở phần đầu, rất nhiều các công cụ mà chúng tôi đã đề cập trong suốt 90 ngày bắt đầu chạy trên Linux. Do đó, tôi cũng khuyến khích bạn tham gia vào việc sử dụng Linux với máy tính của bạn để có cùng một trải nghiệm học tập với tôi. +Trong phần lớn thời gian 7 ngày này, tôi sẽ triển khai máy ảo (Virtual Machine) sử dụng Virtual Box trên máy Windows của mình. Tôi cũng sẽ triển khai một bản phân phối Linux (Linux distro), trong khi phần lớn các máy chủ Linux mà bạn sẽ quản lý có thể sẽ là các máy chủ không có GUI và mọi thứ đều dựa trên shell. Tuy nhiên, như tôi đã nói ở phần đầu, rất nhiều các công cụ mà chúng ta đã đề cập trong suốt 90 ngày bắt đầu chạy trên Linux. Do đó, tôi cũng khuyến khích bạn tham gia vào việc sử dụng Linux với máy tính của bạn để có cùng một trải nghiệm học tập với tôi. Đối với phần còn lại của bài này, chúng ta sẽ tập trung vào việc thiết lập và chạy một máy ảo Ubuntu Desktop trong Virtual Box. Đầu tiên, hãy tải xuống [Virtual Box](https://www.virtualbox.org/) và download [Ubuntu ISO](https://ubuntu.com/download) bản mới nhất và tiếp tục hoàn thiện môi trường của của chúng ta. Nó không được coi là DevOps đúng không? @@ -32,11 +32,11 @@ Một lý do tốt khác để sử dụng hầu hết các bản phân phối L ## Giới thiệu HashiCorp Vagrant -Vagrant là một tiện ích CLI quản lý vòng đời của các máy ảo của bạn. Chúng tôi có thể sử dụng vagrant để khởi động và tắt các máy ảo trên nhiều nền tảng khác nhau bao gồm vSphere, Hyper-v, Virtual Box và cả Docker. Sẽ có nhiều các nhà cung cấp khác nhưng chúng ta sẽ tiếp tục với Virtual Box. +Vagrant là một tiện ích CLI quản lý vòng đời của các máy ảo của bạn. Chúng ta có thể sử dụng vagrant để khởi động và tắt các máy ảo trên nhiều nền tảng khác nhau bao gồm vSphere, Hyper-v, Virtual Box và cả Docker. Sẽ có nhiều các nhà cung cấp khác nhưng chúng ta sẽ tiếp tục với Virtual Box. Điều đầu tiên chúng ta cần làm là cài đặt Vagrant trên máy của bạn, khi truy cập trang tải xuống, bạn sẽ thấy tất cả các hệ điều hành được liệt kê để bạn lựa chọn tại [trang download của HashiCorp Vagrant](https://www.vagrantup.com/downloads). Tôi đang sử dụng Windows nên đã download tệp nhị phân cho hệ thống của mình và cài đặt tệp này lên hệ thống của mình. -Tiếp theo, chúng tôi cũng cần cài đặt [Virtual Box](https://www.virtualbox.org/wiki/Downloads). Một lần nữa, phần mềm này cũng có thể được cài đặt trên nhiều hệ điều hành khác nhau và một lý do chính đáng để chọn 2 công nghệ này là vì chúng ta có thể sử dụng trên hầu hết tất cả các hệ điều hành. +Tiếp theo, chúng ta cũng cần cài đặt [Virtual Box](https://www.virtualbox.org/wiki/Downloads). Một lần nữa, phần mềm này cũng có thể được cài đặt trên nhiều hệ điều hành khác nhau và một lý do chính đáng để chọn 2 công nghệ này là vì chúng ta có thể sử dụng trên hầu hết tất cả các hệ điều hành. Cả hai đều khá dễ đề cài đặt và đều có những cộng đồng tuyệt vời xung quanh chúng, vì vậy hãy liên hệ nếu bạn gặp vấn đề. @@ -48,7 +48,7 @@ Khi nói đến việc lưu các tệp này và sắp xếp các VAGRANTFILE c ![](../../Days/Images/Day14_Linux1.png) -Hãy cùng nhìn lại VAGRANTFILE đó và xem những gì chúng tôi đang xây dựng. +Hãy cùng nhìn lại VAGRANTFILE đó và xem những gì chúng ta đang xây dựng. ```ruby:Vagrantfile Vagrant.configure("2") do |config| @@ -61,9 +61,9 @@ Vagrant.configure("2") do |config| end ``` -Đây là một VAGRANTFILE đơn giản. Chúng tôi muốn nói rằng chúng tôi muốn có một box cụ thể, một box có thể là hình ảnh công khai hoặc bản dựng riêng của hệ thống mà bạn đang tìm kiếm. Bạn có thể tìm thấy một danh sách dài các box công khai có sẵn tại đây trong [danh mục công khai của hộp Vagrant](https://app.vagrantup.com/boxes/search) +Đây là một VAGRANTFILE đơn giản. Chúng ta muốn nói rằng chúng ta muốn có một box cụ thể, một box có thể là hình ảnh công khai hoặc bản dựng riêng của hệ thống mà bạn đang tìm kiếm. Bạn có thể tìm thấy một danh sách dài các box công khai có sẵn tại đây trong [danh mục công khai của hộp Vagrant](https://app.vagrantup.com/boxes/search) -Dòng tiếp theo, chúng tôi nói rằng chúng tôi muốn sử dụng một nhà cung cấp cụ thể và trong trường hợp này là `VirtualBox`. Chúng tôi cũng muốn bộ nhớ của máy là `8GB` và số lượng CPU là `4`. Theo kinh nghiệm của tôi, bạn có thể sẽ phải thêm dòng sau nếu bạn gặp sự cố hiển thị. Nó sẽ đặt bộ nhớ video thành những gì bạn muốn, tôi sẽ tăng bộ nhớ này lên đến `128MB` nhưng nó hoàn toàn phụ thuộc vào cấu hình hệ thống của bạn. +Dòng tiếp theo, chúng ta nói rằng chúng ta muốn sử dụng một nhà cung cấp cụ thể và trong trường hợp này là `VirtualBox`. Chúng ta cũng muốn bộ nhớ của máy là `8GB` và số lượng CPU là `4`. Theo kinh nghiệm của tôi, bạn có thể sẽ phải thêm dòng sau nếu bạn gặp sự cố hiển thị. Nó sẽ đặt bộ nhớ video thành những gì bạn muốn, tôi sẽ tăng bộ nhớ này lên đến `128MB` nhưng nó hoàn toàn phụ thuộc vào cấu hình hệ thống của bạn. ```ruby v.customize ["modifyvm", :id, "--vram", ""] @@ -91,8 +91,8 @@ Sau khi hoàn tất quá trình `vagrant up`, chúng ta có thể sử dụng `v Nếu bạn đã đi được đến đây và đang tự hỏi "TÊN NGƯỜI DÙNG & MẬT KHẨU LÀ GÌ?" --Username = vagrant --Password = vagrant +- Username = vagrant +- Password = vagrant Ngày mai chúng ta sẽ tìm hiểu về một số lệnh và tác dụng của chúng, Terminal sẽ là nơi để biến mọi thứ thành hiện thực. diff --git a/2022/vi/Days/day15.md b/2022/vi/Days/day15.md new file mode 100644 index 0000000..014a7b1 --- /dev/null +++ b/2022/vi/Days/day15.md @@ -0,0 +1,196 @@ +--- +title: "#90DaysOfDevOps - Các lệnh Linux cho DevOps (Thực tế là tất cả mọi người) - Ngày 15" +published: false +description: 90DaysOfDevOps - Các lệnh Linux cho DevOps (Thực tế là tất cả mọi người) +tags: "devops, 90daysofdevops, learning" +cover_image: null +canonical_url: null +id: 1048834 +--- + +## Các lệnh Linux cho DevOps (thực tế là cho mọi người) + +Như tôi đã đề cập [vào ngày hôm qua](day14.md), hôm nay chúng ta sẽ dành nhiều thời gian cùng terminal với một số câu lệnh làm việc. + +Tôi cũng đã đề cập rằng với VM được tạo của chúng ta, chúng ta có thể sử dụng `vagrant ssh` và có quyền truy cập vào "box" mà chúng ta đã tạo. Bạn cần phải ở trong cùng thư mục mà chúng ta đã tạo vagrant box từ đó. + +Đối với SSH, bạn sẽ không cần tên người dùng và mật khẩu, bạn sẽ chỉ cần điều đó nếu bạn quyết định đăng nhập vào Virtual Box console. + +Chúng ta muốn có được kết quả như sau: + +![](../../Days/Images/Day15_Linux1.png) + +## Câu lệnh + +Tôi không thể trình bày tất cả các lệnh trong bài viết này, có nhiều trang và tài liệu đề cập đến những điều này nhưng nếu bạn đang ở terminal của mình và muốn tìm hiểu các tùy chọn cho một lệnh cụ thể, chúng ta có trang `man` viết tắt cho manual (hướng dẫn sử dụng). Sử dụng câu lệnh này để xem qua từng lệnh mà chúng ta đề cập trong bài này để biết thêm các tùy chọn cho từng lệnh. Chúng ta có thể chạy `man man` để được trợ giúp cho các chính cách trang hướng dẫn. Nhập `q` để thoát khỏi các trang đó. + +![](../../Days/Images/Day15_Linux2.png) + +![](../../Days/Images/Day15_Linux3.png) + +`sudo` nếu bạn đã quen thuộc với Windows và nhấp chuột phải, chọn `Run as administrator`, chúng ta có thể coi `sudo` tương tự với hành động đó. Khi bạn chạy một lệnh với lệnh này, bạn sẽ chạy nó dưới quyền `root`, nó sẽ yêu cầu mật khẩu trước khi chạy lệnh. + +![](../../Days/Images/Day15_Linux4.png) + +Đố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? Đây là nơi bạn 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. Trong một máy ảo thử nghiệm như của chúng ta, điều này có thể chấp nhật được nhưng tôi thấy không ổn nếu chúng ta ở dưới quyền `root` quá lâu, những điều tồi tệ có thể xảy ra. Để thoát khỏi quyền này, bạn chỉ cần gõ vào `exit` + +![](../../Days/Images/Day15_Linux5.png) + +Tôi thấy mình luôn sử dụng lệnh `clear`, lệnh` clear` thực hiện chính xác những gì nó nói, nó sẽ xóa màn hình của tất cả các lệnh trước đó, đưa dấu nhắc lệnh của bạn lên đầu và trả lại cho bạn một không gian làm việc sạch. Với Windows, tôi nghĩ là `cls` trong .mdprompt. + +![](../../Days/Images/Day15_Linux6.png) + +Bây giờ chúng ta hãy xem xét một số lệnh giúp chúng ta có thể tạo một thứ trong hệ thống của mình và có thể quan sát được chúng trong terminal. Trước hết, chúng ta có `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 Day15 `mkdir Day15` + +![](../../Days/Images/Day15_Linux7.png) + +Với `cd`, chúng ta có thể thay đổi thư mục. Để 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 Day15` 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. .` + +![](../../Days/Images/Day15_Linux8.png) + +`rmdir` cho phép chúng ta xóa thư mục, nếu chúng ta chạy `rmdir Day15` 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) +trong +![](../../Days/Images/Day15_Linux9.png) + +Chắc hẳn chúng ta ai cũng đã từng đi vào rất sâu trong hệ thống tệp của mình đến một thư mục mà không biết chúng ta đang ở đâu. `pwd` cung cấp cho chúng ta địa chỉ của thư mục làm việc, pwd có vẻ như là viết tắt của mật khẩu (password) nhưng nó là viết tắt của print working directory (in ra thư mục làm việc). + +![](../../Days/Images/Day15_Linux10.png) + +Chúng ta đã biết cách tạo thư mục nhưng làm thế nào để có thể tạo một tệp? Chúng ta có thể tạo tệp bằng cách sử dụng lệnh `touch`. Nếu chúng ta dùng lệnh `touch Day15`, thao tác này sẽ tạo một tệp có tên là `Day15`. Bỏ qua `mkdir`, chúng ta sẽ gặp lại điều này sau. + +![](../../Days/Images/Day15_Linux11.png) + +`ls` Tôi có thể chuyển nhà vào đây, bạn sẽ sử dụng lệnh này rất nhiều. Câu lệnh này sẽ liệt kê tất cả các tệp trong thư mục hiện tại. Hãy xem liệu chúng ta có thể thấy tệp mà chúng ta vừa tạo không. + +![](../../Days/Images/Day15_Linux12.png) + +Làm cách nào chúng ta có thể tìm tệp trong Linux? `locate` sẽ cho phép chúng ta tìm kiếm hệ thống tệp của mình. Nếu chúng ta sử dụng `locate Day15`, nó sẽ báo lại vị trí của tệp. Nếu bạn biết rằng tệp tồn tại nhưng bạn nhận được kết quả tìm kiếm rỗng thì hãy chạy lệnh `sudo updatedb` để lập chỉ mục tất cả các tệp trong hệ thống tệp, sau đó chạy lại lệnh `locate`. Nếu bạn không có sẵn gói lệnh `locate`, bạn có thể cài đặt nó bằng lệnh sau `sudo apt install mlocate` + +![](../../Days/Images/Day15_Linux13.png) + +Còn việc di chuyển tệp từ vị trí này sang vị trí khác thì sao? Lệnh `mv` sẽ cho phép bạn di chuyển các tệp của mình. Ví dụ `mv Day15 90DaysOfDevOps` sẽ di chuyển tệp của bạn vào thư mục 90DaysOfDevOps. + +![](../../Days/Images/Day15_Linux14.png) + +Chúng ta đã di chuyển tệp của mình nhưng nếu muốn đổi tên tệp thì sao? Chúng ta có thể làm điều đó bằng lệnh `mv` một lần nữa... Gì cơ!!!? đúng vậy, chúng ta chỉ cần sử dụng `mv Day15 day15` hoặc chúng ta có thể sử dụng `mv day15 AnotherDay` để đổi tên tệp, hãy sử dụng `ls` để kiểm tra lại. + +![](../../Days/Images/Day15_Linux15.png) + +Đủ rồi, bây giờ hãy loại bỏ (xóa) tệp và thậm chí có thể là thư mục mà chúng ta đã tạo. Hãy dùng lệnh `rm`, chỉ cần `rm AnotherDay` sẽ xóa tệp AnotherDay 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). Spoiler nếu bạn chạy `rm -R -f /` và thêm sudo vào, bạn có thể nói lời tạm biệt với hệ thống của mình....! + +![](../../Days/Images/Day15_Linux16.png) + +Chúng ta đã xem xét việc di chuyển tệp nhưng nếu tôi chỉ muốn sao chép tệp từ thư mục này sang thư mục khác, nó rất giống với lệnh `mv`, lệnh `cp` (copy), chúng ta có thể sử dụng `cp Day15 Desktop` + +![](../../Days/Images/Day15_Linux17.png) + +Chúng ta đã tạo các thư mục và tệp nhưng chưa đặt thêm bất cứ nội dung nào vào thư mục của mình, chúng ta có thể thêm nội dung theo một số cách nhưng một cách dễ dàng là `echo`. Chúng ta cũng có thể sử dụng `echo` để in ra nhiều thứ trong terminal của mình. Tôi sử dụng `echo` để in ra các biến hệ thống để biết liệu chúng có được cài đặt hay chưa. Chúng ta có thể sử dụng `echo "Xin chào #90DaysOfDevOps" > Day15` và thao tác này sẽ thêm nó vào tệp của chúng ta. Chúng ta cũng có thể thêm vào tệp của mình bằng cách sử dụng `echo "Commands are fun!" >> Day15` + +![](../../Days/Images/Day15_Linux18.png) + +Một trong những lệnh mà bạn sẽ sử dụng rất nhiều! `cat` viết tắt của nối (concatenate). Chúng ta có thể sử dụng `cat Day15` để xem nội dung bên trong tệp. Rất hữu ích khi bạn muốn đọc nhanh các tệp cấu hình. + +![](../../Days/Images/Day15_Linux19.png) + +Nếu bạn có một tệp cấu hình phức tạp và bạn muốn hoặc cần tìm thứ gì đó trong tệp đó một cách nhanh hơn so với việc phải đọc từng dòng thì lệnh `grep` là bạn của bạn, nó cho phép chúng ta tìm kiếm tệp cho một từ cụ thể bằng cách sử dụng `cat Day15 | grep "#90DaysOfDevOps"` + +![](../../Days/Images/Day15_Linux20.png) + +Nếu bạn giống tôi và sử dụng lệnh `clear` rất nhiều thì bạn có thể sẽ bỏ lỡ một số lệnh đã chạy trước đó, chúng ta có thể sử dụng `history` để tìm ra tất cả các lệnh mà chúng ta đã chạy. `history -c` sẽ xóa lịch sử. + +Khi bạn chạy `history` và muốn chọn một lệnh cụ thể, bạn có thể sử dụng `!3` để chọn lệnh thứ 3 trong danh sách. + +Bạn cũng có thể sử dụng `history | grep "Command"` để tìm kiếm lệnh nào đó cụ thể. + +Trên các máy chủ, để theo dõi thời điểm một lệnh được thực thi, việc thêm ngày và giờ vào từng lệnh trong tệp lịch sử có thể sẽ hữu ích. + +Biến hệ thống sau kiểm soát hành vi này: + +``` +HISTTIMEFORMAT="%d-%m-%Y %T " +``` + +Bạn có thể dễ dàng thêm vào bash_profile của mình: + +``` +echo 'export HISTTIMEFORMAT="%d-%m-%Y %T "' >> ~/.bash_profile +``` + +Có thể sẽ tốt hơn nếu cho phép tệp lịch sử có kích thước lơn hơn lớn hơn: + +``` +echo 'export HISTSIZE=100000' >> ~/.bash_profile +echo 'export HISTFILESIZE=10000000' >> ~/.bash_profile +``` + +![](../../Days/Images/Day15_Linux21.png) + +Cần thay đổi mật khẩu của bạn? `passwd` sẽ cho phép chúng ta thay đổi mật khẩu. Lưu ý rằng khi bạn thêm mật khẩu của mình theo cách này thì khi mật khẩu bị ẩn, nó sẽ không hiển thị trong `history` tuy nhiên nếu lệnh của bạn có `-p PASSWORD` thì mật khẩu này sẽ hiển thị trong `history` của bạn. + +![](../../Days/Images/Day15_Linux22.png) + +Chúng ta cũng có thể muốn thêm người dùng mới vào hệ thống của mình, có thể thực hiện việc này với `useradd`. Chúng ta phải thêm người dùng bằng lệnh `sudo` của mình, và có thể thêm người dùng mới bằng `sudo useradd NewUser` + +![](../../Days/Images/Day15_Linux23.png) + +Tạo nhóm mới cũng yêu cầu `sudo` và chúng ta có thể sử dụng `sudo groupadd DevOps` nếu chúng ta muốn thêm người dùng mới của mình vào nhóm đó, việc này có thể được thực hiện bằng cách chạy `sudo usermod -a -G DevOps` `-a` là add (thêm vào) và `-G` là tên nhóm. + +![](../../Days/Images/Day15_Linux24.png) + +Làm cách nào để chúng ta thêm người dùng vào nhóm `sudo`, đây sẽ là một trường hợp rất hiếm khi xảy ra nhưng câu lệnh để làm điều này là `usermod -a -G sudo NewUser` + +### 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` + +Bạn cũng sẽ thấy `777` hoặc `775` và các số này đại diện cho các số giống như danh sách ở trên nhưng mỗi số đại diện cho mỗi đối tượng **User - Group - Everyone**(**Người dùng - Nhóm - Mọi người**) + +Hãy xem tập tin của chúng ta. `ls -al Day15` bạn có thể thấy 3 nhóm nêu trên, user và group có quyền đọc và ghi (read & write) nhưng mọi người chỉ có quyền đọc read. + +![](../../Days/Images/Day15_Linux25.png) + +Chúng ta có thể thay đổi điều này bằng cách sử dụng `chmod`, bạn có thể thấy sẽ điều này khi tạo nhiều tệp nhị phân trên hệ thống của mình và cần cung cấp quyền thực thi cho các tệp nhị phân đó. `chmod 750 Day15` và bây giờ chạy lệnh `ls -al Day15`. Nếu bạn muốn chạy lệnh này cho toàn bộ thư mục thì sử dụng `-R` để làm điều đó một cách đệ quy. + +![](../../Days/Images/Day15_Linux26.png) + +Vậy còn nếu muốn thay đổi chủ của tập tin? Chúng ta có thể sử dụng `chown` cho thao tác này, nếu muốn thay đổi quyền sở hữu của `Day15` từ người dùng `vagrant` thành `NewUser`, chúng ta có thể chạy lệnh `sudo chown NewUser Day15` và một lần nữa `-R` có thể sử dụng để làm điều này một cách đệ quy. + +![](../../Days/Images/Day15_Linux27.png) + +Một lệnh mà bạn sẽ có thể sẽ gặp nhiều là `awk`. Lệnh này được sử dụng trong thực tế khi bạn chỉ cần dữ liệu cụ thể từ một đầu ra. Giống như chạy lệnh `who` chúng ta sẽ nhận được các dòng có thông tin, nhưng nếu chỉ cần tên người dùng, chúng ta có thể chạy `who | awk '{print $1}'` để chỉ lấy của cột đầu tiên của danh sách đó. + +![](../../Days/Images/Day15_Linux28.png) + +Nếu bạn đang muốn đọc các luồng dữ liệu từ đầu vào tiêu chuẩn (stdin - standard input), thì hãy tạo và thực thi các dòng lệnh; nghĩa là nó có thể lấy đầu ra của một lệnh và dùng nó làm đối số của một lệnh khác. `xargs` là một công cụ hữu ích cho trường hợp sử dụng này. Ví dụ: nếu tôi muốn có danh sách tất cả tài khoản người dùng Linux trên hệ thống, tôi có thể chạy `cut -d: -f1 < /etc/passwd` và lấy danh sách dài như bạn thấy bên dưới. + +![](../../Days/Images/Day15_Linux29.png) + +Nếu tôi muốn thu gọn danh sách đó, tôi có thể sử dụng `xargs` trong một lệnh như thế này `cut -d: -f1 < /etc/passwd | sort | xargs` + +![](../../Days/Images/Day15_Linux30.png) + +Tôi cũng không đề cập đến lệnh `cut`, lệnh này cho phép chúng ta xóa các phần khỏi mỗi dòng của tệp. Nó có thể được sử dụng để cắt các phần của một dòng theo vị trí byte, ký tự và trường. Lệnh `cut -d " " -f 2 list.txt` cho phép chúng ta xóa chữ cái đầu tiên mà và chỉ hiển thị số. Có rất nhiều kết hợp có thể được sử dụng với lệnh này, tôi chắc chắn rằng đã có lúc tôi đã dành quá nhiều thời gian để sử dụng lệnh này trong khi có thể trích xuất dữ liệu nhanh hơn theo cách thủ công. + +![](../../Days/Images/Day15_Linux31.png) + +Ngoài ra, cần lưu ý nếu bạn nhập một lệnh và bạn không muốn thực thi nó nữa và muốn bắt đầu lại, chỉ cần nhấn control + C và thao tác này sẽ hủy dòng lệnh đó và giúp bạn bắt đầu lại từ đầu. + +## Tài liệu tham khảo + +- [Learn the Linux Fundamentals - Part 1](https://www.youtube.com/watch?v=kPylihJRG70) +- [Linux for hackers (don't worry you don't need to be a hacker!)](https://www.youtube.com/watch?v=VbEx7B_PTOE) + +Hẹn gặp lại vào [ngày 16](day16.md) + +Đây là một danh sách khá dài nhưng tôi có thể nói rằng tôi đã sử dụng tất cả các lệnh này hàng ngày, có thể là từ một máy chủ Linux mà tôi đang quản trị hoặc trên máy tính để bàn Linux của tôi, việc điều hướng rất dễ dàng trong Windows hoặc macOS nhưng với máy chủ Linux, giao diện người dùng thường không có ở đó, mọi thứ được thực hiện thông qua terminal. diff --git a/2022/vi/Days/day16.md b/2022/vi/Days/day16.md new file mode 100644 index 0000000..e83f0d8 --- /dev/null +++ b/2022/vi/Days/day16.md @@ -0,0 +1,166 @@ +--- +title: "#90DaysOfDevOps - Quản lý Hệ thống Linux, Hệ thống Tệp & Lưu trữ - Ngày 16" +published: false +description: "90DaysOfDevOps - Quản lý Hệ thống Linux, Hệ thống Tệp & Lưu trữ" +tags: "devops, 90daysofdevops, learning" +cover_image: null +canonical_url: null +id: 1048702 +--- + +## Quản lý Hệ thống Linux, Hệ thống Tệp & Lưu trữ + +Tính cho đến thời điểm này, chúng ta đã có cái nhìn tổng quan ngắn gọn về Linux và DevOps. Sau đó chúng ta đã thiết lập môi trường thử nghiệm của mình sử dụng Vagrant trong [(Ngày 14)](day14.md), cuối cùng chúng ta đã đề cập đến một phần nhỏ các lệnh được sử dụng hàng ngày khi làm việc với terminal vào [(Ngày 15)](day15.md). + +Hôm nay, chúng ta sẽ xem xét ba phần chính khi quản lý hệ thống Linux thông qua các bản cập nhật, cài đặt phần mềm, thư mục hệ thống được sử dụng để làm gì và cuối cùng là tìm hiểu về lưu trữ (storage). + +## Quản lý Ubuntu & Phần mềm + +Điều đầu tiên chúng ta sẽ xem xét cách cập nhật hệ điều hành của mình. Hầu hết các bạn đã quen với quy trình này với Windows và macOS, quy trình này sẽ hơi khác trên máy tính và máy chủ sử dụng Linux. + +Chúng ta sẽ xem xét trình quản lý gói apt, nó sẽ sử dụng trên Ubuntu VM để cập nhật và cài đặt phần mềm. + +Nói chung, ít nhất là trên các máy trạm của nhà phát triển, tôi chạy lệnh này để đảm bảo mình luôn có các bản cập nhật mới nhất vào thời điểm hiện tại từ các kho lưu trữ trung tâm (central repositories), trước khi cài đặt bất kỳ phần mềm nào. + +`sudo apt-get update` + +![](../../Days/Images/Day16_Linux1.png) + +Bây giờ chúng ta đã cập nhật Ubuntu VM với các bản cài đặt mới nhất. Bây giờ chúng tôi muốn cài thêm một số phần mềm ở đây. + +Hãy chọn `figlet` - một chương trình tạo biểu ngữ văn bản. + +Nếu chúng tôi nhập `figlet` trong terminal, bạn sẽ thấy rằng chúng ta chưa cài đặt nó trên hệ thống của mình. + +![](../../Days/Images/Day16_Linux2.png) + +You will see from the above though that it does give us some `apt` install options that we could try. This is because in the default repositories there is a program called figlet. Let's try `sudo apt install figlet` + +Mặc dù vậy, bạn sẽ thấy rằng hệ thống cung cấp cho chúng ta một số tùy chọn cài đặt `apt` mà chúng ta có thể thử. Điều này có thể thực hiện do trong kho lưu trữ mặc định có một chương trình gọi là figlet. Hãy thử `sudo apt install figlet` + +![](../../Days/Images/Day16_Linux3.png) + +Bây giờ chúng ta có thể sử dụng ứng dụng `figlet` như bạn có thể thấy bên dưới. + +![](../../Days/Images/Day16_Linux4.png) + +Nếu chúng ta muốn xóa phần mềm đó hoặc bất kỳ cài đặt phần mềm nào của mình, chúng ta cũng có thể thực hiện việc đó thông qua trình quản lý gói `apt`. + +`sudo apt remove figlet` + +![](../../Days/Images/Day16_Linux5.png) + +Có các kho lưu trữ của bên thứ ba mà chúng ta cũng có thể thêm vào hệ thống của mình, những kho lưu trữ mà chúng ta có quyền truy cập ngay lập tức là các kho lưu trữ mặc định của Ubuntu. + +Ví dụ: nếu chúng ta muốn cài đặt vagrant trên Ubuntu VM, chúng ta sẽ không thể thực hiện ngay được và bạn có thể thấy điều này khi thực hiện câu lệnh đầu tiên. Chúng ta sau đó thêm khóa để có thể tin tưởng kho lưu trữ HashiCorp, và cuối cùng là thêm kho lưu trữ của họ vào hệ thống của chúng ta. + +![](../../Days/Images/Day16_Linux6.png) + +Sau khi chúng ta thêm kho lưu trữ HashiCorp, chúng ta có thể tiếp tục và chạy `sudo apt install vagrant` và cài đặt vagrant trên hệ thống. + +![](../../Days/Images/Day16_Linux7.png) + +Có rất nhiều tùy chọn khi cài đặt phần mềm, các tùy chọn khác nhau cho trình quản lý gói, được tích hợp trong Ubuntu, chúng ta cũng có thể sử dụng snaps để cài đặt phần mềm của mình. + +Hy vọng rằng điều này mang lại cho bạn cảm nhận về cách quản lý cài đặt hệ điều hành và phần mềm trên Linux. + +## 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. + +![](../../Days/Images/Day16_Linux8.png) + +- `/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. + +![](../../Days/Images/Day16_Linux9.png) + +- `/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. + +![](../../Days/Images/Day16_Linux10.png) + +- `/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. + +![](../../Days/Images/Day16_Linux11.png) + +- `/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. + +![](../../Days/Images/Day16_Linux12.png) + +- `/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. Chúng ta có thư mục vagrant của chúng ta. Đây là nơi bạn sẽ tìm thấy các thư mục `Documents` và `Desktop` mà chúng ta đã làm việc trong khi tìm hiểu các lệnh lệnh. + +![](../../Days/Images/Day16_Linux13.png) + +- `/lib` - Chúng tôi đã đề 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 đó. + +![](../../Days/Images/Day16_Linux14.png) + +- `/media` - Đây là nơi chúng tôi sẽ tìm thấy các thiết bị di động. + +![](../../Days/Images/Day16_Linux15.png) + +- `/mnt` - Đây là điểm gắn kết tạm thời. Chúng tôi sẽ đề cập sâu hơn trong phần tiếp theo về lưu trữ. + +![](../../Days/Images/Day16_Linux16.png) + +- `/opt` - Optional software packages (gói phần mềm tùy chọn). Bạn sẽ nhận thấy ở đây rằng chúng tôi có một số phần mềm virtual box và vagrant được lưu trữ ở đây. + +![](../../Days/Images/Day16_Linux17.png) + +- `/proc` - Kernel & thông tin về process, tương tự như `/dev` + +![](../../Days/Images/Day16_Linux18.png) + +- `/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. + +![](../../Days/Images/Day16_Linux19.png) + +- `/run` - Placeholder cho trạng thái ứng dụng. + +![](../../Days/Images/Day16_Linux20.png) + +- `/sbin` - Sudo bin, tương tự như thư mục bin nhưng các công cụ này dành cho những người dùng có đặc quyền nâng cao trên hệ thống. + +![](../../Days/Images/Day16_Linux21.png) + +- `/tmp` - tệp tạm thời. + +![](../../Days/Images/Day16_Linux22.png) + +- `/usr` - Nếu chúng tôi 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`. + +![](../../Days/Images/Day16_Linux23.png) + +- `/var` - Các ứng dụng của chúng tôi được cài đặt trong thư mục `bin`. Chúng tôi cần một nơi nào đó để lưu trữ tất cả các tệp logs, đó chính là `/var` + +## 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à chúng tôi 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ị chặn(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 đó. + +![](../../Days/Images/Day16_Linux25.png) + +- `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. Bạn có thể sử dụng thêm các flag trong câu lệnh này. Tôi thường sử dụng `df -h` để lấy đầu ra dữ liệu đễ đọc hơn. + +![](../../Days/Images/Day16_Linux26.png) + +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. + +Sau khi bạn chỉnh sửa tệp cấu hình `fstab`, bạn có thể kiểm tra hoạt động bằng lệnh `sudo mount -a` nếu không có lỗi thì các thay đổi của bạn sẽ vẫn ở đó dù khởi động lại hệ thống. + +Chúng tôi sẽ đề cập đến cách bạn chỉnh sửa tệp bằng trình soạn thảo văn bản trong ngày hôm sau + +## Tài liệu tham khảo + +- [Learn the Linux Fundamentals - Part 1](https://www.youtube.com/watch?v=kPylihJRG70) +- [Linux for hackers (don't worry you don't need to be a hacker!)](https://www.youtube.com/watch?v=VbEx7B_PTOE) + +Hẹn gặp lại trong [Ngày 17](day17.md) diff --git a/2022/vi/README.md b/2022/vi/README.md index 5538542..e608073 100644 --- a/2022/vi/README.md +++ b/2022/vi/README.md @@ -40,17 +40,17 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M - [✔️] ⌨️ 12 > [Nhận thông tin đầu vào sử dụng con trỏ và chương trình hoàn thiện](Days/day12.md) - [✔️] ⌨️ 13 > [Tweet tiến trình của bạn với ứng dụng mới của chúng ta](Days/day13.md) -### Knowing Linux Basics +### Kiến thức cơ bản về Linux - [✔️] 🐧 14 > [Bức tranh lớn: DevOps và Linux](Days/day14.md) - [✔️] 🐧 15 > [Các lệnh Linux cho DevOps (Thực tế là tất cả mọi người)](Days/day15.md) -- [✔️] 🐧 16 > [Quản lý Hệ thống Linux, Hệ thống Tệp & Bộ nhớ](Days/day16.md) +- [✔️] 🐧 16 > [Quản lý Hệ thống Linux, Hệ thống Tệp & Lưu trữ](Days/day16.md) - [✔️] 🐧 17 > [Text Editors - nano vs vim](Days/day17.md) - [✔️] 🐧 18 > [SSH & Web Server(LAMP)](Days/day18.md) - [✔️] 🐧 19 > [Tự động hóa các tác vụ với các tập lệnh bash](Days/day19.md) - [✔️] 🐧 20 > [Thiết lập máy trạm phát triển - những điều tuyệt vời](Days/day20.md) -### Understand Networking +### Kiến thức về mạng (Network) - [✔️] 🌐 21 > [The Big Picture: DevOps and Networking](Days/day21.md) - [✔️] 🌐 22 > [The OSI Model - The 7 Layers](Days/day22.md) @@ -60,7 +60,7 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M - [✔️] 🌐 26 > [Building our Lab](Days/day26.md) - [✔️] 🌐 27 > [Getting Hands-On with Python & Network](Days/day27.md) -### Stick to one Cloud Provider +### Tìm hiểu về một Cloud Provider - [✔️] ☁️ 28 > [The Big Picture: DevOps & The Cloud](Days/day28.md) - [✔️] ☁️ 29 > [Microsoft Azure Fundamentals](Days/day29.md) @@ -70,7 +70,7 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M - [✔️] ☁️ 33 > [Microsoft Azure Networking Models + Azure Management](Days/day33.md) - [✔️] ☁️ 34 > [Microsoft Azure Hands-On Scenarios](Days/day34.md) -### Use Git Effectively +### Cách sử dụng Git hiệu quả - [✔️] 📚 35 > [The Big Picture: Git - Version Control](Days/day35.md) - [✔️] 📚 36 > [Installing & Configuring Git](Days/day36.md) @@ -100,7 +100,7 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M - [✔️] ☸ 54 > [Kubernetes Application Deployment](Days/day54.md) - [✔️] ☸ 55 > [State and Ingress in Kubernetes](Days/day55.md) -### Learn Infrastructure as Code +### Học cơ sở hạ tầng dưới dạng mã (Infrastructure as Code) - [✔️] 🤖 56 > [The Big Picture: IaC](Days/day56.md) - [✔️] 🤖 57 > [An intro to Terraform](Days/day57.md) @@ -110,7 +110,7 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M - [✔️] 🤖 61 > [Kubernetes & Multiple Environments](Days/day61.md) - [✔️] 🤖 62 > [Testing, Tools & Alternatives](Days/day62.md) -### Automate Configuration Management +### Tự động hóa quản lý cấu hình - [✔️] 📜 63 > [The Big Picture: Configuration Management](Days/day63.md) - [✔️] 📜 64 > [Ansible: Getting Started](Days/day64.md) @@ -120,7 +120,7 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M - [✔️] 📜 68 > [Tags, Variables, Inventory & Database Server config](Days/day68.md) - [✔️] 📜 69 > [All other things Ansible - Automation Controller, AWX, Vault](Days/day69.md) -### Create CI/CD Pipelines +### Tạo CI/CD Pipelines - [✔️] 🔄 70 > [The Big Picture: CI/CD Pipelines](Days/day70.md) - [✔️] 🔄 71 > [What is Jenkins?](Days/day71.md) @@ -130,7 +130,7 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M - [✔️] 🔄 75 > [GitHub Actions Overview](Days/day75.md) - [✔️] 🔄 76 > [ArgoCD Overview](Days/day76.md) -### Monitoring, Log Management, and Data Visualisation +### Giám sát, quản lý logs và trực quan hóa dữ liệu - [✔️] 📈 77 > [The Big Picture: Monitoring](Days/day77.md) - [✔️] 📈 78 > [Hands-On Monitoring Tools](Days/day78.md) @@ -140,7 +140,7 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M - [✔️] 📈 82 > [EFK Stack](Days/day82.md) - [✔️] 📈 83 > [Data Visualisation - Grafana](Days/day83.md) -### Store & Protect Your Data +### Lưu trữ & Bảo vệ Dữ liệu - [✔️] 🗃️ 84 > [The Big Picture: Data Management](Days/day84.md) - [✔️] 🗃️ 85 > [Data Services](Days/day85.md) From 7ffae3428002a5f31763cb8bf714cf66c7890219 Mon Sep 17 00:00:00 2001 From: Linh-An Date: Wed, 23 Nov 2022 15:05:08 +0000 Subject: [PATCH 2/9] Add day 21 (Vi) Initial translation --- vi/Days/day21.md | 115 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 vi/Days/day21.md diff --git a/vi/Days/day21.md b/vi/Days/day21.md new file mode 100644 index 0000000..e469966 --- /dev/null +++ b/vi/Days/day21.md @@ -0,0 +1,115 @@ +--- +title: '#90DaysOfDevOps - Bức tranh toàn cảnh: DevOps và Mạng máy tính - Ngày 21' +published: false +description: 90DaysOfDevOps - The Big Picture DevOps and Networking +tags: 'devops, 90daysofdevops, learning' +cover_image: null +canonical_url: null +id: 1048761 +--- + +## Bức tranh toàn cảnh: DevOps và Mạng máy tính + +Tương tự như trong các phần khác, tôi sẽ sử dụng các tài liệu hướng dẫn miễn phí và nguồn mở cùng với các nội dung từ những người khác. Trong phần này, phần lớn nội dung được lấy từ trang [Mạng thực tiễn (Practical Networking)] (https://www.practicalnetworking.net/) và sê-ri [Các nguyên tắc cơ bản của Mạng máy tính (Networking Fundamentals series)] (https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi). Dù đã được đề cập trong mục "Tài nguyên tham khảo" nhưng cũng cần thiết để nhấn mạnh tài liệu trên bởi vì từ quan điểm của cộng đồng, tôi đã tận dụng khóa học này để giúp bản thân hiểu thêm về các lĩnh vực cụ thể của công nghệ. Kho lưu trữ này được dùng để chứa các ghi chú của tôi với hy vọng mọi người có thể tìm thấy được ích lợi từ nó cũng như từ các tài nguyên được liệt kê. + +Chào mừng bạn đến với Ngày học thứ 21! Chúng ta sẽ tìm hiểu về mạng máy tính trong 7 ngày tới, DevOps và Mạng máy tính là những chủ đề bao trùm của phần này nhưng chúng ta cũng sẽ cần phải đi tìm hiểu một số kiến thức nền tảng của mạng máy tính. + +Như tôi đã nói trước đây DevOps là sự thay đổi về văn hóa và quy trình trong quá trình phát triển phần mềm. Những thay đổi này có thể là về Virtual Machines, Containers, hoặc Kubernetes như đã thảo luận trước đây, hoặc cũng có thể là ở hệ thống mạng. Nếu chúng ta áp dụng các nguyên tắc của DevOps vào cơ sở hạ tầng vốn đã bao gồm hệ thống mạng, ở khía cạnh của một DevOps, bạn sẽ cần tìm hiểu về mạng máy tính bao gồm cấu trúc, lớp, và công cụ mạng. + +Chúng ta có thể lý luận rằng các thiết bị trong mạng đã được cấu hình dựa trên code (infrastructure as code) và mọi thứ đều đã được tự động hóa. Tuy nhiên, để đạt được điều này, ít nhất chúng ta phải hiểu rõ về những thứ mà mình muốn nó làm việc tự động. + +### NetDevOps là gì | DevOps cho hệ thống mạng? + +Bạn cũng có thể nghe thấy thuật ngữ Network DevOps hoặc NetDevOps. Có thể bạn đã là một kỹ sư mạng và có kiến thức vững chắc về các thành phần trong hệ thống mạng bên trong cơ sở hạ tầng của bạn. Bạn hiểu được các thành phần như DHCP, DNS, NAT, v.v. Bạn cũng sẽ hiểu rõ về phần cứng và công nghệ "điều khiển mạng qua phần mềm" (software-defined networking). + +Nhưng nếu bạn không phải là một kỹ sư mạng thì có lẽ bạn cần phải có được một số kiến ​​thức nền tảng về mạng để có thể hiểu được mục tiêu cuối cùng của Network DevOps. + +Chúng ta có thể hiểu rằng NetDevOps hoặc Network DevOps là việc áp dụng những Nguyên tắc và Thực hành DevOps vào hệ thống mạng, ví dụ như áp dụng các công cụ tự động hóa và kiểm soát phiên bản để tạo, kiểm tra, giám sát và triển khai mạng. + +Chúng ta đã đề cập trước đây rằng DevOps phá vỡ sự độc lập giữa các nhóm làm việc và nếu chúng ta quan niệm Network DevOps là việc phải tự động hóa hế thống mạng, nếu nhóm quản lý mạng không thay đổi sang mô hình và quy trình tương tự thì họ sẽ trở thành điểm tắt nghẽn hoặc thậm chí có thể là điểm gây thất bại cho dự án. + +Sử dụng các nguyên tắc tự động hóa trong việc cung cấp, cấu hình, thử nghiệm, kiểm soát phiên bản, và triển khai là một khởi đầu tuyệt vời. Tự động hóa về tổng thể sẽ cho phép tăng tốc độ triển khai, sự ổn định của cơ sở hạ tầng mạng và liên tục cải tiến cũng như quy trình sẽ được chia sẻ trên nhiều môi trường sau khi chúng đã được kiểm tra. Ví dụ như một Network Policy đã được kiểm tra đầy đủ trên môi trường thử nghiệm có thể được nhanh chóng áp dụng ở một vị trí khác. Vì bản chất của việc này là chạy lại đoạn mã thay vì cấu hình thủ công như trước đây. +Bạn có thể tìm hiểu thêm về lợi ích của khái niệm này ở đây. [Network DevOps] (https://www.thousandeyes.com/learning/techtorials/network-devops) + +## Kiến thức cơ bản về mạng + +Hãy tạm quên khía cạnh về DevOps ở đây và chúng ta cần tìm hiểu nhanh một số kiến thức nền tảng về mạng máy tính. + +### Thiết bị mạng + +Nếu bạn thích học qua hình thức xem video, hãy xem các video sau đây: + +* [Network Devices - Hosts, IP Addresses, Networks - Networking Fundamentals - Lesson 1a (Thiết bị mạng - Máy chủ, Địa chỉ IP, Mạng - Cơ bản về Mạng - Bài 1a)] (https://www.youtube.com/watch?v=bj-Yfakjllc&list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi&index=1) +* [Network Devices - Hub, Bridge, Switch, Router - Networking Fundamentals - Lesson 1b (Thiết bị mạng - Hub, Cầu nối, Bộ chuyển mạch, Bộ định tuyến - Các nguyên tắc cơ bản về mạng - Bài 1b)] (https://www.youtube.com/watch?v=H7-NR3Q3BeI&list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi&index=2) + +** Máy chủ (Host) ** là bất kỳ thiết bị nào gửi hoặc nhận dữ liệu. + +! [] (Hình ảnh / Day21_Networking1.png) + +** Địa chỉ IP (IP Address) ** là danh tính của từng máy chủ. + +! [] (Hình ảnh / Day21_Networking2.png) + +** Mạng ** là hệ thống vận chuyển dữ liệu giữa các máy chủ. Nếu chúng ta không có mạng, chúng ta cần chuyển dữ liệu một cách thủ công! + +Một nhóm máy chủ hợp về mặt loogic cần các kết nối tương tự nhau. + +! [] (Hình ảnh / Day21_Networking3.png) + +** (Bộ chuyển mạch) Switches ** nhằm hỗ trợ giao tiếp ** _ trong _ ** mạng. Một Switch sẽ chuyển tiếp các gói dữ liệu giữa các máy chủ. + +- Mạng: Một nhóm các máy chủ được kết nối với nhau. +- Các máy chủ trên một mạng chia sẻ cùng một không gian địa chỉ IP. + +! [] (Hình ảnh / Day21_Networking4.png) + +** Bộ định tuyến (Router) ** nhằm giúp giao tiếp giữa các mạng. Như chúng ta đã nói trước đó, một switch hỗ trợ giao tiếp giữa các thiết bị trong cùng một mạng, trong khi đó một bộ định tuyến cho phép chúng ta kết nối các mạng lại với nhau. + +Một bộ định tuyến có thể cung cấp các tính năng kiểm soát lưu lượng (bảo mật, lọc, chuyển hướng). Ngày nay càng nhiều thiết bị chuyển mạch (switch) cũng cung cấp các chức năng này. + +Bộ định tuyến cần học thông tin về các mạng mà nó kết nối đến. Chúng được gọi đây là các tuyến đường, được lưu trong một bảng định tuyến. + +Bộ định tuyến có địa chỉ IP trong mạng (gọi là gateway) mà chúng được gắn vào. Địa chỉ IP này cũng sẽ là địa chỉ đích đến của mỗi máy chủ khi muốn truy cập ra khỏi mạng cục bộ của nó. + +Các bộ định tuyến sẽ tạo ra hệ thống có cấp bạc trong các mạng mà tôi đã đề cập trước đó. + +! [] (Hình ảnh / Day21_Networking5.png) + +## So sánh Bộ chuyển mạch với Bộ định tuyến + +** Định tuyến ** là quá trình di chuyển dữ liệu giữa các mạng. + +- Bộ định tuyến là một thiết bị có mục đích chính là xác định đường đi. + +** Chuyển mạch ** là quá trình di chuyển dữ liệu trong một mạng. + +- Switch là một thiết bị có mục đích chính là chuyển mạch. + +Đây chỉ là phần tổng quan cơ bản của hai thiết bị quan trọng nhất vì chúng ta biết rằng có nhiều thiết bị mạng khác nhau như: + +- Access Points (Các điểm truy cập) +- Firewalls (Tường lửa) +- Load Balancers (Thiết bị cân bằng tải) +- Layer 3 Switches (Bộ chuyển mạch lớp 3) +- IDS / IPS +- Proxies +- Virtual Switches (Bộ chuyển mạch ảo) +- Virtual Routers (Bộ định tuyến ảo) + +Tất cả các thiết bị trên về cơ bản vẫn sẽ thực hiện quá trình Định tuyến và / hoặc Chuyển mạch. + +Trong vài ngày tới, chúng ta sẽ tìm hiểu thêm về: + +- Mô hình OSI +- Giao thức mạng +- DNS (Hệ thống phân giải tên miền) +- NAT +- DHCP +- Mạng con + +## Tài nguyên + +* [Các nguyên tắc cơ bản về mạng] (https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi) +* [Toàn bộ khóa học Mạng máy tính] (https://www.youtube.com/watch?v=IPvYjXCsTg8) + +Hẹn gặp lại các bạn vào [Day22] (day22.md) From 414400ae192d42081a5af9d12aafb1c30d8ce07f Mon Sep 17 00:00:00 2001 From: Mau Date: Fri, 25 Nov 2022 01:01:21 +0900 Subject: [PATCH 3/9] vi added d17 --- 2022/vi/Days/day17.md | 86 +++++++++++++++++++++++++++++++++++++++++++ 2022/vi/README.md | 10 ++--- 2 files changed, 91 insertions(+), 5 deletions(-) create mode 100644 2022/vi/Days/day17.md diff --git a/2022/vi/Days/day17.md b/2022/vi/Days/day17.md new file mode 100644 index 0000000..0780bfe --- /dev/null +++ b/2022/vi/Days/day17.md @@ -0,0 +1,86 @@ +--- +title: "#90DaysOfDevOps - Text Editors - nano vs vim - Ngày 17" +published: false +description: 90DaysOfDevOps - Text Editors - nano vs vim +tags: "devops, 90daysofdevops, learning" +cover_image: null +canonical_url: null +id: 1048703 +--- + +## Text Editors - nano vs vim + +Phần lớn các hệ thống Linux của bạn sẽ là máy chủ và chúng sẽ không có GUI. Tôi cũng đã đề cập trong phần trước rằng Linux chủ yếu được tạo thành từ các tệp cấu hình, để thực hiện các thay đổi, bạn cần có khả năng chỉnh sửa các tệp cấu hình đó để quản lý hệ thống. + +Có rất nhiều tùy chọn ngoài kia nhưng tôi nghĩ có lẽ chúng ta nên đề cập đến hai trình soạn thảo văn bản trên terminal phổ biến nhất. Tôi đã sử dụng cả hai trình chỉnh sửa này và đối với tôi, tôi thấy `nano` dễ sử dụng hơn cho các thay đổi nhanh nhưng xét về các chức năng, `vim` là editor nổi trội hơn. + +### nano + +- Không có sẵn trên mọi hệ thống. +- Dễ để bắt đầu hơn + +Nếu bạn chạy `nano 90DaysOfDevOps.txt`, chúng ta sẽ có một tệp mới không có gì trong đó, từ đây chúng tôi có thể thêm văn bản của mình và hướng dẫn bên dưới là những gì chúng ta muốn thay đổi tệp đó. + +![](../../Days/Images/Day17_Linux1.png) + +Bây giờ chúng ta có thể sử dụng `control x + enter` và sau đó chạy `ls` để có thể thấy tệp văn bản mới của chúng ta. + +![](../../Days/Images/Day17_Linux2.png) + +Bây giờ chúng ta có thể chạy `cat` đối với tệp đó để đọc tệp của mình. Sau đó, chúng ta có thể sử dụng cùng `nano 90DaysOfDevOps.txt` đó để thêm văn bản bổ sung hoặc sửa đổi tệp của bạn. + +Đối với tôi, sử dụng nano là cực kỳ dễ dàng khi thực hiện các thay đổi nhỏ trên các tệp cấu hình. + +### vim + +Có thể coi đây là trình soạn thảo văn bản phổ biến nhất? Là anh em của trình soạn thảo văn bản UNIX vi từ năm 1976, chúng ta có rất nhiều chức năng với vim. + +- Được hỗ trợ trên hầu hết mọi bản phân phối Linux. +- Vô cùng đầy đủ! Bạn có thể tìm thấy một khóa học kéo dài 7 giờ chỉ bao gồm vim. + +Chúng ta có thể chuyển sang vim bằng lệnh `vim` hoặc nếu muốn chỉnh sửa tệp txt của mình, chúng ta có thể chạy lệnh `vim 90DaysOfDevOps.txt` nhưng trước tiên bạn sẽ thấy thiếu các menu trợ giúp ở phía dưới so với `nano` + +Câu hỏi đầu tiên có thể là "Làm cách nào để thoát vim?" đầu tiên là nhấn `escape` và nếu chúng ta không thực hiện bất kỳ thay đổi nào thì nhập `:q` + +![](../../Days/Images/Day17_Linux3.png) + +Bạn bắt đầu ở chế độ `normal`, có các chế độ `command, normal, visual, insert`, nếu muốn thêm văn bản, chúng ta sẽ cần chuyển từ `normal` sang `insert` bằng phím `i`, nếu bạn đã thêm/sửa văn bản và muốn lưu lại những thay đổi này, nhấm `escape` và sau đó là `:wq` + +![](../../Days/Images/Day17_Linux4.png) + +![](../../Days/Images/Day17_Linux5.png) + +Bạn có thể xác nhận bằng lệnh `cat` để kiểm tra xem bạn đã lưu các thay đổi đó chưa. + +Có một số chức năng thú vị của vim cho phép bạn thực hiện các tác vụ đơn giản rất nhanh nếu bạn biết các phím tắt, bản thân việc đó có thể được coi là một bài học. Giả sử chúng ta đã thêm một danh sách các từ được lặp lại và bây giờ chúng ta cần thay đổi danh sách đó, có thể đó là tệp cấu hình và tên mạng đã được lặp lại nhiều lần. Chúng ta muốn nhanh chóng thay đổi điều tên mạng cho tệp cấu hình. Tôi đang sử dụng từ "Day" cho ví dụ này. + +![](../../Days/Images/Day17_Linux6.png) + +Bây giờ chúng ta muốn thay thế từ đó bằng 90DaysOfDevOps, có thể thực hiện việc này bằng cách nhấn `ESC` và nhập `:%s/Day/90DaysOfDevOps` + +![](../../Days/Images/Day17_Linux7.png) + +Kết quả khi bạn nhấn enter là từ "Day" được thay thế bằng "90DaysOfDevOps". + +![](../../Days/Images/Day17_Linux8.png) + +Copy và Paste thực sự khiến tôi mở rộng tầm mắt. Copy không phải là copy mà là yank. Chúng ta có thể sao chép bằng `yy` trên bàn phím ở chế độ `normal`. `p` đẻ paste trên cùng một dòng, `P` paste trên một dòng mới. + +Bạn cũng có thể xóa những dòng này bằng cách chọn số dòng bạn muốn xóa, sau đó là `dd` + +Cũng có thể đôi khi bạn sẽ cần tìm kiếm trong một tệp, chúng ta có thể sử dụng `grep` như đã đề cập trong ngày hôm trước nhưng cũng có thể sử dụng vim. Sử dụng `/word` và thao tác này sẽ tìm kết quả khớp đầu tiên, để chuyển qua phần tiếp theo, bạn sẽ sử dụng phím `n`, v.v. + +Đối với vim, những điều này thậm chí còn chưa phải là giớt thiệu qua về công cụ này. Lời khuyên mà tôi có thể đưa ra là hãy bắt tay vào sử dụng vim bất cứ khi nào có thể. + +Một câu hỏi phỏng vấn phổ biến là trình soạn thảo văn bản yêu thích của bạn trong Linux là gì và tôi sẽ đảm bảo rằng bạn có ít nhất kiến ​​​​thức này về cả hai trình soạn thảo trên để có thể trả lời, nano là một câu trả lời không tệ vì nó đơn giản. Ít nhất thì bạn cũng thể hiện được khả năng hiểu trình soạn thảo văn bản là gì. Nhưng hãy thực hành với chúng để thành thạo hơn. + +Một con trỏ khác để điều hướng trong vim, chúng ta có thể sử dụng `H,J,K,L` cũng như các phím mũi tên của mình. + +## Resources + +- [Vim in 100 Seconds](https://www.youtube.com/watch?v=-txKSRn0qeA) +- [Vim tutorial](https://www.youtube.com/watch?v=IiwGbcd8S7I) +- [Learn the Linux Fundamentals - Part 1](https://www.youtube.com/watch?v=kPylihJRG70) +- [Linux for hackers (don't worry you don't need to be a hacker!)](https://www.youtube.com/watch?v=VbEx7B_PTOE) + +Hẹn gặp lại vào [ngày 18](day18.md) diff --git a/2022/vi/README.md b/2022/vi/README.md index e608073..7de759f 100644 --- a/2022/vi/README.md +++ b/2022/vi/README.md @@ -52,11 +52,11 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M ### Kiến thức về mạng (Network) -- [✔️] 🌐 21 > [The Big Picture: DevOps and Networking](Days/day21.md) -- [✔️] 🌐 22 > [The OSI Model - The 7 Layers](Days/day22.md) -- [✔️] 🌐 23 > [Network Protocols](Days/day23.md) -- [✔️] 🌐 24 > [Network Automation](Days/day24.md) -- [✔️] 🌐 25 > [Python for Network Automation](Days/day25.md) +- [✔️] 🌐 21 > [Bức tranh toàn cảnh: DevOps và Mạng máy tính](Days/day21.md) +- [✔️] 🌐 22 > [Mô hình OSI - 7 lớp mạng](Days/day22.md) +- [✔️] 🌐 23 > [Giao thức mạng](Days/day23.md) +- [✔️] 🌐 24 > [Tự động hoá mạng máy tính](Days/day24.md) +- [✔️] 🌐 25 > [Python cho tự động hoá mạng máy tính](Days/day25.md) - [✔️] 🌐 26 > [Building our Lab](Days/day26.md) - [✔️] 🌐 27 > [Getting Hands-On with Python & Network](Days/day27.md) From cea9162ea8b68c6f187f25ade9fb4f27cd264eef Mon Sep 17 00:00:00 2001 From: Linh-An Date: Thu, 24 Nov 2022 22:49:35 +0000 Subject: [PATCH 4/9] Update day21.md Fix links and images --- 2022/vi/Days/day21.md | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/2022/vi/Days/day21.md b/2022/vi/Days/day21.md index e469966..ed1ee67 100644 --- a/2022/vi/Days/day21.md +++ b/2022/vi/Days/day21.md @@ -44,24 +44,24 @@ Nếu bạn thích học qua hình thức xem video, hãy xem các video sau đ ** Máy chủ (Host) ** là bất kỳ thiết bị nào gửi hoặc nhận dữ liệu. -! [] (Hình ảnh / Day21_Networking1.png) +![](../../Days/Images/Day21_Networking1.png) ** Địa chỉ IP (IP Address) ** là danh tính của từng máy chủ. -! [] (Hình ảnh / Day21_Networking2.png) +![](../../Days/Images/Day21_Networking2.png) ** Mạng ** là hệ thống vận chuyển dữ liệu giữa các máy chủ. Nếu chúng ta không có mạng, chúng ta cần chuyển dữ liệu một cách thủ công! Một nhóm máy chủ hợp về mặt loogic cần các kết nối tương tự nhau. -! [] (Hình ảnh / Day21_Networking3.png) +![](../../Days/Images/Day21_Networking3.png) ** (Bộ chuyển mạch) Switches ** nhằm hỗ trợ giao tiếp ** _ trong _ ** mạng. Một Switch sẽ chuyển tiếp các gói dữ liệu giữa các máy chủ. - Mạng: Một nhóm các máy chủ được kết nối với nhau. - Các máy chủ trên một mạng chia sẻ cùng một không gian địa chỉ IP. -! [] (Hình ảnh / Day21_Networking4.png) +![](../../Days/Images/Day21_Networking4.png) ** Bộ định tuyến (Router) ** nhằm giúp giao tiếp giữa các mạng. Như chúng ta đã nói trước đó, một switch hỗ trợ giao tiếp giữa các thiết bị trong cùng một mạng, trong khi đó một bộ định tuyến cho phép chúng ta kết nối các mạng lại với nhau. @@ -73,7 +73,7 @@ Bộ định tuyến có địa chỉ IP trong mạng (gọi là gateway) mà ch Các bộ định tuyến sẽ tạo ra hệ thống có cấp bạc trong các mạng mà tôi đã đề cập trước đó. -! [] (Hình ảnh / Day21_Networking5.png) +![](../../Days/Images/Day21_Networking5.png) ## So sánh Bộ chuyển mạch với Bộ định tuyến @@ -109,7 +109,7 @@ Trong vài ngày tới, chúng ta sẽ tìm hiểu thêm về: ## Tài nguyên -* [Các nguyên tắc cơ bản về mạng] (https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi) -* [Toàn bộ khóa học Mạng máy tính] (https://www.youtube.com/watch?v=IPvYjXCsTg8) +* [Các nguyên tắc cơ bản về mạng](https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi) +* [Toàn bộ khóa học Mạng máy tính](https://www.youtube.com/watch?v=IPvYjXCsTg8) -Hẹn gặp lại các bạn vào [Day22] (day22.md) +Hẹn gặp lại các bạn vào [Day22](day22.md) From c1db3f8d093c83f1b55e440c65f7a61436cb3b1d Mon Sep 17 00:00:00 2001 From: Linh-An Date: Thu, 24 Nov 2022 23:07:23 +0000 Subject: [PATCH 5/9] Update day21.md Fix markdown syntaxes and some translation texts --- 2022/vi/Days/day21.md | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/2022/vi/Days/day21.md b/2022/vi/Days/day21.md index ed1ee67..b9628b7 100644 --- a/2022/vi/Days/day21.md +++ b/2022/vi/Days/day21.md @@ -10,7 +10,7 @@ id: 1048761 ## Bức tranh toàn cảnh: DevOps và Mạng máy tính -Tương tự như trong các phần khác, tôi sẽ sử dụng các tài liệu hướng dẫn miễn phí và nguồn mở cùng với các nội dung từ những người khác. Trong phần này, phần lớn nội dung được lấy từ trang [Mạng thực tiễn (Practical Networking)] (https://www.practicalnetworking.net/) và sê-ri [Các nguyên tắc cơ bản của Mạng máy tính (Networking Fundamentals series)] (https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi). Dù đã được đề cập trong mục "Tài nguyên tham khảo" nhưng cũng cần thiết để nhấn mạnh tài liệu trên bởi vì từ quan điểm của cộng đồng, tôi đã tận dụng khóa học này để giúp bản thân hiểu thêm về các lĩnh vực cụ thể của công nghệ. Kho lưu trữ này được dùng để chứa các ghi chú của tôi với hy vọng mọi người có thể tìm thấy được ích lợi từ nó cũng như từ các tài nguyên được liệt kê. +Tương tự như trong các phần khác, tôi sẽ sử dụng các tài liệu hướng dẫn miễn phí và nguồn mở cùng với các nội dung từ những người khác. Trong phần này, phần lớn nội dung được lấy từ trang [Practical Networking](https://www.practicalnetworking.net/) và sê-ri [Các nguyên tắc cơ bản của Mạng máy tính-Networking Fundamentals series](https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi). Dù đã được đề cập trong mục "Tài nguyên tham khảo" nhưng cũng cần thiết để nhấn mạnh tài liệu trên bởi vì từ quan điểm của cộng đồng, tôi đã tận dụng khóa học này để giúp bản thân hiểu thêm về các lĩnh vực cụ thể của công nghệ. Kho lưu trữ này được dùng để chứa các ghi chú của tôi với hy vọng mọi người có thể tìm thấy được ích lợi từ nó cũng như từ các tài nguyên được liệt kê. Chào mừng bạn đến với Ngày học thứ 21! Chúng ta sẽ tìm hiểu về mạng máy tính trong 7 ngày tới, DevOps và Mạng máy tính là những chủ đề bao trùm của phần này nhưng chúng ta cũng sẽ cần phải đi tìm hiểu một số kiến thức nền tảng của mạng máy tính. @@ -29,7 +29,7 @@ Chúng ta có thể hiểu rằng NetDevOps hoặc Network DevOps là việc áp Chúng ta đã đề cập trước đây rằng DevOps phá vỡ sự độc lập giữa các nhóm làm việc và nếu chúng ta quan niệm Network DevOps là việc phải tự động hóa hế thống mạng, nếu nhóm quản lý mạng không thay đổi sang mô hình và quy trình tương tự thì họ sẽ trở thành điểm tắt nghẽn hoặc thậm chí có thể là điểm gây thất bại cho dự án. Sử dụng các nguyên tắc tự động hóa trong việc cung cấp, cấu hình, thử nghiệm, kiểm soát phiên bản, và triển khai là một khởi đầu tuyệt vời. Tự động hóa về tổng thể sẽ cho phép tăng tốc độ triển khai, sự ổn định của cơ sở hạ tầng mạng và liên tục cải tiến cũng như quy trình sẽ được chia sẻ trên nhiều môi trường sau khi chúng đã được kiểm tra. Ví dụ như một Network Policy đã được kiểm tra đầy đủ trên môi trường thử nghiệm có thể được nhanh chóng áp dụng ở một vị trí khác. Vì bản chất của việc này là chạy lại đoạn mã thay vì cấu hình thủ công như trước đây. -Bạn có thể tìm hiểu thêm về lợi ích của khái niệm này ở đây. [Network DevOps] (https://www.thousandeyes.com/learning/techtorials/network-devops) +Bạn có thể tìm hiểu thêm về lợi ích của khái niệm này ở đây. [Network DevOps](https://www.thousandeyes.com/learning/techtorials/network-devops) ## Kiến thức cơ bản về mạng @@ -39,31 +39,31 @@ Hãy tạm quên khía cạnh về DevOps ở đây và chúng ta cần tìm hi Nếu bạn thích học qua hình thức xem video, hãy xem các video sau đây: -* [Network Devices - Hosts, IP Addresses, Networks - Networking Fundamentals - Lesson 1a (Thiết bị mạng - Máy chủ, Địa chỉ IP, Mạng - Cơ bản về Mạng - Bài 1a)] (https://www.youtube.com/watch?v=bj-Yfakjllc&list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi&index=1) -* [Network Devices - Hub, Bridge, Switch, Router - Networking Fundamentals - Lesson 1b (Thiết bị mạng - Hub, Cầu nối, Bộ chuyển mạch, Bộ định tuyến - Các nguyên tắc cơ bản về mạng - Bài 1b)] (https://www.youtube.com/watch?v=H7-NR3Q3BeI&list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi&index=2) +* [Network Devices - Hosts, IP Addresses, Networks - Networking Fundamentals - Lesson 1a](https://www.youtube.com/watch?v=bj-Yfakjllc&list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi&index=1) +* [Network Devices - Hub, Bridge, Switch, Router - Networking Fundamentals - Lesson 1b](https://www.youtube.com/watch?v=H7-NR3Q3BeI&list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi&index=2) -** Máy chủ (Host) ** là bất kỳ thiết bị nào gửi hoặc nhận dữ liệu. +**Máy chủ (Host)** là bất kỳ thiết bị nào gửi hoặc nhận dữ liệu. ![](../../Days/Images/Day21_Networking1.png) -** Địa chỉ IP (IP Address) ** là danh tính của từng máy chủ. +**Địa chỉ IP (IP Address)** là danh tính của từng máy chủ. ![](../../Days/Images/Day21_Networking2.png) -** Mạng ** là hệ thống vận chuyển dữ liệu giữa các máy chủ. Nếu chúng ta không có mạng, chúng ta cần chuyển dữ liệu một cách thủ công! +**Mạng** là hệ thống vận chuyển dữ liệu giữa các máy chủ. Nếu chúng ta không có mạng, chúng ta cần chuyển dữ liệu một cách thủ công! Một nhóm máy chủ hợp về mặt loogic cần các kết nối tương tự nhau. ![](../../Days/Images/Day21_Networking3.png) -** (Bộ chuyển mạch) Switches ** nhằm hỗ trợ giao tiếp ** _ trong _ ** mạng. Một Switch sẽ chuyển tiếp các gói dữ liệu giữa các máy chủ. +**(Bộ chuyển mạch) Switch** nhằm hỗ trợ giao tiếp **_bên trong_** một mạng. Một Switch sẽ chuyển tiếp các gói dữ liệu giữa các máy chủ. - Mạng: Một nhóm các máy chủ được kết nối với nhau. - Các máy chủ trên một mạng chia sẻ cùng một không gian địa chỉ IP. ![](../../Days/Images/Day21_Networking4.png) -** Bộ định tuyến (Router) ** nhằm giúp giao tiếp giữa các mạng. Như chúng ta đã nói trước đó, một switch hỗ trợ giao tiếp giữa các thiết bị trong cùng một mạng, trong khi đó một bộ định tuyến cho phép chúng ta kết nối các mạng lại với nhau. +**Bộ định tuyến (Router)** nhằm giúp giao tiếp giữa các mạng. Như chúng ta đã nói trước đó, một switch hỗ trợ giao tiếp giữa các thiết bị trong cùng một mạng, trong khi đó một bộ định tuyến cho phép chúng ta kết nối các mạng lại với nhau. Một bộ định tuyến có thể cung cấp các tính năng kiểm soát lưu lượng (bảo mật, lọc, chuyển hướng). Ngày nay càng nhiều thiết bị chuyển mạch (switch) cũng cung cấp các chức năng này. @@ -77,13 +77,13 @@ Các bộ định tuyến sẽ tạo ra hệ thống có cấp bạc trong các ## So sánh Bộ chuyển mạch với Bộ định tuyến -** Định tuyến ** là quá trình di chuyển dữ liệu giữa các mạng. +**Định tuyến** là quá trình xác định đường đi dữ liệu giữa các mạng. -- Bộ định tuyến là một thiết bị có mục đích chính là xác định đường đi. +- Một Router là một thiết bị có mục đích chính là xác định đường đi. -** Chuyển mạch ** là quá trình di chuyển dữ liệu trong một mạng. +**Chuyển mạch** là quá trình di chuyển dữ liệu trong một mạng. -- Switch là một thiết bị có mục đích chính là chuyển mạch. +- Một switch là một thiết bị có mục đích chính là chuyển mạch. Đây chỉ là phần tổng quan cơ bản của hai thiết bị quan trọng nhất vì chúng ta biết rằng có nhiều thiết bị mạng khác nhau như: From bc5a23ea536a768b5c530a37852c69ca8e3be485 Mon Sep 17 00:00:00 2001 From: Mau Date: Tue, 29 Nov 2022 16:45:38 +0900 Subject: [PATCH 6/9] day21: improved translation --- 2022/vi/Days/day21.md | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/2022/vi/Days/day21.md b/2022/vi/Days/day21.md index b9628b7..31252f5 100644 --- a/2022/vi/Days/day21.md +++ b/2022/vi/Days/day21.md @@ -10,14 +10,13 @@ id: 1048761 ## Bức tranh toàn cảnh: DevOps và Mạng máy tính -Tương tự như trong các phần khác, tôi sẽ sử dụng các tài liệu hướng dẫn miễn phí và nguồn mở cùng với các nội dung từ những người khác. Trong phần này, phần lớn nội dung được lấy từ trang [Practical Networking](https://www.practicalnetworking.net/) và sê-ri [Các nguyên tắc cơ bản của Mạng máy tính-Networking Fundamentals series](https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi). Dù đã được đề cập trong mục "Tài nguyên tham khảo" nhưng cũng cần thiết để nhấn mạnh tài liệu trên bởi vì từ quan điểm của cộng đồng, tôi đã tận dụng khóa học này để giúp bản thân hiểu thêm về các lĩnh vực cụ thể của công nghệ. Kho lưu trữ này được dùng để chứa các ghi chú của tôi với hy vọng mọi người có thể tìm thấy được ích lợi từ nó cũng như từ các tài nguyên được liệt kê. +Tương tự như những tuần trước, tôi sẽ sử dụng các tài liệu hướng dẫn miễn phí và nguồn mở. Trong phần này, phần lớn nội dung được lấy từ trang [Practical Networking](https://www.practicalnetworking.net/) và sê-ri [Các nguyên tắc cơ bản của Mạng máy tính - Networking Fundamentals series](https://www.youtube.com/playlist?list=PLIFyRwBY_4bRLmKfP1KnZA6rZbRHtxmXi). Dù đã được đề cập trong mục "Tài nguyên tham khảo" nhưng cũng cần thiết để nhấn mạnh tài liệu trên bởi vì từ quan điểm của cộng đồng, tôi đã tận dụng các khóa học này để giúp bản thân hiểu thêm về các lĩnh vực cụ thể. Kho lưu trữ này được dùng để chứa các ghi chú của tôi với hy vọng mọi người có thể thấy nó hữu ích cũng như các nguồn tài nguyên được liệt kê. -Chào mừng bạn đến với Ngày học thứ 21! Chúng ta sẽ tìm hiểu về mạng máy tính trong 7 ngày tới, DevOps và Mạng máy tính là những chủ đề bao trùm của phần này nhưng chúng ta cũng sẽ cần phải đi tìm hiểu một số kiến thức nền tảng của mạng máy tính. +Chào mừng bạn đến với Ngày học thứ 21! Chúng ta sẽ tìm hiểu về mạng máy tính trong 7 ngày tới, DevOps và Mạng máy tính là những chủ đề chính của phần này nhưng chúng ta cũng sẽ cần phải tìm hiểu một số kiến thức nền tảng của mạng máy tính. -Như tôi đã nói trước đây DevOps là sự thay đổi về văn hóa và quy trình trong quá trình phát triển phần mềm. Những thay đổi này có thể là về Virtual Machines, Containers, hoặc Kubernetes như đã thảo luận trước đây, hoặc cũng có thể là ở hệ thống mạng. Nếu chúng ta áp dụng các nguyên tắc của DevOps vào cơ sở hạ tầng vốn đã bao gồm hệ thống mạng, ở khía cạnh của một DevOps, bạn sẽ cần tìm hiểu về mạng máy tính bao gồm cấu trúc, lớp, và công cụ mạng. - -Chúng ta có thể lý luận rằng các thiết bị trong mạng đã được cấu hình dựa trên code (infrastructure as code) và mọi thứ đều đã được tự động hóa. Tuy nhiên, để đạt được điều này, ít nhất chúng ta phải hiểu rõ về những thứ mà mình muốn nó làm việc tự động. +Như tôi đã nói trước đây, DevOps là sự thay đổi về văn hóa và quy trình trong quá trình phát triển phần mềm. Những thay đổi này có thể là về Virtual Machines, Containers, hoặc Kubernetes, hoặc cũng có thể là ở hệ thống mạng. Nếu chúng ta áp dụng các nguyên tắc của DevOps vào cơ sở hạ tầng vốn đã bao gồm hệ thống mạng, ở khía cạnh của một DevOps, bạn sẽ cần tìm hiểu về mạng máy tính bao gồm cấu trúc, lớp, và công cụ mạng. +Tôi cho rằng chúng ta nên cấu hình các thiết bị trong mạng đã bằng code (infrastructure as code) và mọi thứ nên được tự động hóa như những máy ảo của chúng ta. Tuy nhiên, để đạt được điều này, ít nhất chúng ta phải hiểu rõ về những thứ mà mình muốn nó làm việc tự động. ### NetDevOps là gì | DevOps cho hệ thống mạng? Bạn cũng có thể nghe thấy thuật ngữ Network DevOps hoặc NetDevOps. Có thể bạn đã là một kỹ sư mạng và có kiến thức vững chắc về các thành phần trong hệ thống mạng bên trong cơ sở hạ tầng của bạn. Bạn hiểu được các thành phần như DHCP, DNS, NAT, v.v. Bạn cũng sẽ hiểu rõ về phần cứng và công nghệ "điều khiển mạng qua phần mềm" (software-defined networking). @@ -46,13 +45,13 @@ Nếu bạn thích học qua hình thức xem video, hãy xem các video sau đ ![](../../Days/Images/Day21_Networking1.png) -**Địa chỉ IP (IP Address)** là danh tính của từng máy chủ. +**Địa chỉ IP (IP Address)** là định danh của từng máy chủ. ![](../../Days/Images/Day21_Networking2.png) **Mạng** là hệ thống vận chuyển dữ liệu giữa các máy chủ. Nếu chúng ta không có mạng, chúng ta cần chuyển dữ liệu một cách thủ công! -Một nhóm máy chủ hợp về mặt loogic cần các kết nối tương tự nhau. +Một nhóm máy chủ logic yêu cầu kết nối tương tự nhau. ![](../../Days/Images/Day21_Networking3.png) @@ -71,7 +70,7 @@ Bộ định tuyến cần học thông tin về các mạng mà nó kết nối Bộ định tuyến có địa chỉ IP trong mạng (gọi là gateway) mà chúng được gắn vào. Địa chỉ IP này cũng sẽ là địa chỉ đích đến của mỗi máy chủ khi muốn truy cập ra khỏi mạng cục bộ của nó. -Các bộ định tuyến sẽ tạo ra hệ thống có cấp bạc trong các mạng mà tôi đã đề cập trước đó. +Các bộ định tuyến sẽ tạo ra hệ thống phân cấp trong các mạng mà tôi đã đề cập trước đó. ![](../../Days/Images/Day21_Networking5.png) From e6701ca390267473c3a7b497360ca8aadcc250f3 Mon Sep 17 00:00:00 2001 From: Mau Date: Wed, 30 Nov 2022 00:33:59 +0900 Subject: [PATCH 7/9] added d18 --- 2022/vi/Days/day18.md | 213 ++++++++++++++++++++++++++++++++++++++++++ 2022/vi/README.md | 2 +- 2 files changed, 214 insertions(+), 1 deletion(-) create mode 100644 2022/vi/Days/day18.md diff --git a/2022/vi/Days/day18.md b/2022/vi/Days/day18.md new file mode 100644 index 0000000..ec0f0a6 --- /dev/null +++ b/2022/vi/Days/day18.md @@ -0,0 +1,213 @@ +--- +title: "#90DaysOfDevOps - SSH & Máy chủ Web - Day 18" +published: false +description: 90DaysOfDevOps - SSH & Máy chủ Web +tags: "devops, 90daysofdevops, learning" +cover_image: null +canonical_url: null +id: 1048733 +--- + +## SSH & Máy chủ Web + +Như đã đề cập một vài lần, có thể bạn sẽ cần quản lý rất nhiều máy chủ Linux từ xa. Chính vì điều này, bạn sẽ cần đảm bảo rằng kết nối của mình với các máy chủ này được an toàn. Trong ngày hôm nay, chúng ta sẽ đề cập đến một số kiến ​​thức cơ bản về SSH để giúp bạn tạo đường hầm an toàn (secure tunnel) đến các hệ thống của mình từ xa. + +- Thiết lập kết nối với SSH +- Chuyển tập tin +- Tạo khóa riêng của bạn + +### Giới thiệu SSH + +- Shell an toàn (secure shell) +- Giao thức mạng +- Cho phép liên lạc an toàn +- Có thể bảo mật bất kỳ dịch vụ mạng nào +- Thường được sử dụng với truy cập dòng lệnh (CLI) từ xa + +Trong môi trường của chúng ta, nếu bạn đã theo dõi, chúng ta đã sử dụng SSH nhểng tất cả điều này đã được cấu hình và tự động hóa thông qua vagrant, vì vậy chúng ta chỉ phải chạy `vagrant ssh` là đã có thể truy cập vào máy ảo từ xa của mình. + +Nếu máy chủ của chúng ta không nằm trên cùng hệ thống và ở rất xa với máy trạm, có thể trên môi trường cloud hoặc trên truvà tâm tâm dữ liệu và chỉ có thể truy cập qua Internet, chúng ta sẽ cần một cách an toàn để có thể truy cập vào hệ thống và quản lý nó. + +SSH cung cấp một đường hầm an toàn giữa máy khách và máy chủ để hạn chế sự can thiệp của các tác nhân xấu. + +![](../../Days/Images/Day18_Linux1.png) + +Máy chủ có dịch vụ SSH luôn chạy và nghe trên cổng TCP cụ thể (thường là 22). + +Nếu kết nối với thông tin đăng nhập chính xác hoặc một khoá SSH hợp lệ, chúng ta sẽ có quyền truy cập vào máy chủ đó. + +### Thêm bộ điều hợp mạng bắc cầu (bridged network adapter) vào hệ thống + +Để thực hiện những điều này với Virtual Box VM hiện tại, chúng ta cần thêm bộ điều hợp mạng bắc cầu vào máy của mình. + +Tắt nguồn máy ảo của bạn, nhấp chuột phải vào máy của bạn trong Virtual Box và chọn cài đặt. + +![](../../Days/Images/Day18_Linux2.png) + +Bây giờ hãy bật lại máy ảo và bây giờ nó sẽ có một địa chỉ IP trên máy cục bộ của chúng ta. Bạn có thể xác nhận điều này bằng lệnh `IP addr`. + +### Xác nhận máy chủ SSH đang chạy + +Chúng ta biết SSH đã được định cấu hình trên máy vì chúng ta đã sử dụng nó với vagrant nhưng cũng có thể xác nhận bằng cách chạy + +`sudo systemctl status ssh` + +![](../../Days/Images/Day18_Linux3.png) + +Nếu hệ thống của bạn không có server SSH thì bạn có thể cài đặt nó bằng lệnh `sudo apt install OpenSSH-server` + +Sau đó, bạn muốn đảm bảo nếu tường lửa đang chạy, nó sẽ cho phép chúng ta kết nối tới server SSH. Việc này có thể được thực hiện với lệnh `sudo ufw allow ssh`, điều này không bắt buộc đối với cấu hình của chúng ta vì nó đã được tự động hóa với việc khi chúng ta khởi tạo bằng vagrant. + +### Truy cập từ xa - Mật khẩu SSH + +Bây giờ, chúng ta đã có server SSH nghe trên cổng 22 cho mọi yêu cầu kết nối đến và chúng ta đã thêm mạng bắc cầu, chúng ta có thể sử dụng PuTTY hoặc ứng dụng SSH client trên máy cục bộ của mình để kết nối với hệ thống bằng SSH. + +[# Hướng dẫn cài đặt PuTTy](https://www.cuit.columbia.edu/putty). + +![](../../Days/Images/Day18_Linux4.png) + +Sau đó nhấn mở, nếu đây là lần đầu tiên bạn kết nối với hệ thống này qua địa chỉ IP này, bạn sẽ nhận được cảnh báo này. Vì biết đây là hệ thống của chính mình nên bạn có thể chọn có. + +![](../../Days/Images/Day18_Linux5.png) + +Sau đó, chúng ta được yêu cầu nhập tên người dùng (vagrant) và mật khẩu (mật khẩu mặc định - vagrant). Bên dưới, bạn sẽ thấy chúng ta hiện đang sử dụng ứng dụng SSH client (Putty) để kết nối với máy ảo của mình bằng tên người dùng và mật khẩu. + +![](../../Days/Images/Day18_Linux6.png) + +Ở giai đoạn này, chúng ta được kết nối với VM từ máy khách từ xa và chúng ta có thể thực hiện các lệnh trên hệ thống của mình. + +### Truy cập từ xa - Khóa SSH + +Trên đây là cách dễ dàng nhất để có quyền truy cập vào hệ thống của bạn, tuy nhiên nó vẫn dựa vào tên người dùng và mật khẩu. Nếu một kẻ xấu nào đó có quyền truy cập những thông tin này cộng với địa chỉ công khai hoặc IP của hệ thống của bạn thì nó có thể dễ dàng bị xâm phạm. Chính vì lý do đó, khoá SSH được cho là giải pháp tốt hơn. + +Khóa SSH có nghĩa là chúng ta cung cấp một cặp khóa để cả máy khách và máy chủ đều biết rằng đây là đối phương là thiết bị đáng tin cậy. + +Tạo một khóa rất dễ dàng. Trên máy cục bộ của chúng ta (Windows) chúng ta có thể sử dụng lệnh sau nếu bạn đã cài đặt ssh-client và tôi tin rằng câu lệnh tương tự sẽ hoạt động trên các hệ điều hành khác. + +`ssh-keygen -t ed25519` + +Tôi sẽ không đi sâu vào `ed25519` là gì và có nghĩa như thế nào nhưng bạn có thể tự tìm kiếm nếu muốn hiểu thêm về [mã hoá](https://en.wikipedia.org/wiki/EdDSA#Ed25519) + +![](../../Days/Images/Day18_Linux7.png) + +Chúng ta đã tạo khóa SSH được lưu trữ trong `C:\Users\micha/.ssh/` + +Nhưng để kết nối với máy ảo Linux của chúng ta, chúng ta cần sao chép khóa bằng lệnh `ssh-copy-id vagrant@192.168.169.135` + +Tôi đã sử dụng Powershell để tạo khóa trên máy khách Windows của mình nhưng không có `ssh-copy-id` ở đây. Có nhiều cách để bạn có thể thực hiện việc này trên Windows và chỉ cần tìm kiếm trên Google bạn sẽ có một giải pháp thay thế, còn tôi thì chỉ cần sử dụng git bash trên máy Windows của tôi để tạo một bản sao. + +![](Hình ảnh/Day18_Linux8.png) + +Bây giờ, chúng ta có thể quay lại Powershell để kiểm tra xem kết nối của chúng ta hiện có hoạt động với Khóa SSH mà không cần mật khẩu hay không. + +`ssh vagrant@192.168.169.135` + +![](../../Days/Images/Day18_Linux9.png) + +Chúng ta có thể nâng cao tính bảo mật hơn nữa nếu cần bằng cách sử dụng cụm mật khẩu (passphrase). Chúng ta cũng có thể tiến thêm một bước nữa khi không cho phép kết nối bằng mật khẩu, có nghĩa là chỉ cho phép kết nối thông qua cặp khóa. Bạn có thể thực hiện điều này trong tệp cấu hình dưới đây + +`sudo nano /etc/ssh/sshd_config` + +Có một dòng là `PasswordAuthentication yes` và nó đang bị comment với ký tự `#` ở đầu dóng. Bạn nên xoá ký tự này và thay đổi yes thành no, lưu tệp cấu hình và cuối cùng là khởi động lại dịch vụ SSH với `sudo systemctl reload sshd` + +## Thiết lập Máy chủ Web + +Không liên quan cụ thể đến những gì chúng ta vừa thực hiện với SSH ở trên nhưng tôi muốn bao gồm bước này vì đây lại là một cài đặt khác mà bạn có thể thấy hơi khó khăn nhưng thực sự không khó đến như vậy. + +Chúng ta đã có máy ảo Linux và sẽ thêm một máy chủ web apache để có thể host một trang web đơn giản và nó có thể phục vụ các client trong mạng nội bộ của chúng ta. Lưu ý rằng trang web này sẽ không thể truy cập được từ Internet, điều này là có thể nhưng nó sẽ không được đề cập trong bài viết này. + +Bạn cũng có thể thấy stack này được gọi là LAMP stack. + +- **L**inux: Hệ điều hành +- **A**pache: Máy chủ web +- **m**ySQL: Cơ sở dữ liệu +- **P**HP: Ngôn ngữ lập trình + +### Apache2 + +Apache2 là một máy chủ HTTP mã nguồn mở. Chúng ta có thể cài đặt apache2 với câu lệnh sau + +`sudo apt-get install apache2` + +Để xác nhận rằng apache2 đã được cài đặt một cách chính xác, chúng ta có thể chạy `sudo service apache2 restart` + +Sau đó, sử dụng địa chỉ mạng bắc cầu từ phần trên, mở trình duyệt và truy cập địa chỉ đó. Địa chỉ của tôi là `http://192.168.169.135/` + +![](../../Days/Images/Day18_Linux10.png) + +### mySQL + +MySQL là một cơ sở dữ liệu được sử dụng để lưu trữ dữ liệu cho trang web đơn giản của mình. Để cài đặt MySQL, chúng ta nên sử dụng lệnh sau `sudo apt-get install mysql-server` + +### PHP + +PHP là ngôn ngữ kịch bản phía máy chủ (server-side scripting language), chúng ta sẽ sử dụng ngôn ngữ này để tương tác với cơ sở dữ liệu MySQL. + +Thay đổi cấu hình đầu tiên mà chúng ta muốn thực hiện với apache là thay vì file index.html, chúng ta muốn nó sử dụng index.php. + +Chúng ta sử dụng lệnh `sudo nano /etc/apache2/mods-enabled/dir.conf` và chuyển index.php lên mục đầu tiên trong danh sách. + +![](../../Days/Images/Day18_Linux11.png) + +Khởi động lại dịch vụ apache2 `sudo systemctl restart apache2` + +Bây giờ, hãy xác nhận rằng hệ thống của chúng ta được cấu hình đúng cho PHP. Tạo tệp sau bằng cách sử dụng lệnh này, thao tác này sẽ mở một tệp trống ở định dạng nano. + +`sudo nano /var/www/html/90Days.php` + +Sau đó sao chép phần sau, sử dụng control + x để thoát và lưu lại tệp của bạn. + +``` + +``` + +Bây giờ, hãy điều truy cập vào IP máy ảo Linux của bạn với 90Days.php ở cuối URL. `http://192.168.169.135/90Days.php` bạn sẽ thấy tương tự như bên dưới nếu PHP được cấu hình chính xác. + +![](../../Days/Images/Day18_Linux12.png) + +### Cài đặt WordPress + +Sau đó, tôi đã xem qua hướng dẫn này cài đặt WordPress trên LAMP stack của chúng ta, một số lệnh sẽ có ở bên dưới nếu không được đề cập tới trong hướng dẫn ["cách cài đặt WordPress trên Ubuntu với LAMP"](https://blog.ssdnodes.com/blog/how-to-install-wordpress-on-ubuntu-18-04-with-lamp-tutorial/) + +`sudo mysql -u root -p` + +`CREATE DATABASE wordpressdb;` + +`CREATE USER 'admin-user'@'localhost' IDENTIFIED BY 'password';` + +`GRANT ALL PRIVILEGES ON wordpressdb.* TO 'admin-user'@'localhost';` + +`FLUSH PRIVILEGES;` + +`EXIT;` + +`sudo apt install php-curl php-gd php-mbstring php-xml php-xmlrpc php-soap php-intl php-zip` + +`sudo systemctl restart apache2` + +`cd /var/www` + +`sudo curl -O https://wordpress.org/latest.tar.gz` + +`sudo tar -xvf latest.tar.gz` + +`sudo rm latest.tar.gz` + +Tại thời điểm này, bạn đang ở Bước 4 trong bài hướng dẫn được liên kết, bạn sẽ cần làm chính xác theo các bước để đảm bảo có tất cả các quyền cần thiết cho thư mục WordPress. + +Vì chỉ sử dụng trong mạng nội bộ nên bạn không cần phải "tạo khóa bảo mật" trong bước này. Chuyển sang Bước 5, là bước thay đổi cấu hình Apache cho WordPress. + +Sau đó, nếu mọi thứ được cấu hình chính xác, bạn sẽ có thể truy cập qua địa chỉ mạng nội bộ của mình và trải qua các bước cài đặt WordPress. + +## Tài liệu tham khảo + +- [Client SSH GUI - Remmina](https://remmina.org/) +- [The Beginner's guide to SSH](https://www.youtube.com/watch?v=2QXkrLVsRmk) +- [Vim in 100 Seconds](https://www.youtube.com/watch?v=-txKSRn0qeA) +- [Vim tutorial](https://www.youtube.com/watch?v=IiwGbcd8S7I) +- [Learn the Linux Fundamentals - Part 1](https://www.youtube.com/watch?v=kPylihJRG70) +- [Linux for hackers (don't worry you don't need to be a hacker!)](https://www.youtube.com/watch?v=VbEx7B_PTOE) + +Hẹn gặp lại vào [ngày 19](day19.md) diff --git a/2022/vi/README.md b/2022/vi/README.md index 7de759f..902a545 100644 --- a/2022/vi/README.md +++ b/2022/vi/README.md @@ -46,7 +46,7 @@ Cách nhanh nhất để liên lạc với tôi là thông qua Twitter tại [@M - [✔️] 🐧 15 > [Các lệnh Linux cho DevOps (Thực tế là tất cả mọi người)](Days/day15.md) - [✔️] 🐧 16 > [Quản lý Hệ thống Linux, Hệ thống Tệp & Lưu trữ](Days/day16.md) - [✔️] 🐧 17 > [Text Editors - nano vs vim](Days/day17.md) -- [✔️] 🐧 18 > [SSH & Web Server(LAMP)](Days/day18.md) +- [✔️] 🐧 18 > [SSH & Máy chủ Web (LAMP)](Days/day18.md) - [✔️] 🐧 19 > [Tự động hóa các tác vụ với các tập lệnh bash](Days/day19.md) - [✔️] 🐧 20 > [Thiết lập máy trạm phát triển - những điều tuyệt vời](Days/day20.md) From ecebabf7556f97ed91f8b24b1ce3e68bc88bb64b Mon Sep 17 00:00:00 2001 From: Mau Date: Wed, 30 Nov 2022 01:35:19 +0900 Subject: [PATCH 8/9] added d19 --- 2022/vi/Days/day19.md | 311 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 311 insertions(+) create mode 100644 2022/vi/Days/day19.md diff --git a/2022/vi/Days/day19.md b/2022/vi/Days/day19.md new file mode 100644 index 0000000..054726f --- /dev/null +++ b/2022/vi/Days/day19.md @@ -0,0 +1,311 @@ +--- +title: "#90DaysOfDevOps - Tự động hóa các tác vụ với các tập lệnh bash - Ngày 19" +published: false +description: 90DaysOfDevOps - Tự động hóa các tác vụ với các tập lệnh bash +tags: "devops, 90daysofdevops, learning" +cover_image: null +canonical_url: null +id: 1048774 +--- + +## Tự động hóa các tác vụ với các tập lệnh bash + +Shell mà chúng ta sẽ sử dụng hôm nay là bash nhưng chúng ta sẽ sử dụng một shell khác vào ngày mai khi chúng ta hiểu rõ hơn về ZSH. + +BASH - **B**ourne **A**gain **Sh**ell + +Chúng ta gần như có thể dành toàn bộ thời gian 7 ngày để viết shell script giống với các ngôn ngữ lập trình, bash cho chúng ta khả năng làm việc cùng với các công cụ tự động hóa khác để hoàn thành công việc. + +Tôi biết nhiều người đã và đang viết một số tập lệnh shell phức tạp để thực hiện những tác vụ hàng ngày và một số trong số đó có thể là một trong những việc quan trọng nhất đối với doanh nghiệp của họ. Tôi không nói rằng chúng ta cần hiểu tập lệnh shell/bash vì mục đích này, đó không phải là cách tốt nhất. Nhưng chúng ta nên học shell/bash để có thể viết các tập lệnh giúp chúng ta có thể làm việc cùng với các công cụ tự động hóa của mình và cho các tác vụ thường ngày. + +Một ví dụ về mà chúng ta đã sử dụng trong phần này có thể là VAGRANTFILE, chúng ta đã sử dụng nó để tạo máy ảo của mình. Chúng ta gó thể đóng gói nó thành một tập lệnh bash đơn giản nhằm xóa và chạy lại nó vào mỗi sáng thứ Hai để có một bản sao mới của máy ảo Linux của mình mỗi tuần. Chúng ta cũng có thể cài đặt tất cả các phần mềm trong LAMP stack đã được sử dụng trên máy ảo Linux thông qua một tập lệnh bash. + +Một điều khác mà tôi đã nghe được là các câu hỏi viết các tập lệnh đang ngày càng trở nên phổ biến hơn trong các cuộc phỏng vấn. + +### Bắt đầu + +Cũng giống như rất nhiều thứ mà chúng ta sẽ đề cập trong suốt 90 ngày, cách duy nhất để học là thông qua thực hành. Kinh nghiệm thực hành sẽ giúp tất cả những điều này in sâu vào trí nhớ cơ bắp của bạn. + +Trước hết, chúng ta sẽ cần một trình soạn thảo văn bản. Vào [Ngày 17](day17.md), chúng ta đã đề cập đến hai trình soạn thảo văn bản phổ biến nhất và một chút về cách sử dụng chúng. + +Hãy bắt đầu tạo tập lệnh shell đầu tiên của chúng ta. + +`touch 90DaysOfDevOps.sh` + +Tiếp theo là `nano 90DaysOfDevOps.sh`, thao tác này sẽ mở tập lệnh shell trống mới trong nano. Một lần nữa, bạn có thể chọn trình soạn thảo văn bản mà mình muốn ở đây. + +Dòng đầu tiên của tất cả các tập lệnh bash sẽ giống như thế này `#!/usr/bin/bash` đây là đường dẫn đến tệp nhị phân bash của bạn. + +Tuy nhiên, bạn nên kiểm tra điều này trong terminal bằng cách chạy `which bash` nếu bạn không sử dụng Ubuntu thì bạn cũng có thể thử `whereis bash` từ terminal. + +Bạn có thể thấy các đường dẫn khác được liệt kê trong các tập lệnh shell đã được tạo, có thể bao gồm: + +- `#!/bin/bash` +- `#!/usr/bin/env bash` + +Ở dòng tiếp theo trong tập lệnh của chúng ta, tôi muốn thêm comment và thêm mục đích của tập lệnh hoặc ít nhất là một số thông tin về tác giả. Bạn có thể làm điều này bằng cách sử dụng ký tự `#`. Điều này cho phép chúng ta comment về các dòng cụ thể trong mã của mình và cung cấp mô tả về những gì mà các lệnh tiếp theo sẽ thực hiện. Tôi nghĩ rằng sẽ tốt hơn cho người dùng nếu các ghi chú rõ ràng và cẩn thận, đặc biệt nếu bạn đang chia sẻ chúng. + +Đôi khi tôi sử dụng figlet, một chương trình mà chúng ta đã cài đặt trước đó trong bài về Linux để tạo một số hình vẽ bằng mã ASCI. + +![](../../Days/Images/Day19_Linux1.png) + +Tất cả các lệnh đã được sử dụng trước đó trong bài về Linux [Day15](day15.md) có thể được sử dụng ở đây như một lệnh đơn giản để kiểm tra tập lệnh của chúng ta. + +Hãy thêm một đoạn mã sau vào tập lệnh của chúng ta. + +``` +mkdir 90DaysOfDevOps +cd 90DaysOfDevOps +touch Day19 +ls +``` + +Sau đó, bạn có thể lưu tệp này và thoát trình soạn thảo văn bản của mình, nếu chúng ta chạy tập lệnh của mình với `./90DaysOfDevOps.sh`, bạn sẽ nhận được thông báo lỗi do không có đủ quyền. Bạn có thể kiểm tra quyền của tệp này bằng cách sử dụng lệnh `ls -al` và có thể thấy chúng ta không có quyền thực thi đối với tệp này. + +![](../../Days/Images/Day19_Linux2.png) + +Có thể thay đổi điều này bằng cách sử dụng `chmod +x 90DaysOfDevOps.sh` và sau đó bạn sẽ thấy `x`, có nghĩa là bây giờ chúng ta có thể thực thi tập lệnh của mình. + +![](../../Days/Images/Day19_Linux3.png) + +Bây giờ chúng ta có thể chạy lại tập lệnh của mình bằng cách sử dụng `./90DaysOfDevOps.sh`. Sau khi chạy, tập lệnh hiện đã tạo một thư mục mới, thay thư mục hiện tại thành thư mục đó đó và cuối cùng tạo một tệp mới. + +![](../../Days/Images/Day19_Linux4.png) + +Những câu lệnh khá cơ bản nhưng bạn có thể tưởng tượng ra việc công cụ này có thể được sử dụng như thế nào để gọi các công cụ khác giúp cuộc sống của bạn dễ dàng hơn và có thể tự động hóa mọi thứ. + +### Biến, điều kiện + +Phần lớn phần này lặp lại những gì chúng ta đã đề cập khi học Golang nhưng tôi nghĩ nó đáng để chúng ta tìm hiểu lại một lần nữa. + +- ### Biến + +Các biến cho phép chúng ta xác định một giá trị được lặp lại, cụ thể được sử dụng trong toàn bộ tập lệnh. + +Để thêm một biến, bạn chỉ cần thêm nó như sau vào một dòng trong tập lệnh của mình. + +`challenge="90DaysOfDevOps"` + +Bằng cách này, khi nào chúng ta sử dụng `$challenge` trong mã của mình và thay đổi biến thì nó sẽ được cập nhật trong cả tập lệnh. + +![](../../Days/Images/Day19_Linux5.png) + +Nếu bây giờ chúng ta chạy tập lệnh `sh` của mình,bạn sẽ tác vụ in ra dòng chữ đã được thêm vào tập lệnh của chúng ta. + +![](../../Days/Images/Day19_Linux6.png) + +Chúng ta cũng có thể sử dụng đầu vào của người dùng để gán cho các biến của chúng ta bằng cách sau: + +``` +echo "Enter your name" +read name +``` + +Sau đó chúng ta định nghĩa đầu vào được nhập là biến `$name` và có thể sử dụng biến từ đó. + +- ### Điều kiện + +Có thể chúng ta muốn tìm hiểu xem ai đang tham gia thử thách và đã hoàn thành bao nhiêu ngày, chúng ta có thể xác định điều này bằng cách sử dụng các điều kiện `if` `if-else` `else-if`, đây là những gì chúng ta đã định nghĩa trong tập lệnh của mình . + +``` +#!/bin/bash +# ___ ___ ____ ___ __ ____ ___ +# / _ \ / _ \| _ \ __ _ _ _ ___ / _ \ / _| _ \ _____ __/ _ \ _ __ ___ +#| (_) | | | | | | |/ _` | | | / __| | | | |_| | | |/ _ \ \ / / | | | '_ \/ __| +# \__, | |_| | |_| | (_| | |_| \__ \ |_| | _| |_| | __/\ V /| |_| | |_) \__ \ +# /_/ \___/|____/ \__,_|\__, |___/\___/|_| |____/ \___| \_/ \___/| .__/|___/ +# |___/ |_| +# +# This script is to demonstrate bash scripting! + +# Variables to be defined + +ChallengeName=#90DaysOfDevOps +TotalDays=90 + +# User Input + +echo "Enter Your Name" +read name +echo "Welcome $name to $ChallengeName" +echo "How Many Days of the $ChallengeName challenge have you completed?" +read DaysCompleted + +if [ $DaysCompleted -eq 90 ] +then + echo "You have finished, well done" +elif [ $DaysCompleted -lt 90 ] +then + echo "Keep going you are doing great" +else + echo "You have entered the wrong amount of days" +fi +``` + +Bạn cũng có thể thấy từ phần trên rằng chúng ta sử dụng phép so sánh hoặc kiểm tra các giá trị với nhau để chuyển sang giai đoạn tiếp theo. Chúng ta có các một vài điểm đáng chú ý ở đây. + +- `eq` - nếu 2 giá trị bằng nhau sẽ trả về TRUE +- `ne` - nếu 2 giá trị không bằng nhau sẽ trả về TRUE +- `gt` - nếu giá trị đầu tiên lớn hơn giá trị thứ hai sẽ trả về TRUE +- `ge` - nếu giá trị đầu tiên lớn hơn hoặc bằng giá trị thứ hai sẽ trả về TRUE +- `lt` - nếu giá trị đầu tiên nhỏ hơn giá trị thứ hai sẽ trả về TRUE +- `le` - nếu giá trị đầu tiên nhỏ hơn hoặc bằng giá trị thứ hai sẽ trả về TRUE + +Chúng ta cũng có thể sử dụng tập lệnh bash để xác định thông tin về tệp và thư mục, điều này được gọi là điều kiện tệp. + +- `-d file` Đúng nếu tệp là một thư mục +- `-e file` Đúng nếu tệp tồn tại +- `-f file` Đúng nếu chuỗi được cung cấp là một tệp +- `-g file` Đúng nếu id nhóm được đặt trên một tệp +- `-r file` Đúng nếu tệp có thể đọc được +- `-s file` Đúng nếu tệp có kích thước khác 0 + +``` +FILE="90DaysOfDevOps.txt" +if [ -f "$FILE" ] +then + echo "$FILE is a file" +else + echo "$FILE is not a file" +fi +``` + +![](../../Days/Images/Day19_Linux7.png) + +Chỉ cần chúng ta vẫn ở trong thư mục của mình, lệnh echo đầu tiên sẽ được in ra. Nhưng nếu chúng ta xoá tệp đó đi thì lệnh thứ hai sẽ được in ra. + +![](../../Days/Images/Day19_Linux8.png) + +Hy vọng rằng bạn có thể thấy điều này được sử dụng như thế nào để giúp bạn tiết kiệm thời gian khi tìm kiếm một tệp cụ thể trên hệ thống. + +Tôi đã tìm thấy kho lưu trữ tuyệt vời này trên GitHub có rất nhiều tập lệnh hữu ích [DevOps Bash Tools](https://github.com/HariSekhon/DevOps-Bash-tools/blob/master/README.md) + +### Ví dụ + +**Kịch bản**: Công ty của chúng ta có tên là "90DaysOfDevOps" đã hoạt động được một thời gian và giờ là lúc mở rộng nhóm từ 1 người lên nhiều người hơn trong những tuần tới. Tôi là người duy nhất cho đến nay biết quá trình onboard, vì vậy chúng ta muốn giảm bớt nút thắt cổ chai (bottleneck) đó bằng cách tự động hóa một số tác vụ. + +**Yêu cầu**: + +- Người dùng có thể được chuyển vào dưới dạng đối số dòng lệnh. +- Một người dùng được tạo với tên của đối số dòng lệnh. +- Mật khẩu có thể nhận được dưới dạng đối số dòng lệnh. +- Mật khẩu được đặt cho người dùng +- Hiển thị thông báo tạo tài khoản thành công. + +Hãy bắt đầu với việc tạo tập lệnh shell với `touch create_user.sh` + +Trước khi tiếp tục, hãy làm cho tập lệnh có thể thực thi được bằng cách sử dụng `chmod +x create_user.sh` + +Sau đó chúng ta có thể sử dụng `nano create_user.sh` để bắt đầu chỉnh sửa tập lệnh của mình cho kịch bản mà chúng ta đã đặt. + +Chúng ta có thể xem xét yêu cầu đầu tiên "Người dùng có thể được chuyển vào dưới dạng đối số dòng lệnh", chúng ta có thể làm như sao + +``` +#! /usr/bin/bash + +#A user can be passed in as a command line argument +echo "$1" +``` + +![](../../Days/Images/Day19_Linux9.png) + +Tiếp tục chạy phần này bằng cách sử dụng `./create_user.sh Michael` thay thế Michael bằng tên của bạn khi bạn chạy tập lệnh. + +![](../../Days/Images/Day19_Linux10.png) + +Tiếp theo, chúng ta có thể thực hiện yêu cầu thứ hai "Người dùng được tạo với tên của đối số dòng lệnh", điều này có thể được thực hiện bằng lệnh `useradd`. Tuỳ chọn `-m` để tạo thư mục home cho người dùng tại /home/username + +``` +#! /usr/bin/bash + +#A user can be passed in as a command line argument +echo "$1 user account being created." + +#A user is created with the name of the command line argument +sudo useradd -m "$1" + +``` + +Cảnh báo: Nếu bạn không cung cấp tên người dùng thì nó sẽ báo lỗi do chúng ta chưa điền biến `$1` + +Sau đó, chúng ta có thể kiểm tra xem tài khoản này đã được tạo chưa bằng lệnh `awk -F: '{ print $1 }' /etc/passwd`. + +![](../../Days/Images/Day19_Linux11.png) + +Yêu cầu tiếp theo của chúng ta là "Mật khẩu có thể được nhập dưới dạng đối số dòng lệnh." Trước hết, chúng ta sẽ không bao giờ làm điều này trong môi trường sản xuất. + +``` +#! /usr/bin/bash + +#A user can be passed in as a command line argument +echo "$1 user account being created." + +#A user is created with the name of the command line argument +sudo useradd -m "$1" + +#A password can be parsed as a command line argument. +sudo chpasswd <<< "$1":"$2" +``` + +Nếu sau đó chúng ta chạy tập lệnh này với hai tham số `./create_user.sh 90DaysOfDevOps password` + +Bạn có thể thấy từ hình ảnh bên dưới rằng chúng ta đã thực thi tập lệnh của mình, tập lệnh này đã tạo người dùng và mật khẩu của chúng ta, sau đó chúng ta chuyển sang người dùng đó theo cách thủ công và xác nhận bằng lệnh `whoami`. + +![](../../Days/Images/Day19_Linux12.png) + +Yêu cầu cuối cùng là "Thông báo tạo tài khoản thành công được hiển thị." Chúng ta đã có dòng này ở dòng trên cùng của mã và có thể thấy ảnh chụp màn hình ở trên có dòng `90DaysOfDevOps user account being created` được hiển thị. + +Bây giờ tập lệnh này có thể được sử dụng để nhanh chóng tích hợp và thiết lập người dùng mới trên hệ thống Linux của chúng ta. Nhưng có lẽ thay vì một vài người trong lịch sử phải giải quyết vấn đề này và sau đó phải lấy cho người khác tên người dùng hoặc mật khẩu mới của họ, chúng tôi có thể thêm một số đầu vào của người dùng mà chúng tôi đã đề cập trước đó để nắm bắt các biến của chúng tôi. + +``` +#! /usr/bin/bash + +echo "What is your intended username?" +read username +echo "What is your password" +read password + +#A user can be passed in as a command line argument +echo "$username user account being created." + +#A user is created with the name of the command line argument +sudo useradd -m $username + +#A password can be parsed as a command line argument. +sudo chpasswd <<< $username:$password +``` + +Với các bước tương tác nhiều hơn, + +![](../../Days/Images/Day19_Linux14.png) + +Để kết thúc, chúng ta nên in ra một thông báo để nói rằng tài khoản người dùng mới đã được tạo xong. + +![](../../Days/Images/Day19_Linux15.png) + +Một điều tôi nhận thấy là chúng ta đang hiển thị mật khẩu trên đầu vào của mình, chúng ta có thể ẩn mật khẩu này bằng cách sử dụng cờ `-s` trong dòng mã `read -s password` + +![](../../Days/Images/Day19_Linux16.png) + +Nếu bạn muốn xóa người dùng mà bạn đã tạo cho mục đích thử nghiệm, bạn có thể làm điều đó với `sudo userdel test_user` + +[Tập lệnh mẫu](../../Days/Linux/create-user.sh) + +Một lần nữa, tôi không nói rằng đây sẽ là thứ mà bạn sẽ viết hàng ngày nhưng đó là thứ có thể sẽ làm nổi bật tính linh hoạt của những gì chúng ta có thể làm với tập lệnh shell. + +Hãy nghĩ về bất kỳ nhiệm vụ lặp đi lặp lại nào mà bạn thực hiện hàng ngày, hàng tuần hoặc hàng tháng và cách bạn có thể tự động hóa để làm việc đó tốt hơn. Lựa chọn đầu tiên có thể sẽ là sử dụng tập lệnh bash trước khi chuyển sang thứ gì đó phức tạp hơn. + +Tôi đã tạo một tệp bash rất đơn giản giúp tôi tạo cụm Kubernetes bằng cách sử dụng minikube trên máy cục bộ của mình cùng với các dịch vụ dữ liệu. [Project Pace](https://github.com/MichaelCade/project_pace/blob/main/singlecluster_demo.sh) Nhưng tôi không cảm thấy điều này thích hợp để nêu ra ở đây vì chúng ta chưa đề cập đến Kubernetes. + +## Tài liệu tham khảo + +- [Bash in 100 seconds](https://www.youtube.com/watch?v=I4EWvMFj37g) +- [Bash script with practical examples - Full Course](https://www.youtube.com/watch?v=TPRSJbtfK4M) +- [Client SSH GUI - Remmina](https://remmina.org/) +- [The Beginner's guide to SSH](https://www.youtube.com/watch?v=2QXkrLVsRmk) +- [Vim in 100 Seconds](https://www.youtube.com/watch?v=-txKSRn0qeA) +- [Vim tutorial](https://www.youtube.com/watch?v=IiwGbcd8S7I) +- [Learn the Linux Fundamentals - Part 1](https://www.youtube.com/watch?v=kPylihJRG70) +- [Linux for hackers (don't worry you don't need to be a hacker!)](https://www.youtube.com/watch?v=VbEx7B_PTOE) + +Hẹn gặp lại vào [ngày 20](day20.md) From 10753a4f40efd19d2a530510b05a8e477b580c4a Mon Sep 17 00:00:00 2001 From: Mau Date: Wed, 30 Nov 2022 02:08:21 +0900 Subject: [PATCH 9/9] added d20 --- 2022/vi/Days/day20.md | 166 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 166 insertions(+) create mode 100644 2022/vi/Days/day20.md diff --git a/2022/vi/Days/day20.md b/2022/vi/Days/day20.md new file mode 100644 index 0000000..347eb17 --- /dev/null +++ b/2022/vi/Days/day20.md @@ -0,0 +1,166 @@ +--- +title: "#90DaysOfDevOps - Thiết lập máy trạm phát triển - những điều tuyệt vời - Ngày 20" +published: false +description: 90DaysOfDevOps - Thiết lập máy trạm phát triển - những điều tuyệt vời +tags: "devops, 90daysofdevops, learning" +cover_image: null +canonical_url: null +id: 1048734 +--- + +## Thiết lập máy trạm phát triển - những điều tuyệt vời + +Đừng nhầm lẫn với việc thiết lập máy chủ Linux theo cách này, tôi chỉ muốn muốn thể hiện tính linh hoạt mà chúng ta có với các máy tính chạy Linux. + +Tôi đã sử dụng máy tính chạy Linux gần một năm nay và tôi đã cấu hình nó theo cách tôi muốn từ góc nhìn và cảm nhận. Sử dụng máy ảo Ubuntu của chúng ta trên Virtual Box, chúng ta có thể xem một số tùy chỉnh mà tôi đã thực hiện cho các công việc hàng ngày của mình. + +Tôi đã tổng hợp thành một video trên YouTube hướng dẫn phần còn lại để các bạn có thể theo dõi tốt hơn: + +[![Nhấp để truy cập Video YouTube](../../Days/Images/Day20_YouTube.png)](https://youtu.be/jeEslAtHfKc) + +Cuối cùng, hệ thống của chúng ta sẽ trông giống như bên dưới: + +![](../../Days/Images/Day20_Linux1.png) + +Chúng ta cũng có thể thấy bash shell mặc định của mình bên dưới: + +![](../../Days/Images/Day20_Linux2.png) + +Phần lớn điều này có được nhờ dotfiles, thứ mà chúng ta sẽ trình bày trong phần cuối cùng của loạt bài về Linux này. + +### dotfiles + +Đầu tiên, tôi muốn đi sâu vào dotfiles, tôi đã nói vào một ngày trước đây rằng Linux được tạo thành từ các tệp cấu hình. + +Nói thêm rằng, tệp dotfile không chỉ được sử dụng để tùy chỉnh và làm cho màn hình của bạn trông đẹp mắt, mà nó còn giúp bạn tăng năng suất. + +Như tôi đã đề cập, nhiều chương trình phần mềm lưu cấu hình của chúng trong các tệp dotfile này. + +Mỗi tệp dotfile bắt đầu bằng `.` Bạn có thể đoán được cách đặt tên bắt nguồn từ đâu đúng không? (dot là "dấu chấm") + +Cho đến bây giờ, chúng ta đã sử dụng bash làm trình shell của mình, điều đó có nghĩa là bạn sẽ có .bashrc và .bash_profile trong thư mục chính của chúng ta. Bạn có thể xem bên dưới một vài tệp dotfile mà chúng ta có trên hệ thống. + +![](../../Days/Images/Day20_Linux3.png) + +Chúng ta sẽ thay đổi trình shell của mình, vì vậy sau này chúng ta sẽ thấy một dotfile cấu hình `.zshrc` mới. + +Từ giờ bạn sẽ hiểu rằng nếu chúng ta đề cập đến dotfiles thì chúng là các tệp cấu hình. Chúng ta có thể sử dụng chúng để thêm alias cho dấu nhắc lệnh cũng như thêm các đường dẫn đến các vị trí khác nhau. Một số người chia sẻ dotfiles của họ một cách công khai. Bạn có thể tìm thấy trên GitHub của tôi [MichaelCade/dotfiles](https://github.com/MichaelCade/dotfiles), trong đó tệp `.zshrc` đã được tùy biến. Terminal tôi chọn là terminator cũng có một số tệp cấu hình trong thư mục và cũng có một số nền có thể được tùy chọn. + +### ZSH + +Như tôi đã đề cập trong suốt quá trình tương tác với hệ thống, chúng ta đã sử dụng bash shell, shell mặc định với Ubuntu. ZSH rất giống với bash shell nhưng nó có một số ưu điểm so với bash. + +Zsh có các tính năng như tự động hoàn thành câu lệnh với phím Tab, tìm kiếm tệp tự động, tích hợp biểu thức chính quy (regex) và có số lượng theme rất phong phú. + +Chúng ta có thể sử dụng trình quản lý gói `apt` để cài đặt zsh trên hệ thống của mình. Hãy chạy `sudo apt install zsh` từ terminal của chúng ta. Tôi sẽ thực hiện việc này từ bên trong bảng điều khiển VM. + +Khi lệnh cài đặt hoàn tất, bạn có thể chạy `zsh` bên trong terminal của mình, sau đó thao tác này sẽ bắt đầu tập lệnh cấu hình trình shell. + +![](../../Days/Images/Day20_Linux4.png) + +Tôi đã chọn `1` cho câu hỏi trên và bây giờ chúng ta có thêm một số tùy chọn. + +![](../../Days/Images/Day20_Linux5.png) + +Bạn có thể thấy từ menu này rằng chúng ta có thể thực hiện một số tuỳ biến để làm cho ZSH được cấu hình theo nhu cầu của. + +Nếu bạn thoát khỏi trình hướng dẫn bằng `0` và sau đó sử dụng `ls -al | grep .zshrc`, bạn sẽ thấy chúng ta có một tệp cấu hình mới. + +Bây giờ chúng ta muốn đặt zsh là trình shell mặc định của mình mỗi khi mở terminal của mình. Có thể thực hiện việc này bằng cách chạy lệnh sau để thay đổi shell `chsh -s $( which zsh)` sau đó chúng ta cần đăng xuất và đăng nhập lại đẻ các thay đổi được cập nhật. + +Khi bạn đăng nhập lại và mở một terminal, nó sẽ giống như thế này. Chúng ta cũng có thể xác nhận trình shell của chúng ta hiện đã được thay đổi bằng cách chạy ` which $SHELL` + +![](../../Days/Images/Day20_Linux6.png) + +Tôi thường thực hiện bước này trên mỗi máy tính để bàn Ubuntu mà tôi khởi tạo và nhìn chung thì cũng không cần làm gì hơn nữa vì zsh nhanh hơn một chút so với bash. + +### OhMyZSH + +Tiếp theo, chúng ta muốn làm cho mọi thứ trông đẹp hơn một chút và cũng thêm một số chức năng giúp di chuyển dễ dàng hơn trong terminal. + +OhMyZSH là một khung mã nguồn mở và miễn phí để quản lý cấu hình zsh của bạn. Có rất nhiều plugin, theme và nhiều thứ khác giúp trình shell zsh trở nên đẹp hơn rất nhiều. + +Bạn có thể tìm hiểu thêm về [ohmyzsh](https://ohmyz.sh/) + +Hãy cài đặt Oh My ZSH, chúng ta có một vài tùy chọn với `curl` `wget` hoặc `fetch`, chúng ta có sẵn hai tùy chọn đầu tiên trên hệ thống của mình nhưng tôi sẽ bắt đầu với `curl` + +`sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"` + +Khi bạn đã chạy lệnh trên, bạn sẽ thấy một số đầu ra như bên dưới. + +![](../../Days/Images/Day20_Linux7.png) + +Bây giờ chúng ta có thể bắt đầu đưa cài đặt theme để trải nghiệm, có hơn 100 theme đi kèm với Oh My ZSH nhưng tôi sẽ luôn cài đặt các ứng dụng của mình với theme Dracula. + +Tôi cũng muốn nói thêm rằng hai plugin này là gần như bắt buộc khi sử dụng Oh My ZSH. + +`git clone https://github.com/zsh-users/zsh-autosuggestions.git $ZSH_CUSTOM/plugins/zsh-autosuggestions` + +`git clone https://github.com/zsh-users/zsh-syntax-highlighting.git $ZSH_CUSTOM/plugins/zsh-syntax-highlighting` + +`nano ~/.zshrc` + +chỉnh sửa các plugin để nhận các plugins mới `plugins=(git zsh-autosuggestions zsh-syntax-highlighting)` + +## Tiện ích mở rộng Gnome + +Tôi cũng sử dụng các tiện ích mở rộng của Gnome và cụ thể là danh sách bên dưới + +[Tiện ích mở rộng Gnome](https://extensions.gnome.org) + + - Caffeine + - CPU Power Manager + - Dash to Dock + - Desktop Icons + - User Themes + +## Cài đặt phần mềm + +Danh sách các chương trình tôi cài đặt trên máy bằng `apt` + + - VSCode + - azure-cli + - containerd.io + - docker + - docker-ce + - google-cloud-sdk + - insomnia + - packer + - terminator + - terraform + - vagrant + +### Theme Dracula + +Đây này là thứ duy nhất tôi sử dụng vào hiện tại. Trông rõ ràng, gọn gàng và mọi thứ đều rất dễ nhìn. [Theme Dracula](https://draculatheme.com/) Nó cũng giúp bạn nếu bạn có nhiều chương trình khác mà bạn sử dụng trên máy của bạn và muốn chúng sử dụng theme Dracula. + +Từ liên kết ở trên, chúng ta có thể tìm kiếm zsh trên và bạn sẽ tìm thấy ít nhất hai lựa chọn. + +Thực hiện theo các hướng dẫn được liệt kê để cài đặt thủ công hoặc sử dụng git. Sau đó, bạn sẽ cần chỉnh sửa tệp cấu hình `.zshrc` của mình như bên dưới. + +![](../../Days/Images/Day20_Linux8.png) + +Tiếp theo, bạn sẽ muốn có [Gnome Terminal Dracula theme](https://draculatheme.com/gnome-terminal) cùng với tất cả các hướng dẫn có sẵn tại đây. + +Sẽ mất nhiều thời gian để ghi lại từng bước nên tôi đã tạo một video hướng dẫn quy trình. (**Nhấp vào hình ảnh bên dưới**) + +[![](../../Days/Images/Day20_YouTube.png)](https://youtu.be/jeEslAtHfKc) + +Nếu bạn đã đi tới đây, chúng ta hiện đã hoàn thành phần về Linux của #90DaysOfDevOps. Một lần nữa, tôi luôn chào đón các phản hồi và bổ sung cho các tài nguyên tại đây. + +Tôi cũng nghĩ về việc sẽ dễ dàng hơn khi hướng dẫn nhiều bước thông qua video so với việc viết chúng ra đây, bạn nghĩ sao về điều này? + +## Tài liệu tham khảo + +- [Bash in 100 seconds](https://www.youtube.com/watch?v=I4EWvMFj37g) +- [Bash script with practical examples - Full Course](https://www.youtube.com/watch?v=TPRSJbtfK4M) +- [Client SSH GUI - Remmina](https://remmina.org/) +- [The Beginner's guide to SSH](https://www.youtube.com/watch?v=2QXkrLVsRmk) +- [Vim in 100 Seconds](https://www.youtube.com/watch?v=-txKSRn0qeA) +- [Vim tutorial](https://www.youtube.com/watch?v=IiwGbcd8S7I) +- [Learn the Linux Fundamentals - Part 1](https://www.youtube.com/watch?v=kPylihJRG70) +- [Linux for hackers (don't worry you don't need to be a hacker!)](https://www.youtube.com/watch?v=VbEx7B_PTOE) + +Ngày mai, chúng ta bắt đầu 7 ngày tìm hiểu về Mạng máy tính, chúng ta sẽ tìm cách trang bị cho mình kiến ​​thức và hiểu biết cơ bản về Mạng liên quan tới DevOps. + +Hẹn gặp lại vào [Ngày21](day21.md)