Vraag "/ Proc / self" - Dynamisch een zachte koppeling wijzigen


Ik was aan het dwalen over het Linux-bestandssysteem, dat eruit ziet als een goede manier om te begrijpen hoe het werkt. In UNIX "is alles een bestand", dus ik was aan het kijken /dev/stdin en merkte op dat het een zachte link is naar /proc/self/fd/0. Dus besloot ik om een ​​kijkje te nemen naar de /proc map, vinden dat /proc/self is eigenlijk een zachte link naar /proc/{PID}. Om preciezer te zijn, de PID is die van de ls -l /proc/self commando dat ik geef om de waarde te controleren.

Mijn theorie is dat de zachte link elke keer dat een programma het probeert te lezen verandert, om naar de juiste PID-procesmap te wijzen. Wordt dit door de kernel gedaan bij elk verzoek dat het krijgt om het te lezen /proc map? Ik denk niet dat je het bestand echt moet lezen om de uitvoer van te krijgen ls of we zouden geen bestanden met 700 permissies kunnen zien, dus de wijziging van de zachte link gebeurt wanneer de /proc map is geopend?

Gaat nog verder: is dit soort controle beperkt voor de kernel zelf of kunnen sommige toepassingen daar gebruik van maken? (Misschien controleren of een map wordt geopend om de inhoud / koppelingen dynamisch te wijzigen aan de hand van 'wie' het doet)


4
2017-08-09 02:58


oorsprong




antwoorden:


/proc is een aankoppelpunt voor procfs (soort van tmpfs, leeft in het geheugen), wat een interface is met de interne gegevensstructuur van de kernel. Waar je ook naar kijkt /proc wordt direct bevolkt door Linux en wordt ook onderhouden door de kernel zelf.

/proc/self is een symlink naar de /proc/<PID> directory, waar <PID> is de proces-ID van de procestoegang /proc op dat moment. Dus terwijl je binnen bent bash als je dat doet cd /proc/self, jij zal zijn cd-id in de /proc/<PID>/, waar <PID> is de PID voor die instantie van bash, terwijl als een ander proces, laten we zeggen voor cat:

$ cat /proc/self/comm
cat

Je moet absoluut niets veranderen in /proc behalve als kernel een interface biedt om de waarden te veranderen. De kernel biedt bijvoorbeeld de interface /proc/sys/ om kernelparameters tijdens runtime te veranderen, hoewel je meestal zou moeten gebruiken sysctl om waarden onder te veranderen /proc/sys/ in plaats van rechtstreeks een bestand te bewerken. Misbruik van de interne gegevensstructuur van Kernel zou resulteren in een onbruikbaar systeem of zelfs een systeemcrash.


3
2017-08-09 03:33



Is de reden de cd /proc/selfomleidingen naar de bash /proc/<BASH_PID> en ls -l /proc/self toont de /proc/<LS_PID> het feit cd is een shell ingebouwd en ls is een binaire applicatie? - IanC
@IanC-spot op .. - heemayl