Hier werden die Unterschiede zwischen zwei Versionen gezeigt.
Beide Seiten, vorherige Überarbeitung Vorherige Überarbeitung Nächste Überarbeitung | Vorherige Überarbeitung | ||
lpi1:sql [2012/10/11 08:36] ingo_wichmann [Benutzer root ausgeben] |
lpi1:sql [2015/08/17 13:07] (aktuell) 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 ); | + | |
+ | CREATE TABLE groups ( gid text, password text, gidNumber integer ); | ||
+ | CREATE TABLE members ( gidNumber integer, uid text ); | ||
+ | |||
+ | SQL | ||
</code> | </code> | ||
- | SQL | ||
==== Gruppen importieren ==== | ==== Gruppen importieren ==== | ||
Zeile 116: | Zeile 120: | ||
==== Das Skript in einer Datei ==== | ==== Das Skript in einer Datei ==== | ||
- | ''unix_users2sql.sh'' : | + | <file bash unix_users2sql.sh> |
- | <code bash> | + | |
#!/bin/bash | #!/bin/bash | ||
Zeile 165: | Zeile 168: | ||
done | done | ||
done < /etc/group | sqlite3 accounts.db | done < /etc/group | sqlite3 accounts.db | ||
- | </code> | + | </file> |
==== Der fertige SQL-Dump ==== | ==== Der fertige SQL-Dump ==== | ||
Zeile 241: | Zeile 244: | ||
==== 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 296: | 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 326: | 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 333: | 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 354: | Zeile 363: | ||
====== Dokumentation ====== | ====== Dokumentation ====== | ||
* [[http://www.sqlite.org/lang.html]] | * [[http://www.sqlite.org/lang.html]] | ||
- | * {{:visual_sql_joins_orig.jpg?200|}} | + | * {{:visual_sql_joins_orig.jpg?200|}} ( [[http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins| Quelle]] ) |