---
id: linux-shell-files
title: "Đăng nhập, man, và file"
shortTitle: "man và file"
track: linux
trackTitle: "Linux Basics & Shell Scripting"
order: 1
level: core
status: published
estimatedMinutes: 30
prerequisites:
  - git-monorepo
next: linux-filesystem-permissions
reviewedAgainst: 2026-10-13
sources:
  - title: "KodeKloud — Crash Course: Linux For Absolute Beginners"
    url: https://learn.kodekloud.com/learn/courses/crash-course-linux-for-absolute-beginners
  - title: "man(1)"
    url: https://man7.org/linux/man-pages/man1/man.1.html
  - title: "Coreutils manual"
    url: https://www.gnu.org/software/coreutils/manual/html_node/index.html
---

# Đăng nhập, man, và file

Lệnh chạy trên Linux hoặc WSL2. PowerShell không có `man` và `ls` theo nghĩa của bài này.

## Để làm gì

Vào máy xong, biết mình đang là user nào và đang đứng ở thư mục nào. Quên cờ thì mở `man` trước khi đoán. Rồi tạo, copy, đổi tên và xóa file trong một thư mục lab.

## Gồm những gì

- `whoami`, `id`, `hostname`, `pwd`.
- `man`, `man -k`, và `--help`.
- Đường dẫn tuyệt đối và tương đối.
- `ls`, `cd`, `mkdir`, `touch`, `cp`, `mv`, `rm`.

Permission và cây `/etc`, `/var` ở bài sau. Process và systemd ở bài kế đó.

## Dùng khi nào

Lần đầu vào một máy Linux, một container, hoặc WSL2. Hoặc khi không nhớ `ls` có cờ nào.

Đừng `rm -r` một đường dẫn bạn chưa in ra màn hình. `rm` không có thùng rác.

## Kiến thức cốt lõi

`whoami` in user hiện tại. `id` in uid, gid và các group. `hostname` in tên máy. `pwd` in thư mục hiện tại, gọi là working directory.

Đường dẫn bắt đầu bằng `/` là tuyệt đối, tính từ gốc filesystem. Đường dẫn không có `/` ở đầu là tương đối, tính từ `pwd`. `.` là thư mục hiện tại. `..` là thư mục cha. `~` là home của user.

`man ls` mở trang tài liệu cài cùng lệnh. `man` chia section. Section 1 là lệnh người dùng, 5 là định dạng file, 8 là lệnh quản trị. `man chmod` lấy section 1. `man 2 chmod` là system call, khác trang. Trong `man`, gõ `/` rồi từ khóa để tìm, `q` để thoát. `man -k directory` tìm theo mô tả ngắn, cùng việc với `apropos`. `ls --help` in bản ngắn ngay trên terminal, không qua pager.

`ls` liệt kê tên. `ls -l` thêm permission, owner, kích thước. `ls -a` kể cả tên bắt đầu bằng dấu chấm. `mkdir -p` tạo thư mục và cả thư mục cha nếu chưa có. `touch` tạo file rỗng, hoặc chỉ cập nhật thời điểm sửa nếu file đã có. `cp` copy file. Copy thư mục cần `cp -r`. `mv` đổi tên hoặc chuyển file sang chỗ khác. `rm` xóa file. `rmdir` chỉ xóa thư mục rỗng. `rm -r` xóa thư mục và thứ bên trong.

## Lệnh và code mẫu

```bash
whoami
id
hostname
pwd
man ls
ls --help
mkdir -p "$HOME/devops-lab/linux/docs/a"
cd "$HOME/devops-lab/linux/docs"
pwd
touch note.txt
cp note.txt a/note.txt
mv note.txt readme.txt
ls -la
ls -la a
rm a/note.txt
rmdir a
```

`man ls` chiếm terminal cho đến khi bạn gõ `q`. Muốn xem không cần pager:

```bash
man -k "list directory" | head
```

## Thực hành

1. Chạy `whoami`, `id`, `pwd`. Ghi user và đường dẫn tuyệt đối của home.
2. Mở `man ls`, tìm cờ `-a`, rồi `q`.
3. Chạy khối tạo thư mục ở trên, từ `mkdir` đến `rmdir`.
4. `cd ..` rồi `pwd`. Bạn phải đứng ở `$HOME/devops-lab/linux`, không còn trong `docs`.
5. `ls docs` phải còn `readme.txt` và không còn thư mục `a`.

## Kết quả mong đợi

- `pwd` sau `cd "$HOME/devops-lab/linux/docs"` in đường dẫn kết thúc bằng `/devops-lab/linux/docs`.
- `ls -la` có `readme.txt` và không còn `note.txt`.
- `rmdir a` thành công vì thư mục đã rỗng. `ls docs` không còn `a`.

## Checklist

- [ ] Đọc `whoami` và `pwd` trước khi sửa file trên máy lạ.
- [ ] Mở `man` đúng section khi một tên có cả lệnh và system call.
- [ ] Viết được một đường dẫn tuyệt đối và một đường dẫn tương đối tới cùng một file.
- [ ] Copy thư mục bằng `cp -r`. Xóa thư mục rỗng bằng `rmdir`.

## Thẻ ôn

### linux-shell-files-who
kind: command
cue: Vừa vào một máy Linux lạ thì chạy `whoami` và `pwd` trước khi sửa. Đường dẫn có `/` ở đầu là tuyệt đối, không có thì tính từ thư mục hiện tại.

Q: Bạn SSH vào một máy Linux chưa từng đứng trên đó, và sắp sửa một file config. Việc đầu nên làm là gì, và một đường dẫn không bắt đầu bằng `/` được tính từ đâu?

A: Chạy `whoami` để biết mình đang là user nào, vì quyền ghi phụ thuộc user đó. Chạy `pwd` để biết mình đang đứng ở thư mục nào, đừng giả định là home. Đường dẫn bắt đầu bằng `/` là tuyệt đối, tính từ gốc filesystem, đứng ở đâu cũng ra cùng một chỗ. Đường dẫn không có `/` ở đầu là tương đối, shell ghép nó với kết quả của `pwd`. Sai thư mục hiện tại thì một lệnh tưởng là vô hại sẽ đụng nhầm chỗ khác.

### linux-shell-files-man
kind: distinguish
cue: `man chmod` là trang của lệnh, section 1. `man 2 chmod` mới là system call. Cùng một tên, hai trang mô tả hai thứ.

Q: Bạn cần hiểu `chmod` gọi xuống kernel thế nào, nên gõ `man chmod`. Trang mở ra toàn ví dụ lệnh. `man chmod` và `man 2 chmod` khác nhau chỗ nào?

A: `man` xếp tài liệu theo section. Không ghi số thì nó mở section 1, trang của lệnh bạn gõ trên shell. `man 2 chmod` mở section 2, trang của system call cùng tên. Hai trang mô tả hai thứ: một bên là chương trình và cờ của nó, một bên là hàm kernel nhận. Đọc nhầm trang rồi tưởng đó là hợp đồng của system call sẽ áp sai sang code.

### linux-shell-files-cp
kind: trap
cue: `cp` không copy thư mục nếu thiếu `-r`. `cp docs backup` khi `docs` là thư mục sẽ bị từ chối. Viết `cp -r docs backup`.

Q: `docs` là một thư mục có nhiều file bên trong. Bạn gõ `cp docs backup` để nhân bản sang chỗ khác và lệnh fail. `cp` đang từ chối vì điều gì, và câu đủ để copy cả cây thư mục là gì?

A: Không có `-r`, `cp` chỉ copy file. Gặp thư mục nó dừng và không đi vào bên trong, nên `backup` không nhận được cây file bạn tưởng. Thêm `-r` để đi đệ quy: `cp -r docs backup`. Thiếu cờ này không phải lỗi đường dẫn. Nhìn thông báo thấy từ chối thư mục thì kiểm tra `-r` trước khi đi tìm chỗ khác.

### linux-shell-files-rm
kind: trap
cue: `rm` không có thùng rác. `rm -r` nhầm thư mục là mất. `pwd` và `ls` trước, rồi mới xóa đúng tên.

Q: Trong lab bạn gõ `rm -r` và nhận ra mình đang đứng ở thư mục cha, không phải thư mục định xóa. File vừa mất có lấy lại từ thùng rác được không, và trước lần xóa sau nên nhìn gì?

A: Không. `rm` gỡ tên file khỏi filesystem, không chuyển vào thùng rác của desktop. `-r` còn đi vào thư mục và xóa bên trong. Nhầm thư mục cha là mất nhiều hơn một file. Trước khi xóa, chạy `pwd` để chắc mình đang đứng đúng chỗ, `ls` để thấy đúng tên sắp xóa, rồi mới gõ lệnh với đúng tên đó. Đừng dựa vào thói quen undo.

## Lỗi thường gặp

**`man chmod` rồi tưởng đó là system call.** Trang section 1 là lệnh. System call nằm ở `man 2 chmod`. Hai trang mô tả hai thứ.

**`cp docs backup` khi `docs` là thư mục.** `cp` từ chối vì thiếu `-r`. Thư mục cần `cp -r docs backup`.

**`rm -r` nhầm thư mục cha.** `rm` không đưa file vào thùng rác. `pwd` và `ls` trước, rồi mới xóa đúng tên trong lab.

**`cd docs` khi `pwd` không phải thư mục cha của `docs`.** Shell báo không có thư mục đó. Dùng đường dẫn tuyệt đối, hoặc `cd` về đúng cha trước.

## Nguồn

1. [KodeKloud — Crash Course: Linux For Absolute Beginners](https://learn.kodekloud.com/learn/courses/crash-course-linux-for-absolute-beginners) — phạm vi và thứ tự: đăng nhập, tài liệu trên máy (`man`), tạo file và thư mục.
2. [man(1)](https://man7.org/linux/man-pages/man1/man.1.html) — section, `man -k`.
3. [GNU Coreutils](https://www.gnu.org/software/coreutils/manual/html_node/index.html) — `ls`, `mkdir`, `touch`, `cp`, `mv`, `rm`, `pwd`, `whoami`.

## Tiếp theo

[File system và permissions](./01-filesystem-permissions.md)
