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 mktemp
khá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 mktemp
lệ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 mktemp
sử 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 mktemp
thuộ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ư /tmp
mục do hệ điều hành tạo ra.
Lệnh này mktemp
khác với touch
lệnh. mktemp
tạ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 touch
sử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 mktemp
cũ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 mktemp
mà không có đối số sẽ tạo một tệp ngẫu nhiên trong /tmp
thư mục. Thư /tmp
mụ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 mktemp
có -d
đối số sẽ tạo một thư mục tạm thời trong /tmp
thư mục đó.
mktemp -d
/tmp/tmp.df8N4EE9Y
Theo mặc định, mktemp
lệ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 mktemp
sử 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. $TMPDIR
Giá trị mặc định được tìm thấy bởi hầu hết các tập lệnh shell là thư /tmp
mục hoặc lựa chọn khác là /var/tmp
thư mục. Sự khác biệt giữa /tmp
và /var/tmp
là dữ liệu được lưu trữ trong /var/tmp
thư 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/tmp
thường không bị ảnh hưởng bởi systemctl
cá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 mktemp
khai 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ư /tmp
mụ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
TMPDIR
biế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ầu | Sự miêu tả |
---|---|
mktemp | Tạo một tập tin tạm thời trong thư mục tạm thời mặc định |
mktemp -V | Hiển thị phiên bản mktemp rồi thoát |
mktemp -d | Tạ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ố; -t tù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 -q | Thự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 -t | Tạo một tên tệp tạm thời, sử dụng mẫu, để đặt trong /tmp thư mục trừ khi $TMPDIR thư 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á $TMPDIR trị |
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 $TMPDIR
thư 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 mktemp
sử 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 -d
số để mktemp
tạ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 -la
lệ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 TMPDIR
mô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. TMPDIR
Biế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ư /tmp
mục. /tmp
Trong 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, TMPDIR
tệ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 TMPDIR
biế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.conf
tệ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 --tmpdir
số thay đổi đích đến tương ứng với giá trị được thiết lập bởi giá $TMPDIR
trị được thiết lập trong môi trường.
Trong lệnh ví dụ bên dưới, giá $TMPDIR
trị đượ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á $TMPDIR
trị. 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 /tmp
thư 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ư /tmp
mụ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/tmp
thư 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/tmp
bền hơn dữ liệu trong /tmp
thư 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ư /tmp
mụ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ả /tmp
cá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 /tmp
có 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 find
lệnh dựng sẵn có trong hầu hết mọi bản phân phối Linux. find
Lệ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ụ, find
lệnh sau đây tìm và xóa tất cả các tệp tạm trong thư /tmp
mục.
sudo find /tmp -type f -delete
Lệnh này trap
có 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 trap
cho 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 trap
lệ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.