Linux에서 파일 이름을 지정할 때 특정 특수 문자를 사용하는 것이 맞습니까?

Linux에서 파일 이름을 지정할 때 특정 특수 문자를 사용하는 것이 맞습니까?

기본적으로 파일명에 +, &, ', .(점), ,(쉼표) 등 특정 특수문자를 사용하는 것이 맞는 건가요?

나는 당신이 문제 없이 -사용할 수 있다는 것을 알고 있지만 _, 조사한 후에는 다른 기호에 대한 명확한 정보를 찾을 수 없습니다. 무슨 뜻이에요).

답변1

파일 이름에 기본적으로 +, &, ', .(점), ,(쉼표) 등 특정 특수 문자를 사용하는 것이 올바른가요?

예.

정확하지만 반드시 바람직하거나 편리한 것은 아닙니다.

당신은 그것을 사용할 수 있습니다null 및/ 최신 Unix 및 Linux 파일 시스템의 파일 이름 내에서.

당신은 그것을 사용할 수 있습니다ASCII 구두점. 일부 유틸리티 회사에서는 stop(가리키다) 및 생성된 파일 이름에 쉼표가 포함됩니다.

당신은 그것을 사용할 수 있습니다ASCII 제어 문자, 그러나 이는 허용 가능한 방식으로 표시될 가능성이 낮고 사용하기 어렵기 때문에 권장되지 않습니다.

당신은 그것을 사용할 수 있습니다쉘 메타문자예를 들어 ASCII 앰퍼샌드 및 ASCII 아포스트로피입니다. 그러나 이는 불편하며 명령을 구성할 때 이러한 문자를 인용하거나 이스케이프 처리하는 데 특별한 주의가 필요합니다.

당신은 그것을 사용할 수 있습니다멀티바이트 문자여러 인코딩을 사용하세요. 비ASCII 문자는 쉘 및/또는 유틸리티에 의해 올바르게 해석되고 표시됩니다. 널리 사용되는 인코딩(예: UTF-8)으로 제한하고 로캘을 적절하게 설정하는 것이 좋습니다.

당신은 할 것최소한의 문제ASCII 인쇄 가능 문자를 사용하고 구두점 문자 세트를 비셸 메타 문자로 제한하며 이름은 하이픈(또는 파일을 숨기려는 경우가 아니면 중지 문자)으로 시작하지 않습니다.

답변2

다른 사람들이 말했듯이 최신 Unix/Linux 시스템에서는 파일 이름에 \0(NUL) 및 (슬래시) /를 제외한 모든 문자가 포함될 수 있습니다.

무엇보다도 POSIX 표준은 파일 이름에 대한 이식 가능한 문자 집합을 정의합니다.

3.282 이식 가능한 파일 이름 문자 집합

이식 가능한 파일 이름을 구성하기 위한 문자 집합입니다.

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
a b c d e f g h i j k l m n o p q r s t u v w x y z
0 1 2 3 4 5 6 7 8 9 . _ -

마지막 세 문자는 <마침표>, <밑줄>, <하이픈> 문자입니다. 당신은 또한 볼 수 있습니다경로명.

이것pathchk유틸리티는 다음에서 비롯됩니다.GNU Coreutils이는 이 옵션과 함께 호출될 때 확인되며 -p, -P옵션은 빈 파일 이름(유효하지 않지만 인수로 전달될 수 있음 )과 pathchk하이픈( )으로 -시작하는 파일 이름에 대해 경고합니다.

답변3

가장 안전한 방법은 모든 운영 체제에서 허용되는 문자 집합에 대해 Wikipedia 항목을 참조하는 것입니다. 다음에서 찾을 수 있습니다.여기.

예를 들어 대부분의 UNIX 기반 시스템의 경우 허용되는 문자 집합은 8비트 집합이고 예약된 문자는 다음과 같습니다.널 문자(NUL, '\0'). 그러나 파일 이름에 특수 문자를 사용하면 삭제할 때 문제가 발생할 수 있으므로 좋지 않습니다.

예를 들어, 파일 이름이 있고 -ramesh.txt아래와 같이 삭제하려고 합니다.

rm -ramesh.txt
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.
rm "-ramesh.txt"
rm: invalid option -- 'a'
Try `rm ./-ramesh.txt' to remove the file `-ramesh.txt'.
Try `rm --help' for more information.

파일을 삭제해야 하기 때문에

rm -- "-ramesh.txt"
rm: remove regular empty file `-ramesh.txt'? y

자세한 내용은 다음에서 확인할 수 있습니다.이 대답도 마찬가지야.

나는 Linux와 OS-X에서는 /인쇄 가능한 ASCII 세트만 비활성화되어 있다고 생각합니다. 특정 문자(예: 셸 메타 문자 *?!)는 명령줄에서 문제를 일으킬 수 있으며 파일 이름을 적절하게 인용하거나 이스케이프 처리해야 합니다.

Linux 파일 시스템(예: ext2, ext3)은 문자 세트에 구애받지 않습니다(내 생각에는 거의 바이트 스트림으로 취급하는 것 같습니다. null만 허용되며 /금지됩니다). 이는 파일 이름을 UTF-8 인코딩으로 저장할 수 있음을 의미합니다. 나는 셸이나 다른 응용 프로그램이 표시 또는 처리를 위해 파일 이름을 적절하게 변환하는 데 사용할 인코딩을 알고 있다고 믿습니다.

전체적으로 문제는 파일 이름에 특수 문자를 사용하는 것이 아니라 이를 처리하는 방법입니다.

답변4

당신의 연구는 거의 정확했습니다. 파일 이름에 특수 문자를 사용할 수 있지만 특수 문자에는 특별한 의미가 있으므로 권장되지 않습니다.Linux의 파일 명명 규칙"파일 이름은 하이픈으로 시작할 수 없습니다."와 같은 파일 이름에 대한 기타 제한 사항도 설명되어 있습니다.

단순한명령줄 작업을 수행하려면 파일 이름에 특수 문자를 사용하십시오.

개인적으로 저는 파일 이름에 특수 문자를 사용하지 않는 것을 선호합니다. 특수 문자는 이러한 파일을 처리할 때 특별한 주의가 필요하기 때문입니다. 따라서 개발 과정에서 특수 문자 처리에 대한 걱정이 사라졌습니다.

관련 정보