ගොනුවක වෙනස්කම් නිරීක්ෂණය කිරීමට ෂෙල් විධානය


169

යුනික්ස් හි විධානයක් ඇති බව මම දනිමි, ගොනුවක් අධීක්ෂණය කිරීමට සහ එයට ලියා ඇති වෙනස්කම් දැකීමට මට භාවිතා කළ හැකිය. ලොග් ලිපිගොනු පරීක්ෂා කිරීම සඳහා මෙය බෙහෙවින් ප්‍රයෝජනවත් විය.

එය හඳුන්වන්නේ කුමක්දැයි ඔබ දන්නවාද?

Answers:


223

ඔයා අදහස් කලේ

tail -f logfile.log

?

( වලිගය සඳහා මෑන් පිටුව )


7
ඔව්, එය නියම කාලයයි.
ඇඩම් ගිබින්ස්

18
Sidenote: ඔබේ බෙදාහැරීම tailf විධානය සපයන්නේ නම්, එය tail -f ට වඩා භාවිතා කරන්න. ටේල්ෆ් වඩාත් කාර්යක්ෂම වන්නේ එය නැරඹූ ගොනුවට ලියා නොමැති නම් එයට ප්‍රවේශ වීමට අවශ්‍ය නොවන නිසාය (ඔබ යාවත්කාලීන කිරීම් සමඟ ගොනු පද්ධතිය සවිකර තිබේ නම් ඡන්ද ප්‍රවේශයන් කරදරකාරී වේ.)
මිහයි ලිම්බන්

10
දී සුපිරි පරිශීලක මම එයට පිළිතුරක් සොයා නිර්දේශ වලිගය -f වෙනුවට -f ද,
Rafa

17
tail -Fලොග් ගොනු භ්‍රමණය කිරීමේදී විශේෂයෙන් ප්‍රයෝජනවත් වන ගොනු වස්තු වෙනුවට ගොනු නාමයන් අනුගමනය කරනු ඇත.
අමීර් අලි අක්බරි

3
යාවත්කාලීන කිරීම, වසර කිහිපයකට පසුව: tailfදැන් අතහැර දමා ඇති අතර tail -fඑය ආරක්ෂිතයි. (මෙය ඔබේ පද්ධතියේ තහවුරු කරන්න man tailf.) ප්‍රලේඛනය බලන්න: man7.org/linux/man-pages/man1/tailf.1.html
exp1orer

130

ජෝන් ස්කීට්ගේ පිළිතුරට අනුව ඔබ බොහෝ විට වලිගය අදහස් කර ඇත.

තවත් ප්‍රයෝජනවත් එකක් ඔරලෝසුවයි ; වරින් වර විධානයක් ක්‍රියාත්මක කිරීමට සහ ප්‍රතිදානය පූර්ණ තිරය බැලීමට එය ඔබට ඉඩ දෙයි. උදාහරණයක් වශයෙන්:

watch -n 10 -d ls -l / var / adm / messages

ls -l /var/adm/messagesසෑම තත්පර 10 කට වරක් විධානය ක්‍රියාත්මක කරනු ඇති අතර, පසුව ලැබෙන ලකුණු අතර ප්‍රතිදානයේ වෙනස ඉස්මතු කරයි. (උදාහරණයක් ලෙස ලොග්ෆයිල් එකක් කෙතරම් ඉක්මනින් වර්ධනය වේදැයි බැලීමට ප්‍රයෝජනවත් වේ).


44

inotifywaitසිට inotify-මෙවලම් වෙනස, ඔබ සෑම කාලය ගොනුව (හෝ බහලුම ඕනෑම ගොනු) විධාන ක්රියාත්මක කිරීමට අවශ්ය නම් ප්රයෝජනවත් වේ. උදාහරණයක් වශයෙන්:

inotifywait -r -m -e modify /var/log | 
   while read path _ file; do 
       echo $path$file modified
   done

3
pathවිචල්ය නාමයක් සඳහා විශාලතම තේරීම නොවන සටහනක් පමණි . මත zsh, එය පරිසරය vars තටු සංවේදී නොවේ බව පෙනේ. මට නම්, සැකසීම් ද සැකසීමට pathහේතු වන PATHඅතර, එයින් මූලික වශයෙන් අදහස් කරන්නේ ඔබ එය නිවැරදි කරන තුරු කිසිවක් ක්‍රියාත්මක නොවන බවයි. මත bash, සැකසුම pathකිසිදු බලපෑමක් නැත PATH.
තනාටෝස්

@Thanatos Zsh විචල්ය වේ නඩුව සංවේදී, නමුත් Zsh ම විසින් ඇති කරන ලද විචල්යයන් අතර, Zsh "සබඳතා" *PATHෙවත විචල්ය මාලාවක් එකම නම, නමුත් සිම්පල් . ගැටගැසුණු විචල්‍යයන් සැමවිටම පරිමාණයෙන් සහ අරාවකින් (උදා PATHසහ path) සමන්විත වන අතර එකක් වෙනස් කිරීම අනෙක වෙනස් කරයි. ප්‍රධාන ලක්ෂණය නම්, පරිමාණ අනුවාදයේ (ද :) අරා අනුවාදය බෙදුම්කරු මත ස්වයංක්‍රීයව බෙදී යාමයි . ඔබම බලන්න print "$PATH\n$path". මෑන් පිටුවේ PARAMETERS USED BY THE SHELLකොටසේ දෙවන ඡේදයේ zshparam(1)වඩාත් සවිස්තරාත්මක තොරතුරු ඇත.
ZeroKnight

තවත් සටහනක් ලෙස, බැඳ සිටින බව Zsh විසින් භාවිතා ඉතා විචල්යයන් කිහිපයක් පමණක් නොව තියෙන්නේ PATHහා path. ඒවා සියල්ලම මගේ පෙර අදහස් දැක්වීමේ කොටසේ ලැයිස්තුගත කර ඇත, නමුත් ඒවාට පමණක් සීමා නොවේ: FPATH/ fpath, CDPATH/ cdpath, MANPATH/ manpath, FIGNORE/ fignore, සහ තවත්.
ZeroKnight

37

විශේෂිත දෝෂයක් හෝ හැඳුනුම්පතක් සඳහා ලොග් ගොනුවක් සෙවීමට අවශ්‍ය බව මට පෙනෙන නිසා මම ඕවර less +FG1 ක් භාවිතා කිරීමට කැමැත්තෙමි tail -f. මට යමක් සෙවීමට අවශ්‍ය නම්, ^Cගොනුව අනුගමනය කිරීම නැවැත්වීමට සහ ?පසුපසට සෙවීම ආරම්භ කිරීමට මම ටයිප් කරමි .

යතුරු බන්ධන බොහෝ දුරට සමාන ය vi. +විකල්පය භාවිතා කරමින් ඕනෑම විධානයක් ආරම්භයේදී ආරම්භ කළ හැකිය:

+cmd   Causes  the  specified  cmd  to be executed each time a new file is
       examined.  For example, +G causes less to  initially  display  each
       file starting at the end rather than the beginning.

සැබවින්ම දිගු ල logs ු-සටහන් සඳහා, -nරේඛා අංකනය අක්‍රිය කරන විකල්පය භාවිතා කිරීම මට පහසුය . මෑන් පිටුවෙන්:

-n or --line-numbers
          Suppresses line numbers.  The default (to use line numbers)  may
          cause  less  to run more slowly in some cases, especially with a
          very large input file.  Suppressing line  numbers  with  the  -n
          option  will  avoid this problem.  Using line numbers means: the
          line number will be displayed in the verbose prompt and in the =
          command,  and the v command will pass the current line number to
          the editor (see also  the  discussion  of  LESSEDIT  in  PROMPTS
          below).

1. අදහස් දැක්වීමේදී මෙය පෙන්වා දීම සඳහා rgmarcha වෙත තොප්පියක් .


aliasඔබ අපේක්ෂිත විකල්ප සමඟ සැකසීමට මතක තබා ගන්න , එබැවින් ඔබට ඒවා සෑම විටම ටයිප් කිරීමට අවශ්‍ය නැත.
මයිකල් හැම්ප්ටන්

ඇත්ත වශයෙන්ම, ඔබ බොහෝ විට අන්වර්ථයන්ට වඩා ෂෙල් ක්‍රියාකාරිත්වයට වැඩි කැමැත්තක් දැක්විය යුතුය.
ත්‍රිත්ව

21

වලිගය විශිෂ්ටයි ... අඩුවෙන් භාවිතා කළ හැකිය ගොනුවේ අඩුවෙන් ආරම්භ කරන්න, එනම් අඩු මයිෆයිල් ඉන්පසු Shift+ ඔබන්න F. මෙය වලිගය ලෙස අඩු ක්‍රියාකාරිත්වයක් ඇත.


5
less + F
myfile

17

මම LaTeX ගොනුවක් සංස්කරණය කරමින් සිටින අතර මැද කොතැනක හෝ සිදුවන වෙනස්කම් සඳහා එය නිරීක්ෂණය කිරීමට අවශ්‍ය විය. මට ප්‍රයෝජනවත් වූ පහත දැක්වෙන කුඩා ෂෙල් පිටපත මම කසයෙන් තළා ගතිමි. එය වෙනත් කෙනෙකුට ප්‍රයෝජනවත් වේ යැයි මම බලාපොරොත්තු වෙමි.

#!/bin/bash
FILE="$1"
CMD="$2"
LAST=`ls -l "$FILE"`
while true; do
  sleep 1
  NEW=`ls -l "$FILE"`
  if [ "$NEW" != "$LAST" ]; then
    "$CMD" "$FILE"
    LAST="$NEW"
  fi
done

එය සුරකින්න watch.shසහ කරන්න chmod u+x watch.sh. ඉන්පසු මම එය පහත පරිදි ක්‍රියාත්මක කරමි:

./watch.sh file.tex pdflatex

සත්‍ය වෙනස් කිරීමක් සිදුවුවහොත් පමණක් විධානය ක්‍රියාත්මක කිරීමට ඔබට අවශ්‍ය නම්, `md5sum "$FILE"`ඒ වෙනුවට ඔබට භාවිතා කළ හැකිය `ls -l "$FILE"`.


1
තනි ගොනුවක් වෙනුවට නාමාවලි සහ ඒවායේ අන්තර්ගතය නැරඹීමට:NEW=`tree -sDct . -I 'ignore_pattern|another_pattern'`
ඇන්ඩි


6

ඔබට කර්නල් වලට සම්බන්ධ වන inotifywatch / inotifynight භාවිතා කළ හැකිය. මේ ආකාරයෙන් ඔබට "විවෘත", "වසන්න" හෝ "ප්‍රවේශය" වැනි දේවල් සඳහාද නැරඹිය හැකිය.

නමුත් ඔබට සරලවම එකතු කළ යුතු රේඛා ලබා ගැනීමට අවශ්‍ය නම් මම වලිගයට එකඟ වෙමි.


3

වලිගය යනු සම්මත, සාම්ප්‍රදායික, සෑම තැනකම ලබා ගත හැකි යුනික්ස් මෙවලමකි. තව ටිකක් නවීන මෙවලමක් වන්නේ බහු ලිපිගොනු වන අතර එමඟින් ලිපිගොනු කිහිපයක් එකවර නිරීක්ෂණය කළ හැකි අතර සින්ටැක්ස් ඉස්මතු කරයි.


3

ගොනුව වලිගයට අමතරව සෙවීමට මට අවශ්‍ය නම්, මම "F" විධානය සමඟ අඩුවෙන් භාවිතා කරමි.

වලිගය භාවිතා කරන විට, ගොනුව පෙරළී හෝ සංස්කරණය මගින් ප්‍රතිස්ථාපනය කළ හැකි නම් අමතර තර්ක අවශ්‍ය බව මතක තබා ගන්න (vim සඳහා පෙරනිමි ප්‍රකාරය: w).

tail -f මඟින් වලිගය ගොනු විස්තරය ගබඩා කර එය අනුගමනය කරයි. ගොනුව ප්‍රතිස්ථාපනය කළහොත් විස්තරය වෙනස් වේ. ලිපිගොනු විස්තර කරන්නා අනුගමනය කිරීමෙන් ලැබෙන වාසිය නම් ගොනුව නැවත නම් කිරීම නම්, ඔබ තවමත් එය අනුගමනය කරනු ඇත.

tail --follow = නම් කරන ලද ගොනුව වරින් වර නැවත විවෘත කිරීමෙන් එය ප්‍රතිස්ථාපනය කර ඇත්දැයි බැලීමට එය වලිගය නිරීක්ෂණය කරයි.

--retry යනු ඔබට ලොග් ගොනුවක් වලිගය කිරීමට අවශ්‍ය නම් තවත් ප්‍රයෝජනවත් විකල්පයකි, නමුත් ගොනුව තවම නිර්මාණය කර නොමැත.

tail -F යනු --follow = --retry සඳහා කෙටිමඟකි.


2

ටේල්ෆ් අමතක කරන්න, වෙනස යනු ඔබට අවශ්‍ය විධානයයි. ලිපිගොනු 2 ක් අතර හෝ එක් ගොනුවකට ලියන විට ඒවා තථ්‍ය කාලීනව (හෝ සමීපව) සිදුවන විට ඒවා නැරඹීමට හොඳ උපක්‍රමයක් මෙන්න.

වාර්තා තබා ගැනීම සඳහා ගොනුවකට වෙනස්කම් ලිවීම වැනි ඔබට අවශ්‍ය පරිදි හැසිරීම වෙනස් කිරීමට ඔබට මෙම ක්‍රම භාවිතා කළ හැකිය. පහත දැක්වෙන විධානයන් සඳහා ඔරලෝසුව හෝ වෙනත් විකල්පයන් සමඟ සෙල්ලම් කරන්න.

ඔබට ලිපිගොනු 1 ක් ඇති අතර එහි වෙනස්කම් සිදු කර ඇති බැවින් ඔබට නැරඹීමට අවශ්‍යය:

එබැවින් කළ යුතු දේ මෙන්න:

  1. ගොනුව පිටපත් කරන්න

    cp file file2
    
  2. වෙනස්කම් සොයා ගැනීමට bash ස්ක්‍රිප්ට් එකක් ලියන්න, සහ file2 යාවත්කාලීන කරන්න

    touch check-differences.sh
    nano check-differences.sh
    chmod 755 check-differences.sh
    
  3. තිර රචනය සඳහා මූලික අදහසක් මෙන්න. ඔබට අවශ්‍ය නම් එය ගොනුවකට ලිවීමට සලස්වන්න

    #!/bin/bash
    diff file file2
    cp file file2
  4. ඊළඟට ඔබට ඔරලෝසුව භාවිතයෙන් තිරයේ ඇති වෙනස්කම් නැරඹිය හැකිය

    watch ./check-differences
    

මෙය සෑම තත්පර 2 කට පෙරනිමියෙන් යාවත්කාලීන වේ. එබැවින් ඔබට ආපසු ගොස් ඒවා කියවීමට අවශ්‍ය නම්, පිටපතෙහි ගොනුවකට වෙනසෙහි ප්‍රතිදානය ලියන්න.

cronඔබට ප්‍රතිදානය දැකීමට අවශ්‍ය නැතිනම් ඔබේ ස්ක්‍රිප්ට් නිතිපතා ධාවනය කිරීමට භාවිතා කරන්න.


1

tail -f somefile.txtනව දත්ත සමඟ අනුචලනය කරන අතරම , සමහර විටless +G somefile.txt ගොනුවේ නවතම දත්ත සමූහයක් බැලීමට මම කැමැත්තෙමි .


6
මම හිතන්නේ ඒ සියල්ල මීට වසර 7 කට පෙර සිට මෙම පිළිතුරෙන් ආවරණය වී ඇත .
kasperd
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.