New FAMILUG

Sunday, 31 January 2021

Chạy OpenBSD trên Laptop ASUS ZenBook 14 2021

## Giới thiệu - Quảng cáo

OpenBSD là hệ điều hành lừng danh về chuyện "bảo mật" nhất trái đất.

Trong suốt hơn 25 năm, chỉ có 2 lỗ hổng lớn xảy ra.


Khi các hệ điều hành khác chạy theo tính năng, thì OpenBSD tập trung vào: security (bảo mật), và code đơn giản, chính xác.

Bảo mật không phải lý do duy nhất, OpenBSD vốn nổi tiếng với việc hệ thống đơn giản (không dùng Systemd), tài liệu (manpage) đầy đủ, dễ đọc, dễ hiểu.

Để thấy rõ hơn sự kiên quyết của OpenBSD đối với bảo mật ra sao, đây là vài gạch đầu dòng: 

- Sau lỗ hổng bảo mật to nhất nhì thập kỷ của Intel mang tên Spectre, OpenBSD quyết định tắt tính năng Hyper-threading đi https://www.mail-archive.com/source-changes@openbsd.org/msg99141.html

Saturday, 7 November 2020

Kiến trúc Docker, phỏng vấn, best practice

Bài này không giới thiệu về docker, "lúc nào rảnh" chắc sẽ có bài đó.

Bài này nói về kiến trúc của docker, các công nghệ liên quan phía dưới mà docker sử dụng - thường có tác dụng lớn khi 1) chém gió lên mặt 2) phỏng vấn.

Ngoài ra có kèm theo một số best-practice khi build docker image để có size nhỏ/build nhanh hơn.

Photo by Andy Li on Unsplash

Kiến trúc của Docker

Docker là một phần mềm viết bằng Golang, theo kiến trúc client-server.

Nghe hình thức thì vậy, mô hình này nham nhảm khắp nơi khi dùng các database: mysql sẽ có mysqld và mysql client (cli, GUI) ... redis có redis-server và redis-cli...

Docker có dockerd và docker-cli.

Friday, 6 November 2020

bash, shopt và =, **

bash là UNIX shell được dùng nhiều nhất hành tinh này. bash có ở khắp mọi hệ điều hành Linux based, hay kể cả OSX/MacOS cho tới tháng 10 năm 2019 (khi Apple quyết định thay zsh làm shell mặc định trên MacOS)

Sự thay đổi này của Apple khiến cho bạn nếu vẫn "chày cối" dùng bash sẽ gặp phải một số bất lợi nhất định (tất nhiên là khắc phục được). Trên MacOS, phiên bản của bash có sẵn rất cũ, vẫn là bash 3.X. Trong khi Ubuntu 18.04 đã dùng 4.4, còn Ubuntu 20.04 thì dùng hẳn bash 5.0. 

 

Photo by Clement Chai on Unsplash

Chuyện này hoàn toàn không phải vấn đề nếu người dùng macOS chủ động cài phiên bản bash mới nhất bằng brew. Cho đến một ngày có người hỏi: câu lệnh ls nào trên bash để liệt kê ra tất cả file .pyc trong tất cả các thư mục con hiện tại?
Việc này hoàn toàn làm được với `find . -name '*.pyc' -type f`, nhưng với ls thì??? 

Sunday, 1 November 2020

Không cần jq nếu đã có python/ruby

jq trở thành công cụ "làm tất cả" với các sysadmin. Trong khi jq được dùng để "query JSON" - truy cập dữ liệu trong 1 đoạn JSON thì nó cũng được dùng để kiểm tra syntax của 1 đoạn JSON.

JQ là gì

$ whatis jq

jq (1)               - Command-line JSON processor
 

Photo by Thanh Soledas on Unsplash
 

Nhưng nếu máy đã có python/ruby, hay các ngôn ngữ trang bị sẵn stdlib JSON, sẽ không cần phải cài gì thêm cả:

File bad.json ví dụ, thử dùng mắt thường tìm xem nó sai ở đâu:

{
  "name": "@exercism/typescript",
  "description": "Exercism exercises in Typescript.",
  "private": true,
  "repository": {
    "type": "git",
    "url": "https://github.com/exercism/typescript"
  },
  "devDependencies": {
  },
}

Saturday, 31 October 2020

grep không hỗ trợ \d và 3 mode regex trong grep

grep là công cụ thiết yếu của sysadmin, tác dụng cơ bản là tìm một mẫu string trong 1 file text. 

Cái tên grep bắt nguồn từ câu lệnh g/re/p của chương trình ed

> Its name comes from the ed command g/re/p (globally search for a regular expression and print matching lines)

Biết thêm một chút regex sẽ tăng thêm sức mạnh. Ví dụ in ra shell của các user trên máy:

$ grep -o '/bin/.*sh' /etc/passwd

/bin/bash
/bin/sh

Photo by Percy Pham on Unsplash

Một "pattern" phổ biến là tìm số, nếu đã từng lập trình dùng regex, thì \d không còn lạ gì để tìm số - code Python ngay trên CLI:

$ echo '123ab45' | python3 -c '
> import re, sys
> print(re.findall("\d+", sys.stdin.read()))'
['123', '45']

Nhưng thật bất ngờ, grep trên Ubuntu 18.04 không hỗ trợ pattern này:

$ echo '123ab45' | grep -o '\d+'

# không in ra gì 

Monday, 25 May 2020

[CLI/Python] find prune path - cắt giảm bài toán tìm kiếm 10 lần

`find` là câu lệnh dùng để tìm file dựa theo tên, vốn không kém tiếng "khó dùng", nhưng vẫn được dùng, do nó được cài sẵn ở mọi hệ điều hành Unixoid (Unix/Linux).


find - huyền thoại

Một lệnh find đơn giản để tìm các file .py trong thư mục /usr

$ time -p find /usr/ -name '*.py' | wc -l
11013
real 0,39
user 0,15
sys 0,24

11013 file này gồm file từ nhiều thư mục khác nhau.

$ time -p find /usr/ -name '*.py' | cut -f-3 -d '/' | sort | uniq -c | sort -nr | head
   9286 /usr/lib
   1644 /usr/share
     78 /usr/src
      5 /usr/local
real 0,39
user 0,17
sys 0,24