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

Tuesday, 14 April 2020

Kỹ năng phỏng vấn

Phỏng vấn là hai từ mang yếu tố quyết định, nhưng ít khi được nhắc đến. Nó thường bị xem như sự may mắn, hay do "giỏi", hay quan hệ tốt ... Bài viết này giải đáp các thắc mắc thầm kín khi đi phỏng vấn xin việc, đặc biệt dành cho những người kiếm công việc lập trình đầu tiên.

Phỏng vấn là gì?

Khi muốn đi làm, một lập trình viên sẽ liên hệ với một công ty để "xin việc" nhằm có một công việc, được trả lương tại công ty đó, ở đây ví dụ là PAMA corp.
PAMA corp sẽ cử một hoặc một nhóm người thực hiện việc "kiểm tra đầu vào". Sau quá trình kiểm tra, nếu phía PAMA corp đồng ý, phía lập trình viên đồng ý, sẽ ký một hợp đồng lao động, rồi lập trình viên đi làm, và được trả lương.


Nộp "đơn xin việc" thế nào?

Thông thường, tức không phải các trường hợp ngoại lệ như bị "săn" đón đi làm, hay có quan hệ được "giới thiệu" vào làm, thì:
  • lập trình viên sẽ lên các trang tuyển dụng/tìm việc (như PyJobs)/trang chủ của công ty cụ thể để tìm công việc mong muốn,
  • hoặc các "head hunter" chuyên đi săn ứng viên hay HR (human resource - nhân sự) của các công ty chủ động liên hệ, mời (or gạ) nộp hồ sơ phỏng vấn. Chú ý đây là một nghề hái ra tiền, nên đừng shock nếu được mời chào đon đả.

Quy trình phỏng vấn ra sao?

Thông thường sẽ có:

Wednesday, 8 April 2020

Luyện Linux command line với wargames Overthewire.org bandit

Các CLI (chương trình giao diện dòng lệnh) trên *NIX-OS vốn rất nhiều, mỗi câu lệnh cũng hàng đống các option khác nhau, khi tìm hiểu khó mà kiếm được "bài tập" để làm, luyện, hầu hết biết được đều do "kinh nghiệm từng trải" có được khi cần sử dụng mà ra.

Trang web overthewire.org là 1 trang "wargames" để luyện chơi CaptureTheFlag (CTF) - một trò chơi ưa thích/phổ biến của giới hacker.

Image by Gerd Altmann from Pixabay
Trong các wargame trang này cung cấp, có mục bandit, vốn là phần dễ nhất, rất thích hợp làm bài tập luyện command line.
Mỗi bài đều có hướng dẫn cần dùng câu lệnh gì (option cụ thể phải tự đọc manpage hay search mà tìm hiểu).


Qua mỗi bài sẽ làm nhiệm vụ tìm ra password dể SSH vào bài sau.

Yêu cầu duy nhất là biết SSH vào server. Ví dụ với bài 'bandit0', gõ:

Saturday, 4 April 2020

disown, reptyr, nohup, tmux, screen - chạy job ở background

Khi chạy các câu lệnh command line, đặc biệt khi đang SSH vào server, ta thường nảy ra nhu cầu: cho câu lệnh tiếp tục chạy nhưng không cần phải kết nối vào server, hay tắt terminal đi.

Cách làm truyền thống là dùng lệnh `nohup` (no hang up) khi gọi câu lệnh. Câu lệnh sẽ tiếp tục chạy dù tắt terminal hay thoát khỏi server. Cú pháp:
nohup câu_lệnh_như_bình_thường

Vấn đề ở chỗ: dùng nohup yêu cầu ta phải tính trước chuyện này, phải gõ nohup trước câu lệnh cần chạy, nếu nhỡ quên nohup mà đang chạy dở chừng thì làm sao?

disown là giải pháp
tmux/screen là giải pháp gián tiếp.

disown là gì?

Wednesday, 5 February 2020

Grep, SilverSearcher (ag), RipGrep (rg) và file ẩn

Trên *NIX, một file được gọi là file ẩn (hidden file) khi tên của nó bắt đầu với dấu chấm (.).

Các file phổ biến thường gặp là các file để cấu hình các phần mềm, ví dụ: .vimrc .bashrc .gitignore .gitlabci,yml ...

Image by OpenClipart-Vectors from Pixabay

Khi muốn tìm một từ khóa bất kỳ trong các file ở thư mục hiện tại, ta có thể dùng grep:

grep -Rin noi_dung .  # dấu chấm đại diện cho thư mục hiện tại

$ mkdir testdir; echo pika > testdir/.filepassword
$ cd testdir/
$ grep -Rin pika .
./.filepassword:1:pika

Một nhược điểm của grep so với các chương trình "hiện đại" hơn như SilverSearcher (ag) hay RipGrep (rg) là

Monday, 3 February 2020

Cài Unbound làm caching DNS resolver trên máy ảo OpenBSD 6.6

 DNS Server (recursive name server)


Người dùng máy tính đặc biệt ở Việt Nam đã từng biết đổi DNS để vào Facebook những ngày mạng còn "chậm".

Những con số như 8.8.8.8 (Google DNS), 208.67.222.222 (OpenDNS) hay 1.1.1.1 (Cloudflare DNS) không còn lạ gì.
Những địa chỉ IP này có chạy 1 DNS server làm nhiệm vụ trả lời IP tương ứng của các domain được hỏi.

Ví dụ facebook.com có (những) IP là gì?
$ nslookup facebook.com 8.8.8.8
Server:        8.8.8.8
Address:    8.8.8.8#53

Non-authoritative answer:
Name:    facebook.com
Address: 31.13.95.36
Name:    facebook.com
Address: 2a03:2880:f102:83:face:b00c:0:25de

authoritative name server vs recursive resolver

Chương trình chạy ở 8.8.8.8 sẽ tìm địa chỉ IP tương ứng với domain facebook.com như bạn đã yêu cầu. Đây là một dịch vụ "trung gian", nó sẽ đi hỏi các "root nameservers" (.com, .org...) để tìm câu trả lời, bản thân nó không có câu trả lời.
Việc đi hỏi chỗ khác để lấy câu trả lời gọi là "recursive query", bởi chỗ khác cũng có thể không có câu trả lời và phải đi hỏi tiếp cấp cao hơn. Chương trình thực hiện tính năng tìm kiếm "hộ" này gọi là Recursive resolver. Khác với chương trình có câu trả lời TRỰC TIẾP cho 1 domain cụ thể - gọi là authoritative name server.

Ưu điểm của các dịch vụ này

- Tính sẵn sàng cao, ít khi bị sập (đều do những "ông lớn" internet vận hành)
- Có thể nhanh hơn, ví dụ với Google DNS 8.8.8.8, khi được truy cập, một server của Google nằm gần bạn nhất sẽ trả lời. (Phía dưới số 8.8.8.8 không phải là 1 máy ở đâu đó, mà là rất nhiều máy, và nó chọn cái nào gần bạn nhất)

NHƯỢC ĐIỂM

- Privacy (sự riêng tư): mọi câu hỏi của bạn, dịch vụ DNS đều biết. Tức là bạn vào website nào, thì Google (cho 8.8.8.8), hay Cloudflare (1.1.1.1), ... đều biết cả. Nghe có vẻ không to tát, nhưng hãy nghĩ xem, chỉ cần biết các trang web bạn vào ngày hôm nay, cũng phần LỚN biết bạn đang làm gì (youtube, facebook, hay các trang web top truy cập của Việt Nam)

Unbound