Unix-quick-guide
Unix/Linux-クイックガイド
Unix-はじめに
Unixとは何ですか?
Unixオペレーティングシステムは、コンピューターとユーザーの間のリンクとして機能するプログラムのセットです。
システムリソースを割り当て、コンピューターの内部のすべての詳細を調整するコンピュータープログラムは、「オペレーティングシステム」または「カーネル」と呼ばれます。
ユーザーは、 shell と呼ばれるプログラムを介してカーネルと通信します。 シェルはコマンドラインインタープリターです。ユーザーが入力したコマンドを翻訳し、それらをカーネルが理解できる言語に変換します。
- Unixはもともと1969年にAT&Tの従業員であるKen Thompson、Dennis Ritchie、Douglas McIlroy、およびBell LabsのJoe Ossannaによって開発されました。
- 市場にはさまざまなUnixのバリアントがあります。 Solaris Unix、AIX、HP Unix、およびBSDがいくつかの例です。 LinuxはUnixのフレーバーでもあり、自由に利用できます。
- 数人が同時にUnixコンピュータを使用できます。したがって、Unixはマルチユーザーシステムと呼ばれます。
- ユーザーは複数のプログラムを同時に実行することもできます。したがって、Unixはマルチタスク環境です。
Unixアーキテクチャ
ここにUnixシステムの基本的なブロック図があります-
Unixのすべてのバージョンを統一する主な概念は、次の4つの基本です-
- カーネル-カーネルはオペレーティングシステムの心臓部です。 ハードウェアや、メモリ管理、タスクスケジューリング、ファイル管理などのほとんどのタスクとやり取りします。
- シェル-シェルは、リクエストを処理するユーティリティです。 端末でコマンドを入力すると、シェルはコマンドを解釈し、必要なプログラムを呼び出します。 シェルは、すべてのコマンドに標準構文を使用します。 Cシェル、Bourneシェル、Kornシェルは、ほとんどのUnixバリアントで利用できる最も有名なシェルです。
- コマンドとユーティリティ-日々のアクティビティで利用できるさまざまなコマンドとユーティリティがあります。 cp 、 mv 、 cat 、 grep など コマンドとユーティリティのいくつかの例です。 250を超える標準コマンドに加えて、サードパーティソフトウェアを介して提供される多数のコマンドがあります。 すべてのコマンドには、さまざまなオプションが付属しています。
- ファイルとディレクトリ-Unixのすべてのデータはファイルに整理されています。 すべてのファイルはディレクトリに整理されます。 これらのディレクトリは、 filesystem と呼ばれるツリー状の構造にさらに編成されます。
システムの起動
Unixオペレーティングシステムがインストールされているコンピューターを使用している場合は、システムをオンにしてライブにするだけです。
システムの電源を入れるとすぐに起動し、最後にシステムにログインするよう求められます。これは、システムにログインして日常のアクティビティに使用するアクティビティです。
Unixへのログイン
あなたが最初にUnixシステムに接続すると、通常、次のようなプロンプトが表示されます-
ログインします
- ユーザーID(ユーザーID)とパスワードを用意してください。 これらがまだない場合は、システム管理者に連絡してください。
- ログインプロンプトでユーザーIDを入力し、 ENTER を押します。 ユーザーIDは*大文字と小文字を区別します*ので、システム管理者が指示したとおりに正確に入力してください。
- パスワードプロンプトでパスワードを入力し、 ENTER を押します。 パスワードも大文字と小文字が区別されます。
- 正しいユーザーIDとパスワードを入力すると、システムに入ることが許可されます。 画面に表示される情報とメッセージを読みます。次のとおりです。
すべてのコマンドを入力するコマンドプロンプト( $ プロンプトと呼ばれることもあります)が表示されます。 たとえば、カレンダーを確認するには、次のように cal コマンドを入力する必要があります-
パスワードを変更する
すべてのUnixシステムでは、ファイルやデータが自分のものであり、システム自体がハッカーやクラッカーから安全であることを保証するためにパスワードが必要です。 パスワードを変更する手順は次のとおりです-
- ステップ1 *-開始するには、以下に示すようにコマンドプロンプトでパスワードを入力します。
- ステップ2 *-現在使用している古いパスワードを入力します。
- ステップ3 *-新しいパスワードを入力します。 誰も推測できないように、パスワードは常に十分に複雑にしてください。 ただし、覚えておいてください。
- ステップ4 *-パスワードをもう一度入力して確認する必要があります。
注-システムで現在および新しいパスワードを入力する必要がある場所を示すために、ここにアスタリスク(*)を追加しました。 入力しても文字は表示されません。
ディレクトリとファイルのリスト
Unixのすべてのデータはファイルに編成されます。 すべてのファイルはディレクトリに編成されます。 これらのディレクトリは、ファイルシステムと呼ばれるツリー状の構造に編成されています。
ここで、 d ….. で始まるエントリはディレクトリを表します。 たとえば、uml、univ、urlspediaはディレクトリであり、残りのエントリはファイルです。
あなたは誰?
あなたがシステムにログインしている間、あなたは知って喜んでいるかもしれません:*私は誰ですか?
「あなたが誰であるか」を見つける最も簡単な方法は、 whoami コマンドを入力することです-
システムで試してください。 このコマンドは、現在のログインに関連付けられているアカウント名をリストします。 who am i コマンドを試して、自分に関する情報を取得することもできます。
ログインしているのは誰ですか?
誰かが同時にコンピューターにログインしていることを知りたい場合があります。
他のユーザーについて知りたい程度に基づいて、この情報を取得するために使用できる3つのコマンドがあります: users 、 who 、および w 。
システムで w コマンドを実行して、出力を確認してください。 これは、システムにログインしているユーザーに関連する情報を一覧表示します。
ログアウト
セッションを終了したら、システムからログアウトする必要があります。 これは、誰もあなたのファイルにアクセスしないようにするためです。
ログアウトするには
- コマンドプロンプトで logout コマンドを入力するだけで、システムはすべてをクリーンアップし、接続を切断します。
システムのシャットダウン
コマンドラインを介してUnixシステムを適切にシャットダウンする最も一貫した方法は、次のコマンドのいずれかを使用することです-
Sr.No. | Command & Description |
---|---|
1 |
halt システムをすぐに停止します |
2 |
init 0 事前定義されたスクリプトを使用してシステムの電源をオフにし、シャットダウンする前にシステムを同期およびクリーンアップします |
3 |
init 6 システムを完全にシャットダウンしてから再起動して、システムを再起動します |
4 |
poweroff 電源をオフにしてシステムをシャットダウンします |
5 |
reboot システムを再起動します |
6 |
shutdown システムをシャットダウンします |
通常、システムをシャットダウンするには、スーパーユーザーまたはルート(Unixシステムで最も特権のあるアカウント)である必要があります。 ただし、一部のスタンドアロンまたは個人所有のUnixボックスでは、管理ユーザーと場合によっては通常のユーザーがそうすることができます。
Unix-ファイル管理
この章では、Unixでのファイル管理について詳しく説明します。 Unixのすべてのデータはファイルに編成されます。 すべてのファイルはディレクトリに編成されます。 これらのディレクトリは、ファイルシステムと呼ばれるツリー状の構造に編成されています。
何らかの方法でUnixを使用する場合、ほとんどの時間をファイルの処理に費やします。 このチュートリアルは、ファイルの作成と削除、コピーと名前の変更、ファイルへのリンクの作成などを理解するのに役立ちます。
Unixでは、ファイルの3つの基本的なタイプがあります-
- 通常のファイル-通常のファイルは、データ、テキスト、またはプログラムの命令を含むシステム上のファイルです。 このチュートリアルでは、通常のファイルの操作について説明します。
- ディレクトリ-ディレクトリには、特別なファイルと通常のファイルの両方が保存されます。 WindowsまたはMac OSに精通しているユーザーにとって、Unixディレクトリはフォルダーと同等です。
- 特殊ファイル-一部の特殊ファイルは、ハードドライブ、CD-ROMドライブ、モデム、イーサネットアダプターなどのハードウェアへのアクセスを提供します。 他の特殊ファイルはエイリアスまたはショートカットに似ており、異なる名前を使用して単一のファイルにアクセスできます。
リストファイル
現在のディレクトリに格納されているファイルとディレクトリを一覧表示するには、次のコマンドを使用します-
上記のコマンドの出力例は次のとおりです-
コマンド ls は、リストされたファイルに関する詳細情報を取得するのに役立つ -l オプションをサポートします-
ここにリストされているすべての列に関する情報があります-
最初の列-ファイルタイプとファイルに与えられた許可を表します。 以下は、すべての種類のファイルの説明です。
* 2番目の列*-ファイルまたはディレクトリが使用するメモリブロックの数を表します。
第3列-ファイルの所有者を表します。 これは、このファイルを作成したUnixユーザーです。
第4列-所有者のグループを表します。 すべてのUnixユーザーには、関連するグループがあります。
第5列-バイト単位でファイルサイズを表します。
第6列-このファイルが最後に作成または変更された日付と時刻を表します。
第7列-ファイルまたはディレクトリ名を表します。
Sr.No. | Prefix & Description |
---|---|
1 |
- ASCIIテキストファイル、バイナリ実行可能ファイル、ハードリンクなどの通常のファイル。 |
2 |
b 特殊ファイルをブロックします。 物理ハードドライブなどの入力/出力デバイスファイルをブロックします。 |
3 |
c 文字特殊ファイル。 物理ハードドライブなどの未加工の入出力デバイスファイル。 |
4 |
d 他のファイルとディレクトリのリストを含むディレクトリファイル。 |
5 |
l シンボリックリンクファイル。 通常のファイルへのリンク。 |
6 |
p 名前付きパイプ。 プロセス間通信のメカニズム。 |
7 |
s プロセス間通信に使用されるソケット。 |
メタキャラクター
Unixでは、メタキャラクターは特別な意味を持ちます。 たとえば、'および'?はメタキャラクターです。*を使用して0個以上の文字に一致し、疑問符(?*)は単一の文字に一致します。
例-
すべてのファイルを表示します。名前は ch で始まり、*。doc *で終わります-
ここで、**は、任意の文字と一致するメタ文字として機能します。 あなただけの *.doc で終わるすべてのファイルを表示したい場合は、次のコマンドを使用することができます-
隠しファイル
不可視ファイルとは、最初の文字がドットまたはピリオド文字(。)であるファイルです。 Unixプログラム(シェルを含む)は、これらのファイルのほとんどを使用して構成情報を保存します。
隠しファイルのいくつかの一般的な例には、ファイルが含まれます-
- .profile -Bourneシェル(sh)初期化スクリプト
- .kshrc -Kornシェル(ksh)初期化スクリプト
- .cshrc -Cシェル(csh)初期化スクリプト
- .rhosts -リモートシェル構成ファイル
不可視のファイルをリストするには、 ls に -a オプションを指定します-
- 単一ドット(。)-これは現在のディレクトリを表します。
- 二重ドット(..)-これは親ディレクトリを表します。
ファイルを作成する
上記のコマンドは、指定されたファイル名でファイルを開きます。 ここで、キー i を押して編集モードに入ります。 編集モードになったら、次のプログラムのようにファイルにコンテンツを書き始めることができます-
あなたがプログラムで完了したら、これらの手順に従ってください-
- キー esc を押して、編集モードを終了します。
- 2つのキーを押します Shift+ ZZ が一緒になって、ファイルから完全に出てきます。
これで、現在のディレクトリに filename で作成されたファイルが作成されます。
ファイルを編集する
ファイルを開いたら、キー i を押すと編集モードになり、ファイルを編集して続行できます。 ファイル内をあちこち移動したい場合は、まずキー Esc を押して編集モードを終了する必要があります。 この後、次のキーを使用してファイル内を移動できます-
- l キーで右側に移動します。
- h キーで左側に移動します。
- ファイル内で上下に移動する k キー。
- ファイル内で下に移動する j キー。
したがって、上記のキーを使用して、編集したい場所にカーソルを置くことができます。 配置したら、 i キーを使用して編集モードにできます。 ファイルの編集が完了したら、 Esc を押し、最後に2つのキー Shift+を押します。 ZZ が一緒になって、ファイルから完全に出てきます。
ファイルのコンテンツを表示する
あなたは次のように*猫*コマンドと一緒に -b オプションを使用して行番号を表示することができます-
ファイル内の単語を数える
ここに4つの列すべての詳細があります-
- 最初の列-ファイル内の行の総数を表します。
- 第2列-ファイル内の単語の総数を表します。
- 第3列-ファイル内の合計バイト数を表します。 これはファイルの実際のサイズです。
- 第4列-ファイル名を表します。
複数のファイルを指定して、それらのファイルに関する情報を一度に取得できます。 以下は簡単な構文です-
ファイルをコピーする
ファイルのコピーを作成するには、 cp コマンドを使用します。 コマンドの基本的な構文は次のとおりです-
以下は、既存のファイル filename のコピーを作成する例です。
これで、現在のディレクトリにもう1つの copyfile ファイルが見つかります。 このファイルは、元のファイル filename とまったく同じです。
ファイル名を変更する
ファイルの名前を変更するには、 mv コマンドを使用します。 以下は、基本的な構文です-
次のプログラムは、既存のファイル filename の名前を newfile に変更します。
ファイルを削除する
既存のファイルを削除するには、 rm コマンドを使用します。 以下は、基本的な構文です-
注意-ファイルには有用な情報が含まれている場合があります。 この Delete コマンドを使用するときは、常に注意することをお勧めします。 rm コマンドとともに -i オプションを使用することをお勧めします。
以下は、既存のファイル filename を完全に削除する方法を示す例です。
次のコマンドを使用すると、一度に複数のファイルを削除できます-
標準Unixストリーム
通常の状況では、すべてのUnixプログラムは起動時に3つのストリーム(ファイル)を開いています-
- stdin -これは「標準入力」と呼ばれ、関連するファイル記述子は0です。 これは、STDINとしても表されます。 Unixプログラムは、STDINからデフォルトの入力を読み取ります。
- stdout -これは「標準出力」と呼ばれ、関連するファイル記述子は1です。 これは、STDOUTとしても表されます。 Unixプログラムは、STDOUTにデフォルト出力を書き込みます
- stderr -これは_標準エラー_と呼ばれ、関連するファイル記述子は2です。 これは、STDERRとしても表されます。 Unixプログラムは、すべてのエラーメッセージをSTDERRに書き込みます。
Unix-ディレクトリ管理
この章では、Unixでのディレクトリ管理について詳しく説明します。
ディレクトリは、ファイル名と関連情報を保存するためのソロジョブのファイルです。 すべてのファイルは、通常、特殊、またはディレクトリに関係なく、ディレクトリに含まれています。
Unixは、ファイルとディレクトリを整理するために階層構造を使用します。 この構造は、多くの場合、ディレクトリツリーと呼ばれます。 ツリーには単一のルートノード、スラッシュ文字( / )があり、他のすべてのディレクトリはその下に含まれています。
ホームディレクトリ
最初にログインしたときに自分自身を見つけるディレクトリは、ホームディレクトリと呼ばれます。
ファイルを整理するために作成するホームディレクトリとサブディレクトリで多くの作業を行います。
次のコマンドを使用して、いつでもホームディレクトリに移動できます-
ここで、*〜*はホームディレクトリを示します。 あなたは他のユーザーのホームディレクトリに移動する必要があると仮定し、次のコマンドを使用します-
最後のディレクトリに移動するには、次のコマンドを使用できます-
絶対/相対パス名
ディレクトリは、最上部にルート(/)を持つ階層に配置されます。 階層内のファイルの位置は、パス名で記述されます。
パス名の要素は/で区切られます。 ルートに関連して記述されている場合、パス名は絶対パスであるため、絶対パス名は常に/で始まります。
絶対ファイル名の例を次に示します。
パス名は、現在の作業ディレクトリからの相対パスにすることもできます。 相対パス名が/で始まることはありません。 ユーザーamroodのホームディレクトリに関連して、いくつかのパス名は次のようになります-
いつでもファイルシステム階層内のどこにいるかを判断するには、コマンド pwd を入力して現在の作業ディレクトリを印刷します-
ディレクトリのリスト
ディレクトリ内のファイルを一覧表示するには、次の構文を使用できます-
以下は、 /usr/local ディレクトリに含まれるすべてのファイルをリストする例です-
ディレクトリの作成
これで、ディレクトリの作成方法を理解できます。 ディレクトリは、次のコマンドによって作成されます-
ここで、directoryは作成するディレクトリの絶対パス名または相対パス名です。 たとえば、コマンド-
現在のディレクトリに mydir ディレクトリを作成します。 ここに別の例があります-
このコマンドは、 /tmp ディレクトリに test-dir ディレクトリを作成します。 mkdir コマンドは、要求されたディレクトリを正常に作成した場合、出力を生成しません。
コマンドラインで複数のディレクトリを指定すると、 mkdir は各ディレクトリを作成します。 たとえば、
現在のディレクトリの下にディレクトリdocsおよびpubを作成します。
親ディレクトリの作成
これで、親ディレクトリの作成方法を理解できます。 ディレクトリを作成するときに、その親ディレクトリが存在しない場合があります。 この場合、 mkdir は次のようなエラーメッセージを発行します-
このような場合、 mkdir コマンドに -p オプションを指定できます。 必要なすべてのディレクトリが作成されます。 たとえば-
上記のコマンドは、必要なすべての親ディレクトリを作成します。
ディレクトリの削除
ディレクトリは、次のように rmdir コマンドを使用して削除できます-
注意-ディレクトリを削除するには、それが空であることを確認してください。これは、このディレクトリ内にファイルまたはサブディレクトリが存在しないことを意味します。
次のように、一度に複数のディレクトリを削除できます-
上記のコマンドは、ディレクトリdirname1、dirname2、およびdirname3が空の場合、それらを削除します。 rmdir コマンドは、成功すると出力を生成しません。
ディレクトリの変更
ここで、 dirname は、変更するディレクトリの名前です。 たとえば、コマンド-
ディレクトリ /usr/local/bin への変更。 このディレクトリから、次の相対パスを使用してディレクトリ /usr/home/amrood に cd できます-
ディレクトリの名前変更
- mv(移動)*コマンドを使用して、ディレクトリの名前を変更することもできます。 構文は次のとおりです-
次のように、ディレクトリの名前を mydir から yourdir に変更できます-
ディレクトリ。 (ドット)および.. (ドットドット)
- filename。(ドット)は現在の作業ディレクトリを表します。 *filename .. (ドットドット)は、現在の作業ディレクトリの1レベル上のディレクトリを表し、多くの場合親ディレクトリと呼ばれます。
現在の作業ディレクトリ/ファイルのリストを表示するコマンドを入力し、-aオプション*を使用してすべてのファイルをリストし、-lオプション*を使用して長いリストを提供すると、次の結果が返されます。
Unix-ファイル許可/アクセスモード
この章では、Unixのファイル許可とアクセスモードについて詳しく説明します。 ファイルの所有権は、ファイルを保存するための安全な方法を提供するUnixの重要なコンポーネントです。 Unixのすべてのファイルには、次の属性があります-
- 所有者の許可-所有者の許可は、ファイルの所有者がファイルに対して実行できるアクションを決定します。
- グループ権限-グループの権限は、ファイルが属するグループのメンバーであるユーザーがファイルに対して実行できるアクションを決定します。
- その他(世界)の許可-他のユーザーの許可は、他のすべてのユーザーがファイルに対して実行できるアクションを示します。
許可インジケーター
ここで、最初の列はさまざまなアクセスモード、つまりファイルまたはディレクトリに関連付けられたアクセス許可を表します。
アクセス許可は3つのグループに分割され、グループ内の各位置は、読み取り(r)、書き込み(w)、実行(x)の順に特定のアクセス許可を示します-
- 最初の3文字(2〜4)は、ファイルの所有者の許可を表します。 たとえば、*-rwxr-xr-*は、所有者が読み取り(r)、書き込み(w)、および実行(x)許可を持っていることを表します。
- 3文字(5〜7)の2番目のグループは、ファイルが属するグループのアクセス許可で構成されます。 たとえば、*-rwxr-xr-*は、グループに読み取り(r)および実行(x)権限があり、書き込み権限はないことを表します。
- 3文字の最後のグループ(8〜10)は、他のすべてのユーザーのアクセス許可を表します。 たとえば、-rwxr-xr-*は、 read(r)*のみの許可があることを表します。
ファイルアクセスモード
ファイルのアクセス許可は、Unixシステムのセキュリティにおける最初の防衛線です。 Unixパーミッションの基本的な構成要素は、以下で説明されている read 、 write 、および execute パーミッションです-
Read
ファイルの内容を読み取る、つまり表示する機能を付与します。
書きます
ファイルのコンテンツを変更または削除する機能を付与します。
実行する
実行権限を持つユーザーは、ファイルをプログラムとして実行できます。
ディレクトリアクセスモード
ディレクトリアクセスモードは、他のファイルと同じ方法でリストおよび編成されます。 言及する必要があるいくつかの違いがあります-
Read
ディレクトリへのアクセスは、ユーザーがコンテンツを読むことができることを意味します。 ユーザーは、ディレクトリ内の filenames を見ることができます。
書きます
アクセスとは、ユーザーがディレクトリにファイルを追加または削除できることを意味します。
実行する
ディレクトリの実行は実際には意味がないので、これをトラバース許可と考えてください。
権限を変更する
ファイルまたはディレクトリのアクセス許可を変更するには、 chmod (モード変更)コマンドを使用します。 chmodを使用するには、シンボリックモードと絶対モードの2つの方法があります。
シンボリックモードでのchmodの使用
初心者がファイルまたはディレクトリのアクセス許可を変更する最も簡単な方法は、シンボリックモードを使用することです。 シンボリック許可を使用すると、次の表の演算子を使用して、必要な許可セットを追加、削除、または指定できます。
Sr.No. | Chmod operator & Description |
---|---|
1 |
+ 指定された許可をファイルまたはディレクトリに追加します。 |
2 |
- ファイルまたはディレクトリから指定された許可を削除します。 |
3 |
= 指定された許可を設定します。 |
次に、前の表の各例の chmod コマンドがテストファイルで実行され、その後に ls –l が続くため、アクセス許可の変更を確認できます-
これらのコマンドを1行で組み合わせる方法は次のとおりです-
絶対アクセス許可でのchmodの使用
chmodコマンドで許可を変更する2番目の方法は、番号を使用してファイルの許可の各セットを指定することです。
次の表に示すように、各権限には値が割り当てられ、権限の各セットの合計はそのセットの番号を提供します。
Number | Octal Permission Representation | Ref |
---|---|---|
0 | No permission | --- |
1 | Execute permission | --x |
2 | Write permission | -w- |
3 | Execute and write permission: 1 (execute) + 2 (write) = 3 | -wx |
4 | Read permission | r-- |
5 | Read and execute permission: 4 (read) PLUS 1 (execute) = 5 | r-x |
6 | Read and write permission: 4 (read) PLUS 2 (write) = 6 | rw- |
7 | All permissions: 4 (read) PLUS 2 (write) PLUS 1 (execute) = 7 | rwx |
テストファイルを使用した例を次に示します。 テストファイルで ls -1 を実行すると、ファイルの権限が次のようになることが示されます-
次に、前の表の各例の chmod コマンドがテストファイルで実行され、その後に ls –l が続くため、アクセス許可の変更を確認できます-
所有者とグループの変更
Unixでアカウントを作成する際、各ユーザーに*所有者ID *および*グループID *を割り当てます。 上記のすべての権限も、所有者とグループに基づいて割り当てられます。
所有者とファイルのグループを変更するための2つのコマンドが利用可能です-
- chown - chown コマンドは "change owner" を表し、ファイルの所有者を変更するために使用されます。
- chgrp - chgrp コマンドは "グループの変更" を表し、ファイルのグループを変更するために使用されます。
所有権の変更
ユーザーの値は、システム上の*ユーザーの名前*またはシステム上のユーザーの*ユーザーID(uid)*のいずれかです。
次の例は、概念を理解するのに役立ちます-
指定されたファイルの所有者をユーザー amrood に変更します。
注-スーパーユーザーrootには、ファイルの所有権を変更する無制限の機能がありますが、通常のユーザーは所有するファイルのみの所有権を変更できます。
グループ所有権の変更
groupの値は、システム上の*グループの名前*またはシステム上の*グループID(GID)*のいずれかです。
次の例では、概念を理解するのに役立ちます-
指定されたファイルのグループを special グループに変更します。
SUIDおよびSGIDファイルの許可
多くの場合、コマンドを実行するときは、タスクを実行するために特別な特権で実行する必要があります。
たとえば、 passwd コマンドでパスワードを変更すると、新しいパスワードは /etc/shadow ファイルに保存されます。
通常のユーザーとして、セキュリティ上の理由からこのファイルへの*読み取り*または*書き込み*アクセス権はありませんが、パスワードを変更する場合は、このファイルへの書き込み権限が必要です。 これは、 passwd プログラムがファイル /etc/shadow に書き込むために追加の許可を与える必要があることを意味します。
- Set User ID(SUID)および Set Group ID(SGID)*ビットと呼ばれるメカニズムを介して、プログラムに追加の許可が与えられます。
SUIDビットが有効になっているプログラムを実行すると、そのプログラムの所有者の権限が継承されます。 SUIDビットが設定されていないプログラムは、プログラムを開始したユーザーの権限で実行されます。
SGIDの場合も同様です。 通常、プログラムはユーザーのグループ権限で実行されますが、代わりにこのプログラムのグループはプログラムのグループ所有者に変更されます。
許可が使用可能な場合、SUIDおよびSGIDビットは文字「」で表示されます。 SUID *"s" ビットは、所有者の execute パーミッションが通常存在するパーミッションビットに配置されます。
たとえば、コマンド-
SUIDビットが設定され、コマンドがルートによって所有されていることを示します。 小文字の s ではなく、実行位置の大文字の S は、実行ビットが設定されていないことを示します。
ディレクトリでスティッキービットが有効になっている場合、次のいずれかのユーザーである場合にのみファイルを削除できます-
- スティッキディレクトリの所有者
- 削除されるファイルの所有者
- スーパーユーザー、root
ディレクトリのSUIDおよびSGIDビットを設定するには、次のコマンドを試してください-
Unix-環境
この章では、Unix環境について詳しく説明します。 Unixの重要な概念は、環境変数によって定義される environment です。 システムによって設定されるものもあれば、ユーザーによって設定されるものもあれば、シェルまたは別のプログラムをロードするプログラムによって設定されるものもあります。
変数は、値を割り当てる文字列です。 割り当てられる値は、数値、テキスト、ファイル名、デバイス、またはその他の種類のデータです。
たとえば、最初に変数TESTを設定し、次に echo コマンドを使用してその値にアクセスします-
次の結果が生成されます。
環境変数は $ 記号を使用せずに設定されますが、それらにアクセスするときは接頭辞として$記号を使用します。 これらの変数は、シェルから出るまで値を保持します。
システムにログインすると、シェルは環境をセットアップするために*初期化*と呼ばれるフェーズを経ます。 これは通常、次のファイルを読み取るシェルを含む2段階のプロセスです-
- /etc/profile * プロフィール
プロセスは次のとおりです-
- シェルは、ファイル /etc/profile が存在するかどうかを確認します。
- 存在する場合、シェルはそれを読み取ります。 それ以外の場合、このファイルはスキップされます。 エラーメッセージは表示されません。
- シェルは、*。profile *ファイルがホームディレクトリに存在するかどうかを確認します。 ホームディレクトリは、ログイン後に開始するディレクトリです。
- 存在する場合、シェルはそれを読み取ります。それ以外の場合、シェルはそれをスキップします。 エラーメッセージは表示されません。
これらのファイルの両方が読み取られるとすぐに、シェルはプロンプトを表示します-
これは、コマンドを実行して実行させるためのプロンプトです。
注意-ここで詳述するシェル初期化プロセスはすべての Bourne タイプのシェルに適用されますが、 bash および ksh で使用される追加ファイルがいくつかあります。
.profileファイル
ファイル /etc/profile は、Unixマシンのシステム管理者によって管理され、システム上のすべてのユーザーが必要とするシェル初期化情報が含まれています。
ファイル .profile は管理下にあります。 このファイルには、必要なだけのシェルカスタマイズ情報を追加できます。 あなたが構成する必要がある情報の最小セットは含まれています-
- 使用している端末のタイプ。
- コマンドを見つけるディレクトリのリスト。
- 端末のルックアンドフィールに影響する変数のリスト。
ホームディレクトリで使用可能な .profile を確認できます。 viエディターを使用して開き、環境に設定されているすべての変数を確認します。
端末タイプの設定
通常、使用している端末のタイプは、 login または getty プログラムによって自動的に構成されます。 場合によっては、自動構成プロセスが端末を誤って推測します。
端末が正しく設定されていない場合、コマンドの出力が奇妙に見えるか、シェルと適切に対話できない可能性があります。
これが事実ではないことを確認するために、ほとんどのユーザーは、次の方法で端末を最低公分母に設定します-
PATHを設定する
コマンドプロンプトでコマンドを入力すると、シェルは実行する前にコマンドを見つける必要があります。
PATH変数は、シェルがコマンドを探す場所を指定します。 通常、パス変数は次のように設定されます-
ここで、コロン文字*(:)*で区切られた個々のエントリはそれぞれディレクトリです。 あなたがコマンドを実行するためにシェルを要求し、それがPATH変数で指定されたディレクトリのいずれかでそれを見つけることができない場合、次のようなメッセージが表示されます-
次のセクションで説明するPS1やPS2などの変数があります。
PS1およびPS2変数
コマンドプロンプトとしてシェルが表示する文字は、変数PS1に保存されます。 この変数は、必要なものに変更できます。 変更するとすぐに、その時点からシェルによって使用されます。
たとえば、コマンドを発行した場合-
プロンプトは⇒になります。 作業ディレクトリを表示するように PS1 の値を設定するには、コマンドを発行します-
このコマンドの結果、プロンプトにはユーザーのユーザー名、マシンの名前(ホスト名)、および作業ディレクトリが表示されます。
PS1の値の引数として使用できる*エスケープシーケンス*がかなりあります。プロンプトが情報であなたを圧倒しないように、最も重要なものに自分自身を制限するようにしてください。
Sr.No. | Escape Sequence & Description |
---|---|
1 |
\t HH:MM:SSとして表される現在の時刻 |
2 |
\d 現在の日付、平日の月の日付として表されます |
3 |
\n 改行 |
4 |
\s 現在のシェル環境 |
5 |
\W 作業ディレクトリ |
6 |
\w 作業ディレクトリの完全パス |
7 |
\u 現在のユーザーのユーザー名 |
8 |
\h 現在のマシンのホスト名 |
9 |
\# 現在のコマンドのコマンド番号。 新しいコマンドが入力されると増加します |
10 |
\$ 有効UIDが0の場合(つまり、rootとしてログインしている場合)、#文字でプロンプトを終了します。それ以外の場合は、$記号を使用します |
ログインするたびに自分で変更することも、*。profile *ファイルに追加することでPS1で自動的に変更することもできます。
不完全なコマンドを発行すると、シェルは2番目のプロンプトを表示し、コマンドが完了するのを待って、もう一度 Enter を押します。
デフォルトのセカンダリプロンプトは*> (大なり記号)ですが、 *PS2 シェル変数を再定義することで変更できます-
以下は、デフォルトのセカンダリプロンプトを使用する例です-
以下に示す例は、カスタマイズされたプロンプトでPS2を再定義します-
環境変数
以下は、重要な環境変数の部分的なリストです。 これらの変数は、次のように設定およびアクセスされます-
Sr.No. | Variable & Description |
---|---|
1 |
DISPLAY
|
2 |
HOME 現在のユーザーのホームディレクトリを示します。cd built-in コマンドのデフォルト引数です。 |
3 |
IFS 展開後の単語分割にパーサーが使用する Internal Field Separator を示します。 |
4 |
LANG LANGはデフォルトのシステムロケールに展開されます。 LC_ALLを使用してこれをオーバーライドできます。 たとえば、値が pt_BR の場合、言語は(ブラジル)ポルトガル語に設定され、ロケールはブラジルに設定されます。 |
5 |
LD_LIBRARY_PATH 動的リンカーを備えたUnixシステムには、他のディレクトリを検索する前に、execの後にプロセスイメージを構築するときに共有オブジェクトを検索する必要があるディレクトリのコロン区切りのリストが含まれています。 |
6 |
PATH コマンドの検索パスを示します。 これは、シェルがコマンドを探すディレクトリのコロン区切りのリストです。 |
7 |
PWD cdコマンドで設定された現在の作業ディレクトリを示します。 |
8 |
RANDOM 参照されるたびに、0〜32,767のランダムな整数を生成します。 |
9 |
SHLVL bashのインスタンスが開始されるたびに1ずつ増加します。 この変数は、組み込みのexitコマンドが現在のセッションを終了するかどうかを判断するのに役立ちます。 |
10 |
TERM 表示タイプを指します。 |
11 |
TZ タイムゾーンを指します。 GMT、ASTなどの値を取ることができます。 |
12 |
UID 現在のユーザーの数値ユーザーIDに展開され、シェルの起動時に初期化されます。 |
以下は、いくつかの環境変数を示すサンプル例です-
Unix基本ユーティリティ-印刷、メール
この章では、Unixの基本ユーティリティとしての印刷と電子メールについて詳しく説明します。 これまでのところ、Unix OSとその基本的なコマンドの性質を理解しようとしました。 この章では、日常生活で使用できるいくつかの重要なUnixユーティリティを学習します。
ファイルを印刷する
Unixシステムでファイルを印刷する前に、余白を調整したり、一部の単語を強調表示したりするために、ファイルを再フォーマットすることができます。 ほとんどのファイルは再フォーマットせずに印刷することもできますが、生の印刷はそれほど魅力的ではない場合があります。
Unixの多くのバージョンには、 nroff と troff という2つの強力なテキストフォーマッタが含まれています。
prコマンド
以下は、 pr コマンドの構文です-
Sr.No. | Option & Description |
---|---|
1 |
-k 出力の k 列を生成します |
2 |
-d 出力をダブルスペースにします(すべての pr バージョンではありません) |
3 |
-h "header" 次のアイテムをレポートヘッダーとして取得します |
4 |
-t ヘッダーおよび上下の余白の印刷を排除します |
5 |
-l PAGE_LENGTH ページの長さをPAGE_LENGTH(66)行に設定します。 デフォルトのテキスト行数は56です |
6 |
-o MARGIN 各行をMARGIN(ゼロ)スペースでオフセットします |
7 |
-w PAGE_WIDTH 複数のテキスト列出力のみのページ幅をPAGE_WIDTH(72)文字に設定します |
lpおよびlprコマンド
コマンド lp または lpr は、画面表示ではなく、ファイルを紙に印刷します。 pr コマンドを使用してフォーマットの準備ができたら、これらのコマンドのいずれかを使用して、コンピューターに接続されているプリンターでファイルを印刷できます。
システム管理者がサイトでデフォルトのプリンタを設定している可能性があります。 デフォルトのプリンタで*食品*という名前のファイルを印刷するには、次の例のように、 lp または lpr コマンドを使用します-
- lp コマンドを使用している場合は、-n * Num オプションを使用して、Num個のコピーを印刷できます。 コマンド *lpr とともに、- Num を同じものに使用できます。 共有ネットワークに複数のプリンターが接続されている場合、-d printer オプションとlpコマンドを使用してプリンターを選択でき、同じ目的で-P * *printer *オプションとlprコマンドを使用できます。 ここで、printerはプリンター名です。
lpstatおよびlpqコマンド
自分以外の出力要求をすべて表示する場合は、 lpstat -o を使用します。 要求は、印刷される順序で表示されます-
ここでは、最初の行にプリンターの状態が表示されます。 プリンターが無効になっている場合や用紙がなくなっている場合、この最初の行に異なるメッセージが表示される場合があります。
cancelおよびlprmコマンド
そのIDに関係なく、現在印刷中のリクエストをキャンセルするには、単にキャンセルとプリンター名を入力します-
メール送信
Unixメールコマンドを使用して、メールを送受信します。 これは、電子メールを送信するための構文です-
メールコマンドに関連する重要なオプションを次に示します-s
Sr.No. | Option & Description |
---|---|
1 |
-s コマンドラインで件名を指定します。 |
2 |
-c ユーザーのリストにカーボンコピーを送信します。 リストは、名前のコンマ区切りリストにする必要があります。 |
3 |
-b リストにブラインドカーボンコピーを送信します。 リストは、名前のコンマ区切りリストにする必要があります。 |
以下は、テストメッセージをadmin@yahoo.comに送信する例です。
次に、メッセージを入力し、行の先頭に "control-D" を入力する必要があります。 停止するには、単に次のようにドット*(。)*を入力します-
あなたは次のように*リダイレクト<演算子*を使用して完全なファイルを送信することができます-
Unixシステムで受信メールを確認するには、次のようにメールを入力するだけです-
Unix-パイプとフィルター
この章では、Unixのパイプとフィルターについて詳しく説明します。 1つのプログラムからの出力が次のプログラムの入力になるように、2つのコマンドを一緒に接続できます。 この方法で接続された2つ以上のコマンドはパイプを形成します。
パイプを作成するには、2つのコマンド間のコマンドラインに垂直バー(*&verbar; *)を配置します。
プログラムが別のプログラムから入力を受け取ると、その入力に対して何らかの操作を実行し、結果を標準出力に書き込みます。 filter と呼ばれます。
grepコマンド
grepコマンドは、特定のパターンを持つ行のファイルを検索します。 構文は-
正規表現は、いくつかのプレーンテキスト(たとえば、単語)またはパターンマッチングに使用される特殊文字のいずれかです。
grepの最も簡単な使用法は、単一の単語で構成されるパターンを探すことです。 特定の文字列を含む入力ファイルの行のみが標準出力に送信されるように、パイプで使用できます。 grepに読み込むファイル名を指定しないと、標準入力が読み込まれます。それはすべてのフィルタープログラムが機能する方法です-
Sr.No. | Option & Description |
---|---|
1 |
-v パターンに一致しないすべての行を印刷します。 |
2 |
-n 一致した行とその行番号を出力します。 |
3 |
-l 一致する行(文字「l」)を持つファイルの名前のみを出力します |
4 |
-c 一致する行の数のみを出力します。 |
5 |
-i 大文字または小文字に一致します。 |
ここで、正規表現を使用して、grepに "キャロル" が付いた行を見つけ、その後に正規表現では "。*"と略されるゼロまたは他の文字が続き、その後に "Aug"が続くようにします。
ここでは、大文字と小文字を区別しない検索を行うために - i オプションを使用しています-
sortコマンド
Sr.No. | Description |
---|---|
1 |
-n 数値順にソートし(例:10は2の後にソートします)、空白とタブを無視します。 |
2 |
-r ソート順を逆にします。 |
3 |
-f 大文字と小文字を一緒にソートします。 |
4 |
PLUSx ソート時に最初の x フィールドを無視します。 |
3つ以上のコマンドをパイプにリンクできます。 grep を使用した以前のパイプの例を使用すると、8月に変更されたファイルをサイズの順序でさらにソートできます。
次のパイプは、コマンド ls 、 grep 、および sort で構成されています-
このパイプは、8月に変更されたディレクトリ内のすべてのファイルをサイズの順にソートし、端末画面に出力します。 並べ替えオプション&plus; 4nは、4つのフィールドをスキップし(フィールドは空白で区切られます)、行を数値順に並べ替えます。
pgおよびその他のコマンド
通常、長い出力は画面上で圧縮できますが、さらにテキストを実行したり、フィルターとして pg コマンドを使用したりすると、画面がテキストでいっぱいになると、表示が停止します。
長いディレクトリリストがあると仮定しましょう。 ソートされたリストを読みやすくするために、次のように出力を more にパイプします-
画面がファイルサイズの順序でソートされた行で構成されるテキストでいっぱいになると、画面がいっぱいになります。 画面の下部にある more プロンプトでは、コマンドを入力して、ソートされたテキストを移動できます。
この画面での作業が完了したら、moreプログラムの説明にリストされているコマンドのいずれかを使用できます。
Unix-プロセス管理
この章では、Unixでのプロセス管理について詳しく説明します。 Unixシステムでプログラムを実行すると、システムはそのプログラム用の特別な環境を作成します。 この環境には、システム上で他のプログラムが実行されていないかのようにシステムがプログラムを実行するために必要なすべてが含まれています。
Unixでコマンドを発行するたびに、新しいプロセスが作成または開始されます。 ディレクトリの内容を一覧表示するために ls コマンドを試したとき、プロセスを開始しました。 プロセスは、簡単に言えば、実行中のプログラムのインスタンスです。
オペレーティングシステムは、 pid または process ID として知られる5桁のID番号でプロセスを追跡します。 システム内の各プロセスには一意の pid があります。
可能性のあるすべての数字が使い果たされ、次のpidがロールオーバーまたは最初からやり直されるため、最終的にPidが繰り返されます。 Unixは各プロセスを追跡するために使用するpidであるため、どの時点でも同じpidを持つ2つのプロセスはシステムに存在しません。
プロセスを開始する
あなたがプロセスを開始する(コマンドを実行する)とき、それを実行できる2つの方法があります-
- 前景プロセス
- バックグラウンドプロセス
前景プロセス
デフォルトでは、開始するすべてのプロセスはフォアグラウンドで実行されます。 キーボードから入力を取得し、画面に出力を送信します。
これは、 ls コマンドで確認できます。 あなたが現在のディレクトリ内のすべてのファイルを一覧表示する場合は、次のコマンドを使用することができます-
これにより、すべてのファイルが表示され、その名前は ch で始まり .doc で終わります-
プロセスはフォアグラウンドで実行され、出力は画面に送られます。 ls コマンドが入力を必要とする場合(必要ではありません)、キーボードからの入力を待機します。
プログラムがフォアグラウンドで実行されていて時間がかかる場合、プログラムが処理を終了して表示されるまでプロンプトが利用できないため、他のコマンドを実行(他のプロセスを開始)することはできません。
バックグラウンドプロセス
バックグラウンドプロセスは、キーボードに接続せずに実行されます。 バックグラウンドプロセスでキーボード入力が必要な場合、待機します。
バックグラウンドでプロセスを実行する利点は、他のコマンドを実行できることです。別の開始を完了するまで待つ必要はありません!
バックグラウンドプロセスを開始する最も簡単な方法は、コマンドの最後にアンパサンド(&)を追加することです。
これは、名前が ch で始まり .doc で終わるすべてのファイルを表示します-
ここで、 ls コマンドが入力を必要とする場合(入力しない場合)、フォアグラウンドに移動してキーボードからデータを提供するまで停止状態になります。
その最初の行には、バックグラウンドプロセスに関する情報(ジョブ番号とプロセスID)が含まれています。 バックグラウンドとフォアグラウンドの間でジョブ番号を操作するには、ジョブ番号を知る必要があります。
Enterキーを押すと、次が表示されます-
最初の行は、 ls コマンドのバックグラウンドプロセスが正常に終了したことを示しています。 2番目は、別のコマンドのプロンプトです。
実行中のプロセスのリスト
次のように ps (プロセスステータス)コマンドを実行すると、独自のプロセスを簡単に確認できます-
psで最も一般的に使用されるフラグの1つは、次の例に示すように詳細情報を提供する -f (フルのf)オプションです-
Sr.No. | Column & Description |
---|---|
1 |
UID このプロセスが属するユーザーID(実行している人) |
2 |
PID プロセスID |
3 |
PPID 親プロセスID(それを開始したプロセスのID) |
4 |
C プロセスのCPU使用率 |
5 |
STIME プロセス開始時間 |
6 |
TTY プロセスに関連付けられた端末タイプ |
7 |
TIME プロセスにかかったCPU時間 |
8 |
CMD このプロセスを開始したコマンド |
Sr.No. | Option & Description |
---|---|
1 |
-a すべてのユーザーに関する情報を表示します |
2 |
-x 端末のないプロセスに関する情報を表示します |
3 |
-u -fオプションなどの追加情報を表示します |
4 |
-e 拡張情報を表示します |
プロセスの停止
プロセスの終了は、いくつかの異なる方法で実行できます。 多くの場合、コンソールベースのコマンドから、CTRL&plus;を送信します。 Cキーストローク(デフォルトの割り込み文字)はコマンドを終了します。 これは、プロセスがフォアグラウンドモードで実行されている場合に機能します。
プロセスがバックグラウンドで実行されている場合、 ps コマンドを使用してジョブIDを取得する必要があります。 その後、次のようにプロセスを強制終了するために kill コマンドを使用できます-
ここで、 kill コマンドは first_one プロセスを終了します。 プロセスが通常のkillコマンドを無視する場合は、次のように kill -9 の後にプロセスIDを使用できます-
親プロセスと子プロセス
各UNIXプロセスには、プロセスID(pid)と親プロセスID(ppid)の2つのID番号が割り当てられています。 システム内の各ユーザープロセスには、親プロセスがあります。
実行するコマンドのほとんどには、親としてシェルがあります。 このコマンドがプロセスIDと親プロセスIDの両方をリストした ps -f の例を確認してください。
ゾンビと孤児のプロセス
通常、子プロセスが強制終了されると、親プロセスは SIGCHLD シグナルを介して更新されます。 その後、親は必要に応じて他のタスクを実行したり、新しい子を再起動したりできます。 ただし、子が殺される前に親プロセスが殺されることもあります。 この場合、「すべてのプロセスの親」である init プロセスが新しいPPID(親プロセスID)になります。 場合によっては、これらのプロセスは孤立プロセスと呼ばれます。
プロセスが強制終了されても、 ps リストに Z 状態のプロセスが表示される場合があります。 これはゾンビまたは機能しないプロセスです。 プロセスは停止しており、使用されていません。 これらのプロセスは、孤立プロセスとは異なります。 実行は完了しましたが、プロセステーブルにエントリが見つかります。
デーモンプロセス
デーモンは、システム関連のバックグラウンドプロセスであり、多くの場合、他のプロセスからのルートおよびサービス要求の権限で実行されます。
デーモンには制御端末がありません。 /dev/tty を開くことはできません。 "ps -ef" を実行して tty フィールドを見ると、すべてのデーモンには tty の*?*があります。
正確には、デーモンはバックグラウンドで実行されるプロセスであり、通常は動作可能な何かが起こるのを待っています。 たとえば、印刷コマンドを待っているプリンタデーモン。
長時間の処理を必要とするプログラムがある場合は、それをデーモンにしてバックグラウンドで実行する価値があります。
トップコマンド
これは、頻繁に更新され、物理メモリと仮想メモリ、CPU使用率、負荷平均、ビジープロセスに関する情報を表示する対話型診断ツールです。
topコマンドを実行し、さまざまなプロセスによるCPU使用率の統計を確認するための簡単な構文を次に示します-
ジョブIDとプロセスID
バックグラウンドおよび中断されたプロセスは、通常*ジョブ番号(ジョブID)*を介して操作されます。 この番号はプロセスIDとは異なり、短いため使用されます。
さらに、ジョブは、連続して、または同時に実行される複数のプロセスで構成できます。 ジョブIDの使用は、個々のプロセスを追跡するよりも簡単です。
Unix-ネットワーク通信ユーティリティ
この章では、Unixのネットワーク通信ユーティリティについて詳しく説明します。 分散環境で作業する場合、リモートユーザーと通信する必要があり、リモートUnixマシンにもアクセスする必要があります。
ネットワーク化された分散環境でのユーザーの計算を支援するUnixユーティリティがいくつかあります。 この章ではそれらのいくつかをリストします。
pingユーティリティ
pingコマンドは次の場合に便利です-
- ハードウェアとソフトウェアの問題の追跡と特定。
- ネットワークおよびさまざまな外部ホストのステータスの決定。
- ネットワークのテスト、測定、管理。
構文
以下は、ftpコマンドを使用するための簡単な構文です-
上記のコマンドは、1秒ごとに応答の出力を開始します。 コマンドを終了するには、 CNTRL&plus;を押してコマンドを終了できます。 C キー。
例
以下は、ネットワーク上で利用可能なホストの可用性を確認する例です-
ホストが存在しない場合は、次の出力が表示されます-
ftpユーティリティ
ここで、 ftp は* F ile T ransfer P * rotocolを表します。 このユーティリティは、あるコンピューターから別のコンピューターにファイルをアップロードおよびダウンロードするのに役立ちます。
ftpユーティリティには、独自のUnixライクなコマンドのセットがあります。 これらのコマンドは、次のようなタスクの実行に役立ちます-
- リモートホストに接続してログインします。
- ディレクトリをナビゲートします。
- ディレクトリの内容を一覧表示します。
- ファイルを配置および取得します。
- ascii 、 ebcdic 、または binary としてファイルを転送します。
構文
以下は、ftpコマンドを使用するための簡単な構文です-
上記のコマンドは、ログインIDとパスワードの入力を求めます。 認証されると、ログインアカウントのホームディレクトリにアクセスでき、さまざまなコマンドを実行できるようになります。
次の表は、いくつかの重要なコマンドを示しています-
Sr.No. | Command & Description |
---|---|
1 |
put filename ローカルマシンからリモートマシンにファイル名をアップロードします。 |
2 |
get filename リモートマシンからローカルマシンにファイル名をダウンロードします。 |
3 |
mput file list ローカルマシンからリモートマシンに複数のファイルをアップロードします。 |
4 |
mget file list リモートマシンからローカルマシンに複数のファイルをダウンロードします。 |
5 |
prompt off プロンプトをオフにします。 デフォルトでは、 mput または mget コマンドを使用してファイルをアップロードまたはダウンロードするプロンプトが表示されます。 |
6 |
prompt on プロンプトをオンにします。 |
7 |
dir リモートマシンの現在のディレクトリで使用可能なすべてのファイルを一覧表示します。 |
8 |
cd dirname リモートマシンのディレクトリをdirnameに変更します。 |
9 |
lcd dirname ローカルマシンのディレクトリをdirnameに変更します。 |
10 |
quit 現在のログインからのログアウトを支援します。 |
すべてのファイルが現在のディレクトリにダウンロードされるか、現在のディレクトリからアップロードされることに注意してください。 特定のディレクトリにファイルをアップロードする場合は、まずそのディレクトリに変更してから、必要なファイルをアップロードする必要があります。
例
以下は、いくつかのコマンドの動作を示す例です-
telnetユーティリティ
リモートのUnixマシンに接続して、そのマシンでリモートで作業する必要がある場合があります。 Telnet は、あるサイトのコンピューターユーザーが接続してログインし、別のサイトのコンピューターで作業を行えるようにするユーティリティです。
Telnetを使用してログインすると、リモート接続されたマシンですべてのアクティビティを実行できます。 以下は、Telnetセッションの例です-
指ユーティリティ
セキュリティ上の理由から、他のシステムではFingerが無効になっている場合があります。
以下は、fingerコマンドを使用するための簡単な構文です-
ローカルマシン上のすべてのログインユーザーを確認します-
ローカルマシンで利用可能な特定のユーザーに関する情報を取得します-
リモートマシン上のすべてのログインユーザーを確認してください-
リモートマシン上で利用可能な特定のユーザーに関する情報を取得します-
Unix-viエディターチュートリアル
この章では、Uniでのviエディターの動作を理解します。 Unixでファイルを編集するには多くの方法があります。 画面指向のテキストエディタ vi を使用してファイルを編集するのが最良の方法の1つです。 このエディターを使用すると、ファイル内の他の行との関連で行を編集できます。
viは、一般的にUnixエディターの事実上の標準と見なされます。
通常、Unixシステムのすべてのフレーバーで使用できます。
その実装は、全体的に非常に似ています。
必要なリソースはごくわずかです。
ed や ex などの他のエディターよりもユーザーフレンドリーです。
viエディターの開始
次の表は、viエディターを使用するための基本的なコマンドを示しています-
Sr.No. | Command & Description |
---|---|
1 |
vi filename まだ存在しない場合は新しいファイルを作成し、存在しない場合は既存のファイルを開きます。 |
2 |
vi -R filename 既存のファイルを読み取り専用モードで開きます。 |
3 |
view filename 既存のファイルを読み取り専用モードで開きます。 |
以下は、現在の作業ディレクトリにまだ存在しない場合に新しいファイル testfile を作成する例です-
上記のコマンドは、次の出力を生成します-
カーソルの後の各行に*チルダ*(〜)があります。 チルダは未使用の行を表します。 行がチルダで始まっておらず、空白のように見える場合、スペース、タブ、改行、またはその他の表示できない文字が存在します。
これで、作業を開始する1つの開いているファイルがあります。 さらに先に進む前に、いくつかの重要な概念を理解しましょう。
動作モード
viエディターでの作業中、通常、次の2つのモードに遭遇します-
- コマンドモード-このモードでは、ファイルの保存、コマンドの実行、カーソルの移動、行または単語のカット(ヤンク)および貼り付け、検索および置換などの管理タスクを実行できます。 このモードでは、入力した内容はすべてコマンドとして解釈されます。
- 挿入モード-このモードでは、テキストをファイルに挿入できます。 このモードで入力されたものはすべて入力として解釈され、ファイルに配置されます。
viは常に*コマンドモード*で起動します。 テキストを入力するには、 i と入力するだけの挿入モードである必要があります。 挿入モードを終了するには、 Esc キーを押します。これにより、コマンドモードに戻ります。
ヒント-どのモードにいるかわからない場合は、Escキーを2回押します。これにより、コマンドモードに移動します。 viエディターを使用してファイルを開きます。 いくつかの文字を入力することから始めてから、違いを理解するためにコマンドモードに入ります。
viから抜け出す
viを終了するコマンドは*:q です。 コマンドモードになったら、コロンと「q」を入力し、リターンを押します。 ファイルが何らかの方法で変更された場合、エディターはこれを警告し、終了させません。 このメッセージを無視するには、保存せずにviを終了するコマンドは:q!*です。 これにより、変更を保存せずにviを終了できます。
エディターの内容を保存するコマンドは*:w です。 上記のコマンドをquitコマンドと組み合わせるか、:wq *を使用してリターンできます。
変更を保存してvi を終了する最も簡単な方法は、ZZコマンドを使用することです。 コマンドモードで、 *ZZ と入力します。 ZZ コマンドは、*:wq *コマンドと同じように機能します。
ファイルの特定の名前を指定/指定する場合は、:w *の後に指定することで指定できます。 たとえば、作業中のファイルを *filename2 という別のファイル名として保存する場合は、*:w filename2 *と入力して戻ります。
ファイル内を移動する
テキストに影響を与えずにファイル内を移動するには、コマンドモードにする必要があります(Escキーを2回押します)。 次の表は、一度に1文字を移動するために使用できるいくつかのコマンドを示しています-
Sr.No. | Command & Description |
---|---|
1 |
k カーソルを1行上に移動します |
2 |
j カーソルを1行下に移動します |
3 |
h カーソルを1文字左に移動します |
4 |
l カーソルを1文字右に移動します |
ファイル内を移動するには、次の点を考慮する必要があります-
- viでは大文字と小文字が区別されます。 コマンドを使用するときは、大文字に注意する必要があります。
- viのほとんどのコマンドの前には、アクションを発生させたい回数を指定できます。 たとえば、 2j はカーソルをカーソル位置の2行下に移動します。
viでファイル内を移動する方法は他にもたくさんあります。 コマンドモードである必要があることに注意してください(* Escを2回押す*)。 次の表は、ファイル内を移動するためのいくつかのコマンドを示しています-
以下に、ファイル内を移動するコマンドのリストを示します。
Sr.No. | Command & Description |
---|---|
1 |
0 or VERBAR カーソルを行の先頭に配置します |
2 |
$ カーソルを行末に配置します |
3 |
w 次の単語にカーソルを置きます |
4 |
b 前の単語にカーソルを置きます |
5 |
( 現在の文の先頭にカーソルを置きます |
6 |
) 次の文の先頭にカーソルを置きます |
7 |
E 空白で区切られた単語の末尾に移動します |
8 |
\{ 段落を後ろに移動します |
9 |
} 段落を前に移動します |
10 | *[[Moves a section back |
11 |
]] セクションを前方に移動します |
12 | *n |
現在の行の列 n に移動します |
13 |
1G ファイルの最初の行に移動します |
14 |
G ファイルの最終行に移動します |
15 |
nG ファイルの n ^ th ^ 行に移動します |
16 |
:n ファイルの n ^ th ^ 行に移動します |
17 |
fc
|
18 |
Fc
|
19 |
H 画面の上部に移動します |
20 |
nH 画面の上部から n ^ th ^ 行に移動します |
21 |
M 画面の中央に移動します |
22 |
L 画面の一番下に移動する |
23 |
nL 画面の下部から n ^ th ^ 行に移動します |
24 |
制御コマンド
次のコマンドは、以下の表に示す機能を実行するためにコントロールキーと一緒に使用できます-
以下に制御コマンドのリストを示します。
Sr.No. | Command & Description |
---|---|
1 |
CTRLPLUSd 1/2画面進む |
2 |
CTRLPLUSf 全画面を1つ進めます |
3 |
CTRLPLUSu 半画面前に移動します |
4 |
CTRLPLUSb 1画面前に移動します |
5 |
CTRLPLUSe 画面を1行上に移動します |
6 |
CTRLPLUSy 画面を1行下に移動します |
7 |
CTRLPLUSu 画面を1/2ページ上に移動します |
8 |
CTRLPLUSd 画面を1/2ページ下に移動します |
9 |
CTRLPLUSb 画面を1ページ上に移動します |
10 |
CTRLPLUSf 画面を1ページ下に移動します |
11 |
CTRLPLUSI 画面を再描画します |
ファイルを編集する
ファイルを編集するには、挿入モードである必要があります。 コマンドモードから挿入モードに入るための多くの方法があります-
Sr.No. | Command & Description |
---|---|
1 |
i 現在のカーソル位置の前にテキストを挿入します |
2 |
I 現在の行の先頭にテキストを挿入します |
3 |
a 現在のカーソル位置の後にテキストを挿入します |
4 |
A 現在の行の末尾にテキストを挿入します |
5 |
o カーソル位置の下にテキスト入力用の新しい行を作成します |
6 |
O カーソル位置の上にテキスト入力用の新しい行を作成します |
キャラクターを削除する
開いているファイルの文字と行を削除するために使用できる重要なコマンドのリストは次のとおりです-
Sr.No. | Command & Description |
---|---|
1 |
x カーソル位置の下の文字を削除します |
2 |
X カーソル位置の前の文字を削除します |
3 |
dw 現在のカーソル位置から次の単語まで削除します |
4 |
d^ 現在のカーソル位置から行の先頭までを削除します |
5 |
d$ 現在のカーソル位置から行末までを削除します |
6 |
D カーソル位置から現在の行の末尾までを削除します |
7 |
dd カーソルがある行を削除します |
上記のように、viのほとんどのコマンドは、アクションを発生させたい回数によって前置できます。 たとえば、 2x はカーソル位置の下の2文字を削除し、 2dd はカーソルが置かれている2行を削除します。
さらに先に進む前に、コマンドを実行することをお勧めします。
変更コマンド
viの文字、単語、または行を削除せずに変更することもできます。 関連するコマンドは次のとおりです-
Sr.No. | Command & Description |
---|---|
1 |
cc 行の内容を削除し、挿入モードのままにします。 |
2 |
cw カーソルが置かれている単語をカーソルから単語の小文字の w 末尾に変更します。 |
3 |
r カーソルの下の文字を置き換えます。 置換が入力されると、viはコマンドモードに戻ります。 |
4 |
R 現在カーソルの下にある文字で始まる複数の文字を上書きします。 上書きを停止するには、 Esc を使用する必要があります。 |
5 |
s 現在の文字を入力した文字に置き換えます。 その後、挿入モードのままになります。 |
6 |
S カーソルが置かれている行を削除し、新しいテキストに置き換えます。 新しいテキストが入力された後、viは挿入モードのままになります。 |
コマンドのコピーと貼り付け
あなたは1つの場所から行または単語をコピーしてから、次のコマンドを使用して別の場所に貼り付けることができます-
Sr.No. | Command & Description |
---|---|
1 |
yy 現在の行をコピーします。 |
2 |
yw 小文字のwカーソルが置かれている文字から、単語の最後まで現在の単語をコピーします。 |
3 |
p コピーしたテキストをカーソルの後に配置します。 |
4 |
P カーソルの前にヤンクしたテキストを置きます。 |
高度なコマンド
日々の編集を簡素化し、viのより効率的な使用を可能にするいくつかの高度なコマンドがあります-
高度なコマンドのリストを以下に示します。
Sr.No. | Command & Description |
---|---|
1 |
J 現在の行を次の行と結合します。 j個のコマンドが多数の行を結合します。 |
2 |
<< 現在の行を1シフト幅左にシフトします。 |
3 |
>> 現在の行を1シフト幅だけ右にシフトします。 |
4 |
~ カーソルの下の文字の大文字と小文字を切り替えます。 |
5 |
^G CtrlキーとGキーを同時に押して、現在のファイル名とステータスを表示します。 |
6 |
U 現在の行を、カーソルが行に入る前の状態に戻します。 |
7 |
u これは、ファイルで行われた最後の変更を元に戻すのに役立ちます。 もう一度「u」と入力すると、変更が再実行されます。 |
8 |
J 現在の行を次の行と結合します。 カウントはその数の行を結合します。 |
9 |
:f ファイル内の現在の位置を%で表示し、ファイル名、ファイルの総数を表示します。 |
10 |
:f filename 現在のファイルの名前をfilenameに変更します。 |
11 |
:w filename ファイルfilenameに書き込みます。 |
12 |
:e filename ファイル名を持つ別のファイルを開きます。 |
13 |
:cd dirname 現在の作業ディレクトリをdirnameに変更します。 |
14 |
:e # 2つの開いているファイルを切り替えます。 |
15 |
:n viを使用して複数のファイルを開く場合は、*:n *を使用してシリーズの次のファイルに移動します。 |
16 |
:p viを使用して複数のファイルを開く場合は、*:p *を使用して、シリーズの前のファイルに移動します。 |
17 |
:N viを使用して複数のファイルを開く場合は、*:N *を使用して、シリーズの前のファイルに移動します。 |
18 |
:r file ファイルを読み取り、現在の行の後に挿入します。 |
19 |
:nr file ファイルを読み取り、 n 行の後に挿入します。 |
単語と文字の検索
viエディターには、 string と character の2種類の検索があります。 文字列検索では、 / および*?*コマンドが使用されます。 これらのコマンドを開始すると、入力したばかりのコマンドが画面の最後の行に表示され、検索する特定の文字列を入力します。
これらの2つのコマンドは、検索が行われる方向のみが異なります-
/ コマンドは、ファイル内を前方(下方)に検索します。
*?*コマンドは、ファイル内を逆方向(上方向)に検索します。
Sr.No. | Character &Description |
---|---|
1 |
^ 行の先頭で検索します(検索式の先頭で使用)。 |
2 |
. 単一の文字に一致します。 |
3 | 0個以上の前の文字と一致します。 |
4 |
$ 行末(検索式の最後で使用)。 |
5 |
[ 一致する式または一致しない式のセットを開始します。 |
6 |
< これは、バックスラッシュでエスケープされた式に入れられ、単語の末尾または先頭を見つけます。 |
7 |
> これにより、上記の「* <*」文字の説明を確認できます。 |
文字検索は、コマンドの後に入力された文字を見つけるために1行内で検索します。 f および F コマンドは、現在の行の文字のみを検索します。 f は前方を検索し、 F は後方を検索し、見つかった文字の位置にカーソルが移動します。
設定コマンド
次の*:set コマンドを使用して、vi画面の外観を変更できます。 コマンドモードに入ったら、:set *に続けて次のコマンドを入力します。
Sr.No. | Command & Description |
---|---|
1 |
:set ic 検索時に大文字と小文字を区別しません |
2 |
:set ai 自動インデントを設定します |
3 |
:set noai 自動インデントを解除します |
4 |
:set nu 左側に行番号を持つ行を表示します |
5 |
:set sw ソフトウェアのタブストップの幅を設定します。 たとえば、このコマンドでシフト幅を4に設定します— *:set sw = 4 * |
6 |
_wrapscan_が設定されていて、ファイルの下部に単語が見つからない場合、最初から検索を試みます |
7 |
:set wm このオプションの値がゼロより大きい場合、エディターは自動的に「ワードラップ」します。 たとえば、折り返しマージンを2文字に設定するには、次のように入力します。*:set wm = 2 * |
8 |
ファイルの種類を「読み取り専用」に変更します |
9 |
:set term 端末タイプを印刷します |
10 |
:set bf 入力から制御文字を破棄します |
コマンドを実行する
viには、エディター内からコマンドを実行する機能があります。 コマンドを実行するには、コマンドモードに移動して*:!*コマンドを入力するだけです。
たとえば、そのファイル名でファイルを保存する前にファイルが存在するかどうかを確認する場合は、 :!と入力できます。 ls とすると、 ls の出力が画面に表示されます。
任意のキー(またはコマンドのエスケープシーケンス)を押して、viセッションに戻ることができます。
テキストを置き換える
置換コマンド(:s/)を使用すると、ファイル内の単語または単語のグループをすばやく置き換えることができます。 以下は、テキストを置き換える構文です-
注意すべき重要なポイント
次のポイントは、viでの成功に追加されます-
- コマンドを使用するには、コマンドモードである必要があります。 (コマンドモードになっていることを確認するために、いつでもEscを2回押します。)
- コマンドには注意が必要です。 これらは大文字と小文字が区別されます。
- テキストを入力するには、挿入モードである必要があります。
Unix-シェルとは何ですか?
シェルは、コマンド、プログラム、およびシェルスクリプトを実行できる環境です。 オペレーティングシステムのフレーバーが異なるように、シェルのフレーバーも異なります。 シェルの各フレーバーには、認識されるコマンドと関数の独自のセットがあります。
シェルプロンプト
以下は、現在の日付と時刻を表示する date コマンドの簡単な例です-
環境チュートリアルで説明されている環境変数PS1を使用して、コマンドプロンプトをカスタマイズできます。
シェルタイプ
Unixでは、シェルの2つの主要なタイプがあります-
- * Bourneシェル*-Bourneタイプのシェルを使用している場合、 $ 文字がデフォルトのプロンプトです。
- * Cシェル*-Cタイプのシェルを使用している場合、%文字がデフォルトのプロンプトです。
Bourne Shellには次のサブカテゴリがあります-
- ボーンシェル(sh)
- Kornシェル(ksh)
- Bourne Againシェル(bash)
- POSIXシェル(sh)
さまざまなCタイプのシェルが続きます-
- Cシェル(csh)
- TENEX/TOPS Cシェル(tcsh)
オリジナルのUnixシェルは、1970年代半ばにStephen Rによって書かれました。 ニュージャージー州のAT&T Bell Labsにいたときのボーン。
Bourneシェルは、Unixシステムで最初に登場したシェルであるため、「シェル」と呼ばれます。
Bourneシェルは通常、ほとんどのバージョンのUnixで /bin/sh としてインストールされます。 このため、異なるバージョンのUnixで使用できるスクリプトを作成するのに最適なシェルです。
この章では、Borne Shellに基づいたシェルの概念のほとんどについて説明します。
シェルスクリプト
シェルスクリプトの基本概念はコマンドのリストであり、実行順にリストされています。 優れたシェルスクリプトには、ステップを説明する*#*記号が前に付いたコメントがあります。
値Aが値Bよりも大きい、大量のデータを通過できるループ、データの読み取りと保存を行うファイル、データの読み取りと保存を行う変数などの条件付きテストがあり、スクリプトには関数が含まれる場合があります。
次のセクションで多くのスクリプトを作成します。 これは、シェル環境に何をいつ実行するかを指示するすべてのコマンドといくつかの他の必要なコンストラクトを配置する単純なテキストファイルです。
シェルスクリプトと関数は両方とも解釈されます。 これは、それらがコンパイルされていないことを意味します。
サンプルスクリプト
これは、後続のコマンドがBourneシェルによって実行されることをシステムに伝えます。 _ *#*記号はハッシュと呼ばれ、! シンボルはbang_と呼ばれます。
これらのコマンドを含むスクリプトを作成するには、最初にシェバン行を入れてからコマンドを追加します-
シェルコメント
次のようにスクリプトにコメントを入力できます-
上記のコンテンツを保存し、スクリプトを実行可能にします-
これで、シェルスクリプトを実行する準備ができました-
実行すると、次の結果が表示されます-
注-現在のディレクトリで利用可能なプログラムを実行するには、*。/program_name *を使用します
拡張シェルスクリプト
シェルスクリプトには、シェル環境に何をいつ実行するかを指示するいくつかの必要な構造があります。 もちろん、ほとんどのスクリプトは上記のものよりも複雑です。
シェルは、結局のところ、変数、制御構造などを備えた実際のプログラミング言語です。 スクリプトがどんなに複雑になっても、それはまだ順番に実行されるコマンドのリストにすぎません。
次のスクリプトは、キーボードから入力を受け取り、変数PERSONの値として割り当て、最終的にそれをSTDOUTに出力する read コマンドを使用します。
スクリプトのサンプル実行はここにあります-
Unix-シェル変数の使用
この章では、Unixでシェル変数を使用する方法を学習します。 変数は、値を割り当てる文字列です。 割り当てられる値は、数値、テキスト、ファイル名、デバイス、またはその他の種類のデータです。
変数は、実際のデータへのポインタにすぎません。 シェルを使用すると、変数を作成、割り当て、および削除できます。
変数名
変数の名前には、文字(a〜zまたはA〜Z)、数字(0〜9)、または下線文字(_)のみを含めることができます。
慣例により、Unixシェル変数の名前は大文字になります。
次の例は、有効な変数名です-
以下は無効な変数名の例です-
!、*、*-*などの他の文字を使用できないのは、これらの文字がシェルにとって特別な意味を持つためです。
変数の定義
変数は次のように定義されています-
たとえば-
上記の例では、変数NAMEを定義し、それに値「Zara Ali」を割り当てています。 このタイプの変数は*スカラー変数*と呼ばれます。 スカラー変数は、一度に1つの値しか保持できません。
シェルを使用すると、必要な値を変数に保存できます。 たとえば-
値へのアクセス
変数に保存されている値にアクセスするには、その名前の前にドル記号( $ )を付けます-
たとえば、次のスクリプトは、定義済み変数NAMEの値にアクセスし、STDOUTに出力します-
上記のスクリプトは、次の値を生成します-
読み取り専用変数
シェルは、読み取り専用コマンドを使用して変数を読み取り専用としてマークする方法を提供します。 変数が読み取り専用としてマークされた後、その値は変更できません。
たとえば、次のスクリプトはNAMEの値を変更しようとしているときにエラーを生成します-
上記のスクリプトは、次の結果を生成します-
変数の設定解除
変数を設定解除または削除すると、追跡する変数のリストから変数を削除するようシェルに指示されます。 変数の設定を解除すると、変数に保存されている値にアクセスできなくなります。
以下は、 unset コマンドを使用して定義済み変数を設定解除する構文です-
上記のコマンドは、定義された変数の値を設定解除します。 コマンドがどのように機能するかを示す簡単な例を次に示します-
上記の例では何も出力されません。 unsetコマンドを使用して、 readonly とマークされている変数を unset することはできません。
変数の種類
シェルが実行されているとき、変数の3つの主なタイプが存在します-
- ローカル変数-ローカル変数は、シェルの現在のインスタンス内に存在する変数です。 シェルによって開始されるプログラムでは使用できません。 これらはコマンドプロンプトで設定されます。
- 環境変数-環境変数は、シェルのすべての子プロセスで使用できます。 一部のプログラムは、正しく機能するために環境変数を必要とします。 通常、シェルスクリプトは、実行するプログラムに必要な環境変数のみを定義します。
- シェル変数-シェル変数は、シェルによって設定される特殊な変数であり、正しく機能するためにシェルに必要です。 これらの変数の一部は環境変数ですが、他の変数はローカル変数です。
Unix-特殊変数
この章では、Unixの特殊変数について詳しく説明します。 前の章の1つで、変数名に特定の非英数字を使用する場合に注意する方法を理解しました。 これは、これらの文字が特殊なUnix変数の名前で使用されているためです。 これらの変数は、特定の機能用に予約されています。
たとえば、 $ 文字は、現在のシェルのプロセスID番号、またはPIDを表します-
上記のコマンドは、現在のシェルのPIDを書き込みます-
次の表は、シェルスクリプトで使用できるいくつかの特殊変数を示しています-
Sr.No. | Variable & Description |
---|---|
1 |
$0 現在のスクリプトのファイル名。 |
2 |
$n これらの変数は、スクリプトが呼び出された引数に対応しています。 ここで、 n は引数の位置に対応する正の10進数です(最初の引数は$ 1、2番目の引数は$ 2などです)。 |
3 |
$# スクリプトに提供される引数の数。 |
4 |
$* すべての引数は二重引用符で囲まれています。 スクリプトが2つの引数を受け取る場合、$ *は$ 1 $ 2と同等です。 |
5 |
$@ すべての引数は個別に二重引用符で囲まれています。 スクリプトが2つの引数を受け取る場合、$ @は$ 1 $ 2と同等です。 |
6 |
$? 最後に実行されたコマンドの終了ステータス。 |
7 |
$$ 現在のシェルのプロセス番号。 シェルスクリプトの場合、これは実行中のプロセスIDです。 |
8 |
$! 最後のバックグラウンドコマンドのプロセス番号。 |
コマンドライン引数
コマンドライン引数$ 1、$ 2、$ 3、… $ 9は位置パラメータであり、$ 0は実際のコマンド、プログラム、シェルスクリプト、または関数を指し、$ 1、$ 2、$ 3、… $ 9はコマンド。
次のスクリプトは、コマンドラインに関連するさまざまな特殊変数を使用します-
上記のスクリプトの実行例を次に示します-
特別なパラメーター$ *および$ @
すべてのコマンドライン引数に一度にアクセスできる特別なパラメーターがあります。 $ と *$ @ は、二重引用符 "" で囲まれていない限り、両方とも同じように動作します。
両方のパラメーターは、コマンドライン引数を指定します。 ただし、「$ *」特殊パラメーターはリスト全体をスペースで区切った1つの引数として受け取り、「$ @」特殊パラメーターはリスト全体を受け取って個別の引数に分けます。
以下に示すようにシェルスクリプトを記述して、$ *または$ @のいずれかの特殊パラメーターを使用して、不明な数のコマンドライン引数を処理できます-
上記のスクリプトの実行例を次に示します-
注-ここで do … done は、後続のチュートリアルで説明するループの一種です。
終了ステータス
- $?*変数は、前のコマンドの終了ステータスを表します。
終了ステータスは、すべてのコマンドが完了すると返される数値です。 原則として、ほとんどのコマンドは、成功した場合は終了ステータス0を返し、失敗した場合は1を返します。
一部のコマンドは、特定の理由で追加の終了ステータスを返します。 たとえば、一部のコマンドはエラーの種類を区別し、特定の種類の障害に応じてさまざまな終了値を返します。
以下は成功したコマンドの例です-
Unix-シェル配列の使用
この章では、Unixでシェル配列を使用する方法について説明します。 シェル変数は、単一の値を保持するのに十分な能力があります。 これらの変数はスカラー変数と呼ばれます。
シェルは、*配列変数*と呼ばれる異なるタイプの変数をサポートしています。 これは、同時に複数の値を保持できます。 配列は、一連の変数をグループ化する方法を提供します。 必要な変数ごとに新しい名前を作成する代わりに、他のすべての変数を格納する単一の配列変数を使用できます。
シェル変数について説明したすべての命名規則は、配列の命名時に適用できます。
配列値の定義
配列変数とスカラー変数の違いは、次のように説明できます。
さまざまな学生の名前を変数のセットとして表現しようとしているとします。 個々の変数のそれぞれは、次のようにスカラー変数です-
単一の配列を使用して、上記のすべての名前を格納できます。 以下は、配列変数を作成する最も簡単な方法です。 これは、インデックスの1つに値を割り当てるのに役立ちます。
ここで、_array_name_は配列の名前、_index_は設定する配列内のアイテムのインデックス、valueはそのアイテムに設定する値です。
例として、次のコマンド-
配列値へのアクセス
配列変数を設定した後、次のようにアクセスします-
ここで、_array_name_は配列の名前であり、_index_はアクセスする値のインデックスです。 以下は、概念を理解するための例です-
上記の例では、次の結果が生成されます-
次のいずれかの方法で配列内のすべての項目にアクセスできます-
ここで、 array_name は、関心のある配列の名前です。 次の例では、概念を理解するのに役立ちます-
上記の例では、次の結果が生成されます-
Unix-シェルの基本演算子
各シェルではさまざまな演算子がサポートされています。 この章では、Bourneシェル(デフォルトシェル)について詳しく説明します。
私たちは今、次の演算子について説明します-
- 算術演算子
- 関係演算子
- ブール演算子
- 文字列演算子
- ファイルテスト演算子
Bourneシェルにはもともと単純な算術演算を実行するメカニズムはありませんでしたが、 awk または expr のいずれかの外部プログラムを使用します。
次の例は、2つの数字を追加する方法を示しています-
上記のスクリプトは、次の結果を生成します-
追加しながら、次の点を考慮する必要があります-
- 演算子と式の間にはスペースが必要です。 たとえば、2&plus; 2は正しくありません。 2&plus;と書く必要があります。 2。
- 完全な式は、バックティックと呼ばれる ’’ で囲む必要があります。
算術演算子
次の算術演算子は、Bourne Shellでサポートされています。
変数 a が10を保持し、変数 b が20を保持すると仮定します-
リンク:/unix/unix-arithmetic-operators [例を表示]
Operator | Description | Example |
---|---|---|
PLUS (Addition) | Adds values on either side of the operator | expr $a PLUS $b will give 30
|
- (Subtraction) | Subtracts right hand operand from left hand operand | expr $a - $b will give -10
|
* (Multiplication) | Multiplies values on either side of the operator | expr $a \* $b will give 200
|
/(Division) | Divides left hand operand by right hand operand | expr $b/$a will give 2
|
% (Modulus) | Divides left hand operand by right hand operand and returns remainder | expr $b % $a will give 0
|
= (Assignment) | Assigns right operand in left operand | a = $b would assign value of b into a |
== (Equality) | Compares two numbers, if both are same then returns true. | [ $a == $b ] would return false. |
!= (Not Equality) | Compares two numbers, if both are different then returns true. | [ $a != $b ] would return true. |
すべての条件式は、スペースを含む角カッコ内にある必要があることを理解することが非常に重要です。たとえば、 [$ a == $ b] は正しいのに対し、 [$ a == $ b] は正しくありません。
すべての算術計算は長整数を使用して行われます。
関係演算子
Bourne Shellは、数値に固有の次の関係演算子をサポートしています。 これらの演算子は、値が数値でない限り、文字列値に対して機能しません。
たとえば、次の演算子は、10と20の間、および「10」と「20」の間の関係をチェックしますが、「10」と「20」の間ではありません。
変数 a が10を保持し、変数 b が20を保持すると仮定します-
リンク:/unix/unix-relational-operators [例を表示]
Operator | Description | Example |
---|---|---|
-eq | Checks if the value of two operands are equal or not; if yes, then the condition becomes true. | [ $a -eq $b ] is not true. |
-ne | Checks if the value of two operands are equal or not; if values are not equal, then the condition becomes true. | [ $a -ne $b ] is true. |
-gt | Checks if the value of left operand is greater than the value of right operand; if yes, then the condition becomes true. | [ $a -gt $b ] is not true. |
-lt | Checks if the value of left operand is less than the value of right operand; if yes, then the condition becomes true. | [ $a -lt $b ] is true. |
-ge | Checks if the value of left operand is greater than or equal to the value of right operand; if yes, then the condition becomes true. | [ $a -ge $b ] is not true. |
-le | Checks if the value of left operand is less than or equal to the value of right operand; if yes, then the condition becomes true. | [ $a -le $b ] is true. |
すべての条件式は、周囲にスペースがある角括弧内に配置する必要があることを理解することが非常に重要です。 たとえば、 [$ a ⇐ $ b] は正しいのに対し、 [$ a ⇐ $ b] は正しくありません。
ブール演算子
次のブール演算子は、Bourne Shellでサポートされています。
変数 a が10を保持し、変数 b が20を保持すると仮定します-
link:/unix/unix-boolean-operators [例を表示]
Operator | Description | Example |
---|---|---|
! | This is logical negation. This inverts a true condition into false and vice versa. | [ ! false ] is true. |
*-o * | This is logical* OR*. If one of the operands is true, then the condition becomes true. | [ $a -lt 20 -o $b -gt 100 ] is true. |
*-a * | This is logical* AND*. If both the operands are true, then the condition becomes true otherwise false. | [ $a -lt 20 -a $b -gt 100 ] is false. |
文字列演算子
次の文字列演算子は、Bourne Shellでサポートされています。
変数 a が「abc」を保持し、変数 b が「efg」を保持すると仮定します-
link:/unix/unix-string-operators [例を表示]
Operator | Description | Example |
---|---|---|
= | Checks if the value of two operands are equal or not; if yes, then the condition becomes true. | [ $a = $b ] is not true. |
!= | Checks if the value of two operands are equal or not; if values are not equal then the condition becomes true. | [ $a != $b ] is true. |
-z | Checks if the given string operand size is zero; if it is zero length, then it returns true. | [ -z $a ] is not true. |
-n | Checks if the given string operand size is non-zero; if it is nonzero length, then it returns true. | [ -n $a ] is not false. |
*str * | Checks if* str* is not the empty string; if it is empty, then it returns false. | [ $a ] is not false. |
ファイルテスト演算子
Unixファイルに関連付けられたさまざまなプロパティをテストするために使用できる演算子がいくつかあります。
変数 file には、サイズが100バイトで、 read 、 write 、 execute のアクセス許可がある既存のファイル名「test」が含まれていると仮定します-
link:/unix/unix-file-operators [例を表示]
Operator | Description | Example |
---|---|---|
-b file | Checks if file is a block special file; if yes, then the condition becomes true. | [ -b $file ] is false. |
-c file | Checks if file is a character special file; if yes, then the condition becomes true. | [ -c $file ] is false. |
-d file | Checks if file is a directory; if yes, then the condition becomes true. | [ -d $file ] is not true. |
-f file | Checks if file is an ordinary file as opposed to a directory or special file; if yes, then the condition becomes true. | [ -f $file ] is true. |
-g file | Checks if file has its set group ID (SGID) bit set; if yes, then the condition becomes true. | [ -g $file ] is false. |
-k file | Checks if file has its sticky bit set; if yes, then the condition becomes true. | [ -k $file ] is false. |
-p file | Checks if file is a named pipe; if yes, then the condition becomes true. | [ -p $file ] is false. |
-t file | Checks if file descriptor is open and associated with a terminal; if yes, then the condition becomes true. | [ -t $file ] is false. |
-u file | Checks if file has its Set User ID (SUID) bit set; if yes, then the condition becomes true. | [ -u $file ] is false. |
-r file | Checks if file is readable; if yes, then the condition becomes true. | [ -r $file ] is true. |
-w file | Checks if file is writable; if yes, then the condition becomes true. | [ -w $file ] is true. |
-x file | Checks if file is executable; if yes, then the condition becomes true. | [ -x $file ] is true. |
-s file | Checks if file has size greater than 0; if yes, then condition becomes true. | [ -s $file ] is true. |
-e file | Checks if file exists; is true even if file is a directory but exists. | [ -e $file ] is true. |
Cシェル演算子
次のリンクは、Cシェルオペレーターに関する簡単なアイデアを提供します-
リンク:/unix/unix-c-shell-operators [Cシェルオペレーター]
Korn Shellオペレーター
リンクをたどると、Korn Shell Operatorsを理解できます-
リンク:/unix/unix-korn-shell-operators [Korn Shell Operators]
Unix-シェルの意思決定
この章では、UNIXでのシェルの意思決定について理解します。 シェルスクリプトの作成中に、指定された2つのパスから1つのパスを採用する必要がある場合があります。 したがって、プログラムが正しい決定を下し、適切なアクションを実行できるようにする条件付きステートメントを使用する必要があります。
Unix Shellは、さまざまな条件に基づいてさまざまなアクションを実行するために使用される条件ステートメントをサポートしています。 ここで2つの意思決定ステートメントをここで理解します-
- if … else ステートメント
- case … esac ステートメント
if … elseステートメント
elseステートメントは、特定のオプションセットからオプションを選択するために使用できる有用な意思決定ステートメントです。
Unix Shellは、次の形式の if…else ステートメントをサポートしています-
- リンク:/unix/if-fi-statement [if … fiステートメント]
- リンク:/unix/if-else-statement [if … else … fiステートメント]
- リンク:/unix/if-elif-statement [if … elif … else … fiステートメント]
ほとんどのifステートメントは、前の章で説明した関係演算子を使用して関係をチェックします。
case … esacステートメント
複数の if … elif ステートメントを使用して、多方向ブランチを実行できます。 ただし、これは、特にすべてのブランチが単一の変数の値に依存している場合は特に、常に最適なソリューションではありません。
Unix Shellは、この状況を正確に処理する case … esac ステートメントをサポートし、 if … elif ステートメントを繰り返すよりも効率的に処理します。
ここで詳細に説明されている case … esac ステートメントの形式は1つだけです-
- リンク:/unix/case-esac-statement [case … esacステートメント]
Unixシェルの case … esac ステートメントは、 C または C ++ および PERL などの他のプログラミング言語にある switch … case ステートメントと非常によく似ています。
Unix-シェルループタイプ
この章では、Unixのシェルループについて説明します。 ループは、一連のコマンドを繰り返し実行できる強力なプログラミングツールです。 この章では、シェルプログラマーが利用できる次の種類のループを調べます。
- リンク:/unix/while-loop [whileループ]
- リンク:/unix/for-loop [forループ]
- リンク:/unix/until-loop [untilループ]
- リンク:/unix/select-loop [選択ループ]
状況に応じて異なるループを使用します。 たとえば、 while ループは、指定された条件が真になるまで、指定されたコマンドを実行します。 until ループは、特定の条件が真になるまで実行されます。
適切なプログラミングの練習ができたら、専門知識を習得し、状況に応じて適切なループを使用し始めます。 ここで、 while および for ループは、 C 、 C ++ 、 PERL など、他のほとんどのプログラミング言語で使用できます。
入れ子ループ
すべてのループは入れ子の概念をサポートしているため、1つのループを別の類似のループまたは別のループ内に配置できます。 このネストは、要件に基づいて無制限の回数まで実行できます。
以下は while ループのネストの例です。 他のループは、同様の方法でプログラミング要件に基づいてネストすることができます-
whileループのネスト
whileループを別のwhileループの本体の一部として使用できます。
構文
例
ループのネストの簡単な例を次に示します。 あなたが9にカウントするために使用したループ内に別のカウントダウンループを追加しましょう-
これにより、次の結果が生成されます。 ここで echo -n がどのように機能するかに注意することが重要です。 ここで -n オプションを使用すると、エコーは改行文字を出力しません。
Unix-シェルループ制御
この章では、Unixでのシェルループ制御について説明します。 これまで、ループの作成とループを使用したさまざまなタスクの実行について見てきました。 ループを停止したり、ループの繰り返しをスキップしたりする必要がある場合があります。
この章では、シェルループの制御に使用される次の2つのステートメントについて学習します。
- break ステートメント
- continue ステートメント
無限ループ
すべてのループの寿命は制限されており、ループに応じて条件がfalseまたはtrueになると出力されます。
必要な条件が満たされない場合、ループは永遠に続く可能性があります。 終了せずに永久に実行されるループは、無限の回数実行されます。 このため、このようなループは無限ループと呼ばれます。
例
以下は、 while ループを使用して、0から9までの数字を表示する簡単な例です-
このループは、 a が常に*より大きい*または 10 であり、10未満になることはないため、永遠に続きます。
breakステートメント
構文
次の break ステートメントは、ループから抜け出すために使用されます-
ブレークコマンドは、この形式を使用してネストされたループを終了するために使用することもできます-
ここで、 n は、出口へのループを囲む n ^ th ^ を指定します。
例
実行すると、次の結果が表示されます-
ネストされたforループの簡単な例を次に示します。 var1が2 に等しく、 var2が0 に等しい場合、このスクリプトは両方のループから抜け出します-
実行すると、次の結果が表示されます。 内側のループには、引数2を持つbreakコマンドがあります。 これは、条件が満たされた場合、外側のループから抜け出し、最終的には内側のループから抜け出す必要があることを示しています。
continueステートメント
このステートメントは、エラーが発生したが、ループの次の反復を実行しようとする場合に役立ちます。
構文
breakステートメントと同様に、整数引数をcontinueコマンドに指定して、ネストされたループからコマンドをスキップできます。
ここで、 n は、継続する n ^ th ^ を含むループを指定します。
例
次のループは、continueステートメントから戻り、次のステートメントの処理を開始する continue ステートメントを使用します-
実行すると、次の結果が表示されます-
Unix-シェル置換
置換とは何ですか?
シェルは、1つ以上の特殊文字を含む式を検出すると、置換を実行します。
例
ここでは、変数の印刷値がその値に置き換えられます。 同時に、 "\ n" は新しい行に置き換えられます-
次の結果が表示されます。 ここで、*-e *オプションは、バックスラッシュエスケープの解釈を有効にします。
以下は -e オプションなしの結果です-
ここにエコーコマンドで使用できるエスケープシーケンスがあります-
Sr.No. | Escape & Description |
---|---|
1 |
\\ バックスラッシュ |
2 |
\a アラート(BEL) |
3 |
\b バックスペース |
4 |
\c 末尾の改行を抑制する |
5 |
\f フォームフィード |
6 |
\n 改行 |
7 |
\r キャリッジリターン |
8 |
\t 水平タブ |
9 |
\v 垂直タブ |
コマンド置換
コマンド置換は、シェルが特定のコマンドセットを実行し、コマンドの代わりにそれらの出力を置換するメカニズムです。
構文
コマンドの置換は、コマンドが次のように指定されたときに実行されます-
コマンド置換を実行するときは、単一引用符ではなく逆引用符を使用してください。
例
コマンド置換は通常、コマンドの出力を変数に割り当てるために使用されます。 次の例のそれぞれは、コマンドの置換を示しています-
実行すると、次の結果が表示されます-
可変置換
変数置換により、シェルプログラマーは、状態に基づいて変数の値を操作できます。
これはすべての可能な置換のための次の表です-
Sr.No. | Form & Description |
---|---|
1 |
${var} _var_の値を置き換えます。 |
2 |
$\{var:-word} _var_がnullまたは未設定の場合、 var の代わりに_word_が使用されます。 _var_の値は変更されません。 |
3 |
$\{var:=word} _var_がヌルまたは未設定の場合、_var_は word の値に設定されます。 |
4 |
$\{var:?message} _var_がnullまたは未設定の場合、_message_は標準エラーに出力されます。 これにより、変数が正しく設定されていることが確認されます。 |
5 |
$\{var:PLUSword} _var_が設定されている場合、_word_がvarに置き換えられます。 _var_の値は変更されません。 |
例
以下は、上記の置換のさまざまな状態を示す例です-
実行すると、次の結果が表示されます-
Unix-シェルの引用メカニズム
この章では、シェルの引用メカニズムについて詳しく説明します。 メタキャラクターについて議論することから始めます。
メタキャラクター
Unix Shellは、シェルスクリプトで使用中に特別な意味を持つさまざまなメタキャラクターを提供し、引用されていない限り単語を終了させます。
たとえば、?*はディレクトリ内のファイルをリストするときに1文字と一致し、**は複数の文字と一致します。 これは、シェルの特殊文字(メタキャラクターとも呼ばれます)のほとんどのリストです-
文字の前に \ を付けることで、文字を引用することができます(つまり、文字自体を表すことができます)。
例
次の例は、**または?*を印刷する方法を示しています-
実行すると、次の結果が表示されます-
引用符で囲まれた文字を使用してみましょう-
実行すると、次の結果が表示されます-
実行すると、次の結果が表示されます-
次の表は、引用の4つの形式を示しています-
Sr.No. | Quoting & Description |
---|---|
1 |
Single quote これらの引用符の間のすべての特殊文字は、その特別な意味を失います。 |
2 |
Double quote これらの引用符の間のほとんどの特殊文字は、これらの例外で特別な意味を失います-
|
3 |
バックスラッシュの直後の文字は、特別な意味を失います。 |
4 |
Back quote 逆引用符の間にあるものはすべてコマンドとして扱われ、実行されます。 |
一重引用符
多くの特別なシェル文字を含むエコーコマンドを検討してください-
各特殊文字の前にバックスラッシュを置くことは退屈であり、行を読みにくくします-
文字の大きなグループを引用する簡単な方法があります。 文字列の先頭と末尾に一重引用符( ')を入れます-
一重引用符内の文字は、各文字の前にバックスラッシュがあるかのように引用されます。 これにより、echoコマンドは適切な方法で表示されます。
出力する文字列内に単一引用符が表示される場合は、文字列全体を単一引用符で囲むのではなく、次のように円記号(\)を使用してその前に置く必要があります-
二重引用符
次のシェルスクリプトを実行してください。 このシェルスクリプトは一重引用符を使用します-
実行すると、次の結果が表示されます-
これは表示する必要があったものではありません。 単一引用符が変数の置換を妨げることは明らかです。 あなたが変数値を置き換え、逆コンマを期待どおりに動作させたい場合は、次のようにコマンドを二重引用符で囲む必要があります-
実行すると、次の結果が表示されます-
二重引用符は、以下を除くすべての文字の特別な意味を奪います-
- $ パラメータ置換
- コマンド置換の逆引用符
- \ $ はリテラルドル記号を有効にします
- * \ `*はリテラル逆引用符を有効にします
- * \ "*は埋め込み二重引用符を有効にします
- \\ 埋め込みバックスラッシュを有効にします
- 他のすべての \ 文字はリテラルです(特別ではありません)
一重引用符内の文字は、各文字の前にバックスラッシュがあるかのように引用されます。 これにより、echoコマンドが正しく表示されます。
出力する文字列内に単一引用符が表示される場合は、文字列全体を単一引用符で囲むのではなく、次のように円記号(\)を使用してその前に置く必要があります-
バッククォート
構文
バッククォートの間に任意のシェル*コマンド*を配置するための簡単な構文は次のとおりです-
例
次の例では date コマンドが実行され、生成された結果はDATA変数に格納されます。
実行すると、次の結果が表示されます-
Unix-シェル入出力リダイレクト
この章では、シェルの入出力リダイレクトについて詳しく説明します。 ほとんどのUnixシステムコマンドは、端末から入力を受け取り、結果の出力を端末に送り返します。 通常、コマンドは標準入力から入力を読み取ります。標準入力はデフォルトで端末です。 同様に、コマンドは通常、その出力を標準出力に書き込みます。これもデフォルトでターミナルです。
出力のリダイレクト
通常は標準出力向けのコマンドからの出力は、代わりにファイルに簡単に転送できます。 この機能は、出力リダイレクトと呼ばれます。
通常、出力を標準出力に書き込むコマンドに表記法> fileが追加されている場合、そのコマンドの出力は端末ではなくファイルに書き込まれます。
usersファイル内のコマンドの完全な出力をリダイレクトする次の who コマンドを確認してください。
ターミナルに出力が表示されないことに注意してください。 これは、出力がデフォルトの標準出力デバイス(ターミナル)から指定されたファイルにリダイレクトされたためです。 あなたは完全なコンテンツのユーザーファイルを確認することができます-
コマンドの出力がファイルにリダイレクトされ、ファイルにすでにデータが含まれている場合、そのデータは失われます。 次の例を考慮してください-
次のように>>演算子を使用して、既存のファイルに出力を追加できます-
入力リダイレクト
コマンドの出力をファイルにリダイレクトできるように、コマンドの入力もファイルからリダイレクトできます。 *より大きい文字> *は出力のリダイレクトに使用されるため、*より小さい文字<*はコマンドの入力をリダイレクトするために使用されます。
通常、標準入力から入力を受け取るコマンドは、この方法で入力をファイルからリダイレクトできます。 たとえば、上記で生成されたファイル_users_の行数をカウントするには、次のようにコマンドを実行できます-
実行すると、次の出力が表示されます。 ファイル_users_から wc コマンドの標準入力をリダイレクトすることにより、ファイルの行数をカウントできます-
wcコマンドの2つの形式によって生成される出力には違いがあることに注意してください。 最初のケースでは、ファイルユーザーの名前が行数とともにリストされます。 2番目のケースでは、そうではありません。
前者の場合、wcはファイルユーザーから入力を読み取っていることを認識しています。 2番目のケースでは、ファイル名を表示しないため、標準入力から入力を読み取っていることがわかっているだけです。
ヒアドキュメント
- hereドキュメント*は、対話型のシェルスクリプトまたはプログラムに入力をリダイレクトするために使用されます。
対話型プログラムまたは対話型シェルスクリプトに必要な入力を提供することにより、ユーザーの操作なしでシェルスクリプト内で対話型プログラムを実行できます。
- ここ*ドキュメントの一般的な形式は-
ここで、シェルは << 演算子を、指定された区切り文字を含む行が見つかるまで入力を読み取る命令として解釈します。 区切り文字を含む行までのすべての入力行は、コマンドの標準入力に送られます。
区切り文字は、シェルに here ドキュメントが完了したことを伝えます。 これがないと、シェルは入力を永久に読み取り続けます。 区切り文字は、スペースまたはタブを含まない単一の単語でなければなりません。
以下は、行の総数を数えるコマンド wc -l への入力です-
次のようにスクリプトを使用して複数の行を印刷するには、* hereドキュメント*を使用できます-
実行すると、次の結果が表示されます-
次のスクリプトは、 vi テキストエディターでセッションを実行し、入力をファイル test.txt に保存します。
vimとして機能するvimでこのスクリプトを実行すると、次のような出力が表示される可能性があります-
スクリプトを実行した後、ファイル test.txt に次の内容が追加されます-
出力を破棄する
コマンドを実行する必要がある場合もありますが、出力を画面に表示したくない場合があります。 このような場合、ファイル /dev/null にリダイレクトすることで出力を破棄できます-
ここで、commandは実行するコマンドの名前です。 ファイル /dev/null は、すべての入力を自動的に破棄する特別なファイルです。
コマンドの出力とそのエラー出力の両方を破棄するには、標準リダイレクトを使用して STDERR を STDOUT にリダイレクトします-
ここで、 2 は STDERR を表し、 1 は STDOUT を表します。 次のようにSTDOUTをSTDERRにリダイレクトすることにより、STDERRにメッセージを表示できます-
リダイレクトコマンド
以下は、リダイレクトに使用できるコマンドの完全なリストです-
Sr.No. | Command & Description |
---|---|
1 |
pgm > file pgmの出力はファイルにリダイレクトされます |
2 |
pgm < file プログラムpgmはファイルから入力を読み取ります |
3 |
pgm >> file pgmの出力はファイルに追加されます |
4 |
n > file ファイルにリダイレクトされた記述子 n を持つストリームからの出力 |
5 |
n >> file ファイルに記述子 n が追加されたストリームからの出力 |
6 |
n >& m ストリーム n からの出力をストリーム m にマージします |
7 |
n <& m ストリーム n からの入力をストリーム m にマージします |
8 |
<< tag 標準入力は、ここから行頭の次のタグを介して取得されます |
9 |
VERBAR あるプログラムまたはプロセスから出力を取得し、別のプログラムまたはプロセスに送信します |
ファイル記述子 0 は通常標準入力(STDIN)、 1 は標準出力(STDOUT)、および 2 は標準エラー出力(STDERR)であることに注意してください。
Unix-シェル関数
この章では、シェル関数について詳しく説明します。 関数を使用すると、スクリプトの全体的な機能をより小さく論理的なサブセクションに分割し、必要に応じて個々のタスクを実行するために呼び出すことができます。
関数を使用して反復タスクを実行することは、*コードの再利用*を作成する優れた方法です。 これは、現代のオブジェクト指向プログラミングの原則の重要な部分です。
シェル関数は、他のプログラミング言語のサブルーチン、プロシージャ、および関数に似ています。
関数を作成する
関数を宣言するには、単に次の構文を使用します-
関数の名前は function_name であり、スクリプト内の別の場所から呼び出すために使用します。 関数名の後には括弧が続き、その後に中括弧で囲まれたコマンドのリストが続く必要があります。
例
次の例は、関数の使用を示しています-
実行すると、次の出力が表示されます-
関数にパラメーターを渡す
関数の呼び出し中にパラメーターを受け入れる関数を定義できます。 これらのパラメーターは、 $ 1 、 $ 2 などで表されます。
以下に、2つのパラメーター_Zara_および_Ali_を渡し、関数でこれらのパラメーターをキャプチャして出力する例を示します。
実行すると、次の結果が表示されます-
関数から値を返す
関数内から exit コマンドを実行すると、関数の実行を終了するだけでなく、関数を呼び出したシェルプログラムも終了します。
代わりに関数の実行を単に終了したい場合は、定義済みの関数から抜け出す方法があります。
状況に基づいて、次のような構文を持つ return コマンドを使用して、関数から任意の値を返すことができます-
ここで code はここで選択したものであれば何でも構いませんが、スクリプト全体として意味のある、または有用なものを選択する必要があります。
例
次の関数は値10を返します-
実行すると、次の結果が表示されます-
入れ子関数
関数のより興味深い機能の1つは、関数自体と他の関数を呼び出すことができることです。 自分自身を呼び出す関数は、 _ recursive function_ と呼ばれます。
次の例は、2つの関数のネストを示しています-
実行すると、次の結果が表示されます-
プロンプトからの関数呼び出し
または、 _ test.sh_ などのファイル内の定義をグループ化し、次に入力して現在のシェルでファイルを実行できます-
これは、 _ test.sh_ 内で定義された関数を読み取り、次のように現在のシェルに定義する効果があります-
シェルから関数の定義を削除するには、*。f *オプションを指定してunsetコマンドを使用します。 このコマンドは、シェルの変数の定義を削除するためにも使用されます。
Unix-シェルマンページヘルプ
すべてのUnixコマンドには、いくつかのオプションと必須のオプションがあります。 これらのコマンドの完全な構文を忘れることは非常に一般的です。
すべてのUnixコマンドとそのオプションを誰も覚えていない可能性があるため、Unixが開発段階にあったときからこの権利を軽減するためのオンラインヘルプが用意されています。
Unixの* Helpファイル*のバージョンは* manページ*と呼ばれます。 コマンド名があり、その使用方法がわからない場合は、マニュアルページですべての手順を実行できます。
構文
これは、システムを操作しながらUnixコマンドの詳細を取得するのに役立つ簡単なコマンドです-
例
ヘルプが必要なコマンドがあるとします。あなたが pwd について知りたいと仮定すると、単に次のコマンドを使用する必要があります-
上記のコマンドは、 pwd コマンドに関する完全な情報に役立ちます。 コマンドプロンプトで自分で試して、詳細を確認してください。
次のコマンドを使用して、 man コマンド自体の詳細を取得できます-
マニュアルページセクション
マニュアルページは一般にセクションに分割され、一般にマニュアルページの作成者の好みによって異なります。 次の表は、いくつかの一般的なセクションを示しています-
Sr.No. | Section & Description |
---|---|
1 |
NAME コマンドの名前 |
2 |
SYNOPSIS コマンドの一般的な使用パラメーター |
3 |
DESCRIPTION コマンドの動作を説明します |
4 |
OPTIONS コマンドのすべての引数またはオプションを説明します |
5 |
SEE ALSO manページのコマンドに直接関連する、またはその機能によく似ている他のコマンドをリストします |
6 |
BUGS コマンドまたはその出力に存在する既知の問題またはバグを説明します |
7 |
EXAMPLES コマンドの使用方法を読者に説明する一般的な使用例 |
8 |
AUTHORS マニュアルページ/コマンドの作成者 |
要約すると、manページは重要なリソースであり、Unixシステムのコマンドまたはファイルに関する情報が必要な場合の最初の調査手段です。
便利なシェルコマンド
次のリンクは、最も重要で頻繁に使用されるUnixシェルコマンドのリストを提供します。
コマンドの使用方法がわからない場合は、マニュアルページを使用してコマンドの詳細を確認してください。
リンクのリストは次のとおりです:/unix/unix-useful-commands [Unix Shell-Useful Commands]
Unix-SEDを使用した正規表現
この章では、UnixのSEDを使用した正規表現について詳しく説明します。
正規表現は、複数の文字シーケンスを記述するために使用できる文字列です。 正規表現は、 ed 、 sed 、 awk 、 grep 、さらに限定された範囲の vi など、さまざまなUnixコマンドで使用されます。
ここで、 SED は* s tream ed * itorを表します。 このストリーム指向のエディターは、スクリプトの実行専用に作成されました。 したがって、そこに入力するすべての入力は通過してSTDOUTに送られ、入力ファイルは変更されません。
sedの呼び出し
開始する前に、 sed で動作する /etc/passwd テキストファイルのローカルコピーがあることを確認してください。
前述のように、sedは次のようにパイプを介してデータを送信することで呼び出すことができます-
sedの一般的な構文
sedの一般的な構文は次のとおりです-
ここで、 pattern は正規表現であり、 action は次の表に示すコマンドの1つです。 pattern が省略された場合、上で見たように action がすべての行に対して実行されます。
パターンを囲むスラッシュ文字(/)は、区切り文字として使用されるため必要です。
Sr.No. | Range & Description |
---|---|
1 |
p 行を印刷します |
2 |
d 行を削除します |
3 |
s/pattern1/pattern2/ pattern1の最初の出現をpattern2に置き換えます |
sedを使用してすべての行を削除する
これで、sedを使用してすべての行を削除する方法を理解できます。 sedを再度呼び出します。しかし、sedは現在、単一の文字 d で示される editingコマンドdelete line を使用することになっています-
次の例のように、パイプを介してファイルを送信してsedを呼び出す代わりに、sedにファイルからデータを読み取るように指示することができます。
次のコマンドは、catコマンドなしで、前の例とまったく同じことを行います-
sedアドレス
sedはアドレスもサポートしています。 アドレスは、ファイル内の特定の場所、または特定の編集コマンドを適用する範囲です。 sedはアドレスを検出しないと、ファイル内のすべての行で操作を実行します。
次のコマンドは、使用しているsedコマンドに基本アドレスを追加します-
sedアドレス範囲
これで、* sedアドレス範囲*の操作方法を理解できます。 では、ファイルから複数の行を削除したい場合はどうでしょうか? 次のようにsedでアドレス範囲を指定できます-
上記のコマンドは、1から5までのすべての行に適用されます。 これにより、最初の5行が削除されます。
次のアドレス範囲を試してください-
Sr.No. | Range & Description |
---|---|
1 |
'4,10d' 4番目から10番目までの行は削除されます |
2 |
'10,4d' sedは逆方向に機能しないため、10 ^ th ^行のみが削除されます |
3 |
'4,PLUS5d' これはファイルの4行目と一致し、その行を削除し、次の5行を削除し続け、削除を中止して残りを出力します |
4 |
'2,5!d' これは、2 ^ nd ^から5 ^ th ^行までを除くすべてを削除します |
5 |
'1~3d' これにより、最初の行が削除され、次の3行がステップオーバーされ、4行目が削除されます。 Sedは、ファイルの終わりまでこのパターンを適用し続けます。 |
6 |
'2~2d' これにより、sedは2行目を削除し、次の行をステップオーバーし、次の行を削除し、ファイルの終わりに達するまで繰り返します。 |
7 |
'4,10p' 4 ^ th ^から10 ^ th ^までの行が印刷されます |
8 |
'4,d' これにより、構文エラーが生成されます |
9 |
',10d' これも構文エラーを生成します |
注意- p アクションを使用しているときは、*-n *オプションを使用して、行の印刷が繰り返されないようにする必要があります。 次の2つのコマンドの違いを確認してください-
置換コマンド
ある文字列を別の文字列に置き換えるには、sedに最初の文字列が終了し、置換文字列が始まる場所に関する情報が必要です。 このため、2つの文字列をスラッシュ( / )文字でブックエンドします。
次のコマンドは、文字列 root の行で最初に出現するものを文字列 amrood に置き換えます。
sedは行の最初の出現のみを置換することに注意することが非常に重要です。 文字列ルートが1行に複数回出現する場合、最初に一致したものだけが置き換えられます。
sedがグローバル置換を実行するには、次のようにコマンドの末尾に文字 g を追加します-
置換フラグ
Sr.No. | Flag & Description |
---|---|
1 |
g 最初の一致だけでなく、すべての一致を置き換えます |
2 |
NUMBER NUMBER ^ th ^マッチのみを置換します |
3 |
p 置換が行われた場合、パターンスペースを出力します |
4 |
w FILENAME 置換が行われた場合、結果をFILENAMEに書き込みます |
5 |
I or i 大文字と小文字を区別しない方法で一致 |
6 |
M or m 特殊な正規表現文字および$の通常の動作に加えて、このフラグにより、は改行の後の空の文字列に一致し、$は改行の前の空の文字列に一致します |
代替文字列セパレーターの使用
スラッシュ文字を含む文字列を置換する必要があるとします。 この場合、 s の後に指定された文字を指定することにより、異なるセパレーターを指定できます。
上記の例では、単純なルートではなく /root を検索しようとしたため、スラッシュ:の代わりに*:を *delimiter として使用しました。
空のスペースで置き換える
空の置換文字列を使用して、ルート文字列を /etc/passwd ファイルから完全に削除します-
アドレス置換
あなたが文字列 sh を文字列 quiet で10行目のみで置換したい場合は、次のように指定できます-
同様に、アドレス範囲の置換を行うには、次のようなことを行うことができます-
出力からわかるように、最初の5行では文字列 sh が quiet に変更されましたが、残りの行は変更されていません。
マッチングコマンド
あなたは、次のようにすべての一致する行を印刷する*-n オプションと一緒に *p オプションを使用します-
正規表現を使用する
パターンの照合中に、より柔軟な正規表現を使用できます。
_daemon_で始まるすべての行に一致し、それらを削除する次の例を確認してください-
以下は、 sh で終わるすべての行を削除する例です-
次の表に、正規表現で非常に役立つ4つの特殊文字を示します。
Sr.No. | Character & Description |
---|---|
1 |
^ 行頭と一致します |
2 |
$ 行末に一致します |
3 |
. 任意の1文字と一致します |
4 | 前の文字のゼロ回以上の出現に一致します |
5 |
[chars] charsで指定された文字のいずれかに一致します。charsは文字のシーケンスです。 文字の範囲を示すために-文字を使用できます。 |
一致する文字
- メタ文字*の使用を示すために、さらにいくつかの式を見てください。 たとえば、次のパターン-
Sr.No. | Expression & Description |
---|---|
1 |
/a.c/
|
2 |
/a*c/
|
3 |
/[tT]he/ ストリング The および the に一致します |
4 |
/^$/ 空白行に一致 |
5 |
/^.$/* 行全体に一致します |
6 |
//* 1つ以上のスペースに一致 |
7 |
/^$/
|
次の表は、頻繁に使用される文字セットを示しています-
Sr.No. | Set & Description |
---|---|
1 |
[a-z] 単一の小文字と一致します |
2 |
[A-Z] 単一の大文字と一致します |
3 |
[a-zA-Z] 単一の文字と一致します |
4 |
[0-9] 単一の数字と一致します |
5 |
[a-zA-Z0-9] 単一の文字または数字と一致します |
文字クラスのキーワード
いくつかの特別なキーワード、特に regexps を使用するGNUユーティリティは、一般的に regexps で利用できます。 これらは物事を簡素化し、読みやすさを高めるため、sed正規表現に非常に役立ちます。
たとえば、文字 aからz および文字 AからZ は、キーワード :alpha: を持つ文字の1つのクラスを構成します。
アルファベット文字クラスキーワードを使用して、このコマンドは、アルファベットの文字で始まる /etc/syslog.conf ファイル内の行のみを印刷します-
次の表は、GNU sedで使用可能な文字クラスキーワードの完全なリストです。
Sr.No. | Character Class & Description |
---|---|
1 |
英数字[a-z A-Z 0-9] |
2 |
' アルファベット[a-z A-Z] |
3 |
' 空白文字(スペースまたはタブ) |
4 |
' 制御文字 |
5 |
' 数字[0-9] |
6 |
' 可視文字(空白を除く) |
7 |
' 小文字[a-z] |
8 |
' 印刷可能文字(非制御文字) |
9 |
' 句読文字 |
10 |
' 空白 |
11 |
' 大文字[A-Z] |
12 |
' 16進数[0-9 a-f A-F] |
アンパサンド参照
- sedメタ文字&は、一致したパターンの内容を表します。 たとえば、次のような電話番号でいっぱいの *phone.txt というファイルがあるとします-
読みやすいように、括弧で囲まれた*市外局番*(最初の3桁)を作成します。 これを行うには、アンパサンド置換文字を使用できます-
ここで、パターン部分では、最初の3桁を照合し、*&*を使用して、これらの3桁を周囲の*括弧*に置き換えています。
複数のsedコマンドの使用
次のように、単一のsedコマンドで複数のsedコマンドを使用できます-
ここで、 command1 から commandN は、前述のタイプのsedコマンドです。 これらのコマンドは、filesによって指定されたファイルのリスト内の各行に適用されます。
同じメカニズムを使用して、次のように上記の電話番号の例を書くことができます-
注-上記の例では、文字クラスのキーワード :digit: を3回繰り返す代わりに、 \\ {3 \} に置き換えました。つまり、前の正規表現が3回。 また、改行を使用するために \ を使用しましたが、これはコマンドを実行する前に削除する必要があります。
バックリファレンス
- アンパサンドメタ文字*は便利ですが、さらに便利なのは、正規表現で特定の領域を定義できることです。 これらの特別な領域は、置換文字列の参照として使用できます。 正規表現の特定の部分を定義することにより、特別な参照文字を使用してそれらの部分を参照できます。
逆参照*を行うには、最初に領域を定義してから、その領域を参照し直す必要があります。 領域を定義するには、対象の各領域の周りに*バックスラッシュ付き括弧*を挿入します。 バックスラッシュで囲む最初の領域は *\ 1 で参照され、2番目の領域は \ 2 で参照されます。
次のコマンドを試してください-
注意-上記の例では、括弧内の各正規表現は \ 1 、 \ 2 などによって後方参照されます。 ここで改行するために \ を使用しました。 これは、コマンドを実行する前に削除する必要があります。
Unix-ファイルシステムの基本
ファイルシステムは、パーティションまたはディスク上のファイルの論理的な集合です。 パーティションは情報のコンテナであり、必要に応じてハードドライブ全体にまたがることができます。
ハードドライブには、 /file system を格納するファイルシステムや*/homeファイルシステム*を格納するファイルシステムなど、通常1つのファイルシステムのみを含むさまざまなパーティションを作成できます。
パーティションごとに1つのファイルシステムを使用すると、異なるファイルシステムの論理的なメンテナンスと管理が可能になります。
UNIXのすべては、DVD-ROM、USBデバイス、フロッピードライブなどの物理デバイスを含むファイルと見なされます。
ディレクトリ構造
Unixは、逆さまのツリーによく似た階層的なファイルシステム構造を使用し、ファイルシステムのベースにルート(/)があり、そこから他のすべてのディレクトリが広がっています。
Unixファイルシステムは、次のプロパティを持つファイルとディレクトリのコレクションです-
- 他のファイルとディレクトリを含むルートディレクトリ( / )があります。
- 各ファイルまたはディレクトリは、その名前、存在するディレクトリ、および通常 inode と呼ばれる一意の識別子によって一意に識別されます。
- 慣例により、ルートディレクトリには 2 の inode 番号があり、 lost&plus; found ディレクトリには 3 の inode 番号があります。 iノード番号 0 および 1 は使用されません。 ファイルのiノード番号は、* lsコマンド*に* -iオプション*を指定することで確認できます。 *自己完結型です。 あるファイルシステムと別のファイルシステムの間に依存関係はありません。
ディレクトリには特定の目的があり、一般にファイルを簡単に見つけるために同じタイプの情報を保持します。 Unixのメジャーバージョンに存在するディレクトリは次のとおりです-
Sr.No. | Directory & Description |
---|---|
1 |
/ これは、ファイル構造の最上位で必要なディレクトリのみを含むルートディレクトリです。 |
2 |
/bin これは、実行可能ファイルが置かれている場所です。 これらのファイルはすべてのユーザーが利用できます |
3 |
/dev これらはデバイスドライバーです |
4 |
/etc スーパーバイザディレクトリコマンド、構成ファイル、ディスク構成ファイル、有効なユーザーリスト、グループ、イーサネット、ホスト、重要なメッセージの送信先 |
5 |
/lib 共有ライブラリファイルと、場合によっては他のカーネル関連ファイルが含まれます |
6 |
/boot システムを起動するためのファイルが含まれています |
7 |
/home ユーザーおよびその他のアカウントのホームディレクトリが含まれています |
8 |
/mnt
|
9 |
/proc
|
10 |
/tmp システムのブート間で使用される一時ファイルを保持します |
11 |
/usr その他の目的で使用され、多くのユーザーが使用できます。 管理コマンド、共有ファイル、ライブラリファイルなどが含まれます |
12 |
/var 通常、ログファイルや印刷ファイルなどの可変長ファイルと、可変量のデータを含む可能性があるその他の種類のファイルが含まれます。 |
13 |
/sbin 通常はシステム管理用のバイナリ(実行可能)ファイルが含まれます。 たとえば、 _ fdisk_ および ifconfig utlities |
14 |
/kernel カーネルファイルが含まれています |
ファイルシステムのナビゲート
ファイルシステムの基本を理解したので、必要なファイルへのナビゲートを開始できます。 次のコマンドは、システムをナビゲートするために使用されます-
Sr.No. | Command & Description |
---|---|
1 |
cat filename ファイル名を表示します |
2 |
cd dirname 指定されたディレクトリに移動します |
3 |
cp file1 file2 1つのファイル/ディレクトリを指定された場所にコピーします |
4 |
file filename ファイルの種類(バイナリ、テキストなど)を識別します |
5 |
find filename dir ファイル/ディレクトリを見つける |
6 |
head filename ファイルの始まりを示します |
7 |
less filename ファイルを末尾または先頭から閲覧します |
8 |
ls dirname 指定されたディレクトリの内容を表示します |
9 |
mkdir dirname 指定されたディレクトリを作成します |
10 |
more filename ファイルを最初から最後まで閲覧します |
11 |
mv file1 file2 ファイル/ディレクトリの場所を移動するか、ファイル/ディレクトリの名前を変更します |
12 |
pwd ユーザーが現在いるディレクトリを表示します |
13 |
rm filename ファイルを削除します |
14 |
rmdir dirname ディレクトリを削除します |
15 |
tail filename ファイルの終わりを示します |
16 |
touch filename 空のファイルを作成するか、既存のファイルまたはその属性を変更します |
17 |
whereis filename ファイルの場所を表示します |
18 |
which filename PATHにあるファイルの場所を表示します |
link:/unix/unix-manpage-help [Manpage Help]を使用して、ここで説明する各コマンドの完全な構文を確認できます。
dfコマンド
パーティションスペースを管理する最初の方法は、* df(ディスクフリー)コマンドを使用することです。 コマンド df -k(ディスク空き)*は、以下に示すように、*ディスク領域の使用量をキロバイト*で表示します-
Sr.No. | Column & Description |
---|---|
1 |
Filesystem 物理ファイルシステム名 |
2 |
kbytes 記憶媒体で使用可能なスペースの合計キロバイト |
3 |
used 使用されたスペースの合計キロバイト(ファイルごと) |
4 |
avail 使用可能な合計キロバイト |
5 |
capacity ファイルが使用する合計スペースの割合 |
6 |
Mounted on ファイルシステムがマウントされているもの |
- -h(人間が読める)オプション*を使用して、サイズをわかりやすい表記で表示する形式で出力を表示できます。
デュコマンド
- du(ディスク使用量)コマンド*を使用すると、ディレクトリを指定して、特定のディレクトリのディスクスペース使用量を表示できます。
このコマンドは、特定のディレクトリが使用しているスペースを特定する場合に役立ちます。 次のコマンドは、各ディレクトリが消費するブロック数を表示します。 単一のブロックは、システムに応じて512バイトまたは1キロバイトのいずれかを使用する場合があります。
ファイルシステムのマウント
システムが使用できるようにするには、ファイルシステムをマウントする必要があります。 システムに現在マウントされている(使用可能な)ものを確認するには、次のコマンドを使用します-
Unixの慣例により、 /mnt ディレクトリは、一時的なマウント(CDROMドライブ、リモートネットワークドライブ、フロッピードライブなど)が置かれる場所です。 あなたがファイルシステムをマウントする必要がある場合は、次の構文でマウントコマンドを使用することができます-
たとえば、 CD-ROM をディレクトリ /mnt/cdrom にマウントする場合は、次のように入力できます-
これは、CD-ROMデバイスの名前が /dev/cdrom であり、 /mnt/cdrom にマウントすることを前提としています。 より具体的な情報についてはmountのmanページを参照するか、ヘルプ情報についてはコマンドラインでmount -h と入力してください。
マウントした後、cdコマンドを使用して、作成したマウントポイントを介して新しく利用可能なファイルシステムをナビゲートできます。
ファイルシステムのアンマウント
システムからファイルシステムをアンマウント(削除)するには、マウントポイントまたはデバイスを特定して umount コマンドを使用します。
たとえば、CDROMをアンマウントするには*、次のコマンドを使用します-
- mountコマンド*を使用すると、ファイルシステムにアクセスできますが、最新のUnixシステムのほとんどでは、* automount関数*により、このプロセスがユーザーに見えなくなり、介入は不要です。
ユーザーとグループのクォータ
ユーザーおよびグループのクォータは、特定のグループ内の単一のユーザーまたはすべてのユーザーが使用するスペースの量を、管理者が定義した値に制限できるメカニズムを提供します。
クォータは、スペースの量またはディスクブロックの数が管理者が定義した制限を超え始めた場合にユーザーが何らかのアクションを取ることができる2つの制限を中心に動作します-
- ソフト制限-ユーザーが定義された制限を超えた場合、ユーザーがスペースを解放できる猶予期間があります。
- ハード制限-猶予期間に関係なく、ハード制限に達すると、それ以上ファイルまたはブロックを割り当てることができません。
クォータを管理するためのコマンドがいくつかあります-
Sr.No. | Command & Description |
---|---|
1 |
quota グループのユーザーのディスク使用量と制限を表示します |
2 |
edquota これはクォータエディターです。 ユーザーまたはグループのクォータは、このコマンドを使用して編集できます |
3 |
quotacheck ディスク使用状況についてファイルシステムをスキャンし、クォータファイルを作成、確認、修復します |
4 |
setquota これはコマンドラインクォータエディターです |
5 |
quotaon これにより、1つ以上のファイルシステムでディスククォータを有効にする必要があることがシステムに通知されます。 |
6 |
quotaoff これにより、1つ以上のファイルシステムのディスククォータを無効にする必要があることがシステムに通知されます。 |
7 |
repquota これにより、指定したファイルシステムのディスク使用量とクォータの概要が出力されます |
link:/unix/unix-manpage-help [Manpage Help]を使用して、ここで説明する各コマンドの完全な構文を確認できます。
Unix-ユーザー管理
この章では、Unixでのユーザー管理について詳しく説明します。
Unixシステムには3種類のアカウントがあります-
ルートアカウント
これは「スーパーユーザー」とも呼ばれ、システムを完全かつ自由に制御できます。 スーパーユーザーは、制限なくコマンドを実行できます。 このユーザーは、システム管理者として想定される必要があります。
システムアカウント
システムアカウントは、たとえばメールアカウントや sshd アカウントなど、システム固有のコンポーネントの操作に必要なアカウントです。 通常、これらのアカウントはシステム上の特定の機能に必要であり、それらの変更はシステムに悪影響を与える可能性があります。
ユーザーアカウント
ユーザーアカウントは、ユーザーおよびユーザーグループにシステムへの対話型アクセスを提供します。 通常、一般ユーザーはこれらのアカウントに割り当てられ、通常、重要なシステムファイルおよびディレクトリへのアクセスが制限されています。
Unixは、多数のアカウントを論理的にグループ化する_Group Account_の概念をサポートしています。 すべてのアカウントは、別のグループアカウントの一部になります。 Unixグループは、ファイルのアクセス許可とプロセス管理で重要な役割を果たします。
ユーザーとグループの管理
4つの主なユーザー管理ファイルがあります-
/etc/passwd -ユーザーアカウントとパスワード情報を保持します。 このファイルには、Unixシステム上のアカウントに関する情報の大部分が含まれています。
/etc/shadow -対応するアカウントの暗号化されたパスワードを保持します。 すべてのシステムがこのファイルをサポートしているわけではありません。
/etc/group -このファイルには、各アカウントのグループ情報が含まれています。
/etc/gshadow -このファイルには、安全なグループアカウント情報が含まれています。
次の表は、アカウントとグループを作成および管理するために、ほとんどのUnixシステムで使用できるコマンドを示しています-
Sr.No. | Command & Description |
---|---|
1 |
useradd システムにアカウントを追加します |
2 |
usermod アカウント属性を変更します |
3 |
userdel システムからアカウントを削除します |
4 |
groupadd システムにグループを追加します |
5 |
groupmod グループ属性を変更します |
6 |
groupdel システムからグループを削除します |
link:/unix/unix-manpage-help [Manpage Help]を使用して、ここで説明する各コマンドの完全な構文を確認できます。
グループを作成する
これで、グループの作成方法を理解できます。 そのためには、アカウントを作成する前にグループを作成する必要があります。そうでない場合は、システム内の既存のグループを使用できます。 すべてのグループが /etc/groups ファイルにリストされています。
デフォルトグループはすべてシステムアカウント固有のグループであり、通常のアカウントに使用することはお勧めしません。 だから、次は新しいグループアカウントを作成するための構文です-
次の表は、パラメータを示しています-
Sr.No. | Option & Description |
---|---|
1 |
-g GID グループのIDの数値 |
2 |
-o このオプションにより、一意でないGIDを持つグループを追加できます |
3 |
-r このフラグは、 groupadd にシステムアカウントを追加するよう指示します |
4 |
-f このオプションは、指定されたグループが既に存在する場合、成功ステータスで終了します。 -gを使用すると、指定されたGIDが既に存在する場合、他の(一意の)GIDが選択されます |
5 |
groupname 作成される実際のグループ名 |
パラメータを指定しない場合、システムはデフォルト値を使用します。
次の例は、デフォルト値で_developers_グループを作成します。これは、ほとんどの管理者にとって非常に受け入れられます。
グループを変更する
グループを変更するには、 groupmod 構文を使用します-
developers_2グループ名をdeveloperに変更するには、次のように入力します-
財務GIDを545に変更する方法は次のとおりです-
グループを削除する
これで、グループを削除する方法を理解できます。 既存のグループを削除するために必要なのは、* groupdelコマンド*と group name だけです。 金融グループを削除するには、コマンドは-
これにより、グループのみが削除され、そのグループに関連付けられたファイルは削除されません。 ファイルには、所有者が引き続きアクセスできます。
アカウントを作成する
Unixシステムで新しいアカウントを作成する方法を見てみましょう。 以下は、ユーザーのアカウントを作成するための構文です-
次の表は、パラメータを示しています-
Sr.No. | Option & Description |
---|---|
1 |
-d homedir アカウントのホームディレクトリを指定します |
2 |
-g groupname このアカウントのグループアカウントを指定します |
3 |
-m ホームディレクトリが存在しない場合は作成します |
4 |
-s shell このアカウントのデフォルトのシェルを指定します |
5 |
-u userid このアカウントのユーザーIDを指定できます |
6 |
accountname 作成される実際のアカウント名 |
パラメータを指定しない場合、システムはデフォルト値を使用します。 useradd コマンドは、 /etc/passwd 、 /etc/shadow 、および /etc/group ファイルを変更し、ホームディレクトリを作成します。
アカウント mcmohd を作成し、そのホームディレクトリを /home/mcmohd に設定し、グループを developers として設定する例を次に示します。 このユーザーにはKorn Shellが割り当てられます。
上記のコマンドを発行する前に、 _ groupadd_ コマンドを使用して_developers_グループが既に作成されていることを確認してください。
アカウントが作成されたら、次のように passwd コマンドを使用してパスワードを設定できます-
アカウントを変更する
たとえば、アカウント名 mcmohd を mcmohd20 に変更し、それに応じてホームディレクトリを変更するには、次のコマンドを発行する必要があります-
アカウントを削除する
アカウントのホームディレクトリとメールファイルを削除するために、コマンド .r で使用できる引数またはオプションは1つだけです。
たとえば、アカウント_mcmohd20_を削除するには、次のコマンドを発行します-
バックアップのためにホームディレクトリを保持する場合は、*-r *オプションを省略します。 必要に応じて、後でホームディレクトリを削除できます。
Unix-システムパフォーマンス
この章では、Unixでのシステムパフォーマンスについて詳しく説明します。
Unixシステムのパフォーマンスを監視および管理するために利用できるいくつかの無料ツールを紹介します。 これらのツールは、Unix環境でパフォーマンスの問題を診断および修正する方法に関するガイドラインも提供します。
Unixには、監視と調整が必要な次の主要なリソースタイプがあります-
- CPU
- メモリ
- ディスクスペース
- 通信回線
- * I/O時間*
- ネットワーク時間
- *アプリケーションプログラム *
パフォーマンスコンポーネント
次の表は、システム時間を占める5つの主要なコンポーネントを示しています-
Sr.No. | Component & Description |
---|---|
1 |
CPUがユーザー状態でユーザーのプログラムの実行に費やした実際の時間。 ライブラリ呼び出しの実行に費やされた時間は含まれますが、その代わりにカーネルで費やされた時間は含まれません |
2 |
System State CPU これは、このプログラムに代わってCPUがシステム状態に費やす時間です。 すべての* I/Oルーチン*にはカーネルサービスが必要です。 プログラマは、I/O転送をブロックすることでこの値に影響を与えることができます |
3 |
I/O Time and Network Time これは、データの移動とI/O要求の処理に費やされた時間です |
4 |
Virtual Memory Performance これには、コンテキストの切り替えとスワッピングが含まれます |
5 |
Application Program 他のプログラムの実行に費やした時間-別のアプリケーションが現在CPUを持っているためにシステムがこのアプリケーションを処理していないとき |
パフォーマンスツール
Unixは、Unixシステムのパフォーマンスを測定および微調整するための次の重要なツールを提供します-
Sr.No. | Command & Description |
---|---|
1 |
nice/renice 変更されたスケジューリング優先順位でプログラムを実行します |
2 |
netstat ネットワーク接続、ルーティングテーブル、インターフェイス統計、マスカレード接続、およびマルチキャストメンバーシップを出力します |
3 |
time 単純なコマンドの時間を計ったり、リソースの使用状況を示したりするのに役立ちます |
4 |
uptime これはシステム負荷平均です |
5 |
ps 現在のプロセスのスナップショットを報告します |
6 |
vmstat 仮想メモリの統計を報告します |
7 |
gprof コールグラフプロファイルデータを表示します |
8 |
prof プロセスプロファイリングを促進 |
9 |
top システムタスクを表示します |
link:/unix/unix-manpage-help [Manpage Help]を使用して、ここで説明する各コマンドの完全な構文を確認できます。
Unix-システムロギング
この章では、Unixでのシステムロギングについて詳しく説明します。
Unixシステムには非常に柔軟で強力なロギングシステムがあり、想像できるほとんどすべてを記録し、ログを操作して必要な情報を取得できます。
Unixの多くのバージョンは、 syslog と呼ばれる汎用のログ機能を提供します。 情報をログに記録する必要がある個々のプログラムは、情報をsyslogに送信します。
Unix _syslog_は、ホストで設定可能な統一されたシステムロギング機能です。 システムは、プログラム /etc/syslogd または /etc/syslog を実行する集中システムロギングプロセスを使用します。
システムロガーの操作は非常に簡単です。 プログラムは、ログエントリを_syslogd_に送信します。_syslogd_は、構成ファイル /etc/syslogd.conf または /etc/syslog を参照し、一致が見つかった場合、目的のログファイルにログメッセージを書き込みます。
あなたが理解する必要がある4つの基本的なsyslog用語があります-
Sr.No. | Term & Description |
---|---|
1 |
Facility ログメッセージを送信したアプリケーションまたはプロセスの説明に使用される識別子。 たとえば、メール、カーネル、ftp。 |
2 |
Priority メッセージの重要性の指標。 レベルは、デバッグ情報から重要なイベントまで、ガイドラインとしてsyslog内で定義されます。 |
3 |
Selector 1つ以上の施設とレベルの組み合わせ。 着信イベントがセレクターに一致すると、アクションが実行されます。 |
4 |
Action セレクターに一致する着信メッセージの処理—アクションは、メッセージをログファイルに書き込む、メッセージをコンソールまたは他のデバイスにエコーする、ログインユーザーにメッセージを書き込む、またはメッセージを別のsyslogサーバーに送信することができます。 |
syslogファシリティ
これで、syslog機能について理解できます。 セレクターで使用できる機能は次のとおりです。 Unixのすべてのバージョンにすべての機能が存在するわけではありません。
Facility | Description |
---|---|
1 |
auth 名前とパスワードの要求に関連するアクティビティ(getty、su、login) |
2 |
authpriv authと同じですが、選択したユーザーのみが読み取れるファイルに記録されます |
3 |
console 一般にシステムコンソールに送信されるメッセージをキャプチャするために使用 |
4 |
cron cronシステムスケジューラからのメッセージ |
5 |
daemon システムデーモンキャッチオール |
6 |
ftp ftpデーモンに関連するメッセージ |
7 |
kern カーネルメッセージ |
8 |
local0.local7 サイトごとに定義されたローカル施設 |
9 |
lpr ライン印刷システムからのメッセージ |
10 |
メールシステムに関するメッセージ |
11 |
mark ログファイルにタイムスタンプを生成するために使用される疑似イベント |
12 |
news ネットワークニュースプロトコル(nntp)に関連するメッセージ |
13 |
ntp ネットワークタイムプロトコルに関連するメッセージ |
14 |
user 通常のユーザープロセス |
15 |
uucp UUCPサブシステム |
syslogの優先順位
syslogの優先順位は次の表にまとめられています-
Sr.No. | Priority & Description |
---|---|
1 |
emerg 差し迫ったシステムクラッシュなどの緊急状態は、通常、すべてのユーザーにブロードキャストします |
2 |
alert 破損したシステムデータベースなど、すぐに修正する必要がある条件 |
3 |
crit ハードウェアエラーなどの重大な状態 |
4 |
err 通常のエラー |
5 |
Warning 警告 |
6 |
notice エラーではないが、おそらく特別な方法で処理する必要がある条件 |
7 |
info 情報メッセージ |
8 |
debug プログラムのデバッグ時に使用されるメッセージ |
9 |
none メッセージを記録しないことを指定するために使用される疑似レベル |
機能とレベルの組み合わせにより、何がログに記録され、その情報がどこに保存されるかを識別できます。
各プログラムはメッセージをシステムロガーに忠実に送信するため、ロガーは、セレクターで定義されたレベルに基づいて、何を追跡し、何を破棄するかを決定します。
レベルを指定すると、システムはそのレベル以上のすべてを追跡します。
===/etc/syslog.confファイル
ファイルの各行には2つの部分が含まれています-
- ログに記録するメッセージの種類を指定する*メッセージセレクター*。 たとえば、カーネルからのすべてのエラーメッセージまたはすべてのデバッグメッセージ。
- メッセージで何をすべきかを示す*アクションフィールド*。 たとえば、ファイルに入れるか、メッセージをユーザーの端末に送信します。
上記の構成の注目すべき点は次のとおりです-
- メッセージセレクタには、2つの部分があります。 a facility と a priority です。 たとえば、_kern.debug_は、カーネル(機能)によって生成されたすべてのデバッグメッセージ(優先度)を選択します。
- メッセージセレクタ_kern.debug_は、debugよりも大きいすべての優先順位を選択します。
- ファシリティまたは優先順位の代わりのアスタリスクは、「すべて」を示します。 たとえば、。debug はすべてのデバッグメッセージを意味し、 kern。はカーネルによって生成されたすべてのメッセージを意味します。
- コンマを使用して複数の機能を指定することもできます。 セミコロンを使用して、2つ以上のセレクターをグループ化できます。
ロギングアクション
アクションフィールドは、5つのアクションのいずれかを指定します-
- ログメッセージをファイルまたはデバイスに記録します。 たとえば、 /var/log/lpr.log または /dev/console 。
- ユーザーにメッセージを送信します。 複数のユーザー名をコンマで区切って指定できます。たとえば、root、amrood。 すべてのユーザーにメッセージを送信します。 この場合、アクションフィールドはアスタリスクで構成されています。例えば、 。
- メッセージをプログラムにパイプします。 この場合、プログラムはUnixパイプ記号(|)の後に指定されます。
- 別のホストのsyslogにメッセージを送信します。 この場合、アクションフィールドは、アットマークが前に付いたホスト名で構成されます。たとえば、@ finddevguides.com。
ロガーコマンド
Unixは logger コマンドを提供します。これは、システムロギングを処理するのに非常に便利なコマンドです。 logger コマンドはロギングメッセージをsyslogdデーモンに送信し、その結果システムロギングを引き起こします。
これは、 syslogd デーモンとその構成をいつでもコマンドラインから確認できることを意味します。 loggerコマンドは、コマンドラインからシステムログファイルに1行のエントリを追加する方法を提供します。
コマンドの形式は-
ここにパラメータの詳細があります-
Sr.No. | Option & Description |
---|---|
1 |
-f filename ファイルfilenameの内容をログに記録するメッセージとして使用します。 |
2 |
-i ロガープロセスのプロセスIDを各行に記録します。 |
3 |
-p priority 指定された優先度(指定されたセレクタエントリ)でメッセージを入力します。メッセージの優先度は、数値で指定するか、facility.priorityのペアとして指定できます。 デフォルトの優先度はuser.noticeです。 |
4 |
-t tag 指定されたタグでログに追加された各行をマークします。 |
5 |
message 内容が指定された順序でスペースで区切られて連結されている文字列引数。 |
link:/unix/unix-manpage-help [Manpage Help]を使用して、このコマンドの完全な構文を確認できます。
ログローテーション
ログファイルは非常に高速に成長し、大量のディスク領域を消費する傾向があります。 ログのローテーションを有効にするには、ほとんどのディストリビューションが newsyslog や logrotate などのツールを使用します。
これらのツールは、* cronデーモン*を使用して、頻繁に呼び出す必要があります。 詳細については、_newsyslog_または_logrotate_のマニュアルページを確認してください。
重要なログの場所
すべてのシステムアプリケーションは、ログファイルを /var/log とそのサブディレクトリに作成します。 ここにいくつかの重要なアプリケーションとそれに対応するログディレクトリがあります-
Application | Directory |
---|---|
httpd | /var/log/httpd |
samba | /var/log/samba |
cron | /var/log/ |
/var/log/ | |
mysql | /var/log/ |
Unix-シグナルとトラップ
この章では、Unixのシグナルとトラップについて詳しく説明します。
シグナルは、重要なイベントが発生したことを示すためにプログラムに送信されるソフトウェア割り込みです。 イベントは、ユーザーの要求から不正なメモリアクセスエラーまでさまざまです。 割り込み信号などの一部の信号は、ユーザーがプログラムに通常の制御フローにない何かを行うように要求したことを示します。
次の表に、遭遇する可能性があり、プログラムで使用する一般的な信号を示します-
Signal Name | Signal Number | Description |
---|---|---|
SIGHUP | 1 | Hang up detected on controlling terminal or death of controlling process |
SIGINT | 2 | Issued if the user sends an interrupt signal (Ctrl + C) |
SIGQUIT | 3 | Issued if the user sends a quit signal (Ctrl + D) |
SIGFPE | 8 | Issued if an illegal mathematical operation is attempted |
SIGKILL | 9 | If a process gets this signal it must quit immediately and will not perform any clean-up operations |
SIGALRM | 14 | Alarm clock signal (used for timers) |
SIGTERM | 15 | Software termination signal (sent by kill by default) |
信号のリスト
システムでサポートされているすべての信号をリストする簡単な方法があります。 kill -l コマンドを発行すると、サポートされているすべての信号が表示されます-
信号の実際のリストは、Solaris、HP-UX、およびLinuxによって異なります。
デフォルトのアクション
すべてのシグナルには、デフォルトアクションが関連付けられています。 シグナルのデフォルトのアクションは、スクリプトまたはプログラムがシグナルを受信したときに実行するアクションです。
可能なデフォルトのアクションのいくつかは次のとおりです-
- プロセスを終了します。
- 信号を無視します。
- ダンプコア。 これにより、 core というファイルが作成され、シグナルを受信したプロセスのメモリイメージが含まれます。
- プロセスを停止します。
- 停止したプロセスを続行します。
信号を送る
信号をプログラムまたはスクリプトに配信する方法はいくつかあります。 最も一般的な方法の1つは、ユーザーがスクリプトの実行中に CONTROL-C または* INTERRUPTキー*を入力することです。
信号を配信する他の一般的な方法は、* killコマンド*を使用することです。その構文は次のとおりです-
ここで、 signal は配信するシグナルの番号または名前であり、 pid はシグナルの送信先のプロセスIDです。 例-
上記のコマンドは、*プロセスID 1001 *で実行されているプログラムにHUPまたはハングアップ信号を送信します。 同じプロセスにキル信号を送信するには、次のコマンドを使用します-
これにより、*プロセスID 1001 *で実行されているプロセスが強制終了されます。
信号の捕捉
シェルプログラムの実行中に端末で_Ctrl + C_またはBreakキーを押すと、通常、そのプログラムはすぐに終了し、コマンドプロンプトに戻ります。 これは常に望ましいとは限りません。 たとえば、クリーンアップされない一時ファイルの束を残すことがあります。
これらの信号をトラップすることは非常に簡単であり、トラップコマンドには次の構文があります-
ここで、_command_は任意の有効なUnixコマンド、またはユーザー定義関数である場合があり、signalはトラップする任意の数のシグナルのリストです。
シェルスクリプトのトラップには2つの一般的な用途があります-
- 一時ファイルをクリーンアップする
- 信号を無視
一時ファイルのクリーンアップ
trapコマンドの例として、以下は、いくつかのファイルを削除し、誰かが端末からプログラムを中止しようとした場合に終了する方法を示しています-
このトラップが実行されるシェルプログラムのポイントから、シグナル番号2がプログラムによって受信されると、2つのファイル _work1 _* および *_dataout _ が自動的に削除されます。
したがって、このトラップの実行後にユーザーがプログラムの実行を中断した場合、これらの2つのファイルがクリーンアップされることが保証されます。 rm に続く exit コマンドが必要です。これがないと、プログラムは信号を受信したときに中断した時点で実行が継続されるためです。
この場合、シグナル番号1をシグナルのリストに追加することにより、前述のトラップを変更して、指定された2つのファイルも削除できます-
これで、回線がハングアップした場合、または_Ctrl + C_キーが押された場合、これらのファイルは削除されます。
トラップするように指定されたコマンドに複数のコマンドが含まれる場合は、引用符で囲む必要があります。 また、トラップコマンドが実行されたとき、およびリストされた信号の1つが受信されたときに、シェルがコマンドラインをスキャンすることに注意してください。
したがって、前の例では、トラップコマンドの実行時に WORKDIR および $$ の値が置換されます。 シグナル1または2が受信されたときにこの置換が発生するようにしたい場合は、コマンドを単一引用符で囲むことができます-
信号を無視する
トラップ用にリストされたコマンドがヌルの場合、指定されたシグナルは受信時に無視されます。 たとえば、コマンド-
これは、割り込み信号を無視することを指定します。 中断したくない操作を実行するときに、特定の信号を無視したい場合があります。 次のように無視される複数の信号を指定できます-
最初の引数は無視される信号のために指定する必要があり、それ自体が別の意味を持つ次の記述と同等ではないことに注意してください-
シグナルを無視すると、すべてのサブシェルもそのシグナルを無視します。 ただし、信号の受信時に実行するアクションを指定した場合、すべてのサブシェルはその信号の受信時にデフォルトのアクションを実行します。
トラップのリセット
シグナルの受信時に実行されるデフォルトのアクションを変更した後、最初の引数を単に省略した場合、トラップを使用して再度アクションを変更できます。そう-
これにより、シグナル1または2の受信時に実行されるアクションがデフォルトにリセットされます。