Các gói tin linux sẽ lưu ở đâu

Giới thiệu

Cho dù bạn sử dụng bản phân phối Linux dựa trên Debian như Debian, Ubuntu, Mint hay SolyDX, hoặc bạn sử dụng phân phối Linux dựa trên Red Hat như Fedora hoặc CentOS, cách ứng dụng được cài đặt vào máy tính của bạn giống nhau.

Phương pháp vật lý để cài đặt phần mềm có thể khác. Ví dụ, các công cụ đồ họa trong Ubuntu là Trung tâm phần mềm và Synaptic trong khi trong Fedora có YUM Extender và openSUSE sử dụng Yast. Các công cụ dòng lệnh bao gồm apt-get cho Ubuntu và Debian hoặc yum cho Fedora và zypper cho openSUSE.

Một điều mà tất cả họ đều có điểm chung là thực tế là các ứng dụng được đóng gói để làm cho chúng dễ cài đặt hơn.

Các bản phân phối dựa trên Debian sử dụng định dạng gói .deb trong khi các bản phân phối dựa trên Red Hat sử dụng các gói rpm. Có rất nhiều loại gói khác nhau có sẵn nhưng nhìn chung chúng hoạt động theo cách tương tự.

Kho lưu trữ là gì?

Kho chứa phần mềm chứa các gói phần mềm.

Khi bạn tìm kiếm thông qua Trung tâm Phần mềm hoặc sử dụng một công cụ như apt-get hoặc yum, bạn sẽ được hiển thị danh sách tất cả các gói trong kho có sẵn cho hệ thống của bạn.

Kho lưu trữ phần mềm có thể lưu trữ các tệp của nó trên một máy chủ hoặc trên nhiều máy chủ khác nhau được gọi là các máy nhân bản.

Cách cài đặt gói

Cách dễ nhất để tìm các gói là thông qua các công cụ đồ họa do trình quản lý gói phân phối của bạn cung cấp.

Các công cụ đồ họa giúp bạn giải quyết các vấn đề phụ thuộc và để xác nhận rằng quá trình cài đặt đã hoạt động chính xác.

Nếu bạn thích sử dụng dòng lệnh hoặc bạn đang sử dụng một máy chủ không đầu (nghĩa là không có trình quản lý cửa sổ / môi trường desktop) thì bạn có thể sử dụng các trình quản lý gói dòng lệnh.

Đó là tất nhiên có thể cài đặt các gói riêng lẻ. Trong các bản phân phối dựa trên Debian, bạn có thể sử dụng lệnh dpkg để cài đặt các tệp .deb . Trong các bản phân phối dựa trên Red Hat, bạn có thể chỉ cần sử dụng lệnh rpm.

Có gì trong gói

Để xem nội dung của gói Debian, bạn có thể mở nó trong trình quản lý lưu trữ. Các tập tin chứa trong một gói như sau:

  • Điều khiển
  • Dữ liệu
  • Debian-nhị phân

Tệp nhị phân Debian chứa số phiên bản định dạng Debian và nội dung hầu như luôn được đặt là 2.0.

Tệp điều khiển thường là tệp tar được nén. Nội dung của tập tin điều khiển xác định các tính năng quan trọng của gói như sau:

  • Tên gói hàng
  • Số phiên bản
  • Kiến trúc
  • Người bảo trì
  • Đã cài đặt-Kích thước
  • Phụ thuộc
  • Phần (tức là đồ họa)
  • Sự ưu tiên
  • Trang chủ
  • Sự miêu tả

Tệp dữ liệu cũng là tệp tar được nén lên cung cấp cấu trúc thư mục cho gói. Tất cả các tệp trong tệp dữ liệu được mở rộng đến thư mục có liên quan trong hệ thống Linux.

Bạn có thể tạo các gói như thế nào

Để tạo một gói, bạn cần phải có một cái gì đó mà bạn muốn cung cấp trong một định dạng đóng gói.

Nhà phát triển có thể đã tạo mã nguồn hoạt động trong Linux nhưng hiện không được đóng gói cho phiên bản Linux của bạn. Trong trường hợp này, bạn có thể tạo gói Debian hoặc gói RPM.

Hoặc có thể bạn là nhà phát triển và bạn muốn tạo gói cho phần mềm của riêng mình. Trong trường hợp đầu tiên bạn cần biên dịch mã và đảm bảo mã hoạt động nhưng bước tiếp theo là tạo gói.

Không phải tất cả các gói đều yêu cầu mã nguồn. Ví dụ: bạn có thể tạo một gói chứa hình nền của Scotland hoặc một bộ biểu tượng cụ thể.

Hướng dẫn này cho thấy cách tạo các gói .deb và .rpm.

Các gói tin linux sẽ lưu ở đâu

Chào mừng bạn đến với blog số 3 của series “Linux dành cho lập trình viên”.

Trong các blog trước, mình đã đi qua các nội dung về:

– “Giới thiệu về Linux”

– “Làm quen câu lệnh và hệ thống tập tin trong Linux”.

Nếu bạn chưa đọc qua thì hãy dừng ít phút ghé đọc để có cái nhìn tổng quan và theo cùng nội dung chuỗi bài này nhé.

Tiếp theo trong bài này, tụi mình sẽ tìm hiểu về cách quản lý hệ thống tập tin trong Linux, cụ thể:

– Quản lý hệ thống tập tin

– Quản lý thư mục

– Quản lý file

– Các toán tử đại diện

Quản lý hệ thống tập tin(filesystem)

Sau khi đến được thư mục cần đến bằng câu lệnh với cd rồi, thì mình muốn xem những nội dung bên trong thư mục đấy có gì. Câu lệnh ls giúp mình:

– mặc định ls sẽ hiển thị tất cả các file trừ những file ẩn

File ẩn là những file môi trường có bắt đầu bằng . (ví dụ: ., .., .env, .gitignore)

– sử dụng -a để liệt kê tất cả các file(bao gồm các file bị ẩn)

– sử dụng -l để liệt kê ở long format, có thể hiểu là thêm các thông tin khác của file như có phải là thư mục hay không(d hay -), các loại quyền của từng loại user(rwxr-xr-x), user owner, group owner, kích thước, ngày tháng chỉnh sửa, filename, …

– sử dụng -la để kết hợp cả hai options trên lại, hiển thị tất cả các file ở long format

Các gói tin linux sẽ lưu ở đâu

Ở hình trên có ghi chú chi tiết, về các thông tin được hiển thị với câu lệnh ls -l, cụ thể là:

File type: d nghĩa là thư mục, nghĩa là file

Permissions: cho phép các đối tượng cụ thể các quyền truy cập vào file

Hard link count: thông tin về liên kết của tệp

User owner: người dùng là chủ sở hữu của file

Group owner: nhóm người dùng có quyền truy cập thông qua các permissions

File size: kích thước file theo bytes

Modification timestamp: ngày giờ chỉnh sửa gần nhất

File name: tên của file

Quản lý thư mục

Quản lý thư mục

mkdir hoặc <đường-dẫn-đến-tên-thư-mục>

Ví dụ: Giả sử mình đang đứng ở thư mục ~/Desktop/example-linux

  1. tạo một thư mục có tên là manage-dir vào thư mục hiện tại với mkdir manage-dir

    Các gói tin linux sẽ lưu ở đâu

mkdir cũng có thể đi cùng với đường dẫn đến thư mục và tên của thư mục cần tạo.

  1. tạo thêm một thư mục có tên là mkdir-example nằm trong thư mục manage-dir
    Các gói tin linux sẽ lưu ở đâu

Tuy nhiên, nếu đường dẫn này chưa tồn tại, ví dụ mình muốn tạo một thư mục mkdir-example trong thư mục manage-dir-not-exist chẳng hạn, thì sẽ báo lỗi:

Các gói tin linux sẽ lưu ở đâu

Xóa thư mục trống với rmdir

rmdir hoặc <đường-dẫn-đến-tên-thư-mục>

Các gói tin linux sẽ lưu ở đâu

Xóa thư mục bao gồm cả nội dung bên trong với rm

Để xóa được cả thư mục chứa nội dung bên trong, thì câu lệnh rmdir thôi sẽ báo lỗi folder này không trống.

Khi đó, bạn có thể dùng câu lệnh rm với option -r dùng để xóa tất cả files hay folders ở tất cả các cấp.

Ví dụ: mình muốn xóa folder manage-dir nơi có chứa một file test.txt

Các gói tin linux sẽ lưu ở đâu

Lưu ý: đây là một câu lệnh khá nguy hiểm(thấy không? nó xóa hết mà không có bất kỳ thông báo gì hết như ví dụ trên) nên bạn hãy dùng man rm để đọc document và kiểm tra kỹ từng options có thể dùng nhé.

Ví dụ bạn có thể sử dụng thêm option -i để vào chế độ cho phép tương tác(interactive) tức là cho phép lựa chọn file để xóa với y(yes) hay n(no)

Các gói tin linux sẽ lưu ở đâu

Ở ví dụ trên mình cố tình chọn y khi được hỏi remove manage-dir. Dẫn đến lỗi là thư mục này không có trống để xóa được, vì mình đã chọn n tức là không cho xóa khi được hỏi manage-dir/test.txt, tức là folder này vẫn còn file test.txt ở trong.

Quản lý file

Sao chép file với cp

cp

Ví dụ: copy file test.txt trong folder manage-dir đến thư mục hiện tại là example-linux

Các gói tin linux sẽ lưu ở đâu

Lưu ý: đây cũng là lệnh khá nguy hiểm, khi mà ở folder hiện tại bạn có một file cùng tên với file bạn tính copy đến, thì file mới đến nó ghi đè luôn, thế mà mất toai cái bạn cũ.

Ví dụ: lệnh cp ghi đè file cùng tên có sẵn

Các gói tin linux sẽ lưu ở đâu

Bạn để ý kích thước file test.txt ban đầu là 55KB, với nội dung là đoạn text đó. Sau khi copy kích thước còn 0KB, và nội dung trống.

Bạn có thể sử dụng thêm option -i để vào chế độ cho phép tương tác(interactive) tức là được lựa chọn có ghi đè file cùng tên hay không

Các gói tin linux sẽ lưu ở đâu

Sau khi mình chọn n để không cho ghi đè thì kích thước và nội dung file test.txt không thay đổi.

Di chuyển file với mv

mv

Xóa file với rm

Câu lệnh rm cho phép mình xóa file.

rm hoặc <đường-dẫn-đến-tên-file>

Tạo file trống với touch

touch

Toán tử đại diện

Khi thực hiện quản lý hệ thống tập tin, nhiều lúc mình sẽ cần làm việc với số lượng files, thư mục khá lớn, lên đến hàng chục hay hàng trăm nghìn.

Dưới đây là ví dụ với folder /etc có total 1560

Các gói tin linux sẽ lưu ở đâu

Trong những trường hợp này, việc tìm kiếm bằng mắt các file hay thư mục là việc vô cùng khó khăn và tốn thời gian. Khi đó, các** toán tử đại diện** là cứu tinh của chúng ta.

Các toán tử đại diện thường dùng để tìm kiếm các file có chung đặc điểm nào đó, như là có chung đuôi file(phần mở rộng) là .conf hay có cùng một số ký tự nào đó trong tên chẳng hạn.

Toán tử *

Ví dụ mình muốn tìm kiếm tất cả các file có đuôi là .conf trong folder /etc ở trên, khi đó đường dẫn của mình sẽ là /etc/*/conf

Toán tử * đại diện cho “không chứa hoặc có chứa một hay nhiều ký tự”

Tức ***** ở đây có thể là không chứa gì hết, như file .conf hoặc có chứa một hay nhiều ký tự như nfs.conf hay pf.conf

Thường khi làm việc với một lượng lớn file như vậy, bạn sẽ cần copy những file tìm được vào một thư mục nào đó để dễ làm việc với chúng(những file copy) – cho an toàn – vì nếu đụng vô sửa mấy file hệ thống hay config bậy khá là nguy hiểm nha.

Vậy nên, để thực hiện thao tác này, là lúc câu lệnh cp tới công chiện.

Hãy cùng tạo một thư mục config trong example-linux rồi copy cái bạn này bỏ vào đó nhé(thử làm trước khi xem đáp án ha).

Các gói tin linux sẽ lưu ở đâu

Toán tử ?

Toán tử ? đại diện cho một ký tự

Với ? đại diện cho một ký tự, vậy thì để tìm những file có đuôi là .conf và có tên đúng 3 ký tự thôi thì mình có thể sử dụng đường dẫn là /etc/???.conf

Toán tử [] đại diện cho một khoảng(range)

Thế còn có cách nào muốn kiếm file chứ ký tự với một số giá trị nào đấy không nhỉ?

Đến đây thì cái này [] vào công chiện nè, đường dẫn để kiếm tên file có đuôi .conf mà bắt đầu bằng a hoặc b sẽ là /etc/[ab]*.conf

Ngoài cách viết từng loại ký tự trong range [] như thế, có một cách gọn hơn để viết mội dãy các ký tự với -, cụ thể là **[abcd] **có thể viết thành [a-d]

Note: mấy ví dụ trên đây là mình dùng kèm câu lệnh cp để copy file được chọn về thư mục mới luôn, nếu bạn thích gọn hơn thì có thể dùng thằng câu lệnh ls thôi nhé, kiểu như: ls /etc/[ab]*.conf

Các toán tử đại diện được hiểu như thế nào khi câu lệnh thực thi?

Bạn nghĩ sao về câu hỏi này, bạn đoán thử nha.

Theo mình thì để có thể hiểu được các toán tử đại diện này hẳn là các câu lệnh phải có cách nào đó dịch ý nghĩa của chúng ra.

Ví dụ mình muốn tìm tất cả các files hay folder có bắt đầu bằng a hoặc b, sử dụng ls /etc/[ab]* , thì mình đoán là BASH sẽ dịch [ab] thành a hoặc b, xong qua dịch tiếp dấu * để hiểu * là như nào xong mới đi kiếm với ls được chứ. Hay là câu lệnh ls đi dịch cái nghĩa xong rồi mới kiếm ta?

Thực ra thì, mình đoán cũng gần đúng đó mấy bạn hehe.


Các toán tử đại diện sẽ không được dịch theo từng câu lệnh, mà thay vào đó nó là một phần của BASH shell. Điều này có ý nghĩa quan trọng vì nó cho bạn biết là bạn có thể dùng cái toán tử đại diện này ở mọi câu lệnh, đã chưa.

Ví dụ ls /etc/[ab]*.conf ở trên thì câu lệnh ls thậm chí còn không biết là bạn dùng toán tử hay gì hết.

BASH đầu tiên sẽ:

– đi đổi cái etc/[ab]*.conf qua thành **/etc/asl.conf /etc/autofs.conf /etc/aliases … **

– gọi lệnh ls /etc/asl.conf /etc/autofs.conf /etc/aliases …

Cùng xem kết quả nhé:

Các gói tin linux sẽ lưu ở đâu

Ủa kỳ ta, sao nó hiện tùm lum vậy kìa =)) Hình như nó hiện cả các files trong mấy cái thư mục luôn phải không?

Thế thì, mình cần thêm option nào của ls để hiển thị tên thư mục thôi hả các chế?

Chắc bạn nhớ, dùng -d đó nha. Nếu không nhớ thì … man ls và đọc document nào.

Các gói tin linux sẽ lưu ở đâu


Nội dung bài blog này đến đây tạm hết rồi, tụi mình đã tìm hiểu cách quản lý hệ thống tập tin trong Linux rồi ấy, cũng đơn giản đúng không nào.

Trong bài viết tiếp theo của series “Làm quen Linux giành cho lập trình viên”, sẽ là tìm hiểu thêm về việc chuyển hướng của câu lệnh trong Linux, tức là có thể sử dụng kết quả của câu lệnh này để thực thi một câu lệnh khác ấy, thú vị lắm.

Hẹn gặp các bạn trong bài viết sau.

Nếu bạn thích hãy comment hay like, share ủng hộ mình.

Cảm ơn bạn.

BeautyOnCode.


Bài gốc của nội dung này nằm trên blog cá nhân của mình, mời bạn ghé chơi.

Nếu thích thì bạn có thể like/follow fanpage này, mình hay đăng bài viết mới cũng như cái nguồn hay hay trên đây.

Cuối cùng, cho mình giới thiệu xíu sản phẩm mới của blog là podcast BeautyOnCode, bạn có thể nghe trên Spotify hoặc Anchor nha.

Cám ơn các bạn đã ủng hộ mình.