NỘI DUNG
Tiếp theo nội dung Phần 5: Nâng cấp kỹ năng tìm kiếm trên Linux với grep command, kỳ này tôi sẽ giới thiệu kỹ hơn về bộ 3 nguyên tử trong làng xử lý file text trên Linux là nano/vi/vim. Rải rác đâu đó trong suốt thời gian chém gió vừa qua, tôi cũng đã nhiều lần đề cập 3 thằng này nhưng chủ yếu ở dạng mì ăn liền cho qua chuyện chứ không nghiêm túc lắm. Ngoài ra, trong kỳ này, tôi cũng giới thiệu thêm một nội dung quan trọng có liên quan đó là so sánh nội dung file text trên Linux. Việc so sánh file mới nghe qua có vẻ chả quan trọng gì nhưng thực tế có thể xem là skill có damage khủng giúp bạn nhanh chóng xác định điểm khác biệt của các file (đặc biệt là file cấu hình) để tăng tốc xử lý hoặc triệt hạ nhanh mấy lỗi hại não trên hệ thống.
#1 Bộ ba nguyên tử nano/vi/vim
#1.1 nano
Nano là trình chỉnh sửa text đơn giản nhất. Bạn có thể chạy nó với cú pháp:
nano filename
Điểm ăn tiền của nano là nó hiển thị các chỉ dẫn trên màn hình nên với dù bạn có gà mờ level max vẫn có thể biết đường xử lý (tất nhiên, với điều kiện tối thiểu là bạn đọc hiểu được tiếng anh cơ bản). Sau khi mở file và thực hiện các chỉnh sửa cần thiết bạn có thể sử dụng các combo phổ biến sau:
- Ctrl + O: ghi lại nội dung thay đổi vào file
- Ctrl + K: cắt nội dung dòng hiện hành
- Ctrl + U: dán nội dung cắt vào vị trí con trỏ hiện hành
- Ctrl + W: tìm kiếm
- Ctrl + X: thoát (nếu lưu thay đổi thì bạn chọn Y rồi Enter)
Lưu ý: Mấy cái combo trên tôi nhai đi nhai lại nhiều quá rồi nên kỳ này không demo lại nữa nhé.
#1.2 vi
vi (người ta bảo là viết tắt của Visual) là trình chỉnh sửa text đa năng với nhiều chức năng hơn so với nano do vậy khi mới làm quen sẽ hơi ức chế (bạn phải tự biết phải làm gì vì nó sẽ không chỉ dẫn rõ ràng như nano). Tuy nhiên, nếu bạn quen với các chiêu trò trên vi rồi thì có thể bạn sẽ khinh thằng nano ra mặt.
Việc mở file cũng tương tự như thằng nano, bạn có thể dùng cú pháp:
vi filename
Sau khi mở file, bạn sẽ ở command-mode, để có thể chỉnh sửa, bạn cần chuyển sang insert-mode với phím “i”. Sau khi hài lòng với kết quả chỉnh sửa, bạn thoát insert-mode để quay về command-mode với phím “Esc”. Trong command-mode, bạn có thể dùng các chiêu thức sau:
- dd: xóa dòng hiện hành
- yy: copy dòng hiện hành
- p: dán nội dung clipboard
- x: xóa ký tự hiện hành
- :w: ghi file vào đĩa (nhưng không thoát vi)
- :q!: thoát khỏi vi và không lưu file vào đĩa (nói ra nghe hơi nhục nhưng thú thật với bạn lần đầu đụng vi, tôi lay hoay ngồi hơn 5 phút mà không biết đường thoát ra, cuối cùng phải quay sang cầu cứu chị Google)
- :wq!: ghi file vào đĩa và thoát khỏi vi.
Tôi sẽ demo sơ bộ với:
sudo vi /etc/network/interfaces
Sau đó bấm “i” để chuyển từ command-mode sang insert-mode.
Sau khi thêm thắt múa lửa xong tôi bấm “Esc” chuyển từ insert-mode sang command-mode để có thể sử dụng mấy chiêu nói trên (ở đây tôi dùng “:q!” để thoát mà không lưu).
#1.3 vim
Đi đôi với thằng vi bạn cũng sẽ hay gặp vim. Vim này được biết đến như là dạng viết tắt của Vi Improved chứ không liên quan gì đến mấy sản phẩm vệ sinh chuồng trại bạn hay dùng ở nhà đâu nhé. Về cơ bản vim có thể xem là thằng vi được buff thêm nhiều skill lợi hại. Một số chiêu trò phổ biến bao gồm:
Multi-level undo
Với thằng vi, bạn sẽ chơi dạng hardcode nên chỉ được phép undo (với command u) cái hành động gần nhất thôi. Nhảy qua vim, bạn có thể đẩy con số này lên đến 1000 thông qua hiệu chỉnh thông số undolevels. Ngoài ra, bạn còn có thể redo multilevels (với Ctrl+r)
Tabs, Multiple windows and buffers
Với vim, bạn có thể hiển thị các file trong các cửa sổ riêng và nhóm lại vô tab. Để mởi file trong các cửa sổ riêng, bạn có thể dùng option “-o” để mở với horizontal split (chia theo chiều ngang), hoặc option “-O” để mở với vertical split (chia theo chiều dọc).
Tôi demo thử với 2 file như sau.
vim -O test.txt redirect_new.txt
Để mở file trong các tab riêng bạn có thể dùng command
vim -p filename
Tôi demo thử với 2 file như sau.
vim -p test.txt redirect_new.txt
Lúc này bạn có thể dùng chuột di chuyển qua lại 2 tab tương ứng với 2 file test.txt và redirect_new.txt.
Command-line editing and history
Với sự bổ sung này, bạn có thể search các command trước đó để chạy lại hoặc chỉnh sửa phù hợp rồi chạy tiếp. Tính năng này sẽ cực kỳ hữu dụng khi bạn phải xử lý các thao tác dài lằng ngoằng mà còn hay lập lại (kiểu như History của bash như tôi đề cập trong Phần 4: Ép xung tốc độ thao tác Command Line với Bash và nhập môn Bash Script).
Command-line completion
Lại thêm một nâng cấp đáng giá của vim so với vi. Với command-line completion, vim sẽ cho phép bạn dòng phím Tab để tự động hoàn thành các command/ options/ filename mà không cần phải gõ hết nội dung (kiểu như Tab Completion của bash như tôi đề cập trong Phần 4: Ép xung tốc độ thao tác Command Line với Bash và nhập môn Bash Script).
Macros
Vim hỗ trợ macros nên bạn có thể lập chuỗi command lập lại nhiều lần để tiết kiệm thời gian xử lý (bạn có thể xem chi tiết với command :help complex-repeat)
Visual mode
Vim hỗ trợ bạn chạy visal mode với highlighting. Khi đó bạn có thể giới hạn các hoạt động trên các khu vực được highlight cụ thể này
Vì đám command của vi/vim khá khó chịu với giới gà mờ, bạn có thể lấy cái Cheat Sheet bên dưới về xâm lên tay để tiện bề tra cứu trong quá trình mần việc!
Nguồn: www.shell-tips.com
#2 So sánh nội dung text file trên Linux
#2.1 So sánh với Linux comm
comm so sánh 2 text file, hiển thị các dòng khác biệt và các dòng giống nhau. Kết quả hiển thị với 3 cột:
- Cột thứ nhất hiển thị các dòng chỉ có trên file thứ 1
- Cột thứ hai hiển thị các dòng chỉ có trên file thứ 2
- Cột thứ ba hiển thị các dòng có trên cả 2 file
Lưu ý: với option -n với các giá trị 1, 2 và 3 sẽ so phép tắt hiển thị của cột tương ứng
Ví dụ tôi có file1.txt và file2.txt như sau:
Khi đó tôi có thể tập trung kiểm tra nội dung giống nhau của 2 file bằng cách tắt hiển thị cột 1 và 2 với:
comm -12 file1.txt file2.txt
#2.2 So sánh với Linux diff
diff xác định điểm khác nhau của các file giống như comm. Tuy nhiên diff tương đối phức tạp hơn và hỗ trợ nhiều định dạng output với 2 tùy chọn phổ biến:
- -c: bao gồm context format;
- -u: unified format (không hiển thị các dòng giống nhau của các file nên kết quả ngắn gọn hơn.
Lưu ý trong phần output:
- Dấu “-” đánh dấu các nội dung chỉ có trong file thứ 1;
- Dấu “+” đánh dấu các nội dung chỉ có trong file thứ 2.
Nói dài dòng khó hình dung. Tôi demo thử với 2 command sau để bạn dễ hình dung.
diff -c file1.txt file2.txt
diff -u file1.txt file2.txt
Vì ví dụ của tôi khá ngắn nên bạn sẽ thấy chênh lệch không lớn lắm. Tuy nhiên, hãy nghĩ đến cảnh bạn có 2 file dài ngoằng với các nội dung giống và khác xen lẫn vào nhau thì bạn sẽ thấm thía giá trị của Linux diff.
#2.3 So sánh với Linux vimdiff
vimdiff cho phép mở nhiều file với vim trên nhiều cửa số. Các nội dung khác nhau sẽ được highlight nên bạn có thể so sánh trực quan.
Tôi demo thử với command:
vimdiff file1.txt file2.txt
Như bạn thấy đấy, với vimdiff, ngoài việc hỗ trợ việc so sánh một cách trực quan, đời bạn cũng sẽ tươi đẹp hơn với cả đống màu sắc sặc sỡ.
Ngoài ra, bạn còn có thể dùng một số thao tác hay ho bao gồm:
- do: lấy thông tin các điểm khác biệt từ cửa sổ khác vào cửa sổ hiện hành
- dp: đẩy thông tin các điểm khác biệt từ cửa sổ hiện hành sang cửa sổ khác
- ]c: di chuyển đến vị trí thay đổi kế tiếp
- [c: di chuyển đến vị trí thay đổi trước đó
- Ctrl+W: chuyển sang cửa sổ khác
Do cái đám trên phải có ngữ cảnh cụ thể nên tôi sẽ gác lại và trình bày khi có thời cơ. Còn nội dung bữa nay tôi xin dừng tại đây.
2 thoughts on “Giải ngố Kali Linux – Phần 6: Bộ 3 nguyên tử text editor nano/vi/vim và cách buff damage với skill so sánh nội dung file bằng comm/diff”