Trang chủ Thủ Thuật Cách tạo phần cứng Bash Scripts của bạn

Cách tạo phần cứng Bash Scripts của bạn

0
52

Cách tạo phần cứng Bash Scripts của bạn

Bash Shell

Viết script để chạy trên các máy tính Linux khác nhau rất khó. Bạn không thể cho rằng chúng sẽ có những đặc điểm giống nhau. Lệnh getconf cho phép bạn kiểm tra hàng trăm giá trị hệ điều hành và hệ thống tệp.

Tập lệnh phần cứng

Nếu bạn đã từng viết một kịch bản phải chạy trên nhiều loại máy Linux, bạn có thể thấy mình phải đối mặt với câu hỏi đố “Kỳ lạ, nó chạy tốt trên máy của tôi…”. Sự khác biệt nhỏ giữa kiến trúc máy tính, hệ điều hành và hệ thống tệp trên máy mục tiêu có thể ngăn các tập lệnh của bạn hoạt động chính xác.

Nếu các tập lệnh của bạn đơn giản và không có tác dụng gì — hoặc cố khởi chạy — bản lề trên phần cứng tương thích hoặc các khả năng nhất định của hệ thống tệp, bạn có thể không bao giờ gặp sự cố. Nhưng kịch bản của bạn càng trở nên phức tạp, thì các chi tiết của cỗ máy mà kịch bản đang chạy càng trở nên quan trọng. Cũng cần lưu ý rằng một máy tính có thể có một số hệ thống tệp được cài đặt trên đó, được gắn trên các phần khác nhau của cây thư mục. Bởi vì một cái gì đó hoạt động trong một thư mục không có nghĩa là nó sẽ hoạt động theo cách tương tự trong một thư mục khác.

Lệnh getconf có thể báo cáo về hàng trăm đặc điểm hệ điều hành và hệ thống tệp khác nhau. Một số trong số này có dạng các cặp giá trị, với một giá trị giữ giá trị tối đa và giá trị kia giữ giá trị tối thiểu. Điều này có nghĩa là bạn có thể kiểm tra phần cứng hoặc các giá trị hệ thống tệp để đảm bảo tập lệnh của bạn sẽ phản ứng tương ứng.

Tất nhiên, tập lệnh của bạn không thể sử dụng getconf trên máy tính mục tiêu nếu nó không được cài đặt trên máy tính đó. Tất cả các bản phân phối đã được kiểm tra khi nghiên cứu bài viết này đều getconf , bao gồm Ubuntu, Fedora và Manjaro. Điều thú vị là tất cả đều có cùng một phiên bản getconf , phiên bản 2.33.

Các bước đầu tiên với lệnh getconf

Bạn có thể kiểm tra xem mình đã getconf trên máy tính của mình hay chưa và tìm ra phiên bản đó bằng cách sử dụng tùy chọn --version

getconf --version

4a47a0db

Quảng cáo

Để xem có bao nhiêu mục getconf có thể báo cáo, hãy sử dụng -a (tất cả) và chuyển nó qua lệnh wc Điều này sẽ đếm các dòng, từ và ký tự trong đầu ra.

getconf -a | wc

fb5c81ed 1

Có 320 dòng trong đầu ra. Để xem toàn bộ danh sách theo cách có thể quản lý, chúng tôi sẽ chuyển đầu ra thành less .

getconf -a | ít hơn

10fb15c7

Bạn có thể cuộn tới và lui tới danh sách để xem getconf có thể báo cáo về những gì.

Output from getconv -a in the less file viewer

Một số mục là bản sao. Nhiều người trong số họ có thể được gọi bằng tên ngắn hơn hoặc bằng tên dài hơn tuân thủ POSIX.

Báo cáo về các giá trị đơn lẻ

Để khiến getconf báo cáo về một giá trị duy nhất, hãy chuyển tên của giá trị cho getconf trên dòng lệnh. Lưu ý rằng tất cả các tên tùy chọn đều được viết hoa.

getconf LONG_BIT

8266e4bf

Quảng cáo

LONG_BIT báo cáo về việc liệu hạt nhân của bạn — và do đó, hệ điều hành của bạn — là 32-bit hay 64-bit. Không có tham số nào khác được yêu cầu cho lệnh này, chỉ có tùy chọn LONG_BIT. Một giá trị đơn giản khác cần báo cáo là LOGIN_NAME_MAX .

getconf LOGIN_NAME_MAX

f19c9085

Đó là độ dài tối đa cao một cách kỳ lạ cho một tên người dùng, nhưng đó là sự thật. Nếu bạn thực sự muốn tạo một tài khoản người dùng với một tên người dùng dài đến mức nguy hiểm, bạn có thể. Ngược lại, tên máy tính của máy tính này có độ dài tối đa là 64 ký tự:

getconf HOST_NAME_MAX

9eb9cd58

Để xem tài khoản người dùng có thể chạy bao nhiêu quy trình đồng thời, hãy sử dụng tùy chọn CHILD_MAX

getconf CHILD_MAX

602e8f04

OPEN_MAX trả về số tệp tối đa mà một quá trình có thể mở.

getconf OPEN_MAX

7afbb160

Để xem một tập hợp con các getconf chúng ta có thể sử dụng -a (tất cả) để tạo tất cả các giá trị và sử dụng grep để lọc ra những giá trị mà chúng tôi quan tâm. Ví dụ: để xem mọi giá trị có “NAME ”Trong tiêu đề của nó, hãy sử dụng:

getconf -a | grep NAME

586e508f

Tương tự như vậy, để xem tất cả các giá trị có “GROUP” trong tiêu đề của chúng, hãy sử dụng:

getconf -a | NHÓM grep

59b2900a 1

Quảng cáo

Để xem các giá trị có “INT_” trong tiêu đề của chúng, hãy sử dụng:

getconf -a | grep _INT

9eb60bc8

Điều này cho thấy các giá trị lớn nhất và nhỏ nhất mà một biến số nguyên có thể giữ trên máy tính này.

LIÊN QUAN: Cách tìm kiếm bằng “grep” bằng cách sử dụng chuỗi trong tệp

Sử dụng getconf Với Giá trị Hệ thống Tệp

Khi bạn sử dụng bất kỳ tùy chọn nào có liên quan đến đặc điểm hệ thống tệp, bạn cần cho getconf biết hệ thống tệp nào nó sẽ báo cáo. Bạn cần phải làm điều này ngay cả khi bạn chỉ có một ổ cứng và một hệ thống tệp duy nhất được cài đặt trên đó. Lệnh getconf sẽ không giả định bất cứ điều gì. Để chỉ ra hệ thống tệp getconf sẽ báo cáo, bạn phải cung cấp một đường dẫn đến một thư mục trong hệ thống tệp đó.

Để xem độ dài tối đa cho tên tệp cho hệ thống tệp được gắn ở gốc của cây thư mục hệ thống tệp, hãy nhập:

getconf NAME_MAX /

7b6fbd4c

Để xem kết quả cho một hệ thống tệp khác, hãy trỏ đến một thư mục nằm trong hệ thống tệp khác. Ngay cả khi bạn không có các hệ thống tệp khác nhau được gắn cố định trong cây thư mục của mình, bạn có thể tìm thấy hệ thống tệp khác tạm thời được gắn vào cây thư mục của mình.

Đây chính xác là những gì sẽ xảy ra khi bạn cắm thẻ nhớ USB, như ví dụ này. Thẻ nhớ có tên là “PINK” và nó được gắn tại “/ media / dave /.”

getconf NAME_MAX / media / dave / PINK /

d642f8c3

Quảng cáo

Chúng ta có thể kiểm tra hệ thống tệp trên thẻ nhớ USB bằng cách sử dụng df để xem nó được kết nối với thiết bị khối nào. Sau đó, chúng tôi sử dụng lệnh lsblk -f (hệ thống tệp).

df / media / dave / PINK
lsblk -f / dev / sdb1

1e412544

Thẻ nhớ là thiết bị chặn /dev/sdb1 và hệ thống tệp là FAT32 . Đó là lý do tại sao chúng ta nhận được các kết quả khác nhau cho hai thư mục trong cùng một cây thư mục. Chúng nằm trong cùng một cây thư mục, nhưng chúng có các hệ thống tệp cơ bản khác nhau.

LIÊN QUAN: Tôi nên sử dụng hệ thống tệp nào cho ổ USB của mình?

Sử dụng getconf trong Scripts

Chúng ta có thể dễ dàng kết hợp đầu ra từ getconf trong các quyết định bên trong các tập lệnh shell của chúng ta.

Ví dụ: để thực hiện các hành động khác nhau tùy thuộc vào việc tập lệnh đang chạy trên hệ điều hành 32 bit hay 64 bit, bạn có thể sử dụng một phần của tập lệnh như thế này.

#! / bin / bash

# chúng ta đang sử dụng hệ điều hành 32 hay 64 bit?
if [$ (getconf LONG_BIT) = "64"]
sau đó
  # 64 bit
  echo "Máy 64-bit."
khác
  # 32 bit
  echo "Máy 32-Bit."
fi

Các if tuyên bố so sánh đầu ra của getconf LONG_BIT lệnh với giá trị của “64.” Nếu chúng khớp với nhau, then được thực thi nếu không else mệnh đề khác được thực thi. Bạn có thể thực hiện các hành động theo phiên bản cụ thể trong then/else hoặc đặt các cờ biến có thể được kiểm tra ở nơi khác trong tập lệnh của bạn.

Sao chép văn bản tập lệnh vào trình chỉnh sửa và lưu tệp của bạn dưới dạng “hw-test.sh.” Chúng tôi sẽ làm cho tập lệnh có thể thực thi được bằng chmod-x (có thể thực thi).

chmod + x hw-test.sh

c9baca3c

Quảng cáo

Khi chúng tôi chạy script, nó cho chúng tôi biết mệnh đề nào đã được kích hoạt. Sử dụng kỹ thuật này, bạn có thể sử dụng bất kỳ getconf để hướng tập lệnh của bạn thực hiện hành động thích hợp.

./hw-test.sh

88399fdc

Tùy chọn quá mức cần thiết

Số lượng giá trị tuyệt đối mà getconf có thể báo cáo có thể rất nhiều. man ngắn gọn một cách đáng ngạc nhiên. Nếu bạn mong đợi nó liệt kê các tùy chọn và giải thích từng tùy chọn, bạn sẽ thất vọng.

Bạn sẽ tìm thấy một số mô tả trong các man dùng cho sysconfconfstr . Bạn có thể cần phải cắt một vài ký tự tắt mặt trước của confstr mục. Ví dụ, điều này không hoạt động:

getconf _CS_GNU_LIBC_VERSION

nhưng điều này đã làm:

getconf GNU_LIBC_VERSION

Bạn cũng sẽ tìm thấy một số mô tả trong tệp “limit.h”. Nếu bạn không biết tệp đó ở đâu trên hệ thống của mình, hãy sử dụng:

whereis limts.h

Sau đó, bạn có thể sử dụng less để xem lại tệp đó.

Penetration Testing Has More Benefits Than You Think

Kiểm tra thâm nhập có nhiều lợi ích hơn bạn nghĩ

How “Chaos Engineering” Helps You Avoid Unplanned Downtime

Cách “Kỹ thuật hỗn loạn” giúp bạn tránh thời gian ngừng hoạt động ngoài kế hoạch

The Best Cloud Services For High Data Transfer Workloads

Dịch vụ đám mây tốt nhất cho khối lượng công việc truyền dữ liệu cao

What’s New In MongoDB 5.0?

Có gì mới trong MongoDB 5.0?

How Docker Contexts Let You Work with Multiple Hosts

Cách Docker Contexts cho phép bạn làm việc với nhiều máy chủ

How to Work with Shared Object (Library) Dependencies in Linux

Cách làm việc với Sự phụ thuộc vào Đối tượng Chia sẻ (Thư viện) trong Linux

Dịch từ: https://www.cloudsavvyit.com/12691/how-to-make-your-bash-scripts-hardware-aware/

BÌNH LUẬN

Vui lòng nhập bình luận của bạn
Vui lòng nhập tên của bạn ở đây