Bash shell – Day2- Navigating directories & Listing Files

Tiếp tục chuỗi bài viết trong 30 ngày tìm hiểu Bash Shell. Nội dung của ngày thứ 2 bao gồm:

  1. Navigating directories – Điều hướng thư mục
  2. Listing Files – Liệt kê file và thư mục

Navigating directories – Điều hướng thư mục

1.1 Absolute vs relative directories

Absolute vs relative directories – Thư mục tuyệt đối và Thư mục tương đối. Để thay đổi thành một thư mục được chỉ định tuyệt đối, hãy sử dụng toàn bộ tên, bắt đầu bằng dấu gạch chéo /:

cd /home/username/dir/sub-dir

ví dụ:

[huydv@hdv ~]$ pwd
/home/huydv
[huydv@hdv ~]$ cd /home/huydv/Picture/Techonogy/
[huydv@hdv Techonogy]$ pwd
/home/huydv/Picture/Techonogy

Nếu bạn muốn thay đổi một thư mục gần hiện tại của bạn, bạn có thể chỉ định một vị trí tương đối. Mà hiện tại bạn đang đứng tại Techonogy bạn sử dụng bí danh .. để thực hiện di chuyển về thư mục Picture thay vì phải sử dụng đường dẫn tuyệt đối, ví dụ:

[huydv@hdv Techonogy]$ pwd
/home/huydv/Picture/Techonogy
[huydv@hdv Techonogy]$ cd ..
[huydv@hdv Picture]$ pwd
/home/huydv/Picture

Ví dụ, nếu trong thư mục Picture có các thư mục sau: Techonogy, Customer, Subscriptions. Bạn có thể nhập trực tiếp thư mục con thay vì đường dẫn tuyệt đối đến thư mục con.

[huydv@hdv Picture]$ cd 
Customer/      Subscriptions/ Techonogy/     
[huydv@hdv Picture]$ cd Subscriptions/
[huydv@hdv Subscriptions]$ pwd
/home/huydv/Picture/Subscriptions

Tại dòng 2 khi hiện tên các thư mục con là mình đã gõ tab tab để đề xuất các thư mục con hiện có trong thư mục hiện tại.

1.2 Thay đổi đến thư sử dụng cuối cùng

cd -

Được sử dụng để trở về thư mục bạn đã ở trước đó. Nếu sử dụng liên tục nó sẽ đưa bạn đến 2 thư mục mà bạn đã sử dụng lần cuối cùng.

1.3 Thay đổi đến thư mục chính.

Thư mục mặc định làm việc là thường là thư mục /root/ đối với user root:

[root@hdv ~]# echo $HOME
/root

Thư mục /home/username/ đối với user hiện tại đang thực thi.

[huydv@hdv ~]$ echo $HOME
/home/huydv

Biến $HOME là biến môi trường biểu thị thư mục của người dùng hiện tại.

1.4 Thay đổi thư mục của script

Có hai loại tệp bash:

  • System tool- Các công cụ hệ thống hoạt động từ thư mục làm việc hiện tại
  • Project tool công cụ dự án sửa đổi tệp liên quan đến vị trí của chúng trong hệ thống tệp.

Đối với Project tool sẽ hữu ích khi thay đổi thành thư mục nơi script được lưu trữ điều này có thể được thực hiện với lệnh sau:

cd "$(dirname "$(readlink -f "$0")")"

Câu lệnh trên thực hiện chạy 3 lệnh:

  1. readlink -f "$0" xác định đường dẫn đến script hiện tại ($0)
  2. dirname chuyển đổi đường dẫn đến script thành đường dẫn đến thư mục của nó
  3. cd Thay đổi thư mục làm việc hiện tại thành thư mục mà nó nhận được từ dirname

Listing Files

2.1 Liệt kê file ở định dạng danh sách dài

Tùy chọn -l của lệnh ls hiển thị nội dung của thư mục cụ thể ở định dạng danh sách dài. Nếu không có đối số của thư mục chỉ định chỉ nó sẽ hiển thị nội dung của thư mục hiện tại.

[huydv@hdv ~]$ ls -l
total 0
drwxrwxr-x. 5 huydv huydv 60 Jun  7 05:10 Picture
[huydv@hdv ~]$ ls -l /home/huydv/Picture/
total 4
drwxrwxr-x. 2 huydv huydv 21 Jun  7 10:07 Customer
-rw-rw-r--. 1 huydv huydv 58 Jun  7 10:07 info.txt
drwxrwxr-x. 2 huydv huydv  6 Jun  7 05:10 Subscriptions
drwxrwxr-x. 2 huydv huydv  6 Jun  7 05:06 Techonogy

Dòng đầu tiên total cho biết tông kích tuhuoncwscuar tất cả các tệp trong thư mục được liệu kê. Sau đó hiển thị 8 cột thông tin:

Số cộtVí dụMiêu tả
1.1dLoại của tệp
1.2rwxr-xr-xChuỗi biểu thị quyền hạn cho user group own(permission)
21 & 2Các liên kết (hiểu nôm na với window là có shortcut được ở đâu đó)
3username(huydv,root)Owner name
4username(huydv,root)Owner group
521 (dir Customer)Kích cỡ của tệp đơn vị bytes
6Jun 7 10:07Thời gian sửa đổi cuối cùng
7info.txt or CustomerFile name

Ở phần 1.1 loại của tệp: có thể là một trong bất kỳ ký tự nào sau đây:

CharacterFile type
Tệp thông thường
bChặn các tệp đặc biệt
cTệp ký tự đặc biệt
CTệp hiệu xuất cao
dThư mục
DDoor(tệp đặc biệt chỉ có trong Solaris 2.5+)
ILiên kết tượng trưng- Symbolic link
MOff-line (đã được chuyển đi)
nTệp đặc biệt của mạng(HP-UX)
pFIFO(name pipe)
Pport (tệp đặc biệt chỉ có trong Solaris 10+)
sSocket
?Một số loại tệp khác

2.2 Liệt kê ra 10 tệp được sửa đổi gần nhất

Câu lệnh dưới đây sẽ liệt kê 10 tệp được sửa đổi gần nhất trong thư mục hiện tại, sử dụng long listing format(định dạng danh sách dài) -l và sort by time(tìm kiếm theo thời gian) -t.

ls -lt |head

head dùng để liệt kê ra 10 dòng muốn liệt kê dài hơn thêm đối số: ls -lt | head -n 20

2.3 Liệt kê tất cả các tệp bao gồm các tệp Dotfiles(file ẩn)

Dotfiles là một file bắt đầu bằng dấu chấm(.). Khi thực hiện ls thì sẽ không được hiển thị trừ khi được yêu cầu

[huydv@hdv ~]$ ls
Picture

Tùy chọn -a hoặc –all sẽ liệt kê tất cả các tệp bao gồm các tệp dotfiles.

[huydv@hdv ~]$ ls -a
.  ..  .bash_history  .bash_logout  .bash_profile  .bashrc  Picture

Tùy chọn -A hoặc –almost-all sẽ liệt kê tất cả các loại tệp, bao gồm các tệp Dotfiles, nhưng không liệt kê implied (.) và (..).

Liệt kê các tệp tin mà không cần sử dụng ls

Sử dụng bash shell’s File name expansion(mở rộng tên tệp) và brace expansion(mở rộng dấu ngoặc nhọn) để lấy các tên tệp:

#==ls- chắc năng tương tự câu lệnh ls
[huydv@hdv ~]$ printf "%s\n" *
Picture

[huydv@hdv Picture]$ printf "%s\n" *
Customer
info.txt
Subscriptions
Techonogy

#liệt kê file có đuôi txt
[huydv@hdv Picture]$ printf "%s\n" *.txt
info.txt
#Liệt kê các file có đuôi txt,md,conf, nếu không có file thì dấu * sẽ được hiển thị ở đầu
[huydv@hdv Picture]$ printf "%s\n" *.{txt,md,conf}
info.txt
demo.md
*.conf

2.6 Liệt kê ra các file có định dạng giống như cây thư mục

Lệnh tree liệt kê nội dung của một thư mục được chỉ định ở định dạng cây.

[huydv@hdv ~]$ tree
.
└── Picture
    ├── Customer
    │   └── Num.txt
    ├── demo.md
    ├── info.txt
    ├── Subscriptions
    └── Techonogy

4 directories, 3 files

Để cài đặt và sử dụng lệnh cho Centos7: sudo yum install tree hoặc cho Ubuntu: apt install tree

2.7 Liệt kê danh sách các tệp được sắp xếp theo kích thước

Tùy chọn -S của lệnh ls sắp xếp các tẹp theo thứ tự giảm dần về kích thước:

[huydv@hdv ]# ls -lS
-rw-rw-r--. 1 huydv huydv 58 Jun  7 10:07 info.txt
drwxrwxr-x. 2 huydv huydv 21 Jun  7 10:07 Customer
drwxrwxr-x. 2 huydv huydv  6 Jun  7 05:10 Subscriptions
drwxrwxr-x. 2 huydv huydv  6 Jun  7 05:06 Techonogy
-rw-rw-r--. 1 huydv huydv  0 Jun  7 10:46 demo.md

Muốn sắp xếp theo thứ tự tăng dần sử dụng ls -lSr

Lưu ý: Sau khi bạn đọc xong day 2 những điều cần nhớ: Điều hướng thư mục – liệt kê file và thư mục

– Sử dụng đường dẫn tuyệt đối và đường dẫn tương đối
– Sử dụng câu lệnh cd, readlink, firname, ls [option], tree, head.
– Permission của thư mục

Cám ơn các bạn đã đọc. Day3 – Using cat, grep, alias.

3 thoughts on “Bash shell – Day2- Navigating directories & Listing Files”

Leave a Comment