Linuxを初めて勉強した。

##エディタ

####vi ファイルを開く
書式　***vi ファイル名***
編集したいファイルを開く。
: + q ファイルを閉じる
: + w ファイルを保存
: + w + q　ファイルを保存して終了
+ q + !　ファイルを強制的に閉じる

###インサートモードとコマンドモード
***インサートモードとコマンドモードを切り替えてファイルの編集を行う。***
コマンドモードからインサートモードへの切り替え
・i 
・a　
インサートモードからコマンドモードへの切り替え
ESC

####インサートモードの編集コマンド
***カーソル移動***
・左　h
・右　l
・下　j
・上　k
・次ページ移動　Ctrl　f
・前ページ移動　Ctrl　b
・行指定　： 数値
・文書頭　gg
・文書末　G
.A　行の最後
・I　行の先頭

***カット***
・一文字削除　x
・1行削除　dd

***コピー***
・1行コピー　yy
・n行コピー　n(数値）yy

***ペースト***
・カーソルの文字の次、次の行にペースト　p
・カーソルの文字の前、前の行にペースト　P

文字編集の取り消し　u

***文字列の置換、検索***
書式　***/文字列***
次の検索まで検索した文字がハイライト表示される。
そのためのコマンドが
ハイライトを消す　:nohlsearch　

書式　***:対象の行数s/検索文字列/置換文字列/オプション***

```
:1s/banana/BANANA/g 1行目のbananaを全てをBANANAにする。 
:1s/orange/ORANGE/　1行目の最初のbananaをBANANAにする。
:%s/melon/*MELON*/g　ファイル全体のmelonをMELONにする。
:%s/lemon/@LEMON@/gc　置換の確認メッセージを出力しながら、置換する。
```

##管理所の仕事
Linuxにはユーザ（個人）とグループ（複数）にログインすることができる。
グループとユーザを作成、変更、削除する管理コマンドをもつルートユーザがある。
＄はユーザ権限でも可
＃はルートユーザのみ
###ユーザ
ユーザはメモリ、ファイルなど資源を利用できる最小単位の権限をもつ
ユーザ、システム管理者は、ユーザの定義をファイルに記述することができる。
しかし
コマンドでファイルを編集することを推奨されている。

ユーザ定義　/etc/passwd ファイル（パスワードファイル）の中にある。

####ユーザの作成
書式　***user ユーザー名***

```
# useradd owl ユーザを作成
# ls /home/ homeディレクトリを確認

# grep 1001 /etc/passwd ファイルに１００１があるかを検索
# useradd -g users -u 1001 penguin usersグループのID番号１００１にpenguinというユーザ名で登録
# grep penguin /etc/passewd ファイルに特定のユーザー名が検索
```
####ユーザの削除
書式　***userdel ユーザ名***

```
# grep penguin /etc/passwd ファイルに特定のユーザ名があるかを検索
# userdel penguin ユーザ名を削除
# grep penguin /etc/passwd
ユーザが消えた
```
###グループ
複数のユーザの権限をまとめて扱うために使う。
主に所属するグループをプライマリグループという。
グループ、システム管理者が必要に応じてグループを定義する。
ユーザと同様にファイルにグループの編集をすることができるが
コマンドでファイルを編集することを推奨されている。

グループ定義は、/etc/group ファイル（グループファイル）の中にある。

####グループの作成
書式　***groupadd グループ名***

```
grep 1001 /etc/group ファイルに特定のID番号があるかを検索
groupadd -g 1001 linuc グループlinucにID番号１００１を作成
grep linuc /etc/group ファイルに特定のグループがあるかを検索
```
####グループの登録情報の変更
書式　***groupmod [-g gid] [-n new-group-name] 変更対象のグループ***

```
grep linuc /etc/group ファイルに特定のグループ名を検索
groupmod -n linux linuc linucからlinuxへグループ名を変更
grep linux /etc/group ファイルに特定のグループ名を検索
```
####グループを削除
書式　***groupdel グループ名***

```
grep 1001 /etc/group ファイルに特定のID番号を検索
groupadd -g 1001 linux グループに特定のID番号を作成
grep linux /etc/group ファイルに特定のグループ名を検索
groupdel linux グループlinuxを削除
grep 1001 /etc/group ファイルに特定のID番号を検索
表示されない
```
###パスワードとパスワードファイル
パスワード定義は、/etc/shadow ファイル(シャドウファイル）の中に暗号化されて記録されている。
####パスワードファイル(/etc/passwd)の中にある記録情報
```
account:passsword:UID:GID:GECOS:directory:shell
```
***account　システムのユーザ名
password ユーザの暗号化されたパスワード、現在は"x"
UID　ユーザID番号
GID　ユーザが属するプライマリグループID番号
GECOS　ユーザの名前またはコメントのフィールド
directory　ユーザのホームディレクトリ
shell　ログイン時に起動されるユーザのコマンドインタプリンタ***

####グループファイル（/etc/group)の中にある記録情報

```
group_name:password:GID:user_list
```
***group_name　グループの名前
password　暗号化されたパスワード、不要なら空欄
GID　グループID番号
user_list　グループに所属するユーザ名のリスト。それぞれのユーザ名はコンマで区切られる。***

####パスワード登録、変更
パスワード登録、変更にはrootユーザが必要。
書式　***pass ユーザ名***

```
# passwd penguin　ユーザ名のパスワードを登録か変更する。
# exit　ログアウト
```
####シャドウファイル（etc/shadow)の中にある記録情報

```
account:password:last_changed:may_be_changed:must_be_changed:warned:expires:dis
```
***account　ユーザ名
password　暗号化されたパスワード
last_changed　最後にパスワードが変更された日までの日数
may_be_changed　パスワードが変更可能となるまでの日数
must_be_changed　パスワードを変更しなくてはならなくなるまでの日数
warned　パスワード有効期限が来る前に、ユーザが警告を受ける日数
expires　パスワード有効期限が過ぎ、アカウントが使用不可になるまでの日数
disables　アカウントが使用不可になる日のまでの日数
reserved　予約フィールド***

###用意されているユーザとグループ
・Linuxはユーザやグループは必要に応じて複数追加することができる。
・アカウントを作成するとユーザ名と同名のグループが作られる。
・グループは複数のユーザをまとめるためにある。　ユーザに対してアクセス権や限定的なディレクトリの作成などを自由自在にできる。
####rootユーザ
Linuxの中で制限なくありとあらゆることができる。
つまり
厳しく管理しなくてはならない。

####suコマンド
一時的に他のユーザになるためのコマンド　rootユーザにもなることができる。

複数がrootユーザだと履歴に誰がどんなことをしたかを確認できない。
suを使い一般からrootユーザになることで操作時間などの情報が残る

書式　***su 
　　　su - ユーザ***

オプション
su - root　ユーザになることができる。
su - user　指定したユーザになることができる。

```
$ cat /var/log/messages ファイルの表示
許可にならない
$ su -　rootユーザになる。
# cat /var/log/messages　
許可になる。
```
####sudoコマンド
スーパーユーザ（root)権限でコマンドを実行できる。
wheelグループというスーパーゆーざ（root)特権を持つグループに登録する必要がある。
書式　***sudo コマンド　***

オプション
-u　指定したユーザでコマンドを実行する。

```
$ visudo
スーパーユーザでなければ実行できない
# su -　rootユーザになる
# vigr　wheelグループにユーザ追加されたかを確認
# visudo　
実行できる
# su - penguin　ユーザ名penguinになる
$ sudo visudo　
管理グループに所属しているユーザであるかを確認
確認が取れたら実行できる。
```
##ユーザ権限とアクセス権
###ファイルの所有者と所有グループ
ファイル制作車のユーザIDはファイルの所有者
ファイル制作者のグループIDは所有グループ

所有者と所有グループはファイルの情報として重要な属性

####chown 所有者の変更
書式　***chown ユーザ [.グループ] ディレクトリ
　　　chown ユーザ [.グループ] ファイル***

オプション
-R ディレクトリを対象とする

```
$ touch user ファイルuserを作成
$ ls -l user　長形式で表示
$ chown nobady user　非特権ユーザへ所有者を変更
変更できない　
$ su　rootユーザへ変更
# chown nobady user　非特権ユーザへ所有者を変更
# ls -l user　ユーザを長形式で表示
```

###chgrp 所有グループの変更
書式
***chgrp グループ　ディレクトリ
chgrp グループ　ファイル***

オプション
-R

```
$ touch groups ファイルgroupsを作成
$ ls -l groups　ファイルgroupsを長形式で表示
$ chown nobady groups　非特権ユーザグループへ所有グループを変更
変更できない
$ su　rootユーザへ変更
# chown nobady groups　
# ls -l groups　変更された所有グループを長形式で表示
```
###ファイルとアクセス権
ファイルの３つのレベルの権限をもつユーザ
***1.ファイルを所有するユーザ
2.1以外のファイルを所有グループのユーザ
3.1,2以外のユーザ***

3つのファイルの権限
・読み
・書き
・実行

####ファイルに設定できるユーザ
ファイルのモード
```d rwx rwx rwx```
***r 読み込み
w 書き込み
x 実行またはディレクトリの移動***

これはどのユーザがどういう権限があるかを示す。
左から順に
d　ファイル識別
スペース区切って1,2,3のユーザを示す。
この場合
全てのユーザが３つの権限を持つことを表す。

####chmod アクセス権の変更
モード指定のやり方は２つある。
・モードの書式を複数書き、カンマで区切って指定
・８進数３桁で各ユーザのレベルを指定

***chmod モード　[,モード]...ディレクトリ
chmod モード　[,モード] ... ファイル
chmod ８進数表記のモード　ディレクトリ
chmod 8進数表記のモード　ファイル***
オプション
-R

```
$ touch chownfile　ファイルを作成
$ chmod u+rw-x,go+r-wx chownfile　ファイルモードをrw-r--r--に変更
$ ls -l chownfile　ファイルを長形式で表示
$ chmdo g+w chownfile　ファイルモードに書き込みモードを追加
$ ls -l chowfile　
$chmod u-r,o+w chownfile　ファイルモードに読み込みモードを除去、その他に書き込みモードを追加
$ chmod go+x chowfile　グループとその他に実行権限を表示
$ ls -l chownfile
```
８進数で変更

```
$ touch chownfile ファイルを作成
$ chmod u+rw-x,go+r-wx chowfile　ファイルモードを変更
$ ls -l chowfile　ファイルを長形式で表示
$ chmod 664 chowfile　ファイルモードを８進数で変更
$ ls -l chownfile
$ chmod 256 chownfile　
$ ls -l chownfile
$ chmod 277 chownfile
$ ls -l chownfile
```
モード指定には特殊な属性がある。
setuidビット　ファイルの所有者、所有グループの権限で実行する。
setgidビット　　　　　　　　　　　〃
stickyビット　所有者以外が削除ができなくなる。

```
$ touch idbifile ファイルを作成
$ chomod u+rw-x,go+r-wr idbitfile　ファイルモードを変更
$ ls -l ibdifile　ファイルを長形式で表示
$ chmod u+s idbifile
$ ls -l idbifile
$ chmod u-s,g+s idbifile
$ ls -l idbifile
$ chmod +t idbifile
$ ls -l idbifile
```
####umask パーミッションを設定されてファイルを作成
書式　***umask [8進数のモードのマスク値]***

```
$ umask 現在のマスク値を表示
$ touch umask0022　ファイルを作成
$ umask 070　マスク値を070へ変更
$ touch umask0070
$ umask 072
$ touch umask0072
$ ls -l umask00*

$ umask -S　-Sで８進数ではなく意味のわかりやすい形式で表示
$ touch umask0022　
$ umask -S u=rw,g=,o=rw　マスク値を変更
$ touch umask0070　
$ ls -l umask00*
```
##理解できてないところ
・アクセス権の変更のコードの書き方