Terminal & Quản lý File
Terminal, Shell và Bash
Terminal vs Shell vs Console
- Terminal: Cửa sổ giao diện (gnome-terminal, tmux, SSH session)
- Shell: Chương trình phiên dịch lệnh. Bash là shell mặc định trên hầu hết Linux
- Console: Terminal vật lý kết nối thẳng vào máy (tty1–tty6)
Cấu trúc lệnh cơ bản
COMMAND [OPTIONS] [ARGUMENTS]
│ │ │
│ │ └── Đối tượng (file, thư mục, IP...)
│ └── Cờ điều chỉnh hành vi (-l, --long, -v)
└── Tên chương trình (ls, grep, cp...)
ls -la /etc/nginx # ls=lệnh, -la=options, /etc/nginx=argument
grep -rn "error" /var/log/ # tìm "error" đệ quy trong thư mục
cp -r /src/app /backup/ # copy đệ quy
Phím tắt Bash quan trọng
| Phím | Chức năng |
|---|---|
Tab | Auto-complete tên file/lệnh |
↑ / ↓ | Lịch sử lệnh (history) |
Ctrl + C | Huỷ lệnh đang chạy (SIGINT) |
Ctrl + Z | Tạm dừng lệnh (đưa vào background) |
Ctrl + D | Đóng terminal / EOF |
Ctrl + L | Xoá màn hình (như clear) |
Ctrl + A | Về đầu dòng |
Ctrl + E | Về cuối dòng |
Ctrl + R | Tìm kiếm lịch sử lệnh (reverse search) |
!! | Chạy lại lệnh trước |
!$ | Đối số cuối của lệnh trước |
# Xem và tìm lịch sử lệnh
history
history | grep "docker"
# Ctrl+R → gõ keyword để tìm lệnh đã dùng
# (reverse-i-search)`doc': docker run -it ubuntu bash
Điều hướng thư mục
# Xem vị trí hiện tại
pwd # Print Working Directory → /home/sontn
# Di chuyển thư mục
cd /etc/nginx # đường dẫn tuyệt đối (từ root /)
cd nginx # đường dẫn tương đối (từ vị trí hiện tại)
cd .. # lên một cấp
cd ~ # về home directory
cd - # quay lại thư mục trước đó
# Liệt kê file
ls # danh sách đơn giản
ls -l # long format (permission, size, date)
ls -la # bao gồm file ẩn (bắt đầu bằng .)
ls -lh # kích thước dễ đọc (K, M, G)
ls -ltr # sắp xếp theo thời gian, cũ nhất trước
ls /etc/*.conf # glob — tất cả .conf trong /etc
# Đọc output của ls -la:
# drwxr-xr-x 2 sontn devops 4096 Jan 15 10:30 mydir
# │└─────────┘ └────┘ └────┘ └──┘ └──────────┘ └────┘
# │ permission owner group size thời gian tên
# d = directory | - = file | l = symlink
Tạo và xoá file, thư mục
# Tạo
mkdir mydir # tạo thư mục
mkdir -p a/b/c # tạo cả cây thư mục
touch file.txt # tạo file rỗng / cập nhật timestamp
touch file{1..5}.txt # tạo file1.txt đến file5.txt
# Xoá
rm file.txt # xoá file
rm -f file.txt # xoá không hỏi (force)
rm -r mydir/ # xoá thư mục đệ quy
rm -rf mydir/ # xoá đệ quy, không hỏi ⚠️
rmdir emptydir/ # chỉ xoá thư mục RỖNG
Cẩn thận với rm -rf
rm -rf không có thùng rác. File bị xoá không thể khôi phục dễ dàng.
Luôn dùng ls để kiểm tra đường dẫn trước khi xoá. Tuyệt đối không chạy rm -rf / hoặc rm -rf /*.
Copy, Di chuyển, Symlink
# Copy
cp file.txt backup.txt # copy file
cp -r src/ dst/ # copy thư mục
cp -p file.txt backup.txt # giữ nguyên permission & timestamp
cp -v file.txt /tmp/ # verbose
# Di chuyển / Đổi tên
mv old.txt new.txt # đổi tên file
mv file.txt /tmp/ # di chuyển file
mv dir1/ /opt/dir1 # di chuyển thư mục
# Symlink (đường dẫn mềm)
ln -s /etc/nginx/nginx.conf ~/nginx.conf # tạo symlink
ls -la ~/nginx.conf # lrwxrwxrwx → /etc/nginx/nginx.conf
Xem nội dung file
# Xem toàn bộ
cat file.txt # in toàn bộ file
cat -n file.txt # thêm số dòng
cat file1.txt file2.txt # ghép nhiều file
# Xem từng trang (scroll)
less /var/log/syslog # scroll được, q để thoát
more /var/log/syslog # chỉ scroll xuống
# Xem đầu/cuối file
head file.txt # 10 dòng đầu (default)
head -n 50 file.txt # 50 dòng đầu
tail file.txt # 10 dòng cuối
tail -n 100 /var/log/nginx/error.log # 100 dòng cuối
tail -f /var/log/nginx/access.log # theo dõi real-time (follow)
tail -F /var/log/app.log # follow kể cả khi file bị rotate
Tìm kiếm nội dung — grep
grep "error" /var/log/syslog # tìm dòng chứa "error"
grep -i "error" /var/log/syslog # case-insensitive
grep -n "error" /var/log/syslog # hiện số dòng
grep -r "TODO" /home/sontn/code/ # tìm đệ quy trong thư mục
grep -v "DEBUG" app.log # loại trừ dòng chứa DEBUG
grep -E "error|warn|fatal" app.log # regex — OR nhiều pattern
grep -c "error" app.log # đếm số dòng match
grep -A 3 -B 3 "FATAL" app.log # hiện 3 dòng trước/sau match
grep -l "error" /var/log/*.log # chỉ hiện tên file có match
Tìm file trên hệ thống — find
# Tìm theo tên
find / -name "nginx.conf" # từ root
find /etc -name "*.conf" # file .conf trong /etc
find . -name "*.py" -type f # chỉ file (không phải thư mục)
find . -type d -name "node_modules" # tìm thư mục
# Tìm theo thuộc tính
find /var/log -name "*.log" -mtime -1 # thay đổi trong 1 ngày gần đây
find /tmp -type f -size +100M # file lớn hơn 100MB
find /home -user sontn # file thuộc về user sontn
# Tìm rồi thực thi lệnh
find /etc -name "*.conf" -exec ls -la {} \; # ls từng file tìm được
find /tmp -name "*.tmp" -delete # xoá luôn
# Tìm nhanh (dùng database — cần updatedb)
locate nginx.conf
sudo updatedb # cập nhật database của locate
# Tìm vị trí binary
which python3 # /usr/bin/python3
which docker # /usr/bin/docker
whereis nginx # nginx: /usr/sbin/nginx /etc/nginx
Environment Variables và Shell Config
# Xem biến môi trường
env # tất cả biến
printenv PATH # biến cụ thể
echo $HOME # home directory
echo $USER # current user
echo $SHELL # shell đang dùng
echo $PATH # thư mục chứa binary
# Đặt biến
export DB_HOST="localhost" # export để subprocess nhìn thấy
export DB_PORT=5432
MY_VAR="local only" # không export → chỉ shell hiện tại
# Cấu hình persistent qua ~/.bashrc
alias ll='ls -la --color=auto'
alias k='kubectl'
alias dc='docker-compose'
export EDITOR=vim
export PATH="$PATH:/opt/mytools/bin"
source ~/.bashrc # reload ngay, không cần logout
| File | Khi nào chạy |
|---|---|
~/.bashrc | Mỗi khi mở bash (non-login shell) |
~/.bash_profile / ~/.profile | Khi login |
/etc/environment | Biến toàn hệ thống (mọi user) |
/etc/profile | Khi bất kỳ user login |