New FAMILUG

The PyMiers

Saturday, 6 March 2021

Các combo câu lệnh CLI từ năm 2021

Sau hơn 10 năm dùng Ubuntu/OSX/OpenBSD, các combo câu lệnh mình sử dụng đã có nhiều thay đổi, bài này sẽ cập nhật các combo hay dùng nhất:

ls

ls -la vốn là combo ưa thích, thì ngày nay, tay đã quen với 2 combo khác:

ls -Fhtl hiển thị file và sắp xếp theo file mới nhất ở trên đầu

ls -lFS hiển thị file theo size giảm dần (dễ nhớ: LinuxFromScratch)

free -m

free là câu lệnh chỉ có trên Linux như Ubuntu, trên OSX và OpenBSD đều không có, vậy nên dùng top | head sẽ thay thế được cho lệnh free.

Combo sau khi login vào 1 máy sẽ là: w; df -h; top | head

grep

Vẫn là combo grep -Rin pattern dir nhưng ngày nay mình đã thay grep bằng ripgrep nên thường chỉ gõ rg pattern dir ripgrep nhanh hơn grep nhiều lần, chú ý khi tìm file "ẩn"/ignored.

curl

curl vốn phổ biến như 1 CLI HTTP client tiện dùng khi dev, nhưng curl không có sẵn ở nhiều nơi như wget (ubuntu, busybox mặc định, trong các Alpine based container).

$ curl -L -o elm.gz https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz

tương đương với

$ wget -O elm.gz https://github.com/elm/compiler/releases/download/0.19.1/binary-for-linux-64-bit.gz

wget cũng có thể dùng để thực hiện HTTP GET request:

# wget -qO- https://httpbin.org/get
{
  "args": {},
  "headers": {
    "Host": "httpbin.org",
    "User-Agent": "Wget",
    "X-Amzn-Trace-Id": "Root=1-604387fc-24ae289768ff475a730532f7"
  },
  "origin": "171.246.107.102",
  "url": "https://httpbin.org/get"
}

su

Sau vụ lỗ hổng bảo mật của sudo dậy sóng cộng đồng mạng đầu 2021, thật ra chẳng ảnh hưởng gì do mình dùng OpenBSD, nơi mà quyết định thay sudo bằng 1 phần mềm tên là doas.

Sử dụng su khi cần chuyển sang root, combo là su -l để đổi sang ENV của user root (ví dụ chuyển đúng đến $HOME của root chứ không ở thư mục hiện tại)

ss -nltp

Combo này chỉ hoạt động trên Linux với gói iproute. Trên MacOS/OpenBSD, sử dụng: netstat -nl nếu cần chọn tcp thì thêm netstat -nl -p tcp

vi

Thói quen khi dùng vim (không phải vi) là gõ gg để lên đầu file, vi không có phím tắt này. Thay vào đó vi dùng 1G để go to dòng số 1, và G để tới dòng cuối cùng.

bash ^a^b^

Trên OpenBSD, shell mặc định là KSH và nó không giống bash ở việc thay 1 phần câu lệnh cũ:

bash:

$ ls /etc
...
$ ^/etc^/etc/passwd^
sẽ chạy lệnh ls /etc/passwd (thay /etc ở câu lệnh cuối cùng bằng /etc/passwd)

ksh:

$ ls /etc
...
$ r /etc=/etc/passwd
ls /etc/passwd

cho kết quả tương ứng.

fg

Xưa nay sau khi chuyển job về backgroup (ctrl Z), để bật thành foreground sẽ gõ: fg 1 với job 1

Combo này không chạy trên ksh, phải gõ fg %1 , và sử dụng % đảm bảo hoạt động mọi nơi, kể cả bash.

$ ping 1.1.1.1
PING 1.1.1.1 (1.1.1.1): 56 data bytes
64 bytes from 1.1.1.1: icmp_seq=0 ttl=59 time=32.009 ms
^Z
[1]+  Stopped                 ping 1.1.1.1
$ fg %1
ping 1.1.1.1
64 bytes from 1.1.1.1: icmp_seq=1 ttl=59 time=4161.095 ms

source

source là 1 câu lệnh built-in của bash để đọc và chạy các câu lệnh từ 1 file trong môi trường shell hiện tại. Nhưng source là của riêng bash. Dùng . cho tác dụng tương tự, nhưng chạy trên mọi shell khác.

tail -F

Trên Linux, lệnh tail có 2 option khác nhau là -f-F, -F sẽ theo file mới nếu file cũ bị thay thế (VD: log rotate), nhưng trên OpenBSD, -f hoạt động như -F trên Linux.

The end

Monday, 1 March 2021

Cấu hình chuột/phím Logitech với USB receiver/dongle

Ngày nay, những bộ chuột phím không dây dần trở nên phổ biến, với 2 loại kết nối: bluetooth và wireless.

Chuột, phím bluetooth/không dây(wireless)

  • kết nối bluetooth sử dụng... bluetooth.
  • kết nối wireless sử dụng 1 thiết bị nhỏ cắm vào cổng USB, gọi là wireless USB receiver (đầu thu không dây).

USB receiver/dongle

Khi bán các thiết bị chuột, bàn phím, cục USB receiver này thường đi kèm sẵn, khiến ta có thể lầm tưởng nó chỉ hoạt động được với thiết bị đi kèm, và mất cục nhỏ xíu đó là... tèo.

Thử tưởng tượng nhà sản xuất Logitech mỗi ngày sản xuất hàng ngàn con chuột máy tính ở 1 nhà máy, hàng ngàn USB receiver tại 1 nhà máy khác xa hàng ngàn cây số, làm sao để đảm bảo chúng khớp 1-1?

Bởi vì chúng không cần! đảm bảo điều nói trên giống như ốc và vít phải sản xuất từng cặp vậy.

USB receiver có thể cấu hình lại và "pair" với các thiết bị khác nhau.

Cấu hình USB receiver

Một USB receiver hiện đại (2020), của Logitech sử dụng công nghệ "Unifying" có thể pair 1 lúc 6 thiết bị khác nhau.

Dấu * trên receiver trong hình là logo của công nghệ Logitech Unifying.

python3 -c 'print("{} is the answer to life".format(ord("*")))'
42 is the answer to life
  • Các receiver tương tự, nếu có logo chữ G là thuộc công nghệ Lightspeed, dành cho dòng chơi game, thường có cả tên model luôn do chỉ hoạt động với model tương ứng.
  • Các receiver không có logo gọi là "nano receiver", thấy ở các sản phẩm giá thấp Logitech MK240,
  • các receiver to bằng 2 đốt ngón tay (như USB driver) gọi là micro receiver.

Trên Windows/MacOS có thể tải app Options của Logitech để cấu hình/pair các thiết bị.

Trên Linux, dùng Solaar có sẵn trong repo Ubuntu từ 16.04.

Solaar is a Linux manager for many Logitech keyboards, mice, and trackpads that connect wirelessly to a USB Unifying, Lightspeed, or Nano receiver, connect directly via a USB cable, or connect via Bluetooth. Solaar does not work with peripherals from other companies.

Sau khi pair xong, USB receiver và chuột/phím sẽ "nhớ" nhau, có thể dùng thoải mái ở các máy tính khác, khi cần thì pair lại, linh hoạt như các thiết bị bluetooth.

The end