#1 Le 13/04/2020, à 16:51
- fgh
Trouver l'adresse d'un fichier
Bonjour tout le monde,
Je ne sais pas si cette section est adaptée à mon problème. Dans le cas contraire, veuillez m'excuser.
J'ai besoin de trouver l'adresse d'un fichier png stocké sur une carte SD. Je n'ai trouvé aucun post sur ce sujet, ni sur ce forum, ni ailleurs. Je n'ai rien trouvé dans la doc non plus. J'ai notamment cherché à la page https://doc.ubuntu-fr.org/tutoriel/cons … de_base#ls car j'espérais y trouver un aide de la part de la commande ls, mais rien non plus de ce côté là.
Merci d'avance
Dernière modification par fgh (Le 13/04/2020, à 16:52)
PC: hp Envy 15-K ; Processeur: Intel® Core™ i7-4510U CPU @ 2.00GHz × 4 ; 64 bits
Ubuntu: 18.04 LTS (Unity) ; Utilisateur depuis juillet 2017
Hors ligne
#2 Le 13/04/2020, à 17:00
- diesel
Re : Trouver l'adresse d'un fichier
Qu'est-ce que tu entends par "l'adresse d'un fichier png" ?
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 13/04/2020, à 17:00)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#3 Le 13/04/2020, à 17:06
- kamaris
Re : Trouver l'adresse d'un fichier
Hors ligne
#4 Le 13/04/2020, à 17:24
- Watael
Re : Trouver l'adresse d'un fichier
salut,
qu'a donné ls ?
qu'est-ce que tu en attendais ?
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#5 Le 13/04/2020, à 17:31
- fgh
Re : Trouver l'adresse d'un fichier
Qu'est-ce que tu entends par "l'adresse d'un fichier png" ?
L'adresse d'un fichier est un nombre qui indique l'endroit où il est stocké en mémoire.
https://doc.ubuntu-fr.org/tutoriel/cons … _base#find ?
Merci, mais je ne veux pas trouver le chemin vers mon fichier, puisque je sais où il est. Je veux trouver son adresse.
Dernière modification par fgh (Le 13/04/2020, à 17:33)
PC: hp Envy 15-K ; Processeur: Intel® Core™ i7-4510U CPU @ 2.00GHz × 4 ; 64 bits
Ubuntu: 18.04 LTS (Unity) ; Utilisateur depuis juillet 2017
Hors ligne
#6 Le 13/04/2020, à 17:39
- diesel
Re : Trouver l'adresse d'un fichier
Une carte SD est effectivement une mémoire mais qui est accessible via un contrôleur embarqué sur la puce.
Celui-ci présente en quelque sorte une émulation d'un disque dur, c'est à dire que l'espace mémoire de la carte est découpé en blocs , généralement de 512 octets.
Sur ces blocs de 512 octets, le système d'exploitation va plaquer une structure appelée système de fichier avec un répertoire et des tables qui permettent de relier les blocs contenant les différents bouts de ton fichier à son nom.
Alors, dire comme ça que tu veux obtenir "l'adresse du fichier"..., ben, ça fait bizarre parce qu'en fait, ça n'existe pas vraiment. Notamment, en fonction de l'historique de l'utilisation de ta carte SD, les différents blocs constituant ton fichier peuvent être éclatés sur tout l'espace de stockage de ta carte.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 13/04/2020, à 17:39)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#7 Le 13/04/2020, à 17:40
- fgh
Re : Trouver l'adresse d'un fichier
qu'a donné ls ?
qu'est-ce que tu en attendais ?
ls m'a donné les informations qu'elle est censée donner et qu'on trouve dans la documentation "https://doc.ubuntu-fr.org/tutoriel/cons … de_base#ls".
J'espérais d'elle qu'elle me donnerait l'adresse de mon fichier, comme je l'ai indiqué dans mon post de base.
PC: hp Envy 15-K ; Processeur: Intel® Core™ i7-4510U CPU @ 2.00GHz × 4 ; 64 bits
Ubuntu: 18.04 LTS (Unity) ; Utilisateur depuis juillet 2017
Hors ligne
#8 Le 13/04/2020, à 17:41
- ar barzh paour
Re : Trouver l'adresse d'un fichier
si c'est l'inode , ls -i te le donne
Dernière modification par ar barzh paour (Le 13/04/2020, à 17:42)
PC : B760M DS3H DDR4, 12th Gen Intel(R) Core(TM) i3-12100, RAM DDR4 8GiB -2400 Ubuntu 20.04, 22.04, 24.04 (en test )
Portable1 : ThinkPad P50 I7-6820HQ, 16G0 Ram Ubuntu 22.04 Ubuntu 24.04 , W10-PRO( en voyage )
Portable2 : T5750 @ 2.00GHz RAM 1GiB DDR2 667 Mhz Ubuntu 20.04 ( batterie HS )
stourm a ran war bep tachenn (Angela Duval) ( Je combats sur tous les fronts )
Hors ligne
#9 Le 13/04/2020, à 18:48
- fgh
Re : Trouver l'adresse d'un fichier
si c'est l'inode , ls -i te le donne
Qu'est-ce que l'inode ?
ls -i semble fonctionner, mais je ne pourrai le dire avec certitude que demain matin. Je passe le sujet en résolu dès que possible.
Merci beaucoup !
PC: hp Envy 15-K ; Processeur: Intel® Core™ i7-4510U CPU @ 2.00GHz × 4 ; 64 bits
Ubuntu: 18.04 LTS (Unity) ; Utilisateur depuis juillet 2017
Hors ligne
#10 Le 13/04/2020, à 19:04
- Watael
Re : Trouver l'adresse d'un fichier
l'inode, si j'ai bien compris, est un identifiant dans la table du système de fichier;
ça n'a pas de lien avec l'adresse physique sur un support de stockage de mémoire de masse.
de mémoire.
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#11 Le 13/04/2020, à 20:03
- kamaris
Re : Trouver l'adresse d'un fichier
Merci, mais je ne veux pas trouver le chemin vers mon fichier, puisque je sais où il est. Je veux trouver son adresse.
Je m'étais posé cette question il y a quelques temps, et il me semble que c'est cette réponse que j'avais utilisée : https://serverfault.com/a/309645
Il s'agit de conjuguer les commandes stat et debugfs, en l'écrivant plutôt comme ça pour éviter les problèmes liés aux espaces dans les noms de fichiers (ne pas intervertir les guillemets) :
debugfs -R 'stat "/chemin-du-fichier"' /dev/hda1
Il faut bien sûr adapter /dev/hda1 selon l'endroit où se trouve le fichier.
Avec ça, j'avais réussi à écrire avec dd « dans un fichier » en ayant récupéré son emplacement de départ (cas simple où on n'a qu'un bloc renvoyé par la commande).
PS : inutile de préciser que cette manipulation avec dd doit être faite sur une partition de test, sur un disque de test, et surtout pas sur un disque où il y a des données auxquelles on tient, car il y a largement moyen de se planter
Dernière modification par kamaris (Le 13/04/2020, à 20:09)
Hors ligne
#12 Le 14/04/2020, à 11:21
- fgh
Re : Trouver l'adresse d'un fichier
pas de lien avec l'adresse physique
Ah oui, mais non... En fait, je fais un projet d'électronique et mon but est d'insérer cette carte dans un écran pour ensuite de lui demander depuis un micro-contrôleur d'accéder au fichier png stocké sur la carte (grâce à l'adresse en mémoire de ce fichier) et de l'afficher à l'écran. Donc j'ai besoin de l'adresse physique. Et en effet, à chaque fois que j'enlève la carte SD de mon PC et que je la remets, l'adresse fournie par ls -i change, donc ce n'est pas ce que je recherche. Merci quand même !
Il faut bien sûr adapter /dev/hda1 selon l'endroit où se trouve le fichier.
Merci ! Mais par quoi est-ce que je dois remplacer le /dev/hda1 ?
PC: hp Envy 15-K ; Processeur: Intel® Core™ i7-4510U CPU @ 2.00GHz × 4 ; 64 bits
Ubuntu: 18.04 LTS (Unity) ; Utilisateur depuis juillet 2017
Hors ligne
#13 Le 14/04/2020, à 14:50
- Watael
Re : Trouver l'adresse d'un fichier
j'ai l'impression que tu nous demandes comment piloter une brouette sans les mains.
il faut que tu fasses une description plus précise de ton installation.
parce que si à un moment Linux est impliqué pour retrouver le fichier sur un support de stockage, pourquoi ce dernier n'est-il pas monté sur le système de fichier Linux ? 8O
Dernière modification par Watael (Le 14/04/2020, à 14:51)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#14 Le 14/04/2020, à 15:04
- Nasman
Re : Trouver l'adresse d'un fichier
Je pense que pour trouver l'emplacement du fichier sur un support de stockage, il faut regarder finement les spécification du système de fichiers de la partition sur laquelle se trouve le fichier.
Dans le temps j'avais regardé comment fonctionnait le fat32.
PC fixe sous Bionic 64 bits et portable avec Focal 64 bits
Hors ligne
#15 Le 14/04/2020, à 16:23
- kamaris
Re : Trouver l'adresse d'un fichier
Merci ! Mais par quoi est-ce que je dois remplacer le /dev/hda1 ?
Par le nom de ton périphérique : tu peux le repérer avec une commande comme lsblk.
Mais si tu en es à te poser ce genre de questions, tu ferais bien de faire très attention à ce que tu fais, et de te documenter avant de vouloir tripatouiller les données qui se trouvent sur un disque à l'aide d'outils de bas niveau.
Hors ligne
#16 Le 14/04/2020, à 18:02
- marcus68
Re : Trouver l'adresse d'un fichier
si ton support de stockage ne sert que pour ton fichier png,
sudo dd if=image.png of=/dev/tonstockage
L'adresse sera de 0, et pas de problème de fragmentation de fichier
Hors ligne
#17 Le 14/04/2020, à 19:18
- maxire
Re : Trouver l'adresse d'un fichier
Salut,
Commande filefrag option -v passée en mode super utilisateur, exemple :
filefrag -v initramfs-linux-lts.img
Filesystem type is: 9123683e
File size of initramfs-linux-lts.img is 11052683 (2699 blocks of 4096 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 2698: 28103647.. 28106345: 2699: last,eof
initramfs-linux-lts.img: 1 extent found
Ici l'adresse ou offset est 28103647.
Source : Wiki Archlinux consacré à l'hibernation : https://wiki.archlinux.org/index.php/Po … _swap_file
Par adresse du fichier il faut entendre adresse du premier bloc du fichier les adresses éventuelles de chaînage vers les blocs suivants s'y trouvent.
Note : La notion d'inode n'existe que pour les systèmes de fichiers linux de type ext et n'a aucun sens dans les cas du système BTRFS par exemple.
Dernière modification par maxire (Le 14/04/2020, à 19:39)
Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail
Hors ligne
#18 Le 14/04/2020, à 19:30
- kamaris
Re : Trouver l'adresse d'un fichier
filefrag, oui, bien vu
Je crois que c'est plutôt ça que j'avais utilisé (dont je parlais en #11).
Hors ligne
#19 Le 14/04/2020, à 19:38
- maxire
Re : Trouver l'adresse d'un fichier
J'ai tout de même mis un peu de temps à penser à filefrag car je me souvenais juste avoir déjà travaillé sur ce sujet voici quelques années à propos de l'hibernation via un fichier swap.
On peut d'alleurs améliorer pour obtenir direcement l'offset :
# filefrag -v initramfs-linux-lts.img | awk '{ if($1=="0:"){print $4} }'
28103647..
Il faut quand même travailler un peu cette commande pour supprimer les deux points finaux, awk dopit certainement pouvoir le réaliser.
Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail
Hors ligne
#20 Le 14/04/2020, à 19:41
- kamaris
Re : Trouver l'adresse d'un fichier
Oui :
filefrag -v initramfs-linux-lts.img | awk '$1=="0:"{print +$4}'
Hors ligne
#21 Le 15/04/2020, à 10:07
- maxire
Re : Trouver l'adresse d'un fichier
À la réflexion je ne suis pas certain qu'utiliser filefrag soit une bonne idée car filefrag est une commande utilitaire de e2fsprogs et donc son usage est pertinent avec un système de fichiers ext et pas nécessairement avec d'autres systèmes même si sa page man annonce le contraire.
Je viens de réaliser un test de recherche d'adresse d'un fichier dans un système BTRFS et j'ai le sentiment que filefrag me renvoie n'importe quoi en terme d'adresse.
Maxire
Archlinux/Mate + Ubuntu 22.04 + Archlinux/Gnome sur poste de travail
Hors ligne
#22 Le 15/04/2020, à 12:25
- diesel
Re : Trouver l'adresse d'un fichier
À la réflexion je ne suis pas certain qu'utiliser filefrag soit une bonne idée car filefrag est une commande utilitaire de e2fsprogs et donc son usage est pertinent avec un système de fichiers ext et pas nécessairement avec d'autres systèmes même si sa page man annonce le contraire.
Je viens de réaliser un test de recherche d'adresse d'un fichier dans un système BTRFS et j'ai le sentiment que filefrag me renvoie n'importe quoi en terme d'adresse.
Et si, en plus, le fichier est fragmenté...
Et puis, je ne comprends pas bien le besoin. Le format .png, à ma connaissance, ce n'est pas du raw. Donc, pour transférer l'image sur un écran, il faut une capacité de traitement non négligeable (pas seulement aligner quelques portes NAND). Dans ces conditions, ajouter le traitement du système de fichier FAT32 ne doit pas trop être un problème.
Amicalement.
Jean-Marie
Dernière modification par diesel (Le 15/04/2020, à 12:29)
Je déteste qu'on cherche à me faire passer pour un con, j'y arrive déjà très bien tout seul.
Le mort, il sait pas qu'il est mort ; c'est pour les autres que c'est dur.................... Pour les cons, c'est pareil.
Hors ligne
#23 Le 15/04/2020, à 12:41
- Watael
Re : Trouver l'adresse d'un fichier
je reste en attente d'une description plus précise de l'installation, et de savoir pourquoi les méthodes normales d'accès à un fichier ne sont pas applicables.
Dernière modification par Watael (Le 15/04/2020, à 12:43)
Connected \o/
Welcome to sHell. · eval is evil.
En ligne
#24 Le 15/04/2020, à 16:09
- kamaris
Re : Trouver l'adresse d'un fichier
À la réflexion je ne suis pas certain qu'utiliser filefrag soit une bonne idée car filefrag est une commande utilitaire de e2fsprogs et donc son usage est pertinent avec un système de fichiers ext et pas nécessairement avec d'autres systèmes même si sa page man annonce le contraire.
Je viens de réaliser un test de recherche d'adresse d'un fichier dans un système BTRFS et j'ai le sentiment que filefrag me renvoie n'importe quoi en terme d'adresse.
Il semble que pour des systèmes de fichiers autre que extN, il existe une taille limite de fichier en deçà de laquelle filefrag ne voit rien (en tout cas pas l'adresse du premier bloc du fichier).
Pour btrfs, je trouve 2049 octets :
$ lsblk -o name,size,type,fstype,mountpoint /dev/sdb
NAME SIZE TYPE FSTYPE MOUNTPOINT
sdb 3,8G disk
└─sdb1 3,8G part btrfs /run/media/user/15369a29-ab71-4163-98e9-3315c2d1c3dd
$
$ uuid=15369a29-ab71-4163-98e9-3315c2d1c3dd
$ for ((i=0;i<2048;i++)); do echo -n a; done >/run/media/user/$uuid/file && sudo filefrag -seb1 /run/media/user/$uuid/file
Filesystem type is: 9123683e
File size of /run/media/user/15369a29-ab71-4163-98e9-3315c2d1c3dd/file is 2048 (4096 block of 1 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 4095: 0.. 4095: 4096: last,not_aligned,inline,eof
/run/media/user/15369a29-ab71-4163-98e9-3315c2d1c3dd/file: 1 extent found
$
$ for ((i=0;i<2049;i++)); do echo -n a; done >/run/media/user/$uuid/file && sudo filefrag -seb1 /run/media/user/$uuid/file
Filesystem type is: 9123683e
File size of /run/media/user/15369a29-ab71-4163-98e9-3315c2d1c3dd/file is 2049 (4096 block of 1 bytes)
ext: logical_offset: physical_offset: length: expected: flags:
0: 0.. 4095: 13697024.. 13701119: 4096: last,eof
/run/media/user/15369a29-ab71-4163-98e9-3315c2d1c3dd/file: 1 extent found
$
$ sudo dd if=/dev/sdb1 bs=1 skip=13697024 count=10
aaaaaaaaaa10+0 enregistrements lus
10+0 enregistrements écrits
10 octets copiés, 0,00196079 s, 5,1 kB/s
$
Pour ntfs, je trouve de la même façon 657 octets.
Ces chiffres restent les mêmes si je reformate, par contre je ne sais pas s'ils sont propres à mon système, ou autre… (ils ne semblent pas correspondre à grand chose, en tout cas pas 657, car il est vrai que 2049 = 2*1024 + 1)
Après, on peut bien écrire avec dd à partir de l'adresse trouvée ci-dessus, comme je disais en #11, et je suis maintenant sûr que c'est bien filefrag que j'avais utilisé.
Dans l'exemple ci-dessus, ça donne :
$ sudo dd if=/dev/zero of=/dev/sdb1 bs=1 seek=13697024 count=5 && sync
5+0 enregistrements lus
5+0 enregistrements écrits
5 octets copiés, 0,0138613 s, 0,4 kB/s
$
$ sudo dd if=/dev/sdb1 bs=1 skip=13697024 count=10 | hexdump -C
10+0 enregistrements lus
10+0 enregistrements écrits
10 octets copiés, 0,00181232 s, 5,5 kB/s
00000000 00 00 00 00 00 61 61 61 61 61 |.....aaaaa|
0000000a
$
Rq. 1 : selon l'outil qu'on utilise pour interroger l'état de la partition après écriture avec dd, il peut être nécessaire de démonter / remonter le volume avant lecture (le sync mis après l'écriture par dd ci-dessus ne suffit pas toujours).
Rq. 2 : si j'interroge la partition directement avec hexdump pour lire le fichier, j'obtiens avec btrfs une erreur d'entrée / sortie :
$ hexdump -C </run/media/user/$uuid/file
hexdump: -C: Erreur d'entrée/sortie
$
Ça n'est pas le cas avec du ntfs ou du ext4, je ne sais pas pourquoi.
Dernière modification par kamaris (Le 15/04/2020, à 16:20)
Hors ligne