-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathLinuxKurs_diff
executable file
·763 lines (554 loc) · 27.7 KB
/
LinuxKurs_diff
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
Linux Debian Administrations Schulung vom 09.11.2015 bis 13.11.2015
===================================================================
Kursnotizen zusammen getragen von Sandro Isoletta.
Disclaimer: Für Richtigkeit wird keine Verantwortung übernommen.
Legende:
--------
^c -> Bedeutet STRG+c drücken
Organisatorisches:
------------------
auf https://lab.linuxhotel.de gibt es einen Zugang für diesen Kurs.
Dort findet man Etherpad und Wiki zum vermittelten Inhalt.
Einführung: Generelle Shell-Befehle
===================================
tty # welches Terminal nutze ich
whoami # wer bin ich
echo $USER # whoami
who am i # wer bin ich und auf welchem Terminal
who # wer ist alles angemeldet
w # wer ist alles angemeldet, aber ausführlich
pwd # in welchem Verzeichnis (voller Pfad) bin ich
STRG+SHIFT+u # Unicode eingeben (vierstellig) z. B. u2622 -> ☢
cd # change directory bsp. cd /home
cd - # Wechsle ins letzte Verzeichnis zurück
Sonderstellung Shell-Filter
---------------------------
Shell Filter sind spezielle Befehle, welche grundsätzlich keine Änderung an einer Datei vornehmen, sondern diese nur wie gewünscht
verändert ausgeben. (Natürlich kann man diese dann auch schreiben, muss es aber explizit mit angeben)
wc # wordcount
wc -w # wieviele Wörter
Linux Verzeichnisstruktur
=========================
/bin # Programmverzeichnis
/boot # Bootverzeichnis
/dev # Geräte
/etc # editable text configfiles -> Konfigurationsdateien
/home # Standard User /home Verzeichnis
/lib # Bibliotheken
/lib64 # Bibliotheken (64bit)
/media # Standard Mountpoint für Geräte, wenn eine GUI verwendet wird
/mnt # Standard Mountpoint, immer nur temporär eingehangen
/opt # Fremdprogramme
/proc # Kernel
/root # /home Verzeichnis von root
/run #
/sbin # Programmverzeichnis
/srv # Services (z. B. für html Dateien)
/sys # Kernel
/tmp # Temporäre Dateien
/usr # UNIX System Ressources, Äquivalent zu system32 bei Windows
/usr/share/doc # Pfad für Dokumentation (für Entwickler)
/usr/local # System wird hier NIE was ändern. Richtiger Ort für eigene, geteilte Skripte und Programme
/var/log # Logdateien
Ausführliche Erläuterung unter:
https://de.wikipedia.org/wiki/Filesystem_Hierarchy_Standard
LOKALISIERUNG
=============
Um bei Debian weitere Spracheinstellungen hinzuzufügen, nutzt man den Befehl: dpkg-reconfigure locales
dpkg-reconfigure locales # Neukonfiguration der Lokalisierung
locale -a # installierte Sprachen anzeigen
locale # gesetzte Sprachvariablen anzeigen
LANG=de_DE.UTF-8 # Variable für verwendete Sprache
LANGUAGE= #
LC_CTYPE="de_DE.UTF-8" #
LC_NUMERIC="de_DE.UTF-8" # für Zahlen, z.B. Kommata- oder Punkttrennung
LC_TIME=de_DE.UTF-8 # Darstellung von Zeit und Datum (NICHT Zeitzone)
LC_COLLATE="de_DE.UTF-8" # Sortierung
LC_MONETARY="de_DE.UTF-8" # Währung
LC_MESSAGES="de_DE.UTF-8" # Systemmeldungen
LC_PAPER="de_DE.UTF-8" #
LC_NAME="de_DE.UTF-8" #
LC_ADDRESS="de_DE.UTF-8" #
LC_TELEPHONE="de_DE.UTF-8" #
LC_MEASUREMENT="de_DE.UTF-8" # Maßeinheiten
LC_IDENTIFICATION="de_DE.UTF-8" #
LC_ALL= # Mastervariable, überschreit alle anderen
LANG="en_US.UTF-8" # lokal für diese Sitzung die Sprache auf amerikanisches Englisch stellen
# nach dem Abmelden geht die Einstellung verloren.
LC_TIME="ar_LB.UTF-8" # Darstellung der Zeit auf arabisch stellen
LC_TIME="ar_LB.UTF-8" ls -l # Nur für diesen einen Prozess (ls -l) die Zeitdarstellung auf arabisch setzen
LANG=C man man # Die Manpage des Befehls man in seiner ursprünglichen Sprache anzeigen
# LANG=C bedeutet: Ignoriere sämtliche Spracheinstellungen und gebe die ursprünglich kompilierte
# Sprache aus (i. d. R. Englisch)
Um Spracheinstellungen dauerhaft zu ändern, muss die ~/.profile editiert werden.
Eine Alternative zu dpkg-reconfigure locales stellt das Editieren der Datei /etc/locale.gen dar.
Hilfe zur Selbsthilfe
=====================
which Befehl z.B. which ls liefert /bin/ls als Pfad, wo der Befehl liegt
type Befehl type ls zeigt dann, dass für ls ein alias gesetzt wurde
ls is aliased to `ls --color=auto'
ls --help
help befehl erweiterte Hilfe
man befehl Manpage vom Befehl
VIM
===
Lektion 0 BASICS
----------------
Command Mode = CM
i insert. -> Edit Mode
<ESC> zurück in den CM
: Ex Mode
:w schreiben
:q beenden
:q! unbedingt raus (Not-Aus)
:qa Schließe alle Fenster (siehe Split)
:wq schreiben und beenden
:wqa schreiben und alle Fenster schließen (siehe Split)
:x schreiben und beenden
:syn on Syntax highlightning anschalten (farbig)
:syn off Syntax highlightning ausschalten (farbig)
Lektion 1 UNDO
--------------
(CM)
u UNDO
^r REDO
Lektion 1.5 SPLIT
-----------------
(CM)
:spl horiz. split
:vspl verti. split
^w -> cursor Fokus, sprich Fenster wechseln (Erst STRG + W drücken, dann mit dem Cursor hoch, runter, links oder rechts)
:res wert resize, Größe eines Fensters ändern. res + 3 oder res -3 oder res 10 etc.
Beim öffnen Parameter mitgeben:
-------------------------------
vim -o horiz.
vim -O vertik.
vim -Od mit diff
Lektion 1.8 (?)
---------------
vim -R vim als Read Only nutzen
Benutzerverwaltung
==================
Dreh und Angelpunkt der Rechte- und Benutzerverwaltung sind die drei Dateien /etc/passwd, /etc/group und /etc/shadow
/etc/passwd # Enthält: Benutzername, uid (user id), gid (group id) der primären Gruppe, Kommentarfeld, home-Verzeichnis und Shell
# tux01 :x :1000:1000:tux01,,, :/home/tux01 :/bin/bash
# Username|Früher PW|uid |gid |Kommentar|Home- |Loginshell
|Hash | | | |verzeichnis |
/etc/group # Enthält: Gruppenname, gid (group id) und die ihr zugehörigen Benutzer
# tux01:x:1000:
# pl:x:1001:petra,tux01
/etc/shadow # Enthält:
# tux01:$6$K2fgl8DO$rgdwSL1Iil.q.q.q.mZqra/knMenT/oaUfpro7qMJw8W0DaPMrB0iJK6w9SYkQOz.vU1knhFs8ZfdRavL11S50:16744:0:99999:7:::
# ! Benutzer ist gesperrt
# * Benutzer kann sich nicht via pem einloggen, aber z. B. via ssh mit key
# HASH: Benutzer hat ein Passwort gesetzt und kann sich einloggen.
groupadd pl # Eine Gruppe namens pl hinzufügen
groupdel pl # Die Gruppe namens pl löschen
useradd petra # Legen den Benutzer petra an. VORSICHT: Hierbei werden die Standard-Voreinstellungen des Systems verwendet,
# welche überall anders sein könnten (z. B. Nutzer ohne home anlegen). Da man dies vermeiden möchte, sollte man
# diesen Befehl immer mit Optionen verwenden. Hilfe gibt: useradd --help
useradd -m -g users -G pl,cdrom,video,audio -s /bin/bash -c "Petra Langbein, die Schönheit aus der Karibik" petra
# Legt den User petra an, -m kreiert ein /home Verzeichnis, primäre Gruppe soll users sein (-g), zusätzich ist sie Mitglied
# der Gruppen pl, cdrom, video und audio (-G), als Shell wird die bash eingestellt (-s), und mit -c ein Kommentar eingefügt
userdel petra # löscht den User petra, lässt aber das /home Verzeichnis stehen
userdel -r petra # löscht den User petra zusammen mit seinem /home Verzeichnis
chage -l petra # Zeige die Einstellungen zum Passwort des Users petra
chage petra # Ändert die Passworteinstellungen des Users petra (wann läuft es ab, wann erfolgt Warnung etc.)
usermod petra # Den User petra modifizieren. Mit usermod kann man den Benutzernamen ändern, die Gruppen ändern, das /home verschieben, etc.
# Der Befehl kann zwar auch Gruppenzugehörigkeiten ändern, ist hiefür jedoch suboptimal. Besser nutzt man hierzu gpasswd
gpasswd -a tux01 pl # Füge den Nutzer tux01 zur Gruppe pl hinzu
gpasswd -d tux01 pl # Entferne den Nutzer tux01 aus der Gruppe pl
Aufgabe:
--------
Mehrere Benutzer sollen gemeinsam miteinander auf einem lokalen System arbeiten können.
1. Eine neue Gruppe anlegen. Alle User, die zusammen arbeiten sollen, sollen Mitglieder dieser funktionalen Gruppe werden.
- groupadd pl
2. Neuen User petra hinzufügen und zum Mitglied der Gruppe pl machen (u. a.)
- useradd -m -g users -G pl -s /bin/bash -c "Petra Langbein" petra
3. User petra ein Passwort zuweisen, damit sie sich einloggen kann
- passwd petra
4. Den User tux01 der Gruppe pl hinzufügen
- gpasswd -a tux01 pl
5. Einen gemeinsamen Projektordner für beide Nutzer erstellen. Da die kooperative Arbeit nur lokal stattfinden soll, am besten im /home
- mkdir /home/projekt
6. Die Besitzrechte des projektordners anpassen
- chown :pl /home/projekte
7. Problem:
Beide User können nun auf das Verzeichnis zugreifen, aber werden Dateien oder Verzeichnisse erstellt, so haben diese
a) Ownerschaft und Gruppenbesitz des Users, der sie erstellt hat
b) die Standard Rechte des Systems für neu erstellte Files, z. B. rw- r-- r--
8. Lösung für:
a) Wir setzen die sId der Gruppe auf den Projektordner.
- chmod g+s /home/projekt # g+s = setId auf Gruppe
- das Ergebnis sieht dann folgendermaßen aus: ls -l
d---rws--- 4 root pl 4096 Nov 10 15:44 projekt # Das s-bit sitzt immer auf dem x. Sollte es mal als
# großes S dargestellt werden, dann ist das Bit
# beschädigt. Man sollte die Sonderbits sst immer nur
# mit u+s, g+t usw. setzen, um dies zu vermeiden.
- Dies führt nun dazu, dass alle im Verzeichnis "projekt" erstellten Dateien und Verzeichnisse die Gruppe pl 'vererbt' bekommen.
Zusätzlich wird das setId Bit an jedes Unterverzeichnich weiter gegeben.
b) Wir setzen eine Default-Maske mit Hilfe von ACLs
- setfacl -m 'd:u::rwx,g::rwx,o::-' /home/projekt/
Wenn man sich die ACL dann anschaut, sieht sie folgendermaßen aus:
getfacl /home/projekt/ # Befehl um die ACL des Ordners zu sehen
# file: projekt/ # Welches File betroffen ist (Ordner projekt)
# owner: root # Besitzer von projekt
# group: pl # Gruppe von projekt
# flags: -s- # Welche Sonderbits (sst) sind gesetzt
user::rwx # beliebiger User hat rwx
user:franz:rwx # User franz hat Ausnahmegenehmigung, er darf rwx
group::rwx # Die Gruppe darf rwx
mask::rwx
other::--- # Others dürfen nix
default:user::rwx # Gesetzte
default:group::rwx # default-Maske mit
default:other::--- # user=rwx,group=rwx,other=---
Anmerkung:
Die ACL mit dem User Franz wurde zuvor von uns durchgespielt um zu demonstrieren,
dass dieser nun, obwohl nicht der Gruppe PL zugehörig, die gesetzten Rechte im Projektordner
erhalten hat.
9. Exkurs stickybit:
Um im Projektordner gemeinsam arbeiten zu können, müssen die Kollegen in der Lage sein auch die Dateien der anderen User im Projektordner
löschen zu dürfen. Dies ist auch gegeben. Man könnte dies jedoch verhindern, indem man auf dem Verzeichnis /home/projekt noch das Stickybit
setzt:
chmod +t projekt/
d---rws--T 4 root pl 4096 Nov 10 15:44 projekt # Das Stickybit wird immer hinten angezeigt, 'klebt' aber
# am User
Das führt nun dazu, dass nur noch der Besitzer einer Datei diese löschen und auch verschieben darf. Macht in einem gemeinsamen Projektordner
also wenig Sinn. Klassischer Anwendungsfall sind die Verzeichnisse /tmp/ und /var/tmp/
Rechteverwaltung
================
ls -la /home/tux01/Spielplatz Linuxkurs
-rw-r--r-- 1 tux01 tux01 5528 Nov 10 13:12 LinuxKurs
Erläuterung:
- |rwx |rwx |rwx |1 |tux01 |tux01 |5528 |Nov 10 13:12|LinuxKurs|
| s | s | t | | | | | | |
Type|User |Gruppen|others|lc|Besitzer|Gruppe|Größe|mtime |Dateiname|
|Rechte |Rechte |Rechte| | | | | | |
Typen:
- plain file
d directory
l sym link
Special files:
b block # Gerät, z. B. Festplatte
c charakter
p named pipe
s socket
Legende:
lc = link counter -> wieviele Links verweisen auf diese Datei
mtime = Zeitstempel, wann die letzte Änderung erfolgt ist
r = Leserecht
w = Schreibrecht
x = Ausführrecht (bei Ordnern Recht diesen zu öffnen)
Sonderbits
s = setid -> kann auf user oder group gesetzt werden
t = sticky bit -> hängt am Owner der Datei/des Verzeichnisses
Befehle
-------
chown # Den Besitzer einer Datei/eines Verzeichnisses ändern
chgrp # Die Gruppe einer Datei/eines Verzeichnisses ändern
chmod # Die Berechtigungen einer Datei/eines Verzeichnisses ändern
Beispiele:
----------
chgrp audio /home/tux01/Spielplatz/mein_buch # Ändert die Gruppe der Datei mein_buch
chown petra /home/tux01/Spielplatz/mein_buch # Ändert den Besitzer der Datei mein_buch auf petra, Vorraussetzung sind root-Rechte
chmod g+w /home/tux01/Spielplatz/mein_buch # fügt der Gruppe Schreibrechte auf die Datei mein_buch hinzu
chmod ug-w /home/tux01/Spielplatz/mein_buch # Entfernt die Schreibrechte für User UND Gruppe auf die Datei mein_buch
chmod u=rw,g+w,o= mein_buch # User bekommt Lese- und Schreibrechte, Gruppe bekommt Schreibrechte und others keine Rechte auf mein_buch
ACL - Access Control List
=========================
Gesetzte ACL für den Ordner Projekt anzeigen:
getfacl /home/projekt/
getfacl: Entferne führende '/' von absoluten Pfadnamen
# file: home/projekt
# owner: root
# group: root
user::rwx
group::r-x
other::r-x
Setze ACL für den User franz
setfacl -m 'u:franz:rwx' /home/projekt/
Franz erhält die Rechte rwx für den Ordner projekt und dessen Unterordner, obwohl er nicht zur Gruppe pl gehört.
Setze eine default Mask auf den Ordner /home/projekt
setfacl -m 'd:u::rwx,g::rwx,o::-' projekt/
Für alle Owner im Ordner projekt (und dessen Unterordner) gilt rwx, für alle Gruppen gilt rwx und für alle anderen gibt es keine Rechte.
Partitionierung:
================
Werkzeuge:
----------
fdisk # Simple, textbasierte Partitionierung
cfdisk # Ähnlich wie alte Windows-Partitionierung, mit tabellarischer Übersicht
gdisk # Wie fdisk, aber für GPT
sfdisk #
parted # fette Sau mit X-Millionen Möglichkeiten
gparted # grafisches Frontend von parted
Befehle:
--------
fdisk -l /dev/sda # listet die Partition Table auf
fdisk /dev/sda # Startet die Partitionierung von sda
p # print: Macht das gleiche wie fdisk -l /dev/sda
m # Ruft die Hilfe auf
o # Neue Partitionstabelle wird erstellt (vorhandene gelöscht)
n # Neue Partition anlegen
Device Boot Start End Sectors Size Id Type
/dev/sda1 * 2048 526335 524288 256M 83 Linux
/dev/sda2 526336 488281249 487754914 232,6G 5 Extended
/dev/sda5 528384 25694207 25165824 12G 83 Linux
/dev/sda6 25696256 34084863 8388608 4G 82 Linux swap / Solaris
Command (m for help): w
The partition table has been altered.
Calling ioctl() to re-read partition table.
Re-reading the partition table failed.: Das Gerät oder die Ressource ist belegt
The kernel still uses the old table. The new table will be used at the next reboot or after you run partprobe(8) or kpartx(8)
Die ausgebene Fehlermeldung mit diesem Befehl beheben.
partprobe
LVM
===
Volume Group.
Kann beliebig benannt werden. Sinnvoll den Namen im Kontext seines Hosts zu benennen. Mit einer Volume Group fasst man mehrere physikalische
Volumes zusammen. Man kann auch mehrere Volume Groups haben, z. B. könnte man alle magnetischen Datenträger zu einer Volume Group (für Storage) zusammenfassen
und alle SSD Platten zu einer weiteren für schnelle Zugriffe.
Bei Debian ist LVM noch nicht vorinstalliert (bei den meisten anderen Distris schon). Um es zu installieren benötigt man das Paket lvm2 (heißt auf allen Distris gleich):
apt-get install lvm2
Wir erstellen nun ein LVM auf unsere neue Partition sda7.
1. pvcreate /dev/sda7 # ACHTUNG: Diese Operation ist destruktiv.
2. Mit pvdisplay kann man sich die PV (Physical Volume)
anzeigen lassen. Dies sind aber zu viele Infos
Mit pvs bekommt man eine schmalere Übersicht:
# PV = Welches device wurde dem Physical Volume zugewiesen
PV VG Fmt Attr PSize PFree # VG = Welche Volume Group (Name) ist dem physischen Speicher zugeordnet
/dev/sda7 lvm2 --- 104,30g 104,30g # zZ. ist das Feld für VG leer, das ändert sich aber schon im nächsten Schritt
3. Als nächstes erstellen wir eine VG (Volume Group)
mit dem Namen vg01
vgcreate vg01 /dev/sda7 # vgcreate Name_der_VG Name_des_Devices
4. Mit vgs können wir unsere VGs sehen:
# VG = Volume Name
VG #PV #LV #SN Attr VSize VFree # PV = Wieviele Physical Volumes sind zugewiesen
vg01 1 0 0 wz--n- 104,30g 104,30 # LV = Wieviele Logical Volumes sind zugewiesen
# SN = Wieviele Snapshots gibt es
5. Logische Volumes erstellen
lvcreate --size 4G --name varlv vg01 # Zum Auslagern von /var und /srv
lvcreate --size 4G --name srvlv vg01 # lvcreate --size GRÖẞENANGABE --name BEZEICHNUNG Welcher_VG_zuordnen
Die neuen logischen Volumes können wir nun unter den Devices vorfinden:
ls -la /dev/vg01/
lrwxrwxrwx 1 root root 7 Nov 11 11:11 srvlv -> ../dm-1 # /dev/VolumeGruppenNamen nur ein symlink
lrwxrwxrwx 1 root root 7 Nov 11 11:11 varlv -> ../dm-0
ls -la /dev/dm-1
brw-rw---- 1 root disk 254, 1 Nov 11 11:11 /dev/dm-1 # symlink zeigt auf echtes Blockgerät
6. Logische Volumes formatieren. varlv soll mit ext4 und srvlv
mit xfs formatiert werden. Um xfs nutzen zu können, muss es
zunächst installiert werden.
apt-get install xfsprogs # um XFS nutzen zu können
apt-get install btrfs-tools # Falls man mal mit BetterFs experimentieren möchte ;-)
mkfs.ext4 -L varfs /dev/vg01/varlv # varlv mit ext4 formatieren
mkfs.xfs -L srvfs /dev/vg01/srvlv # srvlv mit xfs formatieren
Logische Volumes mit lvs anzeigen:
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
srvlv vg01 -wi-a----- 4,00g
varlv vg01 -wi-a----- 4,00g
7. Logische Volumes mounten
Zum temporären mounten nutzt man standardmäßig (man muss natürlich nicht) den Ordner /mnt.
Wenn man, wie in diesem Fall, mehrere Geräte mounten möchte, erstellt man sich üblicherweise
hierzu eigene Unterordner.
mkdir /mnt/srv
mkdir /mnt/var
Dann mounten wir die Geräte in diese Ordner.
mount /dev/vg01/srvlv /mnt/srv/
mount /dev/vg01/varlv /mnt/var
Mit df -h sehen wir dann die gemounteten Geräte:
/dev/mapper/vg01-srvlv 4,0G 33M 4,0G 1% /mnt/srv
/dev/mapper/vg01-varlv 3,9G 8,0M 3,6G 1% /mnt/va
8. Größe von logischen Volumes verändern
Jetzt fällt mir plötzlich ein, dass 4G für srvlv doch etwas klein sind. Daher möchte ich es lieber auf 8GB haben.
vresize --size 8G /dev/vg01/srvlv
Und schon hat es die neue Größe von 8GB. Statt einen absoluten Wert, kann man auch eine Vergrößerung angeben:
vresize --size +4G /dev/vg01/srvlv
lvs
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
srvlv vg01 -wi-ao---- 12,00g
varlv vg01 -wi-ao---- 4,00g
Und schon hat srvlv insgesamt 12GB. Im Mountpoint sieht man das natürlich noch nicht, denn dem Filesystem
ist die neue Größe noch nicht bekannt:
df -h /mnt/srv/
Dateisystem Größe Benutzt Verf. Verw% Eingehängt auf
/dev/mapper/vg01-srvlv 4,0G 33M 4,0G 1% /mnt/srv
Also muss das Filesystem noch vergrößert werden. Der Befehl ist abhängig vom verwendeten Filesystem.
Im Grunde wird eine Änderung der Größe im Filesystem während des laufenden Betriebs, also während es noch
einghangen ist, nur mit folgenden Filesystemen: ext2, ext3, ext4, xfs oder btrfs.
Da srvlv mit xfs formatiert wurde, lautet der Befehl:
xfs_growfs /mnt/srv/ # Hier kann direkt der Pfad angegeben werden
Für extX Filesysteme wie z. B. varlv wäre es ein anderer Befehl:
resize2fs /dev/vg01/srvlv # Hier gibt man 'Der Gerät' an, nicht den Pfad
Nun kopieren wir den gesamten Inhalt von /var/ nach /mnt/var/ und von /srv/ nach /mnt/srv/
cp -ax /var/. /mnt/var/ # WICHTIG ist der . hinter dem Slash
cp -ax /srv/. /mnt/srv/ # So werden alle Inhalte (auch versteckte) mit allen
# Permissions und Ownerships kopiert/geclont
# Den Schalter x sollte man sich beim Clonen angewöhnen
# auch wenn er hier nicht nötig war
Wir checken, ob das Kopieren geklappt hat.
du -sx /var/ /mnt/var/
1121588 /var/
1121496 /mnt/var/ # Kleinere Unterschiede scheinen normal zu sein
Alternativ geht es auch mit:
find /var/ -xdev | wc -l
find /mnt/var/ -xdev | wc -l
Ergebnis: 9702
Nun wieder unmounten
umount /mnt/var
umount /mnt/srv
vim /etc/fstab
find
====
find / -type f -name '*orname*' &> /tmp/find_alles
find / -type f -name '*orname*'
User/Group:
find / /home/ -xdev -user petra -ls
find / /home/ -xdev -uid 1014 | xargs chown -c holger:users
find / /home/ -xdev -nouser -ls
find / /home/ -xdev -nogroup -ls
Inode:
find /home/ -xdev -type f -inum 394723 -ls # finde alle Dateien im Pfad /home vom Type file mit der
# inode 394723 und liste sie auf
Rechte:
find / -xdev -type f -perm -4100 -ls 2> /dev/null # finde alle Dateien auf denen das setId Bit auf dem User liegt
find / -xdev -type f -perm /u=s # s. o. nur andere Schreibweise
Case Insensitive:
find / -type f -iname '*vorname*' # Suche case insensitive (-iname)
Spezialgeräte
=============
ls -l /dev/{null,zero,*ran*}
crw-rw-rw- 1 root root 1, 3 Nov 11 12:55 /dev/null # Schwarzes Loch, was hier rein geht, wird nie wieder gesehen
crw-rw-rw- 1 root root 1, 8 Nov 11 12:55 /dev/random # Gerät für echte Entropie
crw-rw-rw- 1 root root 1, 9 Nov 11 12:55 /dev/urandom # Gerät für Zufallszahlen
crw-rw-rw- 1 root root 1, 5 Nov 11 12:55 /dev/zero # Kann sehr schnell, sehr viele Nullen ausgeben
Wie schnell /dev/zero schreiben kann, kann man mit folgendem
Befehl sehr schön sehen.
dd if=/dev/zero of=/dev/null # Nach ca. 10 Sekunden abbrechen
^C15954945+0 Datensätze ein
15954945+0 Datensätze aus
8168931840 Bytes (8,2 GB) kopiert, 7,35909 s, 1,1 GB/s
Mit dem selben Befehl könnte man eine Festplatte endgültig löschen:
dd if=/dev/zero of=/dev/sda1
Prozesse
========
Legende:
STATUS
S = Sleep
R = Run # Es können nur soviele Prozesse gleichzeitig laufen, wie wir CPU Kerne haben
T = Gestoppt/Angehalten (Trace)
D = IO-Wait # Prozess wartet auf Daten
Z = Zombie
TTY
+ = im Vordergrund laufend
? = Prozesse ohne Terminal -> Deamons
Befehle rund um Prozesse
------------------------
pstree
pstree -p
pstree -pl
pstree -plu
pstree -plu -s $$ # Zeig mir MEINEN Prozess
systemd(1)───lightdm(650)───lightdm(1086)───mate-session(1097,tux01)───mate-panel(1142)───mate-terminal(1351)───bash(4832)───pstree(4885)
pstree -plu -s 1351 # eig mir den Prozess 1351 (mate-terminal)
systemd(1)───lightdm(650)───lightdm(1086)───mate-session(1097,tux01)───mate-panel(1142)───mate-terminal(1351)─┬─bash(1360)───vim(1460)
├─bash(1362)───su(1461,root)───bash(1462)
├─bash(1606)─┬─sleep(4817)
│ └─vim(3374)
├─bash(4832)───pstree(4892)
├─gnome-pty-helpe(1357)
├─{dconf worker}(1355)
├─{gdbus}(1354)
ps a # Alle Prozesse, die auf einem Terminal gebunden sind
ps ax | less # ALLE Prozesse ausgeben und scrollbar machen
ps aux | less # Alle Prozesse + User + Verbrauch
ps auxw | less # s.o. + Prozesse mit Schaltern
ps auxwf | less # s.o. aber Darstellung als Baum
kill -l # Liste alle Signale auf, welche ich an einen Prozess schicken kann
kill -SIGCONT 4817 # Setze den gestoppten Prozess mit der PID 4817 fort
kill -CONT 4817 # Das gleiche wie SIGCONT, aber abgekürzt
kill -18 4817 # Wieder das gleiche, denn SIGCONT hat die Nr. 18
NOTAUSSCHALTER
==============
Dirty Shutdown
k t
B U S T I E R # Wird von hinten geöffnet ;-)
o n s r l r a # d. h. mit R anfangen und bis B durch gehen
o m y a l m w
t o n c
u c e
n
t
Um den Dirty Shutdown durch zu führen, wechselt man auf ein (z.B.) tty2, um zu sehen, was passiert (ist aber nicht nötig)
Dann drückt man:
STRG + ALT + DRUCK/S-ABF # S-ABF heißt, man spricht direkt mit dem Kernel
STRG + ALT hält man gedrückt und dann geht man die Buchstaben durch: R E I T S U B
Dabei sind S (sync) und U (unmount) das wichtigste (andere sind z. T. vom BS deaktiviert), denn so wird ein persistentes
filesystem hinterlassen vor dem Reboot.
Hardware
========
ls -la /etc/initramfs-tools/
drwxr-xr-x 5 root root 4096 Nov 5 15:49 .
drwxr-xr-x 142 root root 12288 Nov 12 09:05 ..
drwxr-xr-x 2 root root 4096 Nov 5 15:49 conf.d
drwxr-xr-x 2 root root 4096 Apr 13 2015 hooks
-rw-r--r-- 1 root root 947 Mär 1 2015 initramfs.conf
-rw-r--r-- 1 root root 246 Nov 5 15:49 modules
drwxr-xr-x 11 root root 4096 Nov 5 15:49 scripts
-rw-r--r-- 1 root root 378 Okt 27 2014 update-initramfs.conf
vim initramfs.conf
MODULES=most # Alle bzw. die meisten Module laden
# dep wäre, schau Dir Dein System an und lade das nötigste
KEYMAP=n # auf y setzen, damit man in init deutsche Tastatur hat, wichtig
# bei Crypto
vim update-initramfs.conf
backup_initramfs=no # Bitte auf yes stellen, damit ein Backup angelegt wird von
# initramfs
Befehle:
--------
dmesg
lsmod # Liste geladene Module auf
modprobe MODULNAME # Lade Modul MODELNAME bspw. modprobe xfs
modprobe -r MODULNAME # Entferne Modul MODULNAME
modinfo MODULNAME # Gib Infos über Modul aus
Beispiel:
modinfo xfs
filename: /lib/modules/3.16.0-4-amd64/kernel/fs/xfs/xfs.ko
license: GPL
description: SGI XFS with ACLs, security attributes, realtime, large block/inode numbers, no debug enabled
author: Silicon Graphics, Inc.
alias: fs-xfs
depends: libcrc32c
intree: Y
vermagic: 3.16.0-4-amd64 SMP mod_unload modversions
cat /proc/version # Systeminformationen
Hardware-Fehlersuche:
---------------------
lspci # Zeige alle Cold-Plug Geräte
lspci -nn # Zeige alle mit IDs
lspci -nn -vv | less # Zeig mir alle Infos
lsusb # Zeige alle Hot-Plug Geräte
lsusb -vv | less # Zeig mir alle Infos
Wenn was nicht läuft
VGA compatible controller [0300]: NVIDIA Corporation NV44 [Quadro NVS 285] [10de:0165] (rev a1) (prog-if 00 [VGA controller])
vim /etc/udev/rules.d/70-persistent-net.rules # Wenn gelöscht, automatisch neu angelegt
Backup
------
inklusiv exklusiv
----------------------------------------
/ /
-/dev /home
-/sys
-/proc
-/run
+Partitionierung # sfdisk -d > sfdisk.bak
+LVM # (vgs;pvs;lvs) > lvm.bak
+Raid
+Crypt(Luns)
### Infos für uns Admins ###
Für unsere VMs
apt-get install haveged # Entropieerhöhung für /dev/random
apt-get install apt-cacher-ng # Paketverwaltungsserver für unsere VMs
apt-get install iotop # Schreibprozesse überwachen
apt-get install powertop # Für Laptops
apt-get install melt # grafisches diff