ENOENT (errno 2)
errno 2
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
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)
- 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
- 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
- Per 'npm ERR! enoent', esegui il comando nella cartella che contiene package.json, poi 'npm install' se manca node_modules
- 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'
- Cerca link simbolici interrotti con 'ls -l' e 'readlink -f <percorso>'
- Individua quale percorso manca con 'strace -f -e trace=openat,execve <comando> 2>&1 | grep ENOENT'
- 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: