Unixシェル絶察に最初のステップ

なぜ、誰のために蚘事がありたすか


圓初は、Unixのようなシステムで䜜業を開始する孊生向けのメモでした。 蚀い換えれば、この蚘事は、unixコマンドラむンでの以前の経隓はないが、䜕らかの理由でそれず効果的に察話する方法を望んでいるか、孊ぶべきである人を察象ずしおいたす。

マナ文曞の改定は行われず、蚘事は読みをキャンセルしたり眮き換えたりしたせん。 代わりに、䜜業が効果的で快適になるように、UNIXシェルで䜜業の最初から理解する必芁がある䞻な事項コマンド、トリック、および原則に぀いお説明したす。

この蚘事は、フル機胜のシェルzshたたはbashが望たしいずかなり幅広い暙準プログラムを備えた、本栌的なunixラむクな環境に関するものです。

シェルずは䜕ですか


シェルシェル、別名「コマンドラむン」、別名CLI、別名「コン゜ヌル」、別名「端末」、別名「黒い文字で黒いりィンドり」は、オペレヌティングシステムず通信するためのテキストベヌスのむンタヌフェむスですたあ、厳密にGovra、これはそのようなむンタヌフェヌスを提䟛するプログラムですが、珟圚この違いは重芁ではありたせん。

䞀般的に、シェルを介した䜜業は次のようになりたすナヌザヌ぀たり、あなたはキヌボヌドからコマンドを入力し、Enterを抌すず、システムはコマンドを実行し、実行結果を画面に曞き蟌み、次のコマンドが入力されるのを再び埅ちたす。

兞型的なシェル


シェルは、すべおのUnixラむクなサヌバヌシステムず察話するための䞻芁な方法です。

コマンドラむンシステムはどこにありたすか


UNIXシェル、䞀般的なオプションはどこで期埅できたすか


シェルで解決するのに劥圓なタスクは䜕ですか


シェルが適切で有甚で䞍可欠な自然なタスク


絶察に最初のステップ


はじめに入堎ず退堎


シェルを起動する方法ずシェルから抜け出す方法を正確に知っおください。

Ubuntuがむンストヌルされおいるマシンで䜜業しおいる堎合は、タヌミナルプログラムを実行する必芁がありたす。 䜜業が終了したら、単にりィンドりを閉じるこずができたす。

MacOSでは、タヌミナルも実行したす。

リモヌトサヌバヌにアクセスするには、 ssh MacOS、Ubuntu、たたは他のUnix系システムがputty堎合たたはputty Windowsがある堎合を䜿甚したす。

私は誰、私はどこですか


次のコマンドを実行したす。


チヌムの歎史歎史


完党なコマンドラむンの重芁な機胜は、コマンドの履歎です。

いく぀かのコマンドを実行したす hostname 、 ls 、 pwd 、 whoami 。 次に、䞊キヌを抌したす。 前のコマンドが入力行に衚瀺されたした。 䞊䞋キヌを䜿甚しお、ストヌリヌを前埌に移動したす。 hostnameにスクロヌルしたら、Enterを抌したす-コマンドが再床実行されたす。

履歎からのコマンドは繰り返すだけでなく、線集するこずもできたす。 履歎をlsたでスクロヌルし、それに-lスむッチを远加したす ls -lであるこずが刀明したした。マむナス蚘号の前にスペヌスがありたすが、埌にはありたせん。 Enterを抌したす-倉曎されたコマンドが実行されたす。

履歎のスクロヌル、コマンドの線集および再実行は、コマンドラむンで䜜業する際の最も䞀般的なアクションであり、それに慣れる。

コピヌペヌスト


コマンドラむンは非垞にテキスト䞭心です。コマンドはテキストであり、ほずんどの暙準プログラムぞの入力はテキストであり、䜜業の結果はほずんどの堎合テキストでもありたす。

このテキストの優れた機胜は、コピヌしお貌り付けるこずができるこずです。これは、コマンドラむンにも圓おはたりたす。

コマンドdate +"%y-%m-%d, %A"詊しおください
完党に手で入力したのですか、それずも蚘事からコピヌしたのですか コピヌしおタヌミナルに貌り付け、実行できるこずを確認しおください。

man䜿甚方法を孊習した埌、ヘルプからサンプルコマンドをコピヌしお実行できるこずを確認しおください。 確認するには、 dateプログラムのヘルプで「䜿甚EXAMPLESセクションを探し、最初の䟋をコピヌしお実行したす念のためドル蚘号がコマンドの䞀郚ではない堎合、これは入力する招埅状の条件付き画像です。

端末からテキストを正確にコピヌしお端末に貌り付ける方法は、システムずその蚭定によっお異なりたす。したがっお、残念ながら、普遍的な指瀺を出すこずはできたせん。 Ubuntuでは、これを詊しおください。コピヌは単なるマりス遞択であり、貌り付けは䞭倮のマりスボタンです。 機胜しない堎合、たたは別のシステムを䜿甚しおいる堎合は、むンタヌネットを怜玢するか、経隓豊富な友人に尋ねおください。

キヌずオプション


コマンドの履歎を調査するずき、lsコマンドには少なくずも2぀のオプションがあるずいう事実に既に遭遇しおいたす。 このように呌び出すず、簡単なリストが衚瀺されたす。

 [22:26]akira@latitude-e7240: ~/shell-survival-quide> ls Makefile shell-first-steps.md shell-first-steps.pdf shell-survival-quide.md shell-survival-quide.pdf 

-lスむッチを远加するず、各ファむルの詳现情報が衚瀺されたす。

 [22:28]akira@latitude-e7240: ~/shell-survival-quide> ls -l total 332 -rw-rw-r-- 1 akira akira 198 Feb 13 11:48 Makefile -rw-rw-r-- 1 akira akira 15107 Feb 14 22:26 shell-first-steps.md -rw-rw-r-- 1 akira akira 146226 Feb 13 11:49 shell-first-steps.pdf -rw-rw-r-- 1 akira akira 16626 Feb 13 11:45 shell-survival-quide.md -rw-rw-r-- 1 akira akira 146203 Feb 13 11:35 shell-survival-quide.pdf 

これは非垞に䞀般的な状況です。コマンド呌び出しに特別な修食子キヌ、オプション、パラメヌタヌを远加するず、コマンドの動䜜が倉わりたす。 比范 tree /ずtree -d / 、 hostnameずhostname -f

さらに、コマンドはパラメヌタヌずしおファむル名、ディレクトリ、たたは単なるテキスト文字列を䜿甚できたす。 詊しおください

 ls -ld /home ls -l /home grep root /etc/passwd 


男


manマシンで䜿甚可胜なコマンドずプログラム、およびシステムコヌルずC暙準ラむブラリのヘルプ。

詊しおください man grep 、 man atoi 、 man chdir 、 man man 。

「䞊」、「䞋」、「PageUp」、「PageDown」のボタンを䜿甚しお前埌にスクロヌルし、 qボタンを䜿甚しおヘルプの衚瀺を終了したす。 ヘルプ蚘事で特定のテキストを怜玢したす。/スラッシュを抌し、怜玢するテキストを入力しお、Enterを抌したす。 次の出珟箇所に移動nキヌ。

すべおの参照蚘事はカテゎリに分類されたす。 最も重芁なこず

名前が䞀臎する堎合に、どのカテゎリからヘルプを衚瀺する必芁があるかを瀺したす。 たずえば、 man 3 printfはC暙準ラむブラリの関数を蚘述し、 man 1 printf man 3 printfは同じ名前のコン゜ヌルプログラムを蚘述したす。

man -k .コマンドを䜿甚しお、マシンで利甚可胜なすべおのヘルプ蚘事のリストを衚瀺できたすman -k . ドットもチヌムの䞀郚です。

少ない


非垞に長いテキストファむルの内容、長い人などを小さなタヌミナルりィンドりで衚瀺する必芁がある堎合、特別なペヌゞャヌプログラム単語ペヌゞ/ペヌゞ、぀たりペヌゞリヌフレットからが䜿甚されたす。 最も人気のあるリヌフレットはlessであり、mansを読むずきにスクロヌルを提䟛するのはそれです。

動䜜を詊しお比范しおください

 cat /etc/bash.bashrc cat /etc/bash.bashrc |less 


パラメヌタですぐにファむルをスクロヌラヌに転送できたす。

 less /etc/bash.bashrc 


䞊䞋にスクロヌル-「䞊」、「䞋」、「PageUp」、「PageDown」、終了-ボタンq 特定のテキストの怜玢 / スラッシュを抌し、怜玢するテキストを入力しお、Enterを抌したす。 次の出珟箇所に移動nキヌ。  manに関するマニュアルを知っおいたすかヘルプを衚瀺するためにlessも䜿甚されるのも䞍思議ではありたせん。

暩利


「暩利」のセットは、任意のファむルたたはディレクトリに関連付けられたす。ファむルを読み取る暩利、ファむルに曞き蟌む暩利、ファむルを実行する暩利。 すべおのナヌザヌは、ファむル所有者、ファむル所有者グルヌプ、その他すべおのナヌザヌの3぀のカテゎリに分類されたす。

ls -lを䜿甚しおファむル蚱可を衚瀺できたす。 䟋

 > ls -l Makefile -rw-r--r-- 1 akira students 198 Feb 13 11:48 Makefile 

この結論は、所有者akiraがファむルの読み取りず曞き蟌みを行い、グルヌプ生埒が読み取りのみを行い、残りのナヌザヌも読み取りを行えるこずを意味したす。

職堎でpermission deniedずいうメッセヌゞを受け取った堎合、それはあなたが働きたいず思う正しいオブゞェクトを持っおいないこずを意味したす。

詳しくはman chmodをご芧ください。

STDIN、STDOUT、コンベアパむプ


各暙準プログラムは、 STDIN入力デヌタストリヌム、 STDOUT出力デヌタストリヌム、 STDERR゚ラヌ出力ストリヌムの3぀の暙準デヌタストリヌムに関連付けられおいたす。

wcプログラムを実行し、テキストGood day todayを入力しおEnterを抌し、テキストgood dayを入力しおEnterを抌し、Ctrl + dを抌したす。 wcプログラムは、テキストおよび末尟の文字、単語、行の数に関する統蚈を衚瀺したす。

 > wc good day today good day 2 5 24 

この堎合、2行のテキストをSTDINプログラムに送信し、 STDOUT 3぀の数倀を受け取りたした。

コマンドhead -n3 /etc/passwd実行するず、次のようになりたす。

 > head -n3 /etc/passwd root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin 

この堎合、 headプログラムはSTDINから䜕も読み取らず、 STDOUT 3行曞き蟌みたした。

このように想像STDOUTたす。プログラムは、 STDIN流入するパむプであり、 STDOUT続きたす。

Unixコマンドラむンの最も重芁な特性は、パむププログラムを盞互接続できるこずです。あるプログラムの出力 STDOUT を入力 STDIN ずしお別のプログラムに転送できたす。

接続されたプログラムのこの蚭蚈は、英語のパむプパむプ、ロシア語-コンベアたたはパむプで呌び出されたす。

プログラムをパむプラむンに結合する方法は次のずおりです| 瞊棒

コマンドhead -n3 /etc/passwd |wcを実行するず、次のようなhead -n3 /etc/passwd |wcたす。

 > head -n3 /etc/passwd |wc 3 3 117 

headプログラムSTDOUT 3行のテキストをSTDOUTにSTDOUT 、すぐにwcプログラムの入力に移動し、結果のテキストの文字、単語、行の数を数えたした。

必芁な数のプログラムをパむプラむンに結合できたす。 たずえば、前のパむプラむンに別のwcプログラムを远加するず、最初のwc出力に含たれおいた単語ず文字の数をカりントできたす。

 > head -n3 /etc/passwd |wc |wc 1 3 24 


コマンドラむンで䜜業する堎合、パむプラむンのコンパむルは非垞に䞀般的なこずです。 これが実際にどのように行われるかの䟋に぀いおは、「単䞀ラむンコンベダのコンパむル」セクションをお読みください。

I / Oリダむレクト


プログラムの出力 STDOUT は、パむプラむンを介しお別のプログラムに転送できるだけでなく、単にファむルに曞き蟌むこずができたす。 このリダむレクトは、 > 「詳现」蚘号を䜿甚しお行われたす。

 date > /tmp/today.txt 

このコマンドの結果、ファむル/tmp/today.txtがディスクに衚瀺されたす。 cat /tmp/today.txtその内容を衚瀺したす

同じ名前のファむルが既に存圚する堎合、その叀い内容は砎棄されたす。 ファむルが存圚しなかった堎合、䜜成されたす。 コマンドが実行される前に、ファむルが䜜成されるディレクトリが存圚する必芁がありたす。

ファむルを䞊曞きしたくないが、最埌に出力を远加する堎合は、 >>䜿甚し>> 。

 date >> /tmp/today.txt 

ファむルに珟圚曞き蟌たれおいる内容を確認しおください。

さらに、プログラムはSTDIN代わりに任意のファむルを転送できSTDIN 。 詊しおください

 wc </etc/passwd 


䞍明な堎合の察凊方法


理解できないシステム動䜜、たたは特定の結果を達成したいが方法がわからない堎合は、次の順序で行動するこずをお勧めしたすちなみに、これはシェルだけでなく


䞊蚘のいずれも圹に立たない堎合は、教垫、経隓豊富な同僚、たたは友人のアドバむスを求めおください。 そしお、「愚かな」質問をするこずを恐れないでください-それは知らないのは恥ではありたせん、尋ねないのは恥です。

難しい問題むンタヌネットや他の人を䜿っお自分でを芋぀けた堎合は、あなたや仲間が再び同じ問題を抱えおいる堎合に備えお解決策を曞き留めおください。 Evernoteで簡単なテキストファむルに曞き蟌み、゜ヌシャルネットワヌクで公開できたす。

䜜業方法


コピヌアンドペヌスト -マン、StackOverflowの蚘事など。コマンドラむンはテキストで構成され、これを䜿甚したす。コマンドの䟋をコピヌしお䜿甚し、成功した怜玢結果をメモリに曞き蟌み、Twitterおよびブログに公開したす。

男を読んでください 。 ナフは蚀った。

履歎から前のコマンドを匕き出し、別のコマンドをパむプラむンに远加し、開始、繰り返したす。 「単䞀ラむンコンベアのコンパむル」セクションも参照しおください。

基本チヌム




分析




システム蚺断




䞀郚のプログラムがない堎合、远加でむンストヌルする必芁がありたす。 さらに、これらのプログラムの䞀郚のオプションは、特暩ナヌザヌ root 'yのみが利甚できたす。

倧量および半自動実行


最初にこのセクションをスキップしおください。単玔なシェルスクリプトを䜜成するずきに、これらのコマンドず構成が必芁になりたす。



その他




単䞀ラむンコンベダヌの䜜成


実際のタスクの䟋を芋おみたしょう。珟圚のナヌザヌの代わりに実行されおいるすべおのtask-6-serverプロセスを匷制終了する必芁がありたす。

ステップ1
玔粋な圢匏でなくおも、どのプログラムがほが必芁なデヌタを生成するかを理解したす。 このタスクでは、システム内のすべおのプロセスのリスト ps axuww 取埗する䟡倀がありたす 。 実行する。

ステップ2
受信したデヌタを目で芋お、䞍芁なデヌタの䞀郚を陀倖するフィルタヌを考え出したす。 倚くの堎合、これはgrepたたはgrep -vです。 䞊ボタンを䜿甚しお、前のコマンドを履歎から匕き出し、フィルタヌを割り圓お、開始したす。

 ps axuww |grep `whoami` 

-珟圚のナヌザヌのプロセスのみ。

ステップ3
必芁なクリヌンデヌタが埗られるたで、手順2を繰り返したす。

 ps axuww |grep `whoami` | grep '\<task-6-server\>' 

-目的の名前を持぀すべおのプロセスさらに、vim task-6-server.cなどのような䜙分なもの、

 ps axuww |grep `whoami` | grep '\<task-6-server\>' | grep -v vim ps axuww |grep `whoami` | grep '\<task-6-server\>' | grep -v vim |grep -v less 

-目的の名前のプロセスのみ

 ps axuww |grep `whoami` | grep '\<task-6-server\>' | grep -v vim |grep -v less |awk '{print $2}' 


-必芁なプロセスのpid-s、項目3は完了

ステップ4
適切な最終ハンドラヌを適甚したす。 Upキヌを䜿甚しお、履歎から前のコマンドを抜出し、問題の解決を完了する凊理を远加したす。



ワヌクアりト


新しいスキルを緎習したいですか 次のタスクを詊しおください。


ヒント find 、 grep -o 、 awk '{print $1}' 、 grep正芏衚珟、 curl -sです。

さらに勉匷するものは


コマンドラむンが気に入ったら、やめないで、スキルの向䞊を続けおください。

コマンドラむンに䜏んでいる堎合に間違いなく䟿利になるいく぀かのプログラムは次のずおりです。


さらに、時間の経過ずずもに、 perlやpythonなど、䜕らかのスクリプト蚀語をマスタヌする䟡倀がありたす。

誰がこれを必芁ずしたすか


今日、コマンドラむンずシェルスクリプトを勉匷する䟡倀はありたすか 間違いなく䟡倀がありたす。 FBでの仕事に応募したい候補者のために、Facebookの芁件からいく぀かの䟋を挙げたす。

デヌタサむ゚ンティスト、経枈調査 コマンドラむンずUnixコアツヌルの䜿いやすさ。 望たしいPythonなどのスクリプト蚀語の熟達床、たたは以前の゜フトりェア゚ンゞニアリングの経隓。

MySQLデヌタベヌス゚ンゞニア シェルスクリプトBash、Awkなどの高床な習熟床。 Linux管理の高床な胜力。

補造品質゚ンゞニア、サヌバヌ Bash、Perl、たたはPythonのスクリプト䜜成スキルが望たしい。

デヌタプラットフォヌム゚ンゞニア Unix / Linuxシステムでの2幎の経隓。

DevOps゚ンゞニア、デヌタ Unix / Linuxシステム管理およびプログラミングの2幎の経隓。

ご質問は


この蚘事に぀いお、たたは䞀般的にUnixコマンドラむンでの䜜業に぀いお質問がある堎合は、コメントたたは電子メヌルliruoko (at) yandex (dot) ruで質問しおください。

䟿利で興味深いリンク


15の興味深いLinuxコマンド

Unix初心者向けのサバむバルガむド

興味深いBashプログラミング手法
オリゞナル 15分でより良いBashスクリプト

bashを䜿甚したシェルプログラミング䟋、反䟋

コン゜ヌルナヌティリティをより䟿利にする簡単な方法

クロヌズド゜ヌスのようにプログラムをデバッグしおください

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


All Articles