Lệnh này mktempđược sử dụng trong các hệ điều hành phái sinh Linux và BSD để tạo các tệp hoặc thư mục tạm thời. Tên tệp và thư mục tạm thời có thể được đặt tên bằng “mẫu” do người dùng xác định. Tiện ích này được cài đặt theo mặc định trên các bản phân phối Linux chính.

Sử dụng mktempkhác với phương pháp đặt tên tệp truyền thống bằng PID trong tập lệnh. Việc sử dụng mktemplệnh cho phép quy ước đặt tên trong tập lệnh có thể được tập lệnh kiểm soát và ít có khả năng xung đột với tệp tạm thời hiện có, do đó tránh ghi đè tệp tạm thời vô ý hoặc các xung đột không mong muốn khác.

Hướng dẫn này trình bày cách mktempsử dụng chỉ thị hữu ích và cách sử dụng mẫu để chỉ đạo việc hình thành tên tệp.

Tệp và thư mục tạm thời của Linux: Các trường hợp sử dụng

Các tệp tạm thời do người dùng tạo ra mktempthuộc sở hữu của người dùng; thường được gọi từ các tập lệnh để lưu trữ dữ liệu, trong và giữa các ứng dụng được sử dụng trong tập lệnh. Một cách làm tốt là tạo các tệp tạm thời trong thư /tmpmục do hệ điều hành tạo ra.

Lệnh này mktempkhác với touchlệnh. mktemptạo các tệp hoặc thư mục linh hoạt. Lệnh này có các tính năng đảm bảo tên tệp là duy nhất, được tạo ngẫu nhiên và giảm ghi đè vô tình hoặc thao tác không đúng cách đối với tệp hoặc thư mục hiện có. Lệnh này touchsửa đổi dấu thời gian của tệp và theo truyền thống được sử dụng để tạo tệp vĩnh viễn, trong khi mktempđược sử dụng để tạo tệp tạm thời.

Một tập lệnh hoặc lệnh gọi độc lập mktempcũng có thể sử dụng một mẫu tạo thành tên của các tệp tạm thời và/hoặc thư mục bắt đầu bằng mktemp.

Trường hợp sử dụng #1 – Tạo một tệp tạm thời đơn giản

Gọi mktempmà không có đối số sẽ tạo một tệp ngẫu nhiên trong /tmpthư mục. Thư /tmpmục là thư mục mặc định để tạo tệp trừ khi được chỉ định khác.

mktemp
/tmp/tmp.df8N4EE9Y

Trường hợp sử dụng #2 – Tạo một thư mục tạm thời đơn giản

Lệnh mktempcó -dđối số sẽ tạo một thư mục tạm thời trong /tmpthư mục đó.

mktemp -d
/tmp/tmp.df8N4EE9Y

Theo mặc định, mktemplệnh tạo ra một tên ngẫu nhiên có thể tùy chỉnh bằng cách truyền tham số mẫu. Mẫu yêu cầu tối thiểu ba ký tự ‘X’ được chỉ định để chỉ ra những vị trí sẽ được các ký tự ngẫu nhiên chiếm giữ.

tmp_dir=$(mktemp -d -t test-XXXX)
echo $tmp_dir
/tmp/test-Xsd2ewsd

Lệnh này mktempsử dụng biến môi trường hiện được thiết lập $TMPDIRđể đặt một thư mục tạm thời mới. $TMPDIRGiá trị mặc định được tìm thấy bởi hầu hết các tập lệnh shell là thư /tmpmục hoặc lựa chọn khác là /var/tmpthư mục. Sự khác biệt giữa /tmpvà /var/tmplà dữ liệu được lưu trữ trong /var/tmpthư mục được bảo toàn giữa các lần khởi động lại và bền bỉ hơn dữ liệu trong /tmp/var/tmpthường không bị ảnh hưởng bởi systemctlcác phần mở rộng có thể kiểm soát các tệp tạm thời.

Cách mktemp được sử dụng bởi quản trị viên hệ thống

Lệnh này mktempkhai báo một tệp hoặc thư mục rõ ràng được cho là tạm thời. Mặc dù thư /tmpmục thường được sử dụng cho các tệp tạm thời, các ứng dụng được nhiều người dùng và/hoặc các quy trình tương tự sử dụng có thể tạo các tệp bằng cùng một tên tệp. Ví dụ: một quy trình duy nhất có thể thực thi độc lập để tạo một tệp có thể đọc, ghi, cập nhật hoặc xóa cùng một tệp. Điều này có thể gây ra xung đột tên tệp, đòi hỏi phải có nỗ lực quản trị để khắc phục sự cố. Tuy nhiên, khi một tập lệnh gọi mktemp, một tên tệp duy nhất được tạo ra, không có khả năng xung đột với tên tệp hoặc thư mục hiện có có cùng tên.

Bạn có thể sử dụng mktempđộc lập hoặc trong tập lệnh để:

  • Tạo các tập tin và/hoặc thư mục tạm thời
  • Kiểm tra xem có thể tạo tệp tạm thời và/hoặc thư mục không
  • Tạo tên tệp hoặc thư mục theo một mẫu nhận dạng cụ thể với các ký tự ngẫu nhiên được thêm vào được tạo từ một mẫu được chỉ định khi gọi
  • Thay đổi TMPDIRbiến môi trường thành một thư mục tùy chỉnh khác với thư mục mặc định /tmp, với một mẫu tùy chọn được tạo từ mẫu được gán khi gọi.
  • Bảo vệ các tệp và thư mục tạm thời theo quyền sở hữu của người dùng tạo ra lệnh, để các mục đích sử dụng khác của tệp và thư mục tạm thời được tạo ra được bảo vệ khỏi các tập lệnh, quy trình khác và xung đột tên tệp do người dùng khác gây ra.

Cách tạo một tập tin tạm thời

Cú pháp chính xác mktempđược mô tả trong các trang man(mktemp) . Hầu hết các hệ thống tuân thủ POSIX đều sử dụng cú pháp giống như được hiển thị trong bảng bên dưới:

Yêu cầuSự miêu tả
mktempTạo một tập tin tạm thời trong thư mục tạm thời mặc định
mktemp -VHiển thị phiên bản mktemp rồi thoát
mktemp -dTạo một thư mục trong thư mục tạm thời mặc định
mktemp -p(ngụ ý -t) Sử dụngdưới dạng tiền tố; -ttùy chọn này tạo ra một đường dẫn trong thư mục tạm thời mặc định (như được chỉ định bởi biến môi trường $TMPDIR).
mktemp -qThực hiện lệnh một cách lặng lẽ, nghĩa là không có thông báo thành công hay thất bại
mktemp -tTạo một tên tệp tạm thời, sử dụng mẫu, để đặt trong /tmpthư mục trừ khi $TMPDIRthư mục tồn tại và nếu tồn tại, hãy tạo tệp trong thư mục được chỉ định bởi giá $TMPDIRtrị

Cách tạo thư mục tạm thời

Khi mktempđược gọi với -dđối số, nó sẽ tạo một thư mục trong /tmp. Nếu có biến môi trường $TMPDIR, thì nó sẽ tạo một thư mục trong $TMPDIRthư mục đó.

mktemp -d
/tmp/tmp.sdasdas

Cách tạo mẫu tệp tạm thời

Có thể sử dụng mẫu tệp tạm thời để phân biệt nguồn hoặc tiêu chí bằng cách đặt tên tệp bằng mẫu. Mẫu mktempsử dụng chữ cái “X” để thay thế bằng một ký tự ngẫu nhiên thay cho “X” khi được sử dụng làm đối số. Tối đa mười ký tự “X” liên tiếp, tổng cộng mười vị trí có thể được ngẫu nhiên theo cách này.

Lệnh sau được sử dụng để tạo mẫu tệp, trong đó “X” được thay thế bằng các ký tự ngẫu nhiên:

mktemp -t random-XXXXXXXX
/var/folders/gh/dbgxkdts6414dlmnflxbp2h80000gn/T/random-XXXXXXXX.4b5Dfmg4

Lệnh sau sử dụng đối -dsố để mktemptạo ra một thư mục theo cách tương tự.

mktemp -d random-XXXXXXXX
random-13EL42PM

Bạn có thể xem thư mục tạm thời mới tạo ở trên bằng ls -lalệnh.

Bạn cũng có thể thêm hậu tố vào mẫu khi tạo thư mục như thể hiện trong lệnh bên dưới:

mktemp -d --suffix TODAY
/tmp/tmp.lmnflxbTODAY

Biến môi trường TMPDIR

Biến TMPDIRmôi trường cho phép bạn chỉ định một đường dẫn khác để lưu trữ các tệp tạm thời. Biến này được lưu trữ trong danh sách có sẵn cho các ứng dụng và tập lệnh shell. TMPDIRBiến này cho phép nhiều ứng dụng biết nơi quản trị viên đã chỉ định lưu trữ các thư mục tạm thời, đặc biệt nếu chỉ định khác với mục đích sử dụng mặc định của thư /tmpmục. /tmpTrong một số trường hợp, thư mục có thể được đặt trên phương tiện đặc biệt như SSD vì mục đích tăng tốc. Để hiểu thêm về biến môi trường, hãy xem hướng dẫn của Linode về Thiết lập và Sử dụng Biến môi trường Linux .

Trên một số hệ thống Linux, TMPDIRtệp được gọi hoặc khai báo bởi systemd-tempfiles, một daemon có thể được thiết lập để dọn dẹp tệp định kỳ theo ngày tạo hoặc các thuộc tính khác không được đề cập trong hướng dẫn này.

Nếu TMPDIRbiến bị thay đổi, giá trị của nó chỉ có thể tồn tại trong phiên hiện tại của người dùng hoặc PID. Khi bạn khởi động lại hệ thống, nó có thể mặc định là /tmp, hoặc cài đặt được gọi bởi systemd-tempfiles.conftệp. Khi bạn khởi động lại hệ thống hoặc phiên, hoặc bất kỳ sự kiện nào khác, nó TMPDIRđược khôi phục về giá trị trước đó.

Đối mktemp --tmpdirsố thay đổi đích đến tương ứng với giá trị được thiết lập bởi giá $TMPDIRtrị được thiết lập trong môi trường.

Trong lệnh ví dụ bên dưới, giá $TMPDIRtrị được thay đổi thành một thư mục con và mktempáp dụng các tệp của thư mục đó vào đường dẫn mới:

$TMPDIR=(mktemp -d)

Mẫu và các đối số khác cũng có thể được thêm vào để thay đổi giá $TMPDIRtrị. Một ví dụ về thư mục được mã hóa theo ngày được hiển thị bên dưới.

root@localhost:/home# tmpdir=$(mktemp -d -t ci-$(date +%Y-m-%d-%H-%M-%S)-XXXXXXXXXX)
root@localhost:/home# echo $tmpdir
/var/folders/gh/dbgxkdts6414dlmnflxbp2h80000gn/T/ci-2022-m-28-22-46-25-XXXXXXXXXX.6lR6R7Az

Cách xóa các tập tin tạm thời của hệ thống Linux của bạn

Việc dọn dẹp các tệp tạm thời phụ thuộc vào phiên bản Linux bạn đang sử dụng. Các hệ thống Linux hiện tại sử dụng systemd sử dụng một quy trình có tên là systemd-tempfiles . Tùy thuộc vào phiên bản hệ thống và cách triển khai, các tệp và quy trình được sử dụng để dọn dẹp các tệp tạm thời và thư mục có cấu hình khác nhau.

Một thói quen tốt là thường xuyên xóa các tệp tạm thời trong /tmpthư mục hệ thống của bạn. Điều này chiếm không gian không cần thiết có thể được sử dụng cho dữ liệu hoặc quy trình khác. Nói chung, các tệp trong thư /tmpmục sẽ bị hệ thống của bạn xóa sau mỗi lần khởi động lại.

Ghi chú: Các tệp tạm thời trong /var/tmpthư mục thường được lưu giữa các lần khởi động lại hệ thống và được cung cấp cho các chương trình yêu cầu tệp tạm thời. Dữ liệu được lưu trữ trong đó /var/tmpbền hơn dữ liệu trong /tmpthư mục.

Phần sau đây mô tả những cách khác nhau để bạn có thể xóa các tệp tạm thời khỏi hệ thống.

Đối với người dùng hiện đang đăng nhập, khi người dùng không có tiến trình nào khác đang hoạt động, thư /tmpmục sẽ bị xóa bằng cách gọi lệnh sau:

rm -rf /tmp

Lệnh này xóa tất cả /tmpcác tệp theo cách đệ quy thông qua các thư mục con và buộc xóa tất cả các tệp mà người dùng có quyền. Nếu người dùng là root hoặc sudo, thì tất cả các tệp có thể bị xóa và điều này có thể gây gián đoạn. Tùy thuộc vào quyền của người dùng hiện đang đăng nhập, lệnh rm -rf /tmpcó thể hủy các tệp và thư mục đang được sử dụng.

Bạn cũng có thể sử dụng findlệnh dựng sẵn có trong hầu hết mọi bản phân phối Linux. findLệnh này cho phép bạn tìm các tệp và thư mục đáp ứng một điều kiện cụ thể. Ví dụ, findlệnh sau đây tìm và xóa tất cả các tệp tạm trong thư /tmpmục.

sudo find /tmp -type f -delete

Lệnh này trapcó thể được sử dụng để quản lý việc xóa các tệp được tạo trong một tập lệnh. Khi shell hoàn tất quá trình thực thi, lệnh trapcho phép xóa các tệp tạm thời đã chỉ định.

Ví dụ, nếu tập lệnh của bạn tạo một tệp tạm thời và bạn muốn xóa tệp đó tại mỗi vị trí bạn thoát khỏi tập lệnh, bạn có thể thêm traplệnh vào đầu tập lệnh để xóa tệp đó khi thoát:

tempfile=/tmp/tmpdata
trap "rm -f $tempfile" EXIT

Thông tin thêm

Bạn có thể muốn tham khảo các nguồn sau để biết thêm thông tin về chủ đề này. Mặc dù chúng tôi cung cấp với hy vọng rằng chúng sẽ hữu ích, nhưng xin lưu ý rằng chúng tôi không thể đảm bảo tính chính xác hoặc tính kịp thời của các tài liệu được lưu trữ bên ngoài.