Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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.

En 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

diesel a écrit :

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.

kamaris a écrit :

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.

En ligne

#7 Le 13/04/2020, à 17:40

fgh

Re : Trouver l'adresse d'un fichier

Watael a écrit :

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

ar barzh paour a écrit :

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. wink


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

fgh a écrit :

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 big_smile

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

Watael a écrit :

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 !

kamaris a écrit :

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. hmm

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

fgh a écrit :

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 cool

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 wink
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

maxire a écrit :

À 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.

En 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

maxire a écrit :

À 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