ENOENT (errno 2)

errno 2

LINUX

Messaggio ufficiale (come appare sullo schermo): No such file or directory

Cercato anche come: No such file or directory, errno 2, ENOENT: no such file or directory, npm ERR! code ENOENT, FileNotFoundError

Terminale Linux che esegue strace con la chiamata di sistema non riuscita e l'errno evidenziati
errno di Linux: individua la chiamata di sistema che fallisce prima di modificare qualsiasi cosa.

Che cosa significa

ENOENT, «No such file or directory» (errno 2), significa che un percorso usato dal programma non esiste. È uno degli errori più comuni nelle shell, in Node.js ('ENOENT: no such file or directory, open ...'), in Python (FileNotFoundError) e negli strumenti di build. A volte l'elemento mancante non è il file che ti aspetti, ma un interprete o una libreria di cui ha bisogno.

Si applica a: Linux, macOS (errno BSD), WSL, Container Docker

Come risolvere ENOENT (errno 2)

  1. Copia il percorso esatto dall'errore e controllalo con 'ls -la <percorso>'; attenzione a errori di battitura e maiuscole/minuscole, perché i percorsi Linux distinguono le maiuscole
  2. Controlla la directory di lavoro corrente con 'pwd'; i percorsi relativi vengono risolti a partire da dove è stato avviato il programma, non dalla cartella dello script
  3. Per 'npm ERR! enoent', esegui il comando nella cartella che contiene package.json, poi 'npm install' se manca node_modules
  4. Se uno script esiste ma l'esecuzione dà «No such file or directory», verifica che l'interprete indicato nello shebang esista e correggi le terminazioni di riga di Windows con 'dos2unix script.sh'
  5. Cerca link simbolici interrotti con 'ls -l' e 'readlink -f <percorso>'
  6. Individua quale percorso manca con 'strace -f -e trace=openat,execve <comando> 2>&1 | grep ENOENT'
  7. In Docker, assicurati che il file sia stato copiato nell'immagine o montato e che i percorsi corrispondano a quelli del container, non dell'host

Perché succede

Qualsiasi ricerca di percorso che fallisce per un componente mancante restituisce ENOENT: file eliminati o mai creati, directory di lavoro errata, link simbolici interrotti, interpreti mancanti in uno shebang o file presenti solo sull'host e non in un container.

Domande frequenti

Perché compare «No such file or directory» anche se il file esiste?

Di solito lo shebang punta a un interprete mancante, lo script ha terminazioni di riga CRLF oppure a un binario a 32 bit manca il suo loader. 'file script' e 'head -1 script' aiutano a capirlo.

Come risolvo ENOENT in Node.js?

Costruisci i percorsi con path.join(__dirname, 'file') invece di usare percorsi relativi e verifica che il file esista nella build distribuita.

Errori correlati

Fonte: Linux kernel errno.h · soluzioni scritte e verificate dalla redazione (vedi la nostra politica editoriale)

Ultimo aggiornamento: