рд▓рд┐рдирдХреНрд╕ рд╢реЗрд▓ рдХреЗ рд╕рд╛рде рдбреЛрдЬреЗрди рдЯреНрд░рд┐рдХ рдЬреЛ рдЖрдкрдХрд╛ рд╕рдордп рдмрдЪрд╛ рд╕рдХрддрд╛ рд╣реИ



  • рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рдЖрдк рдЗрд╕ рд▓реЗрдЦ рдХреЛ рд░реВрд╕реА рдореЗрдВ рдпрд╣рд╛рдВ рдкрдврд╝ рд╕рдХрддреЗ рд╣реИрдВред

рдПрдХ рд╢рд╛рдо, рдореИрдВ рдЬреЗрдлрд░реА рдлреНрд░реАрдбреЗрд▓ рджреНрд╡рд╛рд░рд╛ рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдкрдврд╝ рд░рд╣рд╛ рдерд╛, рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рднрд▓реЗ рд╣реА рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рднреА рджрд╕реНрддрд╛рд╡реЗрдЬ рд╣реЛрдВ рдФрд░ рдмрд╣реБрдд рдЕрдиреБрднрд╡ рд╣реЛ, рд▓реЗрдХрд┐рди рд╡рд┐рднрд┐рдиреНрди рд▓реЛрдЧреЛрдВ рджреНрд╡рд╛рд░рд╛ рд╡рд┐рдХрд╕рд┐рдд рдХрдИ рддрд░рдХреАрдмреЗрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рдЦреБрдж рдХреЛ рдХреИрдж рдХрд░ рд╕рдХрддреА рд╣реИрдВред рд╕рднреА рд▓реЛрдЧ рдЕрд▓рдЧ рд╣реИрдВред рдФрд░ рддрдХрдиреАрдХреЗрдВ рдЬреЛ рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рд╣реИрдВ, рджреВрд╕рд░реЛрдВ рдХреЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдФрд░ рддреАрд╕рд░реЗ рд╡реНрдпрдХреНрддрд┐ рдХреЗ рд▓рд┐рдП рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рдЕрдЬреАрдм рдЬрд╛рджреВ рдХреА рддрд░рд╣ рджрд┐рдЦ рд╕рдХрддреА рд╣реИрдВред рд╡реИрд╕реЗ, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╣реА рдпрд╣рд╛рдВ (рд░реВрд╕реА рдореЗрдВ) рдРрд╕реЗ рдХрдИ рдХреНрд╖рдгреЛрдВ рдХрд╛ рд╡рд░реНрдгрди рдХрд┐рдпрд╛ рд╣реИред

рд╡реНрдпрд╡рд╕реНрдерд╛рдкрдХ рдпрд╛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЗ рд▓рд┐рдП рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рди рдХреЗрд╡рд▓ рдПрдХ рдЙрдкрдХрд░рдг рд╣реИ рдЬреЛ рд╕рдм рдХреБрдЫ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рдмрд▓реНрдХрд┐ рдПрдХ рдЕрддреНрдпрдзрд┐рдХ рдЕрдиреБрдХреВрд▓рд┐рдд рдЙрдкрдХрд░рдг рднреА рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрд╢рд╛ рдХреЗ рд▓рд┐рдП рд╡рд┐рдХрд╕рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рд╛рд▓ рд╣реА рдореЗрдВ CLI рдореЗрдВ рдХреБрдЫ рдЙрдкрдпреЛрдЧреА рдЯреНрд░рд┐рдХреНрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдЕрдиреБрд╡рд╛рджрд┐рдд рд▓реЗрдЦ рдерд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдиреБрд╡рд╛рджрдХ рдХреЗ рдкрд╛рд╕ рд╕реАрдПрд▓рдЖрдИ рдХреЗ рд╕рд╛рде рдкрд░реНрдпрд╛рдкреНрдд рдЕрдиреБрднрд╡ рдирд╣реАрдВ рд╣реИ рдФрд░ рд╡рд░реНрдгрд┐рдд рдЯреНрд░рд┐рдХреНрд╕ рдХрд╛ рдкрд╛рд▓рди рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдЪреАрдЬреЗрдВ рдпрд╛рдж рдЖ рд╕рдХрддреА рд╣реИрдВ рдпрд╛ рдЧрд▓рдд рд╕рдордЭрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

рдХрдЯ рдХреЗ рддрд╣рдд - рд▓рд┐рдирдХреНрд╕ рд╢реЗрд▓ рдореЗрдВ рдПрдХ рджрд░реНрдЬрди рдЪрд╛рд▓реЗрдВ рдореЗрд░реЗ рд╡реНрдпрдХреНрддрд┐рдЧрдд рдЕрдиреБрднрд╡ рд╕реЗред

рдиреЛрдЯ: рд▓реЗрдЦ рдореЗрдВ рд╕рднреА рд▓рд┐рдкрд┐рдпреЛрдВ рдФрд░ рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЛ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдпрдерд╛рд╕рдВрднрд╡ рд╕рд░рд▓ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ - рдЗрд╕рд▓рд┐рдП рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдХрдИ рддрд░рдХреАрдмреЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдмреЗрдХрд╛рд░ рд▓рдЧреЗрдВ - рд╢рд╛рдпрдж рдпрд╣реА рдХрд╛рд░рдг рд╣реИред рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рднреА рдорд╛рдорд▓реЗ рдореЗрдВ, рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреЗ рджрд┐рдорд╛рдЧ рдХреЛ рд╕рд╛рдЭрд╛ рдХрд░реЗрдВ!

1. рдЪрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рд╕рд╛рде рд╡рд┐рднрд╛рдЬрд┐рдд рд╕реНрдЯреНрд░рд┐рдВрдЧ


рд▓реЛрдЧ рдЕрдХреНрд╕рд░ рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдпрд╛ рд╡рд┐рднрд╛рдЬрдХ рдХреЗ рд╕рд╛рде рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рдПрдХ рд╣рд┐рд╕реНрд╕реЗ рдХреЛ рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдЯ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЬрд╛рдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ $ {VARIABLE: start_position: length} рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдмреИрд╢ рдСрдкрд░реЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдмрд╣реБрдд рддреЗрдЬрд╝реА рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдмреИрд╢ #, ##,% рдФрд░ %% рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЯреЗрдХреНрд╕реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рд╕рд╛рде рд╣реЗрд░рдлреЗрд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА рддрд░реАрдХрд╛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ - рдЗрд╕реЗ рдмреИрд╢ рд╡реИрд░рд┐рдПрдмрд▓ рдПрдХреНрд╕рдкреИрд╢рди рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
рдЗрд╕ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ, рдЖрдк рдмрд╛рд╣рд░реА рдЖрджреЗрд╢реЛрдВ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдП рдмрд┐рдирд╛ рдкреИрдЯрд░реНрди рджреНрд╡рд╛рд░рд╛ рдЬрд░реВрд░рддрдордВрджреЛрдВ рдХреЛ рдХрд╛рдЯ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛ред

рдиреАрдЪреЗ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рддреАрд╕рд░рд╛ рдХреЙрд▓рдо (рд╢реЗрд▓) рдХреИрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ рдЬрд╛рдП, рдЬрд╣рд╛рдВ рдмреГрд╣рджрд╛рдиреНрддреНрд░ рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдорд╛рди "рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдирд╛рдо: homedir: рд╢реЗрд▓" рдХрдЯ рдпрд╛ рдЪрд░ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ (рд╣рдо *: рдорд╛рд╕реНрдХ рдФрд░ ## рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдХрд╛ рдЕрд░реНрде рд╣реИ: рдХрдЯ рдЕрдВрддрд┐рдо рдмреГрд╣рджрд╛рдиреНрддреНрд░ рдкрд╛рдП рдЬрд╛рдиреЗ рддрдХ рд╕рднреА рд╡рд░реНрдг рдмрд╛рдИрдВ рдУрд░:

$ STRING="username:homedir:shell" $ echo "$STRING"|cut -d ":" -f 3 shell $ echo "${STRING##*:}" shell 

рджреВрд╕рд░рд╛ рд╡рд┐рдХрд▓реНрдк рдмрд╛рд▓ рдкреНрд░рдХреНрд░рд┐рдпрд╛ ( рдХрдЯ ) рд╢реБрд░реВ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдкрд╛рдЗрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдмрд╣реБрдд рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдЕрдЧрд░ рдЖрдк рдЦрд┐рдбрд╝рдХрд┐рдпреЛрдВ рдкрд░ рдмреИрд╢ рд╕рдмрд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдкрд╛рдЗрдк рдореБрд╢реНрдХрд┐рд▓ рд╕реЗ рдЪрд▓рддреЗ рд╣реИрдВ, рддреЛ рдЧрддрд┐ рдЕрдВрддрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реЛрдЧрд╛ред

рдЖрдЗрдП рдЙрдмрдВрдЯреВ рдкрд░ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдЦреЗрдВ - 1000 рдмрд╛рд░ рдХреЗ рд▓рд┐рдП рд▓реВрдк рдореЗрдВ рд╣рдорд╛рд░реА рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░реЗрдВ

 $ cat test.sh #!/usr/bin/env bash STRING="Name:Date:Shell" echo "using cut" time for A in {1..1000} do cut -d ":" -f 3 > /dev/null <<<"$STRING" done echo "using ##" time for A in {1..1000} do echo "${STRING##*:}" > /dev/null done 

рдкрд░рд┐рдгрд╛рдо
 $ ./test.sh using cut real 0m0.950s user 0m0.012s sys 0m0.232s using ## real 0m0.011s user 0m0.008s sys 0m0.004s 

рдЕрдВрддрд░ рдХрдИ рджрд░реНрдЬрди рдмрд╛рд░ рд╣реИ!

рдмреЗрд╢рдХ, рдКрдкрд░ рдХрд╛ рдЙрджрд╛рд╣рд░рдг рдмрд╣реБрдд рдХреГрддреНрд░рд┐рдо рд╣реИред рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рд╣рдо рдПрдХ рд╕реНрдерд┐рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рд╣рдо рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдлрд╝рд╛рдЗрд▓ рдкрдврд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдФрд░ ' рдХрдЯ ' рдХрдорд╛рдВрдб рдХреЗ рд▓рд┐рдП, рд╣рдо рдЗрд╕реЗ рд░реАрдбрд╛рдпрд░реЗрдХреНрдЯ / рдЖрджрд┐ / рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВред ## рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рд╣рдореЗрдВ рдЖрдВрддрд░рд┐рдХ ' рд░реАрдб ' рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд▓реВрдк рдФрд░ рд░реАрдб рдлрд╛рдЗрд▓ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рддреЛ рдЗрд╕ рдХреЗрд╕ рдХреЛ рдХреМрди рдЬреАрддреЗрдЧрд╛?

 $ cat test.sh #!/usr/bin/env bash echo "using cut" time for count in {1..1000} do cut -d ":" -f 7 </etc/passwd > /dev/null done echo "using ##" time for count in {1..1000} do while read do echo "${REPLY##*:}" > /dev/null done </etc/passwd done 
рдкрд░рд┐рдгрд╛рдо
 $ ./test.sh $ ./test.sh using cut real 0m0.827s user 0m0.004s sys 0m0.208s using ## real 0m0.613s user 0m0.436s sys 0m0.172s 
рдХреЛрдИ рдЯрд┐рдкреНрдкрдгреА рдирд╣реАрдВ =)

рдХреБрдЫ рдФрд░ рдЙрджрд╛рд╣рд░рдг:

рд╕рдорд╛рди рд╡рд░реНрдг рдХреЗ рдмрд╛рдж рдорд╛рди рдирд┐рдХрд╛рд▓реЗрдВ:

 $ VAR="myClassName = helloClass" $ echo ${VAR##*= } helloClass 

рд░рд╛рдЙрдВрдб рдмреНрд░реИрдХреЗрдЯ рдореЗрдВ рдЯреЗрдХреНрд╕реНрдЯ рдирд┐рдХрд╛рд▓реЗрдВ:

 $ VAR="Hello my friend (enemy)" $ TEMP="${VAR##*\(}" $ echo "${TEMP%\)}" enemy 

рдЯреИрдм рдХреЗ рд╕рд╛рде 2. рдмреИрд╢ рд╕реНрд╡рддрдГ рдкреВрд░реНрдгрддрд╛


рдмреИрд╢-рд╕рдорд╛рдкрди рдкреИрдХреЗрдЬ рд▓рдЧрднрдЧ рд╣рд░ рд▓рд┐рдирдХреНрд╕ рд╡рд┐рддрд░рдг рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдЖрдк рдЗрд╕реЗ /etc/bash.bashrc рдпрд╛ /etc/profile.d/bash_completion.sh рдореЗрдВ рд╕рдХреНрд╖рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╕рд╛рдорд╛рдиреНрдп рддреМрд░ рдкрд░, рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рд▓рд┐рдирдХреНрд╕ рд╢реЗрд▓ рдкрд░ рдкрд╣рд▓реЗ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдХреНрд╖рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИ рдЬреЛ рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ рдПрдХ рдирд╡рд╛рдЧрдВрддреБрдХ рд╕реЗ рдорд┐рд▓рддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдпрд╣ рддрдереНрдп рдХрд┐ рд╕рднреА рд▓реЛрдЧ рд╕рднреА рдмреИрд╢-рдкреВрд░реНрдг рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдореЗрд░реА рд░рд╛рдп рдореЗрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрд░реНрде рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рд░ рдХреЛрдИ рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИ, рдХрд┐ рд╕реНрд╡рдд: рдкреВрд░реНрдгрддрд╛ рди рдХреЗрд╡рд▓ рдлрд╝рд╛рдЗрд▓ рдирд╛рдореЛрдВ рдХреЗ рд╕рд╛рде, рдмрд▓реНрдХрд┐ рдЙрдкрдирд╛рдореЛрдВ, рдЪрд░ рдирд╛рдореЛрдВ, рдлрд╝рдВрдХреНрд╢рди рдирд╛рдореЛрдВ рдФрд░ рдХреБрдЫ рдЖрджреЗрд╢реЛрдВ рдХреЗ рд╕рд╛рде рднреА рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддреА рд╣реИред рдпрджрд┐ рдЖрдк рд╕реНрд╡рддрдГ рдкреВрд░реНрдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЦреЛрджрддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИрдВ, рддреЛ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдЕрдиреБрдкреНрд░рдпреЛрдЧ рдпрд╛ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рд▓рд┐рдП рднреА рд╕реНрд╡рдд: рдкреВрд░реНрдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ ред
рд▓реЗрдХрд┐рди рд╣рдо рдЙрдкрдирд╛рдо рдкрд░ рд╡рд╛рдкрд╕ рдЖрддреЗ рд╣реИрдВред

рдЖрдкрдХреЛ рдЙрдкрдирд╛рдо рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП PATH рдЪрд░ рдХреЛ рд╕рдВрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдпрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдореЗрдВ рдлрд╝рд╛рдЗрд▓реЗрдВ рдмрдирд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдЖрдкрдХреЛ рдХреЗрд╡рд▓ рдЙрдиреНрд╣реЗрдВ рдкреНрд░реЛрдлрд╝рд╛рдЗрд▓ рдпрд╛ рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдХрд┐рд╕реА рднреА рд╕реНрдерд╛рди рд╕реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдЖрдорддреМрд░ рдкрд░ рд╣рдо рдлрд╝рд╛рдЗрд▓реЛрдВ рдФрд░ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд▓реЛрдЕрд░рдХреЗрд╕ рдЕрдХреНрд╖рд░реЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ * рдирд┐рдХреНрд╕ рдореЗрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдпрд╣ рдЕрдкрд░рдХреЗрд╕ рдЕрд▓рд╛рдпрд╕реЗрд╕ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЖрд░рд╛рдорджрд╛рдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ - рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдмреИрд╢-рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╕реЗ рдЖрдкрдХреА рдЖрдЬреНрдЮрд╛ рдХрд╛ рд▓рдЧрднрдЧ рдПрдХ рд╣реА рдЕрдХреНрд╖рд░ рд╕реЗ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 $ alias TAsteriskLog="tail -f /var/log/asteriks.log" $ alias TMailLog="tail -f /var/log/mail.log" $ TA[tab]steriksLog $ TM[tab]ailLog 

3. рдЯреИрдм рдХреЗ рд╕рд╛рде рдмреИрд╢ рдЖрдЯреЛрдХреНрд▓реЗрдореНрдкрд╢рди - рднрд╛рдЧ 2


рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рд╢рд╛рдпрдж рдЖрдк рдЕрдкрдиреА рдирд┐рдЬреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ $ HOME / bin рдореЗрдВ рдбрд╛рд▓рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
рд▓реЗрдХрд┐рди рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрд╛рдо рд╣реИред

рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЛ рдкрде рдпрд╛ рдЕрд▓рдЧ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИред рдФрд░ (рдзреНрдпрд╛рди) рдмрд╛рд╢ рдкреВрд░рд╛ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд╕рд╛рде рднреА рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

рдЪрд▓реЛред рдореЗрдВ рдЕрдВрддрд┐рдо Lastogogin рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рддреЗ рд╣реИрдВред (рдкреБрдирдГ рд▓реЛрдб рдХрд░рдирд╛ рди рднреВрд▓реЗрдВред)

 function LastLogin { STRING=$(last | head -n 1 | tr -s " " " ") USER=$(echo "$STRING"|cut -d " " -f 1) IP=$(echo "$STRING"|cut -d " " -f 3) SHELL=$( grep "$USER" /etc/passwd | cut -d ":" -f 7) echo "User: $USER, IP: $IP, SHELL=$SHELL" } 

(рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдИ рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдлрд╝рдВрдХреНрд╢рди рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдпрд╣ рд╕рд┐рд░реНрдл рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЕрд▓рдЧ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдпрд╛ рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЙрдкрдирд╛рдо рдХреЗ рд▓рд┐рдП рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдлрд╝рдВрдХреНрд╢рди рдмреЗрд╣рддрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) ред

рдХрдВрд╕реЛрд▓ рдореЗрдВ (рдХреГрдкрдпрд╛ рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдирд╛рдо рдореЗрдВ рдмреИрд╢-рдкреВрд░рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╣рд▓рд╛ рдЕрдХреНрд╖рд░ рд╣реИ):

 $ L[tab]astLogin User: saboteur, IP: 10.0.2.2, SHELL=/bin/bash 

4.1ред рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛


рдпрджрд┐ рдЖрдк рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрд┐рд╕реА рднреА рдХрдорд╛рдВрдб рд╕реЗ рдкрд╣рд▓реЗ рд╕реНрдкреЗрд╕ рджреЗрддреЗ рд╣реИрдВ, рддреЛ рдпрд╣ рдХрдорд╛рдВрдб рд╣рд┐рд╕реНрдЯреНрд░реА рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрджрд┐ рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рдореЗрдВ рдкреНрд▓реЗрди рдЯреЗрдХреНрд╕реНрдЯ рдкрд╛рд╕рд╡рд░реНрдб рдбрд╛рд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рддреЛ рдпрд╣ рдЗрд╕ рдлреАрдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рд╣реИ - рдиреАрдЪреЗ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ рджреЗрдЦреЗрдВ, рдЗрдХреЛ "рд╣реИрд▓реЛ" 2 " рдЗрддрд┐рд╣рд╛рд╕ рдореЗрдВ рджрд┐рдЦрд╛рдИ рдирд╣реАрдВ рджреЗрдЧрд╛:

 $ echo "hello" hello $ history 2 2011 echo "hello" 2012 history 2 $ echo "my password secretmegakey" # there are two spaces before 'echo' my password secretmegakey $ history 2 2011 echo "hello" 2012 history 2 

рдпрд╣ рд╡реИрдХрд▓реНрдкрд┐рдХ рд╣реИ
рдпрд╣ рдЖрдорддреМрд░ рдкрд░ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╕рдХреНрд╖рдо рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЖрдк рдЗрд╕ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ рдирд┐рдореНрди рдЪрд░ рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

рдирд┐рд░реНрдпрд╛рдд HISTCONTROL = рдЙрдкреЗрдХреНрд╖рд╛


4.2ред рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛


рдЖрдк рдЙрдиреНрд╣реЗрдВ рд╕рд░реНрд╡рд░ рдкрд░ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЧрд┐рдЯ рдореЗрдВ рдХреБрдЫ рд╢реЗрд▓ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реНрдЯреЛрд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдпрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдФрд░ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдбреЗрдЯрд╛рдмреЗрд╕ рд╕реЗ рдЬреБрдбрд╝реЗ рдпрд╛ рдХреБрдЫ рдФрд░ рднреА рдХрд░реЗ, рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛред

рдмреЗрд╢рдХ рдпрд╣ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╣реА рдХреНрд░реЗрдбреЗрдВрд╢рд┐рдпрд▓реНрд╕ рдХреЛ рд╕реНрдЯреЛрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдмреБрд░рд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЧрд┐рдЯ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рдЖрдорддреМрд░ рдкрд░ рдЖрдк рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓рдХреНрд╖рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рд╣реА рдирд╣реАрдВ рд╣реЛрдВрдЧреЗред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк 700 рдЕрдиреБрдорддрд┐рдпреЛрдВ рдХреЗ рд╕рд╛рде рдкреНрд░рддреНрдпреЗрдХ рд╡рд╛рддрд╛рд╡рд░рдг рдкрд░ рдЫреЛрдЯреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореБрдЦреНрдп рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗ рд╕реНрд░реЛрдд рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 secret.sh PASSWORD=LOVESEXGOD 

 myapp.sh source ~/secret.sh sqlplus -l user/"$PASSWORD"@database:port/sid @mysqfile.sql 

рд▓реЗрдХрд┐рди рдпрд╣ рд╕реБрд░рдХреНрд╖рд┐рдд рдирд╣реАрдВ рд╣реИред

рдпрджрд┐ рдХреЛрдИ рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдЖрдкрдХреЗ рд╣реЛрд╕реНрдЯ рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рд╡рд╣ рдкреАрдПрд╕ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдкрд╛рд╕рд╡рд░реНрдб рд╕рд╣рд┐рдд рдкреВрд░реА рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рддрд░реНрдХреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдкрдХреА sqlplus рдкреНрд░рдХреНрд░рд┐рдпрд╛ рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рд╕реБрд░рдХреНрд╖рд┐рдд рдЯреВрд▓ рдЖрдорддреМрд░ рдкрд░ рдлрд╛рдЗрд▓реЛрдВ рд╕реЗ рд╕реАрдзреЗ рдкрд╛рд╕рд╡рд░реНрдб / рдХреБрдВрдЬреА / рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рдХреЛ рдкрдврд╝рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП - рд╕реБрд░рдХреНрд╖рд┐рдд ssh рдХреЗ рдкрд╛рд╕ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднреА рдХреЛрдИ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рд╣реИред рд▓реЗрдХрд┐рди рд╡рд╣ рдлрд╝рд╛рдЗрд▓ рд╕реЗ ssh рдХреБрдВрдЬреА рдкрдврд╝ рд╕рдХрддрд╛ рд╣реИ (рдФрд░ рдЖрдк ssh рдХреБрдВрдЬреА рдлрд╝рд╛рдЗрд▓ рдкрд░ рд╕реБрд░рдХреНрд╖рд┐рдд рдЕрдиреБрдорддрд┐рдпрд╛рдБ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ)ред

рдФрд░ рдЧреИрд░-рд╕реБрд░рдХреНрд╖рд┐рдд wget рдореЗрдВ рдПрдХ рд╡рд┐рдХрд▓реНрдк "--password" рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдореЗрдВ рдкрд╛рд╕рд╡рд░реНрдб рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдФрд░ рд╣рд░ рд╕рдордп wget рдЪрд▓ рд░рд╣рд╛ рд╣реЛрдЧрд╛, рд╣рд░ рдХреЛрдИ ps рдХрдорд╛рдВрдб рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдкрд╛рд╕рд╡рд░реНрдб рджреЗрдЦ рд╕рдХрддрд╛ рд╣реИред

рдЕрддрд┐рд░рд┐рдХреНрдд рд░реВрдк рд╕реЗ, рдпрджрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рдВрд╡реЗрджрдирд╢реАрд▓ рдбреЗрдЯрд╛ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ git рд╕реЗ рдирд┐рдпрдВрддреНрд░рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдПрдиреНрдХреНрд░рд┐рдкреНрд╢рди рд╣реИред рддреЛ рдЖрдк рд╣рд░ рд▓рдХреНрд╖рд┐рдд рд╡рд╛рддрд╛рд╡рд░рдг рдореЗрдВ рдХреЗрд╡рд▓ рдорд╛рд╕реНрдЯрд░ рдкрд╛рд╕рд╡рд░реНрдб рдбрд╛рд▓рддреЗ рд╣реИрдВ, рдФрд░ рдЕрдиреНрдп рд╕рднреА рдбреЗрдЯрд╛ рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдХреЗ рдЧрд┐рдЯ рдореЗрдВ рдбрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдФрд░ рдЖрдк рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреЛ рдХрд┐ рдУрдкрдирд╕реН рдХреНрд▓реАрдпрд░ рд╕реАрдПрд▓рдЖрдИ рдЗрдВрдЯрд░рдлреЗрд╕ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рдпрд╣рд╛рдБ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рд╕реЗ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдФрд░ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рд╣реИ:

рдлрд╝рд╛рдЗрд▓ secret.key рдореЗрдВ рдорд╛рд╕реНрдЯрд░ рдХреБрдВрдЬреА рд╣реИ - рдПрдХ рдПрдХрд▓ рдкрдВрдХреНрддрд┐:

 $ echo "secretpassword" > secret.key; chmod 600 secret.key 

рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдИрдПрд╕-256-рд╕реАрдмреАрд╕реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ:

 $ echo "string_to_encrypt" | openssl enc -pass file:secret.key -e -aes-256-cbc -a U2FsdGVkX194R0GmFKCL/krYCugS655yLhf8aQyKNcUnBs30AE5lHN5MXPjjSFML 

рдЖрдк рдЗрд╕ рдПрдиреНрдХреНрд░рд┐рдкреНрдЯреЗрдб рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ git рдпрд╛ рдХрд┐рд╕реА рдЕрдиреНрдп рд╕реНрдерд╛рди рдкрд░ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рд╕реА рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд░рдЦ рд╕рдХрддреЗ рд╣реИрдВ - secret.key рдХреЗ рдмрд┐рдирд╛ рдЗрд╕реЗ рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХрд░рдирд╛ рд▓рдЧрднрдЧ рдЕрд╕рдВрднрд╡ рд╣реИред
рдбрд┐рдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдЙрд╕реА рдЖрджреЗрд╢ рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП -d рдХреЗ рд╕рд╛рде рдмрджрд▓реЗрдВ -d:

 $ echo 'U2FsdGVkX194R0GmFKCL/krYCugS655yLhf8aQyKNcUnBs30AE5lHN5MXPjjSFML' | openssl enc -pass file:secret.key -d -aes-256-cbc -a string_to_encrypt 

5. grep рдХрдорд╛рдВрдб


рд╕рднреА рдХреЛ grep рдХрдорд╛рдВрдб рдкрддрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдФрд░ рдирд┐рдпрдорд┐рдд рднрд╛рд╡реЛрдВ рдХреЗ рдЕрдиреБрдХреВрд▓ рд╣реЛред рдФрд░ рдЕрдХреНрд╕рд░ рдЖрдк рдХреБрдЫ рдРрд╕рд╛ рд▓рд┐рдЦ тАЛтАЛрд╕рдХрддреЗ рд╣реИрдВ:

 tail -f application.log | grep -i error 

рдпрд╛ рдЗрд╕ рддрд░рд╣ рднреА:

 tail -f application.log | grep -i -P "(error|warning|failure)" 

рд▓реЗрдХрд┐рди рдпрд╣ рдордд рднреВрд▓реЛ рдХрд┐ grep рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЕрджреНрднреБрдд рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг -v рдХреЗ рд▓рд┐рдП, рдЬреЛ рдЖрдкрдХреА рдЦреЛрдЬ рдХреЛ рдкреБрдирдГ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рддрд╛ рд╣реИ рдФрд░ "рд╕реВрдЪрдирд╛" рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рджрд┐рдЦрд╛рддрд╛ рд╣реИ:

 tail -f application.log | grep -v -i "info" 

рдЕрддрд┐рд░рд┐рдХреНрдд рд╕рд╛рдорд╛рди:

рд╡рд┐рдХрд▓реНрдк рдкреА рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧреНрд░реАрдк рджреНрд╡рд╛рд░рд╛ "рдкреБрд░рд╛рдиреА рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐:" рдФрд░ рдкреБрд░рд╛рдиреА рдкреАрд╕реАрдЖрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рд╕рдореВрд╣реАрдХрд░рдг рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреА рдирд╣реАрдВ рдЬрд╛рдирддрд╛ рд╣реИред
-рдореИрдВ рдорд╛рдорд▓реЗ рдХреА рдЕрдирджреЗрдЦреА рдХрд░рддрд╛ рд╣реВрдВред
-рд▓рд╛рдЗрди-рдмрдлрд░ рдкрд╛рд░реНрд╕ рд▓рд╛рдЗрди рдорд╛рдирдХ 4k рдмрдлрд░ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рддреБрд░рдВрдд (рдкреВрдВрдЫ -f | grep рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА)ред

рдпрджрд┐ рдЖрдк рдирд┐рдпрдорд┐рдд рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рддреЛ рдПрдХ-рдорд┐рд▓рд╛рди / / -рдУ рдХреЗ рд╕рд╛рде рдЖрдк рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкрд╛рда рдХреЛ рдХрд╛рдЯрдиреЗ рдХреЗ рд╕рд╛рде рдПрдХ рдорд╣рд╛рди рдХрд╛рдо рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдорд╛рдИрд╕рд░ рдХреЗ рдЦреЛрд▓ рдХреЛ рдирд┐рдХрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╕ рдЕрдЧрд▓реЗ рджреЛ рдХрдорд╛рдВрдбреНрд╕ рдХреА рддреБрд▓рдирд╛ рдХрд░реЗрдВ:

 $ grep myuser /etc/passwd| cut -d ":" -f 7 $ grep -Po "^myuser(:.*){5}:\K.*" /etc/passwd 

рджреВрд╕рд░рд╛ рдХрдорд╛рдВрдб рдЕрдзрд┐рдХ рд╕рдВрдХрд▓рд┐рдд рджрд┐рдЦрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХреЗрд╡рд▓ grep рдФрд░ рдХрдЯреМрддреА рдХреЗ рдмрдЬрд╛рдп grep рдЪрд▓рд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдХрдо рд╕рдордп рд▓рдЧреЗрдЧрд╛ред

6. рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдЖрдХрд╛рд░ рдХреИрд╕реЗ рдХрдо рдХрд░реЗрдВ


* Nix рдореЗрдВ, рдпрджрд┐ рдЖрдк рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рддреЗ рд╣реИрдВ, рдЬреЛ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдПрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдЖрдк рдХреЗрд╡рд▓ рд╕рднреА рд▓реЙрдЧ рдХреЛ рд╣рдЯрд╛ рдирд╣реАрдВ рд╕рдХрддреЗ рд╣реИрдВ, рдЖрдк рдирдП рд▓реЙрдЧ рдХреЛ рдкреБрдирд░рд╛рд░рдВрдн рдХрд░рдиреЗ рддрдХ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рд▓рд┐рдЦрдиреЗ рд╕реЗ рд░реЛрдХ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпреЛрдВрдХрд┐ рдлрд╝рд╛рдЗрд▓ рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдлрд╝рд╛рдЗрд▓ рдХрд╛ рдирд╛рдо рдирд╣реАрдВ рдЦреЛрд▓рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди iNode рд╕рдВрд░рдЪрдирд╛, рдФрд░ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрдЯрд░ рдХреЛ рд▓рд┐рдЦрдирд╛ рдЬрд╛рд░реА рд░рдЦреЗрдЧрд╛, рдЬрд┐рд╕рдореЗрдВ рдХреЛрдИ рдирд┐рд░реНрджреЗрд╢рд┐рдХрд╛ рдкреНрд░рд╡рд┐рд╖реНрдЯрд┐ рдирд╣реАрдВ рд╣реИ, рдФрд░ рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЖрд╡реЗрджрди рд░реЛрдХрдиреЗ рдХреЗ рдмрд╛рдж рдРрд╕реА рдлрд╝рд╛рдЗрд▓ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╣рдЯрд╛ рджреА рдЬрд╛рдПрдЧреА ( рдЖрдкрдХрд╛ рдЖрд╡реЗрджрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИ) рдУрдкрди рдФрд░ рдХреНрд▓реЛрдЬ рд▓реЙрдЧ рдлрд╛рдЗрд▓ рд╣рд░ рдмрд╛рд░ рдЬрдм рд╡рд╣ рдЗрд╕ рддрд░рд╣ рдХреЗ рдореБрджреНрджреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓рд┐рдЦрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рджрд░реНрд╢рди рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рддрд╛ рд╣реИ )ред

рддреЛ, рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛рдП рдмрд┐рдирд╛ рдХреИрд╕реЗ рд╕рд╛рдлрд╝ рдХрд░реЗрдВ:

 echo "" > application.log 

рдпрд╛ рд╣рдо truncate рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 truncate --size=1M application.log 

рдЙрд▓реНрд▓реЗрдЦ рдХрд░реЗрдВ, рд╡рд╣ рдЫреЛрдЯрд╛ рдХрдорд╛рдВрдб рд╢реЗрд╖ рдлрд╝рд╛рдЗрд▓ рдХреЛ рд╣рдЯрд╛ рджреЗрдЧрд╛, рдЬрд┐рд╕рд╕реЗ рдЖрдк рдирд╡реАрдирддрдо рд▓реЙрдЧ рдИрд╡реЗрдВрдЯ рдЦреЛ рджреЗрдВрдЧреЗред рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░реЗрдВ рдХрд┐ рдкрд┐рдЫрд▓реЗ 1000 рд▓рд╛рдЗрдиреЛрдВ рдХреЛ рдХреИрд╕реЗ рд╕рдВрдЧреНрд░рд╣реАрдд рдХрд┐рдпрд╛ рдЬрд╛рдП:

 echo "$(tail -n 1000 application.log)" > application.log 

PS рд▓рд┐рдирдХреНрд╕ рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдорд╛рдирдХ рд╕реЗрд╡рд╛ рд░реЛрдЯреЗрдЯрд▓реЙрдЧ рд╣реИред рдЖрдк рдЕрдкрдиреЗ рд▓реЙрдЧ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд truncate / рд░реЛрдЯреЗрдЯ рдореЗрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдореМрдЬреВрджрд╛ рд▓реЙрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдЖрдкрдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЬреИрд╕реЗ рдЬрд╛рд╡рд╛ рдореЗрдВ log4j)ред

7. рджреЗрдЦреЛ рддреБрдореНрд╣рд╛рд░реЗ рд▓рд┐рдП рджреЗрдЦ рд░рд╣рд╛ рд╣реИ!


рдПрдХ рд╕реНрдерд┐рддрд┐ рд╣реИ рдЬрдм рдЖрдк рдХрд┐рд╕реА рдШрдЯрдирд╛ рдХреЗ рд╕рдорд╛рдкреНрдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдмрдХрд┐ рдХреЛрдИ рдЕрдиреНрдп рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢реЗрд▓ рдореЗрдВ рдЬрд╛рддрд╛ рд╣реИ (рдЖрдк рд▓рдЧрд╛рддрд╛рд░ рдХрдорд╛рдВрдб рдХреЛ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд░рддреЗ рд╣реИрдВ ), рдпрд╛ рдХрд┐рд╕реА рдХреЛ scp рдпрд╛ ftp рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЖрдкрдХреА рдорд╢реАрди рдореЗрдВ рдлрд╛рдЗрд▓ рдХреЙрдкреА рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдФрд░ рдЖрдк рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХрд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣реЗ рд╣реИрдВ (рдПрд▓рдПрд╕ рджрд░реНрдЬрдиреЛрдВ рдмрд╛рд░ рджреЛрд╣рд░рд╛ рд░рд╣реЗ рд╣реИрдВ)ред

рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ, рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ

 watch <command> 

рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ, Ctrl + C рджрдмрд╛рдП рдЬрд╛рдиреЗ рддрдХ рд╕реНрдХреНрд░реАрди рдХреЗ рдкреВрд░реНрд╡-рд╕рд╛рдлрд╝ рдХреЗ рд╕рд╛рде рд╣рд░ 2 рд╕реЗрдХрдВрдб рдореЗрдВ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЖрдк рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ рдХрд┐рддрдиреА рдмрд╛рд░ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдЬрдм рдЖрдк рд▓рд╛рдЗрд╡ рд▓реЙрдЧ рджреЗрдЦрдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИред

8. рдмреИрд╢ рдХреНрд░рдо


рдкрд░реНрд╡рддрдорд╛рд▓рд╛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рдирд┐рд░реНрдорд╛рдг рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреЗ рдмрдЬрд╛рдп:

 for srv in 1 2 3 4 5; do echo "server${srv}";done server1 server2 server3 server4 server5 

рдЖрдк рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд┐рдЦ рд╕рдХрддреЗ рд╣реИрдВ:

 for srv in server{1..5}; do echo "$srv";done server1 server2 server3 server4 server5 

рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЖрдк рд╕реНрд╡рд░реВрдкрд┐рдд рдкрд░реНрд╡рддрдорд╛рд▓рд╛ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП seq рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╣рдо seq рдХрд╛ рдЙрдкрдпреЛрдЧ рдорд╛рдиреЛрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕реЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪреМрдбрд╝рд╛рдИ (00, 01 рдХреЗ рдмрдЬрд╛рдп 0, 1) рджреНрд╡рд╛рд░рд╛ рд╕рдорд╛рдпреЛрдЬрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛:

 for srv in $(seq -w 5 10); do echo "server${srv}";done server05 server06 server07 server08 server09 server10 

рдХрдорд╛рдВрдб рдкреНрд░рддрд┐рд╕реНрдерд╛рдкрди рдХреЗ рд╕рд╛рде рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг - рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓реЗрдВред рдмрд┐рдирд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХреЗ рдлрд╝рд╛рдЗрд▓ рдирд╛рдо рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдо ' basename ' рдХрдорд╛рдВрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ:

 for file in *.txt; do name=$(basename "$file" .txt);mv $name{.txt,.lst}; done 

'%' рдХреЗ рд╕рд╛рде рдФрд░ рднреА рдХрдо:

 for file in *.txt; do mv ${file%.txt}{.txt,.lst}; done 

PS рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЙрди рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рдирд╛рдо рдмрджрд▓рдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд┐рдиреНрд╣реЗрдВ рдЖрдк ' рдирд╛рдо рдмрджрд▓рдиреЗ ' рдХреЗ рд▓рд┐рдП рдЖрдЬрд╝рдорд╛ рд╕рдХрддреЗ рд╣реИрдВ рдЬрд┐рдирдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред

рдПрдХ рдФрд░ рдЙрджрд╛рд╣рд░рдг - рдирдП рдЬрд╛рд╡рд╛ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рд╕рдВрд░рдЪрдирд╛ рдмрдирд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ:

 mkdir -p project/src/{main,test}/{java,resources} 

рдкрд░рд┐рдгрд╛рдо
 project/ !--- src/ |--- main/ | |-- java/ | !-- resources/ !--- test/ |-- java/ !-- resources/ 

9. рдкреВрдВрдЫ, рдХрдИ рдлрд╛рдЗрд▓реЗрдВ, рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ ...


рдореИрдВрдиреЗ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдкрдврд╝рдиреЗ рдФрд░ рдХрдИ рд▓рд╛рдЗрд╡ рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдорд▓реНрдЯреАрдЯреИрд▓ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдпрд╣ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдФрд░ рдХреБрдЫ рд╣рдореЗрд╢рд╛ рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реЛрдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред

рд▓реЗрдХрд┐рди рдорд╛рдирдХ рдкреВрдВрдЫ рдпрд╣ рднреА рдХрд░ рд╕рдХрддреА рд╣реИ:

 tail -f /var/logs/*.log 

рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдпрд╛рдж рдХрд░рдиреЗ рджреЗрддрд╛ рд╣реИ, рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП 'рдЯреЗрд▓-рдПрд▓' рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВред
рдХрдИ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ 'рдЯреЗрд▓ -f' рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧ рдлрд╛рдЗрд▓ рдХреЛ рдПрдХ рд╕рд╛рде рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЙрдирдореЗрдВ рд╕реЗ рдХреБрдЫ рдЕрдкрдиреЗ рд╕рддреНрд░ рдХреЗ рд╕рд╛рде рдмрд╣реБрдд рд╕рдЯреАрдХ рдирд╣реАрдВ рд╣реИрдВред рд╡реЗ рдХрд┐рд╕реА рдХрд╛рд░рдг рд╕реЗ рдкреГрд╖реНрдарднреВрдорд┐ рдореЗрдВ 'рдЯреЗрд▓-рдСрдл' рдЫреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдпрджрд┐ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рддреЛ рдпреЗ рдЪрд▓ рд░рд╣реА 'рдЯреЗрд▓-рдПрдл' рдкреНрд░рдХреНрд░рд┐рдпрд╛рдПрдВ рд╣реИрдВ рдЬреЛ рд▓рдЧрд╛рддрд╛рд░ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рджреЗрдЦ рд░рд╣реА рд╣реИрдВ, рдХрдИ рджрд┐рдиреЛрдВ рдпрд╛ рдорд╣реАрдиреЛрдВ рддрдХ рд▓рдЯрдХрд╛ рд░рд╣ рд╕рдХрддреА рд╣реИрдВред

рдЖрдорддреМрд░ рдкрд░ рдпрд╣ рдПрдХ рдмрдбрд╝реА рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдмрдбрд╝реЗ рдХрд░реАрдиреЗ рд╕реЗ рдирд╣реАрдВред

рдпрджрд┐ рдЖрдк рд▓реЙрдЧ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдирд╛рдо рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ рдЖрдк рдЗрд╕ рдЙрдкрдирд╛рдо рдХреЛ --pid рд╡рд┐рдХрд▓реНрдк рдХреЗ рд╕рд╛рде рд╕рдВрд╢реЛрдзрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ:

 alias TFapplog='tail -f --pid=$(cat /opt/app/tmp/app.pid) /opt/app/logs/app.log' 

рдЙрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ, рд╕рднреА рдкреВрдВрдЫреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рд╕рдорд╛рдкреНрдд рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ рдЬрдм рд▓рдХреНрд╖реНрдп рдЖрд╡реЗрджрди рдХреЛ рдлрд┐рд░ рд╕реЗ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

10. рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдЖрдХрд╛рд░ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдПрдБ


dd рдмреНрд▓реЙрдХ рдФрд░ рдмрд╛рдЗрдирд░реА рдбреЗрдЯрд╛ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЯреВрд▓ рдореЗрдВ рд╕реЗ рдПрдХ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╢реВрдиреНрдп рд╕реЗ рднрд░реА 1 рдПрдордмреА рдлрд╝рд╛рдЗрд▓ рд╣реЛрдЧреА:

 dd if=/dev/zero of=out.txt bs=1M count=10 

рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ рдЖрдк рдлреИрд▓реЛрдХреЗрдЯ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ:

 fallocate -l 10M file.txt 

рдлрд╝рд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд░, рдЬреЛ рд╕рдорд░реНрдерди рдлрд╝рдВрдХреНрд╢рди (xfs, ext4, Btrfs ...) рдХреЛ рдЖрд╡рдВрдЯрд┐рдд рдХрд░рддреЗ рд╣реИрдВ, dd рдЯреВрд▓ рдХреЗ рд╡рд┐рдкрд░реАрдд, рдлрд╝реЙрд▓реЗрдЯ рдХреЛ рддреБрд░рдВрдд рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЕрддрд┐рд░рд┐рдХреНрдд рдореЗрдВ, рдЖрдмрдВрдЯрд┐рдд рдХрд╛ рдЕрд░реНрде рд╣реИ рдмреНрд▓реЙрдХреЛрдВ рдХрд╛ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЖрд╡рдВрдЯрди, рди рдХрд┐ рдПрдХ рдЕрддрд┐рд░рд┐рдХреНрдд рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдирд╛ред

11. рдЬрд╝рд╛рд░


рдмрд╣реБрдд рд╕реЗ рд▓реЛрдЧ рд▓реЛрдХрдкреНрд░рд┐рдп xargs рдХрдорд╛рдВрдб рдЬрд╛рдирддреЗ рд╣реИрдВред рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рд╕рднреА рджреЛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

рдкрд╣рд▓рд╛ - рдЖрдк рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рддрд░реНрдХреЛрдВ рдХреА рдмрд╣реБрдд рд▓рдВрдмреА рд╕реВрдЪреА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдпрд╣ рдХрдорд╛рдВрдб рд▓рд╛рдЗрди рдХреА рд▓рдВрдмрд╛рдИ (рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ ~ 4 kb) рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛ рд╕рдХрддреА рд╣реИред

рд▓реЗрдХрд┐рди рдЖрдк рдПрдХ рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдирд┐рд╖реНрдкрд╛рджрди рдХреЛ рд╕реАрдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП xargs рдХрдИ рдмрд╛рд░ рдХрдорд╛рдВрдб рдЪрд▓рд╛рдПрдЧрд╛, рдПрдХ рд╕рдордп рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рддрд░реНрдХ рднреЗрдЬреЗрдЧрд╛:

 $ # lets print 5 arguments and send them to echo with xargs: $ echo 1 2 3 4 5 | xargs echo 1 2 3 4 5 $ # now let's repeat, but limit argument processing by 3 per execution $ echo 1 2 3 4 5 | xargs -n 3 echo 1 2 3 4 5 

рдЖрдЧреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВред рд▓рдВрдмреА рд╕реВрдЪреА рдХреЛ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рдмрд╣реБрдд рд╕рдордп рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рд╣реА рдзрд╛рдЧреЗ рдореЗрдВ рдЪрд▓рддрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХрдИ рдХреЛрд░ рд╣реИрдВ, рддреЛ рд╣рдо рд╕рдорд╛рдирд╛рдВрддрд░ рдореЗрдВ рдЪрд▓рдиреЗ рдХреЗ рд▓рд┐рдП xargs рдмрддрд╛ рд╕рдХрддреЗ рд╣реИрдВ:

 echo 1 2 3 4 5 6 7 8 9 10| xargs -n 2 -P 3 echo 

рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдг рдореЗрдВ, рд╣рдо xargs рдХреЛ 3 рдереНрд░реЗрдбреНрд╕ рдореЗрдВ рд╕реВрдЪреА рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рддреЗ рд╣реИрдВ; рдкреНрд░рддреНрдпреЗрдХ рдереНрд░реЗрдб рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП 2 рддрд░реНрдХ рд▓реЗ рдФрд░ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░реЗрдЧрд╛ред рдпрджрд┐ рдЖрдкрдХреЛ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХрд┐рддрдиреЗ рдХреЛрд░ рд╣реИрдВ, рддреЛ " nproc " рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЗрд╕реЗ рдСрдкреНрдЯрд┐рдорд╛рдЗрдЬрд╝ рдХрд░реЗрдВ:

 echo 1 2 3 4 5 6 7 8 9 10 | xargs -n 2 -P $(nproc) echo 

12. рдиреАрдВрдж? рдЬрдмрдХрд┐? рдкрдврд╝реЗрдВ!


рдХреБрдЫ рд╕рдордп рдХреЗ рд▓рд┐рдП рдЖрдкрдХреЛ рдХрдИ рд╕реЗрдХрдВрдб рдЗрдВрддрдЬрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдпрд╛ рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЗрдирдкреБрдЯ рдХреА рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░реЗрдВ:

 read -p "Press any key to continue " -n 1 

рд▓реЗрдХрд┐рди рдЖрдк рдХреЗрд╡рд▓ рдХрдорд╛рдВрдб рдкрдврд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдЯрд╛рдЗрдордЖрдЙрдЯ рд╡рд┐рдХрд▓реНрдк рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВ , рдФрд░ рдЖрдкрдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╕реЗрдХрдВрдб рдХреЗ рд▓рд┐рдП рд░реЛрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рд▓реЗрдХрд┐рди рдЗрдВрдЯрд░реИрдХреНрдЯрд┐рд╡ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ, рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЖрд╕рд╛рдиреА рд╕реЗ рдкреНрд░рддреАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдЫреЛрдбрд╝ рд╕рдХрддрд╛ рд╣реИред

 read -p "Press any key to continue (auto continue in 30 seconds) " -t 30 -n 1 

рддреЛ рдЖрдк рд╕рд┐рд░реНрдл рд╕реНрд▓реАрдк рдХрдорд╛рдВрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рднреВрд▓ рд╕рдХрддреЗ рд╣реИрдВред

рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдореЗрд░реА рд╕рднреА рдЪрд╛рд▓реЗрдВ рджрд┐рд▓рдЪрд╕реНрдк рдирд╣реАрдВ рд▓рдЧрддреА рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдПрдХ рджрд░реНрдЬрди рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрдЦреНрдпрд╛ рдЕрдЪреНрдЫреА рд╣реИред

рдЗрд╕ рдкрд░ рдореИрдВ рдЕрд▓рд╡рд┐рджрд╛ рдХрд╣рддрд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рд╕рд░реНрд╡реЗрдХреНрд╖рдг рдореЗрдВ рднрд╛рдЧ рд▓реЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛ред

рдмреЗрд╢рдХ рдКрдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреЗ рдФрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдореЗрдВ рдЕрдкрдиреА рд╢рд╛рдВрдд рдЪрд╛рд▓ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕реНрд╡рддрдВрддреНрд░ рдорд╣рд╕реВрд╕ рдХрд░реЗрдВ!

Source: https://habr.com/ru/post/hi444890/


All Articles