システム管理者向けのPython

翻訳の作者はmesserrで 、彼はカルマと運がなかっただけです。

はじめに


システム管理者として、多くの問題に直面しています。 ユーザー、ディスク容量、プロセス、デバイス、およびバックアップを管理すると、多くの管理者にとって脱毛、ユーモア、または健全性が生じる可能性があります。 シェルスクリプトは役立ちますが、多くの場合、多くの制限があります。 この場合、Pythonなどの完全に機能するスクリプト言語は、退屈な作業を簡単で楽しいものに変えることができます。
この記事の例は、実際に使用できるさまざまなPython機能を示しています。 それらを使用する場合は、Pythonの力を理解するための正しい道を進んでいます。

モジュールについて


モジュールはPythonの重要な概念です。 基本的に、モジュールは、後で使用するためにプログラムに接続するリソースです。 このプロセスは、箱から紙を取り出してテーブルに置いて、将来の使用に備えるという事実と比較できます。 モジュールは、各例の最初にあるimportコマンドを使用して接続されます。 これらのモジュールは、データベース、ネットワークプログラミング、オペレーティングシステムサービス、および他の何百もの有用な領域との通信に使用できます。

Pythonを機能させましょう


Pythonはフル機能を備えた信頼性の高いプログラミング言語であり、本質的に多くのプロパティがあります。 それを勉強することは、壮大な仕事です。 ただし、GUIツールキットなどの多くの機能は、システム管理者にとって価値が低いことを忘れないでください。 このため、この記事では特定の例を使用しています。システム管理スクリプトを効率的に記述するために必要なスキルを示しています。

例について少し:

これらのスクリプトの改善について間違いなく考えるでしょう。 いいね! Pythonスクリプトの性質は、再コンパイルを必要とせずに簡単に変更およびカスタマイズできることです。

例1:ファイルを検索し、わかりやすい形式で権利を表示する

最初の例(リスト1)は、テンプレート(ユーザーが入力したもの)に従ってファイルを検索し、各ファイルのアクセス権とともに画面に結果を表示します。 まず、このプログラムはfindの呼び出し以外の何もしないと考えるかもしれません。 ただし、結果は特別な方法で表示され、この高度な検索を表示するオプションは無限です。
このスクリプトは、本質的に3つの問題を解決します。
  1. ユーザーから検索パターンを取得します
  2. 検索を実行します
  3. ユーザーに結果を表示します。

スクリプトを作成するときは、「このコードはどのようなタスクを提供しますか?」という質問を常に自問します。この質問を自問することで、作業とその有効性に対する注意が高まります。

リスト1.ファイルを検索し、許可付きで結果を表示します。

# -*- coding: utf-8 -*-
import stat, sys, os, string, commands
# ,
try:
pattern = raw_input(" :\n")
# 'find'
commandString = "find " + pattern
commandOutput = commands.getoutput(commandString)
findResults = string.split(commandOutput, "\n")
#
print ":"
print commandOutput
print "================================"
for file in findResults:
mode=stat.S_IMODE(os.lstat(file)[stat.ST_MODE])
print "\nPermissions for file ", file, ":"
for level in "USR", "GRP", "OTH":
for perm in "R", "W", "X":
if mode & getattr(stat,"S_I"+perm+level):
print level, " ", perm, " "
else:
print level, " ", perm, " "
except:
print " ! ."


プログラムは次の手順に従います。
  1. ユーザーに検索パターンを要求します(7〜9行目)。
  2. 見つかったファイルのリストを出力します(12〜14行目)。
  3. statモジュールを使用して、検出された各ファイルのアクセス許可を取得し、画面に表示します(行15〜23)。

プログラムの結果をリスト2に示します。

$ python example1.py
Enter the file pattern to search for:
j*.py


リスト2.最初の例の出力

$ python example1.py
:
j*.py
:
jim.py
jim2.py~
================================
Permissions for file jim.py :
USR R
USR W
USR X
GRP R
GRP W
GRP X
OTH R
OTH W
OTH X
Permissions for file jim2.py :
USR R
USR W
USR X
GRP R
GRP W
GRP X
OTH R
OTH W
OTH X


例2:メニューを使用したtarアーカイブ操作の実行

前の例では、作業のためにユーザーに検索テンプレートを要求しました。 ユーザーから情報を取得する別の方法は、コマンドラインの引数です。 リスト3のプログラムは、Pythonでこれを行う方法を示しています。コードはtarファイル名をコマンドライン引数として受け取り、ユーザーにいくつかのオプションを提供します。 この例は、問題を解決する新しい方法も示しています。 最初の例では、コマンドモジュールを使用して検索を実行し、出力をキャプチャしました。 このアプローチは、非常に「python」ではなく、厄介と呼ぶことができます。 この例では、 tarfileモジュールを使用してtarファイルを開きます。この利点は、ファイルを操作するときにPythonの属性とメソッドを使用できることです。 多くのPythonモジュールを使用すると、コマンドラインでは利用できないことを実行できます。 これは、Pythonでメニューを使用する良い例です。 プログラムは、選択に応じてさまざまなアクションを実行します。

リスト3.メニューを使用したtarアーカイブ操作の実行

# -*- coding: utf-8 -*-
import tarfile, sys
try:
# tar-
tar = tarfile.open(sys.argv[1], "r:tar")
#
selection = raw_input("\n\
1 \n\
2 \n\
3 \n\n")
# ,
if selection == "1":
filename = raw_input(" : ")
tar.extract(filename)
elif selection == "2":
filename = raw_input(" : ")
for tarinfo in tar:
if tarinfo.name == filename:
print "\n\
:\t\t", tarinfo.name, "\n\
:\t\t", tarinfo.size, "\n"
elif selection == "3":
print tar.list(verbose=True)
except:
print " !"


プログラムは次の手順に従います。
  1. tarファイルを開きます(5行目)。
  2. メニュー画面を表示し、ユーザーの選択を受け取ります(行8〜11)。
  3. 1を押した場合(14〜16行目)、アーカイブからファイルを抽出します。
  4. 2を押した場合(17〜23行目)、選択したファイルに関する情報を提供します。
  5. 3(24〜25行目)を押すと、アーカイブ内のすべてのファイルに関する情報が提供されます。

プログラムの結果をリスト4に示します。

リスト4. 2番目の例のユーザーメニュー

$ python example2.py jimstar.tar

1
2
3


例3.実行中のプロセスを確認し、わかりやすいビューで情報を表示します。

システム管理者の最も重要な責任の1つは、実行中のプロセスを確認することです。 リスト5のスクリプトは、いくつかのアイデアを提供します。 このプログラムはUnixの機能を利用します。grepコマンドは別のコマンドによって生成された出力を使用します。 これにより、Pythonが後で分析するデータの量を減らすことができます。
プログラムは文字列モジュールも使用します。 このモジュールを研究してください-あなたはしばしばそれを使用します。

リスト5.実行中のプロセスに関する情報をわかりやすいビューで表示する

# -*- coding: utf-8 -*-
import commands, os, string
program = raw_input(" : ")
try:
# 'ps'
output = commands.getoutput("ps -f|grep " + program)
proginfo = string.split(output)
#
print "\n\
:\t\t", proginfo[5], "\n\
:\t\t\t", proginfo[0], "\n\
ID :\t\t", proginfo[1], "\n\
ID :\t", proginfo[2], "\n\
:\t\t", proginfo[4]
except:
print " !"


プログラムは次の手順に従います。
  1. チェックするプロセスの名前を取得し、変数に割り当てます(3行目)。
  2. psコマンドを実行し、結果をリストに追加します(行7〜8)。
  3. プロセスに関する詳細情報を表示します(11〜16行目)。
  4. プログラムの結果をリスト6に示します。

リスト6. 3番目の例の出力

$ python example3.py
: xterm
: pts/0
: goga
ID : 26509
ID : 26493
: 17:28


例4.セキュリティポリシーに準拠するためのユーザー名とパスワードの検証。 セキュリティ管理は、すべてのシステム管理者にとって重要な仕事です。 最後の例が示すように、Pythonはこの作業を簡単にします。 リスト7のプログラムは、 pwdモジュールを使用してパスワードデータベースにアクセスします。 ユーザー名とパスワードがセキュリティポリシーに準拠しているかどうかを確認します(この場合、名前の長さは少なくとも6文字、パスワードは8文字でなければなりません)。 2つの注意事項があります。
このプログラムは、/ etc / passwdにアクセスする完全な権限がある場合にのみ機能します。
シャドウパスワードを使用すると、スクリプトは機能しません(ただし、Python 2.5には、この問題を解決するspwdモジュールがあります)。

リスト7.セキュリティポリシーのユーザー名とパスワードの検証

# -*- coding: utf-8 -*-
import pwd
#
erroruser = []
errorpass = []
#
passwd_db = pwd.getpwall()
try:
#
for entry in passwd_db:
username = entry[0]
password = entry [1]
if len(username) < 6:
erroruser.append(username)
if len(password) < 8:
errorpass.append(username)
#
print " 6 :"
for item in erroruser:
print item
print "\n 8 :"
for item in errorpass:
print item
except:
print " !"


プログラムは次の手順に従います。
  1. カウンターのリストを初期化します(行4〜5)。
  2. パスワードデータベースを開き、データをリストに書き込みます(8行目)。
  3. ユーザー名とパスワードの有効性を確認します(行12〜18)。
  4. セキュリティポリシーに準拠していない名前とパスワードを表示します(21〜26行目)。
プログラムの結果をリスト8に示します。

リスト8. 4番目の例の出力

$ python example4.py
6 ::
Guest
8 :
Guest
johnsmith
joewilson
suejones


スクリプトの別の使用。 Pythonをさまざまな方法で使用して、システムを制御できます。 できる最善のことの1つは、作業を分析し、繰り返し実行するタスクを決定し、これらの問題の解決に役立つPythonモジュールを学習することです。ほぼ間違いなくそれらがあります。 Pythonが素晴らしいヘルパーになる可能性のある領域:
Webアプリケーションのテスト:無料で利用可能なツールを使用して、Webブラウザーをエミュレートし、Webアプリケーションの機能とパフォーマンスをテストします。
これらはほんの一例です-独自の有用なアイデアを追加できると確信しています。

まとめ


学習のしやすさ、ファイル、プロセス、文字列、数字の管理機能、ヘルパーモジュールのほぼ無限の配列を備えたPythonは、システム管理者向けに特別に作成されたスクリプト言語です。 Pythonは、システム管理者のツールキットに含まれる貴重なツールです。

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


All Articles