Linux勉強会 第3回：ファイルの削除禁止設定と検索機能

第1回 [Linux勉強会 第1回：仮想コンソールとファイル操作](https://qiita.com/yungo/items/8f9cb967f0bd5fa35242)
第2回 [Linux勉強会 第2回：ファイル操作
](https://qiita.com/onukid007/items/149dd210bd96cd43bb21)
第1回第2回に引き続き今回は第3回目の記事になります。
2月14日、株式会社Ancarで社内勉強会を行いました。勉強会トピックのおさらいです

当記事は「Linuxの基礎」になりますので、そのことをご承知おき下さい。
補足情報等ございましたら、コメント残していただけると幸いです:bow:

各コマンドの実行はmacOSの標準ターミナルを使用しています


## おしながき
1. [ファイルの削除禁止設定](#ファイルの削除禁止設定)
2. [ファイルを探す](#ファイルを探す)
3. [その他の検索機能](#その他の検索機能)


<a id="ancar1"></a>

### ファイルの削除禁止設定

あるファイルを削除できなくするには、そのファイルの属するディレクトリを書き込み禁止にする必要があります

書き込み可能ディレクトリ (mydir) 内の書き込み禁止ファイル (wrt_no)
書き込み禁止ディレクトリ (bandir) 内の書き込み可能ファイル (wrt_ok)

では、実際に書き込み禁止にして、lsコマンドで権限を確認してみましょう

```
# wrt_noを書き込み禁止にします
$ chmod -w mydir/wrt_no

# bandirディルクトリを書き込み禁止にする
$ chmod -w bandir

# bandir ディレクトリが書き込み禁止になっている
$ ls -ld *dir
drwxrwxr-x 2 keita ancar 20  2月 14 17:39 mydir
dr-xr-xr-x 2 keita ancar 20  2月 14 17:39 bandir
```

これで書き込み禁止になっているのを確認できましたね

```
# wrt_no ファイルは書き込み禁止になっている
$ ls -l mydir/w* bandir/w*
-r--r--r-- 1 keita ancar 7  2月 14 17:39 mydir/wrt_no
-rw-rw-r-- 1 keita ancar 7  2月 14 17:39 bandir/wrt_ok
```
実際に削除できなくなっているか確認してみましょう。
bandir/wrt_okは削除できなくなっていて、mydir/wrt_noは確認つきで削除できてますね
なるほど。。。
ファイルが削除できない時は、そのファイルの属するディレクトリの権限確認もする必要がありますね

```
$ ls -ld *dir
dr-xr-xr-x 2 keita ancar 20  2月 14 17:42 bandir
drwxr-xr-x 2 keita ancar 20  2月 14 17:43 mydir

$ rm bandir/wrt_ok
rm: `bandir/wrt_ok' を削除できません: Permission denied

$ rm mydir/wrt_no
rm: 書き込み保護されたファイル 通常の空ファイル `mydir/wrt_no' を削除しますか?y
```

<a id="ancar2"></a>

### ファイルを探す

findコマンドについて勉強しました。
②のようにディレクトリを正しく指定してあげないと結果が表示されないことが分かりました。これは気をつけたいですね。
下記の例だと`/bin/`を基点にchmodの名前検索 `-name` し、それを画面表示 `-print` しているそうです。


```
$ find /bin -name chmod  -print  ----①
$ find /bin/ -name chmod -print  ----②
/bin/chmod

$ find dr1 -name myfile
dr1/dr1b/myfile
dr1/dr1a/myfile
dr1/myfile
```

次はワイルドカード指定での検索です。
ワイルドカードを指定するときは ""で囲むのを忘れないようにしましょう！
ダブルクォーテーションで囲わないとシェル展開され、正しい出力が得られません。

```
$ find /bin/ -name "ch*"
/bin/chacl
/bin/chgrp
/bin/chcon
/bin/chmod
/bin/chown
/bin/chrt
/bin/chardetect
/bin/chmem
/bin/chattr
/bin/chage
/bin/chvt
/bin/chronyc
```

次はファイルデータを更新した日付で検索する場合です。
日付は数字で指定します。
`+` を付けると「それより過去の日」
`-` を付けると「それより現在に近い日」となるそうです。便利ですね〜
下記の例だと、4日以内に作成・更新したファイルでの検索になります(3日前、2日前、1日前、本日、の計4日)

```
$ find ~/ -mtime -4
/root/.bash_logout
/root/.bash_profile
/root/.bashrc
/root/.cshrc
/root/.tcshrc
/root/.ssh
/root/.ssh/authorized_keys
/root/aa1.txt
/root/aa2.txt
/root/aa4.txt
/root/hoge.txt
/root/hogehoge.php
/root/hoge.rb
/root/rfile2
```

下記は4日前に作成・更新したファイルの検索になります

```
$ find ~/ -mtime 4
/root/
/root/rfile3
```

### その他の検索機能

`locate 文字列`
指定した文字列をふくむファイルを表示する検索コマンドです
locate コマンドはファイル名表示だけになっています。


```
$ locate mkdir
/usr/bin/mkdir
/usr/lib/python2.7/site-packages/lockfile/mkdirlockfile.py
/usr/lib/python2.7/site-packages/lockfile/mkdirlockfile.pyc
/usr/lib/python2.7/site-packages/lockfile/mkdirlockfile.pyo
/usr/share/man/man1/mkdir.1.gz
/usr/share/man/man1p/mkdir.1p.gz
/usr/share/man/man2/mkdir.2.gz
/usr/share/man/man2/mkdirat.2.gz
/usr/share/man/man3p/mkdir.3p.gz
/usr/share/man/overrides/cs/man1/mkdir.1
/usr/share/man/overrides/es/man1/mkdir.1
/usr/share/man/overrides/fr/man1/mkdir.1
/usr/share/man/overrides/pl/man1/mkdir.1
/usr/share/man/overrides/zh_CN/man1/mkdir.1
```

今回は以上となります！

# まとめ
基礎的な内容ですが、普段使用していないコマンドの使い方を学ぶことができました。
機会があれば、どんどん使っていきたいですね。

加筆修正、大歓迎ですのでぜひコメントにお願いします！