Các câu lệnh Linux cơ bản – Làm quen với dòng lệnh

 

Làm việc với Linux terminal là một kỹ năng quan trong mà bất kỳ lập trình viên nào cũng cần có vì chúng ta phải làm việc rất nhiều trên server sau này. Chính vì thế, việc ghi nhớ các câu lệnh cơ bản là rất cần thiết. Chúng ta hãy cùng điểm qua các câu lệnh cần phải biết khi thao tác trên terminal nhé.

Một số câu lệnh cơ bản

# câu lệnh in ra ngày tháng năm hiện tại
date
# Output
Thứ ba, 19 Tháng ba năm 2019 13:26:09 +07

# câu lệnh in ra lịch của tháng hiện tại
cal
# Output
   Tháng ba 2019      
CN T2 T3 T4 T5 T6 T7  
                1  2  
 3  4  5  6  7  8  9  
10 11 12 13 14 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28 29 30  
31                    

# in ra lịch của tháng và năm cụ thể
cal 2 2019
# Output
   Tháng hai 2019     
CN T2 T3 T4 T5 T6 T7  
                1  2  
 3  4  5  6  7  8  9  
10 11 12 13 14 15 16  
17 18 19 20 21 22 23  
24 25 26 27 28        

# kiểm tra dung lượng trống còn lại trên ổ đĩa, option -h sẽ in dung lượng dưới dạng số và đơn vị
df -h
# Output
Filesystem      Size  Used Avail Use% Mounted on
udev            3,8G     0  3,8G   0% /dev
tmpfs           784M  9,4M  775M   2% /run
/dev/sda1       222G   67G  144G  32% /
...
...
tmpfs           784M  664K  784M   1% /run/user/33558631

# kiểm tra bộ nhớ trống, option -h cũng tương tự
free -h
# Output
              total        used        free      shared  buff/cache   available
Mem:           7,7G        5,0G        181M        563M        2,4G        1,7G
Swap:          7,9G        1,5G        6,4G

Lệnh điều hướng – Navigation

# hiển thị directory hiện tại
pwd
# Output
/home/nguyen.viet.hung

# liệt kê content của một directory
ls
Desktop  Documents  Downloads  Music  Pictures

# chuyển vị trí directory hiện tại có thể sử dụng đường dẫn tuyệt đối, tương đối
cd [absolute_path|relative_path]

# chuyển đến vị trí directory ngay trước vị trí hiện tại `n` lần (chỉ để - sẽ là vị trí ngay trước đó)
cd -[n]
# Example
➜  ~ cd /etc/nginx
➜  nginx pwd
/etc/nginx
➜  nginx cd -         
~
➜  ~ pwd
/home/nguyen.viet.hung

# Chuyển đến home directory của một user bất kỳ
cd ~[user_name]

Các câu lệnh cơ bản với file và thư mục – Files & directories commands

ls là một câu lệnh hay được sử dụng trong mọi hoàn cảnh, kết hợp chúng với một vài option sẽ cho chúng ta get insight về cấu trúc của một cây chỉ mục (mặc dù mình thích làm điều này với tree hơn, tuy nhiên nó lại không phải là một builtin ở trong shell)

Ở phần này hãy cùng khám phá thêm một vài option để sử dụng cùng với ls và một số câu lệnh khác để khám phá một hệ thống thư mục là chúng ta chưa động tới bao giờ nhé

# ls có thể liệt kê cho nhiều thư mục cùng một lúc. Ví dụ:
➜  ~ ls ~ /etc/nginx/sites-available 
/etc/nginx/sites-available:
default

/home/nguyen.viet.hung:
anaconda3  Desktop  Documents  Downloads

# Chúng ta cũng có thể thay đổi format của output để nhìn thấy nhiều thông tin hơn:
total 92
drwxr-xr-x 3 hungnv 4096 Th02 11 16:45 Desktop
drwxr-xr-x 2 hungnv 4096 Th01 16 17:27 Documents
drwxr-xr-x 3 hungnv 4096 Th03 14 09:08 Downloads
drwxr-xr-x 2 hungnv 4096 Th07 2 2018 Music
drwxr-xr-x 4 hungnv 20480 Th03 19 11:22 Pictures
drwxr-xr-x 2 hungnv 4096 Th07 2 2018 Public
drwxr-xr-x 2 hungnv 4096 Th07 2 2018 Templates
drwxr-xr-x 2 hungnv 4096 Th03 19 10:43 Videos

Một vài option khác có thể thử với ls:

OptionsLong optionsMô tả
-a--allliệt kê tất cả kể cả hidden file
-A--almost-allliệt kê tất cả trừ ...
-d--directorykhi dùng ls với một folder thì nó sẽ liệt kê content của folder đó, sử dụng option này kết hợp với -l sẽ chỉ đưa ra thông tin về bản thân directory đó
-F--classifynếu content là directory thì sẽ được thêm / để biết nó không phải là file
-h--human-readablekhả dụng với khá nhiều câu lệnh, hiển thị file size ở dạng người đọc được chứ không phải dạng bytes
-l Liệt kê chi tiết
-S Sắp xếp theo file size
-t Sắp xếp theo thời gian chỉnh sửa cuối cùng

Ý nghĩa của dạng long format

 

Bảng sau liệt kê example output của một câu lệnh ls -l và giải thích từng cột và ý nghĩa của output

FieldÝ nghĩa
-rw-r--r--Quyền truy cập của file. Ký tự đầu tiên quy định loại file. - nghĩa là file thường. d nghĩa là directory. l nghĩa là link. Các cụm 3 ký tự tiếp sau lần lượt là quyền truy cập của file owner, group owner và những người còn lại
2số hard link trỏ đến file này
\hungnvfile owner
\domain^usersgroup owner – user group của file owner
4096file size dưới dạng bytes
Th03 19 10:43Ngày thay đổi file cuối cùng
Videostên của thư mục hoặc file

Xác định định dạng của file

Đối với những ai chưa biết, hay thậm chí đã biết rồi, thì chúng ta cũng nên nhắc lại rằng trong Linux thì tất cả đều được coi như là file, và file name thường không phản ánh định dạng chứa trong file, vì vậy hay có trường hợp tên file một kiểu, mà định dạng trong file một kiểu gây nhầm lẫn. Ta có thể xác định định dạng của file bằng câu lệnh:

file [file_name]
# Example
file name app/controllers/application_controller.rb 
app/controllers/application_controller.rb: Ruby module source, ASCII text

Ngoài ra có một câu lệnh view content của file cũng rất hay sử dụng đối với text file đó là less (chúng ta sẽ tìm hiểu về một text editor hay hơn và tuyệt hơn đó là vim – thực ra không phải là tìm hiểu mà là vọc thêm vì chắc ai cũng biết đến nó rồi)

Symbolic links là gì?

Khi liệt kê content của folder với ls ta có thể bắt gặp một dòng

lrwxrwxrwx 1 root root 11 2007-08-11 07:34 libc.so.6 -> libc-2.6.so

Ký tự đầu tiên l chỉ ra đây là một symbolic links. Vậy thế nào là một link và thế nào là một symbolic links. Ở đây tôi sẽ chỉ giải thích ngắn gọn, vì series hay bài viết này tôi chỉ định làm như một cheat sheet.

Về cách hoạt động thì link như thể là một shortcut trên window vậy, khi bạn tạo ra một link tới một file nào đó, link đó có thể có một cái tên khác nhưng khi chỉnh sửa nội dung của link thì nội dung của file cũng tự động chỉnh sửa theo.

Có hai loại link: symbolic link và hard link

Hard link:

  • Chỉ tạo được trên file, không tạo được trên directory
  • Không thể tạo được hard link trên một file nằm khác partition với partition đặt link đó.
  • Không thể phân biệt hard link với file khi dùng ls
  • Khi xóa hard link thì link bị xóa, nhưng content của link thì vẫn được giữ nguyên dẫn đến không gian nhớ không được xác định

Vì thế các hệ thống mới bây giờ thường ít khi sử dụng hard link

Symbolic link:

  • Tạo được link trên cả file và directory
  • Không giới hạn việc đặt link ở đâu trên ổ đĩa
  • Symlink đơn giản chỉ là con trỏ tới file thực.
  • Khi xóa symlink thì toàn bộ link lẫn content của link đều được xóa.
  • Có thể phân biệt được link dễ dàng nhờ ký tự l khi dùng ls ở long format.

Các lệnh thao tác trên file và directory

Wildcards

Như những ai đã quen với Linux thì, hệ thống command cung cấp một tập các ký tự đặc biệt để định nghĩa filenames group. Những ký tự đặc biệt này được gọi là wildcards. Sử dụng chúng có thể select những filename dựa trên một tập các pattern. Bảng sau sẽ định nghĩa các wildcards trong Linux:

WildcardÝ nghĩa
*match bất kỳ ký tự nào
?match 1 ký tự bất kỳ
[characters]match ký tự nào có trong set
[!characters]không match ký tự nào có trong set
[[:class:]]match ký tự định nghĩa bởi class

Bảng dưới đây định nghĩa các class thường được dùng trong wild card cuối cùng

PatternÝ nghĩa
:alnum:Ký tự chữ và chữ số
:alpha:Ký tự chữ cái
:digit:Ký tự chữ số
:lower:Bất kỳ chữ cái thường nào
:upper:Bất kỳ chữ cái hoa nào

Các câu lệnh

Tạo directories

# Tạo một hoặc nhiều directory
mkdir [path] [path_1] [path_2] [path_3] ...
# Tạo một directory và tạo parrent directory nếu không tồn tại
mkdir -p [path]

Copy files

# copy một file thành một file khác
cp {file_1} {file_2}
# copy một hay nhiều file vào một directory
cp {file_1}..{file_n} directory/

Các options:

OptionsÝ nghĩa
-a, --archiveCopy file và tất cả các thuộc tính, permission, ownership của nó sang file mới
-i, --interativehỏi người dùng có muốn thực hiện thao tác không trước khi copy, thông thường nếu tên file giống nhau, hệ thống sẽ tự ghi đè file cũ mà không hỏi han gì
-r, --recursiveKhi copy directory nó sẽ copy cả content của dir đó, required khi copy directory
-u, --updateChỉ copy những file chưa tồn tại hoặc có thời gian chỉnh sửa cuối mới hơn
-v, --verboseHiển thị thông tin khi quá trình copy diễn ra

Move và rename files

# rename file
mv file1 file2
# mv một hoặc nhiều item và một directory khác
mv item1 item2 directory/

Các options tương tự như cp chỉ không có option -a.

Remove

rm item

Các option giống với option của mv và thêm một option: -f, --force (ignore file không tồn tại và file đang mở mà vẫn thực hiện xóa hết file).

Tạo link

# Tạo hard link
ln file link
# Tạo symbolic link
ln -s item link

Mình thường tạo alias cho câu lệnh rm thành rm -i vì đôi khi chạy sai chỉ một câu nhỏ trên server thôi cũng khiến chúng ta trả giá đắt. VD như rm * .html chẳng hạn.

Như vậy là chúng ta đã làm quen được một vài lệnh căn bản thường dùng trong terminal. Đây là những lệnh dễ dùng và thường gặp nhất. Chủ đề tiếp theo của bài viết là về cách tìm hiểu về cách dùng của câu lệnh mà không phải tìm kiếm trên Google, các bạn hãy cùng đón đọc nhé.