Quantcast
Channel: Linux –俺的備忘録 〜なんかいろいろ〜
Viewing all 743 articles
Browse latest View live

CentOS 7にpipをインストールする

$
0
0

CentOS 7にpipをインストールする場合、epelを導入することでyumからインストールすることができる。

yum install epel-release
yum install python-pip

 

できるPRO CentOS 7サーバー できるPRO CentOS 7サーバー

Proxmox VE 4.1でHyperVのディスクイメージ(.vhd)をインポートする

$
0
0

Proxmox VE 4.1でHyperVのディスクイメージを利用する場合、KVMで利用できるような形式に変換する必要がある。

1.仮想マシンの作成

まず、こちらを参考にKVMのディスクイメージを利用する仮想マシンを作成する。
作成時、今回の場合はディスクイメージタイプはraw、ディスクイメージは出来れば後ほどアップロードするimgファイルと同じ容量で作成を進める。
※ディスクイメージタイプ・容量が違う場合、仮想マシンの設定ファイル(/etc/pve/nodes/仮想ホスト名/qemu-server/仮想マシンID.conf)を直接いじって、ディスク容量をいじってやらないといけない。

2.ディスクイメージのアップロード

ディスクイメージ(.vhdファイル)をscp経由などでアップロードし、対象の仮想マシンのイメージ格納ディレクトリ(デフォルトでは「/var/lib/vz/images/仮想マシンID/」)に移動する。
ファイル移動後、以下のコマンドを実行しvhdファイルをqcow2形式に変換する。

qemu-img convert [vhdファイルPATH] -O qcow2 [qcpw2ファイルPATH(出力先)]

 

新しいディスクイメージファイルが出来上がったら、既存のディスクイメージ(vm-仮想マシンID-disk-1.raw)と置き換える。

 

3.仮想マシンの起動

ディスクイメージの置き換えが終わったら、後はWebコンソール上から仮想マシンを起動するだけだ。

すべてわかる仮想化大全2016(日経BPムック) すべてわかる仮想化大全2016(日経BPムック)

LinuxでソースファイルをSyntaxHighlightして標準出力するコマンド6個

$
0
0

Linuxなどで、ソースなどをcatで開いた際に自動的にSyntaxHighlightしてくれるツールってどんなのがあるのかなぁ、と思ったので、少し調べてみた。
基本的に、インストール先はCentOSやUbuntuとして記述していくので、それ以外のディストリを使っている場合は随時読み替えてもらいたい。

1.vimcat・vimpager

まぁ、まずは基本と言ってもいいvimcatから。
インストールも簡単で、以下のコマンドでインストール可能だ。
※なお、利用にはvimをインストールしている必要があるので注意。

git clone git://github.com/rkitover/vimpager
cd vimpager
sudo make install

 

インストールしたら、後は普通にcatを利用するように開きたいファイルを指定すれば良い。

vimcat ソースファイル

Screenshot_from_2016-03-13 22:10:31

 

lessのように見る場合は、同時にインストールされているvimpagerコマンドを用いる。

cat ソースファイル | vimpager

Screenshot_from_2016-03-13 22:44:00

 

2.Pygments

Python製のツール『Pygments』。
インストールには、pipもしくはeasy_installを用いると良いだろう。

sudo pip install pygments
sudo easy_install Pygments

 

インストールができたら、以下のようにコマンドを実行することで、ソースファイルを色付きで標準出力に出してくれる。

pygmentize ソースファイル

Screenshot_from_2016-03-13 23:01:23

 

残念ながら、このコマンド単体ではlessの際に色付きでは表示出来ない(moreでは出来る)。

3.source-highlight

『source-highlight』。
以下のようにコマンドを実行することでインストールできる。

sudo yum install source-highlight #RHEL系の場合
sudo apt-get install source-highlight # Debian/Ubuntu系の場合

 

インストール完了後に注意したいのが、そのままコマンドを打ってもSyntaxHighlight付きのhtmlファイルが生成されるだけだ。
コンソール上で色付き表示させたい場合は、以下のようにコマンドを実行する。

src-hilite-lesspipe.sh ソースファイル
/usr/share/source-highlight/src-hilite-lesspipe.sh ソースファイル

Screenshot_from_2016-03-13 23:18:02

 

4.highlight

機能が豊富らしい『highlight』コマンド。
以下のようにコマンドを実行することでインストール出来る。

sudo yum install highlight #RHEL系の場合
sudo apt-get install highlight # Debian/Ubuntu系の場合

 

インストール後、以下のようにコマンドを実行することでソースコードをハイライト表示させることができる。

highlight -O ansi ソースファイル

Screenshot_from_2016-03-13 23:29:41

 

5.ccat

『ccat』。
以下のコマンドでインストールが出来る。

brew install ccat # MacOSX
go get -u github.com/jingweno/ccat # ソースからのインストール

 

インストール後、以下のコマンドで利用する。

ccat --bg=dark ソースファイル

Screenshot_from_2016-03-13 23:34:10

 

6.Supercat

『Supercat』。
以下のコマンドでインストールできる。

wget http://supercat.nosredna.net/supercat-0.5.5.tar.gz
tar xzvf supercat-0.5.5.tar.gz
cd supercat-0.5.5
./configure
make
make install

 

インストール完了後、以下のコマンドで利用する。

spc ソースファイル

Screenshot_from_2016-03-13 23:42:31

 

正直、6種類もあるとは思わなんだ…。
まだあるかも知れないので、見つけたら追加していこう。

 

リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice) リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)

色付きでtailする『colortail』コマンド

$
0
0

ボケっとネットサーフィンしてたら、ログとかをtailする際に便利そうな『colortail』というコマンドを見つけたのでインストールしてみることにした。
以下のコマンドでインストール出来る。

sudo apt-get install colortail

それでは、実際に使ってみよう。

colortail ファイルPATH
colortail -f ファイルPATH # リアルタイム監視の場合

Screenshot_from_2016-03-14 00:03:16

 

う~ん、ccze toolほどの応用はできないだろうし、しばらく更新されていないようなのでなんとも…。
悪くは無さそう。

Windows/Linuxのトラブル追跡実践ノウハウ エンジニア必携 Windows/Linuxのトラブル追跡実践ノウハウ エンジニア必携

Linux/UNIXで実行しているコマンドをバックグラウンドジョブに切り替える

$
0
0

Linux/UNIXで仕事している際、コマンド実行中に別の作業をしたり、ターミナル自体を閉じたくなる事がある。
(たとえば、処理が思ったよりも時間がかかってて、離席したい時など)

screenやtmuxなどで接続している場合はそのまま切っても再接続できるけど、そうでない場合も多いだろう。そんな時は、実行しているコマンドをバックグラウンドに移してやれば良い。
やり方は簡単。まず、コマンドを実行中のターミナル上で、「Ctrl + z」キーを押下することで、コマンドが一時停止状態に移行する。

●実行例

20160316_000008

 

で、この状態で「bg」コマンドを実行することで、先ほどまで実行されていたコマンドがバックグラウンドで再開される。

20160316_000009

 

ただし、ここで注意したいのが今の状態だとターミナルを閉じてしまうと、コマンドは終了されてしまう。
ターミナルを閉じてもジョブを実行し続けたい場合は、「disown」コマンドで対象のジョブ番号を指定することで、今開いているターミナルとジョブの紐付けを解除することができる。

disown -h Job番号

ジョブ番号を知りたい場合は、jobsコマンドで確認すると良いだろう。

[root@BS-PUB-GFRONT-01 ~]# # Job番号の取得
[root@BS-PUB-GFRONT-01 ~]# jobs
[1]+  実行中               ping 8.8.8.8 >> /tmp/test.txt &
[root@BS-PUB-GFRONT-01 ~]#
[root@BS-PUB-GFRONT-01 ~]# # 1番をバックグラウンドジョブとする
[root@BS-PUB-GFRONT-01 ~]# disown -h %1

 

新しいLinuxの教科書 新しいLinuxの教科書

wgetコマンドで覚えておきたい使い方16個

$
0
0

wgetコマンドといえば、webからファイルをダウンロードしたりする際によく利用するコマンドだ。
今回は、このwgetコマンドについて覚えておきたい使い方をまとめてみる事にする。

1.基本の使い方

基本的には、以下のようにオプション無しでコマンドを実行することで、Web上のファイルをダウンロードする。
ダウンロードしたファイルはカレントディレクトリに同じ名前で保存される。

wget http://ファイルのURL
[root@test-node work]# ls -la
合計 4
drwxr-xr-x.  2 root root    6  3月 19 00:39 .
dr-xr-x---. 19 root root 4096  3月 19 00:39 ..
[root@test-node work]# wget http://diffc.googlecode.com/svn/trunk/bin/python2/diffc
--2016-03-19 00:41:07--  http://diffc.googlecode.com/svn/trunk/bin/python2/diffc
diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52
diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 74219 (72K)
`diffc' に保存中 100%[=========================================================================>] 74,219 455KB/s 時間 0.2s 2016-03-19 00:41:08 (455 KB/s) - `diffc' へ保存完了 [74219/74219] [root@test-node work]# ls -la 合計 80 drwxr-xr-x. 2 root root 18 3月 19 00:41 . dr-xr-x---. 19 root root 4096 3月 19 00:39 .. -rw-r--r--. 1 root root 74219 5月 6 2011 diffc

 

2.ファイルの保存先をを指定する

オプション無しでwgetコマンドを実行した場合、そのままカレントディレクトリ配下にファイルが配置されてしまう。
任意のPATH、任意のファイル名で保存したい場合は、「-O」オプションを用いる。

wget -O 出力先PATH http://ファイルのURL
[root@test-node work]# wget -O /tmp/diffc http://diffc.googlecode.com/svn/trunk/bin/python2/diffc
--2016-03-19 01:02:44--  http://diffc.googlecode.com/svn/trunk/bin/python2/diffc
diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52
diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 74219 (72K)
`/tmp/diffc' に保存中 100%[=========================================================================>] 74,219 407KB/s 時間 0.2s 2016-03-19 01:02:45 (407 KB/s) - `/tmp/diffc' へ保存完了 [74219/74219] [root@test-node work]# ls -la /tmp/diffc -rw-r--r--. 1 root root 74219 5月 6 2011 /tmp/diffc

 

3.ダウンロードに失敗しても、再度やり直しする

ダウンロードを途中で中断してしまい、再度やり直しをしたい場合は再ダウンロード時に「-c」オプションを用いると良いだろう。
※再ダウンロード時にすでにダウンロード済の箇所は、プログレスバー上では「+」で表現される。

wget -c http://ファイルのURL
[root@test-node work]# wget http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
--2016-03-19 01:12:09--  http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
ftp.riken.jp (ftp.riken.jp) をDNSに問いあわせています... 134.160.38.1
ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 4329570304 (4.0G) [application/octet-stream]
`CentOS-7-x86_64-DVD-1511.iso' に保存中

 5% [===>                                                                      ] 250,988,834 37.5MB/s  残り1m 54s ^C
[root@test-node work]# wget -c http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
--2016-03-19 01:12:18--  http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
ftp.riken.jp (ftp.riken.jp) をDNSに問いあわせています... 134.160.38.1
ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 206 Partial Content
長さ: 4329570304 (4.0G), 4072590724 (3.8G) 残っています [application/octet-stream]
`CentOS-7-x86_64-DVD-1511.iso' に保存中

40% [++++========================>                                           ] 1,760,074,548 28.8MB/s  残り75s

 

4.ダウンロードの速度制限を行う

「–limit-rate」を指定することで、ダウンロード速度に制限をかけることが出来る。

wget --limit-rate=制限する速度 http://ファイルのURL
[root@test-node work]# wget --limit-rate=2m -c http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1
511.iso
--2016-03-19 01:35:44--  http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
ftp.riken.jp (ftp.riken.jp) をDNSに問いあわせています... 134.160.38.1
ftp.riken.jp (ftp.riken.jp)|134.160.38.1|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 206 Partial Content
長さ: 4329570304 (4.0G), 2563319808 (2.4G) 残っています [application/octet-stream]
`CentOS-7-x86_64-DVD-1511.iso' に保存中

41% [+++++++++++++++++++++++++++++                                           ] 1,785,363,556 2.00MB/s  残り20m 15s

 

5.ダウンロードをバックグラウンドで実行する

ダウンロードをバックグラウンドで実行させる場合は、「-b」オプションを用いる。

wget -b http://ファイルのURL
[root@test-node work]# wget -b http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
バックグラウンドで継続します、pidは 10808。
出力を `wget-log' に書き込みます。
[root@test-node work]# ls -al wget-log
-rw-r--r--. 1 root root 114428  3月 19 01:42 wget-log
[root@test-node work]# tail wget-log
210650K .......... .......... .......... .......... ..........  4% 28.2M 2m34s
210700K .......... .......... .......... .......... ..........  4% 66.0M 2m34s
210750K .......... .......... .......... .......... ..........  4% 43.8M 2m34s
210800K .......... .......... .......... .......... ..........  4% 49.5M 2m34s
210850K .......... .......... .......... .......... ..........  4% 23.9M 2m34s
210900K .......... .......... .......... .......... ..........  4% 26.1M 2m34s
210950K .......... .......... .......... .......... ..........  4% 25.5M 2m34s
211000K .......... .......... .......... .......... ..........  4% 31.0M 2m34s
211050K .......... .......... .......... .......... ..........  4%  188M 2m33s

 

6.UserAgentを偽装する

通常、wgetでダウンロードをした場合だとUserAgentには「Wget/Wgetのバージョン」が利用されるのだが、「–user-agent」オプションを用いる事でこれを偽装することができる。

wget --user-agent="偽装するUserAgentの内容" http://ファイルのURL

 

7.URLの記述されたファイルを読み込んで複数ファイルを連続でダウンロードする

複数ファイルを連続でダウンロードする場合、テキストファイルに対象のURLを記述しておき、それを「-i」オプションで読み込む事で対応できる。

wget -i URLを記述したファイルPATH

20160319_000001

 

8.再起的にダウンロードを行う

対象のURL内を再帰的にダウンロードする場合は、「-r」オプションを付与する。

wget -r http://再帰的にダウンロードを行うURL

 

なお、この時に以下のようなオプションを指定して、ダウンロードするファイル、そうじゃないファイルなどを指定する事ができる(一部抜粋)。

  • -A(–accept=) … ダウンロードする拡張子をカンマ区切りで指定する
  • -R(–reject=) … ダウンロードしない拡張子をカンマ区切りで指定する
  • -l(–level=) … 階層の深さを指定(0の場合は無制限)
  • -p(–page-requisites) … HTML を表示するのに必要な全ての画像等も取得す

9.ユーザ名・パスワードを指定する

Basic認証が必要なページの場合、以下のようにユーザ名・パスワードを指定することで認証を受けてダウンロードを行う事が出来る。

wget --http-user=ユーザ名 --http-passwd=パスワード http://ファイルのURL

 

10.詳細情報を表示させない

通常、オプション無しだとダウンロードの詳細情報が表示されてしまうが、これが不要な場合は「-q」オプションを付与する。

wget -q http://ファイルのURL
[root@test-node work]# wget -q http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
[root@test-node work]# ls -la diffc
-rw-r--r--. 1 root root 74227  5月  6  2011 diffc

 

11.ダウンロードせずにファイルの有無を確認する

ファイルを実際にダウンロードせず、その有無だけを確かめる場合は「–spider」オプションを付与する。

wget --spider http://ファイルのURL
[root@test-node work]# wget --spider http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
スパイダーモードが有効です。リモートファイルが存在してるか確認します。
--2016-03-19 10:23:47--  http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52
diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 74227 (72K)
リモートファイルが存在します。

 

12.プロキシサーバ経由でダウンロードする

プロキシを経由する場合は、以下のようにプロキシサーバを指定してコマンドを実行する。

wget -e HTTP_PROXY=プロキシサーバのホスト:ポート番号 http://ファイルのURL

 

プロキシサーバにユーザ名、パスワードが必要な場合は、以下のように指定する。

wget -e HTTP_PROXY=proxy.co.jp --proxy-user=ユーザ名 --proxy-password=パスワード http://ファイルのURL

 

13.ダウンロードのリトライ回数を指定する

ダウンロードのリトライ回数を指定する場合は、「–tries」オプションでリトライ回数を指定出来る。

wget --tries=リトライ回数 http://ファイルのURL

 

14.サーバの応答情報を取得する

ダウンロード時のサーバの応答情報を取得する場合は、「-S」オプションを用いるといいだろう。

wget -S http://ファイルのURL
[root@test-node work]# wget -S http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
--2016-03-19 10:47:08--  http://diffc.googlecode.com/svn/trunk/bin/python3/diffc
diffc.googlecode.com (diffc.googlecode.com) をDNSに問いあわせています... 74.125.23.82, 2404:6800:4008:c02::52
diffc.googlecode.com (diffc.googlecode.com)|74.125.23.82|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています...
  HTTP/1.1 200 OK
  Date: Sat, 19 Mar 2016 15:47:08 GMT
  Server: Apache
  Last-Modified: Sat, 07 May 2011 01:23:39 GMT
  ETag: "22//trunk/bin/python3/diffc"
  Accept-Ranges: bytes
  Expires: Sat, 19 Mar 2016 15:50:08 GMT
  Cache-Control: public, max-age=180
  Content-Length: 74227
  Content-Type: text/plain
長さ: 74227 (72K)
`diffc' に保存中 100%[=========================================================================>] 74,227 462KB/s 時間 0.2s 2016-03-19 10:47:09 (462 KB/s) - `diffc' へ保存完了 [74227/74227]

 

15.ダウンロードしたファイルの内容を標準出力に表示する

ダウンロードしたファイルの内容を、ファイルではなく標準出力でそのまま表示させることも出来る。

wget -O - http://ファイルのURL
[root@test-node ~]# wget -O - http://orebibou.com
--2016-03-19 10:50:55--  http://orebibou.com/
orebibou.com (orebibou.com) をDNSに問いあわせています... 157.112.152.17
orebibou.com (orebibou.com)|157.112.152.17|:80 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 特定できません
`STDOUT' に保存中 [<=> ] 0 --.-K/s ...略

 

16.ログイン情報をCookiesに保持させてアクセスする

ベーシック認証ではなく、普通にZabbixなどで普通にログイン・ログアウト情報をCookiesに保持させてWeb上の情報を取得する事も出来る。
以下のように、一度ログインページで必要な情報(ユーザ名・パスワード等)のラベル名を確認し、それにpost-dataでログイン情報を渡し認証。その後は、そのCookiesファイルを読み込んでアクセスをすれば認証された状態でWebの情報を取得出来る。
※post-dataのラベル名はページによって異なる

wget --cookies=on --save-cookies cookies.txt --keep-session-cookies --post-data 'username=ユーザ名&password=パスワード' http://ログインページのURL
wget --cookies=on --load-cookies cookies.txt --keep-session-cookies http://ログイン後にダウンロードしたいファイルのURL

 

他にも色々と機能はあるのだが、とりあえずある程度使えそうな部分だけを抜粋してみた。

Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例 Rubyによるクローラー開発技法 巡回・解析機能の実装と21の運用例

curlコマンドで覚えておきたい使い方12個

$
0
0

Webスクレイピングを行う際に重宝するcurlコマンド。
今回は、このコマンドで覚えておくと便利な使い方についてをまとめてみる。

1.基本的な使い方

基本的には、以下のようにコマンドを実行することでHTTPリクエストを実施し、その内容を標準出力に出してくれる。

curl http://対象のURL

20160320_000000

 

2.ファイルに出力する

HTTPリクエストの回答をファイルに書き出す場合は、リダイレクトで出力先を指定するか、「-o」オプションで出力先PATHを指定してやれば良い。

curl http://対象のURL > 出力先PATH
curl -o 出力先PATH http://対象のURL

 

3.プロキシ経由でアクセスする

プロキシ経由でアクセスする場合、「-x」オプションでプロキシサーバを指定すれば良い。

curl -x プロキシサーバ:ポート番号 http://対象のURL

 

もしプロキシサーバを利用する際に認証が必要な場合、以下のようにユーザ名・パスワードを指定すると良いだろう。

curl -x プロキシサーバ:ポート番号 --proxy-user ユーザ名:パスワード http://対象のURL

 

4.リダイレクトを有効にする

デフォルトではcurlはリダイレクトに対応していないが、「-L」オプションを付与することでリダイレクト先のURLにもリクエストを出すようになる。

curl -L http://対象のURL

 

5.進捗を非表示にする

ファイルに出力する際に進捗情報を非表示にする場合は、「-s」オプションを用いる。

curl -s -o 出力先PATH http://対象のURL
[root@test-node work]# curl -o /tmp/test http://example.org
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  1270  100  1270    0     0   4627      0 --:--:-- --:--:-- --:--:--  4618
[root@test-node work]# curl -s -o /tmp/test http://example.org

 

なお、上のオプションではエラーも非表示となるので、エラーのみ表示させるようにする場合は、「-sS」オプションを用いる。

curl -sS -o 出力先PATH http://対象のURL
[root@test-node work]# curl -s -o /tmp/test http://example.org1
[root@test-node work]# curl -sS -o /tmp/test http://example.org1
curl: (6) Could not resolve host: example.org1; 名前またはサービスが不明です

 

6.途中で中断したダウンロードの再開をする

「Ctrl + C」キーなどで、途中で中断したダウンロードを再開する場合は、「-C -」を付与すると良いだろう。

curl -C - http://対象のURL
[root@test-node work]# curl -O http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 21 4129M   21  891M    0     0  44.0M      0  0:01:33  0:00:20  0:01:13 43.2M^C
[root@test-node work]# curl -C - -O http://ftp.riken.jp/Linux/centos/7/isos/x86_64/CentOS-7-x86_64-DVD-1511.iso
** Resuming transfer from byte position 949084160
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
 16 3223M   16  538M    0     0  43.0M      0  0:01:14  0:00:12  0:01:02 45.3M

※やり直しをすると、ダウンロードが必要になる容量が減っている事が確認できる。

7.転送速度に制限をかける

「–limit-rate」オプションを付与することで、転送速度に制限をかける事ができる。

curl --limit-rate 制限する転送速度 http://対象のURL

 

8.認証を行う

以下のようにコマンドを実行することにより、Basic認証及び、その他の認証について行ってアクセスすることが出来る。

curl --anyauth --user ユーザ名:パスワード http://対象のURL

 

9.POSTをする

ファイルをアップロードするなど、curl経由でPOSTをする場合は「-F」オプションで行う事が出来る。

curl -F "name=value" http://対象のURL

 

ファイルをアップロードする場合は、値に「@PATH」を記述すると良いだろう。

curl -F "name=@PATH" http://対象のURL

 

10.400番台のエラーコード時に異常終了とする

curlでは、通常は400番台のエラーコードの際でも正常終了(exitコード0)として扱われれる。
これを異常終了として扱う場合は、「-f」オプションを付与する。

curl -f http://対象のURL
[root@test-node work]# curl http://www.google.com/dummy.txt
<!DOCTYPE html>
<html lang=en>
<meta charset=utf-8>
<meta name=viewport content="initial-scale=1, minimum-scale=1, width=device-width">
<title>Error 404 (Not Found)!!1</title>
<style>
*{margin:0;padding:0}html,code{font:15px/22px arial,sans-serif}html{background:#fff;color:#222;padding:15px}body{margin:7% auto 0;max-width:390px;min-height:180px;padding:30px 0 15px}* > body{background:url(//www.google.com/images/errors/robot.png) 100% 5px no-repeat;padding-right:205px}p{margin:11px 0 22px;overflow:hidden}ins{color:#777;text-decoration:none}a img{border:0}@media screen and (max-width:772px){body{background:none;margin-top:0;max-width:none;padding-right:0}}#logo{background:url(//www.google.com/images/branding/googlelogo/1x/googlelogo_color_150x54dp.png) no-repeat;margin-left:-5px}@media only screen and (min-resolution:192dpi){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat 0% 0%/100% 100%;-moz-border-image:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) 0}}@media only screen and (-webkit-min-device-pixel-ratio:2){#logo{background:url(//www.google.com/images/branding/googlelogo/2x/googlelogo_color_150x54dp.png) no-repeat;-webkit-background-size:100% 100%}}#logo{display:inline-block;height:54px;width:150px}
</style>
<a href=//www.google.com/><span id=logo aria-label=Google></span></a>
<p><b>404.</b> <ins>That’s an error.</ins>
<p>The requested URL <code>/dummy.txt</code> was not found on this server. <ins>That’s all we know.</ins>
[root@test-node work]# echo $?
0
[root@test-node work]# curl -f http://www.google.com/dummy.txt
curl: (22) The requested URL returned error: 404 Not Found
[root@test-node work]# echo $?
22

 

11.Cookieを用いてログイン情報を保存する

curlで、Cookieを用いてログイン情報を保存し、その後認証が必要なページにアクセスする場合は、以下のようにログイン情報を転送する。
※「-d」で渡している設定名・値は各環境で異なるので注意。

curl -c cookie.txt -d 'username=ユーザ名' -d 'password=パスワード' http://対象のログインURL
curl -b cookie.txt http://ログイン後に情報を取得するページ

 

12.UserAgentを偽装する

curlでUserAgentを偽装する場合は、「-A」オプションを用いる。

curl -A "偽装するUserAgent" http://対象のURL

 

とりあえず、個人的に使いそうな使い方だけを抜粋してみた。

実践 Webスクレイピング&クローリング-オープンデータ時代の収集・整形テクニック 実践 Webスクレイピング&クローリング-オープンデータ時代の収集・整形テクニック

wcコマンドで覚えておきたい使い方3個

$
0
0

wcコマンドといえば、Linux/UNIXで使える行数やバイト数を数えるのに使えるコマンドだ。
今回は、このwcコマンドで覚えておきたい使い方についてをまとめてみる。

1.基本の使い方

基本的には、以下のように用いる事でファイルの改行数、単語数、バイト数を表示する。

wc ファイルPATH
[root@test-node work]# wc /tmp/test
  50  120 1270 /tmp/test

 

表示させる内容については、以下のオプションで指定した数字だけを出力させることができる。

  • -c … バイト数
  • -m … 文字数
  • -l … 改行の数
  • -w … 単語数

2.最も長い行の長さを表示する

読み込まれたファイルの、最も長い行の文字数を表示するには、「-L」オプションを付与する。

wc -L ファイルPATH
[root@test-node work]# wc -L /tmp/test
101 /tmp/test

 

3.ファイル名を非表示にする

wcコマンドで対象のファイルを指定した場合、ファイル名も同時に出力されてしまう。
これは、複数を同時に指定した場合も同様である。

[root@test-node work]# wc /tmp/*
     50     120    1270 /tmp/example.org
     50     120    1270 /tmp/test
    100     240    2540 合計

 

もしファイル名を取得したくない場合は、リダイレクトで読み込ませる事でその値のみを取得することが出来る。

wc < ファイルPATH
[root@test-node work]# wc -c /tmp/test
1270 /tmp/test
[root@test-node work]# wc -c

 

新しいLinuxの教科書 新しいLinuxの教科書

CentOS7にRをインストールする

$
0
0

ちょっとR言語をいじってみようと思ったので、CentOS 7にRをインストールしてみる。
インストールの仕方は簡単。以下のコマンドを実行しyumでインストールするだけだ。

yum install -y epel-release
yum install -y R

これで、Rがインストールできた。

[root@BS-PUB-CENT7-01 ~]# rpm -qa | grep R
libRmath-3.2.3-4.el7.x86_64
R-core-3.2.3-4.el7.x86_64
R-java-3.2.3-4.el7.x86_64
perl-Time-HiRes-1.9725-3.el7.x86_64
libRmath-devel-3.2.3-4.el7.x86_64
R-core-devel-3.2.3-4.el7.x86_64
R-devel-3.2.3-4.el7.x86_64
R-3.2.3-4.el7.x86_64
perl-TermReadKey-2.30-20.el7.x86_64
R-java-devel-3.2.3-4.el7.x86_64
Think Stats 第2版 ―プログラマのための統計入門 Think Stats 第2版 ―プログラマのための統計入門

Linuxコンソール上でGUIでアスキーアートをかける『aewan』

$
0
0

なんとなしにネットサーフィンをしていた所、Linuxコンソール上でGUIでアスキーアートを描く事が出来る『aewan』コマンドというものを見かけたので、試しに使ってみる事にする。
なお、インストール先はUbuntu Server 14.04 LTSとする。

1.インストール

まずはインストールから。
以下のコマンドをコンソール上で実行する。

sudo apt-get install aewan

2.新規作成

それでは、実際に新規でアスキーアートを作ってみよう。
コンソール上で、以下のようにコマンドを実行する。

aewan

20160320_000001

 

コマンドを実行すると上のような画面が表示されるので、「F1」キーを2回ほど押下し、「[F1] File」 > 「New」で新規のアスキーアートを作成する。
そのままだと何も書けないので、「[F3] Layer」 > 「Add layer」で新しいレイヤーを追加する。

20160320_000002

 

後は、新しく追加されたレイヤーで十字キー+キーボードでアスキーアートを書いていけば良い。
なお、入力できる色は「[F2] Edit」 > 「Drawing Color」で自由に選択できる。

20160320_000004

 

レイヤーのサイズを変更する場合は、「[F3] Layer」 > 「Resize layer」で行える。

20160320_000006

 

3.保存

さて、一通り書き終わったら「[F1] File」 > 「Save」で保存をする。

20160320_000008

 

保存後、そのままだとcatで開くことは出来ない。
ひとまず、aewan用のビューアーである「aecat」コマンドで開いて、それをリダイレクトで書き出す事でcatでも開くことが出来るようになる。

20160320_000009

 

結構簡単にコンソール上でアスキーアートを描く事が出来る。

アスキーアートを作る―Visual C#でプログラミング アスキーアートを作る―Visual C#でプログラミング

Linuxでバックグラウンドジョブをフロントに戻す

$
0
0

Linuxでバックグラウンド実行させているプロセスを、フォアグラウンドに戻したい時もあるだろう。
そんなときは、「fg」コマンドを用いる。

[root@BS-PUB-MONITOR-01 ~]# nohup ping 8.8.8.8 &
[1] 14841
nohup: 入力を無視し、出力を `nohup.out' に追記します
[root@BS-PUB-MONITOR-01 ~]# 
[root@BS-PUB-MONITOR-01 ~]# jobs
[1]+  実行中               nohup ping 8.8.8.8 &
[root@BS-PUB-MONITOR-01 ~]#
[root@BS-PUB-MONITOR-01 ~]# ps -ef | grep [p]ing
root     14841 14022  0 22:25 pts/1    00:00:00 ping 8.8.8.8
zabbix   27268 27239  0  3月06 ?      00:00:54 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000004 sec, idle 5 sec]
[root@BS-PUB-MONITOR-01 ~]#
[root@BS-PUB-MONITOR-01 ~]# fg %1
nohup ping 8.8.8.8
^C
[root@BS-PUB-MONITOR-01 ~]# ps -ef | grep [p]ing
zabbix   27268 27239  0  3月06 ?      00:00:54 /usr/sbin/zabbix_server: icmp pinger #1 [got 0 values in 0.000004 sec, idle 5 sec]
[root@BS-PUB-MONITOR-01 ~]# jobs
[root@BS-PUB-MONITOR-01 ~]#

 

新しいLinuxの教科書 新しいLinuxの教科書

関数型パッケージマネージャを用いているLinuxディストリビューション『NixOS』をインストールする

$
0
0

先日のOSCで、NixOSという関数管理型のパッケージマネージャなるものを持つLinuxディストリビューション『NixOS』というものを知ったので、入れてみる事にした。
手順としては、こちらの内容を元に作業をしている。

1.ISOファイルのダウンロード

まずは、こちらでISOファイルのダウンロードをする。
とりあえずGUIのついたLiveCDをダウンロードすれば良いだろう。

ダウンロードしたら、このISOをインストール先で読めるようにする。
(物理だったら焼くなり、仮想マシンならISOをマウントしろってことね。)

2.インストール開始

 

コンソール表示後、以下のコマンドを実行しディスクのフォーマットとマウント、インストール時の設定ファイルを作成させる。

parted /dev/sda mklabel msdos
parted /dev/sda mkpart primary 0% 100%
mkfs.xfs -L nixos /dev/sda1
mount LABEL=nixos /mnt
nixos-generate-config --root /mnt

 

設定ファイル作成後、nanoで「/mnt/etc/nixos/configuration.nix」を開き、以下の項目のコメントアウトを外す。

  • boot.loader.grub.device = “/dev/sda”;
  • networking.hostname = “nixos”;
  • time.timeZone = “Asia/Tokyo”;

 

設定ファイルを編集したら、以下のコマンドを実行しNixOSをインストールする。

nixos-install

 

インストール処理が完了後、rebootを行う事でインストール完了。

reboot

 

新しいLinuxの教科書 新しいLinuxの教科書

『reptyr』コマンドでLinuxで現在動作中のプロセスを接続中のセッションに紐付ける

$
0
0

Linuxで、すでにバックグラウンドや他のターミナルで動作中のプロセスの管理を今接続しているセッションに紐付けたい時もあるだろう。
そんな時は、今回紹介する『reptyr』コマンドを用いる事で、現在のセッションでプロセスを動作させる事が出来るようになる。

1.インストール

まずはインストール。
以下のコマンドでインストールを行う。

●RHEL系の場合

yum install -y epel-release
yum install -y reptyr

 

●Ubuntu/Debian系の場合

sudo apt-get install reptyr

2.実際に使ってみる

それでは、実際に使ってみよう。
まず、事前にpsコマンドで現在のセッションに管理を移したいプロセスのIDを確認しておく。

その後、以下のようにコマンドを実行することで、そのプロセスの管理を現在のセッションに移すことが出来る。

reptyr プロセスID

 

もし他のセッションで利用していたプロセスの場合、この時点でそのセッションからはプロセスが切り離されている状態となる。
間違えて特定のプロセスをバックグラウンドジョブにしてしまって、さらにターミナルの接続が切れてしまった時や、他の利用者にプロセスの引き継ぎをしたい時などに利用できるだろう。

 

小さな会社の新米サーバー/インフラ担当者のためのLinuxの常識 小さな会社の新米サーバー/インフラ担当者のためのLinuxの常識

コンソール上で統計情報を計算する「st」コマンド

$
0
0

Linuxのコンソール上で統計情報を計算する方法について調べていたところ、「st」というコマンドがそれを出来るようだということがわかったので試してみる事にした。
利用するOSはCentOS 7とする。

まず、以下のコマンドでインストールを行う。

yum install git perl-ExtUtils-MakeMaker
git clone https://github.com/nferraz/st
cd st/
perl Makefile.PL
make && make install

さて、それでは実際に使ってみよう。
基本的には、他のコマンドの出力をパイプで渡してやることで利用可能となる。

コマンド | st
[root@BS-PUB-CENT7-01 st]# seq 1 3 100 | st
N       min     max     sum     mean    stddev
34      1       100     1717    50.5    29.8747

 

find+lsとかと組み合わせてやれば、ファイルサイズの統計を計算したり出来るだろう。

みんなのR -データ分析と統計解析の新しい教科書- みんなのR -データ分析と統計解析の新しい教科書- みんなのR -データ分析と統計解析の新しい教科書- みんなのR -データ分析と統計解析の新しい教科書-

 

Proxmox VE 4.1でストレージ機器を用いずにクラスタ間でライブマイグレーションを行う(DRBD9)

$
0
0

Proxmoxのクラスタ間でのライブマイグレーションを行う場合、通常であればiSCSIやSANで仮想HDDなどをおいておくストレージが必要なのだけど、それなしでもvSANやNutanix CEを利用するようにしてライブマイグレーションを出来ないか調べてみた。
一応、ProxmoxのノードでCeph(RBD)を利用することが出来るのだけど、そうなると最低でも3台構成以上じゃないとあまり旨味が無いので、なんかいい方法が無いかと調べていたところ、各クラスタノードで共通のディレクトリ(ディスク)をDRBDで同期させて、そこに仮想マシンのファイルを配置することで対応出来そうだったので、やってみることにした。

前提として、すでにProxmoxクラスタは構築済、ディスクはまだフォーマットされていないけど各クラスタに同容量のが刺さってる状態で、DRBD9を導入する。
また、DRBDでディスクの同期を行うために、Proxmox上の仮想マシンで利用しないNIC(ここではeth1)を別途用意しておく必要がある。
作業はこちらの情報を参考に進めていく。

1.ネットワークの設定

ネットワークの設定ファイル(/etc/network/interfaces)を編集し、DRBDで通信を行うためのNIC(eth1)について設定を追加する。

●/etc/network/interfaces(例)

auto lo
iface lo inet loopback

auto eth1
iface eth1 inet static
        address  IPアドレス(DRBD用)
        netmask  255.255.255.0

auto vmbr0
iface vmbr0 inet static
        address IPアドレス(通常利用)
        netmask XXX.XXX.XXX.XXX
        gateway XXX.XXX.XXX.XXX
        bridge_ports eth0
        bridge_stp off
        bridge_fd 0

 

設定完了後、念のため再起動しておくと良いだろう。

 

2.ディスクフォーマット&DRBDの導入

次に、各クラスタでディスク(/dev/sdb)のフォーマットを行う。
事前にpartedを導入しておくと良いだろう。
サブスクリプションは契約していないため、このままだとdebianのapt-getも出来ないので不要なファイルを削除してパッケージをインストールする。

rm /etc/apt/sources.list.d/pve-enterprise.list
echo "deb http://download.proxmox.com/debian jessie pve-no-subscription" &gt;&gt; /etc/apt/sources.list
apt-get update
apt-get install parted thin-provisioning-tools 

 

次に、partedコマンドでディスクのフォーマットを行う。

parted /dev/sdb mktable gpt
parted /dev/sdb mkpart drbd 1 100%
parted /dev/sdb p
root@BS-PUB-MICROSERVER-01:~# parted /dev/sdb mktable gpt
Warning: The existing disk label on /dev/sdb will be destroyed and all data on this disk will be lost. Do you want
to continue?
Yes/No? Y
Information: You may need to update /etc/fstab.

root@BS-PUB-MICROSERVER-01:~# parted /dev/sdb mkpart drbd 1 100%
Information: You may need to update /etc/fstab.

root@BS-PUB-MICROSERVER-01:~# parted /dev/sdb p
Model: ATA Hitachi HCS54505 (scsi)
Disk /dev/sdb: 500GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name  Flags
 1      1049kB  500GB  500GB               drbd

 

ディスクフォーマット後、LVMの設定を実施する。

vgcreate drbdpool /dev/sdb1
lvcreate -L 450G -n drbdthinpool -T drbdpool
root@BS-PUB-MICROSERVER-02:~# vgcreate drbdpool /dev/sdb1
  Physical volume "/dev/sdb1" successfully created
  Volume group "drbdpool" successfully created
root@BS-PUB-MICROSERVER-02:~# lvcreate -L 450G -n drbdthinpool -T drbdpool
  Logical volume "drbdthinpool" created.

次に、drbdmanage をapt-getから導入する。

apt-get install drbdmanage

 

互いにssh接続を行う必要があるので、DRBD用のNICがknown_hostsに登録されるよう事前にログインしあっておく。
(事前にクラスタ化しているようであれば、鍵認証はすでに出来てるはずである)

クラスタのウチの1台(ここでは、「BS-PUB-MICROSERVER-01」)で、以下のコマンドを実行する。

drbdmanage init -q 自身のDRBD用IPアドレス
root@BS-PUB-MICROSERVER-01:~# drbdmanage init -q 10.50.10.101
  Failed to find logical volume "drbdpool/.drbdctrl_0"
  Failed to find logical volume "drbdpool/.drbdctrl_1"
  Logical volume ".drbdctrl_0" created.
  Logical volume ".drbdctrl_1" created.
md_offset 4190208
al_offset 4157440
bm_offset 4153344

Found some data

 ==> This might destroy existing data! <== Do you want to proceed? *** confirmation forced via --force option *** initializing activity log NOT initializing bitmap Writing meta data... New drbd meta data block successfully created. md_offset 4190208 al_offset 4157440 bm_offset 4153344 Found some data  ==> This might destroy existing data! <==

Do you want to proceed?
*** confirmation forced via --force option ***
initializing activity log
NOT initializing bitmap
Writing meta data...
New drbd meta data block successfully created.
empty drbdmanage control volume initialized.
empty drbdmanage control volume initialized.
Operation completed successfully

 

次に、以下のコマンドでもう一台のノード(ここでは、「BS-PUB-MICROSERVER-02」)を追加する。

drbdmanage add-node -q ノード名 IPアドレス
root@BS-PUB-MICROSERVER-01:~# drbdmanage add-node -q BS-PUB-MICROSERVER-02 10.50.10.102
Operation completed successfully
Operation completed successfully

Executing join command using ssh.
IMPORTANT: The output you see comes from BS-PUB-MICROSERVER-02
IMPORTANT: Your input is executed on BS-PUB-MICROSERVER-02
  Logical volume ".drbdctrl_0" successfully removed
  Logical volume ".drbdctrl_1" successfully removed
  Logical volume ".drbdctrl_0" created.
  Logical volume ".drbdctrl_1" created.
You want me to create a v09 style flexible-size internal meta data block.
There appears to be a v09 flexible-size internal meta data block
already in place on /dev/drbdpool/.drbdctrl_0 at byte offset 4190208

Do you really want to overwrite the existing meta-data?
*** confirmation forced via --force option ***

Do you want to proceed?
*** confirmation forced via --force option ***
NOT initializing bitmap
md_offset 4190208
al_offset 4157440
bm_offset 4153344

Found some data

 ==> This might destroy existing data! <== initializing activity log Writing meta data... New drbd meta data block successfully created. You want me to create a v09 style flexible-size internal meta data block. There appears to be a v09 flexible-size internal meta data block already in place on /dev/drbdpool/.drbdctrl_1 at byte offset 4190208 Do you really want to overwrite the existing meta-data? *** confirmation forced via --force option *** Do you want to proceed? *** confirmation forced via --force option *** NOT initializing bitmap md_offset 4190208 al_offset 4157440 bm_offset 4153344 Found some data  ==> This might destroy existing data! <==
initializing activity log
Writing meta data...
New drbd meta data block successfully created.
Operation completed successfully

※もしこの時、「Error: Operation not allowed on satellite node」というエラーが出た場合は、こちらに記述されている対応を行うと良いだろう。

 

最後に、以下のコマンドを実行しノードの一覧を確認する。

drbdmanage list-nodes
root@BS-PUB-MICROSERVER-01:~# drbdmanage list-nodes
+------------------------------------------------------------------------------------------------------------+
| Name                  | Pool Size | Pool Free |                                                    | State |
|------------------------------------------------------------------------------------------------------------|
| BS-PUB-MICROSERVER-01 |    460800 |    458910 |                                                    |    ok |
| BS-PUB-MICROSERVER-02 |    460800 |    458910 |                                                    |    ok |
+------------------------------------------------------------------------------------------------------------+

 

ちゃんとPool Size/Pool Freeの値が表示されている事が確認出来たら、「/etc/pve/storage.cfg」の内容を以下のように追記する。
なお、「redundancy」には同期するノード数を記述する(物理ノード数より大きい値は入れられないので注意)。

dir: local
        path /var/lib/vz
        content vztmpl,images,iso,rootdir
        maxfiles 0

drbd: drbd1
        content images,rootdir
        redundancy 2

 

3.ライブマイグレーションの実施

DRBDの設定ができたら、後はWEBコンソール上で仮想マシンを作成するだけだ。
※当たり前の話だが、ディスクの作成先はDRBDのディスク上となる。また、ディスクフォーマットは「raw」一択なので注意。

で、作成後に対象のノードを右クリック、[マイグレート]を選択。

20160327_000006

 

後は「オンライン」にチェックが入った状態でマイグレートを実施するだけだ。

20160327_000007

20160327_000008

 

確かに、別途ストレージ機器を用意しなくてもライブマイグレーションを行える事が確認できた。
ディスク容量はその分食うけど、仮想ホストノード機器のみでマイグレーションを行えるのはいいね。

 

すべてわかる仮想化大全 2016(日経BP Next ICT選書) すべてわかる仮想化大全 2016(日経BP Next ICT選書)

Linux/UNIXのコンソールで平均・中央値・最大・最小を求める

$
0
0

仕事で見積もりを作る際、ファイルサイズの統計(平均や中央値)が欲しかったので少し調べてみた。
で、いくつかの手法があることがわかったので、備忘として残しておく。

1.awkで計算する

まずは、一番準備が手軽なawkでの計算方法。
基本、どのUNIX系OSでも入ってるので、とりあえずはすぐ使えるだろう(Macとかの場合はgawkにしたほうが良いけど)。

以下、ざっと項目別に出すコマンドを書いてみる。

 

●平均

awk '{x++;sum+=$1}END {print sum/x}'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | awk '{x++;sum+=$1}END {print sum/x}'
2645.75

 

●中央値(ソートが必要)

awk '{v[i++]=$1;}END {x=int((i+1)/2); if(x&amp;amp;amp;lt;(i+1)/2) print (v[x-1]+v[x])/2; else print v[x-1];}'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" |sort -n | awk '{v[i++]=$1;}END {x=int((i+1)/2); if(x<(i+1)/2) print (v[x-1]+v[x])/2; else print v[x-1];}'
352.5

 

●最頻値

awk '{col=$1}{{b[col]++}if(b[col]&amp;gt;hf){hf=b[col]}}END{for (i in b){if(b[i]==hf){(k=="")? (k=i):(k=k FS i)}{FS=","}}print&amp;nbsp;k}'
[root@BS-PUB-CENT7-01 ~]# find /root ! -size 0 -type f -printf "%s\n" | awk '{col=$1}{{b[col]++}if(b[col]>hf){hf=b[col]}}END{for (i in b){if(b[i]==hf){(k=="") ? (k=i):(k=k FS i)}{FS=","}}print  k}'
184

 

●最大・最小値

awk '{if(min==""){min=max=$1};if($1&amp;amp;amp;gt;max){max=$1};if($1&amp;amp;amp;lt; min){min=$1};} END {print min, max}'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | awk '{if(min==""){min=max=$1};if($1>max){max=$1};if($1< min){min=$1};} END {print "min:"min,"\nmax:" max}'
min:0
max:57828

 

2.stコマンドで取得する

以前、こちらでも紹介したstコマンドを用いた場合。
統計用のコマンドなので、awkよりは簡単に結果を求める事が出来る。

●基本

st ファイルPATH
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | st
N       min     max     sum     mean    stddev
60      0       57828   158745  2645.75 8064.21

 

●平均

st --mean ファイルPATH
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | st --mean
2645.75

 

●中央値

st --median ファイルPATH
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | st --median
352.5

 

●最大・最小値

st --max --min ファイルPATH
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | st --max --min
min     max
0       57828

3.R言語を用いる

統計用の言語であるR言語でターミナル上で処理を行う事で、統計情報を取得する。

●サマリー

コマンド | xargs Rscript -e 'summary(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find -type f -printf "%s\n" | xargs Rscript -e 'summary(as.numeric(commandArgs(TRUE)))'
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.
    0.0   100.8   352.5  2879.0  1405.0 57830.0

 

●平均

コマンド | xargs Rscript -e 'mean(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | xargs Rscript -e 'mean(as.numeric(commandArgs(TRUE)))'
[1] 2832.197

 

●中央値

コマンド | xargs Rscript -e 'median(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find /root -type f -printf "%s\n" | xargs Rscript -e 'median(as.numeric(commandArgs(TRUE)))'
[1] 342

 

●最頻値

コマンド | xargs Rscript -e 'names(which.max(table(as.numeric(commandArgs(TRUE)))))'
[root@BS-PUB-CENT7-01 ~]# find -type f ! -size 0 -printf "%s\n" | xargs Rscript -e 'names(which.max(table(as.numeric(commandArgs(TRUE)))))'
[1] "184"

 

●最大値

コマンド | xargs Rscript -e 'max(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find -type f ! -size 0 -printf "%s\n" | xargs Rscript -e 'max(as.numeric(commandArgs(TRUE)))'
[1] 57828

 

●最小値

コマンド | xargs Rscript -e 'min(as.numeric(commandArgs(TRUE)))'
[root@BS-PUB-CENT7-01 ~]# find -type f ! -size 0 -printf "%s\n" | xargs Rscript -e 'min(as.numeric(commandArgs(TRUE)))'
[1] 18

 

今後使うことがあるかわからないけど、とりあえずまた何かあったら役に立つだろう。

 

Think Bayes ―プログラマのためのベイズ統計入門 Think Bayes ―プログラマのためのベイズ統計入門

Linuxで動作中のプロセスの出力内容をみる

$
0
0

Linuxで、裏で実行中のプロセスが出力している内容を確認したい場合、「/proc」配下を直接みることで確認出来るようなのでやってみた。
以下のようにコマンドを実行することで、そのプロセスの標準出力をみることができる。

tail -F /proc/プロセス番号/fd/1

各プロセスで0~3とあるのだが、この「1」というのは標準出力のこと。
つまり、当然その他の番号も「0:stdin」「1:stdout」「2:stderr」と紐付いている。

残念ながら他のコンソールで直接見ているプロセスの出力は見れなかったのだが、なんとなく裏で動いているプロセスの動作が気になった時などに使えるのではなかろうか。

新しいLinuxの教科書 新しいLinuxの教科書

pingで成功・失敗時に任意の音で通知させる

$
0
0

仕事でpingを打ちっぱなしにしてた時、音で成功した祭は通知させられないかなぁ、と思ったので、やれないか調べてみた。
まぁ、そもそもビープ音でよければもう用意はされているのだけど、イヤホンで音楽聴いてたりしていると聞き逃すので、もうちょっと主張の激しい音で知らせて欲しい。

という訳で、pingで疎通に成功・失敗した際に任意の音で通知をさせるようにしてみよう。
前提として、ssh越しのサウンドのやり取りというのが設定とか面倒そうなので、この方法はssh接続先のサーバで実行するのではなく、あくまでも手元のMacやLinux上からとなる。

任意の文字列を読み上げさせる場合

pingの疎通成功・失敗時に任意の文字列を読み上げさせる場合は、Macであればsayコマンド、Linuxであればaplay+text2waveを用いると良いだろう。
以下の例では、疎通成功時は「OK」、疎通失敗時は「NG」と読み上げさせる。

●Macの場合

while true; do ping -c 1 対象ホスト > /dev/null && say "OK" || say "NG" ; sleep 1; done

 

●Linuxの場合

while true; do ping -c 1 対象ホスト > /dev/null && (echo "OK" | text2wave | aplay) || (echo "NG" | text2wave | aplay) ; sleep 1; done

任意のオーディオファイルを読み上げさせる場合

任意のオーディオファイルを読み上げさせる場合は、どちらもmplayerを使えば良いだろう。

while true; do ping -c 1 対象ホスト > /dev/null && mplayer オーディオファイルPATH || mplayer オーディオファイルPATH ; sleep 1; done

 

Linuxシステム[実践]入門 (Software Design plus) Linuxシステム[実践]入門 (Software Design plus)

bashでcp/mvコマンドでファイルのバックアップ・移動をする際に便利な引数の指定方法

$
0
0

bashでcp/mvコマンドを使用してファイルのバックアップとか移動をする際、出来ればキー入力は少ない方がいいわけで。
長いファイル名とか、PATH名だととても面倒だったりする。

というわけで、個人的にキー入力を短縮するためにやっている指定方法について、記述しておく。

1.同一PATH内にバックアップ・移動(ファイル名変更)する場合

同一PATH内に、末尾に文字列を追加してバックアップ・移動をする場合は、以下のようにコマンドを実行することでキー入力を減らすことが出来る。

cp 対象PAHT{,文字列}
[root@BS-PUB-CENT7-01 ~]# ls -la /tmp/test*
-rw-r--r--. 1 root root 0  4月  1 08:40 /tmp/test
[root@BS-PUB-CENT7-01 ~]# cp /tmp/test{,.bk}
[root@BS-PUB-CENT7-01 ~]# ls -la /tmp/test*
-rw-r--r--. 1 root root 0  4月  1 08:40 /tmp/test
-rw-r--r--. 1 root root 0  4月  1 08:40 /tmp/test.bk

2.違うPATHにバックアップ・移動、ファイル名の一部をリネームする場合

違うPATHにバックアップ・移動したり、ファイル名の一部をリネームしてコピーしたりする場合は、2つ目の引数に「!#$」を指定し、それを加工して上げれば良い。
この「!#$」は、ひとつ前の引数の値を指定する事が出来るので、これを指定し、さらにbash変数として置換することで簡単に別PATHにコピー・移動させたりすることができる。

以下の例では、「/tmp/test」を「/opt/test」としてコピーしている。

cp /tmp/test !#$:s/tmp/opt
[root@BS-PUB-CENT7-01 ~]# ls -la {/opt,/tmp}/test
ls: /opt/test にアクセスできません: そのようなファイルやディレクトリはありません
-rw-r--r--. 1 root root 0  4月  1 08:40 /tmp/test
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# cp /tmp/test !#$:s/tmp/opt
cp /tmp/test /opt/test
[root@BS-PUB-CENT7-01 ~]# ls -la {/opt,/tmp}/test
-rw-r--r--. 1 root root 0  4月  1 08:45 /opt/test
-rw-r--r--. 1 root root 0  4月  1 08:40 /tmp/test

 

UNIXシェルスクリプトコマンドブック 第3版 (コマンドブックシリーズ) UNIXシェルスクリプトコマンドブック 第3版 (コマンドブックシリーズ)

Linuxコンソール上で金相場・為替レートを調べる

$
0
0

投資の自己責任論が叫ばれる昨今、金相場や為替レートは気になるもの。
それがたとえコンソールにアクセスしている真っ最中でも。

というわけで、コンソール操作中でも金相場や為替レートを調べる方法を紹介。
まぁ、以下のコマンドを実行するだけだ。

ドルレート

wget https://rate-exchange-1.appspot.com/currency\?from=USD\&to=JPY -q -O - | jq -r ".from,.rate,.to" | tr '\n' ',' | awk -F, '{print "1 "$1"="$2" "$3}'

 

金相場

wget https://rate-exchange-1.appspot.com/currency\?from=XAU\&to=JPY -q -O - | jq -r ".from,.rate,.to" | tr '\n' ',' | awk -F, '{print "1 "$1"="$2" "$3}'

[root@BS-PUB-CENT7-01 ~]# wget https://rate-exchange-1.appspot.com/currency\?from=USD\&to=JPY -q -O - | jq -r ".from,.rate,.to" | tr '\n' ',' | awk -F, '{print "1 "$1"="$2" "$3}'
1 USD=111.727 JPY
[root@BS-PUB-CENT7-01 ~]#
[root@BS-PUB-CENT7-01 ~]# wget https://rate-exchange-1.appspot.com/currency\?from=XAU\&to=JPY -q -O - | jq -r ".from,.rate,.to" | tr '\n' ',' | awk -F, '{print "1 "$1"="$2" "$3}'
1 XAU=136579.05 JPY

 

欲しいレートがある場合は、URLのfromとtoをその都度書き換えて上げれば良い。

 

通貨経済学入門【第2版】 通貨経済学入門【第2版】

 

Viewing all 743 articles
Browse latest View live