Linux Fundamentals: Bài 2
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
, find
và cd
.
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ệnh | Viết tắt | Mục đích |
touch | touch | Tạo file |
mkdir | make directory | Tạo thư mục |
cp | copy | Sao chép file hoặc thư mục |
mv | move | Di chuyển file hoặc thư mục |
rm | remove | Xóa file hoặc thư mục |
file | file | Xá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
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.
Subscribe to my newsletter
Read articles from CyberDuo directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by