Skip to main content

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ímChức năng
TabAuto-complete tên file/lệnh
↑ / ↓Lịch sử lệnh (history)
Ctrl + CHuỷ lệnh đang chạy (SIGINT)
Ctrl + ZTạm dừng lệnh (đưa vào background)
Ctrl + DĐóng terminal / EOF
Ctrl + LXoá màn hình (như clear)
Ctrl + AVề đầu dòng
Ctrl + EVề cuối dòng
Ctrl + RTì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
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
FileKhi nào chạy
~/.bashrcMỗi khi mở bash (non-login shell)
~/.bash_profile / ~/.profileKhi login
/etc/environmentBiến toàn hệ thống (mọi user)
/etc/profileKhi bất kỳ user login