Làm việc với tập tin và thư mục trên Linux Image Làm việc với tập tin và thư mục trên Linux

Hệ điều hành Linux đã cung cấp nhiều lệnh để chúng ta có thể làm việc với tập tin và thư mục. Bài viết này sẽ giới thiệu với các bạn về cách tạo thư mục trên linux, tạo tập tin mới hoặc tập tin trống, xem nội dung của tập tin và tìm kiếm tập tin trên linux, thay đổi dấu thời gian của tập tin và di chuyển, xóa và đổi tên tập tin hoặc thư mục. Các lệnh này giúp bạn quản lý dữ liệu và tập tin của mình và đảm bảo rằng dữ liệu chính xác có sẵn tại đúng vị trí từ đây giúp cho các bạn có thể tự học linux một cách dể dàng hơn.

Làm việc với tập tin và thư mục

1. Lệnh ls - xem danh sách tập tin thư mục

ls -[tùy chọn] [đường dẫn thư mục muốn xem]

Các tuỳ chọn phổ biến của lệnh ls:

Các tùy chọnÝ nghĩa
-LHiển thị danh sách tập tin, thư mục (chỉ hiện thị tên).
-lHiển thị danh sách tập tin, thư mục (gồm nhiều cột: filename, size, date,….
-aLiệt kê tất cả các tập tin, thư mục, bao gồm những tập tin ẩn.
-RLiệt kê tất cả các tập tin, thư mục kể cả các tập tin, thư mục bên trong thư mục cha.

Ngoài ra chúng ta có thể sử dụng "man" để xem các tuỳ chọn của lệnh ls

man ls

1.1. Lệnh grep

Lệnh grep - lọc lại tên tập tin thư mục muốn xem

Lệnh ls -l của "/" cho kết quả nhiều thông tin, nếu muốn lọc lại tên tập tin thư mục muốn xem chỉ cần thêm grep.

lệnh | grep [nhập ký tự muốn lọc]

Ví dụ 1: Muốn xem trong "/" có tập tin, thư mục nào có ký tự là pro thì thực hiện như sau:

ls -l | grep pro

Ví dụ 2: Muốn xem trong thư mục /etc có tập tin, thư mục nào có ký tự là yum thì thực hiện như sau:

ls -l /etc/ | grep yum

Lệnh grep còn được dùng tìm kiếm chuỗi trong file:

grep “ chuoi ” tên file

Lệnh grep còn được dùng tìm kiếm chuỗi trong nhiều file cùng lúc:

grep “ chuoi ” file_pattern

Chú ý: Dùng ký hiệu "*" để thực hiện tìm kiếm nhiều tập tin cùng một lúc.

Ví dụ: Tìm kiếm chuỗi "yum" trong các file có đuôi .txt trong thư mục /root:

grep “yum” /root/*.txt

2. Lệnh cd

Lệnh cd dùng để đổi sang thư mục khác

Các lệnh cd thông dụng

  • Di chuyển về thư mục gốc: cd /
  • Di chuyển đến 1 vị trí bất kì khi biết đường dẫn tuyệt đối: cd /etc/networks
  • Di chuyển đến thư mục con nằm trong thư mục hiện tại: cd docs hoặc ./docs
  • Di chuyển đến thư mục mẹ:

    cd ..
    

Hoặc

cd ../.. : di chuyển về thư mục mẹ 2 lần
  • Lệnh cd không có tham số, sẽ đưa bạn về home directory, dù bất kể bạn đang ở đâu: cd hoặc cd ~
  • Lệnh cd dùng để quay về thư mục trước: cd -

3. Lệnh pwd

Lệnh pwd chúng ta sẽ có ful path của thư mục mà chúng ta đang dùng ở hiện tại.

pwd

4. Lệnh mkdir – dùng để tạo thư mục trên Linux

Lệnh mkdir được sử dụng để tạo một thư mục trong thư mục hiện tại:

mkdir [tên thư mục cần tạo]

Ví dụ: Tạo thư mục tên exampledir trong thư mục hiện tại:

mkdir exampledir

5. Lệnh xóa tập tin thư mục

5.1: Xóa tập tin:

rm [đường dẫn]

Ví dụ: Xóa tập tin abc.txt trong /usr/passwd:

rm /usr/passwd/abc.txt

5.2: Xóa tập tin mà không cần hỏi:

rm -f [đường dẫn]

Ví dụ: Xóa tập tin abc.txt trong /usr/passwd:

rm -f /usr/passwd/abc.txt

5.3: Xóa thư mục:

rm -rf [đường dẫn]

Ví dụ: Xóa thư mục example trong /usr/bin:

rm -rf /usr/bin/example

5.4: Xóa thư mục rỗng:

rmdir [đường dẫn]

Ví dụ: Xóa thư mục dir trong /usr/bin: rmdir dir

6. Lệnh copy tập tin, thư mục

6.1: Lệnh sao chép tập tin:

cp [đường dẫn nguồn] [đường dẫn đích]

Ví dụ: Sao chép tập tin abc.txt trong thư mục /root sang /usr: cp /root/abc.txt /usr

6.2: Lệnh sao chép thư mục:

cp -R [đường dẫn nguồn] [đường dẫn đích]

Ví dụ: Sao chép thư mục /root/networks sang /usr/bin:

cp -r /root/networks /usr/bin

7. Lệnh mv - dùng di chuyển, đổi tên

Lệnh mv thực hiện nhiệm vụ kép. Nó có thể thực hiện:

7.1:Cần đổi tên một tập tin

mv [đường dẫn với tên củ] [đường dẫn với tên mới]

Ví dụ: Đổi tên tập tin test1.txt trong /root thành test.txt:

mv /root/test1.txt /root/test.txt

7.2: Di chuyển một tập tin đến vị trí khác, trong khi đó nó có thể đổi tên cùng lúc.

mv [đường dẫn nguồn] [đường dẫn đích]

Ví dụ: Di chuyển và đổi tên tập tin test1.txt trong /root sang /etc đổi tên thành test.txt: mv /root/test1.txt /etc/test.txt

8.Lệnh touch - dùng để tạo tập tin rỗng

Lệnh touch thường được sử dụng để thiết lập hoặc cập nhật quyền truy cập, thay đổi và sửa đổi thời gian của tập tin.Theo mặc định, nó đặt lại dấu thời gian của tập tin để khớp với thời gian hiện tại.

Ngoài ra lệnh touch còn dùng để tạo tập tin rỗng.

touch [tên tập tin]

Ví dụ: Tạo tập tin tên test1.txt:

touch test1.txt

Lệnh touch còn cung cấp một số tiện ích, như tuỳ chọn -t cho phép bạn đặt ngày thời gian của tệp.

touch -t [thoigian] [tên tập tin]

Ví dụ: Đặt thời gian cho tập tin myfile, ngày 9 tháng 12 và lúc 4 giờ chiều (12091600):

touch -t 12091600 myfile

9. Dùng trình soạn thảo vi

Linux có nhiều chương trình cho phép soạn thảo văn bản như: vi, emacs, joe, pico,… chương trình soạn thảo văn bản thông dụng nhất đó là vi.

Khi vi khởi động sẽ ở chế độ dòng lệnh. Để chuyển đổi từ chế độ dòng lệnh sang chế độ soạn thảo thì nhấn phím insert. Để trở lại chế độ dòng lệnh thì chọn phím ESC.

vi [đường dẫn]

Ví dụ: Tạo tập tin 123.txt và đặt trong thư mục /usr/bin với nội dung là “ dung trinh soan thao vi”

Bước 1: Dùng lệnh vi để tạo tập tin 123.txt. Nếu tập tin này đã có thì cũng dùng vi để mở và cũng theo cú pháp ở trên.

vi 123.txt

Bước 2: Nhấn phím i để nhập nội dung “dung trinh soan thao vi”.

Bước 3: Nhấn phím ESC để nhập một trong các yêu cầu sau:

  • q!: thoát mà không lưu văn bản.

  • wq: Lưu và thoát khỏi tập tin.

Các câu lệnh và tác dụng trong chế độ dòng lệnh của trình soạn thảo vi:

Câu lệnhTác dụng
^ hoặc 0Dịch chuyển con trỏ đến vị trí bắt đầu của dòng hiện tại.
$Dịch chuyển con trỏ đến vị trí kết thúc của dòng hiện tại.
i,aChèn văn bản ngay trước/sau vị trí con trỏ.
OMở một dòng mới ngay sau dòng hiện tại.
OMở một dòng mới ngay trước dòng hiện tại.
XXóa ký tự sau con trỏ.
DwXoá một từ (bao gồm cả ký tự trống ngay sau nó).
DXoá từ vị trí con trỏ đến kết thúc dòng.
d^Xoá từ vị trí bắt đầu dòng đến vị trí ký tự trống hay ký tự bên trái con trỏ.
UHuỷ bỏ thay đổi trước đó.
/patternTìm xâu pattern. Theo hướng tiến.
?patternTìm xâu pattern, theo hướng lùi về đầu văn bản.
n,NLặp lại việc tìm kiếm theo cùng hướng/ngược hướng.
p, PDán đoạn văn bản vừa xoá vào trước/sau con trỏ.
.Lặp lại câu lệnh cuối.
DdXóa dòng có con trỏ chạy.
:wGhi lại tất cả các thay đổi của file hiện tại và tiếp tục soạn thảo.
:q!Kết thúc, không lưu trữ bất kỳ thay đổi.
:ZZLưu thay đổi của file hiện tại và kết thúc.

10. Tạo tập tin có nội dung:

echo “noi dung”  >[đường dẫn]

Ghi vào dòng tiếp theo của tập tin có nội dung:

echo “noi dung tiep theo” >>[đường dẫn]

11. Xem tập tin

Chúng ta sử dụng các lệnh để xem tập tin:

LệnhChức năng
catDùng để xem các tập tin không quá dài.
tacDùng để xem nội dung của một tập tin ngước bắt đầu từ dòng cuối.
tessDùng để xem tập tin lớn hơn vì đây là chương trình phân trang.
tailDùng để in 10 dòng cuối của tập tin theo mặc định. Chúng ta có thể thay đổi số dòng bằng cách thêm -n vào sau tail, n là số dòng bạn muốn.
headDùng để in 10 dòng đầu của tập tin theo mặc định. Chúng ta có thể thay đổi số dòng bằng cách thêm -n vào sau head, n là số dòng bạn muốn.

12. Lệnh tìm kiếm

find [đường dẫn] -name [tên cần tìm]

Ví dụ: Tìm vị trí của tập tin xyz.txt trong /etc:

find /etc/ -name xyz.txt

Ngoài việc tìm theo tên (-name), có thể tìm theo các tùy chọn khác như: -type, -user, -atime, -amin, -newer,… Sử dụng lệnh man find để xem chi tiết.

Chú ý: Có thể dùng ký hiệu "*" để thực hiện xóa, tìm kiếm, sao chép... nhiều tập tin cùng một lúc.

12.1: Tìm theo thời gian và size

Find có thêm cả phần lọc kết quả theo thời gian và size nữa.

12.1.1: Size

Ta có thể tìm những file có dung lượng tùy ý, bằng cách dùng -size. Một số option thường dùng:

  • c: bytes
  • k: Kilobytes
  • M: Megabytes
  • G: Gigabytes
  • b: 512-byte blocks

Tìm tất cả các file nặng đúng 100 bytes:

find / -size 100c

Tìm các file nhỏ hơn 100 bytes:

find / -size -100c

Hoặc tìm các file nặng hơn 1GB:

find / -size +1G

12.1.2: Time

Linux lưu trữ 1 vài thông tin liên quan đến thời gian như: thời điểm truy cập, thời điểm chỉnh sửa, và thời điểm thay đổi file.

  • Access Time (thời điểm truy cập): Lần cuối cùng file được đọc hoặc ghi vào.
  • Modification Time (thời điểm chỉnh sửa): Lần cuối nội dung file được chỉnh sửa.
  • Change Time (thời điểm thay đổi): Lần cuối mà inode meta-data của file bị sửa.

Tương đương với các thông tin trên, ta dùng -atime, -mtime, -ctime, và cả "-" và "+" để lọc ra những thời gian trước hay sau thời điểm đó.

Để tìm các file được chỉnh sửa trong vòng 1 ngày trước:

find / -mtime 1

Tìm các file được truy cập trong ngày hôm qua:

find / -atime -1

Các file mà meta-data bị chỉnh sửa lần cuối là 3 ngày trước và hơn:

find / -ctime +3

Hoặc tìm theo phút chứ không phải ngày:

find / -mmin -1

Lệnh trên sẽ tìm các file được chỉnh sửa trong vòng 1 phút trước.

Lệnh find còn có thể so sánh với 1 file, và trả về những file mới hơn:

find / -newer myfile

12.2: Tìm theo Owner và Permission

Chúng ta có thể tìm theo user hay group owner bằng -user-group.

Tìm các file mà user "test" sở hữu:

find / -user test

Hoặc các file mà group "newgroup" sở hữu:

find / -group newgroup

Chúng ta cũng tìm được theo permission của file, bằng -perm

Tìm những file có permission 644:

find / -perm 644

hoặc những file có permission ít nhất 644, nghĩa là gồm cả các file có permisson là 744:

find / -perm -644

12.3: Kết hợp find và command khác

Chúng ta còn có thể kết hợp find và các command khác để xử lý những file vừa tìm được với -exec

find find_parameters -exec command_and_params {} \;

Tìm các file có permission là 644 và chmod sang 755:

find / -type f -perm 644 -print -exec chmod 755 {} \;

Tìm 1 file test.py và xóa nó:

find . -type f -name "test.py" -exec rm -f {} \;

Hoặc xóa các file có đuôi .txt ở dir hiện tại:

find . -type f -name "*.txt" -exec rm -f {} \;

13. Lệnh nén và giải nén tập tin thư mục

Trong hệ thống Linux tồn tại một số dạng nén cơ bản như: zip,... Dưới đây là một vài ví dụ về cách nén và giải nén với định dạng đó.

Nén và giải nén tập tin có đuôi là .gz

gzip [đường dẫn]

Ví dụ 1: Nén tập tin test.txt trong thư mục /usr/bin thành test.txt.gz:

gzip /usr/bin/test.txt

gunzip [đường dẫn]

Ví dụ 2: Giải nén tập tin test.txt.gz trong thư mục /usr/bin:

gunzip /usr/bin/test.txt

14. Lệnh locate

Lệnh locate giúp chúng ta tìm kiếm rất nhanh một file bất kì trên hệ thống Linux. Chúng ta thường dùng cú pháp như sau:

locate [tùy chọn] [name-file]

Chương trình locate có tên gói cài đặt là mlocate

Cú pháp cài đặt chương trình locate như sau:

Một số ví dụ về lệnh locate:

Ví dụ 1: Tìm một file với lệnh locate

[root@test1 ~]# locate sysctl.conf
/etc/sysctl.conf
/etc/sysctl.d/99-sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz

Ví dụ 2: Hiển thị đếm số lượng kết quả sử dụng tùy chọn -c

[root@test1 ~]# locate sysctl.conf
/etc/sysctl.conf
/etc/sysctl.d/99-sysctl.conf
/usr/share/man/man5/sysctl.conf.5.gz
[root@test1 ~]# locate -c sysctl.conf
3

Ví dụ 4: Hiển thị kết quả tên file chữ hoa chữ thường

Theo mặc định thì locate chỉ tìm ra những file có chữ thường. Nhưng trong một số trường hợp thì chúng ta muốn tìm kiếm file có chữ thường chữ hoa chúng ta sử dụng tùy chọn -i. Cú pháp như sau:

locate -i [name-file]

Ví dụ 5: Giới hạn kết quả xuất ra

Nếu không giới hạn kết quả xuất ra sẽ ra rất nhiều kết quả liên quan. Như ví dụ sau

[root@test1 ~]# locate passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd
/usr/bin/grub2-mkpasswd-pbkdf2
/usr/bin/passwd
/usr/include/rpcsvc/yppasswd.h
/usr/include/rpcsvc/yppasswd.x
/usr/lib/firewalld/services/kpasswd.xml
/usr/lib/python2.7/site-packages/cloudinit/sources/helpers/vmware/imc/config_passwd.py
/usr/lib/python2.7/site-packages/cloudinit/sources/helpers/vmware/imc/config_passwd.pyc
/usr/lib/python2.7/site-packages/cloudinit/sources/helpers/vmware/imc/config_passwd.pyo
/usr/lib64/security/pam_unix_passwd.so
/usr/sbin/chpasswd
/usr/sbin/lpasswd
...

Để giới hạn số lượng xuất ra chúng ta sử dụng tùy chọn -l. Ví dụ chúng ta muốn xuất 5 dòng thì chúng ta thực hiện như sau:

[root@test1 ~]# locate -l 5 passwd
/etc/passwd
/etc/passwd-
/etc/pam.d/passwd
/etc/security/opasswd
/usr/bin/gpasswd

Để cập nhật lại dữ liệu cho locate chúng ta chay lệnh sau:

updatedb

15. Lệnh which và lệnh whereis

15.1. Lệnh which

Lệnh which xác định vị trí một chương trình trong đường dẫn của người dùng.

Một số cú pháp của lệnh which:

Tìm kiếm biến môi trường PATH và hiển thị vị trí của bất kỳ tập tin thực thi phù hợp nào

which [executable]

Nếu có nhiều tập tin thực thi khớp, hiển thị tất cả:

which -a [executable]

15.2 Lệnh whereis

Lệnh whereis rất hữu ích để tìm kiếm các trang nhị phân, nguồn các lệnh trong hệ thống Linux. Cú pháp như sau:

whereis [tuỳ chọn] [command]

Ví dụ 1: Nó định vị các trang nhị phân, nguồn và man của lệnh open và nó hiển thị các đường dẫn trong đó các trang nhị phân, lệnh man có sẵn trong hệ thống.

[root@test1 ~]# whereis open
open: /usr/bin/open /usr/share/man/man1/open.1.gz /usr/share/man/man3/open.3pm.gz
[root@test1 ~]# whereis ls
ls: /usr/bin/ls /usr/share/man/man1/ls.1.gz

Ví dụ 2: Xác định vị trí của tập tin nhị phân lệnh ls tuỳ chọn -b

[root@test1 ~]# whereis -b ls
ls: /usr/bin/ls

Ví dụ 3: Xác định vị trí của trang man lệnh ls tuỳ chọn -m

[root@test1 ~]# whereis -m ls
ls: /usr/share/man/man1/ls.1.gz

16. Lệnh type

Lệnh type trong Linux được sử dụng để tìm hiểu một lệnh mà chúng ta nhập sẽ diễn giải là một lệnh tích hợp, lệnh bên ngoài hoặc bí danh(alias) của shell hiện tại. Cú pháp của lệnh này là:

type [tuỳ chọn] [command]

Ví dụ 1: Xem lệnh pwd là lệnh tích hợp, lệnh bên ngoài hay bí danh

[root@test1 ~]# type pwd
pwd is a shell builtin

Qua kết quả trên cho chúng ta thấy lệnh pwd là một lệnh shell tích hợp.

Ví dụ 2: Để xem thêm thông tin về một lệnh cụ thể, chúng ta sử dụng tùy chọn -a

[root@test1 ~]# type -a pwd
pwd is a shell builtin
pwd is /usr/bin/pwd