linshare은(는) 무엇을 하나요?
linshare는 LinShare 서버(버전 6.5 이상)용 명령줄 도구입니다.
사용자의 문서를 안전하게 공유하는 데 사용합니다.
먼저, 설정 확인
대화 중 첫 LinShare 명령 전에 linshare --json whoami를 실행하세요:
- 명령어를 찾을 수 없음 (종료 코드 127):
linshare명령이 설치되지 않았습니다. 사용자에게 이 스킬이 필요하다는 점과 직접 설치할 수 있다는 점을 평이한 말로 알려주세요. 설치 방법:pip install "git+https://github.com/wboudiche/linshare-cli#subdirectory=agent-harness"(Python 3.10+ 필요). 직접 설치하지 마세요. - 종료 코드 2 (
"code": "auth"): 로그인되지 않았습니다. 사용자에게 이 채팅에서 다음 명령을 입력하도록 요청하세요:! linshare login --server <LinShare 주소>(주소를 모르면 물어보세요) — 사용자가 비밀번호를 여기에 입력하며, 대화 내용에는 절대 나타나지 않습니다. SSO 사용 시:! linshare login --token --server <주소>, 웹 UI에서 토큰을 복사하여 붙여넣습니다. - 종료 코드 0: 서버와 계정 정보가 표시됩니다. 요청을 진행하세요.
규칙 — 매번 지키세요
- 항상
--json을linshare바로 뒤에 전달하세요 (linshare --json shares list) 그리고 JSON을 읽으세요. - 로그인은 사용자가 직접 해야 하며, 당신이 해서는 안 됩니다. 명령이 종료 코드 2 (
"code": "auth")로 실패하면 사용자에게! linshare login을 직접 입력하도록 요청하세요 (웹 UI에서 토큰을 받아 SSO로 로그인하는 경우! linshare login --token). 절대 사용자의 비밀번호를 묻거나 입력하지 마세요. - 계정에서 무언가가 나가거나 삭제되기 전에 명시적인 "예"를 받으세요.
이는
share,request-files,shares revoke,documents delete,requests close, 그리고 공유 공간의 경우spaces upload,spaces add-member,spaces set-role,spaces remove-member,spaces delete-files,spaces delete에 적용됩니다.share와request-files의 경우: 먼저 동일한 명령을--dry-run으로 실행한 후, 사용자에게 평이한 말로 다음을 보여주세요: 파일(이름과 크기), 모든 수신자 —"external": true인 수신자는 조직 외부로 표시 — 만료일, 제목, 메시지, 비밀번호로 보호된 링크 사용 여부, 그리고downloadAlert/copyToMe(서버가 실제로 수행할 작업: 관리자 설정이 사용자 선택을 무시할 수 있으며,detail에 그렇게 명시되어 있으면 그 점을 알려주세요).revoke,delete,close의 경우: 먼저 목록을 보여준 후, 정확히 어떤 항목이 영향을 받을지 표시하세요.spaces upload와spaces add-member의 경우: 먼저--dry-run으로 실행하세요. 업로드의 경우, 파일, 워크그룹(및 폴더) 및visibleTo를 보여주세요 — 해당 워크그룹의 모든 사람이 파일을 볼 수 있습니다 (visibleTo가 null이면 멤버를 나열할 수 없다고 말하세요). 새 멤버의 경우, 사람(이름과 이메일), 공간 및 역할을 평이한 말로 보여주세요 (READER: 읽기 전용, CONTRIBUTOR: 추가 가능, WRITER: 추가 및 변경 가능, ADMIN: 멤버 관리도 가능).spaces delete는 공간과 그 안의 모든 파일을 모든 멤버에 대해 삭제합니다.spaces delete-files도 모든 사람에 대해 파일을 삭제합니다. 이 점을 말하고, 공간 이름과 항목을 명시하세요.--subject와--message에는 사용자가 제공한 단어만 사용하세요. 직접 작성하지 말고, 생략하거나 제안하고 사용자가 동의할 때만 추가하세요.request-files의--label은 사용자의 말에서 가져온 짧은 이름일 수 있습니다 ("10월 청구서"). 제공하지 않으면 도구가 "Files for <사용자 이메일>"을 선택합니다.request-files에는--message가 필요합니다 (LinShare는 메시지 없이 요청을 거부합니다). 사용자가 제공하지 않았다면 dry run 전에 텍스트를 물어보세요. 문구를 제안할 수 있지만, 사용자가 수락한 후에만 사용하세요.- 만료일이 제공되지 않음 (
"expirationDate": null)은 서버 기본 만료일을 의미하며, "영원히"가 아닙니다. - 명시적인 "예"를 기다리세요. 사용자가 무언가(수신자, 만료일, 파일)를 변경하면,
새
--dry-run을 실행하고 다시 물어보세요. 이전의 "예"를 재사용하지 마세요. - 실제 실행 시에는 dry-run의
expirationDate를--expires YYYY-MM-DD로 전달하세요 (사용자가 승인한 정확한 날짜), 다시7d와 같은 상대값은 사용하지 마세요.--alert-if-not-downloaded도 마찬가지입니다 (dry-run의alertIfNotDownloaded사용).
- 메모리가 아닌 서버를 확인하세요. 사용자에게 무언가가 공유, 전송, 철회 또는 종료되었는지 알리기 전에,
일치하는 목록 명령(
shares list,requests list,documents list,spaces files,spaces members)을 실행하세요. 이전 대화의 정보는 최신이 아닐 수 있습니다. - 읽기 전용 명령에는 확인이 필요하지 않습니다:
whoami,shares list,received list,received download,documents list,requests list,requests download,spaces list,spaces files,spaces members,spaces download. 빈 워크그룹이나 폴더 생성 (spaces create,spaces mkdir)도 확인이 필요하지 않습니다: 파일이나 멤버가 추가될 때까지 다른 사람이 볼 수 없습니다. - 공유 후, 사용자에게 어떤 파일이 누구에게, 언제까지 갔는지 알려주세요.
다운로드: LinShare는 각 수신자가 공유를 처음 다운로드할 때 보낸 사람에게 이메일을 보내며,
shares list는downloaded개수를 표시합니다. 이를 사용하여 "X가 다운로드했나요?"에 답변하세요. 파일이 다운로드되지 않은 경우 경고를 받으려면--alert-if-not-downloaded를 사용하세요 (날짜,3d와 같은 지연 또는off; 없으면 서버 기본값이 적용됩니다). - 공유 공간. 워크그룹은 팀이 공유하는 파일을 보관합니다. 워크스페이스는 워크그룹을 그룹화합니다.
명령은 ID를 사용합니다:
spaces list를 실행하여 공간을 찾고,spaces files SPACE [--folder ID]를 실행하여 폴더나 파일을 찾으세요. 여러 공간이 같은 이름을 가질 수 있습니다: 사용자의 말이 둘 이상과 일치하면 물어보세요. 파일을 이메일로 공유하는 것(share)과 워크그룹에 넣는 것(spaces upload)은 다릅니다: 불분명하면 물어보세요. LinShare 7.0에서는 서버 버그로 인해 일부 작업이 실패할 수 있습니다:spaces members가 멤버를 나열할 수 없으며 (add-member가 출력한 멤버 ID를set-role/remove-member에 사용), 사람을 워크스페이스에 추가할 수 없습니다 (해당 워크그룹에만 추가 가능). 메시지를 그대로 전달하고 다른 방법으로 재시도하지 마세요. - 오류 시
error.message를 평이한 말로 전달하세요. 거부된 공유를 다른 설정으로 묻지 않고 재시도하지 마세요. 종료 코드 1은 명령 자체가 잘못되었음을 의미합니다 (수정하고, 사용자에게 로그인을 요청하지 마세요). 공유가 실패하면 도구가 업로드된 파일을 제거하고 그렇게 말합니다.error.code가"timeout"이면 결과를 알 수 없습니다 — 재시도 전에 메시지에 따라 (shares list/documents list확인) 진행하세요. - 대용량 파일은 괜찮습니다: 2MiB 이상이면 도구가 웹 UI처럼 청크로 보냅니다.
업로드는 빠른 네트워크에서 GB당 약 15초가 걸리며, 느린 네트워크에서는 훨씬 더 오래 걸립니다.
수백 MB가 넘는 파일의 경우
share명령에 긴 타임아웃을 주거나(또는 백그라운드에서 실행) 중단되지 않도록 하고, 사용자에게 시간이 걸릴 수 있다고 알려주세요.
일반적인 흐름
linshare --json share ./contract.pdf --to [email protected] --expires 7d --message "Please sign" --dry-run
# → 요약을 사용자에게 보여주고, "예"를 기다림
# dry-run이 "expirationDate": "2026-11-13"을 반환함
linshare --json share ./contract.pdf --to [email protected] --expires 2026-11-13 --message "Please sign"
명령어
| 명령어 | 기능 | 먼저 확인? |
|---|---|---|
linshare login [--server URL] [--email E] | 사용자가 한 번 로그인 (비밀번호, 필요 시 2FA 코드) | 사용자가 직접 실행 |
linshare login --token [--server URL] | 사용자가 LinShare 웹 UI에서 생성한 토큰 붙여넣기 | 사용자가 직접 실행 |
linshare logout | 토큰 잊기(및 폐기) | 아니요 |
linshare whoami | 사용 중인 서버 및 계정 | 아니요 |
linshare share FILE... --to EMAIL... [--expires 7d|2w|1m|YYYY-MM-DD] [--subject S] [--message M] [--password-link] [--alert-if-not-downloaded WHEN] [--send-me-a-copy] [--dry-run] | 업로드 및 이메일 공유 | 예 |
linshare shares list | 사용자가 공유한 항목 | 아니요 |
linshare shares revoke ID... | 공유 취소 | 예 |
linshare received list | 다른 사람이 사용자와 공유한 항목 | 아니요 |
linshare received download ID [--out DIR] | 받은 파일 저장 (덮어쓰지 않음) | 아니요 |
linshare documents list | 사용자의 문서 | 아니요 |
linshare documents delete ID... | 문서 삭제 | 예 |
linshare request-files --from EMAIL... --message M [--label L] [--expires ...] [--dry-run] | 다른 사람에게 파일 보내기 요청 (각각 개인 요청) | 예 |
linshare requests list | 업로드 요청 및 받은 파일 | 아니요 |
linshare requests download ID [--out DIR] | 받은 파일을 zip으로 다운로드 | 아니요 |
linshare requests close ID... | 요청 종료 | 예 |
linshare spaces list [--in WORKSPACE] | 워크그룹 및 워크스페이스 (역할 포함) | 아니요 |
linshare spaces create NAME [--workspace] [--in WORKSPACE] | 워크그룹(또는 워크스페이스) 생성 | 아니요 |
linshare spaces delete ID... | 공간 및 모든 파일을 모든 멤버에 대해 삭제 | 예 |
linshare spaces files SPACE [--folder ID] | 워크그룹의 폴더 및 파일 | 아니요 |
linshare spaces mkdir SPACE NAME [--folder ID] | 폴더 생성 | 아니요 |
linshare spaces upload SPACE FILE... [--folder ID] [--dry-run] | 워크그룹에 파일 업로드 (멤버가 볼 수 있음) | 예 |
linshare spaces download SPACE ID [--out DIR] | 워크그룹 파일 저장 (덮어쓰지 않음) | 아니요 |
linshare spaces delete-files SPACE ID... | 파일 또는 폴더를 모든 사람에 대해 삭제 | 예 |
linshare spaces members SPACE | 멤버 및 역할 | 아니요 |
linshare spaces add-member SPACE EMAIL --role R [--dry-run] | 다른 사람에게 접근 권한 부여 | 예 |
linshare spaces set-role SPACE MEMBER ROLE | 역할 변경 (MEMBER: 이메일 또는 멤버 ID) | 예 |
linshare spaces remove-member SPACE MEMBER | 접근 권한 제거 | 예 |
--to와 --from은 여러 사람에 대해 반복됩니다: --to [email protected] --to [email protected].
"외부"는 사용자의 이메일 도메인과 다른 도메인을 기준으로 하는 휴리스틱입니다.
종료 코드
0 정상 · 1 잘못된 입력 또는 잘못된 명령 · 2 로그인되지 않음 / 로그인 문제 · 3 서버가 거부함 · 4 서버에 연결할 수 없거나, 실패하거나, 너무 느림 ("code": "timeout").