Đối với các tiện ích GNU, tài liệu đầy đủ có trong info
trang, nơi bạn có thể đọc:
-f
Làm ngơ; để tương thích với các phiên bản BSD của 'touch'.
Xem các trang người đàn ông BSD lịch sử để liên lạc , nơi -f
để buộc liên lạc.
Nếu bạn nhìn vào nguồn của các BSD cũ đó, không có utimes()
cuộc gọi hệ thống, vì vậy touch
sẽ mở tệp ở chế độ đọc + ghi, đọc một byte, tìm lại và viết lại để cập nhật lần truy cập cuối cùng và thời gian sửa đổi lần cuối .
Rõ ràng, bạn cần cả quyền đọc và ghi ( touch
sẽ tránh cố gắng làm điều đó nếu bị access(W_OK|R_OK)
trả về sai ). -f
đã cố gắng khắc phục điều đó bằng cách tạm thời thay đổi các quyền tạm thời thành 0666 !
0666 có nghĩa là đọc và viết cho phép mọi người. Nó phải là như vậy (như với một sự cho phép hạn chế hơn như 0600 vẫn có thể cho phép chạm ) có thể có nghĩa là trong cửa sổ ngắn đó, các quy trình có thể đọc hoặc ghi quyền vào tệp không thể nữa , phá vỡ chức năng .
Tuy nhiên, điều đó có nghĩa là các quy trình không có quyền truy cập vào tệp bây giờ có cơ hội ngắn để mở tệp, phá vỡ bảo mật .
Đó không phải là một điều rất hợp lý để làm. touch
Triển khai hiện đại không làm điều đó. Kể từ đó, utime()
cuộc gọi hệ thống đã được giới thiệu, cho phép thay đổi thời gian sửa đổi và truy cập riêng biệt mà không phải trộn lẫn với nội dung của các tệp (có nghĩa là nó cũng hoạt động với các tệp không thường xuyên) và chỉ cần truy cập ghi cho điều đó.
GNU touch
vẫn không thất bại nếu thông qua -f
tùy chọn, mà chỉ bỏ qua cờ. Theo cách đó, các tập lệnh được viết cho các phiên bản BSD cũ đó không bị lỗi khi được chuyển sang các hệ thống GNU. Ngày nay không có nhiều liên quan.
-f
tùy chọn chỉ là bỏ qua. Có thể đọc qua trình phân tích cú pháp đối số và đó là nó.