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

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 Linuxnano/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.

vi insert-mode
vi 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).

vi quit command
vi quit command

#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

vim -O test.txt redirect_new.txt
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

vim -p test.txt redirect_new.txt
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 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).

vim tab completion
vim tab completion

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)

vim help complex-repeat
vim 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!

vi/vim cheatsheet
vi/vim cheatsheet

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.txtfile2.txt như sau:

file compare
file compare

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

comm -12 file1.txt file2.txt
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

diff command
diff command

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

vimdiff command
vimdiff command

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”

Leave a Reply

Your email address will not be published. Required fields are marked *