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を使用したシェルプログラミング:例、反例



コンソールユーティリティをより便利にする簡単な方法



クローズドソースのようにプログラムをデバッグしてください!






All Articles