Trong một thế giới với rất nhiều những công cụ mới và môi trường phát triển đa dạng, việc học một số lệnh sysadmin cơ bản thực tế là điều cần thiết đối với bất kỳ nhà phát triển hoặc kỹ sư nào. Những lệnh và gói cụ thể có thể giúp các nhà phát triển tổ chức, khắc phục vấn đề và tối ưu hóa các ứng dụng, cũng như cung cấp thông tin có giá trị khi sự cố xảy ra.
Cho dù bạn là nhà phát triển mới hay muốn quản lý ứng dụng của riêng mình, thì những lệnh sysadmin cơ bản sau đây có thể giúp bạn hiểu rõ hơn về các ứng dụng của mình. Chúng cũng có thể giúp bạn mô tả các vấn đề để khắc phục sự cố như việc tại sao một ứng dụng có thể hoạt động cục bộ nhưng không hoạt động trên máy chủ từ xa. Các lệnh này áp dụng cho môi trường phát triển Linux, container, máy ảo (VM) và bare metal.
1. curl
curl truyền một URL. Sử dụng lệnh này để kiểm tra endpoint của ứng dụng hoặc kết nối với điểm cuối dịch vụ upstream. curl hữu ích trong việc xác định xem ứng dụng có thể tiếp cận dịch vụ khác, chẳng hạn như cơ sở dữ liệu hoặc kiểm tra xem dịch vụ có hoạt động tốt hay không.
Ví dụ, ứng dụng của bạn gặp lỗi HTTP 500 cho biết nó không thể truy cập cơ sở dữ liệu MongoDB:
$ curl -I -s myapplication:5000
HTTP/1.0 500 INTERNAL SERVER ERROR
Hãy kiểm tra endpoint của cơ sở dữ liệu từ desktop cục bộ:
$ curl -I -s database:27017
HTTP/1.0 200 OK
Vậy vấn đề có thể là gì? Kiểm tra xem ứng dụng của bạn có thể đến những nơi khác ngoài cơ sở dữ liệu từ máy chủ ứng dụng hay không:
$ curl -I -s https://opensource.com
HTTP/1.1 200 OK
Mọi thứ có vẻ ổn. Bây giờ hãy cố gắng truy cập cơ sở dữ liệu từ máy chủ ứng dụng. Ứng dụng của bạn đang sử dụng tên hostname của cơ sở dữ liệu, vì vậy trước tiên hãy thử:
$ curl database:27017
curl: (6) Couldn't resolve host 'database'
Điều này cho thấy rằng ứng dụng của bạn không thể phân giải cơ sở dữ liệu, vì URL của cơ sở dữ liệu không khả dụng hoặc host (container hoặc máy ảo) không có nameserver mà nó có thể sử dụng để phân giải hostname.
2. python -m json.tool / jq
Sau khi thực thi lệnh curl, đầu ra của lệnh gọi API có thể khó đọc. Đôi khi, bạn muốn xuất đầu ra JSON sao cho dễ đọc để tìm một mục cụ thể. Python có một thư viện JSON tích hợp có thể trợ giúp việc này. Bạn sử dụng python -m json.tool để thụt lề và tổ chức JSON. Để sử dụng mô-đun JSON của Python, hãy chuyển đầu ra của file JSON vào lệnh python -m json.tool.
$ cat test.json
{"title":"Person","type":"object","properties":{"firstName":{"type":"string"},"lastName":{"type":"string"},"age":{"description":"Age in years","type":"integer","minimum":0}},"required":["firstName","lastName"]}
Để sử dụng thư viện Python, hãy chuyển đầu ra sang Python với tùy chọn -m (mô-đun).
$ cat test.json | python -m json.tool
{
"properties": {
"age": {
"description": "Age in years",
"minimum": 0,
"type": "integer"
},
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
}
},
"required": [
"firstName",
"lastName"
],
"title": "Person",
"type": "object"
}
Để phân tích cú pháp JSON nâng cao hơn, bạn có thể cài đặt jq. jq cung cấp một số tùy chọn trích xuất các giá trị cụ thể từ đầu vào JSON. Để xuất kết quả sao cho dễ nhìn như mô-đun Python ở trên, chỉ cần áp dụng jq cho đầu ra.
$ cat test.json | jq
{
"title": "Person",
"type": "object",
"properties": {
"firstName": {
"type": "string"
},
"lastName": {
"type": "string"
},
"age": {
"description": "Age in years",
"type": "integer",
"minimum": 0
}
},
"required": [
"firstName",
"lastName"
]
}
3. ls
ls liệt kê các file trong một thư mục. Sysadmin (quản trị viên hệ thống) và các nhà phát triển sử dụng lệnh này khá thường xuyên. Trong không gian container, lệnh này có thể giúp xác định thư mục và file của container image. Bên cạnh việc tra cứu các file, ls có thể giúp bạn kiểm tra các quyền của mình. Trong ví dụ dưới đây, bạn không thể chạy myapp do vấn đề về quyền. Khi kiểm tra các quyền bằng ls -l, bạn nhận ra rằng các quyền không có "x" trong -rw-r - r--, chỉ được đọc và ghi.
$ ./myapp
bash: ./myapp: Permission denied
$ ls -l myapp
-rw-r--r--. 1 root root 33 Jul 21 18:36 myapp
4. tail
tail hiển thị phần cuối cùng của file. Bạn thường không cần mọi dòng nhật ký để khắc phục sự cố. Thay vào đó, bạn muốn kiểm tra nhật ký nói gì về yêu cầu gần đây nhất đối với ứng dụng. Ví dụ, bạn có thể sử dụng tail để kiểm tra những gì xảy ra trong nhật ký khi bạn thực hiện yêu cầu đến máy chủ Apache HTTP của mình.
Tùy chọn -f nghĩa là "follow", xuất các dòng nhật ký khi chúng được ghi vào file. Ví dụ có một script nền truy cập endpoint sau mỗi vài giây và nhật ký ghi lại yêu cầu này. Thay vì theo dõi nhật ký trong thời gian thực, bạn cũng có thể sử dụng tail để xem 100 dòng cuối cùng của file với tùy chọn -n.
$ tail -n 100 /var/log/httpd/access_log
5. cat
cat nối và in các file. Bạn có thể yêu cầu cat kiểm tra nội dung của file dependencies hoặc để xác nhận phiên bản của ứng dụng mà bạn đã tạo cục bộ.
$ cat requirements.txt
flask
flask_pymongo
Ví dụ ở trên kiểm tra xem ứng dụng Python Flask của bạn có Flask được liệt kê là một dependency hay không.
Các lệnh cơ bản có thể nâng cao khả năng khắc phục sự cố, khi cần xác định lý do tại sao ứng dụng hoạt động trong một môi trường phát triển này nhưng lại không hoạt động trong môi trường phát triển khác. Nhiều sysadmin đã tận dụng các lệnh này để gỡ lỗi nhiều sự cố với hệ thống. Hiểu một số lệnh khắc phục sự cố hữu ích này có thể giúp bạn giao tiếp với sysadmin và giải quyết các sự cố với ứng dụng của bạn.
6. grep
grep tìm kiếm các mẫu file. Nếu bạn đang tìm kiếm một mẫu cụ thể trong đầu ra của một lệnh khác, grep sẽ highlight các dòng có liên quan. Hãy sử dụng lệnh này để tìm kiếm file nhật ký, các tiến trình cụ thể, v.v... Nếu muốn xem Apache Tomcat có khởi động hay không, bạn có thể bị choáng ngợp bởi số lượng dòng. Bằng cách chuyển đầu ra đó đến lệnh grep, bạn có thể tách riêng các dòng liên quan đến khởi động máy chủ.
$ cat tomcat.log | grep org.apache.catalina.startup.Catalina.start
01-Jul-2017 18:03:47.542 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 681 ms
7. ps
Lệnh ps, một phần của gói procps-ng cung cấp các lệnh hữu ích để kiểm tra ID tiến trình, hiển thị trạng thái của một tiến trình đang chạy. Sử dụng lệnh này để xác định một ứng dụng đang chạy hoặc xác nhận một tiến trình dự kiến. Ví dụ, nếu bạn muốn kiểm tra một máy chủ web Tomcat đang chạy, hãy sử dụng ps với các tùy chọn của nó để lấy ID tiến trình của Tomcat.
$ ps -ef
UID PID PPID C STIME TTY TIME CMD
root 1 0 2 18:55 ? 00:00:02 /docker-java-home/jre/bi
root 59 0 0 18:55 pts/0 00:00:00 /bin/sh
root 75 59 0 18:57 pts/0 00:00:00 ps -ef
Để dễ đọc hơn nữa, hãy sử dụng ps và chuyển nó thành grep.
$ ps -ef | grep tomcat
root 1 0 1 18:55 ? 00:00:02 /docker-java-home/jre/bi
8. env
env cho phép bạn thiết lập hoặc in các biến môi trường. Trong quá trình khắc phục sự cố, bạn có thể thấy hữu ích khi kiểm tra xem biến môi trường không chính xác có ngăn cản ứng dụng khởi động hay không. Trong ví dụ bên dưới, lệnh này được sử dụng để kiểm tra các biến môi trường được đặt trên máy chủ ứng dụng của bạn.
$ env
PYTHON_PIP_VERSION=9.0.1
HOME=/root
DB_NAME=test
PATH=/usr/local/bin:/usr/local/sbin
LANG=C.UTF-8
PYTHON_VERSION=3.4.6
PWD=/
DB_URI=mongodb://database:27017/test
Lưu ý rằng ứng dụng đang sử dụng Python và có các biến môi trường để kết nối với cơ sở dữ liệu MongoDB.