![Linux чувствителен и нечувствителен к регистру и всегда неудобен?](https://rvso.com/image/1316780/Linux%20%D1%87%D1%83%D0%B2%D1%81%D1%82%D0%B2%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BD%20%D0%B8%20%D0%BD%D0%B5%D1%87%D1%83%D0%B2%D1%81%D1%82%D0%B2%D0%B8%D1%82%D0%B5%D0%BB%D0%B5%D0%BD%20%D0%BA%20%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D1%83%20%D0%B8%20%D0%B2%D1%81%D0%B5%D0%B3%D0%B4%D0%B0%20%D0%BD%D0%B5%D1%83%D0%B4%D0%BE%D0%B1%D0%B5%D0%BD%3F.png)
Я использую Ubuntu 10 и быстро понял, что система чувствительна к регистру, когда это неудобно (например, при автодополнении путей к файлам с помощью клавиши Tab в терминале), а также НЕчувствительна к регистру при использовании команд MV и CP (что также неудобно при попытке продублировать имя файла с другим регистром).
По сути, мне нужно, чтобы эта команда работала, но она не работает.
cp ./filename.txt ./FileName.txt
Я просто заканчиваю с filename.txt
:
Как мне получить тот же файл с другим регистром, но с тем же именем в том же каталоге?
EDIT: комментарий Maerics ниже помог мне вспомнить, что я на самом деле разрабатываю на общем диске Windows, работающем под управлением NTFS, который НЕчувствителен к регистру. Вот почему, хотя CP и MV не генерируют ошибку, файл не копируется (или, что более вероятно, копируется, но Windows заменяет уже существующий).
решение1
NTFS 1 и VFAT не чувствительны к регистру, они просто сохраняют регистр. Это означает, что если вы создаете файл с именем FileName.txt
, файловая система сохранит смешанное имя, но вы можете получить доступ к файлу с любой комбинацией тех же букв в любом регистре, например FILENAME.TXT
, filename.txt
или fileNAME.txt
. Это объясняет, почему вы не можете иметь два файла с одинаковым написанием, отличающиеся только заглавными/строчными буквами, в одном каталоге.
Экспортированная файловая система SMB должна реализовать это поведение, чтобы не путать клиенты Windows.
ZFS можно настроить на такое поведение с помощью casesensitivity=mixed
свойства.
1 Технически NTFS чувствительна к регистру, но монтирующие файловые системы ОС этого типа почти всегда настроены на то, чтобы скрыть эту базовую функцию и сохранить только регистр. Однако Windows может включить чувствительность к регистру, изменив этот ключ регистра, HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\kernel\dword:ObCaseInsensitive
а Linux может монтировать эти файловые системы с различным поведением в зависимости от параметров ignore_case
и windows_names
монтирования.
решение2
Вы можете включить в bash автодополнение имен файлов без учета регистра, добавив следующую строку $HOME/.inputrc
:
set completion-ignore-case On
Что касается имен файлов: это зависит от файловой системы. В файловых системах Linux проблем быть не должно. В других файловых системах поведение можно контролировать с помощью опций команды mount. mount(8)
Дополнительную информацию о доступных опциях монтирования см. на странице руководства.
решение3
Это свойство файловой системы или что-то ещё?
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
Он отлично работает для меня.
решение4
Ubuntu не чувствителен к регистру. Он всегда чувствителен к регистру. filename.txt
и Filename.txt
это два разных файла, которые могут быть размещены в одном каталоге. Поэтому эта команда:
cp ./filename.txt ./FileName.txt
будет работать без проблем в том же каталоге.