2012-03-01 25 views
5

Tôi có một quy trình Java (daemon) đang chạy. Quá trình này được sử dụng như một dịch vụ. Với dịch vụ đó, tôi có thể tải xuống một kho lưu trữ zip có chữ ký từ một máy chủ đáng tin cậy. Sau khi tôi giải nén kho lưu trữ ZIP, tôi muốn thực thi một tệp nhị phân trong thư mục "chưa giải nén".Triển khai và thực hiện điều gì đó với Java trên UNIX

Vấn đề là nhị phân này không thực thi được (không có 'x' trong chế độ tệp của nó) ... Tôi biết có thể đặt nó bằng Java nhưng tôi muốn một cách chung chung.

Bạn có ý tưởng nào về cách triển khai một cách tốt đẹp không?

(Vâng, nó cần phải được Java)

Về cơ bản tôi muốn khôi phục lại các bit chế độ tập tin Unix sau khi tôi giải nén kho lưu trữ ZIP. Có một Java Lib mà có thể làm điều này?

+0

Ý bạn là gì? Nếu bạn có quyền kiểm soát các tệp đi vào kho lưu trữ, thì chỉ cần đảm bảo nhị phân có chế độ thích hợp trước khi đóng gói. – Perception

+0

@Perception: Không phải tất cả các máy nén zip đều hỗ trợ lưu trữ các bit chế độ tập tin Unix. Và không phải tất cả các trình giải nén zip đều hỗ trợ khôi phục nó ... – thkala

+0

@thkala Đó là những gì tôi cần. Có một Java Lib mà có thể làm điều này? – alexvetter

Trả lời

3

Bạn có thể dễ dàng call lệnh chmod từ ứng dụng Java của bạn để thêm thiếu x bit. chmod là tiêu chuẩn trên Unix là bản thân bit thực thi (x).

Hoặc bạn có thể làm điều đó straight from Java.

Nếu bạn muốn bit thực thi vẫn được đặt ở chế độ giải nén, tuy nhiên, bạn có lẽ không nên sử dụng các thư viện giải nén Java. Hãy thử sử dụng lệnh Unix unzip để giải nén tệp lưu trữ của bạn - nó đã hỗ trợ lưu trữ và khôi phục các bit chế độ tệp Unix trong một thời gian. Nếu nhà cung cấp Unix của bạn không có nó, bạn có thể lấy nó từ the source.

+1

Xin lỗi, bạn không trợ giúp. Tôi có thể thiết lập cờ thực thi ngay từ Java. Tôi không biết về tất cả các tệp nhị phân vì vậy tôi không thể đặt cờ. Điều tốt nhất sẽ là "giải nén" kho lưu trữ và các cờ đã được thiết lập. – alexvetter

+0

'unzip -X' giữ GID/UID. Vấn đề là jarsigner (công cụ mà tôi sử dụng để ký) không bảo vệ được các lá cờ. Vì vậy, nó sẽ không làm việc với ra khỏi hộp. Tôi nghĩ về việc thêm một metainfofile chứa tất cả các file thực thi. 'tìm thấy . -expeable -type f 'có thể giúp với điều đó. – alexvetter

+0

@alexvetter: do đó, khi ứng dụng của bạn nhận được bản lưu trữ, các bit thực thi đã bị mất: -/ – thkala

0

Nếu bạn đóng gói tệp của mình bằng tar và sau đó nén tùy chọn, nó giữ quyền của bạn như trước khi đóng gói. Sử dụng --preserve-permissions khi giải nén.

Các vấn đề liên quan