Linuxhotel Wiki

Wie ging das nochmal?

Benutzer-Werkzeuge

Webseiten-Werkzeuge


lpi1:sql

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu der Vergleichsansicht

Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung
Nächste Überarbeitung
Vorherige Überarbeitung
Letzte Überarbeitung Beide Seiten, nächste Überarbeitung
lpi1:sql [2011/11/24 08:24]
ingo_wichmann [SQLite Datenbank anlegen]
lpi1:sql [2015/08/17 13:06]
ingo_wichmann [Dokumentation]
Zeile 1: Zeile 1:
 ====== Installation Pakete ====== ====== Installation Pakete ======
-SuSE, Debian: +SuSE, Debian: ​''​sqlite3''​
-  ​sqlite3+
  
-CentOS: +CentOS: ​''​sqlite''​
-  ​sqlite+
  
 ====== Unix Benutzer in SQLite Datenbank überführen ====== ====== Unix Benutzer in SQLite Datenbank überführen ======
Zeile 19: Zeile 17:
 Aufbau gemäß ''/​etc/​passwd''​ : Aufbau gemäß ''/​etc/​passwd''​ :
  
-  sqlite3 accounts.db <<SQL 
 <code sql> <code sql>
 +sqlite3 accounts.db <<SQL
 +
 CREATE TABLE users (  CREATE TABLE users ( 
  uid text,   uid text, 
Zeile 30: Zeile 29:
  shell text   shell text 
 ); );
 +
 +SQL
 </​code>​ </​code>​
-  SQL 
  
 ==== Benutzer importieren ==== ==== Benutzer importieren ====
Zeile 44: Zeile 44:
  
 SQL INSERT Statement zum Einfügen der Daten in die Tabelle ''​users'':​ SQL INSERT Statement zum Einfügen der Daten in die Tabelle ''​users'':​
-  cat <<​SQL ​ 
 <code sql> <code sql>
 +cat <<​SQL ​
 +
 INSERT INTO users ( uid, password, uidNumber, gidNumber, gecos, home, shell )  INSERT INTO users ( uid, password, uidNumber, gidNumber, gecos, home, shell ) 
   VALUES ( '​$uid',​ '​$password',​ '​$uidNumber',​ '​$gidNumber',​ '​$gecos',​ '​$home',​ '​$shell'​ );   VALUES ( '​$uid',​ '​$password',​ '​$uidNumber',​ '​$gidNumber',​ '​$gecos',​ '​$home',​ '​$shell'​ );
 +
 +SQL 
 </​code>​ </​code>​
-  SQL  
  
 === Mit ''​while''​-Schleife alle Benutzer importieren === === Mit ''​while''​-Schleife alle Benutzer importieren ===
Zeile 66: Zeile 68:
 Für die ''/​etc/​group''​ werden zwei Tabellen benötigt: Für die ''/​etc/​group''​ werden zwei Tabellen benötigt:
  
-  sqlite3 accounts.db <<​SQL ​ 
 <code sql> <code sql>
-  CREATE TABLE groups ( gid text, password text, gidNumber integer ); +sqlite3 accounts.db <<​SQL ​
-  CREATE TABLE members ( gidNumber integer, uid text ); +
-</code> +
-  ​SQL  +
  
 +CREATE TABLE groups ( gid text, password text, gidNumber integer );
 +CREATE TABLE members ( gidNumber integer, uid text );
  
 +SQL 
 +</​code>​
  
 ==== Gruppen importieren ==== ==== Gruppen importieren ====
Zeile 118: Zeile 119:
 ... können die Mitglieder dann einer nach dem anderen in die Variable ''​$member''​ eingelesen und zusammen mit der ''​$gidNumber''​ in die Tabelle ''​members''​ geschrieben werden. ... können die Mitglieder dann einer nach dem anderen in die Variable ''​$member''​ eingelesen und zusammen mit der ''​$gidNumber''​ in die Tabelle ''​members''​ geschrieben werden.
  
 +==== Das Skript in einer Datei ====
 +<file bash unix_users2sql.sh>​
 +#!/bin/bash
 +
 +# Tabelle für Benutzer anlegen
 +sqlite3 accounts.db <<SQL
 +  CREATE TABLE users ( 
 +    uid text, 
 +    password text, 
 +    uidNumber integer, ​
 +    gidNumber integer, ​
 +    gecos text, 
 +    home text, 
 +    shell text 
 +  );
 +SQL
 +
 +# Benutzer importieren
 +while IFS=':'​ read uid password uidNumber gidNumber gecos home shell; ​  
 +do
 +  cat <<SQL
 +    INSERT INTO users ( uid, password, uidNumber, gidNumber, gecos, home, shell ) 
 +    VALUES ( '​$uid',​ '​$password',​ '​$uidNumber',​ '​$gidNumber',​ '​$gecos',​ '​$home',​ '​$shell'​ ); 
 +SQL
 +done < /etc/passwd | sqlite3 accounts.db
 +
 +## Tabellen für Gruppen anlegen
 +sqlite3 accounts.db <<SQL
 +  CREATE TABLE groups ( gid text, password text, gidNumber integer );
 +  CREATE TABLE members ( gidNumber integer, uid text );
 +SQL
 +
 +## Gruppen importieren
 +while IFS=':'​ read gid password gidNumber members;  ​
 +do  ​
 +  cat <<SQL
 +    INSERT INTO groups ( gid, password, gidNumber ) 
 +      VALUES ( '​$gid',​ '​$password',​ '​$gidNumber'​ );
 +SQL
 +done < /etc/group | sqlite3 accounts.db ​
 +
 +## Gruppenmitglieder importieren
 +while IFS=':'​ read gid password gidNumber members;
 +do
 +  for uid in $(echo $members | tr ','​ ' ');
 +  do
 +    echo "​INSERT INTO members ( gidNumber, uid ) VALUES ( '​$gidNumber',​ '​$uid'​ );" ​
 +  done
 +done < /etc/group | sqlite3 accounts.db
 +</​file>​
  
 ==== Der fertige SQL-Dump ==== ==== Der fertige SQL-Dump ====
Zeile 182: Zeile 233:
  
 ===== einfache SELECT Abfragen ===== ===== einfache SELECT Abfragen =====
-==== Alle Benutzer ​wie in ''/​etc/​passwd''​ ausgeben ====+==== Alle Benutzer in ''/​etc/​passwd''​ ausgeben ====
 <code sql>​select * from users;</​code>​ <code sql>​select * from users;</​code>​
 +analog zu
 +  cat /etc/passwd
  
 ==== Benutzer root ausgeben ==== ==== Benutzer root ausgeben ====
 <code sql>​select * from users where uid = '​root';</​code>​ <code sql>​select * from users where uid = '​root';</​code>​
 +analog zu 
 +  grep '​^root'​ /etc/passwd
 ==== Shell des Benutzers root ausgeben ==== ==== Shell des Benutzers root ausgeben ====
 <code sql>​select shell from users where uid = '​root';</​code>​ <code sql>​select shell from users where uid = '​root';</​code>​
 +analog zu
 +  grep '​^root'​ /etc/passwd | cut -d: -f 7
  
 ==== Benutzer nach Name sortiert ausgeben ==== ==== Benutzer nach Name sortiert ausgeben ====
-<code sql>​select * from users order by uid;</​code>​+<code sql>​select * from users order by uidNumber;</​code>​ 
 +analog zu 
 +  sort -n -t: -k3 /etc/passwd
  
 ==== Anzahl der Benutzer ausgeben ==== ==== Anzahl der Benutzer ausgeben ====
 <code sql>​select count(*) from users;</​code>​ <code sql>​select count(*) from users;</​code>​
 +analog zu 
 +  wc -l /etc/passwd
 ==== Wie viele Benutzer verwenden welche Shell ? ==== ==== Wie viele Benutzer verwenden welche Shell ? ====
 <code sql>​select shell, count(shell) from users group by shell;</​code>​ <code sql>​select shell, count(shell) from users group by shell;</​code>​
 +analog zu 
 +  cut -d : -f 7 /​etc/​passwd|sort|uniq -c
 ===== JOIN ===== ===== JOIN =====
 Alle Benutzer, ihre Passwörter und ihre primäre Gruppe namentlich ausgeben Alle Benutzer, ihre Passwörter und ihre primäre Gruppe namentlich ausgeben
Zeile 245: Zeile 305:
  
 ===== Subselect ===== ===== Subselect =====
-Die Durchschnitt der Gruppennummern aus der Tabelle ''​users''​ berechnen:+Den Durchschnitt der Gruppennummern aus der Tabelle ''​users''​ berechnen:
 <code sql> <code sql>
   select avg(gidNumber) from users;   select avg(gidNumber) from users;
Zeile 275: Zeile 335:
  
 ====== Datenbank verändern ====== ====== Datenbank verändern ======
-===== Tabellen ​verändern =====+===== Datensätze ​verändern =====
 ==== Zeile hinzufügen ==== ==== Zeile hinzufügen ====
 Gruppe mit neuer uidNumber hinzufügen Gruppe mit neuer uidNumber hinzufügen
Zeile 282: Zeile 342:
   INSERT INTO groups SELECT * FROM groups WHERE gid = '​projekt-y';​   INSERT INTO groups SELECT * FROM groups WHERE gid = '​projekt-y';​
 ==== Zeile verändern ==== ==== Zeile verändern ====
-  UPDATE groups SET gid = '​projekt-z';​+  UPDATE groups SET gid = '​projekt-z' WHERE gid = '​projekt-y';
 ==== Zeile löschen ==== ==== Zeile löschen ====
   DELETE FROM groups WHERE gid = '​projekt-y';​   DELETE FROM groups WHERE gid = '​projekt-y';​
Zeile 303: Zeile 363:
 ====== Dokumentation ====== ====== Dokumentation ======
   * [[http://​www.sqlite.org/​lang.html]]   * [[http://​www.sqlite.org/​lang.html]]
 +  * {{:​visual_sql_joins_orig.jpg?​200|}} ( von: http://​www.codeproject.com/​Articles/​33052/​Visual-Representation-of-SQL-Joins )
  
lpi1/sql.txt · Zuletzt geändert: 2015/08/17 13:07 von ingo_wichmann