ulimit PICKLE: „Operațiunea nu este permisă” și „Comanda nu a fost găsită” (Unix, Bash, Fedora, Sudo, Limita)

paislee a intrebat.

Încerc să măresc numărul maxim de fișiere deschise pentru utilizatorul curent

> ulimit -n
1024

Încerc să măresc și nu reușesc după cum urmează

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

Așa că fac lucrul firesc și încerc să rulez cu permisiunea temp, dar nu reușesc

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

Întrebări

  1. Cum să măresc ulimit?
  2. De ce se întâmplă acest lucru?

Folosind Fedora 14

Comentarii

  • Răspuns la un comentariu șters: ulimit 4096 nu funcționează. Cred că -n este corect. Ca o dovadă de concept, funcționează dacă mai întâi sudo su - root (dar se schimbă doar pentru root). –  > Por paislee.
  • Ce este PICKLE? SU superuser.com/questions/79717/… –  > Por Ciro Santilli新疆棉花TRUMP BAN BAD.
  • ro.m.wikipedia.org/wiki/Rundown –  > Por paislee.
2 răspunsuri
Gilles ‘SO- nu mai fi rău’

ulimit este o comandă încorporată în shell, nu o comandă externă. Trebuie să fie încorporată pentru că acționează asupra procesului de shell în sine, cum ar fi cd: limitele, ca și directorul curent, sunt o proprietate a acelui proces particular.

sudo bash -c 'ulimit -n 4096' ar funcționa, dar ar schimba limita pentru procesul bash invocat de către sudo numai, ceea ce nu v-ar ajuta.

Există două valori pentru fiecare limită: hard limit și soft limit. Numai root poate crește limita dură; oricine poate reduce limita dură, iar limita soft poate fi modificată în ambele direcții, cu singura constrângere că nu poate fi mai mare decât limita dură. Limita soft este valoarea reală care contează.

Prin urmare, trebuie să vă asigurați că toate procesele dvs. au o limită dură pentru fișierele deschise de cel puțin 4096. Puteți menține limita soft la 1024. Înainte de a lansa acel proces care necesită o mulțime de fișiere, măriți limita soft. În /etc/security/limits.conf, adăugați liniile

paislee hard nofile 4096
paislee soft nofile 1024

unde paislee este numele utilizatorului cu care doriți să executați procesul. În shell-ul care lansează procesul pentru care doriți o limită mai mare, rulați

ulimit -Sn unlimited

pentru a ridica limita soft la limita hard.

Comentarii

  • Alternative la sudo bash -c sunt sudo -i care lansează un shell de autentificare și sudo -s whcih pornește un shell. Se aplică aceleași limitări, dar acest lucru ar putea fi util în alte circumstanțe. –  > Por Bram.
  • Mulțumesc. Pot să vă pun câteva întrebări conexe? Celălalt răspuns și postarea stackoverflow.com/a/17483998/156458 și unix.stackexchange.com/a/238413/674 și unix.stackexchange.com/a/169035/674, toate au recomandat utilizarea sudo sh -c "ulimit -c 1024 && exec su $LOGNAME". Dar ambele ulimit -c 1024 și exec su $LOGNAME" afectează doar shell-ul creat de sudo, deci care este scopul comenzii? exec su $LOGNAME" de asemenea, nu face nimic semnificativ pentru a utiliza limita modificată. Sunt foarte confuz și mă întreb dacă nu cumva îmi scapă ceva. –  > Por Tim.
  • Vă rugăm să rețineți că ulimit -Sn unlimited nu funcționează pe majoritatea shell-urilor. Metoda corectă este de a apela ulimit -a și apoi să apelați ulimit -n <number> unde <number este limita dură (coloana din dreapta). –  > Por schily.
harish.venkat

deschideți fișierul /etc/security/limits.conf și adăugați linia <user> soft nofile <value>. pentru a utiliza ulimit treceți la utilizatorul root și încercați același lucru.