Để xem số dòng, số từ, và số ký tự trong một tập tin, lệnh nào sau đây là phù hợp?
Đáp án đúng: A
Lệnh wc
(word count) là lệnh chuẩn trong Linux/Unix để đếm số dòng, số từ và số ký tự (bytes) trong một tập tin. Khi sử dụng cat file.txt | wc
, nội dung của file.txt
được xuất ra bởi cat
và sau đó được chuyển đến lệnh wc
thông qua pipe (|
). Lệnh wc
sẽ đọc dữ liệu nhận được từ pipe và in ra số dòng, số từ, và số ký tự tương ứng. Các lựa chọn khác không cung cấp chức năng tương đương một cách trực tiếp:
grep -c file.txt
: Đếm số dòng chứa một mẫu (pattern) cụ thể trong file.awk 'END {print NR, NF, length}' file.txt
: Có thể được sử dụng để in ra số dòng (NR), số trường (NF) của dòng cuối cùng, và độ dài của dòng cuối cùng, nhưng không phải là số lượng từ và ký tự trong toàn bộ file một cách trực tiếp.sed -n '$=' file.txt
: Chỉ in ra số dòng cuối cùng của file.
Câu hỏi liên quan
Phương án A: grep -o 'linux' *.log | wc -l
- grep -o 'linux' *.log
: Lệnh này tìm kiếm chuỗi "linux" trong tất cả các file *.log. Option -o
chỉ in ra các chuỗi khớp (mỗi chuỗi trên một dòng).
- wc -l
: Đếm số dòng. Do đó, kết quả là số lần chuỗi "linux" xuất hiện trong tất cả các file.
Phương án B: cat *.log | grep 'linux' -c
- cat *.log
: Nối nội dung của tất cả các file *.log thành một luồng.
- grep 'linux' -c
: Đếm số dòng chứa chuỗi "linux". Kết quả là số lượng các dòng có chứa ít nhất một lần từ "linux" trong tất cả các file. Như vậy sẽ không đếm được chính xác số lần xuất hiện của từ "linux".
Phương án C: awk '/linux/ {count++} END {print count}' .log
- Lệnh này sẽ chỉ đọc file ".log" (chú ý dấu chấm ở trước). Như vậy, nó sẽ không tìm kiếm trong tất cả các file .log trong thư mục hiện tại mà chỉ tìm trong một file có tên ".log" (nếu tồn tại).
Phương án D: find . -name '.log' | xargs grep -c 'linux'
- find . -name '.log'
: Tìm tất cả các file có tên ".log" (chú ý dấu chấm ở trước) trong thư mục hiện tại và các thư mục con.
- xargs grep -c 'linux'
: Thực thi lệnh grep -c 'linux'
trên từng file tìm được. Option -c
đếm số dòng chứa chuỗi "linux" trong mỗi file, sau đó in ra số lượng này cho mỗi file.
- Lệnh này cũng không đếm được tổng số lần xuất hiện của từ "linux" trong tất cả các file, mà chỉ đếm số dòng chứa từ "linux" trong mỗi file.
Như vậy, phương án A là đáp án đúng vì nó đếm chính xác số lần từ "linux" xuất hiện trong tất cả các file *.log.
Câu hỏi này kiểm tra kiến thức về các lệnh Linux cơ bản, đặc biệt là lệnh tail
và cách sử dụng nó để theo dõi các tập tin log.
Phân tích các đáp án:
A. tail -f logs/*.log: Lệnh này có thể hoạt động nếu trong thư mục logs chỉ chứa các file .log. Tuy nhiên, dấu * đại diện cho tất cả các file .log trong thư mục logs và tham số -f cho phép theo dõi các thay đổi mới nhất của các file này. Đây là một phương án khả thi. Lưu ý rằng nếu không có file .log nào hoặc có thư mục con tên là *.log, lệnh có thể không hoạt động như mong đợi.
B. cat logs/*.log | tail -f: Lệnh này sẽ in nội dung của tất cả các tập tin log ra rồi chuyển cho tail -f. tail -f sẽ chỉ theo dõi output nhận được, không theo dõi trực tiếp các file log. Điều này có nghĩa là bạn chỉ thấy nội dung ban đầu của file, không thấy các thay đổi tiếp theo.
C. find logs -type f -exec tail -f {} +: Lệnh này sử dụng
find
để tìm tất cả các tập tin (-type f
) trong thư mụclogs
và sau đó thực thi lệnhtail -f
trên mỗi tập tin tìm thấy. Dấu{} +
cho phépfind
truyền nhiều tên tập tin cho một lần gọi lệnhtail -f
, hiệu quả hơn so với việc gọitail -f
cho từng tập tin riêng lẻ. Đây là một cách tiếp cận tốt để theo dõi nhiều tập tin log.D. ls logs/ | xargs -I {} tail -f {}: Lệnh này liệt kê tất cả các mục (tập tin và thư mục) trong thư mục
logs/
, sau đó sử dụngxargs
để chuyển từng mục cho lệnhtail -f
. Vấn đề làls
có thể bao gồm cả thư mục, vàtail -f
không được thiết kế để làm việc với thư mục. Hơn nữa, cách này kém hiệu quả hơn so với phương án C vì mỗi tập tin sẽ được xử lý bằng một lệnhtail -f
riêng biệt.
Kết luận:
Phương án C là đáp án chính xác nhất vì nó sử dụng find
để tìm tất cả các tập tin trong thư mục logs và sau đó sử dụng tail -f
một cách hiệu quả để theo dõi tất cả chúng. Phương án A có thể hoạt động nhưng kém linh hoạt hơn và có thể không hoạt động đúng nếu có thư mục con .log. Phương án B chỉ hiển thị nội dung ban đầu của các file và không theo dõi các thay đổi. Phương án D có thể gây ra lỗi nếu có thư mục trong logs và kém hiệu quả.
Câu hỏi yêu cầu tìm lệnh để tìm và xóa các tập tin không được truy cập trong 10 ngày qua.
Phương án A: find . -atime +10 -delete
: Lệnh này tìm các tập tin có thời gian truy cập (access time) lớn hơn 10 ngày (+10) và xóa chúng (-delete). Đây là một cách tiếp cận đúng và hiệu quả.
Phương án B: find . -type f -mtime +10 -exec rm {} ;
: Lệnh này tìm các tập tin có thời gian chỉnh sửa (modification time) lớn hơn 10 ngày và xóa chúng. Yêu cầu là tìm theo thời gian truy cập, không phải thời gian chỉnh sửa.
Phương án C: ls -lt --time=atime | grep '10 days' | xargs rm
: Lệnh này sử dụng ls
để liệt kê các tập tin theo thời gian truy cập, sau đó sử dụng grep
để tìm các dòng chứa '10 days' và cuối cùng sử dụng xargs rm
để xóa chúng. Phương pháp này không đáng tin cậy vì định dạng thời gian của ls
có thể thay đổi tùy thuộc vào hệ thống và ngôn ngữ, và việc so sánh chuỗi '10 days' không chính xác.
Phương án D: find . -type f -atime +10 | xargs rm -f
: Lệnh này tìm các tập tin có thời gian truy cập lớn hơn 10 ngày và sau đó chuyển danh sách các tập tin này cho xargs rm -f
để xóa. Lệnh này hoạt động, tuy nhiên sử dụng -delete trong find hiệu quả hơn vì nó xử lý các trường hợp tên file có khoảng trắng tốt hơn.
Do đó, phương án A là đáp án chính xác nhất.
- `find . -size +1M`: Tìm tất cả các tập tin trong thư mục hiện tại (`.`) có kích thước lớn hơn 1MB (`+1M`).
- `-exec grep -l 'ERROR' {} ;`: Thực thi lệnh `grep -l 'ERROR' {}` cho mỗi tập tin tìm được. `{}` được thay thế bằng tên của tập tin hiện tại. `grep -l` chỉ in ra tên của tập tin chứa chuỗi 'ERROR'. Dấu `;` kết thúc lệnh exec.
Phương án B sai vì `grep -r 'ERROR' *` sẽ tìm kiếm đệ quy chuỗi 'ERROR' trong tất cả các tập tin, và sau đó kết quả được chuyển cho `find . -size +1M`, nhưng `find` không thể lọc kết quả từ `grep` để chỉ tìm các tập tin lớn hơn 1MB.
Phương án C sai vì `xargs` sẽ gom các tên tập tin tìm được bởi `find` thành các đối số cho `grep`, nhưng điều này có thể gây ra lỗi nếu số lượng tập tin quá lớn. Hơn nữa, `xargs grep 'ERROR'` sẽ in ra các dòng chứa 'ERROR', chứ không phải tên tập tin.
Phương án D sai vì `awk` không hoạt động trực tiếp trên các tập tin theo cách này. Cú pháp `awk 'length($0) > 1048576 && /ERROR/' *` không đúng và có thể gây ra lỗi hoặc kết quả không mong muốn. `length($0)` sẽ tính độ dài của dòng hiện tại, không phải kích thước tập tin. Ngoài ra, việc sử dụng `*` ở cuối có thể dẫn đến việc `awk` cố gắng mở và xử lý nhiều tập tin cùng một lúc, điều này không phải là mục đích của câu hỏi.

Bộ Đồ Án Tốt Nghiệp Ngành Trí Tuệ Nhân Tạo Và Học Máy

Bộ 120+ Đồ Án Tốt Nghiệp Ngành Hệ Thống Thông Tin

Bộ Đồ Án Tốt Nghiệp Ngành Mạng Máy Tính Và Truyền Thông

Bộ Luận Văn Tốt Nghiệp Ngành Kiểm Toán

Bộ 370+ Luận Văn Tốt Nghiệp Ngành Kế Toán Doanh Nghiệp

Bộ Luận Văn Tốt Nghiệp Ngành Quản Trị Thương Hiệu
ĐĂNG KÝ GÓI THI VIP
- Truy cập hơn 100K đề thi thử và chính thức các năm
- 2M câu hỏi theo các mức độ: Nhận biết – Thông hiểu – Vận dụng
- Học nhanh với 10K Flashcard Tiếng Anh theo bộ sách và chủ đề
- Đầy đủ: Mầm non – Phổ thông (K12) – Đại học – Người đi làm
- Tải toàn bộ tài liệu trên TaiLieu.VN
- Loại bỏ quảng cáo để tăng khả năng tập trung ôn luyện
- Tặng 15 ngày khi đăng ký gói 3 tháng, 30 ngày với gói 6 tháng và 60 ngày với gói 12 tháng.