Linux Fundamentals: Bài 2

Linux Fundamentals: Bài 2

·

9 min read

Chào mừng các bạn đến với bài 2 trong series Linux Fundamentals. Trong bài này, chúng ta sẽ áp dụng những kiến trức của bài trước, nên là mình khuyên bạn nên đọc bài 1 trước khi đọc tiếp bài 2 này nhé.

Giới thiệu Flag và Switch

Hầu hết các lệnh trên Linux đều cho phép sử dụng đối số (arguments). Các đối số này được xác định bằng dấu gạch nối và một từ khóa nhất định được gọi là flag hoặc switch.

Khi sử dụng một lệnh mà không có flag, thì lệnh đó sẽ thực thi chức năng mặc định của nó. Chẳng hạn lệnh ls sẽ liệt kê các file và folder trong thư mục hiện tại. Tuy nhiên, các file ẩn sẽ không được hiển thị. Chúng ta có thể sử dụng flag hoặc switch để mở rộng chức năng của lệnh.

Ví dụ: khi sử dụng lệnh ls, các bạn thấy chỉ có một thư mục có tên "folder1".

cyberduo@Ubuntu:~$ ls
folder1
cyberduo@Ubuntu:~$

Tuy nhiên, sau khi mình thêm flag -a (viết tắt của --all), chúng ta sẽ thấy thêm các file và thư mục khác như ".hiddenfolder". Các file và thư mục có dấu chấm "." ở đầu là các file ẩn.

cyberduo@Ubuntu:~$ ls -a 
.hiddenfolder folder1
cyberduo@Ubuntu:~$

Các lệnh đều sẽ có flag --help, mô tả ngắn gọn chức năng câu lệnh, liệt kê các flag có thể dùng và cách sử dụng của chúng.

cyberduo@Ubuntu:~$ ls --help
Usage: ls [OPTION]... [FILE]...
List information about the FILEs (the current directory by default).
Sort entries alphabetically if none of -cftuvSUX nor --sort is specified.

Mandatory arguments to long options are mandatory for short options too.
  -a, --all                  do not ignore entries starting with .
  -A, --almost-all           do not list implied . and ..
      --author               with -l, print the author of each file
  -b, --escape               print C-style escapes for nongraphic characters
      --block-size=SIZE      with -l, scale sizes by SIZE when printing them;
                               e.g., '--block-size=M'; see SIZE format below
  -B, --ignore-backups       do not list implied entries ending with ~
  -c                         with -lt: sort by, and show, ctime (time of last
                               modification of file status information);
                               with -l: show ctime and sort by name;
                               otherwise: sort by ctime, newest first
  -C                         list entries by columns
      --color[=WHEN]         colorize the output; WHEN can be 'always' (default
                               if omitted), 'auto', or 'never'; more info below
  -d, --directory            list directories themselves, not their contents
  -D, --dired                generate output designed for Emacs' dired mode
  -f                         do not sort, enable -aU, disable -ls --color
  -F, --classify             append indicator (one of */=>@|) to entries
      --file-type            likewise, except do not append '*'
      --format=WORD          across -x, commas -m, horizontal -x, long -l,
                               single-column -1, verbose -l, vertical -C
      --full-time            like -l --time-style=full-iso
  -g                         like -l, but do not list owner
      --group-directories-first

Flag này thực ra là lệnh man (viết tắt của manual), chứa các hướng dẫn của lệnh và ứng dụng trên Linux.

Lệnh man

Bạn có thể sử dụng lệnh man cộng với lệnh nào đó để xem hướng dẫn cách sử dụng lệnh đó. Ví dụ, để xem hướng dẫn của lệnh ls:

cyberduo@Ubuntu:~$ man ls
LS(1)                                               User Commands                                               LS(1)

NAME
       ls - list directory contents

SYNOPSIS
       ls [OPTION]... [FILE]...

DESCRIPTION
       List  information  about the FILEs (the current directory by default).  Sort entries alphabetically if none of
       -cftuvSUX nor --sort is specified.

       Mandatory arguments to long options are mandatory for short options too.

       -a, --all
              do not ignore entries starting with .

       -A, --almost-all
              do not list implied . and ..

       --author
              with -l, print the author of each file

       -b, --escape
              print C-style escapes for nongraphic characters

       --block-size=SIZE
              with -l, scale sizes by SIZE when printing them; e.g., '--block-size=M'; see SIZE format below

 Manual page ls(1) line 1 (press h for help or q to quit)

Tương tác với hệ thống file

Trong bài trước, mình đã giới thiệu một số lệnh cơ bản nhất khi tương tác với hệ thống file trên Linux là ls , findcd.

Chúng ta sẽ tìm hiểu thêm một số lệnh khác để tương tác với hệ thống file như:

  • Tạo file và thư mục

  • Di chuyển file và thư mục

  • Xóa file và thư mục

LệnhViết tắtMục đích
touchtouchTạo file
mkdirmake directoryTạo thư mục
cpcopySao chép file hoặc thư mục
mvmoveDi chuyển file hoặc thư mục
rmremoveXóa file hoặc thư mục
filefileXác định loại file

Tạo file và thư mục

Bạn có thể sử dụng lệnh touch kèm theo tên file mà bạn muốn tạo. Ví dụ: lệnh touch note sẽ tạo file note. Lệnh này chỉ đơn giản là tạo ra một file trống. Bạn cần sử dụng các lệnh như echo hoặc các trình soạn thảo văn bản như nano để thêm nội dung vào file này.

cyberduo@Ubuntu:~$ touch note
cyberduo@Ubuntu:~$ ls           
folder1 note

Cú pháp tạo folder cũng tương tự, nhưng chúng ta sẽ sử dụng lệnh mkdir. Ví dụ: tạo thư mục "mydirectory" bằng lệnh mkdir mydirectory.

cyberduo@Ubuntu:~$ mkdir mydirectory
cyberduo@Ubuntu:~$ ls           
folder1 mydirectory note

Xoá file và thư mục

Bạn có thể xoá file bằng cách sử dụng lệnh rm. Flag -R là flag xoá đệ quy, tức là nó sẽ xoá hết tất cả file và folder trong thư mục bạn muốn xoá.

cyberduo@Ubuntu:~$ rm note
cyberduo@Ubuntu:~$ ls           
folder1 mydirectory
cyberduo@Ubuntu:~$ rm -R mydirectory
cyberduo@Ubuntu:~$ ls           
folder1

Lưu ý: Lệnh này khá nguy hiểm nên là hãy kiểm tra lại lệnh thật kỹ trước khi chạy lệnh nhé.

Sao chép, di chuyển file và thư mục

Lệnh cp dùng để sao chép file hoặc thư mục, lệnh này có hai đối số:

1. Tên của file cần sao chép

2. Tên của file mới được sao chép từ file cũ

Lệnh cp sao chép toàn bộ nội dung của file hiện tại vào file mới. Ví dụ, lệnh sao chép "note" thành "note2".

cyberduo@Ubuntu:~$ cp note note2
cyberduo@Ubuntu:~$ ls           
folder1 note note2

Di chuyển file cũng cần 2 đối số, giống như lệnh cp. Lệnh mv không chỉ có thể được sử dụng để di chuyển file vào thư mục mới, mà bạn cũng có thể đổi tên file hoặc thư mục. Ví dụ: mình đổi tên file "note2" thành "note3", "note3" bây giờ sẽ có nội dung của "note2".

cyberduo@Ubuntu:~$ mv note2 note3
cyberduo@Ubuntu:~$ ls           
folder1 note note3

Xem loại file

Lệnh file chỉ có một đối số là tên file cần xác định loại. Ví dụ: mình sử dụng lệnh file để xem loại file của file "note".

cyberduo@Ubuntu:~$ file note
note: ASCII text

Quyền

Các quyền cơ bản trên Linux

Quyền sẽ hạn chế một số người dùng nhất định không thể truy cập các file hoặc thư mục. Bạn có thể xem quyền của file hoặc thư mục bằng cách sử dụng lệnh ls kèm theo flag -l . Kết quả của lệnh này sẽ có 10 cột, nhưng chúng ta chỉ cần quan tâm đến 3 cột đầu tiên.

cyberduo@Ubuntu:~$ ls -lh
-rw-r--r-- 1 cmnatic cmnatic 0 Feb 19 10:37 file1
-rw-r--r-- 8 cmnatic cmnatic 0 Feb 19 10:37 file2

3 cột đầu tiên rất quan trọng trong việc xác định các đặc điểm nhất định của file hoặc thư mục và biết được chúng ta có quyền truy cập vào file hoặc thư mục đó hay không. Ngoài ra nó còn xác định cả hành động nào được phép và người dùng hoặc nhóm nào có khả năng thực hiện các hành động đó, ví dụ như:

  • Read (đọc)

  • Write (ghi)

  • Execute (thực thi)

Sự khác biệt giữa người dùng và nhóm

Một trong những điều mình thích nhất trên Linux là việc phân quyền rất chi tiết, người dùng sở hữu file và đã có một số quyền nhất định, thì một nhóm người dùng khác cũng có thể có các quyền khác đối với file đó mà không ảnh hưởng đến chủ sở hữu file.

Ví dụ trong thực tế, người dùng quản trị server phải có quyền đọc và ghi file. Tuy nhiên, các công ty web hosting thì cũng muốn khách hàng có quyền upload file lên server, nhưng lại không cần cấp quyền quản trị server cho khách hàng đó, vì nó sẽ ảnh hưởng đến tính bảo mật của các khách hàng khác.

Chuyển đổi giữa các người dùng khác nhau

Bạn có thể dễ dàng chuyển đổi giữa các người dùng khác nhau trên Linux bằng lệnh su (super user). Để chuyển đổi sang người dùng khác thì bạn phải biết tên người dùng và mật khẩu của họ.

Lệnh sudo có 1 flag khá hay là -l, flag này sẽ bắt đầu một seasion shell giống như là người dùng đăng nhập vào hệ thống. Từ đó chúng ta có thể truy cập vào nhiều thứ hơn như biến môi trường.

cyberduo@Ubuntu:~$ su user2
Password:
cyberduo@Ubuntu:/home/cyberduo$

Ví dụ, khi sử dụng lệnh su để chuyển sang "user2", thư mục hiện tại là thư mục chính của người dùng đó.

cyberduo@Ubuntu:~$ su -l user2
Password:
user2@Ubuntu:~$ pwd
user2@:/home/user2$

Cấu trúc thư mục

/etc

Thư mục này là một trong những thư mục root quan trọng nhất trên hệ thống Linux. Thư mục etc (viết tắt của etcetera) là nơi để lưu trữ các file hệ thống được sử dụng bởi hệ điều hành.

Ví dụ: file sudoers bên dưới chứa danh sách người dùng và nhóm có quyền chạy lệnh sudo hoặc các lệnh với tư cách là người dùng root.

Hai file "passwd" và "shadow" cho chúng ta thấy hệ thống lưu trữ mật khẩu của người dùng bằng thuật toán mã hóa sha512.

cyberduo@Ubuntu:/etc$ ls
shadow passwd sudoers sudoers.d

/var

Thư mục "/var", viết tắt của variable, lưu trữ dữ liệu được truy cập thường xuyên hoặc ghi bởi các dịch vụ hoặc ứng dụng chạy trên hệ thống. Ví dụ: các file nhật ký từ các dịch vụ và ứng dụng đang chạy được ghi ở đây (/var/log).

cyberduo@Ubuntu:/var$ ls
backups log opt tmp

/root

Thư mục /root là thư mục chính của người dùng "root" và là thư mục cấp cao nhất trong hệ thống Linux.

cyberduo@Ubuntu:~# ls
myfile myfolder passwords.xlsx

/tmp

Thư mục /tmp, tắt của "temporary", được sử dụng để lưu trữ dữ liệu chỉ cần truy cập một hoặc hai lần. Tương tự như bộ nhớ RAM trên máy tính, một khi máy tính được khởi động lại, nội dung của thư mục này sẽ bị xóa.

Bất kỳ người dùng nào cũng quyền ghi ở thư mục này theo mặc định.

root@linux2:/tmp# ls
todelete trash.txt rubbish.bin

Kết luận

Bài này khá nặng lý thuyết nên mình sẽ tóm tắt lại nội dung cho các bạn:

  • Sử dụng lệnh nâng cao hơn bằng flag, switch và tìm hiểu cách xem hướng dẫn của lệnh bằng lệnh man.

  • Một số lệnh khác mà bạn sẽ thường xuyên sử dụng để tương tác với hệ thống file và nội dung của file.

  • Giới thiệu ngắn gọn về quyền truy cập file và chuyển đổi giữa các người dùng.

  • Tóm tắt về các cấu trúc thư mục trên Linux.