Nâng cao hiệu suất làm việc trên dòng lệnh bằng One-Liners Command
Bài đăng này đã không được cập nhật trong 4 năm
Mở đầu
Linux đang ngày càng phổ biến trên toàn thế giới, nó len lỏi vào hầu hết các hệ thống máy tính cũng như các thiết bị công nghệ thông dụng ngày nay. Điều đặc trưng đầu tiên khi người ta nhắc đến Linux là cách mà người ta sử dụng nó. Khác với hệ thống máy tính chạy hệ điều hành Windows chủ yếu dùng giao diện đồ họa, hay macOS dùng kết hợp cả đồ họa và dòng lệnh thì với Linux, phần lớn thời gian người ta làm việc sẽ là trên hệ thống dòng lệnh.
Mọi công việc cần xử lý trên Linux đều có thể thông qua hệ thống dòng lệnh để hoàn thành, từ khó đến dễ, từ đơn giản đến phức tạp. Qua thời gian, để tránh việc phải gõ đi gõ lại các câu lệnh dài dòng và khó nhớ, con người bắt đầu chuyển qua sử dụng các file Shell Script
để đẩy nhanh tốc độ công việc. Thường thì các file này sẽ có kích cỡ từ vài dòng đến vài trăm dòng. Tuy nhiên với những công việc đơn giản không nhất thiết phải viết vào file để thực thi. Và ngày nay người ta thường sẽ viết sẵn những cú pháp ngắn và kết hợp với alias để tạo thành một câu lệnh đơn giản hiệu quả. Những cú pháp này thường gọi là One-Liner.
Sau đây mình sẽ giới thiệu 1 số cú pháp sưu tầm và biên soạn để giúp cho công việc trên hệ thống dòng lệnh của người dùng Linux trở nên đơn giản hơn.
Các lệnh hữu ích
Lọc các tiến trình sử dụng nhiều bộ nhớ
Command: ps aux | awk '{if ($5 != 0 ) print $2,$4,$6,$11}' | sort -k2nr | head -n10
ps aux
sẽ lấy ra tất cả tiến trình được tạo bởi người dùng hiện tạiawk
sẽ in ra các giá trị tương ứng ở cột PID($2, id của tiến trình), %MEM($4, tỉ lệ bộ nhớ thực tế sử dụng), RSS($6, số byte bố nhớ thực tế sử dụng) và COMMAND($11, câu lệnh thực thi chính của tiến trình)sort
sẽ sắp xếp lại các dòng dữ liệu, -k2 tức là sắp xếp theo cột thứ 2 %MEM, -n là sắp xếp số học, -r là đảo ngược để lấy kết quả giảm dầnhead -n10
để lấy 10 dòng đầu tiên, cũng là 10 tiến trình tiêu thụ nhiều bộ nhớ nhất.
Cú pháp lấy ra những câu lệnh thường xuyên được sử dụng nhất (với Bash Shell)
Command: cat ~/.bash_history | tr "\|\;" "\n" | sed -e "s/^ //g" | cut -d " " -f 1 | sort | uniq -c | sort -nr | head -n 15
- Các câu lệnh đã gõ sẽ được lưu trữ trong file
~/.bash_history
uniq
-c để đếm số lượng lệnh trùng lặpcut
để giới hạn các cột sẽ hiển thịsort
để sắp xếp các câu lệnh theo số lần sử dụng
Cú pháp dùng để xóa các dòng trống trong file
Command: sed -i '/^$/d'
Trước khi xóa file có rất nhiều dòng trống
Và sau khi xóa thì không còn dòng trống nào nữa
Đổi tên toàn bộ file trong thư mục để chuyển các space thành underscore
Thông thường khi thao tác với file mà tên có khoảng trắng thì sẽ bất tiện cho người dùng, cần chèn thêm dấu backsplash \
để sử dụng.
Command: for i in *; do mv "$i" ${i// /_};done
Trước khi đổi tên, rất bất tiện khi thao tác
Sau khi đổi tên đã thao tác dễ dàng hơn
Cú pháp tắt nhanh một web server đang hoạt động
Command: pgrep -f tcp://[IP]:[PORT] | xargs kill -9
Server đang chạy
Kết hợp xargs và kill để đóng server
Lấy tên của dự án dựa vào github repository
Command: git remote get-url framgia | grep -o "\/[a-zA-Z0-9_\-]\+\.git" | sed -E "s/^\/|\.git$//g"
- Lệnh
git remote get-url
để lấy ra url của repository grep -o
sẽ lấy ra đoạn text bắt đầu với splash/
và kết thúc bởi.git
sed
sẽ xóa ký tự/
và.git
đi.
Ở đây mình có 2 remote repository, mình sẽ lấy ra tên của dự án dựa vào repository framgia
Kết quả như sau.
Dùng git xóa tất cả các file với tên cho trước ở cây thư mục hiện tại khỏi cached
Command: find . -name [file_name] -exec git rm --ignore-unmatch --cached {} +
Giả sử mình có các file với tên .keep
dùng khi muốn push các thư mục rỗng lên github
Sau khi xử lý với lệnh trên, tất cả các file .keep sẽ được chuyển vào trạng thái untracked
Kết luận
Trên đây là một số lệnh One-liner mình sưu tầm và biên soạn được dùng để nâng cao hiệu suất làm việc trên dòng lệnh Linux. Cảm ơn mọi người đã đọc.
Tài liệu tham khảo
All rights reserved