Anwendungsbeispiel
Viele in diesem Artikel gezeigte Ruby-Features finden sich in Listing 11 wieder, das die Aufgabenstellung aus der Einführung zu diesem Magazin-Schwerpunkt umsetzt: Es liest eine CSV-Datei zeilenweise ein, prüft Login-Namen gegen einen regulären Ausdruck und schreibt die gültigen Daten in alle relevanten Linux-Systemdateien, um die Benutzerkonten anzulegen (Abbildung 4). Selbst für Ruby-Neulinge liest es sich leicht und verrät, was es in welcher Zeile tut.
Listing 11
User aus CVS-Liste anlegen
01 # erfordert Ruby 1.9
02
03 require "csv"
04 require "fileutils"
05 require "set"
06
07 csv_file = ARGV.first
08 raise "specify a user CSV" if csv_file.nil?
09
10 raise "must be run as root" unless Process.uid == 0
11
12 def invalid_login?(login)
13 return false if login =~ /^[a-z0-9]+$/
14 warn "invalid login: #{login.inspect}"
15 true
16 end
17
18 $existing_logins = CSV.readlines("/etc/passwd", :col_sep => ":").map(&:first).to_set
19 def existing_login?(login)
20 return false unless $existing_logins.include?(login)
21 warn "existing login: #{login.inspect}"
22 true
23 end
24
25 new_users = CSV.readlines(csv_file).reject { |(login, _, _)| invalid_login?(login) or existing_login?(login) }
26
27 exit 0 if new_users.empty?
28
29 lines_by_file_name = {"passwd" => [], "group" => [], "shadow" => []}
30
31 new_users.each_with_index do |(login, lastname, firstname), i|
32 uid = i + 1001
33 lines_by_file_name["passwd"] << [login, "x", uid, uid, "#{lastname}, #{firstname}", "/bin/bash"].join(":")
34 lines_by_file_name["group"] << [login, "x", uid, login].join(":")
35 lines_by_file_name["shadow"] << [login, "!", "", "", "", "", "", "", ""].join(":")
36 end
37
38 lines_by_file_name.each do |file_name, lines|
39 File.open("/etc/#{file_name}", "a") { |f| f.puts lines }
40 end
41
42 new_users.each do |(login, _, _)|
43 home_dir = "/home/#{login}"
44 FileUtils.mkdir_p(home_dir, :mode => 0700)
45 FileUtils.cp_r("/etc/skel/.", home_dir)
46 end
Überall Juwelen
Ruby eignet sich nicht nur für selbst geschrieben Skripte. Die Programmiersprache findet sich in den letzten Jahren oft in leistungsstarker Software zur Verwaltung größerer Systeme. Dazu gehören das Deployment-Tool Capistrano [9] und Puppet [10], ein System zum Management von Serverkonfigurationen. Dem gleichen Zweck dient das Framework Chef [11]. Das Buildsystem Rake [12] ist eine Offenbarung für alle, die bisher an GNU Make gewöhnt waren.
Wer auf dem Laufenden in Sachen Ruby-Programmierung bleiben möchte, sollte die Website Ruby Inside [13] besuchen. Dort sind auch hervorragende Tutorials zu finden. (mhu)
Infos
- Ruby: http://www.ruby-lang.org
- Ruby-Dokumentation http://www.ruby-doc.org
- "Ruby 1.9's Three Default Encodings", James Edward Gray II: http://blog.grayproductions.net/articles/ruby_19s_three_default_encodings
- Eventmachine: http://rubyeventmachine.com
- Pcap-Bibliothek: http://sourceforge.net/apps/trac/rubypcap
- Zip-Bibliothek: http://rubygems.org/gems/zip
- Libxml-ruby: http://rubygems.org/gems/libxml-ruby
- Nokogiri: http://rubygems.org/gems/nokogiri
- Capistrano: https://github.com/capistrano/capistrano/wiki
- Puppet: http://puppetlabs.com/puppet/puppet-open-source
- Chef: http://wiki.opscode.com/display/chef/Chef+Basics
- Rake: http://rake.rubyforge.org
- Ruby Inside: http://www.rubyinside.com
- Listings zu diesem Artikel: http://www.linux-magazin.de/static/listings/magazin/2012/06/ruby
Diesen Artikel als PDF kaufen
Express-Kauf als PDF
Umfang: 5 Heftseiten
Preis € 0,99
(inkl. 19% MwSt.)
Als digitales Abo
Weitere Produkte im Medialinx Shop »
Versandartikel
Onlineartikel
Alle Rezensionen aus dem Linux-Magazin
- Buecher/07 Bücher über 3-D-Programmierung sowie die Sprache Dart
- Buecher/06 Bücher über Map-Reduce und über die Sprache Erlang
- Buecher/05 Bücher über Scala und über Suchmaschinen-Optimierung
- Buecher/04 Bücher über Metasploit sowie über Erlang/OTP
- Buecher/03 Bücher über die LPI-Level-2-Zertifizierung
- Buecher/02 Bücher über Node.js und über nebenläufige Programmierung
- Buecher/01 Bücher über Linux-HA sowie über PHP-Webprogrammierung
- Buecher/12 Bücher über HTML-5-Apps sowie Computer Vision mit Python
- Buecher/11 Bücher über Statistik sowie über C++-Metaprogrammierung
- Buecher/10 Bücher zu PHP-Webbots sowie zur Emacs-Programmierung
Insecurity Bulletin
Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...





