1
Vývoj / jak zachránit historii z existující bash (gdb)
« Poslední příspěvek od Ħαℓ₸℮ℵ ␏⫢ ⦚ kdy Dnes v 23:48:59 »jak zachránit historii z běžícího bashe ? Ten bash byl spuštěn v době dřív kdy načetl histfile z dřívějška. Tudíž v něm je otisk history . Nyní je $HISTFILE přepsaný. Bohužel aktuální bash skončil.
0. ten bash proces stále beží, loginctl ho má pod sebou v exited session která šla přes ssh. asi má uzavřené IO. (exited asi 2 dny) ale pořád visí
1. Udělal jsem si gcore PID a přes strings/nano/less vidím položky historie=částečný úspěch ale v strings roztroušené a v různém pořadí asi a uvozené stringy číslem unix timesamptu #17....... (což popírá, že jsou roztroušené v jiném pořadí), nano zase mám spoustu balastu, nonprintable chars a taky nevidím vše pohromadě.
ls -l /proc/PID/fd ukazuje u 0 1 2 položek cíl pts/1 (deleted)
2 cesty mě napadají: gdb -p běžící bash. a nějak tomu procesu oživit stdin a stdout a pokusit se zapsat history a čekat s chřtánem na stdout. AI mi k tomu napsala třeba call (int) system("ls") - bojim se že to je ekvivalent exec ls a to víme co s bashem udělá.... fungovalo by syste(history) ? kde uvidím stdout ..Nebo přes nějaké duplikování deskriptorů
metoda 2: parsing core dumpu( který jsem si i přes gcore udělal pro případ, že třeba vypne se proud
).. s využitím gdb gdb bin/bash corefile ; print history_list ; x/20s 0x67...123 jak mi to radilo ale nevidím nic čitelného
3. má přímo bash někde v paměti proměnnou obsahující string $HISTFILE
4. je problém dostat z toho core dumpu správné pořadí té historie, protože půjde o nějaký linked list, ještě případně zpřeházený podle toho jak se ignoredups příkazy posouvají na konec. ?
HISTORIE má defaulních 500 položek.
0. ten bash proces stále beží, loginctl ho má pod sebou v exited session která šla přes ssh. asi má uzavřené IO. (exited asi 2 dny) ale pořád visí
1. Udělal jsem si gcore PID a přes strings/nano/less vidím položky historie=částečný úspěch ale v strings roztroušené a v různém pořadí asi a uvozené stringy číslem unix timesamptu #17....... (což popírá, že jsou roztroušené v jiném pořadí), nano zase mám spoustu balastu, nonprintable chars a taky nevidím vše pohromadě.
ls -l /proc/PID/fd ukazuje u 0 1 2 položek cíl pts/1 (deleted)
2 cesty mě napadají: gdb -p běžící bash. a nějak tomu procesu oživit stdin a stdout a pokusit se zapsat history a čekat s chřtánem na stdout. AI mi k tomu napsala třeba call (int) system("ls") - bojim se že to je ekvivalent exec ls a to víme co s bashem udělá.... fungovalo by syste(history) ? kde uvidím stdout ..Nebo přes nějaké duplikování deskriptorů
metoda 2: parsing core dumpu( který jsem si i přes gcore udělal pro případ, že třeba vypne se proud
).. s využitím gdb gdb bin/bash corefile ; print history_list ; x/20s 0x67...123 jak mi to radilo ale nevidím nic čitelnéhoCitace
0x622212369770 <history_list>: "\363\017\036\372H\213\005\255o\005"
0x62221236977b <history_list+11>: "\303\017\037@"
0x622212369780 <current_history>: "\363\017\036\372Hc\025\211o\005"
0x62221236978b <current_history+11>: ";\025\177o\005"...
0x6222123697a8 <current_history+40>: "1\300\303\017\037D"
0x6222123697af: ""
0x6222123697b0 <previous_history>: "\363\017\036\372\213\005Zo\005"
0x6222123697ba <previous_history+10>: "1҅\300t\026\203\350\001H\213\025^o\005"
0x6222123697ca <previous_history+26>: "\211\005Do\005"
0x6222123697d0 <previous_history+32>: "H\230H\213\024\302H\211\320\303f\017\037D"
0x6222123697df: ""
0x6222123697e0 <next_history>: "\363\017\036\372\213\005*o\005"
0x6222123697ea <next_history+10>: ";\005 o\005"
0x6222123697f0 <next_history+16>: "t\036\203\300\001H\213\025,o\005"
0x6222123697fc <next_history+28>: "\211\005\022o\005"
0x622212369802 <next_history+34>: "H\230H\213\004\302\303\017\037\200"
0x62221236980d <next_history+45>: ""
0x62221236980e <next_history+46>: ""
(gdb)
3. má přímo bash někde v paměti proměnnou obsahující string $HISTFILE
4. je problém dostat z toho core dumpu správné pořadí té historie, protože půjde o nějaký linked list, ještě případně zpřeházený podle toho jak se ignoredups příkazy posouvají na konec. ?
HISTORIE má defaulních 500 položek.
Poslední příspěvky
. jak docílím, aby jedno spuštění příkazu ln -s vydělalo do adresáře x symlinky na haldu souborů A B C D ?? Přičemž netrvám a tom, že adresář x nemusí existovat. 
