Oui, il semble que votre livre soit faux.
Le file
La commande indique de quel type de fichier il s'agit. Dans le fichier man :"fichier -- déterminer le type de fichier".
Quelques exemples :
$ file /usr/bin/file
/usr/bin/file: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=ecc4d67cf433d0682a5b7f3a08befc45e7d18057, stripped
$ file activemq-all-5.15.0.jar
activemq-all-5.15.0.jar: Java archive data (JAR)
Le type
commande est utilisée pour indiquer si une commande est intégrée ou externe :
$ type file
file is /usr/bin/file
$ type type
type is a shell builtin
Le type de fichier est normalement déterminé avec file
. Son man
indique :
fichier — déterminer le type de fichier
Mais vous pouvez aussi dans une certaine mesure utiliser type
. Comparez les deux annonces ci-dessous pour :
script.pl
, un script Perlnot_a_script
, un fichier vide
En voici une pour le script :
$ ls
script.pl
$ file script.pl
script.pl: Perl script text executable
$ type script.pl
bash: type: script.pl: not found
$ type ./script.pl
./script.pl is ./script.pl
Et en voici une pour le fichier vide :
$ ls not_a_script
not_a_script
$ file not_a_script
not_a_script: empty
$ type not_a_script
bash: type: not_a_script: not found
$ type ./not_a_script
bash: type: ./not_a_script: not found
Comme vous pouvez le voir, type
peut déterminer si un fichier est exécutable. Est-ce une "détermination du type de fichier" ou non ? Eh bien... D'une manière différente de ce que file
fournit. La description du type
intégré dans l'homme de Bash est le suivant :
tapez [-aftpP] nom [nom ...]
Sans option, indiquez comment chaque nom serait interprété s'il était utilisé comme nom de commande.
La bonne réponse à la question dans le livre devrait être à mon avis file
, car c'est ce que son man
dit, et c'est de cela qu'il s'agit de passer des tests. Ou en d'autres termes, mon premier choix est file
.