2013-07-05 33 views
42

Tôi đang sử dụng ubuntu 12.04, trên đó tôi chạy ulimit -n, hiển thị 1024, Tôi muốn tăng giới hạn tệp mở từ 1024 lên 65535, vì vậy tôi đã thử lệnh sau:khi sử dụng sudo ulimit

sudo ulimit -n 65535 

nhưng tôi nhận được lỗi sau:

sudo: ulimit: command not found 

Làm thế nào để tăng giới hạn tập tin 1.024-65.535? Bất kỳ trợ giúp sẽ được đánh giá cao.

+1

Câu hỏi về ** phần cứng và phần mềm tính toán chung ** không có chủ đề cho Stack Overflow trừ khi chúng liên quan trực tiếp đến các công cụ được sử dụng chủ yếu cho lập trình. Bạn có thể được trợ giúp về [Unix & Linux] (http://unix.stackexchange.com). –

+0

Câu hỏi này hữu ích cho mongodb, đã thêm thẻ đó. – jcollum

+0

Câu hỏi mới về unix: http://unix.stackexchange.com/questions/81843/sudo-ulimit-command-not-found –

Trả lời

94

ulimit là nội trang hệ vỏ như cd, không phải là một chương trình riêng biệt. sudo tìm kiếm nhị phân để chạy, nhưng không có mã nhị phân ulimit, đó là lý do tại sao bạn nhận được thông báo lỗi. Bạn cần phải chạy nó trong một trình bao.

Tuy nhiên, trong khi bạn cần phải root để nâng giới hạn lên 65535, có thể bạn không muốn chạy chương trình của mình dưới dạng gốc. Vì vậy, sau khi bạn tăng giới hạn, bạn nên chuyển về người dùng hiện tại.

Để làm điều này, hãy chạy:

sudo sh -c "ulimit -n 65535 && exec su $LOGNAME" 

và bạn sẽ nhận được một lớp vỏ mới, không dùng root, nhưng với những giới hạn đó lên. exec làm cho trình bao mới thay thế quy trình bằng các đặc quyền sudo, vì vậy sau khi thoát khỏi trình bao đó, bạn sẽ không vô tình bị kết thúc lại thành root.

+0

Tinh chỉnh nhẹ hoạt động hoàn hảo cho tôi: sudo sh -c "ulimit -u 1000000 && ulimit - n 100000 && exec su $ LOGNAME " – Dasmowenator

+0

Lưu ý rằng điều này làm cho một env lỏng cho người dùng. – user367890

0

Tôi đã phải đối phó với các vấn đề như thế này trong quá khứ. Vì không có cơ chế setuid cho các kịch bản shell (vì nó không an toàn), tôi đã tìm thấy việc viết một trình bao bọc C đơn giản với một setuid là đủ và sau đó sử dụng một lời gọi hệ thống để sửa đổi các ulimits của tiến trình đang chạy trước khi loại bỏ các đặc quyền và thực thi shell của bạn kịch bản.

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