Unix / Linux-クイックガイド
Unixとは何ですか?
Unixオペレーティングシステムは、コンピュータとユーザーの間のリンクとして機能するプログラムのセットです。
システムリソースを割り当て、コンピュータの内部のすべての詳細を調整するコンピュータプログラムは、 operating system または kernel。
ユーザーは、と呼ばれるプログラムを介してカーネルと通信します。 shell。シェルはコマンドラインインタープリターです。ユーザーが入力したコマンドを翻訳し、カーネルが理解できる言語に変換します。
Unixはもともと、1969年にAT&Tの従業員であるKen Thompson、Dennis Ritchie、Douglas McIlroy、およびBellLabsのJoeOssannaのグループによって開発されました。
市場にはさまざまなUnixの亜種があります。Solaris Unix、AIX、HP Unix、およびBSDはいくつかの例です。Linuxは、無料で入手できるUnixの一種でもあります。
複数の人が同時にUnixコンピュータを使用できます。したがって、Unixはマルチユーザーシステムと呼ばれます。
ユーザーは、複数のプログラムを同時に実行することもできます。したがって、Unixはマルチタスク環境です。
Unixアーキテクチャ
これがUnixシステムの基本的なブロック図です-
Unixのすべてのバージョンを統合する主な概念は、次の4つの基本です。
Kernel−カーネルはオペレーティングシステムの心臓部です。ハードウェアと、メモリ管理、タスクスケジューリング、ファイル管理などのほとんどのタスクと相互作用します。
Shell−シェルは、リクエストを処理するユーティリティです。ターミナルでコマンドを入力すると、シェルがコマンドを解釈し、必要なプログラムを呼び出します。シェルは、すべてのコマンドに標準の構文を使用します。C Shell、Bourne Shell、およびKorn Shellは、ほとんどのUnixバリアントで使用できる最も有名なシェルです。
Commands and Utilities −日常のアクティビティで使用できるさまざまなコマンドとユーティリティがあります。 cp、 mv、 cat そして grep、などはコマンドとユーティリティのいくつかの例です。250を超える標準コマンドに加えて、サードパーティのソフトウェアを介して提供されるその他の多数のコマンドがあります。すべてのコマンドには、さまざまなオプションが付属しています。
Files and Directories−Unixのすべてのデータはファイルに編成されています。その後、すべてのファイルがディレクトリに編成されます。これらのディレクトリはさらに、と呼ばれるツリーのような構造に編成されます。filesystem。
システムの起動
Unixオペレーティングシステムがインストールされているコンピューターを使用している場合は、システムの電源を入れて稼働させる必要があります。
システムの電源を入れるとすぐに起動が始まり、最後にシステムへのログインを求めるプロンプトが表示されます。これは、システムにログインして日常のアクティビティに使用するためのアクティビティです。
Unixにログインする
Unixシステムに最初に接続すると、通常、次のようなプロンプトが表示されます。
login:
ログインします
ユーザーID(ユーザーID)とパスワードを用意します。これらをまだ持っていない場合は、システム管理者に連絡してください。
ログインプロンプトでユーザーIDを入力し、を押します ENTER。あなたのユーザーIDはcase-sensitive、システム管理者の指示どおりに入力してください。
パスワードプロンプトでパスワードを入力し、を押します ENTER。パスワードでも大文字と小文字が区別されます。
正しいユーザーIDとパスワードを入力すると、システムに入ることができます。画面に表示される情報とメッセージを次のように読みます。
login : amrood
amrood's password:
Last login: Sun Jun 14 09:32:32 2009 from 62.61.164.73
$
コマンドプロンプトが表示されます(「 $プロンプト)すべてのコマンドを入力します。たとえば、カレンダーを確認するには、次のように入力する必要がありますcal 次のようにコマンド-
$ cal June 2009 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 $
パスワードを変更する
すべてのUnixシステムでは、ファイルとデータを自分のものに保ち、システム自体をハッカーやクラッカーから保護するためにパスワードが必要です。パスワードを変更する手順は次のとおりです-
Step 1 −開始するには、以下に示すようにコマンドプロンプトでパスワードを入力します。
Step 2 −現在使用している古いパスワードを入力します。
Step 3−新しいパスワードを入力します。パスワードは、だれも推測できないように、常に十分に複雑にしてください。しかし、覚えておいてください。
Step 4 −パスワードをもう一度入力して確認する必要があります。
$ passwd Changing password for amrood (current) Unix password:****** New UNIX password:******* Retype new UNIX password:******* passwd: all authentication tokens updated successfully $
Note−システムで現在のパスワードと新しいパスワードを入力する必要がある場所を示すために、ここにアスタリスク(*)を追加しました。入力時に文字は表示されません。
ディレクトリとファイルの一覧表示
Unixのすべてのデータはファイルに編成されています。すべてのファイルはディレクトリに編成されています。これらのディレクトリは、ファイルシステムと呼ばれるツリーのような構造に編成されています。
あなたは使用することができます lsディレクトリで使用可能なすべてのファイルまたはディレクトリを一覧表示するコマンド。以下は使用例ですls とのコマンド -l オプション。
$ ls -l total 19621 drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml -rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia -rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar drwxr-xr-x 8 root root 4096 Nov 25 2007 usr -rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php -rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar -rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid -rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf $
ここで始まるエントリ d.....ディレクトリを表します。たとえば、uml、univ、およびurlspediaはディレクトリであり、残りのエントリはファイルです。
あなたは誰?
あなたがシステムにログインしている間、あなたは知っていることをいとわないかもしれません: Who am I?
「あなたが誰であるか」を知る最も簡単な方法は、 whoami コマンド-
$ whoami amrood $
システムで試してみてください。このコマンドは、現在のログインに関連付けられているアカウント名を一覧表示します。あなたが試すことができますwho am i あなた自身についての情報を得るためにもコマンド。
誰がログインしていますか?
誰が同時にコンピュータにログインしているかを知りたい場合があります。
他のユーザーについて知りたい量に基づいて、この情報を取得するために使用できる3つのコマンドがあります。 users、 who、および w。
$ users amrood bablu qadir $ who
amrood ttyp0 Oct 8 14:10 (limbo)
bablu ttyp2 Oct 4 09:08 (calliope)
qadir ttyp4 Oct 8 12:09 (dent)
$
試してみてください wシステムでコマンドを実行して、出力を確認します。これにより、システムにログインしているユーザーに関連する情報が一覧表示されます。
ログアウト
セッションが終了したら、システムからログアウトする必要があります。これは、他の誰もあなたのファイルにアクセスしないようにするためです。
To log out
入力するだけです logout コマンドプロンプトでコマンドを実行すると、システムはすべてをクリーンアップして接続を切断します。
システムのシャットダウン
コマンドラインを介してUnixシステムを適切にシャットダウンする最も一貫した方法は、次のコマンドのいずれかを使用することです。
シニア番号 | コマンドと説明 |
---|---|
1 | halt システムをすぐに停止します |
2 | init 0 事前定義されたスクリプトを使用してシステムの電源をオフにし、シャットダウンする前にシステムを同期およびクリーンアップします |
3 | init 6 システムを完全にシャットダウンしてから再起動することにより、システムを再起動します |
4 | poweroff 電源を切ってシステムをシャットダウンします |
5 | reboot システムを再起動します |
6 | shutdown システムをシャットダウンします |
通常、システムをシャットダウンするには、スーパーユーザーまたはroot(Unixシステムで最も特権のあるアカウント)である必要があります。ただし、一部のスタンドアロンまたは個人所有のUnixボックスでは、管理ユーザーおよび場合によっては通常のユーザーがそうすることができます。
この章では、Unixでのファイル管理について詳しく説明します。Unixのすべてのデータはファイルに編成されています。すべてのファイルはディレクトリに編成されています。これらのディレクトリは、ファイルシステムと呼ばれるツリーのような構造に編成されています。
Unixを何らかの方法で使用する場合、ほとんどの時間をファイルの操作に費やします。このチュートリアルは、ファイルの作成と削除、ファイルのコピーと名前の変更、ファイルへのリンクの作成などの方法を理解するのに役立ちます。
Unixには、3つの基本的なタイプのファイルがあります-
Ordinary Files−通常のファイルは、データ、テキスト、またはプログラム命令を含むシステム上のファイルです。このチュートリアルでは、通常のファイルの操作について説明します。
Directories−ディレクトリは特別なファイルと通常のファイルの両方を保存します。WindowsまたはMacOSに精通しているユーザーにとって、Unixディレクトリはフォルダに相当します。
Special Files−一部の特別なファイルは、ハードドライブ、CD-ROMドライブ、モデム、イーサネットアダプタなどのハードウェアへのアクセスを提供します。その他の特殊ファイルはエイリアスやショートカットに似ており、異なる名前を使用して単一のファイルにアクセスできます。
ファイルの一覧表示
現在のディレクトリに保存されているファイルとディレクトリを一覧表示するには、次のコマンドを使用します-
$ls
上記のコマンドの出力例は次のとおりです-
$ls
bin hosts lib res.03
ch07 hw1 pub test_results
ch07.bak hw2 res.01 users
docs hw3 res.02 work
コマンド ls サポートします -l リストされたファイルに関する詳細情報を取得するのに役立つオプション-
$ls -l
total 1962188
drwxrwxr-x 2 amrood amrood 4096 Dec 25 09:59 uml
-rw-rw-r-- 1 amrood amrood 5341 Dec 25 08:38 uml.jpg
drwxr-xr-x 2 amrood amrood 4096 Feb 15 2006 univ
drwxr-xr-x 2 root root 4096 Dec 9 2007 urlspedia
-rw-r--r-- 1 root root 276480 Dec 9 2007 urlspedia.tar
drwxr-xr-x 8 root root 4096 Nov 25 2007 usr
drwxr-xr-x 2 200 300 4096 Nov 25 2007 webthumb-1.01
-rwxr-xr-x 1 root root 3192 Nov 25 2007 webthumb.php
-rw-rw-r-- 1 amrood amrood 20480 Nov 25 2007 webthumb.tar
-rw-rw-r-- 1 amrood amrood 5654 Aug 9 2007 yourfile.mid
-rw-rw-r-- 1 amrood amrood 166255 Aug 9 2007 yourfile.swf
drwxr-xr-x 11 amrood amrood 4096 May 29 2007 zlib-1.2.3
$
リストされているすべての列に関する情報は次のとおりです-
First Column−ファイルタイプとファイルに与えられた権限を表します。以下は、すべてのタイプのファイルの説明です。
Second Column −ファイルまたはディレクトリが使用するメモリブロックの数を表します。
Third Column−ファイルの所有者を表します。これは、このファイルを作成したUnixユーザーです。
Fourth Column−所有者のグループを表します。すべてのUnixユーザーには、関連付けられたグループがあります。
Fifth Column −ファイルサイズをバイト単位で表します。
Sixth Column −このファイルが最後に作成または変更された日付と時刻を表します。
Seventh Column −ファイルまたはディレクトリ名を表します。
の中に ls -l リストの例では、すべてのファイル行は d、 -、または l。これらの文字は、リストされているファイルのタイプを示します。
シニア番号 | プレフィックスと説明 |
---|---|
1 | - ASCIIテキストファイル、バイナリ実行可能ファイル、ハードリンクなどの通常のファイル。 |
2 | b 特殊ファイルをブロックします。物理ハードドライブなどの入出力デバイスファイルをブロックします。 |
3 | c キャラクタースペシャルファイル。物理ハードドライブなどの生の入出力デバイスファイル。 |
4 | d 他のファイルとディレクトリのリストを含むディレクトリファイル。 |
5 | l シンボリックリンクファイル。通常のファイルへのリンク。 |
6 | p 名前付きパイプ。プロセス間通信のメカニズム。 |
7 | s プロセス間通信に使用されるソケット。 |
メタ文字
Unixではメタ文字には特別な意味があります。例えば、* そして ?メタ文字です。を使用しております* 0文字以上に一致する場合は、疑問符(?)単一の文字と一致します。
例-
$ls ch*.doc
名前がで始まるすべてのファイルを表示します ch そしてで終わる .doc −
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc c
ここに、 *任意の文字と一致するメタ文字として機能します。で終わるすべてのファイルを表示したい場合.doc、次に次のコマンドを使用できます-
$ls *.doc
隠しファイル
非表示のファイルは1つで、最初の文字はドットまたはピリオド文字(。)です。Unixプログラム(シェルを含む)は、これらのファイルのほとんどを使用して構成情報を格納します。
隠しファイルのいくつかの一般的な例には、ファイルが含まれます-
.profile − Bourneシェル(sh)初期化スクリプト
.kshrc − Kornシェル(ksh)初期化スクリプト
.cshrc − Cシェル(csh)初期化スクリプト
.rhosts −リモートシェル構成ファイル
非表示のファイルを一覧表示するには、 -a オプション ls −
$ ls -a
. .profile docs lib test_results
.. .rhosts hosts pub users
.emacs bin hw1 res.01 work
.exrc ch07 hw2 res.02
.kshrc ch07.bak hw3 res.03
$
Single dot (.) −これは現在のディレクトリを表します。
Double dot (..) −これは親ディレクトリを表します。
ファイルの作成
あなたは使用することができます vi任意のUnixシステムで通常のファイルを作成するためのエディタ。次のコマンドを実行するだけです-
$ vi filename
上記のコマンドは、指定されたファイル名のファイルを開きます。ここで、キーを押しますi編集モードになります。編集モードになったら、次のプログラムのようにファイルにコンテンツを書き始めることができます-
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
プログラムが終了したら、次の手順に従います-
キーを押す esc 編集モードを終了します。
2つのキーを押す Shift + ZZ 一緒にファイルから完全に出てきます。
これで、で作成されたファイルが作成されます filename 現在のディレクトリにあります。
$ vi filename $
ファイルの編集
を使用して既存のファイルを編集できます vi編集者。既存のファイルを開く方法について簡単に説明します-
$ vi filename
ファイルを開いたら、キーを押すと編集モードになります i次に、ファイルを編集して続行できます。ファイル内のあちこちに移動したい場合は、最初にキーを押して編集モードを終了する必要がありますEsc。この後、次のキーを使用してファイル内を移動できます-
l 右側に移動するためのキー。
h キーを押して左側に移動します。
k ファイル内を逆さまに移動するためのキー。
j ファイル内で下に移動するためのキー。
したがって、上記のキーを使用して、編集したい場所にカーソルを置くことができます。配置されたら、次を使用できますiキーを押して編集モードにします。ファイルの編集が完了したら、を押します。Esc そして最後に2つのキー Shift + ZZ 一緒にファイルから完全に出てきます。
ファイルの内容を表示する
あなたは使用することができます catファイルの内容を表示するコマンド。以下は、上記で作成したファイルの内容を確認するための簡単な例です。
$ cat filename
This is unix file....I created it for the first time.....
I'm going to save this content in this file.
$
を使用して行番号を表示できます -b オプションと一緒に cat 次のようにコマンド-
$ cat -b filename
1 This is unix file....I created it for the first time.....
2 I'm going to save this content in this file.
$
ファイル内の単語を数える
あなたは使用することができます wcファイルに含まれる行、単語、および文字の総数を取得するコマンド。以下は、上記で作成されたファイルに関する情報を確認するための簡単な例です。
$ wc filename
2 19 103 filename
$
これが4つの列すべての詳細です-
First Column −ファイル内の合計行数を表します。
Second Column −ファイル内の単語の総数を表します。
Third Column−ファイル内の合計バイト数を表します。これはファイルの実際のサイズです。
Fourth Column −ファイル名を表します。
複数のファイルを指定して、一度にそれらのファイルに関する情報を取得できます。以下は単純な構文です-
$ wc filename1 filename2 filename3
ファイルのコピー
ファイルのコピーを作成するには、 cpコマンド。コマンドの基本的な構文は次のとおりです。
$ cp source_file destination_file
以下は、既存のファイルのコピーを作成する例です filename。
$ cp filename copyfile
$
これで、もう1つのファイルが見つかります copyfile現在のディレクトリにあります。このファイルは元のファイルとまったく同じになりますfilename。
ファイルの名前変更
ファイルの名前を変更するには、 mvコマンド。以下は基本的な構文です-
$ mv old_file new_file
次のプログラムは、既存のファイルの名前を変更します filename に newfile。
$ mv filename newfile $
ザ・ mvコマンドは、既存のファイルを完全に新しいファイルに移動します。この場合、あなただけが見つかりますnewfile 現在のディレクトリにあります。
ファイルの削除
既存のファイルを削除するには、 rmコマンド。以下は基本的な構文です-
$ rm filename
Caution−ファイルには有用な情報が含まれている場合があります。これを使用するときは常に注意することをお勧めしますDeleteコマンド。を使用することをお勧めします-i オプションと一緒に rm コマンド。
以下は、既存のファイルを完全に削除する方法を示す例です filename。
$ rm filename
$
以下のコマンドを使用して、一度に複数のファイルを削除できます-
$ rm filename1 filename2 filename3
$
標準のUnixストリーム
通常の状況では、すべてのUnixプログラムは、起動時に3つのストリーム(ファイル)が開かれます。
stdin−これは標準入力と呼ばれ、関連するファイル記述子は0です。これはSTDINとしても表されます。Unixプログラムは、STDINからデフォルトの入力を読み取ります。
stdout−これは標準出力と呼ばれ、関連するファイル記述子は1です。これはSTDOUTとしても表されます。Unixプログラムは、STDOUTにデフォルトの出力を書き込みます
stderr−これは標準エラーと呼ばれ、関連するファイル記述子は2です。これはSTDERRとしても表されます。Unixプログラムは、すべてのエラーメッセージをSTDERRに書き込みます。
この章では、Unixでのディレクトリ管理について詳しく説明します。
ディレクトリは、ファイル名と関連情報を格納するための単独のジョブであるファイルです。通常、特殊、ディレクトリを問わず、すべてのファイルはディレクトリに含まれています。
Unixは、ファイルとディレクトリを整理するために階層構造を使用します。この構造は、ディレクトリツリーと呼ばれることがよくあります。ツリーには、単一のルートノードであるスラッシュ文字(/)、および他のすべてのディレクトリはその下に含まれています。
ホームディレクトリ
最初にログインしたときに自分がいるディレクトリは、ホームディレクトリと呼ばれます。
ファイルを整理するために作成するホームディレクトリとサブディレクトリで、多くの作業を行います。
次のコマンドを使用して、いつでもホームディレクトリに移動できます-
$cd ~
$
ここに ~ホームディレクトリを示します。他のユーザーのホームディレクトリに移動する必要がある場合は、次のコマンドを使用します-
$cd ~username
$
最後のディレクトリに移動するには、次のコマンドを使用できます-
$cd -
$
絶対/相対パス名
ディレクトリは、ルート(/)が上になる階層に配置されます。階層内のファイルの位置は、そのパス名で記述されます。
パス名の要素は/で区切られます。パス名は、ルートに関連して記述されている場合は絶対パス名であるため、絶対パス名は常に/で始まります。
以下は、絶対ファイル名の例です。
/etc/passwd
/users/sjones/chem/notes
/dev/rdsk/Os3
パス名は、現在の作業ディレクトリからの相対パスにすることもできます。相対パス名が/で始まることはありません。ユーザーamroodのホームディレクトリに関連して、一部のパス名は次のようになります-
chem/notes
personal/res
ファイルシステム階層内のどこにいるかをいつでも確認するには、コマンドを入力します pwd 現在の作業ディレクトリを印刷するには-
$pwd
/user0/home/amrood
$
ディレクトリの一覧表示
ディレクトリ内のファイルを一覧表示するには、次の構文を使用できます-
$ls dirname
以下は、に含まれるすべてのファイルを一覧表示する例です。 /usr/local ディレクトリ-
$ls /usr/local
X11 bin gimp jikes sbin
ace doc include lib share
atalk etc info man ami
ディレクトリの作成
これで、ディレクトリの作成方法を理解できます。ディレクトリは次のコマンドで作成されます-
$mkdir dirname
ここで、directoryは、作成するディレクトリの絶対パス名または相対パス名です。たとえば、コマンド-
$mkdir mydir $
ディレクトリを作成します mydir現在のディレクトリにあります。ここに別の例があります-
$mkdir /tmp/test-dir $
このコマンドはディレクトリを作成します test-dir の中に /tmpディレクトリ。ザ・mkdir コマンドは、要求されたディレクトリを正常に作成した場合、出力を生成しません。
コマンドラインで複数のディレクトリを指定する場合は、 mkdir各ディレクトリを作成します。たとえば、−
$mkdir docs pub $
現在のディレクトリの下にディレクトリdocsとpubを作成します。
親ディレクトリの作成
これで、親ディレクトリを作成する方法を理解できます。ディレクトリを作成するときに、その親ディレクトリが存在しない場合があります。この場合、mkdir 次のようなエラーメッセージを発行します-
$mkdir /tmp/amrood/test mkdir: Failed to make directory "/tmp/amrood/test"; No such file or directory $
そのような場合、あなたは指定することができます -p オプション mkdirコマンド。必要なすべてのディレクトリが作成されます。例-
$mkdir -p /tmp/amrood/test $
上記のコマンドは、必要なすべての親ディレクトリを作成します。
ディレクトリの削除
ディレクトリは、を使用して削除できます rmdir 次のようにコマンド-
$rmdir dirname $
Note −ディレクトリを削除するには、ディレクトリが空であることを確認します。これは、このディレクトリ内にファイルまたはサブディレクトリがないことを意味します。
次のように、一度に複数のディレクトリを削除できます-
$rmdir dirname1 dirname2 dirname3 $
上記のコマンドは、ディレクトリdirname1、dirname2、およびdirname3が空の場合、それらを削除します。ザ・rmdir 成功した場合、コマンドは出力を生成しません。
ディレクトリの変更
あなたは使用することができます cdホームディレクトリに変更する以上のことを行うコマンド。有効な絶対パスまたは相対パスを指定することにより、任意のディレクトリに変更するために使用できます。構文は次のとおりです-
$cd dirname $
ここに、 dirname変更するディレクトリの名前です。たとえば、コマンド-
$cd /usr/local/bin $
ディレクトリへの変更 /usr/local/bin。このディレクトリから、次のことができますcd ディレクトリへ /usr/home/amrood 次の相対パスを使用する-
$cd ../../home/amrood $
ディレクトリの名前変更
ザ・ mv (move)コマンドを使用して、ディレクトリの名前を変更することもできます。構文は次のとおりです-
$mv olddir newdir $
ディレクトリの名前を変更できます mydir に yourdir 次のように-
$mv mydir yourdir $
ディレクトリ。(ドット)と..(ドットドット)
ザ・ filename .(ドット)は現在の作業ディレクトリを表します。そしてそのfilename .. (ドットドット)は、現在の作業ディレクトリの1レベル上のディレクトリを表し、多くの場合、親ディレクトリと呼ばれます。
コマンドを入力して現在の作業ディレクトリ/ファイルのリストを表示し、 -a option すべてのファイルと -l option 長いリストを提供するために、次の結果を受け取ります。
$ls -la drwxrwxr-x 4 teacher class 2048 Jul 16 17.56 . drwxr-xr-x 60 root 1536 Jul 13 14:18 .. ---------- 1 teacher class 4210 May 1 08:27 .profile -rwxr-xr-x 1 teacher class 1948 May 12 13:42 memo $
この章では、Unixのファイルパーミッションとアクセスモードについて詳しく説明します。ファイルの所有権は、ファイルを保存するための安全な方法を提供するUnixの重要なコンポーネントです。Unixのすべてのファイルには、次の属性があります-
Owner permissions −所有者の権限によって、ファイルの所有者がファイルに対して実行できるアクションが決まります。
Group permissions −グループの権限は、ファイルが属するグループのメンバーであるユーザーがファイルに対して実行できるアクションを決定します。
Other (world) permissions −他のユーザーのアクセス許可は、他のすべてのユーザーがファイルに対して実行できるアクションを示します。
許可インジケーター
使用中 ls -l コマンドを実行すると、ファイルのアクセス許可に関連するさまざまな情報が次のように表示されます。
$ls -l /home/amrood
-rwxr-xr-- 1 amrood users 1024 Nov 2 00:10 myfile
drwxr-xr--- 1 amrood users 1024 Nov 2 00:10 mydir
ここで、最初の列はさまざまなアクセスモード、つまりファイルまたはディレクトリに関連付けられたアクセス許可を表します。
権限は3つのグループに分けられ、グループ内の各位置は、読み取り(r)、書き込み(w)、実行(x)の順序で特定の権限を示します。
最初の3文字(2〜4)は、ファイルの所有者のアクセス許可を表します。例えば、-rwxr-xr-- 所有者が読み取り(r)、書き込み(w)、および実行(x)の権限を持っていることを表します。
3文字の2番目のグループ(5〜7)は、ファイルが属するグループの権限で構成されます。例えば、-rwxr-xr-- グループには読み取り(r)および実行(x)権限がありますが、書き込み権限はありません。
3文字の最後のグループ(8〜10)は、他のすべてのユーザーのアクセス許可を表します。例えば、-rwxr-xr-- あることを表します read (r) 許可のみ。
ファイルアクセスモード
ファイルのパーミッションは、Unixシステムのセキュリティにおける最初の防衛線です。Unixパーミッションの基本的な構成要素は次のとおりです。read、 write、および execute 以下に説明されている権限-
読んだ
ファイルの内容を読み取る、つまり表示する機能を付与します。
書く
ファイルのコンテンツを変更または削除する機能を付与します。
実行する
実行権限を持つユーザーは、ファイルをプログラムとして実行できます。
ディレクトリアクセスモード
ディレクトリアクセスモードは、他のファイルと同じ方法で一覧表示および整理されます。言及する必要があるいくつかの違いがあります-
読んだ
ディレクトリへのアクセスは、ユーザーがコンテンツを読むことができることを意味します。ユーザーは見ることができますfilenames ディレクトリ内。
書く
アクセスとは、ユーザーがディレクトリからファイルを追加または削除できることを意味します。
実行する
ディレクトリを実行することは実際には意味がないので、これをトラバース許可と考えてください。
ユーザーは持っている必要があります execute アクセス bin を実行するためのディレクトリ ls または cd コマンド。
権限の変更
ファイルまたはディレクトリのアクセス許可を変更するには、 chmod(モード変更)コマンド。chmodを使用するには、シンボリックモードとアブソリュートモードの2つの方法があります。
シンボリックモードでのchmodの使用
初心者がファイルまたはディレクトリのアクセス許可を変更する最も簡単な方法は、シンボリックモードを使用することです。シンボリックパーミッションを使用すると、次の表の演算子を使用して、必要なパーミッションセットを追加、削除、または指定できます。
シニア番号 | Chmodオペレーターと説明 |
---|---|
1 | + 指定された権限をファイルまたはディレクトリに追加します。 |
2 | - 指定された権限をファイルまたはディレクトリから削除します。 |
3 | = 指定された権限を設定します。 |
これが使用例です testfile。ランニングls -1 テストファイルで、ファイルのパーミッションが次のようになっていることが示されています-
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
次に、各例 chmod 上記の表のコマンドがテストファイルで実行され、その後に ls –l、権限の変更を確認できるように-
$chmod o+wx testfile $ls -l testfile
-rwxrwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod u-x testfile $ls -l testfile
-rw-rwxrwx 1 amrood users 1024 Nov 2 00:10 testfile
$chmod g = rx testfile $ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
これらのコマンドを1行で組み合わせる方法は次のとおりです-
$chmod o+wx,u-x,g = rx testfile $ls -l testfile
-rw-r-xrwx 1 amrood users 1024 Nov 2 00:10 testfile
絶対権限でchmodを使用する
chmodコマンドを使用してアクセス許可を変更する2番目の方法は、番号を使用してファイルのアクセス許可の各セットを指定することです。
次の表に示すように、各権限には値が割り当てられ、権限の各セットの合計がそのセットの番号を提供します。
数 | 8進数の許可表現 | 参照 |
---|---|---|
0 | 全く許可しません | --- |
1 | 実行許可 | - バツ |
2 | 書き込み許可 | -w- |
3 | 実行および書き込み権限:1(実行)+ 2(書き込み)= 3 | -wx |
4 | 読み取り許可 | r-- |
5 | 読み取りおよび実行権限:4(読み取り)+ 1(実行)= 5 | 処方箋 |
6 | 読み取りおよび書き込み許可:4(読み取り)+ 2(書き込み)= 6 | rw- |
7 | すべての権限:4(読み取り)+ 2(書き込み)+ 1(実行)= 7 | rwx |
テストファイルを使用した例を次に示します。ランニングls -1 テストファイルで、ファイルのパーミッションが次のようになっていることが示されています-
$ls -l testfile
-rwxrwxr-- 1 amrood users 1024 Nov 2 00:10 testfile
次に、各例 chmod 上記の表のコマンドがテストファイルで実行され、その後に ls –l、権限の変更を確認できるように-
$ chmod 755 testfile
$ls -l testfile -rwxr-xr-x 1 amrood users 1024 Nov 2 00:10 testfile $chmod 743 testfile
$ls -l testfile -rwxr---wx 1 amrood users 1024 Nov 2 00:10 testfile $chmod 043 testfile
$ls -l testfile
----r---wx 1 amrood users 1024 Nov 2 00:10 testfile
所有者とグループの変更
Unixでアカウントを作成するときに、 owner ID と group ID各ユーザーに。上記のすべての権限も、所有者とグループに基づいて割り当てられます。
所有者とファイルのグループを変更するために2つのコマンドを使用できます-
chown − chown コマンドは "change owner" ファイルの所有者を変更するために使用されます。
chgrp − chgrp コマンドは "change group" ファイルのグループを変更するために使用されます。
所有権の変更
ザ・ chownコマンドはファイルの所有権を変更します。基本的な構文は次のとおりです-
$ chown user filelist
ユーザーの値は、次のいずれかになります。 name of a user システム上または user id (uid) システム上のユーザーの。
次の例は、概念を理解するのに役立ちます-
$ chown amrood testfile $
指定されたファイルの所有者をユーザーに変更します amrood。
NOTE −スーパーユーザーのrootには、任意のファイルの所有権を変更する無制限の機能がありますが、通常のユーザーは、自分が所有するファイルの所有権のみを変更できます。
グループの所有権の変更
ザ・ chgrpコマンドは、ファイルのグループ所有権を変更します。基本的な構文は次のとおりです-
$ chgrp group filelist
groupの値は次のようになります。 name of a group システム上または the group ID (GID) システム上のグループの。
次の例は、概念を理解するのに役立ちます-
$ chgrp special testfile
$
指定されたファイルのグループをに変更します special グループ。
SUIDおよびSGIDファイルのアクセス許可
多くの場合、コマンドを実行するときは、そのタスクを実行するために特別な特権で実行する必要があります。
例として、パスワードを passwd コマンドを実行すると、新しいパスワードがファイルに保存されます /etc/shadow。
通常のユーザーとして、あなたは持っていません read または writeセキュリティ上の理由からこのファイルにアクセスできますが、パスワードを変更するときは、このファイルへの書き込み権限が必要です。これは、passwd プログラムは、ファイルに書き込めるように、追加のアクセス許可を与える必要があります /etc/shadow。
追加のアクセス許可は、と呼ばれるメカニズムを介してプログラムに付与されます。 Set User ID (SUID) そして Set Group ID (SGID) ビット。
SUIDビットが有効になっているプログラムを実行すると、そのプログラムの所有者のアクセス許可が継承されます。SUIDビットが設定されていないプログラムは、プログラムを開始したユーザーのアクセス許可で実行されます。
これはSGIDにも当てはまります。通常、プログラムはグループ権限で実行されますが、代わりに、このプログラム専用のグループがプログラムのグループ所有者に変更されます。
SUIDビットとSGIDビットが文字として表示されます "s"許可があれば。SUID"s" ビットは、所有者の許可ビットに配置されます execute 通常、許可は存在します。
たとえば、コマンド-
$ ls -l /usr/bin/passwd
-r-sr-xr-x 1 root bin 19031 Feb 7 13:47 /usr/bin/passwd*
$
SUIDビットが設定されており、コマンドがルートによって所有されていることを示します。大文字S 小文字の代わりに実行位置に s 実行ビットが設定されていないことを示します。
ディレクトリでスティッキービットが有効になっている場合、ファイルを削除できるのは、次のいずれかのユーザーである場合のみです。
- スティッキーディレクトリの所有者
- 削除されるファイルの所有者
- スーパーユーザー、root
任意のディレクトリのSUIDビットとSGIDビットを設定するには、次のコマンドを試してください。
$ chmod ug+s dirname
$ ls -l drwsr-sr-x 2 root root 4096 Jun 19 06:45 dirname $
この章では、Unix環境について詳しく説明します。重要なUnixの概念はenvironment、環境変数によって定義されます。システムによって設定されるものもあれば、ユーザーによって設定されるものもあれば、シェルまたは別のプログラムをロードするプログラムによって設定されるものもあります。
変数は、値を割り当てる文字列です。割り当てられる値は、数値、テキスト、ファイル名、デバイス、またはその他のタイプのデータです。
たとえば、最初に変数TESTを設定し、次に変数TESTを使用してその値にアクセスします。 echo コマンド-
$TEST="Unix Programming" $echo $TEST
以下の結果が得られます。
Unix Programming
環境変数は、を使用せずに設定されることに注意してください $署名しますが、それらにアクセスするときは、接頭辞として$記号を使用します。これらの変数は、シェルから出るまでその値を保持します。
システムにログインすると、シェルは次のフェーズを経ます。 initialization環境を設定します。これは通常、シェルが次のファイルを読み取ることを含む2段階のプロセスです-
- /etc/profile
- profile
プロセスは次のとおりです-
シェルはファイルが /etc/profile 存在します。
存在する場合、シェルはそれを読み取ります。それ以外の場合、このファイルはスキップされます。エラーメッセージは表示されません。
シェルはファイルが .profileホームディレクトリに存在します。ホームディレクトリは、ログイン後に開始するディレクトリです。
存在する場合、シェルはそれを読み取ります。それ以外の場合、シェルはそれをスキップします。エラーメッセージは表示されません。
これらのファイルの両方が読み取られるとすぐに、シェルはプロンプトを表示します-
$
これは、コマンドを実行するためにコマンドを入力できるプロンプトです。
Note −ここで説明するシェル初期化プロセスはすべてに適用されます Bourne シェルを入力しますが、いくつかの追加ファイルはによって使用されます bash そして ksh。
.profileファイル
ファイル /etc/profile Unixマシンのシステム管理者によって維持され、システム上のすべてのユーザーが必要とするシェル初期化情報が含まれています。
ファイル .profileあなたの管理下にあります。このファイルには、シェルのカスタマイズ情報をいくつでも追加できます。構成する必要のある情報の最小セットには、次のものが含まれます。
- 使用している端末の種類。
- コマンドを配置するディレクトリのリスト。
- 端末のルックアンドフィールに影響を与える変数のリスト。
あなたはあなたをチェックすることができます .profileホームディレクトリで利用できます。viエディターを使用して開き、環境に設定されているすべての変数を確認します。
ターミナルタイプの設定
通常、使用している端末のタイプは、次のいずれかによって自動的に構成されます。 login または gettyプログラム。時々、自動設定プロセスはあなたの端末を間違って推測します。
端末が正しく設定されていない場合、コマンドの出力がおかしくなったり、シェルと正しく対話できなかったりする可能性があります。
これが当てはまらないことを確認するために、ほとんどのユーザーは次の方法で端末を最小公分母に設定します。
$TERM=vt100 $
パスの設定
コマンドプロンプトでコマンドを入力すると、シェルはコマンドを実行する前にそのコマンドを見つける必要があります。
PATH変数は、シェルがコマンドを検索する場所を指定します。通常、Path変数は次のように設定されます-
$PATH=/bin:/usr/bin $
ここでは、コロン文字で区切られた個々のエントリのそれぞれ (:)ディレクトリです。シェルにコマンドの実行を要求し、PATH変数で指定されたディレクトリのいずれにもコマンドが見つからない場合、次のようなメッセージが表示されます。
$hello hello: not found $
次のセクションで説明するPS1やPS2のような変数があります。
PS1およびPS2変数
シェルがコマンドプロンプトとして表示する文字は、変数PS1に格納されます。この変数は、好きなように変更できます。変更するとすぐに、その時点からシェルによって使用されます。
たとえば、コマンド-を発行した場合
$PS1='=>'
=>
=>
=>
プロンプトは=>になります。の値を設定するにはPS1 作業ディレクトリが表示されるようにするには、コマンド-を発行します。
=>PS1="[\u@\h \w]\$"
[root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$ [root@ip-72-167-112-17 /var/www/tutorialspoint/unix]$
このコマンドの結果、プロンプトにユーザーのユーザー名、マシンの名前(ホスト名)、および作業ディレクトリが表示されます。
かなりの数があります escape sequencesPS1の値引数として使用できます。プロンプトが情報であなたを圧倒しないように、あなた自身を最も重要なものに制限するようにしてください。
シニア番号 | エスケープシーケンスと説明 |
---|---|
1 | \t 現在の時刻。HH:MM:SSで表されます |
2 | \d 現在の日付。平日月の日付として表されます |
3 | \n 改行 |
4 | \s 現在のシェル環境 |
5 | \W 作業ディレクトリ |
6 | \w 作業ディレクトリのフルパス |
7 | \u 現在のユーザーのユーザー名 |
8 | \h 現在のマシンのホスト名 |
9 | \# 現在のコマンドのコマンド番号。新しいコマンドが入力されると増加します |
10 | \$ 有効なUIDが0の場合(つまり、rootとしてログインしている場合)、プロンプトを#文字で終了します。それ以外の場合は、$記号を使用します |
ログインするたびに自分で変更を加えることも、PS1に追加して自動的に変更を加えることもできます。 .profile ファイル。
不完全なコマンドを発行すると、シェルは2次プロンプトを表示し、コマンドが完了してヒットするのを待ちます Enter 再び。
デフォルトのセカンダリプロンプトは > (大なり記号)、ただし、を再定義することで変更できます PS2 シェル変数-
以下は、デフォルトのセカンダリプロンプトを使用する例です-
$ echo "this is a > test" this is a test $
以下の例は、カスタマイズされたプロンプトでPS2を再定義します-
$ PS2="secondary prompt->" $ echo "this is a
secondary prompt->test"
this is a
test
$
環境変数
以下は、重要な環境変数の部分的なリストです。これらの変数は、以下のように設定およびアクセスされます-
シニア番号 | 変数と説明 |
---|---|
1 | DISPLAY ディスプレイの識別子が含まれています X11 プログラムはデフォルトで使用する必要があります。 |
2 | HOME 現在のユーザーのホームディレクトリを示します:CDのデフォルト引数 built-in コマンド。 |
3 | IFS を示します Internal Field Separator これは、展開後の単語分割のためにパーサーによって使用されます。 |
4 | LANG LANGはデフォルトのシステムロケールに展開されます。LC_ALLを使用して、これをオーバーライドできます。たとえば、その値がpt_BRの場合、言語は(ブラジル)ポルトガル語に設定され、ロケールはブラジルに設定されます。 |
5 | LD_LIBRARY_PATH ダイナミックリンカを備えたUnixシステムには、他のディレクトリを検索する前に、実行後にプロセスイメージを構築するときにダイナミックリンカが共有オブジェクトを検索する必要があるディレクトリのコロン区切りリストが含まれています。 |
6 | PATH コマンドの検索パスを示します。これは、シェルがコマンドを検索するディレクトリのコロンで区切られたリストです。 |
7 | PWD cdコマンドで設定された現在の作業ディレクトリを示します。 |
8 | RANDOM 参照されるたびに、0〜32,767のランダムな整数を生成します。 |
9 | SHLVL bashのインスタンスが開始されるたびに1ずつ増加します。この変数は、組み込みのexitコマンドが現在のセッションを終了するかどうかを判別するのに役立ちます。 |
10 | TERM 表示タイプを指します。 |
11 | TZ タイムゾーンを指します。GMT、ASTなどの値を取ることができます。 |
12 | UID シェルの起動時に初期化された、現在のユーザーの数値ユーザーIDに展開されます。 |
以下は、いくつかの環境変数を示すサンプル例です。
$ echo $HOME /root ]$ echo $DISPLAY $ echo $TERM xterm $ echo $PATH /usr/local/bin:/bin:/usr/bin:/home/amrood/bin:/usr/local/bin $
この章では、Unixの基本的なユーティリティとしての印刷と電子メールについて詳しく説明します。これまで、UnixOSとその基本的なコマンドの性質を理解しようとしてきました。この章では、日常生活で使用できるいくつかの重要なUnixユーティリティについて学習します。
ファイルの印刷
Unixシステムでファイルを印刷する前に、ファイルを再フォーマットして余白を調整したり、いくつかの単語を強調表示したりすることができます。ほとんどのファイルは再フォーマットせずに印刷することもできますが、生の印刷出力はそれほど魅力的ではない場合があります。
Unixの多くのバージョンには、2つの強力なテキストフォーマッタが含まれています。 nroff そして troff。
prコマンド
ザ・ prコマンドは、端末画面またはプリンターのファイルのマイナーフォーマットを実行します。たとえば、ファイルに名前の長いリストがある場合、画面上で2つ以上の列にフォーマットできます。
以下は、の構文です。 pr コマンド-
pr option(s) filename(s)
ザ・ pr画面上または印刷されたコピー上でのみファイルの形式を変更します。元のファイルは変更されません。次の表にいくつかを示しますpr オプション-
シニア番号 | オプションと説明 |
---|---|
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)文字に設定します |
使用する前に pr、これがfoodという名前のサンプルファイルの内容です。
$cat food Sweet Tooth Bangkok Wok Mandalay Afghani Cuisine Isle of Java Big Apple Deli Sushi and Sashimi Tio Pepe's Peppers ........ $
使ってみよう prヘッダーと2列のレポートを作成するためのコマンドのレストラン-
$pr -2 -h "Restaurants" food Nov 7 9:58 1997 Restaurants Page 1 Sweet Tooth Isle of Java Bangkok Wok Big Apple Deli Mandalay Sushi and Sashimi Afghani Cuisine Tio Pepe's Peppers ........ $
lpおよびlprコマンド
コマンド lp または lpr画面表示ではなく、ファイルを紙に印刷します。を使用してフォーマットする準備ができたらpr コマンドを実行すると、これらのコマンドのいずれかを使用して、コンピューターに接続されているプリンターでファイルを印刷できます。
システム管理者は、おそらくサイトにデフォルトのプリンタを設定しています。名前の付いたファイルを印刷するにはfood デフォルトのプリンタでは、 lp または lpr 次の例のように、コマンド-
$lp food request id is laserp-525 (1 file) $
ザ・ lp コマンドは、印刷ジョブのキャンセルまたはそのステータスの確認に使用できるIDを表示します。
を使用している場合 lp コマンドでは、-nを使用できますNum部数を印刷するオプション。コマンドと一緒にlpr、使用できます-Num 同様に。
共有ネットワークに複数のプリンターが接続されている場合は、-dを使用してプリンターを選択できますprinter オプションとlpコマンドを併用すると、同じ目的で-Pを使用できます。printerlprコマンドと一緒にオプション。ここで、printerはプリンター名です。
lpstatおよびlpqコマンド
ザ・ lpstat コマンドは、プリンターキューの内容(要求ID、所有者、ファイルサイズ、ジョブが印刷用に送信された日時、および要求のステータス)を表示します。
使用する lpstat -o自分以外のすべての出力要求を表示したい場合。リクエストは、印刷される順序で表示されます-
$lpstat -o laserp-573 john 128865 Nov 7 11:27 on laserp laserp-574 grace 82744 Nov 7 11:28 laserp-575 john 23347 Nov 7 11:35 $
ザ・ lpq とは少し異なる情報を提供します lpstat -o −
$lpq laserp is ready and printing Rank Owner Job Files Total Size active john 573 report.ps 128865 bytes 1st grace 574 ch03.ps ch04.ps 82744 bytes 2nd john 575 standard input 23347 bytes $
ここでは、最初の行にプリンタのステータスが表示されます。プリンタが無効になっているか、用紙が不足している場合、この最初の行に異なるメッセージが表示されることがあります。
cancelコマンドとlprmコマンド
ザ・ cancel コマンドは、からの印刷要求を終了します。 lp command。ザ・lprm コマンドはすべてを終了します lpr requests。要求のID(lpまたはlpqで表示)またはプリンターの名前のいずれかを指定できます。
$cancel laserp-575 request "laserp-575" cancelled $
IDに関係なく、現在印刷中のリクエストをキャンセルするには、cancelとプリンター名を入力するだけです-
$cancel laserp request "laserp-573" cancelled $
ザ・ lprmコマンドは、アクティブなジョブが自分のものである場合はキャンセルします。それ以外の場合は、引数としてジョブ番号を指定するか、dash (-) すべての仕事を削除するには-
$lprm 575 dfA575diamond dequeued cfA575diamond dequeued $
ザ・ lprm コマンドは、プリンタキューから削除された実際のファイル名を示します。
メールの送信
Unix mailコマンドを使用して、メールを送受信します。メールを送信するための構文は次のとおりです-
$mail [-s subject] [-c cc-addr] [-b bcc-addr] to-addr
メールコマンド-sに関連する重要なオプションは次のとおりです
シニア番号 | オプションと説明 |
---|---|
1 | -s コマンドラインで件名を指定します。 |
2 | -c カーボンコピーをユーザーのリストに送信します。リストは、名前の連結リストである必要があります。 |
3 | -b ブラインドカーボンコピーをリストに送信します。リストは、名前の連結リストである必要があります。 |
以下は、admin @ yahoo.comにテストメッセージを送信する例です。
$mail -s "Test Message" [email protected]
次に、メッセージを入力してから、 "control-D"行の先頭に。停止するには、ドットを入力するだけです(.) 次のように-
Hi,
This is a test
.
Cc:
を使用して完全なファイルを送信できます redirect < operator 次のように-
$mail -s "Report 05/06/07" [email protected] < demo.txt
Unixシステムで受信メールをチェックするには、次のようにメールを入力するだけです。
$mail
no email
この章では、Unixのパイプとフィルターについて詳しく説明します。2つのコマンドを接続して、1つのプログラムからの出力が次のプログラムの入力になるようにすることができます。このように接続された2つ以上のコマンドがパイプを形成します。
パイプを作るには、縦棒(|)2つのコマンド間のコマンドライン。
プログラムが別のプログラムから入力を受け取ると、その入力に対して何らかの操作を実行し、その結果を標準出力に書き込みます。それはと呼ばれますfilter。
grepコマンド
grepコマンドは、特定のパターンを持つ行を1つまたは複数のファイルで検索します。構文は-
$grep pattern file(s)
名前 "grep" ed(Unixラインエディタ)コマンドから取得 g/re/p これは、「正規表現をグローバルに検索し、それを含むすべての行を出力する」ことを意味します。
正規表現は、プレーンテキスト(単語など)またはパターンマッチングに使用される特殊文字のいずれかです。
grepの最も簡単な使用法は、単一の単語で構成されるパターンを探すことです。特定の文字列を含む入力ファイルの行のみが標準出力に送信されるように、パイプで使用できます。grepに読み取るファイル名を指定しない場合、grepは標準入力を読み取ります。これがすべてのフィルタープログラムの動作方法です-
$ls -l | grep "Aug"
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
と一緒に使用できるさまざまなオプションがあります grep コマンド-
シニア番号 | オプションと説明 |
---|---|
1 | -v パターンに一致しないすべての行を印刷します。 |
2 | -n 一致した行とその行番号を出力します。 |
3 | -l 行が一致するファイルの名前のみを出力します(文字「l」) |
4 | -c 一致する行の数のみを出力します。 |
5 | -i 大文字または小文字のいずれかに一致します。 |
ここで、grepに次の行を検索するように指示する正規表現を使用しましょう。 "carol"、その後にゼロまたは正規表現で「。*」と省略された他の文字が続き、その後に「Aug」が続きます。
ここでは、 -i 大文字と小文字を区別しない検索を行うオプション-
$ls -l | grep -i "carol.*aug"
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
$
並べ替えコマンド
ザ・ sortコマンドは、テキストの行をアルファベットまたは数値で配置します。次の例では、食品ファイルの行を並べ替えます-
$sort food
Afghani Cuisine
Bangkok Wok
Big Apple Deli
Isle of Java
Mandalay
Sushi and Sashimi
Sweet Tooth
Tio Pepe's Peppers
$
ザ・ sortコマンドは、デフォルトでテキストの行をアルファベット順に配置します。ソートを制御する多くのオプションがあります-
シニア番号 | 説明 |
---|---|
1 | -n 数値で並べ替え(例:10は2の後に並べ替えます)、空白とタブを無視します。 |
2 | -r 並べ替えの順序を逆にします。 |
3 | -f 大文字と小文字を一緒に並べ替えます。 |
4 | +x 最初に無視します x ソート時のフィールド。 |
3つ以上のコマンドをパイプにリンクすることができます。前のパイプの例を使用してgrep、8月に変更されたファイルをサイズ順にさらに並べ替えることができます。
次のパイプはコマンドで構成されています ls、 grep、および sort −
$ls -l | grep "Aug" | sort +4n
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-rw- 1 john doc 11008 Aug 6 14:10 ch02
$
このパイプは、8月に変更されたディレクトリ内のすべてのファイルをサイズ順に並べ替え、端末画面に出力します。ソートオプション+ 4nは、4つのフィールドをスキップし(フィールドはブランクで区切られます)、行を番号順にソートします。
pgおよびその他のコマンド
通常、長い出力は画面上で圧縮できますが、テキストをさらに実行したり、 pgフィルタとしてのコマンド。画面がテキストでいっぱいになると、表示が停止します。
あなたが長いディレクトリリストを持っていると仮定しましょう。ソートされたリストを読みやすくするために、出力をパイプでつなぎますmore 次のように-
$ls -l | grep "Aug" | sort +4n | more
-rw-rw-r-- 1 carol doc 1605 Aug 23 07:35 macros
-rw-rw-r-- 1 john doc 2488 Aug 15 10:51 intro
-rw-rw-rw- 1 john doc 8515 Aug 6 15:30 ch07
-rw-rw-r-- 1 john doc 14827 Aug 9 12:40 ch03
.
.
.
-rw-rw-rw- 1 john doc 16867 Aug 6 15:56 ch05
--More--(74%)
画面がファイルサイズの順序で並べ替えられた行で構成されるテキストでいっぱいになると、画面がいっぱいになります。画面の下部には、more プロンプト。ここでコマンドを入力して、ソートされたテキスト内を移動できます。
この画面が終了したら、moreプログラムの説明にリストされているコマンドのいずれかを使用できます。
この章では、Unixでのプロセス管理について詳しく説明します。Unixシステムでプログラムを実行すると、システムはそのプログラム用の特別な環境を作成します。この環境には、システムで他のプログラムが実行されていないかのように、システムがプログラムを実行するために必要なすべてのものが含まれています。
Unixでコマンドを発行するたびに、新しいプロセスが作成または開始されます。あなたが試したときlsディレクトリの内容を一覧表示するコマンドで、プロセスを開始しました。プロセスは、簡単に言えば、実行中のプログラムのインスタンスです。
オペレーティングシステムは、と呼ばれる5桁のID番号を介してプロセスを追跡します。 pid または process ID。システム内の各プロセスには固有のものがありますpid。
可能なすべての数が使い果たされ、次のpidがロールまたは最初からやり直すため、pidは最終的に繰り返されます。Unixが各プロセスを追跡するために使用するのはpidであるため、どの時点でも、同じpidを持つ2つのプロセスはシステムに存在しません。
プロセスの開始
プロセスを開始する(コマンドを実行する)とき、それを実行する方法は2つあります-
- フォアグラウンドプロセス
- バックグラウンドプロセス
フォアグラウンドプロセス
デフォルトでは、開始するすべてのプロセスはフォアグラウンドで実行されます。キーボードから入力を取得し、その出力を画面に送信します。
あなたはこれがで起こるのを見ることができます lsコマンド。現在のディレクトリ内のすべてのファイルを一覧表示する場合は、次のコマンドを使用できます-
$ls ch*.doc
これにより、名前がで始まるすべてのファイルが表示されます。 ch そしてで終わる .doc −
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
プロセスはフォアグラウンドで実行され、出力は私の画面に送られます。 ls コマンドは(入力を必要としない)入力を必要とし、キーボードからの入力を待ちます。
プログラムがフォアグラウンドで実行されていて時間がかかる場合、プログラムが処理を終了して終了するまでプロンプトは使用できないため、他のコマンドを実行(他のプロセスを開始)することはできません。
バックグラウンドプロセス
バックグラウンドプロセスは、キーボードに接続せずに実行されます。バックグラウンドプロセスでキーボード入力が必要な場合は、待機します。
プロセスをバックグラウンドで実行する利点は、他のコマンドを実行できることです。別の開始するために完了するまで待つ必要はありません!
バックグラウンドプロセスを開始する最も簡単な方法は、アンパサンド(&)コマンドの最後。
$ls ch*.doc &
これにより、名前がで始まるすべてのファイルが表示されます。 ch そしてで終わる .doc −
ch01-1.doc ch010.doc ch02.doc ch03-2.doc
ch04-1.doc ch040.doc ch05.doc ch06-2.doc
ch01-2.doc ch02-1.doc
ここで、 ls コマンドは入力を必要としますが(入力は必要ありません)、フォアグラウンドに移動してキーボードからデータを提供するまで停止状態になります。
その最初の行には、バックグラウンドプロセスに関する情報(ジョブ番号とプロセスID)が含まれています。バックグラウンドとフォアグラウンドの間でジョブ番号を操作するには、ジョブ番号を知っている必要があります。
Enterキーを押すと、次のように表示されます。
[1] + Done ls ch*.doc &
$
最初の行は、 lsコマンドのバックグラウンドプロセスが正常に終了します。2つ目は、別のコマンドのプロンプトです。
実行中のプロセスの一覧表示
を実行することで、独自のプロセスを簡単に確認できます。 ps (プロセスステータス)コマンドは次のとおりです-
$ps
PID TTY TIME CMD
18358 ttyp3 00:00:00 sh
18361 ttyp3 00:01:31 abiword
18789 ttyp3 00:00:00 ps
psで最も一般的に使用されるフラグの1つは、 -f (完全な場合はf)オプション。次の例に示すように、より多くの情報を提供します。
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
によって表示されるすべてのフィールドの説明は次のとおりです ps -f コマンド-
シニア番号 | 列と説明 |
---|---|
1 | UID このプロセスが属するユーザーID(プロセスを実行している人) |
2 | PID プロセスID |
3 | PPID 親プロセスID(それを開始したプロセスのID) |
4 | C プロセスのCPU使用率 |
5 | STIME プロセス開始時間 |
6 | TTY プロセスに関連付けられている端末タイプ |
7 | TIME プロセスにかかるCPU時間 |
8 | CMD このプロセスを開始したコマンド |
と一緒に使用できる他のオプションがあります ps コマンド-
シニア番号 | オプションと説明 |
---|---|
1 | -a すべてのユーザーに関する情報を表示します |
2 | -x 端末のないプロセスに関する情報を表示します |
3 | -u -fオプションなどの追加情報を表示します |
4 | -e 拡張情報を表示します |
プロセスの停止
プロセスの終了は、いくつかの異なる方法で実行できます。多くの場合、コンソールベースのコマンドから、CTRL + Cキーストローク(デフォルトの割り込み文字)を送信すると、コマンドが終了します。これは、プロセスがフォアグラウンドモードで実行されている場合に機能します。
プロセスがバックグラウンドで実行されている場合は、を使用してそのジョブIDを取得する必要があります。 psコマンド。その後、あなたは使用することができますkill 次のようにプロセスを強制終了するコマンド-
$ps -f
UID PID PPID C STIME TTY TIME CMD
amrood 6738 3662 0 10:23:03 pts/6 0:00 first_one
amrood 6739 3662 0 10:22:54 pts/6 0:00 second_one
amrood 3662 3657 0 08:10:53 pts/6 0:00 -ksh
amrood 6892 3662 4 10:51:50 pts/6 0:00 ps -f
$kill 6738
Terminated
ここでは、 kill コマンドは終了します first_one処理する。プロセスが通常のkillコマンドを無視する場合は、次を使用できます。kill -9 次のようにプロセスIDが続きます-
$kill -9 6738
Terminated
親と子のプロセス
各UNIXプロセスには、プロセスID(pid)と親プロセスID(ppid)の2つのID番号が割り当てられています。システム内の各ユーザープロセスには、親プロセスがあります。
実行するコマンドのほとんどは、親としてシェルを持っています。チェックしてくださいps -f このコマンドがプロセスIDと親プロセスIDの両方をリストした例。
ゾンビと孤立したプロセス
通常、子プロセスが強制終了されると、親プロセスは SIGCHLD信号。その後、親は他のタスクを実行するか、必要に応じて新しい子を再起動できます。ただし、子が強制終了される前に親プロセスが強制終了される場合があります。この場合、「すべてのプロセスの親」、initプロセスは、新しいPPID(親プロセスID)になります。場合によっては、これらのプロセスは孤立プロセスと呼ばれます。
プロセスが強制終了されると、 ps リストにはまだプロセスが表示される場合があります Z状態。これはゾンビですか?プロセスは停止しており、使用されていません。これらのプロセスは、孤立したプロセスとは異なります。彼らは実行を完了しましたが、それでもプロセステーブルにエントリを見つけます。
デーモンプロセス
デーモンはシステム関連のバックグラウンドプロセスであり、多くの場合、他のプロセスからのルートおよびサービス要求のアクセス許可で実行されます。
デーモンには制御端末がありません。開けない/dev/tty。あなたがするなら"ps -ef" と見て tty フィールドでは、すべてのデーモンに ? のために tty。
正確に言うと、デーモンはバックグラウンドで実行されるプロセスであり、通常、デーモンが処理できる何かが発生するのを待ちます。たとえば、印刷コマンドを待機しているプリンタデーモン。
長時間の処理を必要とするプログラムがある場合は、それをデーモンにして、バックグラウンドで実行する価値があります。
トップコマンド
ザ・ top コマンドは、さまざまな基準でソートされたプロセスをすばやく表示するための非常に便利なツールです。
これは、頻繁に更新され、物理メモリと仮想メモリ、CPU使用率、負荷平均、およびビジー状態のプロセスに関する情報を表示するインタラクティブな診断ツールです。
topコマンドを実行し、さまざまなプロセスによるCPU使用率の統計を確認するための簡単な構文を次に示します。
$top
ジョブIDとプロセスID
バックグラウンドおよび中断されたプロセスは通常、 job number (job ID)。この番号はプロセスIDとは異なり、短いために使用されます。
さらに、ジョブは、連続して、または同時に並行して実行される複数のプロセスで構成することができます。ジョブIDの使用は、個々のプロセスを追跡するよりも簡単です。
この章では、Unixのネットワーク通信ユーティリティについて詳しく説明します。分散環境で作業する場合は、リモートユーザーと通信する必要があり、リモートUnixマシンにもアクセスする必要があります。
ネットワーク化された分散環境でユーザーが計算するのに役立つUnixユーティリティがいくつかあります。この章では、それらのいくつかをリストします。
pingユーティリティ
ザ・ pingコマンドは、ネットワーク上で使用可能なホストにエコー要求を送信します。このコマンドを使用して、リモートホストが正常に応答しているかどうかを確認できます。
pingコマンドは、次の場合に役立ちます。
- ハードウェアとソフトウェアの問題の追跡と切り分け。
- ネットワークとさまざまな外部ホストのステータスを確認します。
- ネットワークのテスト、測定、および管理。
構文
以下は、ftpコマンドを使用するための簡単な構文です。
$ping hostname or ip-address
上記のコマンドは、1秒ごとに応答の出力を開始します。コマンドを終了するには、を押してコマンドを終了しますCNTRL + C キー。
例
以下は、ネットワーク上で利用可能なホストの可用性を確認する例です。
$ping google.com PING google.com (74.125.67.100) 56(84) bytes of data. 64 bytes from 74.125.67.100: icmp_seq = 1 ttl = 54 time = 39.4 ms 64 bytes from 74.125.67.100: icmp_seq = 2 ttl = 54 time = 39.9 ms 64 bytes from 74.125.67.100: icmp_seq = 3 ttl = 54 time = 39.3 ms 64 bytes from 74.125.67.100: icmp_seq = 4 ttl = 54 time = 39.1 ms 64 bytes from 74.125.67.100: icmp_seq = 5 ttl = 54 time = 38.8 ms --- google.com ping statistics --- 22 packets transmitted, 22 received, 0% packet loss, time 21017ms rtt min/avg/max/mdev = 38.867/39.334/39.900/0.396 ms $
ホストが存在しない場合は、次の出力が表示されます-
$ping giiiiiigle.com ping: unknown host giiiiigle.com $
ftpユーティリティ
ここに、 ftp を意味する File T転送 Protocol。このユーティリティは、あるコンピュータから別のコンピュータにファイルをアップロードおよびダウンロードするのに役立ちます。
ftpユーティリティには、Unixライクなコマンドの独自のセットがあります。これらのコマンドは、次のようなタスクを実行するのに役立ちます。
リモートホストに接続してログインします。
ディレクトリをナビゲートします。
ディレクトリの内容を一覧表示します。
ファイルを配置して取得します。
としてファイルを転送 ascii、 ebcdic または binary。
構文
以下は、ftpコマンドを使用するための簡単な構文です。
$ftp hostname or ip-address
上記のコマンドは、ログインIDとパスワードの入力を求めます。認証されると、ログインアカウントのホームディレクトリにアクセスでき、さまざまなコマンドを実行できるようになります。
次の表に、いくつかの重要なコマンドを示します。
シニア番号 | コマンドと説明 |
---|---|
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 現在のログインからのログアウトを支援します。 |
すべてのファイルは、現在のディレクトリとの間でダウンロードまたはアップロードされることに注意してください。特定のディレクトリにファイルをアップロードする場合は、最初にそのディレクトリに移動してから、必要なファイルをアップロードする必要があります。
例
以下は、いくつかのコマンドの動作を示す例です-
$ftp amrood.com
Connected to amrood.com.
220 amrood.com FTP server (Ver 4.9 Thu Sep 2 20:35:07 CDT 2009)
Name (amrood.com:amrood): amrood
331 Password required for amrood.
Password:
230 User amrood logged in.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 1464
drwxr-sr-x 3 amrood group 1024 Mar 11 20:04 Mail
drwxr-sr-x 2 amrood group 1536 Mar 3 18:07 Misc
drwxr-sr-x 5 amrood group 512 Dec 7 10:59 OldStuff
drwxr-sr-x 2 amrood group 1024 Mar 11 15:24 bin
drwxr-sr-x 5 amrood group 3072 Mar 13 16:10 mpl
-rw-r--r-- 1 amrood group 209671 Mar 15 10:57 myfile.out
drwxr-sr-x 3 amrood group 512 Jan 5 13:32 public
drwxr-sr-x 3 amrood group 512 Feb 10 10:17 pvm3
226 Transfer complete.
ftp> cd mpl
250 CWD command successful.
ftp> dir
200 PORT command successful.
150 Opening data connection for /bin/ls.
total 7320
-rw-r--r-- 1 amrood group 1630 Aug 8 1994 dboard.f
-rw-r----- 1 amrood group 4340 Jul 17 1994 vttest.c
-rwxr-xr-x 1 amrood group 525574 Feb 15 11:52 wave_shift
-rw-r--r-- 1 amrood group 1648 Aug 5 1994 wide.list
-rwxr-xr-x 1 amrood group 4019 Feb 14 16:26 fix.c
226 Transfer complete.
ftp> get wave_shift
200 PORT command successful.
150 Opening data connection for wave_shift (525574 bytes).
226 Transfer complete.
528454 bytes received in 1.296 seconds (398.1 Kbytes/s)
ftp> quit
221 Goodbye.
$
telnetユーティリティ
リモートのUnixマシンに接続して、そのマシンでリモートで作業する必要がある場合があります。 Telnet は、あるサイトのコンピュータユーザーが接続を確立し、ログインして、別のサイトのコンピュータで作業を行うことを可能にするユーティリティです。
Telnetを使用してログインすると、リモート接続されたマシンですべてのアクティビティを実行できます。以下はTelnetセッションの例です-
C:>telnet amrood.com
Trying...
Connected to amrood.com.
Escape character is '^]'.
login: amrood
amrood's Password:
*****************************************************
* *
* *
* WELCOME TO AMROOD.COM *
* *
* *
*****************************************************
Last unsuccessful login: Fri Mar 3 12:01:09 IST 2009
Last login: Wed Mar 8 18:33:27 IST 2009 on pts/10
{ do your work }
$ logout
Connection closed.
C:>
指ユーティリティ
ザ・ fingerコマンドは、特定のホスト上のユーザーに関する情報を表示します。ホストはローカルまたはリモートのいずれかです。
セキュリティ上の理由から、他のシステムではFingerが無効になっている場合があります。
以下は、fingerコマンドを使用するための簡単な構文です。
ローカルマシンにログインしているすべてのユーザーを確認します-
$ finger
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
ローカルマシンで利用可能な特定のユーザーに関する情報を取得します-
$ finger amrood
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
リモートマシンにログインしているすべてのユーザーを確認します-
$ finger @avtar.com
Login Name Tty Idle Login Time Office
amrood pts/0 Jun 25 08:03 (62.61.164.115)
リモートマシンで利用可能な特定のユーザーに関する情報を取得します-
$ finger [email protected]
Login: amrood Name: (null)
Directory: /home/amrood Shell: /bin/bash
On since Thu Jun 25 08:03 (MST) on pts/0 from 62.61.164.115
No mail.
No Plan.
この章では、Unixでviエディターがどのように機能するかを理解します。Unixでファイルを編集する方法はたくさんあります。画面指向のテキストエディタを使用したファイルの編集vi最良の方法の1つです。このエディタを使用すると、ファイル内の他の行との関連で行を編集できます。
と呼ばれるviエディタの改良版 VIMまた、現在利用可能になっています。ここで、VIMはVi IM証明した。
viは、一般的にUnixエディタのデファクトスタンダードと見なされています。
通常、Unixシステムのすべてのフレーバーで使用できます。
その実装は全体的に非常に似ています。
必要なリソースはごくわずかです。
このような他のエディタよりもユーザーフレンドリーです ed または ex。
あなたは使用することができます vi既存のファイルを編集したり、新しいファイルを最初から作成したりするためのエディター。このエディタを使用して、テキストファイルを読み取ることもできます。
viエディターの起動
次の表に、viエディターを使用するための基本的なコマンドを示します。
シニア番号 | コマンドと説明 |
---|---|
1 | vi filename 新しいファイルがまだ存在しない場合は作成し、存在しない場合は既存のファイルを開きます。 |
2 | vi -R filename 既存のファイルを読み取り専用モードで開きます。 |
3 | view filename 既存のファイルを読み取り専用モードで開きます。 |
以下は、新しいファイルを作成する例です testfile 現在の作業ディレクトリにまだ存在しない場合-
$vi testfile
上記のコマンドは、次の出力を生成します-
|
~
~
~
~
~
~
~
~
~
~
~
~
"testfile" [New File]
あなたは気づくでしょう tildeカーソルに続く各行の(〜)。チルダは未使用の線を表します。行がチルダで始まっておらず、空白のように見える場合は、スペース、タブ、改行、またはその他の表示できない文字が存在します。
これで、作業を開始するための開いているファイルが1つあります。先に進む前に、いくつかの重要な概念を理解しましょう。
動作モード
viエディターで作業していると、通常、次の2つのモードに遭遇します。
Command mode−このモードでは、ファイルの保存、コマンドの実行、カーソルの移動、行または単語の切り取り(ヤンク)と貼り付け、検索と置換などの管理タスクを実行できます。このモードでは、入力した内容はすべてコマンドとして解釈されます。
Insert mode−このモードでは、ファイルにテキストを挿入できます。このモードで入力されたものはすべて入力として解釈され、ファイルに配置されます。
viは常にで始まります command mode。テキストを入力するには、単に入力する挿入モードである必要がありますi。挿入モードを終了するには、を押します。Esc キー。コマンドモードに戻ります。
Hint−現在のモードがわからない場合は、Escキーを2回押します。これにより、コマンドモードになります。viエディターを使用してファイルを開きます。いくつかの文字を入力することから始めて、次にコマンドモードに来て違いを理解してください。
viから抜け出す
viを終了するコマンドは :q。コマンドモードになったら、コロンと「q」を入力してから戻ります。ファイルが何らかの方法で変更されている場合、エディターはこれを警告し、終了させません。このメッセージを無視するには、保存せずにviを終了するコマンドは次のとおりです。:q!。これにより、変更を保存せずにviを終了できます。
エディタの内容を保存するコマンドは次のとおりです。 :w。上記のコマンドをquitコマンドと組み合わせるか、次のコマンドを使用できます。:wq そして戻る。
する最も簡単な方法 save your changes and exit viZZコマンドを使用します。コマンドモードの場合は、次のように入力しますZZ。ザ・ZZ コマンドはと同じように機能します :wq コマンド。
ファイルの特定の名前を指定/記述したい場合は、ファイルの後に指定することでそれを行うことができます。 :w。たとえば、作業中のファイルを別のファイル名として保存する場合は、filename2、入力します :w filename2 そして戻る。
ファイル内での移動
テキストに影響を与えずにファイル内を移動するには、コマンドモードになっている必要があります(Escキーを2回押します)。次の表に、一度に1文字ずつ移動するために使用できるいくつかのコマンドを示します。
シニア番号 | コマンドと説明 |
---|---|
1 | k カーソルを1行上に移動します |
2 | j カーソルを1行下に移動します |
3 | h カーソルを1文字左に移動します |
4 | l カーソルを1文字右に移動します |
ファイル内を移動するには、次の点を考慮する必要があります-
viでは大文字と小文字が区別されます。コマンドを使用するときは、大文字の使用に注意する必要があります。
viのほとんどのコマンドの前には、アクションを実行する回数を指定できます。例えば、2j カーソルをカーソル位置から2行下に移動します。
viでファイル内を移動する方法は他にもたくさんあります。コマンドモードである必要があることに注意してください(press Esc twice)。次の表に、ファイル内を移動するためのいくつかのコマンドを示します。
シニア番号 | コマンドと説明 |
---|---|
1 | 0 or | 行の先頭にカーソルを置きます |
2 | $ 行末にカーソルを置きます |
3 | w カーソルを次の単語に置きます |
4 | b カーソルを前の単語に置きます |
5 | ( 現在の文の先頭にカーソルを置きます |
6 | ) 次の文の先頭にカーソルを置きます |
7 | E 空白で区切られた単語の末尾に移動します |
8 | { 段落を後ろに移動します |
9 | } 段落を前に移動します |
10 | [[ セクションを後ろに移動します |
11 | ]] セクションを前方に移動します |
12 | n| 列に移動します n 現在の行で |
13 | 1G ファイルの最初の行に移動します |
14 | G ファイルの最後の行に移動します |
15 | nG に移動します nth ファイルの行 |
16 | :n に移動します nth ファイルの行 |
17 | fc に進む c |
18 | Fc に戻ります c |
19 | H 画面の上部に移動します |
20 | nH に移動します nth 画面の上からの線 |
21 | M 画面中央に移動します |
22 | L 画面の下部に移動します |
23 | nL に移動します nth 画面の下からの線 |
24 | :x コロンの後に数字が続くと、カーソルはで表される行番号に配置されます。 x |
制御コマンド
次のコマンドをコントロールキーとともに使用して、以下の表に示す機能を実行できます。
シニア番号 | コマンドと説明 |
---|---|
1 | CTRL+d 画面を1/2画面進めます |
2 | CTRL+f 全画面を1つ進めます |
3 | CTRL+u 画面を1/2画面後方に移動します |
4 | CTRL+b 全画面を1つ後方に移動します |
5 | CTRL+e 画面を1行上に移動します |
6 | CTRL+y 画面を1行下に移動します |
7 | CTRL+u 画面を1/2ページ上に移動します |
8 | CTRL+d 画面を1/2ページ下に移動します |
9 | CTRL+b 画面を1ページ上に移動します |
10 | CTRL+f 画面を1ページ下に移動します |
11 | CTRL+I 画面を再描画します |
ファイルの編集
ファイルを編集するには、挿入モードである必要があります。コマンドモードから挿入モードに入る方法はたくさんあります-
シニア番号 | コマンドと説明 |
---|---|
1 | i 現在のカーソル位置の前にテキストを挿入します |
2 | I 現在の行の先頭にテキストを挿入します |
3 | a 現在のカーソル位置の後にテキストを挿入します |
4 | A 現在の行の終わりにテキストを挿入します |
5 | o カーソル位置の下にテキスト入力用の新しい行を作成します |
6 | O カーソル位置の上にテキスト入力用の新しい行を作成します |
文字の削除
これは、開いているファイルの文字と行を削除するために使用できる重要なコマンドのリストです-
シニア番号 | コマンドと説明 |
---|---|
1 | x カーソル位置の下の文字を削除します |
2 | X カーソル位置の前の文字を削除します |
3 | dw 現在のカーソル位置から次の単語に削除します |
4 | d^ 現在のカーソル位置から行頭までを削除します |
5 | d$ 現在のカーソル位置から行末までを削除します |
6 | D カーソル位置から現在の行の終わりまで削除します |
7 | dd カーソルが置かれている行を削除します |
上記のように、viのほとんどのコマンドの前には、アクションを実行する回数を指定できます。例えば、2x カーソル位置の下の2文字を削除し、 2dd カーソルが置かれている2行を削除します。
先に進む前に、コマンドを練習することをお勧めします。
変更コマンド
また、viの文字、単語、または行を削除せずに変更することもできます。関連するコマンドは次のとおりです-
シニア番号 | コマンドと説明 |
---|---|
1 | cc 行の内容を削除して、挿入モードのままにします。 |
2 | cw カーソルが置かれている単語をカーソルから小文字に変更します w 言葉の終わり。 |
3 | r カーソルの下の文字を置き換えます。viは、置換が入力された後、コマンドモードに戻ります。 |
4 | R 現在カーソルの下にある文字で始まる複数の文字を上書きします。使用する必要がありますEsc 上書きを停止します。 |
5 | s 現在の文字を入力した文字に置き換えます。その後、挿入モードのままになります。 |
6 | S カーソルが置かれている行を削除し、新しいテキストに置き換えます。新しいテキストが入力された後、viは挿入モードのままになります。 |
コピーアンドペーストコマンド
次のコマンドを使用して、ある場所から行や単語をコピーしてから、別の場所に貼り付けることができます。
シニア番号 | コマンドと説明 |
---|---|
1 | yy 現在の行をコピーします。 |
2 | yw 小文字のwカーソルが置かれている文字から、単語の終わりまで現在の単語をコピーします。 |
3 | p コピーしたテキストをカーソルの後に置きます。 |
4 | P ヤンクされたテキストをカーソルの前に置きます。 |
高度なコマンド
日常の編集を簡素化し、vi −をより効率的に使用できるようにする高度なコマンドがいくつかあります。
シニア番号 | コマンドと説明 |
---|---|
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エディターには2種類の検索があります。 string そして character。文字列検索の場合、/ そして ?コマンドが使用されます。これらのコマンドを開始すると、入力したばかりのコマンドが画面の最後の行に表示され、検索する特定の文字列を入力します。
これらの2つのコマンドは、検索が行われる方向のみが異なります。
ザ・ / コマンドはファイル内を前方(下方)に検索します。
ザ・ ? コマンドはファイルを逆方向(上方向)に検索します。
ザ・ n そして Nコマンドは、前の検索コマンドを同じ方向または反対方向にそれぞれ繰り返します。一部の文字には特別な意味があります。これらの文字の前には円記号(\)検索式の一部として含まれます。
シニア番号 | キャラクターと説明 |
---|---|
1 | ^ 行の先頭で検索します(検索式の先頭で使用します)。 |
2 | . 1文字に一致します。 |
3 | * 前の文字の0個以上に一致します。 |
4 | $ 行の終わり(検索式の終わりに使用)。 |
5 | [ 一致または不一致の式のセットを開始します。 |
6 | < これは、単語の終わりまたは始まりを見つけるためにバックスラッシュでエスケープされた式に入れられます。 |
7 | > これは 'を見るのに役立ちます<'上記の文字の説明。 |
文字検索は、コマンドの後に入力された文字を見つけるために1行以内を検索します。ザ・f そして F コマンドは、現在の行の文字のみを検索します。 f 前方検索と F 後方に検索すると、カーソルが見つかった文字の位置に移動します。
ザ・ t そして T コマンドは現在の行の文字のみを検索しますが、 t、カーソルが文字の前の位置に移動し、 T 文字の後の位置まで行を逆方向に検索します。
コマンドの設定
次の方法を使用して、vi画面のルックアンドフィールを変更できます。 :setコマンド。コマンドモードになったら、次のように入力します:set 次のコマンドのいずれかが続きます。
シニア番号 | コマンドと説明 |
---|---|
1 | :set ic 検索時にケースを無視します |
2 | :set ai 自動インデントを設定します |
3 | :set noai 自動インデントの設定を解除します |
4 | :set nu 左側に行番号のある行を表示します |
5 | :set sw ソフトウェアのタブストップの幅を設定します。たとえば、このコマンドでシフト幅を4に設定します—:set sw = 4 |
6 | :set ws 場合wrapscanが設定され、単語がファイルの一番下で発見されていない、それは最初にそれを検索してみてくださいます |
7 | :set wm このオプションの値がゼロより大きい場合、エディターは自動的に「ワードラップ」を行います。たとえば、折り返しマージンを2文字に設定するには、次のように入力します。:set wm = 2 |
8 | :set ro ファイルタイプを「読み取り専用」に変更します |
9 | :set term 端末タイプを印刷します |
10 | :set bf 入力から制御文字を破棄します |
コマンドの実行
viには、エディター内からコマンドを実行する機能があります。コマンドを実行するには、コマンドモードに移動して次のように入力するだけです。:! コマンド。
たとえば、ファイルをそのファイル名で保存する前にファイルが存在するかどうかを確認する場合は、次のように入力できます。 :! ls の出力が表示されます ls 画面上。
任意のキー(またはコマンドのエスケープシーケンス)を押して、viセッションに戻ることができます。
テキストの置き換え
置換コマンド(:s/)ファイル内の単語または単語のグループをすばやく置き換えることができます。以下は、テキストを置き換える構文です-
:s/search/replace/g
ザ・ gグローバルの略です。このコマンドの結果は、カーソルの行のすべての出現箇所が変更されることです。
注意すべき重要なポイント
次の点は、vi −での成功に追加されます。
コマンドを使用するには、コマンドモードである必要があります。(コマンドモードになっていることを確認するために、いつでもEscキーを2回押してください。)
コマンドには注意する必要があります。これらは大文字と小文字が区別されます。
テキストを入力するには、挿入モードである必要があります。
A ShellUnixシステムへのインターフェースを提供します。それはあなたからの入力を収集し、その入力に基づいてプログラムを実行します。プログラムの実行が終了すると、そのプログラムの出力が表示されます。
シェルは、コマンド、プログラム、およびシェルスクリプトを実行できる環境です。オペレーティングシステムにはさまざまな種類があるのと同じように、シェルにもさまざまな種類があります。シェルの各フレーバーには、認識されたコマンドと関数の独自のセットがあります。
シェルプロンプト
プロンプト、 $、と呼ばれる command prompt、はシェルによって発行されます。プロンプトが表示されている間に、コマンドを入力できます。
を押すと、シェルが入力を読み取ります Enter。入力の最初の単語を見て、実行するコマンドを決定します。単語は途切れのない文字のセットです。スペースとタブは単語を区切ります。
以下は、の簡単な例です。 date 現在の日付と時刻を表示するコマンド-
$date
Thu Jun 25 08:30:19 MST 2009
環境チュートリアルで説明されている環境変数PS1を使用して、コマンドプロンプトをカスタマイズできます。
シェルタイプ
Unixには、2つの主要なタイプのシェルがあります-
Bourne shell −ボーンタイプのシェルを使用している場合、 $ 文字がデフォルトのプロンプトです。
C shell − Cタイプのシェルを使用している場合、%文字がデフォルトのプロンプトです。
Bourne Shellには、次のサブカテゴリがあります-
- ボーンシェル(sh)
- Kornシェル(ksh)
- ボーンアゲインシェル(bash)
- POSIXシェル(sh)
さまざまなCタイプのシェルが続きます-
- Cシェル(csh)
- TENEX / TOPS Cシェル(tcsh)
オリジナルのUnixシェルは、1970年代半ばにニュージャージーのAT&Tベル研究所にいたStephen R.Bourneによって作成されました。
Bourneシェルは、Unixシステムに最初に登場したシェルであるため、「シェル」と呼ばれます。
Bourneシェルは通常次のようにインストールされます /bin/shUnixのほとんどのバージョンで。このため、さまざまなバージョンのUnixで使用できるスクリプトを作成するための最適なシェルです。
この章では、BorneShellに基づくShellの概念のほとんどについて説明します。
シェルスクリプト
シェルスクリプトの基本的な概念は、実行順にリストされたコマンドのリストです。優れたシェルスクリプトにはコメントがあり、その前に# 手順を説明する署名。
値Aが値Bより大きい、ループを使用して大量のデータ、データを読み取って保存するファイル、変数を読み取ってデータを保存するなどの条件付きテストがあり、スクリプトには関数が含まれる場合があります。
次のセクションでは、多くのスクリプトを作成します。これは単純なテキストファイルであり、すべてのコマンドと、シェル環境に何をいつ実行するかを指示するその他の必要な構造をいくつか配置します。
シェルスクリプトと関数の両方が解釈されます。これは、それらがコンパイルされていないことを意味します。
スクリプト例
を作成するとします test.sh脚本。すべてのスクリプトに.sh拡張。スクリプトに何かを追加する前に、シェルスクリプトが開始されていることをシステムに警告する必要があります。これは、shebang構築します。例-
#!/bin/sh
これは、後続のコマンドがBourneシェルによって実行されることをシステムに通知します。それはシバンと呼ばれています#シンボルはハッシュと呼ばれ、!シンボルはバングと呼ばれます。
これらのコマンドを含むスクリプトを作成するには、最初にシバン行を配置してから、コマンドを追加します-
#!/bin/bash
pwd
ls
シェルコメント
次のようにスクリプトにコメントを入れることができます-
#!/bin/bash
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
pwd
ls
上記のコンテンツを保存し、スクリプトを実行可能にします-
$chmod +x test.sh
これで、シェルスクリプトを実行する準備が整いました-
$./test.sh
実行すると、次の結果が得られます-
/home/amrood
index.htm unix-basic_utilities.htm unix-directories.htm
test.sh unix-communication.htm unix-environment.htm
Note −現在のディレクトリで利用可能なプログラムを実行するには、 ./program_name
拡張シェルスクリプト
シェルスクリプトには、シェル環境に何をいつ実行するかを指示するいくつかの必須の構造があります。もちろん、ほとんどのスクリプトは上記のスクリプトよりも複雑です。
結局のところ、シェルは実際のプログラミング言語であり、変数や制御構造などを備えています。スクリプトがどれほど複雑になっても、それは順番に実行されるコマンドのリストにすぎません。
次のスクリプトは、 read キーボードからの入力を受け取り、それを変数PERSONの値として割り当て、最後にSTDOUTに出力するコマンド。
#!/bin/sh
# Author : Zara Ali
# Copyright (c) Tutorialspoint.com
# Script follows here:
echo "What is your name?"
read PERSON
echo "Hello, $PERSON"
これがスクリプトの実行例です-
$./test.sh What is your name? Zara Ali Hello, Zara Ali $
この章では、Unixでシェル変数を使用する方法を学習します。変数は、値を割り当てる文字列です。割り当てられる値は、数値、テキスト、ファイル名、デバイス、またはその他のタイプのデータです。
変数は、実際のデータへのポインターにすぎません。シェルを使用すると、変数を作成、割り当て、および削除できます。
変数名
変数の名前には、文字(aからzまたはAからZ)、数字(0から9)、または下線文字(_)のみを含めることができます。
慣例により、Unixシェル変数の名前は大文字になります。
次の例は有効な変数名です-
_ALI
TOKEN_A
VAR_1
VAR_2
以下は無効な変数名の例です-
2_VAR
-VARIABLE
VAR1-VAR2
VAR_A!
他の文字が使えない理由 !、 *、または - これらの文字はシェルにとって特別な意味を持っているということです。
変数の定義
変数は次のように定義されます-
variable_name=variable_value
例-
NAME="Zara Ali"
上記の例では、変数NAMEを定義し、それに値「ZaraAli」を割り当てています。このタイプの変数はと呼ばれますscalar variables。スカラー変数は、一度に1つの値しか保持できません。
シェルを使用すると、必要な値を変数に格納できます。例-
VAR1="Zara Ali"
VAR2=100
値へのアクセス
変数に格納されている値にアクセスするには、その名前の前にドル記号($)−
たとえば、次のスクリプトは、定義された変数NAMEの値にアクセスし、それをSTDOUT-に出力します。
#!/bin/sh
NAME="Zara Ali"
echo $NAME
上記のスクリプトは次の値を生成します-
Zara Ali
読み取り専用変数
シェルは、読み取り専用コマンドを使用して、変数を読み取り専用としてマークする方法を提供します。変数が読み取り専用としてマークされた後は、その値を変更できません。
たとえば、次のスクリプトは、NAME −の値を変更しようとしたときにエラーを生成します。
#!/bin/sh
NAME="Zara Ali"
readonly NAME
NAME="Qadiri"
上記のスクリプトは次の結果を生成します-
/bin/sh: NAME: This variable is read only.
変数の設定解除
変数の設定を解除または削除すると、シェルは追跡する変数のリストから変数を削除するように指示されます。変数の設定を解除すると、変数に格納されている値にアクセスできなくなります。
以下は、を使用して定義された変数の設定を解除するための構文です。 unset コマンド-
unset variable_name
上記のコマンドは、定義された変数の値を設定解除します。これは、コマンドがどのように機能するかを示す簡単な例です。
#!/bin/sh
NAME="Zara Ali"
unset NAME
echo $NAME
上記の例では何も出力されません。unsetコマンドを使用してunset マークされている変数 readonly。
変数タイプ
シェルが実行されているとき、3つの主要なタイプの変数が存在します-
Local Variables−ローカル変数は、シェルの現在のインスタンス内に存在する変数です。シェルによって開始されるプログラムでは使用できません。これらはコマンドプロンプトで設定されます。
Environment Variables−環境変数は、シェルのすべての子プロセスで使用できます。一部のプログラムは、正しく機能するために環境変数を必要とします。通常、シェルスクリプトは、実行するプログラムに必要な環境変数のみを定義します。
Shell Variables−シェル変数は、シェルによって設定され、正しく機能するためにシェルによって必要とされる特別な変数です。これらの変数の一部は環境変数ですが、その他の変数はローカル変数です。
この章では、Unixの特殊変数について詳しく説明します。前の章の1つで、変数名に特定の非英数字を使用する場合の注意方法を理解しました。これは、これらの文字が特別なUnix変数の名前で使用されているためです。これらの変数は特定の機能のために予約されています。
たとえば、 $ 文字は、現在のシェルのプロセスID番号(PID)を表します-
$echo $$
上記のコマンドは、現在のシェルのPIDを書き込みます-
29949
次の表は、シェルスクリプトで使用できるいくつかの特別な変数を示しています-
シニア番号 | 変数と説明 |
---|---|
1 | $0 現在のスクリプトのファイル名。 |
2 | $n これらの変数は、スクリプトが呼び出されたときの引数に対応しています。ここにn は引数の位置に対応する正の10進数です(最初の引数は $1, the second argument is $2など)。 |
3 | $# スクリプトに提供される引数の数。 |
4 | $* すべての引数は二重引用符で囲まれています。スクリプトが2つの引数を受け取る場合、$* is equivalent to $1 $ 2。 |
5 | $@ すべての引数は個別に二重引用符で囲まれています。スクリプトが2つの引数を受け取る場合、$@ is equivalent to $1 $ 2。 |
6 | $? 最後に実行されたコマンドの終了ステータス。 |
7 | $$ 現在のシェルのプロセス番号。シェルスクリプトの場合、これはスクリプトが実行されているプロセスIDです。 |
8 | $! 最後のバックグラウンドコマンドのプロセス番号。 |
コマンドライン引数
コマンドライン引数 $1, $2、 $3, ...$9は位置パラメータであり、 $0 pointing to the actual command, program, shell script, or function and $1、 $2, $3、コマンドの引数として... $ 9。
次のスクリプトは、コマンドラインに関連するさまざまな特殊変数を使用しています-
#!/bin/sh
echo "File Name: $0"
echo "First Parameter : $1" echo "Second Parameter : $2"
echo "Quoted Values: $@" echo "Quoted Values: $*"
echo "Total Number of Parameters : $#"
上記のスクリプトの実行例を次に示します-
$./test.sh Zara Ali
File Name : ./test.sh
First Parameter : Zara
Second Parameter : Ali
Quoted Values: Zara Ali
Quoted Values: Zara Ali
Total Number of Parameters : 2
特別なパラメータ $* and $@
すべてのコマンドライン引数に一度にアクセスできるようにする特別なパラメータがあります。 $* そして $@ 二重引用符で囲まれていない限り、どちらも同じように動作します。 ""。
両方のパラメーターは、コマンドライン引数を指定します。しかし "$*" special parameter takes the entire list as one argument with spaces between and the "$@ "特殊パラメータは、リスト全体を受け取り、それを個別の引数に分割します。
以下に示すようにシェルスクリプトを記述して、不明な数のコマンドライン引数を次のいずれかで処理できます。 $* or $@特別なパラメータ-
#!/bin/sh
for TOKEN in $* do echo $TOKEN
done
上記のスクリプトの実行例を次に示します-
$./test.sh Zara Ali 10 Years Old
Zara
Ali
10
Years
Old
Note −ここに do...done は、後続のチュートリアルで説明する一種のループです。
終了ステータス
ザ・ $? 変数は、前のコマンドの終了ステータスを表します。
終了ステータスは、コマンドの完了時にすべてのコマンドによって返される数値です。原則として、ほとんどのコマンドは、成功した場合は0の終了ステータスを返し、失敗した場合は1の終了ステータスを返します。
一部のコマンドは、特定の理由で追加の終了ステータスを返します。たとえば、一部のコマンドはエラーの種類を区別し、特定の種類の障害に応じてさまざまな終了値を返します。
以下は成功したコマンドの例です-
$./test.sh Zara Ali File Name : ./test.sh First Parameter : Zara Second Parameter : Ali Quoted Values: Zara Ali Quoted Values: Zara Ali Total Number of Parameters : 2 $echo $? 0 $
この章では、Unixでシェル配列を使用する方法について説明します。シェル変数は、単一の値を保持するのに十分な能力があります。これらの変数はスカラー変数と呼ばれます。
シェルは、と呼ばれる別のタイプの変数をサポートします array variable。これは、同時に複数の値を保持できます。配列は、変数のセットをグループ化する方法を提供します。必要な変数ごとに新しい名前を作成する代わりに、他のすべての変数を格納する単一の配列変数を使用できます。
シェル変数について説明したすべての命名規則は、配列の命名時に適用できます。
配列値の定義
配列変数とスカラー変数の違いは次のように説明できます。
さまざまな学生の名前を変数のセットとして表現しようとしているとします。個々の変数はそれぞれ、次のようなスカラー変数です。
NAME01="Zara"
NAME02="Qadir"
NAME03="Mahnaz"
NAME04="Ayan"
NAME05="Daisy"
単一の配列を使用して、上記のすべての名前を格納できます。以下は、配列変数を作成する最も簡単な方法です。これは、インデックスの1つに値を割り当てるのに役立ちます。
array_name[index]=value
ここで、array_nameは配列の名前、indexは設定する配列内のアイテムのインデックス、valueはそのアイテムに設定する値です。
例として、次のコマンド-
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
を使用している場合 ksh シェル、これが配列初期化の構文です-
set -A array_name value1 value2 ... valuen
を使用している場合 bash シェル、これが配列初期化の構文です-
array_name=(value1 ... valuen)
配列値へのアクセス
配列変数を設定したら、次のようにアクセスします-
${array_name[index]}
ここで、array_nameは配列の名前であり、indexはアクセスされる値のインデックスです。以下は、概念を理解するための例です-
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Index: ${NAME[0]}"
echo "Second Index: ${NAME[1]}"
上記の例では、次の結果が生成されます-
$./test.sh
First Index: Zara
Second Index: Qadir
次のいずれかの方法で、配列内のすべてのアイテムにアクセスできます。
${array_name[*]} ${array_name[@]}
ここに array_name は、関心のある配列の名前です。次の例は、概念を理解するのに役立ちます。
#!/bin/sh
NAME[0]="Zara"
NAME[1]="Qadir"
NAME[2]="Mahnaz"
NAME[3]="Ayan"
NAME[4]="Daisy"
echo "First Method: ${NAME[*]}" echo "Second Method: ${NAME[@]}"
上記の例では、次の結果が生成されます-
$./test.sh
First Method: Zara Qadir Mahnaz Ayan Daisy
Second Method: Zara Qadir Mahnaz Ayan Daisy
各シェルでサポートされているさまざまな演算子があります。この章では、Bourneシェル(デフォルトシェル)について詳しく説明します。
ここで、次の演算子について説明します-
- 算術演算子
- 関係演算子
- ブール演算子
- 文字列演算子
- ファイルテスト演算子
Bourneシェルには元々、単純な算術演算を実行するメカニズムはありませんでしたが、外部プログラムも使用します。 awk または expr。
次の例は、2つの数値を加算する方法を示しています-
#!/bin/sh
val=`expr 2 + 2`
echo "Total value : $val"
上記のスクリプトは次の結果を生成します-
Total value : 4
−を追加する際には、以下の点を考慮する必要があります。
演算子と式の間にはスペースが必要です。たとえば、2 +2は正しくありません。2 +2と書く必要があります。
完全な式はで囲む必要があります ‘ ‘、バッククォートと呼ばれます。
算術演算子
次の算術演算子はBourneShellでサポートされています。
変数を想定 a 10と変数を保持します b 20を保持します-
例を表示
オペレーター | 説明 | 例 |
---|---|---|
+(追加) | 演算子のいずれかの側に値を追加します | `expr $a + $b`は30を与えます |
-(減算) | 左側のオペランドから右側のオペランドを減算します | `expr $a - $b`は-10を与えます |
*(乗算) | 演算子のいずれかの側で値を乗算します | `expr $a \* $b`は200を与えます |
/(除算) | 左側のオペランドを右側のオペランドで除算します | `expr $b / $a`は2を与えます |
% (係数) | 左側のオペランドを右側のオペランドで除算し、余りを返します | `expr $b % $a`は0を与えます |
=(割り当て) | 左のオペランドに右のオペランドを割り当てます | a = $ bは、bの値をaに割り当てます。 |
==(平等) | 2つの数値を比較し、両方が同じ場合はtrueを返します。 | [$ a == $ b]はfalseを返します。 |
!=(平等ではない) | 2つの数値を比較し、両方が異なる場合はtrueを返します。 | [$ a!= $ b]はtrueを返します。 |
たとえば、すべての条件式は、周囲にスペースがある角括弧の内側にある必要があることを理解することが非常に重要です。 [ $a == $b ] 正しいのに対し、、 [$a==$b] 間違っています。
すべての算術計算は長整数を使用して行われます。
関係演算子
Bourne Shellは、数値に固有の次の関係演算子をサポートしています。これらの演算子は、値が数値でない限り、文字列値に対しては機能しません。
たとえば、次の演算子は、10と20の間、および「10」と「20」の間の関係をチェックしますが、「10」と「20」の間の関係はチェックしません。
変数を想定 a 10と変数を保持します b 20を保持します-
例を表示
オペレーター | 説明 | 例 |
---|---|---|
-eq | 2つのオペランドの値が等しいかどうかをチェックします。はいの場合、条件は真になります。 | [$ a -eq $ b]は正しくありません。 |
-ne | 2つのオペランドの値が等しいかどうかをチェックします。値が等しくない場合、条件は真になります。 | [$ a -ne $ b]は真です。 |
-gt | 左のオペランドの値が右のオペランドの値より大きいかどうかを確認します。はいの場合、条件は真になります。 | [$ a -gt $ b]は正しくありません。 |
-lt | 左のオペランドの値が右のオペランドの値よりも小さいかどうかを確認します。はいの場合、条件は真になります。 | [$ a -lt $ b]は真です。 |
-ge | 左のオペランドの値が右のオペランドの値以上であるかどうかを確認します。はいの場合、条件は真になります。 | [$ a -ge $ b]は正しくありません。 |
-le | 左のオペランドの値が右のオペランドの値以下であるかどうかをチェックします。はいの場合、条件は真になります。 | [$ a -le $ b]は真です。 |
すべての条件式は、周囲にスペースを入れた角括弧内に配置する必要があることを理解することが非常に重要です。例えば、[ $a <= $b ] 正しいのに対し、、 [$a <= $b] 間違っています。
ブール演算子
次のブール演算子は、BourneShellでサポートされています。
変数を想定 a 10と変数を保持します b 20を保持します-
例を表示
オペレーター | 説明 | 例 |
---|---|---|
! | これは論理否定です。これにより、真の状態が偽に、またはその逆に反転します。 | [!false]はtrueです。 |
-o | これは論理的です OR。オペランドの1つが真の場合、条件は真になります。 | [$ a -lt 20 -o $ b -gt100]は真です。 |
-a | これは論理的です AND。両方のオペランドが真の場合、条件は真になり、そうでない場合は偽になります。 | [$ a -lt 20 -a $ b -gt100]はfalseです。 |
文字列演算子
次の文字列演算子は、BourneShellでサポートされています。
変数を想定 a 「abc」と変数を保持します b 「efg」を保持し、次に−
例を表示
オペレーター | 説明 | 例 |
---|---|---|
= | 2つのオペランドの値が等しいかどうかをチェックします。はいの場合、条件は真になります。 | [$ a = $ b]は正しくありません。 |
!= | 2つのオペランドの値が等しいかどうかをチェックします。値が等しくない場合、条件は真になります。 | [$ a!= $ b]は真です。 |
-z | 指定された文字列のオペランドサイズがゼロかどうかを確認します。長さがゼロの場合、trueを返します。 | [-z $ a]は正しくありません。 |
-n | 指定された文字列のオペランドサイズがゼロ以外であるかどうかを確認します。長さがゼロ以外の場合は、trueを返します。 | [-n $ a]は偽ではありません。 |
str | かどうかを確認します str空の文字列ではありません。空の場合はfalseを返します。 | [$ a]は誤りではありません。 |
ファイルテスト演算子
Unixファイルに関連付けられたさまざまなプロパティをテストするために使用できる演算子がいくつかあります。
変数を想定する file サイズが100バイトである既存のファイル名「test」を保持します。 read、 write そして execute −の許可
例を表示
オペレーター | 説明 | 例 |
---|---|---|
-b file | ファイルがブロック特殊ファイルであるかどうかを確認します。はいの場合、条件は真になります。 | [-b $ file]はfalseです。 |
-c file | ファイルが文字特殊ファイルかどうかを確認します。はいの場合、条件は真になります。 | [-c $ file]はfalseです。 |
-d file | ファイルがディレクトリかどうかを確認します。はいの場合、条件は真になります。 | [-d $ file]は正しくありません。 |
-f file | ファイルがディレクトリや特殊ファイルではなく、通常のファイルであるかどうかを確認します。はいの場合、条件は真になります。 | [-f $ file]はtrueです。 |
-g file | ファイルにsetgroup ID(SGID)ビットが設定されているかどうかを確認します。はいの場合、条件は真になります。 | [-g $ file]はfalseです。 |
-k file | ファイルにスティッキービットが設定されているかどうかを確認します。はいの場合、条件は真になります。 | [-k $ file]はfalseです。 |
-p file | ファイルが名前付きパイプであるかどうかを確認します。はいの場合、条件は真になります。 | [-p $ file]はfalseです。 |
-t file | ファイル記述子が開いていて、端末に関連付けられているかどうかを確認します。はいの場合、条件は真になります。 | [-t $ file]はfalseです。 |
-u file | ファイルにSetUser ID(SUID)ビットが設定されているかどうかを確認します。はいの場合、条件は真になります。 | [-u $ file]はfalseです。 |
-r file | ファイルが読み取り可能かどうかを確認します。はいの場合、条件は真になります。 | [-r $ file]はtrueです。 |
-w file | ファイルが書き込み可能かどうかを確認します。はいの場合、条件は真になります。 | [-w $ file]はtrueです。 |
-x file | ファイルが実行可能かどうかを確認します。はいの場合、条件は真になります。 | [-x $ file]はtrueです。 |
-s file | ファイルのサイズが0より大きいかどうかを確認します。はいの場合、条件は真になります。 | [-s $ file]はtrueです。 |
-e file | ファイルが存在するかどうかを確認します。ファイルがディレクトリであるが存在する場合でもtrueです。 | [-e $ file]はtrueです。 |
Cシェル演算子
次のリンクは、Cシェル演算子に関する簡単なアイデアを提供します-
Cシェル演算子
Kornシェルオペレーター
次のリンクは、Kornシェル演算子を理解するのに役立ちます-
Kornシェルオペレーター
この章では、Unixでのシェルの意思決定について理解します。シェルスクリプトの作成中に、指定された2つのパスから1つのパスを採用する必要がある場合があります。したがって、プログラムが正しい決定を下し、正しいアクションを実行できるようにする条件ステートメントを使用する必要があります。
Unixシェルは、さまざまな条件に基づいてさまざまなアクションを実行するために使用される条件ステートメントをサポートしています。ここで、2つの意思決定ステートメントを理解します-
ザ・ if...else ステートメント
ザ・ case...esac ステートメント
if ... elseステートメント
elseステートメントは、特定のオプションセットからオプションを選択するために使用できる有用な意思決定ステートメントです。
Unixシェルは次の形式をサポートします if…else ステートメント-
- if ... fiステートメント
- if ... else ... fiステートメント
- if ... elif ... else ... fiステートメント
ほとんどのifステートメントは、前の章で説明した関係演算子を使用して関係をチェックします。
ケース... esacステートメント
複数使用できます if...elif多方向分岐を実行するステートメント。ただし、特にすべてのブランチが単一の変数の値に依存している場合、これが常に最良の解決策であるとは限りません。
Unixシェルはサポートします case...esac この状況を正確に処理するステートメントであり、繰り返されるよりも効率的に処理されます if...elif ステートメント。
の形式は1つだけです case...esac ここで詳細に説明されているステートメント-
- ケース... esacステートメント
ザ・ case...esac Unixシェルのステートメントは、 switch...case 私たちが他のプログラミング言語で持っているステートメント C または C++ そして PERL、など。
この章では、Unixのシェルループについて説明します。ループは、一連のコマンドを繰り返し実行できる強力なプログラミングツールです。この章では、シェルプログラマーが利用できる次のタイプのループについて説明します。
- whileループ
- forループ
- までループ
- 選択ループ
状況に応じて異なるループを使用します。たとえば、whileループは、指定された条件が真のままになるまで、指定されたコマンドを実行します。インクルードuntil ループは、指定された条件が真になるまで実行されます。
優れたプログラミングの練習ができたら、専門知識を習得し、状況に応じて適切なループの使用を開始します。ここに、while そして for ループは、次のような他のプログラミング言語のほとんどで利用できます。 C、 C++ そして PERL、など。
ネスティングループ
すべてのループはネストの概念をサポートしています。つまり、あるループを別の同様のループまたは異なるループの中に置くことができます。このネストは、要件に基づいて無制限に実行できます。
これがネストの例です whileループ。他のループは、同様の方法でプログラミング要件に基づいてネストできます。
whileループのネスト
whileループを別のwhileループの本体の一部として使用することができます。
構文
while command1 ; # this is loop1, the outer loop
do
Statement(s) to be executed if command1 is true
while command2 ; # this is loop2, the inner loop
do
Statement(s) to be executed if command2 is true
done
Statement(s) to be executed if command1 is true
done
例
ループの入れ子の簡単な例を次に示します。9までカウントしていたループ内に別のカウントダウンループを追加しましょう-
#!/bin/sh
a=0
while [ "$a" -lt 10 ] # this is loop1 do b="$a"
while [ "$b" -ge 0 ] # this is loop2 do echo -n "$b "
b=`expr $b - 1` done echo a=`expr $a + 1`
done
これにより、次の結果が得られます。どのように注意することが重要ですecho -nここで動作します。ここに-n オプションを使用すると、echoは改行文字の出力を回避できます。
0
1 0
2 1 0
3 2 1 0
4 3 2 1 0
5 4 3 2 1 0
6 5 4 3 2 1 0
7 6 5 4 3 2 1 0
8 7 6 5 4 3 2 1 0
9 8 7 6 5 4 3 2 1 0
この章では、Unixでのシェルループ制御について説明します。これまで、ループを作成し、ループを操作してさまざまなタスクを実行する方法について説明してきました。ループを停止したり、ループの反復をスキップしたりする必要がある場合があります。
この章では、シェルループを制御するために使用される次の2つのステートメントについて学習します。
ザ・ break ステートメント
ザ・ continue ステートメント
無限ループ
すべてのループの寿命は限られており、ループに応じて条件がfalseまたはtrueになると出力されます。
必要な条件が満たされない場合、ループは永久に続く可能性があります。終了せずに永久に実行されるループは、無限の回数実行されます。このため、このようなループは無限ループと呼ばれます。
例
これは、を使用する簡単な例です。 while 0から9までの数字を表示するループ-
#!/bin/sh
a=10
until [ $a -lt 10 ] do echo $a
a=`expr $a + 1`
done
このループは永遠に続きます。 a 常に greater than または equal to 10 そしてそれは決して10以上です。
ブレークステートメント
ザ・ breakステートメントは、breakステートメントまでのすべてのコード行の実行を完了した後、ループ全体の実行を終了するために使用されます。次に、ループの終了後にコードにステップダウンします。
構文
以下 break ステートメントはループから抜け出すために使用されます-
break
breakコマンドを使用して、この形式を使用してネストされたループを終了することもできます。
break n
ここに n を指定します nth からの出口への囲みループ。
例
これは、ループがすぐに終了することを示す簡単な例です。 a 5 −になります
#!/bin/sh
a=0
while [ $a -lt 10 ]
do
echo $a if [ $a -eq 5 ]
then
break
fi
a=`expr $a + 1`
done
実行すると、次の結果が得られます-
0
1
2
3
4
5
ネストされたforループの簡単な例を次に示します。このスクリプトは、次の場合に両方のループから抜け出します。var1 equals 2 そして var2 equals 0 −
#!/bin/sh
for var1 in 1 2 3
do
for var2 in 0 5
do
if [ $var1 -eq 2 -a $var2 -eq 0 ] then break 2 else echo "$var1 $var2"
fi
done
done
実行すると、次の結果が得られます。内側のループには、引数2を指定したbreakコマンドがあります。これは、条件が満たされた場合、外側のループから抜け出し、最終的には内側のループからも抜け出す必要があることを示しています。
1 0
1 5
継続ステートメント
ザ・ continue ステートメントはに似ています break ただし、ループ全体ではなく、ループの現在の反復を終了させます。
このステートメントは、エラーが発生したが、ループの次の反復を実行しようとする場合に役立ちます。
構文
continue
breakステートメントと同様に、整数引数をcontinueコマンドに指定して、ネストされたループからコマンドをスキップできます。
continue n
ここに n を指定します nth 続行するループを囲みます。
例
次のループはを利用します continue 継続ステートメントから戻り、次のステートメントの処理を開始するステートメント-
#!/bin/sh
NUMS="1 2 3 4 5 6 7"
for NUM in $NUMS
do
Q=`expr $NUM % 2` if [ $Q -eq 0 ]
then
echo "Number is an even number!!"
continue
fi
echo "Found odd number"
done
実行すると、次の結果が得られます-
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
Number is an even number!!
Found odd number
代替とは何ですか?
シェルは、1つ以上の特殊文字を含む式を検出すると、置換を実行します。
例
ここで、変数の出力値はその値に置き換えられます。同時、"\n" 改行で置き換えられます-
#!/bin/sh
a=10
echo -e "Value of a is $a \n"
次の結果が表示されます。ここに-e オプションは、円記号エスケープの解釈を有効にします。
Value of a is 10
以下は、なしの結果です -e オプション-
Value of a is 10\n
エコーコマンドで使用できる以下のエスケープシーケンスは次のとおりです。
シニア番号 | エスケープと説明 |
---|---|
1 | \\ バックスラッシュ |
2 | \a アラート(BEL) |
3 | \b バックスペース |
4 | \c 末尾の改行を抑制する |
5 | \f フォームフィード |
6 | \n 改行 |
7 | \r キャリッジリターン |
8 | \t 水平タブ |
9 | \v 垂直タブ |
あなたは使用することができます -E バックスラッシュエスケープの解釈を無効にするオプション(デフォルト)。
あなたは使用することができます -n 新しい行の挿入を無効にするオプション。
コマンド置換
コマンド置換は、シェルが特定のコマンドセットを実行し、コマンドの代わりにそれらの出力を置換するメカニズムです。
構文
コマンド置換は、コマンドが-として与えられたときに実行されます
`command`
コマンド置換を実行するときは、一重引用符ではなく、必ずバッククォートを使用してください。
例
コマンド置換は通常、コマンドの出力を変数に割り当てるために使用されます。次の各例は、コマンド置換-を示しています。
#!/bin/sh
DATE=`date`
echo "Date is $DATE"
USERS=`who | wc -l`
echo "Logged in user are $USERS" UP=`date ; uptime` echo "Uptime is $UP"
実行すると、次の結果が得られます-
Date is Thu Jul 2 03:59:57 MST 2009
Logged in user are 1
Uptime is Thu Jul 2 03:59:57 MST 2009
03:59:57 up 20 days, 14:03, 1 user, load avg: 0.13, 0.07, 0.15
変数置換
変数置換により、シェルプログラマーは変数の状態に基づいて変数の値を操作できます。
可能なすべての置換について、次の表を示します-
シニア番号 | フォームと説明 |
---|---|
1 | ${var} varの値を代入します。 |
2 | ${var:-word} 場合varがnullまたは設定されていない、単語が置換されますvar。varの値は変わりません。 |
3 | ${var:=word} varがnullまたは未設定の場合、varはの値に設定されます。word。 |
4 | ${var:?message} varがnullまたは未設定の場合、メッセージは標準エラーで出力されます。これにより、変数が正しく設定されていることが確認されます。 |
5 | ${var:+word} varが設定されている場合、varの代わりにwordが使用されます。varの値は変わりません。 |
例
以下は、上記の置換のさまざまな状態を示す例です。
#!/bin/sh
echo ${var:-"Variable is not set"}
echo "1 - Value of var is ${var}" echo ${var:="Variable is not set"}
echo "2 - Value of var is ${var}" unset var echo ${var:+"This is default value"}
echo "3 - Value of var is $var" var="Prefix" echo ${var:+"This is default value"}
echo "4 - Value of var is $var" echo ${var:?"Print this message"}
echo "5 - Value of var is ${var}"
実行すると、次の結果が得られます-
Variable is not set
1 - Value of var is
Variable is not set
2 - Value of var is Variable is not set
3 - Value of var is
This is default value
4 - Value of var is Prefix
Prefix
5 - Value of var is Prefix
この章では、シェルの引用メカニズムについて詳しく説明します。まず、メタ文字について説明します。
メタ文字
Unixシェルは、シェルスクリプトで使用する際に特別な意味を持つさまざまなメタ文字を提供し、引用符で囲まれていない限り単語を終了させます。
例えば、 ? ディレクトリ内のファイルを一覧表示するときに1文字と一致し、 *複数の文字に一致します。これは、ほとんどのシェル特殊文字(メタ文字とも呼ばれます)のリストです-
* ? [ ] ' " \ $ ; & ( ) | ^ < > new-line space tab
文字の前に文字を引用する(つまり、それ自体を表すようにする)ことができます。 \。
例
次の例は、 * または ? −
#!/bin/sh
echo Hello; Word
実行すると、次の結果が得られます-
Hello
./test.sh: line 2: Word: command not found
shell returned 127
引用符で囲まれた文字を使ってみましょう-
#!/bin/sh
echo Hello\; Word
実行すると、次の結果が得られます-
Hello; Word
ザ・ $ 記号はメタ文字の1つであるため、シェルによる特別な処理を避けるために引用符で囲む必要があります-
#!/bin/sh
echo "I have \$1200"
実行すると、次の結果が得られます-
I have $1200
次の表に、引用の4つの形式を示します。
シニア番号 | 引用と説明 |
---|---|
1 | Single quote これらの引用符の間のすべての特殊文字は、特別な意味を失います。 |
2 | Double quote これらの引用符の間のほとんどの特殊文字は、これらの例外を除いて特別な意味を失います-
|
3 | Backslash バックスラッシュの直後の文字は、その特別な意味を失います。 |
4 | Back quote 後ろ引用符の間にあるものはすべてコマンドとして扱われ、実行されます。 |
一重引用符
多くの特別なシェル文字を含むechoコマンドを考えてみましょう-
echo <-$1500.**>; (update?) [y|n]
各特殊文字の前に円記号を付けるのは面倒で、行が読みにくくなります-
echo \<-\$1500.\*\*\>\; \(update\?\) \[y\|n\]
文字の大きなグループを引用する簡単な方法があります。文字列の最初と最後に一重引用符( ')を付けます-
echo '<-$1500.**>; (update?) [y|n]'
一重引用符で囲まれた文字は、各文字の前に円記号があるかのように引用符で囲まれます。これにより、echoコマンドが適切に表示されます。
出力する文字列内に一重引用符が含まれている場合は、文字列全体を一重引用符で囲むのではなく、次のように円記号(\)を使用してその前に配置する必要があります。
echo 'It\'s Shell Programming
二重引用符
次のシェルスクリプトを実行してみてください。このシェルスクリプトは一重引用符を使用します-
VAR=ZARA
echo '$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]'
実行すると、次の結果が得られます-
$VAR owes <-$1500.**>; [ as of (`date +%m/%d`) ]
これは表示する必要があったものではありません。一重引用符が変数置換を妨げることは明らかです。変数値を置き換えて、逆コンマを期待どおりに機能させる場合は、次のようにコマンドを二重引用符で囲む必要があります。
VAR=ZARA
echo "$VAR owes <-\$1500.**>; [ as of (`date +%m/%d`) ]"
実行すると、次の結果が得られます-
ZARA owes <-$1500.**>; [ as of (07/02) ]
二重引用符は、以下を除くすべての文字の特別な意味を取り除きます-
$ パラメータ置換用
コマンド置換のバッククォート
\$ 文字通りのドル記号を有効にする
\` リテラルのバッククォートを有効にするには
\" 埋め込み二重引用符を有効にするには
\\ 埋め込みバックスラッシュを有効にするには
他のすべて \ 文字はリテラルです(特別ではありません)
一重引用符で囲まれた文字は、各文字の前に円記号があるかのように引用符で囲まれます。これにより、echoコマンドが正しく表示されます。
出力する文字列内に一重引用符が含まれている場合は、文字列全体を一重引用符で囲むのではなく、次のように円記号(\)を使用してその前に配置する必要があります。
echo 'It\'s Shell Programming'
バッククォート
シェルコマンドを間に置く backquotes コマンドを実行します。
構文
シェルを配置するための簡単な構文は次のとおりです command バッククォートの間-
var=`command`
例
ザ・ date 次の例ではコマンドが実行され、生成された結果がDATA変数に格納されます。
DATE=`date`
echo "Current Date: $DATE"
実行すると、次の結果が得られます-
Current Date: Thu Jul 2 05:28:45 MST 2009
この章では、シェルの入力/出力リダイレクトについて詳しく説明します。ほとんどのUnixシステムコマンドは、端末から入力を受け取り、結果の出力を端末に送り返します。コマンドは通常、標準入力から入力を読み取ります。これは、デフォルトでは端末です。同様に、コマンドは通常、その出力を標準出力に書き込みます。これもデフォルトで端末です。
出力リダイレクト
通常は標準出力を対象としたコマンドからの出力は、代わりにファイルに簡単に転送できます。この機能は、出力リダイレクトと呼ばれます。
通常は出力を標準出力に書き込むコマンドに>ファイルという表記が追加された場合、そのコマンドの出力は端末ではなくファイルに書き込まれます。
以下を確認してください who ユーザーファイル内のコマンドの完全な出力をリダイレクトするコマンド。
$ who > users
端末に出力が表示されないことに注意してください。これは、出力がデフォルトの標準出力デバイス(端末)から指定されたファイルにリダイレクトされているためです。完全なコンテンツについては、ユーザーファイルを確認できます-
$ cat users
oko tty01 Sep 12 07:30
ai tty15 Sep 12 13:32
ruth tty21 Sep 12 10:10
pat tty24 Sep 12 13:07
steve tty25 Sep 12 13:03
$
コマンドの出力がファイルにリダイレクトされ、ファイルにすでにいくつかのデータが含まれている場合、そのデータは失われます。次の例を考えてみましょう-
$ echo line 1 > users
$ cat users line 1 $
>>演算子を使用して、次のように既存のファイルに出力を追加できます。
$ echo line 2 >> users $ cat users
line 1
line 2
$
入力リダイレクト
コマンドの出力をファイルにリダイレクトできるのと同じように、コマンドの入力をファイルからリダイレクトすることもできます。としてgreater-than character > 出力リダイレクトに使用され、 less-than character < コマンドの入力をリダイレクトするために使用されます。
通常、標準入力から入力を受け取るコマンドは、この方法でファイルから入力をリダイレクトすることができます。たとえば、上記で生成されたファイルusersの行数をカウントするには、次のようにコマンドを実行できます。
$ wc -l users
2 users
$
実行すると、次の出力が表示されます。の標準入力をリダイレクトすることにより、ファイルの行数を数えることができます。wcファイルユーザーからのコマンド-
$ wc -l < users
2
$
wcコマンドの2つの形式によって生成される出力には違いがあることに注意してください。最初のケースでは、ファイルusersの名前が行数とともにリストされます。2番目のケースでは、そうではありません。
最初のケースでは、wcはファイルユーザーからの入力を読み取っていることを認識しています。2番目のケースでは、標準入力から入力を読み取っていることだけがわかっているため、ファイル名は表示されません。
ヒアドキュメント
A here document 入力をインタラクティブなシェルスクリプトまたはプログラムにリダイレクトするために使用されます。
対話型プログラムまたは対話型シェルスクリプトに必要な入力を提供することにより、ユーザーの操作なしでシェルスクリプト内で対話型プログラムを実行できます。
の一般的な形式 here ドキュメントは−
command << delimiter
document
delimiter
ここでシェルは <<指定された区切り文字を含む行が見つかるまで入力を読み取る命令としての演算子。次に、区切り文字を含む行までのすべての入力行が、コマンドの標準入力に入力されます。
区切り文字は、シェルに hereドキュメントが完成しました。それがないと、シェルは入力を永久に読み取り続けます。区切り文字は、スペースやタブを含まない単一の単語である必要があります。
以下はコマンドへの入力です wc -l 行の総数を数える-
$wc -l << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
3
$
あなたは使用することができます here document 次のようにスクリプトを使用して複数行を印刷するには-
#!/bin/sh
cat << EOF
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
EOF
実行すると、次の結果が得られます-
This is a simple lookup program
for good (and bad) restaurants
in Cape Town.
次のスクリプトは、 vi テキストエディタと入力をファイルに保存します test.txt。
#!/bin/sh
filename=test.txt
vi $filename <<EndOfCommands
i
This file was created automatically from
a shell script
^[
ZZ
EndOfCommands
vimをviとして機能させてこのスクリプトを実行すると、次のような出力が表示される可能性があります。
$ sh test.sh Vim: Warning: Input is not from a terminal $
スクリプトを実行すると、ファイルに次のように追加されます。 test.txt −
$ cat test.txt This file was created automatically from a shell script $
出力を破棄します
コマンドを実行する必要がある場合もありますが、出力を画面に表示したくない場合があります。このような場合、出力をファイルにリダイレクトして破棄できます/dev/null −
$ command > /dev/null
ここで、commandは実行するコマンドの名前です。ファイル/dev/null すべての入力を自動的に破棄する特別なファイルです。
コマンドの出力とそのエラー出力の両方を破棄するには、標準のリダイレクトを使用してリダイレクトします STDERR に STDOUT −
$ command > /dev/null 2>&1
ここに 2 を表す STDERR そして 1 を表す STDOUT。次のようにSTDOUTをSTDERRにリダイレクトすることにより、STDERRにメッセージを表示できます。
$ echo message 1>&2
リダイレクトコマンド
以下は、リダイレクトに使用できるコマンドの完全なリストです。
シニア番号 | コマンドと説明 |
---|---|
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 | | あるプログラムまたはプロセスから出力を取得し、それを別のプログラムに送信します |
ファイル記述子に注意してください 0 通常は標準入力(STDIN)であり、 1 は標準出力(STDOUT)であり、 2 標準エラー出力(STDERR)です。
この章では、シェル関数について詳しく説明します。関数を使用すると、スクリプトの全体的な機能をより小さな論理的なサブセクションに分割できます。これらのサブセクションは、必要に応じて個々のタスクを実行するために呼び出すことができます。
関数を使用して反復的なタスクを実行することは、作成するための優れた方法です code reuse。これは、現代のオブジェクト指向プログラミングの原則の重要な部分です。
シェル関数は、他のプログラミング言語のサブルーチン、プロシージャ、および関数に似ています。
関数の作成
関数を宣言するには、次の構文を使用するだけです。
function_name () {
list of commands
}
関数の名前は function_name、これは、スクリプトの他の場所から呼び出すために使用するものです。関数名の後に括弧を付け、その後に中括弧で囲まれたコマンドのリストを続ける必要があります。
例
次の例は、関数の使用法を示しています-
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World"
}
# Invoke your function
Hello
実行すると、次の出力が表示されます-
$./test.sh
Hello World
関数にパラメーターを渡す
関数の呼び出し中にパラメーターを受け入れる関数を定義できます。これらのパラメータは次のように表されます。$1、 $2 等々。
以下は、2つのパラメーターZaraとAliを渡し、これらのパラメーターを関数でキャプチャして出力する例です。
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2"
}
# Invoke your function
Hello Zara Ali
実行すると、次の結果が得られます-
$./test.sh
Hello World Zara Ali
関数からの戻り値
あなたが実行した場合 exit 関数内からのコマンドの場合、その効果は、関数の実行を終了するだけでなく、関数を呼び出したシェルプログラムの実行も終了することです。
代わりに、関数の実行を終了したい場合は、定義された関数から抜け出す方法があります。
状況に基づいて、関数を使用して関数から任意の値を返すことができます。 return 構文が次のコマンド-
return code
ここに code ここで選択するものは何でもかまいませんが、スクリプト全体のコンテキストで意味のある、または役立つものを選択する必要があります。
例
次の関数は値10−を返します
#!/bin/sh
# Define your function here
Hello () {
echo "Hello World $1 $2" return 10 } # Invoke your function Hello Zara Ali # Capture value returnd by last command ret=$?
echo "Return value is $ret"
実行すると、次の結果が得られます-
$./test.sh
Hello World Zara Ali
Return value is 10
入れ子関数
関数のより興味深い機能の1つは、関数自体や他の関数を呼び出すことができることです。自分自身を呼び出す関数は、recursive function。
次の例は、2つの関数のネストを示しています-
#!/bin/sh
# Calling one function from another
number_one () {
echo "This is the first function speaking..."
number_two
}
number_two () {
echo "This is now the second function speaking..."
}
# Calling function one.
number_one
実行すると、次の結果が得られます-
This is the first function speaking...
This is now the second function speaking...
プロンプトからの関数呼び出し
一般的に使用される関数の定義を内部に配置できます .profile。これらの定義は、ログインするたびに使用可能になり、コマンドプロンプトで使用できます。
または、定義をファイルにグループ化することもできます。 test.sh、次に、「-」と入力して、現在のシェルでファイルを実行します。
$. test.sh
これは、内部で定義された関数を引き起こす効果があります test.sh 次のように読み取られ、現在のシェルに定義されます-
$ number_one
This is the first function speaking...
This is now the second function speaking...
$
シェルから関数の定義を削除するには、unsetコマンドを .fオプション。このコマンドは、変数の定義をシェルに削除するためにも使用されます。
$ unset -f function_name
すべてのUnixコマンドには、いくつかのオプションおよび必須のオプションが付属しています。これらのコマンドの完全な構文を忘れることは非常に一般的です。
すべてのUnixコマンドとそのすべてのオプションを誰も覚えていない可能性があるため、Unixが開発段階にあったときから、これを軽減するためのオンラインヘルプを利用できます。
Unix版の Help files と呼ばれる man pages。コマンド名があり、その使用方法がわからない場合は、ManPagesがすべてのステップを支援します。
構文
これは、システムでの作業中にUnixコマンドの詳細を取得するのに役立つ簡単なコマンドです。
$man command
例
ヘルプを取得する必要があるコマンドがあるとします。あなたが知りたいと思うpwd 次に、次のコマンドを使用する必要があります-
$man pwd
上記のコマンドは、に関する完全な情報を提供するのに役立ちます pwdコマンド。詳細については、コマンドプロンプトで自分で試してください。
あなたはで完全な詳細を得ることができます man 次のコマンドを使用してコマンド自体-
$man man
マニュアルページセクション
マニュアルページは一般にセクションに分割されており、一般的にマニュアルページの作成者の好みによって異なります。次の表に、いくつかの一般的なセクションを示します-
シニア番号 | セクションと説明 |
---|---|
1 | NAME コマンドの名前 |
2 | SYNOPSIS コマンドの一般的な使用パラメーター |
3 | DESCRIPTION コマンドの機能を説明します |
4 | OPTIONS コマンドのすべての引数またはオプションについて説明します |
5 | SEE ALSO マニュアルページのコマンドに直接関連する、またはその機能に非常に類似している他のコマンドを一覧表示します |
6 | BUGS コマンドまたはその出力に存在する既知の問題またはバグについて説明します |
7 | EXAMPLES コマンドの使用方法を読者に理解させる一般的な使用例 |
8 | AUTHORS マニュアルページ/コマンドの作成者 |
要約すると、マニュアルページは重要なリソースであり、Unixシステムのコマンドやファイルに関する情報が必要な場合の最初の調査手段です。
便利なシェルコマンド
次のリンクは、最も重要で非常に頻繁に使用されるUnixシェルコマンドのリストを示しています。
コマンドの使用方法がわからない場合は、manページを使用してコマンドの詳細を確認してください。
これがUnixシェルのリストです-便利なコマンド
この章では、UnixでのSEDを使用した正規表現について詳しく説明します。
正規表現は、文字のいくつかのシーケンスを記述するために使用できる文字列です。正規表現は、次のようないくつかの異なるUnixコマンドで使用されます。ed、 sed、 awk、 grep、およびより限定された範囲で、 vi。
ここに SED を意味する stream editor。このストリーム指向のエディターは、スクリプトを実行するためだけに作成されました。したがって、入力したすべての入力は通過してSTDOUTに送られ、入力ファイルは変更されません。
sedを呼び出す
始める前に、ローカルコピーがあることを確認しましょう /etc/passwd 使用するテキストファイル sed。
前述のように、sedは、次のようにパイプを介してデータを送信することで呼び出すことができます。
$ cat /etc/passwd | sed
Usage: sed [OPTION]... {script-other-script} [input-file]...
-n, --quiet, --silent
suppress automatic printing of pattern space
-e script, --expression = script
...............................
ザ・ cat コマンドはの内容をダンプします /etc/passwd に sedパイプを通ってsedのパターンスペースに入る。パターンスペースは、sedが操作に使用する内部作業バッファーです。
sedの一般的な構文
以下はsed−の一般的な構文です。
/pattern/action
ここに、 pattern は正規表現であり、 action次の表に示すコマンドの1つです。場合pattern 省略、 action 上で見たように、すべての行に対して実行されます。
パターンを囲むスラッシュ文字(/)は、区切り文字として使用されるため、必須です。
シニア番号 | 範囲と説明 |
---|---|
1 | p 行を印刷します |
2 | d 行を削除します |
3 | s/pattern1/pattern2/ pattern1の最初の出現をpattern2に置き換えます |
sedですべての行を削除する
これで、sedを使用してすべての行を削除する方法を理解できます。sedを再度呼び出します。しかし、sedは現在、editing command delete line、一文字で示されます d −
$ cat /etc/passwd | sed 'd' $
次の例のように、パイプを介してファイルを送信してsedを呼び出す代わりに、ファイルからデータを読み取るようにsedに指示することができます。
次のコマンドは、catコマンドを除いて、前の例とまったく同じです。
$ sed -e 'd' /etc/passwd $
sedアドレス
sedはアドレスもサポートしています。アドレスは、ファイル内の特定の場所、または特定の編集コマンドを適用する必要がある範囲のいずれかです。sedがアドレスを検出しない場合、ファイルのすべての行で操作を実行します。
次のコマンドは、使用しているsedコマンドに基本アドレスを追加します-
$ cat /etc/passwd | sed '1d' |more daemon:x:1:1:daemon:/usr/sbin:/bin/sh bin:x:2:2:bin:/bin:/bin/sh sys:x:3:3:sys:/dev:/bin/sh sync:x:4:65534:sync:/bin:/bin/sync games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $
番号1が前に追加されていることに注意してください delete editコマンド。これは、ファイルの最初の行で編集コマンドを実行するようにsedに指示します。この例では、sedはの最初の行を削除します/etc/password ファイルの残りの部分を印刷します。
sedのアドレス範囲
これで、操作方法を理解できます the sed address ranges。では、ファイルから複数の行を削除したい場合はどうでしょうか。次のようにsedでアドレス範囲を指定できます-
$ cat /etc/passwd | sed '1, 5d' |more games:x:5:60:games:/usr/games:/bin/sh man:x:6:12:man:/var/cache/man:/bin/sh mail:x:8:8:mail:/var/mail:/bin/sh news:x:9:9:news:/var/spool/news:/bin/sh backup:x:34:34:backup:/var/backups:/bin/sh $
上記のコマンドは、1から5までのすべての行に適用されます。これにより、最初の5行が削除されます。
次のアドレス範囲を試してください-
シニア番号 | 範囲と説明 |
---|---|
1 | '4,10d' 4から始まる行目の10まで番目に削除されます |
2 | '10,4d' sedが逆方向に機能しないため、10行目のみが削除されます |
3 | '4,+5d' これはファイルの4行目と一致し、その行を削除し、次の5行を削除し続け、その後削除を中止して残りを印刷します。 |
4 | '2,5!d' これは、2から始まる以外のすべてを削除ND 5まで番目の行 |
5 | '1~3d' これにより、最初の行が削除され、次の3行がステップオーバーされてから、4番目の行が削除されます。Sedは、ファイルの終わりまでこのパターンを適用し続けます。 |
6 | '2~2d' これは、sedに、2行目を削除し、次の行をステップオーバーし、次の行を削除し、ファイルの終わりに達するまで繰り返すように指示します。 |
7 | '4,10p' 4番目から10番目までの行が印刷されます |
8 | '4,d' これにより構文エラーが発生します |
9 | ',10d' これも構文エラーを生成します |
Note −使用中 p アクション、あなたは使用する必要があります -nライン印刷の繰り返しを避けるためのオプション。次の2つのコマンドの違いを確認してください-
$ cat /etc/passwd | sed -n '1,3p' Check the above command without -n as follows − $ cat /etc/passwd | sed '1,3p'
代替コマンド
で示される置換コマンド sは、指定した文字列を、指定した他の文字列に置き換えます。
ある文字列を別の文字列に置き換えるには、sedに、最初の文字列が終了し、置換文字列が始まる場所に関する情報が必要です。このために、スラッシュを使用して2つの文字列を予約します(/) キャラクター。
次のコマンドは、文字列の行の最初のオカレンスを置き換えます root 文字列で amrood。
$ cat /etc/passwd | sed 's/root/amrood/'
amrood:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
..........................
sedは、行の最初の出現のみを置き換えることに注意することが非常に重要です。文字列ルートが1行に複数回出現する場合、最初の一致のみが置き換えられます。
sedがグローバル置換を実行するには、文字を追加します g 次のようにコマンドの最後まで-
$ cat /etc/passwd | sed 's/root/amrood/g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
...........................
置換フラグ
に加えて渡すことができる他の多くの便利なフラグがあります g フラグを立てると、一度に複数を指定できます。
シニア番号 | フラグと説明 |
---|---|
1 | g 最初の一致だけでなく、すべての一致を置き換えます |
2 | NUMBER NUMBER番目の一致のみを置き換えます |
3 | p 置換が行われた場合は、パターンスペースを出力します |
4 | w FILENAME 置換が行われた場合は、結果をFILENAMEに書き込みます |
5 | I or i 大文字と小文字を区別せずに一致します |
6 | M or m 特別な正規表現文字の通常の動作に加えて、^および $, this flag causes ^ to match the empty string after a newline and $ 改行の前の空の文字列と一致させる |
代替の文字列区切り文字の使用
スラッシュ文字を含む文字列を置換する必要があるとします。この場合、の後に指定された文字を指定することにより、別の区切り文字を指定できます。s。
$ cat /etc/passwd | sed 's:/root:/amrood:g'
amrood:x:0:0:amrood user:/amrood:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
上記の例では、 : として delimiter スラッシュの代わりに/検索しようとしたため /root 単純なルートの代わりに。
空のスペースとの交換
空の置換文字列を使用して、ルート文字列をから削除します /etc/passwd 完全にファイル-
$ cat /etc/passwd | sed 's/root//g'
:x:0:0::/:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
アドレス置換
文字列を置き換えたい場合 sh 文字列で quiet 10行目でのみ、次のように指定できます-
$ cat /etc/passwd | sed '10s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/quiet
同様に、アドレス範囲の置換を行うには、次のようなことを行うことができます。
$ cat /etc/passwd | sed '1,5s/sh/quiet/g'
root:x:0:0:root user:/root:/bin/quiet
daemon:x:1:1:daemon:/usr/sbin:/bin/quiet
bin:x:2:2:bin:/bin:/bin/quiet
sys:x:3:3:sys:/dev:/bin/quiet
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
出力からわかるように、最初の5行には文字列が含まれていました sh に変更されました quiet、しかし、残りの行はそのまま残されました。
マッチングコマンド
あなたは使用します p オプションと一緒に -n 次のようにすべての一致する行を印刷するオプション-
$ cat testing | sed -n '/root/p'
root:x:0:0:root user:/root:/bin/sh
[root@ip-72-167-112-17 amrood]# vi testing
root:x:0:0:root user:/root:/bin/sh
daemon:x:1:1:daemon:/usr/sbin:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
正規表現の使用
パターンを照合しながら、より柔軟性のある正規表現を使用できます。
デーモンで始まるすべての行に一致し、それらを削除する次の例を確認してください-
$ cat testing | sed '/^daemon/d'
root:x:0:0:root user:/root:/bin/sh
bin:x:2:2:bin:/bin:/bin/sh
sys:x:3:3:sys:/dev:/bin/sh
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/bin/sh
man:x:6:12:man:/var/cache/man:/bin/sh
mail:x:8:8:mail:/var/mail:/bin/sh
news:x:9:9:news:/var/spool/news:/bin/sh
backup:x:34:34:backup:/var/backups:/bin/sh
以下は、で終わるすべての行を削除する例です。 sh −
$ cat testing | sed '/sh$/d'
sync:x:4:65534:sync:/bin:/bin/sync
次の表に、正規表現で非常に役立つ4つの特殊文字を示します。
シニア番号 | キャラクターと説明 |
---|---|
1 | ^ 行の先頭に一致します |
2 | $ 行末に一致します |
3 | . 任意の1文字に一致します |
4 | * 前の文字の0回以上の出現に一致します |
5 | [chars] charsで指定された文字のいずれかに一致します。ここで、charsは文字のシーケンスです。-文字を使用して、文字の範囲を示すことができます。 |
一致する文字
の使用法を示すために、さらにいくつかの式を見てください metacharacters。たとえば、次のパターン-
シニア番号 | 表現と説明 |
---|---|
1 | /a.c/ 次のような文字列を含む行に一致します a+c、 a-c、 abc、 match、および a3c |
2 | /a*c/ 次のような文字列と同じ文字列に一致します ace、 yacc、および arctic |
3 | /[tT]he/ 文字列に一致します The そして the |
4 | /^$/ 空白行に一致 |
5 | /^.*$/ それが何であれ、行全体に一致します |
6 | / */ 1つ以上のスペースに一致します |
7 | /^$/ マッチス blank 行 |
次の表は、頻繁に使用される文字のセットを示しています-
シニア番号 | セットと説明 |
---|---|
1 | [a-z] 単一の小文字に一致します |
2 | [A-Z] 単一の大文字に一致します |
3 | [a-zA-Z] 1文字に一致 |
4 | [0-9] 単一の番号に一致します |
5 | [a-zA-Z0-9] 1つの文字または数字に一致します |
文字クラスキーワード
いくつかの特別なキーワードは一般的に利用可能です regexps、特に採用しているGNUユーティリティ regexps。これらは、物事を単純化し、読みやすさを向上させるため、sed正規表現に非常に役立ちます。
たとえば、文字 a through z とキャラクター A through Z、キーワードを持つそのような文字クラスの1つを構成します [[:alpha:]]
このコマンドは、英字クラスキーワードを使用して、次の行のみを出力します。 /etc/syslog.conf アルファベットの文字で始まるファイル-
$ cat /etc/syslog.conf | sed -n '/^[[:alpha:]]/p'
authpriv.* /var/log/secure
mail.* -/var/log/maillog
cron.* /var/log/cron
uucp,news.crit /var/log/spooler
local7.* /var/log/boot.log
次の表は、GNUsedで使用可能な文字クラスキーワードの完全なリストです。
シニア番号 | キャラクタークラスと説明 |
---|---|
1 | [[:alnum:]] 英数字[azAZ 0-9] |
2 | [[:alpha:]] アルファベット[azAZ] |
3 | [[:blank:]] 空白文字(スペースまたはタブ) |
4 | [[:cntrl:]] 制御文字 |
5 | [[:digit:]] 数字[0-9] |
6 | [[:graph:]] 表示されている文字(空白を除く) |
7 | [[:lower:]] 小文字[az] |
8 | [[:print:]] 印刷可能な文字(非制御文字) |
9 | [[:punct:]] 句読文字 |
10 | [[:space:]] 空白 |
11 | [[:upper:]] 大文字[AZ] |
12 | [[:xdigit:]] 16進数[0-9af AF] |
Aampersand参照
ザ・ sed metacharacter &一致したパターンの内容を表します。たとえば、というファイルがあるとしますphone.txt 次のような電話番号でいっぱい-
5555551212
5555551213
5555551214
6665551215
6665551216
7775551217
あなたは作りたい area code(最初の3桁)読みやすくするために括弧で囲みます。これを行うには、アンパサンド置換文字を使用できます-
$ sed -e 's/^[[:digit:]][[:digit:]][[:digit:]]/(&)/g' phone.txt
(555)5551212
(555)5551213
(555)5551214
(666)5551215
(666)5551216
(777)5551217
ここでパターン部分では、最初の3桁を照合してから、 & あなたはそれらの3桁を周囲に置き換えています parentheses。
複数のsedコマンドの使用
次のように、1つのsedコマンドで複数のsedコマンドを使用できます。
$ sed -e 'command1' -e 'command2' ... -e 'commandN' files
ここに command1 使って commandN前に説明したタイプのsedコマンドです。これらのコマンドは、ファイルによって指定されたファイルのリストの各行に適用されます。
同じメカニズムを使用して、上記の電話番号の例を次のように書くことができます-
$ sed -e 's/^[[:digit:]]\{3\}/(&)/g' \
-e 's/)[[:digit:]]\{3\}/&-/g' phone.txt
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
Note −上記の例では、文字クラスのキーワードを繰り返す代わりに [[:digit:]] 3回、交換しました \{3\}、これは、先行する正規表現が3回一致することを意味します。私達はまた使用しました\ 改行を付けるには、コマンドを実行する前にこれを削除する必要があります。
バックリファレンス
ザ・ ampersand metacharacterは便利ですが、さらに便利なのは、正規表現で特定の領域を定義する機能です。これらの特別な領域は、置換文字列の参照として使用できます。正規表現の特定の部分を定義することにより、特別な参照文字を使用してそれらの部分を参照することができます。
するために back references、最初にリージョンを定義してから、そのリージョンを参照する必要があります。地域を定義するには、backslashed parentheses関心のある各領域の周り。次に、円記号で囲む最初の領域は、によって参照されます。\1、2番目の地域 \2、 等々。
仮定 phone.txt 次のテキストがあります-
(555)555-1212
(555)555-1213
(555)555-1214
(666)555-1215
(666)555-1216
(777)555-1217
次のコマンドを試してください-
$ cat phone.txt | sed 's/\(.*)\)\(.*-\)\(.*$\)/Area \
code: \1 Second: \2 Third: \3/'
Area code: (555) Second: 555- Third: 1212
Area code: (555) Second: 555- Third: 1213
Area code: (555) Second: 555- Third: 1214
Area code: (666) Second: 555- Third: 1215
Area code: (666) Second: 555- Third: 1216
Area code: (777) Second: 555- Third: 1217
Note −上記の例では、括弧内の各正規表現は次のように逆参照されます。 \1、 \2等々。使用しました\ここで改行します。これは、コマンドを実行する前に削除する必要があります。
ファイルシステムは、パーティションまたはディスク上のファイルの論理的なコレクションです。パーティションは情報のコンテナであり、必要に応じてハードドライブ全体にまたがることができます。
ハードドライブには、通常1つのファイルシステムのみを含むさまざまなパーティションを含めることができます。たとえば、 /file system または別のものを含む /home file system。
パーティションごとに1つのファイルシステムを使用すると、さまざまなファイルシステムの論理的な保守と管理が可能になります。
DVD-ROM、USBデバイス、フロッピードライブなどの物理デバイスを含め、Unixのすべてがファイルと見なされます。
ディレクトリ構造
Unixは、逆さまのツリーによく似た階層ファイルシステム構造を使用し、ファイルシステムのベースにルート(/)があり、そこから他のすべてのディレクトリが広がっています。
Unixファイルシステムは、次のプロパティを持つファイルとディレクトリのコレクションです-
ルートディレクトリがあります(/)他のファイルとディレクトリが含まれています。
各ファイルまたはディレクトリは、その名前、それが存在するディレクトリ、および通常はと呼ばれる一意の識別子によって一意に識別されます。 inode。
慣例により、ルートディレクトリには inode の数 2 そしてその lost+found ディレクトリには inode の数 3。iノード番号0 そして 1使用されません。ファイルのiノード番号は、-i option に ls command。
自己完結型です。あるファイルシステムと別のファイルシステムの間に依存関係はありません。
ディレクトリには特定の目的があり、通常、ファイルを簡単に見つけるために同じタイプの情報を保持します。以下は、Unixのメジャーバージョンに存在するディレクトリです。
シニア番号 | ディレクトリと説明 |
---|---|
1 | / これはルートディレクトリであり、ファイル構造の最上位に必要なディレクトリのみが含まれている必要があります |
2 | /bin これは、実行可能ファイルが配置されている場所です。これらのファイルはすべてのユーザーが利用できます |
3 | /dev これらはデバイスドライバーです |
4 | /etc スーパーバイザディレクトリコマンド、構成ファイル、ディスク構成ファイル、有効なユーザーリスト、グループ、イーサネット、ホスト、重要なメッセージの送信先 |
5 | /lib 共有ライブラリファイルと、場合によっては他のカーネル関連ファイルが含まれます |
6 | /boot システムを起動するためのファイルが含まれています |
7 | /home ユーザーおよびその他のアカウントのホームディレクトリが含まれます |
8 | /mnt 次のような他の一時ファイルシステムをマウントするために使用されます cdrom そして floppy のために CD-ROM ドライブと floppy diskette drive、それぞれ |
9 | /proc によってファイルとしてマークされたすべてのプロセスが含まれます process number またはシステムに動的なその他の情報 |
10 | /tmp システム起動の間に使用される一時ファイルを保持します |
11 | /usr その他の目的で使用され、多くのユーザーが使用できます。管理コマンド、共有ファイル、ライブラリファイルなどが含まれます |
12 | /var 通常、ログファイルや印刷ファイルなどの可変長ファイル、および可変量のデータを含む可能性のあるその他のタイプのファイルが含まれます |
13 | /sbin 通常はシステム管理用のバイナリ(実行可能)ファイルが含まれています。例えば、fdisk そして ifconfig utlities |
14 | /kernel カーネルファイルが含まれています |
ファイルシステムのナビゲート
ファイルシステムの基本を理解したので、必要なファイルへのナビゲートを開始できます。次のコマンドは、システムをナビゲートするために使用されます-
シニア番号 | コマンドと説明 |
---|---|
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にある場合は、ファイルの場所を表示します |
マンページヘルプを使用して、ここに記載されている各コマンドの完全な構文を確認できます。
dfコマンド
パーティションスペースを管理する最初の方法は、 df (disk free)コマンド。コマンドdf -k (disk free) を表示します disk space usage in kilobytes、以下に示すように-
$df -k Filesystem 1K-blocks Used Available Use% Mounted on /dev/vzfs 10485760 7836644 2649116 75% / /devices 0 0 0 0% /devices $
などのいくつかのディレクトリ /devicesは、kbytes、used、およびavail列に0を示し、容量に0%を示します。これらは特別な(または仮想)ファイルシステムであり、/の下のディスクにありますが、それ自体ではディスク領域を消費しません。
ザ・ df -k出力は通常、すべてのUnixシステムで同じです。これが通常含まれているものです-
シニア番号 | 列と説明 |
---|---|
1 | Filesystem 物理ファイルシステム名 |
2 | kbytes 記憶媒体で使用可能な合計キロバイトのスペース |
3 | used 使用されたスペースの合計キロバイト(ファイルによる) |
4 | avail 使用可能な合計キロバイト |
5 | capacity ファイルによって使用される合計スペースのパーセンテージ |
6 | Mounted on ファイルシステムがマウントされているもの |
あなたは使用することができます -h (human readable) option サイズをわかりやすい形式で表示します。
デュコマンド
ザ・ du (disk usage) command 特定のディレクトリのディスクスペース使用量を表示するディレクトリを指定できます。
このコマンドは、特定のディレクトリが使用しているスペースの量を確認する場合に役立ちます。次のコマンドは、各ディレクトリによって消費されたブロックの数を表示します。システムに応じて、1つのブロックに512バイトまたは1キロバイトかかる場合があります。
$du /etc 10 /etc/cron.d 126 /etc/default 6 /etc/dfs ... $
ザ・ -h オプションは出力を理解しやすくします−
$du -h /etc 5k /etc/cron.d 63k /etc/default 3k /etc/dfs ... $
ファイルシステムのマウント
システムで使用できるようにするには、ファイルシステムをマウントする必要があります。システムに現在マウントされている(使用可能な)ものを確認するには、次のコマンドを使用します-
$ mount /dev/vzfs on / type reiserfs (rw,usrquota,grpquota) proc on /proc type proc (rw,nodiratime) devpts on /dev/pts type devpts (rw) $
ザ・ /mntUnixの規則により、ディレクトリは一時的なマウント(CDROMドライブ、リモートネットワークドライブ、フロッピードライブなど)が配置される場所です。ファイルシステムをマウントする必要がある場合は、次の構文でmountコマンドを使用できます-
mount -t file_system_type device_to_mount directory_to_mount_to
たとえば、マウントしたい場合 CD-ROM ディレクトリへ /mnt/cdrom、入力できます-
$ mount -t iso9660 /dev/cdrom /mnt/cdrom
これは、CD-ROMデバイスが呼び出されることを前提としています /dev/cdrom そしてあなたはそれをマウントしたい /mnt/cdrom。より具体的な情報またはタイプmountについては、マウントのマニュアルページを参照してください。-h ヘルプ情報については、コマンドラインで。
マウント後、cdコマンドを使用して、作成したマウントポイントを介して新しく使用可能なファイルシステムをナビゲートできます。
ファイルシステムのアンマウント
システムからファイルシステムをアンマウント(削除)するには、 umount マウントポイントまたはデバイスを識別することによるコマンド。
例えば、 to unmount cdrom、次のコマンドを使用します-
$ umount /dev/cdrom
ザ・ mount command ファイルシステムにアクセスできますが、最近のほとんどのUnixシステムでは、 automount function このプロセスをユーザーから見えなくし、介入を必要としません。
ユーザーとグループの割り当て
ユーザーとグループのクォータは、特定のグループ内の単一のユーザーまたはすべてのユーザーが使用するスペースの量を、管理者が定義した値に制限できるメカニズムを提供します。
クォータは2つの制限の周りで動作し、スペースの量またはディスクブロックの数が管理者が定義した制限を超え始めた場合に、ユーザーが何らかのアクションを実行できるようにします。
Soft Limit −ユーザーが定義された制限を超えた場合、ユーザーがスペースを解放できる猶予期間があります。
Hard Limit −猶予期間に関係なく、ハード制限に達すると、それ以上ファイルまたはブロックを割り当てることができなくなります。
クォータを管理するためのコマンドがいくつかあります-
シニア番号 | コマンドと説明 |
---|---|
1 | quota グループのユーザーのディスク使用量と制限を表示します |
2 | edquota これはクォータエディタです。ユーザーまたはグループのクォータは、このコマンドを使用して編集できます |
3 | quotacheck ファイルシステムのディスク使用量をスキャンし、クォータファイルを作成、チェック、修復します |
4 | setquota これはコマンドラインクォータエディタです |
5 | quotaon これにより、1つ以上のファイルシステムでディスククォータを有効にする必要があることがシステムに通知されます。 |
6 | quotaoff これにより、1つ以上のファイルシステムでディスククォータを無効にする必要があることがシステムに通知されます。 |
7 | repquota これにより、指定したファイルシステムのディスク使用量とクォータの概要が出力されます。 |
マンページヘルプを使用して、ここに記載されている各コマンドの完全な構文を確認できます。
この章では、Unixでのユーザー管理について詳しく説明します。
Unixシステムには3つのタイプのアカウントがあります-
ルートアカウント
これは、 superuserそして、システムを完全かつ自由に制御できるでしょう。スーパーユーザーは、制限なしで任意のコマンドを実行できます。このユーザーは、システム管理者と見なす必要があります。
システムアカウント
システムアカウントは、メールアカウントなどのシステム固有のコンポーネントの操作に必要なアカウントです。 sshdアカウント。これらのアカウントは通常、システムの特定の機能に必要であり、アカウントを変更するとシステムに悪影響を与える可能性があります。
ユーザーアカウント
ユーザーアカウントは、ユーザーおよびユーザーのグループにシステムへのインタラクティブなアクセスを提供します。一般ユーザーは通常、これらのアカウントに割り当てられ、通常、重要なシステムファイルおよびディレクトリへのアクセスが制限されています。
Unixは、多数のアカウントを論理的にグループ化するグループアカウントの概念をサポートしています。すべてのアカウントは、別のグループアカウントの一部になります。Unixグループは、ファイルのアクセス許可とプロセス管理の処理において重要な役割を果たします。
ユーザーとグループの管理
4つの主要なユーザー管理ファイルがあります-
/etc/passwd−ユーザーアカウントとパスワードの情報を保持します。このファイルには、Unixシステムのアカウントに関する情報の大部分が含まれています。
/etc/shadow−対応するアカウントの暗号化されたパスワードを保持します。すべてのシステムがこのファイルをサポートしているわけではありません。
/etc/group −このファイルには、各アカウントのグループ情報が含まれています。
/etc/gshadow −このファイルには、安全なグループアカウント情報が含まれています。
を使用して上記のすべてのファイルを確認してください cat コマンド。
次の表に、アカウントとグループを作成および管理するために大部分のUnixシステムで使用できるコマンドを示します。
シニア番号 | コマンドと説明 |
---|---|
1 | useradd システムにアカウントを追加します |
2 | usermod アカウント属性を変更します |
3 | userdel システムからアカウントを削除します |
4 | groupadd システムにグループを追加します |
5 | groupmod グループ属性を変更します |
6 | groupdel システムからグループを削除します |
マンページヘルプを使用して、ここに記載されている各コマンドの完全な構文を確認できます。
グループを作成する
これで、グループの作成方法を理解できます。このため、アカウントを作成する前にグループを作成する必要があります。そうしないと、システム内の既存のグループを利用できます。すべてのグループがリストされています/etc/groups ファイル。
デフォルトのグループはすべてシステムアカウント固有のグループであり、通常のアカウントに使用することはお勧めしません。したがって、以下は新しいグループアカウントを作成するための構文です-
groupadd [-g gid [-o]] [-r] [-f] groupname
次の表にパラメータを示します-
シニア番号 | オプションと説明 |
---|---|
1 | -g GID グループのIDの数値 |
2 | -o このオプションを使用すると、一意でないGIDを持つグループを追加できます |
3 | -r このフラグは指示します groupadd システムアカウントを追加するには |
4 | -f このオプションを使用すると、指定したグループがすでに存在する場合、成功ステータスで終了します。-gを使用すると、指定したGIDがすでに存在する場合、他の(一意の)GIDが選択されます。 |
5 | groupname 作成される実際のグループ名 |
パラメータを指定しない場合、システムはデフォルト値を使用します。
次の例では、デフォルト値を使用して開発者グループを作成します。これは、ほとんどの管理者にとって非常に受け入れられます。
$ groupadd developers
グループを変更する
グループを変更するには、 groupmod 構文-
$ groupmod -n new_modified_group_name old_group_name
Developers_2グループ名をdeveloperに変更するには、「-」と入力します。
$ groupmod -n developer developer_2
財務GIDを545に変更する方法は次のとおりです-
$ groupmod -g 545 developer
グループを削除する
これで、グループを削除する方法を理解できました。既存のグループを削除するには、必要なのはgroupdel command そしてその group name。財務グループを削除するには、コマンドは次のとおりです。
$ groupdel developer
これにより、グループのみが削除され、そのグループに関連付けられているファイルは削除されません。ファイルには、所有者が引き続きアクセスできます。
アカウントを作成する
Unixシステムで新しいアカウントを作成する方法を見てみましょう。以下は、ユーザーのアカウントを作成するための構文です-
useradd -d homedir -g groupname -m -s shell -u userid accountname
次の表にパラメータを示します-
シニア番号 | オプションと説明 |
---|---|
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。このユーザーには、KornShellが割り当てられています。
$ useradd -d /home/mcmohd -g developers -s /bin/ksh mcmohd
上記のコマンドを発行する前に、を使用して作成された開発者グループがすでにあることを確認してくださいgroupadd コマンド。
アカウントが作成されると、を使用してそのパスワードを設定できます passwd 次のようにコマンド-
$ passwd mcmohd20
Changing password for user mcmohd20.
New UNIX password:
Retype new UNIX password:
passwd: all authentication tokens updated successfully.
入力すると passwd accountname、スーパーユーザーであれば、パスワードを変更するオプションがあります。それ以外の場合は、アカウント名を指定せずに、同じコマンドを使用してパスワードのみを変更できます。
アカウントを変更する
ザ・ usermodコマンドを使用すると、コマンドラインから既存のアカウントに変更を加えることができます。と同じ引数を使用しますuseradd コマンドに加えて、アカウント名を変更できる-l引数を追加します。
たとえば、アカウント名を変更するには mcmohd に mcmohd20 それに応じてホームディレクトリを変更するには、次のコマンドを発行する必要があります-
$ usermod -d /home/mcmohd20 -m -l mcmohd mcmohd20
アカウントを削除する
ザ・ userdelコマンドを使用して、既存のユーザーを削除できます。注意して使用しないと、これは非常に危険なコマンドです。
コマンドに使用できる引数またはオプションは1つだけです .r、アカウントのホームディレクトリとメールファイルを削除します。
たとえば、アカウントmcmohd20を削除するには、次のコマンドを発行します-
$ userdel -r mcmohd20
バックアップのためにホームディレクトリを保持する場合は、 -rオプション。後で必要に応じてホームディレクトリを削除できます。
この章では、Unixでのシステムパフォーマンスについて詳しく説明します。
Unixシステムのパフォーマンスを監視および管理するために利用できるいくつかの無料ツールを紹介します。これらのツールは、Unix環境でのパフォーマンスの問題を診断および修正する方法に関するガイドラインも提供します。
Unixには、監視と調整が必要な次の主要なリソースタイプがあります-
CPU
Memory
Disk space
Communications lines
I/O Time
Network Time
Applications programs
パフォーマンスコンポーネント
次の表に、システム時間を費やす5つの主要コンポーネントを示します。
シニア番号 | コンポーネントと説明 |
---|---|
1 | User State CPU CPUがユーザーの状態でユーザーのプログラムを実行するのに費やす実際の時間。これには、ライブラリ呼び出しの実行に費やされた時間が含まれますが、カーネルに代わって費やされた時間は含まれません。 |
2 | System State CPU これは、CPUがこのプログラムに代わってシステム状態で費やす時間です。すべてI/O routinesカーネルサービスが必要です。プログラマーは、I / O転送をブロックすることでこの値に影響を与えることができます |
3 | I/O Time and Network Time これは、データの移動とI / O要求の処理に費やされた時間です。 |
4 | Virtual Memory Performance これには、コンテキストの切り替えとスワッピングが含まれます |
5 | Application Program 他のプログラムの実行に費やされた時間-別のアプリケーションが現在CPUを搭載しているために、システムがこのアプリケーションにサービスを提供していない場合 |
パフォーマンスツール
Unixは、Unixシステムのパフォーマンスを測定および微調整するための次の重要なツールを提供します-
シニア番号 | コマンドと説明 |
---|---|
1 | nice/renice スケジュールの優先度を変更してプログラムを実行します |
2 | netstat ネットワーク接続、ルーティングテーブル、インターフェイス統計、マスカレード接続、およびマルチキャストメンバーシップを出力します |
3 | time 簡単なコマンドの時間を計ったり、リソースを使用したりするのに役立ちます |
4 | uptime これはシステム負荷平均です |
5 | ps 現在のプロセスのスナップショットを報告します |
6 | vmstat 仮想メモリ統計を報告します |
7 | gprof コールグラフプロファイルデータを表示します |
8 | prof プロセスプロファイリングを容易にします |
9 | top システムタスクを表示します |
マンページヘルプを使用して、ここに記載されている各コマンドの完全な構文を確認できます。
この章では、Unixでのシステムロギングについて詳しく説明します。
Unixシステムには、非常に柔軟で強力なロギングシステムがあり、想像できるほとんどすべてのものを記録し、ログを操作して必要な情報を取得できます。
Unixの多くのバージョンは、次のような汎用ログ機能を提供します。 syslog。情報をログに記録する必要がある個々のプログラムは、syslogに情報を送信します。
Unix Syslogは、ホストで構成可能な統一されたシステムロギング機能です。システムは、プログラムを実行する一元化されたシステムロギングプロセスを使用します/etc/syslogd または /etc/syslog。
システムロガーの操作は非常に簡単です。プログラムはログエントリをsyslogdに送信し、syslogdは設定ファイルを参照します/etc/syslogd.conf または /etc/syslog そして、一致するものが見つかると、ログメッセージを目的のログファイルに書き込みます。
理解しておくべき4つの基本的なsyslog用語があります-
シニア番号 | 用語と説明 |
---|---|
1 | Facility ログメッセージを送信したアプリケーションまたはプロセスを説明するために使用される識別子。たとえば、メール、カーネル、FTPなどです。 |
2 | Priority メッセージの重要性の指標。レベルは、デバッグ情報から重要なイベントまで、ガイドラインとしてsyslog内で定義されます。 |
3 | Selector 1つ以上の施設とレベルの組み合わせ。着信イベントがセレクターと一致すると、アクションが実行されます。 |
4 | Action セレクターに一致する着信メッセージはどうなりますか—アクションは、メッセージをログファイルに書き込んだり、メッセージをコンソールまたは他のデバイスにエコーしたり、ログインしたユーザーにメッセージを書き込んだり、別のsyslogサーバーにメッセージを送信したりできます。 |
Syslogファシリティ
これで、syslog機能について理解できます。セレクターで利用できる機能は次のとおりです。すべての機能がUnixのすべてのバージョンに存在するわけではありません。
施設 | 説明 |
---|---|
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の優先順位は、次の表にまとめられています。
シニア番号 | 優先順位と説明 |
---|---|
1 | emerg 差し迫ったシステムクラッシュなどの緊急事態は、通常、すべてのユーザーにブロードキャストされます |
2 | alert システムデータベースの破損など、すぐに修正する必要のある状態 |
3 | crit ハードウェアエラーなどの重大な状態 |
4 | err 通常のエラー |
5 | Warning 警告 |
6 | notice エラーではないが、特別な方法で処理する必要がある可能性のある状態 |
7 | info 情報メッセージ |
8 | debug プログラムのデバッグ時に使用されるメッセージ |
9 | none メッセージをログに記録しないように指定するために使用される疑似レベル |
施設とレベルの組み合わせにより、ログに記録される内容とその情報の行き先を識別できます。
各プログラムがメッセージをシステムロガーに忠実に送信すると、ロガーはセレクターで定義されたレベルに基づいて、何を追跡し、何を破棄するかを決定します。
レベルを指定すると、システムはそのレベル以上のすべてを追跡します。
/etc/syslog.confファイル
ザ・ /etc/syslog.confファイルは、メッセージがログに記録される場所を制御します。典型的なsyslog.conf ファイルは次のようになります-
*.err;kern.debug;auth.notice /dev/console
daemon,auth.notice /var/log/messages
lpr.info /var/log/lpr.log
mail.* /var/log/mail.log
ftp.* /var/log/ftp.log
auth.* @prep.ai.mit.edu
auth.* root,amrood
netinfo.err /var/log/netinfo.log
install.* /var/log/install.log
*.emerg *
*.alert |program_name
mark.* /dev/console
ファイルの各行には2つの部分が含まれています-
A message selectorログに記録するメッセージの種類を指定します。たとえば、カーネルからのすべてのエラーメッセージまたはすべてのデバッグメッセージ。
アン action fieldそれはメッセージで何をすべきかを示しています。たとえば、ファイルに入れたり、ユーザーの端末にメッセージを送信したりします。
上記の構成の注目すべき点は次のとおりです-
メッセージセレクタには2つの部分があります。 a facility そして a priority。たとえば、kern.debugは、カーネル(ファシリティ)によって生成されたすべてのデバッグメッセージ(優先度)を選択します。
メッセージセレクタkern.debugは、debugよりも大きいすべての優先度を選択します。
施設または優先度の代わりのアスタリスクは「すべて」を示します。例えば、*.debug すべてのデバッグメッセージを意味しますが、 kern.* カーネルによって生成されたすべてのメッセージを意味します。
カンマを使用して複数の機能を指定することもできます。セミコロンを使用して、2つ以上のセレクターをグループ化できます。
ロギングアクション
アクションフィールドは、5つのアクションのいずれかを指定します-
メッセージをファイルまたはデバイスに記録します。例えば、/var/log/lpr.log または /dev/console。
ユーザーにメッセージを送信します。複数のユーザー名をコンマで区切って指定できます。たとえば、root、amrood。
すべてのユーザーにメッセージを送信します。この場合、アクションフィールドはアスタリスクで構成されます。例えば、 *。
メッセージをプログラムにパイプします。この場合、プログラムはUnixパイプ記号(|)の後に指定されます。
別のホストのsyslogにメッセージを送信します。この場合、アクションフィールドは、アットマークが前に付いたホスト名で構成されます。たとえば、@ tutorialspoint.comです。
ロガーコマンド
Unixは loggerコマンド。これは、システムロギングを処理するための非常に便利なコマンドです。ザ・logger コマンドはロギングメッセージをsyslogdデーモンに送信し、その結果、システムロギングを引き起こします。
これは、コマンドラインからいつでも確認できることを意味します。 syslogdデーモンとその構成。loggerコマンドは、コマンドラインからシステムログファイルに1行のエントリを追加する方法を提供します。
コマンドの形式は次のとおりです。
logger [-i] [-f file] [-p priority] [-t tag] [message]...
パラメータの詳細は次のとおりです-
シニア番号 | オプションと説明 |
---|---|
1 | -f filename ログに記録するメッセージとしてファイルファイル名の内容を使用します。 |
2 | -i ロガープロセスのプロセスIDを各行に記録します。 |
3 | -p priority 指定された優先度(指定されたセレクタエントリ)でメッセージを入力します。メッセージの優先度は、数値で指定することも、facility.priorityのペアとして指定することもできます。デフォルトの優先度はuser.noticeです。 |
4 | -t tag ログに追加された各行を指定されたタグでマークします。 |
5 | message 内容がスペースで区切られた、指定された順序で連結されている文字列引数。 |
あなたは使用することができますマンページのヘルプをこのコマンドの完全な構文を確認すること。
ログローテーション
ログファイルは非常に速く成長し、大量のディスク領域を消費する傾向があります。ログローテーションを有効にするために、ほとんどのディストリビューションは次のようなツールを使用しますnewsyslog または logrotate。
これらのツールは、を使用して頻繁に呼び出す必要があります cron daemon。詳細については、manページでnewsyslogまたはlogrotateを確認してください。
重要なログの場所
すべてのシステムアプリケーションは、ログファイルを作成します。 /var/logおよびそのサブディレクトリ。ここにいくつかの重要なアプリケーションとそれに対応するログディレクトリがあります-
応用 | ディレクトリ |
---|---|
httpd | / var / log / httpd |
サンバ | / var / log / samba |
cron | / var / log / |
郵便物 | / var / log / |
mysql | / var / log / |
この章では、Unixのシグナルとトラップについて詳しく説明します。
シグナルは、重要なイベントが発生したことを示すためにプログラムに送信されるソフトウェア割り込みです。イベントは、ユーザーの要求から不正なメモリアクセスエラーまでさまざまです。割り込み信号などの一部の信号は、ユーザーがプログラムに通常の制御フローではないことを実行するように要求したことを示します。
次の表に、発生する可能性があり、プログラムで使用する可能性のある一般的なシグナルを示します。
信号名 | 信号番号 | 説明 |
---|---|---|
SIGHUP | 1 | 制御端末で切断が検出されたか、制御プロセスが停止しました |
シギント | 2 | ユーザーが割り込み信号を送信した場合に発行されます(Ctrl + C) |
SIGQUIT | 3 | ユーザーが終了信号を送信した場合に発行されます(Ctrl + D) |
SIGFPE | 8 | 違法な数学演算が試みられた場合に発行されます |
SIGKILL | 9 | プロセスがこのシグナルを受け取った場合、プロセスはすぐに終了する必要があり、クリーンアップ操作は実行されません。 |
SIGALRM | 14 | 目覚まし時計信号(タイマーに使用) |
SIGTERM | 15 | ソフトウェア終了信号(デフォルトではkillによって送信されます) |
シグナルのリスト
システムでサポートされているすべての信号を一覧表示する簡単な方法があります。ただ発行するkill -l コマンドを実行すると、サポートされているすべての信号が表示されます-
$ kill -l
1) SIGHUP 2) SIGINT 3) SIGQUIT 4) SIGILL
5) SIGTRAP 6) SIGABRT 7) SIGBUS 8) SIGFPE
9) SIGKILL 10) SIGUSR1 11) SIGSEGV 12) SIGUSR2
13) SIGPIPE 14) SIGALRM 15) SIGTERM 16) SIGSTKFLT
17) SIGCHLD 18) SIGCONT 19) SIGSTOP 20) SIGTSTP
21) SIGTTIN 22) SIGTTOU 23) SIGURG 24) SIGXCPU
25) SIGXFSZ 26) SIGVTALRM 27) SIGPROF 28) SIGWINCH
29) SIGIO 30) SIGPWR 31) SIGSYS 34) SIGRTMIN
35) SIGRTMIN+1 36) SIGRTMIN+2 37) SIGRTMIN+3 38) SIGRTMIN+4
39) SIGRTMIN+5 40) SIGRTMIN+6 41) SIGRTMIN+7 42) SIGRTMIN+8
43) SIGRTMIN+9 44) SIGRTMIN+10 45) SIGRTMIN+11 46) SIGRTMIN+12
47) SIGRTMIN+13 48) SIGRTMIN+14 49) SIGRTMIN+15 50) SIGRTMAX-14
51) SIGRTMAX-13 52) SIGRTMAX-12 53) SIGRTMAX-11 54) SIGRTMAX-10
55) SIGRTMAX-9 56) SIGRTMAX-8 57) SIGRTMAX-7 58) SIGRTMAX-6
59) SIGRTMAX-5 60) SIGRTMAX-4 61) SIGRTMAX-3 62) SIGRTMAX-2
63) SIGRTMAX-1 64) SIGRTMAX
信号の実際のリストは、Solaris、HP-UX、およびLinuxによって異なります。
デフォルトのアクション
すべてのシグナルには、デフォルトのアクションが関連付けられています。シグナルのデフォルトのアクションは、スクリプトまたはプログラムがシグナルを受信したときに実行するアクションです。
可能なデフォルトアクションのいくつかは次のとおりです。
プロセスを終了します。
信号を無視します。
ダンプコア。これにより、というファイルが作成されますcore シグナルを受信したときのプロセスのメモリイメージが含まれています。
プロセスを停止します。
停止したプロセスを続行します。
信号の送信
プログラムまたはスクリプトにシグナルを配信する方法はいくつかあります。最も一般的なものの1つは、ユーザーが入力することですCONTROL-C または INTERRUPT key スクリプトの実行中。
を押すと Ctrl+C キー、 SIGINT スクリプトに送信され、定義されたデフォルトのアクションに従ってスクリプトが終了します。
信号を配信するための他の一般的な方法は、 kill command、その構文は次のとおりです-
$ kill -signal pid
ここに signal 配信する信号の番号または名前であり、 pidシグナルの送信先となるプロセスIDです。例-
$ kill -1 1001
上記のコマンドは、で実行されているプログラムにHUPまたはハングアップ信号を送信します。 process ID 1001。同じプロセスにkillシグナルを送信するには、次のコマンドを使用します-
$ kill -9 1001
これにより、で実行されているプロセスが強制終了されます process ID 1001。
信号のトラップ
押すとCtrlキー+ Cシェルプログラムの実行中にあなたの末端またはブレークキーを、通常、そのプログラムを直ちに終了し、あなたのコマンドプロンプトに戻ります。これは必ずしも望ましいとは限りません。たとえば、クリーンアップされない一時ファイルの束を残してしまう可能性があります。
これらの信号のトラップは非常に簡単で、trapコマンドの構文は次のとおりです。
$ trap commands signals
ここで、commandは任意の有効なUnixコマンド、またはユーザー定義関数にすることができ、signalはトラップする任意の数のシグナルのリストにすることができます。
シェルスクリプトでのトラップの一般的な使用法は2つあります-
- 一時ファイルをクリーンアップします
- 信号を無視する
一時ファイルのクリーンアップ
トラップコマンドの例として、以下は、誰かが端末からプログラムを中止しようとした場合に、いくつかのファイルを削除して終了する方法を示しています。
$ trap "rm -f $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 2
このトラップが実行されるシェルプログラムのポイントから、2つのファイル work1$$ そして dataout$$ プログラムが信号番号2を受信すると、自動的に削除されます。
したがって、このトラップの実行後にユーザーがプログラムの実行を中断した場合、これら2つのファイルが確実にクリーンアップされます。ザ・exit 次のコマンド rm これがないと、信号を受信したときに中断した時点でプログラム内で実行が続行されるため、必要です。
信号番号1は hangup。誰かが意図的に回線を切断したか、回線が誤って切断されました。
この場合、シグナル番号1をシグナルのリストに追加することにより、前述のトラップを変更して、指定された2つのファイルを削除することもできます。
$ trap "rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit" 1 2
これで、回線がハングアップした場合、またはCtrl + Cキーが押された場合に、これらのファイルが削除されます。
トラップするように指定されたコマンドに複数のコマンドが含まれている場合は、引用符で囲む必要があります。また、トラップコマンドが実行されたとき、およびリストされた信号の1つが受信されたときに、シェルがコマンドラインをスキャンすることにも注意してください。
したがって、前の例では、 WORKDIR そして $$トラップコマンドの実行時に置換されます。信号1または2のいずれかが受信されたときにこの置換を実行したい場合は、コマンドを一重引用符で囲むことができます。
$ trap 'rm $WORKDIR/work1$$ $WORKDIR/dataout$$; exit' 1 2
信号を無視する
トラップ用にリストされたコマンドがnullの場合、指定された信号は受信時に無視されます。たとえば、コマンド-
$ trap '' 2
これは、割り込み信号を無視することを指定します。中断したくない操作を実行するときは、特定の信号を無視したい場合があります。無視する複数の信号を次のように指定できます-
$ trap '' 1 2 3 15
シグナルを無視するには、最初の引数を指定する必要があり、それ自体が別の意味を持つ次の引数を記述することと同じではないことに注意してください。
$ trap 2
シグナルを無視すると、すべてのサブシェルもそのシグナルを無視します。ただし、シグナルの受信時に実行するアクションを指定した場合でも、すべてのサブシェルはそのシグナルの受信時にデフォルトのアクションを実行します。
トラップのリセット
シグナルの受信時に実行されるデフォルトのアクションを変更した後、最初の引数を単に省略した場合は、トラップを使用して再び元に戻すことができます。だから−
$ trap 1 2
これにより、信号1または2の受信時に実行されるアクションがデフォルトにリセットされます。