Các câu lệnh Linux

Dạo gần đây mình có ngồi đọc lại quyển The Linux Command Line: ? Complete Introduction – William E. Shotts Jr. để học lại một số câu lệnh linux, nhắm tới một tương lai ít sờ vào chuột hơn, tuy nhiên nhận ra là việc mình không thực hành & không ghi lại thì có thể sẽ khiến mình dễ quên các câu lệnh này, các bàn phím tips này. Nên nhân đây mình quyết định làm một series đo đạc lại hết toàn bộ các câu lệnh mình đã đọc được trong quyển trên thành một series & hầu hết là một cheat sheet cho mình sau này. Chú ý là mình chỉ đo đạc lại các câu lệnh, mình sẽ không giải thích rõ ràng và cụ thể như ở trong quyển sách (chủ đạo là cho những người mới tiếp cận), nên nếu bạn nào mong muốn hiểu kỹ hơn thì có thể xem qua ở backlinks mình đã để ở trên

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

# câu lệnh in ra ngày tháng năm hiện giờ
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 giờ
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 & năm rõ ràng và 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 soát dung tích trống sót lại trên ổ đĩa, option -h sẽ in dung tích dưới dạng số & nhà cung cấp
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 soát bộ nhớ lưu trữ trống, option -h cũng như với
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

Navigation

# hiển thị directory hiện giờ
pwd
# Output
/home/nguyen.viet.hung

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

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

# chuyển đến địa điểm directory ngay trước địa điểm hiện giờ `ռ` lần (chỉ để - sẽ là địa điểm ngay trước đây)
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ăn bản với file

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

Xem Thêm  Top 10 trang web đăng tin cho thuê nhà trọ - thuephongtro.com

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

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

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

# Tất cả chúng ta cũng có thể biến đổi format của output để chứng kiến nhiều thông tin hơn:
total 92
drwxr-xr-x  3 FRAMGIAnguyen.viet.hung FRAMGIAdomain^users  4096 Th02 11 16:45 Desktop
drwxr-xr-x  2 FRAMGIAnguyen.viet.hung FRAMGIAdomain^users  4096 Th01 16 17:27 Documents
drwxr-xr-x  3 FRAMGIAnguyen.viet.hung FRAMGIAdomain^users  4096 Th03 14 09:08 Downloads
drwxr-xr-x  2 FRAMGIAnguyen.viet.hung FRAMGIAdomain^users  4096 Th07  2  2018 Music
drwxr-xr-x  4 FRAMGIAnguyen.viet.hung FRAMGIAdomain^users 20480 Th03 19 11:22 Pictures
drwxr-xr-x  2 FRAMGIAnguyen.viet.hung FRAMGIAdomain^users  4096 Th07  2  2018 Public
drwxr-xr-x  2 FRAMGIAnguyen.viet.hung FRAMGIAdomain^users  4096 Th07  2  2018 Templates
drwxr-xr-x  2 FRAMGIAnguyen.viet.hung FRAMGIAdomain^users  4096 Th03 19 10:43 Videos

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

Options
Long options
Miêu tả

-a
--all
liệt kê toàn bộ kể cả hidden file

-?
--almost-all
liệt kê toàn bộ trừ . & ..
-d
--directory
khi 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 phù hợp với -l sẽ chỉ đặt ra thông tin về bản thân directory đó

-₣
--classify
nếu content là directory thì sẽ được thêm / để biết nó không phải là file

-h
--human-readable
khả dụng với hơi nhiều câu lệnh, hiển thị file size ở dạng người xem được chứ không phải dạng bytes

-l

Liệt kê cụ thể

Xếp đặt theo file size

-t

Xếp đặt theo thời gian căn chỉnh cuối cùng

Hiểu cụ thể về dạng long format

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

Field
Ý nghĩa

-rw-r--r--
Quyền truy cập của file. Ký tự trước tiên quy định loại file. - nghĩa là file thường. {d} nghĩa là directory. ɭ nghĩa là backlinks. 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 & những người sót lại

2
số hard backlinks trỏ đến file này

FRAMGIAnguyen.viet.hung
file owner

FRAMGIAdomain^users
group owner – user group của file owner

4096
file size dưới dạng bytes

Th03 19 10:43
Ngày biến đổi file cuối cùng

Videos
tên của thư mục hoặc file

Xem Thêm  Java - Các kiểu biến - các biến trong java là gì

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

So với những ai chưa biết, hay thậm chí đã biết rồi, thì tất cả chúng ta cũng cần nhắc nhở lại rằng trong Linux thì toàn bộ đều được xem như là file, & file name thường không phản ánh định dạng chứa trong file, chính vì như thế 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 lầm lẫn. Ta có thân thể đị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

không dừng lại ở đó có một câu lệnh lượt xem content của file cũng khá hay sử dụng so với text file này là less (tất cả chúng ta sẽ khám phá về một text editor hay hơn & tuyệt hơn này là vim – thực ra không phải là khám phá mà là vọc thêm vì chắc ai cũng biết tới 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ự trước tiên ɭ nêu ra đây là một symbolic links. Vậy thế nào là một backlinks & thế nào là một symbolic links. Ở giai đoạn này tôi sẽ chỉ giải thích ngắn gọn, vì series hay nội dung này tôi chỉ định làm như một cheat sheet.

Về cách hoạt động thì backlinks như thể là một shortcut trên window vậy, khi bạn tạo thành một backlinks tới một file nào đó, backlinks đó có thể có một tên gọi khác nhưng khi căn chỉnh bài viết của backlinks thì bài viết của file cũng auto căn chỉnh theo.

Có hai loại backlinks: symbolic backlinks & hard backlinks

Hard backlinks:

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

Chính vì vậy các hệ thống mới hiện tại thường hiếm khi sử dụng hard backlinks

Symbolic backlinks:

  • Tạo được backlinks trên cả file & directory
  • Không hạn chế việc đặt backlinks ở đâu trên ổ đĩa
  • Symlink dễ dàng chỉ là con trỏ tới file thực.
  • Khi xóa symlink thì toàn thể backlinks lẫn content của backlinks đều được xóa.
  • Có thể phân biệt được backlinks đơn giản nhờ ký tự ɭ khi dùng ls ở long format.
Xem Thêm  Ưu điểm và cách làm việc của C ++ endl với các ví dụ - cuối dòng c ++

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

Wildcards

Như những ai đã quen với Linux thì, hệ thống command phân phối một tập các ký tự đặc biệt để khái niệm 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 vào một tập các pattern. Bảng sau sẽ khái niệm 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ự khái niệm bởi class

Bảng dưới đây khái niệm các class thường được dùng trong wild card cuối cùng

Pattern
Ý nghĩa

:alnum:
Ký tự chữ & 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 & tạo parrent directory còn nếu như không tồn tại
mkdir -p [path]
Sao chép files
# sao chép một file thành một file khác
cp {file_1} {file_2}
# sao chép một hay nhiều file vào một directory
cp {file_1}..{file_n} directory/

Các options:

Options
Ý nghĩa

-a, --archive
Sao chép file & toàn bộ các tính chất, permission, ownership của nó sang file mới

-i, --interative
hỏi người dùng có mong muốn thực hiện thao tác không trước khi sao chép, thông thường nếu tên file giống nhau, hệ thống sẽ tự ghi đè file cũ mà không thăm hỏi gì

-r, --recursive
Khi sao chép directory nó sẽ sao chép cả content của dir đó, required khi sao chép directory

-u, --update
Chỉ sao chép những file chưa tồn tại hoặc có thời gian căn chỉnh cuối mới hơn

-v, --verbose
Hiển thị thông tin khi tiến trình sao chép diễn ra

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

Các options cũng giống như cp chỉ không có option -a.

Remove
rm item

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

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

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

Viết một bình luận