Trong Linux và các hệ thống liên quan đến Unix khác, chỉ có hai ký tự không thể xuất hiện trong tên của tệp hoặc thư mục và đó là NUL '\0'
và dấu gạch chéo '/'
. Dấu gạch chéo, tất nhiên, có thể xuất hiện trong một tên đường dẫn, tách các thành phần thư mục.
Tin đồn 1 kể rằng Steven Bourne (của 'vỏ' nổi tiếng) đã có một thư mục chứa 254 tác phẩm, một cho mỗi chữ cái (mã ký tự) có thể xuất hiện trong một tên tập tin (không bao gồm /
, '\0'
; tên .
là thư mục hiện hành, tất nhiên ). Nó được sử dụng để kiểm tra vỏ Bourne và thường xuyên rèn luyện các chương trình không mong muốn như các chương trình sao lưu.
Những người khác đã bao gồm các quy tắc Windows.
Lưu ý rằng MacOS X có hệ thống tệp không phân biệt chữ hoa chữ thường.
1 Chính Kernighan & Pike trong
Thực hành lập trình đã nói nhiều như trong Chương 6, Kiểm tra, §6.5 Kiểm tra căng thẳng:
Khi Steve Bourne đang viết shell Unix của mình (được gọi là shell Bourne), anh ta đã tạo một thư mục gồm 254 tệp có tên một ký tự, một cho mỗi giá trị byte ngoại trừ '\0'
và gạch chéo, hai ký tự không thể xuất hiện trong Unix tên tập tin. Ông đã sử dụng thư mục đó cho tất cả các cách kiểm tra khớp mẫu và mã thông báo. (Tất nhiên, thư mục kiểm tra được tạo bởi một chương trình.) Trong nhiều năm sau đó, thư mục đó là nguyên nhân của các chương trình đi bộ trên cây; nó đã kiểm tra chúng để phá hủy.
Lưu ý rằng thư mục phải có các mục nhập .
và ..
do đó, có thể cho rằng đó là 253 tệp (và 2 thư mục), hoặc 255 mục nhập tên, thay vì 254 tệp. Điều này không ảnh hưởng đến hiệu quả của giai thoại hoặc thử nghiệm cẩn thận mà nó mô tả.
echo abc > "ab.;,=[1]"