Linux スクリプトの起動条件ネットワーク。 コンピューターの起動時に独自の自動実行スクリプトを作成します。 # プログラムのインストール

シェル スクリプトは、複数回使用できる一連のコマンドです。 このシーケンスは、通常、コマンド ラインでスクリプトの名前を入力することによって実行されます。 また、cron を使用すると、スクリプトを使用してタスクを自動化できます。 スクリプトのもう 1 つの用途は、UNIX システムの起動とシャットダウンです。この場合、init スクリプトはデーモンとサービスの操作を定義します。

シェル スクリプトを作成するには、エディターで新しい空のファイルを開きます。 これには、任意のテキスト エディターを使用できます。 ヴィム, emacs, gedit, dtpad等。; どれでも構いません。 ただし、次のようなより高度なエディターを選択できます。 ヴィムまた emacs、このようなエディターは、シェルと Bash の構文を認識するように構成できるため、括弧やセミコロンの閉じ忘れなど、初心者がよく犯す間違いを防ぐのに役立ちます。

コマンド ラインで入力する場合と同様に、新しい空のファイルに UNIX コマンドを入力します。 前の章 (セクション「コマンドの実行」を参照) で説明したように、コマンドは、シェル関数、組み込みコマンド、UNIX コマンド、またはその他のスクリプトにすることができます。

スクリプトの機能を示すニーモニック名をスクリプトに選択します。 スクリプト名が既存のコマンドと競合しないことを確認してください。 混乱を避けるために、多くの場合、スクリプト名は .sh 拡張子で終わります。 ただし、選択した名前と同じ名前の他のスクリプトがシステムに存在する場合があります。 コマンド どれの, ここでおよびその他の場合、この名前の既存のプログラムとファイルに関する情報を探します。

which -a script_name whereis script_name locate script_name ( 約トランス。 : script_name をスクリプトの名前に置き換えます).

スクリプト script1.sh

この例では、コマンドを使用します エコー、Bashに組み込まれており、出力が生成される前に何をする必要があるかをユーザーに通知します。 スクリプトが何を行っているかをユーザーに知らせることを強くお勧めします。 スクリプトが何もしなかったように思われた場合でも、彼らは緊張していませんでした. 第 8 章「インタラクティブ スクリプトの作成」で、ユーザーへの警告のトピックに戻ります。


図2.1。 スクリプト script1.sh

自分用に同じスクリプトを作成します。 ~/scripts ディレクトリを作成してスクリプトを格納することをお勧めします。 このディレクトリを PATH 変数の内容に追加します。

エクスポート PATH="$PATH:~/scripts"

Bash を初めて使用する場合は、シェル構造ごとに異なる色を使用するテキスト エディターを使用してください。 構文の強調表示は、 ヴィム, gvim, (x)emacs, 書くおよび他の多くのエディターについては、お気に入りのエディターのドキュメントを参照してください。

スクリプトの実行

スクリプトを実行できるようにするには、適切なユーザーの実行権限が必要です。 アクセス許可を設定したら、必要なアクセス許可が実際に設定されていることを確認します。 これが完了すると、スクリプトは他のコマンドと同じように実行できます。

Willy:~/scripts> chmod u+x script1.sh willy:~/scripts> ls -l script1.sh -rwxrw-r-- 1 willy willy 456 Dec 24 17:11 script1.sh willy:~> script1.shスクリプトが開始されます。 おいウィリー! 接続しているユーザーのリストを取得します: 18 日間の午後 3 時 38 分、5 時 37 分、4 ユーザー、負荷平均: 0.12、0.22、0.15 USER TTY FROM [メール保護] IDLE JCPU PCPU 何のルート tty2 - 土曜日の午後 2 時 4:25 分 0.24 秒 0.05 秒 -bash willy:0 - 土曜日の午後 2 時 ? 0.00秒? - willy pts/3 - Sat 2pm 3:33m 36.39s 36.39s BitchX willy ir willy pts/2 - Sat 2pm 3:33m 0.13s 0.06s /usr/bin/screen 2 つの変数を設定しています。これは文字列です: 黒 そして、これは数字です: 9 今、プロンプトを返します。 willy:~/scripts> echo $COLOUR willy:~/scripts> echo $VALUE willy:~/scripts>

これは、スクリプトを実行する最も一般的な方法です。 このようなスクリプトはサブシェルで実行することをお勧めします。 このサブシェルで作成された変数、関数、およびエイリアスは、そのサブシェル内の特定の bash セッションだけに認識されます。 このシェルが終了し、制御が親シェルに引き継がれると、すべての設定がクリアされ、シェルの状態でスクリプトで行われた変更はすべて忘れられます。

スクリプトまたは . (現在のディレクトリ)、次のようにスクリプトをアクティブ化できます。

./script_name.sh

既存のシェル内でスクリプトを実行することも可能ですが、これは通常、アクセシビリティが必要な場合にのみ実行されます。たとえば、スクリプトが別のシェルで動作するかどうかを確認する場合や、デバッグ目的でトレースバックを発行する場合 ( 約トランス。- script_name をスクリプトの名前に置き換えます):

rbash script_name.sh sh script_name.sh bash -x script_name.sh

指定したシェルが現在のシェルのサブシェルとして起動され、スクリプトが実行されます。 これは、スクリプト自体で指定されていない特定のパラメーターまたは特定の条件下でスクリプトを実行する場合に行います。

新しいシェルを起動するのではなく、現在のシェルでスクリプトを実行したい場合は、source コマンドを使用します。

ソース script_name.sh

この場合、スクリプトに実行権限は必要ありません。 コマンドは現在のシェルのコンテキストで実行されるため、環境に加えられた変更は、スクリプトの実行が終了しても表示されたままになります。

Willy:~/scripts> source script1.sh -- 出力省略 -- willy:~/scripts> echo $VALUE 9 willy:~/scripts>

ために 簡単なbashスクリプトを書く次の簡単な手順を実行する必要があります。

仕組み:

スクリプト #!/bin/bash の最初の行は、スクリプトを正常に実行するために不可欠です。

2 行目の mkdir testdir はディレクトリ testdir を作成します

3 行目 cd testdir を使用すると、作成したディレクトリ testdir に変更できます

チーム 触る次の行で touch file1 file2 file3 は 3 つのファイルを作成します

スクリプト ls -al の行の最後のコマンドを使用すると、現在のディレクトリの内容を表示できます。前の行のおかげで、3 つの空のファイルが表示されます。

ご覧のとおり、私たちの 簡単なスクリプトすべてのコマンドは新しい行で始まります。 スクリプトが起動されると、各行はその作業を順次実行し、特定のアクションを実行します。

Linux で (定数パラメーターを使用して) いくつかの同一のコマンドのチェーンを毎日実行する場合、同じコマンドを記述することは理にかなっている可能性があります。 シンプルな bash スクリプト、これにより、時間を節約し、作業を自動化できます。

まずはどういうものかを理解しましょう 脚本そしてそれは何のためのものです。

脚本英語から翻訳 - シナリオ. 私たちは皆映画を見ますし、多くの人がパフォーマンスを見ます。 映画/パフォーマンスを作成するために、脚本家はスクリプトを作成します。これに基づいて、俳優がシーンごとにステージで役割を果たし、そこから映画/パフォーマンスが形成されます。 スクリプトを作成する作業は非常に骨の折れる作業であり、すべてを細部まで考慮する必要があるため、最終的にアーティストは脚本家の計画を実現し、視聴者は全体的な作業を見ることができます。

同様に、スクリプトは、ユーザーがまとめたタスクのリスト (コード) を実行するように記述されており、オペレーティング システム上でタスクをより簡単かつ高速に実行できるようにします。 簡単なスクリプトを書くのに、プログラマーの教育を受ける必要はありません。

まずは一番、どちらでもない、一番シンプルに作ろう スクリプトシェルシステムを更新します。

私がシステムで実行するすべてのアクション Ubuntu、しかし、それらは他のシステムにも適用されます。 Linux、 に由来する Ubuntu. これには次のものが必要です。 テキストエディタスクリプト (コード) を作成するために必要なタスクを入力し、 「ターミナル」- 作成したスクリプトを実行します。 これらのツールはどのディストリビューションにもインストールされます Linuxデフォルト。

それで、テキストエディタを開きます gedit名前の下に必要な最初の文字を入力します シバン.
シバンプログラミングでは、ハッシュ記号と感嘆符 ( #! ) をスクリプト ファイルの先頭に追加します。 これらの文字にスペースなしで追加します /bin/sh- スクリプトが実行されるインタープリター。 /bin/sh- それは通常です ボーンシェルまたは合格する互換性のあるコマンドラインインタープリター 「パス/スクリプトへ」最初のパラメーターとして。
スクリプトの最初の必須行は次のようになります。

# 初めての Ubuntu 更新スクリプト

行頭のポンド記号 (#) は、この行を読み取って実行する必要がないことをインタープリター/端末に伝えます。 このスクリプトのコードには、スクリプトの作成者自身がコード内のこのセグメント/シーンで何を実行しようとしているのかを知るために、このスクリプトのコードに行が必要です。そのような行。 このようなポンド記号の付いた文字列は - コメントアウト .

須藤適切な更新
sudo apt アップグレード -y

-y 2 番目のコマンドの最後に、このアクション/コマンドを自動的に実行する必要があることをインタープリター/端末に明確にします。ユーザーがキーを押すことを確認する必要はありません。 入力. y- 英語の略 はい、つまり はい.

それで全部です。 最初のスクリプトが作成されました。 次の図のようなものが必要です。


作成したファイル/スクリプトを保存して与えることは残っています 名前最後に必須の拡張子を付けて - .sh. 拡大 .sh実行可能ファイルに割り当てられます。
彼にあげた 名前 - update.sh、保存 ホームフォルダーユーザー:


作成したファイル/スクリプトを実行可能にするには、そのための権限を付与する必要があります。 これには 2 つの方法があります。

1. ターミナルで次のコマンドを実行します。

sudo chmod +x update.sh

2. または、ファイルマネージャーを開きます ホームフォルダー(作成したスクリプトを保存した場所)、コンテキストメニューでファイルを右クリックします- プロパティ - 権限アイテムをアクティブ化します - パフォーマンス: ファイルをプログラムとして実行できるようにする:


作成したスクリプトを実行するには、ターミナルを開く必要があります(記事の冒頭で書いたように、ターミナルはスクリプトを実行するために必要な属性/ツールです)、次のように入力します 、スペース区切りのスクリプト名 - update.shキーを押します 入力:


またはターミナルで入力します スクリプトを使用して作成したファイルをファイル マネージャーからドラッグします (これもスペースで区切ります)。


コマンドの後にファイルパスが表示された後 とスペース、キーを押すだけ 入力(Enter) を押してシステム アップデートを実行します。


独自のスクリプトで作成したシステム アップデートをいつでも実行できるようになりました。

はい、端末でこれら 2 つのコマンドを実行することによってシステムを更新するのは難しくないと主張する人がいるかもしれませんが、なぜわざわざスクリプトを作成するのでしょうか? それは正しい。 しかし、これは「神々が鍋を燃やさない」ことを示す簡単なスクリプトを作成する例です。

質問が「スタートアップにプログラムを追加する方法は?」 -初心者ユーザーはすぐに答えを見つけますが、シャットダウン/再起動時にスクリプトを実行するという質問は彼らを混乱させます。 この記事では、Linux のオン/オフ時にコマンドを自動的に実行する標準的な方法と、gdm がインストールされており、ubuntu などのグラフィカル インターフェイスを使用しているユーザーにとってより簡単な方法について説明します。

コンソールオプション。

少し理論。
Linux には 7 つのランレベルがあることを知っておく必要があります。 ただし、使用できるのは 6 つだけです。
すべての自尊心のあるプログラムと同様に、カウントダウンは 0-la から始まります。
0 - システムを停止またはオフにします。
1 - シングル ユーザー モード。
2 - マルチプレイヤー モードですが、ネットワーク サポートはありません。
3 - 同じですが、ネットワークがあります。
4 - 美容目的で追加 使用しません。
5 - X サーバーをロードするグラフィカル モード。
6 - 再起動します。
/etc フォルダー (一部のディストリビューションでは /etc/rc.d) に移動すると、7 つのランレベルを持つフォルダーが表示されます。

たとえば、コンピューターの電源がオフの場合、rc0.d フォルダーのすべてのスクリプトが実行されます。


ここで、より詳細に停止する必要があります。 実際には、このフォルダーにはスクリプト自体 (またはむしろスクリプト) はありませんが、/etc/init.d フォルダーにあるファイルへのリンクのみがあります。 これらのスクリプトは、start または stop パラメータに応じて異なるタスクを実行します (たとえば、/etc/init.d/reboot start と /etc/init.d/reboot stop は異なるコマンドであり、/etc/init.d/reboot は実行しません)。仕事)。 リンクに最初の文字 S が含まれている場合は、start パラメータがスクリプトに渡されます。文字 K (kill という単語に由来) が含まれている場合は、stop パラメータがスクリプトに渡されます。 文字の後の数字は、スクリプトが実行される順序を示します。
たとえば、上のスクリーンショットでは、/etc/init.d/hddtemp stop コマンドが最初に実行され、後で /etc/init.d/networking start が実行されます。
十分な理論。 練習に移りましょう。
自動ロードするコマンドを追加するには、それを /etc/rc.local ファイルに配置します。

この記事では nano をエディターとして使用しますが、gedit などの任意のエディターを使用できます。

須藤ナノ/etc/rc.local

そして、exit 0 の行のすぐ上にコマンドを配置します。
シャットダウンまたは再起動する前にコマンドを実行するには、/etc/init.d フォルダーにスクリプトを作成する必要があります。

sudo ナノ /etc/init.d/scriptname

次のコードを貼り付けます。

#! /bin/sh
ケース「$1」
始める)
echo "シグナル開始"
;;
ストップ)
echo "停止信号"
;; エサック

シグナルが 1 つしかない場合は、コマンドの先頭に # 記号を付けて行をコメントアウトします。
例えば

...
ケース「$1」
始める)
#
;;
...

次に、ファイルを実行可能にします。

sudo chmod +x /etc/init.d/スクリプト名

sudo update-rc.d scriptname start 20 0 6 . ストップ 1 0 6 .

ポイントは重要です(両方)。 インターネットの広大さを探っていると、このプログラムの構文が時々変わるという印象を受けました。 最新の例は、「man update-rc.d」コマンドを使用して表示できます。 例は一番下にあります。

このコマンドは、/etc/rc ディレクトリに 2 つのリンクを作成します。 0 .d (コマンドの 2 番目の数字) および /etc/rc 6 .d (コマンドの 3 番目の数字)。 さらに、スクリプトは最初に stop パラメータを使用して実行され (コストが 1 であるため)、次に start パラメータを使用して実行されます (コストが 20 であるため)。
2 番目のパラメーターが必要ない場合は、次のコマンドを実行できます。

sudo update-rc.d scriptname stop 1 0 6 .

優先度を高く設定することをお勧めします (つまり、開始または停止後の数は小さくする必要があります)。できれば 20 未満に設定してください。そうしないと、再起動しようとしたときにコンピューターがハングすることがありました。

ubuntu、および gdm を使用する他の多くの最新のディストリビューションのユーザーの場合、次を使用できます...

グラフィックオプション。

自動ロードに関しては、説明されている方法を使用できます。
または、次のコマンドで「スタートアップ アプリケーション」を開きます。

gnome-session-properties

コンピューターの電源がオフのときにスクリプトを実行するには、ファイル /etc/gdm/PostSession/Default に配置します

sudo gedit /etc/gdm/PostSession/Default

出口0番線の真上。

空のファイルを作成します。

最初の行に次のように書きます。

#!/ビン/sh

この行は、使用するコマンド シェルを指定します。 次はコマンドです。

/usr/sbin/ ディレクトリに元の名前で (既存のものと一致しないように) 保存します。

In order for the script to run at boot, you need to write it in the /etc/rc.local file before the exit 0 line. このファイルがない場合は、作成して次の内容を貼り付けます。

#!/bin/sh -e #ここにスクリプトの行を挿入します。 /usr/sbin/mescripts 出口 0

少し複雑な方法

さまざまなランレベルでロード シーケンスとスクリプトの動作を設定できます。

/etc/init.d/skeleton を調べ、それに基づいてスクリプト /etc/init.d/my_script を作成し、アプリケーションを開始/停止します。

これらのディレクトリには、サービスを停止するためのスクリプトが含まれています。

/etc/rc0.d/ /etc/rc1.d/ /etc/rc6.d/

これら - サービスを開始するためのスクリプト:

/etc/rc2.d/ /etc/rc3.d/ /etc/rc4.d/ /etc/rc5.d/

それらの順序を調べます (スクリプトの先頭の最初の数字が小さいほど、アプリケーションの開始/停止が早くなります)。 アプリケーションがいくつかのサービスに依存している場合、これは非常に重要です。

起動スクリプトと順序を決定したら、次のことを行います。

Sudo update-rc.d my_script start 70 2 3 4 5 。 ストップ 20 0 1 6 .

ここでは、スクリプトを他のスクリプトより遅く開始し (70)、早く停止するように定義しました (20)。 2 3 4 5 0 1 6 の数字は負荷レベルを示します。

気に入らないものがあれば、すべて削除できます

sudo update-rc.d -f my_script 削除

詳細については、man update-rc.d を参照してください。

ネットワークのオン/オフでスクリプトを実行する

サブディレクトリ if-down.d 、 if-pre-up.d 、 if-post-down.d 、 if-up.d を持つディレクトリ /etc/network/ があります。 これらのサブディレクトリのいずれかにスクリプトを配置すると、シャットダウン時、電源オン前、電源オフ後、またはネットワークがオンになったときに、それぞれスクリプトが実行されます。

もう 1 つの方法は、/etc/network/interfaces ファイルで次のいずれかのディレクティブを指定することです: up 、 pre-up 、 post-up 、 down 、 pre-down 、 post-down 。 たとえば、次の行

ポストアップ /path/to/script.sh

ネットワークをオンにした後、スクリプトが実行されます script.sh. 詳細については man interfaces を参照してください。

いずれの場合も、スクリプトには実行を許可する権限が設定されている必要があります。そうでない場合、スクリプトは実行できません。

トピックの続き:
ソリューション

多くのユーザーは、さまざまなブラウザーを使用しているときに、空白のページまたは必要のないページから開始する必要があるという事実に直面することがよくあります....