added vi d15+16

This commit is contained in:
Mau 2022-11-22 17:03:02 +09:00
parent 5bfdea5a0a
commit 906b6ebc95
No known key found for this signature in database
GPG Key ID: 9A83889E6CD0480D
7 changed files with 383 additions and 21 deletions

View File

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

View File

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

View File

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

View File

@ -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", ""]

196
2022/vi/Days/day15.md Normal file
View File

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

166
2022/vi/Days/day16.md Normal file
View File

@ -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``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)

View File

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