Linux コマンド 忘備録

* CentOS 6.x , RHEL 6.x と CentOS 7.x が 入り混じってます。
* あの処理がしたいのだけど、なんてコマンド名だったっけ？　ってことありませんか？　私はあります...別の環境から久しぶりに戻った時など特に...。
* コマンド名を思い出せば、使い方は調べられるので、行いたい事 と コマンド名の箇条書きを忘備録としてここに記します。　参考になれば幸いです。



### CPU 情報が見たい
```
cat /proc/cpuinfo
```

### OS のバージョンが知りたい
```
uname -a
```

### OS起動時のログが見たい
```
dmesg
cat /var/log/dmesg
cat /var/log/messages
```

### ストレージデバイスの一覧が見たい
```
fdisk -l
parted -l
```

### マウント状況が見たい
```
mount
cat /proc/mounts
```

### dvd等のメディアをマウントしたい
```
# マウントポイント作成(必要に応じて)
mkdir /media/dvd

# マウント (デバイス名は典型例)
mount /dev/sr0 /media/dvd

# マウント解除
umount /dev/sr0
```



### ストレージデバイスの情報を調べたい
```
smartctl -a /dev/sda
```

### ブロックデバイスの メジャー、マイナー番号が知りたい
```
lsblk
```

### ストレージデバイスの使用量が知りたい
```
df
```

### ストレージデバイス内のディレクトリ単位での使用量が知りたい
```
du
```

### ストレージデバイスのアクセス状況が知りたい
```
vmstat -p /dev/sda1
```

### プロセス一覧を表示したい
```
ps -eLf
```
### ゾンビプロセスが存在するか確認したい
```
ps -ef | grep defunct
```

### CPU使用率が知りたい
```
vmstat
top
```

### メモリの使用状況が知りたい
```
free
cat /proc/meminfo
```

### ソケットの使用状況が知りたい
```
netstat -a
netstat -nlp

# ss で待ち受けポート一覧
sudo ss　-nltup
```

### ネットワークデバイスとIPアドレスの状況が知りたい
```
# CentOS 6
ifconfig

# CentOS 7
nmcli
```

### CentOS7 CUI での network 設定用便利ツール
```
nmtui
```


### ネットワークデバイスにIPアドレスを設定するファイルはどこにあったっけ？
```
/etc/sysconfig/network-scripts/
```

### ネットワークデバイスが複数ある場合 eth番号との対応付けは どのファイルで行ってるんだっけ？
```
/etc/udev/rules.d/70-persistent-net.rules
```



### ネットワークのパケットキャプチャ
```
tcpdump
```

### 各プロセスのメモリ使用状況の一覧表示
```
ps alx
```

### 各プロセスのディスクリプタ使用状況が知りたい
```
ls -l /proc/[pid]/fd

lsof -p [pid] 
```

### セマフォ・共有メモリの一覧表示 
```
ipcs
```

### セマフォ・共有メモリの開放
```
ipcrm
```

### ユーザ毎のプロセス数
```
# 確認 		
ulimit -u

# 一時変更	
ulimit -u unlimited

# 設定値の格納
/etc/security/limits.d/20-nproc.conf
  ↑ ?? 手元の環境だと この値を変更しても 15700 とかな値になる… 
```

### プロセス番号の上限値
```
# 確認
cat /proc/sys/kernel/pid_max 

# 一時変更
sysctl -w kernel.pid_max=1000000

# 設定値の格納先
/etc/sysctl.conf
```


### あのコマンドどこにあるんだっけ？
```
which <コマンド名>
```



### ファイルの種類が知りたい 
```
file <対象ファイル名>  
# 実行ファイルなら 64bit/32bit , 圧縮ファイルなら何形式か　等の情報を出力してくれる。
```


### 実行ファイルが必要とするライブラリの一覧表示 
```
ldd <対象ファイル名>
```

### ライブラリへのパスを恒久的に全ユーザに反映したい 
```
# /etc/ld.so.conf.d/ のディレクトリ内に 拡張子「.conf」のファイルを作成し、通したいパス名を記述する 
echo "/opt/hoge/lib" > /etc/ld.so.conf.d/hoge.conf

# 反映
ldconfig
```

### どのライブラリに目的の関数の実体があるか知りたい
```
nm -o (ディレクトリ)/*.a | grep (関数名) | grep 'U' 
```

### 時刻を変更したい 
```
#        月/日  時:分     年
date -s "12/14 23:50 JST 2017"
```


### キーワードを含んでいるファイルの一覧を得たい
```
find -name "*" -print | xargs grep "hoge" 
```

### カレントディレクトリ以下のディレクトリ・ファイルの一覧が得たい
```
# tree コマンドで
tree

# ls コマンドで
ls -lRa　
```

### ファイルへの追記を表示させたい
```
tail -f (ファイル名)
```

### ファイルの変化を表示させたい
```
watch -n 1 -d cat (ファイル名)
```

### テキストファイルの文字コードを変換したい
```
# UTF-8 への変換
nkf -w -overwrite (対象ファイル名)
```

### 標準出力 と 標準エラー出力 を まとめてファイル出力したい　
```
(コマンド名) > (出力ファイル名) 2>&1
```

### 標準エラー出力 を 表示させたくない
```
# コマンド名 2>/dev/null
# 例↓
find -name "*" -print | xargs grep "hogehoge" 2>/dev/null 
```
### 標準出力 と 標準エラー出力 を 表示させたくない
```
(コマンド名)> /dev/null 2>&1
```
### ファイル内の文字列を置換したい
```
sed -i -e "s/(置換前 文字列)/(置換後 文字列)/g" ファイル名
```


### リンク切れを一覧表示したい 
```
find -xtype l
```



### yum の 履歴
```
# インストール履歴一覧 (ID番号取得)
yum history

# ID 番号別の詳細
yum history info (ID番号)
```

### rpm の 履歴
```
# 新しい順に表示 (画面に収まる範囲で表示)
rpm -qa --last | head
```

### rpm コマンドで相互に依存するパッケージを一括で入れるのってどうやるんだっけ？
```
# 一括でインストールしたい パッケージ名を羅列するだけ……。
rpm -ivh sample01.rpm sample02.rpm sample03.rpm ･･･
```


### グラフィカルログイン と テキストログイン を切り替えたい
```
# /etc/inittab 内の 「id:」が示す値を変える
# 3: テキストログイン
# 5: グラフィカルログイン
```


### デバイスの 圧縮イメージを作成したい
```
# 例 /dev/sdc の内容を /media/sdcard/hoge.zip に書き出す 
dd if=/dev/sdc bs=65536 | gzip -c > /media/sdcard/hoge.zip
```

### 圧縮イメージを デバイスに書き戻したい
```
# 例 /media/sdcard/hoge.zip を /dev/sdc に書き戻す
gzip -dc < /media/sdcard/hoge.zip | dd of=/dev/sdc bs=65536
```

### dd の進捗状況が知りたい
```
pkill -USR1 dd
```


### 分や時や日や週や月の単位で、決めた時間に処理を行わせるのはなんだったけ？ 
```
#cron
/etc/crontab
```

### タイムゾーンのファイル類ってどこにあったっけ？
```
/usr/share/zoneinfo/
```

### ローカルタイムのタイムゾーンを変更したい
```
# UTC に変更したい
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/UTC /etc/localtime

# やっぱ JSTに戻したい
rm -f /etc/localtime
ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

### プロセスの優先度を変えてみたい
```
# 現在の優先度の確認
chrt -p [pid] 

# 最優先にしてみる 
chrt -r 99 [pid]
```


### 指定のディレクトリ以下を 圧縮したい
```
gtar -cvzf backup.tgz /hogehoge
```

### 圧縮ファイルを展開したい 
```
gtar -xvzf backup.tgz
```

### ネットワーク経由で ファイルをコピーしたい
```
# scp (コピー元) (コピー先)
#  -p はタイムスタンプを保持する
# 例)ローカルの backup.tgz を 192.168.1.10 の backupDir に ユーザ名 hoge でコピー       
scp -p backup.tgz hoge@192.168.1.10:/BackupDir/

```

### ネットワーク経由で 他のPCにディレクトリ下位のファイル群を コピー したい
```
# rsync     (コピー元) (コピー先)
#  ↓の例では タイムスタンプが新しいものへの上書きは行わない　
rsync -auvz ./works hoge@192.168.1.10:/works
```


### ファイル一覧をタイムスタンプでソートして表示したい
```
# 新しい順
ls -lt

# 古い順
ls -ltr
```


### 指定の時刻より新しいファイルの一覧を取得したい
```
# 下記２手順で実現する。

## 1.検索したい日付をダミーファイルにセット
touch -t 201701220900.00 /dev/shm/_file

## 2.上記のファイルより新しいものを表示させる
find ./ -type f -newer /dev/shm/_file -print
```


### ログファイルを一定期間毎やサイズで世代交代させたいときはどうやるんだっけ？
```
# logrotate

# 記述例↓
# /etc/logrotate.conf
# /etc/logrotate.d/

# 動作確認 (自前の hoge のみ動かす 例)
logrotate /etc/logrotate.d/hoge

# 動作確認 強制的にログローテートを実施させる (自前の hoge のみ動かす 例)
logrotate -f /etc/logrotate.d/hoge
```

### snmpwalk ：機器の状態情報取得
```
# snmpwalk -v 2c -c (コミュニティ名) (アドレス) (ベースOID)
# 例) 自機の OID 全て 
snmpwalk -v 2c -c public localhost .

# 例) 特定装置(192.168.0.10) の 指定(.1.3.6.1.4.1)以下取得
snmpwalk -v 2c -c public 192.168.0.10 .1.3.6.1.4.0
```

### ファイルのダンプ表示
```
# アドレス16進数 1バイト単位    
od -tx1z -Ax hoge.txt

# アドレスなし 1バイト単位 省略なし
od -tx1z -An -v hogehoge.o 
```

### ファイルの差分表示
```
diff file1.txt file2.txt
```

### nc コマンド 
tcp udp unixドメインソケット の万能コマンド
参考: [ncコマンドの使い方](https://qiita.com/hana_shin/items/97e6c03ac5e5ed67ce38)

```
# TCP ファイル転送 受信側
nc -kl (待ち受けポート番号) > (保存ファイル名)

# TCP 送信側
nc (相手側IPアドレス) (相手側ポート番号) < (送信ファイル名)

# unix ドメインソケットへのファイル流し込み
nc -U (ドメインソケットファイル名) < (流し込みファイル名) 
```

### コンソール画面のサイズ(文字数)を取得
```
# 横幅
tput cols

# 縦幅
tput lines

```

### 環境変数
```
# 設定
export AUDIODEVISE=alsa

# 削除
unset AUDIODEVICE
```

### JSON のパーサ表示
* /dev/shm/hoge.json をパーサする例。↓ 第一引数に "." を忘れないこと。
* 
```
jq . /dev/shm/hoge.json
```

### 簡易HTTPサーバ : nc コマンド
```
# １回受けると終了　
( echo "HTTP/1.0 200 Ok"; echo; echo "Hello World" ) | nc -l 4000

# CTRL-C 受けるまでループ
while true; do ( echo "HTTP/1.0 200 Ok"; echo; echo "Hello World" ) | nc -l 4000; [ $? != 0 ] && break; done

```

### シェルスクリプト内で 秒未満のwait を入れたい
```
# マイクロ秒の待ち 例)↓ 1ms の待ち 
usleep 1000
```


### vim で tab を置換
```
:%s/(Ctrl + v, tab)と押す/（置換するもの）/g
```
### カレントディレクトリから下位の wav ファイルの総バイト数 と ファイル数を出力
```
find -name "*.wav" -type f -printf '%s\n' | awk 'BEGIN{sum=0;cnt=0}{sum+=$1;cnt++;}END{print sum,cnt}'
```

### 下位ディレクトリ内の .txt の文字コードを UTF-8 , 改行コード LF に変換
```
find -name "*.txt" | xargs -n 10 nkf -w -Lu --overwrite
```

### 文字コード確認
```
nkf --guess *
```

### カレントディレクトリ下位のtxt ファイルで 全角空白と全角括弧を検索
```
find -name "*.txt" -print | xargs grep --color=auto -n [　（）]
```

### 漢字範囲を対象とした grep
```
find -name *.txt -print | xargs grep --color "[亜-熙]さん"
```

### 複数ファイルの拡張子をまとめて変更したい
```
rename .text .txt  *.text
```


### 随時追加予定