Linux Căn Bản – Bài 3: Man, Ls, Cat, Touch, Pwd Những Command ...

Chào mừng bạn đến với bài số 3 của series Linux Căn Bản. Hôm nay chúng ta sẽ học về những câu lệnh căn bản nhất trên một hệ thống Linux ví dụ như lệnh man, ls, cat, touch, pwd.

Cuối bài chúng ta sẽ sử dụng kiến thức đã học được hôm nay để chinh phục thử thách đầu tiên của phòng Linux nhằm tìm ra password của account shiba2. Chúng ta cùng vào bài nhé.

1/ Làm quen với giao diện dòng lệnh

1a/ Directory và folder

Khi sử dụng Linux, bạn sẽ rất nhiều nghe đến khái niệm directory, vậy directory là gì?

Nói một cách ngắn gọn và dễ hiểu nhất, directory trên Linux giống và có cùng chức năng với folder (thư mục) trên Windows. Hay nói một cách khác directory trên Linux chính là folder trên Windows, chỉ khác mỗi cái tên thôi.

Folder (thư mục) trên Windows

Directory tương tự như folder có thể được dùng để chứa một hoặc nhiều file dữ liệu ( ví dụ: file word, excel, video, ảnh, nhạc, v.v) hoặc chứa một hay nhiều directory con bên trong nó.

Trên giao diện GUI của Kali Linux, directory sẽ trông gần tương tự như trên giao diện GUI của Windows.

Trên giao diện dòng lệnh (CLI) của Kali Linux, directory sẽ trông giống như thế này.

Mình tạo một file dữ liệu có tên tuhocnetworksecurity sao đó dùng lệnh ls để liệt kê toàn bộ file dữ liệu và những directory con chứa trong directory hiện tại (hay directory mẹ) (mình sẽ giải thích kỹ hơn về lệnh ls ở phần sau).

Như bạn có thể thấy với lệnh ls sự khác biệt giữa một directory và một file dữ liệu chỉ nằm ở màu sắc mà thôi (file dữ liệu có màu trắng và directory có màu xanh).

Tuy nhiên, các bạn cũng cần lưu ý là màu sắc hiển thị trong giao diện dòng lệnh không phải lúc nào cũng giống như trong hình bên trên. Có nhiều lúc do khác chương trình dòng lệnh, khác bản Linux, khác thiết lập giao diện, v.v., dẫn đến directory và file dữ liệu sẽ có cùng một màu với nhau. Do đó các bạn không nên chỉ dựa vào màu sắc để phân biệt directory và file dữ liệu nhé. Chúng ta có cách phân biệt riêng, mình sẽ trình bày ở phần ls -la bên dưới.

1b/ Shell vs terminal

Hai khái niệm khác mà bạn cũng sẽ nghe rất nhiều khi dùng Linux đó là Shell và Terminal.

Shell là một ứng dụng cho phép người dùng tương tác với Linux kernel. Shell không phải chỉ dành riêng cho giao diện dòng lệnh (CLI), chúng ta còn có graphical shell cho GUI nữa. Trên CLI, có nhiều shell khác nhau, nhưng phổ biết nhất đối với người dùng Linux là Bash shell (mặc định trên hầu hết hệ điều hành Linux). Mình sẽ nói kỹ hơn về shell ở bài scripting ở nửa cuối của series Linux Căn Bản. Bạn nào muốn tìm hiểu thêm về lịch sử cũng như sự khác biệt giữa các shell thì có thể đọc bài sau.

Terminal là tên một ứng dụng trên Linux dùng để chạy một shell, thường là CLI shell. Nên lâu dần khi nhắc đến Terminal, người dùng Linux sẽ nghĩ ngay đến giao diện CLI trên Linux

1c/ Những thành phần cần chú ý trong giao diện CLI

Khi bạn mở Terminal dòng đầu tiên bạn thấy được sẽ là

Thì trong đó:

  • vincent là tên của account người đang đăng nhập và đang sử dụng máy tính (chính là bạn)
  • kali là tên của thiết bị bạn đang dùng để chạy linux
  • Dấu ( ~ ) cho biết bạn đang ở home directory của account vincent. Home directory là gì? Mỗi account login vào Linux sẽ được cấp một directory mang tên của người đó, ví dụ account của mình tên vincent, sẽ được cấp một directory tên vincent. Directory mang tên mình sẽ nằm trong một directory tên ‘home’ chứa không chỉ directory tên của mình mà còn cả directory của những account khác.
    • Ví dụ bạn có thể nhìn vào hình bên dưới, chúng ta sẽ thấy home directory của server Learn Linux sẽ chứa tất cả những account của những người dùng khác, bao gồm cả account shiba1 mà bạn đang dùng. (Mình sẽ nói sâu hơn về cấu trúc directory trên Linux ở nửa sau của series Linux Căn Bản).
    • Các bạn cũng lưu ý là mỗi khi chúng ta đến địa chỉ directory khác, địa chỉ của directory đó sẽ được hiện ra ở vị trí của dấu ( ~ ) như bạn có thể xem ví dụ như trong hình bên dưới.
  • Dấu ( $ ) cho biết bạn đang ở account người dùng bình thường, không phải account root (account có quyền quản trị cao nhất trong hệ thống Linux). Account root sẽ có dấu ( # ) thay vì ( $ ) như hình dưới.

2/ Lệnh echo

Lệnh đầu tiên chúng ta sẽ học là echo. Các bạn ssh vào phòng Learn Linux rồi gõ theo mình nhé (bạn nào chưa biết cách ssh thì có thể xem lại bài hôm trước).

Như bạn đã thấy, lệnh echo dùng để in ra ký tự hay chuỗi ký tự ở phía sau của nó. Bạn nào biết về lập trình thì sẽ thấy nó khá giống với hàm print. Bạn muốn nó in ra ký tự hay chuỗi ký tự gì thì bạn cứ theo cú pháp (syntax) sau:

echo nội-dung-cần-in

Dành cho những bạn đã biết về lập trình, lệnh echo còn có thể được dùng để in ra những giá trị đang được gán cho một biến (variable) cụ thể nào đó trong hệ thống Linux. Ví dụ

Trong Linux, để truy xuất giá trị được gán cho một biến nào đó, bạn phải dùng dấu ‘$’ phía trước tên của biến như trong hình. Linux command line phân biệt được sự khác biệt giữa viết hoa và viết thường (case-sensitive) và vì gần như tất cả tên các biến trong hệ thống Linux đều được để in hoa, nên nếu bạn gọi $home thay vì $HOME và nếu biến $home chưa được gán giá trị nào, nó sẽ không hiện gì cả như bên dưới.

Dấu ngoặc đơn ( ‘ ‘ ) và ngoặc kép ( ” ” ) trong lệnh echo

Mặc dù trên giao diện dòng lệnh bạn không cần phải có dấu ngoặc đơn ( ‘ ‘ ) hoặc ngoặc kép ( ” ” ) khi dùng lệnh echo, như hình dưới đây bạn có thể thấy, có dấu ngoặc hay không có dấu ngoặc cũng không làm thay đổi kết quả được in ra.

Tuy nhiên, mình vẫn khuyên các bạn nên hình thành thói quen sử dụng dấu ngoặc đơn ( ‘ ‘ ) hoặc ngoặc kép khi dùng lệnh echo ( ” ” ), thói quen này sẽ rất có lợi cho bạn khi học Bash scripting. Sự khác biệt giữa dấu ngoặc đơn và ngoặc kép mình sẽ đề cập kỹ hơn trong bài Bash scripting sau này, ở thời điểm hiện tại mình chỉ demo đơn giản thôi nhé. (Bạn nào muốn tìm hiểu trước thì có thể xem tại đây)

Ở trên mình demo một vài trường hợp đặc biệt của lệnh echo, cụ thể để in kết quả có dấu ngoặc đơn hoặc ngoặc kép như ở vd 2 và 3, bạn phải sử dụng hai dấu backslash ( \ ), như trong hình. Để in ra tên của biến HOME bao gồm cả dấu ( $ ), bạn phải dùng dấu ( ‘ ‘ ).

3/ Lệnh man (manual) và –help flag

Hệ thống Linux có vô số câu lệnh khác nhau và mỗi câu lệnh lại có một chức năng riêng. Để giúp người dùng Linux dễ dàng tìm hiểu cách thức sử dụng của một lệnh nào đó, chúng ta có 2 cách phổ biến sau đây đó là dùng lệnh man (viết tắt của manual) hoặc sử dụng flash –help của lệnh cần tìm hiểu.

Lệnh man cho phép bạn tra cứu cách sử dụng của bất kỳ câu lệnh nào mà bạn muốn. Có thể ví lệnh man giống như một cuốn từ điển về dòng lệnh Linux vậy.

Cú pháp của lệnh man như sau:

man lệnh-cần-tra-cứu

Ví dụ khi bạn gõ lệnh man echo, nó sẽ hiện ra kết quả như hình bên dưới. Để cuộn trang, bạn sẽ dùng hai phím điều hướng lên và xuống. Để quay về giao diện dòng lệnh các bạn bấm phím chữ q (viết tắt của quit).

Trong hình trên, các bạn có thể thấy những flag ví dụ như -n, -e, v.v. dùng để điều khiển lệnh echo xuất dữ liệu theo ý muốn của mình. Gần như câu lệnh nào cũng sẽ có những flag để điều khiển kết quả xuất ra như vậy.

Chúng ta sẽ dùng thử flag -n của câu lệnh echo xem sao nhé.

Bạn có thể thấy khi dùng lệnh echo không có flag -n, echo sẽ in ra nội dung tuhocnetworksecurity sau đó xuống dòng. Nhưng khi sử dụng flag -n, echo sẽ in ra nội dung tuhocnetworksecurity nhưng không xuống dòng. Đó chính là lí do bạn thấy dòng shiba1@nootnoot trông có vẻ dính liền với tuhocnetworksecurity.

Với kiến thức này bạn có thể tự trả lời câu hỏi ở task 6 nhé.

Một cách khác để tra cứu cách sử dụng của một lệnh đó là sử dụng flag –help của lệnh đó. Tuy nhiên, khác với lệnh man, không phải lệnh nào cũng có flag –help. Nên để chắc chắc, bạn nên sử dụng lên man thay vì flag –help khi tra cứu nhé.

Cách sử dụng lệnh ls khi tra cứu bằng lệnh man
Cách sử dụng lệnh ls khi dùng flash –help

Một điểm khác nhau giữa man và –help nữa đó là man sẽ hiển thị kết quả trong một trang riêng và bạn phải dùng phím q để thoát ra khỏi trang đó, còn –help thì xuất thẳng kết quả ra luôn giao diện chính như bạn thấy trong hình trên.

4/ Lệnh ls (list/liệt kê)

Lệnh ls được dùng để liệt kê những nội dung đang được chứa bên trong directory đó, bao gồm các file dữ liệu (ví dụ như nhạc, phim, ảnh, v.v.) và những directory con được chứa bên trong directory đó. Ví dụ:

Chúng ta sẽ dùng lệnh man để tra cứu các flag có trong lệnh ls bằng câu lệnh

man ls
Cách sử dụng lệnh ls khi tra cứu bằng lệnh man

Chúng ta sẽ thử dùng lệnh ls với flag -a để liệt kê tất cả nội dung bao gồm cả những directory con đã được ẩn đi bên trong directory mẹ.

Như các bạn thấy, khi dùng ls -a, tất cả các file cũng như directory con ẩn trong directory hiện tại (directory mẹ) đã hiện ra.

Ngoài ra, một flash khác cũng thường được dùng bên cạnh flash -a đó là flash -l.

Flash -l (với l tượng trưng cho từ long trong tiếng Anh) sẽ hiển thị những thông tin liên quan đến file/directory được chứa bên trong directory mẹ ví dụ như (mình sẽ phân tích kết quả đầu tiên nhé):

  • total 48: Số lượng disk block của directory mẹ (Đây là kiến thức về hệ thống máy, các bạn có thể tìm hiểu thêm tại đây)
  • d: Dạng dữ liệu
    • d: directory
    • – : file dữ liệu
    • l: File liên kết (Linked file) (Mình sẽ giải thích ở bài về câu lệnh ln)
  • rwxr-xr-x: Phân quyền của dữ liệu (Cái này mình sẽ giải thích kỹ ở bài về câu lệnh chmod, chown)
    • r: người được phân quyền có quyền đọc dữ liệu
    • w: người được phân quyền có quyền chỉnh, sửa, thay đổi dữ liệu
    • x: người được phân quyền có quyền thực thi/chạy file dữ liệu nếu file dữ liệu là một phần mềm
    • -: Không được phân quyền ở vị trí quyền tương ứng. Nghĩa là các quyền sẽ đi theo thứ tự bắt buộc là rwx, nếu quyền được cấp là -wx, nghĩa là đối tượng được cấp quyền chỉ có quyền chỉnh sửa, thay đổi và chạy file dữ liệu, nhưng không có quyền đọc nội dung file dữ liệu.
  • shiba1 shiba1: Tên người sở hữu file/directory và tên của group của người sở hữu (Cái này mình sẽ giải thích kỹ ở bài về câu lệnh chmod, chown)
  • 4096: Kích thước của dữ liệu được tính bằng byte
  • Feb 18 2020: Ngày dữ liệu được thay đổi gần nhất
  • . : Tên file/directory

Với những kiến thức trên, bạn có thể tự trả lời các câu hỏi task 7.

5/ Lệnh cat

Lệnh cat được dùng để hiển thị nội dung của file dữ liệu. Các bạn có thể xem ví dụ dưới đây.

Trong hình trên, mình đã dùng lệnh echo để tạo một file có tên là sample.txt có nội dung tuhocnetworksecurity. Sau đó, mình dùng lệnh cat để xem nội dung của file sample.txt.

Với câu hỏi của task 8, mình sẽ tăng độ khó lên một tí bằng cách để các bạn tự tìm câu trả lời bằng lệnh man nhé.

6/ Lệnh touch

Touch là lệnh được dùng để tạo một file dữ liệu.

Ví dụ như trong hình trên, mình đã dùng lệnh touch để tạo file tuhocnetworksecurity.txt. Sau đó mình dùng lệnh echo để thêm nội dung vào trong file và cuối cùng dùng lệnh cat để hiển thị nội dung file.

Đương nhiên đây không phải là cách tối ưu để tạo và chỉnh sửa nội dung file; mình sẽ giới thiệu với các bạn một cách tối ưu hơn khi chúng ta học về các chương trình text editor ví dụ như vim hoặc nano.

7/ Cách chạy binary file (file thực thi/file cài đặt phần mềm/file chạy phần mềm) và relative path

Trong quá trình sử dụng hệ điều hành Linux, sẽ có những lúc bạn muốn chạy một file cài đặt phần mềm download từ trên mạng, hoặc sau khi xâm nhập và tải file mã độc thành công lên máy nạn nhân, bạn muốn chạy file mã độc để có thể kiểm soát hoàn toàn máy của nạn nhân, để làm được những điều kể trên, bạn cần phải biết cách để chạy một binary file hay còn gọi là file thực thi, file cài đặt phần mềm hoặc file chạy phần mềm.

Để chạy được binary file, các bạn sẽ cần phải biết được chính xác binary file đang nằm ở directory nào. Ví dụ như file nằm ở directory shiba1 đi chẳng hạn, thay vì gõ nguyên địa chỉ hệ thống của directory shiba1 là /home/shiba1 (directory shiba1 là directory con của directory home) chúng ta có thể sử dụng relative path để làm điều đó.

Các bạn còn nhớ dấu ( ~ ) mình nói lúc đầu để chỉ home directory của account đang được sử dụng không? đó là một ví dụ của relative path đấy.

Ngoài dấu ( ~ ) ra chúng ta còn có dấu ( . ) để ý chỉ directory hiện tại của bạn và dấu ( .. ) để chỉ directory mẹ của directory bạn đang ở.

Mình sẽ cho bạn một ví dụ như sau:

Chúng ta đang ở directory có địa chỉ (path) như sau /home/vincent/tuhocnetworksecurity/hoclinux.

Theo đó:

  • Directory hoclinux là con của directory tuhocnetworksecurity
  • Directory tuhocnetworksecurity là con của directory vincent
  • Directory vincent là con của directory home

Như vậy:

  • . : Chính là directory bạn đang ở cũng chính là directory hoclinux
  • .. : Là directory mẹ của directory bạn đang ở, là directory tuhocnetworksecurity
  • ~ : Là home directory của account vincent có địa chỉ là /home/vincent

Các bạn có thể theo dõi hình bên trên để hiểu rõ hơn.

Trong ví dụ trên, mình đã dùng lệnh pwd (print working directory) để hiển thị địa chỉ directory mà mình đang ở. Sau đó, mình dùng lệnh cd . để đưa mình đến thư mục có relative path là ( . ).

Tuy nhiên vì relative path ( . ) mang ý chỉ directory hiện tại mà mình đang ở, nên các bạn sẽ thấy lệnh pwd vẫn cho kết quả tương tự như ban đầu.

Khi mình dùng lệnh cd .. và check lại địa chỉ bằng lệnh pwd, bạn sẽ thấy địa chỉ đã thay đổi và hiện tại chúng ta đang ở directory mẹ của directory hoclinux.

Và cuối cùng khi mình dùng lệnh cd ~ , mình đã được dẫn về lại home directory của account vincent.

Các bạn lưu ý là hệ thống Linux thường sẽ có những directory được đặt tên là ( . ) hay ( .. ). Ở đây, ( . ) sẽ được dùng để chỉ directory hiện tại và ( .. ) được dùng để chỉ directory mẹ của directory hiện tại. Đây là một ví dụ của relative path. Tuy nhiên, sẽ có những trường hợp tên của directory được đặt bắt đầu với ( . ) ví dụ như .ssh, .config, v.v. mục đích là để ẩn directory đó đi.

Một đặc điểm của directory bắt đầu với ( . ) bao gồm cả ( . ) và ( .. ), .sh, .config, v.v. đó là file sẽ mặc định được ẩn đi khi bạn dùng lệnh ls thông thường. Khi bạn dùng lệnh ls – a, những directory này (, . , .. , .ssh, .config, v.v.) mới hiện ra.

Những directory như .ssh và .config có tính chất giống như một directory bình thường chỉ khác ở chỗ đây là những directory mặc định ẩn và những directory này không liên quan gì đến relative path đâu nhé.

Khi chạy binary file, nếu (giả dụ file thực thi có tên là hacking):

  • File thực thi nằm ở ngay tại directory mà bạn đang ở, bạn sẽ chạy binary file bằng cú pháp ./hacking
  • File thực thi nằm ở directory mẹ của directory bạn đang ở, bạn sẽ chạy binary file bằng cú pháp ../hacking
  • File thực thi nằm ở home directory của account mà bạn đang dùng, bạn sẽ chạy binary file bằng cú pháp ~/hacking

Với những gì mình đã hướng dẫn, các bạn thử trả lời những câu hỏi trong task 10 xem sao nhé.

8/ Thử thách 1 (Task 11)

Với những kiến thức mà mình đã trình bày hôm nay, các bạn hãy thử tự mình vượt qua thử thách bên dưới và tìm mật khẩu của account shiba2 xem sao nhé.

Đáp án sẽ được mình công bố ở bài sau.

Cám ơn các bạn và hẹn gặp lại ở bài sau,

Vincent Nguyễn

Source:

http://linux.math.tifr.res.in/linux-manual/files.htmlhttps://askubuntu.com/questions/506510/what-is-the-difference-between-terminal-console-shell-and-command-line#:~:text=Shell%20is%20a%20program%20which,software%20%2C%20like%20Gnome%2DTerminal%20.https://www.howtogeek.com/68563/htg-explains-what-are-the-differences-between-linux-shells/

Share this:

  • Tweet
Like Loading...

Related

Từ khóa » Câu Lệnh Ls Trong Linux