Thẻ: linux cơ bản

  • FHS — Tiêu chuẩn cấu trúc thư mục

    FHS — Tiêu chuẩn cấu trúc thư mục

    Mở terminal lần đầu, nhiều người gõ cd / rồi ls — và thấy một rừng thư mục lạ: bin, etc, proc, sys, var… Không giống Windows chút nào. Không có ổ C hay ổ D. Tất cả nằm chung trong một cây thư mục duy nhất bắt đầu từ /.

    Đây không phải ngẫu nhiên. Mỗi thư mục trong Linux tồn tại vì một lý do cụ thể, được chuẩn hóa bởi Filesystem Hierarchy Standard (FHS). Hiểu được bản đồ này, bạn sẽ biết ngay file config nằm ở đâu, log được lưu chỗ nào, và tại sao /proc lại là công cụ troubleshooting mạnh nhất trên Linux.

    FHS — Tiêu chuẩn cấu trúc thư mục

    FHS là thỏa thuận chung giữa các distro Linux: dù bạn dùng Ubuntu, Debian, Rocky hay Arch, cấu trúc thư mục đều tuân theo cùng một quy ước. Điều này có nghĩa là kỹ năng navigate trên Ubuntu hoạt động ngay trên server Rocky Linux của production.

    Toàn bộ filesystem bắt đầu từ root directory, ký hiệu là / (dấu gạch chéo). Không nhầm với /root — đó là home directory của user root. / là gốc của toàn bộ cây thư mục.

    Bản đồ các thư mục quan trọng

    /etc — Trái tim cấu hình hệ thống

    /etc chứa toàn bộ file cấu hình của hệ thống và các ứng dụng. Tên viết tắt từ “Editable Text Configuration” (theo quy ước hiện đại). Đây là thư mục bạn sẽ vào nhiều nhất khi quản trị server.

    /etc/
    ├── passwd          # Danh sách user (không chứa password thật)
    ├── shadow          # Password hash (chỉ root đọc được)
    ├── group           # Danh sách group
    ├── sudoers         # Ai được quyền sudo gì
    ├── hostname        # Tên máy
    ├── hosts           # DNS tĩnh (map domain → IP)
    ├── resolv.conf     # DNS server
    ├── fstab           # Cấu hình mount point tự động khi boot
    ├── crontab         # Scheduled tasks hệ thống
    ├── ssh/
    │   └── sshd_config # Cấu hình SSH server
    ├── nginx/          # Cấu hình Nginx
    └── systemd/        # Unit files của systemd

    Quy tắc vàng: Trước khi sửa bất kỳ file nào trong /etc, backup trước:

    $ sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

    /var — Dữ liệu thay đổi liên tục

    /var (variable) chứa dữ liệu thay đổi thường xuyên trong quá trình hệ thống chạy: log, cache, database, mail queue, lock file.

    /var/
    ├── log/            # Log hệ thống và ứng dụng
    │   ├── syslog      # Log chính (Ubuntu/Debian)
    │   ├── messages    # Log chính (RHEL/Rocky)
    │   ├── auth.log    # Đăng nhập, sudo, SSH
    │   ├── kern.log    # Kernel messages
    │   └── nginx/      # Access/error log của Nginx
    ├── www/            # Web root (thường đặt website ở đây)
    ├── lib/            # State data của ứng dụng
    ├── cache/          # Cache của các package manager
    ├── spool/          # Print queue, mail queue
    └── run/            # PID files, socket files

    Trong DevSecOps, /var/log là nơi đầu tiên bạn kiểm tra khi có sự cố. Bài 8 của series này sẽ đi sâu vào log management.

    /proc — Cửa sổ vào kernel đang chạy

    /proc là một virtual filesystem — không tồn tại trên ổ đĩa. Kernel tạo ra nó trong RAM và cập nhật real-time. Mỗi process đang chạy có một thư mục con trong /proc với tên là PID của nó.

    # Xem thông tin CPU
    $ cat /proc/cpuinfo
    
    # Xem RAM
    $ cat /proc/meminfo
    
    # Xem uptime hệ thống
    $ cat /proc/uptime
    
    # Xem tất cả process đang chạy
    $ ls /proc | grep -E '^[0-9]+$'
    
    # Xem chi tiết process PID 1234
    $ ls /proc/1234/
    $ cat /proc/1234/cmdline   # Lệnh đã chạy process này
    $ cat /proc/1234/status    # Trạng thái: CPU, RAM, state
    $ ls -la /proc/1234/fd/    # File descriptors đang mở

    Ứng dụng thực tế: Khi điều tra incident, /proc/[pid]/ cho bạn biết một process đang làm gì, mở file nào, kết nối tới đâu — mà không cần cài thêm tool nào.

    /sys — Giao tiếp với hardware và kernel

    /sys (sysfs) cũng là virtual filesystem, nhưng thay vì thông tin process, nó expose cấu hình kernel và hardware. Bạn có thể đọc và ghi vào đây để thay đổi hành vi kernel mà không cần reboot.

    # Xem danh sách network interface
    $ ls /sys/class/net/
    
    # Xem tốc độ link của eth0
    $ cat /sys/class/net/eth0/speed
    
    # Bật/tắt IPv6 (không cần reboot)
    $ echo 1 | sudo tee /sys/net/ipv6/conf/all/disable_ipv6
    
    # Xem thông tin battery (laptop)
    $ cat /sys/class/power_supply/BAT0/capacity

    Trong bài Hardening (Bài 9), bạn sẽ dùng /etc/sysctl.conf để thay đổi kernel parameters một cách persistent thông qua /proc/sys.

    /tmp — Bãi rác tạm thời

    /tmp chứa file tạm thời, bị xóa khi reboot (hoặc theo policy của distro). Bất kỳ user nào cũng có thể ghi vào đây.

    # Tạo file tạm để test
    $ echo "test" > /tmp/mytest.txt
    
    # Xem policy xóa tự động
    $ cat /usr/lib/tmpfiles.d/tmp.conf

    ⚠️ Lưu ý bảo mật: /tmp là target phổ biến của malware và khai thác privilege escalation. Trong hardening, người ta thường mount /tmp với flag noexec để ngăn chạy binary từ đây.

    Các thư mục quan trọng khác

    /bin   → Binaries cơ bản (ls, cp, mv...) — link tới /usr/bin trên distro mới
    /sbin  → System binaries (fdisk, ifconfig...) — chỉ root dùng
    /usr   → User programs: /usr/bin, /usr/lib, /usr/share
    /home  → Home directory của các user (/home/richard, /home/deploy)
    /root  → Home directory của root user
    /boot  → Kernel và bootloader (GRUB)
    /dev   → Device files (ổ đĩa, terminal, random...)
    /opt   → Software cài thêm từ bên ngoài (không qua package manager)
    /mnt   → Mount point tạm thời
    /media → Mount point cho USB, CD-ROM
    /lib   → Shared libraries (.so files)

    Đường dẫn tuyệt đối vs tương đối

    Đây là khái niệm quan trọng nhất khi làm việc với filesystem:

    Đường dẫn tuyệt đối bắt đầu từ / — luôn chính xác dù bạn đang đứng ở đâu:

    $ cat /etc/nginx/nginx.conf      # Luôn tìm đúng file này
    $ cd /var/log                    # Luôn vào đúng thư mục này

    Đường dẫn tương đối tính từ thư mục hiện tại — ngắn hơn nhưng phụ thuộc vào vị trí bạn đang đứng:

    # Đang đứng ở /var
    $ cat log/nginx/access.log       # = /var/log/nginx/access.log
    $ cd ..                          # Lên /
    $ cd ../home/richard             # Từ /var lên / rồi vào /home/richard
    
    # Ký hiệu đặc biệt:
    # .   = thư mục hiện tại
    # ..  = thư mục cha
    # ~   = home directory của user hiện tại

    Mẹo thực chiến: Trong script, luôn dùng đường dẫn tuyệt đối để tránh bug khi script chạy từ thư mục khác.

    Các lệnh navigate cần biết

    # pwd — biết mình đang ở đâu
    $ pwd
    /home/richard
    
    # ls — liệt kê nội dung
    $ ls -la /etc/ssh
    
    # cd — di chuyển
    $ cd /var/log
    $ cd ..           # lên /var
    $ cd -            # quay lại /var/log (như nút Back)
    $ cd ~            # về home
    
    # tree — xem cây thư mục (cần cài: apt install tree)
    $ tree /etc/nginx
    $ tree -L 2 /var  # chỉ 2 cấp sâu
    
    # find — tìm file theo điều kiện
    $ find /etc -name "*.conf"              # tìm file .conf
    $ find /var/log -mtime -1              # sửa trong 24h qua
    $ find /home -type d -name ".ssh"      # tìm thư mục .ssh
    $ find / -perm -4000 2>/dev/null       # tìm file SUID (quan trọng cho SecOps)
    
    # locate — tìm nhanh qua database index
    $ sudo updatedb                        # cập nhật database
    $ locate sshd_config                   # tìm ngay lập tức

    find vs locate: find tìm real-time trên ổ đĩa — chậm hơn nhưng luôn chính xác. locate tìm qua database được index trước — rất nhanh nhưng có thể cũ nếu chưa updatedb.

    Đây là phần nhiều người bỏ qua nhưng lại xuất hiện thường xuyên khi debug hoặc thiết kế hệ thống.

    Inode là gì?

    Mỗi file trên Linux thực ra gồm hai phần tách biệt:

    1. Inode — metadata của file: kích thước, quyền, timestamps, con trỏ đến vị trí data trên ổ đĩa. Không chứa tên file.
    2. Directory entry — ánh xạ giữa tên file và inode number.
    # Xem inode number của file
    $ ls -li /etc/hosts
    131073 -rw-r--r-- 1 root root 221 May 10 09:00 /etc/hosts
    # 131073 là inode number
    
    # Xem thông tin inode chi tiết
    $ stat /etc/hosts
      File: /etc/hosts
      Size: 221
      Inode: 131073
      Links: 1
      Access: (0644/-rw-r--r--)
      Modify: 2026-05-10 09:00:00

    Hard link là một tên file khác trỏ vào cùng một inode. Không tốn thêm dung lượng, không phân biệt “original” hay “link”:

    # Tạo hard link
    $ ln /etc/hosts /tmp/hosts-hardlink
    
    # Cả hai trỏ vào cùng inode
    $ ls -li /etc/hosts /tmp/hosts-hardlink
    131073 -rw-r--r-- 2 root root 221 ... /etc/hosts
    131073 -rw-r--r-- 2 root root 221 ... /tmp/hosts-hardlink
    # Cùng inode 131073, Links count = 2
    
    # Xóa một cái, file vẫn tồn tại qua cái kia
    $ rm /tmp/hosts-hardlink
    $ cat /etc/hosts   # Vẫn đọc được

    Giới hạn của hard link: Không thể tạo hard link xuyên filesystem, không thể hard link thư mục.

    Symlink là file đặc biệt chứa đường dẫn đến file/thư mục khác — giống shortcut trên Windows. Có inode riêng.

    # Tạo symlink (-s = symbolic)
    $ ln -s /etc/nginx/nginx.conf ~/nginx.conf
    
    # Xem symlink
    $ ls -la ~/nginx.conf
    lrwxrwxrwx 1 richard richard 22 ... nginx.conf -> /etc/nginx/nginx.conf
    # Dấu l ở đầu = symlink, -> chỉ đến đích
    
    # Symlink có thể trỏ đến thư mục
    $ ln -s /var/log/nginx ~/logs
    
    # Kiểm tra symlink còn valid không
    $ readlink -f ~/nginx.conf

    Symlink bị “broken” khi file gốc bị xóa hoặc di chuyển — lúc này symlink vẫn tồn tại nhưng trỏ vào khoảng không.

    Dùng khi nào?

    • Hard link: Backup, deduplication, khi cần đảm bảo data tồn tại dù một đường dẫn bị xóa.
    • Symlink: Mọi trường hợp còn lại — config, deploy, version switching.
    # Pattern phổ biến trong deploy: dùng symlink để switch version
    $ ls -la /var/www/
    myapp-v1.2.0/    # thư mục thật
    myapp-v1.3.0/    # thư mục thật
    current -> myapp-v1.3.0/   # symlink — Nginx trỏ vào đây
    
    # Deploy version mới: chỉ cần đổi symlink, không downtime
    $ ln -sfn /var/www/myapp-v1.4.0 /var/www/current

    Mount Points — Filesystem trong Filesystem

    Trên Linux, mọi thiết bị lưu trữ đều được “gắn” vào một điểm trong cây thư mục. Đây gọi là mount point. Ổ đĩa thứ hai không xuất hiện như ổ D — nó được mount vào /data hoặc /mnt/disk2.

    # Xem tất cả filesystem đang được mount
    $ mount | column -t
    
    # Xem dạng gọn hơn
    $ df -hT
    Filesystem     Type      Size  Used Avail Use% Mounted on
    /dev/sda1      ext4       50G   12G   36G  25% /
    /dev/sda2      ext4      200G   80G  108G  43% /data
    tmpfs          tmpfs     3.9G     0  3.9G   0% /dev/shm
    
    # Xem mount points dạng cây
    $ findmnt

    /etc/fstab — Mount tự động khi boot

    File /etc/fstab định nghĩa filesystem nào được mount tự động mỗi khi boot:

    $ cat /etc/fstab
    # <device>    <mount point>  <type>  <options>        <dump> <pass>
    UUID=abc123   /              ext4    defaults           0      1
    UUID=def456   /data          ext4    defaults,noatime   0      2
    UUID=ghi789   /boot          ext4    defaults           0      2
    tmpfs         /tmp           tmpfs   nodev,nosuid,noexec 0     0

    Chú ý cột optionsnodev,nosuid,noexec trên /tmp là hardening cơ bản: không cho phép device file, SUID, và chạy binary từ /tmp.

    # Mount thủ công (tạm thời, không lưu qua reboot)
    $ sudo mount /dev/sdb1 /mnt/usb
    
    # Unmount
    $ sudo umount /mnt/usb
    
    # Mount theo fstab (chỉ cần ghi /mnt/data nếu đã có trong fstab)
    $ sudo mount /mnt/data

    /proc và /sys trong troubleshooting thực tế

    Đây là lý do tại sao hiểu filesystem quan trọng với DevSecOps — bạn có thể debug mà không cần cài thêm tool:

    # Server chậm? Xem load average real-time
    $ watch -n 1 cat /proc/loadavg
    
    # Tìm process đang mở quá nhiều file (potential file descriptor leak)
    $ ls /proc/*/fd | wc -l
    
    # Xem network connections của process PID 1234
    $ cat /proc/1234/net/tcp
    
    # Kiểm tra kernel parameters bảo mật
    $ cat /proc/sys/net/ipv4/ip_forward         # IP forwarding
    $ cat /proc/sys/kernel/randomize_va_space   # ASLR
    
    # Xem memory map của process (useful khi phân tích malware)
    $ cat /proc/1234/maps
    
    # Detect process đang chạy từ /tmp (dấu hiệu xấu)
    $ ls -la /proc/*/exe 2>/dev/null | grep tmp

    Tổng kết

    Filesystem Linux không hề ngẫu nhiên — nó là một hệ thống được thiết kế cẩn thận:

    • 🔧 /etc — mọi config đều ở đây, backup trước khi sửa
    • 📋 /var — log, cache, runtime data — nơi đầu tiên kiểm tra khi debug
    • 🔬 /proc — cửa sổ vào kernel, real-time, không cần tool thêm
    • ⚙️ /sys — điều chỉnh kernel và hardware on-the-fly
    • 🗑️ /tmp — tạm thời, mount với noexec trong môi trường production

    Hiểu rõ symlink giúp bạn thiết kế deploy pipeline không downtime. Hiểu inode giúp bạn debug những lỗi kỳ lạ khi “file đã xóa mà disk vẫn đầy”. Hiểu mount point giúp bạn thiết kế partition scheme đúng cho server production.

    Bài tiếp theo sẽ đi vào Permissions, Users & Groups — hệ thống phân quyền của Linux và tại sao hiểu đúng chmod, SUID, sudo là điều kiện tiên quyết để làm bảo mật.

  • Linux là gì? Tại sao DevSecOps không thể bỏ qua?

    Linux là gì? Tại sao DevSecOps không thể bỏ qua?

    Bạn đang vận hành thứ mình không hiểu — đó là rủi ro lớn nhất

    Hơn 96% trong số 1 triệu website lớn nhất thế giới chạy trên Linux. Toàn bộ hạ tầng cloud — AWS EC2, Google Cloud, Azure VM — mặc định dùng Linux. Mọi container Docker, mọi cluster Kubernetes, mọi CI/CD pipeline đều sống trên Linux kernel.

    Trong lĩnh vực bảo mật, bức tranh còn rõ hơn: Trellix XDR agent, QRadar WinCollect, BeyondTrust Password Safe server, Wazuh, CrowdStrike Falcon — tất cả đều là Linux binary chạy trên Linux host.

    Nếu bạn làm DevSecOps mà chưa hiểu Linux, bạn đang vận hành một hệ thống mà mình không thực sự kiểm soát. Bạn biết dùng tool, nhưng không biết tool đó đang làm gì bên dưới. Đó là khoảng mù nguy hiểm nhất trong bảo mật.

    Serie này sẽ đóng khoảng mù đó, từng bước một.

    Linux là gì?

    Năm 1991, Linus Torvalds — sinh viên 21 tuổi người Phần Lan — đăng một thông báo trên mailing list với nội dung đại khái: “Tôi đang làm một hệ điều hành miễn phí, chỉ là hobby thôi, sẽ không to lớn như GNU.” Đó là lúc Linux kernel ra đời.

    Nhưng kernel không phải hệ điều hành hoàn chỉnh. Kernel là phần lõi — nó quản lý CPU, RAM, thiết bị phần cứng, và là cầu nối giữa phần mềm với phần cứng. Còn để có một hệ điều hành dùng được, bạn cần thêm shell, compiler, thư viện hệ thống, và các công cụ cơ bản — phần đó đến từ dự án GNU của Richard Stallman.

    Kết hợp lại, ta có GNU/Linux — thứ mà hầu hết mọi người gọi tắt là “Linux”.

    Analogy dễ nhớ: Kernel giống như động cơ xe. Distro (Ubuntu, Rocky, Debian…) giống như cả chiếc xe — cùng một loại động cơ, nhưng dashboard, ghế ngồi, và tính năng có thể khác nhau hoàn toàn.

    Kernel space vs Userspace — tại sao điều này quan trọng với bảo mật

    Linux chia bộ nhớ thành hai vùng tách biệt:

    • Kernel space: Nơi kernel chạy, có toàn quyền truy cập phần cứng. Code chạy ở đây có thể làm bất cứ điều gì với hệ thống.
    • Userspace: Nơi tất cả ứng dụng của bạn chạy — trình duyệt, web server, agent bảo mật. Muốn làm gì với phần cứng, phải “xin phép” kernel qua system call.

    Phân tách này là cơ chế bảo mật căn bản nhất của Linux. Khi một malware chiếm được process trong userspace, nó vẫn bị giới hạn. Chỉ khi leo thang đặc quyền lên kernel space (privilege escalation) mới thực sự nguy hiểm — đó là lý do các kernel exploit như Dirty COW hay Dirty Pipe từng gây chấn động cộng đồng bảo mật.

    FOSS — bảo mật nhờ minh bạch

    Linux là phần mềm mã nguồn mở (Free and Open Source Software). Toàn bộ source code của kernel có thể xem tại kernel.org. Điều này không làm Linux kém an toàn hơn — ngược lại, hàng nghìn kỹ sư bảo mật trên toàn thế giới đang liên tục review, audit, và vá lỗi.

    So sánh với Windows: khi có lỗ hổng trong Windows kernel, bạn phải chờ Microsoft vá. Với Linux, cộng đồng thường phát hiện và có patch trong vài giờ.

    Distro landscape — chọn đúng cho đúng mục đích

    Vì Linux là open source, bất kỳ ai cũng có thể lấy kernel và đóng gói thành hệ điều hành riêng. Đó là lý do có hàng trăm “distro” (distribution) Linux khác nhau. Nhưng trong thực tế DevSecOps, bạn chỉ cần biết một vài nhóm chính:

    DistroPackage ManagerUse caseSecurity default
    Ubuntu / DebianaptDev lab, cloud, containerAppArmor
    RHEL / Rocky / AlmaLinuxdnf / yumEnterprise, banking, productionSELinux
    Alpine LinuxapkContainer base imageMinimal attack surface
    Kali / ParrotaptPenetration testingN/A (không dùng làm server)

    Khuyến nghị cho serie này:

    • Ubuntu 24.04 LTS — dùng cho lab thực hành. Cộng đồng lớn, tài liệu nhiều, dễ setup.
    • Rocky Linux 9 — dùng cho các scenario enterprise. Tương thích 1:1 với RHEL, SELinux enabled mặc định.

    Nếu bạn làm việc ở ngân hàng hoặc tổ chức tài chính, khả năng cao server production đang chạy RHEL hoặc Oracle Linux — đều thuộc nhóm Red Hat family, dùng dnf và có SELinux.

    Linux trong DevSecOps pipeline — cụ thể hóa

    Hãy nhìn vào một pipeline DevSecOps điển hình và đếm xem Linux xuất hiện bao nhiêu lần:

    Dev side:

    • Developer push code lên GitLab — GitLab server chạy trên Linux
    • CI/CD runner (GitLab Runner, Jenkins agent) — Linux container
    • Docker build image — Linux daemon
    • SAST scan bằng SonarQube — Linux service

    Sec side:

    • WAF (ModSecurity, AWS WAF) ghi log theo định dạng syslog Linux
    • Auditd trên Linux host ghi lại mọi syscall đáng ngờ
    • Agent của XDR (Trellix, CrowdStrike) là Linux binary inject vào kernel
    • Log được forward qua syslog-ng/rsyslog lên SIEM

    Ops side:

    • Systemd quản lý lifecycle của mọi service
    • Cron job chạy backup, cleanup, health check
    • Prometheus node_exporter đọc metrics từ /proc filesystem của Linux

    Từ lúc developer commit code đến lúc alert lên SIEM, Linux có mặt ở từng bước. Không hiểu Linux là không hiểu pipeline của mình.

    CLI vs GUI — tại sao bắt buộc phải dùng terminal

    Đây là điều nhiều người mới ngại nhất: cửa sổ đen với dòng chữ trắng, không có nút bấm, không có menu chuột.

    Có ba lý do bắt buộc phải thành thạo CLI:

    1. Server không có màn hình. Khi bạn SSH vào một server production lúc 2 giờ sáng để xử lý incident, bạn chỉ có terminal. Không có GUI. Nếu không biết CLI, bạn bất lực.

    2. Automation chỉ làm được bằng CLI. Không thể script thao tác chuột. Nhưng có thể viết bash script chạy 500 server cùng lúc. Ansible, Terraform, mọi IaC tool đều hoạt động qua CLI.

    3. Forensics và incident response dùng CLI tool. netstat, ss, lsof, ps, strace, tcpdump — tất cả đều là CLI. Khi bạn cần tìm process đang mở kết nối ra ngoài lúc 2 giờ sáng, chỉ có terminal mới đủ nhanh.

    Mindset quan trọng: Terminal không phải “giao diện khó dùng” — nó là công cụ precision. Bạn nói chính xác với máy tính cần làm gì, không cần click qua 5 màn hình. Khi đã quen, bạn sẽ thấy GUI chậm chạp và thiếu kiểm soát hơn.

    Lab thực hành — Setup môi trường ngay hôm nay

    Trước khi vào Bài 2, bạn cần có môi trường Linux để thực hành. Có 3 cách:

    Option A: WSL2 trên Windows (Khuyên dùng cho người mới)

    WSL2 (Windows Subsystem for Linux 2) cho phép chạy Linux ngay trong Windows mà không cần dual-boot hay máy ảo nặng nề.

    # Mở PowerShell với quyền Administrator, chạy lệnh:
    wsl --install -d Ubuntu-24.04
    
    # Sau khi cài xong, restart máy và mở Ubuntu từ Start Menu
    

    Ưu điểm: zero overhead, tích hợp với VS Code, file system shared với Windows.

    Option B: VirtualBox + Ubuntu ISO

    Tải Ubuntu 24.04 LTS từ ubuntu.com và tạo máy ảo trong VirtualBox. Phân bổ tối thiểu 2 CPU, 4GB RAM, 20GB disk. Quan trọng: Tạo snapshot trước mỗi bài thực hành để có thể rollback nếu làm hỏng.

    Option C: VPS trên cloud (Môi trường real nhất)

    DigitalOcean Droplet hoặc Vultr VPS từ $6/tháng. Đây là môi trường gần nhất với production — có IP public, SSH từ bên ngoài, và bạn chịu trách nhiệm bảo mật nó.

    Verify cài đặt thành công

    Sau khi setup xong, chạy 3 lệnh sau:

    # Xem thông tin kernel
    uname -a
    
    # Xem distro và version
    cat /etc/os-release
    
    # Xem bạn đang là user nào
    whoami
    

    Nếu thấy output từ cả 3 lệnh — bạn đã sẵn sàng.

    Checklist — Sẵn sàng sang Bài 2 chưa?

    Trước khi đọc tiếp Bài 2, hãy tự kiểm tra:

    • [ ] Giải thích được sự khác nhau giữa kerneldistro
    • [ ] Biết khi nào dùng Ubuntu, khi nào dùng Rocky Linux
    • [ ] Hiểu tại sao phân tách kernel space / userspace quan trọng với bảo mật
    • [ ] Đã setup môi trường Linux và chạy thành công uname -a
    • [ ] Hiểu tại sao CLI là kỹ năng bắt buộc, không phải tùy chọn

    Nếu tick được hết 5 ô — sang Bài 2 ngay: Filesystem & Navigation.