Linux లో stdin, stdout మరియు stderr అంటే ఏమిటి?
stdin
, stdout
, మరియు stderr
మీరు Linux ఆదేశాన్ని ప్రారంభించినప్పుడు సృష్టించబడిన మూడు డేటా ప్రవాహాలు. మీ స్క్రిప్ట్లు పైప్ చేయబడుతున్నాయా లేదా మళ్ళించబడుతున్నాయో చెప్పడానికి మీరు వాటిని ఉపయోగించవచ్చు. ఎలాగో మేము మీకు చూపిస్తాము.
ప్రవాహాలు రెండు పాయింట్లలో చేరండి
మీరు Linux మరియు Unix- లాంటి ఆపరేటింగ్ సిస్టమ్స్ గురించి తెలుసుకోవడం ప్రారంభించిన వెంటనే, మీరు నిబంధనలను చూస్తారు stdin
, stdout
, మరియు stederr
. ఇవి మూడు ప్రామాణిక ప్రవాహాలు, ఇవి Linux కమాండ్ అమలు చేయబడినప్పుడు స్థాపించబడతాయి. కంప్యూటింగ్లో, స్ట్రీమ్ అనేది డేటాను బదిలీ చేయగల విషయం. ఈ స్ట్రీమ్ల విషయంలో, ఆ డేటా టెక్స్ట్.
నీటి ప్రవాహాల మాదిరిగా డేటా ప్రవాహాలు రెండు చివరలను కలిగి ఉంటాయి. వారికి మూలం మరియు low ట్ఫ్లో ఉన్నాయి. మీరు ఉపయోగిస్తున్న లైనక్స్ ఆదేశం ప్రతి స్ట్రీమ్ యొక్క ఒక చివరను అందిస్తుంది. మరొక చివర ఆదేశాన్ని ప్రారంభించిన షెల్ ద్వారా నిర్ణయించబడుతుంది. ఆ ముగింపు టెర్మినల్ విండోకు అనుసంధానించబడుతుంది, పైపుతో అనుసంధానించబడుతుంది లేదా ఆదేశాన్ని ప్రారంభించిన కమాండ్ లైన్ ప్రకారం ఫైల్ లేదా ఇతర ఆదేశానికి మళ్ళించబడుతుంది.
లైనక్స్ ప్రామాణిక స్ట్రీమ్స్
Linux లో,stdin
ప్రామాణిక ఇన్పుట్ స్ట్రీమ్. ఇది వచనాన్ని దాని ఇన్పుట్గా అంగీకరిస్తుంది. కమాండ్ నుండి షెల్ వరకు టెక్స్ట్ అవుట్పుట్ ద్వారా పంపబడుతుంది stdout
(ప్రామాణికం) స్ట్రీమ్. కమాండ్ నుండి లోపం సందేశాలు ద్వారా పంపబడతాయి stderr
(ప్రామాణిక లోపం) స్ట్రీమ్.
కాబట్టి రెండు అవుట్పుట్ స్ట్రీమ్స్ ఉన్నాయని మీరు చూడవచ్చు, stdout
మరియు stderr
, మరియు ఒక ఇన్పుట్ స్ట్రీమ్, stdin
. లోపం సందేశాలు మరియు సాధారణ అవుట్పుట్ ప్రతి ఒక్కటి టెర్మినల్ విండోకు తీసుకువెళ్ళడానికి వారి స్వంత మార్గాన్ని కలిగి ఉన్నందున, వాటిని ఒకదానికొకటి స్వతంత్రంగా నిర్వహించవచ్చు.
స్ట్రీమ్లు ఫైల్ల వలె నిర్వహించబడతాయి
లైనక్స్లోని స్ట్రీమ్లు-మిగతా వాటిలాగే-అవి ఫైల్లుగా పరిగణించబడతాయి. మీరు ఫైల్ నుండి వచనాన్ని చదవవచ్చు మరియు మీరు వచనాన్ని ఫైల్లోకి వ్రాయవచ్చు. ఈ రెండు చర్యలు డేటా ప్రవాహాన్ని కలిగి ఉంటాయి. కాబట్టి డేటా ప్రవాహాన్ని ఫైల్గా నిర్వహించే భావన అంతగా సాగదు.
ప్రాసెస్తో అనుబంధించబడిన ప్రతి ఫైల్ను గుర్తించడానికి ఒక ప్రత్యేక సంఖ్యను కేటాయించారు. దీన్ని ఫైల్ డిస్క్రిప్టర్ అంటారు. ఫైల్లో ఒక చర్య చేయవలసి వచ్చినప్పుడు, ఫైల్ను గుర్తించడానికి ఫైల్ డిస్క్రిప్టర్ ఉపయోగించబడుతుంది.
ఈ విలువలు ఎల్లప్పుడూ ఉపయోగించబడతాయి stdin
, stdout,
మరియు stderr
:
- 0: stdin
- 1: stdout
- 2: stderr
పైపులు మరియు దారిమార్పులకు ప్రతిస్పందిస్తుంది
ఒక విషయం గురించి మరొకరి పరిచయాన్ని సులభతరం చేయడానికి, అంశం యొక్క సరళీకృత సంస్కరణను నేర్పించడం ఒక సాధారణ సాంకేతికత. ఉదాహరణకు, వ్యాకరణంతో, నియమం “నేను E కి ముందు, సి తరువాత తప్ప” అని మాకు చెప్పబడింది. కానీ వాస్తవానికి, ఈ నియమానికి కట్టుబడి ఉన్న కేసుల కంటే ఎక్కువ మినహాయింపులు ఉన్నాయి.
ఇలాంటి సిరలో, గురించి మాట్లాడేటప్పుడు stdin
, stdout
, మరియు stderr
ఒక ప్రక్రియకు తెలియని లేదా దాని మూడు ప్రామాణిక ప్రవాహాలు ఎక్కడ ఆగిపోతాయో పట్టించుకోని అంగీకరించిన సిద్ధాంతాన్ని తొలగించడం సౌకర్యంగా ఉంటుంది. ఒక ప్రాసెస్ దాని అవుట్పుట్ టెర్మినల్కు వెళుతుందా లేదా ఫైల్ లోకి మళ్ళించబడుతుందా? దాని ఇన్పుట్ కీబోర్డ్ నుండి వస్తున్నదా లేదా మరొక ప్రక్రియ నుండి దానిలోకి పైప్ చేయబడుతుందా అని కూడా చెప్పగలరా?
వాస్తవానికి, ఒక ప్రక్రియకు తెలుసు-లేదా కనీసం అది కనుగొనగలదు, అది తనిఖీ చేయడాన్ని ఎంచుకుంటే - మరియు సాఫ్ట్వేర్ రచయిత ఆ కార్యాచరణను జోడించాలని నిర్ణయించుకుంటే దాని ప్రవర్తనను మార్చవచ్చు.
ప్రవర్తనలో ఈ మార్పును మనం చాలా సులభంగా చూడవచ్చు. ఈ రెండు ఆదేశాలను ప్రయత్నించండి:
ls
ls | పిల్లి
ది ls
దాని అవుట్పుట్ ఉంటే కమాండ్ భిన్నంగా ప్రవర్తిస్తుంది (stdout
) మరొక ఆదేశానికి పైప్ చేయబడుతోంది. అదిls
ఇది ఒకే కాలమ్ అవుట్పుట్కు మారుతుంది, ఇది చేసిన మార్పిడి కాదు పిల్లి
. మరియు ls
దాని అవుట్పుట్ మళ్ళించబడుతుంటే అదే పని చేస్తుంది:
ls> capture.txt
పిల్లి క్యాప్చర్. txt
Stdout మరియు stderr ని దారి మళ్లించడం
అంకితమైన స్ట్రీమ్ ద్వారా దోష సందేశాలను పంపించడంలో ప్రయోజనం ఉంది. దీని అర్థం మనం కమాండ్ యొక్క అవుట్పుట్ను మళ్ళించగలము (stdout
) ఫైల్కు మరియు ఇంకా ఏదైనా దోష సందేశాలను చూడండి (stderr
) టెర్మినల్ విండోలో. మీకు అవసరమైతే లోపాలు సంభవించినప్పుడు మీరు వాటికి ప్రతిస్పందించవచ్చు. ఇది ఫైల్ను కలుషితం చేయకుండా దోష సందేశాలను కూడా ఆపివేస్తుంది stdout
లోకి మళ్ళించబడుతుంది.
కింది వచనాన్ని ఎడిటర్లో టైప్ చేసి error.sh అనే ఫైల్లో సేవ్ చేయండి.
#! / bin / bash echo "ఉనికిలో లేని ఫైల్ను యాక్సెస్ చేయడానికి ప్రయత్నించబోతున్నారు" cat cat-filename.txt
ఈ ఆదేశంతో స్క్రిప్ట్ను ఎక్జిక్యూటబుల్ చేయండి:
chmod + x error.sh
స్క్రిప్ట్ యొక్క మొదటి పంక్తి వచనాన్ని టెర్మినల్ విండోకు ప్రతిధ్వనిస్తుందిstdout
స్ట్రీమ్. రెండవ పంక్తి ఉనికిలో లేని ఫైల్ను యాక్సెస్ చేయడానికి ప్రయత్నిస్తుంది. ఇది ద్వారా పంపబడే దోష సందేశాన్ని ఇది ఉత్పత్తి చేస్తుంది stderr
.
ఈ ఆదేశంతో స్క్రిప్ట్ను అమలు చేయండి:
./error.sh
అవుట్పుట్ యొక్క రెండు ప్రవాహాలు, stdout
మరియు stderr
, టెర్మినల్ విండోస్లో ప్రదర్శించబడతాయి.
అవుట్పుట్ను ఫైల్కు మళ్ళించడానికి ప్రయత్నిద్దాం:
./error.sh> capture.txt
ద్వారా పంపబడిన దోష సందేశం stderr
ఇప్పటికీ టెర్మినల్ విండోకు పంపబడుతుంది. మేము ఫైల్ యొక్క విషయాలను తనిఖీ చేయవచ్చు stdout
అవుట్పుట్ ఫైల్కు వెళ్ళింది.
పిల్లి క్యాప్చర్. txt
నుండి అవుట్పుట్ stdin
.హించిన విధంగా ఫైల్కు మళ్ళించబడుతుంది.
ది >
దారి మళ్లింపు గుర్తు పనిచేస్తుంది stdout
అప్రమేయంగా. మీరు దారి మళ్లించాలనుకుంటున్న ప్రామాణిక అవుట్పుట్ స్ట్రీమ్ను సూచించడానికి సంఖ్యా ఫైల్ డిస్క్రిప్టర్లలో ఒకదాన్ని ఉపయోగించవచ్చు.
స్పష్టంగా దారి మళ్లించడానికి stdout
, ఈ దారి మళ్లింపు సూచనను ఉపయోగించండి:
1>
స్పష్టంగా దారి మళ్లించడానికి stderr
, ఈ దారి మళ్లింపు సూచనను ఉపయోగించండి:
2>
మళ్ళీ మన పరీక్షకు ప్రయత్నిద్దాం, ఈ సమయంలో మేము ఉపయోగిస్తాము 2>
:
./error.sh 2> capture.txt
దోష సందేశం మళ్ళించబడుతుంది మరియు stdout
ప్రతిధ్వని
సందేశం టెర్మినల్ విండోకు పంపబడుతుంది:
Capture.txt ఫైల్లో ఏముందో చూద్దాం.
పిల్లి క్యాప్చర్. txt
ది stderr
message హించిన విధంగా సందేశం క్యాప్చర్.టెక్స్ట్లో ఉంది.
Stdout మరియు stderr రెండింటినీ దారి మళ్లించడం
ఖచ్చితంగా, మనం దారి మళ్లించగలిగితే stdout
లేదా stderr
ఒకదానికొకటి స్వతంత్రంగా ఒక ఫైల్కు, మేము వాటిని రెండింటినీ ఒకే సమయంలో, రెండు వేర్వేరు ఫైల్లకు మళ్ళించగలగాలి?
అవును మనం చేయగలం. ఈ ఆదేశం నిర్దేశిస్తుంది stdout
capture.txt మరియు అనే ఫైల్కు stderr
error.txt అనే ఫైల్కు.
./error.sh 1> capture.txt 2> error.txt
అవుట్పుట్-ప్రామాణిక అవుట్పుట్ మరియు ప్రామాణిక లోపం both యొక్క రెండు ప్రవాహాలు ఫైళ్ళకు మళ్ళించబడతాయి కాబట్టి, టెర్మినల్ విండోలో కనిపించే అవుట్పుట్ లేదు. ఏమీ జరగనట్లు మేము కమాండ్ లైన్ ప్రాంప్ట్కు తిరిగి వస్తాము.
ప్రతి ఫైల్ యొక్క విషయాలను తనిఖీ చేద్దాం:
పిల్లి క్యాప్చర్. txt
పిల్లి లోపం. txt
అదే ఫైల్కు stdout మరియు stderr ని మళ్ళించడం
ఇది చక్కగా ఉంది, ప్రతి ప్రామాణిక అవుట్పుట్ స్ట్రీమ్లు దాని స్వంత అంకితమైన ఫైల్కు వెళ్తున్నాయి. రెండింటినీ పంపించడమే మనం చేయగల ఇతర కలయిక stdout
మరియు stderr
అదే ఫైల్కు.
కింది ఆదేశంతో మనం దీనిని సాధించవచ్చు:
./error.sh> capture.txt 2> & 1
దానిని విచ్ఛిన్నం చేద్దాం.
- ./error.sh: Error.sh స్క్రిప్ట్ ఫైల్ను ప్రారంభించింది.
- > capture.txt: దారి మళ్ళిస్తుంది
stdout
capture.txt ఫైల్కు ప్రసారం చేయండి.>
సంక్షిప్తలిపి1>
. - 2>&1: ఇది &> దారిమార్పు సూచనలను ఉపయోగిస్తుంది. ఈ సూచన ఒక స్ట్రీమ్ను మరొక స్ట్రీమ్ వలె అదే గమ్యస్థానానికి చేరుకోవడానికి షెల్కు చెప్పడానికి మిమ్మల్ని అనుమతిస్తుంది. ఈ సందర్భంలో, మేము “దారిమార్పు స్ట్రీమ్ 2,
stderr
, స్ట్రీమ్ 1 అదే గమ్యానికి,stdout
, మళ్ళించబడుతుంది. ”
కనిపించే అవుట్పుట్ లేదు. అది ప్రోత్సాహకరంగా ఉంది.
Capture.txt ఫైల్ను తనిఖీ చేసి, దానిలో ఏముందో చూద్దాం.
పిల్లి క్యాప్చర్. txt
రెండూ stdout
మరియు stderr
స్ట్రీమ్లు ఒకే గమ్యం ఫైల్కు మళ్ళించబడతాయి.
స్ట్రీమ్ యొక్క అవుట్పుట్ మళ్ళించబడటానికి మరియు నిశ్శబ్దంగా విసిరివేయబడటానికి, అవుట్పుట్కు దర్శకత్వం వహించండి / dev / null
.
స్క్రిప్ట్లో మళ్లింపును గుర్తించడం
ఏదైనా స్ట్రీమ్లు దారి మళ్లించబడితే కమాండ్ ఎలా గుర్తించగలదో మేము చర్చించాము మరియు దాని ప్రవర్తనను తదనుగుణంగా మార్చడానికి ఎంచుకోవచ్చు. మన స్వంత లిపిలో దీనిని సాధించగలమా? అవును మనం చేయగలం. మరియు అర్థం చేసుకోవడం మరియు ఉపయోగించడం చాలా సులభమైన టెక్నిక్.
కింది వచనాన్ని ఎడిటర్లో టైప్ చేసి input.sh గా సేవ్ చేయండి.
#! / బిన్ / బాష్ ఉంటే [-t 0]; కీబోర్డ్ నుండి వచ్చే ఎకో స్టెడిన్ లేకపోతే పైపు లేదా ఫైల్ ఫై నుండి వచ్చే ఎకో స్టెడిన్
ఇది అమలు చేయదగినదిగా చేయడానికి క్రింది ఆదేశాన్ని ఉపయోగించండి:
chmod + x input.sh
తెలివైన భాగం చదరపు బ్రాకెట్లలోని పరీక్ష. ది -t
(టెర్మినల్) ఎంపిక నిజమైనది (0) ఫైల్ డిస్క్రిప్టర్తో అనుబంధించబడిన ఫైల్ టెర్మినల్ విండోలో ముగిస్తే. మేము ఫైల్ డిస్క్రిప్టర్ 0 ను పరీక్షకు వాదనగా ఉపయోగించాము, ఇది ప్రాతినిధ్యం వహిస్తుందిstdin
.
ఉంటే stdin
టెర్మినల్ విండోకు కనెక్ట్ చేయబడింది పరీక్ష నిజమని రుజువు చేస్తుంది. ఉంటే stdin
ఫైల్ లేదా పైపుకు కనెక్ట్ చేయబడింది, పరీక్ష విఫలమవుతుంది.
స్క్రిప్ట్కు ఇన్పుట్ను రూపొందించడానికి మేము ఏదైనా అనుకూలమైన టెక్స్ట్ ఫైల్ను ఉపయోగించవచ్చు. ఇక్కడ మేము dummy.txt అని పిలుస్తాము.
./input.sh <dummy.txt
ఇన్పుట్ కీబోర్డ్ నుండి రావడం లేదని, అది ఫైల్ నుండి వస్తున్నదని స్క్రిప్ట్ గుర్తించిందని అవుట్పుట్ చూపిస్తుంది. మీరు ఎంచుకుంటే, తదనుగుణంగా మీ స్క్రిప్ట్ యొక్క ప్రవర్తనను మీరు మార్చవచ్చు.
అది ఫైల్ దారి మళ్లింపుతో ఉంది, పైపుతో ప్రయత్నిద్దాం.
పిల్లి dummy.txt | ./input.sh
స్క్రిప్ట్ దాని ఇన్పుట్ దానిలోకి పైప్ చేయబడుతుందని గుర్తించింది. లేదా మరింత ఖచ్చితంగా, ఇది మరోసారి గుర్తిస్తుంది stdin
స్ట్రీమ్ టెర్మినల్ విండోకు కనెక్ట్ కాలేదు.
స్క్రిప్ట్ను పైపులు లేదా దారిమార్పులతో అమలు చేయనివ్వండి.
./input.sh
ది stdin
స్ట్రీమ్ టెర్మినల్ విండోకు కనెక్ట్ చేయబడింది మరియు స్క్రిప్ట్ దీనిని తదనుగుణంగా నివేదిస్తుంది.
అవుట్పుట్ స్ట్రీమ్తో ఇదే విషయాన్ని తనిఖీ చేయడానికి, మాకు క్రొత్త స్క్రిప్ట్ అవసరం. కిందివాటిని ఎడిటర్లో టైప్ చేసి output.sh గా సేవ్ చేయండి.
#! / బిన్ / బాష్ ఉంటే [-t 1]; అప్పుడు ఎకో stdout టెర్మినల్ విండోకు వెళుతుంది లేకపోతే ఎకో stdout మళ్ళించబడుతోంది లేదా fi పైప్ చేయబడుతోంది
ఇది అమలు చేయదగినదిగా చేయడానికి క్రింది ఆదేశాన్ని ఉపయోగించండి:
chmod + x input.sh
ఈ స్క్రిప్ట్కు మాత్రమే ముఖ్యమైన మార్పు చదరపు బ్రాకెట్లలోని పరీక్షలో ఉంది. ఫైల్ డిస్క్రిప్టర్ను సూచించడానికి మేము అంకె 1 ని ఉపయోగిస్తున్నాము stdout
.
దీనిని ప్రయత్నిద్దాం. మేము అవుట్పుట్ ద్వారా పైప్ చేస్తాము పిల్లి
.
./ అవుట్పుట్ | పిల్లి
స్క్రిప్ట్ దాని అవుట్పుట్ నేరుగా టెర్మినల్ విండోకు వెళ్ళదని గుర్తించింది.
అవుట్పుట్ను ఫైల్కు మళ్ళించడం ద్వారా మనం స్క్రిప్ట్ ను కూడా పరీక్షించవచ్చు.
./output.sh> capture.txt
టెర్మినల్ విండోకు అవుట్పుట్ లేదు, మేము నిశ్శబ్దంగా కమాండ్ ప్రాంప్ట్కు తిరిగి వస్తాము. మేము .హించినట్లు.
సంగ్రహించిన వాటిని చూడటానికి మనం క్యాప్చర్.టెక్స్ట్ ఫైల్ లోపల చూడవచ్చు. అలా చేయడానికి క్రింది ఆదేశాన్ని ఉపయోగించండి.
పిల్లి క్యాప్చర్
మళ్ళీ, మా స్క్రిప్ట్లోని సాధారణ పరీక్ష ఆ విషయాన్ని కనుగొంటుంది stdout
స్ట్రీమ్ నేరుగా టెర్మినల్ విండోకు పంపబడదు.
మేము పైపులు లేదా దారి మళ్లింపులు లేకుండా స్క్రిప్ట్ను నడుపుతుంటే, అది గుర్తించాలి stdout
నేరుగా టెర్మినల్ విండోకు బట్వాడా చేయబడుతోంది.
./output.sh
మరియు మేము చూసేది అదే.
స్పృహ యొక్క ప్రవాహాలు
మీ స్క్రిప్ట్లు టెర్మినల్ విండో, లేదా పైపుతో అనుసంధానించబడి ఉన్నాయా లేదా మళ్ళించబడుతున్నాయో ఎలా చెప్పాలో తెలుసుకోవడం, వారి ప్రవర్తనను తదనుగుణంగా సర్దుబాటు చేయడానికి మిమ్మల్ని అనుమతిస్తుంది.
లాగింగ్ మరియు డయాగ్నొస్టిక్ అవుట్పుట్ స్క్రీన్కు వెళ్తుందా లేదా ఫైల్పై ఆధారపడి ఉంటుందా అనే దానిపై ఆధారపడి ఎక్కువ లేదా తక్కువ వివరంగా ఉంటుంది. లోపం సందేశాలు సాధారణ ప్రోగ్రామ్ అవుట్పుట్ కంటే వేరే ఫైల్కు లాగిన్ అవ్వవచ్చు.
సాధారణంగా, ఎక్కువ జ్ఞానం మరిన్ని ఎంపికలను తెస్తుంది.