먼저 반대 접근 방식을 시도해 보세요.

먼저 반대 접근 방식을 시도해 보세요.

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처음에는 추가 항목이 많이 있지만 결국에는 합산되지 않습니다. 끝에 개행 문자를 억제하면 åäöåä(automatic으로 삽입됨 echo) 다음과 같은 결과를 얻습니다.

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

이것이 바로 시작 부분 user.xdg.comment을 제외하면 -value 입니다 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.

관련 정보