먼저 반대 시도:

먼저 반대 시도:

setfattr자유 텍스트 주석에 해당하는 확장 속성을 설정하기 위해 약간 더 편리한 형식으로 간단히 래핑하는 짧은 쉘 스크립트를 작성했습니다 .

#!/bin/sh
test "$2" && setfattr -n user.xdg.comment -v "$2" "$1"
getfattr -d -m '^user.xdg.comment$' "$1"

US ASCII 주석을 xattrs로 저장하는 경우 이는 훌륭하게 작동합니다. 그러나 US ASCII가 아닌 문자가 포함된 주석을 설정하려고 하면 Base64로 인코딩된 데이터로 보이는 내용이 반환됩니다.

$ touch xyz
$ set-comment xyz åäöåä
# file: xyz
user.xdg.comment=0sw6XDpMO2w6XDpA==
$ 

하지만 이는 단지 Base64가 아닙니다.

$ printf "0sw6XDpMO2w6XDpA==" | \base64 --decode
��:\:L;l:\:@base64: invalid input
$ 

대부분의 경우 나는단지무작위로 보이는 쓰레기가 돌아 왔습니다. 이와 같이 Base64 디코더가 "잘못된 입력"을 반환하는 경우가 있습니다.

이 문자열은 무엇입니까?원래 입력 값과의 관계는 무엇입니까? 이 경우 getfattr와 같이 원래 입력 값으로 돌아가려면 어떻게 해야 합니까 ?åäöåä

setfattr --version내 시스템에서는 로 응답합니다 setfattr 2.4.46. 저는 Debian Wheezy가 패키지한 버전을 실행하고 있습니다. 중요하지 않은 경우에는 기본 Wheezy 커널에서 ZFS On Linux 0.6.3(0.6.2에서도 동일한 동작을 보임)을 실행하고 있습니다.

답변1

이 질문을 읽으면서 약간 호기심이 생겼으니 몇 가지를 해보겠습니다.“법의학”:

먼저 반대 시도:

åäöåäBase64에서는 어떻게 인코딩되나요 ?

$ echo åäöåä | base64
w6XDpMO2w6XDpAo=

이것은 확실히 당신이 가지고 있는 것과 매우 비슷해 보입니다 0sw6XDpMO2w6XDpA==. 시작 부분에 추가 내용이 있고 0s끝 부분이 정확히 일치하지 않습니다. åäöåä(에 의해 자동으로 삽입됨 ) 끝에 개행 문자를 억제하면 echo다음을 얻습니다.

$ echo -n åäöåä | base64
w6XDpMO2w6XDpA==

이것은 시작 부분을 user.xdg.comment제외하면 정확히 -값 입니다.0s

결론

댓글~이다Base64로 인코딩되고 접두사가 추가되었으며 0s몇 가지 다른 문자열을 테스트하여 이를 확인했습니다.

예:

$ ./set-comment xyz 日本語
# file: xyz
user.xdg.comment=0s5pel5pys6Kqe

$ base64 -d <<<'5pel5pys6Kqe' ; echo
日本語

( ; echo출력이 base64새 줄로 끝나지 않기 때문에 다음 프롬프트를 엉망으로 만들지 않는 것입니다.)

하지만...

이는 이러한 경우(주석이 ASCII가 아닌 경우) Base64로 인코딩되고 0s.

"진짜" 대답

이 작업을 수행한 후 맨페이지를 확인하면 getfattr다음과 같은 내용이 언급되어 있다는 훌륭한 아이디어를 얻었습니다.

옵션에 관해서-e en, --encoding=en

값을 검색한 후 인코딩합니다. en의 유효한 값은 "text", "hex" 및 "base64"입니다. 텍스트 문자열로 인코딩된 값은 큰따옴표(")로 묶이고, 16진수와 base64로 인코딩된 문자열에는 각각 0x와 0이라는 접두사가 붙습니다.

따라서 스크립트를 다음과 같이 변경하십시오.

(파일세트 코멘트:)

#!/bin/sh
test "$2" && setfattr -n user.xdg.comment -v "$2" "$1"
getfattr -e text -d -m '^user.xdg.comment$' "$1"

속성을 항상 텍스트로 인쇄합니다. 예를 들면 다음과 같습니다.

$ ./set-comment xyz åäöåä   # with fixed script
# file: xyz
user.xdg.comment="åäöåä"

그러나 여전히 몇 가지 주의 사항이 남아 있습니다. 예를 들면 다음과 같습니다.

$ ./set-comment xyz 0x414243
# file: xyz
user.xdg.comment="ABC"

그리고

$ ./set-comment xyz 0s5pel5pys6Kqe
# file: xyz
user.xdg.comment="日本語"

출력이 입력과 일치하지 않는 경우.

이러한 문제는 인수를 '좋아요' 형식으로 "마사지"하여 해결할 수 있습니다 setfattr. 보다 man setfattr.

관련 정보