digコマンド

-「dig」コマンドはDNSサーバに問い合わせることで、ドメイン名からIPアドレスを調べるコマンド
– nslookupコマンドやhostsコマンドとよく似た機能

[vagrant@localhost app]$ dig www.google.co.jp
-bash: dig: コマンドが見つかりません

あれ? もう死にそうだー

centosの時刻を合わせる

[vagrant@localhost python]$ date
2018年 7月 28日 土曜日 22:37:15 JST

そんなあほな。
[vagrant@localhost python]$ sudo yum -y install ntp
[vagrant@localhost python]$ sudo ntpdate ntp.nict.jp
29 Jul 07:45:47 ntpdate[4594]: step time server 133.243.238.244 offset 32583.641597 sec
[vagrant@localhost python]$ date
2018年 7月 29日 日曜日 07:46:03 JST

.bashrc

bashrcとは

bashは「シェルの種類のひとつで、shをパワーアップしたシェル」。
(ログインした後に画面上から)bashを起動したときに読み込まれる設定ファイル
シェルはsh、bash、csh、ksh、tcsh、zshなど

vi ~/.bashrc

# .bashrc

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi

# User specific aliases and functions

ログイン時に「.bashrc」は読み込まれません。
ログイン時には「.bash_profile」というファイルが読み込まれます。

 .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
        . ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
source ~/.bashrc

source ~/.bashrcとすると、.bashrcを読み込む。もちろん、source ~/.bash_profileで、bash_profileを読み込む

centosでgrepする

まず、vagrantにログインして、適当にディレクトリを作ります。

[vagrant@localhost ~]$ mkdir grep
[vagrant@localhost ~]$ cd grep
[vagrant@localhost grep]$ git version
git version 2.2.1

git hubから適当に機械学習のコードをgit cloneしてきます。

[vagrant@localhost grep]$ git clone https://github.com/nyk510/machine-learning.git
Cloning into 'machine-learning'...
remote: Counting objects: 112, done.
Receiving objects: 100% (112/112), 2.49 MiB | 673.00 KiB/s, done.
remote: Total 112 (delta 0), reused 0 (delta 0), pack-reused 112
Resolving deltas: 100% (55/55), done.
[vagrant@localhost grep]$ ls
machine-learning
[vagrant@localhost machine-learning]$ ls
black_scholes.py  figures  gibbs_sampling.py  prml  readme.md  requirements.txt

では、適当にblack_scholes.pyでSIGMAが使われている箇所を抜き出しています。

[vagrant@localhost machine-learning]$ grep SIGMA black_scholes.py
SIGMA = 0.30
d = -(np.math.log(S_0 / K) + ((r - SIGMA * SIGMA / 2.) * T)) / (SIGMA * np.power(T, 0.5))
V_c = S_0 * stats.norm.cdf(-d + SIGMA * np.power(T, .5)) - K * np.exp(-r * T) * stats.norm.cdf(-d)
V_p = K * np.exp(-r * (T - t)) * stats.norm.cdf(d) - S_0 * stats.norm.cdf(d - SIGMA * np.power(T - t, 0.5))
    s_j_t = S_0 * np.exp((r - SIGMA * SIGMA / 2.) * T + SIGMA * rand_n * np.power(T, 0.5))
    s_j_t = S_0 * np.exp((r - SIGMA * SIGMA / 2.) * T + SIGMA * rand_n * np.power(T, 0.5))

行番号をつけたい時は grepに -nをつける

[vagrant@localhost machine-learning]$ grep -n SIGMA black_scholes.py
18:SIGMA = 0.30
22:d = -(np.math.log(S_0 / K) + ((r - SIGMA * SIGMA / 2.) * T)) / (SIGMA * np.po      wer(T, 0.5))
23:V_c = S_0 * stats.norm.cdf(-d + SIGMA * np.power(T, .5)) - K * np.exp(-r * T)       * stats.norm.cdf(-d)
24:V_p = K * np.exp(-r * (T - t)) * stats.norm.cdf(d) - S_0 * stats.norm.cdf(d -       SIGMA * np.power(T - t, 0.5))
29:    s_j_t = S_0 * np.exp((r - SIGMA * SIGMA / 2.) * T + SIGMA * rand_n * np.p      ower(T, 0.5))
35:    s_j_t = S_0 * np.exp((r - SIGMA * SIGMA / 2.) * T + SIGMA * rand_n * np.p      ower(T, 0.5))

ファイル名のみ

[vagrant@localhost machine-learning]$ grep -l SIGMA *
black_scholes.py
grep: figures: ディレクトリです
grep: prml: ディレクトリです

ファイル名と行番号は”-rn”

[vagrant@localhost machine-learning]$ grep -rn import *.py
black_scholes.py:9:import numpy as np
black_scholes.py:10:import matplotlib.pyplot as plt
black_scholes.py:11:import scipy.stats as stats
gibbs_sampling.py:7:import numpy as np
gibbs_sampling.py:8:import matplotlib.pyplot as plt
gibbs_sampling.py:9:import scipy.stats as stats

あーこれこれ、やりたかったの。

vagrantにxpdfを入れる

yumコマンドで入れます。
[pre]
yum install xpdf
[/pre]

依存性関連をインストールしました:
desktop-file-utils.x86_64 0:0.15-9.el6
lcms-libs.x86_64 0:1.19-1.el6
libXmu.x86_64 0:1.1.1-2.el6
libXp.x86_64 0:1.0.2-2.1.el6
libpaper.x86_64 0:1.1.23-6.1.el6
openjpeg-libs.x86_64 0:1.3-16.el6_8
openmotif.x86_64 0:2.3.3-9.el6
poppler.x86_64 0:0.12.4-12.el6_9
poppler-data.noarch 0:0.4.0-1.el6
poppler-utils.x86_64 0:0.12.4-12.el6_9
urw-fonts.noarch 0:2.4-11.el6
xdg-utils.noarch 0:1.0.2-17.20091016cvs.el6
xorg-x11-fonts-ISO8859-1-100dpi.noarch 0:7.2-11.el6
xorg-x11-fonts-ISO8859-1-75dpi.noarch 0:7.2-11.el6

完了しました!

etcのディレクトリの xpdfrcを編集します。

# Choose a text encoding for copy-and-paste and for pdftotext output.
# The Latin1, ASCII7, and UTF-8 encodings are built into Xpdf. Other
# encodings are available in the language support packages.

textEncoding UTF-8

コマンドラインから、pdftotext origin.pdf create.txt でtxtファイルを作成する。

[vagrant@localhost translator]$ pdftotext boj.pdf boj.txt

うおおおおおおおおおおおおおおおおおお
テキストファイルになってる!!!!!!!!!!!
ヘッダーの「日本銀行」とフッターの「以上」が改行されているが、他は問題なさそう。すげー

xpdfをazureのvmに入れられるのかわからんが、まずはvagrantで構築していきましょう。
pdftotextはcrontabでやるにしても、コマンドラインではなく、phpファイルから実行できるんだろうか?

cronでgunzipを実行する

crontabでgunzipと書くだけです。

20 * * * * root cd /home/vagrant/cookie/cron; gunzip GeoLite2-Country.mmdb.gz

ほお~

sudo cat /var/log/cron
Apr 26 22:20:02 localhost CROND[17108]: (root) CMD (cd /home/vagrant/cookie/cron; gunzip GeoLite2-Country.mmdb.gz)

無償版は毎月3日に更新されるそう(真偽は不明です)なので、日本との時差を考慮して、毎月5日の1時15分にwgetして、1時20分にgunzipするよう設定します。

15 1 5 * * root cd /home/vagrant/cookie/cron; /usr/bin/wget "http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz"
15 1 5 * * root cd /home/vagrant/cookie/cron; /usr/bin/wget "http://geolite.maxmind.com/download/geoip/database/GeoLite2-City.mmdb.gz"
20 1 5 * * root cd /home/vagrant/cookie/cron; gunzip GeoLite2-Country.mmdb.gz
20 1 5 * * root cd /home/vagrant/cookie/cron; gunzip GeoLite2-City.mmdb.gz

geolite側はこれでOK
次はmongodbに入れる前に、phpでipから、continent, country, cityを取得して配列にpushするところをやりたいと思います。

cronでwgetを実行する

wget:ノンインタラクティブなダウンローダー

wgetがどこにあるか確認します。

/usr/bin/wget

bin:Binary codeのこと、実行可能プログラム置き場
/bin:FHSによって定められたシングルユーザを含めたどのユーザでも使えるコマンド
/usr/bin:ユーザーが一般的に使用するコマンド

続いて、crontabを編集します。

sudo vi /etc/crontab

任意のディレクトリ(ここでは/home/vagrant/cookie/cron)に、wgetでdownloadしたいとすると、まず、cdで移動する必要があります。そのため、以下のように書きます。
root cd で移動して、/usr/bin/wgetで、”http://hogehoge”をダウンロード
※ここでは、テスト用に毎時55分にwgetする

55 * * * * root cd /home/vagrant/cookie/cron; /usr/bin/wget "http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz"
/etc/rc.d/init.d/crond start

編集後、crond start
/etc/rc.d/init.d/crond start

結果
->取れてる!!!

sudo cat /var/log/cron でログも確認

Apr 26 21:55:01 localhost CROND[17001]: (root) CMD (cd /home/vagrant/cookie/cron; /usr/bin/wget "http://geolite.maxmind.com/download/geoip/database/GeoLite2-Country.mmdb.gz")

OK牧場!

2000万ファイルの作成について

東京都の電話番号の全てのパターンをつくりたいとする

03-XXXX-YYYY

市外局番:03
市内局番:3100~6999(2264件)
加入者番号:0000~9999(9999件)

仮に全て、ファイルを作ったとすると、2264万ファイル作成することになる。

「Linuxの場合、一つのディレクトリの配下に10000個から15000個程度のファイルを作成することが出来るが、実際には5000個もファイルを作成するとディスクI/Oの性能が落ち、ファイル読み書きのパフォーマンスが落ちる」、とのこと。