Linux Cả hai trường hợp nhạy cảm và trường hợp không nhạy cảm và luôn bất tiện?


8

Tôi đang sử dụng Ubuntu 10 và tôi nhanh chóng phát hiện ra rằng nó rất nhạy cảm khi nó bất tiện như vậy (như khi tự động hoàn thành các đường dẫn tệp với tab trong thiết bị đầu cuối) nhưng cũng không nhạy cảm khi sử dụng các lệnh MV và CP (cũng bất tiện khi cố gắng sao chép tên tệp với một trường hợp khác).

Về bản chất, tôi cần lệnh này để làm việc nhưng không được.

cp ./filename.txt ./FileName.txt

Tôi chỉ kết thúc với filename.txt:

nhập mô tả hình ảnh ở đây

Làm thế nào tôi có thể nhận được cùng một tệp với một trường hợp khác nhau nhưng cùng tên trong cùng một thư mục?

EDIT: Nhận xét của Maerics bên dưới đã giúp tôi nhớ rằng tôi thực sự đang phát triển trên một ổ đĩa chia sẻ Windows chạy NTFS, đó là trường hợp KHÔNG nhạy cảm. Đây là lý do tại sao mặc dù CP và MV không phát sinh lỗi, tệp không được sao chép (hoặc nhiều khả năng là sao chép IS, nhưng Windows thay thế lỗi đã tồn tại).


1
Điều đó thật lạ: Tôi đã thử lệnh này mà không ngạc nhiên ... Tôi không có vấn đề gì với các trường hợp khác nhau trong cùng một thư mục.
Denys Séguret

5
Lưu ý rằng hành vi này có thể phụ thuộc vào loại hệ thống tệp mà các tệp này tồn tại. Ví dụ, FAT32 có thể không phân biệt các tên tệp này.
maerics

Ôi. Đây là câu trả lời Maerics. Các tập tin được lưu trữ trên một ổ đĩa gắn kết đang chạy NTFS. Tôi hoàn toàn quên mất vì tôi đang phát triển đa nền tảng rằng tôi đang sử dụng Windows để lưu trữ các tệp.
anon58192932

1
@advocate: NTFS phân biệt chữ hoa chữ thường, vì vậy bạn sẽ có thể gắn kết nó theo cách bạn muốn. Tuy nhiên, câu hỏi đặt ra là đây có phải là điều bạn muốn không :)
0xC0000022L

Thử nghiệm cho thấy Windows 7 dường như không phân biệt chữ hoa chữ thường.
anon58192932

Câu trả lời:


4

NTFS 1 và VFAT không phân biệt chữ hoa chữ thường, chúng chỉ bảo toàn chữ hoa chữ thường. Điều đó có nghĩa là nếu bạn tạo một tệp có tên FileName.txt, hệ thống tệp sẽ giữ nguyên tên trường hợp hỗn hợp, nhưng bạn có thể truy cập tệp với bất kỳ trường hợp kết hợp nào của cùng một chữ cái, như FILENAME.TXT, filename.txthoặc fileNAME.txt. Điều này giải thích bạn không thể có hai tệp có cùng một cách viết với chỉ một biến thể của chữ hoa / chữ thường trong cùng một thư mục.

Hệ thống tệp xuất SMB phải thực hiện hành vi này để không gây nhầm lẫn cho các máy khách Windows.

ZFS có thể được cấu hình để hành xử theo cách đó với thuộc casesensitivity=mixedtính.

1 Về mặt kỹ thuật, NTFS là trường hợp nhạy cảm nhưng hệ điều hành gắn hệ thống tập tin thuộc loại này hầu như luôn luôn được cấu hình để ẩn tính năng cơ bản này và chỉ giữ lại trường hợp. Tuy nhiên Windows có thể kích hoạt tính năng nhạy cảm với trường hợp thay đổi chủ chốt đăng ký này HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\dword:ObCaseInsensitivevà Linux có thể gắn kết các hệ thống tập tin với các hành vi khác nhau tùy thuộc vào ignore_casewindows_namesgắn kết tùy chọn.


2
NTFS hoàn toàn trường hợp nhạy cảm. Tuy nhiên, Win32 không phân biệt chữ hoa chữ thường, vì vậy, vì nhiều lý do thực tế, hầu hết mọi người đều cho rằng NTFS cũng không.
Cody Grey

@CodyGray Vâng, bạn nói đúng, cảm ơn vì đã chỉ ra tính năng này. Hệ thống tệp NTFS cơ bản cho phép các tên tệp khác nhau chỉ khác nhau tùy theo từng trường hợp.
jlliagre

11

Bạn có thể kích hoạt hoàn thành tên tệp không phân biệt chữ hoa chữ thường trong bash bằng cách thêm dòng sau vào $HOME/.inputrc:

set completion-ignore-case On

Về tên tệp: Điều này phụ thuộc vào hệ thống tệp. Trên các hệ thống tệp Linux, sẽ không có vấn đề gì. Trên các hệ thống tệp khác, hành vi có thể được kiểm soát bằng các tùy chọn cho lệnh mount. Xem trang hướng dẫn mount(8)để biết thêm thông tin về các tùy chọn có sẵn để gắn kết.


Bạn nói đúng. Hệ thống tệp bên dưới không phải là hệ thống tệp Linux, vì vậy trong khi CP và MV hoạt động, Windows chọn giữ tệp đã có sẵn (khi ghi đè vì trường hợp INensens nhạy) khiến nó xuất hiện trong thiết bị đầu cuối Unix như lệnh không hoạt động . Ngoài ra, cảm ơn cho trường hợp bỏ qua hoàn thành, điều đó sẽ giúp rất nhiều!
anon58192932

Trường hợp 'On' có nhạy cảm không? ;)
Arj

Đáng buồn là điều này sẽ không giúp bạn trong một kịch bản.
Sridhar Sarnobat

2

Đây có phải là một tài sản của hệ thống tập tin hoặc cái gì khác?

pa-ubuntu-11388$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 10.04.3 LTS
Release:        10.04
Codename:       lucid
pa-ubuntu-11388$ ls -l
pa-ubuntu-11388$ touch filename.txt
pa-ubuntu-11388$ ls -l
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 filename.txt
pa-ubuntu-11388$ cp ./filename.txt ./FileName.txt
pa-ubuntu-11388$ ls -l
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 FileName.txt
-rw-r--r-- 1 dshawley dev 0 May 31 15:17 filename.txt

Việc này ổn với tôi.


Maerics ở trên đã giúp tôi giải quyết vấn đề. Tôi đang phát triển trong Ubuntu một cửa sổ -> cổng linux nhưng các tệp được lưu trữ trên máy tính Windows và tôi quên rằng tôi đã gắn ổ đĩa. NTFS cơ bản đã ngăn cả hai tập tin tồn tại cùng một lúc.
anon58192932

1

Ubuntu không phải là một phần trường hợp nhạy cảm. Nó luôn luôn nhạy cảm trường hợp. filename.txtFilename.txtlà hai tệp khác nhau và có thể được đặt trong cùng một thư mục. Vì vậy, lệnh này:

cp ./filename.txt ./FileName.txt

sẽ làm việc mà không có bất kỳ vấn đề trong cùng một thư mục.


Nó không mặc dù. Tôi đã cố gắng tìm ra nó trong một giờ qua.
anon58192932

2
có thể, bạn không có filename.txtchính nó trong thư mục hiện tại của bạn?
PP

Nó chắc chắn ở trong đó.
anon58192932

Maerics ở trên đã giúp tôi giải quyết vấn đề. Tôi đang phát triển trong Ubuntu một cửa sổ -> cổng linux nhưng các tệp được lưu trữ trên máy tính Windows và tôi quên rằng tôi đã gắn ổ đĩa. NTFS cơ bản đã ngăn cả hai tập tin tồn tại cùng một lúc.
anon58192932

2
Tôi thấy bình luận của Maerics. thx
PP
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.