運用保守の業務によく使うファイルの操作のコマンドをまとめました。

## はじめに
運用保守の業務でファイル等の移動や権限変更など主に使うものをまとめました。

### ipアドレスを確認する

IPアドレスを確認するコマンドです。
```
[root@localhost tmp]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host
       valid_lft forever preferred_lft forever
2: enp0s3: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:f9:db:46 brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.25/24 brd 192.168.0.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::3003:f1e6:79dd:4677/64 scope link noprefixroute
       valid_lft forever preferred_lft forever
[root@localhost tmp]#
```
### uname -n コマンド
ホスト名を確認するコマンド
ログイン時にホスト名が正しいか確認する。

以下のQiitaの記事が参考になりました。有難うございます。
https://qiita.com/masato930/items/f50ad3df302290d1f544
```
$ uname -n
localhost.localdomain
```
### rootに昇格する
よく本番作業で作業が必要な時にrootに昇格します。

以下の記事を参考にしました。
https://atmarkit.itmedia.co.jp/ait/articles/1611/28/news036.html
```
$ sudo su -
#
```
rootに昇格したらプロパティが#になります。
### カレントディレクトリにあるファイルとディレクトリを更新日時が新しいのを一番下に表示する
以下の記事を引用しました。
https://atmarkit.itmedia.co.jp/ait/articles/1606/27/news018.html
オプション
-r 並び中を逆にする
-t ファイルの更新日が新しい順に表示する
-l 長いフォーマットで表示する

```
$ ls -ltr
```
例)tmpディレクトリがカレントディレクトリでファイルとディレクトリを表示
```
[root@localhost tmp]# ls -ltr
合計 0
-rw-r--r-- 1 root root 0 10月 28 23:01 test1
-rw-r--r-- 1 root root 0 10月 28 23:01 test2
```
### 現在のディレクトリの場所を表示
```
$ pwd
```
例) /tmpディレクトリがカレントディレクトリです。
```
[root@localhost tmp]# pwd
/tmp
```
### フォルダを移動する
```
$ cd <フォルダ名>
```
例) /var/logフォルダへ移動する
```
[root@localhost tmp]# cd /var/log
[root@localhost log]# pwd
/var/log
[root@localhost log]#`
```

### ファイルを指定したフォルダへ移動させる
```
mv <移動するファイル名> <フォルダ名を指定>
```
例)test1のファイルが/tmpに移動した
```
[root@localhost tmp]# ls -ltr /tmp
合計 0
[root@localhost tmp]#
[root@localhost tmp]# mv /root/test1 /tmp
[root@localhost tmp]#
[root@localhost tmp]# ls -ltr /tmp
合計 0
-rw-r--r-- 1 root root 0 10月 28 23:19 test1
```
### ファイル名を指定したファイル名にする
```
mv <ファイル名1> <指定したファイル名>
```
例)/rootフォルダ配下にあるtest2をtest3のファイル名でリネームして
/tmpフォルダ配下に移動する
```
[root@localhost ~]# mv /root/test2 /tmp/test3
[root@localhost ~]#
[root@localhost ~]# ls -ltr /tmp
合計 0
-rw-r--r-- 1 root root 0 10月 28 23:26 test3
```
### ファイルを削除する
-iオプション　削除する前に確認画面が出る

ファイルを削除する例
```
$ rm -i <ファイル名>
```
例)test1ファイルを削除する
```
[root@localhost tmp]# ls -ltr /tmp
合計 0
-rw-r--r-- 1 root root 0 10月 28 23:19 test1
[root@localhost tmp]#
[root@localhost tmp]# rm -i test1
rm: 通常の空ファイル `test1' を削除しますか? y
[root@localhost tmp]#
[root@localhost tmp]# ls -tlr
合計 0
[root@localhost tmp]#
```
### フォルダを削除する
フォルダを削除する
```
$ rm -r -i <フォルダ名>
```
確認画面が不要な場合は
```
$ rm -r <フォルダ名>
```
例 test1のフォルダを削除する
```
[root@localhost tmp]# rm -r -i test1
rm: ディレクトリ `test1' を削除しますか? y
[root@localhost tmp]#
```
### ログを一画面づつ確認する
lessコマンド
「less」コマンドが良く使われるため、一番操作に慣れた方が良いコマンドです。
一画面づつ表示されます。編集できないコマンドのため、安全です。

以下のサイトが勉強になりました。
https://atmarkit.itmedia.co.jp/ait/articles/1702/10/news022.html
```
less <ログファイル>
```
例)
```
# less /var/log/messages
```
### 行末から指定した行までログを表示する
tail -n コマンド
※最新のログが行末に出力されるため、業務でログを確認する際にもよく使用されます。

以下のサイトを参考にしました。
https://wa3.i-3-i.info/1minute/word11187.html

```
$ sudo tail -n <行を指定> ログファイル名
```
例)行末から3行までログを表示する
```
[root@localhost log]# tail -n 3 /var/log/messages
Oct 28 23:14:59 localhost systemd: Starting Cleanup of Temporary Directories...
Oct 28 23:14:59 localhost systemd: Started Cleanup of Temporary Directories.
Oct 28 23:15:28 localhost su: (to test) root on pts/0
[root@localhost log]#
```
### 行頭から指定した行までログを表示する
head -n ＜行を指定＞コマンド

以下のサイトを参考にしました。
https://webkaru.net/linux/head-command/

例)行頭から3行のログを表示
```
# head -n 3 <ログファイル名> 

[root@localhost log]# head -n 3 /var/log/messages
Oct 14 07:46:25 localhost journal: Runtime journal is using 6.1M (max allowed 49.5M, trying to leave 74.3M free of 489.3M available → current limit 49.5M).
Oct 14 07:46:25 localhost kernel: Initializing cgroup subsys cpuset
Oct 14 07:46:25 localhost kernel: Initializing cgroup subsys cpu

```
### ログから文字を指定して検索する
-i オプション大文字小文字区別しない
catコマンドはファイルの中身を全行表示されるコマンドです。
以下の場合は、ログファイルの全行をパイプで渡して、grepで文字列を検索しています。
```
# cat <ログファイル名> | grep -i <検索文字列>
```

例)/var/log/messagesからerr文字を検索する
```
cat /var/log/messages | grep -i "err"
```
### 設定ファイルの#と空白行を除いて表示する
```
# cat <設定ファイル名>  | grep -v "#" | grep -v ^$
```

例)httpd.confの#が含まれる行と空白行が含まれる行を除いて表示する
```
[root@localhost conf]# cat httpd.conf | grep -v "#" | grep -v ^$
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
```
### ファイルの権限を変更する
公開鍵の権限をよく変更する場面があります。

ファイルの権限変更
以下のサイトを参考にしました。
https://qiita.com/shisama/items/5f4c4fa768642aad9e06
例)
```
chmod 権限 <ファイル名>

[root@localhost tmp]# ls -ltr test
644の権限
-rw-r--r-- 1 root root 0 10月 28 23:56 test
[root@localhost tmp]#
[root@localhost tmp]#
[root@localhost tmp]# chmod 666 test
[root@localhost tmp]#
[root@localhost tmp]# ls -tlr test
-rw-rw-rw- 1 root root 0 10月 28 23:56 test
[root@localhost tmp]#
```

### ファイルの所有者・グループを変更する

以下のサイトを参考にしました。
https://webkaru.net/linux/chown-command/

```
# chown ユーザー:グループ ファイル
```
例)testファイルをtestユーザーの所有者とtestグループに変更する
```
[root@localhost tmp]# ls -ltr
合計 0
-rw-rw-rw- 1 root root 0 10月 28 23:56 test
[root@localhost tmp]#
[root@localhost tmp]#
[root@localhost tmp]# chown test:test test
[root@localhost tmp]#
[root@localhost tmp]# ls -tlr
合計 0
-rw-rw-rw- 1 test test 0 10月 28 23:56 test
[root@localhost tmp]#
```
### ファイルの差分を比較
以下のサイトを参考にしました。

https://kazmax.zpp.jp/cmd/s/sdiff.1おｌ.html
sdiffコマンドは見やすく差分を取得します。
```
sdiff -s <ファイル1> <ファイル2>
```
```
[root@localhost ~]# cat test1
a
b

[root@localhost ~]# cat test2
b
c

[root@localhost ~]# sdiff -s test1 test2
a                                                             <
                                                              > c
```
### ファイルを検索する
**指定した文字列が含まれるファイルを検索する**
cpuとメモリのスペックが足りない且つ/rootのフォルダから以下のコマンドを実行してファイルを検索すると大量なファイルを検索されてサーバーのCPU使用率が90%を超える事がありました。

```
find ファイルパス -type f | xargs grep -n '検索したい文字列'
```
以下の記事から上記のコマンドは引用しました。
https://qiita.com/tatsuo-iriyama/items/d636892a3f1694e6b16d


**対策としては指定した深さまでサブディレクトリ内を検索するという指定が必要です**
```
find ファイルパス -type f -maxdepth 例2 深さを指定する -print0 | xargs grep -n '検索したい文字列'
```
ファイル名にスペースが含まれている場合は-print0を指定する必要があります。
-print0を指定しないとxargsはデフォルトではスペースと改行文字で区切るため正しくファイル名をxargsに渡すことが出来ません。
## まとめ
本記事に記載したファイルのコマンドは運用保守の業務で頻繁に使用します。
ファイル名変更やファイルのフォルダ移動の際に移動元と移動先を逆にしていして思わぬ事故に
繋がらない様に日頃からこの記事に記載のコマンドは操作に慣れておいた方が良いです。