Ubuntu 14.04 LTSのインストールから設定

初心者の書く自分用のメモです。

#インストール後のssh設定
ssh-keygen -R "サーバーIP"
ssh ユーザー名@サーバーIP

# インストール後すぐにアップデートする

最新のアップデートを確認します。[参考](http://do-you-linux.com/blog/2013/11/19/ubuntu%E3%82%92%E3%82%A2%E3%83%83%E3%83%97%E3%83%87%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E3%82%B3%E3%83%9E%E3%83%B3%E3%83%89%E7%B7%A8/)（アップデートしないとすぐにフリーズする。）

```
sudo apt-get update
```


確認した最新のアップデートを適用します。

```
sudo apt-get -y upgrade
```

依存関係解決後に使わなくなったパッケージを削除

```
sudo apt-get -y dist-upgrade
```

他のパッケージの依存関係を満たすため自動的にインストールされ、不要になったパッケージを削除

```
sudo apt-get -y autoremove
```

aptキャッシュを削除

```
sudo apt-get -y autoclean
```


apt-get updateが出来ない場合の解決方法

```
apt-get err [省略] trusty inrelease
```

自分の場合はただインターネットがつながってなかっただけでした。
[参考](http://forums.linuxmint-jp.net/viewtopic.php?f=2&t=1375)

# 初期設定

rootパスワードを設定してrootユーザーに遷移できるようにする

```
sudo passwd root 
```

#プロキシを介してネットワークに接続

##exportしたプロキシの設定をsudoでも引き継ぎたい場合

```sudo -E ```

自分好みの環境をsudo時にも使えるようにする
http://yudoufu.hatenablog.jp/entry/20110326/1301129885

###ファイアーウォールの設定

ubuntuの場合はufwじゃなくてiptablesでもオッケー。
後述のnmapをインストールするも使用する。ファイアーウォールはパケットフィルタリング型とプロキシ型が存在する。ufw、Iptablesはパケットフィルタリング型。

ufwの状態を確認
```sudo ufw status```

sshでサーバーをいじりたい場合はsshを許可する（ufw）

```
ufw allow ssh
```

ファイアーウォールを有効化（※エラーがでるがyesを選択）

```
sudo ufw enable
```

[参考](https://wiki.ubuntulinux.jp/UbuntuTips/DedicatedServer/Ufw)

####IPTablesの３つのポリシー
INPUT、OUTPUT、FORWORDをDROP(拒否)かACCEPT(許可)に設定をする。
INPUT:サーバーに入ってくる通信のポリシー
OUTPUT:サーバーから出て行く通信のポリシー
FORWARD:受信したデータを他のサーバーへ転送する際に適用される設定

IPTablesの一覧を確認
```sudo iptables -L```


sshでサーバーをいじりたい場合はsshを許可する（Iptables）ip1.1.1.1で8080portを許可する場合

```
iptables -A INPUT -p tcp -m tcp -s 1.1.1.1 --dport 22 -j ACCEPT
```

portで走ってるプロセスを調べる

```
sudo lsof -i:80
```

portで走ってるプロセスを切る

```
sudo kill `sudo lsof -t -i:9001`
sudo kill $(sudo lsof -t -i:9001)
```

強制的にプロセスを切る

```
kill -9 "PID"
```

# ソフトをインストール

gitのインストール

```
sudo apt-get install git
```

emacsエディタのインストール

```
sudo apt-get install emacs
```

Atom editor のインストール

```
sudo apt-get install libgnome-keyring-dev
git clone https://github.com/atom/atom
cd atom
script/build
sudo script/grunt install
```


apacheのインストール

```
sudo apt-get install apache2
```

デフォルト設定の確認

```
cat /etc/hosts
```

起動する

```
sudo service apache2 start
```

停止する

```
sudo service apache2 stop
```

Apacheの起動の確認

```
netstat -na | grep -e "^tcp.*:80.*LISTEN"
```

nmapをインストールする

```
sudo apt-get install nmap
```

nmapでポートの空き/閉じ等を確認できる。

```
nmap localhost
```

Nginxをインストールする

```
sudo apt-get install nginx-extras
sudo apt-get install nginx-doc
```

nginxの設定ファイル

```
/etc/nginx/sites-available/default
/etc/nginx/nginx.conf
```

起動、停止、再起動
sudo service nginx start
sudo service nginx stop
sudo service nginx restart

リースプロキシ
...webブラウザに送る元をリバースプロキシ１個にまとめたりする。
https://tech-sketch.jp/2013/02/nginx-proxy.html

#mysql

DB一覧表示

```
show databases;
```

使用するDBを選択

```
use [DB名];
```

テーブル一覧を表示

```
show tables;
```

テーブル要素を表示

```
show table status\G
```

select文を見やすくする（qで終了）

```
pager less -n -i -S
```

プロセスが動いてるか確認
ps ax | grep mysqld
mysql.server start
mysql -u root



# wordpress

```
sudo chown -R www-data hogehoge
```

www-dataはユーザー名。nginxのconfに書かれているユーザー名を指定する



rubyのインストール（2014/12/28：ruby1.9.1になってしまう。最新は2.1）

```
sudo apt-get install ruby
```

ruby2.0のインストール

```
sudo apt-get install ruby2.0
```


# さくらVPS関連
windowsからさくらvpsにssh接続（※はじめの接続はメッセージがでるがyesでOk）
　1.puttyをインストール

```
"[ファイルパス省略]putty.exe" [サーバーのIPアドレス] -l [ユーザー名] -pw [パスワード]
```

ubuntuからさくらvpsにssh接続（※はじめの接続はメッセージがでるがyesでOk）

```
ssh [ユーザー名]@[サーバーのIPアドレス]
```

鍵認証の設定

ローカルで秘密鍵、公開鍵のセットを作る

```
ssh-keygen -t rsa
```

出来たもののパーミッションを変更する

```
chmod 600 ~/.ssh/id_rsa.pub
```

vps側のユーザーのホームディレクトリに.sshのフォルダーを用意する

```
mkdir ~/.ssh
```

ローカルで作った公開鍵をvpsにコピーする

```
scp .ssh/id_rsa.pub [ユーザー名]@[IPアドレス]:~/.ssh/authorized_keys
```

出来たもののパーミッションを変更する（※このパーミッションより緩くてもキツくても弾かれるので注意とのこと）

```
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
```

ローカルの端末からログインする

```
ssh -i ~/.ssh/id_rsa [ユーザー名]@[IPアドレス]
```






# 基本コマンド

Ubuntuのバージョンを確認するコマンド

```
cat /etc/lsb-release
```

アーキテクチャ（OSが32bit, 64bitどちらなのか）を調べるコマンド

```
arch
```

ディレクトリを内部のファイルごと削除する（※かなり気をつけて消すこと）

```
rm -rf [ディレクトリ名]
```

ワールドカード指定して削除

```
rm -rf *.txt
```

隠しファイル (ディレクトリ)も含めた一覧を表示

```
ls -a
```
隠しファイル (ディレクトリ)も含めた一覧(詳細情報)を表示

```
ls -la
```


scp -rオプション：ディレクトリごとコピー

```
scp ~/hogehoge [ユーザー名]@[IPアドレス]:hogehoge
```

ファイルを探す
３０分以内に更新されたファイル

```
find . -type f -mmin -30
```

３日以内に更新されたファイル

```
find . -type f -mtime -3
```

ログファイルをリアルタイムで見る

```
tail -f -n 20 /var/log/messages
```

フォントを入れる
/usr/share/fontsに直接コピー
反映

```
fc-cache -f -v
```

ファイル数をカウント

```
ls -1 | wc -l
```

ファイルを一気に一回層下に移動

```
mv * ../
```

ファイルを一気に一回層下に移動（ファイル数が多い場合）

```
find 検索フォルダ -name "*.png" -exec mv {} 移動先フォルダ \;
```

ファイルを一気に削除（ファイル数が多い場合）

```
find . -name "*.png" -print | xargs rm
```

ファイルの圧縮(zip)

```
zip -r hoge.zip hoge
```

ファイルの解凍(zip)

```
unzip hoge.zip
```

ファイルの圧縮(bz2)

```
bzip2 -d hoge.bz2
```

ファイルの展開(bz2)

```
tar jxf hoge.tar.bz2
```

ファイルの解凍(bz2)

```
bzip2 hoge.txt
```

ファイルの中身を見る

```
less ファイル名
G　最終行へ移動
```

ubuntuバージョン確認

```
cat /etc/lsb-release
```

アーキテクチャを確認

```
arch
```

sshが自動切断される場合
理由：ルーターを介してアクセスしてる場合はアクセスがないと切断される。
・・解決方法１
・topコマンドなどで接続し続ける
・・解決方法２
・sshの設定をいじる。（設定だけしてまだ試してない）
・サーバー側を設定
/etc/ssh/sshd_config
ファイルに下記設定を追加
ClientAliveInterval 60
ClientAliveCountMax 3
再起動
sudo /etc/init.d/ssh restart
・クライアント側を設定
/etc/ssh/ssh_config
ファイルに下記設定を追加
ClientAliveInterval 60
ClientAliveCountMax 3
切断エラーの例
Connection to 100.100.100.100: Broken pipe


容量の多いものを検索

```
du -h --max-depth=1 /
```

ramdiskを構築
メモリをHDとして使用。処理を高速化させる場合の方法。
RAMディスクとは
メインメモリの一部をディスク領域にする。
（1）initrd，（2）容量が可変の/dev/shm，（3）固定容量の/dev/ramdisk


```
df -h
sudo emacs /etc/fstab
hogehogeフォルダにmountする
/dev/shm /home/ubuntu/hogehoge tmpfs size=60G 0 0

sudo mount -a
あとでumount

device is busyになった場合は-lをつかう。
sudo umount -l /home/ubuntu/hogehoge
```

メモリを解放(ubuntu)

```
sudo su
free -h
echo 3 > /proc/sys/vm/drop_caches
```

メモリ解放（mac）

```
sudo purge
```

スワップ解放（mac）
http://d.hatena.ne.jp/kazuhooku/20130207/1360226719

メモリ使用状況詳細

```
cat /proc/meminfo
```

フォルダの状況確認

```
watch -n 1 ls -al
```

メモリ使用状況のリアルタイム確認

```
top
dstat
```

ログインしてるユーザ

```
who
```

#自然言語関係

##mecabを入れる
http://domnikki.hateblo.jp/entry/2016/03/16/012442

```
sudo apt-get install mecab libmecab-dev mecab-ipadic
sudo aptitude install mecab-ipadic-utf8
sudo apt-get install python-mecab
```


大規模コピー
http://qiita.com/iron-breaker/items/74a2ed1753587476157f

```
find ~/image -name '*.jpeg' -exec cp {} ~/image2  \;
```

大規模削除

```
find ./*.txt -type f | xargs rm -rf
```



#gpu関連
cudaバージョンの確認

```
nvcc -V
```

gpuの使用状況

```
nvidia-smi -l 10 -i 1
```

```
nvidia-smi
```

#usbをmount
こちらを参照
http://qiita.com/miyamotok0105/private/2baf80cf1c300503bf5d


# デーモンとしてプログラムを実行する

実行するスクリプを準備
/usr/test.sh

chmod 755 test.sh

デーモンとしてシステムに登録
/etc/init.d/ ディレクトリを開き、その中に実行ファイルを実行するシェルスクリプトを作成します

エディタでテキストファイル test を作成します
その中に
./usr/test.sh &

と一行書き込み保存します
このとき最後に & を付け忘れると、プログラムが終了するまでシステムの起動が停止します。

chmod 755 test

▼システムから呼ばれるシンボリックリンクの作成

/etc/rc3.d/　のランレベル3のディレクトリに移動します(1～5まで必要な所に移動してください)

▽その中に上で作成したシェルスクリプトのシンボリックリンクを作成します

▽シンボリックリンクの命名規則
S + 二桁の数字 + シェルスクリプトの名前
(二桁の数字により他のデーモンとの実行順序が制御できます)

▽シンボリックリンクの作成
ln ../init.d/test S10test


■デーモンの手動での起動と終了
▼起動
/etc/rc3.d/ に移動してシンボリックリンクを直接実行
logoutしても生き続ける

./S10test &

スクリプトの場合
perl /usr/script.pl &

▼終了
psコマンドでPIDを調べてkill


#エラー

HDのデータが満タン
No space left on device
対応策：何かのデータを消す


#注意
1つのフォルダ内の上限サイズが決まっている。越えるとアクセスできない。
http://ja.stackoverflow.com/questions/11794/ubuntu%E3%81%A7%E3%81%AE1%E3%83%87%E3%82%A3%E3%83%AC%E3%82%AF%E3%83%88%E3%83%AA%E3%81%82%E3%81%9F%E3%82%8A%E3%81%AE%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E6%95%B0%E4%B8%8A%E9%99%90-%E5%AE%B9%E9%87%8F%E4%B8%8A%E9%99%90%E3%81%AF%E3%81%82%E3%82%8B%E3%81%AE%E3%81%A7%E3%81%97%E3%82%87%E3%81%86%E3%81%8B



# GUI上で使えるショートカット

全てのウィンドウを最小化する／元に戻す

```
Ctrl + Super(windowsマーク) + D
```

ウィンドウを画面左半分に表示する

```
Ctrl + Super(windowsマーク) + ←
```

ウィンドウを画面右半分に表示する

```
Ctrl + Super + →
```

全てのワークスペースのウィンドウ一覧を表示する（なんかかっこいい）

```
Super + W
```


##環境変数

特定のpath削除のメソッド追加
http://qiita.com/ironsand/items/10e28d7589298090ec23

```
path_remove ~/sh
```


###参考URL
http://oxynotes.com/?p=6361
http://7ujm.net/linux/daemon.html