Nguồn gốc của .DS_Store (2006)
(arno.org).DS_Storelà viết tắt của Desktop Services Store, xuất hiện khi Finder dành cho Mac OS X được làm lại vào năm 1999- Khi đó codebase của Finder đã khoảng 8 năm tuổi, nên ngay cả thay đổi nhỏ cũng tốn nhiều chi phí và làm hỏng các chức năng tưởng như không liên quan, vì vậy cần viết lại toàn bộ
- Finder mới tách giao diện người dùng khỏi backend; backend phụ trách liệt kê tệp, theo dõi thay đổi, và metadata như vị trí biểu tượng cùng thiết lập thư mục
- Backend của Finder trở thành ứng viên API công khai có thể dùng cả bên ngoài Finder, và cùng với phương án đổi tên Finder thành “Desktop”, nó được đặt tên là Desktop Services
.DS_Storeban đầu chỉ nên được tạo khi thay đổi thiết lập hiển thị hoặc vị trí biểu tượng, nhưng do lỗi, trong nhiều trường hợp chỉ cần truy cập thư mục là nó cũng được tạo
Sự ra đời của tên gọi Desktop Services Store
- Vào năm 1999, khi Apple đang xây dựng lại Finder cho Mac OS X, codebase Finder hiện có đã khoảng 8 năm tuổi
- Việc thay đổi đòi hỏi nỗ lực kỹ thuật lớn
- Các thay đổi thường làm hỏng 2–3 chức năng tưởng như không liên quan
- Finder cho Mac OS X được quyết định viết lại từ đầu
- Trong quá trình viết lại, giao diện người dùng của Finder được tách khỏi backend chức năng cốt lõi
- Tên nội bộ lần lượt là
Finder_FEvàFinder_BE - Backend phụ trách liệt kê tệp, theo dõi thay đổi hệ thống tệp, xử lý metadata, vị trí biểu tượng và thiết lập thư mục
- Tên nội bộ lần lượt là
- Vì backend của Finder có thể hữu ích cả bên ngoài Finder, đã xuất hiện kế hoạch một ngày nào đó cung cấp nó dưới dạng API công khai
- Dựa trên kinh nghiệm từng đặt các tên
Icon ServicesvàNavigation Services, cái tênDesktop Servicesđược chọn - Khi đó, phương án đổi tên Finder thành “Desktop” cũng đang được xem xét
.DS_Storelà tên bắt nguồn từ “Desktop Services Store”- Dấu
.ở đầu được chọn để nó được xem là tệp ẩn trên các hệ điều hành họ Unix và Mac OS
- Dựa trên kinh nghiệm từng đặt các tên
Điều kiện tạo và ảnh hưởng về sau
- Tên gọi có thể đã mang tính mô tả hơn, nhưng sau khi đã được dùng rộng rãi thì trở nên khó thay đổi
- Tệp
.DS_Storeban đầu chỉ nên được tạo khi người dùng điều chỉnh thiết lập hiển thị của thư mục hoặc chỉ định thủ công vị trí biểu tượng- Tuy nhiên, do một lỗi chưa được sửa, tệp này bị tạo ra quá mức
- Trên thực tế, gần như chắc chắn rằng chỉ cần truy cập một thư mục cũng sẽ tạo ra tệp
.DS_Store
Finder_BE, tức Desktop Services, cũng được dùng bên ngoài FinderNavigation Services, tức hộp thoại mở/lưu, về sau cũng sử dụng nó- Trong các bản phát hành đầu tiên của Mac OS,
Navigation Serviceschưa sử dụng nó Desktop Services APIvẫn chưa được công khai hoàn toàn
1 bình luận
Ý kiến trên Hacker News
Ngoài tệp này ra, trước đây cũng có những lúc thấy rối vì khái niệm fork trong hệ thống tệp của Mac
Ở đây fork không phải là
fork()mà là cấu trúc trong đó thành phần dữ liệu và thành phần tài nguyên của một tệp tồn tại thành cặp; một bên được xem như metadata, một bên như nội dung tệpTrên Unix, metadata nằm ở phía inode của khối thư mục và không phải là định dạng gắn riêng với từng tệp, nên các cấu trúc như
tar,cpio,zipphải biểu diễn riêng phần nàyĐể triển khai hỗ trợ tệp tương thích Mac trên Unix, cần coi resource fork như dữ liệu hạng nhất, và cách tự nhiên là đặt một tệp kiểu
.filecạnh mỗi tệpKhi đó, khối inode của UFS không thể ánh xạ mọi thuộc tính của resource fork, và trong đó còn có cả những thứ như biểu tượng. Các hệ thống tệp hiện đại hơn có cấu trúc khối thư mục lớn hơn nên xử lý kiểu dữ liệu này tốt hơn
Đúng hơn nên xem nó như có hai bộ nội dung tệp, một gọi là
data, một gọi làrsrc, và trên đĩa thì cả hai đều chỉ là các luồng byteTuy vậy, resource fork thường lưu cấu trúc các mẩu dữ liệu nhỏ được lập chỉ mục bằng mã kiểu 4 byte và ID số nguyên 2 byte
Các ứng dụng Mac 68K đặt gần như mọi thứ vào resource fork: mã lệnh, menu, hộp thoại, hình ảnh, biểu tượng, chuỗi ký tự, v.v.; vì thế nếu sao chép ứng dụng Mac đời cũ sang PC hay Unix mà không chuyển đổi thì nó sẽ trông như một tệp rỗng
Vì vậy, để gửi ứng dụng Mac qua mạng thì phải mã hóa nó thành một luồng duy nhất; ban đầu dùng BinHex
.hqxhoặc MacBinary.bin, về sau dùng kho lưu trữ Stuffit.sitLý do cấu trúc này không khớp với inode là vì về cơ bản nó giống như cố nhét cả một tệp hoàn chỉnh vào đó. Bản thân cấu trúc resource fork có giới hạn 16MB, nhưng nếu coi nó là một luồng dữ liệu riêng thì có thể làm lớn tùy ý
Ví dụ, plugin Escape Velocity dùng các kiểu tài nguyên tùy biến và có thể chỉnh sửa dễ dàng bằng plugin ResEdit
https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(AD...
Những thứ như file type, creator code, lock, invisible, bozo bit, v.v. luôn được lưu trong hệ thống tệp
Có thể xem mô tả định dạng đĩa MFS, ví dụ: https://wiki.osdev.org/MFS#File_Directory_Blocks
Việc tạo DVD khởi động cho Mac cũng không hề đơn giản
Tôi nhớ trước đây từng có cách tắt việc tạo
.DS_Store, nhưng Apple đã bỏ nó đi, và tôi hoàn toàn không hiểu vì sao họ lại thay đổi như vậyCuối cùng tôi còn tự viết hẳn một chương trình theo dõi toàn bộ hệ thống tệp rồi xóa
.DS_Storengay khi nó xuất hiện[0] https://github.com/slmjkdbtl/dskill
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUEhttps://support.apple.com/en-us/102064
Tôi không nhớ từng có cách tắt trên volume cục bộ
.ở thư mục gốc của hệ thống tệpSau khi
.DS_Stoređược chấp nhận, có vẻ như các kỹ sư khác cũng dễ dàng được duyệt thêm những thứ như.fseventsd,.Spotlight-V100Không biết tôi đã thấy bao nhiêu hệ thống tệp bị “ô nhiễm” bởi các tệp này rồi. Chủ yếu là thẻ SD hay USB flash, nhưng đôi lúc còn có những trường hợp kinh khủng hơn nhiều
Thường trong các tình huống đó tôi sẽ chạy
rm -rf .DS_Store .Trashes ._.Trashes .fseventsd .Spotlight-V100, rồi nhanh chóng tháo ổ ra trước khi có thứ gì khác kịp được ghi vàoĐặc biệt khi phải sao chép dữ liệu từ một đĩa đang xuống cấp, điều cuối cùng bạn muốn là nó bắt đầu lập chỉ mục toàn bộ và ghi dữ liệu lên đĩa
Nghiêm túc mà nói, chuyện này nên có tùy chọn cấu hình
find / -name ".DS_Store" -exec rm {} \; 2>/dev/nullChỉ cần đưa cái này vào script rồi thêm vào
crontablà được.DS_Storetrông đúng là một thiết kế khá xui xẻo. Dù nó có mục đích và cũng có nhiều cách lách, nhưng trên thực tế nó đã trở thành thứ phát tán rác tệp tới 99% những người phải chạm mặtXét về độ hoàn thiện trải nghiệm người dùng thì điều này không giống Apple cho lắm
Tôi lớn lên khi dùng cùng lúc System 7.5, OS X và Windows, và Mac vốn là phía không bắt người dùng phải nhìn thấy những chi tiết triển khai như tệp không cần thiết, định dạng tệp hay “máy tính thực sự hoạt động bên trong ra sao”
Vì vậy việc tệp này mọc ra khắp nơi khiến tôi thấy rất lạ, vì nó hoàn toàn không khớp với mental model của tôi về Mac
.DS_Storetrừ khi họ dùng terminalFinder giờ đây không hiển thị chúng ngay cả khi bật chế độ hiện tệp ẩn
Nhưng khi chia sẻ tệp từ Mac cho người dùng Windows thì nó thực sự rất chướng mắt, và tôi nghĩ nó có thể tạo ấn tượng ban đầu xấu với những ai đang cân nhắc chuyển sang Mac
Tôi không hiểu vì sao nó phải nằm ngay trong cùng thư mục. Chẳng phải hệ điều hành có thể giữ một cơ sở dữ liệu nhỏ nào đó ở đâu đó và tham chiếu từng đường dẫn sao?
Tôi đồng ý với ý rằng “chỉ nên tạo khi người dùng thực sự chỉnh cài đặt hiển thị hoặc tự tay sắp vị trí biểu tượng trong thư mục”. Nhưng trên thực tế, gần như chỉ cần ghé qua thư mục là
.DS_Storechắc chắn sẽ được tạo raĐây là điều tôi khó chịu nhất ở Finder
Khả năng tùy biến hình dạng và kích thước của từng cửa sổ thư mục như Finder của Classic Mac OS thực sự là một tính năng rất hay
Nhưng chỉ cần đi ngang qua cùng thư mục đó trong cửa sổ trình duyệt là phần lớn tùy biến ấy sẽ bị ghi đè bằng cài đặt của cửa sổ trình duyệt, dù bạn chẳng hề thay đổi gì
Nếu nó dễ bị phá hỏng như vậy thì việc cho phép tùy biến tuyệt vời đó cũng chẳng còn nhiều ý nghĩa
Tôi mở thư mục Applications bằng phím tắt toàn cục, nhưng dù có muốn chỉnh giao diện cửa sổ đó thì cũng vô ích. Mỗi lần bấm phím tắt tôi đều không biết mình sẽ thấy gì, và nó cứ liên tục bị đặt lại
Lý do là Finder không có cách đặt cấu hình cửa sổ trình duyệt mặc định. Thay vào đó, nó ghi lại cài đặt trình duyệt hiện tại vào từng thư mục bạn ghé qua, điều này thật sự rất bực mình
Việc cùng một cửa sổ bật lên phía trước đúng y như trạng thái cuối cùng bạn để lại thật tuyệt, và tôi vẫn nhớ điều đó
cmd-shift-A, và mở thư mục Utilities bằngcmd-shift-UTôi không phải người dùng Mac, nên mỗi khi trong file
.tgztải từ những nơi như GitHub có đầy.DS_Storethì tôi luôn thấy khá bựcCó vẻ macOS chắc dùng GNU
tar, nên việc họ không sửa hay cấu hình mặc định để bỏ qua.DS_Storekhá là bất ngờNếu export
COPYFILE_DISABLE=truethìtarsẽ bỏ qua các tệp.DS_StoreĐáng để nhắc tới cách tắt mặc định việc tạo tệp
.DS_Storekhi duyệt network volume. Nếu không, chỉ cần xem qua bằng Finder thôi cũng làm thay đổi thời gian sửa đổi của thư mục, và điều đó thực sự tệ nhấthttps://old.reddit.com/r/MacOS/comments/lvju40/comment/gpc8i...
.DS_Storehay không thì trông như không có, nhưng vào terminal thì hóa ra nó vẫn ở đóGiờ không thể tin tính năng hiện tệp ẩn của Finder nữa. Thay vì hiển thị mọi tệp ẩn, nó chỉ hiện những tệp ẩn mà Finder cho rằng người dùng cần phải quan tâm
Share mạng của tôi là Synology cục bộ nên không thành vấn đề lớn, nhưng ở chỗ làm thì những tệp này từng tạo ra một mớ khá lộn xộn
Còn có cả các tệp chấm gạch dưới (
._). Có cách nào để vô hiệu hóa việc tạo các tệp này trên network share không?[0] https://superuser.com/questions/212896/is-there-any-way-to-p...
May là nếu dùng Dired của Emacs làm trình quản lý tệp thì có thể dễ dàng giả vờ như những tệp nhỏ phiền toái này, cùng các tệp do quá trình chạy LaTeX tạo ra, không hề tồn tại
(setq dired-omit-mode tdired-omit-files "^.+\\.\\(DS_Store\\|aux\\|bak\\|bbl\\|bcf\\|blg\\|dvi\\|ent\\|idx\\|ilg\\|ind\\|log\\|orig\\|out\\|pdf-view-restore\\|pdf#\\|reg\\|run.xml\\|synctex.gz\\|toc\\)$")