aboutsummaryrefslogtreecommitdiff
path: root/documentation/content/ja/books/handbook/basics/_index.adoc
blob: 043faad85dfaf055863156c7bf42703b19512691 (plain) (blame)
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
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058
1059
1060
1061
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098
1099
1100
1101
1102
1103
1104
1105
1106
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153
1154
1155
1156
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201
1202
1203
1204
1205
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219
1220
1221
1222
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248
1249
1250
1251
1252
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290
1291
1292
1293
1294
1295
1296
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308
1309
1310
1311
1312
1313
1314
1315
1316
1317
1318
1319
1320
1321
1322
1323
1324
1325
1326
1327
1328
1329
1330
1331
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346
1347
1348
1349
1350
1351
1352
1353
1354
1355
1356
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393
1394
1395
1396
1397
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443
1444
1445
1446
1447
1448
1449
1450
1451
1452
1453
1454
1455
1456
1457
1458
1459
1460
1461
1462
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476
1477
1478
1479
1480
1481
1482
1483
1484
1485
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550
1551
1552
1553
1554
1555
1556
1557
1558
1559
1560
1561
1562
1563
1564
1565
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581
1582
1583
1584
1585
1586
1587
1588
1589
1590
1591
1592
1593
1594
1595
1596
1597
1598
1599
1600
1601
1602
1603
1604
1605
1606
1607
1608
1609
1610
1611
1612
1613
1614
1615
1616
1617
1618
1619
1620
1621
1622
1623
1624
1625
1626
1627
1628
1629
1630
1631
1632
1633
1634
1635
1636
1637
1638
1639
1640
1641
1642
1643
1644
1645
1646
1647
1648
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672
1673
1674
1675
1676
1677
1678
1679
1680
1681
1682
1683
1684
1685
1686
1687
1688
1689
1690
1691
1692
1693
1694
1695
1696
1697
1698
1699
1700
1701
1702
1703
1704
1705
1706
1707
1708
1709
1710
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729
1730
1731
1732
1733
1734
1735
1736
1737
1738
1739
1740
1741
1742
1743
1744
1745
1746
1747
1748
1749
1750
1751
1752
1753
1754
1755
1756
1757
1758
1759
1760
1761
1762
1763
1764
1765
1766
1767
1768
1769
1770
1771
1772
1773
1774
1775
1776
1777
1778
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846
1847
1848
1849
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891
1892
1893
1894
1895
1896
1897
1898
1899
1900
1901
1902
1903
1904
1905
1906
1907
---
title: 第3章 FreeBSD の基礎知識
part: パートI. 導入
prev: books/handbook/bsdinstall
next: books/handbook/ports
description: FreeBSD オペレーティングシステムの基本的なコマンドと機能について
tags: ["basics", "virtual consoles", "users", "management", "permissions", "directory structure", "disk organization", "mounting", "processes", "daemons", "shell", "editor", "manual pages", "devices"]
showBookMenu: true
weight: 5
path: "/books/handbook/basics/"
aliases: ["/ja/books/handbook/consoles/","/ja/books/handbook/users-synopsis/","/ja/books/handbook/permissions/","/ja/books/handbook/dirstructure/","/ja/books/handbook/disk-organization/","/ja/books/handbook/mount-unmount/","/ja/books/handbook/basics-processes/","/ja/books/handbook/shells/","/ja/books/handbook/editors/","/ja/books/handbook/basics-devices/","/ja/books/handbook/basics-more-information/"]
---

[[basics]]
= FreeBSD の基礎知識
:doctype: book
:toc: macro
:toclevels: 1
:icons: font
:sectnums:
:sectnumlevels: 6
:sectnumoffset: 3
:partnums:
:source-highlighter: rouge
:experimental:
:images-path: books/handbook/basics/

ifdef::env-beastie[]
ifdef::backend-html5[]
:imagesdir: ../../../../images/{images-path}
endif::[]
ifndef::book[]
include::shared/authors.adoc[]
include::shared/mirrors.adoc[]
include::shared/releases.adoc[]
include::shared/attributes/attributes-{{% lang %}}.adoc[]
include::shared/{{% lang %}}/teams.adoc[]
include::shared/{{% lang %}}/mailing-lists.adoc[]
include::shared/{{% lang %}}/urls.adoc[]
toc::[]
endif::[]
ifdef::backend-pdf,backend-epub3[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]
endif::[]

ifndef::env-beastie[]
toc::[]
include::../../../../../shared/asciidoctor.adoc[]
endif::[]

[[basics-synopsis]]
== この章では

この章では FreeBSD オペレーティングシステムの基本的なコマンドと機能について記述しています。
ここに書かれてあることのほとんどは、どんな UNIX(R) -like なオペレーティングシステムにもあてはまります。
FreeBSD の初心者であれば、この章を読んでおいた方がきっといいはずです。

この章を読んで分かることは、次のようなことです。

* 仮想コンソールの使い方と設定方法
* FreeBSD システム上でユーザやグループを作成し管理する方法
* UNIX(R) のファイルの許可属性の仕組みと FreeBSD のファイルフラグについて
* FreeBSD のファイルシステムの構成
* FreeBSD のディスク構成
* ファイルシステムをマウント、アンマウントする方法
* プロセス、デーモンとシグナルとはなにか
* シェルとはなにか。 また、デフォルトのログイン環境を変える方法
* テキストエディタの基本的な使い方
* デバイスおよびデバイスノードとはなにか
* さらに詳しい情報を得るためのマニュアルページの読み方

[[consoles]]
== 仮想コンソールと端末

起動時に自動的にグラフィカルな環境が起動するように FreeBSD を設定していなければ、システムが起動すると、以下のようなコマンドラインのログインプロンプトが表示されます。

[source,shell]
....
FreeBSD/amd64 (pc3.example.org) (ttyv0)

login:
....

最初の行はシステムの情報です。
`amd64` は、このシステム上で 64 ビット版の FreeBSD が動作していることを示しています。
ホスト名は `pc3.example.org`、`ttyv0` は "システムコンソール" であることを示しています。
次の行はログインプロンプトです。

FreeBSD はマルチユーザシステムなので、ユーザを区別する何がしかの手段が必要です。
システム上のプログラムを実行できるようになるには、すべてのユーザに対してシステムにログインすることが義務付けられています。
すべてのユーザは、一意な "ユーザ名" と "パスワード" を持っています。

システムコンソールにログインするには、システムのインストール時に crossref:bsdinstall[bsdinstall-addusers,ユーザの追加] で追加したユーザ名を入力して、kbd:[Enter] を押してください。
次にそのユーザのパスワードを入力して、kbd:[Enter] を押してください。
セキュリティの観点から、パスワードは _表示されません_。

パスワードを正確に入力したら、日々のメッセージ (MOTD) が表示され、
コマンドプロンプトが表示されます。
ユーザ作成時に選択したシェルに依存しますが、このプロンプトは `+#+`, `$` または `%` といった記号です。
プロンプトはユーザが FreeBSD のシステムコンソールへログインし、利用可能なコマンドを実行する準備ができていることを示しています。

[[consoles-virtual]]
=== 仮想コンソール

システムコンソールからシステムに対話的にコマンドを実行できますが、FreeBSD システム上でキーボードによりコマンドラインから利用しているユーザは、通常代わりに仮想コンソールにログインします。
デフォルトではシステムからのメッセージはシステムコンソールに出力され、これらのメッセージが、ユーザが作業しているコマンドまたはファイル上に表示されるため、ユーザが現在の作業に集中できなくなるためです。

デフォルトでは FreeBSD は、複数の仮想コンソールを表示してコマンドを入力できるように設定されています。
各仮想コンソールは、個別のログインプロンプトおよびシェルを持っており、簡単に仮想コンソール間の切り替えができます。
これにより、グラフィカルな環境において同時に複数のウィンドウを開いてコマンドラインの環境を提供できます。

FreeBSD では kbd:[Alt+F1] から kbd:[Alt+F8] までのキーの組み合わせが、仮想コンソール間の切り替えに予約されています。
システムコンソール (`ttyv0`) に切り替えるには、kbd:[Alt+F1] を使ってください。
最初の仮想コンソール (`ttyv1`) にアクセスするには kbd:[Alt+F2]、2 番目の仮想コンソール (`ttyv2`) にアクセスするには kbd:[Alt+F3]、といったように使ってください。
Xorg をグラフィカルなコンソールとして使用しているときには、kbd:[Ctrl+Alt+F1] の組み合わせを使用すると、テキストベースの仮想コンソールへ戻ります。

あるコンソールから他に切り替えるのに応じて、FreeBSD は画面への出力を管理します。
結果として、FreeBSD で動かすコマンドを入力するのに使える複数の画面とキーボードを仮想的に実現できるのです。
ある仮想コンソールで実行したプログラムは、ユーザが別の仮想コンソールに切り替えても実行を停止しません。

FreeBSD のコンソールおよびキーボードドライバに関するさらなる技術的な説明については、man:kbdcontrol[1], man:vidcontrol[1], man:atkbd[4], man:syscons[4] および man:vt[4] を参照してください。

FreeBSD では以下の `/etc/ttys` のセクションのように複数の利用可能な仮想コンソールが設定されています。

[.programlisting]
....
# name    getty                         type  status comments
#
ttyv0   "/usr/libexec/getty Pc"         xterm   on  secure
# Virtual terminals
ttyv1   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv2   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv3   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv4   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv5   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv6   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv7   "/usr/libexec/getty Pc"         xterm   on  secure
ttyv8   "/usr/X11R6/bin/xdm -nodaemon"  xterm   off secure
....

仮想コンソールを無効にするには、無効にしたい仮想コンソールの行をコメント記号 (`+#+`) から始まるように設定してください。
たとえば、利用可能な仮想コンソールを 8 つから 4 つに減らす場合には、`ttyv5` から `ttyv8` までの仮想コンソールを表す最後の 4 行の先頭に `+#+` を挿入してください。
システムコンソールを表す `ttyv0` から始まる行はコメントアウト _しないでください。_
最後の仮想コンソール (`ttyv8`) は、 crossref:x11[x11,X Window System] で説明されているように Xrog がインストールされて設定されている場合に、グラフィカル環境にアクセスするために使用されます。

このファイルのそれぞれのカラムと仮想コンソールに設定可能なオプションの詳しい説明は、man:ttys[5] のマニュアルを参照してください。

[[consoles-singleuser]]
=== シングルユーザモード

FreeBSD のブートメニューでは、"シングルユーザモード" と表示されているオプションが提供されています。
このオプションを選択すると、システムは "シングルユーザモード" と呼ばれる特別なモードで起動します。
このモードは、システムが起動しない場合に修正のため、または `root` のパスワードが分からなくなってしまいリセットするときなど、特別な状況で利用されます。
シングルユーザモードで動かしている場合は、ネットワークや他の仮想コンソールは利用できません。
しかし、システムへの完全な `root` 権限を利用でき、デフォルトの設定では `root` のパスワードは必要ありません。
このような理由のため、このモードで起動する場合には物理的なキーボードへのアクセスが必要であり、FreeBSD システムの安全性の観点からキーボードに物理的にアクセスできる人を決めておく事が必要です。
シングルユーザモードを管理する設定は、`/etc/ttys` ファイルの以下のセクションにあります。

[.programlisting]
....
# name  getty                           type  status  comments
#
# If console is marked "insecure", then init will ask for the root password
# when going to single-user mode.
console none                            unknown  off  secure
....

デフォルトでは、status は `secure` に設定されています。
これは、キーボードへアクセスできるかユーザが誰であるかが重要ではない、もしくはアクセスできるユーザについては物理的なセキュリティポリシーでコントロールされていることが前提となっています。
この設定を `insecure` に変更するケースとしては、システムは安全ではなく、誰でもキーボードにアクセスできる環境が想定されます。
この行を `insecure` に変更すると、FreeBSD がシングルユーザモードで起動した場合に `root` のパスワードが要求されます。

[NOTE]
====
__ `insecure` に変更する場合は十分注意してください! __
`root` のパスワードを忘れてしまうと、シングルユーザモードで起動することはできますが、FreeBSD の起動のプロセスに詳しくない人が起動できるようにするのは難しいかも知れません。
====

[[consoles-vidcontrol]]
=== コンソールのビデオモードの変更

FreeBSD のデフォルトのビデオモードは 1024x768 や 1280x1024 など、グラフィックチップおよびディスプレイが対応しているサイズに調整されます。
別のビデオモードを使うには、`VESA` モジュールをロードしてください。

[source,shell]
....
# kldload vesa
....

その後、ハードウェアが対応しているビデオモードを man:vidcontrol[1] を使って確認してください。
以下を実行すると、対応しているビデオモードを調べることができます。

[source,shell]
....
# vidcontrol -i mode
....

このコマンドは、使用しているハードウェアが対応しているビデオモードの一覧を表示します。
その後、man:vidcontrol[1] を `root` ユーザで実行して、新しく使用するビデオモードを選択してください。

[source,shell]
....
# vidcontrol MODE_279
....

このビデオモードで良ければ、起動時に自動的に設定されるように `/etc/rc.conf` に以下のように追加してください。

[.programlisting]
....
allscreens_flags="MODE_279"
....

[[users-synopsis]]
== ユーザと基本的なアカウント管理

FreeBSD は、複数のユーザが同時にコンピュータを使えるようにします。 スクリーンとキーボードの前に一度に座れるのはその中の一人だけですが ユーザは何人でもネットワークを通してログインできます。 システムを使うためには、 どのユーザもアカウントがなければなりません。

この章では、以下のことを説明します。

* FreeBSD システムにおけるさまざまな種類のユーザアカウントについて
* ユーザアカウントを追加、削除および変更する方法
* ユーザやグループが利用できるリソースの上限を制御する方法
* グループの作成、 およびグループにユーザをメンバとして追加する方法

[[users-introduction]]
=== アカウントの種類

FreeBSD システムへアクセスするには、 かならずアカウントが使われ、 また、プロセスもすべてユーザによって実行されるので、 ユーザとアカウントの管理は、重要なものです。 

アカウントには大きく分けて三種類あります。 システムアカウント (system accounts)、ユーザアカウント (user accounts)、 そしてスーパーユーザ (superuser) です。

[[users-system]]
==== システムアカウント

システムアカウントは、DNS、メール、 ウェブサーバといった各種サービスを運用するために使われます。 この目的は、セキュリティを確保するためです。 もしすべてのサービスがスーパーユーザで実行されていると、 それらのサービスはどんな動作でも可能となり、 適切な制限を適用することができません。

システムアカウントの具体例は、 `daemon`, `operator`, `bind`, `news` および `www` といったものです。

`nobody` は通常の特権を持たないシステムアカウントです。 しかし、`nobody` を利用するサービスが増えれば増えるほど、 それに所属するファイルやプロセスも増え、 その特権も大きくなるということを忘れないようにしてください。

[[users-user]]
==== ユーザアカウント

ユーザアカウントは、 主に現実のユーザがシステムにアクセスする手段として用いられるものです。 システムにアクセスするすべてのユーザは、 それぞれ唯一のユーザアカウントを持つべきです。 こうすることで管理者は誰が何を行なっているかがわかりますし、 他の人の設定を壊してしまうようなことを避けることができます。

それぞれのユーザは快適にシステムを利用するため、 シェル、エディタ、キー設定、言語など、 各自の環境をセットアップすることができます。

FreeBSD システム上のどのアカウントにも、 以下のような情報がなにかしら結び付けられています。

ユーザ名::
`login:` プロンプトに対して入力するユーザの名前です。
各ユーザは一意なユーザ名を持つ必要があります。
有効なユーザ名を作成するには man:passwd[5] に記載されているいくつもの規則があります。
アプリケーションの上位互換性を保つために、8 文字以下の小文字からなるユーザ名を使うことが推奨されています。

パスワード::
各アカウントにはパスワードがあります。

ユーザ ID (UID)::
ユーザ ID (UID) は、 FreeBSD システムがユーザを一意に識別するための数値です。 ユーザ名を指定できるコマンドは、 ユーザ名を UID に変換してから扱っています。
65535 より大きな UID は、ソフトウェアによっては互換性の問題を引き起こす可能性があるので、65535 以下の UID を使用することが推奨されています。

グループ ID (GID)::
グループ ID (GID) は、 ユーザが属する第一グループを一意に識別するための数値です。 グループは、UID ではなく、 ユーザの GID に基づいて資源へのアクセスを制御する仕組みです。 これは、ある種の設定ファイルのサイズを大幅に小さくします。 ユーザは、複数のグループに所属できます。 65535 より大きな GID は、ソフトウェアに問題を引き起こす可能性があるので、 65535 以下の GID を使うことを推奨します。

ログインクラス::
ログインクラスはグループの仕組みを拡張したもので、 別々のユーザに対してシステムを調整する時に、 さらなる柔軟性を提供します。ログインクラスの詳細については、 <<users-limiting>> で説明します。

パスワードの有効期限::
デフォルトでは、パスワードに有効期限は設定されていません。
しかしながら、パスワードの有効期限をユーザごとに設定し、一部またはすべてのユーザに、一定の時間がたったらパスワードを強制的に変更させることができます。

アカウント失効時間::
デフォルトでは、FreeBSD はアカウントを失効させません。 たとえば学校で生徒のアカウントがある場合など、 限られた期間だけのアカウントを作成するなら、 そのアカウントがいつ失効するか man:pw[8] を使って指定できます。 有効期間が経過したら、 そのアカウントのディレクトリやファイルは残っていますが、 システムへのログインはできなくなります。

ユーザの氏名::
FreeBSD ではユーザ名でアカウントを一意に識別しますが、 必ずしもユーザの本名を反映したものではありません。 この情報をアカウントに関連付けることもできます。 この情報は、コメントのように、空白、大文字、および 8 字以上で記載できます。

ホームディレクトリ::
ホームディレクトリは、システム中のディレクトリへのフルパスです。
これはユーザがログインした時に作業を開始するディレクトリです。
一般的な慣習は、すべてのユーザのホームディレクトリを `/home/username` か `/usr/home/username` の下に置くことです。
各ユーザは、個人のファイルやサブディレクトリを、ユーザのホームディレクトリに保存します。

ユーザシェル::
シェルは、 ユーザがシステムと対話するデフォルトの環境を提供します。 いろいろな種類のシェルがあり、 経験を積んだユーザはそれぞれ好みがあり、 それをアカウントの設定に反映できます。

[[users-superuser]]
==== スーパーユーザアカウント

スーパーユーザアカウントは通常 `root` と呼ばれ、 システム管理を行なうために使われ、権限に制限がありません。 そのため、このアカウントはメールのやりとり、システムの調査、 プログラミングといった日常的な作業を行なうために使われるべきものではありません。

その理由は、スーパーユーザが通常のユーザアカウントと異なり、 操作にまったく制限を受けないことによります。 そのためスーパーユーザアカウントで操作を間違えると、 システムに重大な影響を与えてしまう恐れがあるのです。 ユーザアカウントでは、 仮に操作を間違えてもシステムを壊してしまうようなことはできないようになっています。 そのため、ユーザアカウントでログインし、 高い権限が必要なコマンドを実行するときだけスーパーユーザになることが推奨されています。

スーパーユーザで実行するコマンドはいつでも、 二回、三回と確認してください。 なぜならスペースが多かったり、文字が欠けていたりするだけで、 取り返しのつかないデータの破壊につながる可能性があるからです。

スーパーユーザの権限を得るには、さまざまな方法があります。 `root` ユーザとしてログインする方法もありますが、 これはまったくお勧めできません。

スーパーユーザの権限を手に入れるには、かわりに man:su[1] を使って下さい。 `-` オプションをつけて実行すると、 実行したユーザに root ユーザの環境が設定されます。 このコマンドは `wheel` グループに入ってるユーザのみが実行でき、他のユーザは実行出来ません。 また、実行時には `root` ユーザのパスワードを必要とします。

以下の例では、`make install` を行うときにスーパーユーザの権限が必要なので、 このコマンドを実行する時だけユーザはスーパーユーザになります。 コマンドを実行したら、ユーザは `exit` を実行してスーパーユーザからログアウトし、 通常のユーザアカウントの権限に戻ります。

.スーパーユーザ権限でプログラムをインストールする
[example]
====
[source,shell]
....
% configure
% make
% su -
Password:
# make install
# exit
%
....
====

1 人の管理者が一台のマシン、 もしくは小規模なネットワークを管理する場合には、 man:su[1] のフレームワークはうまく機能するでしょう。 この代わりとなるのは、 package:security/sudo[] package または port です。これはログ機能や、 スーパーユーザの権限で実行できるユーザやコマンドを設定できます。

[[users-modifying]]
=== アカウント情報の管理

FreeBSD は、ユーザアカウントを操作するためにさまざまなコマンドを用意しています。
もっとも一般的なコマンドが <<users-modifying-utilities>> にまとめられています。
その後で、各コマンドについて詳しい使用例を示します。
各ユーティリティの詳細や使用例についてはマニュアルページを参照してください。

[[users-modifying-utilities]]
.ユーザアカウントを管理するためのユーティティ
[cols="25h,~"]
|===
| コマンド
| 要約

|man:adduser[8]
|コマンドラインからユーザを追加するための推奨アプリケーション

|man:rmuser[8]
|コマンドラインからユーザを削除するための推奨アプリケーション

|man:chpass[1]
|ユーザデータベースの情報を変更するための柔軟なツール

|man:passwd[1]
|ユーザのパスワードを変更するコマンドラインツール

|man:pw[8]
|ユーザアカウントのあらゆる箇所を変更する強力で柔軟なツール

|man:bsdconfig[8]
|システムの設定のためのユーティリティ。アカウント管理に対応しています。
|===

[[users-adduser]]
==== ユーザの追加

新しいユーザの登録に推奨されるプログラムは man:adduser[8] です。
ユーザを追加すると、このプログラムは、`/etc/passwd` と `/etc/group` を自動的に更新します。
また、新規ユーザのホームディレクトリを作成し、`/usr/share/skel` から、デフォルトで使用される設定ファイルをコピーします。
また、新しく作成されたユーザに対して、ウェルカムメッセージをメールで送信することも可能です。
このユーティリティは、スーパーユーザ権限で実行する必要があります。

man:adduser[8] は、新しいユーザアカウントを対話的に段階的に作成するユーティリティです。
<<users-modifying-adduser>> で示されているように、必要な情報を入力するか、括弧内に示されているデフォルトの値を kbd:[Return] を押して承認してください。
この例では、ユーザは man:su[1] によってスーパユーザ権限を取得することが可能となる `wheel` グループに所属します。
操作が終了すると、ユーティリティは別のユーザを追加するか、終了するかを尋ねてきます。

[[users-modifying-adduser]]
.FreeBSD におけるユーザの追加
[example]
====
[source,shell]
....
# adduser
Username: jru
Full name: J. Random User
Uid (Leave empty for default):
Login group [jru]:
Login group is jru. Invite jru into other groups? []: wheel
Login class [default]:
Shell (sh csh tcsh zsh nologin) [sh]: zsh
Home directory [/home/jru]:
Home directory permissions (Leave empty for default):
Use password-based authentication? [yes]:
Use an empty password? (yes/no) [no]:
Use a random password? (yes/no) [no]:
Enter password:
Enter password again:
Lock out the account after creation? [no]:
Username   : jru
Password   : ****
Full Name  : J. Random User
Uid        : 1001
Class      :
Groups     : jru wheel
Home       : /home/jru
Shell      : /usr/local/bin/zsh
Locked     : no
OK? (yes/no): yes
adduser: INFO: Successfully added (jru) to the user database.
Add another user? (yes/no): no
Goodbye!
....
====

[NOTE]
====
入力したパスワードは画面に表示されませんので、 ユーザアカウントを作成する際には、 パスワードを間違えて入力してしまわないように注意してください。
====

[[users-rmuser]]
==== ユーザの削除

システムから完全にユーザを削除するには、スーパーユーザ権限で man:rmuser[8] を実行してください。
このコマンドは、次の手順を実行します。

[.procedure]
====
. 指定されたユーザの man:crontab[1] エントリが存在する場合には削除。
. 指定されたユーザの man:at[1] ジョブをすべて削除。
. 指定されたユーザが所有するすべてのプロセスに対して SIGKILL シグナルを送信。
. ローカルパスワードファイルから、 指定されたユーザのエントリを削除。
. 指定されたユーザのホームディレクトリを削除 (ディレクトリの所有者が指定されたユーザのものだった場合)。実際のホームディレクトリへのシンボリックリンクの削除も含まれます。
. `/var/mail` から、指定されたユーザの到着メールファイルを削除。
. `/tmp`, `/var/tmp`, および `/var/tmp/vi.recover` から、指定されたユーザの所有するファイルを削除。
. `/etc/group` にある すべてのグループから、指定されたユーザを削除します
(指定されたユーザと同じ名前のグループで、そのユーザが削除されると空のグループとなる場合は、そのグループ自体が削除されます。
これは man:adduser[8] によってユーザごとに作成される、ユニークなグループに対応するものです)。
. 指定されたユーザが所有するすべてのメッセージキュー、共通メモリセグメントおよびセマフォを削除
====

スーパユーザアカウントの削除に man:rmuser[8] を利用することはできません。 スーパユーザアカウントの削除はほとんどすべての場合、 大規模なシステムの破壊を意味するからです。

デフォルトでは、以下の例のような対話モードが使われます。

.`rmuser` による対話的なアカウントの削除
[example]
====
[source,shell]
....
# rmuser jru
Matching password entry:
jru:*:1001:1001::0:0:J. Random User:/home/jru:/usr/local/bin/zsh
Is this the entry you wish to remove? y
Remove user's home directory (/home/jru)? y
Removing user (jru): mailspool home passwd.
....
====

[[users-chpass]]
==== ユーザ情報の変更

すべてのユーザは、man:chpass[1] を用いてデフォルトシェルやユーザアカウントに関連した個人情報を変更できます。
スーパユーザ権限に限り、このユーティリティを用いて他のユーザのアカウント情報も変更できます。

ユーザ名の他にオプションを指定しないと、 man:chpass[1] はユーザ情報を編集するエディタを表示します。 ユーザがエディタを終了すると、 ユーザデータベースが新しい情報に更新されます。

[NOTE]
====
スーパユーザ権限以外でこのユーティリティを実行した場合は、 エディタを抜けた後にユーザのパスワードを聞かれます。
====

<<users-modifying-chpass-su>> では、スーパーユーザは `chpass jru` と入力し、このユーザに対して変更可能なフィールドが表示されています。
`jru` がこのコマンドを実行すると、最後の 6 フィールドのみが表示され編集が可能です。
この場合については、<<users-modifying-chpass-ru>> で示されています。

[[users-modifying-chpass-su]]
.スーパユーザによる `chpass` の使用
[example]
====
[source,shell]
....
#Changing user database information for jru.
Login: jru
Password: *
Uid [#]: 1001
Gid [# or name]: 1001
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /home/jru
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:
....
====

[[users-modifying-chpass-ru]]
.通常のユーザによる `chpass` の使用
[example]
====
[source,shell]
....
#Changing user database information for jru.
Shell: /usr/local/bin/zsh
Full Name: J. Random User
Office Location:
Office Phone:
Home Phone:
Other information:
....
====

[NOTE]
====
man:chfn[1] および man:chsh[1] コマンドはいずれも、man:chpass[1] へのリンクです。
また、man:ypchpass[1], man:ypchfn[1] および man:ypchsh[1] も同様です。
NIS のサポートは自動的に行なわれますの、 コマンドの先頭に `yp` をつける必要はありません。
NIS の設定については、ネットワークサーバの章で説明されています。
====

[[users-passwd]]
==== ユーザのパスワードの変更

いかなるユーザも man:passwd[1] を使って簡単に自身のパスワードを変更できます。
誤って、または不正なパスワードの変更を避けるため、新しいパスワードを設定する前に、もとのパスワードの入力が求められます。

.自分のパスワードの変更
[example]
====
[source,shell]
....
% passwd
Changing local password for jru.
Old password:
New password:
Retype new password:
passwd: updating the database...
passwd: done
....
====

スーパーユーザは、man:passwd[1] をユーザ名を指定して実行することにより、いかなるユーザのパスワードを変更できます。
スーパーユーザの権限でこのユーティリティを実行する際には、もとのパスワードを入力する必要はありません。
そのため、ユーザが元のパスワードを忘れてしまっても、パスワードを変更できます。

.スーパーユーザ権限での他のユーザのパスワード変更
[example]
====
[source,shell]
....
# passwd jru
Changing local password for jru.
New password:
Retype new password:
passwd: updating the database...
passwd: done
....
====

[NOTE]
====
man:chpass[1] 同様、man:yppasswd[1] は、 man:passwd[1] へのリンクになっていますので、 NIS はどちらのコマンドでも動作します。
====

[[users-pw]]
==== システムユーザおよびグループの作成、削除、変更および表示

man:pw[8] は、ユーザやグループの作成、削除、変更および表示を行なうコマンドラインのユーティリティです。
これは、システムユーザファイルやシステムグループファイルのフロントエンドとして働きます。
man:pw[8] はとても強力な一連のコマンドラインオプションを有しており、シェルスクリプトで使うのに向いていますが、新しいユーザは、この章で紹介されている他のコマンドに比べて難しいと感じるかもしれません。

[[users-groups]]
=== グループの管理

グループとは、ユーザを羅列したものです。 グループは、グループ名と GID で識別されます。 FreeBSD では、 あるプロセスが何かするのを許可するかどうかをカーネルが判断する際に、 プロセスの UID とそのユーザが所属するグループの一覧を利用します。 ほとんどの場合、ユーザもしくはプロセスの GID は一覧の最初のグループを指しています。

グループ名から GID への写像は `/etc/group` にあります。
これは、コロンで区切られた 4 項目からなるテキストファイルです。
1 番目の項目はグループ名、2 番目は暗号化されたパスワード、3 番目が GID、4 番目がカンマで区切られたメンバの一覧です。
文法についての完全な説明は、man:group[5] をご覧ください。

スーパーユーザは、`/etc/group` をテキストエディタで編集できます。
ただし、よくある間違いを見つけてくれる man:vigr[8] を用いてグループファイルを編集することが好ましいです。
もしくは、man:pw[8] を使ってグループの追加や編集をできます。
たとえば、`teamtwo` というグループを追加して、その存在を確認するには、次のように使います。

[WARNING]
====
operator グループを使う時には、意図しないスーパーユーザへのアクセス権を与える可能性があるため注意が必要です。
シャットダウン、リブートおよびこのグループが所有する `/dev` のすべてにアクセスできるといったことが可能になってしまいます。
====

.man:pw[8] によるグループの追加
[example]
====
[source,shell]
....
# pw groupadd teamtwo
# pw groupshow teamtwo
teamtwo:*:1100:
....
====

この例では、`1100` という番号は、 `teamtwo` の GID です。 この時点では、`teamtwo` にメンバはいません。 以下のコマンドは、 `jru` を `teamtwo` のメンバに追加します。

.man:pw[8] により新しいグループにメンバを追加する
[example]
====
[source,shell]
....
# pw groupmod teamtwo -M jru
# pw groupshow teamtwo
teamtwo:*:1100:jru
....
====

`-M` の引数は、カンマで区切られた新しい (空の) グループに追加するもしくは存在するグループのメンバを置き換えるユーザの一覧です。
ユーザにとっては、このグループのメンバーシップはパスワードファイルに記載されているプライマリのグループとは異なります。
man:pw[8] の `groupshow` コマンドを使った時は、そのユーザはグループの一員として表示されませんが、man:id[1] などのツールを使って情報を問い合わせれば、その情報を引き出せます。
ユーザをグループに追加をする際に、man:pw[8] は `/etc/group` しか扱わず、 `/etc/passwd` から追加のデータを読んだりはしません。

.man:pw[8] によるグループへのユーザ追加
[example]
====
[source,shell]
....
# pw groupmod teamtwo -m db
# pw groupshow teamtwo
teamtwo:*:1100:jru,db
....
====

この例では、`-m` の引数は、 カンマで区切られたグループに追加するユーザの一覧です。
前の例と異なり、これらのユーザはグループに追加され、既存のグループのユーザを置き換えることはありません。

.グループに所属しているユーザを調べるための man:id[1] の使い方
[example]
====
[source,shell]
....
% id jru
uid=1001(jru) gid=1001(jru) groups=1001(jru), 1100(teamtwo)
....
====

この例では、`jru` は `jru` グループと `teamtwo` グループのメンバです。

このコマンドや `/etc/group` のフォーマットの詳細については、 man:pw[8] および man:group[5] をご覧ください。

[[permissions]]
== 許可属性

FreeBSD では、すべてのファイルおよびディレクトリは一組の許可属性を持っています。
これらの許可属性は、ユーティリティを使って確認したり変更できます。
許可属性がどのように機能するかを知ることで、ユーザが必要とするファイルにアクセスできるかどうか、オペレーティングシステムが使用しているファイルや他のユーザが所有するファイルにアクセスできないことを理解できるようになります。

この節では、FreeBSD で使用される伝統的な UNIX(R) の許可属性について説明します。
より細かいファイルシステムのアクセス制御に関しては、crossref:security[fs-acl,アクセス制御リスト] をご覧ください。

UNIX(R) では、基本の許可属性は 3 つのアクセスタイプ (読み・書き・実行) を使って割り当てられます。
これらのアクセスタイプを使って、ファイルの所有者 (owner)、グループ (group) その他 (others) に対するファイルアクセスを設定します。
読み、書き、実行に関する許可属性は、それぞれ `r`, `w`, および `x` 文字で表されます。
これらの許可属性を表す際に、オンかオフ (`0`) による 2 進数表記も使われます。
数字で表現する場合には、 `r` は `4`、`w` は `2` そして `x` は `1` の値を持つよう、`rwx` の順番で表されます。

以下は、許可属性を表す際に用いられる数字およびアルファベットをまとめた表です。
"ディレクトリの表示" カラムでは、`-` は許可属性がオフに設定されていることを表します。

.UNIX(R) 許可属性
[cols="1,1,1", frame="none", options="header"]
|===
| 値
| 許可属性
| ディレクトリの表示

|0
|読み込み不可、書き込み不可、実行不可
|`---`

|1
|読み込み不可、書き込み不可、実行可能
|`--x`

|2
|読み込み不可、書き込み可能、実行不可
|`-w-`

|3
|読み込み不可、書き込み可能、実行可能
|`-wx`

|4
|読み込み可能、書き込み不可、実行不可
|`r--`

|5
|読み込み可能、書き込み不可、実行可能
|`r-x`

|6
|読み込み可能、書き込み可能、実行不可
|`rw-`

|7
|読み込み可能、書き込み可能、実行可能
|`rwx`
|===

コマンドライン引数 `-l` とともに man:ls[1] を使うと、詳細なディレクトリリストを見ることができ、ファイルの所有者、グループ、その他への許可属性を示す欄があるのがわかります。
例えば、`ls -l` を実行して、 適当なディレクトリを表示させると以下のようになります。

[source,shell]
....
% ls -l
total 530
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 myfile
-rw-r--r--  1 root  wheel     512 Sep  5 12:31 otherfile
-rw-r--r--  1 root  wheel    7680 Sep  5 12:31 email.txt
....

`myfile` が含まれている行の一番目の列の最初の `(一番左の)` 文字は、そのファイルが普通のファイルなのか、ディレクトリなのか、キャラクタ型のデバイス特殊ファイルなのか、ソケットなのか、その他の特殊な疑似ファイルデバイスなのかといった種類を示す特別な文字です。
この例において、`-` という文字は、普通のファイルであることを示します。
その次に来る `rw-` と書かれた 3 文字は、そのファイルの所有者に許可を与えるものです。
その次の `r--` の 3 文字は、そのファイルが所属しているグループに許可を与えます。
最後の `r--` の 3 文字は、 システムに存在するその他のユーザに許可を与えます。
"-" は許可が与えられていないことを示します。
この例では、ファイルの所有者はこのファイルを読み書きでき、ファイルの所属しているグループに属するユーザはファイルを読むことだけでき、そのどちらでもないユーザは、 このファイルを読むだけできるように許可属性が与えられています。
上の表によれば、このファイルに与えられた許可属性は `644` となります。
ここで各数字は、このファイルの許可属性の 3 つの部分を表しています。

デバイスの場合の許可属性はどのようにコントロールされているのでしょうか?
FreeBSD は、大部分のハードウェアをファイルとして取り扱います。
そのため、プログラムからは普通のファイルとまったく同じようにオープンし、 データの読み書きができるようになっています。
これらのデバイス特殊ファイルは `/dev/` に収められています。

ディレクトリもまた、ファイルと同様に扱われます。
それは読み込み/書き込み/実行の許可属性を持ちます。
ディレクトリの実行ビットはファイルのそれとは少し違った意味を持ちます。
ディレクトリが実行可能になっているとき、man:cd[1] を使ってそのディレクトリに移動することができます。 
これは、そのディレクトリにあるファイルにアクセスできることを意味しています (ファイル自体の許可属性によります)。

ディレクトリの中の一覧を表示するには、そのディレクトリに読み込み属性が設定されていなければなりません。
名前が分かっているファイルを削除するには、そのファイルが含まれているディレクトリに 書き込み属性 _と_ 実行属性 の両方が必要です。

この他にも許可属性ビットはありますが、いずれも setuid バイナリや sticky ディレクトリなどといった特殊な状況で使われます。
ファイルの許可属性そのものについて、また、それらの設定方法に関する詳しい情報は、 man:chmod[1] マニュアルページを参照してください。

=== シンボリック表記

シンボリック表記と呼ばれる許可属性を表す方法では、ファイルやディレクトリの許可属性を、8 進数ではなく記号を用いて設定します。
シンボリック表記による許可属性を表す方法では、(who), (action), (permissions) という書式が用いられます。
利用できる値は以下の通りです。

[.informaltable]
[cols="1,1,1", frame="none", options="header"]
|===
| オプション
| 文字
| 意味

|(who)
|u
|ユーザ

|(who)
|g
|ファイルを所持しているグループ

|(who)
|o
|その他

|(who)
|a
|すべて ("world")

|(action)
|+
|許可属性を与える

|(action)
|-
|許可属性を取り除く

|(action)
|=
|許可属性を指定したものにする

|(permissions)
|r
|読み込み

|(permissions)
|w
|書き込み

|(permissions)
|x
|実行

|(permissions)
|t
|Sticky ビット

|(permissions)
|s
|UID または GID を設定する
|===

これらの値は、これまでと同様に man:chmod[1] で用いますが、数字ではなく文字で指定します。
たとえば、_FILE_ に対して _FILE_ のグループメンバーおよび自分以外のすべてのユーザからアクセスを一切受け付けたくない、というときには以下のコマンドを実行してください。

[source,shell]
....
% chmod go= FILE
....

カンマ区切りで設定することで、ファイルの属性を一度に 2 つ以上変更できます。
以下の例では、_FILE_ に対して自分以外のユーザから書き込みの権限を取り上げ、かわりにすべてのユーザが _FILE_ を実行できるようにします。

[source,shell]
....
% chmod go-w,a+x FILE
....

=== FreeBSD のファイルフラグ

ファイルの許可属性に加え、FreeBSD では "ファイルフラグ" を使えます。
これはファイルにセキュリティや管理上の属性を追加するものですが、ディレクトリには追加しません。
ファイルフラグにより、`root` ユーザでさえ誤ってファイルを消去、変更してしまうことを防ぐことができます。

ファイルフラグは、man:chflags[1] を使って、簡単なインタフェースで設定できます。
例えば、`file1` というファイルにシステムレベルで消去不可のフラグを設定するには、以下のコマンドを実行してください。

[source,shell]
....
# chflags sunlink file1
....

消去不可のフラグを削除するには、以下のように `sunlink` の前に "no" をつけて実行してください。

[source,shell]
....
# chflags nosunlink file1
....

ファイルに設定されているフラグを確認するには、`-lo` と一緒に man:ls[1] を実行してください。

[source,shell]
....
# ls -lo file1
....

[.programlisting]
....
-rw-r--r--  1 trhodes  trhodes  sunlnk 0 Mar  1 05:54 file1
....

いくつかのファイルフラグの追加、削除は `root` ユーザしかできません。
他のフラグは、ファイルの所有者が変更できます。
man:chflags[1] と man:chflags[2] から、より詳細な情報を得ることをおすすめします。

=== setuid, setgid および sticky 許可属性

これまでに説明した許可属性のほかに、
すべての管理者が知っておくべき特別な設定が 3 つあります。
それは `setuid`, `setgid` および `sticky` 許可属性です。

これらの設定は、通常のユーザには許可されていない機能を提供するので、UNIX(R) の操作において重要となることがあります。
これらの許可属性を理解するためには、実ユーザ ID と実効ユーザ ID の違いに注意してください。

実ユーザ ID は、所有したりプロセスを開始する UID です。
実効 UID は、プロセスを実行するユーザ ID です。
たとえば、ユーザがパスワードを変更するときに利用する man:passwd[1] は、実ユーザ ID で起動します。
しかしながら、パスワードデータベースのアップデートの際は、実効 ID の `root` ユーザの権限で実行されます。
この仕組みにより、`Permission Denied` エラーが表示されることなく、ユーザはパスワードを変更できます。

setuid 許可属性は、以下の例で示されているように、ユーザに対して `s` の許可属性をつけることで設定できます。
 
[source,shell]
....
# chmod u+s suidexample.sh
....

setuid 許可属性は、以下の例で示されているように、指定する許可属性に数字の 4 をつけることでも設定できます。

[source,shell]
....
# chmod 4755 suidexample.sh
....

これで `suidexample.sh` の許可属性は以下のように設定されます。

[.programlisting]
....
-rwsr-xr-x   1 trhodes  trhodes    63 Aug 29 06:36 suidexample.sh
....

`s` は、許可属性のファイル所有者の実行可能ビットに置き換わって反映されます。
この設定により、man:passwd[1] といったユーティリティが権限を昇格することができます。

[NOTE]
====
`nosuid` man:mount[8] オプションを使うと、このようなバイナリがユーザへの警告なしに権限を昇格できないように設定できます。
ただし `nosuid` ラッパにより回避できるため、このオプションを完全には信頼できません。
====

リアルタイムに確認するために、2 つのターミナルを開いてください。
1 つのターミナル上で、通常のユーザ権限で `passwd` と入力してください。
パスワードの入力を待つ間に、もう一つのターミナル上で、プロセステーブルおよび man:passwd[1] のユーザ情報を確認してください。

ターミナル A:

[source,shell]
....
Changing local password for trhodes
Old Password:
....

ターミナル B:

[source,shell]
....
# ps aux | grep passwd
....

[source,shell]
....
trhodes  5232  0.0  0.2  3420  1608   0  R+    2:10AM   0:00.00 grep passwd
root     5211  0.0  0.2  3620  1724   2  I+    2:09AM   0:00.01 passwd
....

通常のユーザ権限で man:passwd[1] を実行したにもかかわらず、実効 UID の `root` が使われています。

`setgid` 許可属性は `setuid` 許可属性と同様の機能を提供しますが、この許可属性はグループの設定を変更します。
この設定を行った上でアプリケーションまたはユーティリティを実行すると、プロセスを開始するユーザではなく、ファイルを所有するグループに対してこの許可属性を与えます。

記号を用いてファイルに `setgid` 許可属性を設定するには、man:chmod[1] で設定するグループに `s` の許可属性をつけて実行してください。

[source,shell]
....
# chmod g+s sgidexample.sh
....
 
または、man:chmod[1] で設定する許可属性の先頭に 2 をつけて実行してください。

[source,shell]
....
# chmod 2755 sgidexample.sh
....

以下に示されるように、`s` がグループの許可属性に指定されています。

[source,shell]
....
-rwxr-sr-x   1 trhodes  trhodes    44 Aug 31 01:49 sgidexample.sh
....

[NOTE]
====
上記の例において、対象としているシェルスクリプトが実行可能なファイルであっても、シェルスクリプトは man:setuid[2] システムコールにアクセスできないため、実効ユーザ ID では実行されません。

====

`setuid` および `setgid` 許可属性ビットは、権限の昇格を許可するので、システムのセキュリティレベルを下げます。
一方 3 番目の特殊な許可属性 `sticky bit` は、システムのセキュリティを強化します。

ディレクトリに `sticky bit` を設定すると、ファイルの所有者のみがファイルを削除できるようになります。
`/tmp` といった共有のディレクトリにおいて、ファイルの所有者以外のユーザがファイルを削除できなくなるので有用です。
この許可属性を有効にするには、ファイルに対して `t` モードを追加してください。

[source,shell]
....
# chmod +t /tmp
....

または、許可属性に 1 をつけて設定してください。

[source,shell]
....
# chmod 1777 /tmp
....

`sticky bit` が設定されていると、許可属性の最後に `t` が表示されます。

[source,shell]
....
# ls -al / | grep tmp
....

[source,shell]
....
drwxrwxrwt  10 root  wheel         512 Aug 31 01:49 tmp
....

[[dirstructure]]
== ディレクトリ構造

FreeBSD のディレクトリ構造は、システム全体を理解するに当たって重要です。
最も重要なディレクトリは、ルートまたは "/" です。
このディレクトリは起動時に一番最初にマウントされ、オペレーティングシステムをマルチユーザで動作させるために必要なベースシステムが含まれています。
また、ルートディレクトリには、マルチユーザへの移行中に他のファイルシステムをマウントするためのマウントポイントも含まれます。

マウントポイントとは、追加するファイルシステムを接続する先の親のファイルシステム (普通はルートファイルシステム) のディレクトリのことです。
より詳細な説明は <<disk-organization>> の節にあります。
標準的なマウントポイントには `/usr/`, `/var/`, `/tmp/`, `/mnt/` および `/cdrom/` があります。
通常これらのディレクトリについては、`/etc/fstab` というファイル中のエントリが参照されます。
このファイルは、さまざまなファイルシステムとマウントポイントの表であり、システムが参照します。
`/etc/fstab` に書かれたファイルシステムは `noauto` オプションが指定されていなければ、起動時に man:rc[8] スクリプトによって自動的にマウントされます。
詳細は <<disks-fstab>> の節をご覧ください。

ファイルシステム構造を網羅した説明は man:hier[7] に書かれています。
以下の表は、もっともよく使われるディレクトリの簡単な概要です。

[cols="25h,~"]
|===
| ディレクトリ
| 説明

|`/`
|ファイルシステムのルートディレクトリ

|`/bin/`
|シングルユーザ環境とマルチユーザ環境の両方で重要な ユーザユーティリティ

|`/boot/`
|オペレーティングシステムの起動時に使われるプログラムと設定ファイル

|`/boot/defaults/`
|デフォルトの起動設定ファイル; man:loader.conf[5] 参照

|`/dev/`
|man:devfs[4] により管理されるデバイスファイル

|`/etc/`
|システム設定ファイルとスクリプト

|`/etc/defaults/`
|デフォルトのシステム設定ファイル; 詳細については man:rc[8] 参照

|`/etc/periodic/`
|man:cron[8] 経由で毎日・毎週・毎月実行されるスクリプト; 詳細については man:periodic[8] 参照

|`/lib/`
|`/bin` および `/sbin` にあるバイナリで必要とされる重要なシステムライブラリ

|`/libexec/`
|重要なシステムファイル

|`/media/`
|CD, USB ドライブおよびフロッピーディスクなどのリムーバブルメディアのマウントポイントとして使用されるサブディレクトリを含むディレクトリ

|`/mnt/`
|システム管理者が一時的なマウントポイントとしてよく使う空のディレクトリ

|`/net/`
|自動マウント NFS 共有。man:auto_master[5] を参照

|`/proc/`
|プロセスファイルシステム; 詳細については man:procfs[5] と man:mount_procfs[8] 参照

|`/rescue/`
|man:rescue[8] で説明されている緊急時のために静的にリンクされているプログラム

|`/root/`
|`root` アカウントのホームディレクトリ

|`/sbin/`
|シングルユーザ環境とマルチユーザ環境の両方で重要なシステムプログラムと管理ユーティリティ

|`/tmp/`
|システムの再起動では通常保存 _されない_ 一時的なファイル。
メモリファイルシステムはよく `/tmp` にマウントされます。
これは man:rc.conf[5] の tmpmfs 関係の変数を使うか、`/etc/fstab` に設定項目を記入することで自動化できます。
詳しくは man:mdmfs[8] を参照して下さい。

|`/usr/`
|大部分のユーザユーティリティとアプリケーション

|`/usr/bin/`
|よく使うユーティリティとプログラミングツールとアプリケーション

|`/usr/include/`
|C の標準ヘッダファイル

|`/usr/lib/`
|ライブラリ

|`/usr/libdata/`
|いろいろなユーティリティのデータファイル

|`/usr/libexec/`
|他のプログラムから実行されるシステムデーモンとシステムユーティリティ

|`/usr/local/`
|ローカルのプログラムやライブラリなど。
FreeBSD ports フレームワークのデフォルトインストール先としても使われます。
`/usr/local` 内では、 man:hier[7] に書かれている `/usr` のための一般構造が使われます。
例外は man ディレクトリで、`/usr/local/share` の下ではなく `/usr/local` の下に直接置かれ、ports 関係文書は `share/doc/port` に置かれます。

|`/usr/ports/`
|FreeBSD Ports Collection (オプション)。

|`/usr/sbin/`
|ユーザにより実行されるシステムデーモンおよびシステムユーティリティ

|`/usr/share/`
|アーキテクチャに依存しないファイル

|`/usr/src/`
|BSD のソースファイルまたはローカルのソースファイル、あるいは両方

|`/var/`
|さまざまな用途のログ・一時的なファイル・スプールファイル。

|`/var/log/`
|いろいろなシステムログファイル

|`/var/tmp/`
|一時的なファイル。通常の設定では、ここにあるファイルはシステムが再起動しても失われません。
|===

[[disk-organization]]
== ディスク構成

ファイルを見つけるために FreeBSD が使用する構成の一番小さな単位はファイル名です。
ファイル名は、大文字と小文字を区別します。
このことは `readme.txt` および `README.TXT` が異なる二つのファイルであることを意味します。
FreeBSD はそのファイルがプログラム、または文書、あるいはその他の形式かどうかを決定するために拡張子を使用しません。

ファイルはディレクトリ内に格納されます。
ディレクトリはファイルを一つも含んでいないかもしれせんし、または数百のファイルを含んでいるかもしれません。
ディレクトリはまた別のディレクトリを含むことができるので、
データを体系づけるディレクトリの階層構造を構築できます。

ファイルおよびディレクトリは、必要な他のディレクトリ名とスラッシュ (`/`) を後に続けてファイル名またはディレクトリ名を与えることによって参照されます。
たとえば、`foo` ディレクトリがあって、その中に `bar` ディレクトリがあるとします。
そして、その中に `readme.txt` があるとすると、ファイルへのフルネーム、または _パス_ は `foo/bar/readme.txt` となります。
ファイルとディレクトリ名を分けるために `\` を使う Windows(R) とは違うことに注意してください。
FreeBSD は、パスの中にドライブレターまたは他のドライブ名を使いません。
たとえば、FreeBSD では `c:\foo\bar\readme.txt` とは書きません。

[[disks-file-systems]]
=== ファイルシステム

ディレクトリおよびファイルはファイルシステム内に格納されます。
どのファイルシステムも、そのファイルシステムのための _ルートディレクトリ_ とよばれる、まさに頂点の位置にちょうど一つのディレクトリを含んでいます。
このルートディレクトリは他のディレクトリを含むことができます。
一つのファイルシステムは _ルートファイルシステム_ または `/` として設計されています。
すべてのファイルシステムは、ルートファイルシステム以下に _マウント_ されます。
FreeBSD システムでどんなに多くのディスクを使用しても、すべてのディレクトリは、同じディスクの一部であるように見えるので問題ありません。

`A`, `B` および `C` と呼ばれる三つのファイルシステムがあるケースを考えます。
それぞれのファイルファイルシステムには一つのルートディレクトリがあり、`A1`, `A2` と呼ばれている二つの他のディレクトリを含んでいます (同様に `B1`, `B2` および `C1`, `C2` があります)。

`A` をルートファイルシステムとします。
このディレクトリになにが含まれているか見るために man:ls[1] コマンドを使うと、`A1` および `A2` の二つのサブディレクトリが表示されるでしょう。
ディレクトリツリーは以下のようになります。

image::example-dir1.png[ルートディレクトリおよび 2 つのサブツリーを持つディレクトリツリー]

ファイルシステムはマウント先のファイルシステム内のディレクトリにマウントしなければいけません。
それでは、`A1` ディレクトリに `B` ファイルシステムをマウントすると仮定します。
`B` のルートディレクトリは `A1` に置き換えられ、そして `B` 内のディレクトリがそれに応じて現れます。

image::example-dir2.png[ルートディレクトリおよび 2 つのサブツリーを持つディレクトリツリー。さらに B1 および B2 サブディレクトリが  A1 にぶら下がっています]

`B1` または `B2` 内にあるどんなファイルも、必要なときに `/A1/B1` または `/A1/B2` で到達できます。
`/A1` にあったすべてのファイルは一時的に隠されました。
それらは `B` が `A` から _アンマウント_ されたら再び現れるでしょう。

もし `B` が `A2` にマウントされていたら、この図のようになります。

image::example-dir3.png[ルートディレクトリおよび 2 つのサブツリーを持つディレクトリツリー。さらに B1 および B2 サブディレクトリが  A2 にぶら下がっています]

そして、パスはそれぞれ `/A2/B1` および `/A2/B2` となるでしょう。

ファイルシステムは互いのファイルシステム上にもマウントできます。
上記の最後の例に続けて、`C` ファイルシステム は `B` ファイルシステム内の `B1` ディレクトリ上にマウントできます。
次の図のようになります。

image::example-dir4.png[複雑なディレクトリツリー。さまざまなサブディレクトリがルート以下にぶら下がっています。]

または `C` を `A` ファイルシステムの `A1` ディレクトリの下に直接マウントできます。

image::example-dir5.png[複雑なディレクトリツリー。さまざまなサブディレクトリがルート以下にぶら下がっています。]

一つの大きなルートファイルシステムを用意し、他のファイルシステムを作成する必要としないことはまったくもって可能です。
この方法にはいくつかの短所と一つの利点があります。

.マルチファイルシステムの利点
* 異なったファイルシステムは異なった _マウントオプション_ を使用できます。
たとえば、ルートファイルシステムを読みだし専用でマウントして、不注意によってユーザが重大なファイルを削除、または編集できないようにすることができます。
また、`/home` のようなユーザが書き込み可能なファイルシステムを他のファイルシステムと分けることによって、 _nosuid_ でマウントすることが可能になります。
このオプションは、ファイルシステムに記録されている _suid_/_guid_ の実行可能ビットを有効にしないので、安全性を高めることができるでしょう。
* FreeBSD はファイルシステムがどのように使われているかによって、自動的にファイルシステム上のファイルの配置を最適化します。 したがって、連続的に書き込まれた多くの小さなファイルが含まれているファイルシステムは、より大きく少ないファイルが含まれているファイルシステムと異なる最適化をするでしょう。 一つの大きなファイルシステムを作成すると、この最適化は成り立たなくなります。
* FreeBSD のファイルシステムはトラブルが起きても強固です。 しかしながら臨界点でのトラブルは、ファイルシステムの構造にまだ損害を与えるかもしれません。 マルチファイルシステムへデータを分割しておくことで、 必要なときにバックアップからレストアすることをより容易にして、まだシステムが回復するかもしれません。

.シングルファイルシステムの利点
* ファイルシステムは固定サイズです。 FreeBSD をインストールするときにファイルシステムを作成して、 固定サイズを割りあてたなら、 後になってそのパーティションをより大きくする必要があると気づくかもしれません。 パーティションのサイズを変更するには、 バックアップ、新しいサイズを指定したファイルシステムの再作成、 バックアップしたデータをリストアする作業が必要となるでしょう。
+
[IMPORTANT]
====
FreeBSD には、 man:growfs[8] コマンドがあります。
このコマンドは、この制限を取り除いて、ファイルシステムのファイルを直ちに増加させることを可能にします。 
ファイルシステムは、そのファイルシステムのあるパーティションの空いている領域に対してのみ拡張できます。
パーティションを分割した後、空いている領域があれば、man:gpart[8] を用いてパーティションを拡張できます。
仮想ディスクの最後のパーティションであれば、ディスクを大きくすると、パーティションを拡張できます。
====

[[disks-partitions]]
=== ディスクパーティション

ファイルシステムは _パーティション_ 内に含まれています。
ディスクは 1 つのパーティションスキーム (<<bsdinstall-part-manual>>) を用いてパーティションに分割されます。
新しいスキームは GPT で、古い BIOS-ベースのコンピュータは MBR を使用します。
GPT は、サイズ、オフセットおよびタイプによるディスクのパーティション分割に対応しています。
多くのパーティションおよびパーティションタイプに対応しているため、GPT が利用できる場合はこのパーティションスキームを使用することが推奨されます。
GPT パーティションは、接尾語 `p1` が最初のパーティション、接尾語 `p2` が 2 番目のパーティションといったような接尾語を使います。
一方 MBR パーティションは少ない数のパーティションにのみ対応しています。
MBR パーティションは、FreeBSD では `スライス` として知られています。
スライスは他のオペレーティングシステムでも使うことができます。
FreeBSD のスライスはさらに、BSD ラベル (man:bsdlabel[8] 参照) を用いてパーディションに分割できます。

スライス番号は 1 から始まり `s` を前につけられて、デバイス名の後に続きます。
したがって、"da0__s1__" は一番目の SCSI ドライブ上の一番目のスライスです。
ディスク上に存在できる物理スライスは、4 つまでですが、適切な種類の物理スライス内に論理スライスを作成できます。
これらの拡張されたスライス番号は 5 から始まります。
したがって、 "ada0__s5__" は、一番目の SATA ディスク上の一番目の拡張スライスです。
これらのデバイスは、スライスを占有することを予期するファイルシステムによって使用されます。

GPT または BSD の各パーティションは、一つのファイルシステムだけを含むことができます。
このことは、ファイルシステムがファイルシステムの階層上の典型的なマウントポイント、または含まれているパーティション名によって記述されることを意味します。

FreeBSD は _スワップ領域_ にもまたディスク領域を使用します。
スワップ領域は FreeBSD に _仮想メモリ_ を提供します。
これはあなたのコンピュータが、 実際に搭載している以上のメモリがあるかのように振舞います。
FreeBSD がメモリを使い果たしたときに、現在使用されていないデータのいくつかをスワップ領域に移動し、そのデータが必要となったときに (その他のデータをスワップ領域に移動させてから) メモリ内に移動しなおします。
これは _ページング_ と呼ばれます。

いくつかの BSD パーティションはある慣習と関係づけられています。

[cols="25h,~"]
|===
| パーティション
| 慣習

|`a`
|通常、ルートパーティションを含みます。

|`b`
|通常、スワップ領域を含みます。

|`c`
|通常、スライス全体と同じサイズです。
これは、スライス全体にアクセス必要のあるユーティリティ (たとえば、ひどいブロックスキャナ) が、 `c` パーティションにアクセスすることを可能にします。
通常、このパーティション内にファイルシステムは作成されません。

|`d`
|`d` パーティションは、 それに関連づけられた特別な意味を持っていましたが、 今は無いので、普通のパーティションとして動作するでしょう。
|===

スライスおよび "危険な専用" の物理ドライブ、 そして他のドライブは `a` から `h` までの文字として表される BSD パーティションを含んでいます。
この文字はデバイス名に追加されます。
したがって、 "da0__a__" は一番目の "危険な専用" `da` ドライブ上の `a` パーティションです。
"ada1s3__e__" は、 二番目の SATA ディスク上の 三番目のスライス内にある五番目のパーティションです。

最後に、システム上のそれぞれのディスクは識別されます。
ディスク名はどの種類のディスクであるかを示す記号ではじまり、どのディスクかを示す数字が続きます。
パーティションやスライスとは異なり、ディスクの番号づけは 0 から始まります。
共通の記号は <<disks-naming>> に示されます。

スライスにあるパーティションを参照するときには、ディスク名、`s`、スライス番号、そしてパーティション文字を含めてください。
<<basics-disk-slice-part>> に例があります。
GPT パーディションはディスク名、`p` そしてパーティション番号が含まれます。

<<basics-concept-disk-model>> は、MBR スライスを用いたディスク構成の概念のモデルを示します。

FreeBSD をインストールする際には、MBR を使用する場合にはディスクスライスを設定し、次に FreeBSD に用いるスライス内のパーティションを作成します。
GPT を使用する場合には、各ファイルシステムにパーティションを設定します。
どちらのケースでも、それぞれのパーティション内にファイルシステムまたはスワップ領域を作成し、ファイルシステムがどこにマウントされるか決定してください。
パーティションの操作についての詳細は man:gpart[8] をご覧ください。

[[disks-naming]]
.ディスクデバイス名
[cols="1,1", frame="none", options="header"]
|===
| ドライブタイプ
| ドライブデバイス名

|SATA および IDE ハードドライブ
|`ada`

|SCSI ハードドライブおよび USB ストレージデバイス
|`da`

|NVMe ストレージ
|`nvd` または `nda`

|SATA および IDE CD-ROM ドライブ
|`cd`

|SCSI CD-ROM ドライブ
|`cd`

|フロッピードライブ
|`fd`

|SCSI テープドライブ
|`sa`

|RAID ドライバ
|`aacd` (Adaptec(R) AdvancedRAID), `mlxd` および `mlyd` (Mylex(R)), `amrd` (AMI MegaRAID(R)), `idad` (Compaq Smart RAID), `twed` (3ware(R) RAID) など
|===

[example]
====
[[basics-disk-slice-part]]
.ディスク名、スライス名、パーティション名のサンプル
[.informaltable]
[cols="1,1", frame="none", options="header"]
|===
| 名前
| 意味

|`ada0s1a`
|一番目の SATA ディスク (`ada0`) 上の一番目のスライス (`s1`) 内の一番目のパーティション (`a`)。

|`da1s2e`
|二番目の SCSI ディスク (`da1`) 上の二番目のスライス (`s2`) 内の五番目のパーティション (`e`)。
|===
====

[[basics-concept-disk-model]]
.ディスクの概念的構成
[example]
====
これはシステムに接続された一番目の SATA ディスクの FreeBSD から見た図を示します。
ディスクサイズは 250 GB と仮定し、80 GB のスライス (MS-DOS(R) でいうパーティション) および 170 GB のスライスがあるとします。
一番目のスライスは Windows(R) NTFS ファイルシステム `C:` を含んでいます。
そして、二番目のスライスは FreeBSD のディスクを含んでいます。
これは FreeBSD インストーラが四つのデータパーティションと一つのスワップパーティションを作成した例です。

四つのパーティションはそれぞれファイルシステムを含んでいます。
パティション `a` はルートファイルシステム、`d` は `/var`, `e` は `/usr`、そして `f` は `/usr` に使用されています。
パーティション `c` はスライス全体を示しており、通常のパーティションとは異なる使われ方をします。

image::disk-layout.png[Windows と FreeBSD を 1 つのドライブに共存させたレイアウト]
====

[[mount-unmount]]
== ファイルシステムのマウントとアンマウント

ファイルシステムは `/` をルート (根) とする木構造として考えると視覚的に理解しやすいでしょう。
ルートディレクトリにある `/dev` や `/usr`、その他のディレクトリは枝に相当し、それらには、`/usr/local` などのように、さらに枝分かれすることができます。

さまざまな理由がありますが、 ディレクトリをいくつかの異なるファイルシステム上に構築するのが良いでしょう。
たとえば `/var` には、 `log/` や `spool/` など、さまざまな種類の一時ファイルを置くディレクトリがあるため、あふれてしまう可能性があります。
ルートファイルシステムをあふれさせるのは得策ではありませんので、普通は `/var` を `/` から分離します。

また、次のような場合も、ディレクトリツリーを別のファイルシステムに置く理由として良くあげられます。
それは、たとえば物理的に別のディスクにディレクトリツリーを置く場合、 crossref:advanced-networking[network-nfs, 「ネットワークファイルシステム (NFS)」] で説明されているようにネットワークファイルシステムをマウントしたり、CDROM ドライブのような別の仮想ディスクに置くという場合です。

[[disks-fstab]]
=== fstab ファイル

`/etc/fstab` に書かれているファイルシステムは、`noauto` オプション指定されているエントリを除いて crossref:boot[boot,起動プロセス] の途中で自動的にマウントされます。
このファイルは、 次のような書式で書かれたエントリを含んでいます。

[.programlisting]
....
device       /mount-point fstype     options      dumpfreq     passno
....

`device`::
デバイス名。crossref:disks[disks-naming,「デバイス名」] に説明があります。

`mount-point`::
ファイルシステムがマウントするディレクトリ。

`fstype`::
man:mount[8] に渡されるファイルシステムタイプ。 FreeBSD ファイルシステムのデフォルトは `ufs` です。

`options`::
読み書きするファイルシステムには `rw`、読み込み専用のファイルシステムには `ro` を、必要な他のオプションの前に指定します。 よく使われるオプションは `noauto` で、 起動時にはマウントされないファイルシステムに使います。 その他のオプションは man:mount[8] マニュアルページに載っています。

`dumpfreq`::
これは man:dump[8] が使うもので、 どのファイルシステムにダンプが必要なのかを決めます。 この項目がなければ、0 であるものとみなされます。

`passno`::
これは再起動後に man:fsck[8] がチェックする UFS ファイルシステムの順番を決めます。
ファイルシステムチェックを飛ばしたいファイルシステムには、`passno` を 0 に設定してください。
ルートファイルシステムはどれよりも先にチェックする必要があり、`passno` は 1 に設定してください。 他のファイルシステムの `passno` は 1 以上に設定してください。 同じ `passno` のファイルシステムがあった場合、 man:fsck[8] は可能であれば並行してファイルシステムのチェック を行なおうとします。

`/etc/fstab` の書式やオプションに関しての詳細は、 man:fstab[5] をご覧ください。

[[disks-mount]]
=== man:mount[8] の使い方

ファイルシステムは man:mount[8] を用いてマウントされます。
基本な構文は以下のようになります。

[example]
====
[source,shell]
....
# mount device mountpoint
....
====

`/etc/fstab` に記載されているファイルシステムについても、マウントポイントを指定することでマウントできます。

man:mount[8] で説明されているように、このコマンドはたくさんのオプションを提供します。
最もよく使われるのは次のものです。

.マウントオプション
`-a`::
`/etc/fstab` にある全てのファイルシステムをマウントします。 例外は "noauto" の印がついているものと、 `-t` フラグで除外されたものと、 すでにマウントされているファイルシステムです。

`-d`::
実際にマウントシステムコールする以外のすべてのことをします。 このオプションは `-v` フラグと組み合わせて使い、 man:mount[8] が実際なにをしようとしているのか調べるのに便利です。

`-f`::
クリーンでないファイルシステムを強制的にマウントします (危険です)。もしくは、ファイルシステムのマウント状態を 読み書き可能から読み込みのみに変更するとき、 書き込みアクセスを強制的に取り消します。

`-r`::
ファイルシステムを読み込み専用でマウントします。
`-o ro` を使うのと同じです。

``-t _fstype_``::
指定のファイルシステムタイプでマウントします。 または、`-a` を使った場合、 指定したタイプのファイルシステムのみマウントします。
デフォルトのファイルシステムタイプは "ufs" です。

`-u`::
ファイルシステムのマウントオプションを更新します。

`-v`::
詳細な出力にします。

`-w`::
ファイルシステムを読み書き可能にマウントします。

`-o` には、 次のようなオプションを複数カンマで区切って指定できます。

nosuid::
そのファイルシステム上の setuid や setgid フラグを解釈しません。 これもセキュリティのために有用なオプションです。

[[disks-umount]]
=== man:umount[8] の使い方

ファイルシステムをアンマウントするには、man:umount[8] を使ってください。
このコマンドは、パラメータとしてマウントポイントの一つ、 デバイス名、もしくは `-a` や `-A` といったオプションを取ります。

いずれの形式でも `-f` で強制的なアンマウントを行ない、 `-v` で詳細な出力を出します。
ただしほとんどの場合、`-f` は使わないほうがよいでしょう。
計算機がクラッシュしたりファイルシステム上部のデータが破壊されたりする恐れがあります。


マウントされているファイルシステムすべてをアンマウントするには、`-a` と `-A` を使ってください。
`-t` にファイルシステムタイプを指定すると、指定されたものだけがアンマウントされます。
`-A` を使うとルートファイルシステムはアンマウントしません。

[[basics-processes]]
== プロセスおよびデーモン

FreeBSD はマルチタスクのオペレーティングシステムです。
動作中のプログラムはそれぞれ _プロセス_ と呼ばれます。
すべてのコマンドは実行すると、最低でも 1 つの新しいプロセスを開始します。
FreeBSD により実行されているシステムプロセスもたくさんあります。

各プロセスは _プロセス ID_ (PID) と呼ばれる数字でただ一つに識別されます。
ファイルのように各プロセスには所有者とグループがあり、
所有者とグループの許可属性は、そのプロセスが開けるファイルやデバイスを決定するために使われます。
多くのプロセスには親プロセスもあります。
親プロセスとは、そのプロセスをスタートさせたプロセスのことです。
例えば、シェルがプロセスで、シェルから起動されるコマンドは、シェルを親プロセスとするプロセスとなります。
例外は man:init[8] という特別なプロセスです。
`init` は FreeBSD がスタートするときに起動される最初のプロセスで、PID は常に `1` です。

ユーザから始終入力があるように設計されていないプログラムがあり、そういったプログラムは最初から端末と切り離されています。
例えば、ウェブサーバはユーザからの入力ではなくウェブのリクエストを処理します。
メールサーバも、 こういった種類のアプリケーションの一例です。
このような種類のプログラムは、 _デーモン_ と呼ばれます。
デーモンはギリシャ神話から来ており、目に見えないように役立つことをしてくれる善でも悪でもない実体を表します。
このため、BSD のマスコットはスニーカーをはいてフォークを携えたかわいらしい姿のデーモンなのです。

通常デーモンとして動作するプログラムには末尾に "d" を持った名前をつける慣習があります。
例えば、BIND は Berkeley Internet Name Domain ですが、 実際実行されるプログラムは `named` です。
また、Apache ウェブサーバのプログラムは `httpd`、ラインプリンタスプーリングデーモンは `lpd` です。
これは単なる命名に関する慣習です。
例えば、Sendmail アプリケーションの主なメールデーモンは `sendmail` で、`maild` ではありません。

=== プロセスを確認する

システム上で実行中のプロセスを確認するには、man:ps[1] または man:top[1] を使ってください。
現在動作中のプロセスのリスト、プロセスの PID やプロセスが使っているメモリの量、どういうコマンドラインで起動されたのかなどを表示させるには、man:ps[1] を使ってください。
man:top[1] を使用すると、動作中の全てのプロセスを表示できます。
数秒ごとに表示を更新するので、計算機が何をしているのかインタラクティブに知ることができます。

デフォルトでは、man:ps[1] はユーザにより動作中かつ所有のコマンドのみを表示します。
例えば:

[source,shell]
....
% ps
 PID TT  STAT    TIME COMMAND
8203  0  Ss   0:00.59 /bin/csh
8895  0  R+   0:00.00 ps
....

man:ps[1] の出力はいくつかの列に整形されています。
`PID` の列はプロセス ID を表示します。
PID は 1 から順に 99999 まで割り当てられ、その後足りなくなると最初に戻って使い回されます。ただし、使用中の PID には割り当てられません。
`TT` の列はプログラムが動いている tty を示し、`STAT` はプログラムの状態を示します。
`TIME` はプログラムがその CPU 上で動いている時間の長さです。
通常はプログラムをスタートさせたときからの経過時間ではありません。
多くのプログラムは、CPU 上で時間を使う必要があるまでかなりの時間を費すためです。
最後に、`COMMAND` はそのプログラムを起動するのに使われたコマンドとなります。

表示する情報を変更するオプションが用意されています。
いちばん便利なのは `auxww` でしょう。
`a` はすべてのユーザの動作中のプロセス全部についての情報を表示します。
`u` はプロセスの所有者のユーザ名とメモリ使用量を表示します。
`x` はデーモンプロセスについての情報を表示し、`ww` で、スクリーンに入りきらないほど長くなったコマンドラインでも省略せず、man:ps[1] に各プロセスの全コマンドラインを表示させます。

man:top[1] の出力も同様です。

[source,shell]
....
% top
last pid:  9609;  load averages:  0.56,  0.45,  0.36              up 0+00:20:03  10:21:46
107 processes: 2 running, 104 sleeping, 1 zombie
CPU:  6.2% user,  0.1% nice,  8.2% system,  0.4% interrupt, 85.1% idle
Mem: 541M Active, 450M Inact, 1333M Wired, 4064K Cache, 1498M Free
ARC: 992M Total, 377M MFU, 589M MRU, 250K Anon, 5280K Header, 21M Other
Swap: 2048M Total, 2048M Free

  PID USERNAME    THR PRI NICE   SIZE    RES STATE   C   TIME   WCPU COMMAND
  557 root          1 -21  r31   136M 42296K select  0   2:20  9.96% Xorg
 8198 dru           2  52    0   449M 82736K select  3   0:08  5.96% kdeinit4
 8311 dru          27  30    0  1150M   187M uwait   1   1:37  0.98% firefox
  431 root          1  20    0 14268K  1728K select  0   0:06  0.98% moused
 9551 dru           1  21    0 16600K  2660K CPU3    3   0:01  0.98% top
 2357 dru           4  37    0   718M   141M select  0   0:21  0.00% kdeinit4
 8705 dru           4  35    0   480M    98M select  2   0:20  0.00% kdeinit4
 8076 dru           6  20    0   552M   113M uwait   0   0:12  0.00% soffice.bin
 2623 root          1  30   10 12088K  1636K select  3   0:09  0.00% powerd
 2338 dru           1  20    0   440M 84532K select  1   0:06  0.00% kwin
 1427 dru           5  22    0   605M 86412K select  1   0:05  0.00% kdeinit4
....

出力は2つのセクションに分かれています。
ヘッダ (最初の 5 または 6 行) は動作している最新のプロセスの PID、システムの平均負荷 (システムがどれくらい忙しいかの指標)、システムの稼働時間 (最後の再起動からの時間) と現在の時刻を示します。
ヘッダの中の他の数字は動作中のプロセスの数、使われているメモリとスワップ領域の量、そしてシステムが異なる CPU 状態に消費した時間と関係します。
ZFS ファイルシステムのモジュールをロードしている場合には、`ARC` 行にはディスクではなくメモリキャッシュから読み込んだデータ量が表示されます。

ヘッダの下には、PID、ユーザ名、消費 CPU 時間とプロセスを起動したコマンドといった man:ps[1] の出力と同じような情報を持った行が続きます。
man:top[1] を使うとデフォルトでプロセスが使っているメモリ容量を表示します。
メモリ使用量の欄は 2 項目に分かれており、 一方は合計使用量、 そしてもう一方は実使用量です。
合計使用量はアプリケーションが必要としているメモリ量で、実使用量はその時点で実際に使われているメモリ量です。

man:top[1] は自動的に 2 秒ごとに画面を更新します。
`-s` 使うと更新間隔を変更することができます。

[[basics-daemons]]
=== プロセスの終了

動作中のプロセスもしくはデーモンと通信する一つの方法は、man:kill[1] を用いて _シグナル_ を送信する方法です。
送信可能なシグナルはたくさんあります。
特別な意味があるものもあれば、アプリケーションの文章に説明されているものもあります。
ユーザは自分が所有者となっているプロセスにのみシグナルを送ることができます。
他人のプロセスにシグナルを送ると、permission denied というエラーになるでしょう。
この例外は `root` ユーザで、 ルートユーザは誰のプロセスに対してもシグナルを送ることができます。

オペレーティングシステムもプロセスにシグナルを送ることができます。
アプリケーションを下手に書いてしまい、予想外のメモリにアクセスしようとすると、FreeBSD はプロセスに "セグメンテーション違反" シグナル (`SIGSEGV`) を送ります。
ある程度の時間が経ったら man:alarm[3] システムコールを使って警告してもらうように書かれているアプリケーションには、"警告" シグナル (`SIGALRM`) が送信されます。

プロセスを止めるためには2つのシグナル、`SIGTERM` か `SIGKILL` を使います。
`SIGTERM` は穏かにプロセスを終了させる方法です。
プロセスはシグナルを受け取ることができ、開いているすべてのログファイルを閉じ、終了前にしていたことを終えるように試みることができます。
中断できない処理の途中だと、`SIGTERM` をプロセスが無視することもあるかもしれません。

プロセスは `SIGKILL` を無視することができません。
プロセスに `SIGKILL` を送ると、プロセスは通常その時点で止まります。

他に良く使われるシグナルには、`SIGHUP`、`SIGUSR1` と `SIGUSR2` があります。
これらは一般的な用途のシグナルなので、このシグナルが送信されたときの応答は、アプリケーション毎に異なります。

例として、ウェブサーバの設定ファイルを変更後、ウェブサーバに設定を再読み込みさせる必要があります。
`httpd` を再起動するとウェブサーバは一瞬ながら停止してしまいます。
その代わりに `SIGHUP` シグナルを送りましょう。
デーモンごとに行動が違うので、`SIGHUP` が期待する結果となるように、そのデーモンの文書を読んで確認してください。

[IMPORTANT]
====
システム上のランダムプロセスを終了させるのはよくありません。
特に、PID が 1 の man:init[8] は特別です。
`/bin/kill -s KILL 1` は推奨されていませんが、実行するといとも簡単にシステムをシャットダウンさせることができます。
kbd:[Return] を押す _前_ に man:kill[1] を実行する引数を二重にチェックする _癖_ をつけてください。
====

[[shells]]
== シェル

_シェル_ は、オペレーティングシステムを利用するためのコマンドラインインタフェースを提供します。
シェルは入力チャンネルからコマンドを受け取り、それらを実行します。
大部分のシェルは、日々の作業、ファイル管理やファイル名の展開、コマンドライン編集、コマンドマクロ、環境変数といった組み込みの機能を持ってます。
FreeBSD には Bourne Shell (man:sh[1]) や 高機能 C-shell (man:tcsh[1]) が含まれています。
また、これ以外にも `zsh` や `bash` などのシェルが FreeBSD Ports Collection から利用可能です。

どのシェルを使うかは、まったく趣味の問題です。
あなたが C のプログラマだったとすれば、man:tcsh[1] のような C 風のシェルの方が落ち着くかもしれません。
Linux(R) ユーザであれば、`bash` を好まれるでしょう。
それぞれのシェルは、 ユーザの好みの作業環境で利用できる (もしくはできない) 独自の機能を持っているということ、そして、どのシェルを使うことにするかを決めるのはユーザ自身ということです。

シェルの一般的な機能の一つに、ファイル名の補完があります。
コマンドやファイル名の最初の数文字を入力して kbd:[Tab] を押すと、シェルにコマンドやファイル名の残りの部分を補完させることができます。
例として、`foobar` および `footbar` という二つのファイルがあるとします。
`foobar` を削除するために `rm foo` と入力し、kbd:[Tab] を押してファイル名を補完しようとします。

しかしシェルは `rm foo` とだけ出力します。
`foobar` および `football` のファイル名は、両方とも `foo` から始まるため、ファイル名の補完を完全には行なえませんでした。
一つ以上のファイル名にマッチした場合、ビープ音をらすシェルもあれば、選択できるすべてのファイル名を表示するシェルもあります。
この場合、希望するファイル名を同定するために、ユーザはさらに文字を入力する必要があります。
`t` を入力してもう一度 kbd:[Tab] を押すと、シェルはファイル名を確定でき、ファイル名の残りの部分が補完されます。

もう一つあげられるシェルの特徴として、環境変数があります。
環境変数とは、シェルの環境変数におけるキーと値とのペアです。
この環境変数は、そのシェルから起動されたプログラムから参照でき、それを利用してプログラムの設定を保存するのに利用されます。
<<shell-env-vars>> は、一般的な環境変数とその意味の一覧です。
環境変数の名前は常に大文字です。

[[shell-env-vars]]
.一般的な環境変数
[cols="25h,~"]
|===
| 変数名
| 意味

|`USER`
|現在のログインユーザのユーザ名。

|`PATH`
|コロンで区切られた実行ファイル探索のための ディレクトリのリスト。

|`DISPLAY`
|接続する Xorg ディスプレイのネットワーク名 (存在する場合のみ)。

|`SHELL`
|現在のシェル。

|`TERM`
|ユーザの端末種名。 端末のケーパビリティを決定するのに使われる。

|`TERMCAP`
|種々の端末の機能を実現する端末のエスケープコードの データベースのエントリ。

|`OSTYPE`
|オペレーティングシステムの種別。

|`MACHTYPE`
|システムの CPU アーキテクチャ。

|`EDITOR`
|ユーザの選んだテキストエディタ。

|`PAGER`
|ユーザの選んだ画面上でテキストを見るためのユーティリティ。

|`MANPATH`
|コロンで区切られたマニュアルページ探索のための ディレクトリのリスト。
|===

環境変数を設定する方法は、シェルごとに多少異なります。
man:tcsh[1] や man:csh[1] では `setenv` を使います。
man:sh[1] や `bash` 等の Bourne シェルでは、`export` を使って現在の環境変数を設定します。
以下の例では、`tcsh` シェルでデフォルトの `EDITOR` を `/usr/local/bin/emacs` に設定します。

[source,shell]
....
% setenv EDITOR /usr/local/bin/emacs
....

`bash` では次のようになります。

[source,shell]
....
% export EDITOR="/usr/local/bin/emacs"
....

現在の設定を確認するために、コマンドライン中の変数名の前に `$` 文字を置くことで、環境変数を展開させることができます。
たとえば、`echo $TERM` は `$TERM` が セットされている内容を表示します。

シェルは特殊文字を、特別なデータを表すものとして扱います。
その特殊文字はメタキャラクタと呼ばれます。
もっとも一般的なメタキャラクタは `\*` で、これはファイル名に含まれる、あらゆる文字を表します。
メタキャラクタはファイル名の展開に使われます。
たとえば、`echo *` と入力すると `ls` と入力したのとほとんど同じ結果を得られます。
これはシェルが `*` とマッチするすべてのファイルを受け取って `echo` はコマンドラインでそれらを表示するからです。

特殊文字をシェルに解釈させないようにするため、特殊文字の前にバックスラッシュ文字 (`\`) を置いてエスケープしてください。
例えば `echo $TERM` は端末の設定を表示し、`echo \$TERM` は `$TERM` とそのまま表示します。

[[changing-shells]]
=== シェルの変更

デフォルトのシェルを変更する一番簡単な方法は `chsh` を使うことです。
このコマンドを実行すると、環境変数 `EDITOR` で示されたエディタ (デフォルトでは man:vi[1] が設定されている) が立ち上がります。
`Shell:` の行を変更するシェルの絶対パスに変更してください。

代わりに `chsh -s` を使うと、エディタを起動せずにシェルを変更できます。
たとえば、シェルを `bash` に変えたいなら、次のようにしてください。 

[source,shell]
....
% chsh -s /usr/local/bin/bash
....

プロンプトに対してパスワードを入力し、kbd:[Return] を押すと、シェルが変更されます。
新しいシェルを使うには、一度ログオフしてから再ログインしてください。

[NOTE]
====
使おうと思っているシェルは__必ず__ `/etc/shells` 中に書かれていなければなりません。
シェルを crossref:ports[ports,アプリケーションのインストール - packages と ports] で説明されている FreeBSD の Ports Collection からインストールしたのであれば、自動的にこのファイルに追加されています。
もし書かれていなければ、以下のコマンドで、パスをシェルのパスに置き換えて使って追加してください。

[source,shell]
....
# echo /usr/local/bin/bash >> /etc/shells
....

その後 man:chsh[1] を実行してください。
====

=== 高度なシェルの機能

UNIX(R) のシェルは単なるコマンドインタプリタではなく、ユーザが実行したコマンドの出力をリダイレクトしたり、入力をリダイレクトすることによりコマンドをお互いに繋げることで、最終的なコマンドの出力結果を改良できます。
この機能をビルトインコマンドとともに用いることで、ユーザは最大化された効率の環境を入手できます。

シェルのリダイレクト機能を使うことで、コマンドの出力や入力を別のコマンドに送ったり、ファイルに送ることができます。
たとえば、 man:ls[1] コマンドの出力をキャプチャするには、
出力をファイルにリダイレクトしてください。
以下はその例です。

[source,shell]
....
% ls > directory_listing.txt
....

実行すると、現在の作業ディレクトリにあるファイルの一覧が `directory_listing.txt` に出力されます。
man:sort[1] のようなコマンドは、入力を読み込むことができます。
先ほど得たファイルの一覧をソートするには、入力元をファイルにリダイレクトしてください。

[source,shell]
....
% sort < directory_listing.txt
....

入力された内容はソートされ画面に出力されます。
この出力を他のファイルにリダイレクトするには、リダイレクトの向きを混ぜるように man:sort[1] の出力をリダイレクトしてください。

[source,shell]
....
% sort < directory_listing.txt > sorted.txt
....

これまでの例では、ファイルディスクリプタを用いてコマンドに対しリダイレクトを行っています。
すべての UNIX(R) システムは標準入力 (stdin)、標準出力 (stdout) および標準エラー (stderr) といったファイルディスクリプタを持っています。
それぞれに対象があり、
入力はキーボードまたはマウスなどの入力を提供するものが対象、出力はスクリーンであったりプリンタ用紙が対象です。
また、エラーは診断やエラーメッセージに用いられるものが対象です。
これらは、I/O ベースのファイルディスクリプタ、時にはストリームと考えられます。

これらのディスクリプタを使用することで、シェルは出力と入力についてさまざまなコマンドを経由させ、また、ファイルに対して出力し、もしくはファイルから読み込むようにリダイレクトできます。
リダイレクトの他の方法は、パイプの機能です。

UNIX(R) のパイプ記号 "|" は、コマンドの出力を他のプログラムに直接渡します。
基本的には、パイプはコマンドの標準出力を他のコマンドの標準出力に渡します。
以下はその例です。

[source,shell]
....
% cat directory_listing.txt | sort | less
....

この例では、`directory_listing.txt` の内容がソートされ、その結果が man:less[1] に渡されます。
このコマンドを実行すると、出力がスクロールして画面から見えなくなることをさけることができて、ユーザは出力を自分のペースでスクロールできます。

[[editors]]
== テキストエディタ

FreeBSD の設定の多くは、テキストファイルの編集で行われます。
そのため、テキストエディタの扱いに慣れると良いでしょう。
FreeBSD には、基本システムの一部として二、三提供されるものと、Ports Collection から利用できる、たくさんのテキストエディタが用意されています。 

学習が簡単なエディタは、 easy editor の略で man:ee[1] と呼ばれるものです。
このエディタを立ち上げるには、`ee _filename_` と入力してください。
ここで _filename_ は、 編集しようとしているファイルの名前です。
一旦このコマンドの中に入れば、 エディタの機能を操作するコマンドはすべてディスプレイの上部に表示されています。
キャレット (`^`) は kbd:[Ctrl] を意味するので、`^e` は kbd:[Ctrl+e] を押すという意味になります。
man:ee[1] を終了するには kbd:[Esc] を押し、そしてメインメニューから "leave editor" オプションを選択してください。
ファイルが更新されていたときは、エディタは変更をセーブするかどうかプロンプトを出します。

FreeBSD には、ベースシステムの一部として man:vi[1] といったより強力なテキストエディタが用意されています。
package:editors/emacs[] および package:editors/vim[] といった他のエディタは Ports Collection の一部として用意されています。
これらのエディタはやや学習が複雑ですが、より高い機能性を提供します。
しかし、あなたが多量のテキストを編集することを考えているなら、 vim や Emacs といった強力なエディタを習得することは、 より多くの時間を節約することでしょう。

ファイルを編集したり、文字入力を必要とするようなアプリケーションの多くは、自動的にテキストエディタを起動します。
<<shells>> の節で説明したように、デフォルトのエディタを変更するには `EDITOR` 環境変数に希望するエディタを設定してください。

[[basics-devices]]
== デバイスとデバイスノード

デバイスとはシステム上のハードウェアに関するものに対してよく使われる用語で、ディスクやプリンタ、グラフィックカードやキーボードが含まれます。
FreeBSD が起動するとき、ブートメッセージの大部分は検出されたデバイスについてのものです。
ブートメッセージは `/var/run/dmesg.boot` に保存されています。

各デバイスはデバイス名と番号を持ちます。
例えば、`ada0` は最初の SATA CD-ROM ドライブで、`kbd0` はキーボードを表します。

FreeBSD におけるほとんどのデバイス、デバイスノードと呼ばれる `/dev` にあるスペシャルファイルを通してアクセスしなければなりません。

[[basics-more-information]]
== マニュアルページ

FreeBSD についてのもっとも包括的な文書は、 マニュアルページの形式になっているものです。
FreeBSD システム上のほとんどすべてのプログラムには、基本的な操作方法と利用可能な引数を説明しているリファレンスマニュアルが添付されています。
これらのマニュアルは `man` を使って見ることができます。

[source,shell]
....
% man コマンド名
....

ここで `コマンド名` のところには、知りたいコマンドの名前を入れます。
たとえば man:ls[1] について知りたい場合には、次のように入力します。

[source,shell]
....
% man ls
....

マニュアルは、トピックごとにセクション番号で分類されています。
FreeBSD では、以下のセクションがあります。

. ユーザコマンド
. システムコールとエラー番号
. C のライブラリ関数
. デバイスドライバ
. ファイル形式
. ゲームや娯楽
. さまざまな情報
. システムの管理と操作のためのコマンド
. システムカーネルインタフェース

時折、 同じトピックがオンラインマニュアルの複数のセクションに記載されている場合があります。
たとえば、`chmod` ユーザコマンドと `chmod()` システムコールの場合がそれに該当します。
man:man[1] にセクション番号を与えることで、 表示したいセクションを指定できます。

[source,shell]
....
% man 1 chmod
....

上のようにすれば、ユーザコマンド man:chmod[1] のマニュアルページが表示されます。
オンラインマニュアルの特定セクションへの参照は、慣習的に書かれている文書で括弧の中に示されます。
すなわち、man:chmod[1] はユーザコマンドを、man:chmod[2] はシステムコールの方を示しています。

マニュアルページの名前を知らない場合には、`man -k` を使ってマニュアルページの解説 (description) からキーワードを検索してください。

[source,shell]
....
% man -k mail
....

このコマンドは、"mail" というキーワードをコマンド解説に含むコマンドの一覧を表示します。
これは man:apropos[1] と同等の機能です。

`/usr/sbin` にあるすべてのコマンドの説明を読むには、以下のように実行してください。

[source,shell]
....
% cd /usr/sbin
% man -f * | more
....

または、以下を実行してください。

[source,shell]
....
% cd /usr/sbin
% whatis * |more
....

[[basics-info]]
=== GNU の Info ファイル

FreeBSD には Free Software Foundation (FSF) によるアプリケーションやユーティリティが含まれています。
これらのプログラムには、マニュアルページに加えて `info` ファイルと呼ばれるハイパーテキスト形式の文書が付属しています。
この文書は man:info[1]、あるいは package:editors/emacs[] をインストールしているなら emacs の info モードで読むことができます。

man:info[1] を使うには、次のように入力してください。

[source,shell]
....
% info
....

`h` と入力すると、 簡単な手引きを読むことができます。 クイックコマンドリファレンスは `?` を入力してください。