ulimit PICKLE: Không được phép sử dụng Lệnh và Lệnh


15

Tôi đang cố gắng tăng số lượng tệp mở tối đa cho người dùng hiện tại

> ulimit -n
1024

Tôi cố gắng tăng và thất bại như sau

> ulimit -n 4096
bash: ulimit: open files: cannot modify limit: Operation not permitted

Vì vậy, tôi làm điều tự nhiên và cố gắng chạy với sự cho phép tạm thời, nhưng không thành công

> sudo ulimit -n 4096
sudo: ulimit: command not found

Câu hỏi

  1. Làm thế nào để tăng ulimit?
  2. Tại sao chuyện này đang xảy ra?

Sử dụng Fedora 14


Trả lời bình luận đã xóa: ulimit 4096không hoạt động. Tôi nghĩ -nlà chính xác. Như một bằng chứng về khái niệm, nó hoạt động nếu tôi lần đầu tiên sudo su - root(nhưng chỉ thay đổi cho root).
paislee


Câu trả lời:


17

ulimitlà một shell được tích hợp sẵn, không phải là một lệnh bên ngoài. Nó cần phải được xây dựng vì nó hoạt động trên chính tiến trình shell, như cd: các giới hạn, như thư mục hiện tại, là một thuộc tính của quy trình cụ thể đó.

sudo bash -c 'ulimit -n 4096'sẽ hoạt động, nhưng nó sẽ thay đổi giới hạn cho quy trình bash sudochỉ được gọi , điều này sẽ không giúp bạn.

Có hai giá trị cho mỗi giới hạn: giới hạn cứng và giới hạn mềm. Chỉ có root mới có thể nâng giới hạn cứng; bất cứ ai cũng có thể hạ thấp giới hạn cứng và giới hạn mềm có thể được sửa đổi theo một trong hai hướng với ràng buộc duy nhất là nó không thể cao hơn giới hạn cứng. Giới hạn mềm là giá trị thực tế quan trọng.

Do đó, bạn cần sắp xếp rằng tất cả các quy trình của bạn có giới hạn cứng đối với các tệp đang mở ít nhất là 4096. Bạn có thể giữ giới hạn mềm ở 1024. Trước khi khởi chạy quy trình đó yêu cầu nhiều tệp, hãy tăng giới hạn mềm. Trong /etc/security/limits.conf, thêm các dòng

paislee hard nofile 4096
paislee soft nofile 1024

nơi paisleelà tên của người dùng mà bạn muốn chạy quá trình của bạn như. Trong trình bao khởi chạy tiến trình mà bạn muốn giới hạn cao hơn, hãy chạy

ulimit -Sn unlimited

để nâng giới hạn mềm đến giới hạn cứng.


1
Các lựa chọn thay thế sudo bash -csudo -ibắt đầu một vỏ đăng nhập và sudo -swhcih bắt đầu một vỏ. Những hạn chế tương tự được áp dụng nhưng điều này có thể hữu ích trong các trường hợp khác.
Bram

Cảm ơn. Tôi có thể hỏi một số câu hỏi liên quan? Trả lời và bài đăng khác stackoverflow.com/a/17483998/156458unix.stackexchange.com/a/238413/674unix.stackexchange.com/a/169035/674 đều được khuyến nghị sử dụng sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Nhưng cả hai ulimit -c 1024exec su $LOGNAME" chỉ ảnh hưởng đến shell được tạo bởi sudo, vậy mục đích của lệnh là gì? exec su $LOGNAME"cũng không làm gì có ý nghĩa để sử dụng giới hạn đã thay đổi. Tôi rất bối rối và tự hỏi nếu tôi đang thiếu một cái gì đó.
Tim

Xin lưu ý rằng ulimit -Sn unlimitedkhông hoạt động trên hầu hết các vỏ. Phương pháp đúng là gọi ulimit -avà sau đó gọi ulimit -n <number>trong đó <number là giới hạn cứng (cột bên phải).
schily

3

mở tệp /etc/security/limits.confvà thêm dòng <user> soft nofile <value>. để sử dụng ulimitthay đổi cho người dùng root và thử tương tự.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.