Hướng dẫn 9 cách thực tế để sử dụng lệnh seq của Linux

Lệnh seq không chỉ là một máy in số đơn giản. Nó là một khối xây dựng cơ bản mà bạn có thể sử dụng để tạo tệp kiểm tra, kiểm soát vòng lặp, thực hiện quét mạng và chạy các phép tính toán học. Dưới đây là một số cách sử dụng lệnh seq phổ biến.
1. Tạo số cơ bản
Về cơ bản, seq
in ra các số theo một chuỗi. Bạn chỉ cần cung cấp cho nó một số duy nhất, và nó sẽ đếm từ 1 lên đến số đó. Ví dụ:
seq 5
Lệnh này in các số từ 1 đến 5. Đó là hình thức đơn giản nhất, nhưng điều kỳ diệu bắt đầu khi bạn điều chỉnh điểm bắt đầu, bước nhảy, định dạng, hoặc truyền đầu ra (pipe the output) sang các lệnh khác.
Ví dụ, nếu bạn muốn bắt đầu từ một số cụ thể, hãy cung cấp số bắt đầu làm đối số đầu tiên và số kết thúc làm đối số thứ hai.
seq 3 7
Lệnh này sẽ tạo ra các số từ 3 đến 7 (tức là 3, 4, 5, 6, 7).
Đôi khi, bạn cần bỏ qua một số số trong một chuỗi, chẳng hạn như chỉ tạo các số chẵn hoặc đếm theo bội số của năm. Đối số bước nhảy (increment), được đặt giữa giá trị bắt đầu và kết thúc, sẽ xử lý việc này. Ví dụ, để tạo các số lẻ từ 1 đến 10, hãy sử dụng bước nhảy là 2:
seq 1 2 10
Lệnh này yêu cầu seq
bắt đầu tại 1, đi lên đến 10, nhưng thực hiện các bước nhảy là 2, tạo ra 1, 3, 5, 7, và 9.
Bạn cũng có thể đếm ngược. Để làm như vậy, hãy cung cấp giá trị bước nhảy âm như sau:
seq 10 -1 1
Lệnh này in các số từ 10 xuống 1 với bước nhảy là .
Tạo số thập phân
seq
không chỉ giới hạn ở các số nguyên; nó xử lý các số thập phân (floating-point/decimal) dễ dàng không kém. Điều này hữu ích cho các tính toán khoa học hoặc khi làm việc với dữ liệu yêu cầu độ chính xác thập phân.
Ví dụ, để đếm từ 0.5 đến 2.0 với bước nhảy là 0.3, chạy:
seq 0.5 0.3 2.0
Và bạn sẽ nhận được một chuỗi các số thập phân với kích thước bước nhảy cụ thể.
Sử dụng dấu phân cách tùy chỉnh
Theo mặc định, seq
tách biệt mỗi số bằng một ký tự xuống dòng (newline character). Cờ -s
(separator) cho phép bạn xác định một dấu phân cách tùy chỉnh. Ví dụ, để tạo các số từ 1 đến 5 trên một dòng duy nhất được phân tách bằng dấu phẩy và một khoảng trắng, chạy:
seq -s ", " 1 5
Ngoài ra, bạn có thể truyền đầu ra (pipe the output
) sang xargs
để đặt tất cả các số trên một dòng duy nhất được phân tách bằng khoảng trắng. xargs
đọc các mục từ đầu vào tiêu chuẩn và chuyển chúng thành đối số cho một lệnh khác (theo mặc định là echo
).
seq 1 10 | xargs
2. Tạo chuỗi số được định dạng
Giả sử bạn muốn tạo các số từ 1 đến 10, nhưng bạn muốn tất cả chúng đều có hai chữ số với số 0 đứng đầu. Để đạt được điều này, bạn có thể sử dụng tùy chọn -f
cùng với một bộ chỉ định định dạng như sau:
seq -f "%02g" 1 10
Trong đó, %g
là định dạng số tiêu chuẩn, và 02
yêu cầu seq
đệm số để có độ rộng 2 chữ số với các số không đứng đầu.
Đối với tác vụ phổ biến là chỉ cần đệm tất cả các số bằng số 0 đứng đầu để chúng có cùng độ rộng, seq
cung cấp cờ -w
(equal width) đơn giản hơn nhiều.
seq -w 1 100
Lệnh này đảm bảo tất cả các số đều có độ rộng bằng nhau bằng cách thêm số 0 đứng đầu, tạo ra 001, 002, và 099 đến 100.
Kiểu định dạng này cũng hoàn hảo để tạo các tệp được đệm số 0 sao cho chúng được sắp xếp đúng thứ tự. Bằng cách kết hợp seq
với touch
và xargs
, bạn có thể tạo nhiều tệp rỗng. Ví dụ, để tạo 5 tệp văn bản rỗng, được đệm số 0, chạy lệnh sau:
seq -f "text_%02g.txt" 1 5 | xargs touch
Sau khi chạy lệnh này, bạn sẽ có một danh sách các tệp (text_01.txt, text_02.txt, v.v.) sẽ luôn được sắp xếp theo đúng thứ tự số. Bạn cũng có thể tạo các tệp với tên dựa trên ngày:
seq -f "2025-03-%02g.txt" 1 31 | xargs touch
Vòng lặp này sẽ cung cấp cho bạn các tệp cho mọi ngày trong tháng 3 năm 2025.
3. Tạo tệp thử nghiệm với văn bản
Ngoài việc tạo số, bạn có thể sử dụng seq
để tạo các tệp thử nghiệm với dữ liệu giả (dummy data). Chỉ cần kết hợp seq
với tính năng truyền dữ liệu (piping
) và chuyển hướng (redirection
) cùng với vòng lặp for
.
Ví dụ, để kiểm tra một script, bạn có thể cần các tệp giả với một số nội dung. Đoạn script này tạo ra năm tệp, mỗi tệp chứa một dòng văn bản cho biết số thứ tự của nó:
for i in $(seq 1 5); do
echo "This is test file number $i" > testfile_$i.txt
done
Hơn nữa, tôi cũng khuyên bạn nên sử dụng tùy chọn -w
(seq -w 1 5
) để đệm số, giúp các tệp được sắp xếp gọn gàng.
Bạn cũng có thể tạo các tệp với nhiều dòng nội dung. Đoạn script sau tạo ra năm tệp, mỗi tệp chứa 100 dòng được đánh số duy nhất:
for i in $(seq 1 5); do
for line in $(seq 1 100); do
echo "File $i, Line $line: Some random content here"
done > "file_$i.txt"
done
Ở đây, vòng lặp ngoài lặp qua các số từ 1 đến 5 cho tên tệp, trong khi vòng lặp trong tạo ra 100 dòng trên mỗi tệp, với đầu ra được chuyển hướng đến một tệp có tên dựa trên bộ đếm của vòng lặp ngoài.
4. Lặp lại lệnh một số lần cụ thể
Đôi khi bạn cần chạy một lệnh nhiều lần mà chỉ quan tâm đến sự lặp lại, không phải các con số thực tế. Ví dụ: bạn có thể đang kiểm tra độ trễ mạng vớiping
hoặc chạy một script nhiều lần để kiểm tra lỗi. seq
cung cấp một cách rõ ràng để thực hiện điều này mà không cần viết một vòng lặp for
truyền thống.
Ví dụ, bạn có thể sử dụng seq
với xargs
để kiểm tra khả năng chịu tải của ứng dụng (stress-testing) hoặc kiểm tra xem một dịch vụ có khởi động đúng cách không.
seq 10 | xargs -I {} curl -s http://mywebsite.com > /dev/null
Lệnh này truy cập trang web mười lần, điều này có thể giúp bạn xác minh liệu máy chủ web của bạn có xử lý các yêu cầu đồng thời một cách chính xác hay không.
seq
cũng kết hợp tuyệt vời với vòng lặp for
để lặp lại các hành động. Để in “Hello, World!” năm lần, bạn có thể sử dụng:
for i in $(seq 1 5); do
echo "Hello, world!";
done
Lệnh này in thông báo năm lần.
5. Tạo dấu thời gian hoặc khoảng thời gian
Một trường hợp sử dụng tuyệt vời khác của seq
là tạo ra một chuỗi các dấu thời gian (timestamps), đặc biệt khi xây dựng dữ liệu thử nghiệm hoặc mô phỏng nhật ký hệ thống (logs). Chúng có thể đại diện cho số giây, phút hoặc ngày.
Giả sử bạn cần một danh sách mọi khoảng thời gian 15 phút trong một giờ cho một báo cáo.
seq -f "%02g" 0 15 59
Lệnh này tạo ra 00, 15, 30 và 45.
Bạn cũng có thể tạo các dấu thời gian chính xác. Ví dụ này in một dấu thời gian cho mỗi phút trong 10 phút tiếp theo:
start=$(date +%s)
for i in $(seq 0 9); do
echo "$(date -d "@$((start + i*60))" +"%Y-%m-%d %H:%M:%S")"
done
Script này in tất cả 10 dấu thời gian tương lai ngay lập tức. Nó không chờ đợi một phút giữa các lần xuất. Nếu bạn muốn một bộ đếm thời gian thực in một dòng mỗi phút, hãy thêm sleep 60
vào bên trong vòng lặp.
Để tạo dấu thời gian ở định dạng HH:MM cho cả một giờ, bạn có thể sử dụng một vòng lặp đơn giản:
for minute in $(seq -f "%02g" 0 59); do
echo "14:$minute"
done
Lệnh này sẽ liệt kê 14:00, 14:01, cho đến 14:59. Đây là một cách mạnh mẽ để tạo dữ liệu chuỗi thời gian có cấu trúc ngay từ terminal của bạn.
6. Kiểm tra cổng khả dụng
Nếu bạn là quản trị viên hệ thống hoặc nhà phát triển, bạn cũng có thể sử dụng seq
để quét một dải cổng và kiểm tra tính khả dụng của chúng. Ví dụ, bạn có thể cần triển khai một ứng dụng nhưng không chắc cổng nào còn trống. Hãy quét một dải cổng trên máy cục bộ của bạn để xem cổng nào đang mở.
Chúng ta có thể sử dụng seq
để tạo số cổng và truyền chúng đến một tiện ích mạng như nc
(netcat) để kiểm tra kết nối.
for port in $(seq 8000 8010); do
nc -z -v -w 1 localhost $port &> /dev/null && echo "Port $port is OPEN"
done
Dưới đây là giải thích chi tiết lệnh:
for port in $(seq 8000 8010)
: Lặp qua từng số cổng.nc -z -v -w 1 localhost $port
: Lệnh cốt lõi cố gắng tạo kết nối.-z
: Quét các dịch vụ đang lắng nghe mà không gửi dữ liệu.-v
: Cung cấp đầu ra chi tiết (mà chúng ta ẩn đi).-w 1
: Đặt thời gian chờ là 1 giây.
&> /dev/null
: Chuyển hướng tất cả đầu ra từnc
để chúng ta chỉ thấy thông báo cuối cùng của mình.&& echo "Port $port is OPEN"
: Toán tử&&
đảm bảo lệnhecho
chỉ chạy nếu lệnhnc
thành công (tức là cổng đang mở).
Các phương pháp này đòi hỏi các đặc quyền và công cụ thích hợp. Hãy sử dụng chúng một cách có trách nhiệm và chỉ trên các hệ thống bạn sở hữu hoặc có quyền kiểm tra.
Ngoài ra, bạn có thể sử dụng một tính năng dành riêng cho Bash mà không cần nc
:
for port in $(seq 8000 8100); do
(echo > /dev/tcp/localhost/$port) &> /dev/null && echo "Port $port is open"
done
Đối với việc quét cổng nghiêm túc, bạn nên sử dụng các công cụ chuyên dụng như nmap
, nhưng đối với các kiểm tra nhanh trong quá trình phát triển, phương pháp seq
này hoạt động rất tốt.
7. Lặp qua các phạm vi trong Script
Mặc dù Bash có những cách riêng để tạo vòng lặp, việc sử dụng seq
thường dễ di chuyển (portable) và dễ đọc hơn, đặc biệt đối với các phạm vi phức tạp hoặc số thập phân. Khi viết script, seq
làm cho việc lặp lại trên các phạm vi số trở nên rõ ràng và sạch sẽ.
Ví dụ, để xử lý một loạt các mục giữa hai điểm, bạn có thể định nghĩa các biến START
và END
. Vòng lặp sẽ xử lý phần còn lại:
#!/bin/bash
START_ITEM=25
END_ITEM=75
echo "Starting to process items from $START_ITEM to $END_ITEM..."
for item_number in $(seq $START_ITEM $END_ITEM); do
echo "Processing item #$item_number..."
sleep 0.1 # simulate work
done
echo "All items processed!"
Script này dễ bảo trì, bạn chỉ cần thay đổi các biến ở trên cùng.
Ngoài ra, bạn có thể áp dụng ý tưởng tương tự cho các tình huống thực tế như xử lý dữ liệu hàng loạt. Ví dụ, bạn có thể kiểm tra mức sử dụng đĩa cho một loạt các thư mục được đánh số bằng cách sử dụng:
for i in $(seq 1 10); do
du -sh /var/log/archive_$i 2>/dev/null
done
Vì seq
hỗ trợ đệm số, bạn có thể giữ mọi thứ được sắp xếp gọn gàng. Việc tạo các bản sao lưu hàng ngày cho cả tháng trở nên đơn giản với:
for day in $(seq -w 1 31); do
tar -czf backup_2025-09-$day.tar.gz /data
done
Lệnh một dòng này tạo ra 31 kho lưu trữ nén với tên được định dạng chính xác (backup_2025-09-01.tar.gz
, v.v.), điều này giúp việc sắp xếp và truy xuất dễ dàng hơn nhiều.
8. Chia tệp dựa trên số dòng
Nếu bạn cần chia một tệp lớn thành các phần nhỏ hơn, seq
có thể giúp bạn tính toán phạm vi dòng cho mỗi phần. Mặc dù lệnh split
được thiết kế cho việc này, việc sử dụng seq
cung cấp kiểm soát chi tiết hơn đối với quy trình và đặt tên tệp.
Ví dụ, để chia bigfile
thành các khối 100 dòng mỗi khối, chạy:
lines=$(wc -l < bigfile)
for start in $(seq 1 100 $lines); do
end=$((start + 99))
sed -n "${start},${end}p" bigfile > chunk_$(printf "%04d" $start).txt
done
Script này đầu tiên lấy tổng số dòng. Vòng lặp for
sau đó sử dụng seq
để tạo số dòng bắt đầu cho mỗi khối (1, 101, 201, v.v.). Bên trong vòng lặp, sed
trích xuất khối dòng đó và lưu nó vào một tệp có tên duy nhất.
9. Thực hiện phép toán
seq
là một công cụ hỗ trợ tuyệt vời cho các máy tính dòng lệnh như bc
và awk
. Bạn có thể truyền một chuỗi các số trực tiếp vào một chương trình khác để thực hiện phép tính.
Để tính tổng tất cả các số từ 1 đến 100, sử dụng:
seq -s "+" 1 100 | bc
Ở đây, thay vì phân tách các số bằng ký tự xuống dòng, chúng ta đặt dấu +
giữa chúng. Đầu ra là một chuỗi duy nhất được gửi làm đầu vào cho bc
, chương trình này đánh giá biểu thức.
Với awk
, bạn có thể đạt được kết quả tương tự:
seq 1 100 | awk '{s+=$1} END{print s}'
Mô hình tạo, định dạng và tính toán này cực kỳ hữu ích cho việc phân tích dữ liệu nhanh chóng trên dòng lệnh.
Mặc dù seq
có vẻ là một tiện ích nhỏ, nhưng nó giải quyết nhiều vấn đề lặp đi lặp lại nhỏ một cách thanh lịch. Nó kết hợp với các lệnh Linux khác để tạo ra các lệnh một dòng và script mạnh mẽ, làm cho nó trở thành một công cụ thiết yếu cho bất kỳ người dùng dòng lệnh nào.
10. Kết luận
Lệnh seq trong Linux là một công cụ nhỏ nhưng mạnh mẽ, và 9 cách sử dụng thực tế được hướng dẫn trong bài viết đã chứng minh khả năng linh hoạt của nó, từ tạo dãy số, tự động hóa script đến hỗ trợ các tác vụ lập trình và quản lý hệ thống. Với cú pháp đơn giản và ứng dụng đa dạng, seq giúp tiết kiệm thời gian và nâng cao hiệu quả cho cả người dùng mới lẫn chuyên gia Linux. Hy vọng bài viết này đã giúp bạn khám phá và làm chủ lệnh seq, sẵn sàng áp dụng vào các dự án Linux của mình để đạt hiệu suất tối ưu!
Xem thêm: Giữ bí mật an toàn với mẹo mã hóa tài liệu trên Google Drive cực đơn giản
Nếu bạn cần laptop hoặc PC cấu hình mạnh để lập trình và làm việc với Linux mượt mà, hoặc muốn nâng cấp setup với phụ kiện công nghệ chất lượng cao, hãy ghé qua COHOTECH – địa chỉ uy tín cung cấp thiết bị công nghệ và dịch vụ hỗ trợ kỹ thuật chuyên nghiệp. Đội ngũ COHOTECH cam kết mang đến giải pháp tối ưu và những ưu đãi hấp dẫn để bạn chinh phục mọi thử thách công nghệ. Theo dõi chúng tôi để khám phá thêm nhiều mẹo hay và sản phẩm độc quyền!
Bạn đã sử dụng lệnh seq trong Linux theo cách nào thú vị? Hãy chia sẻ kinh nghiệm hoặc đặt câu hỏi trong phần bình luận bên dưới nhé! Nếu bài viết này hữu ích, đừng quên like, share và lan tỏa đến bạn bè để cùng khám phá sức mạnh của Linux. Cảm ơn bạn đã đọc và hẹn gặp lại!