よく使うコマンド（自分用メモ）

業務でサーバに入ったりMacのローカル上でコマンド使ったりするのですが、時々忘れたりするのでメモになります。

「業務で使った。」など出てきたら随時更新していきたいと思います。

# Mac編

ローカルで作業する際に使うコマンドになります。

## 文字コードを変換する

昔のCGIとかはUTF-8じゃなくShift-JISだったりすることがあります。
※たとえば、昔データだけを新環境にてアーカイブとして残しておきたい時など。
個人的にはデータベースも使っていないものは破棄していいのでは？と思うのですがそういうことにならないのが現実・・・・
以下のようなコマンドで文字コードを判別して置換をかけます。

### nkfコマンド オプション

こちらのサイトから引用[【linux】ファイルの文字コードを変換する。vi、iconv、nkf (nkfの文字コード判定とか一括変換は便利)](http://tweeeety.hateblo.jp/entry/2014/12/17/230611)

* -g : 自動判別
* -w : UTF-8コードで出力
* -e : EUC-JPコードで出力
* -s : Shift-JISコードで出力
* --overwrite : 直接上書き

### その他 使用コマンド説明

* xargs : 標準入力からコマンドラインを作成し、それを実行する
* -type f : 指定したファイルタイプを検索する。fが通常ファイルを，cまたはdとするとディレクトリを，lとするとシンボリック・リンクを検索します。
* -print : 検索結果を標準出力する。このとき結果をフルパスで表示する
* grep : ファイルから文字列を検索する。grep の後に検索したい文字列を指定する。

### 現在の文字コードを判別

以下のコマンドで現在の文字コードを出力することができます。

```
$ nkf -g ./*.cgi
```

### 文字コードを一括変換する

以下のコマンドで文字コードを一括変換することができます。

```
// ※ CGIがついた拡張子をすべてのファイルをutf-8に一括変換する
$ cd ◯◯/◯◯/ //変換したいディレクトリに移動する
$ find -name '*.cgi' | xargs nkf --overwrite -w

// ファイルタイプが`ファイル`のものをutf-8に一括変換する
$ cd ◯◯/◯◯/ //変換したいディレクトリに移動する
$ find . -type f -print0 | xargs -0 nkf --overwrite -w -Lu
```

### 複数あるファイルの中から特定の文字列を検索置換する

複数あるファイルの特定の文字列を検索する ※文字列はShift-JIS
cgiという拡張子すべてを検索しgrepコマンド文字列を出力する

```
$ cd ◯◯/◯◯/ //変換したいディレクトリに移動する
$ find ./*.cgi -type f -print | xargs grep 'Shift-JIS'
```

複数あるファイルの中から特定の文字列を一括置換 ※以下のコマンドはShift-JISからUTF-8に置換
cgiという拡張子すべてを検索しsedコマンドでShift-JISという文字列をUTF-8に変換かける

テキストエディタでもいいんじゃない？と思いますがエディタ開くよりターミナル開いている時間のほうが長いので私はこちらで対応

```
$ cd ◯◯/◯◯/ //変換したいディレクトリに移動する
$ find ./*.cgi -type f | xargs sed -i "s/Shift-JIS/UTF-8/g"
```

上記のコマンドをMacで行なう（BSDのため）と動作しません。上記コマンドはLinuxの記事の参照だったため私はHomebrewでgnu-sedをインストールしました。
BSD系でも書き方をきちんとやればいけるかもしれませんが、調べきれていないため一旦上記のコマンドで行いました。

```
$ brew install gnu-sed --default-names
```

### 参考サイト

* [Mac のターミナルで複数ファイルの文字列を一括置換する]
(http://blog.akagi.jp/archives/2661.html)
* [【Linux】複数あるファイルの中から特定の文字列を検索するコマンド](http://kawatama.net/web/1141)
* [【Linux】複数あるファイルの中から特定の文字列を一括置換するコマンド](http://kawatama.net/web/1149)
* [Linux上で複数ファイルから文字列を一括検索/置換するコマンド](http://tokyo.supersoftware.co.jp/superlabs/2012/07/261755.html)
* [Linuxコマンドで複数ファイルの文字コードを一括変換](http://www.yukun.info/blog/2008/01/euc-to-utf8.html)
* [Macの（BSD版）sed での上書き保存](http://qiita.com/catfist/items/1156ae0c7875f61417ee)

## 外付けHDDにできた[.AppleDouble]を削除するコマンド

隠しファイルを表示していると、
NASのHDDフォーマットがNTFSなので、Macでアクセスするたびに[.AppleDouble]が生成されてしまいます。[.AppleDouble]があるとデータ移行の妨げになります。移行した時にアラートが出た時は使用します。

* 対象ファイルが多いと時間がかかる

```
$ cd ◯◯ディレクトリ   // cdで該当ディレクトリに移動
$ find . -name .AppleDouble -exec rm -rf {} \;  // 
```

## ロックされたファイルの一括解除コマンド

こちらもHDDで移動した際にファイルがロックされていました。
詳しく調べていませんが、原因としてはWindowsのHDDからファイルをコピーした時に勝手にロックされていました。

```
$ cd ◯◯ディレクトリ   // cdで該当ディレクトリに移動
$ chflags -R nouchg *
```

## .DS_Storeファイルを作らない方法&削除

Macを使っているかならず出現するのが、.DS_Storeです。
削除するアプリケーションなどありますが、出てこないことが一番ですね。
OSのアップデートとか新しくMacをセットアップしたときは、かならず最初にやります。

### .DS_Storeファイルを作成しないようにする

```
$ defaults write com.apple.desktopservices DSDontWriteNetworkStores true
$ killall Finder  // Finderの再起動コマンド
```

### 生成された.DS_Storeファイルを一括削除する

すでに生成された.DS_Storeを削除する方法になります。
[Ds Store Remover](https://itunes.apple.com/jp/app/ds-store-remover/id476237254?mt=12&ign-mpt=uo%3D4)というアプリケーションがありますが、コマンドでも可能です。

```
$ find Desktop/対象となるディレクトリ名 -name ".DS_Store" -print -exec rm {} ";"
```

## ファイルやディレクトリを移動

大量のファイルやディレクトリを移動するときに使うコマンド
ドラック&ドロップでいいんですが、大量のデータなどを移動する際は、コマンドのほうが早かったりします。（体感的問題）
よく使うのは、ローカルデータから外付けHDDへ移動する時など

* mv -オプション /移動元/ /移動先/

```
$ mv -v ~/◯◯/ /Volumes/外付けHDD名/◯◯/
```

## シンボリック系コマンド

Sublime Textやzshのファイルなど設定ファイルすべてDropboxに格納して、違うPCでも同じ設定内容で使えるようにしています。
これをやっておくとPC初期化や新しいPCを買ったときに設定をしなくてよくなります。

私はDropbox上にAppsディレクトリを作成して格納しています。

```
$ ln -s ファイルのパス リンクのパス
```

### Sublime Text

```
$ ln -s ~/Dropbox/Apps/sublime-text/Installed\ Packages ~/Library/Application\ Support/Sublime\ Text\ 3/Installed\ Packages
```

```
$ ln -s ~/Dropbox/Apps/sublime-text/Packages ~/Library/Application\ Support/Sublime\ Text\ 3/Packages
```

### Zsh

```
$ ln -s ~/Dropbox/Apps/.dotfiles/.zshrc ~/.zshrc
```

## rsyncでサーバからデータをダウンロードとアップロード

### ダウンロード

本番サーバからWebデータをrsyncを使ってダウンロードする方法になります。
SSHが使える場合は、以下の方法でダウンロードしています。

```
rsync -avz -e ssh SSHユーザ名@サーバホスト名:/home/ユーザディレクトリ/public_html/ ~/◯◯/
```

rsyncは転送元の最後にスラッシュ（/）を入れると中身のデータだけが転送される
逆に/を入れなければ、ディレクトリの中身だけが転送される

### アップロード

ローカルからサーバへアップロードする方法になります。

```
rsync -avz --delete -e ssh ~/◯◯/ SSHユーザ名@サーバホスト名:/home/ユーザディレクトリ/public_html
```

* [rsync でディレクトリの同期（バックアップ）](http://www.maruko2.com/mw/rsync_%E3%81%A7%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%AE%E5%90%8C%E6%9C%9F%EF%BC%88%E3%83%90%E3%83%83%E3%82%AF%E3%82%A2%E3%83%83%E3%83%97%EF%BC%89)

## ローカルサーバを立てる

BrowserSyncを使うまでもない時に、さくっとローカルサーバを立てたい時にPythonコマンドを使えばカレントディレクトリから表示することが可能になります。

* ブラウザのアドレスバーに「localhost:8888」でアクセス可能になります。
* ポートは変更可能

```
$ python -m SimpleHTTPServer 8888
```

# サーバ編（Centos）

## ファイルのオーナーとグループ

Linuxで扱われるファイルは、自分で作成したファイルからシステムが提供するライブラリや実行コマンドまで、すべてに所有者が設定されている。

```
$ ls -l ディレクトリパス
```

## viの使い方

h・・・1文字左へ移動
l・・・1文字右へ移動
k・・・1文字上へ移動
j・・・1文字下へ移動
O・・・行の先頭へ移動
$・・・行の末尾へ移動
H・・・画面の一番上の行頭へ移動
L・・・画面の一番下の行頭へ移動
G・・・ファイルの最終行へ移動

### グループ

* グループとは、ユーザをまとめた集まりのこと

システム管理を行なうwheelというグループに複数の管理者ユーザを所属させ、wheelグループに対して許可を与えることで、同じ役割を持つ複数のユーザに同一の権限を与えることができる

* ユーザは同時にいくつものグループに所属することができる
* どのユーザも最低1つのグループに所属していなければならない
* ユーザを新規作成する際に特に指定しないとユーザ名と同一グループに所属する

自分がどのグループに属しているか確認するためのコマンド

```
$ groups
```