Tuesday, July 30, 2013

Các lệnh về file

Xóa file và thư mục:
-Xóa file:

$ rm {name file}
$ rm -f {name file}:không hỏi lại có muốn xóa không?

-Xóa thư mục:
$ rm -rf {name folder}

Trong đó
-r : Attempt to remove the file hierarchy rooted in each file argument i.e. recursively remove subdirectories and files from the specified directory
-f : Attempt to remove the files without prompting for confirmation, regardless of the file's permissions

Cấp quyền thực thi với sudo

Một trong những câu hỏi thường gặp nhất của người mới sử dụng Ubuntu là về sudo. Cơ chế bảo mật này được kích hoạt mặc định trong Ubuntu và mang lại nhiều ưu điểm hơn cơ chế chuyển sang người dùng khác bằng su truyền thống. Trong đó ưu điểm lớn nhất là cho phép nhà quản trị kiểm soát được các thao tác của người dùng có can thiệp đến hệ thống, giao quyền thực thi “đúng người đúng việc”. Ngoài ra khi thực thi lệnh từ xa thông qua telnet/SSH thì sudo thực sự thể hiện ưu thế. Vì vậy nắm vững cơ chế sudo sẽ giúp ích rất nhiều cho những ai đang sử dụng Ubuntu.

Sudo được dùng khi ta muốn thực thi một lệnh trên Linux với quyền của một user khác. Nếu được cho phép, ta sẽ thực thi một lệnh như là người quản trị hay một user nào khác. Các khai báo “ai được làm gì” đặc tả trong file “/etc/sudoers”. Những ghi nhận (log) của hệ thống khi sudo được sử dụng theo mặc định nằm trong file /var/log/secure (Red Hat/Fedora / CentOS Linux) hoặc /var/log/auth.log (Ubuntu / Debian Linux).
Nếu người triệu gọi sudo là root hoặc khi người triệu gọi và người được “mượn” quyền là một thì sẽ không có xác nhận mật khẩu. Còn ngoài ra, sudo yêu cầu người dùng phải tự xác nhận bằng mật khẩu. Lưu ý ở đây là trong cấu hình mặc định thì mật khẩu để xác nhận này là mật khẩu của người triệu gọi, chứ không phải mật khẩu của root. Khi người dùng đã được xác nhận xong, hệ thống sẽ thiết lập một khoảng thời gian cho phép người triệu gọi tiếp tục dùng sudo mà không cần phải xác nhận mật khẩu lại (mặc định là 15 phút).
Cách sử dụng thông dụng nhất của sudo là cú pháp
sudo <lệnh cần thực hiện>
Chẳng hạn “sudo rm -rf /etc/someconfig.cfg”.
Cũng giống như su, nếu không có khai báo định danh của user đích rõ ràng, mặc định sudo sẽ xem như ta đang mượn quyền root để thực thi. Nếu ta muốn “mượn” một người dùng nào khác thì khai báo định danh rõ ràng của người đó, chẳng hạn
sudo -u training rm -rf /home/training/.recently-used
Bây giờ ta sẽ xem làm cách nào để thiết lập cho sudo biết “ai được làm gì”.

Cú pháp của file /etc/sudoers

Như đã nói ở trên, đây là file chứa tất cả những thiết lập cho sudo. Nội dung trong file này thường được đặc tả bằng cú pháp sau:
USER HOSTNAME=(TARGET-USERS) COMMAND
Trong đó:
  • USER: Tên của người sử dụng
  • HOSTNAME: Tên máy mà luật được áp dụng lên. Tham số này cần thiết vì sudo được thiết kế để bạn có thể dùng một file sudoers cho các máy khác. Lúc này sudo sẽ xem máy đang chạy được dùng các luật nào. Nói cách khác, bạn có thể thiết kế các luật cho từng máy trong hệ thống.
  • TARGET-USERS: Tên người dùng đích cho “mượn” quyền thực thi.
  • COMMAND: Tên “lệnh” (thực ra là các chương trình thực thi) mà người dùng được quyền thực thi với bất kỳ tham số nào mà họ muốn. Tuy nhiên bạn cũng có thể đặc tả các tham số của lệnh (bao gồm các dấu thay thế wildcards). Ngược lại, có thể dùng kí hiệu “” để ám chỉ là lệnh chỉ được thực thi mà không có tham số nào cả.
  • Nếu là cấp quyền cho group, ta thay tham số USER bằng %GROUP
Xem thêm “man sudoers” để biết cú pháp chi tiết hơn.

Thiết lập cho sudo

Sau khi biết cú pháp của file sudoers, ta sẽ tiến hành thiết lập cho sudo bằng cách soạn thảo file này. Để mở file sudoer lên và soạn thảo, ta dùng lệnh sau:
# visudo
(ký hiệu # cho biết lệnh này được thực thi với quyền root)
Trên Ubuntu, các giá trị mặc định trong file sudoers gồm có:
Defaults !lecture,!tty_tickets,!fqdn
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL
Những khai báo trên được giải thích như sau:
  • Chỉ thị Default cho biết những tham số được khai báo mặc định cho hoạt động của sudo (sudo hoạt động với rất nhiều tham số, xem man sudoers để biết ý nghĩa của chúng), trong đó:
    • lecture là cờ điều khiển chế độ xuất một đoạn văn bản giống như “welcome” khi sudo được sử dụng. Với khai báo !lecture nghĩa là cờ này bị off, không được sử dụng. Khi sử dụng, cờ này có ba giá trị: “never” (chẳng bao giờ xuất văn bản), “once” (xuất văn bản ở lần sử dụng sudo đầu tiên), “always” (xuất văn bản bất cứ khi nào dùng sudo) trong đó “once” là giá trị mặc định. Chẳng hạn khi bật lên ở chế độ thường trực (always) thì khai báo như sau:lecture=”always”, và mỗi lần bạn dùng sudo sẽ thấy như sau:training@honey:/home/t3318$ sudo apt-get clean
      We trust you have received the usual lecture from the local System Administrator. It usually boils down to these three things:
      #1) Respect the privacy of others.
      #2) Think before you type.
      #3) With great power comes great responsibility.
      [sudo] password for training:>
    • tty_tickets là cờ cho biết sudo sẽ xác thực user theo từng “tty”. Điều này có nghĩa là nếu bật cờ này lên, mỗi khi bạn mở một console hay terminal khác và sử dụng sudo thì phải gõ mật khẩu lại, cho dù bạn có nằm trong timestamp 5 phút hay không. Nếu tắt cờ này đi, trong thời gian 5 phút bạn có thể dùng sudo mà không phải gõ mật khẩu, cho dù ở tty nào. Cờ này có giá trị boolean, “true” hoặc “false”.
    • fqdn là cờ báo hiệu có cần phải khai báo tên máy đầy đủ trong file sudoers hay không. Nghĩa là nếu bật cờ này lên thì trong phần hostname, thay vì ghi kythuatmaytinh, bạn phải ghi đầy đủ kythuatmaytinh.wordpress.com. Cờ này cũng có giá trị boolean.
    • Như vậy ta có thể thấy Ubuntu thiết lập mặc định cho cơ chế sudo của mình là: không xuất văn bản khi dùng sudo, không xác nhận theo tty và không cần phải khai báo tên domain đầy đủ trong file sudoers.
  • Chỉ thị ” root ALL=(ALL) ALL” tuân theo đúng cú pháp thường gặp, có nghĩa là người dùng root, trên tất cả các máy, có thể mượn quyền tất cả các người dùng, để thực thi tất cả các lệnh.
  • Chỉ thị “%admin ALL=(ALL) ALL” cũng tuân theo cú pháp đó, có nghĩa là nhóm người dùng admin, trên tất cả các máy, có thể mượn quyền tất cả các người dùng, để thực thi tất cả các lệnh.
Giả sử ta muốn cho thêm người dùng user1 được phép tắt máy của mình, ta thêm vào dòng:
user1 localhost=/sbin/shutdown
Nếu không khai báo rõ (target-users), sudo sẽ tự gán cho người triệu gọi sudo quyền owner của lệnh đó.
Ta cho phép người dùng monitor được phép khởi động lại apache server trên máy linux01 như sau:
monitor linux01= /etc/init.d/apache2 restart
Bây giờ ta có thể copy file sudoer này lên máy linux01 để áp dụng luật cho user monitor.
Save file lại bằng tổ hợp phím Ctrl-O và thoát ra bằng tổ hợp phím Ctrl-X, lúc này các rule đã có tác dụng.

Một số ví dụ thực tế khác

a) Cho phép user subadmin được thực thi nhiều lệnh với quyền root
subadmin ALL=(root) /sbin/shutdown, /bin/kill, /etc/init.d/httpd
b) Cho phép user subadmin được tắt máy mà không cần phải xác nhận bằng mật khẩu
subadmin localhost= NOPASSWD: /sbin/shutdown
c) Cho phép user subadmin được thực hiện bất kỳ lệnh nào trong /usr/bin ở máy linux01
subadmin linux01 = /usr/bin/*

Đọc thêm

Saturday, July 27, 2013

Sử dụng Vim

Bài viết này sẽ hướng dẫn các bạn cách sử dụng vi/vim một cách đơn giản nhất.
Trong vim có 3 chế độ cơ bản như sau:
  • Chế độ chèn (insert) bấm phím i để vào chế độ này.
  • Chế độ visual bấm phím v để vào chế độ này.
  • Chế độ dòng lệnh bấm phím Esc để vào chế độ này.

Mở file

Để mở một file đã tồn tại hoặc một file mới trong vi/vim các bạn dùng cú pháp sau:
vim tên_file

Chỉnh sửa

Để vào chế độ chỉnh sửa của vi/vim chúng ta nhấn phím i (insert) hoặc a(append)

Lưu và thoát

Để thoát khỏi vi/vim chúng ta sử dụng command :q và để lưu file chúng ta dùng command :w. Khi muốn lưu và thoát chúng ta kết hợp cả 2 command là :wq
Khi muốn thoát mà không thay đổi gì chúng ta dùng :q!
Lưu ý: để thực hiện được các command đầu tiên chúng ta phải thoát chế độ edit bằng phím Esc.(Hầu hết các thao tác trong vi/vim đều phải thoát chế độ edit trước khi thực hiện)

Di chuyển con trỏ

Để di chuyển con trỏ trong vi/vim chúng ta dùng các phím h,j,k,l. Hình ảnh sau minh họa các di chuyển con trong trong vi/vimNếu bàn phím của bạn có các phím mũi tên thì bạn cũng có thể sử dụng chúng cho việc di chuyển con trỏ. Tuy nhiên việc dùng các phím h,j,k,l sẽ nhanh hơn việc dùng các phím mũi tên.

Xóa một dòng

Để xóa một dòng cho vi/vim chúng ta cần di chuyển con trỏ đến dòng cần xóa và nhấn dd

Xóa một/nhiều từ

Để xóa một từ chúng ta di chuyển con trỏ đến đầu từ cần xoá dùng dw, xóa 2 từ dùng d2w, 3 từ bằng d3w.

Copy/paste.

Để copy một dòng trong vi/vim chúng ta dùng yy hoặc Y. Để paste vào vị trị con trỏ chúng ta dùng p . Nếu muốn copy một đoạn ta chuyển sang chế độ visual bằng phím v rồi di chuyển con trỏ đến vị trị cần copy rồi dùng phím y để copy và phím p để paste.
Bài viết này chỉ dừng lại ở mức giới thiệu và làm quen các tính năng đơn giản của vi/vim
Chúc các bạn thành công!

===============================================================================
=    Xin chào mừng bạn đến với Hướng dẫn dùng Vim    -    Phiên bản 1.5      =
===============================================================================
 Vim là một trình soạn thảo rất mạnh. Vim có rất nhiều câu lệnh,
 chính vì thế không thể trình bày hết được trong cuốn hướng dẫn này.
 Cuốn hướng dẫn chỉ đưa ra những câu lệnh để giúp bạn sử dụng Vim
 được dễ dàng hơn. Đây cũng chính là mục đich của sách

 Cần khoảng 25-30 phút để hoàn thành bài học, phụ thuộc vào thời
 gian thực hành.

 Các câu lệnh trong bài học sẽ thay đổi văn bản này. Vì thế hãy tạo
 một bản sao của tập tin này để thực hành (nếu bạn dùng "vimtutor"
 thì đây đã là bản sao).

 Hãy nhớ rằng hướng dẫn này viết với nguyên tắc "học đi đôi với hành".
 Có nghĩa là bạn cần chạy các câu lệnh để học chúng. Nếu chỉ đọc, bạn
 sẽ quên các câu lệnh!

 Bây giờ, cần chắc chắn là phím Shift KHÔNG bị nhấn và hãy nhấn phím
 j đủ số lần cần thiết (di chuyển con trỏ) để Bài 1.1 hiện ra đầy đủ
 trên màn hình.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Bài 1.1:  DI CHUYỂN CON TRỎ


   ** Để di chuyển con trỏ, nhấn các phím h,j,k,l như đã chỉ ra. **
      ^
      k      Gợi ý:  phím h ở phía trái và di chuyển sang trái.
 < h l >     phím l ở bên phải và di chuyển sang phải.
      j      phím j trong như một mũi tên chỉ xuống
      v
  1. Di chuyển con trỏ quanh màn hình cho đến khi bạn quen dùng.

  2. Nhấn và giữ phím (j) cho đến khi nó lặp lại.
---> Bây giờ bạn biết cách chuyển tới bài học thứ hai.

  3. Sử dụng phím di chuyển xuống bài 1.2.

Chú ý: Nếu bạn không chắc chắn về những gì đã gõ, hãy nhấn <ESC> để chuyển vào
  chế độ Câu lệnh, rồi gõ lại những câu lệnh mình muốn.

Chú ý: Các phím mũi tên cũng làm việc. Nhưng một khi sử dụng thành thạo hjkl,
  bạn sẽ di chuyển con trỏ nhanh hơn so với các phím mũi tên.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       Bài 1.2: VÀO VÀ THOÁT VIM


  !! CHÚ Ý: Trước khi thực hiện bất kỳ lệnh nào, xin hãy đọc cả bài học này!!

  1. Nhấn phím <ESC> (để chắc chắn là bạn đang ở chế độ Câu lệnh).

  2. Gõ:   :q! <ENTER>.

---> Lệnh này sẽ thoát trình soạn thảo mà KHÔNG ghi nhớ bất kỳ thay đổi nào mà bạn đã làm.
     Nếu bạn muốn ghi nhớ những thay đổi đó và thoát thì hãy gõ:
    :wq  <ENTER>

  3. Khi thấy dấu nhắc shell, hãy gõ câu lệnh đã đưa bạn tới hướng dẫn này. Có
  thể là lệnh: vimtutor vi <ENTER>
     Thông thường bạn dùng: vim tutor.vi<ENTER>

---> 'vim' là trình soạn thảo vim, 'tutor.vi' là tập tin bạn muốn soạn thảo.

  4. Nếu bạn đã nhớ và nắm chắc những câu lệnh trên, hãy thực hiện các bước từ
  1 tới 3 để thoát và quay vào trình soạn thảo. Sau đó di chuyển con trỏ
  tới Bài 1.3.
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       Bài 1.3: SOẠN THẢO VĂN BẢN - XÓA


** Trong chế độ Câu lệnh nhấn x  để xóa ký tự nằm dưới con trỏ. **

  1. Di chuyển con trỏ tới dòng có dấu --->.

  2. Để sửa lỗi, di chuyển con trỏ để nó nằm trên ký tự sẽ bị
  xóa.

  3. Nhấn phím x  để xóa ký tự không mong muốn.

  4. Lặp lại các bước từ 2 tới 4 để sửa lại câu.

---> Emm xiinh em đứnng chỗ nào cũnkg xinh.

  5. Câu trên đã sửa xong, hãy chuyển tới Bài 1.4.

Chú ý: Khi học theo cuốn hướng dẫn này đừng cố nhớ, mà học từ thực hành.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       Bài 1.4: SOẠN THẢO VĂN BẢN - CHÈN


  ** Trong chế độ Câu lệnh nhấn  i  để chèn văn bản. **

  1. Di chuyển con trỏ tới dòng có dấu ---> đầu tiên.

  2. Để dòng thứ nhất giống hệt với dòng thứ hai, di chuyển con trỏ lên ký tự
  đầu tiên NGAY SAU chỗ muốn chèn văn bản.

  3. Nhấn i và gõ văn bản cần thêm.

  4. Sau mỗi lần chèn từ còn thiếu nhấn <ESC> để trở lại chế dộ Câu lệnh.
     Lặp lại các bước từ 2 tới 4 để sửa câu này.

---> Mot lam chang nen , ba cay chum lai hon cao.
---> Mot cay lam chang nen non, ba cay chum lai nen hon nui cao.

  5. Sau khi thấy quen với việc chèn văn bản hãy chuyển tới phần tổng kết
  ở dưới.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          TỔNG KẾT BÀI 1


  1. Con trỏ được di chuyển bởi các phím mũi tên hoặc các phím hjkl.
  h (trái) j (xuống)       k (lên)     l (phải)

  2. Để vào Vim (từ dấu nhắc %) gõ:  vim TÊNTẬPTIN <ENTER>

  3. Muốn thoát Vim gõ:    <ESC>   :q!  <ENTER>  để vứt bỏ mọi thay đổi.
      HOẶC gõ:    <ESC>   :wq  <ENTER>  để ghi nhớ thay đổi.

  4. Để xóa bỏ ký tự nằm dưới con trỏ trong chế độ Câu lệnh gõ:  x

  5. Để chèn văn bản tại vị trí con trỏ trong chế độ Câu lệnh gõ:
  i     văn bản sẽ nhập <ESC>

CHÚ Ý: Nhấn <ESC> sẽ đưa bạn vào chế độ Câu lệnh hoặc sẽ hủy bỏ một câu lệnh
  hay đoạn câu lệnh không mong muốn.

Bây giờ chúng ta tiếp tục với Bài 2.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Bài 2.1: CÁC LỆNH XÓA


     ** Gõ dw để xóa tới cuối một từ. **

  1. Nhấn  <ESC>  để chắc chắn là bạn đang trong chế độ Câu lệnh.

  2. Di chuyển con trỏ tới dòng có dấu --->.

  3. Di chuyển con trỏ tới ký tự đầu của từ cần xóa.

  4. Gõ   dw  để làm từ đó biến mất.

  CHÚ Ý: các ký tự dw sẽ xuất hiện trên dòng cuối cùng của màn hình khi bạn gõ
  chúng. Nếu bạn gõ nhầm, hãy nhấn <ESC> và làm lại từ đầu.

---> Khi trái tỉm tìm tim ai như mùa đông giá lạnh lanh
  Anh đâu thành cánh én nhỏ trùng khơi.

  5. Lặp lại các bước cho đến khi sửa xong câu thơ rồi chuyển tới Bài 2.2.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        Bài 2.2: CÁC CÂU LỆNH XÓA KHÁC


    ** gõ  d$ để xóa tới cuối một dòng. **

  1. Nhấn  <ESC>  để chắc chắn là bạn đang trong chế độ Câu lệnh.

  2. Di chuyển con trỏ tới dòng có dấu --->.

  3. Di chuyển con trỏ tới cuối câu đúng (SAU dấu . đầu tiên).

  4. Gõ    d$    để xóa tới cuối dòng.

---> Đã qua đi những tháng năm khờ dại. thừa thãi.


  5. Chuyển tới Bài 2.3 để hiểu cái gì đang xảy ra.





~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       Bài 2.3: CÂU LỆNH VÀ ĐỐI TƯỢNG


  Câu lệnh xóa d có dạng như sau:

  [số]   d đối_tượng     HOẶC      d  [số]   đối_tượng
  Trong đó:
    số - là số lần thực hiện câu lệnh (không bắt buộc, mặc định=1).
    d - là câu lệnh xóa.
    đối_tượng - câu lệnh sẽ thực hiện trên chúng (liệt kê phía dưới).

  Danh sách ngắn của đối tượng:
    w - từ con trỏ tới cuối một từ, bao gồm cả khoảng trắng.
    e - từ con trỏ tới cuối một từ, KHÔNG bao gồm khoảng trắng.
    $ - từ con trỏ tới cuối một dòng.

CHÚ Ý:  Dành cho những người ham tìm hiểu, chỉ nhấn đối tượng trong chế độ Câu
  lệnh mà không có câu lệnh sẽ di chuyển con trỏ như trong danh sách trên.




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Bài 2.4: TRƯỜNG HỢP NGOẠI LỆ CỦA QUY LUẬT  'CÂU LỆNH-ĐỐI TƯỢNG'


        ** Gõ  dd   để xóa cả một dòng. **

  Người dùng thường xuyên xóa cả một dòng, vì thế các nhà phát triển Vi đã
  quyết định dùng hai chữ d để đơn giản hóa thao tác này.

  1. Di chuyển con trỏ tới dòng thứ hai trong cụm phía dưới.
  2. Gõ dd để xóa dòng này.
  3. Bây giờ di chuyển tới dòng thứ  tư.
  4. Gõ   2dd   (hãy nhớ lại bộ ba  số-câu lệnh-đối tượng) để xóa hai dòng.

  1) Trong tim em khắc sâu bao kỉ niệm
  2) Tình yêu chân thành em dành cả cho anh
  3) Dẫu cuộc đời như bể dâu thay đổi
  4) Anh mãi là ngọn lửa ấm trong đêm
  5) Đã qua đi những tháng năm khờ dại
  7) Hãy để tự em lau nước mắt của mình
  8) Lặng lẽ sống những đêm dài bất tận
  9) Bao khổ đau chờ tia nắng bình minh

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Bài 2.5: CÂU LỆNH "HỦY THAO TÁC"


   ** Nhấn  u để hủy bỏ những câu lệnh cuối cùng,   U  để sửa cả một dòng. **

  1. Di chuyển con trỏ tới dòng có dấu ---> và đặt con trỏ trên từ có lỗi
  đầu tiên
  2. Gõ  x  để xóa chữ cái gây ra lỗi đầu tiên.
  3. Bây giờ gõ  u  để hủy bỏ câu lệnh vừa thự hiện (xóa chữ cái).
  4. Dùng câu lệnh x để sửa lỗi cả dòng này.
  5. Bây giờ gõ chữ  U  hoa để phục hồi trạng thái ban đầu của dòng.
  6. Bây giờ gõ  u  vài lần để hủy bỏ câu lệnh  U  và các câu lệnh trước.
  7. Bây giờ gõ CTRL-R (giữ phím CTRL và gõ R) và lầu để thực hiện
     lại các câu lệnh (hủy bỏ các câu lệnh hủy bỏ).

---> Câyy ccó cộii, nuước csó nguuồn.

  8. Đây là những câu lệnh rất hữu ích.  Bây giờ chuyển tới Tổng kết Bài 2.




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          TỔNG KẾT BÀI 2


  1. Để xóa từ con trỏ tới cuối một từ gõ:    dw

  2. Để xóa từ con trỏ tới cuối một dòng gõ:    d$

  3. Để xóa cả một dòng gõ:    dd

  4. Một câu lệnh trong chế độ Câu lệnh có dạng:

       [số]   câu_lệnh   đối_tượng     HOẶC     câu_lệnh [số]   đối_tượng
     trong đó:
  số - là số lần thực hiện câu lệnh (không bắt buộc, mặc định=1).
  câu_lệnh - là những gì thực hiện, ví dụ d dùng để xóa.
  đối_tượng - câu lệnh sẽ thực hiện trên chúng, ví dụ w (từ),
        $ (tới cuối một dòng), v.v...

  5. Để hủy bỏ thao tác trước, gõ:      u  (chữ u thường)
     Để hủy bỏ tất cả các thao tác trên một dòng, gõ: U  (chữ U hoa)
     Để hủy bỏ các câu lệnh hủy bỏ, gõ:       CTRL-R

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Bài 3.1: CÂU LỆNH DÁN


       ** Gõ p  để dán những gì vừa xóa tới sau con trỏ. **

  1. Di chuyển con trỏ tới dòng đầu tiên trong cụm ở dưới.

  2. Gõ  dd  để xóa và ghi lại một dòng trong bộ nhớ đệm của Vim.

  3. Di chuyển con trỏ tới dòng Ở TRÊN chỗ cần dán.

  4. Trong chế độ Câu lệnh, gõ    p  để thay thế dòng.

  5. Lặp lại các bước từ 2 tới 4 để đặt các dòng theo đúng thứ tự của chúng.

     d) Niềm vui như gió xưa bay nhè nhẹ
     b) Em vẫn mong anh sẽ đến với em
     c) Đừng để em mất đi niềm hy vọng đó
     a) Ai sẽ giúp em vượt qua sóng gió
  e) Dễ ra đi khó giữ lại bên mình


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         Bài 3.2: CÂU LỆNH THAY THẾ


  ** Gõ  r  và một ký tự để thay thế ký tự nằm dưới con trỏ. **

  1. Di chuyển con trỏ tới dòng có dấu --->.

  2. Di chuyển con trỏ tới ký tự gõ sai đầu tiên.

  3. Gõ   r và ký tự đúng.

  4. Lặp lại các bước từ 2 đến 4 để sửa cả dòng.

--->  "Trên đời nài làm gì có đườmg, người to đi mãi rồi thànk đường là tHôi"
--->  "Trên đời này làm gì có đường, người ta đi mãi rồi thành đường mà thôi"

  5. Bây giờ chuyển sang Bài 3.3.

CHÚ Ý: Hãy nhớ rằng bạn cần thực hành, không nên "học vẹt".



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Bài 3.3: CÂU LỆNH THAY ĐỔI


    ** Để thay đổi một phần hay cả một từ, gõ  cw . **

  1. Di chuyển con trỏ tới dòng có dấu --->.

  2. Đặt con trỏ trên chữ trong.

  3. Gõ  cw  và sửa lại từ (trong trường hợp này, gõ  'ine'.)

  4. Gõ <ESC> và chuyển tới lỗi tiếp theo (chữ cái đầu tiên trong số cần thay.)

  5. Lặp lại các bước 3 và 4 cho tới khi thu được dòng như dòng thứ hai.

---> Trên dùgn này có một dầy từ cần tyays đổi, sử dunk câu lệnh thay đổi.
---> Trên dong này có một vai từ cần thay đổi, sử dung câu lệnh thay đổi.

Chú ý rằng  cw  không chỉ thay đổi từ, nhưng còn đưa bạn vào chế độ chèn.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         Bài 3.4: TIẾP TỤC THAY ĐỔI VỚI c


     ** Câu lệnh thay đổi được sử dụng với cùng đối tượng như câu lệnh xóa. **

  1. Câu lệnh thay đổi làm việc tương tự như câu lệnh xóa. Định dạng như sau:

        [số]   c   đối_tượng     HOẶC     c [số]   đối_tượng

  2. Đối tượng cũng giống như ở trên, ví dụ   w (từ), $ (cuối dòng), v.v...

  3. Di chuyển con trỏ tới dòng có dấu --->.

  4. Di chuyển con trỏ tới dòng có lỗi đầu tiên.

  5. Gõ  c$  để sửa cho giống với dòng thứ hai và gõ <ESC>.

---> Doan cuoi dong nay can sua de cho giong voi dong thu hai.
---> Doan cuoi dong nay can su dung cau lenh c$ de sua.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          TỔNG KẾT BÀI 3


  1. Để dán đoạn văn bản vừa xóa, gõ p. Câu lệnh này sẽ đặt đoạn văn bản này
  PHÍA SAU con trỏ (nếu một dòng vừa bị xóa, dòng này sẽ được đặt vào dòng
  nằm dưới con trỏ).

  2. Để thay thế ký tự dưới con trỏ, gõ   r   và sau đó gõ
     ký tự muốn thay vào.

  3. Câu lệnh thay đổi cho phép bạn thay đổi đối tượng chỉ ra từ con
     trỏ tới cuối đối tượng.  vd. Gõ  cw  để thay đổi từ
     con trỏ tới cuối một từ, c$ để thay đổi tới cuối một dòng.

  4. Định dạng để thay đổi:

 [số]   c   đối_tượng     HOẶC     c [số]   đối_tượng

Bây giờ chúng ta tiếp tục bài học mới.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       Bài 4.1: THÔNG TIN VỀ TẬP TIN VÀ VỊ TRÍ TRONG TẬP TIN


  ** Gõ CTRL-g để hiển thị vị trí của bạn trong tập tin và thông tin về tập tin.
     Gõ SHIFT-G để chuyển tới một dòng trong tập tin. **

  Chú ý: Đọc toàn bộ bài học này trước khi thực hiện bất kỳ bước nào!!

  1. Giữ phím Ctrl và nhấn  g .  Một dòng thông tin xuất hiện tại cuối trang
     với tên tập tin và dòng mà bạn đang nằm trên.  Hãy nhớ số dòng này
     Cho bước số 3.

  2. Nhấn shift-G để chuyển tới cuối tập tin.

  3. Gõ số dòng mà bạn đã nằm trên và sau đó shift-G.  Thao tác này sẽ đưa bạn
     trở lại dòng mà con trỏ đã ở trước khi nhấn tổ hợp Ctrl-g.
     (Khi bạn gõ số, chúng sẽ KHÔNG hiển thị trên màn hình.)

  4. Nếu bạn cảm thấy đã hiểu rõ, hãy thực hiện các bước từ 1 tới 3.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Bài 4.2: CÂU LỆNH TÌM KIẾM


     ** Gõ  /  và theo sau là cụm từ muốn tìm kiếm. **

  1. Trong chế độ Câu lệnh gõ ký tự  /  .Chú ý rằng ký tự này  và con trỏ sẽ
  xuất hiện tại cuối màn hình giống như câu lệnh  : .

  2. Bây giờ gõ 'loiiiii' <ENTER>.  Đây là từ bạn muốn tìm.

  3. Để tìm kiếm cụm từ đó lần nữa, đơn giản gõ  n .
     Để tìm kiếm cụm từ theo hướng ngược lại, gõ  Shift-N .

  4. Nếu bạn muối tìm kiếm cụm từ theo hướng ngược lại đầu tập tin, sử dụng
     câu lệnh  ?  thay cho /.

---> "loiiiii" là những gì không đúng lắm;  loiiiii thường xuyên xảy ra.

Chú ý: Khi tìm kiếm đến cuối tập tin, việc tìm kiếm sẽ tiếp tục từ đầu
      tập tin này.


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     Bài 4.3: TÌM KIẾM CÁC DẤU NGOẶC SÁNH ĐÔI


       ** Gõ  %  để tìm kiếm ),], hay } . **

  1. Đặt con trỏ trên bất kỳ một (, [, hay { nào trong dòng có dấu --->.

  2. Bây giờ gõ ký tự  %  .

  3. Con trỏ sẽ di chuyển đến dấu ngoặc tạo cặp (dấu đóng ngoặc).

  4. Gõ  %  để chuyển con trỏ trở lại dấu ngoặc đầu tiên (dấu mở ngoặc).

---> Đây là ( một dòng thử nghiệm với các dấu ngoặc (, [ ] và { } . ))

Chú ý: Rất có ích khi sửa lỗi chương trình, khi có các lỗi thừa thiếu dấu ngoặc!






~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        Bài 4.4: MỘT CÁCH SỬA LỖI


 ** Gõ  :s/cũ/mới/g  để thay thế 'mới' vào 'cũ'. **

  1. Di chuyển con trỏ tới dòng có dấu --->.

  2. Gõ  :s/duou/ruou <ENTER> .  Chú ý rằng câu lệnh này chỉ thay đổi từ tìm
     thấy đầu tiên trên dòng (từ 'duou' đầu dòng).

  3. Bây giờ gõ  :s/duou/ruou/g    để thực hiện thay thế trên toàn bộ dòng.
     Lệnh này sẽ thay thế tất cả những từ ('duou') tìm thấy trên dòng.

---> duou ngon phai co ban hie. Khong duou cung khong hoa.

  4. Để thay thế thực hiện trong đoạn văn bản giữa hai dòng,
     gõ   :#,#s/cũ/mới/g    trong đó #,# là số thứ tự của hai dòng.
     Gõ   :%s/cũ/mới/g    để thực hiện thay thế trong toàn bộ tập tin.




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          TỔNG KẾT BÀI 4


  1. Ctrl-g  vị trí của con trỏ trong tập tin và thông tin về tập tin.
     Shift-G  di chuyển con trỏ tới cuối tập tin.  Số dòng và theo sau
     là  Shift-G  di chuyển con trỏ tới dòng đó.

  2. Gõ  / và cụm từ theo sau để tìm kiếm cụm từ VỀ PHÍA TRƯỚC.
     Gõ  ? và cụm từ theo sau để tìm kiếm cụm từ NGƯỢC TRỞ LẠI.
     Sau một lần tìm kiếm gõ  n  để tìm kiếm cụm từ lại một lần nữa theo hướng
     đã tìm hoặc  Shift-N  để tìm kiếm theo hướng ngược lại.

  3. Gõ  % khi con trỏ nằm trên một  (,),[,],{, hay }  sẽ chỉ ra vị trí của
     dấu ngoặc còn lại trong cặp.

  4. Để thay thế 'mới' cho 'cũ' đầu tiên trên dòng, gõ    :s/cũ/mới
     Để thay thế 'mới' cho tất cả 'cũ' trên dòng, gõ    :s/cũ/mới/g
     Để thay thế giữa hai dòng, gõ    :#,#s/cũ/mới/g
     Để thay thế trong toàn bộ tập tin, gõ    :%s/cũ/mới/g
     Để chương trình hỏi lại trước khi thay thế, thêm 'c' :%s/cũ/mới/gc


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
  Lesson 5.1: CÁCH THỰC HIỆN MỘT CÂU LỆNH NGOẠI TRÚ


   ** Gõ  :! theo sau là một câu lệnh ngoại trú để thực hiện câu lệnh đó. **

  1. Gõ câu lệnh quen thuộc :  để đặt con trỏ tại cuối màn hình.
     Thao tác này cho phép bạn nhập một câu lệnh.

  2. Bây giờ gõ ký tự  !  (chấm than).  Ký tự này cho phép bạn
     thực hiện bất kỳ một câu lệnh shell nào.

  3. Ví dụ gõ   ls   theo sau dấu ! và gõ <ENTER>.  Lệnh này
  sẽ hiển thị nội dung của thư mục hiện thời, hoặc sử dụng
     lệnh   :!dir nếu ls không làm việc.

Chú ý:  Có thể thực hiện bất kỳ câu lệnh ngoại trú nào theo cách này.

Chú ý:  Tất cả các câu lệnh  :  cần kết thúc bởi phím <ENTER>




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        Bài 5.2: GHI LẠI CÁC TẬP TIN


     ** Để ghi lại các thay đổi, gõ  :w TÊNTỆPTIN. **

  1. Gõ  :!dir  hoặc  :!ls  để lấy bảng liệt kê thư mục hiện thời.
     Như bạn đã biết, bạn cần gõ <ENTER> để thực hiện.

  2. Chọn một tên tập tin chưa có, ví dụ TEST.

  3. Bây giờ gõ:  :w TEST   (trong đó TEST là tên tập tin bạn đã chọn.)

  4. Thao tác này ghi toàn bộ tập tin (Hướng dẫn dùng Vim) dưới tên TEST.
     Để kiểm tra lại, gõ    :!dir   một lần nữa để liệt kê thư mục.

Chú ý: Nếu bạn thoát khỏi Vim và quay trở lại với tên tập tin TEST, thì tập
      tin sẽ là bản sao của hướng dẫn tại thời điểm bạn ghi lại.

  5. Bây giờ xóa bỏ tập tin (MS-DOS):    :!del TEST
    hay (Unix): :!rm TEST


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bài 5.3: CÂU LỆNH GHI CHỌN LỌC


 ** Để ghi một phần của tập tin, gõ   :#,# w TÊNTẬPTIN **

  1. Gõ lại một lần nữa  :!dir  hoặc  :!ls  để liệt kê nội dung thư mục
     rồi chọn một tên tập tin thích hợp, ví dụ TEST.

  2. Di chuyển con trỏ tới đầu trang này, rồi gõ  Ctrl-g  để tìm ra số thứ
     tự của dòng đó.  HÃY NHỚ SỐ THỨ TỰ NÀY!

  3. Bây giờ di chuyển con trỏ tới dòng cuối trang và gõ lại Ctrl-g lần nữa.
  HÃY NHỚ CẢ SỐ THỨ TỰ NÀY!

  4. Để CHỈ ghi lại một phần vào một tập tin, gõ   :#,# w TEST   trong đó #,#
     là hai số thứ tự bạn đã nhớ (đầu,cuối) và TEST là tên tập tin.

  5. Nhắc lại, xem tập tin của bạn có ở đó không với  :!dir  nhưng ĐỪNG xóa.




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
     Bài 5.4: ĐỌC VÀ KẾT HỢP CÁC TẬP TIN


       ** Để chèn nội dung của một tập tin, gõ   :r TÊNTẬPTIN **

  1. Gõ   :!dir   để chắc chắn là có tệp tin TEST.

  2. Đặt con trỏ tại đầu trang này.

CHÚ Ý:  Sau khi thực hiện Bước 3 bạn sẽ thấy Bài 5.3. Sau đó cần di chuyển
  XUỐNG bài học này lần nữa.

  3. Bây giờ dùng câu lệnh   :r TEST   để đọc tập tin TEST, trong đó TEST là
     tên của tập tin.

CHÚ Ý:  Tập tin được đọc sẽ đặt bắt đầu từ vị trí của con trỏ.

  4. Để kiểm tra lại, di chuyển con trỏ ngược trở lại và thấy rằng bây giờ
     có hai Bài 5.3, bản gốc và bản vừa chèn.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         TỔNG KẾT BÀI 5


  1.  :!câulệnh  thực hiện một câu lệnh ngoại trú

      Một vài ví dụ hữu ích:
  (MS-DOS)   (Unix)
   :!dir     :!ls     -  liệt kê nội dung một thư mục.
   :!del TÊNTẬPTIN   :!rm TÊNTẬPTIN   -  xóa bỏ tập tin TÊNTẬPTIN.

  2.  :w TÊNTẬPTIN  ghi tập tin hiện thời của Vim lên đĩa với tên TÊNTẬPTIN.

  3.  :#,#w TÊNTẬPTIN  ghi các dòng từ # tới # vào tập tin TÊNTẬPTIN.

  4.  :r TÊNTẬPTIN  đọc tập tin trên đĩa TÊNTẬPTIN và chèn nội dung của nó vào
      tập tin hiện thời sau vị trí của con trỏ.






~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Bài 6.1: CÂU LỆNH TẠO DÒNG


 ** Gõ  o  để mở một dòng phía dưới con trỏ và chuyển vào chế độ Soạn thảo. **

  1. Di chuyển con trỏ tới dòng có dấu --->.

  2. Gõ  o (chữ thường) để mở một dòng BÊN DƯỚI con trỏ và chuyển vào chế độ
     Soạn thảo.

  3. Bây giờ sao chép dòng có dấu ---> và nhấn <ESC> để thoát khỏi chế độ Soạn
  thảo.

---> Sau khi gõ  o  con trỏ sẽ đặt trên dòng vừa mở trong chế độ Soạn thảo.

  4. Để mở một dòng Ở TRÊN con trỏ, đơn giản gõ một chữ O hoa, thay cho
     chữ  o thường.  Hãy thử thực hiện trên dòng dưới đây.
Di chuyển con trỏ tới dòng này, rồi gõ Shift-O sẽ mở một dòng trên nó.




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   Bài 6.2: CÂU LỆNH THÊM VÀO


      ** Gõ  a  để chèn văn bản vào SAU con trỏ. **

  1. Di chuyển con trỏ tới cuối dòng đầu tiên có ký hiệu --->
     bằng cách gõ  $ trong chế độ câu lệnh.

  2. Gõ  a  (chữ thường) để thêm văn bản vào SAU ký tự dưới con trỏ.
     (Chữ  A  hoa thêm văn bản vào cuối một dòng.)

Chú ý: Lệnh này thay cho việc gõ  i , ký tự cuối cùng, văn bản muốn chèn,
     <ESC>, mũi tên sang phải, và cuối cùng, x , chỉ để thêm vào cuối dòng!

  3. Bây giờ thêm cho đủ dòng thứ nhất. Chú ý rằng việc thêm giống hệt với
     việc chèn, trừ vị trí chèn văn bản.

---> Dong nay cho phep ban thuc hanh
---> Dong nay cho phep ban thuc hanh viec them van ban vao cuoi dong.



~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      Bài 6.3: MỘT CÁCH THAY THẾ KHÁC


      ** Gõ chữ cái  R  hoa để thay thế nhiều ký tự. **

  1. Di chuyển con trỏ tới cuối dòng đầu tiên có ký hiệu --->.

  2. Đặt con trỏ tại chữ cái đầu của từ đầu tiên khác với dòng có dấu
     ---> tiếp theo (từ 'tren').

  3. Bây giờ gõ R và thay thế phần còn lại của dòng thứ nhất bằng cách gõ
     đè lên văn bản cũ để cho hai dòng giống nhau.

---> De cho dong thu nhat giong voi dong thu hai tren trang nay.
---> De cho dong thu nhat giong voi dong thu hai, go R va van ban moi.

  4. Chú ý rằng khi bạn nhấn <ESC> để thoát, đoạn văn bản không sửa đổi sẽ
  được giữ nguyên.




~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
       Bài 6.4: THIẾT LẬP CÁC THAM SỐ

   ** Thiết lập một tùy chọn để việc tìm kiếm hay thay thế lờ đi kiểu chữ **

  1. Tìm kiếm từ 'lodi' bằng cách gõ:
     /lodi
     Lặp lại vài lần bằng phím n.

  2. Đặt tham số 'ic' (Lodi - ignore case) bằng cách gõ:
     :set ic

  3. Bây giờ thử lại tìm kiếm 'lodi' bằng cách gõ: n
     Lặp lại vài lần bằng phím n.

  4. Đặt các tham số 'hlsearch' và 'incsearch':
     :set hls is

  5. Bây giờ nhập lại câu lệnh tìm kiếm một lần nữa và xem cái gì xảy ra:
     /lodi

  6. Để xóa bỏ việc hiện sáng từ tìm thấy, gõ:
     :nohlsearch
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          TỔNG KẾT BÀI 6


  1. Gõ  o mở một dòng phía DƯỚI con trỏ và đặt con trỏ trên dòng vừa mở
     trong chế độ Soạn thảo.
     Gõ một chữ  O  hoa để mở dòng phía TRÊN dòng của con trỏ.

  2. Gõ  a  để chèn văn bản vào SAU ký tự nằm dưới con trỏ.
     Gõ một chữ  A  hoa tự động thêm văn bản vào cuối một dòng.

  3. Gõ một chữ  R  hoa chuyển vào chế độ Thay thế cho đến khi nhấn  <ESC>.

  4. Gõ ":set xxx" sẽ đặt tham số "xxx"









~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         Bài 7: CÂU LỆNH TRỢ GIÚP


        ** Sử dụng hệ thống trợ giúp có sẵn **

  Vim có một hệ thống trợ giúp đầy đủ. Để bắt đầu, thử một trong ba
  lệnh sau:
 - nhấn phím <HELP> (nếu bàn phím có)
 - nhấn phím <F1> (nếu bàn phím có)
 - gõ   :help <ENTER>

  Gõ   :q <ENTER>   để đóng cửa sổ trợ giúp.

  Bạn có thể tìm thấy trợ giúp theo một đề tài, bằng cách đưa tham số tới
  câu lệnh ":help".  Hãy thử (đừng quên gõ <ENTER>):

 :help w
 :help c_<T
 :help insert-index
 :help user-manual


~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
         Bài 8: TẠO MỘT SCRIPT KHỞI ĐỘNG

     ** Bật các tính năng của Vim **

  Vim có nhiều tính năng hơn Vi, nhưng hầu hết chúng bị tắt theo mặc định.
  Để sử dụng các tính năng này bạn cần phải tạo một tập tin "vimrc".

  1. Soạn thảo tệp tin "vimrc", phụ thuộc vào hệ thống của bạn:
 :edit ~/.vimrc   đối với Unix
 :edit $VIM/_vimrc  đối với MS-Windows

  2. Bây giờ đọc tập tin "vimrc" ví dụ:

 :read $VIMRUNTIME/vimrc_example.vim

  3. Ghi lại tập tin:

 :write

  Trong lần khởi động tiếp theo, Vim sẽ sử dụng việc hiện sáng cú pháp.
  Bạn có thể thêm các thiết lập ưa thích vào tập tin "vimrc" này.

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

  Bài học hướng dẫn sử dụng Vim (Vim Tutor) kết thúc tại đây.  Bài học đưa ra
  cái nhìn tổng quát về trình soạn thảo Vim, chỉ đủ để bạn có thể sử dụng
  trình soạn thảo một cách dễ dàng. Bài học còn rất xa để có thể nói là đầy
  đủ vì Vim có rất rất nhiều câu lệnh. Tiếp theo xin hãy đọc hướng dẫn người
  dùng: ":help user-manual".

  Cuốn sách sau được khuyên dùng cho việc nghiên cứu sâu hơn:
 Vim - Vi Improved - Tác giả: Steve Oualline
 Nhà xuất bản: New Riders
  Cuốn sách đầu tiên dành hoàn toàn cho Vim. Đặc biệt có ích cho người mới.
  Có rất nhiều ví dụ và tranh ảnh.
  Hãy xem: http://iccf-holland.org/click5.html

  Cuốn sách tiếp theo này xuất bản sớm hơn và nói nhiều về Vi hơn là Vim,
  nhưng cũng rất nên đọc:
 Learning the Vi Editor - Tác giả: Linda Lamb
 Nhà xuất bản: O'Reilly & Associates Inc.
  Đây là một cuốn sách hay và cho bạn biết tất cả cách thực hiện những gì muốn
  làm với Vi. Lần xuất bản thứ sáu đã thêm thông tin về Vim.

  Bài học hướng dẫn này viết bởi Michael C. Pierce và Robert K. Ware,
  Colorado School of Mines sử dụng ý tưởng của Charles Smith,
  Colorado State University.  E-mail: bware@mines.colorado.edu.

  Sửa đổi cho Vim bởi Bram Moolenaar.

  Dịch bởi: Phan Vĩnh Thịnh <teppi@vnlinux.org>, 2005
  Translator: Phan Vinh Thịnh <teppi@vnlinux.org>, 2005
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Friday, July 26, 2013

Hiển thị tiến trình trong hệ thống Linux



Một trong những công việc cần thiết khi quản trị hệ thống Linux đó là kiểm soát các tiến trình hiện đang chạy. Khi đã biết được những tiến trình nào đang chạy bạn có thể tắt những tiến trình gây giảm tốc độ của hệ thống. Ngoài ra, thông tin về những tiến trình hệ thống cho chúng ta biết nên tắt nhưng tiến trình làm cho hệ thống vận hành không ổn định. Do đó việc biết được những tiến trình nào đang chạy trên hệ thống rất quan trọng. Linux hỗ trợ nhiều phương pháp kiểm tra tiến trình, một trong số đó là sử dụng lệnh ps. Khi sử dụng lệnh này mọi thông tin về những tiến trình đang chạy sẽ được hiển thị. Bạn chỉ cần nhập cú pháp lệnh sau vào cửa sổ terminal:

ps aux | less


Hình 1: Thông tin tiến trình đang chạy trong hệ thống.

Ngoài ra lệnh này có thể sử dụng kết hợp với một số tham số khác như:

# ps –A: Kiểm tra mọi tiến trình trong hệ thống.
# ps -U root -u root –N: Kiểm tra mọi tiến trình ngoại trừ những tiến trình hệ thống.
# ps -u username: Kiểm tra những tiến trình được thực hiện bởi một người dùng nhất định.

Hoặc bạn có thể sử dụng lệnh # top để xem những tiến trình đang chạy trên hệ thống trong thời gian thực.


Ta có 3 mức theo dõi với CPU là:
%CPU < 40%: bình thường, 40 ~ 60 %: cảnh báo, >60% quá tải

RAM và Swap: bộ nhớ swap được dùng đến khi RAM hết ở đây ta lưu ý:
Swap > 50 %: Quá tải

Khi VPS trong trạng thải quá tải: 
Với lệnh top cho ta biết được user và tiến trình nào đang hoạt động, chiếm nhiều mem và CPU nhất.
Ta có thể can thiệp bằng cách kill tiến trình hoặc xem log
Bài xem log mình sẽ hướng dẫn trong một bài sau

File Permission trong Linux

Một trong những thành phần chính của hệ điều hành Linux là hệ thống quyền hạn truy cập (permission) áp dụng cho mọi đối tượng (file, thư mục, link…). Hệ thống này đóng 1 vai trò quan trọng trong việc đem lại mức an ninh cao cho Linux.
Mỗi 1 đối tượng gắn với 3 loại quyền: read (đọc), write (sửa đổi) vàexecute (thực thi). Và mỗi quyền này lại được chỉ định cho 3 loại user:
+ owner: chủ sở hữu của đối tượng – mặc định ban đầu là user tạo ra đối tượng đó.
+ group: 1 nhóm các user có các quyền hạn giống nhau đối với đối tượng – mặc định ban đầu là group mà owner ở trên thuộc về.
+ other: tất cả các user không thuộc 2 nhóm trên
Ý nghĩa của 3 loại quyền trên là:
+ Đối với thư mục:
  • Read: chỉ cho phép sử dụng lệnh ls để xem tên các đối tượng có trong thư mục, nếu muốn xem thêm các thông tin như: kích thước, quyền hạn truy cập, chủ sở hữu, ngày khởi tạo… bạn cần cấp thêm cho thư mục quyền execute.
  • Write: cho phép tạo và xóa các đối tượng trong thư mục.
  • Execute: chỉ cho phép chuyển vào thư mục sử dụng lệnh cd.
+ Đối với file:
  • Read: cho phép xem nội dung của file.
  • Write: cho phép chỉnh sửa nội dung, xóa file.
  • Excute: cho phép chạy file, quyền này thường được gán các file nhị phân thực thi (tương tự như file .exe trong Windows).
User root có đủ cả 3 quyền đối với mọi đối tượng trên hệ thống. Ngoài ra, root có thể thay đổi (cấp hoặc tước) quyền hạn truy cập đối tượng cho bất kỳ user nào và còn có thể chuyển quyền sở hữu đối tượng qua lại giữa các user.
Các quyền trên được ký hiệu như sau:
- Read: ký hiệu là r hoặc số 4
- Write: ký hiệu là w hoặc số 2
- Excute: ký hiệu là x hoặc số 1
Vì mỗi đối tượng có 3 loại quyền cho mỗi loại user nên có tất cả 9 bit thông tin về quyền hạn tương ứng với mỗi đối tượng. Mỗi bit trong 9 bit này nhận 1 trong 2 giá trị: được phép (allow) hoặc bị cấm (deny).
Các quyền hạn của 1 đối tượng được biểu diễn theo 2 cách:
a) Cách 1: bao gồm 1 chuỗi 10 ký tự, theo thứ tự từ trái sang phải thì
• Ký tự đầu thể hiện loại file: ví dụ, d cho thư mục (được coi là file đặc biệt), - cho file thông thường, l cho các link (hard link, symbolic link)…
• 3 ký tự kế tiếp là các quyền cho owner, kế đến là 3 ký tự biểu diễn các quyền cho group, còn lại 3 ký tự cuối dành cho other
• Bit nào mang giá trị allow thì với read sẽ là r, write là w, excute là e. Vị trí các bit mang giá trịdeny được biểu diễn bằng dấu 
Sử dụng lệnh ls –l filename để biết thông tin về các quyền của đối tượng tên filename. VD:
-rwxrw-r–
+ đây là file thông thường
+ owner có quyền đủ 3 quyền read, write, excute; group có 2 quyền read và write; other chỉ có quyền read
d-w-r-xr-x
+ đây là thư mục
+ owner chỉ có quyền write; cả group và other có quyền read và excute
b/ Cách 2: ngắn gọn hơn, gồm 3 số hệ bát phân
Số đầu cho owner, số thứ 2 cho group, số còn lại cho other. Mỗi 1 số nhận 1 trong 8 giá trị sau
+ 0 : cấm tất cả các quyền                   + 1 : execute               + 2 : write
+ 3 : execute + write                           + 4 : read                     + 5 : read + execute
+ 6 : read + write                                 + 7 : read + write + execute
————-
  • Để thay đổi quyền hạn lên đối tượng cho các user sử dụng lệnh chmod (bạn phải là owner của file hặc có quyền root)
  • Để thay đổi owner cho đối tượng sử dụng lệnh chown (bạn phải có quyền root)
  • Để thay đổi group cho đối tượng sử dụng lệnh chgrp nhưng phải thỏa 1 trong 2 điều kiện:
- chạy lệnh chgrp với quyền root
- bạn là owner của file đồng thời cũng thuộc Group (có tên là Group_Name trong lệnh) mà bạn muốn thay đổi Group cho file
Chi tiết về cách sử dụng các lệnh trên cũng như là bàn về các bit đặc biệt: SUID, GUID, Sticky sẽ được giới thiệu trong các kỳ tiếp theo…

Thursday, July 25, 2013

Các lệnh cơ bản linux

1. Lệnh liên quan đến hệ thống 
exit: thoát khỏi cửa sổ dòng lệnh.
logout: tương tự exit.
reboot: khởi động lại hệ thống.
halt: tắt máy.
startx: khởi động chế độ xwindows từ cửa sổ terminal.
mount: gắn hệ thống tập tin từ một thiết bị lưu trữ vào cây thư mục chính.
unmount: ngược với lệnh mount.
/usr/bin/system-config-securitylevel-tui: Cấu hình tường lửa và SELinux
2. Lệnh xem thông tin
cat /proc/cpuinfo: Tìm chi tiết kỹ thuật của CPU
cat /proc/meminfo: Bộ nhớ và trang đổi thông tin
lspci: Xem thông tin mainboard
uname -r: Xem hạt nhân phiên bản
gcc -v: Compiler phiên bản nào tôi đã cài đặt.
/sbin/ifconfig: Xem các địa chỉ IP của bạn.
netstat: xem tất cả các kết nối.
lsmod: Những gì được nạp module hạt nhân
last: xem những ai đã login vào hệ thống
df: Xem dung lượng ổ đĩa cứng
free -m: xem dung lượng sử dụng bộ nhớ
netstat -an |grep :80 |wc -l: xem có bao nhiêu kết nối đến cổng 80
3. Lệnh thao tác trên tập tin
ls: lấy danh sách tất cả các file và thư mục trong thư mục hiện hành.
pwd: xuất đường dẫn của thư mục làm việc.
cd: thay đổi thư mục làm việc đến một thư mục mới.
mkdir: tạo thư mục mới.
rmdir: xoá thư mục rỗng.
cp: copy một hay nhiều tập tin đến thư mục mới.
mv: đổi tên hay di chuyển tập tin, thư mục.
rm: xóa tập tin.
wc: đếm số dòng, số kí tự... trong tập tin.
touch: tạo một tập tin.
cat: xem nội dung tập tin.
vi: khởi động trình soạn thảo văn bản vi.
df: kiểm tra dung lượng đĩa.
du: xem dung lượng đĩa đã dùng cho một số tập tin nhất định
tar -cvzpf archive.tgz /home/example/public_html/folder: nén một thư mục
tar -tzf backup.tar.gz: liệt kê file nén gz
tar -xvf archive.tar: giải nén một file tar
unzip file.zip: giải nén file .zip
wget: download một file.
chown user:user folder/ -R: Đổi owner cho toàn bộ thư mục vào file.
tail 100 log.log: Xem 100 dòng cuối cùng của file log.log.
4. Lệnh khi làm việc trên terminal
clear: xoá trắng cửa sổ dòng lệnh.
date: xem ngày, giờ hệ thống.
find /usr/share/zoneinfo/ | grep -i pst: xem các múi giờ.
ln -f -s /usr/share/zoneinfo/Asia/Ho_Chi_Minh /etc/localtime: Đổi múi giờ máy chủ về múi giờ Việt Nam
date -s "1 Oct 2009 18:00:00": Chỉnh giờ
cal: xem lịch hệ thống.
5. Lệnh quản lí hệ thống
rpm: kiểm tra gói đã cài đặt hay chưa, hoặc cài đặt một gói, hoặc sử dụng để gỡ bỏ một gói.
ps: kiểm tra hệ thống tiến trình đang chạy.
kill: dừng tiến trình khi tiến trình bị treo. Chỉ có người dùng super-user mới có thể dừng tất cả các tiến trình còn người dùng bình thường chỉ có thể dừng tiến trình mà mình tạo ra.
top: hiển thị sự hoạt động của các tiến trình, đặc biệt là thông tin về tài nguyên hệ thống và việc sử dụng các tài nguyên đó của từng tiến trình.
pstree: hiển thị tất cả các tiến trình dưới dạng cây.
sleep: cho hệ thống ngừng hoạt động trong một khoảng thời gian.
useradd: tạo một người dùng mới.
groupadd: tạo một nhóm người dùng mới.
passwd: thay đổi password cho người dùng.
userdel: xoá người dùng đã tạo.
groupdel: xoá nhóm người dùng đã tạo.
gpasswd: thay đổi password của một nhóm người dùng.
su: cho phép đăng nhập với tư cách người dùng khác.
groups: hiển thị nhóm của user hiện tại.
who: cho biết ai đang đăng nhập hệ thống.
w: tương tự như lệnh who.
man: xem hướng dẫn về dòng lệnh như cú pháp, các tham số.