Hướng dẫn lệnh Shell Linux

Các lệnh xử lý tệp tin

touch file                      # Tạo tệp trống
rm -rf tên_thư_mục              # Xóa thư mục không rỗng mà không xác nhận (-r: đệ quy, -f: buộc)
dos2unix                        # Chuyển định dạng văn bản từ Windows sang Linux
unix2dos                        # Chuyển định dạng văn bản từ Linux sang Windows
enca tên_tệp                    # Kiểm tra mã hóa ký tự; cài đặt bằng yum install -y enca
md5sum                          # Hiển thị giá trị MD5
ln tệp_gốc tệp_mục_tiêu         # Tạo liên kết cứng
ln -s tệp_gốc tệp_mục_tiêu      # Tạo liên kết mềm
readlink -f /data               # Xem đường dẫn thực sự của một liên kết
cat file | nl | less            # Xem nội dung có số dòng và hỗ trợ cuộn trang (nhấn q để thoát)
head                            # Xem phần đầu tệp
head -c 10m                     # Trích xuất 10MB dữ liệu từ đầu tệp
split -C 10M                    # Cắt tệp thành các phần nhỏ 10MB
tail -f file                    # Theo dõi nhật ký theo thời gian thực
file                            # Kiểm tra loại tệp
umask                           # Điều chỉnh quyền mặc định
uniq                            # Loại bỏ các dòng trùng lặp
uniq -c                         # Đếm số lần xuất hiện của từng dòng trùng
uniq -u                         # Chỉ hiển thị các dòng không trùng
paste a b                       # Gộp hai tệp với tab làm dấu phân cách
paste -d'+' a b                 # Gộp hai tệp với dấu '+' làm dấu phân cách
paste -s a                      # Gộp nhiều dòng thành một dòng dùng tab
chattr +i /etc/passwd           # Đặt thuộc tính chống thay đổi
more                            # Trình xem nội dung theo từng trang xuống dưới
locate chuỗi                    # Tìm kiếm tệp
wc -l file                      # Đếm số dòng trong tệp
cp filename{,.bak}              # Sao lưu nhanh một tệp
\cp a b                         # Sao chép mà không hỏi xác nhận (bỏ qua alias cp -i)
rev                             # Đảo ngược thứ tự các ký tự trong dòng
comm -12 2 3                    # So sánh các dòng giữa hai tệp
iconv -f gbk -t utf8 gốc.txt > mới.txt   # Chuyển đổi mã hóa ký tự
rename mẫu_cũ mẫu_mới tệp        # Đổi tên hàng loạt, hỗ trợ biểu thức chính quy
watch -d -n 1 'df; ls -FlAt /đường_dẫn'  # Theo dõi thay đổi mới nhất trong thư mục
cp -v /dev/dvd /rhel4.6.iso     # Tạo bản sao hình ảnh đĩa
diff suzu.c suzu2.c > sz.patch   # Tạo bản vá
patch suzu.c < sz.patch          # Áp dụng bản vá

Sắp xếp với lệnh sort

-t ký_tự       # Chỉ định ký tự phân cách trường khi sắp xếp
-n             # Sắp xếp theo giá trị số
-r             # Sắp xếp theo thứ tự nghịch đảo
-f             # Bỏ qua phân biệt chữ hoa/thường khi sắp xếp
-d             # Chỉ xét chữ cái, chữ số và khoảng trắng, bỏ qua các ký tự khác
-c             # Kiểm tra tệp đã được sắp xếp chưa
-b             # Bỏ qua khoảng trắng ở đầu mỗi dòng
-M             # Sắp xếp theo tên tháng rút gọn (Jan, Feb,...)
-k trường      # Chỉ định trường dùng để sắp xếp
-m             # Hợp nhất nhiều tệp đã được sắp xếp
+start-end     # Sắp xếp theo khoảng trường chỉ định
-o tệp         # Lưu kết quả sắp xếp vào tệp
sort -n                        # Sắp xếp tăng dần theo số
sort -nr                       # Sắp xếp giảm dần theo số
sort -u                        # Lọc các dòng trùng
sort -m a.txt c.txt            # Hợp nhất nội dung hai tệp
sort -n -t' ' -k 2 -k 3 a.txt  # Sắp xếp theo trường 2, nếu trùng thì dùng trường 3
sort -n -t':' -k 3r a.txt      # Dùng dấu : làm phân cách, sắp xếp trường 3 theo thứ tự giảm dần
sort -k 1.3 a.txt              # Bắt đầu sắp xếp từ ký tự thứ 3 trở đi
sort -t" " -k 2n -u a.txt      # Sắp xếp theo trường 2, xóa dòng trùng nếu có

Tìm kiếm với lệnh find

# Linux không có khái niệm "thời gian tạo"
# Access: Thời gian sử dụng gần nhất
# Modify: Thời gian sửa nội dung
# Change: Thời gian thay đổi trạng thái (quyền, chủ sở hữu)
# Thời gian tính theo khoảng 24 giờ
# -and: Phù hợp cả hai điều kiện
# -or: Phù hợp ít nhất một điều kiện

find /etc -name http           # Tìm theo tên tệp
find . -type f                 # Tìm tệp theo loại
find / -perm                   # Tìm theo quyền truy cập
find / -user                   # Tìm theo chủ sở hữu
find / -group                  # Tìm theo nhóm sở hữu
find / -atime -n               # Tìm tệp được truy cập trong n ngày gần đây
find / -atime +n               # Tìm tệp được truy cập trước n ngày
find / -mtime -n               # Tìm tệp nội dung thay đổi trong n ngày gần đây
find / -mtime +n               # Tìm tệp nội dung thay đổi trước n ngày
find / -ctime +n               # Tìm tệp trạng thái thay đổi trước n ngày
find / -ctime -n               # Tìm tệp trạng thái thay đổi trong n ngày gần đây
find / -size +1000000c -print  # Tìm tệp lớn hơn 1MB
find /etc -name "passwd*" -exec grep "xuesong" {} \;    # Tìm tệp rồi truyền cho lệnh grep
find . -name 't*' -exec basename {} \;                 # Tìm tệp, chỉ lấy tên không lấy đường dẫn
find . -type f -name "err*" -exec rename err ERR {} \;  # Đổi tên hàng loạt
find đường_dẫn -name *tên1* -or -name *tên2*             # Tìm theo một trong các từ khóa

Trình soạn thảo Vim

gconf-editor                 # Công cụ cấu hình
/etc/vimrc                   # Đường dẫn tệp cấu hình
vim +24 file                 # Mở tệp tại dòng 24
vim file1 file2              # Mở nhiều tệp cùng lúc
vim -O2 file1 file2          # Chia màn hình dọc
vim -on file1 file2          # Chia màn hình ngang
sp tên_tệp                   # Chia cửa sổ theo chiều dọc
vsp tên_tệp                  # Chia cửa sổ theo chiều ngang
Ctrl+W [tác_vụ]              # Điều khiển giữa các cửa sổ (c: đóng, =: đồng đều kích thước, +: tăng kích thước, h/j/k/l: di chuyển)
:n                           # Chuyển sang tệp tiếp theo
:2n                          # Chuyển sang tệp thứ hai
:N                           # Quay lại tệp trước đó
:rew                         # Về tệp đầu tiên
:set nu                      # Bật hiển thị số dòng
:set nonu                    # Tắt hiển thị số dòng
200G                         # Nhảy đến dòng 200
:nohl                        # Bỏ đánh dấu tìm kiếm
:set autoindent              # Bật thụt lề tự động
:set ff                      # Xem định dạng tệp
:set binary                  # Chuyển sang định dạng Unix
Ctrl+U                       # Lật lên một trang
Ctrl+D                       # Lật xuống một trang
%s/từ1/từ2/g                 # Thay thế toàn bộ
X                            # Mã hóa tài liệu

Nén và giải nén

tar zxvpf gz.tar.gz -C /đường_dẫn   # Giải nén tệp gz vào thư mục chỉ định
tar zcvpf /đường_dẫn/gz.tar.gz *    # Nén thành gz (dùng đường dẫn tương đối tốt hơn)
tar zcf /đường_dẫn/gz.tar.gz *      # Nén thành gz, không thông báo lỗi
tar ztvpf gz.tar.gz                # Xem danh sách tệp trong gz
tar xvf 1.tar -C /thư_mục          # Giải nén tệp tar
tar -cvf 1.tar *                   # Nén thành tar
tar tvf 1.tar                      # Xem danh sách tệp trong tar
tar -rvf 1.tar tên_tệp             # Thêm tệp vào tar đã có
tar --exclude=/home/dmtsai -zcvf myfile.tar.gz /home/* /etc   # Nén nhưng loại trừ thư mục chỉ định
tar -N "2005/06/01" -zcvf home.tar.gz /home   # Chỉ nén những tệp trong /home mới hơn ngày 2005/06/01
tar -zcvfh home.tar.gz /home       # Nén cả thư mục liên kết
zgrep từ_khóa 1.gz                 # Tìm trong tệp nén gz
bzip2 -dv 1.tar.bz2                # Giải nén bzip2
bzip2 -v 1.tar                     # Nén bằng bzip2
bzcat                              # Xem nội dung tệp bzip2
gzip A                             # Nén trực tiếp (tệp gốc bị xóa)
gunzip A.gz                        # Giải nén trực tiếp (tệp gốc bị xóa)
gzip -dv 1.tar.gz                  # Giải nén gzip thành tar
gzip -v 1.tar                      # Nén tar thành gz
unzip zip.zip                      # Giải nén zip
zip zip.zip *                      # Nén thành zip
rar a rar.rar *.jpg                # Nén thành rar
unrar x rar.rar                    # Giải nén rar
7z a 7z.7z *                       # Nén bằng 7z
7z e 7z.7z                         # Giải nén 7z

Quản lý gói RPM

rpm -ivh lynx            # Cài đặt gói rpm
rpm -e lynx              # Gỡ cài đặt
rpm -e lynx --nodeps     # Gỡ cài đặt bất chấp phụ thuộc
rpm -qa                  # Liệt kê tất cả gói đã cài
rpm -qa | grep lynx      # Kiểm tra gói đã cài chưa
rpm -ql                  # Hiển thị đường dẫn các tệp trong gói
rpm -Uvh                 # Cập nhật gói
rpm --test lynx          # Kiểm thử cài đặt
rpm -qc                  # Hiển thị tệp cấu hình của gói
rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6     # Nhập khóa chữ ký rpm

Quản lý gói YUM

yum list                         # Liệt kê tất cả gói có sẵn
yum install tên_gói              # Cài đặt gói và phụ thuộc
yum -y update                    # Cập nhật tất cả gói, hệ thống và kernel
yum -y update tên_gói            # Cập nhật gói cụ thể
yum -y upgrade                   # Cập nhật phần mềm nhưng giữ nguyên phiên bản hệ thống
yum search mail                  # Tìm kiếm gói
yum grouplist                    # Danh sách nhóm gói
yum -y groupinstall "Virtualization"   # Cài đặt nhóm gói

Thiết lập nguồn YUM tùy chỉnh

# Tìm gói tại: http://download.fedoraproject.org/pub/epel
wget http://download.fedoraproject.org/pub/epel/5/i386/epel-release-5-4.noarch.rpm
rpm -Uvh epel-release-5-4.noarch.rpm

Cài đặt từ mã nguồn

./configure --help                    # Xem tất cả tùy chọn biên dịch
./configure --prefix=/usr/local/     # Thiết lập đường dẫn cài đặt
make                                  # Biên dịch
make install                          # Cài đặt
make clean                            # Dọn dẹp kết quả biên dịch

Biên dịch chương trình

  • Perl: perl Makefile.PL; make; make test; make install
  • Python: python file.py
  • C: gcc -g hello.c -o hello

Quản lý tiến trình

ps -eaf               # Xem tất cả tiến trình
kill -9 PID           # Buộc dừng tiến trình theo PID
kill -15 PID          # Yêu cầu dừng an toàn (phải có xử lý tín hiệu bên trong)
cmd &                 # Chạy lệnh nền
nohup cmd &           # Chạy nền, không bị ảnh hưởng khi shell đóng
ctrl+z                # Tạm dừng và đưa lệnh ra nền
jobs                  # Xem danh sách tác vụ nền
bg 2                  # Tiếp tục chạy tác vụ nền đang tạm dừng
fg 2                  # Đưa tác vụ nền về chế độ tiền cảnh
pstree                # Hiển thị cây tiến trình
vmstat 1 9            # Báo cáo hiệu năng hệ thống mỗi giây, 9 lần
sar                   # Xem trạng thái CPU,...
lsof file             # Hiển thị tất cả tiến trình mở tệp
lsof -i:32768         # Xem tiến trình đang dùng cổng 32768
renice +1 180         # Giảm độ ưu tiên của tiến trình 180 thêm 1 đơn vị
ps aux |grep -v USER | sort -nk +4 | tail   # Hiển thị 10 tiến trình tiêu thụ RAM nhiều nhất

Phân tích mạng

  • rz/sz: Tải lên/tải xuống tệp nhỏ qua SSH
  • ifconfig eth0 down/up: Vô hiệu hóa/kích hoạt card mạng
  • mii-tool em1: Kiểm tra cáp mạng có kết nối không
  • traceroute: Đo số bước nhảy tới đích
  • nslookup/dig: Tra cứu DNS
  • curl -I: Xem header HTTP
  • tcpdump: Bắt gói tin
  • lynx: Duyệt web dạng văn bản
  • wget: Tải tệp hoặc cả website
  • rsync: Đồng bộ thư mục qua SSH
  • mtr: Kết hợp ping và trace

Quản lý dịch vụ

  • /etc/init.d/sendmail start/stop/status: Khởi động/dừng/xem trạng thái dịch vụ
  • chkconfig tên_dịch_vụ on/off: Thiết lập khởi động cùng hệ thống
  • chkconfig --list: Xem trạng thái khởi động của tất cả dịch vụ

SSH và bảo mật

  • ssh user@host: Đăng nhập từ xa
  • scp: Sao chép tệp qua SSH
  • ssh-keygen: Tạo cặp khóa
  • ssh-copy-id: Sao chép khóa công cộng
  • sshfs: Gắn kết thư mục từ xa qua SSH
  • iptables: Tường lửa, quản lý NAT, chuyển tiếp cổng

MySQL cơ bản

  • mysql -h host -u user -p: Đăng nhập MySQL
  • show databases/tables: Liệt kê cơ sở dữ liệu/bảng
  • select/update/delete: Các thao tác truy vấn, cập nhật, xóa
  • mysqldump: Sao lưu cơ sở dữ liệu
  • grant/revoke: Cấp/thu hồi quyền

Một số mẹo hữu ích

  • dialog: Tạo menu tương tác đẹp mắt
  • expect: Tự động hóa các thao tác tương tác như nhập mật khẩu
  • seq: Sinh dãy số, thường dùng trong vòng lặp
  • tr: Dịch chuyển, xóa ký tự
  • awk/sed: Xử lý văn bản mạnh mẽ

Thẻ: linux shell Bash command-line system-administration

Đăng vào ngày 23 tháng 6 lúc 00:02